summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.github/PULL_REQUEST_TEMPLATE.md12
-rw-r--r--.mailmap3
-rw-r--r--AUTHORS.md9
-rw-r--r--DONORS.md152
-rw-r--r--SConstruct11
-rw-r--r--core/SCsub4
-rw-r--r--core/config/project_settings.cpp5
-rw-r--r--core/core_bind.cpp50
-rw-r--r--core/core_bind.h5
-rw-r--r--core/core_constants.cpp42
-rw-r--r--core/core_constants.h2
-rw-r--r--core/debugger/remote_debugger.cpp10
-rw-r--r--core/debugger/remote_debugger.h3
-rw-r--r--core/extension/extension_api_dump.cpp42
-rw-r--r--core/extension/gdnative_interface.h2
-rw-r--r--core/extension/native_extension.cpp7
-rw-r--r--core/input/input.cpp1
-rw-r--r--core/io/file_access_pack.h4
-rw-r--r--core/io/image.cpp52
-rw-r--r--core/io/image.h15
-rw-r--r--core/io/resource.cpp116
-rw-r--r--core/io/resource.h4
-rw-r--r--core/io/resource_format_binary.cpp10
-rw-r--r--core/io/resource_loader.cpp51
-rw-r--r--core/math/a_star.cpp170
-rw-r--r--core/math/a_star.h122
-rw-r--r--core/math/audio_frame.h2
-rw-r--r--core/math/basis.cpp12
-rw-r--r--core/math/basis.h24
-rw-r--r--core/math/delaunay_3d.h2
-rw-r--r--core/math/expression.cpp38
-rw-r--r--core/math/expression.h4
-rw-r--r--core/math/math_funcs.h21
-rw-r--r--core/math/triangle_mesh.cpp16
-rw-r--r--core/math/triangle_mesh.h7
-rw-r--r--core/math/vector2.cpp7
-rw-r--r--core/math/vector2.h24
-rw-r--r--core/math/vector3.cpp8
-rw-r--r--core/math/vector3.h25
-rw-r--r--core/multiplayer/multiplayer_peer.cpp11
-rw-r--r--core/object/callable_method_pointer.cpp4
-rw-r--r--core/object/class_db.cpp64
-rw-r--r--core/object/class_db.h6
-rw-r--r--core/object/method_bind.cpp25
-rw-r--r--core/object/method_bind.h14
-rw-r--r--core/object/object.cpp204
-rw-r--r--core/object/object.h86
-rw-r--r--core/object/script_language.cpp5
-rw-r--r--core/object/script_language.h1
-rw-r--r--core/os/keyboard.cpp38
-rw-r--r--core/os/keyboard.h115
-rw-r--r--core/os/os.cpp19
-rw-r--r--core/os/os.h2
-rw-r--r--core/string/print_string.cpp95
-rw-r--r--core/string/print_string.h12
-rw-r--r--core/templates/hash_map.h33
-rw-r--r--core/templates/hash_set.h33
-rw-r--r--core/templates/hashfuncs.h224
-rw-r--r--core/templates/local_vector.h9
-rw-r--r--core/variant/array.cpp10
-rw-r--r--core/variant/callable.cpp3
-rw-r--r--core/variant/callable.h1
-rw-r--r--core/variant/dictionary.cpp8
-rw-r--r--core/variant/variant.cpp165
-rw-r--r--core/variant/variant.h6
-rw-r--r--core/variant/variant_call.cpp144
-rw-r--r--core/variant/variant_internal.h7
-rw-r--r--core/variant/variant_utility.cpp81
-rw-r--r--doc/classes/@GlobalScope.xml254
-rw-r--r--doc/classes/AStar2D.xml10
-rw-r--r--doc/classes/AStar3D.xml4
-rw-r--r--doc/classes/AnimationNodeStateMachineTransition.xml6
-rw-r--r--doc/classes/AnimationTree.xml3
-rw-r--r--doc/classes/Array.xml10
-rw-r--r--doc/classes/AudioEffectAmplify.xml2
-rw-r--r--doc/classes/AudioEffectBandLimitFilter.xml1
-rw-r--r--doc/classes/AudioEffectBandPassFilter.xml1
-rw-r--r--doc/classes/AudioEffectCapture.xml1
-rw-r--r--doc/classes/AudioEffectChorus.xml1
-rw-r--r--doc/classes/AudioEffectCompressor.xml1
-rw-r--r--doc/classes/AudioEffectDelay.xml1
-rw-r--r--doc/classes/AudioEffectEQ.xml1
-rw-r--r--doc/classes/AudioEffectEQ10.xml1
-rw-r--r--doc/classes/AudioEffectEQ21.xml1
-rw-r--r--doc/classes/AudioEffectEQ6.xml3
-rw-r--r--doc/classes/AudioEffectHighPassFilter.xml3
-rw-r--r--doc/classes/AudioEffectHighShelfFilter.xml3
-rw-r--r--doc/classes/AudioEffectLimiter.xml1
-rw-r--r--doc/classes/AudioEffectLowPassFilter.xml3
-rw-r--r--doc/classes/AudioEffectLowShelfFilter.xml3
-rw-r--r--doc/classes/AudioEffectNotchFilter.xml1
-rw-r--r--doc/classes/AudioEffectPanner.xml3
-rw-r--r--doc/classes/AudioEffectPhaser.xml3
-rw-r--r--doc/classes/AudioEffectPitchShift.xml3
-rw-r--r--doc/classes/AudioEffectReverb.xml4
-rw-r--r--doc/classes/AudioEffectStereoEnhance.xml1
-rw-r--r--doc/classes/AudioStreamPlayer2D.xml3
-rw-r--r--doc/classes/AudioStreamPlayer3D.xml3
-rw-r--r--doc/classes/Button.xml4
-rw-r--r--doc/classes/ColorPickerButton.xml2
-rw-r--r--doc/classes/Control.xml16
-rw-r--r--doc/classes/EditorProperty.xml2
-rw-r--r--doc/classes/Expression.xml1
-rw-r--r--doc/classes/HTTPRequest.xml30
-rw-r--r--doc/classes/Image.xml45
-rw-r--r--doc/classes/ItemList.xml5
-rw-r--r--doc/classes/Label.xml56
-rw-r--r--doc/classes/Label3D.xml16
-rw-r--r--doc/classes/MovieWriter.xml76
-rw-r--r--doc/classes/NavigationAgent2D.xml23
-rw-r--r--doc/classes/NavigationAgent3D.xml23
-rw-r--r--doc/classes/NavigationMesh.xml6
-rw-r--r--doc/classes/NavigationMeshGenerator.xml1
-rw-r--r--doc/classes/NavigationRegion2D.xml19
-rw-r--r--doc/classes/NavigationRegion3D.xml19
-rw-r--r--doc/classes/NavigationServer2D.xml26
-rw-r--r--doc/classes/NavigationServer3D.xml26
-rw-r--r--doc/classes/Node.xml10
-rw-r--r--doc/classes/Node2D.xml1
-rw-r--r--doc/classes/Node3D.xml1
-rw-r--r--doc/classes/ORMMaterial3D.xml3
-rw-r--r--doc/classes/OS.xml10
-rw-r--r--doc/classes/PopupMenu.xml1
-rw-r--r--doc/classes/ProjectSettings.xml39
-rw-r--r--doc/classes/RichTextLabel.xml35
-rw-r--r--doc/classes/ScrollContainer.xml2
-rw-r--r--doc/classes/StandardMaterial3D.xml4
-rw-r--r--doc/classes/TextEdit.xml3
-rw-r--r--doc/classes/TextLine.xml21
-rw-r--r--doc/classes/TextParagraph.xml21
-rw-r--r--doc/classes/TextServer.xml44
-rw-r--r--doc/classes/Thread.xml7
-rw-r--r--doc/classes/TileData.xml3
-rw-r--r--doc/classes/Transform2D.xml1
-rw-r--r--doc/classes/Tree.xml1
-rw-r--r--doc/classes/Tween.xml40
-rw-r--r--doc/classes/Vector2.xml10
-rw-r--r--doc/classes/Vector3.xml10
-rw-r--r--doc/classes/VisualShader.xml4
-rw-r--r--doc/classes/Window.xml120
-rw-r--r--doc/classes/World3D.xml2
-rwxr-xr-xdoc/tools/make_rst.py6
-rw-r--r--doc/translations/ar.po1460
-rw-r--r--doc/translations/ca.po1445
-rw-r--r--doc/translations/classes.pot1445
-rw-r--r--doc/translations/cs.po1464
-rw-r--r--doc/translations/de.po1541
-rw-r--r--doc/translations/el.po1460
-rw-r--r--doc/translations/es.po1581
-rw-r--r--doc/translations/fa.po1453
-rw-r--r--doc/translations/fi.po1460
-rw-r--r--doc/translations/fil.po1445
-rw-r--r--doc/translations/fr.po4474
-rw-r--r--doc/translations/gl.po1445
-rw-r--r--doc/translations/hi.po1445
-rw-r--r--doc/translations/hu.po1454
-rw-r--r--doc/translations/id.po1459
-rw-r--r--doc/translations/is.po1445
-rw-r--r--doc/translations/it.po1469
-rw-r--r--doc/translations/ja.po1500
-rw-r--r--doc/translations/ko.po1577
-rw-r--r--doc/translations/lt.po1445
-rw-r--r--doc/translations/lv.po1445
-rw-r--r--doc/translations/mr.po1445
-rw-r--r--doc/translations/nb.po1445
-rw-r--r--doc/translations/ne.po1445
-rw-r--r--doc/translations/nl.po1445
-rw-r--r--doc/translations/pl.po1467
-rw-r--r--doc/translations/pt.po1515
-rw-r--r--doc/translations/pt_BR.po1581
-rw-r--r--doc/translations/ro.po1446
-rw-r--r--doc/translations/ru.po1482
-rw-r--r--doc/translations/sk.po1445
-rw-r--r--doc/translations/sr_Cyrl.po1445
-rw-r--r--doc/translations/sv.po1445
-rw-r--r--doc/translations/th.po1459
-rw-r--r--doc/translations/tl.po1454
-rw-r--r--doc/translations/tr.po1484
-rw-r--r--doc/translations/uk.po1466
-rw-r--r--doc/translations/vi.po1462
-rw-r--r--doc/translations/zh_CN.po9974
-rw-r--r--doc/translations/zh_TW.po1460
-rw-r--r--drivers/gles3/SCsub1
-rw-r--r--drivers/gles3/environment/SCsub5
-rw-r--r--drivers/gles3/environment/gi.cpp140
-rw-r--r--drivers/gles3/environment/gi.h99
-rw-r--r--drivers/gles3/rasterizer_gles3.cpp3
-rw-r--r--drivers/gles3/rasterizer_gles3.h3
-rw-r--r--drivers/gles3/rasterizer_scene_gles3.cpp2
-rw-r--r--drivers/gles3/rasterizer_scene_gles3.h1
-rw-r--r--drivers/gles3/rasterizer_storage_gles3.cpp100
-rw-r--r--drivers/gles3/rasterizer_storage_gles3.h41
-rw-r--r--drivers/vulkan/rendering_device_vulkan.cpp139
-rw-r--r--drivers/vulkan/rendering_device_vulkan.h38
-rw-r--r--drivers/vulkan/vulkan_context.cpp33
-rw-r--r--drivers/vulkan/vulkan_context.h8
-rw-r--r--editor/animation_bezier_editor.cpp17
-rw-r--r--editor/animation_track_editor.cpp2
-rw-r--r--editor/code_editor.cpp1
-rw-r--r--editor/create_dialog.cpp7
-rw-r--r--editor/create_dialog.h1
-rw-r--r--editor/debugger/debug_adapter/debug_adapter_types.h2
-rw-r--r--editor/debugger/editor_debugger_node.h2
-rw-r--r--editor/debugger/editor_performance_profiler.cpp2
-rw-r--r--editor/debugger/script_editor_debugger.cpp2
-rw-r--r--editor/dependency_editor.cpp2
-rw-r--r--editor/editor_about.cpp2
-rw-r--r--editor/editor_file_dialog.cpp2
-rw-r--r--editor/editor_file_system.cpp9
-rw-r--r--editor/editor_folding.cpp5
-rw-r--r--editor/editor_inspector.cpp21
-rw-r--r--editor/editor_inspector.h7
-rw-r--r--editor/editor_log.cpp22
-rw-r--r--editor/editor_log.h1
-rw-r--r--editor/editor_node.cpp184
-rw-r--r--editor/editor_node.h6
-rw-r--r--editor/editor_properties.cpp100
-rw-r--r--editor/editor_properties.h10
-rw-r--r--editor/editor_property_name_processor.cpp1
-rw-r--r--editor/editor_run.cpp12
-rw-r--r--editor/editor_run.h2
-rw-r--r--editor/editor_settings.cpp1
-rw-r--r--editor/editor_spin_slider.cpp2
-rw-r--r--editor/editor_themes.cpp18
-rw-r--r--editor/filesystem_dock.cpp60
-rw-r--r--editor/filesystem_dock.h4
-rw-r--r--editor/groups_editor.cpp2
-rw-r--r--editor/icons/BaseButton.svg1
-rw-r--r--editor/icons/GeometryInstance3D.svg1
-rw-r--r--editor/icons/ImporterMeshInstance3D.svg1
-rw-r--r--editor/icons/MainMovieWrite.svg1
-rw-r--r--editor/icons/MainMovieWriteEnabled.svg1
-rw-r--r--editor/icons/MultiplayerSpawner.svg1
-rw-r--r--editor/icons/MultiplayerSynchronizer.svg1
-rw-r--r--editor/icons/NavigationAgent2D.svg2
-rw-r--r--editor/icons/NavigationAgent3D.svg2
-rw-r--r--editor/icons/NavigationObstacle2D.svg2
-rw-r--r--editor/icons/NavigationObstacle3D.svg2
-rw-r--r--editor/icons/Range.svg1
-rw-r--r--editor/icons/SkeletonIK3D.svg2
-rw-r--r--editor/icons/VideoStreamPlayer.svg (renamed from editor/icons/VideoPlayer.svg)0
-rw-r--r--editor/icons/VisualInstance3D.svg1
-rw-r--r--editor/import/dynamic_font_import_settings.cpp10
-rw-r--r--editor/import/resource_importer_scene.cpp4
-rw-r--r--editor/import/resource_importer_texture_atlas.cpp6
-rw-r--r--editor/import_dock.cpp2
-rw-r--r--editor/node_dock.cpp2
-rw-r--r--editor/plugins/animation_library_editor.cpp6
-rw-r--r--editor/plugins/animation_library_editor.h2
-rw-r--r--editor/plugins/animation_player_editor_plugin.cpp2
-rw-r--r--editor/plugins/animation_state_machine_editor.cpp6
-rw-r--r--editor/plugins/canvas_item_editor_plugin.cpp2
-rw-r--r--editor/plugins/control_editor_plugin.cpp4
-rw-r--r--editor/plugins/input_event_editor_plugin.cpp2
-rw-r--r--editor/plugins/mesh_instance_3d_editor_plugin.cpp4
-rw-r--r--editor/plugins/node_3d_editor_plugin.cpp12
-rw-r--r--editor/plugins/script_editor_plugin.cpp2
-rw-r--r--editor/plugins/script_text_editor.cpp2
-rw-r--r--editor/plugins/shader_editor_plugin.cpp210
-rw-r--r--editor/plugins/shader_editor_plugin.h42
-rw-r--r--editor/plugins/theme_editor_plugin.cpp6
-rw-r--r--editor/plugins/tiles/tile_data_editors.cpp6
-rw-r--r--editor/plugins/tiles/tile_map_editor.cpp5
-rw-r--r--editor/plugins/tiles/tile_set_atlas_source_editor.cpp17
-rw-r--r--editor/plugins/visual_shader_editor_plugin.cpp67
-rw-r--r--editor/plugins/visual_shader_editor_plugin.h17
-rw-r--r--editor/project_converter_3_to_4.cpp118
-rw-r--r--editor/project_manager.cpp53
-rw-r--r--editor/project_manager.h5
-rw-r--r--editor/project_settings_editor.cpp4
-rw-r--r--editor/property_editor.cpp4
-rw-r--r--editor/quick_open.cpp2
-rw-r--r--editor/rename_dialog.cpp2
-rw-r--r--editor/scene_create_dialog.cpp312
-rw-r--r--editor/scene_create_dialog.h104
-rw-r--r--editor/scene_tree_dock.cpp8
-rw-r--r--editor/scene_tree_editor.cpp3
-rw-r--r--editor/script_create_dialog.cpp8
-rw-r--r--editor/shader_create_dialog.cpp5
-rw-r--r--editor/translations/af.po594
-rw-r--r--editor/translations/ar.po1580
-rw-r--r--editor/translations/az.po564
-rw-r--r--editor/translations/bg.po623
-rw-r--r--editor/translations/bn.po701
-rw-r--r--editor/translations/br.po552
-rw-r--r--editor/translations/ca.po982
-rw-r--r--editor/translations/cs.po626
-rw-r--r--editor/translations/da.po607
-rw-r--r--editor/translations/de.po750
-rw-r--r--editor/translations/editor.pot533
-rw-r--r--editor/translations/el.po620
-rw-r--r--editor/translations/en_Shaw.po549
-rw-r--r--editor/translations/eo.po615
-rw-r--r--editor/translations/es.po821
-rw-r--r--editor/translations/es_AR.po1178
-rw-r--r--editor/translations/et.po597
-rw-r--r--editor/translations/eu.po593
-rw-r--r--editor/translations/fa.po616
-rw-r--r--editor/translations/fi.po648
-rw-r--r--editor/translations/fil.po561
-rw-r--r--editor/translations/fr.po732
-rw-r--r--editor/translations/ga.po560
-rw-r--r--editor/translations/gl.po617
-rw-r--r--editor/translations/he.po612
-rw-r--r--editor/translations/hi.po614
-rw-r--r--editor/translations/hr.po589
-rw-r--r--editor/translations/hu.po647
-rw-r--r--editor/translations/id.po628
-rw-r--r--editor/translations/is.po562
-rw-r--r--editor/translations/it.po861
-rw-r--r--editor/translations/ja.po630
-rw-r--r--editor/translations/ka.po578
-rw-r--r--editor/translations/km.po544
-rw-r--r--editor/translations/ko.po723
-rw-r--r--editor/translations/lt.po598
-rw-r--r--editor/translations/lv.po612
-rw-r--r--editor/translations/mk.po620
-rw-r--r--editor/translations/ml.po552
-rw-r--r--editor/translations/mr.po558
-rw-r--r--editor/translations/ms.po1104
-rw-r--r--editor/translations/nb.po602
-rw-r--r--editor/translations/nl.po618
-rw-r--r--editor/translations/pl.po646
-rw-r--r--editor/translations/pr.po584
-rw-r--r--editor/translations/pt.po2203
-rw-r--r--editor/translations/pt_BR.po883
-rw-r--r--editor/translations/ro.po612
-rw-r--r--editor/translations/ru.po769
-rw-r--r--editor/translations/si.po555
-rw-r--r--editor/translations/sk.po612
-rw-r--r--editor/translations/sl.po644
-rw-r--r--editor/translations/sq.po607
-rw-r--r--editor/translations/sr_Cyrl.po618
-rw-r--r--editor/translations/sr_Latn.po566
-rw-r--r--editor/translations/sv.po610
-rw-r--r--editor/translations/te.po543
-rw-r--r--editor/translations/th.po619
-rw-r--r--editor/translations/tl.po616
-rw-r--r--editor/translations/tr.po1072
-rw-r--r--editor/translations/uk.po787
-rw-r--r--editor/translations/ur_PK.po583
-rw-r--r--editor/translations/vi.po620
-rw-r--r--editor/translations/zh_CN.po727
-rw-r--r--editor/translations/zh_HK.po596
-rw-r--r--editor/translations/zh_TW.po628
-rw-r--r--main/main.cpp65
-rwxr-xr-xmisc/scripts/check_ci_log.py2
-rwxr-xr-x[-rw-r--r--]misc/scripts/codespell.sh0
-rw-r--r--modules/csg/csg.h6
-rw-r--r--modules/csg/csg_shape.h6
-rw-r--r--modules/gdscript/editor/script_templates/EditorScenePostImport/basic_import_script.gd4
-rw-r--r--modules/gdscript/gdscript.cpp22
-rw-r--r--modules/gdscript/gdscript.h3
-rw-r--r--modules/gdscript/gdscript_analyzer.cpp5
-rw-r--r--modules/gdscript/gdscript_byte_codegen.cpp12
-rw-r--r--modules/gdscript/gdscript_byte_codegen.h2
-rw-r--r--modules/gdscript/gdscript_codegen.h2
-rw-r--r--modules/gdscript/gdscript_compiler.cpp99
-rw-r--r--modules/gdscript/gdscript_disassembler.cpp8
-rw-r--r--modules/gdscript/gdscript_editor.cpp5
-rw-r--r--modules/gdscript/gdscript_function.h1
-rw-r--r--modules/gdscript/gdscript_lambda_callable.cpp6
-rw-r--r--modules/gdscript/gdscript_parser.cpp26
-rw-r--r--modules/gdscript/gdscript_rpc_callable.cpp2
-rw-r--r--modules/gdscript/gdscript_vm.cpp22
-rw-r--r--modules/gdscript/tests/gdscript_test_runner.cpp2
-rw-r--r--modules/gdscript/tests/gdscript_test_runner.h2
-rw-r--r--modules/gdscript/tests/scripts/runtime/features/chain_assignment_works.gd19
-rw-r--r--modules/gdscript/tests/scripts/runtime/features/chain_assignment_works.out7
-rw-r--r--modules/gridmap/doc_classes/GridMap.xml17
-rw-r--r--modules/gridmap/editor/grid_map_editor_plugin.cpp2
-rw-r--r--modules/gridmap/grid_map.cpp23
-rw-r--r--modules/gridmap/grid_map.h5
-rw-r--r--modules/jpg/SCsub1
-rw-r--r--modules/jpg/image_loader_jpegd.cpp56
-rw-r--r--modules/lightmapper_rd/lightmapper_rd.cpp45
-rw-r--r--modules/lightmapper_rd/lightmapper_rd.h39
-rw-r--r--modules/lightmapper_rd/lm_common_inc.glsl3
-rw-r--r--modules/lightmapper_rd/lm_compute.glsl86
-rw-r--r--modules/minimp3/audio_stream_mp3.cpp4
-rw-r--r--modules/mono/class_db_api_json.cpp2
-rw-r--r--modules/mono/editor/GodotTools/GodotTools.IdeMessaging.CLI/GodotTools.IdeMessaging.CLI.csproj2
-rw-r--r--modules/mono/editor/GodotTools/GodotTools.IdeMessaging/GodotTools.IdeMessaging.csproj2
-rw-r--r--modules/mono/editor/GodotTools/GodotTools/Build/MSBuildPanel.cs2
-rw-r--r--modules/mono/editor/GodotTools/GodotTools/GodotTools.csproj2
-rw-r--r--modules/mono/editor/bindings_generator.cpp12
-rw-r--r--modules/mono/editor/bindings_generator.h4
-rw-r--r--modules/mono/editor/script_templates/EditorScenePostImport/basic_import_script.cs8
-rw-r--r--modules/mono/editor/script_templates/EditorScenePostImport/no_comments.cs4
-rw-r--r--modules/mono/glue/GodotSharp/GodotSharp/Core/GD.cs24
-rw-r--r--modules/mono/glue/GodotSharp/GodotSharp/Core/Mathf.cs25
-rw-r--r--modules/mono/glue/gd_glue.cpp22
-rw-r--r--modules/mono/managed_callable.cpp3
-rw-r--r--modules/mono/signal_awaiter_utils.cpp4
-rw-r--r--modules/mono/utils/string_utils.cpp2
-rw-r--r--modules/navigation/godot_navigation_server.cpp31
-rw-r--r--modules/navigation/godot_navigation_server.h6
-rw-r--r--modules/navigation/nav_map.cpp2
-rw-r--r--modules/navigation/navigation_mesh_generator.cpp22
-rw-r--r--modules/openxr/SCsub2
-rw-r--r--modules/openxr/action_map/openxr_action_map.cpp65
-rw-r--r--modules/openxr/action_map/openxr_defs.cpp158
-rw-r--r--modules/openxr/action_map/openxr_defs.h21
-rw-r--r--modules/openxr/extensions/openxr_htc_vive_tracker_extension.cpp67
-rw-r--r--modules/openxr/extensions/openxr_htc_vive_tracker_extension.h52
-rw-r--r--modules/openxr/openxr_api.cpp7
-rw-r--r--modules/openxr/openxr_interface.cpp19
-rw-r--r--modules/raycast/raycast_occlusion_cull.h4
-rw-r--r--modules/text_server_adv/text_server_adv.cpp2
-rw-r--r--modules/text_server_fb/text_server_fb.cpp2
-rw-r--r--modules/tinyexr/image_saver_tinyexr.cpp33
-rw-r--r--modules/tinyexr/image_saver_tinyexr.h1
-rw-r--r--modules/tinyexr/register_types.cpp1
-rw-r--r--modules/visual_script/visual_script.cpp6
-rw-r--r--modules/visual_script/visual_script.h4
-rw-r--r--modules/visual_script/visual_script_flow_control.cpp2
-rw-r--r--modules/visual_script/visual_script_func_nodes.cpp12
-rw-r--r--modules/vorbis/audio_stream_ogg_vorbis.cpp17
-rw-r--r--modules/webp/image_loader_webp.cpp181
-rw-r--r--modules/webp/image_loader_webp.h4
-rw-r--r--modules/webp/register_types.cpp10
-rw-r--r--modules/webp/resource_saver_webp.cpp90
-rw-r--r--modules/webp/resource_saver_webp.h49
-rw-r--r--modules/webp/webp_common.cpp190
-rw-r--r--modules/webp/webp_common.h45
-rw-r--r--platform/android/android_input_handler.cpp10
-rw-r--r--platform/android/android_input_handler.h2
-rw-r--r--platform/android/detect.py332
-rw-r--r--platform/android/export/export_plugin.cpp2
-rw-r--r--platform/android/java/app/AndroidManifest.xml1
-rw-r--r--platform/android/java/app/config.gradle4
-rw-r--r--platform/android/java/editor/src/main/AndroidManifest.xml2
-rw-r--r--platform/android/java/lib/AndroidManifest.xml2
-rw-r--r--platform/android/java/lib/src/org/godotengine/godot/GodotLib.java5
-rw-r--r--platform/android/java/lib/src/org/godotengine/godot/input/GodotGestureHandler.java9
-rw-r--r--platform/android/java/lib/src/org/godotengine/godot/input/GodotInputHandler.java3
-rw-r--r--platform/android/java_godot_lib_jni.cpp9
-rw-r--r--platform/android/java_godot_lib_jni.h1
-rw-r--r--platform/linuxbsd/key_mapping_x11.cpp42
-rw-r--r--platform/osx/key_mapping_osx.mm29
-rw-r--r--platform/windows/key_mapping_windows.cpp17
-rw-r--r--scene/2d/audio_stream_player_2d.cpp24
-rw-r--r--scene/2d/audio_stream_player_2d.h6
-rw-r--r--scene/2d/cpu_particles_2d.cpp2
-rw-r--r--scene/2d/light_2d.cpp5
-rw-r--r--scene/2d/light_2d.h2
-rw-r--r--scene/2d/navigation_agent_2d.cpp31
-rw-r--r--scene/2d/navigation_agent_2d.h9
-rw-r--r--scene/2d/navigation_region_2d.cpp21
-rw-r--r--scene/2d/navigation_region_2d.h3
-rw-r--r--scene/2d/node_2d.cpp2
-rw-r--r--scene/2d/tile_map.cpp4
-rw-r--r--scene/3d/audio_stream_player_3d.cpp22
-rw-r--r--scene/3d/audio_stream_player_3d.h6
-rw-r--r--scene/3d/label_3d.cpp19
-rw-r--r--scene/3d/label_3d.h14
-rw-r--r--scene/3d/light_3d.cpp7
-rw-r--r--scene/3d/light_3d.h2
-rw-r--r--scene/3d/lightmap_gi.cpp12
-rw-r--r--scene/3d/lightmap_gi.h10
-rw-r--r--scene/3d/lightmapper.h6
-rw-r--r--scene/3d/navigation_agent_3d.cpp31
-rw-r--r--scene/3d/navigation_agent_3d.h9
-rw-r--r--scene/3d/navigation_region_3d.cpp21
-rw-r--r--scene/3d/navigation_region_3d.h3
-rw-r--r--scene/3d/node_3d.cpp150
-rw-r--r--scene/3d/node_3d.h30
-rw-r--r--scene/3d/path_3d.cpp14
-rw-r--r--scene/3d/path_3d.h2
-rw-r--r--scene/3d/skeleton_3d.cpp12
-rw-r--r--scene/3d/visual_instance_3d.cpp2
-rw-r--r--scene/3d/visual_instance_3d.h2
-rw-r--r--scene/animation/animation_blend_tree.cpp4
-rw-r--r--scene/animation/animation_node_state_machine.cpp88
-rw-r--r--scene/animation/animation_node_state_machine.h18
-rw-r--r--scene/animation/animation_player.cpp11
-rw-r--r--scene/animation/animation_player.h4
-rw-r--r--scene/animation/animation_tree.cpp74
-rw-r--r--scene/animation/animation_tree.h5
-rw-r--r--scene/debugger/scene_debugger.cpp4
-rw-r--r--scene/gui/button.cpp10
-rw-r--r--scene/gui/button.h6
-rw-r--r--scene/gui/control.cpp31
-rw-r--r--scene/gui/dialogs.cpp8
-rw-r--r--scene/gui/file_dialog.cpp46
-rw-r--r--scene/gui/gradient_edit.cpp6
-rw-r--r--scene/gui/gradient_edit.h4
-rw-r--r--scene/gui/item_list.cpp4
-rw-r--r--scene/gui/item_list.h6
-rw-r--r--scene/gui/label.cpp79
-rw-r--r--scene/gui/label.h46
-rw-r--r--scene/gui/progress_bar.cpp4
-rw-r--r--scene/gui/rich_text_label.cpp41
-rw-r--r--scene/gui/rich_text_label.h29
-rw-r--r--scene/gui/spin_box.cpp2
-rw-r--r--scene/gui/tab_container.cpp1
-rw-r--r--scene/gui/text_edit.cpp14
-rw-r--r--scene/gui/text_edit.h4
-rw-r--r--scene/gui/video_stream_player.cpp34
-rw-r--r--scene/gui/video_stream_player.h1
-rw-r--r--scene/main/canvas_item.cpp4
-rw-r--r--scene/main/node.cpp27
-rw-r--r--scene/main/node.h2
-rw-r--r--scene/main/scene_tree.cpp2
-rw-r--r--scene/main/window.cpp45
-rw-r--r--scene/resources/animation.cpp17
-rw-r--r--scene/resources/canvas_item_material.h2
-rw-r--r--scene/resources/concave_polygon_shape_3d.h4
-rw-r--r--scene/resources/curve.cpp110
-rw-r--r--scene/resources/curve.h13
-rw-r--r--scene/resources/default_theme/default_theme.cpp1
-rw-r--r--scene/resources/font.cpp8
-rw-r--r--scene/resources/gradient.h12
-rw-r--r--scene/resources/importer_mesh.cpp8
-rw-r--r--scene/resources/material.cpp2
-rw-r--r--scene/resources/mesh.cpp11
-rw-r--r--scene/resources/navigation_mesh.cpp24
-rw-r--r--scene/resources/navigation_mesh.h8
-rw-r--r--scene/resources/packed_scene.cpp72
-rw-r--r--scene/resources/packed_scene.h14
-rw-r--r--scene/resources/particles_material.cpp6
-rw-r--r--scene/resources/particles_material.h2
-rw-r--r--scene/resources/primitive_meshes.cpp11
-rw-r--r--scene/resources/resource_format_text.cpp79
-rw-r--r--scene/resources/scene_replication_config.cpp12
-rw-r--r--scene/resources/surface_tool.cpp3
-rw-r--r--scene/resources/text_line.cpp26
-rw-r--r--scene/resources/text_line.h17
-rw-r--r--scene/resources/text_paragraph.cpp24
-rw-r--r--scene/resources/text_paragraph.h17
-rw-r--r--scene/resources/tile_set.cpp6
-rw-r--r--scene/resources/tile_set.h8
-rw-r--r--scene/resources/visual_shader.cpp84
-rw-r--r--scene/resources/visual_shader.h10
-rw-r--r--servers/SCsub1
-rw-r--r--servers/audio/audio_driver_dummy.cpp67
-rw-r--r--servers/audio/audio_driver_dummy.h22
-rw-r--r--servers/audio/audio_stream.cpp29
-rw-r--r--servers/audio/effects/audio_effect_record.cpp4
-rw-r--r--servers/audio/effects/audio_effect_record.h1
-rw-r--r--servers/movie_writer/SCsub5
-rw-r--r--servers/movie_writer/movie_writer.cpp308
-rw-r--r--servers/movie_writer/movie_writer.h123
-rw-r--r--servers/movie_writer/movie_writer_mjpeg.cpp263
-rw-r--r--servers/movie_writer/movie_writer_mjpeg.h73
-rw-r--r--servers/navigation_server_2d.cpp12
-rw-r--r--servers/navigation_server_2d.h6
-rw-r--r--servers/navigation_server_3d.cpp5
-rw-r--r--servers/navigation_server_3d.h6
-rw-r--r--servers/physics_2d/godot_area_2d.h6
-rw-r--r--servers/physics_3d/godot_area_3d.h6
-rw-r--r--servers/register_server_types.cpp15
-rw-r--r--servers/rendering/dummy/environment/gi.h85
-rw-r--r--servers/rendering/dummy/rasterizer_dummy.h3
-rw-r--r--servers/rendering/dummy/rasterizer_storage_dummy.h41
-rw-r--r--servers/rendering/environment/renderer_gi.h85
-rw-r--r--servers/rendering/renderer_compositor.h2
-rw-r--r--servers/rendering/renderer_rd/SCsub1
-rw-r--r--servers/rendering/renderer_rd/effects/copy_effects.cpp402
-rw-r--r--servers/rendering/renderer_rd/effects/copy_effects.h96
-rw-r--r--servers/rendering/renderer_rd/effects/resolve.cpp130
-rw-r--r--servers/rendering/renderer_rd/effects/resolve.h74
-rw-r--r--servers/rendering/renderer_rd/effects_rd.cpp363
-rw-r--r--servers/rendering/renderer_rd/effects_rd.h112
-rw-r--r--servers/rendering/renderer_rd/environment/SCsub5
-rw-r--r--servers/rendering/renderer_rd/environment/gi.cpp (renamed from servers/rendering/renderer_rd/renderer_scene_gi_rd.cpp)1336
-rw-r--r--servers/rendering/renderer_rd/environment/gi.h (renamed from servers/rendering/renderer_rd/renderer_scene_gi_rd.h)201
-rw-r--r--servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.cpp209
-rw-r--r--servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.h18
-rw-r--r--servers/rendering/renderer_rd/forward_clustered/scene_shader_forward_clustered.cpp14
-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.cpp8
-rw-r--r--servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.h3
-rw-r--r--servers/rendering/renderer_rd/renderer_compositor_rd.h14
-rw-r--r--servers/rendering/renderer_rd/renderer_scene_render_rd.cpp94
-rw-r--r--servers/rendering/renderer_rd/renderer_scene_render_rd.h23
-rw-r--r--servers/rendering/renderer_rd/renderer_scene_sky_rd.cpp52
-rw-r--r--servers/rendering/renderer_rd/renderer_storage_rd.cpp344
-rw-r--r--servers/rendering/renderer_rd/renderer_storage_rd.h86
-rw-r--r--servers/rendering/renderer_rd/shaders/SCsub1
-rw-r--r--servers/rendering/renderer_rd/shaders/effects/cube_to_dp.glsl (renamed from servers/rendering/renderer_rd/shaders/cube_to_dp.glsl)0
-rw-r--r--servers/rendering/renderer_rd/shaders/effects/cubemap_downsampler.glsl (renamed from servers/rendering/renderer_rd/shaders/cubemap_downsampler.glsl)0
-rw-r--r--servers/rendering/renderer_rd/shaders/effects/cubemap_downsampler_inc.glsl (renamed from servers/rendering/renderer_rd/shaders/cubemap_downsampler_inc.glsl)0
-rw-r--r--servers/rendering/renderer_rd/shaders/effects/cubemap_downsampler_raster.glsl (renamed from servers/rendering/renderer_rd/shaders/cubemap_downsampler_raster.glsl)0
-rw-r--r--servers/rendering/renderer_rd/shaders/effects/cubemap_filter.glsl (renamed from servers/rendering/renderer_rd/shaders/cubemap_filter.glsl)0
-rw-r--r--servers/rendering/renderer_rd/shaders/effects/cubemap_filter_raster.glsl (renamed from servers/rendering/renderer_rd/shaders/cubemap_filter_raster.glsl)0
-rw-r--r--servers/rendering/renderer_rd/shaders/effects/cubemap_roughness.glsl (renamed from servers/rendering/renderer_rd/shaders/cubemap_roughness.glsl)0
-rw-r--r--servers/rendering/renderer_rd/shaders/effects/cubemap_roughness_inc.glsl (renamed from servers/rendering/renderer_rd/shaders/cubemap_roughness_inc.glsl)0
-rw-r--r--servers/rendering/renderer_rd/shaders/effects/cubemap_roughness_raster.glsl (renamed from servers/rendering/renderer_rd/shaders/cubemap_roughness_raster.glsl)0
-rw-r--r--servers/rendering/renderer_rd/shaders/effects/resolve.glsl (renamed from servers/rendering/renderer_rd/shaders/resolve.glsl)0
-rw-r--r--servers/rendering/renderer_rd/shaders/effects/tonemap.glsl9
-rw-r--r--servers/rendering/renderer_rd/shaders/environment/SCsub17
-rw-r--r--servers/rendering/renderer_rd/shaders/environment/gi.glsl (renamed from servers/rendering/renderer_rd/shaders/gi.glsl)44
-rw-r--r--servers/rendering/renderer_rd/shaders/environment/sdfgi_debug.glsl (renamed from servers/rendering/renderer_rd/shaders/sdfgi_debug.glsl)10
-rw-r--r--servers/rendering/renderer_rd/shaders/environment/sdfgi_debug_probes.glsl (renamed from servers/rendering/renderer_rd/shaders/sdfgi_debug_probes.glsl)48
-rw-r--r--servers/rendering/renderer_rd/shaders/environment/sdfgi_direct_light.glsl (renamed from servers/rendering/renderer_rd/shaders/sdfgi_direct_light.glsl)0
-rw-r--r--servers/rendering/renderer_rd/shaders/environment/sdfgi_integrate.glsl (renamed from servers/rendering/renderer_rd/shaders/sdfgi_integrate.glsl)0
-rw-r--r--servers/rendering/renderer_rd/shaders/environment/sdfgi_preprocess.glsl (renamed from servers/rendering/renderer_rd/shaders/sdfgi_preprocess.glsl)0
-rw-r--r--servers/rendering/renderer_rd/shaders/environment/voxel_gi.glsl (renamed from servers/rendering/renderer_rd/shaders/voxel_gi.glsl)0
-rw-r--r--servers/rendering/renderer_rd/shaders/environment/voxel_gi_debug.glsl (renamed from servers/rendering/renderer_rd/shaders/voxel_gi_debug.glsl)0
-rw-r--r--servers/rendering/renderer_rd/shaders/environment/voxel_gi_sdf.glsl (renamed from servers/rendering/renderer_rd/shaders/voxel_gi_sdf.glsl)0
-rw-r--r--servers/rendering/renderer_rd/shaders/scene_forward_clustered.glsl28
-rw-r--r--servers/rendering/renderer_rd/shaders/scene_forward_clustered_inc.glsl11
-rw-r--r--servers/rendering/renderer_rd/shaders/scene_forward_lights_inc.glsl4
-rw-r--r--servers/rendering/renderer_rd/shaders/scene_forward_mobile.glsl13
-rw-r--r--servers/rendering/renderer_rd/shaders/scene_forward_mobile_inc.glsl1
-rw-r--r--servers/rendering/renderer_rd/shaders/volumetric_fog_process.glsl1
-rw-r--r--servers/rendering/renderer_rd/uniform_set_cache_rd.h18
-rw-r--r--servers/rendering/renderer_scene_cull.cpp4
-rw-r--r--servers/rendering/renderer_scene_cull.h2
-rw-r--r--servers/rendering/renderer_storage.h42
-rw-r--r--servers/rendering/renderer_viewport.cpp14
-rw-r--r--servers/rendering/renderer_viewport.h2
-rw-r--r--servers/rendering/rendering_server_default.cpp8
-rw-r--r--servers/rendering/rendering_server_default.h6
-rw-r--r--servers/rendering/rendering_server_globals.cpp1
-rw-r--r--servers/rendering/rendering_server_globals.h2
-rw-r--r--servers/rendering_server.cpp8
-rw-r--r--servers/rendering_server.h2
-rw-r--r--servers/text_server.cpp24
-rw-r--r--servers/text_server.h28
-rw-r--r--tests/core/math/test_astar.h8
-rw-r--r--tests/core/object/test_class_db.h6
-rw-r--r--thirdparty/README.md9
-rw-r--r--thirdparty/doctest/doctest.h2109
-rw-r--r--thirdparty/etcpak/ProcessRGB.cpp8
-rw-r--r--thirdparty/jpeg-compressor/jpge.cpp1076
-rw-r--r--thirdparty/jpeg-compressor/jpge.h174
-rw-r--r--thirdparty/openxr/include/openxr/openxr.h595
-rw-r--r--thirdparty/openxr/include/openxr/openxr_platform.h19
-rw-r--r--thirdparty/openxr/include/openxr/openxr_reflection.h357
-rw-r--r--thirdparty/openxr/src/common/xr_linear.h6
-rw-r--r--thirdparty/openxr/src/xr_generated_dispatch_table.c30
-rw-r--r--thirdparty/openxr/src/xr_generated_dispatch_table.h30
-rw-r--r--thirdparty/zstd/common/bitstream.h33
-rw-r--r--thirdparty/zstd/common/compiler.h132
-rw-r--r--thirdparty/zstd/common/entropy_common.c16
-rw-r--r--thirdparty/zstd/common/error_private.h79
-rw-r--r--thirdparty/zstd/common/fse.h3
-rw-r--r--thirdparty/zstd/common/fse_decompress.c2
-rw-r--r--thirdparty/zstd/common/huf.h46
-rw-r--r--thirdparty/zstd/common/mem.h18
-rw-r--r--thirdparty/zstd/common/pool.c17
-rw-r--r--thirdparty/zstd/common/pool.h4
-rw-r--r--thirdparty/zstd/common/portability_macros.h137
-rw-r--r--thirdparty/zstd/common/xxhash.c810
-rw-r--r--thirdparty/zstd/common/xxhash.h5733
-rw-r--r--thirdparty/zstd/common/zstd_internal.h187
-rw-r--r--thirdparty/zstd/common/zstd_trace.h15
-rw-r--r--thirdparty/zstd/compress/clevels.h134
-rw-r--r--thirdparty/zstd/compress/fse_compress.c90
-rw-r--r--thirdparty/zstd/compress/huf_compress.c641
-rw-r--r--thirdparty/zstd/compress/zstd_compress.c680
-rw-r--r--thirdparty/zstd/compress/zstd_compress_internal.h257
-rw-r--r--thirdparty/zstd/compress/zstd_compress_literals.c7
-rw-r--r--thirdparty/zstd/compress/zstd_compress_literals.h4
-rw-r--r--thirdparty/zstd/compress/zstd_compress_sequences.c29
-rw-r--r--thirdparty/zstd/compress/zstd_compress_superblock.c7
-rw-r--r--thirdparty/zstd/compress/zstd_cwksp.h68
-rw-r--r--thirdparty/zstd/compress/zstd_double_fast.c415
-rw-r--r--thirdparty/zstd/compress/zstd_fast.c439
-rw-r--r--thirdparty/zstd/compress/zstd_lazy.c1044
-rw-r--r--thirdparty/zstd/compress/zstd_ldm.c16
-rw-r--r--thirdparty/zstd/compress/zstd_ldm.h2
-rw-r--r--thirdparty/zstd/compress/zstd_ldm_geartab.h5
-rw-r--r--thirdparty/zstd/compress/zstd_opt.c397
-rw-r--r--thirdparty/zstd/compress/zstdmt_compress.c114
-rw-r--r--thirdparty/zstd/compress/zstdmt_compress.h5
-rw-r--r--thirdparty/zstd/decompress/huf_decompress.c916
-rw-r--r--thirdparty/zstd/decompress/huf_decompress_amd64.S585
-rw-r--r--thirdparty/zstd/decompress/zstd_decompress.c107
-rw-r--r--thirdparty/zstd/decompress/zstd_decompress_block.c964
-rw-r--r--thirdparty/zstd/decompress/zstd_decompress_block.h10
-rw-r--r--thirdparty/zstd/decompress/zstd_decompress_internal.h37
-rw-r--r--thirdparty/zstd/zstd.h315
675 files changed, 116450 insertions, 33566 deletions
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index 332ed2b72f..8dc712c78d 100644
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -1,11 +1,7 @@
<!--
-Pull requests should always be made for the `master` branch first, as that's
-where development happens and the source of all future stable release branches.
+Please target the `master` branch in priority.
+PRs can target `3.x` if the same change was done in `master`, or is not relevant there.
-Relevant fixes are cherry-picked for stable branches as needed.
-
-Do not create a pull request for stable branches unless the change is already
-available in the `master` branch and it cannot be easily cherry-picked.
-Alternatively, if the change is only relevant for that branch (e.g. rendering
-fixes for the 3.2 branch).
+Relevant fixes are cherry-picked for stable branches as needed by maintainers.
+You can mention in the description if the change is compatible with `3.x`.
-->
diff --git a/.mailmap b/.mailmap
index b316b1e808..779c58460e 100644
--- a/.mailmap
+++ b/.mailmap
@@ -36,6 +36,7 @@ Eveline Jarosz <marqin.pl@gmail.com> <marqin.pl+git@gmail.com>
Fabian <supagu@gmail.com>
Ferenc Arn <tagcup@yahoo.com>
Ferenc Arn <tagcup@yahoo.com> <tagcup@users.noreply.github.com>
+FireForge <67974470+fire-forge@users.noreply.github.com> <isaacr.7.2005@gmail.com>
foxydevloper <12120644+foxydevloper@users.noreply.github.com>
Fredia Huya-Kouadio <fhuyakou@gmail.com>
Fredia Huya-Kouadio <fhuyakou@gmail.com> <fhuya@google.com>
@@ -56,6 +57,7 @@ Ignacio Etcheverry <ignalfonsore@gmail.com> <neikeq@users.noreply.github.com>
Ilaria Cislaghi <cislaghi.ilaria@gmail.com>
Ilaria Cislaghi <cislaghi.ilaria@gmail.com> <ilaria.cislaghi@simedis.com>
Indah Sylvia <ISylvox@yahoo.com>
+iwek <miwanczuk7@gmail.com>
J08nY <johny@neuromancer.sk> <jancar.jj@gmail.com>
J08nY <johny@neuromancer.sk> <J08nY@users.noreply.github.com>
Jake Young <young9003@gmail.com>
@@ -143,6 +145,7 @@ Wilhem Barbier <nounoursheureux@openmailbox.org> <schtroumps31@gmail.com>
Will Nations <willnationsdev@gmail.com>
yg2f <yoann@terminajones.com>
Yuri Sizov <yuris@humnom.net> <pycbouh@users.noreply.github.com>
+Yuri Sizov <yuris@humnom.net> <yaschik4ilicha@gmail.com>
Zae <zaevi@live.com>
Zak Stam <zakscomputers@hotmail.com>
Zher Huei Lee <lee.zh.92@gmail.com>
diff --git a/AUTHORS.md b/AUTHORS.md
index 4d52e3d1e0..36be7c4501 100644
--- a/AUTHORS.md
+++ b/AUTHORS.md
@@ -60,6 +60,7 @@ name is available.
Carter Anderson (cart)
Chris Bradfield (cbscribe)
Clay John (clayjohn)
+ ConteZero
Dana Olson (adolson)
Daniel J. Ramirez (djrm)
Daniel Rakos (aqnuep)
@@ -86,6 +87,7 @@ name is available.
Fabio Alessandrelli (Faless)
fabriceci
Ferenc Arn (tagcup)
+ FireForge (fire-forge)
follower
foxydevloper
François Belair (Razoric480)
@@ -109,6 +111,7 @@ name is available.
Ian Bishop (ianb96)
Ibrahn Sahir (ibrahn)
Ignacio Etcheverry (neikeq)
+ Igor Kordiukiewicz (IgorKordiukiewicz)
Ilaria Cislaghi (QbieShay)
Indah Sylvia (ISylvox)
J08nY
@@ -150,6 +153,7 @@ name is available.
Mariano Javier Suligoy (MarianoGnu)
Mario Schlack (hurikhan)
Marios Staikopoulos (marstaik)
+ Mark Riedesel (klowner)
Markus Sauermann (Sauermann)
Martin Capitanio (capnm)
Martin Liška (marxin)
@@ -163,6 +167,7 @@ name is available.
merumelu
Meru Patel (Janglee123)
Michael Alexsander (YeldhamDev)
+ Michał Iwańczuk (iwek7)
MichiRecRoom (LikeLakers2)
Morris "Tabor" Arroad (mortarroad)
mrezai
@@ -182,6 +187,7 @@ name is available.
Paul Batty (Paulb23)
Paul Joannon (paulloz)
Paul Trojahn (ptrojahn)
+ Paweł Fertyk (pfertyk)
Pawel Kowal (pkowal1982)
Pawel Lampe (Scony)
Pedro J. Estébanez (RandomShaper)
@@ -212,6 +218,7 @@ name is available.
Shiqing (kawa-yoiko)
Silc 'Tokage' Renew (TokageItLab)
Simon Wenner (swenner)
+ smix8
Stijn Hinlopen (hinlopen)
Swarnim Arun (minraws)
TC (floppyhammer)
@@ -234,7 +241,7 @@ name is available.
Xavier Cho (mysticfall)
yg2f (SuperUserNameMan)
Yuri Rubinsky (Chaosus)
- Yuri Sizov (pycbouh)
+ Yuri Sizov (YuriSizov)
Zae Chao (zaevi)
Zak Stam (zaksnet)
Zher Huei Lee (leezh)
diff --git a/DONORS.md b/DONORS.md
index 36fa7a39ad..a41cb750bd 100644
--- a/DONORS.md
+++ b/DONORS.md
@@ -26,7 +26,6 @@ generous deed immortalized in the next stable release of Godot Engine.
## Bronze sponsors
- Ben Nolan
Brandon Lamb
Bri
Daniel Kaplan
@@ -36,6 +35,7 @@ generous deed immortalized in the next stable release of Godot Engine.
Kitcat490
Kyle Szklenski
Maxim Karsten
+ Nik Rudenko
Moonwards <https://www.moonwards.com>
TrampolineTales <https://trampolinetales.com>
@@ -46,6 +46,7 @@ generous deed immortalized in the next stable release of Godot Engine.
Andrew Bowen
Andrew Dunai
anti666
+ Chris Bolton
Christian Baune
Christopher Montesano
Christopher Shifflett
@@ -53,15 +54,10 @@ generous deed immortalized in the next stable release of Godot Engine.
Darrin Massena
David Mydlarz
Digital Grows
- Dov Zimring
Edward Flick
Florian Neumann
- Gamechuck
GameDev.net
Hein-Pieter van Braam
- Jasper Brooks
- Jeffery Chiu
- John G Gentzel
Jonah Stich
Justin Arnold
Justo Delgado Baudí
@@ -105,10 +101,9 @@ generous deed immortalized in the next stable release of Godot Engine.
David Snopek
Ed Morley
First Last
- Florian Rämisch
Hunter Jones
Jacobus Dens
- Jakub Grzesik
+ Jasper Brooks
Javier Roman
Joan Fons
Jonathan Wright
@@ -131,6 +126,7 @@ generous deed immortalized in the next stable release of Godot Engine.
Sarksus
Sean
Sergey
+ Sergio Airaldi
Sofox
Stephan Kessler
Stephen Molyneaux
@@ -150,7 +146,6 @@ generous deed immortalized in the next stable release of Godot Engine.
Alexander J Maynard
Alex Khayrullin
alice gambrell
- Amar Šahinović
Andrew Cunningham
Andrew Farr
Andriy
@@ -158,8 +153,12 @@ generous deed immortalized in the next stable release of Godot Engine.
Antoni Batchelli
Arch Henderson III
Arthur S. Muszynski
+ BasicIncomePlz
+ BoomHorseHat
+ BrizzleBrip
c64cosmin
Cameron Connolly
+ Charles Gray
Charlie Whitfield
Chase Taranto
Chris Petrich
@@ -171,20 +170,15 @@ generous deed immortalized in the next stable release of Godot Engine.
CzechBlueBear
D
DagobertDick
- dan didenko
- Daniel
Daniel Hernández Alcojor
Daniel Tebbutt
Darrian Little
- Daylon
+ David Thomason
+ Daylon J Williams
Dennis Belfrage
- Dev To be curious
- Dima Fedotov
+ Dev To Be curious
Dimitri Nüscheler
- Dmitriy Khudorozhkov
Donn Eddy
- Douglas Hammond
- EerieExpanse
Eric Brand
Eugenio Hugo Salgüero Jáñez
EXUREI
@@ -192,13 +186,12 @@ generous deed immortalized in the next stable release of Godot Engine.
flesk
foxydevloper
Fransiska
- Freeman
Gabrielius Vaiškūnas
Gary Hulst
- gavlig
Geoffroy Warin
- GGGames.org
+ George Venizelos
gisora
+ GlassBrick
GrayDwarf
Guilherme Felipe de C. G. da Silva
Harry Tumber
@@ -208,6 +201,7 @@ generous deed immortalized in the next stable release of Godot Engine.
Hu Hund
Hunter Barabas
HurrieCrane
+ Jaap Marsman
Jamal Bencharki
James Couzens
Jan Sælid
@@ -219,6 +213,7 @@ generous deed immortalized in the next stable release of Godot Engine.
Jesús Chicharro
Joel Fivat
Johnathan Kupferer
+ John Stinson
Josef Stumpfegger
Jose Malheiro
Jose Manuel Muñoz Perez
@@ -227,23 +222,21 @@ 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
+ Kevan
+ Khora
kickmaniac
kinfox
- Kos
Lakshaya Goel
Laszlo Kiss
leetNightshade
Leo Fidel R Liban
Liam Smyth
LoparPanda
- LordZaruflex
Luca Vazzano
- Luke
MadScientistCarl
Marcus Dobler
Marcus Richter
@@ -254,7 +247,6 @@ generous deed immortalized in the next stable release of Godot Engine.
Martin Soucek
matt
Matt Greene
- Matthew Hall
Max Kryschi
medecau
Michael Dürwald
@@ -271,11 +263,13 @@ generous deed immortalized in the next stable release of Godot Engine.
Paul Hocker
Paul Von Zimmerman
Pavel Kotlyar
+ Pedro
Pete Goodwin
Peter Richmond
Petr Malac
PhaineOfCatz
Rafał Michno
+ RAMupgrade
Raymond Harris
Reilt
Rene Tailleur
@@ -283,7 +277,6 @@ generous deed immortalized in the next stable release of Godot Engine.
Rickard Hermanson
Rob
Robert McDermott
- Robert Willes
Rob McInroy
Rocknight Studios
RodZilla
@@ -293,6 +286,7 @@ generous deed immortalized in the next stable release of Godot Engine.
Russ
Ryan Breaker
Ryan Heath
+ Ryan Miller
Ryan Scott
Samuel Hummerstone
Samuel Judd
@@ -307,17 +301,15 @@ generous deed immortalized in the next stable release of Godot Engine.
Song Junwoo
spacechase0
Stephan Hennion
- Stephen Brown
Steven Landow
Stoned Xander
- Super Izzo
- Sven F.
- Thomas Bjarnelöf
+ Teslatech
Thomas Kurz
- Timothy van der Valk
+ Tim Suess
Tobias Bocanegra
Tobias Raggl
Todd Smith
+ Tom Glenn
Tom Wor
Torbulous
toto bibi
@@ -331,7 +323,6 @@ generous deed immortalized in the next stable release of Godot Engine.
xzibiting
Yifan Lai
Yuancheng Zhang
- Ðртём Равбецкий
## Silver donors
@@ -344,12 +335,14 @@ generous deed immortalized in the next stable release of Godot Engine.
Adam McCurdy
Adam N Webber
Adam Smeltzer
- Adam Szymański
Adisibio
+ Adriano Orioli
Adrien de Pierres
Agustinus Arya
Aidan O'Flannagain
Aki Mimoto
+ Akio Yamazaki
+ Alaksandr Suša
Alan Beauchamp
Albert Gyulgazyan
Alberto Salazar Muñoz
@@ -362,9 +355,9 @@ generous deed immortalized in the next stable release of Godot Engine.
Alex Chan
Alex Clavelle
alex raeside
- Alex (Well Done Games)
Allan Davis
Allen Schade
+ Amar Šahinović
Andre Altmueller
Andre Stackhouse
Andrew Groot
@@ -377,13 +370,15 @@ generous deed immortalized in the next stable release of Godot Engine.
Antti Vesanen
Arch Toasty
Arda Erol
- Arseniy M
Arthur Brainville
Arturo Rosales
Ashley Claymore
Aubrey Falconer
Auré Franky
aurelien condomines
+ Austin Finlinson
+ Austin Miller
+ Azar Gurbanov
AzulCrescent
b110110
Balázs Batári
@@ -398,14 +393,10 @@ generous deed immortalized in the next stable release of Godot Engine.
bitbrain
Bjarne Voigtländer
Black Block
- Blair Allen
Blunderjack
- Bobby CC Wong
Brad Harms
Bram
- Brandon
- Brian Klein
- Brodie Fairhall
+ Brian Ford
Bronson Zgeb
Burney Waring
Caleb Gartner
@@ -418,24 +409,26 @@ generous deed immortalized in the next stable release of Godot Engine.
Cassidy James
Chad Steadman
Checkpoint Charlie
- ChrBohm
Chris Jagusch
Chris Langford
+ Chris Ridenour
Christian Mauduit
Christian Winter
Christoffer Dahlblom
Christophe Gagnier
Christopher Chin
Christoph Woinke
- Codecat
+ ClicheChloe
Cody Parker
Conall O
Conner Lane
Corchari
Corey W
Craig Post
+ CT
+ Cullen Canejo
Dakota Watkins
- Daniel Cheney
+ Danielle Cheney
Daren Scot Wilson
Dave Walker
David Baker
@@ -444,7 +437,6 @@ generous deed immortalized in the next stable release of Godot Engine.
David Maziarka
David Rapisarda
Devin Carraway
- Diego Pereira
Dimitri Roche
Dmytro Korchynskyi
Dominik Wetzel
@@ -459,8 +451,10 @@ generous deed immortalized in the next stable release of Godot Engine.
Edward Herbert
Edward Swartz
Egon Elbre
+ eiki kanou
Elgenzay
Elias Nykrem
+ Elijah Anderson
Emerson MX
Ephemeral
Eric Stokes
@@ -477,15 +471,14 @@ generous deed immortalized in the next stable release of Godot Engine.
Felix Bohmann
Fer DC
Filip Lundby
- Francisco Garcia Florez
Frank
- freakazoid
FrostMarble
Game Endeavor
Garett Bass
Gary Thomas
gebba
George Marques
+ Gon Shibayama
Green Fox
Greg Lincoln
Greg Olson
@@ -496,18 +489,15 @@ generous deed immortalized in the next stable release of Godot Engine.
Guldoman
Guo Hongci
gurehamu
- Hal A
Haplo
Hayden Foley
Heribert Hirth
- Hinken
Ian Richard Kunert
Ian Williams
- Idilio Alfaro
IndustrialRobot
- Ivan Nikolaev
+ Inki Crow
iveks
- izzy neuhaus
+ izzy kestrel
Jackson Harmer
Jacob D
Jaguar
@@ -523,7 +513,6 @@ generous deed immortalized in the next stable release of Godot Engine.
Jamie Massey
Janis Skuja
Jan Vetulani
- Japortie
JARKKO PARVIAINEN
Jason Bolton
Jason Evans
@@ -536,10 +525,8 @@ generous deed immortalized in the next stable release of Godot Engine.
Jim Engstrand
Joe Hurdle
Joe Klemmer
- Joel Höglund
John Anders Stav
John Bruce
- John Gabriel
Jonas
Jonas Arndt
Jonas Bernemann
@@ -550,7 +537,6 @@ generous deed immortalized in the next stable release of Godot Engine.
Jonathan Ellis
Jonathan G
Jonathan Turner
- Jon Bonazza
Jon Sully
Jordan West
Jordy Goodridge
@@ -562,22 +548,19 @@ generous deed immortalized in the next stable release of Godot Engine.
Josh Taylor
Joshua Heidrich
Joshua Segall
- jromkjrom
Juanfran
Juan Maggi
Juan Uys
Jueast
Julian le Roux
Julian Murgia
- June Little
Justin Hamilton
- Justin Oaksford
Justin Spedding
KaDokta
Karol Wojtasiuk (Drakonter)
Katsuomi Kobayashi
Keedong Park
- keeganstoybox
+ Keegan Scott
Keinan Powers
Keith Bradner
Kenji Kawabata
@@ -585,43 +568,43 @@ generous deed immortalized in the next stable release of Godot Engine.
Kent Jofur
Kerotasma
Ketafuki
- Kiri Jolly
+ killaQueen
Kodera Software
Kolandrious
Kquona
- Krishna Nadoor
Kristian Nygaard Jensen
- KR McGinley
- Kronarq
KsyTek Games
kycho
Kyle Burnett
Kyle Jacobs
- Kyuppin
La diagonale du poulpe
Lasse le Dous
Laurent CHEA
Laurent Dethoor
Laxman Pradhan
Leland Vakarian
+ Lemin
LEMMiNO
+ Leonardo Baumle
Leonardo Dimano
+ Levi Lindsey
Linus Lind Lundgren
Logan Apple
Ludovic DELVAL
Luigi Renna
Luis Gaemperle
+ Luis M
Luke Kasz
- LunaticInAHat
Major Haul
Malcolm
Marco Lardelli
+ Marcos Heitor Carvalho
+ Markie Music
Mark Jad
Mark Malone
Markus Martin
Markus Michael Egger
Markus Strompen
- Martin FIbik
Martin Holas
Martin Linklater
Martin Liška
@@ -629,33 +612,34 @@ generous deed immortalized in the next stable release of Godot Engine.
Martin Zabinski
Matt Edwards
Matthew Booe
- Matt Sylvia
Maverick
- Max Fiedler
Maxime Blade
Maxime Santerre
Maxwell
+ McStuffings
+ meinkush
Melissa Mears
Merlyn Morgan-Graham
Metal Demon 2000
mhilbrunner
Michael
- Michael Bruce-Lockhart
Michael Haney
Michael Morrison
- Michael Toporkov
Michał Skwarek
Mikael Nordenberg
+ Mikail Freitas
Mikayla
Mike Birkhead
Mike Copley
- Mitchell
+ Miss
Mitchell J. Wagner
+ Mitchell White
MJacred
ModularMind
Molinghu
Molly Jameson
MoltenGears
+ Moowool
moulefrite
MrAZIE
Mrjemandem
@@ -673,46 +657,46 @@ generous deed immortalized in the next stable release of Godot Engine.
Niclas Eriksen
Nicolas Goll-Perrier
Nicolas Rosset
+ Nicolò Brigadoi Calamari
Nils Nordmark
Nima Farid
Noel Billig
Noesis
- oceoh
Okatima
Oleg Reva
Oliver Ambrose
oscar1000108
Oscar Domingo
+ Panagiotis Xynos
Pascal
Patrick Indermühle
Patrickm
Patrick Nafarrete
Patrick Wuttke
- Paul E Hansen
Paul Gieske
Paweł Kowal
PaweÅ‚ Åyczkowski
Peter Höglund
- Philip Cohoe
Philip Ludington (MrPhil)
+ Philip Woods
Pierre Caye
- pingudroid
+ Pixel Archipel
pj
Point08
Preethi Vaidyanathan
PsycHead
+ Puntigames
pwab
- RabidTunes
RackBar Dingum
Rafa Laguna
Raffaele Aramo
Ragnar Pettersson
Rainer Amler
- Rami Hanano
Rammeow
- RAMupgrade
+ Recep Karademir
red1939
Remi Rampin
+ Remtaine
Reneator
René Habermann
Riccardo Marini
@@ -733,20 +717,18 @@ generous deed immortalized in the next stable release of Godot Engine.
Roy Scayged
Ryan Groom
Rykk
- Sam Caulfield
Sam Edson
Sammy Fischer
Sangeeth Pavithran
schroedinger's possum
Scott Longley
- Sean Wall
+ Sean Dee
Sebastian Michailidis
SeongWan Kim
Sessamekesh
SeungJong k
Shaidak
Shane
- Shane Abraham
Shane Sicienski
Shane Spoor
Silver1063
@@ -764,6 +746,7 @@ generous deed immortalized in the next stable release of Godot Engine.
Soheib El-Harrache
Solene Waked
Sophie Winter
+ Squidgy
Squirrel
Stéphane Roussel
Stephen Rice
@@ -791,7 +774,6 @@ generous deed immortalized in the next stable release of Godot Engine.
Tim Gleason
Tim Klein
Timothy B. MacDonald
- tinyBigGAMES LLC
Title Plinsut
TMoney
Toadile
@@ -804,11 +786,12 @@ generous deed immortalized in the next stable release of Godot Engine.
Travis O'Brien
Trent Skinner
tril zerobyte
- Troy Bonneau
Tryggve Sollid
Turgut Temucin
+ tweedle
Tycho
Tyler Stafos
+ Ukko K.
UltyX
Uther
v01tech
@@ -825,15 +808,12 @@ generous deed immortalized in the next stable release of Godot Engine.
William Bodin
William Edwards
William F Siqueira
- William Hogben
Woonki Moon
Wyatt Goodin
- xenomat
yakcyll
Yan Shi
Yegor Smirnov
Zach H.
- Zak Stephens
Zher Huei Lee
蕭惟å…
è²´å® å°æ¾
diff --git a/SConstruct b/SConstruct
index 01f1ae638e..28395227d2 100644
--- a/SConstruct
+++ b/SConstruct
@@ -103,11 +103,13 @@ custom_tools = ["default"]
platform_arg = ARGUMENTS.get("platform", ARGUMENTS.get("p", False))
-if os.name == "nt" and (platform_arg == "android" or methods.get_cmdline_bool("use_mingw", False)):
- custom_tools = ["mingw"]
+if platform_arg == "android":
+ custom_tools = ["clang", "clang++", "as", "ar", "link"]
elif platform_arg == "javascript":
# Use generic POSIX build toolchain for Emscripten.
custom_tools = ["cc", "c++", "ar", "link", "textfile", "zip"]
+elif os.name == "nt" and methods.get_cmdline_bool("use_mingw", False):
+ custom_tools = ["mingw"]
# We let SCons build its default ENV as it includes OS-specific things which we don't
# want to have to pull in manually.
@@ -395,10 +397,7 @@ if selected_platform in platform_list:
sys.path.insert(0, tmppath)
import detect
- if "create" in dir(detect):
- env = detect.create(env_base)
- else:
- env = env_base.Clone()
+ env = env_base.Clone()
if env["compiledb"]:
# Generating the compilation DB (`compile_commands.json`) requires SCons 4.0.0 or later.
diff --git a/core/SCsub b/core/SCsub
index 1379e9df9b..3814c72877 100644
--- a/core/SCsub
+++ b/core/SCsub
@@ -129,6 +129,10 @@ if env["builtin_zstd"]:
"decompress/zstd_decompress_block.c",
"decompress/zstd_decompress.c",
]
+ if env["platform"] in ["android", "linuxbsd", "osx"]:
+ # Match platforms with ZSTD_ASM_SUPPORTED in common/portability_macros.h
+ # iOS x86_64 should be supported in theory, but it fails arm64 build, seems to use host S_compiler.
+ thirdparty_zstd_sources.append("decompress/huf_decompress_amd64.S")
thirdparty_zstd_sources = [thirdparty_zstd_dir + file for file in thirdparty_zstd_sources]
env_thirdparty.Prepend(CPPPATH=[thirdparty_zstd_dir, thirdparty_zstd_dir + "common"])
diff --git a/core/config/project_settings.cpp b/core/config/project_settings.cpp
index 12d936d456..7145e628c1 100644
--- a/core/config/project_settings.cpp
+++ b/core/config/project_settings.cpp
@@ -41,7 +41,6 @@
#include "core/os/keyboard.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";
@@ -1200,6 +1199,10 @@ ProjectSettings::ProjectSettings() {
GLOBAL_DEF_BASIC("audio/buses/default_bus_layout", "res://default_bus_layout.tres");
custom_prop_info["audio/buses/default_bus_layout"] = PropertyInfo(Variant::STRING, "audio/buses/default_bus_layout", PROPERTY_HINT_FILE, "*.tres");
+ GLOBAL_DEF_RST("audio/general/2d_panning_strength", 1.0f);
+ custom_prop_info["audio/general/2d_panning_strength"] = PropertyInfo(Variant::FLOAT, "audio/general/2d_panning_strength", PROPERTY_HINT_RANGE, "0,4,0.01");
+ GLOBAL_DEF_RST("audio/general/3d_panning_strength", 1.0f);
+ custom_prop_info["audio/general/3d_panning_strength"] = PropertyInfo(Variant::FLOAT, "audio/general/3d_panning_strength", PROPERTY_HINT_RANGE, "0,4,0.01");
PackedStringArray extensions = PackedStringArray();
extensions.push_back("gd");
diff --git a/core/core_bind.cpp b/core/core_bind.cpp
index 194c7fdefd..fc91f83462 100644
--- a/core/core_bind.cpp
+++ b/core/core_bind.cpp
@@ -1820,60 +1820,25 @@ void Thread::_start_func(void *ud) {
ERR_FAIL_MSG(vformat("Could not call function '%s' on previously freed instance to start thread %s.", t->target_callable.get_method(), t->get_id()));
}
- Callable::CallError ce;
- const Variant *arg[1] = { &t->userdata };
- int argc = 0;
- if (arg[0]->get_type() != Variant::NIL) {
- // Just pass to the target function whatever came as user data
- argc = 1;
- } else {
- // There are two cases of null user data:
- // a) The target function has zero parameters and the caller is just honoring that.
- // b) The target function has at least one parameter with no default and the caller is
- // leveraging the fact that user data defaults to null in Thread.start().
- // We care about the case of more than one parameter because, even if a thread
- // function can have one at most, out mindset here is to do our best with the
- // only/first one and let the call handle any other error conditions, like too
- // much arguments.
- // We must check if we are in case b).
- int target_param_count = 0;
- int target_default_arg_count = 0;
- Ref<Script> script = target_instance->get_script();
- if (script.is_valid()) {
- MethodInfo mi = script->get_method_info(t->target_callable.get_method());
- target_param_count = mi.arguments.size();
- target_default_arg_count = mi.default_arguments.size();
- } else {
- MethodBind *method = ClassDB::get_method(target_instance->get_class_name(), t->target_callable.get_method());
- if (method) {
- target_param_count = method->get_argument_count();
- target_default_arg_count = method->get_default_argument_count();
- }
- }
- if (target_param_count >= 1 && target_default_arg_count < target_param_count) {
- argc = 1;
- }
- }
-
::Thread::set_name(t->target_callable.get_method());
- t->target_callable.call(arg, argc, t->ret, ce);
+ Callable::CallError ce;
+ t->target_callable.call(nullptr, 0, t->ret, ce);
if (ce.error != Callable::CallError::CALL_OK) {
t->running.clear();
- ERR_FAIL_MSG("Could not call function '" + t->target_callable.get_method().operator String() + "' to start thread " + t->get_id() + ": " + Variant::get_callable_error_text(t->target_callable, arg, argc, ce) + ".");
+ ERR_FAIL_MSG("Could not call function '" + t->target_callable.get_method().operator String() + "' to start thread " + t->get_id() + ": " + Variant::get_callable_error_text(t->target_callable, nullptr, 0, ce) + ".");
}
t->running.clear();
}
-Error Thread::start(const Callable &p_callable, const Variant &p_userdata, Priority p_priority) {
+Error Thread::start(const Callable &p_callable, Priority p_priority) {
ERR_FAIL_COND_V_MSG(is_started(), ERR_ALREADY_IN_USE, "Thread already started.");
ERR_FAIL_COND_V(!p_callable.is_valid(), ERR_INVALID_PARAMETER);
ERR_FAIL_INDEX_V(p_priority, PRIORITY_MAX, ERR_INVALID_PARAMETER);
ret = Variant();
target_callable = p_callable;
- userdata = p_userdata;
running.set();
Ref<Thread> *ud = memnew(Ref<Thread>(this));
@@ -1902,13 +1867,12 @@ Variant Thread::wait_to_finish() {
thread.wait_to_finish();
Variant r = ret;
target_callable = Callable();
- userdata = Variant();
return r;
}
void Thread::_bind_methods() {
- ClassDB::bind_method(D_METHOD("start", "callable", "userdata", "priority"), &Thread::start, DEFVAL(Variant()), DEFVAL(PRIORITY_NORMAL));
+ ClassDB::bind_method(D_METHOD("start", "callable", "priority"), &Thread::start, DEFVAL(PRIORITY_NORMAL));
ClassDB::bind_method(D_METHOD("get_id"), &Thread::get_id);
ClassDB::bind_method(D_METHOD("is_started"), &Thread::is_started);
ClassDB::bind_method(D_METHOD("is_alive"), &Thread::is_alive);
@@ -2076,9 +2040,9 @@ bool ClassDB::has_integer_constant(const StringName &p_class, const StringName &
return success;
}
-int ClassDB::get_integer_constant(const StringName &p_class, const StringName &p_name) const {
+int64_t ClassDB::get_integer_constant(const StringName &p_class, const StringName &p_name) const {
bool found;
- int c = ::ClassDB::get_integer_constant(p_class, p_name, &found);
+ int64_t c = ::ClassDB::get_integer_constant(p_class, p_name, &found);
ERR_FAIL_COND_V(!found, 0);
return c;
}
diff --git a/core/core_bind.h b/core/core_bind.h
index e4d15d5c9d..ec9bcdbc02 100644
--- a/core/core_bind.h
+++ b/core/core_bind.h
@@ -551,7 +551,6 @@ class Thread : public RefCounted {
protected:
Variant ret;
- Variant userdata;
SafeFlag running;
Callable target_callable;
::Thread thread;
@@ -566,7 +565,7 @@ public:
PRIORITY_MAX
};
- Error start(const Callable &p_callable, const Variant &p_userdata = Variant(), Priority p_priority = PRIORITY_NORMAL);
+ Error start(const Callable &p_callable, Priority p_priority = PRIORITY_NORMAL);
String get_id() const;
bool is_started() const;
bool is_alive() const;
@@ -604,7 +603,7 @@ public:
PackedStringArray get_integer_constant_list(const StringName &p_class, bool p_no_inheritance = false) const;
bool has_integer_constant(const StringName &p_class, const StringName &p_name) const;
- int get_integer_constant(const StringName &p_class, const StringName &p_name) const;
+ int64_t get_integer_constant(const StringName &p_class, const StringName &p_name) const;
bool has_enum(const StringName &p_class, const StringName &p_name, bool p_no_inheritance = false) const;
PackedStringArray get_enum_list(const StringName &p_class, bool p_no_inheritance = false) const;
diff --git a/core/core_constants.cpp b/core/core_constants.cpp
index 4f22c99656..24d8b0af6e 100644
--- a/core/core_constants.cpp
+++ b/core/core_constants.cpp
@@ -42,19 +42,19 @@ struct _CoreConstant {
bool ignore_value_in_docs = false;
#endif
const char *name = nullptr;
- int value = 0;
+ int64_t value = 0;
_CoreConstant() {}
#ifdef DEBUG_METHODS_ENABLED
- _CoreConstant(const StringName &p_enum_name, const char *p_name, int p_value, bool p_ignore_value_in_docs = false) :
+ _CoreConstant(const StringName &p_enum_name, const char *p_name, int64_t p_value, bool p_ignore_value_in_docs = false) :
enum_name(p_enum_name),
ignore_value_in_docs(p_ignore_value_in_docs),
name(p_name),
value(p_value) {
}
#else
- _CoreConstant(const char *p_name, int p_value) :
+ _CoreConstant(const char *p_name, int64_t p_value) :
name(p_name),
value(p_value) {
}
@@ -73,13 +73,13 @@ static Vector<_CoreConstant> _global_constants;
// 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));
+ _global_constants.push_back(_CoreConstant(__constant_get_enum_name(m_enum::m_member, #m_prefix "_" #m_member), #m_prefix "_" #m_member, (int64_t)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));
+ _global_constants.push_back(_CoreConstant(__constant_get_enum_name(m_enum::m_member, #m_name), #m_name, (int64_t)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));
+ _global_constants.push_back(_CoreConstant(__constant_get_enum_name(m_enum::m_member, #m_prefix "_" #m_member), #m_prefix "_" #m_member, (int64_t)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));
@@ -103,13 +103,13 @@ static Vector<_CoreConstant> _global_constants;
// 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));
+ _global_constants.push_back(_CoreConstant(#m_prefix "_" #m_member, (int64_t)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));
+ _global_constants.push_back(_CoreConstant(#m_name, (int64_t)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));
+ _global_constants.push_back(_CoreConstant(#m_prefix "_" #m_member, (int64_t)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));
@@ -213,6 +213,25 @@ void register_global_constants() {
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, F17);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, F18);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, F19);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, F20);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, F21);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, F22);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, F23);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, F24);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, F25);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, F26);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, F27);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, F28);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, F29);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, F30);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, F31);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, F32);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, F33);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, F34);
+ BIND_CORE_ENUM_CLASS_CONSTANT(Key, KEY, F35);
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);
@@ -569,6 +588,7 @@ void register_global_constants() {
BIND_CORE_ENUM_CONSTANT(PROPERTY_HINT_GLOBAL_DIR);
BIND_CORE_ENUM_CONSTANT(PROPERTY_HINT_RESOURCE_TYPE);
BIND_CORE_ENUM_CONSTANT(PROPERTY_HINT_MULTILINE_TEXT);
+ BIND_CORE_ENUM_CONSTANT(PROPERTY_HINT_EXPRESSION);
BIND_CORE_ENUM_CONSTANT(PROPERTY_HINT_PLACEHOLDER_TEXT);
BIND_CORE_ENUM_CONSTANT(PROPERTY_HINT_COLOR_NO_ALPHA);
BIND_CORE_ENUM_CONSTANT(PROPERTY_HINT_IMAGE_COMPRESS_LOSSY);
@@ -588,11 +608,13 @@ void register_global_constants() {
BIND_CORE_ENUM_CONSTANT(PROPERTY_HINT_OBJECT_TOO_BIG);
BIND_CORE_ENUM_CONSTANT(PROPERTY_HINT_NODE_PATH_VALID_TYPES);
BIND_CORE_ENUM_CONSTANT(PROPERTY_HINT_SAVE_FILE);
+ BIND_CORE_ENUM_CONSTANT(PROPERTY_HINT_GLOBAL_SAVE_FILE);
BIND_CORE_ENUM_CONSTANT(PROPERTY_HINT_INT_IS_OBJECTID);
BIND_CORE_ENUM_CONSTANT(PROPERTY_HINT_INT_IS_POINTER);
BIND_CORE_ENUM_CONSTANT(PROPERTY_HINT_ARRAY_TYPE);
BIND_CORE_ENUM_CONSTANT(PROPERTY_HINT_LOCALE_ID);
BIND_CORE_ENUM_CONSTANT(PROPERTY_HINT_LOCALIZABLE_STRING);
+ BIND_CORE_ENUM_CONSTANT(PROPERTY_HINT_NODE_TYPE);
BIND_CORE_ENUM_CONSTANT(PROPERTY_HINT_MAX);
BIND_CORE_ENUM_CONSTANT(PROPERTY_USAGE_NONE);
@@ -753,6 +775,6 @@ const char *CoreConstants::get_global_constant_name(int p_idx) {
return _global_constants[p_idx].name;
}
-int CoreConstants::get_global_constant_value(int p_idx) {
+int64_t CoreConstants::get_global_constant_value(int p_idx) {
return _global_constants[p_idx].value;
}
diff --git a/core/core_constants.h b/core/core_constants.h
index 9302c23959..d5b3b156b2 100644
--- a/core/core_constants.h
+++ b/core/core_constants.h
@@ -39,7 +39,7 @@ public:
static StringName get_global_constant_enum(int p_idx);
static bool get_ignore_value_in_docs(int p_idx);
static const char *get_global_constant_name(int p_idx);
- static int get_global_constant_value(int p_idx);
+ static int64_t get_global_constant_value(int p_idx);
};
#endif // GLOBAL_CONSTANTS_H
diff --git a/core/debugger/remote_debugger.cpp b/core/debugger/remote_debugger.cpp
index 5ee4e2c368..508a71ece9 100644
--- a/core/debugger/remote_debugger.cpp
+++ b/core/debugger/remote_debugger.cpp
@@ -208,7 +208,7 @@ void RemoteDebugger::_err_handler(void *p_this, const char *p_func, const char *
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) {
+void RemoteDebugger::_print_handler(void *p_this, const String &p_string, bool p_error, bool p_rich) {
RemoteDebugger *rd = static_cast<RemoteDebugger *>(p_this);
if (rd->flushing && Thread::get_caller_id() == rd->flush_thread) { // Can't handle recursive prints during flush.
@@ -237,7 +237,13 @@ void RemoteDebugger::_print_handler(void *p_this, const String &p_string, bool p
OutputString output_string;
output_string.message = s;
- output_string.type = p_error ? MESSAGE_TYPE_ERROR : MESSAGE_TYPE_LOG;
+ if (p_error) {
+ output_string.type = MESSAGE_TYPE_ERROR;
+ } else if (p_rich) {
+ output_string.type = MESSAGE_TYPE_LOG_RICH;
+ } else {
+ output_string.type = MESSAGE_TYPE_LOG;
+ }
rd->output_strings.push_back(output_string);
if (overflowed) {
diff --git a/core/debugger/remote_debugger.h b/core/debugger/remote_debugger.h
index fdb312ae68..fe4bbe86ea 100644
--- a/core/debugger/remote_debugger.h
+++ b/core/debugger/remote_debugger.h
@@ -44,6 +44,7 @@ public:
enum MessageType {
MESSAGE_TYPE_LOG,
MESSAGE_TYPE_ERROR,
+ MESSAGE_TYPE_LOG_RICH,
};
private:
@@ -82,7 +83,7 @@ private:
Thread::ID flush_thread = 0;
PrintHandlerList phl;
- static void _print_handler(void *p_this, const String &p_string, bool p_error);
+ static void _print_handler(void *p_this, const String &p_string, bool p_error, bool p_rich);
ErrorHandlerList eh;
static void _err_handler(void *p_this, const char *p_func, const char *p_file, int p_line, const char *p_err, const char *p_descr, bool p_editor_notify, ErrorHandlerType p_type);
diff --git a/core/extension/extension_api_dump.cpp b/core/extension/extension_api_dump.cpp
index 9e8addf8aa..9d846f87c2 100644
--- a/core/extension/extension_api_dump.cpp
+++ b/core/extension/extension_api_dump.cpp
@@ -334,14 +334,14 @@ Dictionary NativeExtensionAPIDump::generate_extension_api() {
{
// Global enums and constants.
Array constants;
- HashMap<String, List<Pair<String, int>>> enum_list;
+ HashMap<String, List<Pair<String, int64_t>>> enum_list;
for (int i = 0; i < CoreConstants::get_global_constant_count(); i++) {
- int value = CoreConstants::get_global_constant_value(i);
+ int64_t value = CoreConstants::get_global_constant_value(i);
String enum_name = CoreConstants::get_global_constant_enum(i);
String name = CoreConstants::get_global_constant_name(i);
if (!enum_name.is_empty()) {
- enum_list[enum_name].push_back(Pair<String, int>(name, value));
+ enum_list[enum_name].push_back(Pair<String, int64_t>(name, value));
} else {
Dictionary d;
d["name"] = name;
@@ -353,11 +353,11 @@ Dictionary NativeExtensionAPIDump::generate_extension_api() {
api_dump["global_constants"] = constants;
Array enums;
- for (const KeyValue<String, List<Pair<String, int>>> &E : enum_list) {
+ for (const KeyValue<String, List<Pair<String, int64_t>>> &E : enum_list) {
Dictionary d1;
d1["name"] = E.key;
Array values;
- for (const Pair<String, int> &F : E.value) {
+ for (const Pair<String, int64_t> &F : E.value) {
Dictionary d2;
d2["name"] = F.first;
d2["value"] = F.second;
@@ -474,6 +474,38 @@ Dictionary NativeExtensionAPIDump::generate_extension_api() {
}
}
{
+ //enums
+ Array enums;
+
+ List<StringName> enum_names;
+ Variant::get_enums_for_type(type, &enum_names);
+ for (const StringName &enum_name : enum_names) {
+ Dictionary enum_dict;
+ enum_dict["name"] = String(enum_name);
+
+ List<StringName> enumeration_names;
+ Variant::get_enumerations_for_enum(type, enum_name, &enumeration_names);
+
+ Array values;
+
+ for (const StringName &enumeration : enumeration_names) {
+ Dictionary values_dict;
+ values_dict["name"] = String(enumeration);
+ values_dict["value"] = Variant::get_enum_value(type, enum_name, enumeration);
+ values.push_back(values_dict);
+ }
+
+ if (values.size()) {
+ enum_dict["values"] = values;
+ }
+ enums.push_back(enum_dict);
+ }
+
+ if (enums.size()) {
+ d["enums"] = enums;
+ }
+ }
+ {
//operators
Array operators;
diff --git a/core/extension/gdnative_interface.h b/core/extension/gdnative_interface.h
index 095c7983ee..ccd6fb0f7e 100644
--- a/core/extension/gdnative_interface.h
+++ b/core/extension/gdnative_interface.h
@@ -153,7 +153,7 @@ typedef enum {
GDNATIVE_CALL_ERROR_TOO_MANY_ARGUMENTS, /* expected is number of arguments */
GDNATIVE_CALL_ERROR_TOO_FEW_ARGUMENTS, /* expected is number of arguments */
GDNATIVE_CALL_ERROR_INSTANCE_IS_NULL,
-
+ GDNATIVE_CALL_ERROR_METHOD_NOT_CONST, /* used for const call */
} GDNativeCallErrorType;
typedef struct {
diff --git a/core/extension/native_extension.cpp b/core/extension/native_extension.cpp
index ac9d2ca8a6..ebdfa20725 100644
--- a/core/extension/native_extension.cpp
+++ b/core/extension/native_extension.cpp
@@ -281,6 +281,7 @@ void NativeExtension::_get_library_path(const GDNativeExtensionClassLibraryPtr p
Error NativeExtension::open_library(const String &p_path, const String &p_entry_symbol) {
Error err = OS::get_singleton()->open_dynamic_library(p_path, library, true, &library_path);
if (err != OK) {
+ ERR_PRINT("GDExtension dynamic library not found: " + p_path);
return err;
}
@@ -289,6 +290,7 @@ Error NativeExtension::open_library(const String &p_path, const String &p_entry_
err = OS::get_singleton()->get_dynamic_library_symbol_handle(library, p_entry_symbol, entry_funcptr, false);
if (err != OK) {
+ ERR_PRINT("GDExtension entry point '" + p_entry_symbol + "' not found in library " + p_path);
OS::get_singleton()->close_dynamic_library(library);
return err;
}
@@ -299,6 +301,7 @@ Error NativeExtension::open_library(const String &p_path, const String &p_entry_
level_initialized = -1;
return OK;
} else {
+ ERR_PRINT("GDExtension initialization function '" + p_entry_symbol + "' returned an error.");
return FAILED;
}
}
@@ -387,6 +390,7 @@ Ref<Resource> NativeExtensionResourceLoader::load(const String &p_path, const St
}
if (err != OK) {
+ ERR_PRINT("Error loading GDExtension config file: " + p_path);
return Ref<Resource>();
}
@@ -394,6 +398,7 @@ Ref<Resource> NativeExtensionResourceLoader::load(const String &p_path, const St
if (r_error) {
*r_error = ERR_INVALID_DATA;
}
+ ERR_PRINT("GDExtension config file must contain 'configuration.entry_symbol' key: " + p_path);
return Ref<Resource>();
}
@@ -426,6 +431,7 @@ Ref<Resource> NativeExtensionResourceLoader::load(const String &p_path, const St
if (r_error) {
*r_error = ERR_FILE_NOT_FOUND;
}
+ ERR_PRINT("No GDExtension library found for current architecture; in config file " + p_path);
return Ref<Resource>();
}
@@ -443,6 +449,7 @@ Ref<Resource> NativeExtensionResourceLoader::load(const String &p_path, const St
}
if (err != OK) {
+ // Errors already logged in open_library()
return Ref<Resource>();
}
diff --git a/core/input/input.cpp b/core/input/input.cpp
index b3a68bb98c..da0c6cb62a 100644
--- a/core/input/input.cpp
+++ b/core/input/input.cpp
@@ -325,6 +325,7 @@ float Input::get_action_strength(const StringName &p_action, bool p_exact) const
}
float Input::get_action_raw_strength(const StringName &p_action, bool p_exact) const {
+ ERR_FAIL_COND_V_MSG(!InputMap::get_singleton()->has_action(p_action), 0.0, InputMap::get_singleton()->suggest_actions(p_action));
HashMap<StringName, Action>::ConstIterator E = action_state.find(p_action);
if (!E) {
return 0.0f;
diff --git a/core/io/file_access_pack.h b/core/io/file_access_pack.h
index 19a0cce796..e656f6b885 100644
--- a/core/io/file_access_pack.h
+++ b/core/io/file_access_pack.h
@@ -84,8 +84,8 @@ private:
return (a == p_val.a) && (b == p_val.b);
}
static uint32_t hash(const PathMD5 &p_val) {
- uint32_t h = hash_djb2_one_32(p_val.a);
- return hash_djb2_one_32(p_val.b, h);
+ uint32_t h = hash_murmur3_one_32(p_val.a);
+ return hash_fmix32(hash_murmur3_one_32(p_val.b, h));
}
PathMD5() {}
diff --git a/core/io/image.cpp b/core/io/image.cpp
index dfba45c4e9..f065dac212 100644
--- a/core/io/image.cpp
+++ b/core/io/image.cpp
@@ -81,9 +81,15 @@ const char *Image::format_names[Image::FORMAT_MAX] = {
};
SavePNGFunc Image::save_png_func = nullptr;
+SaveJPGFunc Image::save_jpg_func = nullptr;
SaveEXRFunc Image::save_exr_func = nullptr;
SavePNGBufferFunc Image::save_png_buffer_func = nullptr;
+SaveEXRBufferFunc Image::save_exr_buffer_func = nullptr;
+SaveJPGBufferFunc Image::save_jpg_buffer_func = nullptr;
+
+SaveWebPFunc Image::save_webp_func = nullptr;
+SaveWebPBufferFunc Image::save_webp_buffer_func = nullptr;
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;
@@ -2286,6 +2292,14 @@ Error Image::save_png(const String &p_path) const {
return save_png_func(p_path, Ref<Image>((Image *)this));
}
+Error Image::save_jpg(const String &p_path, float p_quality) const {
+ if (save_jpg_func == nullptr) {
+ return ERR_UNAVAILABLE;
+ }
+
+ return save_jpg_func(p_path, Ref<Image>((Image *)this), p_quality);
+}
+
Vector<uint8_t> Image::save_png_to_buffer() const {
if (save_png_buffer_func == nullptr) {
return Vector<uint8_t>();
@@ -2294,6 +2308,14 @@ Vector<uint8_t> Image::save_png_to_buffer() const {
return save_png_buffer_func(Ref<Image>((Image *)this));
}
+Vector<uint8_t> Image::save_jpg_to_buffer(float p_quality) const {
+ if (save_jpg_buffer_func == nullptr) {
+ return Vector<uint8_t>();
+ }
+
+ return save_jpg_buffer_func(Ref<Image>((Image *)this), p_quality);
+}
+
Error Image::save_exr(const String &p_path, bool p_grayscale) const {
if (save_exr_func == nullptr) {
return ERR_UNAVAILABLE;
@@ -2302,6 +2324,31 @@ Error Image::save_exr(const String &p_path, bool p_grayscale) const {
return save_exr_func(p_path, Ref<Image>((Image *)this), p_grayscale);
}
+Vector<uint8_t> Image::save_exr_to_buffer(bool p_grayscale) const {
+ if (save_exr_buffer_func == nullptr) {
+ return Vector<uint8_t>();
+ }
+ return save_exr_buffer_func(Ref<Image>((Image *)this), p_grayscale);
+}
+
+Error Image::save_webp(const String &p_path, const bool p_lossy, const float p_quality) const {
+ if (save_webp_func == nullptr) {
+ return ERR_UNAVAILABLE;
+ }
+ ERR_FAIL_COND_V_MSG(p_lossy && !(0.0f <= p_quality && p_quality <= 1.0f), ERR_INVALID_PARAMETER, "The WebP lossy quality was set to " + rtos(p_quality) + ", which is not valid. WebP lossy quality must be between 0.0 and 1.0 (inclusive).");
+
+ return save_webp_func(p_path, Ref<Image>((Image *)this), p_lossy, p_quality);
+}
+
+Vector<uint8_t> Image::save_webp_to_buffer(const bool p_lossy, const float p_quality) const {
+ if (save_webp_buffer_func == nullptr) {
+ return Vector<uint8_t>();
+ }
+ ERR_FAIL_COND_V_MSG(p_lossy && !(0.0f <= p_quality && p_quality <= 1.0f), Vector<uint8_t>(), "The WebP lossy quality was set to " + rtos(p_quality) + ", which is not valid. WebP lossy quality must be between 0.0 and 1.0 (inclusive).");
+
+ return save_webp_buffer_func(Ref<Image>((Image *)this), p_lossy, p_quality);
+}
+
int Image::get_image_data_size(int p_width, int p_height, Format p_format, bool p_mipmaps) {
int mm;
return _get_dst_image_size(p_width, p_height, p_format, mm, p_mipmaps ? -1 : 0);
@@ -3138,7 +3185,12 @@ void Image::_bind_methods() {
ClassDB::bind_method(D_METHOD("load", "path"), &Image::load);
ClassDB::bind_method(D_METHOD("save_png", "path"), &Image::save_png);
ClassDB::bind_method(D_METHOD("save_png_to_buffer"), &Image::save_png_to_buffer);
+ ClassDB::bind_method(D_METHOD("save_jpg", "path", "quality"), &Image::save_jpg, DEFVAL(0.75));
+ ClassDB::bind_method(D_METHOD("save_jpg_to_buffer", "quality"), &Image::save_jpg_to_buffer, DEFVAL(0.75));
ClassDB::bind_method(D_METHOD("save_exr", "path", "grayscale"), &Image::save_exr, DEFVAL(false));
+ ClassDB::bind_method(D_METHOD("save_exr_to_buffer", "grayscale"), &Image::save_exr_to_buffer, DEFVAL(false));
+ ClassDB::bind_method(D_METHOD("save_webp", "path", "lossy", "quality"), &Image::save_webp, DEFVAL(false), DEFVAL(0.75f));
+ ClassDB::bind_method(D_METHOD("save_webp_to_buffer", "lossy", "quality"), &Image::save_webp_to_buffer, DEFVAL(false), DEFVAL(0.75f));
ClassDB::bind_method(D_METHOD("detect_alpha"), &Image::detect_alpha);
ClassDB::bind_method(D_METHOD("is_invisible"), &Image::is_invisible);
diff --git a/core/io/image.h b/core/io/image.h
index 1025554d51..2cad26f3e9 100644
--- a/core/io/image.h
+++ b/core/io/image.h
@@ -45,17 +45,27 @@ class Image;
typedef Error (*SavePNGFunc)(const String &p_path, const Ref<Image> &p_img);
typedef Vector<uint8_t> (*SavePNGBufferFunc)(const Ref<Image> &p_img);
+typedef Error (*SaveJPGFunc)(const String &p_path, const Ref<Image> &p_img, float p_quality);
+typedef Vector<uint8_t> (*SaveJPGBufferFunc)(const Ref<Image> &p_img, float p_quality);
typedef Ref<Image> (*ImageMemLoadFunc)(const uint8_t *p_png, int p_size);
+typedef Error (*SaveWebPFunc)(const String &p_path, const Ref<Image> &p_img, const bool p_lossy, const float p_quality);
+typedef Vector<uint8_t> (*SaveWebPBufferFunc)(const Ref<Image> &p_img, const bool p_lossy, const float p_quality);
typedef Error (*SaveEXRFunc)(const String &p_path, const Ref<Image> &p_img, bool p_grayscale);
+typedef Vector<uint8_t> (*SaveEXRBufferFunc)(const Ref<Image> &p_img, bool p_grayscale);
class Image : public Resource {
GDCLASS(Image, Resource);
public:
static SavePNGFunc save_png_func;
+ static SaveJPGFunc save_jpg_func;
static SaveEXRFunc save_exr_func;
static SavePNGBufferFunc save_png_buffer_func;
+ static SaveEXRBufferFunc save_exr_buffer_func;
+ static SaveJPGBufferFunc save_jpg_buffer_func;
+ static SaveWebPFunc save_webp_func;
+ static SaveWebPBufferFunc save_webp_buffer_func;
enum {
MAX_WIDTH = (1 << 24), // force a limit somehow
@@ -281,8 +291,13 @@ public:
Error load(const String &p_path);
Error save_png(const String &p_path) const;
+ Error save_jpg(const String &p_path, float p_quality = 0.75) const;
Vector<uint8_t> save_png_to_buffer() const;
+ Vector<uint8_t> save_jpg_to_buffer(float p_quality = 0.75) const;
+ Vector<uint8_t> save_exr_to_buffer(bool p_grayscale) const;
Error save_exr(const String &p_path, bool p_grayscale) const;
+ Error save_webp(const String &p_path, const bool p_lossy = false, const float p_quality = 0.75f) const;
+ Vector<uint8_t> save_webp_to_buffer(const bool p_lossy = false, const float p_quality = 0.75f) const;
void create_empty(int p_width, int p_height, bool p_use_mipmaps, Format p_format) {
create(p_width, p_height, p_use_mipmaps, p_format);
diff --git a/core/io/resource.cpp b/core/io/resource.cpp
index ad01eb1083..fec5ca5c7b 100644
--- a/core/io/resource.cpp
+++ b/core/io/resource.cpp
@@ -52,41 +52,36 @@ void Resource::set_path(const String &p_path, bool p_take_over) {
return;
}
+ if (p_path.is_empty()) {
+ p_take_over = false; // Can't take over an empty path
+ }
+
+ ResourceCache::lock.lock();
+
if (!path_cache.is_empty()) {
- ResourceCache::lock.write_lock();
ResourceCache::resources.erase(path_cache);
- ResourceCache::lock.write_unlock();
}
path_cache = "";
- ResourceCache::lock.read_lock();
- bool has_path = ResourceCache::resources.has(p_path);
- ResourceCache::lock.read_unlock();
+ Ref<Resource> existing = ResourceCache::get_ref(p_path);
- if (has_path) {
+ if (existing.is_valid()) {
if (p_take_over) {
- ResourceCache::lock.write_lock();
- Resource **res = ResourceCache::resources.getptr(p_path);
- if (res) {
- (*res)->set_name("");
- }
- ResourceCache::lock.write_unlock();
+ existing->path_cache = String();
+ ResourceCache::resources.erase(p_path);
} else {
- ResourceCache::lock.read_lock();
- bool exists = ResourceCache::resources.has(p_path);
- ResourceCache::lock.read_unlock();
-
- ERR_FAIL_COND_MSG(exists, "Another resource is loaded from path '" + p_path + "' (possible cyclic resource inclusion).");
+ ResourceCache::lock.unlock();
+ ERR_FAIL_MSG("Another resource is loaded from path '" + p_path + "' (possible cyclic resource inclusion).");
}
}
+
path_cache = p_path;
if (!path_cache.is_empty()) {
- ResourceCache::lock.write_lock();
ResourceCache::resources[path_cache] = this;
- ResourceCache::lock.write_unlock();
}
+ ResourceCache::lock.unlock();
_resource_path_changed();
}
@@ -100,14 +95,14 @@ String Resource::generate_scene_unique_id() {
// If it's not unique it does not matter because the saver will try again.
OS::Date date = OS::get_singleton()->get_date();
OS::Time time = OS::get_singleton()->get_time();
- uint32_t hash = hash_djb2_one_32(OS::get_singleton()->get_ticks_usec());
- hash = hash_djb2_one_32(date.year, hash);
- hash = hash_djb2_one_32(date.month, hash);
- hash = hash_djb2_one_32(date.day, hash);
- hash = hash_djb2_one_32(time.hour, hash);
- hash = hash_djb2_one_32(time.minute, hash);
- hash = hash_djb2_one_32(time.second, hash);
- hash = hash_djb2_one_32(Math::rand(), hash);
+ uint32_t hash = hash_murmur3_one_32(OS::get_singleton()->get_ticks_usec());
+ hash = hash_murmur3_one_32(date.year, hash);
+ hash = hash_murmur3_one_32(date.month, hash);
+ hash = hash_murmur3_one_32(date.day, hash);
+ hash = hash_murmur3_one_32(time.hour, hash);
+ hash = hash_murmur3_one_32(time.minute, hash);
+ hash = hash_murmur3_one_32(time.second, hash);
+ hash = hash_murmur3_one_32(Math::rand(), hash);
static constexpr uint32_t characters = 5;
static constexpr uint32_t char_count = ('z' - 'a');
@@ -328,7 +323,7 @@ void Resource::notify_change_to_owners() {
#ifdef TOOLS_ENABLED
uint32_t Resource::hash_edited_version() const {
- uint32_t hash = hash_djb2_one_32(get_edited_version());
+ uint32_t hash = hash_murmur3_one_32(get_edited_version());
List<PropertyInfo> plist;
get_property_list(&plist);
@@ -337,7 +332,7 @@ uint32_t Resource::hash_edited_version() const {
if (E.usage & PROPERTY_USAGE_STORAGE && E.type == Variant::OBJECT && E.hint == PROPERTY_HINT_RESOURCE_TYPE) {
Ref<Resource> res = get(E.name);
if (res.is_valid()) {
- hash = hash_djb2_one_32(res->hash_edited_version(), hash);
+ hash = hash_murmur3_one_32(res->hash_edited_version(), hash);
}
}
}
@@ -380,7 +375,7 @@ void Resource::set_as_translation_remapped(bool p_remapped) {
return;
}
- ResourceCache::lock.write_lock();
+ ResourceCache::lock.lock();
if (p_remapped) {
ResourceLoader::remapped_list.add(&remapped_list);
@@ -388,7 +383,7 @@ void Resource::set_as_translation_remapped(bool p_remapped) {
ResourceLoader::remapped_list.remove(&remapped_list);
}
- ResourceCache::lock.write_unlock();
+ ResourceCache::lock.unlock();
}
bool Resource::is_translation_remapped() const {
@@ -455,9 +450,9 @@ Resource::Resource() :
Resource::~Resource() {
if (!path_cache.is_empty()) {
- ResourceCache::lock.write_lock();
+ ResourceCache::lock.lock();
ResourceCache::resources.erase(path_cache);
- ResourceCache::lock.write_unlock();
+ ResourceCache::lock.unlock();
}
if (owners.size()) {
WARN_PRINT("Resource is still owned.");
@@ -469,7 +464,7 @@ HashMap<String, Resource *> ResourceCache::resources;
HashMap<String, HashMap<String, String>> ResourceCache::resource_path_cache;
#endif
-RWLock ResourceCache::lock;
+Mutex ResourceCache::lock;
#ifdef TOOLS_ENABLED
RWLock ResourceCache::path_cache_lock;
#endif
@@ -491,46 +486,67 @@ void ResourceCache::reload_externals() {
}
bool ResourceCache::has(const String &p_path) {
- lock.read_lock();
- bool b = resources.has(p_path);
- lock.read_unlock();
+ lock.lock();
+
+ Resource **res = resources.getptr(p_path);
- return b;
+ if (res && (*res)->reference_get_count() == 0) {
+ // This resource is in the process of being deleted, ignore its existence.
+ (*res)->path_cache = String();
+ resources.erase(p_path);
+ res = nullptr;
+ }
+
+ lock.unlock();
+
+ if (!res) {
+ return false;
+ }
+
+ return true;
}
-Resource *ResourceCache::get(const String &p_path) {
- lock.read_lock();
+Ref<Resource> ResourceCache::get_ref(const String &p_path) {
+ Ref<Resource> ref;
+ lock.lock();
Resource **res = resources.getptr(p_path);
- lock.read_unlock();
+ if (res) {
+ ref = Ref<Resource>(*res);
+ }
- if (!res) {
- return nullptr;
+ if (res && !ref.is_valid()) {
+ // This resource is in the process of being deleted, ignore its existence
+ (*res)->path_cache = String();
+ resources.erase(p_path);
+ res = nullptr;
}
- return *res;
+ lock.unlock();
+
+ return ref;
}
void ResourceCache::get_cached_resources(List<Ref<Resource>> *p_resources) {
- lock.read_lock();
+ lock.lock();
for (KeyValue<String, Resource *> &E : resources) {
p_resources->push_back(Ref<Resource>(E.value));
}
- lock.read_unlock();
+ lock.unlock();
}
int ResourceCache::get_cached_resource_count() {
- lock.read_lock();
+ lock.lock();
int rc = resources.size();
- lock.read_unlock();
+ lock.unlock();
return rc;
}
void ResourceCache::dump(const char *p_file, bool p_short) {
#ifdef DEBUG_ENABLED
- lock.read_lock();
+ lock.lock();
HashMap<String, int> type_count;
@@ -562,7 +578,7 @@ void ResourceCache::dump(const char *p_file, bool p_short) {
}
}
- lock.read_unlock();
+ lock.unlock();
#else
WARN_PRINT("ResourceCache::dump only with in debug builds.");
#endif
diff --git a/core/io/resource.h b/core/io/resource.h
index a45bc6e1e4..a2cde87990 100644
--- a/core/io/resource.h
+++ b/core/io/resource.h
@@ -153,7 +153,7 @@ public:
class ResourceCache {
friend class Resource;
friend class ResourceLoader; //need the lock
- static RWLock lock;
+ static Mutex lock;
static HashMap<String, Resource *> resources;
#ifdef TOOLS_ENABLED
static HashMap<String, HashMap<String, String>> resource_path_cache; // Each tscn has a set of resource paths and IDs.
@@ -166,7 +166,7 @@ class ResourceCache {
public:
static void reload_externals();
static bool has(const String &p_path);
- static Resource *get(const String &p_path);
+ static Ref<Resource> get_ref(const String &p_path);
static void dump(const char *p_file = nullptr, bool p_short = false);
static void get_cached_resources(List<Ref<Resource>> *p_resources);
static int get_cached_resource_count();
diff --git a/core/io/resource_format_binary.cpp b/core/io/resource_format_binary.cpp
index 2469e1a4be..b1c50e829c 100644
--- a/core/io/resource_format_binary.cpp
+++ b/core/io/resource_format_binary.cpp
@@ -693,7 +693,7 @@ Error ResourceLoaderBinary::load() {
}
if (cache_mode == ResourceFormatLoader::CACHE_MODE_REUSE && ResourceCache::has(path)) {
- Ref<Resource> cached = ResourceCache::get(path);
+ Ref<Resource> cached = ResourceCache::get_ref(path);
if (cached.is_valid()) {
//already loaded, don't do anything
error = OK;
@@ -717,10 +717,10 @@ Error ResourceLoaderBinary::load() {
if (cache_mode == ResourceFormatLoader::CACHE_MODE_REPLACE && ResourceCache::has(path)) {
//use the existing one
- Resource *r = ResourceCache::get(path);
- if (r->get_class() == t) {
- r->reset_state();
- res = Ref<Resource>(r);
+ Ref<Resource> cached = ResourceCache::get_ref(path);
+ if (cached->get_class() == t) {
+ cached->reset_state();
+ res = cached;
}
}
diff --git a/core/io/resource_loader.cpp b/core/io/resource_loader.cpp
index fb21db1a19..2cd455475c 100644
--- a/core/io/resource_loader.cpp
+++ b/core/io/resource_loader.cpp
@@ -335,23 +335,15 @@ Error ResourceLoader::load_threaded_request(const String &p_path, const String &
thread_load_mutex->unlock();
ERR_FAIL_V_MSG(ERR_INVALID_PARAMETER, "Attempted to load a resource already being loaded from this thread, cyclic reference?");
}
- //lock first if possible
- ResourceCache::lock.read_lock();
-
- //get ptr
- Resource **rptr = ResourceCache::resources.getptr(local_path);
-
- if (rptr) {
- Ref<Resource> res(*rptr);
- //it is possible this resource was just freed in a thread. If so, this referencing will not work and resource is considered not cached
- if (res.is_valid()) {
- //referencing is fine
- load_task.resource = res;
- load_task.status = THREAD_LOAD_LOADED;
- load_task.progress = 1.0;
- }
+
+ Ref<Resource> existing = ResourceCache::get_ref(local_path);
+
+ if (existing.is_valid()) {
+ //referencing is fine
+ load_task.resource = existing;
+ load_task.status = THREAD_LOAD_LOADED;
+ load_task.progress = 1.0;
}
- ResourceCache::lock.read_unlock();
}
if (!p_source_resource.is_empty()) {
@@ -530,27 +522,18 @@ Ref<Resource> ResourceLoader::load(const String &p_path, const String &p_type_hi
}
//Is it cached?
- ResourceCache::lock.read_lock();
-
- Resource **rptr = ResourceCache::resources.getptr(local_path);
- if (rptr) {
- Ref<Resource> res(*rptr);
+ Ref<Resource> existing = ResourceCache::get_ref(local_path);
- //it is possible this resource was just freed in a thread. If so, this referencing will not work and resource is considered not cached
- if (res.is_valid()) {
- ResourceCache::lock.read_unlock();
- thread_load_mutex->unlock();
-
- if (r_error) {
- *r_error = OK;
- }
+ if (existing.is_valid()) {
+ thread_load_mutex->unlock();
- return res; //use cached
+ if (r_error) {
+ *r_error = OK;
}
- }
- ResourceCache::lock.read_unlock();
+ return existing; //use cached
+ }
//load using task (but this thread)
ThreadLoadTask load_task;
@@ -867,7 +850,7 @@ String ResourceLoader::path_remap(const String &p_path) {
}
void ResourceLoader::reload_translation_remaps() {
- ResourceCache::lock.read_lock();
+ ResourceCache::lock.lock();
List<Resource *> to_reload;
SelfList<Resource> *E = remapped_list.first();
@@ -877,7 +860,7 @@ void ResourceLoader::reload_translation_remaps() {
E = E->next();
}
- ResourceCache::lock.read_unlock();
+ ResourceCache::lock.unlock();
//now just make sure to not delete any of these resources while changing locale..
while (to_reload.front()) {
diff --git a/core/math/a_star.cpp b/core/math/a_star.cpp
index efa970c681..41a0848d01 100644
--- a/core/math/a_star.cpp
+++ b/core/math/a_star.cpp
@@ -33,19 +33,19 @@
#include "core/math/geometry_3d.h"
#include "core/object/script_language.h"
-int AStar3D::get_available_point_id() const {
+int64_t AStar3D::get_available_point_id() const {
if (points.has(last_free_id)) {
- int cur_new_id = last_free_id + 1;
+ int64_t cur_new_id = last_free_id + 1;
while (points.has(cur_new_id)) {
cur_new_id++;
}
- const_cast<int &>(last_free_id) = cur_new_id;
+ const_cast<int64_t &>(last_free_id) = cur_new_id;
}
return last_free_id;
}
-void AStar3D::add_point(int p_id, const Vector3 &p_pos, real_t p_weight_scale) {
+void AStar3D::add_point(int64_t p_id, const Vector3 &p_pos, real_t p_weight_scale) {
ERR_FAIL_COND_MSG(p_id < 0, vformat("Can't add a point with negative id: %d.", p_id));
ERR_FAIL_COND_MSG(p_weight_scale < 0.0, vformat("Can't add a point with weight scale less than 0.0: %f.", p_weight_scale));
@@ -68,7 +68,7 @@ void AStar3D::add_point(int p_id, const Vector3 &p_pos, real_t p_weight_scale) {
}
}
-Vector3 AStar3D::get_point_position(int p_id) const {
+Vector3 AStar3D::get_point_position(int64_t p_id) const {
Point *p;
bool p_exists = points.lookup(p_id, p);
ERR_FAIL_COND_V_MSG(!p_exists, Vector3(), vformat("Can't get point's position. Point with id: %d doesn't exist.", p_id));
@@ -76,7 +76,7 @@ Vector3 AStar3D::get_point_position(int p_id) const {
return p->pos;
}
-void AStar3D::set_point_position(int p_id, const Vector3 &p_pos) {
+void AStar3D::set_point_position(int64_t p_id, const Vector3 &p_pos) {
Point *p;
bool p_exists = points.lookup(p_id, p);
ERR_FAIL_COND_MSG(!p_exists, vformat("Can't set point's position. Point with id: %d doesn't exist.", p_id));
@@ -84,7 +84,7 @@ void AStar3D::set_point_position(int p_id, const Vector3 &p_pos) {
p->pos = p_pos;
}
-real_t AStar3D::get_point_weight_scale(int p_id) const {
+real_t AStar3D::get_point_weight_scale(int64_t p_id) const {
Point *p;
bool p_exists = points.lookup(p_id, p);
ERR_FAIL_COND_V_MSG(!p_exists, 0, vformat("Can't get point's weight scale. Point with id: %d doesn't exist.", p_id));
@@ -92,7 +92,7 @@ real_t AStar3D::get_point_weight_scale(int p_id) const {
return p->weight_scale;
}
-void AStar3D::set_point_weight_scale(int p_id, real_t p_weight_scale) {
+void AStar3D::set_point_weight_scale(int64_t p_id, real_t p_weight_scale) {
Point *p;
bool p_exists = points.lookup(p_id, p);
ERR_FAIL_COND_MSG(!p_exists, vformat("Can't set point's weight scale. Point with id: %d doesn't exist.", p_id));
@@ -101,12 +101,12 @@ void AStar3D::set_point_weight_scale(int p_id, real_t p_weight_scale) {
p->weight_scale = p_weight_scale;
}
-void AStar3D::remove_point(int p_id) {
+void AStar3D::remove_point(int64_t p_id) {
Point *p;
bool p_exists = points.lookup(p_id, p);
ERR_FAIL_COND_MSG(!p_exists, vformat("Can't remove point. Point with id: %d doesn't exist.", p_id));
- for (OAHashMap<int, Point *>::Iterator it = p->neighbours.iter(); it.valid; it = p->neighbours.next_iter(it)) {
+ for (OAHashMap<int64_t, Point *>::Iterator it = p->neighbours.iter(); it.valid; it = p->neighbours.next_iter(it)) {
Segment s(p_id, (*it.key));
segments.erase(s);
@@ -114,7 +114,7 @@ void AStar3D::remove_point(int p_id) {
(*it.value)->unlinked_neighbours.remove(p->id);
}
- for (OAHashMap<int, Point *>::Iterator it = p->unlinked_neighbours.iter(); it.valid; it = p->unlinked_neighbours.next_iter(it)) {
+ for (OAHashMap<int64_t, Point *>::Iterator it = p->unlinked_neighbours.iter(); it.valid; it = p->unlinked_neighbours.next_iter(it)) {
Segment s(p_id, (*it.key));
segments.erase(s);
@@ -127,7 +127,7 @@ void AStar3D::remove_point(int p_id) {
last_free_id = p_id;
}
-void AStar3D::connect_points(int p_id, int p_with_id, bool bidirectional) {
+void AStar3D::connect_points(int64_t p_id, int64_t p_with_id, bool bidirectional) {
ERR_FAIL_COND_MSG(p_id == p_with_id, vformat("Can't connect point with id: %d to itself.", p_id));
Point *a;
@@ -165,7 +165,7 @@ void AStar3D::connect_points(int p_id, int p_with_id, bool bidirectional) {
segments.insert(s);
}
-void AStar3D::disconnect_points(int p_id, int p_with_id, bool bidirectional) {
+void AStar3D::disconnect_points(int64_t p_id, int64_t p_with_id, bool bidirectional) {
Point *a;
bool a_exists = points.lookup(p_id, a);
ERR_FAIL_COND_MSG(!a_exists, vformat("Can't disconnect points. Point with id: %d doesn't exist.", p_id));
@@ -175,7 +175,7 @@ void AStar3D::disconnect_points(int p_id, int p_with_id, bool bidirectional) {
ERR_FAIL_COND_MSG(!b_exists, vformat("Can't disconnect points. Point with id: %d doesn't exist.", p_with_id));
Segment s(p_id, p_with_id);
- int remove_direction = bidirectional ? (int)Segment::BIDIRECTIONAL : s.direction;
+ int remove_direction = bidirectional ? (int)Segment::BIDIRECTIONAL : (int)s.direction;
HashSet<Segment, Segment>::Iterator element = segments.find(s);
if (element) {
@@ -205,35 +205,35 @@ void AStar3D::disconnect_points(int p_id, int p_with_id, bool bidirectional) {
}
}
-bool AStar3D::has_point(int p_id) const {
+bool AStar3D::has_point(int64_t p_id) const {
return points.has(p_id);
}
Array AStar3D::get_point_ids() {
Array point_list;
- for (OAHashMap<int, Point *>::Iterator it = points.iter(); it.valid; it = points.next_iter(it)) {
+ for (OAHashMap<int64_t, Point *>::Iterator it = points.iter(); it.valid; it = points.next_iter(it)) {
point_list.push_back(*(it.key));
}
return point_list;
}
-Vector<int> AStar3D::get_point_connections(int p_id) {
+Vector<int64_t> AStar3D::get_point_connections(int64_t p_id) {
Point *p;
bool p_exists = points.lookup(p_id, p);
- ERR_FAIL_COND_V_MSG(!p_exists, Vector<int>(), vformat("Can't get point's connections. Point with id: %d doesn't exist.", p_id));
+ ERR_FAIL_COND_V_MSG(!p_exists, Vector<int64_t>(), vformat("Can't get point's connections. Point with id: %d doesn't exist.", p_id));
- Vector<int> point_list;
+ Vector<int64_t> point_list;
- for (OAHashMap<int, Point *>::Iterator it = p->neighbours.iter(); it.valid; it = p->neighbours.next_iter(it)) {
+ for (OAHashMap<int64_t, Point *>::Iterator it = p->neighbours.iter(); it.valid; it = p->neighbours.next_iter(it)) {
point_list.push_back((*it.key));
}
return point_list;
}
-bool AStar3D::are_points_connected(int p_id, int p_with_id, bool bidirectional) const {
+bool AStar3D::are_points_connected(int64_t p_id, int64_t p_with_id, bool bidirectional) const {
Segment s(p_id, p_with_id);
const HashSet<Segment, Segment>::Iterator element = segments.find(s);
@@ -243,32 +243,32 @@ bool AStar3D::are_points_connected(int p_id, int p_with_id, bool bidirectional)
void AStar3D::clear() {
last_free_id = 0;
- for (OAHashMap<int, Point *>::Iterator it = points.iter(); it.valid; it = points.next_iter(it)) {
+ for (OAHashMap<int64_t, Point *>::Iterator it = points.iter(); it.valid; it = points.next_iter(it)) {
memdelete(*(it.value));
}
segments.clear();
points.clear();
}
-int AStar3D::get_point_count() const {
+int64_t AStar3D::get_point_count() const {
return points.get_num_elements();
}
-int AStar3D::get_point_capacity() const {
+int64_t AStar3D::get_point_capacity() const {
return points.get_capacity();
}
-void AStar3D::reserve_space(int p_num_nodes) {
+void AStar3D::reserve_space(int64_t p_num_nodes) {
ERR_FAIL_COND_MSG(p_num_nodes <= 0, vformat("New capacity must be greater than 0, new was: %d.", p_num_nodes));
ERR_FAIL_COND_MSG((uint32_t)p_num_nodes < points.get_capacity(), vformat("New capacity must be greater than current capacity: %d, new was: %d.", points.get_capacity(), p_num_nodes));
points.reserve(p_num_nodes);
}
-int AStar3D::get_closest_point(const Vector3 &p_point, bool p_include_disabled) const {
- int closest_id = -1;
+int64_t AStar3D::get_closest_point(const Vector3 &p_point, bool p_include_disabled) const {
+ int64_t closest_id = -1;
real_t closest_dist = 1e20;
- for (OAHashMap<int, Point *>::Iterator it = points.iter(); it.valid; it = points.next_iter(it)) {
+ for (OAHashMap<int64_t, Point *>::Iterator it = points.iter(); it.valid; it = points.next_iter(it)) {
if (!p_include_disabled && !(*it.value)->enabled) {
continue; // Disabled points should not be considered.
}
@@ -276,7 +276,7 @@ int AStar3D::get_closest_point(const Vector3 &p_point, bool p_include_disabled)
// Keep the closest point's ID, and in case of multiple closest IDs,
// the smallest one (makes it deterministic).
real_t d = p_point.distance_squared_to((*it.value)->pos);
- int id = *(it.key);
+ int64_t id = *(it.key);
if (d <= closest_dist) {
if (d == closest_dist && id > closest_id) { // Keep lowest ID.
continue;
@@ -295,8 +295,8 @@ Vector3 AStar3D::get_closest_position_in_segment(const Vector3 &p_point) const {
for (const Segment &E : segments) {
Point *from_point = nullptr, *to_point = nullptr;
- points.lookup(E.u, from_point);
- points.lookup(E.v, to_point);
+ points.lookup(E.key.first, from_point);
+ points.lookup(E.key.second, to_point);
if (!(from_point->enabled && to_point->enabled)) {
continue;
@@ -346,7 +346,7 @@ bool AStar3D::_solve(Point *begin_point, Point *end_point) {
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)) {
+ for (OAHashMap<int64_t, Point *>::Iterator it = p->neighbours.iter(); it.valid; it = p->neighbours.next_iter(it)) {
Point *e = *(it.value); // The neighbour point
if (!e->enabled || e->closed_pass == pass) {
@@ -380,7 +380,7 @@ bool AStar3D::_solve(Point *begin_point, Point *end_point) {
return found_route;
}
-real_t AStar3D::_estimate_cost(int p_from_id, int p_to_id) {
+real_t AStar3D::_estimate_cost(int64_t p_from_id, int64_t p_to_id) {
real_t scost;
if (GDVIRTUAL_CALL(_estimate_cost, p_from_id, p_to_id, scost)) {
return scost;
@@ -397,7 +397,7 @@ real_t AStar3D::_estimate_cost(int p_from_id, int p_to_id) {
return from_point->pos.distance_to(to_point->pos);
}
-real_t AStar3D::_compute_cost(int p_from_id, int p_to_id) {
+real_t AStar3D::_compute_cost(int64_t p_from_id, int64_t p_to_id) {
real_t scost;
if (GDVIRTUAL_CALL(_compute_cost, p_from_id, p_to_id, scost)) {
return scost;
@@ -414,7 +414,7 @@ real_t AStar3D::_compute_cost(int p_from_id, int p_to_id) {
return from_point->pos.distance_to(to_point->pos);
}
-Vector<Vector3> AStar3D::get_point_path(int p_from_id, int p_to_id) {
+Vector<Vector3> AStar3D::get_point_path(int64_t p_from_id, int64_t p_to_id) {
Point *a;
bool from_exists = points.lookup(p_from_id, a);
ERR_FAIL_COND_V_MSG(!from_exists, Vector<Vector3>(), vformat("Can't get point path. Point with id: %d doesn't exist.", p_from_id));
@@ -438,7 +438,7 @@ Vector<Vector3> AStar3D::get_point_path(int p_from_id, int p_to_id) {
}
Point *p = end_point;
- int pc = 1; // Begin point
+ int64_t pc = 1; // Begin point
while (p != begin_point) {
pc++;
p = p->prev_point;
@@ -451,7 +451,7 @@ Vector<Vector3> AStar3D::get_point_path(int p_from_id, int p_to_id) {
Vector3 *w = path.ptrw();
Point *p2 = end_point;
- int idx = pc - 1;
+ int64_t idx = pc - 1;
while (p2 != begin_point) {
w[idx--] = p2->pos;
p2 = p2->prev_point;
@@ -463,17 +463,17 @@ Vector<Vector3> AStar3D::get_point_path(int p_from_id, int p_to_id) {
return path;
}
-Vector<int> AStar3D::get_id_path(int p_from_id, int p_to_id) {
+Vector<int64_t> AStar3D::get_id_path(int64_t p_from_id, int64_t p_to_id) {
Point *a;
bool from_exists = points.lookup(p_from_id, a);
- ERR_FAIL_COND_V_MSG(!from_exists, Vector<int>(), vformat("Can't get id path. Point with id: %d doesn't exist.", p_from_id));
+ ERR_FAIL_COND_V_MSG(!from_exists, Vector<int64_t>(), vformat("Can't get id path. Point with id: %d doesn't exist.", p_from_id));
Point *b;
bool to_exists = points.lookup(p_to_id, b);
- ERR_FAIL_COND_V_MSG(!to_exists, Vector<int>(), vformat("Can't get id path. Point with id: %d doesn't exist.", p_to_id));
+ ERR_FAIL_COND_V_MSG(!to_exists, Vector<int64_t>(), vformat("Can't get id path. Point with id: %d doesn't exist.", p_to_id));
if (a == b) {
- Vector<int> ret;
+ Vector<int64_t> ret;
ret.push_back(a->id);
return ret;
}
@@ -483,24 +483,24 @@ Vector<int> AStar3D::get_id_path(int p_from_id, int p_to_id) {
bool found_route = _solve(begin_point, end_point);
if (!found_route) {
- return Vector<int>();
+ return Vector<int64_t>();
}
Point *p = end_point;
- int pc = 1; // Begin point
+ int64_t pc = 1; // Begin point
while (p != begin_point) {
pc++;
p = p->prev_point;
}
- Vector<int> path;
+ Vector<int64_t> path;
path.resize(pc);
{
- int *w = path.ptrw();
+ int64_t *w = path.ptrw();
p = end_point;
- int idx = pc - 1;
+ int64_t idx = pc - 1;
while (p != begin_point) {
w[idx--] = p->id;
p = p->prev_point;
@@ -512,7 +512,7 @@ Vector<int> AStar3D::get_id_path(int p_from_id, int p_to_id) {
return path;
}
-void AStar3D::set_point_disabled(int p_id, bool p_disabled) {
+void AStar3D::set_point_disabled(int64_t p_id, bool p_disabled) {
Point *p;
bool p_exists = points.lookup(p_id, p);
ERR_FAIL_COND_MSG(!p_exists, vformat("Can't set if point is disabled. Point with id: %d doesn't exist.", p_id));
@@ -520,7 +520,7 @@ void AStar3D::set_point_disabled(int p_id, bool p_disabled) {
p->enabled = !p_disabled;
}
-bool AStar3D::is_point_disabled(int p_id) const {
+bool AStar3D::is_point_disabled(int64_t p_id) const {
Point *p;
bool p_exists = points.lookup(p_id, p);
ERR_FAIL_COND_V_MSG(!p_exists, false, vformat("Can't get if point is disabled. Point with id: %d doesn't exist.", p_id));
@@ -568,40 +568,40 @@ AStar3D::~AStar3D() {
/////////////////////////////////////////////////////////////
-int AStar2D::get_available_point_id() const {
+int64_t AStar2D::get_available_point_id() const {
return astar.get_available_point_id();
}
-void AStar2D::add_point(int p_id, const Vector2 &p_pos, real_t p_weight_scale) {
+void AStar2D::add_point(int64_t p_id, const Vector2 &p_pos, real_t p_weight_scale) {
astar.add_point(p_id, Vector3(p_pos.x, p_pos.y, 0), p_weight_scale);
}
-Vector2 AStar2D::get_point_position(int p_id) const {
+Vector2 AStar2D::get_point_position(int64_t p_id) const {
Vector3 p = astar.get_point_position(p_id);
return Vector2(p.x, p.y);
}
-void AStar2D::set_point_position(int p_id, const Vector2 &p_pos) {
+void AStar2D::set_point_position(int64_t p_id, const Vector2 &p_pos) {
astar.set_point_position(p_id, Vector3(p_pos.x, p_pos.y, 0));
}
-real_t AStar2D::get_point_weight_scale(int p_id) const {
+real_t AStar2D::get_point_weight_scale(int64_t p_id) const {
return astar.get_point_weight_scale(p_id);
}
-void AStar2D::set_point_weight_scale(int p_id, real_t p_weight_scale) {
+void AStar2D::set_point_weight_scale(int64_t p_id, real_t p_weight_scale) {
astar.set_point_weight_scale(p_id, p_weight_scale);
}
-void AStar2D::remove_point(int p_id) {
+void AStar2D::remove_point(int64_t p_id) {
astar.remove_point(p_id);
}
-bool AStar2D::has_point(int p_id) const {
+bool AStar2D::has_point(int64_t p_id) const {
return astar.has_point(p_id);
}
-Vector<int> AStar2D::get_point_connections(int p_id) {
+Vector<int64_t> AStar2D::get_point_connections(int64_t p_id) {
return astar.get_point_connections(p_id);
}
@@ -609,31 +609,31 @@ Array AStar2D::get_point_ids() {
return astar.get_point_ids();
}
-void AStar2D::set_point_disabled(int p_id, bool p_disabled) {
+void AStar2D::set_point_disabled(int64_t p_id, bool p_disabled) {
astar.set_point_disabled(p_id, p_disabled);
}
-bool AStar2D::is_point_disabled(int p_id) const {
+bool AStar2D::is_point_disabled(int64_t p_id) const {
return astar.is_point_disabled(p_id);
}
-void AStar2D::connect_points(int p_id, int p_with_id, bool p_bidirectional) {
+void AStar2D::connect_points(int64_t p_id, int64_t p_with_id, bool p_bidirectional) {
astar.connect_points(p_id, p_with_id, p_bidirectional);
}
-void AStar2D::disconnect_points(int p_id, int p_with_id) {
- astar.disconnect_points(p_id, p_with_id);
+void AStar2D::disconnect_points(int64_t p_id, int64_t p_with_id, bool p_bidirectional) {
+ astar.disconnect_points(p_id, p_with_id, p_bidirectional);
}
-bool AStar2D::are_points_connected(int p_id, int p_with_id) const {
- return astar.are_points_connected(p_id, p_with_id);
+bool AStar2D::are_points_connected(int64_t p_id, int64_t p_with_id, bool p_bidirectional) const {
+ return astar.are_points_connected(p_id, p_with_id, p_bidirectional);
}
-int AStar2D::get_point_count() const {
+int64_t AStar2D::get_point_count() const {
return astar.get_point_count();
}
-int AStar2D::get_point_capacity() const {
+int64_t AStar2D::get_point_capacity() const {
return astar.get_point_capacity();
}
@@ -641,11 +641,11 @@ void AStar2D::clear() {
astar.clear();
}
-void AStar2D::reserve_space(int p_num_nodes) {
+void AStar2D::reserve_space(int64_t p_num_nodes) {
astar.reserve_space(p_num_nodes);
}
-int AStar2D::get_closest_point(const Vector2 &p_point, bool p_include_disabled) const {
+int64_t AStar2D::get_closest_point(const Vector2 &p_point, bool p_include_disabled) const {
return astar.get_closest_point(Vector3(p_point.x, p_point.y, 0), p_include_disabled);
}
@@ -654,7 +654,7 @@ Vector2 AStar2D::get_closest_position_in_segment(const Vector2 &p_point) const {
return Vector2(p.x, p.y);
}
-real_t AStar2D::_estimate_cost(int p_from_id, int p_to_id) {
+real_t AStar2D::_estimate_cost(int64_t p_from_id, int64_t p_to_id) {
real_t scost;
if (GDVIRTUAL_CALL(_estimate_cost, p_from_id, p_to_id, scost)) {
return scost;
@@ -671,7 +671,7 @@ real_t AStar2D::_estimate_cost(int p_from_id, int p_to_id) {
return from_point->pos.distance_to(to_point->pos);
}
-real_t AStar2D::_compute_cost(int p_from_id, int p_to_id) {
+real_t AStar2D::_compute_cost(int64_t p_from_id, int64_t p_to_id) {
real_t scost;
if (GDVIRTUAL_CALL(_compute_cost, p_from_id, p_to_id, scost)) {
return scost;
@@ -688,7 +688,7 @@ real_t AStar2D::_compute_cost(int p_from_id, int p_to_id) {
return from_point->pos.distance_to(to_point->pos);
}
-Vector<Vector2> AStar2D::get_point_path(int p_from_id, int p_to_id) {
+Vector<Vector2> AStar2D::get_point_path(int64_t p_from_id, int64_t p_to_id) {
AStar3D::Point *a;
bool from_exists = astar.points.lookup(p_from_id, a);
ERR_FAIL_COND_V_MSG(!from_exists, Vector<Vector2>(), vformat("Can't get point path. Point with id: %d doesn't exist.", p_from_id));
@@ -711,7 +711,7 @@ Vector<Vector2> AStar2D::get_point_path(int p_from_id, int p_to_id) {
}
AStar3D::Point *p = end_point;
- int pc = 1; // Begin point
+ int64_t pc = 1; // Begin point
while (p != begin_point) {
pc++;
p = p->prev_point;
@@ -724,7 +724,7 @@ Vector<Vector2> AStar2D::get_point_path(int p_from_id, int p_to_id) {
Vector2 *w = path.ptrw();
AStar3D::Point *p2 = end_point;
- int idx = pc - 1;
+ int64_t idx = pc - 1;
while (p2 != begin_point) {
w[idx--] = Vector2(p2->pos.x, p2->pos.y);
p2 = p2->prev_point;
@@ -736,17 +736,17 @@ Vector<Vector2> AStar2D::get_point_path(int p_from_id, int p_to_id) {
return path;
}
-Vector<int> AStar2D::get_id_path(int p_from_id, int p_to_id) {
+Vector<int64_t> AStar2D::get_id_path(int64_t p_from_id, int64_t p_to_id) {
AStar3D::Point *a;
bool from_exists = astar.points.lookup(p_from_id, a);
- ERR_FAIL_COND_V_MSG(!from_exists, Vector<int>(), vformat("Can't get id path. Point with id: %d doesn't exist.", p_from_id));
+ ERR_FAIL_COND_V_MSG(!from_exists, Vector<int64_t>(), vformat("Can't get id path. Point with id: %d doesn't exist.", p_from_id));
AStar3D::Point *b;
bool to_exists = astar.points.lookup(p_to_id, b);
- ERR_FAIL_COND_V_MSG(!to_exists, Vector<int>(), vformat("Can't get id path. Point with id: %d doesn't exist.", p_to_id));
+ ERR_FAIL_COND_V_MSG(!to_exists, Vector<int64_t>(), vformat("Can't get id path. Point with id: %d doesn't exist.", p_to_id));
if (a == b) {
- Vector<int> ret;
+ Vector<int64_t> ret;
ret.push_back(a->id);
return ret;
}
@@ -756,24 +756,24 @@ Vector<int> AStar2D::get_id_path(int p_from_id, int p_to_id) {
bool found_route = _solve(begin_point, end_point);
if (!found_route) {
- return Vector<int>();
+ return Vector<int64_t>();
}
AStar3D::Point *p = end_point;
- int pc = 1; // Begin point
+ int64_t pc = 1; // Begin point
while (p != begin_point) {
pc++;
p = p->prev_point;
}
- Vector<int> path;
+ Vector<int64_t> path;
path.resize(pc);
{
- int *w = path.ptrw();
+ int64_t *w = path.ptrw();
p = end_point;
- int idx = pc - 1;
+ int64_t idx = pc - 1;
while (p != begin_point) {
w[idx--] = p->id;
p = p->prev_point;
@@ -813,7 +813,7 @@ bool AStar2D::_solve(AStar3D::Point *begin_point, AStar3D::Point *end_point) {
open_list.remove_at(open_list.size() - 1);
p->closed_pass = astar.pass; // Mark the point as closed
- for (OAHashMap<int, AStar3D::Point *>::Iterator it = p->neighbours.iter(); it.valid; it = p->neighbours.next_iter(it)) {
+ for (OAHashMap<int64_t, AStar3D::Point *>::Iterator it = p->neighbours.iter(); it.valid; it = p->neighbours.next_iter(it)) {
AStar3D::Point *e = *(it.value); // The neighbour point
if (!e->enabled || e->closed_pass == astar.pass) {
@@ -863,8 +863,8 @@ void AStar2D::_bind_methods() {
ClassDB::bind_method(D_METHOD("is_point_disabled", "id"), &AStar2D::is_point_disabled);
ClassDB::bind_method(D_METHOD("connect_points", "id", "to_id", "bidirectional"), &AStar2D::connect_points, DEFVAL(true));
- ClassDB::bind_method(D_METHOD("disconnect_points", "id", "to_id"), &AStar2D::disconnect_points);
- ClassDB::bind_method(D_METHOD("are_points_connected", "id", "to_id"), &AStar2D::are_points_connected);
+ ClassDB::bind_method(D_METHOD("disconnect_points", "id", "to_id", "bidirectional"), &AStar2D::disconnect_points, DEFVAL(true));
+ ClassDB::bind_method(D_METHOD("are_points_connected", "id", "to_id", "bidirectional"), &AStar2D::are_points_connected, DEFVAL(true));
ClassDB::bind_method(D_METHOD("get_point_count"), &AStar2D::get_point_count);
ClassDB::bind_method(D_METHOD("get_point_capacity"), &AStar2D::get_point_capacity);
diff --git a/core/math/a_star.h b/core/math/a_star.h
index e2f75ad18c..c1497d133f 100644
--- a/core/math/a_star.h
+++ b/core/math/a_star.h
@@ -47,13 +47,13 @@ class AStar3D : public RefCounted {
struct Point {
Point() {}
- int id = 0;
+ int64_t id = 0;
Vector3 pos;
real_t weight_scale = 0;
bool enabled = false;
- OAHashMap<int, Point *> neighbours = 4u;
- OAHashMap<int, Point *> unlinked_neighbours = 4u;
+ OAHashMap<int64_t, Point *> neighbours = 4u;
+ OAHashMap<int64_t, Point *> unlinked_neighbours = 4u;
// Used for pathfinding.
Point *prev_point = nullptr;
@@ -76,13 +76,7 @@ class AStar3D : public RefCounted {
};
struct Segment {
- union {
- struct {
- int32_t u;
- int32_t v;
- };
- uint64_t key = 0;
- };
+ Pair<int64_t, int64_t> key;
enum {
NONE = 0,
@@ -93,28 +87,28 @@ class AStar3D : public RefCounted {
unsigned char direction = NONE;
static uint32_t hash(const Segment &p_seg) {
- return hash_one_uint64(p_seg.key);
+ return PairHash<int64_t, int64_t>().hash(p_seg.key);
}
bool operator==(const Segment &p_s) const { return key == p_s.key; }
Segment() {}
- Segment(int p_from, int p_to) {
+ Segment(int64_t p_from, int64_t p_to) {
if (p_from < p_to) {
- u = p_from;
- v = p_to;
+ key.first = p_from;
+ key.second = p_to;
direction = FORWARD;
} else {
- u = p_to;
- v = p_from;
+ key.first = p_to;
+ key.second = p_from;
direction = BACKWARD;
}
}
};
- int last_free_id = 0;
+ int64_t last_free_id = 0;
uint64_t pass = 1;
- OAHashMap<int, Point *> points;
+ OAHashMap<int64_t, Point *> points;
HashSet<Segment, Segment> segments;
bool _solve(Point *begin_point, Point *end_point);
@@ -122,42 +116,42 @@ class AStar3D : public RefCounted {
protected:
static void _bind_methods();
- virtual real_t _estimate_cost(int p_from_id, int p_to_id);
- virtual real_t _compute_cost(int p_from_id, int p_to_id);
+ virtual real_t _estimate_cost(int64_t p_from_id, int64_t p_to_id);
+ virtual real_t _compute_cost(int64_t p_from_id, int64_t p_to_id);
GDVIRTUAL2RC(real_t, _estimate_cost, int64_t, int64_t)
GDVIRTUAL2RC(real_t, _compute_cost, int64_t, int64_t)
public:
- int get_available_point_id() const;
-
- void add_point(int p_id, const Vector3 &p_pos, real_t p_weight_scale = 1);
- Vector3 get_point_position(int p_id) const;
- void set_point_position(int p_id, const Vector3 &p_pos);
- real_t get_point_weight_scale(int p_id) const;
- void set_point_weight_scale(int p_id, real_t p_weight_scale);
- void remove_point(int p_id);
- bool has_point(int p_id) const;
- Vector<int> get_point_connections(int p_id);
+ int64_t get_available_point_id() const;
+
+ void add_point(int64_t p_id, const Vector3 &p_pos, real_t p_weight_scale = 1);
+ Vector3 get_point_position(int64_t p_id) const;
+ void set_point_position(int64_t p_id, const Vector3 &p_pos);
+ real_t get_point_weight_scale(int64_t p_id) const;
+ void set_point_weight_scale(int64_t p_id, real_t p_weight_scale);
+ void remove_point(int64_t p_id);
+ bool has_point(int64_t p_id) const;
+ Vector<int64_t> get_point_connections(int64_t p_id);
Array get_point_ids();
- void set_point_disabled(int p_id, bool p_disabled = true);
- bool is_point_disabled(int p_id) const;
+ void set_point_disabled(int64_t p_id, bool p_disabled = true);
+ bool is_point_disabled(int64_t p_id) const;
- void connect_points(int p_id, int p_with_id, bool bidirectional = true);
- void disconnect_points(int p_id, int p_with_id, bool bidirectional = true);
- bool are_points_connected(int p_id, int p_with_id, bool bidirectional = true) const;
+ void connect_points(int64_t p_id, int64_t p_with_id, bool bidirectional = true);
+ void disconnect_points(int64_t p_id, int64_t p_with_id, bool bidirectional = true);
+ bool are_points_connected(int64_t p_id, int64_t p_with_id, bool bidirectional = true) const;
- int get_point_count() const;
- int get_point_capacity() const;
- void reserve_space(int p_num_nodes);
+ int64_t get_point_count() const;
+ int64_t get_point_capacity() const;
+ void reserve_space(int64_t p_num_nodes);
void clear();
- int get_closest_point(const Vector3 &p_point, bool p_include_disabled = false) const;
+ int64_t get_closest_point(const Vector3 &p_point, bool p_include_disabled = false) const;
Vector3 get_closest_position_in_segment(const Vector3 &p_point) const;
- Vector<Vector3> get_point_path(int p_from_id, int p_to_id);
- Vector<int> get_id_path(int p_from_id, int p_to_id);
+ Vector<Vector3> get_point_path(int64_t p_from_id, int64_t p_to_id);
+ Vector<int64_t> get_id_path(int64_t p_from_id, int64_t p_to_id);
AStar3D() {}
~AStar3D();
@@ -172,42 +166,42 @@ class AStar2D : public RefCounted {
protected:
static void _bind_methods();
- virtual real_t _estimate_cost(int p_from_id, int p_to_id);
- virtual real_t _compute_cost(int p_from_id, int p_to_id);
+ virtual real_t _estimate_cost(int64_t p_from_id, int64_t p_to_id);
+ virtual real_t _compute_cost(int64_t p_from_id, int64_t p_to_id);
GDVIRTUAL2RC(real_t, _estimate_cost, int64_t, int64_t)
GDVIRTUAL2RC(real_t, _compute_cost, int64_t, int64_t)
public:
- int get_available_point_id() const;
-
- void add_point(int p_id, const Vector2 &p_pos, real_t p_weight_scale = 1);
- Vector2 get_point_position(int p_id) const;
- void set_point_position(int p_id, const Vector2 &p_pos);
- real_t get_point_weight_scale(int p_id) const;
- void set_point_weight_scale(int p_id, real_t p_weight_scale);
- void remove_point(int p_id);
- bool has_point(int p_id) const;
- Vector<int> get_point_connections(int p_id);
+ int64_t get_available_point_id() const;
+
+ void add_point(int64_t p_id, const Vector2 &p_pos, real_t p_weight_scale = 1);
+ Vector2 get_point_position(int64_t p_id) const;
+ void set_point_position(int64_t p_id, const Vector2 &p_pos);
+ real_t get_point_weight_scale(int64_t p_id) const;
+ void set_point_weight_scale(int64_t p_id, real_t p_weight_scale);
+ void remove_point(int64_t p_id);
+ bool has_point(int64_t p_id) const;
+ Vector<int64_t> get_point_connections(int64_t p_id);
Array get_point_ids();
- void set_point_disabled(int p_id, bool p_disabled = true);
- bool is_point_disabled(int p_id) const;
+ void set_point_disabled(int64_t p_id, bool p_disabled = true);
+ bool is_point_disabled(int64_t p_id) const;
- void connect_points(int p_id, int p_with_id, bool p_bidirectional = true);
- void disconnect_points(int p_id, int p_with_id);
- bool are_points_connected(int p_id, int p_with_id) const;
+ void connect_points(int64_t p_id, int64_t p_with_id, bool p_bidirectional = true);
+ void disconnect_points(int64_t p_id, int64_t p_with_id, bool p_bidirectional = true);
+ bool are_points_connected(int64_t p_id, int64_t p_with_id, bool p_bidirectional = true) const;
- int get_point_count() const;
- int get_point_capacity() const;
- void reserve_space(int p_num_nodes);
+ int64_t get_point_count() const;
+ int64_t get_point_capacity() const;
+ void reserve_space(int64_t p_num_nodes);
void clear();
- int get_closest_point(const Vector2 &p_point, bool p_include_disabled = false) const;
+ int64_t get_closest_point(const Vector2 &p_point, bool p_include_disabled = false) const;
Vector2 get_closest_position_in_segment(const Vector2 &p_point) const;
- Vector<Vector2> get_point_path(int p_from_id, int p_to_id);
- Vector<int> get_id_path(int p_from_id, int p_to_id);
+ Vector<Vector2> get_point_path(int64_t p_from_id, int64_t p_to_id);
+ Vector<int64_t> get_id_path(int64_t p_from_id, int64_t p_to_id);
AStar2D() {}
~AStar2D() {}
diff --git a/core/math/audio_frame.h b/core/math/audio_frame.h
index 8b244e9fe4..b3d63c0094 100644
--- a/core/math/audio_frame.h
+++ b/core/math/audio_frame.h
@@ -52,7 +52,7 @@ static const float AUDIO_MIN_PEAK_DB = -200.0f; // linear2db(AUDIO_PEAK_OFFSET)
struct AudioFrame {
//left and right samples
- float l, r;
+ float l = 0.f, r = 0.f;
_ALWAYS_INLINE_ const float &operator[](int idx) const { return idx == 0 ? l : r; }
_ALWAYS_INLINE_ float &operator[](int idx) { return idx == 0 ? l : r; }
diff --git a/core/math/basis.cpp b/core/math/basis.cpp
index 65353d8118..ce5e9aa9b3 100644
--- a/core/math/basis.cpp
+++ b/core/math/basis.cpp
@@ -365,12 +365,12 @@ Basis Basis::rotated_local(const Vector3 &p_axis, real_t p_angle) const {
return (*this) * Basis(p_axis, p_angle);
}
-Basis Basis::rotated(const Vector3 &p_euler) const {
- return Basis(p_euler) * (*this);
+Basis Basis::rotated(const Vector3 &p_euler, EulerOrder p_order) const {
+ return Basis::from_euler(p_euler, p_order) * (*this);
}
-void Basis::rotate(const Vector3 &p_euler) {
- *this = rotated(p_euler);
+void Basis::rotate(const Vector3 &p_euler, EulerOrder p_order) {
+ *this = rotated(p_euler, p_order);
}
Basis Basis::rotated(const Quaternion &p_quaternion) const {
@@ -935,9 +935,9 @@ void Basis::set_axis_angle_scale(const Vector3 &p_axis, real_t p_angle, const Ve
rotate(p_axis, p_angle);
}
-void Basis::set_euler_scale(const Vector3 &p_euler, const Vector3 &p_scale) {
+void Basis::set_euler_scale(const Vector3 &p_euler, const Vector3 &p_scale, EulerOrder p_order) {
_set_diagonal(p_scale);
- rotate(p_euler);
+ rotate(p_euler, p_order);
}
void Basis::set_quaternion_scale(const Quaternion &p_quaternion, const Vector3 &p_scale) {
diff --git a/core/math/basis.h b/core/math/basis.h
index 9cce22510b..4be325cdd2 100644
--- a/core/math/basis.h
+++ b/core/math/basis.h
@@ -56,6 +56,15 @@ struct _NO_DISCARD_ Basis {
_FORCE_INLINE_ real_t determinant() const;
+ enum EulerOrder {
+ EULER_ORDER_XYZ,
+ EULER_ORDER_XZY,
+ EULER_ORDER_YXZ,
+ EULER_ORDER_YZX,
+ EULER_ORDER_ZXY,
+ EULER_ORDER_ZYX
+ };
+
void from_z(const Vector3 &p_z);
void rotate(const Vector3 &p_axis, real_t p_angle);
@@ -64,21 +73,12 @@ struct _NO_DISCARD_ Basis {
void rotate_local(const Vector3 &p_axis, real_t p_angle);
Basis rotated_local(const Vector3 &p_axis, real_t p_angle) const;
- void rotate(const Vector3 &p_euler);
- Basis rotated(const Vector3 &p_euler) const;
+ void rotate(const Vector3 &p_euler, EulerOrder p_order = EULER_ORDER_YXZ);
+ Basis rotated(const Vector3 &p_euler, EulerOrder p_order = EULER_ORDER_YXZ) const;
void rotate(const Quaternion &p_quaternion);
Basis rotated(const Quaternion &p_quaternion) const;
- enum EulerOrder {
- EULER_ORDER_XYZ,
- EULER_ORDER_XZY,
- EULER_ORDER_YXZ,
- EULER_ORDER_YZX,
- EULER_ORDER_ZXY,
- EULER_ORDER_ZYX
- };
-
Vector3 get_euler_normalized(EulerOrder p_order = EULER_ORDER_YXZ) const;
void get_rotation_axis_angle(Vector3 &p_axis, real_t &p_angle) const;
void get_rotation_axis_angle_local(Vector3 &p_axis, real_t &p_angle) const;
@@ -119,7 +119,7 @@ struct _NO_DISCARD_ Basis {
Vector3 get_scale_local() const;
void set_axis_angle_scale(const Vector3 &p_axis, real_t p_angle, const Vector3 &p_scale);
- void set_euler_scale(const Vector3 &p_euler, const Vector3 &p_scale);
+ void set_euler_scale(const Vector3 &p_euler, const Vector3 &p_scale, EulerOrder p_order = EULER_ORDER_YXZ);
void set_quaternion_scale(const Quaternion &p_quaternion, const Vector3 &p_scale);
// transposed dot products
diff --git a/core/math/delaunay_3d.h b/core/math/delaunay_3d.h
index f8a10ec87e..4ab00e1f34 100644
--- a/core/math/delaunay_3d.h
+++ b/core/math/delaunay_3d.h
@@ -101,7 +101,7 @@ class Delaunay3D {
_FORCE_INLINE_ static uint32_t hash(const Triangle &p_triangle) {
uint32_t h = hash_djb2_one_32(p_triangle.triangle[0]);
h = hash_djb2_one_32(p_triangle.triangle[1], h);
- return hash_djb2_one_32(p_triangle.triangle[2], h);
+ return hash_fmix32(hash_djb2_one_32(p_triangle.triangle[2], h));
}
};
diff --git a/core/math/expression.cpp b/core/math/expression.cpp
index 5a90f68b66..419056d7d6 100644
--- a/core/math/expression.cpp
+++ b/core/math/expression.cpp
@@ -1240,7 +1240,7 @@ bool Expression::_compile_expression() {
return false;
}
-bool Expression::_execute(const Array &p_inputs, Object *p_instance, Expression::ENode *p_node, Variant &r_ret, String &r_error_str) {
+bool Expression::_execute(const Array &p_inputs, Object *p_instance, Expression::ENode *p_node, Variant &r_ret, bool p_const_calls_only, String &r_error_str) {
switch (p_node->type) {
case Expression::ENode::TYPE_INPUT: {
const Expression::InputNode *in = static_cast<const Expression::InputNode *>(p_node);
@@ -1266,7 +1266,7 @@ bool Expression::_execute(const Array &p_inputs, Object *p_instance, Expression:
const Expression::OperatorNode *op = static_cast<const Expression::OperatorNode *>(p_node);
Variant a;
- bool ret = _execute(p_inputs, p_instance, op->nodes[0], a, r_error_str);
+ bool ret = _execute(p_inputs, p_instance, op->nodes[0], a, p_const_calls_only, r_error_str);
if (ret) {
return true;
}
@@ -1274,7 +1274,7 @@ bool Expression::_execute(const Array &p_inputs, Object *p_instance, Expression:
Variant b;
if (op->nodes[1]) {
- ret = _execute(p_inputs, p_instance, op->nodes[1], b, r_error_str);
+ ret = _execute(p_inputs, p_instance, op->nodes[1], b, p_const_calls_only, r_error_str);
if (ret) {
return true;
}
@@ -1292,14 +1292,14 @@ bool Expression::_execute(const Array &p_inputs, Object *p_instance, Expression:
const Expression::IndexNode *index = static_cast<const Expression::IndexNode *>(p_node);
Variant base;
- bool ret = _execute(p_inputs, p_instance, index->base, base, r_error_str);
+ bool ret = _execute(p_inputs, p_instance, index->base, base, p_const_calls_only, r_error_str);
if (ret) {
return true;
}
Variant idx;
- ret = _execute(p_inputs, p_instance, index->index, idx, r_error_str);
+ ret = _execute(p_inputs, p_instance, index->index, idx, p_const_calls_only, r_error_str);
if (ret) {
return true;
}
@@ -1316,7 +1316,7 @@ bool Expression::_execute(const Array &p_inputs, Object *p_instance, Expression:
const Expression::NamedIndexNode *index = static_cast<const Expression::NamedIndexNode *>(p_node);
Variant base;
- bool ret = _execute(p_inputs, p_instance, index->base, base, r_error_str);
+ bool ret = _execute(p_inputs, p_instance, index->base, base, p_const_calls_only, r_error_str);
if (ret) {
return true;
}
@@ -1336,7 +1336,7 @@ bool Expression::_execute(const Array &p_inputs, Object *p_instance, Expression:
arr.resize(array->array.size());
for (int i = 0; i < array->array.size(); i++) {
Variant value;
- bool ret = _execute(p_inputs, p_instance, array->array[i], value, r_error_str);
+ bool ret = _execute(p_inputs, p_instance, array->array[i], value, p_const_calls_only, r_error_str);
if (ret) {
return true;
@@ -1353,14 +1353,14 @@ bool Expression::_execute(const Array &p_inputs, Object *p_instance, Expression:
Dictionary d;
for (int i = 0; i < dictionary->dict.size(); i += 2) {
Variant key;
- bool ret = _execute(p_inputs, p_instance, dictionary->dict[i + 0], key, r_error_str);
+ bool ret = _execute(p_inputs, p_instance, dictionary->dict[i + 0], key, p_const_calls_only, r_error_str);
if (ret) {
return true;
}
Variant value;
- ret = _execute(p_inputs, p_instance, dictionary->dict[i + 1], value, r_error_str);
+ ret = _execute(p_inputs, p_instance, dictionary->dict[i + 1], value, p_const_calls_only, r_error_str);
if (ret) {
return true;
}
@@ -1380,7 +1380,7 @@ bool Expression::_execute(const Array &p_inputs, Object *p_instance, Expression:
for (int i = 0; i < constructor->arguments.size(); i++) {
Variant value;
- bool ret = _execute(p_inputs, p_instance, constructor->arguments[i], value, r_error_str);
+ bool ret = _execute(p_inputs, p_instance, constructor->arguments[i], value, p_const_calls_only, r_error_str);
if (ret) {
return true;
@@ -1408,7 +1408,7 @@ bool Expression::_execute(const Array &p_inputs, Object *p_instance, Expression:
for (int i = 0; i < bifunc->arguments.size(); i++) {
Variant value;
- bool ret = _execute(p_inputs, p_instance, bifunc->arguments[i], value, r_error_str);
+ bool ret = _execute(p_inputs, p_instance, bifunc->arguments[i], value, p_const_calls_only, r_error_str);
if (ret) {
return true;
}
@@ -1429,7 +1429,7 @@ bool Expression::_execute(const Array &p_inputs, Object *p_instance, Expression:
const Expression::CallNode *call = static_cast<const Expression::CallNode *>(p_node);
Variant base;
- bool ret = _execute(p_inputs, p_instance, call->base, base, r_error_str);
+ bool ret = _execute(p_inputs, p_instance, call->base, base, p_const_calls_only, r_error_str);
if (ret) {
return true;
@@ -1442,7 +1442,7 @@ bool Expression::_execute(const Array &p_inputs, Object *p_instance, Expression:
for (int i = 0; i < call->arguments.size(); i++) {
Variant value;
- ret = _execute(p_inputs, p_instance, call->arguments[i], value, r_error_str);
+ ret = _execute(p_inputs, p_instance, call->arguments[i], value, p_const_calls_only, r_error_str);
if (ret) {
return true;
@@ -1452,7 +1452,11 @@ bool Expression::_execute(const Array &p_inputs, Object *p_instance, Expression:
}
Callable::CallError ce;
- base.callp(call->method, (const Variant **)argp.ptr(), argp.size(), r_ret, ce);
+ if (p_const_calls_only) {
+ base.call_const(call->method, (const Variant **)argp.ptr(), argp.size(), r_ret, ce);
+ } else {
+ base.callp(call->method, (const Variant **)argp.ptr(), argp.size(), r_ret, ce);
+ }
if (ce.error != Callable::CallError::CALL_OK) {
r_error_str = vformat(RTR("On call to '%s':"), String(call->method));
@@ -1491,13 +1495,13 @@ Error Expression::parse(const String &p_expression, const Vector<String> &p_inpu
return OK;
}
-Variant Expression::execute(Array p_inputs, Object *p_base, bool p_show_error) {
+Variant Expression::execute(Array p_inputs, Object *p_base, bool p_show_error, bool p_const_calls_only) {
ERR_FAIL_COND_V_MSG(error_set, Variant(), "There was previously a parse error: " + error_str + ".");
execution_error = false;
Variant output;
String error_txt;
- bool err = _execute(p_inputs, p_base, root, output, error_txt);
+ bool err = _execute(p_inputs, p_base, root, output, p_const_calls_only, error_txt);
if (err) {
execution_error = true;
error_str = error_txt;
@@ -1517,7 +1521,7 @@ String Expression::get_error_text() const {
void Expression::_bind_methods() {
ClassDB::bind_method(D_METHOD("parse", "expression", "input_names"), &Expression::parse, DEFVAL(Vector<String>()));
- ClassDB::bind_method(D_METHOD("execute", "inputs", "base_instance", "show_error"), &Expression::execute, DEFVAL(Array()), DEFVAL(Variant()), DEFVAL(true));
+ ClassDB::bind_method(D_METHOD("execute", "inputs", "base_instance", "show_error", "const_calls_only"), &Expression::execute, DEFVAL(Array()), DEFVAL(Variant()), DEFVAL(true), DEFVAL(false));
ClassDB::bind_method(D_METHOD("has_execute_failed"), &Expression::has_execute_failed);
ClassDB::bind_method(D_METHOD("get_error_text"), &Expression::get_error_text);
}
diff --git a/core/math/expression.h b/core/math/expression.h
index 6ea3c1611f..2d58915996 100644
--- a/core/math/expression.h
+++ b/core/math/expression.h
@@ -257,14 +257,14 @@ private:
Vector<String> input_names;
bool execution_error = false;
- bool _execute(const Array &p_inputs, Object *p_instance, Expression::ENode *p_node, Variant &r_ret, String &r_error_str);
+ bool _execute(const Array &p_inputs, Object *p_instance, Expression::ENode *p_node, Variant &r_ret, bool p_const_calls_only, String &r_error_str);
protected:
static void _bind_methods();
public:
Error parse(const String &p_expression, const Vector<String> &p_input_names = Vector<String>());
- Variant execute(Array p_inputs = Array(), Object *p_base = nullptr, bool p_show_error = true);
+ Variant execute(Array p_inputs = Array(), Object *p_base = nullptr, bool p_show_error = true, bool p_const_calls_only = false);
bool has_execute_failed() const;
String get_error_text() const;
diff --git a/core/math/math_funcs.h b/core/math/math_funcs.h
index c8a55341aa..53deb9bd42 100644
--- a/core/math/math_funcs.h
+++ b/core/math/math_funcs.h
@@ -253,6 +253,27 @@ public:
(-p_pre + 3.0f * p_from - 3.0f * p_to + p_post) * (p_weight * p_weight * p_weight));
}
+ static _ALWAYS_INLINE_ double bezier_interpolate(double p_start, double p_control_1, double p_control_2, double p_end, double p_t) {
+ /* Formula from Wikipedia article on Bezier curves. */
+ double omt = (1.0 - p_t);
+ double omt2 = omt * omt;
+ double omt3 = omt2 * omt;
+ double t2 = p_t * p_t;
+ double t3 = t2 * p_t;
+
+ return p_start * omt3 + p_control_1 * omt2 * p_t * 3.0 + p_control_2 * omt * t2 * 3.0 + p_end * t3;
+ }
+ static _ALWAYS_INLINE_ float bezier_interpolate(float p_start, float p_control_1, float p_control_2, float p_end, float p_t) {
+ /* Formula from Wikipedia article on Bezier curves. */
+ float omt = (1.0f - p_t);
+ float omt2 = omt * omt;
+ float omt3 = omt2 * omt;
+ float t2 = p_t * p_t;
+ float t3 = t2 * p_t;
+
+ return p_start * omt3 + p_control_1 * omt2 * p_t * 3.0f + p_control_2 * omt * t2 * 3.0f + p_end * t3;
+ }
+
static _ALWAYS_INLINE_ double lerp_angle(double p_from, double p_to, double p_weight) {
double difference = fmod(p_to - p_from, Math_TAU);
double distance = fmod(2.0 * difference, Math_TAU) - difference;
diff --git a/core/math/triangle_mesh.cpp b/core/math/triangle_mesh.cpp
index 54461bf70f..4433559e6d 100644
--- a/core/math/triangle_mesh.cpp
+++ b/core/math/triangle_mesh.cpp
@@ -104,9 +104,11 @@ void TriangleMesh::get_indices(Vector<int> *r_triangles_indices) const {
}
}
-void TriangleMesh::create(const Vector<Vector3> &p_faces) {
+void TriangleMesh::create(const Vector<Vector3> &p_faces, const Vector<int32_t> &p_surface_indices) {
valid = false;
+ ERR_FAIL_COND(p_surface_indices.size() && p_surface_indices.size() != p_faces.size());
+
int fc = p_faces.size();
ERR_FAIL_COND(!fc || ((fc % 3) != 0));
fc /= 3;
@@ -121,6 +123,7 @@ void TriangleMesh::create(const Vector<Vector3> &p_faces) {
//goes in-place.
const Vector3 *r = p_faces.ptr();
+ const int32_t *si = p_surface_indices.ptr();
Triangle *w = triangles.ptrw();
HashMap<Vector3, int> db;
@@ -148,6 +151,7 @@ void TriangleMesh::create(const Vector<Vector3> &p_faces) {
}
f.normal = Face3(r[i * 3 + 0], r[i * 3 + 1], r[i * 3 + 2]).get_plane().get_normal();
+ f.surface_index = si ? si[i] : 0;
bw[i].left = -1;
bw[i].right = -1;
@@ -264,7 +268,7 @@ Vector3 TriangleMesh::get_area_normal(const AABB &p_aabb) const {
return n;
}
-bool TriangleMesh::intersect_segment(const Vector3 &p_begin, const Vector3 &p_end, Vector3 &r_point, Vector3 &r_normal) const {
+bool TriangleMesh::intersect_segment(const Vector3 &p_begin, const Vector3 &p_end, Vector3 &r_point, Vector3 &r_normal, int32_t *r_surf_index) const {
uint32_t *stack = (uint32_t *)alloca(sizeof(int) * max_depth);
enum {
@@ -317,6 +321,9 @@ bool TriangleMesh::intersect_segment(const Vector3 &p_begin, const Vector3 &p_en
d = nd;
r_point = res;
r_normal = f3.get_plane().get_normal();
+ if (r_surf_index) {
+ *r_surf_index = s.surface_index;
+ }
inters = true;
}
}
@@ -366,7 +373,7 @@ bool TriangleMesh::intersect_segment(const Vector3 &p_begin, const Vector3 &p_en
return inters;
}
-bool TriangleMesh::intersect_ray(const Vector3 &p_begin, const Vector3 &p_dir, Vector3 &r_point, Vector3 &r_normal) const {
+bool TriangleMesh::intersect_ray(const Vector3 &p_begin, const Vector3 &p_dir, Vector3 &r_point, Vector3 &r_normal, int32_t *r_surf_index) const {
uint32_t *stack = (uint32_t *)alloca(sizeof(int) * max_depth);
enum {
@@ -417,6 +424,9 @@ bool TriangleMesh::intersect_ray(const Vector3 &p_begin, const Vector3 &p_dir, V
d = nd;
r_point = res;
r_normal = f3.get_plane().get_normal();
+ if (r_surf_index) {
+ *r_surf_index = s.surface_index;
+ }
inters = true;
}
}
diff --git a/core/math/triangle_mesh.h b/core/math/triangle_mesh.h
index 1b99945698..166b4adb7a 100644
--- a/core/math/triangle_mesh.h
+++ b/core/math/triangle_mesh.h
@@ -41,6 +41,7 @@ public:
struct Triangle {
Vector3 normal;
int indices[3];
+ int32_t surface_index;
};
private:
@@ -81,8 +82,8 @@ private:
public:
bool is_valid() const;
- bool intersect_segment(const Vector3 &p_begin, const Vector3 &p_end, Vector3 &r_point, Vector3 &r_normal) const;
- bool intersect_ray(const Vector3 &p_begin, const Vector3 &p_dir, Vector3 &r_point, Vector3 &r_normal) const;
+ bool intersect_segment(const Vector3 &p_begin, const Vector3 &p_end, Vector3 &r_point, Vector3 &r_normal, int32_t *r_surf_index = nullptr) const;
+ bool intersect_ray(const Vector3 &p_begin, const Vector3 &p_dir, Vector3 &r_point, Vector3 &r_normal, int32_t *r_surf_index = nullptr) const;
bool intersect_convex_shape(const Plane *p_planes, int p_plane_count, const Vector3 *p_points, int p_point_count) const;
bool inside_convex_shape(const Plane *p_planes, int p_plane_count, const Vector3 *p_points, int p_point_count, Vector3 p_scale = Vector3(1, 1, 1)) const;
Vector3 get_area_normal(const AABB &p_aabb) const;
@@ -92,7 +93,7 @@ public:
const Vector<Vector3> &get_vertices() const { return vertices; }
void get_indices(Vector<int> *r_triangles_indices) const;
- void create(const Vector<Vector3> &p_faces);
+ void create(const Vector<Vector3> &p_faces, const Vector<int32_t> &p_surface_indices = Vector<int32_t>());
TriangleMesh();
};
diff --git a/core/math/vector2.cpp b/core/math/vector2.cpp
index a27227905c..d9b5d55454 100644
--- a/core/math/vector2.cpp
+++ b/core/math/vector2.cpp
@@ -152,13 +152,6 @@ Vector2 Vector2::limit_length(const real_t p_len) const {
return v;
}
-Vector2 Vector2::cubic_interpolate(const Vector2 &p_b, const Vector2 &p_pre_a, const Vector2 &p_post_b, const real_t p_weight) const {
- Vector2 res = *this;
- res.x = Math::cubic_interpolate(res.x, p_b.x, p_pre_a.x, p_post_b.x, p_weight);
- res.y = Math::cubic_interpolate(res.y, p_b.y, p_pre_a.y, p_post_b.y, p_weight);
- return res;
-}
-
Vector2 Vector2::move_toward(const Vector2 &p_to, const real_t p_delta) const {
Vector2 v = *this;
Vector2 vd = p_to - v;
diff --git a/core/math/vector2.h b/core/math/vector2.h
index bd67299f33..91d3d3a56b 100644
--- a/core/math/vector2.h
+++ b/core/math/vector2.h
@@ -113,7 +113,9 @@ struct _NO_DISCARD_ Vector2 {
_FORCE_INLINE_ Vector2 lerp(const Vector2 &p_to, const real_t p_weight) const;
_FORCE_INLINE_ Vector2 slerp(const Vector2 &p_to, const real_t p_weight) const;
- Vector2 cubic_interpolate(const Vector2 &p_b, const Vector2 &p_pre_a, const Vector2 &p_post_b, const real_t p_weight) const;
+ _FORCE_INLINE_ Vector2 cubic_interpolate(const Vector2 &p_b, const Vector2 &p_pre_a, const Vector2 &p_post_b, const real_t p_weight) const;
+ _FORCE_INLINE_ Vector2 bezier_interpolate(const Vector2 &p_control_1, const Vector2 &p_control_2, const Vector2 &p_end, const real_t p_t) const;
+
Vector2 move_toward(const Vector2 &p_to, const real_t p_delta) const;
Vector2 slide(const Vector2 &p_normal) const;
@@ -261,6 +263,26 @@ Vector2 Vector2::slerp(const Vector2 &p_to, const real_t p_weight) const {
return rotated(angle * p_weight) * (result_length / start_length);
}
+Vector2 Vector2::cubic_interpolate(const Vector2 &p_b, const Vector2 &p_pre_a, const Vector2 &p_post_b, const real_t p_weight) const {
+ Vector2 res = *this;
+ res.x = Math::cubic_interpolate(res.x, p_b.x, p_pre_a.x, p_post_b.x, p_weight);
+ res.y = Math::cubic_interpolate(res.y, p_b.y, p_pre_a.y, p_post_b.y, p_weight);
+ return res;
+}
+
+Vector2 Vector2::bezier_interpolate(const Vector2 &p_control_1, const Vector2 &p_control_2, const Vector2 &p_end, const real_t p_t) const {
+ Vector2 res = *this;
+
+ /* Formula from Wikipedia article on Bezier curves. */
+ real_t omt = (1.0 - p_t);
+ real_t omt2 = omt * omt;
+ real_t omt3 = omt2 * omt;
+ real_t t2 = p_t * p_t;
+ real_t t3 = t2 * p_t;
+
+ return res * omt3 + p_control_1 * omt2 * p_t * 3.0 + p_control_2 * omt * t2 * 3.0 + p_end * t3;
+}
+
Vector2 Vector2::direction_to(const Vector2 &p_to) const {
Vector2 ret(p_to.x - x, p_to.y - y);
ret.normalize();
diff --git a/core/math/vector3.cpp b/core/math/vector3.cpp
index f94f39b7f2..d71d365053 100644
--- a/core/math/vector3.cpp
+++ b/core/math/vector3.cpp
@@ -85,14 +85,6 @@ Vector3 Vector3::limit_length(const real_t p_len) const {
return v;
}
-Vector3 Vector3::cubic_interpolate(const Vector3 &p_b, const Vector3 &p_pre_a, const Vector3 &p_post_b, const real_t p_weight) const {
- Vector3 res = *this;
- res.x = Math::cubic_interpolate(res.x, p_b.x, p_pre_a.x, p_post_b.x, p_weight);
- res.y = Math::cubic_interpolate(res.y, p_b.y, p_pre_a.y, p_post_b.y, p_weight);
- res.z = Math::cubic_interpolate(res.z, p_b.z, p_pre_a.z, p_post_b.z, p_weight);
- return res;
-}
-
Vector3 Vector3::move_toward(const Vector3 &p_to, const real_t p_delta) const {
Vector3 v = *this;
Vector3 vd = p_to - v;
diff --git a/core/math/vector3.h b/core/math/vector3.h
index 8891532f42..970416234d 100644
--- a/core/math/vector3.h
+++ b/core/math/vector3.h
@@ -104,7 +104,9 @@ struct _NO_DISCARD_ Vector3 {
_FORCE_INLINE_ Vector3 lerp(const Vector3 &p_to, const real_t p_weight) const;
_FORCE_INLINE_ Vector3 slerp(const Vector3 &p_to, const real_t p_weight) const;
- Vector3 cubic_interpolate(const Vector3 &p_b, const Vector3 &p_pre_a, const Vector3 &p_post_b, const real_t p_weight) const;
+ _FORCE_INLINE_ Vector3 cubic_interpolate(const Vector3 &p_b, const Vector3 &p_pre_a, const Vector3 &p_post_b, const real_t p_weight) const;
+ _FORCE_INLINE_ Vector3 bezier_interpolate(const Vector3 &p_control_1, const Vector3 &p_control_2, const Vector3 &p_end, const real_t p_t) const;
+
Vector3 move_toward(const Vector3 &p_to, const real_t p_delta) const;
Vector2 octahedron_encode() const;
@@ -227,6 +229,27 @@ Vector3 Vector3::slerp(const Vector3 &p_to, const real_t p_weight) const {
return rotated(cross(p_to).normalized(), angle * p_weight) * (result_length / start_length);
}
+Vector3 Vector3::cubic_interpolate(const Vector3 &p_b, const Vector3 &p_pre_a, const Vector3 &p_post_b, const real_t p_weight) const {
+ Vector3 res = *this;
+ res.x = Math::cubic_interpolate(res.x, p_b.x, p_pre_a.x, p_post_b.x, p_weight);
+ res.y = Math::cubic_interpolate(res.y, p_b.y, p_pre_a.y, p_post_b.y, p_weight);
+ res.z = Math::cubic_interpolate(res.z, p_b.z, p_pre_a.z, p_post_b.z, p_weight);
+ return res;
+}
+
+Vector3 Vector3::bezier_interpolate(const Vector3 &p_control_1, const Vector3 &p_control_2, const Vector3 &p_end, const real_t p_t) const {
+ Vector3 res = *this;
+
+ /* Formula from Wikipedia article on Bezier curves. */
+ real_t omt = (1.0 - p_t);
+ real_t omt2 = omt * omt;
+ real_t omt3 = omt2 * omt;
+ real_t t2 = p_t * p_t;
+ real_t t3 = t2 * p_t;
+
+ return res * omt3 + p_control_1 * omt2 * p_t * 3.0 + p_control_2 * omt * t2 * 3.0 + p_end * t3;
+}
+
real_t Vector3::distance_to(const Vector3 &p_to) const {
return (p_to - *this).length();
}
diff --git a/core/multiplayer/multiplayer_peer.cpp b/core/multiplayer/multiplayer_peer.cpp
index ae3b139bcc..b262903ce8 100644
--- a/core/multiplayer/multiplayer_peer.cpp
+++ b/core/multiplayer/multiplayer_peer.cpp
@@ -36,17 +36,18 @@ uint32_t MultiplayerPeer::generate_unique_id() const {
uint32_t hash = 0;
while (hash == 0 || hash == 1) {
- hash = hash_djb2_one_32(
+ hash = hash_murmur3_one_32(
(uint32_t)OS::get_singleton()->get_ticks_usec());
- hash = hash_djb2_one_32(
+ hash = hash_murmur3_one_32(
(uint32_t)OS::get_singleton()->get_unix_time(), hash);
- hash = hash_djb2_one_32(
+ hash = hash_murmur3_one_32(
(uint32_t)OS::get_singleton()->get_user_data_dir().hash64(), hash);
- hash = hash_djb2_one_32(
+ hash = hash_murmur3_one_32(
(uint32_t)((uint64_t)this), hash); // Rely on ASLR heap
- hash = hash_djb2_one_32(
+ hash = hash_murmur3_one_32(
(uint32_t)((uint64_t)&hash), hash); // Rely on ASLR stack
+ hash = hash_fmix32(hash);
hash = hash & 0x7FFFFFFF; // Make it compatible with unsigned, since negative ID is used for exclusion
}
diff --git a/core/object/callable_method_pointer.cpp b/core/object/callable_method_pointer.cpp
index 1bf926cafc..81f8ab6be2 100644
--- a/core/object/callable_method_pointer.cpp
+++ b/core/object/callable_method_pointer.cpp
@@ -85,9 +85,9 @@ void CallableCustomMethodPointerBase::_setup(uint32_t *p_base_ptr, uint32_t p_pt
// Precompute hash.
for (uint32_t i = 0; i < comp_size; i++) {
if (i == 0) {
- h = hash_djb2_one_32(comp_ptr[i]);
+ h = hash_murmur3_one_32(comp_ptr[i]);
} else {
- h = hash_djb2_one_32(comp_ptr[i], h);
+ h = hash_murmur3_one_32(comp_ptr[i], h);
}
}
}
diff --git a/core/object/class_db.cpp b/core/object/class_db.cpp
index f61bd24efd..3c9f373d12 100644
--- a/core/object/class_db.cpp
+++ b/core/object/class_db.cpp
@@ -164,7 +164,7 @@ uint64_t ClassDB::get_api_hash(APIType p_api) {
OBJTYPE_RLOCK;
#ifdef DEBUG_METHODS_ENABLED
- uint64_t hash = hash_djb2_one_64(HashMapHasherDefault::hash(VERSION_FULL_CONFIG));
+ uint64_t hash = hash_murmur3_one_64(HashMapHasherDefault::hash(VERSION_FULL_CONFIG));
List<StringName> class_list;
ClassDB::get_class_list(&class_list);
@@ -177,8 +177,8 @@ uint64_t ClassDB::get_api_hash(APIType p_api) {
if (t->api != p_api || !t->exposed) {
continue;
}
- hash = hash_djb2_one_64(t->name.hash(), hash);
- hash = hash_djb2_one_64(t->inherits.hash(), hash);
+ hash = hash_murmur3_one_64(t->name.hash(), hash);
+ hash = hash_murmur3_one_64(t->inherits.hash(), hash);
{ //methods
@@ -200,27 +200,27 @@ uint64_t ClassDB::get_api_hash(APIType p_api) {
for (const StringName &F : snames) {
MethodBind *mb = t->method_map[F];
- hash = hash_djb2_one_64(mb->get_name().hash(), hash);
- hash = hash_djb2_one_64(mb->get_argument_count(), hash);
- hash = hash_djb2_one_64(mb->get_argument_type(-1), hash); //return
+ hash = hash_murmur3_one_64(mb->get_name().hash(), hash);
+ hash = hash_murmur3_one_64(mb->get_argument_count(), hash);
+ hash = hash_murmur3_one_64(mb->get_argument_type(-1), hash); //return
for (int i = 0; i < mb->get_argument_count(); i++) {
const PropertyInfo info = mb->get_argument_info(i);
- hash = hash_djb2_one_64(info.type, hash);
- hash = hash_djb2_one_64(info.name.hash(), hash);
- hash = hash_djb2_one_64(info.hint, hash);
- hash = hash_djb2_one_64(info.hint_string.hash(), hash);
+ hash = hash_murmur3_one_64(info.type, hash);
+ hash = hash_murmur3_one_64(info.name.hash(), hash);
+ hash = hash_murmur3_one_64(info.hint, hash);
+ hash = hash_murmur3_one_64(info.hint_string.hash(), hash);
}
- hash = hash_djb2_one_64(mb->get_default_argument_count(), hash);
+ hash = hash_murmur3_one_64(mb->get_default_argument_count(), hash);
for (int i = 0; i < mb->get_default_argument_count(); i++) {
//hash should not change, i hope for tis
Variant da = mb->get_default_argument(i);
- hash = hash_djb2_one_64(da.hash(), hash);
+ hash = hash_murmur3_one_64(da.hash(), hash);
}
- hash = hash_djb2_one_64(mb->get_hint_flags(), hash);
+ hash = hash_murmur3_one_64(mb->get_hint_flags(), hash);
}
}
@@ -228,15 +228,15 @@ uint64_t ClassDB::get_api_hash(APIType p_api) {
List<StringName> snames;
- for (const KeyValue<StringName, int> &F : t->constant_map) {
+ for (const KeyValue<StringName, int64_t> &F : t->constant_map) {
snames.push_back(F.key);
}
snames.sort_custom<StringName::AlphCompare>();
for (const StringName &F : snames) {
- hash = hash_djb2_one_64(F.hash(), hash);
- hash = hash_djb2_one_64(t->constant_map[F], hash);
+ hash = hash_murmur3_one_64(F.hash(), hash);
+ hash = hash_murmur3_one_64(t->constant_map[F], hash);
}
}
@@ -252,9 +252,9 @@ uint64_t ClassDB::get_api_hash(APIType p_api) {
for (const StringName &F : snames) {
MethodInfo &mi = t->signal_map[F];
- hash = hash_djb2_one_64(F.hash(), hash);
+ hash = hash_murmur3_one_64(F.hash(), hash);
for (int i = 0; i < mi.arguments.size(); i++) {
- hash = hash_djb2_one_64(mi.arguments[i].type, hash);
+ hash = hash_murmur3_one_64(mi.arguments[i].type, hash);
}
}
}
@@ -273,23 +273,23 @@ uint64_t ClassDB::get_api_hash(APIType p_api) {
PropertySetGet *psg = t->property_setget.getptr(F);
ERR_FAIL_COND_V(!psg, 0);
- hash = hash_djb2_one_64(F.hash(), hash);
- hash = hash_djb2_one_64(psg->setter.hash(), hash);
- hash = hash_djb2_one_64(psg->getter.hash(), hash);
+ hash = hash_murmur3_one_64(F.hash(), hash);
+ hash = hash_murmur3_one_64(psg->setter.hash(), hash);
+ hash = hash_murmur3_one_64(psg->getter.hash(), hash);
}
}
//property list
for (const PropertyInfo &F : t->property_list) {
- hash = hash_djb2_one_64(F.name.hash(), hash);
- hash = hash_djb2_one_64(F.type, hash);
- hash = hash_djb2_one_64(F.hint, hash);
- hash = hash_djb2_one_64(F.hint_string.hash(), hash);
- hash = hash_djb2_one_64(F.usage, hash);
+ hash = hash_murmur3_one_64(F.name.hash(), hash);
+ hash = hash_murmur3_one_64(F.type, hash);
+ hash = hash_murmur3_one_64(F.hint, hash);
+ hash = hash_murmur3_one_64(F.hint_string.hash(), hash);
+ hash = hash_murmur3_one_64(F.usage, hash);
}
}
- return hash;
+ return hash_fmix32(hash);
#else
return 0;
#endif
@@ -536,7 +536,7 @@ MethodBind *ClassDB::get_method(const StringName &p_class, const StringName &p_n
return nullptr;
}
-void ClassDB::bind_integer_constant(const StringName &p_class, const StringName &p_enum, const StringName &p_name, int p_constant) {
+void ClassDB::bind_integer_constant(const StringName &p_class, const StringName &p_enum, const StringName &p_name, int64_t p_constant) {
OBJTYPE_WLOCK;
ClassInfo *type = classes.getptr(p_class);
@@ -583,7 +583,7 @@ void ClassDB::get_integer_constant_list(const StringName &p_class, List<String>
}
#else
- for (const KeyValue<StringName, int> &E : type->constant_map) {
+ for (const KeyValue<StringName, int64_t> &E : type->constant_map) {
p_constants->push_back(E.key);
}
@@ -596,13 +596,13 @@ void ClassDB::get_integer_constant_list(const StringName &p_class, List<String>
}
}
-int ClassDB::get_integer_constant(const StringName &p_class, const StringName &p_name, bool *p_success) {
+int64_t ClassDB::get_integer_constant(const StringName &p_class, const StringName &p_name, bool *p_success) {
OBJTYPE_RLOCK;
ClassInfo *type = classes.getptr(p_class);
while (type) {
- int *constant = type->constant_map.getptr(p_name);
+ int64_t *constant = type->constant_map.getptr(p_name);
if (constant) {
if (p_success) {
*p_success = true;
@@ -1066,7 +1066,7 @@ bool ClassDB::get_property(Object *p_object, const StringName &p_property, Varia
return true;
}
- const int *c = check->constant_map.getptr(p_property); //constants count
+ const int64_t *c = check->constant_map.getptr(p_property); //constants count
if (c) {
r_value = *c;
return true;
diff --git a/core/object/class_db.h b/core/object/class_db.h
index 2448a86e33..f2f73dc674 100644
--- a/core/object/class_db.h
+++ b/core/object/class_db.h
@@ -103,7 +103,7 @@ public:
ObjectNativeExtension *native_extension = nullptr;
HashMap<StringName, MethodBind *> method_map;
- HashMap<StringName, int> constant_map;
+ HashMap<StringName, int64_t> constant_map;
HashMap<StringName, List<StringName>> enum_map;
HashMap<StringName, MethodInfo> signal_map;
List<PropertyInfo> property_list;
@@ -325,9 +325,9 @@ public:
static void add_virtual_method(const StringName &p_class, const MethodInfo &p_method, bool p_virtual = true, const Vector<String> &p_arg_names = Vector<String>(), bool p_object_core = false);
static void get_virtual_methods(const StringName &p_class, List<MethodInfo> *p_methods, bool p_no_inheritance = false);
- static void bind_integer_constant(const StringName &p_class, const StringName &p_enum, const StringName &p_name, int p_constant);
+ static void bind_integer_constant(const StringName &p_class, const StringName &p_enum, const StringName &p_name, int64_t p_constant);
static void get_integer_constant_list(const StringName &p_class, List<String> *p_constants, bool p_no_inheritance = false);
- static int get_integer_constant(const StringName &p_class, const StringName &p_name, bool *p_success = nullptr);
+ static int64_t get_integer_constant(const StringName &p_class, const StringName &p_name, bool *p_success = nullptr);
static bool has_integer_constant(const StringName &p_class, const StringName &p_name, bool p_no_inheritance = false);
static StringName get_integer_constant_enum(const StringName &p_class, const StringName &p_name, bool p_no_inheritance = false);
diff --git a/core/object/method_bind.cpp b/core/object/method_bind.cpp
index a208c1a2b2..a4474ea53b 100644
--- a/core/object/method_bind.cpp
+++ b/core/object/method_bind.cpp
@@ -35,32 +35,27 @@
#include "method_bind.h"
uint32_t MethodBind::get_hash() const {
- uint32_t hash = hash_djb2_one_32(has_return() ? 1 : 0);
- hash = hash_djb2_one_32(get_argument_count(), hash);
-
-#ifndef _MSC_VER
-#warning This needs proper class name and argument type for hashing
-#endif
-#if 0
+ uint32_t hash = hash_murmur3_one_32(has_return() ? 1 : 0);
+ hash = hash_murmur3_one_32(get_argument_count(), hash);
for (int i = (has_return() ? -1 : 0); i < get_argument_count(); i++) {
PropertyInfo pi = i == -1 ? get_return_info() : get_argument_info(i);
- hash = hash_djb2_one_32(get_argument_type(i), hash);
+ hash = hash_murmur3_one_32(get_argument_type(i), hash);
if (pi.class_name != StringName()) {
- hash = hash_djb2_one_32(pi.class_name.operator String().hash(), hash);
+ hash = hash_murmur3_one_32(pi.class_name.operator String().hash(), hash);
}
}
-#endif
- hash = hash_djb2_one_32(get_default_argument_count(), hash);
+
+ hash = hash_murmur3_one_32(get_default_argument_count(), hash);
for (int i = 0; i < get_default_argument_count(); i++) {
Variant v = get_default_argument(i);
- hash = hash_djb2_one_32(v.hash(), hash);
+ hash = hash_murmur3_one_32(v.hash(), hash);
}
- hash = hash_djb2_one_32(is_const(), hash);
- hash = hash_djb2_one_32(is_vararg(), hash);
+ hash = hash_murmur3_one_32(is_const(), hash);
+ hash = hash_murmur3_one_32(is_vararg(), hash);
- return hash;
+ return hash_fmix32(hash);
}
PropertyInfo MethodBind::get_argument_info(int p_argument) const {
diff --git a/core/object/method_bind.h b/core/object/method_bind.h
index 2870195911..d60550c899 100644
--- a/core/object/method_bind.h
+++ b/core/object/method_bind.h
@@ -33,20 +33,6 @@
#include "core/variant/binder_common.h"
-enum MethodFlags {
- METHOD_FLAG_NORMAL = 1,
- METHOD_FLAG_EDITOR = 2,
- METHOD_FLAG_NOSCRIPT = 4,
- METHOD_FLAG_CONST = 8,
- METHOD_FLAG_REVERSE = 16, // used for events
- METHOD_FLAG_VIRTUAL = 32,
- METHOD_FLAG_FROM_SCRIPT = 64,
- METHOD_FLAG_VARARG = 128,
- METHOD_FLAG_STATIC = 256,
- METHOD_FLAG_OBJECT_CORE = 512,
- METHOD_FLAGS_DEFAULT = METHOD_FLAG_NORMAL,
-};
-
VARIANT_ENUM_CAST(MethodFlags)
// some helpers
diff --git a/core/object/object.cpp b/core/object/object.cpp
index 9dec417b11..440da00c17 100644
--- a/core/object/object.cpp
+++ b/core/object/object.cpp
@@ -161,161 +161,6 @@ MethodInfo MethodInfo::from_dict(const Dictionary &p_dict) {
return mi;
}
-MethodInfo::MethodInfo() :
- flags(METHOD_FLAG_NORMAL) {}
-
-MethodInfo::MethodInfo(const String &p_name) :
- name(p_name),
- flags(METHOD_FLAG_NORMAL) {
-}
-
-MethodInfo::MethodInfo(const String &p_name, const PropertyInfo &p_param1) :
- name(p_name),
- flags(METHOD_FLAG_NORMAL) {
- arguments.push_back(p_param1);
-}
-
-MethodInfo::MethodInfo(const String &p_name, const PropertyInfo &p_param1, const PropertyInfo &p_param2) :
- name(p_name),
- flags(METHOD_FLAG_NORMAL) {
- arguments.push_back(p_param1);
- arguments.push_back(p_param2);
-}
-
-MethodInfo::MethodInfo(const String &p_name, const PropertyInfo &p_param1, const PropertyInfo &p_param2, const PropertyInfo &p_param3) :
- name(p_name),
- flags(METHOD_FLAG_NORMAL) {
- arguments.push_back(p_param1);
- arguments.push_back(p_param2);
- arguments.push_back(p_param3);
-}
-
-MethodInfo::MethodInfo(const String &p_name, const PropertyInfo &p_param1, const PropertyInfo &p_param2, const PropertyInfo &p_param3, const PropertyInfo &p_param4) :
- name(p_name),
- flags(METHOD_FLAG_NORMAL) {
- arguments.push_back(p_param1);
- arguments.push_back(p_param2);
- arguments.push_back(p_param3);
- arguments.push_back(p_param4);
-}
-
-MethodInfo::MethodInfo(const String &p_name, const PropertyInfo &p_param1, const PropertyInfo &p_param2, const PropertyInfo &p_param3, const PropertyInfo &p_param4, const PropertyInfo &p_param5) :
- name(p_name),
- flags(METHOD_FLAG_NORMAL) {
- arguments.push_back(p_param1);
- arguments.push_back(p_param2);
- arguments.push_back(p_param3);
- arguments.push_back(p_param4);
- arguments.push_back(p_param5);
-}
-
-MethodInfo::MethodInfo(Variant::Type ret) :
- flags(METHOD_FLAG_NORMAL) {
- return_val.type = ret;
-}
-
-MethodInfo::MethodInfo(Variant::Type ret, const String &p_name) :
- name(p_name),
- flags(METHOD_FLAG_NORMAL) {
- return_val.type = ret;
-}
-
-MethodInfo::MethodInfo(Variant::Type ret, const String &p_name, const PropertyInfo &p_param1) :
- name(p_name),
- flags(METHOD_FLAG_NORMAL) {
- return_val.type = ret;
- arguments.push_back(p_param1);
-}
-
-MethodInfo::MethodInfo(Variant::Type ret, const String &p_name, const PropertyInfo &p_param1, const PropertyInfo &p_param2) :
- name(p_name),
- flags(METHOD_FLAG_NORMAL) {
- return_val.type = ret;
- arguments.push_back(p_param1);
- arguments.push_back(p_param2);
-}
-
-MethodInfo::MethodInfo(Variant::Type ret, const String &p_name, const PropertyInfo &p_param1, const PropertyInfo &p_param2, const PropertyInfo &p_param3) :
- name(p_name),
- flags(METHOD_FLAG_NORMAL) {
- return_val.type = ret;
- arguments.push_back(p_param1);
- arguments.push_back(p_param2);
- arguments.push_back(p_param3);
-}
-
-MethodInfo::MethodInfo(Variant::Type ret, const String &p_name, const PropertyInfo &p_param1, const PropertyInfo &p_param2, const PropertyInfo &p_param3, const PropertyInfo &p_param4) :
- name(p_name),
- flags(METHOD_FLAG_NORMAL) {
- return_val.type = ret;
- arguments.push_back(p_param1);
- arguments.push_back(p_param2);
- arguments.push_back(p_param3);
- arguments.push_back(p_param4);
-}
-
-MethodInfo::MethodInfo(Variant::Type ret, const String &p_name, const PropertyInfo &p_param1, const PropertyInfo &p_param2, const PropertyInfo &p_param3, const PropertyInfo &p_param4, const PropertyInfo &p_param5) :
- name(p_name),
- flags(METHOD_FLAG_NORMAL) {
- return_val.type = ret;
- arguments.push_back(p_param1);
- arguments.push_back(p_param2);
- arguments.push_back(p_param3);
- arguments.push_back(p_param4);
- arguments.push_back(p_param5);
-}
-
-MethodInfo::MethodInfo(const PropertyInfo &p_ret, const String &p_name) :
- name(p_name),
- return_val(p_ret),
- flags(METHOD_FLAG_NORMAL) {
-}
-
-MethodInfo::MethodInfo(const PropertyInfo &p_ret, const String &p_name, const PropertyInfo &p_param1) :
- name(p_name),
- return_val(p_ret),
- flags(METHOD_FLAG_NORMAL) {
- arguments.push_back(p_param1);
-}
-
-MethodInfo::MethodInfo(const PropertyInfo &p_ret, const String &p_name, const PropertyInfo &p_param1, const PropertyInfo &p_param2) :
- name(p_name),
- return_val(p_ret),
- flags(METHOD_FLAG_NORMAL) {
- arguments.push_back(p_param1);
- arguments.push_back(p_param2);
-}
-
-MethodInfo::MethodInfo(const PropertyInfo &p_ret, const String &p_name, const PropertyInfo &p_param1, const PropertyInfo &p_param2, const PropertyInfo &p_param3) :
- name(p_name),
- return_val(p_ret),
- flags(METHOD_FLAG_NORMAL) {
- arguments.push_back(p_param1);
- arguments.push_back(p_param2);
- arguments.push_back(p_param3);
-}
-
-MethodInfo::MethodInfo(const PropertyInfo &p_ret, const String &p_name, const PropertyInfo &p_param1, const PropertyInfo &p_param2, const PropertyInfo &p_param3, const PropertyInfo &p_param4) :
- name(p_name),
- return_val(p_ret),
- flags(METHOD_FLAG_NORMAL) {
- arguments.push_back(p_param1);
- arguments.push_back(p_param2);
- arguments.push_back(p_param3);
- arguments.push_back(p_param4);
-}
-
-MethodInfo::MethodInfo(const PropertyInfo &p_ret, const String &p_name, const PropertyInfo &p_param1, const PropertyInfo &p_param2, const PropertyInfo &p_param3, const PropertyInfo &p_param4, const PropertyInfo &p_param5) :
- name(p_name),
- return_val(p_ret),
- flags(METHOD_FLAG_NORMAL) {
- arguments.push_back(p_param1);
- arguments.push_back(p_param2);
- arguments.push_back(p_param3);
- arguments.push_back(p_param4);
- arguments.push_back(p_param5);
-}
-
Object::Connection::operator Variant() const {
Dictionary d;
d["signal"] = signal;
@@ -824,6 +669,51 @@ Variant Object::callp(const StringName &p_method, const Variant **p_args, int p_
case Callable::CallError::CALL_ERROR_INVALID_ARGUMENT:
case Callable::CallError::CALL_ERROR_TOO_MANY_ARGUMENTS:
case Callable::CallError::CALL_ERROR_TOO_FEW_ARGUMENTS:
+ case Callable::CallError::CALL_ERROR_METHOD_NOT_CONST:
+ return ret;
+ case Callable::CallError::CALL_ERROR_INSTANCE_IS_NULL: {
+ }
+ }
+ }
+
+ //extension does not need this, because all methods are registered in MethodBind
+
+ MethodBind *method = ClassDB::get_method(get_class_name(), p_method);
+
+ if (method) {
+ ret = method->call(this, p_args, p_argcount, r_error);
+ } else {
+ r_error.error = Callable::CallError::CALL_ERROR_INVALID_METHOD;
+ }
+
+ return ret;
+}
+
+Variant Object::call_const(const StringName &p_method, const Variant **p_args, int p_argcount, Callable::CallError &r_error) {
+ r_error.error = Callable::CallError::CALL_OK;
+
+ if (p_method == CoreStringNames::get_singleton()->_free) {
+ // Free is not const, so fail.
+ r_error.error = Callable::CallError::CALL_ERROR_METHOD_NOT_CONST;
+ return Variant();
+ }
+
+ Variant ret;
+ OBJ_DEBUG_LOCK
+
+ if (script_instance) {
+ ret = script_instance->call_const(p_method, p_args, p_argcount, r_error);
+ //force jumptable
+ switch (r_error.error) {
+ case Callable::CallError::CALL_OK:
+ return ret;
+ case Callable::CallError::CALL_ERROR_INVALID_METHOD:
+ break;
+ case Callable::CallError::CALL_ERROR_METHOD_NOT_CONST:
+ break;
+ case Callable::CallError::CALL_ERROR_INVALID_ARGUMENT:
+ case Callable::CallError::CALL_ERROR_TOO_MANY_ARGUMENTS:
+ case Callable::CallError::CALL_ERROR_TOO_FEW_ARGUMENTS:
return ret;
case Callable::CallError::CALL_ERROR_INSTANCE_IS_NULL: {
}
@@ -835,6 +725,10 @@ Variant Object::callp(const StringName &p_method, const Variant **p_args, int p_
MethodBind *method = ClassDB::get_method(get_class_name(), p_method);
if (method) {
+ if (!method->is_const()) {
+ r_error.error = Callable::CallError::CALL_ERROR_METHOD_NOT_CONST;
+ return ret;
+ }
ret = method->call(this, p_args, p_argcount, r_error);
} else {
r_error.error = Callable::CallError::CALL_ERROR_INVALID_METHOD;
diff --git a/core/object/object.h b/core/object/object.h
index 7cbedd29d9..e065634000 100644
--- a/core/object/object.h
+++ b/core/object/object.h
@@ -47,7 +47,7 @@
enum PropertyHint {
PROPERTY_HINT_NONE, ///< no hint provided.
- PROPERTY_HINT_RANGE, ///< hint_text = "min,max[,step][,or_greater][,or_lesser][,noslider][,radians][,degrees][,exp][,suffix:<keyword>] range.
+ PROPERTY_HINT_RANGE, ///< hint_text = "min,max[,step][,or_greater][,or_lesser][,no_slider][,radians][,degrees][,exp][,suffix:<keyword>] range.
PROPERTY_HINT_ENUM, ///< hint_text= "val1,val2,val3,etc"
PROPERTY_HINT_ENUM_SUGGESTION, ///< hint_text= "val1,val2,val3,etc"
PROPERTY_HINT_EXP_EASING, /// exponential easing function (Math::ease) use "attenuation" hint string to revert (flip h), "full" to also include in/out. (ie: "attenuation,inout")
@@ -67,6 +67,7 @@ enum PropertyHint {
PROPERTY_HINT_GLOBAL_DIR, ///< a directory path must be passed
PROPERTY_HINT_RESOURCE_TYPE, ///< a resource object type
PROPERTY_HINT_MULTILINE_TEXT, ///< used for string properties that can contain multiple lines
+ PROPERTY_HINT_EXPRESSION, ///< used for string properties that can contain multiple lines
PROPERTY_HINT_PLACEHOLDER_TEXT, ///< used to set a placeholder text for string properties
PROPERTY_HINT_COLOR_NO_ALPHA, ///< used for ignoring alpha component when editing a color
PROPERTY_HINT_IMAGE_COMPRESS_LOSSY,
@@ -85,11 +86,13 @@ enum PropertyHint {
PROPERTY_HINT_OBJECT_TOO_BIG, ///< object is too big to send
PROPERTY_HINT_NODE_PATH_VALID_TYPES,
PROPERTY_HINT_SAVE_FILE, ///< a file path must be passed, hint_text (optionally) is a filter "*.png,*.wav,*.doc,". This opens a save dialog
+ PROPERTY_HINT_GLOBAL_SAVE_FILE, ///< a file path must be passed, hint_text (optionally) is a filter "*.png,*.wav,*.doc,". This opens a save dialog
PROPERTY_HINT_INT_IS_OBJECTID,
PROPERTY_HINT_ARRAY_TYPE,
PROPERTY_HINT_INT_IS_POINTER,
PROPERTY_HINT_LOCALE_ID,
PROPERTY_HINT_LOCALIZABLE_STRING,
+ PROPERTY_HINT_NODE_TYPE, ///< a node object type
PROPERTY_HINT_MAX,
// When updating PropertyHint, also sync the hardcoded list in VisualScriptEditorVariableEdit
};
@@ -203,10 +206,24 @@ struct PropertyInfo {
Array convert_property_list(const List<PropertyInfo> *p_list);
+enum MethodFlags {
+ METHOD_FLAG_NORMAL = 1,
+ METHOD_FLAG_EDITOR = 2,
+ METHOD_FLAG_NOSCRIPT = 4,
+ METHOD_FLAG_CONST = 8,
+ METHOD_FLAG_REVERSE = 16, // used for events
+ METHOD_FLAG_VIRTUAL = 32,
+ METHOD_FLAG_FROM_SCRIPT = 64,
+ METHOD_FLAG_VARARG = 128,
+ METHOD_FLAG_STATIC = 256,
+ METHOD_FLAG_OBJECT_CORE = 512,
+ METHOD_FLAGS_DEFAULT = METHOD_FLAG_NORMAL,
+};
+
struct MethodInfo {
String name;
PropertyInfo return_val;
- uint32_t flags; // NOLINT - prevent clang-tidy to assign method_bind.h constant here, it should stay in .cpp.
+ uint32_t flags = METHOD_FLAGS_DEFAULT;
int id = 0;
List<PropertyInfo> arguments;
Vector<Variant> default_arguments;
@@ -218,26 +235,50 @@ struct MethodInfo {
static MethodInfo from_dict(const Dictionary &p_dict);
- MethodInfo();
- MethodInfo(const String &p_name);
- MethodInfo(const String &p_name, const PropertyInfo &p_param1);
- MethodInfo(const String &p_name, const PropertyInfo &p_param1, const PropertyInfo &p_param2);
- MethodInfo(const String &p_name, const PropertyInfo &p_param1, const PropertyInfo &p_param2, const PropertyInfo &p_param3);
- MethodInfo(const String &p_name, const PropertyInfo &p_param1, const PropertyInfo &p_param2, const PropertyInfo &p_param3, const PropertyInfo &p_param4);
- MethodInfo(const String &p_name, const PropertyInfo &p_param1, const PropertyInfo &p_param2, const PropertyInfo &p_param3, const PropertyInfo &p_param4, const PropertyInfo &p_param5);
- MethodInfo(Variant::Type ret);
- MethodInfo(Variant::Type ret, const String &p_name);
- MethodInfo(Variant::Type ret, const String &p_name, const PropertyInfo &p_param1);
- MethodInfo(Variant::Type ret, const String &p_name, const PropertyInfo &p_param1, const PropertyInfo &p_param2);
- MethodInfo(Variant::Type ret, const String &p_name, const PropertyInfo &p_param1, const PropertyInfo &p_param2, const PropertyInfo &p_param3);
- MethodInfo(Variant::Type ret, const String &p_name, const PropertyInfo &p_param1, const PropertyInfo &p_param2, const PropertyInfo &p_param3, const PropertyInfo &p_param4);
- MethodInfo(Variant::Type ret, const String &p_name, const PropertyInfo &p_param1, const PropertyInfo &p_param2, const PropertyInfo &p_param3, const PropertyInfo &p_param4, const PropertyInfo &p_param5);
- MethodInfo(const PropertyInfo &p_ret, const String &p_name);
- MethodInfo(const PropertyInfo &p_ret, const String &p_name, const PropertyInfo &p_param1);
- MethodInfo(const PropertyInfo &p_ret, const String &p_name, const PropertyInfo &p_param1, const PropertyInfo &p_param2);
- MethodInfo(const PropertyInfo &p_ret, const String &p_name, const PropertyInfo &p_param1, const PropertyInfo &p_param2, const PropertyInfo &p_param3);
- MethodInfo(const PropertyInfo &p_ret, const String &p_name, const PropertyInfo &p_param1, const PropertyInfo &p_param2, const PropertyInfo &p_param3, const PropertyInfo &p_param4);
- MethodInfo(const PropertyInfo &p_ret, const String &p_name, const PropertyInfo &p_param1, const PropertyInfo &p_param2, const PropertyInfo &p_param3, const PropertyInfo &p_param4, const PropertyInfo &p_param5);
+ MethodInfo() {}
+
+ void _push_params(const PropertyInfo &p_param) {
+ arguments.push_back(p_param);
+ }
+
+ template <typename... VarArgs>
+ void _push_params(const PropertyInfo &p_param, VarArgs... p_params) {
+ arguments.push_back(p_param);
+ _push_params(p_params...);
+ }
+
+ MethodInfo(const String &p_name) { name = p_name; }
+
+ template <typename... VarArgs>
+ MethodInfo(const String &p_name, VarArgs... p_params) {
+ name = p_name;
+ _push_params(p_params...);
+ }
+
+ MethodInfo(Variant::Type ret) { return_val.type = ret; }
+ MethodInfo(Variant::Type ret, const String &p_name) {
+ return_val.type = ret;
+ name = p_name;
+ }
+
+ template <typename... VarArgs>
+ MethodInfo(Variant::Type ret, const String &p_name, VarArgs... p_params) {
+ name = p_name;
+ return_val.type = ret;
+ _push_params(p_params...);
+ }
+
+ MethodInfo(const PropertyInfo &p_ret, const String &p_name) {
+ return_val = p_ret;
+ name = p_name;
+ }
+
+ template <typename... VarArgs>
+ MethodInfo(const PropertyInfo &p_ret, const String &p_name, VarArgs... p_params) {
+ return_val = p_ret;
+ name = p_name;
+ _push_params(p_params...);
+ }
};
// API used to extend in GDNative and other C compatible compiled languages.
@@ -719,6 +760,7 @@ public:
void get_method_list(List<MethodInfo> *p_list) const;
Variant callv(const StringName &p_method, const Array &p_args);
virtual Variant callp(const StringName &p_method, const Variant **p_args, int p_argcount, Callable::CallError &r_error);
+ virtual Variant call_const(const StringName &p_method, const Variant **p_args, int p_argcount, Callable::CallError &r_error);
template <typename... VarArgs>
Variant call(const StringName &p_method, VarArgs... p_args) {
diff --git a/core/object/script_language.cpp b/core/object/script_language.cpp
index 66c9a80193..4623d0e525 100644
--- a/core/object/script_language.cpp
+++ b/core/object/script_language.cpp
@@ -295,6 +295,11 @@ void ScriptServer::save_global_classes() {
}
////////////////////
+
+Variant ScriptInstance::call_const(const StringName &p_method, const Variant **p_args, int p_argcount, Callable::CallError &r_error) {
+ return callp(p_method, p_args, p_argcount, r_error);
+}
+
void ScriptInstance::get_property_state(List<Pair<StringName, Variant>> &state) {
List<PropertyInfo> pinfo;
get_property_list(&pinfo);
diff --git a/core/object/script_language.h b/core/object/script_language.h
index 0a8e79a24e..776a9bfaab 100644
--- a/core/object/script_language.h
+++ b/core/object/script_language.h
@@ -190,6 +190,7 @@ public:
return callp(p_method, sizeof...(p_args) == 0 ? nullptr : (const Variant **)argptrs, sizeof...(p_args), cerr);
}
+ virtual Variant call_const(const StringName &p_method, const Variant **p_args, int p_argcount, Callable::CallError &r_error); // implement if language supports const functions
virtual void notification(int p_notification) = 0;
virtual String to_string(bool *r_valid) {
if (r_valid) {
diff --git a/core/os/keyboard.cpp b/core/os/keyboard.cpp
index 24907d34c8..3e690991d9 100644
--- a/core/os/keyboard.cpp
+++ b/core/os/keyboard.cpp
@@ -86,6 +86,25 @@ static const _KeyCodeText _keycodes[] = {
{Key::F14 ,"F14"},
{Key::F15 ,"F15"},
{Key::F16 ,"F16"},
+ {Key::F17 ,"F17"},
+ {Key::F18 ,"F18"},
+ {Key::F19 ,"F19"},
+ {Key::F20 ,"F20"},
+ {Key::F21 ,"F21"},
+ {Key::F22 ,"F22"},
+ {Key::F23 ,"F23"},
+ {Key::F24 ,"F24"},
+ {Key::F25 ,"F25"},
+ {Key::F26 ,"F26"},
+ {Key::F27 ,"F27"},
+ {Key::F28 ,"F28"},
+ {Key::F29 ,"F29"},
+ {Key::F30 ,"F30"},
+ {Key::F31 ,"F31"},
+ {Key::F32 ,"F32"},
+ {Key::F33 ,"F33"},
+ {Key::F34 ,"F34"},
+ {Key::F35 ,"F35"},
{Key::KP_MULTIPLY ,"Kp Multiply"},
{Key::KP_DIVIDE ,"Kp Divide"},
{Key::KP_SUBTRACT ,"Kp Subtract"},
@@ -333,6 +352,25 @@ bool keycode_has_unicode(Key p_keycode) {
case Key::F14:
case Key::F15:
case Key::F16:
+ case Key::F17:
+ case Key::F18:
+ case Key::F19:
+ case Key::F20:
+ case Key::F21:
+ case Key::F22:
+ case Key::F23:
+ case Key::F24:
+ case Key::F25:
+ case Key::F26:
+ case Key::F27:
+ case Key::F28:
+ case Key::F29:
+ case Key::F30:
+ case Key::F31:
+ case Key::F32:
+ case Key::F33:
+ case Key::F34:
+ case Key::F35:
case Key::SUPER_L:
case Key::SUPER_R:
case Key::MENU:
diff --git a/core/os/keyboard.h b/core/os/keyboard.h
index 3176a8a210..517a53e505 100644
--- a/core/os/keyboard.h
+++ b/core/os/keyboard.h
@@ -85,6 +85,25 @@ enum class Key {
F14 = SPECIAL | 0x29,
F15 = SPECIAL | 0x2A,
F16 = SPECIAL | 0x2B,
+ F17 = SPECIAL | 0x2C,
+ F18 = SPECIAL | 0x2D,
+ F19 = SPECIAL | 0x2E,
+ F20 = SPECIAL | 0x2F,
+ F21 = SPECIAL | 0x30,
+ F22 = SPECIAL | 0x31,
+ F23 = SPECIAL | 0x32,
+ F24 = SPECIAL | 0x33,
+ F25 = SPECIAL | 0x34,
+ F26 = SPECIAL | 0x35,
+ F27 = SPECIAL | 0x36,
+ F28 = SPECIAL | 0x37,
+ F29 = SPECIAL | 0x38,
+ F30 = SPECIAL | 0x39,
+ F31 = SPECIAL | 0x3A,
+ F32 = SPECIAL | 0x3B,
+ F33 = SPECIAL | 0x3C,
+ F34 = SPECIAL | 0x3D,
+ F35 = SPECIAL | 0x3E,
KP_MULTIPLY = SPECIAL | 0x81,
KP_DIVIDE = SPECIAL | 0x82,
KP_SUBTRACT = SPECIAL | 0x83,
@@ -100,54 +119,54 @@ enum class Key {
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,
+ SUPER_L = SPECIAL | 0x40,
+ SUPER_R = SPECIAL | 0x41,
+ MENU = SPECIAL | 0x42,
+ HYPER_L = SPECIAL | 0x43,
+ HYPER_R = SPECIAL | 0x44,
+ HELP = SPECIAL | 0x45,
+ DIRECTION_L = SPECIAL | 0x46,
+ DIRECTION_R = SPECIAL | 0x47,
+ BACK = SPECIAL | 0x48,
+ FORWARD = SPECIAL | 0x49,
+ STOP = SPECIAL | 0x4A,
+ REFRESH = SPECIAL | 0x4B,
+ VOLUMEDOWN = SPECIAL | 0x4C,
+ VOLUMEMUTE = SPECIAL | 0x4D,
+ VOLUMEUP = SPECIAL | 0x4E,
+ BASSBOOST = SPECIAL | 0x4F,
+ BASSUP = SPECIAL | 0x50,
+ BASSDOWN = SPECIAL | 0x51,
+ TREBLEUP = SPECIAL | 0x52,
+ TREBLEDOWN = SPECIAL | 0x53,
+ MEDIAPLAY = SPECIAL | 0x54,
+ MEDIASTOP = SPECIAL | 0x55,
+ MEDIAPREVIOUS = SPECIAL | 0x56,
+ MEDIANEXT = SPECIAL | 0x57,
+ MEDIARECORD = SPECIAL | 0x58,
+ HOMEPAGE = SPECIAL | 0x59,
+ FAVORITES = SPECIAL | 0x5A,
+ SEARCH = SPECIAL | 0x5B,
+ STANDBY = SPECIAL | 0x5C,
+ OPENURL = SPECIAL | 0x5D,
+ LAUNCHMAIL = SPECIAL | 0x5E,
+ LAUNCHMEDIA = SPECIAL | 0x5F,
+ LAUNCH0 = SPECIAL | 0x60,
+ LAUNCH1 = SPECIAL | 0x61,
+ LAUNCH2 = SPECIAL | 0x62,
+ LAUNCH3 = SPECIAL | 0x63,
+ LAUNCH4 = SPECIAL | 0x64,
+ LAUNCH5 = SPECIAL | 0x65,
+ LAUNCH6 = SPECIAL | 0x66,
+ LAUNCH7 = SPECIAL | 0x67,
+ LAUNCH8 = SPECIAL | 0x68,
+ LAUNCH9 = SPECIAL | 0x69,
+ LAUNCHA = SPECIAL | 0x6A,
+ LAUNCHB = SPECIAL | 0x6B,
+ LAUNCHC = SPECIAL | 0x6C,
+ LAUNCHD = SPECIAL | 0x6D,
+ LAUNCHE = SPECIAL | 0x6E,
+ LAUNCHF = SPECIAL | 0x6F,
UNKNOWN = SPECIAL | 0xFFFFFF,
diff --git a/core/os/os.cpp b/core/os/os.cpp
index 327f1c95f2..b9daf6fa53 100644
--- a/core/os/os.cpp
+++ b/core/os/os.cpp
@@ -100,6 +100,21 @@ void OS::print(const char *p_format, ...) {
va_end(argp);
}
+void OS::print_rich(const char *p_format, ...) {
+ if (!_stdout_enabled) {
+ return;
+ }
+
+ va_list argp;
+ va_start(argp, p_format);
+
+ if (_logger) {
+ _logger->logv(p_format, argp, false);
+ }
+
+ va_end(argp);
+}
+
void OS::printerr(const char *p_format, ...) {
if (!_stderr_enabled) {
return;
@@ -388,6 +403,10 @@ bool OS::has_feature(const String &p_feature) {
return true;
}
+ if (p_feature == "movie") {
+ return _writing_movie;
+ }
+
#ifdef DEBUG_ENABLED
if (p_feature == "debug") {
return true;
diff --git a/core/os/os.h b/core/os/os.h
index 157b8ab992..af6c38cbe0 100644
--- a/core/os/os.h
+++ b/core/os/os.h
@@ -58,6 +58,7 @@ class OS {
bool _allow_layered = false;
bool _stdout_enabled = true;
bool _stderr_enabled = true;
+ bool _writing_movie = false;
CompositeLogger *_logger = nullptr;
@@ -119,6 +120,7 @@ public:
void print_error(const char *p_function, const char *p_file, int p_line, const char *p_code, const char *p_rationale, bool p_editor_notify = false, Logger::ErrorType p_type = Logger::ERR_ERROR);
void print(const char *p_format, ...) _PRINTF_FORMAT_ATTRIBUTE_2_3;
+ void print_rich(const char *p_format, ...) _PRINTF_FORMAT_ATTRIBUTE_2_3;
void printerr(const char *p_format, ...) _PRINTF_FORMAT_ATTRIBUTE_2_3;
virtual String get_stdin_string(bool p_block = true) = 0;
diff --git a/core/string/print_string.cpp b/core/string/print_string.cpp
index 919c9e08e3..f58486e0a5 100644
--- a/core/string/print_string.cpp
+++ b/core/string/print_string.cpp
@@ -79,7 +79,98 @@ void __print_line(String p_string) {
_global_lock();
PrintHandlerList *l = print_handler_list;
while (l) {
- l->printfunc(l->userdata, p_string, false);
+ l->printfunc(l->userdata, p_string, false, false);
+ l = l->next;
+ }
+
+ _global_unlock();
+}
+
+void __print_line_rich(String p_string) {
+ if (!_print_line_enabled) {
+ return;
+ }
+
+ // Convert a subset of BBCode tags to ANSI escape codes for correct display in the terminal.
+ // Support of those ANSI escape codes varies across terminal emulators,
+ // especially for italic and strikethrough.
+ String p_string_ansi = p_string;
+
+ p_string_ansi = p_string_ansi.replace("[b]", "\u001b[1m");
+ p_string_ansi = p_string_ansi.replace("[/b]", "\u001b[22m");
+ p_string_ansi = p_string_ansi.replace("[i]", "\u001b[3m");
+ p_string_ansi = p_string_ansi.replace("[/i]", "\u001b[23m");
+ p_string_ansi = p_string_ansi.replace("[u]", "\u001b[4m");
+ p_string_ansi = p_string_ansi.replace("[/u]", "\u001b[24m");
+ p_string_ansi = p_string_ansi.replace("[s]", "\u001b[9m");
+ p_string_ansi = p_string_ansi.replace("[/s]", "\u001b[29m");
+
+ p_string_ansi = p_string_ansi.replace("[indent]", " ");
+ p_string_ansi = p_string_ansi.replace("[/indent]", "");
+ p_string_ansi = p_string_ansi.replace("[code]", "\u001b[2m");
+ p_string_ansi = p_string_ansi.replace("[/code]", "\u001b[22m");
+ p_string_ansi = p_string_ansi.replace("[url]", "");
+ p_string_ansi = p_string_ansi.replace("[/url]", "");
+ p_string_ansi = p_string_ansi.replace("[center]", "\n\t\t\t");
+ p_string_ansi = p_string_ansi.replace("[/center]", "");
+ p_string_ansi = p_string_ansi.replace("[right]", "\n\t\t\t\t\t\t");
+ p_string_ansi = p_string_ansi.replace("[/right]", "");
+
+ if (p_string_ansi.contains("[color")) {
+ p_string_ansi = p_string_ansi.replace("[color=black]", "\u001b[30m");
+ p_string_ansi = p_string_ansi.replace("[color=red]", "\u001b[91m");
+ p_string_ansi = p_string_ansi.replace("[color=green]", "\u001b[92m");
+ p_string_ansi = p_string_ansi.replace("[color=lime]", "\u001b[92m");
+ p_string_ansi = p_string_ansi.replace("[color=yellow]", "\u001b[93m");
+ p_string_ansi = p_string_ansi.replace("[color=blue]", "\u001b[94m");
+ p_string_ansi = p_string_ansi.replace("[color=magenta]", "\u001b[95m");
+ p_string_ansi = p_string_ansi.replace("[color=pink]", "\u001b[38;5;218m");
+ p_string_ansi = p_string_ansi.replace("[color=purple]", "\u001b[38;5;98m");
+ p_string_ansi = p_string_ansi.replace("[color=cyan]", "\u001b[96m");
+ p_string_ansi = p_string_ansi.replace("[color=white]", "\u001b[97m");
+ p_string_ansi = p_string_ansi.replace("[color=orange]", "\u001b[38;5;208m");
+ p_string_ansi = p_string_ansi.replace("[color=gray]", "\u001b[90m");
+ p_string_ansi = p_string_ansi.replace("[/color]", "\u001b[39m");
+ }
+ if (p_string_ansi.contains("[bgcolor")) {
+ p_string_ansi = p_string_ansi.replace("[bgcolor=black]", "\u001b[40m");
+ p_string_ansi = p_string_ansi.replace("[bgcolor=red]", "\u001b[101m");
+ p_string_ansi = p_string_ansi.replace("[bgcolor=green]", "\u001b[102m");
+ p_string_ansi = p_string_ansi.replace("[bgcolor=lime]", "\u001b[102m");
+ p_string_ansi = p_string_ansi.replace("[bgcolor=yellow]", "\u001b[103m");
+ p_string_ansi = p_string_ansi.replace("[bgcolor=blue]", "\u001b[104m");
+ p_string_ansi = p_string_ansi.replace("[bgcolor=magenta]", "\u001b[105m");
+ p_string_ansi = p_string_ansi.replace("[bgcolor=pink]", "\u001b[48;5;218m");
+ p_string_ansi = p_string_ansi.replace("[bgcolor=purple]", "\u001b[48;5;98m");
+ p_string_ansi = p_string_ansi.replace("[bgcolor=cyan]", "\u001b[106m");
+ p_string_ansi = p_string_ansi.replace("[bgcolor=white]", "\u001b[107m");
+ p_string_ansi = p_string_ansi.replace("[bgcolor=orange]", "\u001b[48;5;208m");
+ p_string_ansi = p_string_ansi.replace("[bgcolor=gray]", "\u001b[100m");
+ p_string_ansi = p_string_ansi.replace("[/bgcolor]", "\u001b[49m");
+ }
+ if (p_string_ansi.contains("[fgcolor")) {
+ p_string_ansi = p_string_ansi.replace("[fgcolor=black]", "\u001b[30;40m");
+ p_string_ansi = p_string_ansi.replace("[fgcolor=red]", "\u001b[91;101m");
+ p_string_ansi = p_string_ansi.replace("[fgcolor=green]", "\u001b[92;102m");
+ p_string_ansi = p_string_ansi.replace("[fgcolor=lime]", "\u001b[92;102m");
+ p_string_ansi = p_string_ansi.replace("[fgcolor=yellow]", "\u001b[93;103m");
+ p_string_ansi = p_string_ansi.replace("[fgcolor=blue]", "\u001b[94;104m");
+ p_string_ansi = p_string_ansi.replace("[fgcolor=magenta]", "\u001b[95;105m");
+ p_string_ansi = p_string_ansi.replace("[fgcolor=pink]", "\u001b[38;5;218;48;5;218m");
+ p_string_ansi = p_string_ansi.replace("[fgcolor=purple]", "\u001b[38;5;98;48;5;98m");
+ p_string_ansi = p_string_ansi.replace("[fgcolor=cyan]", "\u001b[96;106m");
+ p_string_ansi = p_string_ansi.replace("[fgcolor=white]", "\u001b[97;107m");
+ p_string_ansi = p_string_ansi.replace("[fgcolor=orange]", "\u001b[38;5;208;48;5;208m");
+ p_string_ansi = p_string_ansi.replace("[fgcolor=gray]", "\u001b[90;100m");
+ p_string_ansi = p_string_ansi.replace("[/fgcolor]", "\u001b[39;49m");
+ }
+
+ OS::get_singleton()->print_rich("%s\n", p_string_ansi.utf8().get_data());
+
+ _global_lock();
+ PrintHandlerList *l = print_handler_list;
+ while (l) {
+ l->printfunc(l->userdata, p_string, false, true);
l = l->next;
}
@@ -96,7 +187,7 @@ void print_error(String p_string) {
_global_lock();
PrintHandlerList *l = print_handler_list;
while (l) {
- l->printfunc(l->userdata, p_string, true);
+ l->printfunc(l->userdata, p_string, true, false);
l = l->next;
}
diff --git a/core/string/print_string.h b/core/string/print_string.h
index f7d0f25030..823e2c29e8 100644
--- a/core/string/print_string.h
+++ b/core/string/print_string.h
@@ -35,7 +35,7 @@
extern void (*_print_func)(String);
-typedef void (*PrintHandlerFunc)(void *, const String &p_string, bool p_error);
+typedef void (*PrintHandlerFunc)(void *, const String &p_string, bool p_error, bool p_rich);
struct PrintHandlerList {
PrintHandlerFunc printfunc = nullptr;
@@ -59,6 +59,7 @@ void remove_print_handler(const PrintHandlerList *p_handler);
extern bool _print_line_enabled;
extern bool _print_error_enabled;
extern void __print_line(String p_string);
+extern void __print_line_rich(String p_string);
extern void print_error(String p_string);
extern void print_verbose(String p_string);
@@ -66,9 +67,18 @@ inline void print_line(Variant v) {
__print_line(stringify_variants(v));
}
+inline void print_line_rich(Variant v) {
+ __print_line_rich(stringify_variants(v));
+}
+
template <typename... Args>
void print_line(Variant p_var, Args... p_args) {
__print_line(stringify_variants(p_var, p_args...));
}
+template <typename... Args>
+void print_line_rich(Variant p_var, Args... p_args) {
+ __print_line_rich(stringify_variants(p_var, p_args...));
+}
+
#endif // PRINT_STRING_H
diff --git a/core/templates/hash_map.h b/core/templates/hash_map.h
index e5f73171a2..191f21a3dd 100644
--- a/core/templates/hash_map.h
+++ b/core/templates/hash_map.h
@@ -91,9 +91,9 @@ private:
return hash;
}
- _FORCE_INLINE_ uint32_t _get_probe_length(uint32_t p_pos, uint32_t p_hash, uint32_t p_capacity) const {
- uint32_t original_pos = p_hash % p_capacity;
- return (p_pos - original_pos + p_capacity) % p_capacity;
+ static _FORCE_INLINE_ uint32_t _get_probe_length(const uint32_t p_pos, const uint32_t p_hash, const uint32_t p_capacity, const uint64_t p_capacity_inv) {
+ const uint32_t original_pos = fastmod(p_hash, p_capacity_inv, p_capacity);
+ return fastmod(p_pos - original_pos + p_capacity, p_capacity_inv, p_capacity);
}
bool _lookup_pos(const TKey &p_key, uint32_t &r_pos) const {
@@ -101,9 +101,10 @@ private:
return false; // Failed lookups, no elements
}
- uint32_t capacity = hash_table_size_primes[capacity_index];
+ const uint32_t capacity = hash_table_size_primes[capacity_index];
+ const uint64_t capacity_inv = hash_table_size_primes_inv[capacity_index];
uint32_t hash = _hash(p_key);
- uint32_t pos = hash % capacity;
+ uint32_t pos = fastmod(hash, capacity_inv, capacity);
uint32_t distance = 0;
while (true) {
@@ -111,7 +112,7 @@ private:
return false;
}
- if (distance > _get_probe_length(pos, hashes[pos], capacity)) {
+ if (distance > _get_probe_length(pos, hashes[pos], capacity, capacity_inv)) {
return false;
}
@@ -120,17 +121,18 @@ private:
return true;
}
- pos = (pos + 1) % capacity;
+ pos = fastmod((pos + 1), capacity_inv, capacity);
distance++;
}
}
void _insert_with_hash(uint32_t p_hash, HashMapElement<TKey, TValue> *p_value) {
- uint32_t capacity = hash_table_size_primes[capacity_index];
+ const uint32_t capacity = hash_table_size_primes[capacity_index];
+ const uint64_t capacity_inv = hash_table_size_primes_inv[capacity_index];
uint32_t hash = p_hash;
HashMapElement<TKey, TValue> *value = p_value;
uint32_t distance = 0;
- uint32_t pos = hash % capacity;
+ uint32_t pos = fastmod(hash, capacity_inv, capacity);
while (true) {
if (hashes[pos] == EMPTY_HASH) {
@@ -143,14 +145,14 @@ private:
}
// Not an empty slot, let's check the probing length of the existing one.
- uint32_t existing_probe_len = _get_probe_length(pos, hashes[pos], capacity);
+ uint32_t existing_probe_len = _get_probe_length(pos, hashes[pos], capacity, capacity_inv);
if (existing_probe_len < distance) {
SWAP(hash, hashes[pos]);
SWAP(value, elements[pos]);
distance = existing_probe_len;
}
- pos = (pos + 1) % capacity;
+ pos = fastmod((pos + 1), capacity_inv, capacity);
distance++;
}
}
@@ -316,13 +318,14 @@ public:
return false;
}
- uint32_t capacity = hash_table_size_primes[capacity_index];
- uint32_t next_pos = (pos + 1) % capacity;
- while (hashes[next_pos] != EMPTY_HASH && _get_probe_length(next_pos, hashes[next_pos], capacity) != 0) {
+ const uint32_t capacity = hash_table_size_primes[capacity_index];
+ const uint64_t capacity_inv = hash_table_size_primes_inv[capacity_index];
+ uint32_t next_pos = fastmod((pos + 1), capacity_inv, capacity);
+ while (hashes[next_pos] != EMPTY_HASH && _get_probe_length(next_pos, hashes[next_pos], capacity, capacity_inv) != 0) {
SWAP(hashes[next_pos], hashes[pos]);
SWAP(elements[next_pos], elements[pos]);
pos = next_pos;
- next_pos = (pos + 1) % capacity;
+ next_pos = fastmod((pos + 1), capacity_inv, capacity);
}
hashes[pos] = EMPTY_HASH;
diff --git a/core/templates/hash_set.h b/core/templates/hash_set.h
index 2318067dcc..7b3a5d46f8 100644
--- a/core/templates/hash_set.h
+++ b/core/templates/hash_set.h
@@ -74,9 +74,9 @@ private:
return hash;
}
- _FORCE_INLINE_ uint32_t _get_probe_length(uint32_t p_pos, uint32_t p_hash, uint32_t p_capacity) const {
- uint32_t original_pos = p_hash % p_capacity;
- return (p_pos - original_pos + p_capacity) % p_capacity;
+ static _FORCE_INLINE_ uint32_t _get_probe_length(const uint32_t p_pos, const uint32_t p_hash, const uint32_t p_capacity, const uint64_t p_capacity_inv) {
+ const uint32_t original_pos = fastmod(p_hash, p_capacity_inv, p_capacity);
+ return fastmod(p_pos - original_pos + p_capacity, p_capacity_inv, p_capacity);
}
bool _lookup_pos(const TKey &p_key, uint32_t &r_pos) const {
@@ -84,9 +84,10 @@ private:
return false; // Failed lookups, no elements
}
- uint32_t capacity = hash_table_size_primes[capacity_index];
+ const uint32_t capacity = hash_table_size_primes[capacity_index];
+ const uint64_t capacity_inv = hash_table_size_primes_inv[capacity_index];
uint32_t hash = _hash(p_key);
- uint32_t pos = hash % capacity;
+ uint32_t pos = fastmod(hash, capacity_inv, capacity);
uint32_t distance = 0;
while (true) {
@@ -94,7 +95,7 @@ private:
return false;
}
- if (distance > _get_probe_length(pos, hashes[pos], capacity)) {
+ if (distance > _get_probe_length(pos, hashes[pos], capacity, capacity_inv)) {
return false;
}
@@ -103,17 +104,18 @@ private:
return true;
}
- pos = (pos + 1) % capacity;
+ pos = fastmod(pos + 1, capacity_inv, capacity);
distance++;
}
}
uint32_t _insert_with_hash(uint32_t p_hash, uint32_t p_index) {
- uint32_t capacity = hash_table_size_primes[capacity_index];
+ const uint32_t capacity = hash_table_size_primes[capacity_index];
+ const uint64_t capacity_inv = hash_table_size_primes_inv[capacity_index];
uint32_t hash = p_hash;
uint32_t index = p_index;
uint32_t distance = 0;
- uint32_t pos = hash % capacity;
+ uint32_t pos = fastmod(hash, capacity_inv, capacity);
while (true) {
if (hashes[pos] == EMPTY_HASH) {
@@ -124,7 +126,7 @@ private:
}
// Not an empty slot, let's check the probing length of the existing one.
- uint32_t existing_probe_len = _get_probe_length(pos, hashes[pos], capacity);
+ uint32_t existing_probe_len = _get_probe_length(pos, hashes[pos], capacity, capacity_inv);
if (existing_probe_len < distance) {
key_to_hash[index] = pos;
SWAP(hash, hashes[pos]);
@@ -132,7 +134,7 @@ private:
distance = existing_probe_len;
}
- pos = (pos + 1) % capacity;
+ pos = fastmod(pos + 1, capacity_inv, capacity);
distance++;
}
}
@@ -265,9 +267,10 @@ public:
uint32_t key_pos = pos;
pos = key_to_hash[pos]; //make hash pos
- uint32_t capacity = hash_table_size_primes[capacity_index];
- uint32_t next_pos = (pos + 1) % capacity;
- while (hashes[next_pos] != EMPTY_HASH && _get_probe_length(next_pos, hashes[next_pos], capacity) != 0) {
+ const uint32_t capacity = hash_table_size_primes[capacity_index];
+ const uint64_t capacity_inv = hash_table_size_primes_inv[capacity_index];
+ uint32_t next_pos = fastmod(pos + 1, capacity_inv, capacity);
+ while (hashes[next_pos] != EMPTY_HASH && _get_probe_length(next_pos, hashes[next_pos], capacity, capacity_inv) != 0) {
uint32_t kpos = hash_to_key[pos];
uint32_t kpos_next = hash_to_key[next_pos];
SWAP(key_to_hash[kpos], key_to_hash[kpos_next]);
@@ -275,7 +278,7 @@ public:
SWAP(hash_to_key[next_pos], hash_to_key[pos]);
pos = next_pos;
- next_pos = (pos + 1) % capacity;
+ next_pos = fastmod(pos + 1, capacity_inv, capacity);
}
hashes[pos] = EMPTY_HASH;
diff --git a/core/templates/hashfuncs.h b/core/templates/hashfuncs.h
index 98ff7fa4ce..547534f26a 100644
--- a/core/templates/hashfuncs.h
+++ b/core/templates/hashfuncs.h
@@ -62,7 +62,7 @@ static _FORCE_INLINE_ uint32_t hash_djb2(const char *p_cstr) {
uint32_t c;
while ((c = *chr++)) {
- hash = ((hash << 5) + hash) + c; /* hash * 33 + c */
+ hash = ((hash << 5) + hash) ^ c; /* hash * 33 ^ c */
}
return hash;
@@ -72,14 +72,14 @@ static _FORCE_INLINE_ uint32_t hash_djb2_buffer(const uint8_t *p_buff, int p_len
uint32_t hash = p_prev;
for (int i = 0; i < p_len; i++) {
- hash = ((hash << 5) + hash) + p_buff[i]; /* hash * 33 + c */
+ hash = ((hash << 5) + hash) ^ p_buff[i]; /* hash * 33 + c */
}
return hash;
}
static _FORCE_INLINE_ uint32_t hash_djb2_one_32(uint32_t p_in, uint32_t p_prev = 5381) {
- return ((p_prev << 5) + p_prev) + p_in;
+ return ((p_prev << 5) + p_prev) ^ p_in;
}
/**
@@ -100,14 +100,76 @@ static _FORCE_INLINE_ uint32_t hash_one_uint64(const uint64_t p_int) {
return uint32_t(v);
}
+#define HASH_MURMUR3_SEED 0x7F07C65
// Murmurhash3 32-bit version.
// All MurmurHash versions are public domain software, and the author disclaims all copyright to their code.
-static _FORCE_INLINE_ uint32_t rotl32(uint32_t x, int8_t r) {
+static _FORCE_INLINE_ uint32_t hash_murmur3_one_32(uint32_t p_in, uint32_t p_seed = HASH_MURMUR3_SEED) {
+ p_in *= 0xcc9e2d51;
+ p_in = (p_in << 15) | (p_in >> 17);
+ p_in *= 0x1b873593;
+
+ p_seed ^= p_in;
+ p_seed = (p_seed << 13) | (p_seed >> 19);
+ p_seed = p_seed * 5 + 0xe6546b64;
+
+ return p_seed;
+}
+
+static _FORCE_INLINE_ uint32_t hash_murmur3_one_float(float p_in, uint32_t p_seed = HASH_MURMUR3_SEED) {
+ union {
+ float f;
+ uint32_t i;
+ } u;
+
+ // Normalize +/- 0.0 and NaN values so they hash the same.
+ if (p_in == 0.0f) {
+ u.f = 0.0;
+ } else if (Math::is_nan(p_in)) {
+ u.f = NAN;
+ } else {
+ u.f = p_in;
+ }
+
+ return hash_murmur3_one_32(u.i, p_seed);
+}
+
+static _FORCE_INLINE_ uint32_t hash_murmur3_one_64(uint64_t p_in, uint32_t p_seed = HASH_MURMUR3_SEED) {
+ p_seed = hash_murmur3_one_32(p_in & 0xFFFFFFFF, p_seed);
+ return hash_murmur3_one_32(p_in >> 32, p_seed);
+}
+
+static _FORCE_INLINE_ uint32_t hash_murmur3_one_double(double p_in, uint32_t p_seed = HASH_MURMUR3_SEED) {
+ union {
+ double d;
+ uint64_t i;
+ } u;
+
+ // Normalize +/- 0.0 and NaN values so they hash the same.
+ if (p_in == 0.0f) {
+ u.d = 0.0;
+ } else if (Math::is_nan(p_in)) {
+ u.d = NAN;
+ } else {
+ u.d = p_in;
+ }
+
+ return hash_murmur3_one_64(u.i, p_seed);
+}
+
+static _FORCE_INLINE_ uint32_t hash_murmur3_one_real(real_t p_in, uint32_t p_seed = HASH_MURMUR3_SEED) {
+#ifdef REAL_T_IS_DOUBLE
+ return hash_murmur3_one_double(p_in, p_seed);
+#else
+ return hash_murmur3_one_float(p_in, p_seed);
+#endif
+}
+
+static _FORCE_INLINE_ uint32_t hash_rotl32(uint32_t x, int8_t r) {
return (x << r) | (x >> (32 - r));
}
-static _FORCE_INLINE_ uint32_t fmix32(uint32_t h) {
+static _FORCE_INLINE_ uint32_t hash_fmix32(uint32_t h) {
h ^= h >> 16;
h *= 0x85ebca6b;
h ^= h >> 13;
@@ -117,7 +179,7 @@ static _FORCE_INLINE_ uint32_t fmix32(uint32_t h) {
return h;
}
-static _FORCE_INLINE_ uint32_t hash_murmur3_32(const void *key, int length, const uint32_t seed = 0x7F07C65) {
+static _FORCE_INLINE_ uint32_t hash_murmur3_buffer(const void *key, int length, const uint32_t seed = HASH_MURMUR3_SEED) {
// Although not required, this is a random prime number.
const uint8_t *data = (const uint8_t *)key;
const int nblocks = length / 4;
@@ -133,11 +195,11 @@ static _FORCE_INLINE_ uint32_t hash_murmur3_32(const void *key, int length, cons
uint32_t k1 = blocks[i];
k1 *= c1;
- k1 = rotl32(k1, 15);
+ k1 = hash_rotl32(k1, 15);
k1 *= c2;
h1 ^= k1;
- h1 = rotl32(h1, 13);
+ h1 = hash_rotl32(h1, 13);
h1 = h1 * 5 + 0xe6546b64;
}
@@ -155,14 +217,14 @@ static _FORCE_INLINE_ uint32_t hash_murmur3_32(const void *key, int length, cons
case 1:
k1 ^= tail[0];
k1 *= c1;
- k1 = rotl32(k1, 15);
+ k1 = hash_rotl32(k1, 15);
k1 *= c2;
h1 ^= k1;
};
// Finalize with additional bit mixing.
h1 ^= length;
- return fmix32(h1);
+ return hash_fmix32(h1);
}
static _FORCE_INLINE_ uint32_t hash_djb2_one_float(double p_in, uint32_t p_prev = 5381) {
@@ -184,7 +246,7 @@ static _FORCE_INLINE_ uint32_t hash_djb2_one_float(double p_in, uint32_t p_prev
}
template <class T>
-static _FORCE_INLINE_ uint32_t make_uint32_t(T p_in) {
+static _FORCE_INLINE_ uint32_t hash_make_uint32_t(T p_in) {
union {
T t;
uint32_t _u32;
@@ -213,11 +275,11 @@ static _FORCE_INLINE_ uint64_t hash_djb2_one_float_64(double p_in, uint64_t p_pr
}
static _FORCE_INLINE_ uint64_t hash_djb2_one_64(uint64_t p_in, uint64_t p_prev = 5381) {
- return ((p_prev << 5) + p_prev) + p_in;
+ return ((p_prev << 5) + p_prev) ^ p_in;
}
template <class T>
-static _FORCE_INLINE_ uint64_t make_uint64_t(T p_in) {
+static _FORCE_INLINE_ uint64_t hash_make_uint64_t(T p_in) {
union {
T t;
uint64_t _u64;
@@ -241,9 +303,9 @@ struct HashMapHasherDefault {
static _FORCE_INLINE_ uint32_t hash(const String &p_string) { return p_string.hash(); }
static _FORCE_INLINE_ uint32_t hash(const char *p_cstr) { return hash_djb2(p_cstr); }
- static _FORCE_INLINE_ uint32_t hash(const wchar_t p_wchar) { return fmix32(p_wchar); }
- static _FORCE_INLINE_ uint32_t hash(const char16_t p_uchar) { return fmix32(p_uchar); }
- static _FORCE_INLINE_ uint32_t hash(const char32_t p_uchar) { return fmix32(p_uchar); }
+ static _FORCE_INLINE_ uint32_t hash(const wchar_t p_wchar) { return hash_fmix32(p_wchar); }
+ static _FORCE_INLINE_ uint32_t hash(const char16_t p_uchar) { return hash_fmix32(p_uchar); }
+ static _FORCE_INLINE_ uint32_t hash(const char32_t p_uchar) { return hash_fmix32(p_uchar); }
static _FORCE_INLINE_ uint32_t hash(const RID &p_rid) { return hash_one_uint64(p_rid.get_id()); }
static _FORCE_INLINE_ uint32_t hash(const StringName &p_string_name) { return p_string_name.hash(); }
static _FORCE_INLINE_ uint32_t hash(const NodePath &p_path) { return p_path.hash(); }
@@ -251,21 +313,59 @@ struct HashMapHasherDefault {
static _FORCE_INLINE_ uint32_t hash(const uint64_t p_int) { return hash_one_uint64(p_int); }
static _FORCE_INLINE_ uint32_t hash(const int64_t p_int) { return hash_one_uint64(p_int); }
- static _FORCE_INLINE_ uint32_t hash(const float p_float) { return hash_djb2_one_float(p_float); }
- static _FORCE_INLINE_ uint32_t hash(const double p_double) { return hash_djb2_one_float(p_double); }
- static _FORCE_INLINE_ uint32_t hash(const uint32_t p_int) { return fmix32(p_int); }
- static _FORCE_INLINE_ uint32_t hash(const int32_t p_int) { return fmix32(p_int); }
- static _FORCE_INLINE_ uint32_t hash(const uint16_t p_int) { return fmix32(p_int); }
- static _FORCE_INLINE_ uint32_t hash(const int16_t p_int) { return fmix32(p_int); }
- static _FORCE_INLINE_ uint32_t hash(const uint8_t p_int) { return fmix32(p_int); }
- static _FORCE_INLINE_ uint32_t hash(const int8_t p_int) { return fmix32(p_int); }
- static _FORCE_INLINE_ uint32_t hash(const Vector2i &p_vec) { return hash_murmur3_32(&p_vec, sizeof(Vector2i)); }
- static _FORCE_INLINE_ uint32_t hash(const Vector3i &p_vec) { return hash_murmur3_32(&p_vec, sizeof(Vector3i)); }
- static _FORCE_INLINE_ uint32_t hash(const Vector2 &p_vec) { return hash_murmur3_32(&p_vec, sizeof(Vector2)); }
- static _FORCE_INLINE_ uint32_t hash(const Vector3 &p_vec) { return hash_murmur3_32(&p_vec, sizeof(Vector3)); }
- static _FORCE_INLINE_ uint32_t hash(const Rect2i &p_rect) { return hash_murmur3_32(&p_rect, sizeof(Rect2i)); }
- static _FORCE_INLINE_ uint32_t hash(const Rect2 &p_rect) { return hash_murmur3_32(&p_rect, sizeof(Rect2)); }
- static _FORCE_INLINE_ uint32_t hash(const AABB &p_aabb) { return hash_murmur3_32(&p_aabb, sizeof(AABB)); }
+ static _FORCE_INLINE_ uint32_t hash(const float p_float) { return hash_murmur3_one_float(p_float); }
+ static _FORCE_INLINE_ uint32_t hash(const double p_double) { return hash_murmur3_one_double(p_double); }
+ static _FORCE_INLINE_ uint32_t hash(const uint32_t p_int) { return hash_fmix32(p_int); }
+ static _FORCE_INLINE_ uint32_t hash(const int32_t p_int) { return hash_fmix32(p_int); }
+ static _FORCE_INLINE_ uint32_t hash(const uint16_t p_int) { return hash_fmix32(p_int); }
+ static _FORCE_INLINE_ uint32_t hash(const int16_t p_int) { return hash_fmix32(p_int); }
+ static _FORCE_INLINE_ uint32_t hash(const uint8_t p_int) { return hash_fmix32(p_int); }
+ static _FORCE_INLINE_ uint32_t hash(const int8_t p_int) { return hash_fmix32(p_int); }
+ static _FORCE_INLINE_ uint32_t hash(const Vector2i &p_vec) {
+ uint32_t h = hash_murmur3_one_32(p_vec.x);
+ h = hash_murmur3_one_32(p_vec.y, h);
+ return hash_fmix32(h);
+ }
+ static _FORCE_INLINE_ uint32_t hash(const Vector3i &p_vec) {
+ uint32_t h = hash_murmur3_one_32(p_vec.x);
+ h = hash_murmur3_one_32(p_vec.y, h);
+ h = hash_murmur3_one_32(p_vec.z, h);
+ return hash_fmix32(h);
+ }
+ static _FORCE_INLINE_ uint32_t hash(const Vector2 &p_vec) {
+ uint32_t h = hash_murmur3_one_real(p_vec.x);
+ h = hash_murmur3_one_real(p_vec.y, h);
+ return hash_fmix32(h);
+ }
+ static _FORCE_INLINE_ uint32_t hash(const Vector3 &p_vec) {
+ uint32_t h = hash_murmur3_one_real(p_vec.x);
+ h = hash_murmur3_one_real(p_vec.y, h);
+ h = hash_murmur3_one_real(p_vec.z, h);
+ return hash_fmix32(h);
+ }
+ static _FORCE_INLINE_ uint32_t hash(const Rect2i &p_rect) {
+ uint32_t h = hash_murmur3_one_32(p_rect.position.x);
+ h = hash_murmur3_one_32(p_rect.position.y, h);
+ h = hash_murmur3_one_32(p_rect.size.x, h);
+ h = hash_murmur3_one_32(p_rect.size.y, h);
+ return hash_fmix32(h);
+ }
+ static _FORCE_INLINE_ uint32_t hash(const Rect2 &p_rect) {
+ uint32_t h = hash_murmur3_one_real(p_rect.position.x);
+ h = hash_murmur3_one_real(p_rect.position.y, h);
+ h = hash_murmur3_one_real(p_rect.size.x, h);
+ h = hash_murmur3_one_real(p_rect.size.y, h);
+ return hash_fmix32(h);
+ }
+ static _FORCE_INLINE_ uint32_t hash(const AABB &p_aabb) {
+ uint32_t h = hash_murmur3_one_real(p_aabb.position.x);
+ h = hash_murmur3_one_real(p_aabb.position.y, h);
+ h = hash_murmur3_one_real(p_aabb.position.z, h);
+ h = hash_murmur3_one_real(p_aabb.size.x, h);
+ h = hash_murmur3_one_real(p_aabb.size.y, h);
+ h = hash_murmur3_one_real(p_aabb.size.z, h);
+ return hash_fmix32(h);
+ }
};
template <typename T>
@@ -337,4 +437,66 @@ const uint32_t hash_table_size_primes[HASH_TABLE_SIZE_MAX] = {
1610612741,
};
+// Computed with elem_i = UINT64_C (0 x FFFFFFFF FFFFFFFF ) / d_i + 1, where d_i is the i-th element of the above array.
+const uint64_t hash_table_size_primes_inv[HASH_TABLE_SIZE_MAX] = {
+ 3689348814741910324,
+ 1418980313362273202,
+ 802032351030850071,
+ 392483916461905354,
+ 190172619316593316,
+ 95578984837873325,
+ 47420935922132524,
+ 23987963684927896,
+ 11955116055547344,
+ 5991147799191151,
+ 2998982941588287,
+ 1501077717772769,
+ 750081082979285,
+ 375261795343686,
+ 187625172388393,
+ 93822606204624,
+ 46909513691883,
+ 23456218233098,
+ 11728086747027,
+ 5864041509391,
+ 2932024948977,
+ 1466014921160,
+ 733007198436,
+ 366503839517,
+ 183251896093,
+ 91625960335,
+ 45812983922,
+ 22906489714,
+ 11453246088
+};
+
+/**
+ * Fastmod computes ( n mod d ) given the precomputed c much faster than n % d.
+ * The implementation of fastmod is based on the following paper by Daniel Lemire et al.
+ * Faster Remainder by Direct Computation: Applications to Compilers and Software Libraries
+ * https://arxiv.org/abs/1902.01961
+ */
+static _FORCE_INLINE_ uint32_t fastmod(const uint32_t n, const uint64_t c, const uint32_t d) {
+#if defined(_MSC_VER)
+ // Returns the upper 64 bits of the product of two 64-bit unsigned integers.
+ // This intrinsic function is required since MSVC does not support unsigned 128-bit integers.
+#if defined(_M_X64) || defined(_M_ARM64)
+ return __umulh(c * n, d);
+#else
+ // Fallback to the slower method for 32-bit platforms.
+ return n % d;
+#endif // _M_X64 || _M_ARM64
+#else
+#ifdef __SIZEOF_INT128__
+ // Prevent compiler warning, because we know what we are doing.
+ uint64_t lowbits = c * n;
+ __extension__ typedef unsigned __int128 uint128;
+ return static_cast<uint64_t>(((uint128)lowbits * d) >> 64);
+#else
+ // Fallback to the slower method if no 128-bit unsigned integer type is available.
+ return n % d;
+#endif // __SIZEOF_INT128__
+#endif // _MSC_VER
+}
+
#endif // HASHFUNCS_H
diff --git a/core/templates/local_vector.h b/core/templates/local_vector.h
index f4e0748c27..8d687effcf 100644
--- a/core/templates/local_vector.h
+++ b/core/templates/local_vector.h
@@ -38,7 +38,9 @@
#include <initializer_list>
-template <class T, class U = uint32_t, bool force_trivial = false>
+// If tight, it grows strictly as much as needed.
+// Otherwise, it grows exponentially (the default and what you want in most cases).
+template <class T, class U = uint32_t, bool force_trivial = false, bool tight = false>
class LocalVector {
private:
U count = 0;
@@ -121,7 +123,7 @@ public:
_FORCE_INLINE_ bool is_empty() const { return count == 0; }
_FORCE_INLINE_ U get_capacity() const { return capacity; }
_FORCE_INLINE_ void reserve(U p_size) {
- p_size = nearest_power_of_2_templated(p_size);
+ p_size = tight ? p_size : nearest_power_of_2_templated(p_size);
if (p_size > capacity) {
capacity = p_size;
data = (T *)memrealloc(data, capacity * sizeof(T));
@@ -262,4 +264,7 @@ public:
}
};
+template <class T, class U = uint32_t, bool force_trivial = false>
+using TightLocalVector = LocalVector<T, U, force_trivial, true>;
+
#endif // LOCAL_VECTOR_H
diff --git a/core/variant/array.cpp b/core/variant/array.cpp
index b1e142d239..af166e09a3 100644
--- a/core/variant/array.cpp
+++ b/core/variant/array.cpp
@@ -190,13 +190,13 @@ uint32_t Array::recursive_hash(int recursion_count) const {
return 0;
}
- uint32_t h = hash_djb2_one_32(Variant::ARRAY);
+ uint32_t h = hash_murmur3_one_32(Variant::ARRAY);
recursion_count++;
for (int i = 0; i < _p->array.size(); i++) {
- h = hash_djb2_one_32(_p->array[i].recursive_hash(recursion_count), h);
+ h = hash_murmur3_one_32(_p->array[i].recursive_hash(recursion_count), h);
}
- return h;
+ return hash_fmix32(h);
}
bool Array::_assign(const Array &p_array) {
@@ -260,7 +260,9 @@ void Array::push_back(const Variant &p_value) {
void Array::append_array(const Array &p_array) {
ERR_FAIL_COND_MSG(_p->read_only, "Array is in read-only state.");
- ERR_FAIL_COND(!_p->typed.validate(p_array, "append_array"));
+ for (int i = 0; i < p_array.size(); ++i) {
+ ERR_FAIL_COND(!_p->typed.validate(p_array[i], "append_array"));
+ }
_p->array.append_array(p_array._p->array);
}
diff --git a/core/variant/callable.cpp b/core/variant/callable.cpp
index 516b8f2d51..5453f0d5c6 100644
--- a/core/variant/callable.cpp
+++ b/core/variant/callable.cpp
@@ -143,7 +143,8 @@ uint32_t Callable::hash() const {
return custom->hash();
} else {
uint32_t hash = method.hash();
- return hash_djb2_one_64(object, hash);
+ hash = hash_murmur3_one_64(object, hash);
+ return hash_fmix32(hash);
}
}
diff --git a/core/variant/callable.h b/core/variant/callable.h
index 6a760958d6..bbcf5427ba 100644
--- a/core/variant/callable.h
+++ b/core/variant/callable.h
@@ -61,6 +61,7 @@ public:
CALL_ERROR_TOO_MANY_ARGUMENTS, // expected is number of arguments
CALL_ERROR_TOO_FEW_ARGUMENTS, // expected is number of arguments
CALL_ERROR_INSTANCE_IS_NULL,
+ CALL_ERROR_METHOD_NOT_CONST,
};
Error error = Error::CALL_OK;
int argument = 0;
diff --git a/core/variant/dictionary.cpp b/core/variant/dictionary.cpp
index 822021f440..d9f4359ee5 100644
--- a/core/variant/dictionary.cpp
+++ b/core/variant/dictionary.cpp
@@ -298,15 +298,15 @@ uint32_t Dictionary::recursive_hash(int recursion_count) const {
return 0;
}
- uint32_t h = hash_djb2_one_32(Variant::DICTIONARY);
+ uint32_t h = hash_murmur3_one_32(Variant::DICTIONARY);
recursion_count++;
for (const KeyValue<Variant, Variant> &E : _p->variant_map) {
- h = hash_djb2_one_32(E.key.recursive_hash(recursion_count), h);
- h = hash_djb2_one_32(E.value.recursive_hash(recursion_count), h);
+ h = hash_murmur3_one_32(E.key.recursive_hash(recursion_count), h);
+ h = hash_murmur3_one_32(E.value.recursive_hash(recursion_count), h);
}
- return h;
+ return hash_fmix32(h);
}
Array Dictionary::keys() const {
diff --git a/core/variant/variant.cpp b/core/variant/variant.cpp
index aa640924e4..ae92d7b5c4 100644
--- a/core/variant/variant.cpp
+++ b/core/variant/variant.cpp
@@ -2780,7 +2780,7 @@ uint32_t Variant::recursive_hash(int recursion_count) const {
return hash_one_uint64((uint64_t)_data._int);
} break;
case FLOAT: {
- return hash_djb2_one_float(_data._float);
+ return hash_murmur3_one_float(_data._float);
} break;
case STRING: {
return reinterpret_cast<const String *>(_data._mem)->hash();
@@ -2788,50 +2788,102 @@ uint32_t Variant::recursive_hash(int recursion_count) const {
// math types
case VECTOR2: {
- return hash_murmur3_32(reinterpret_cast<const Vector2 *>(_data._mem), sizeof(Vector2));
+ return HashMapHasherDefault::hash(*reinterpret_cast<const Vector2 *>(_data._mem));
} break;
case VECTOR2I: {
- return hash_murmur3_32(reinterpret_cast<const Vector2i *>(_data._mem), sizeof(Vector2i));
+ return HashMapHasherDefault::hash(*reinterpret_cast<const Vector2i *>(_data._mem));
} break;
case RECT2: {
- return hash_murmur3_32(reinterpret_cast<const Rect2 *>(_data._mem), sizeof(Rect2));
+ return HashMapHasherDefault::hash(*reinterpret_cast<const Rect2 *>(_data._mem));
} break;
case RECT2I: {
- return hash_murmur3_32(reinterpret_cast<const Rect2i *>(_data._mem), sizeof(Rect2i));
+ return HashMapHasherDefault::hash(*reinterpret_cast<const Rect2i *>(_data._mem));
} break;
case TRANSFORM2D: {
- return hash_murmur3_32(reinterpret_cast<const Transform2D *>(_data._transform2d), sizeof(Transform2D));
+ uint32_t h = HASH_MURMUR3_SEED;
+ const Transform2D &t = *_data._transform2d;
+ h = hash_murmur3_one_real(t[0].x, h);
+ h = hash_murmur3_one_real(t[0].y, h);
+ h = hash_murmur3_one_real(t[1].x, h);
+ h = hash_murmur3_one_real(t[1].y, h);
+ h = hash_murmur3_one_real(t[2].x, h);
+ h = hash_murmur3_one_real(t[2].y, h);
+
+ return hash_fmix32(h);
} break;
case VECTOR3: {
- return hash_murmur3_32(reinterpret_cast<const Vector3 *>(_data._mem), sizeof(Vector3));
+ return HashMapHasherDefault::hash(*reinterpret_cast<const Vector3 *>(_data._mem));
} break;
case VECTOR3I: {
- return hash_murmur3_32(reinterpret_cast<const Vector3i *>(_data._mem), sizeof(Vector3i));
+ return HashMapHasherDefault::hash(*reinterpret_cast<const Vector3i *>(_data._mem));
} break;
case PLANE: {
- return hash_murmur3_32(reinterpret_cast<const Plane *>(_data._mem), sizeof(Plane));
+ uint32_t h = HASH_MURMUR3_SEED;
+ const Plane &p = *reinterpret_cast<const Plane *>(_data._mem);
+ h = hash_murmur3_one_real(p.normal.x, h);
+ h = hash_murmur3_one_real(p.normal.y, h);
+ h = hash_murmur3_one_real(p.normal.z, h);
+ h = hash_murmur3_one_real(p.d, h);
+ return hash_fmix32(h);
} break;
case AABB: {
- return hash_murmur3_32(_data._aabb, sizeof(AABB));
+ return HashMapHasherDefault::hash(*_data._aabb);
} break;
case QUATERNION: {
- return hash_murmur3_32(reinterpret_cast<const Quaternion *>(_data._mem), sizeof(Quaternion));
+ uint32_t h = HASH_MURMUR3_SEED;
+ const Quaternion &q = *reinterpret_cast<const Quaternion *>(_data._mem);
+ h = hash_murmur3_one_real(q.x, h);
+ h = hash_murmur3_one_real(q.y, h);
+ h = hash_murmur3_one_real(q.z, h);
+ h = hash_murmur3_one_real(q.w, h);
+ return hash_fmix32(h);
} break;
case BASIS: {
- return hash_murmur3_32(_data._basis, sizeof(Basis));
+ uint32_t h = HASH_MURMUR3_SEED;
+ const Basis &b = *_data._basis;
+ h = hash_murmur3_one_real(b[0].x, h);
+ h = hash_murmur3_one_real(b[0].y, h);
+ h = hash_murmur3_one_real(b[0].z, h);
+ h = hash_murmur3_one_real(b[1].x, h);
+ h = hash_murmur3_one_real(b[1].y, h);
+ h = hash_murmur3_one_real(b[1].z, h);
+ h = hash_murmur3_one_real(b[2].x, h);
+ h = hash_murmur3_one_real(b[2].y, h);
+ h = hash_murmur3_one_real(b[2].z, h);
+ return hash_fmix32(h);
} break;
case TRANSFORM3D: {
- return hash_murmur3_32(_data._transform3d, sizeof(Transform3D));
+ uint32_t h = HASH_MURMUR3_SEED;
+ const Transform3D &t = *_data._transform3d;
+ h = hash_murmur3_one_real(t.basis[0].x, h);
+ h = hash_murmur3_one_real(t.basis[0].y, h);
+ h = hash_murmur3_one_real(t.basis[0].z, h);
+ h = hash_murmur3_one_real(t.basis[1].x, h);
+ h = hash_murmur3_one_real(t.basis[1].y, h);
+ h = hash_murmur3_one_real(t.basis[1].z, h);
+ h = hash_murmur3_one_real(t.basis[2].x, h);
+ h = hash_murmur3_one_real(t.basis[2].y, h);
+ h = hash_murmur3_one_real(t.basis[2].z, h);
+ h = hash_murmur3_one_real(t.origin.x, h);
+ h = hash_murmur3_one_real(t.origin.y, h);
+ h = hash_murmur3_one_real(t.origin.z, h);
+ return hash_fmix32(h);
} break;
// misc types
case COLOR: {
- return hash_murmur3_32(reinterpret_cast<const Color *>(_data._mem), sizeof(Color));
+ uint32_t h = HASH_MURMUR3_SEED;
+ const Color &c = *reinterpret_cast<const Color *>(_data._mem);
+ h = hash_murmur3_one_float(c.r, h);
+ h = hash_murmur3_one_float(c.g, h);
+ h = hash_murmur3_one_float(c.b, h);
+ h = hash_murmur3_one_float(c.a, h);
+ return hash_fmix32(h);
} break;
case RID: {
return hash_one_uint64(reinterpret_cast<const ::RID *>(_data._mem)->get_id());
} break;
case OBJECT: {
- return hash_one_uint64(make_uint64_t(_get_obj().obj));
+ return hash_one_uint64(hash_make_uint64_t(_get_obj().obj));
} break;
case STRING_NAME: {
return reinterpret_cast<const StringName *>(_data._mem)->hash();
@@ -2850,7 +2902,7 @@ uint32_t Variant::recursive_hash(int recursion_count) const {
case SIGNAL: {
const Signal &s = *reinterpret_cast<const Signal *>(_data._mem);
uint32_t hash = s.get_name().hash();
- return hash_djb2_one_64(s.get_object_id(), hash);
+ return hash_murmur3_one_64(s.get_object_id(), hash);
} break;
case ARRAY: {
const Array &arr = *reinterpret_cast<const Array *>(_data._mem);
@@ -2862,9 +2914,9 @@ uint32_t Variant::recursive_hash(int recursion_count) const {
int len = arr.size();
if (likely(len)) {
const uint8_t *r = arr.ptr();
- return hash_murmur3_32((uint8_t *)&r[0], len);
+ return hash_murmur3_buffer((uint8_t *)&r[0], len);
} else {
- return hash_djb2_one_64(0);
+ return hash_murmur3_one_64(0);
}
} break;
@@ -2873,9 +2925,9 @@ uint32_t Variant::recursive_hash(int recursion_count) const {
int len = arr.size();
if (likely(len)) {
const int32_t *r = arr.ptr();
- return hash_murmur3_32((uint8_t *)&r[0], len * sizeof(int32_t));
+ return hash_murmur3_buffer((uint8_t *)&r[0], len * sizeof(int32_t));
} else {
- return hash_djb2_one_64(0);
+ return hash_murmur3_one_64(0);
}
} break;
@@ -2884,9 +2936,9 @@ uint32_t Variant::recursive_hash(int recursion_count) const {
int len = arr.size();
if (likely(len)) {
const int64_t *r = arr.ptr();
- return hash_murmur3_32((uint8_t *)&r[0], len * sizeof(int64_t));
+ return hash_murmur3_buffer((uint8_t *)&r[0], len * sizeof(int64_t));
} else {
- return hash_djb2_one_64(0);
+ return hash_murmur3_one_64(0);
}
} break;
@@ -2896,9 +2948,13 @@ uint32_t Variant::recursive_hash(int recursion_count) const {
if (likely(len)) {
const float *r = arr.ptr();
- return hash_murmur3_32((uint8_t *)&r[0], len * sizeof(float));
+ uint32_t h = HASH_MURMUR3_SEED;
+ for (int32_t i = 0; i < len; i++) {
+ h = hash_murmur3_one_float(r[i], h);
+ }
+ return hash_fmix32(h);
} else {
- return hash_djb2_one_float(0.0);
+ return hash_murmur3_one_float(0.0);
}
} break;
@@ -2908,14 +2964,18 @@ uint32_t Variant::recursive_hash(int recursion_count) const {
if (likely(len)) {
const double *r = arr.ptr();
- return hash_murmur3_32((uint8_t *)&r[0], len * sizeof(double));
+ uint32_t h = HASH_MURMUR3_SEED;
+ for (int32_t i = 0; i < len; i++) {
+ h = hash_murmur3_one_double(r[i], h);
+ }
+ return hash_fmix32(h);
} else {
- return hash_djb2_one_float(0.0);
+ return hash_murmur3_one_float(0.0);
}
} break;
case PACKED_STRING_ARRAY: {
- uint32_t hash = 5831;
+ uint32_t hash = HASH_MURMUR3_SEED;
const Vector<String> &arr = PackedArrayRef<String>::get_array(_data.packed_array);
int len = arr.size();
@@ -2923,14 +2983,15 @@ uint32_t Variant::recursive_hash(int recursion_count) const {
const String *r = arr.ptr();
for (int i = 0; i < len; i++) {
- hash = hash_djb2_one_32(r[i].hash(), hash);
+ hash = hash_murmur3_one_32(r[i].hash(), hash);
}
+ hash = hash_fmix32(hash);
}
return hash;
} break;
case PACKED_VECTOR2_ARRAY: {
- uint32_t hash = 5831;
+ uint32_t hash = HASH_MURMUR3_SEED;
const Vector<Vector2> &arr = PackedArrayRef<Vector2>::get_array(_data.packed_array);
int len = arr.size();
@@ -2938,15 +2999,16 @@ uint32_t Variant::recursive_hash(int recursion_count) const {
const Vector2 *r = arr.ptr();
for (int i = 0; i < len; i++) {
- hash = hash_djb2_one_float(r[i].x, hash);
- hash = hash_djb2_one_float(r[i].y, hash);
+ hash = hash_murmur3_one_real(r[i].x, hash);
+ hash = hash_murmur3_one_real(r[i].y, hash);
}
+ hash = hash_fmix32(hash);
}
return hash;
} break;
case PACKED_VECTOR3_ARRAY: {
- uint32_t hash = 5831;
+ uint32_t hash = HASH_MURMUR3_SEED;
const Vector<Vector3> &arr = PackedArrayRef<Vector3>::get_array(_data.packed_array);
int len = arr.size();
@@ -2954,16 +3016,17 @@ uint32_t Variant::recursive_hash(int recursion_count) const {
const Vector3 *r = arr.ptr();
for (int i = 0; i < len; i++) {
- hash = hash_djb2_one_float(r[i].x, hash);
- hash = hash_djb2_one_float(r[i].y, hash);
- hash = hash_djb2_one_float(r[i].z, hash);
+ hash = hash_murmur3_one_real(r[i].x, hash);
+ hash = hash_murmur3_one_real(r[i].y, hash);
+ hash = hash_murmur3_one_real(r[i].z, hash);
}
+ hash = hash_fmix32(hash);
}
return hash;
} break;
case PACKED_COLOR_ARRAY: {
- uint32_t hash = 5831;
+ uint32_t hash = HASH_MURMUR3_SEED;
const Vector<Color> &arr = PackedArrayRef<Color>::get_array(_data.packed_array);
int len = arr.size();
@@ -2971,11 +3034,12 @@ uint32_t Variant::recursive_hash(int recursion_count) const {
const Color *r = arr.ptr();
for (int i = 0; i < len; i++) {
- hash = hash_djb2_one_float(r[i].r, hash);
- hash = hash_djb2_one_float(r[i].g, hash);
- hash = hash_djb2_one_float(r[i].b, hash);
- hash = hash_djb2_one_float(r[i].a, hash);
+ hash = hash_murmur3_one_float(r[i].r, hash);
+ hash = hash_murmur3_one_float(r[i].g, hash);
+ hash = hash_murmur3_one_float(r[i].b, hash);
+ hash = hash_murmur3_one_float(r[i].a, hash);
}
+ hash = hash_fmix32(hash);
}
return hash;
@@ -3263,13 +3327,20 @@ Vector<Variant> varray(const Variant &p_arg1, const Variant &p_arg2, const Varia
void Variant::static_assign(const Variant &p_variant) {
}
-bool Variant::is_shared() const {
- switch (type) {
+bool Variant::is_type_shared(Variant::Type p_type) {
+ switch (p_type) {
case OBJECT:
- return true;
case ARRAY:
- return true;
case DICTIONARY:
+ case PACKED_BYTE_ARRAY:
+ case PACKED_INT32_ARRAY:
+ case PACKED_INT64_ARRAY:
+ case PACKED_FLOAT32_ARRAY:
+ case PACKED_FLOAT64_ARRAY:
+ case PACKED_STRING_ARRAY:
+ case PACKED_VECTOR2_ARRAY:
+ case PACKED_VECTOR3_ARRAY:
+ case PACKED_COLOR_ARRAY:
return true;
default: {
}
@@ -3278,6 +3349,10 @@ bool Variant::is_shared() const {
return false;
}
+bool Variant::is_shared() const {
+ return is_type_shared(type);
+}
+
void Variant::_variant_call_error(const String &p_method, Callable::CallError &error) {
switch (error.error) {
case Callable::CallError::CALL_ERROR_INVALID_ARGUMENT: {
@@ -3331,6 +3406,8 @@ String Variant::get_call_error_text(Object *p_base, const StringName &p_method,
err_text = "Method not found.";
} else if (ce.error == Callable::CallError::CALL_ERROR_INSTANCE_IS_NULL) {
err_text = "Instance is null";
+ } else if (ce.error == Callable::CallError::CALL_ERROR_METHOD_NOT_CONST) {
+ err_text = "Method not const in const instance";
} else if (ce.error == Callable::CallError::CALL_OK) {
return "Call OK";
}
diff --git a/core/variant/variant.h b/core/variant/variant.h
index 726ba120b5..872b374b13 100644
--- a/core/variant/variant.h
+++ b/core/variant/variant.h
@@ -297,6 +297,7 @@ public:
static String get_type_name(Variant::Type p_type);
static bool can_convert(Type p_type_from, Type p_type_to);
static bool can_convert_strict(Type p_type_from, Type p_type_to);
+ static bool is_type_shared(Variant::Type p_type);
bool is_ref_counted() const;
_FORCE_INLINE_ bool is_num() const {
@@ -555,6 +556,7 @@ public:
return ret;
}
+ void call_const(const StringName &p_method, const Variant **p_args, int p_argcount, Variant &r_ret, Callable::CallError &r_error);
static void call_static(Variant::Type p_type, const StringName &p_method, const Variant **p_args, int p_argcount, Variant &r_ret, Callable::CallError &r_error);
static String get_call_error_text(const StringName &p_method, const Variant **p_argptrs, int p_argcount, const Callable::CallError &ce);
@@ -716,6 +718,10 @@ public:
static bool has_constant(Variant::Type p_type, const StringName &p_value);
static Variant get_constant_value(Variant::Type p_type, const StringName &p_value, bool *r_valid = nullptr);
+ static void get_enums_for_type(Variant::Type p_type, List<StringName> *p_enums);
+ static void get_enumerations_for_enum(Variant::Type p_type, StringName p_enum_name, List<StringName> *p_enumerations);
+ static int get_enum_value(Variant::Type p_type, StringName p_enum_name, StringName p_enumeration, bool *r_valid = nullptr);
+
typedef String (*ObjectDeConstruct)(const Variant &p_object, void *ud);
typedef void (*ObjectConstruct)(const String &p_text, void *ud, Variant &r_value);
diff --git a/core/variant/variant_call.cpp b/core/variant/variant_call.cpp
index b335f2fcf4..a4bb7630d6 100644
--- a/core/variant/variant_call.cpp
+++ b/core/variant/variant_call.cpp
@@ -919,7 +919,7 @@ struct _VariantCall {
}
struct ConstantData {
- HashMap<StringName, int> value;
+ HashMap<StringName, int64_t> value;
#ifdef DEBUG_ENABLED
List<StringName> value_ordered;
#endif
@@ -931,7 +931,7 @@ struct _VariantCall {
static ConstantData *constant_data;
- static void add_constant(int p_type, StringName p_constant_name, int p_constant_value) {
+ static void add_constant(int p_type, StringName p_constant_name, int64_t p_constant_value) {
constant_data[p_type].value[p_constant_name] = p_constant_value;
#ifdef DEBUG_ENABLED
constant_data[p_type].value_ordered.push_back(p_constant_name);
@@ -944,9 +944,20 @@ struct _VariantCall {
constant_data[p_type].variant_value_ordered.push_back(p_constant_name);
#endif
}
+
+ struct EnumData {
+ HashMap<StringName, HashMap<StringName, int>> value;
+ };
+
+ static EnumData *enum_data;
+
+ static void add_enum_constant(int p_type, StringName p_enum_type_name, StringName p_enumeration_name, int p_enum_value) {
+ enum_data[p_type].value[p_enum_type_name][p_enumeration_name] = p_enum_value;
+ }
};
_VariantCall::ConstantData *_VariantCall::constant_data = nullptr;
+_VariantCall::EnumData *_VariantCall::enum_data = nullptr;
struct VariantBuiltInMethodInfo {
void (*call)(Variant *base, const Variant **p_args, int p_argcount, Variant &r_ret, const Vector<Variant> &p_defvals, Callable::CallError &r_error) = nullptr;
@@ -1020,6 +1031,37 @@ void Variant::callp(const StringName &p_method, const Variant **p_args, int p_ar
#endif
r_ret = _get_obj().obj->callp(p_method, p_args, p_argcount, r_error);
+ } else {
+ r_error.error = Callable::CallError::CALL_OK;
+
+ const VariantBuiltInMethodInfo *imf = builtin_method_info[type].lookup_ptr(p_method);
+
+ if (!imf) {
+ r_error.error = Callable::CallError::CALL_ERROR_INVALID_METHOD;
+ return;
+ }
+
+ imf->call(this, p_args, p_argcount, r_ret, imf->default_arguments, r_error);
+ }
+}
+
+void Variant::call_const(const StringName &p_method, const Variant **p_args, int p_argcount, Variant &r_ret, Callable::CallError &r_error) {
+ if (type == Variant::OBJECT) {
+ //call object
+ Object *obj = _get_obj().obj;
+ if (!obj) {
+ r_error.error = Callable::CallError::CALL_ERROR_INSTANCE_IS_NULL;
+ return;
+ }
+#ifdef DEBUG_ENABLED
+ if (EngineDebugger::is_active() && !_get_obj().id.is_ref_counted() && ObjectDB::get_instance(_get_obj().id) == nullptr) {
+ r_error.error = Callable::CallError::CALL_ERROR_INSTANCE_IS_NULL;
+ return;
+ }
+
+#endif
+ r_ret = _get_obj().obj->call_const(p_method, p_args, p_argcount, r_error);
+
//else if (type==Variant::METHOD) {
} else {
r_error.error = Callable::CallError::CALL_OK;
@@ -1031,6 +1073,11 @@ void Variant::callp(const StringName &p_method, const Variant **p_args, int p_ar
return;
}
+ if (!imf->is_const) {
+ r_error.error = Callable::CallError::CALL_ERROR_METHOD_NOT_CONST;
+ return;
+ }
+
imf->call(this, p_args, p_argcount, r_ret, imf->default_arguments, r_error);
}
}
@@ -1170,19 +1217,19 @@ uint32_t Variant::get_builtin_method_hash(Variant::Type p_type, const StringName
ERR_FAIL_INDEX_V(p_type, Variant::VARIANT_MAX, 0);
const VariantBuiltInMethodInfo *method = builtin_method_info[p_type].lookup_ptr(p_method);
ERR_FAIL_COND_V(!method, 0);
- uint32_t hash = hash_djb2_one_32(method->is_const);
- hash = hash_djb2_one_32(method->is_static, hash);
- hash = hash_djb2_one_32(method->is_vararg, hash);
- hash = hash_djb2_one_32(method->has_return_type, hash);
+ uint32_t hash = hash_murmur3_one_32(method->is_const);
+ hash = hash_murmur3_one_32(method->is_static, hash);
+ hash = hash_murmur3_one_32(method->is_vararg, hash);
+ hash = hash_murmur3_one_32(method->has_return_type, hash);
if (method->has_return_type) {
- hash = hash_djb2_one_32(method->return_type, hash);
+ hash = hash_murmur3_one_32(method->return_type, hash);
}
- hash = hash_djb2_one_32(method->argument_count, hash);
+ hash = hash_murmur3_one_32(method->argument_count, hash);
for (int i = 0; i < method->argument_count; i++) {
- hash = method->get_argument_type(i);
+ hash = hash_murmur3_one_32(method->get_argument_type(i), hash);
}
- return hash;
+ return hash_fmix32(hash);
}
void Variant::get_method_list(List<MethodInfo> *p_list) const {
@@ -1245,7 +1292,7 @@ void Variant::get_constants_for_type(Variant::Type p_type, List<StringName> *p_c
for (const List<StringName>::Element *E = cd.value_ordered.front(); E; E = E->next()) {
p_constants->push_back(E->get());
#else
- for (const KeyValue<StringName, int> &E : cd.value) {
+ for (const KeyValue<StringName, int64_t> &E : cd.value) {
p_constants->push_back(E.key);
#endif
}
@@ -1281,7 +1328,7 @@ Variant Variant::get_constant_value(Variant::Type p_type, const StringName &p_va
ERR_FAIL_INDEX_V(p_type, Variant::VARIANT_MAX, 0);
_VariantCall::ConstantData &cd = _VariantCall::constant_data[p_type];
- HashMap<StringName, int>::Iterator E = cd.value.find(p_value);
+ HashMap<StringName, int64_t>::Iterator E = cd.value.find(p_value);
if (!E) {
HashMap<StringName, Variant>::Iterator F = cd.variant_value.find(p_value);
if (F) {
@@ -1300,6 +1347,54 @@ Variant Variant::get_constant_value(Variant::Type p_type, const StringName &p_va
return E->value;
}
+void Variant::get_enums_for_type(Variant::Type p_type, List<StringName> *p_enums) {
+ ERR_FAIL_INDEX(p_type, Variant::VARIANT_MAX);
+
+ _VariantCall::EnumData &enum_data = _VariantCall::enum_data[p_type];
+
+ for (const KeyValue<StringName, HashMap<StringName, int>> &E : enum_data.value) {
+ p_enums->push_back(E.key);
+ }
+}
+
+void Variant::get_enumerations_for_enum(Variant::Type p_type, StringName p_enum_name, List<StringName> *p_enumerations) {
+ ERR_FAIL_INDEX(p_type, Variant::VARIANT_MAX);
+
+ _VariantCall::EnumData &enum_data = _VariantCall::enum_data[p_type];
+
+ for (const KeyValue<StringName, HashMap<StringName, int>> &E : enum_data.value) {
+ for (const KeyValue<StringName, int> &V : E.value) {
+ p_enumerations->push_back(V.key);
+ }
+ }
+}
+
+int Variant::get_enum_value(Variant::Type p_type, StringName p_enum_name, StringName p_enumeration, bool *r_valid) {
+ if (r_valid) {
+ *r_valid = false;
+ }
+
+ ERR_FAIL_INDEX_V(p_type, Variant::VARIANT_MAX, -1);
+
+ _VariantCall::EnumData &enum_data = _VariantCall::enum_data[p_type];
+
+ HashMap<StringName, HashMap<StringName, int>>::Iterator E = enum_data.value.find(p_enum_name);
+ if (!E) {
+ return -1;
+ }
+
+ HashMap<StringName, int>::Iterator V = E->value.find(p_enumeration);
+ if (!V) {
+ return -1;
+ }
+
+ if (r_valid) {
+ *r_valid = true;
+ }
+
+ return V->value;
+}
+
#ifdef DEBUG_METHODS_ENABLED
#define bind_method(m_type, m_method, m_arg_names, m_default_args) \
METHOD_CLASS(m_type, m_method, &m_type::m_method); \
@@ -1360,6 +1455,7 @@ Variant Variant::get_constant_value(Variant::Type p_type, const StringName &p_va
static void _register_variant_builtin_methods() {
_VariantCall::constant_data = memnew_arr(_VariantCall::ConstantData, Variant::VARIANT_MAX);
+ _VariantCall::enum_data = memnew_arr(_VariantCall::EnumData, Variant::VARIANT_MAX);
builtin_method_info = memnew_arr(BuiltinMethodMap, Variant::VARIANT_MAX);
builtin_method_names = memnew_arr(List<StringName>, Variant::VARIANT_MAX);
@@ -1496,6 +1592,7 @@ static void _register_variant_builtin_methods() {
bind_method(Vector2, lerp, sarray("to", "weight"), varray());
bind_method(Vector2, slerp, sarray("to", "weight"), varray());
bind_method(Vector2, cubic_interpolate, sarray("b", "pre_a", "post_b", "weight"), varray());
+ bind_method(Vector2, bezier_interpolate, sarray("control_1", "control_2", "end", "t"), varray());
bind_method(Vector2, max_axis_index, sarray(), varray());
bind_method(Vector2, min_axis_index, sarray(), varray());
bind_method(Vector2, move_toward, sarray("to", "delta"), varray());
@@ -1583,6 +1680,7 @@ static void _register_variant_builtin_methods() {
bind_method(Vector3, lerp, sarray("to", "weight"), varray());
bind_method(Vector3, slerp, sarray("to", "weight"), varray());
bind_method(Vector3, cubic_interpolate, sarray("b", "pre_a", "post_b", "weight"), varray());
+ bind_method(Vector3, bezier_interpolate, sarray("control_1", "control_2", "end", "t"), varray());
bind_method(Vector3, move_toward, sarray("to", "delta"), varray());
bind_method(Vector3, dot, sarray("with"), varray());
bind_method(Vector3, cross, sarray("with"), varray());
@@ -2124,6 +2222,10 @@ static void _register_variant_builtin_methods() {
_VariantCall::add_constant(Variant::VECTOR3, "AXIS_Y", Vector3::AXIS_Y);
_VariantCall::add_constant(Variant::VECTOR3, "AXIS_Z", Vector3::AXIS_Z);
+ _VariantCall::add_enum_constant(Variant::VECTOR3, "Axis", "AXIS_X", Vector3::AXIS_X);
+ _VariantCall::add_enum_constant(Variant::VECTOR3, "Axis", "AXIS_Y", Vector3::AXIS_Y);
+ _VariantCall::add_enum_constant(Variant::VECTOR3, "Axis", "AXIS_Z", Vector3::AXIS_Z);
+
_VariantCall::add_variant_constant(Variant::VECTOR3, "ZERO", Vector3(0, 0, 0));
_VariantCall::add_variant_constant(Variant::VECTOR3, "ONE", Vector3(1, 1, 1));
_VariantCall::add_variant_constant(Variant::VECTOR3, "INF", Vector3(INFINITY, INFINITY, INFINITY));
@@ -2138,6 +2240,10 @@ static void _register_variant_builtin_methods() {
_VariantCall::add_constant(Variant::VECTOR3I, "AXIS_Y", Vector3i::AXIS_Y);
_VariantCall::add_constant(Variant::VECTOR3I, "AXIS_Z", Vector3i::AXIS_Z);
+ _VariantCall::add_enum_constant(Variant::VECTOR3I, "Axis", "AXIS_X", Vector3i::AXIS_X);
+ _VariantCall::add_enum_constant(Variant::VECTOR3I, "Axis", "AXIS_Y", Vector3i::AXIS_Y);
+ _VariantCall::add_enum_constant(Variant::VECTOR3I, "Axis", "AXIS_Z", Vector3i::AXIS_Z);
+
_VariantCall::add_variant_constant(Variant::VECTOR3I, "ZERO", Vector3i(0, 0, 0));
_VariantCall::add_variant_constant(Variant::VECTOR3I, "ONE", Vector3i(1, 1, 1));
_VariantCall::add_variant_constant(Variant::VECTOR3I, "LEFT", Vector3i(-1, 0, 0));
@@ -2150,9 +2256,15 @@ static void _register_variant_builtin_methods() {
_VariantCall::add_constant(Variant::VECTOR2, "AXIS_X", Vector2::AXIS_X);
_VariantCall::add_constant(Variant::VECTOR2, "AXIS_Y", Vector2::AXIS_Y);
+ _VariantCall::add_enum_constant(Variant::VECTOR2, "Axis", "AXIS_X", Vector2::AXIS_X);
+ _VariantCall::add_enum_constant(Variant::VECTOR2, "Axis", "AXIS_Y", Vector2::AXIS_Y);
+
_VariantCall::add_constant(Variant::VECTOR2I, "AXIS_X", Vector2i::AXIS_X);
_VariantCall::add_constant(Variant::VECTOR2I, "AXIS_Y", Vector2i::AXIS_Y);
+ _VariantCall::add_enum_constant(Variant::VECTOR2I, "Axis", "AXIS_X", Vector2i::AXIS_X);
+ _VariantCall::add_enum_constant(Variant::VECTOR2I, "Axis", "AXIS_Y", Vector2i::AXIS_Y);
+
_VariantCall::add_variant_constant(Variant::VECTOR2, "ZERO", Vector2(0, 0));
_VariantCall::add_variant_constant(Variant::VECTOR2, "ONE", Vector2(1, 1));
_VariantCall::add_variant_constant(Variant::VECTOR2, "INF", Vector2(INFINITY, INFINITY));
@@ -2175,6 +2287,13 @@ static void _register_variant_builtin_methods() {
_VariantCall::add_constant(Variant::BASIS, "EULER_ORDER_ZXY", Basis::EULER_ORDER_ZXY);
_VariantCall::add_constant(Variant::BASIS, "EULER_ORDER_ZYX", Basis::EULER_ORDER_ZYX);
+ _VariantCall::add_enum_constant(Variant::BASIS, "EulerOrder", "EULER_ORDER_XYZ", Basis::EULER_ORDER_XYZ);
+ _VariantCall::add_enum_constant(Variant::BASIS, "EulerOrder", "EULER_ORDER_XZY", Basis::EULER_ORDER_XZY);
+ _VariantCall::add_enum_constant(Variant::BASIS, "EulerOrder", "EULER_ORDER_YXZ", Basis::EULER_ORDER_YXZ);
+ _VariantCall::add_enum_constant(Variant::BASIS, "EulerOrder", "EULER_ORDER_YZX", Basis::EULER_ORDER_YZX);
+ _VariantCall::add_enum_constant(Variant::BASIS, "EulerOrder", "EULER_ORDER_ZXY", Basis::EULER_ORDER_ZXY);
+ _VariantCall::add_enum_constant(Variant::BASIS, "EulerOrder", "EULER_ORDER_ZYX", Basis::EULER_ORDER_ZYX);
+
_VariantCall::add_variant_constant(Variant::TRANSFORM2D, "IDENTITY", Transform2D());
_VariantCall::add_variant_constant(Variant::TRANSFORM2D, "FLIP_X", Transform2D(-1, 0, 0, 1, 0, 0));
_VariantCall::add_variant_constant(Variant::TRANSFORM2D, "FLIP_Y", Transform2D(1, 0, 0, -1, 0, 0));
@@ -2213,4 +2332,5 @@ void Variant::_unregister_variant_methods() {
memdelete_arr(builtin_method_names);
memdelete_arr(builtin_method_info);
memdelete_arr(_VariantCall::constant_data);
+ memdelete_arr(_VariantCall::enum_data);
}
diff --git a/core/variant/variant_internal.h b/core/variant/variant_internal.h
index 3696ffae60..e0cfb42e1e 100644
--- a/core/variant/variant_internal.h
+++ b/core/variant/variant_internal.h
@@ -304,6 +304,13 @@ public:
v->_get_obj().id = ObjectID();
}
+ static void update_object_id(Variant *v) {
+ const Object *o = v->_get_obj().obj;
+ if (o) {
+ v->_get_obj().id = o->get_instance_id();
+ }
+ }
+
_FORCE_INLINE_ static void *get_opaque_pointer(Variant *v) {
switch (v->type) {
case Variant::NIL:
diff --git a/core/variant/variant_utility.cpp b/core/variant/variant_utility.cpp
index 66badce268..2bca5f8284 100644
--- a/core/variant/variant_utility.cpp
+++ b/core/variant/variant_utility.cpp
@@ -231,6 +231,10 @@ struct VariantUtilityFunctions {
return Math::cubic_interpolate(from, to, pre, post, weight);
}
+ static inline double bezier_interpolate(double p_start, double p_control_1, double p_control_2, double p_end, double p_t) {
+ return Math::bezier_interpolate(p_start, p_control_1, p_control_2, p_end, p_t);
+ }
+
static inline double lerp_angle(double from, double to, double weight) {
return Math::lerp_angle(from, to, weight);
}
@@ -267,6 +271,52 @@ struct VariantUtilityFunctions {
return Math::db2linear(db);
}
+ static inline Variant wrap(const Variant &p_x, const Variant &p_min, const Variant &p_max, Callable::CallError &r_error) {
+ Variant::Type x_type = p_x.get_type();
+ if (x_type != Variant::INT && x_type != Variant::FLOAT) {
+ r_error.error = Callable::CallError::CALL_ERROR_INVALID_ARGUMENT;
+ r_error.argument = 0;
+ r_error.expected = x_type;
+ return Variant();
+ }
+
+ Variant::Type min_type = p_min.get_type();
+ if (min_type != Variant::INT && min_type != Variant::FLOAT) {
+ r_error.error = Callable::CallError::CALL_ERROR_INVALID_ARGUMENT;
+ r_error.argument = 1;
+ r_error.expected = x_type;
+ return Variant();
+ }
+
+ Variant::Type max_type = p_max.get_type();
+ if (max_type != Variant::INT && max_type != Variant::FLOAT) {
+ r_error.error = Callable::CallError::CALL_ERROR_INVALID_ARGUMENT;
+ r_error.argument = 2;
+ r_error.expected = x_type;
+ return Variant();
+ }
+
+ Variant value;
+
+ switch (x_type) {
+ case Variant::INT: {
+ if (x_type != min_type || x_type != max_type) {
+ value = wrapf((double)p_x, (double)p_min, (double)p_max);
+ } else {
+ value = wrapi((int)p_x, (int)p_min, (int)p_max);
+ }
+ } break;
+ case Variant::FLOAT: {
+ value = wrapf((double)p_x, (double)p_min, (double)p_max);
+ } break;
+ default:
+ break;
+ }
+
+ r_error.error = Callable::CallError::CALL_OK;
+ return value;
+ }
+
static inline int64_t wrapi(int64_t value, int64_t min, int64_t max) {
return Math::wrapi(value, min, max);
}
@@ -510,6 +560,22 @@ struct VariantUtilityFunctions {
r_error.error = Callable::CallError::CALL_OK;
}
+ static inline void print_rich(const Variant **p_args, int p_arg_count, Callable::CallError &r_error) {
+ String s;
+ for (int i = 0; i < p_arg_count; i++) {
+ String os = p_args[i]->operator String();
+
+ if (i == 0) {
+ s = os;
+ } else {
+ s += os;
+ }
+ }
+
+ print_line_rich(s);
+ r_error.error = Callable::CallError::CALL_OK;
+ }
+
static inline void print_verbose(const Variant **p_args, int p_arg_count, Callable::CallError &r_error) {
if (OS::get_singleton()->is_stdout_verbose()) {
String s;
@@ -1204,6 +1270,7 @@ void Variant::_register_variant_utility_functions() {
FUNCBINDR(lerp, sarray("from", "to", "weight"), Variant::UTILITY_FUNC_TYPE_MATH);
FUNCBINDR(cubic_interpolate, sarray("from", "to", "pre", "post", "weight"), Variant::UTILITY_FUNC_TYPE_MATH);
+ FUNCBINDR(bezier_interpolate, sarray("start", "control_1", "control_2", "end", "t"), Variant::UTILITY_FUNC_TYPE_MATH);
FUNCBINDR(lerp_angle, sarray("from", "to", "weight"), Variant::UTILITY_FUNC_TYPE_MATH);
FUNCBINDR(inverse_lerp, sarray("from", "to", "weight"), Variant::UTILITY_FUNC_TYPE_MATH);
FUNCBINDR(range_lerp, sarray("value", "istart", "istop", "ostart", "ostop"), Variant::UTILITY_FUNC_TYPE_MATH);
@@ -1216,6 +1283,7 @@ void Variant::_register_variant_utility_functions() {
FUNCBINDR(linear2db, sarray("lin"), Variant::UTILITY_FUNC_TYPE_MATH);
FUNCBINDR(db2linear, sarray("db"), Variant::UTILITY_FUNC_TYPE_MATH);
+ FUNCBINDVR3(wrap, sarray("value", "min", "max"), Variant::UTILITY_FUNC_TYPE_MATH);
FUNCBINDR(wrapi, sarray("value", "min", "max"), Variant::UTILITY_FUNC_TYPE_MATH);
FUNCBINDR(wrapf, sarray("value", "min", "max"), Variant::UTILITY_FUNC_TYPE_MATH);
@@ -1254,6 +1322,7 @@ void Variant::_register_variant_utility_functions() {
FUNCBINDVARARGS(str, sarray(), Variant::UTILITY_FUNC_TYPE_GENERAL);
FUNCBINDR(error_string, sarray("error"), Variant::UTILITY_FUNC_TYPE_GENERAL);
FUNCBINDVARARGV(print, sarray(), Variant::UTILITY_FUNC_TYPE_GENERAL);
+ FUNCBINDVARARGV(print_rich, sarray(), Variant::UTILITY_FUNC_TYPE_GENERAL);
FUNCBINDVARARGV(printerr, sarray(), Variant::UTILITY_FUNC_TYPE_GENERAL);
FUNCBINDVARARGV(printt, sarray(), Variant::UTILITY_FUNC_TYPE_GENERAL);
FUNCBINDVARARGV(prints, sarray(), Variant::UTILITY_FUNC_TYPE_GENERAL);
@@ -1423,17 +1492,17 @@ uint32_t Variant::get_utility_function_hash(const StringName &p_name) {
const VariantUtilityFunctionInfo *bfi = utility_function_table.lookup_ptr(p_name);
ERR_FAIL_COND_V(!bfi, 0);
- uint32_t hash = hash_djb2_one_32(bfi->is_vararg);
- hash = hash_djb2_one_32(bfi->returns_value, hash);
+ uint32_t hash = hash_murmur3_one_32(bfi->is_vararg);
+ hash = hash_murmur3_one_32(bfi->returns_value, hash);
if (bfi->returns_value) {
- hash = hash_djb2_one_32(bfi->return_type, hash);
+ hash = hash_murmur3_one_32(bfi->return_type, hash);
}
- hash = hash_djb2_one_32(bfi->argcount, hash);
+ hash = hash_murmur3_one_32(bfi->argcount, hash);
for (int i = 0; i < bfi->argcount; i++) {
- hash = hash_djb2_one_32(bfi->get_arg_type(i), hash);
+ hash = hash_murmur3_one_32(bfi->get_arg_type(i), hash);
}
- return hash;
+ return hash_fmix32(hash);
}
void Variant::get_utility_function_list(List<StringName> *r_functions) {
diff --git a/doc/classes/@GlobalScope.xml b/doc/classes/@GlobalScope.xml
index 18ea29857b..1943221309 100644
--- a/doc/classes/@GlobalScope.xml
+++ b/doc/classes/@GlobalScope.xml
@@ -106,6 +106,17 @@
[/codeblock]
</description>
</method>
+ <method name="bezier_interpolate">
+ <return type="float" />
+ <argument index="0" name="start" type="float" />
+ <argument index="1" name="control_1" type="float" />
+ <argument index="2" name="control_2" type="float" />
+ <argument index="3" name="end" type="float" />
+ <argument index="4" name="t" type="float" />
+ <description>
+ Returns the point at the given [code]t[/code] on a one-dimnesional [url=https://en.wikipedia.org/wiki/B%C3%A9zier_curve]Bezier curve[/url] defined by the given [code]control_1[/code], [code]control_2[/code], and [code]end[/code] points.
+ </description>
+ </method>
<method name="bytes2var">
<return type="Variant" />
<argument index="0" name="bytes" type="PackedByteArray" />
@@ -646,6 +657,16 @@
[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.
</description>
</method>
+ <method name="print_rich" qualifiers="vararg">
+ <description>
+ Converts one or more arguments of any type to string in the best way possible and prints them to the console. The following BBCode tags are supported: b, i, u, s, indent, code, url, center, right, color, bgcolor, fgcolor. Color tags only support named colors such as [code]red[/code], [i]not[/i] hexadecimal color codes. Unsupported tags will be left as-is in standard output.
+ When printing to standard output, the supported subset of BBCode is converted to ANSI escape codes for the terminal emulator to display. Displaying ANSI escape codes is currently only supported on Linux and macOS. Support for ANSI escape codes may vary across terminal emulators, especially for italic and strikethrough.
+ [codeblock]
+ print_rich("[code][b]Hello world![/b][/code]") # Prints out: [b]Hello world![/b]
+ [/codeblock]
+ [b]Note:[/b] Consider using [method push_error] and [method push_warning] to print error and warning messages instead of [method print] or [method print_rich]. This distinguishes them from print messages used for debugging purposes, while also displaying a stack trace when an error or warning is printed.
+ </description>
+ </method>
<method name="print_verbose" qualifiers="vararg">
<description>
If verbose mode is enabled ([method OS.is_stdout_verbose] returning [code]true[/code]), converts one or more arguments of any type to string in the best way possible and prints them to the console.
@@ -1040,6 +1061,27 @@
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.
</description>
</method>
+ <method name="wrap">
+ <return type="Variant" />
+ <argument index="0" name="value" type="Variant" />
+ <argument index="1" name="min" type="Variant" />
+ <argument index="2" name="max" type="Variant" />
+ <description>
+ Wraps the [Variant] [code]value[/code] between [code]min[/code] and [code]max[/code].
+ Usable for creating loop-alike behavior or infinite surfaces.
+ Variant types [int] and [float] (real) are supported. If any of the argument is [float] the result will be [float], otherwise it is [int].
+ [codeblock]
+ var a = wrap(4, 5, 10)
+ # a is 9 (int)
+
+ var a = wrap(7, 5, 10)
+ # a is 7 (int)
+
+ var a = wrap(10.5, 5, 10)
+ # a is 5.5 (float)
+ [/codeblock]
+ </description>
+ </method>
<method name="wrapf">
<return type="float" />
<argument index="0" name="value" type="float" />
@@ -1414,6 +1456,63 @@
<constant name="KEY_F16" value="16777259" enum="Key">
F16 key.
</constant>
+ <constant name="KEY_F17" value="16777260" enum="Key">
+ F17 key.
+ </constant>
+ <constant name="KEY_F18" value="16777261" enum="Key">
+ F18 key.
+ </constant>
+ <constant name="KEY_F19" value="16777262" enum="Key">
+ F19 key.
+ </constant>
+ <constant name="KEY_F20" value="16777263" enum="Key">
+ F20 key.
+ </constant>
+ <constant name="KEY_F21" value="16777264" enum="Key">
+ F21 key.
+ </constant>
+ <constant name="KEY_F22" value="16777265" enum="Key">
+ F22 key.
+ </constant>
+ <constant name="KEY_F23" value="16777266" enum="Key">
+ F23 key.
+ </constant>
+ <constant name="KEY_F24" value="16777267" enum="Key">
+ F24 key.
+ </constant>
+ <constant name="KEY_F25" value="16777268" enum="Key">
+ F25 key. Only supported on macOS and Linux due to a Windows limitation.
+ </constant>
+ <constant name="KEY_F26" value="16777269" enum="Key">
+ F26 key. Only supported on macOS and Linux due to a Windows limitation.
+ </constant>
+ <constant name="KEY_F27" value="16777270" enum="Key">
+ F27 key. Only supported on macOS and Linux due to a Windows limitation.
+ </constant>
+ <constant name="KEY_F28" value="16777271" enum="Key">
+ F28 key. Only supported on macOS and Linux due to a Windows limitation.
+ </constant>
+ <constant name="KEY_F29" value="16777272" enum="Key">
+ F29 key. Only supported on macOS and Linux due to a Windows limitation.
+ </constant>
+ <constant name="KEY_F30" value="16777273" enum="Key">
+ F30 key. Only supported on macOS and Linux due to a Windows limitation.
+ </constant>
+ <constant name="KEY_F31" value="16777274" enum="Key">
+ F31 key. Only supported on macOS and Linux due to a Windows limitation.
+ </constant>
+ <constant name="KEY_F32" value="16777275" enum="Key">
+ F32 key. Only supported on macOS and Linux due to a Windows limitation.
+ </constant>
+ <constant name="KEY_F33" value="16777276" enum="Key">
+ F33 key. Only supported on macOS and Linux due to a Windows limitation.
+ </constant>
+ <constant name="KEY_F34" value="16777277" enum="Key">
+ F34 key. Only supported on macOS and Linux due to a Windows limitation.
+ </constant>
+ <constant name="KEY_F35" value="16777278" enum="Key">
+ F35 key. Only supported on macOS and Linux due to a Windows limitation.
+ </constant>
<constant name="KEY_KP_MULTIPLY" value="16777345" enum="Key">
Multiply (*) key on the numeric keypad.
</constant>
@@ -1459,148 +1558,148 @@
<constant name="KEY_KP_9" value="16777359" enum="Key">
Number 9 on the numeric keypad.
</constant>
- <constant name="KEY_SUPER_L" value="16777260" enum="Key">
+ <constant name="KEY_SUPER_L" value="16777280" enum="Key">
Left Super key (Windows key).
</constant>
- <constant name="KEY_SUPER_R" value="16777261" enum="Key">
+ <constant name="KEY_SUPER_R" value="16777281" enum="Key">
Right Super key (Windows key).
</constant>
- <constant name="KEY_MENU" value="16777262" enum="Key">
+ <constant name="KEY_MENU" value="16777282" enum="Key">
Context menu key.
</constant>
- <constant name="KEY_HYPER_L" value="16777263" enum="Key">
+ <constant name="KEY_HYPER_L" value="16777283" enum="Key">
Left Hyper key.
</constant>
- <constant name="KEY_HYPER_R" value="16777264" enum="Key">
+ <constant name="KEY_HYPER_R" value="16777284" enum="Key">
Right Hyper key.
</constant>
- <constant name="KEY_HELP" value="16777265" enum="Key">
+ <constant name="KEY_HELP" value="16777285" enum="Key">
Help key.
</constant>
- <constant name="KEY_DIRECTION_L" value="16777266" enum="Key">
+ <constant name="KEY_DIRECTION_L" value="16777286" enum="Key">
Left Direction key.
</constant>
- <constant name="KEY_DIRECTION_R" value="16777267" enum="Key">
+ <constant name="KEY_DIRECTION_R" value="16777287" enum="Key">
Right Direction key.
</constant>
- <constant name="KEY_BACK" value="16777280" enum="Key">
+ <constant name="KEY_BACK" value="16777288" enum="Key">
Media back key. Not to be confused with the Back button on an Android device.
</constant>
- <constant name="KEY_FORWARD" value="16777281" enum="Key">
+ <constant name="KEY_FORWARD" value="16777289" enum="Key">
Media forward key.
</constant>
- <constant name="KEY_STOP" value="16777282" enum="Key">
+ <constant name="KEY_STOP" value="16777290" enum="Key">
Media stop key.
</constant>
- <constant name="KEY_REFRESH" value="16777283" enum="Key">
+ <constant name="KEY_REFRESH" value="16777291" enum="Key">
Media refresh key.
</constant>
- <constant name="KEY_VOLUMEDOWN" value="16777284" enum="Key">
+ <constant name="KEY_VOLUMEDOWN" value="16777292" enum="Key">
Volume down key.
</constant>
- <constant name="KEY_VOLUMEMUTE" value="16777285" enum="Key">
+ <constant name="KEY_VOLUMEMUTE" value="16777293" enum="Key">
Mute volume key.
</constant>
- <constant name="KEY_VOLUMEUP" value="16777286" enum="Key">
+ <constant name="KEY_VOLUMEUP" value="16777294" enum="Key">
Volume up key.
</constant>
- <constant name="KEY_BASSBOOST" value="16777287" enum="Key">
+ <constant name="KEY_BASSBOOST" value="16777295" enum="Key">
Bass Boost key.
</constant>
- <constant name="KEY_BASSUP" value="16777288" enum="Key">
+ <constant name="KEY_BASSUP" value="16777296" enum="Key">
Bass up key.
</constant>
- <constant name="KEY_BASSDOWN" value="16777289" enum="Key">
+ <constant name="KEY_BASSDOWN" value="16777297" enum="Key">
Bass down key.
</constant>
- <constant name="KEY_TREBLEUP" value="16777290" enum="Key">
+ <constant name="KEY_TREBLEUP" value="16777298" enum="Key">
Treble up key.
</constant>
- <constant name="KEY_TREBLEDOWN" value="16777291" enum="Key">
+ <constant name="KEY_TREBLEDOWN" value="16777299" enum="Key">
Treble down key.
</constant>
- <constant name="KEY_MEDIAPLAY" value="16777292" enum="Key">
+ <constant name="KEY_MEDIAPLAY" value="16777300" enum="Key">
Media play key.
</constant>
- <constant name="KEY_MEDIASTOP" value="16777293" enum="Key">
+ <constant name="KEY_MEDIASTOP" value="16777301" enum="Key">
Media stop key.
</constant>
- <constant name="KEY_MEDIAPREVIOUS" value="16777294" enum="Key">
+ <constant name="KEY_MEDIAPREVIOUS" value="16777302" enum="Key">
Previous song key.
</constant>
- <constant name="KEY_MEDIANEXT" value="16777295" enum="Key">
+ <constant name="KEY_MEDIANEXT" value="16777303" enum="Key">
Next song key.
</constant>
- <constant name="KEY_MEDIARECORD" value="16777296" enum="Key">
+ <constant name="KEY_MEDIARECORD" value="16777304" enum="Key">
Media record key.
</constant>
- <constant name="KEY_HOMEPAGE" value="16777297" enum="Key">
+ <constant name="KEY_HOMEPAGE" value="16777305" enum="Key">
Home page key.
</constant>
- <constant name="KEY_FAVORITES" value="16777298" enum="Key">
+ <constant name="KEY_FAVORITES" value="16777306" enum="Key">
Favorites key.
</constant>
- <constant name="KEY_SEARCH" value="16777299" enum="Key">
+ <constant name="KEY_SEARCH" value="16777307" enum="Key">
Search key.
</constant>
- <constant name="KEY_STANDBY" value="16777300" enum="Key">
+ <constant name="KEY_STANDBY" value="16777308" enum="Key">
Standby key.
</constant>
- <constant name="KEY_OPENURL" value="16777301" enum="Key">
+ <constant name="KEY_OPENURL" value="16777309" enum="Key">
Open URL / Launch Browser key.
</constant>
- <constant name="KEY_LAUNCHMAIL" value="16777302" enum="Key">
+ <constant name="KEY_LAUNCHMAIL" value="16777310" enum="Key">
Launch Mail key.
</constant>
- <constant name="KEY_LAUNCHMEDIA" value="16777303" enum="Key">
+ <constant name="KEY_LAUNCHMEDIA" value="16777311" enum="Key">
Launch Media key.
</constant>
- <constant name="KEY_LAUNCH0" value="16777304" enum="Key">
+ <constant name="KEY_LAUNCH0" value="16777312" enum="Key">
Launch Shortcut 0 key.
</constant>
- <constant name="KEY_LAUNCH1" value="16777305" enum="Key">
+ <constant name="KEY_LAUNCH1" value="16777313" enum="Key">
Launch Shortcut 1 key.
</constant>
- <constant name="KEY_LAUNCH2" value="16777306" enum="Key">
+ <constant name="KEY_LAUNCH2" value="16777314" enum="Key">
Launch Shortcut 2 key.
</constant>
- <constant name="KEY_LAUNCH3" value="16777307" enum="Key">
+ <constant name="KEY_LAUNCH3" value="16777315" enum="Key">
Launch Shortcut 3 key.
</constant>
- <constant name="KEY_LAUNCH4" value="16777308" enum="Key">
+ <constant name="KEY_LAUNCH4" value="16777316" enum="Key">
Launch Shortcut 4 key.
</constant>
- <constant name="KEY_LAUNCH5" value="16777309" enum="Key">
+ <constant name="KEY_LAUNCH5" value="16777317" enum="Key">
Launch Shortcut 5 key.
</constant>
- <constant name="KEY_LAUNCH6" value="16777310" enum="Key">
+ <constant name="KEY_LAUNCH6" value="16777318" enum="Key">
Launch Shortcut 6 key.
</constant>
- <constant name="KEY_LAUNCH7" value="16777311" enum="Key">
+ <constant name="KEY_LAUNCH7" value="16777319" enum="Key">
Launch Shortcut 7 key.
</constant>
- <constant name="KEY_LAUNCH8" value="16777312" enum="Key">
+ <constant name="KEY_LAUNCH8" value="16777320" enum="Key">
Launch Shortcut 8 key.
</constant>
- <constant name="KEY_LAUNCH9" value="16777313" enum="Key">
+ <constant name="KEY_LAUNCH9" value="16777321" enum="Key">
Launch Shortcut 9 key.
</constant>
- <constant name="KEY_LAUNCHA" value="16777314" enum="Key">
+ <constant name="KEY_LAUNCHA" value="16777322" enum="Key">
Launch Shortcut A key.
</constant>
- <constant name="KEY_LAUNCHB" value="16777315" enum="Key">
+ <constant name="KEY_LAUNCHB" value="16777323" enum="Key">
Launch Shortcut B key.
</constant>
- <constant name="KEY_LAUNCHC" value="16777316" enum="Key">
+ <constant name="KEY_LAUNCHC" value="16777324" enum="Key">
Launch Shortcut C key.
</constant>
- <constant name="KEY_LAUNCHD" value="16777317" enum="Key">
+ <constant name="KEY_LAUNCHD" value="16777325" enum="Key">
Launch Shortcut D key.
</constant>
- <constant name="KEY_LAUNCHE" value="16777318" enum="Key">
+ <constant name="KEY_LAUNCHE" value="16777326" enum="Key">
Launch Shortcut E key.
</constant>
- <constant name="KEY_LAUNCHF" value="16777319" enum="Key">
+ <constant name="KEY_LAUNCHF" value="16777327" enum="Key">
Launch Shortcut F key.
</constant>
<constant name="KEY_UNKNOWN" value="33554431" enum="Key">
@@ -2403,7 +2502,7 @@
</constant>
<constant name="PROPERTY_HINT_RANGE" value="1" enum="PropertyHint">
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].
- Additionally, other keywords can be included: "exp" for exponential range editing, "radians" for editing radian angles in degrees, "degrees" to hint at an angle and "noslider" to hide the slider.
+ Additionally, other keywords can be included: "exp" for exponential range editing, "radians" for editing radian angles in degrees, "degrees" to hint at an angle and "no_slider" to hide the slider.
</constant>
<constant name="PROPERTY_HINT_ENUM" value="2" enum="PropertyHint">
Hints that an integer, float or string property is an enumerated value to pick in a list specified via a hint string.
@@ -2444,7 +2543,7 @@
Hints that an integer property is a bitmask using the optionally named 3D physics layers.
</constant>
<constant name="PROPERTY_HINT_LAYERS_3D_NAVIGATION" value="14" enum="PropertyHint">
- Hints that an integer property is a bitmask using the optionally named 2D navigation layers.
+ Hints that an integer property is a bitmask using the optionally named 3D navigation layers.
</constant>
<constant name="PROPERTY_HINT_FILE" value="15" enum="PropertyHint">
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].
@@ -2464,21 +2563,24 @@
<constant name="PROPERTY_HINT_MULTILINE_TEXT" value="20" enum="PropertyHint">
Hints that a string property is text with line breaks. Editing it will show a text input field where line breaks can be typed.
</constant>
- <constant name="PROPERTY_HINT_PLACEHOLDER_TEXT" value="21" enum="PropertyHint">
+ <constant name="PROPERTY_HINT_EXPRESSION" value="21" enum="PropertyHint">
+ Hints that a string property is an [Expression].
+ </constant>
+ <constant name="PROPERTY_HINT_PLACEHOLDER_TEXT" value="22" enum="PropertyHint">
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.
</constant>
- <constant name="PROPERTY_HINT_COLOR_NO_ALPHA" value="22" enum="PropertyHint">
+ <constant name="PROPERTY_HINT_COLOR_NO_ALPHA" value="23" enum="PropertyHint">
Hints that a color property should be edited without changing its alpha component, i.e. only R, G and B channels are edited.
</constant>
- <constant name="PROPERTY_HINT_IMAGE_COMPRESS_LOSSY" value="23" enum="PropertyHint">
+ <constant name="PROPERTY_HINT_IMAGE_COMPRESS_LOSSY" value="24" enum="PropertyHint">
Hints that an image is compressed using lossy compression.
</constant>
- <constant name="PROPERTY_HINT_IMAGE_COMPRESS_LOSSLESS" value="24" enum="PropertyHint">
+ <constant name="PROPERTY_HINT_IMAGE_COMPRESS_LOSSLESS" value="25" enum="PropertyHint">
Hints that an image is compressed using lossless compression.
</constant>
- <constant name="PROPERTY_HINT_OBJECT_ID" value="25" enum="PropertyHint">
+ <constant name="PROPERTY_HINT_OBJECT_ID" value="26" enum="PropertyHint">
</constant>
- <constant name="PROPERTY_HINT_TYPE_STRING" value="26" enum="PropertyHint">
+ <constant name="PROPERTY_HINT_TYPE_STRING" value="27" enum="PropertyHint">
Hint that a property represents a particular type. If a property is [constant TYPE_STRING], allows to set a type from the create dialog. If you need to create an [Array] to contain elements of a specific type, the [code]hint_string[/code] must encode nested types using [code]":"[/code] and [code]"/"[/code] for specifying [Resource] types. For instance:
[codeblock]
hint_string = "%s:" % [TYPE_INT] # Array of inteters.
@@ -2488,43 +2590,47 @@
[/codeblock]
[b]Note:[/b] The final colon is required to specify for properly detecting built-in types.
</constant>
- <constant name="PROPERTY_HINT_NODE_PATH_TO_EDITED_NODE" value="27" enum="PropertyHint">
+ <constant name="PROPERTY_HINT_NODE_PATH_TO_EDITED_NODE" value="28" enum="PropertyHint">
</constant>
- <constant name="PROPERTY_HINT_METHOD_OF_VARIANT_TYPE" value="28" enum="PropertyHint">
+ <constant name="PROPERTY_HINT_METHOD_OF_VARIANT_TYPE" value="29" enum="PropertyHint">
</constant>
- <constant name="PROPERTY_HINT_METHOD_OF_BASE_TYPE" value="29" enum="PropertyHint">
+ <constant name="PROPERTY_HINT_METHOD_OF_BASE_TYPE" value="30" enum="PropertyHint">
</constant>
- <constant name="PROPERTY_HINT_METHOD_OF_INSTANCE" value="30" enum="PropertyHint">
+ <constant name="PROPERTY_HINT_METHOD_OF_INSTANCE" value="31" enum="PropertyHint">
</constant>
- <constant name="PROPERTY_HINT_METHOD_OF_SCRIPT" value="31" enum="PropertyHint">
+ <constant name="PROPERTY_HINT_METHOD_OF_SCRIPT" value="32" enum="PropertyHint">
</constant>
- <constant name="PROPERTY_HINT_PROPERTY_OF_VARIANT_TYPE" value="32" enum="PropertyHint">
+ <constant name="PROPERTY_HINT_PROPERTY_OF_VARIANT_TYPE" value="33" enum="PropertyHint">
</constant>
- <constant name="PROPERTY_HINT_PROPERTY_OF_BASE_TYPE" value="33" enum="PropertyHint">
+ <constant name="PROPERTY_HINT_PROPERTY_OF_BASE_TYPE" value="34" enum="PropertyHint">
</constant>
- <constant name="PROPERTY_HINT_PROPERTY_OF_INSTANCE" value="34" enum="PropertyHint">
+ <constant name="PROPERTY_HINT_PROPERTY_OF_INSTANCE" value="35" enum="PropertyHint">
</constant>
- <constant name="PROPERTY_HINT_PROPERTY_OF_SCRIPT" value="35" enum="PropertyHint">
+ <constant name="PROPERTY_HINT_PROPERTY_OF_SCRIPT" value="36" enum="PropertyHint">
</constant>
- <constant name="PROPERTY_HINT_OBJECT_TOO_BIG" value="36" enum="PropertyHint">
+ <constant name="PROPERTY_HINT_OBJECT_TOO_BIG" value="37" enum="PropertyHint">
</constant>
- <constant name="PROPERTY_HINT_NODE_PATH_VALID_TYPES" value="37" enum="PropertyHint">
+ <constant name="PROPERTY_HINT_NODE_PATH_VALID_TYPES" value="38" enum="PropertyHint">
</constant>
- <constant name="PROPERTY_HINT_SAVE_FILE" value="38" enum="PropertyHint">
+ <constant name="PROPERTY_HINT_SAVE_FILE" value="39" enum="PropertyHint">
</constant>
- <constant name="PROPERTY_HINT_INT_IS_OBJECTID" value="39" enum="PropertyHint">
+ <constant name="PROPERTY_HINT_GLOBAL_SAVE_FILE" value="40" enum="PropertyHint">
</constant>
- <constant name="PROPERTY_HINT_INT_IS_POINTER" value="41" enum="PropertyHint">
+ <constant name="PROPERTY_HINT_INT_IS_OBJECTID" value="41" enum="PropertyHint">
</constant>
- <constant name="PROPERTY_HINT_ARRAY_TYPE" value="40" enum="PropertyHint">
+ <constant name="PROPERTY_HINT_INT_IS_POINTER" value="43" enum="PropertyHint">
</constant>
- <constant name="PROPERTY_HINT_LOCALE_ID" value="42" enum="PropertyHint">
+ <constant name="PROPERTY_HINT_ARRAY_TYPE" value="42" enum="PropertyHint">
+ </constant>
+ <constant name="PROPERTY_HINT_LOCALE_ID" value="44" enum="PropertyHint">
Hints that a string property is a locale code. Editing it will show a locale dialog for picking language and country.
</constant>
- <constant name="PROPERTY_HINT_LOCALIZABLE_STRING" value="43" enum="PropertyHint">
+ <constant name="PROPERTY_HINT_LOCALIZABLE_STRING" value="45" enum="PropertyHint">
Hints that a dictionary property is string translation map. Dictionary keys are locale codes and, values are translated strings.
</constant>
- <constant name="PROPERTY_HINT_MAX" value="44" enum="PropertyHint">
+ <constant name="PROPERTY_HINT_NODE_TYPE" value="46" enum="PropertyHint">
+ </constant>
+ <constant name="PROPERTY_HINT_MAX" value="47" enum="PropertyHint">
</constant>
<constant name="PROPERTY_USAGE_NONE" value="0" enum="PropertyUsageFlags">
</constant>
diff --git a/doc/classes/AStar2D.xml b/doc/classes/AStar2D.xml
index 7a27568d30..c05fb885b9 100644
--- a/doc/classes/AStar2D.xml
+++ b/doc/classes/AStar2D.xml
@@ -52,8 +52,9 @@
<return type="bool" />
<argument index="0" name="id" type="int" />
<argument index="1" name="to_id" type="int" />
+ <argument index="2" name="bidirectional" type="bool" default="true" />
<description>
- Returns whether there is a connection/segment between the given points.
+ Returns whether there is a connection/segment between the given points. 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.
</description>
</method>
<method name="clear">
@@ -89,8 +90,9 @@
<return type="void" />
<argument index="0" name="id" type="int" />
<argument index="1" name="to_id" type="int" />
+ <argument index="2" name="bidirectional" type="bool" default="true" />
<description>
- Deletes the segment between the given points.
+ 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.
</description>
</method>
<method name="get_available_point_id" qualifiers="const">
@@ -133,7 +135,7 @@
</description>
</method>
<method name="get_id_path">
- <return type="PackedInt32Array" />
+ <return type="PackedInt64Array" />
<argument index="0" name="from_id" type="int" />
<argument index="1" name="to_id" type="int" />
<description>
@@ -177,7 +179,7 @@
</description>
</method>
<method name="get_point_connections">
- <return type="PackedInt32Array" />
+ <return type="PackedInt64Array" />
<argument index="0" name="id" type="int" />
<description>
Returns an array with the IDs of the points that form the connection with the given point.
diff --git a/doc/classes/AStar3D.xml b/doc/classes/AStar3D.xml
index 33407c3e74..ea4e49c173 100644
--- a/doc/classes/AStar3D.xml
+++ b/doc/classes/AStar3D.xml
@@ -164,7 +164,7 @@
</description>
</method>
<method name="get_id_path">
- <return type="PackedInt32Array" />
+ <return type="PackedInt64Array" />
<argument index="0" name="from_id" type="int" />
<argument index="1" name="to_id" type="int" />
<description>
@@ -207,7 +207,7 @@
</description>
</method>
<method name="get_point_connections">
- <return type="PackedInt32Array" />
+ <return type="PackedInt64Array" />
<argument index="0" name="id" type="int" />
<description>
Returns an array with the IDs of the points that form the connection with the given point.
diff --git a/doc/classes/AnimationNodeStateMachineTransition.xml b/doc/classes/AnimationNodeStateMachineTransition.xml
index 94e6a2f23d..206164d675 100644
--- a/doc/classes/AnimationNodeStateMachineTransition.xml
+++ b/doc/classes/AnimationNodeStateMachineTransition.xml
@@ -19,6 +19,12 @@
[/csharp]
[/codeblocks]
</member>
+ <member name="advance_expression" type="String" setter="set_advance_expression" getter="get_advance_expression" default="&quot;&quot;">
+ Use an expression as a condition for state machine transitions. It is possible to create complex animation advance conditions for switching between states and gives much greater flexibility for creating complex state machines by directly interfacing with the script code.
+ </member>
+ <member name="advance_expression_base_node" type="NodePath" setter="set_advance_expression_base_node" getter="get_advance_expression_base_node" default="NodePath(&quot;&quot;)">
+ The path to the [Node] used to evaluate an [Expression] if one is not explictly specified internally.
+ </member>
<member name="auto_advance" type="bool" setter="set_auto_advance" getter="has_auto_advance" default="false">
Turn on the transition automatically when this state is reached. This works best with [constant SWITCH_MODE_AT_END].
</member>
diff --git a/doc/classes/AnimationTree.xml b/doc/classes/AnimationTree.xml
index 67e64c6bee..ecac228a26 100644
--- a/doc/classes/AnimationTree.xml
+++ b/doc/classes/AnimationTree.xml
@@ -37,6 +37,9 @@
<member name="active" type="bool" setter="set_active" getter="is_active" default="false">
If [code]true[/code], the [AnimationTree] will be processing.
</member>
+ <member name="advance_expression_base_node" type="NodePath" setter="set_advance_expression_base_node" getter="get_advance_expression_base_node" default="NodePath(&quot;.&quot;)">
+ The path to the [Node] used to evaluate the AnimationNode [Expression] if one is not explictly specified internally.
+ </member>
<member name="anim_player" type="NodePath" setter="set_animation_player" getter="get_animation_player" default="NodePath(&quot;&quot;)">
The path to the [AnimationPlayer] used for animating.
</member>
diff --git a/doc/classes/Array.xml b/doc/classes/Array.xml
index 94181db95f..c149cdc0e4 100644
--- a/doc/classes/Array.xml
+++ b/doc/classes/Array.xml
@@ -131,9 +131,10 @@
The callable's method should take one [Variant] parameter (the current array element) and return a boolean value.
[codeblock]
func _ready():
- print([6, 10, 6].all(greater_than_5)) # Prints True (3 elements evaluate to `true`).
- print([4, 10, 4].all(greater_than_5)) # Prints False (1 elements evaluate to `true`).
- print([4, 4, 4].all(greater_than_5)) # Prints False (0 elements evaluate to `true`).
+ print([6, 10, 6].all(greater_than_5)) # Prints True (3/3 elements evaluate to `true`).
+ print([4, 10, 4].all(greater_than_5)) # Prints False (1/3 elements evaluate to `true`).
+ print([4, 4, 4].all(greater_than_5)) # Prints False (0/3 elements evaluate to `true`).
+ print([].all(greater_than_5)) # Prints True (0/0 elements evaluate to `true`).
print([6, 10, 6].all(func(number): return number &gt; 5)) # Prints True. Same as the first line above, but using lambda function.
@@ -142,6 +143,7 @@
[/codeblock]
See also [method any], [method filter], [method map] and [method reduce].
[b]Note:[/b] Unlike relying on the size of an array returned by [method filter], this method will return as early as possible to improve performance (especially with large arrays).
+ [b]Note:[/b] For an empty array, this method [url=https://en.wikipedia.org/wiki/Vacuous_truth]always[/url] returns [code]true[/code].
</description>
</method>
<method name="any" qualifiers="const">
@@ -155,6 +157,7 @@
print([6, 10, 6].any(greater_than_5)) # Prints True (3 elements evaluate to `true`).
print([4, 10, 4].any(greater_than_5)) # Prints True (1 elements evaluate to `true`).
print([4, 4, 4].any(greater_than_5)) # Prints False (0 elements evaluate to `true`).
+ print([].any(greater_than_5)) # Prints False (0 elements evaluate to `true`).
print([6, 10, 6].any(func(number): return number &gt; 5)) # Prints True. Same as the first line above, but using lambda function.
@@ -163,6 +166,7 @@
[/codeblock]
See also [method all], [method filter], [method map] and [method reduce].
[b]Note:[/b] Unlike relying on the size of an array returned by [method filter], this method will return as early as possible to improve performance (especially with large arrays).
+ [b]Note:[/b] For an empty array, this method always returns [code]false[/code].
</description>
</method>
<method name="append">
diff --git a/doc/classes/AudioEffectAmplify.xml b/doc/classes/AudioEffectAmplify.xml
index 7ae0b06dad..43fa9d6ad3 100644
--- a/doc/classes/AudioEffectAmplify.xml
+++ b/doc/classes/AudioEffectAmplify.xml
@@ -2,12 +2,12 @@
<class name="AudioEffectAmplify" inherits="AudioEffect" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
<brief_description>
Adds an amplifying audio effect to an audio bus.
- Increases or decreases the volume of the selected audio bus.
</brief_description>
<description>
Increases or decreases the volume being routed through the audio bus.
</description>
<tutorials>
+ <link title="Audio buses">$DOCS_URL/tutorials/audio/audio_buses.html</link>
</tutorials>
<members>
<member name="volume_db" type="float" setter="set_volume_db" getter="get_volume_db" default="0.0">
diff --git a/doc/classes/AudioEffectBandLimitFilter.xml b/doc/classes/AudioEffectBandLimitFilter.xml
index 3635f122f2..4efa431714 100644
--- a/doc/classes/AudioEffectBandLimitFilter.xml
+++ b/doc/classes/AudioEffectBandLimitFilter.xml
@@ -7,5 +7,6 @@
Limits the frequencies in a range around the [member AudioEffectFilter.cutoff_hz] and allows frequencies outside of this range to pass.
</description>
<tutorials>
+ <link title="Audio buses">$DOCS_URL/tutorials/audio/audio_buses.html</link>
</tutorials>
</class>
diff --git a/doc/classes/AudioEffectBandPassFilter.xml b/doc/classes/AudioEffectBandPassFilter.xml
index 5e7713f3d4..6820b2c9f8 100644
--- a/doc/classes/AudioEffectBandPassFilter.xml
+++ b/doc/classes/AudioEffectBandPassFilter.xml
@@ -7,5 +7,6 @@
Attenuates the frequencies inside of a range around the [member AudioEffectFilter.cutoff_hz] and cuts frequencies outside of this band.
</description>
<tutorials>
+ <link title="Audio buses">$DOCS_URL/tutorials/audio/audio_buses.html</link>
</tutorials>
</class>
diff --git a/doc/classes/AudioEffectCapture.xml b/doc/classes/AudioEffectCapture.xml
index 7a7f1f8e8a..8e02056456 100644
--- a/doc/classes/AudioEffectCapture.xml
+++ b/doc/classes/AudioEffectCapture.xml
@@ -8,6 +8,7 @@
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. When capturing audio data from a microphone, the format of the samples will be stereo 32-bit floating point PCM.
</description>
<tutorials>
+ <link title="Audio buses">$DOCS_URL/tutorials/audio/audio_buses.html</link>
</tutorials>
<methods>
<method name="can_get_buffer" qualifiers="const">
diff --git a/doc/classes/AudioEffectChorus.xml b/doc/classes/AudioEffectChorus.xml
index ca04126da4..5efba17e6a 100644
--- a/doc/classes/AudioEffectChorus.xml
+++ b/doc/classes/AudioEffectChorus.xml
@@ -7,6 +7,7 @@
Adds a chorus audio effect. The effect applies a filter with voices to duplicate the audio source and manipulate it through the filter.
</description>
<tutorials>
+ <link title="Audio buses">$DOCS_URL/tutorials/audio/audio_buses.html</link>
</tutorials>
<methods>
<method name="get_voice_cutoff_hz" qualifiers="const">
diff --git a/doc/classes/AudioEffectCompressor.xml b/doc/classes/AudioEffectCompressor.xml
index 5ad948feba..8793ec0a02 100644
--- a/doc/classes/AudioEffectCompressor.xml
+++ b/doc/classes/AudioEffectCompressor.xml
@@ -13,6 +13,7 @@
- Accentuates transients by using a wider attack, making effects sound more punchy.
</description>
<tutorials>
+ <link title="Audio buses">$DOCS_URL/tutorials/audio/audio_buses.html</link>
</tutorials>
<members>
<member name="attack_us" type="float" setter="set_attack_us" getter="get_attack_us" default="20.0">
diff --git a/doc/classes/AudioEffectDelay.xml b/doc/classes/AudioEffectDelay.xml
index 8a95e315cd..8223ccd6bd 100644
--- a/doc/classes/AudioEffectDelay.xml
+++ b/doc/classes/AudioEffectDelay.xml
@@ -8,6 +8,7 @@
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.
</description>
<tutorials>
+ <link title="Audio buses">$DOCS_URL/tutorials/audio/audio_buses.html</link>
</tutorials>
<members>
<member name="dry" type="float" setter="set_dry" getter="get_dry" default="1.0">
diff --git a/doc/classes/AudioEffectEQ.xml b/doc/classes/AudioEffectEQ.xml
index 908ae956ed..ce5b6de3be 100644
--- a/doc/classes/AudioEffectEQ.xml
+++ b/doc/classes/AudioEffectEQ.xml
@@ -8,6 +8,7 @@
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).
</description>
<tutorials>
+ <link title="Audio buses">$DOCS_URL/tutorials/audio/audio_buses.html</link>
</tutorials>
<methods>
<method name="get_band_count" qualifiers="const">
diff --git a/doc/classes/AudioEffectEQ10.xml b/doc/classes/AudioEffectEQ10.xml
index 0b03ea99dd..8cf53b9df2 100644
--- a/doc/classes/AudioEffectEQ10.xml
+++ b/doc/classes/AudioEffectEQ10.xml
@@ -19,5 +19,6 @@
See also [AudioEffectEQ], [AudioEffectEQ6], [AudioEffectEQ21].
</description>
<tutorials>
+ <link title="Audio buses">$DOCS_URL/tutorials/audio/audio_buses.html</link>
</tutorials>
</class>
diff --git a/doc/classes/AudioEffectEQ21.xml b/doc/classes/AudioEffectEQ21.xml
index 6861a74596..2eed3b4836 100644
--- a/doc/classes/AudioEffectEQ21.xml
+++ b/doc/classes/AudioEffectEQ21.xml
@@ -30,5 +30,6 @@
See also [AudioEffectEQ], [AudioEffectEQ6], [AudioEffectEQ10].
</description>
<tutorials>
+ <link title="Audio buses">$DOCS_URL/tutorials/audio/audio_buses.html</link>
</tutorials>
</class>
diff --git a/doc/classes/AudioEffectEQ6.xml b/doc/classes/AudioEffectEQ6.xml
index 5aea8efaa9..816d4b9b38 100644
--- a/doc/classes/AudioEffectEQ6.xml
+++ b/doc/classes/AudioEffectEQ6.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8" ?>
<class name="AudioEffectEQ6" inherits="AudioEffectEQ" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
<brief_description>
- Adds a 6-band equalizer audio effect to an Audio bus. Gives you control over frequencies from 32 Hz to 10000 Hz.
+ Adds a 6-band equalizer audio effect to an audio bus. Gives you control over frequencies from 32 Hz to 10000 Hz.
Each frequency can be modulated between -60/+24 dB.
</brief_description>
<description>
@@ -15,5 +15,6 @@
See also [AudioEffectEQ], [AudioEffectEQ10], [AudioEffectEQ21].
</description>
<tutorials>
+ <link title="Audio buses">$DOCS_URL/tutorials/audio/audio_buses.html</link>
</tutorials>
</class>
diff --git a/doc/classes/AudioEffectHighPassFilter.xml b/doc/classes/AudioEffectHighPassFilter.xml
index 02d8dbfffc..53e6f3ca63 100644
--- a/doc/classes/AudioEffectHighPassFilter.xml
+++ b/doc/classes/AudioEffectHighPassFilter.xml
@@ -1,11 +1,12 @@
<?xml version="1.0" encoding="UTF-8" ?>
<class name="AudioEffectHighPassFilter" inherits="AudioEffectFilter" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
<brief_description>
- Adds a high-pass filter to the Audio Bus.
+ Adds a high-pass filter to the audio bus.
</brief_description>
<description>
Cuts frequencies lower than the [member AudioEffectFilter.cutoff_hz] and allows higher frequencies to pass.
</description>
<tutorials>
+ <link title="Audio buses">$DOCS_URL/tutorials/audio/audio_buses.html</link>
</tutorials>
</class>
diff --git a/doc/classes/AudioEffectHighShelfFilter.xml b/doc/classes/AudioEffectHighShelfFilter.xml
index bb5cf5c4a0..f2c20862fb 100644
--- a/doc/classes/AudioEffectHighShelfFilter.xml
+++ b/doc/classes/AudioEffectHighShelfFilter.xml
@@ -1,9 +1,10 @@
<?xml version="1.0" encoding="UTF-8" ?>
<class name="AudioEffectHighShelfFilter" inherits="AudioEffectFilter" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
<brief_description>
- Reduces all frequencies above the [member AudioEffectFilter.cutoff_hz].
+ Adds a high-shelf filter to the audio bus.
</brief_description>
<description>
+ Reduces all frequencies above the [member AudioEffectFilter.cutoff_hz].
</description>
<tutorials>
<link title="Audio buses">$DOCS_URL/tutorials/audio/audio_buses.html</link>
diff --git a/doc/classes/AudioEffectLimiter.xml b/doc/classes/AudioEffectLimiter.xml
index 3fd099b55e..e841889b2a 100644
--- a/doc/classes/AudioEffectLimiter.xml
+++ b/doc/classes/AudioEffectLimiter.xml
@@ -8,6 +8,7 @@
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.
</description>
<tutorials>
+ <link title="Audio buses">$DOCS_URL/tutorials/audio/audio_buses.html</link>
</tutorials>
<members>
<member name="ceiling_db" type="float" setter="set_ceiling_db" getter="get_ceiling_db" default="-0.1">
diff --git a/doc/classes/AudioEffectLowPassFilter.xml b/doc/classes/AudioEffectLowPassFilter.xml
index 8a9ca04354..b0577f19c3 100644
--- a/doc/classes/AudioEffectLowPassFilter.xml
+++ b/doc/classes/AudioEffectLowPassFilter.xml
@@ -1,11 +1,12 @@
<?xml version="1.0" encoding="UTF-8" ?>
<class name="AudioEffectLowPassFilter" inherits="AudioEffectFilter" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
<brief_description>
- Adds a low-pass filter to the Audio bus.
+ Adds a low-pass filter to the audio bus.
</brief_description>
<description>
Cuts frequencies higher than the [member AudioEffectFilter.cutoff_hz] and allows lower frequencies to pass.
</description>
<tutorials>
+ <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 04cc1ab1d8..f654ba3612 100644
--- a/doc/classes/AudioEffectLowShelfFilter.xml
+++ b/doc/classes/AudioEffectLowShelfFilter.xml
@@ -1,9 +1,10 @@
<?xml version="1.0" encoding="UTF-8" ?>
<class name="AudioEffectLowShelfFilter" inherits="AudioEffectFilter" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
<brief_description>
- Reduces all frequencies below the [member AudioEffectFilter.cutoff_hz].
+ Adds a low-shelf filter to the audio bus.
</brief_description>
<description>
+ Reduces all frequencies below the [member AudioEffectFilter.cutoff_hz].
</description>
<tutorials>
<link title="Audio buses">$DOCS_URL/tutorials/audio/audio_buses.html</link>
diff --git a/doc/classes/AudioEffectNotchFilter.xml b/doc/classes/AudioEffectNotchFilter.xml
index a2cc764003..ad4577cfbc 100644
--- a/doc/classes/AudioEffectNotchFilter.xml
+++ b/doc/classes/AudioEffectNotchFilter.xml
@@ -7,5 +7,6 @@
Attenuates frequencies in a narrow band around the [member AudioEffectFilter.cutoff_hz] and cuts frequencies outside of this range.
</description>
<tutorials>
+ <link title="Audio buses">$DOCS_URL/tutorials/audio/audio_buses.html</link>
</tutorials>
</class>
diff --git a/doc/classes/AudioEffectPanner.xml b/doc/classes/AudioEffectPanner.xml
index 1dd2d9fa27..291e86214e 100644
--- a/doc/classes/AudioEffectPanner.xml
+++ b/doc/classes/AudioEffectPanner.xml
@@ -1,12 +1,13 @@
<?xml version="1.0" encoding="UTF-8" ?>
<class name="AudioEffectPanner" inherits="AudioEffect" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
<brief_description>
- Adds a panner audio effect to an Audio bus. Pans sound left or right.
+ Adds a panner audio effect to an audio bus. Pans sound left or right.
</brief_description>
<description>
Determines how much of an audio signal is sent to the left and right buses.
</description>
<tutorials>
+ <link title="Audio buses">$DOCS_URL/tutorials/audio/audio_buses.html</link>
</tutorials>
<members>
<member name="pan" type="float" setter="set_pan" getter="get_pan" default="0.0">
diff --git a/doc/classes/AudioEffectPhaser.xml b/doc/classes/AudioEffectPhaser.xml
index 9c10052b6a..7aaf404352 100644
--- a/doc/classes/AudioEffectPhaser.xml
+++ b/doc/classes/AudioEffectPhaser.xml
@@ -1,13 +1,14 @@
<?xml version="1.0" encoding="UTF-8" ?>
<class name="AudioEffectPhaser" inherits="AudioEffect" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
<brief_description>
- Adds a phaser audio effect to an Audio bus.
+ Adds a phaser audio effect to an audio bus.
Combines the original signal with a copy that is slightly out of phase with the original.
</brief_description>
<description>
Combines phase-shifted signals with the original signal. The movement of the phase-shifted signals is controlled using a low-frequency oscillator.
</description>
<tutorials>
+ <link title="Audio buses">$DOCS_URL/tutorials/audio/audio_buses.html</link>
</tutorials>
<members>
<member name="depth" type="float" setter="set_depth" getter="get_depth" default="1.0">
diff --git a/doc/classes/AudioEffectPitchShift.xml b/doc/classes/AudioEffectPitchShift.xml
index aab380aa72..952d432879 100644
--- a/doc/classes/AudioEffectPitchShift.xml
+++ b/doc/classes/AudioEffectPitchShift.xml
@@ -1,13 +1,14 @@
<?xml version="1.0" encoding="UTF-8" ?>
<class name="AudioEffectPitchShift" inherits="AudioEffect" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
<brief_description>
- Adds a pitch-shifting audio effect to an Audio bus.
+ Adds a pitch-shifting audio effect to an audio bus.
Raises or lowers the pitch of original sound.
</brief_description>
<description>
Allows modulation of pitch independently of tempo. All frequencies can be increased/decreased with minimal effect on transients.
</description>
<tutorials>
+ <link title="Audio buses">$DOCS_URL/tutorials/audio/audio_buses.html</link>
</tutorials>
<members>
<member name="fft_size" type="int" setter="set_fft_size" getter="get_fft_size" enum="AudioEffectPitchShift.FFTSize" default="3">
diff --git a/doc/classes/AudioEffectReverb.xml b/doc/classes/AudioEffectReverb.xml
index 5525102806..b024f06849 100644
--- a/doc/classes/AudioEffectReverb.xml
+++ b/doc/classes/AudioEffectReverb.xml
@@ -2,12 +2,12 @@
<class name="AudioEffectReverb" inherits="AudioEffect" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
<brief_description>
Adds a reverberation audio effect to an Audio bus.
- Simulates the sound of acoustic environments such as rooms, concert halls, caverns, or an open spaces.
</brief_description>
<description>
- Simulates rooms of different sizes. Its parameters can be adjusted to simulate the sound of a specific room.
+ Simulates the sound of acoustic environments such as rooms, concert halls, caverns, or an open spaces.
</description>
<tutorials>
+ <link title="Audio buses">$DOCS_URL/tutorials/audio/audio_buses.html</link>
<link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link>
</tutorials>
<members>
diff --git a/doc/classes/AudioEffectStereoEnhance.xml b/doc/classes/AudioEffectStereoEnhance.xml
index 5c62ba982f..088d61189f 100644
--- a/doc/classes/AudioEffectStereoEnhance.xml
+++ b/doc/classes/AudioEffectStereoEnhance.xml
@@ -7,6 +7,7 @@
An audio effect that can be used to adjust the intensity of stereo panning.
</description>
<tutorials>
+ <link title="Audio buses">$DOCS_URL/tutorials/audio/audio_buses.html</link>
</tutorials>
<members>
<member name="pan_pullout" type="float" setter="set_pan_pullout" getter="get_pan_pullout" default="1.0">
diff --git a/doc/classes/AudioStreamPlayer2D.xml b/doc/classes/AudioStreamPlayer2D.xml
index 7d0470f396..76666b1f27 100644
--- a/doc/classes/AudioStreamPlayer2D.xml
+++ b/doc/classes/AudioStreamPlayer2D.xml
@@ -64,6 +64,9 @@
<member name="max_polyphony" type="int" setter="set_max_polyphony" getter="get_max_polyphony" default="1">
The maximum number of sounds this node can play at the same time. Playing additional sounds after this value is reached will cut off the oldest sounds.
</member>
+ <member name="panning_strength" type="float" setter="set_panning_strength" getter="get_panning_strength" default="1.0">
+ Scales the panning strength for this node by multiplying the base [member ProjectSettings.audio/general/2d_panning_strength] with this factor. Higher values will pan audio from left to right more dramatically than lower values.
+ </member>
<member name="pitch_scale" type="float" setter="set_pitch_scale" getter="get_pitch_scale" default="1.0">
The pitch and the tempo of the audio, as a multiplier of the audio sample's sample rate.
</member>
diff --git a/doc/classes/AudioStreamPlayer3D.xml b/doc/classes/AudioStreamPlayer3D.xml
index 8356596f54..a49b1e2291 100644
--- a/doc/classes/AudioStreamPlayer3D.xml
+++ b/doc/classes/AudioStreamPlayer3D.xml
@@ -86,6 +86,9 @@
<member name="max_polyphony" type="int" setter="set_max_polyphony" getter="get_max_polyphony" default="1">
The maximum number of sounds this node can play at the same time. Playing additional sounds after this value is reached will cut off the oldest sounds.
</member>
+ <member name="panning_strength" type="float" setter="set_panning_strength" getter="get_panning_strength" default="1.0">
+ Scales the panning strength for this node by multiplying the base [member ProjectSettings.audio/general/3d_panning_strength] with this factor. Higher values will pan audio from left to right more dramatically than lower values.
+ </member>
<member name="pitch_scale" type="float" setter="set_pitch_scale" getter="get_pitch_scale" default="1.0">
The pitch and the tempo of the audio, as a multiplier of the audio sample's sample rate.
</member>
diff --git a/doc/classes/Button.xml b/doc/classes/Button.xml
index 4ece57fa81..1e0b685795 100644
--- a/doc/classes/Button.xml
+++ b/doc/classes/Button.xml
@@ -92,8 +92,8 @@
<member name="text_direction" type="int" setter="set_text_direction" getter="get_text_direction" enum="Control.TextDirection" default="0">
Base text writing direction.
</member>
- <member name="text_overrun_behavior" type="int" setter="set_text_overrun_behavior" getter="get_text_overrun_behavior" enum="TextParagraph.OverrunBehavior" default="0">
- Sets the clipping behavior when the text exceeds the node's bounding rectangle. See [enum TextParagraph.OverrunBehavior] for a description of all modes.
+ <member name="text_overrun_behavior" type="int" setter="set_text_overrun_behavior" getter="get_text_overrun_behavior" enum="TextServer.OverrunBehavior" default="0">
+ Sets the clipping behavior when the text exceeds the node's bounding rectangle. See [enum TextServer.OverrunBehavior] for a description of all modes.
</member>
</members>
<theme_items>
diff --git a/doc/classes/ColorPickerButton.xml b/doc/classes/ColorPickerButton.xml
index 53d35c1a3d..75a715789c 100644
--- a/doc/classes/ColorPickerButton.xml
+++ b/doc/classes/ColorPickerButton.xml
@@ -6,7 +6,7 @@
<description>
Encapsulates a [ColorPicker] making it accessible by pressing a button. Pressing the button will toggle the [ColorPicker] visibility.
See also [BaseButton] which contains common properties and methods associated with this node.
- [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.minimum_size] to a big enough value to give the button enough space.
+ [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.custom_minimum_size] to a big enough value to give the button enough space.
</description>
<tutorials>
<link title="GUI Drag And Drop Demo">https://godotengine.org/asset-library/asset/133</link>
diff --git a/doc/classes/Control.xml b/doc/classes/Control.xml
index 2828896eac..2846b564b4 100644
--- a/doc/classes/Control.xml
+++ b/doc/classes/Control.xml
@@ -100,7 +100,7 @@
<method name="_get_minimum_size" qualifiers="virtual const">
<return type="Vector2" />
<description>
- Virtual method to be implemented by the user. Returns the minimum size for this control. Alternative to [member minimum_size] for controlling minimum size via code. The actual minimum size will be the max value of these two (in each axis separately).
+ Virtual method to be implemented by the user. Returns the minimum size for this control. Alternative to [member custom_minimum_size] for controlling minimum size via code. The actual minimum size will be the max value of these two (in each axis separately).
If not overridden, defaults to [constant Vector2.ZERO].
[b]Note:[/b] This method will not be called when the script is attached to a [Control] node that already overrides its minimum size (e.g. [Label], [Button], [PanelContainer] etc.). It can only be used with most basic GUI nodes, like [Control], [Container], [Panel] etc.
</description>
@@ -157,7 +157,7 @@
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.
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.
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).
- [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 minimum_size] to some non-zero value.
+ [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 custom_minimum_size] to some non-zero value.
[b]Note:[/b] The node (and any relevant children) should be [member CanvasItem.visible] when returned, otherwise, the viewport that instantiates it will not be able to calculate its minimum size reliably.
Example of usage with a custom-constructed node:
[codeblocks]
@@ -357,7 +357,7 @@
<method name="get_combined_minimum_size" qualifiers="const">
<return type="Vector2" />
<description>
- Returns combined minimum size from [member minimum_size] and [method get_minimum_size].
+ Returns combined minimum size from [member custom_minimum_size] and [method get_minimum_size].
</description>
</method>
<method name="get_cursor_shape" qualifiers="const">
@@ -389,7 +389,7 @@
<method name="get_minimum_size" qualifiers="const">
<return type="Vector2" />
<description>
- Returns the minimum size for this control. See [member minimum_size].
+ Returns the minimum size for this control. See [member custom_minimum_size].
</description>
</method>
<method name="get_offset" qualifiers="const">
@@ -939,7 +939,7 @@
<method name="update_minimum_size">
<return type="void" />
<description>
- Invalidates the size cache in this node and in parent nodes up to top level. Intended to be used with [method get_minimum_size] when the return value is changed. Setting [member minimum_size] directly calls this method automatically.
+ Invalidates the size cache in this node and in parent nodes up to top level. Intended to be used with [method get_minimum_size] when the return value is changed. Setting [member custom_minimum_size] directly calls this method automatically.
</description>
</method>
<method name="warp_mouse">
@@ -970,6 +970,9 @@
<member name="clip_contents" type="bool" setter="set_clip_contents" getter="is_clipping_contents" default="false">
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 and won't receive input.
</member>
+ <member name="custom_minimum_size" type="Vector2" setter="set_custom_minimum_size" getter="get_custom_minimum_size" default="Vector2(0, 0)">
+ 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.
+ </member>
<member name="focus_mode" type="int" setter="set_focus_mode" getter="get_focus_mode" enum="Control.FocusMode" default="0">
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.
</member>
@@ -1027,9 +1030,6 @@
<member name="layout_direction" type="int" setter="set_layout_direction" getter="get_layout_direction" enum="Control.LayoutDirection" default="0">
Controls layout direction and text writing direction. Right-to-left layouts are necessary for certain languages (e.g. Arabic and Hebrew).
</member>
- <member name="minimum_size" type="Vector2" setter="set_custom_minimum_size" getter="get_custom_minimum_size" default="Vector2(0, 0)">
- 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.
- </member>
<member name="mouse_default_cursor_shape" type="int" setter="set_default_cursor_shape" getter="get_default_cursor_shape" enum="Control.CursorShape" default="0">
The default cursor shape for this control. Useful for Godot plugins and applications or games that use the system's mouse cursors.
[b]Note:[/b] On Linux, shapes may vary depending on the cursor theme of the system.
diff --git a/doc/classes/EditorProperty.xml b/doc/classes/EditorProperty.xml
index c428233372..84f8523da3 100644
--- a/doc/classes/EditorProperty.xml
+++ b/doc/classes/EditorProperty.xml
@@ -38,7 +38,7 @@
Gets the edited object.
</description>
</method>
- <method name="get_edited_property">
+ <method name="get_edited_property" qualifiers="const">
<return type="StringName" />
<description>
Gets the edited property. If your editor is for a single property (added via [method EditorInspectorPlugin._parse_property]), then this will return the property.
diff --git a/doc/classes/Expression.xml b/doc/classes/Expression.xml
index b37de09e04..50979c9b68 100644
--- a/doc/classes/Expression.xml
+++ b/doc/classes/Expression.xml
@@ -56,6 +56,7 @@
<argument index="0" name="inputs" type="Array" default="[]" />
<argument index="1" name="base_instance" type="Object" default="null" />
<argument index="2" name="show_error" type="bool" default="true" />
+ <argument index="3" name="const_calls_only" type="bool" default="false" />
<description>
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].
If you defined input variables in [method parse], you can specify their values in the inputs array, in the same order.
diff --git a/doc/classes/HTTPRequest.xml b/doc/classes/HTTPRequest.xml
index 641d73e333..166923314f 100644
--- a/doc/classes/HTTPRequest.xml
+++ b/doc/classes/HTTPRequest.xml
@@ -15,7 +15,7 @@
# Create an HTTP request node and connect its completion signal.
var http_request = HTTPRequest.new()
add_child(http_request)
- http_request.connect("request_completed", self, "_http_request_completed")
+ http_request.request_completed.connect(self._http_request_completed)
# Perform a GET request. The URL below returns JSON as of writing.
var error = http_request.request("https://httpbin.org/get")
@@ -25,7 +25,7 @@
# Perform a POST request. The URL below returns JSON as of writing.
# Note: Don't make simultaneous requests using a single HTTPRequest node.
# The snippet below is provided for reference only.
- var body = {"name": "Godette"}
+ var body = JSON.new().stringify({"name": "Godette"})
error = http_request.request("https://httpbin.org/post", [], true, HTTPClient.METHOD_POST, body)
if error != OK:
push_error("An error occurred in the HTTP request.")
@@ -33,7 +33,9 @@
# Called when the HTTP request is completed.
func _http_request_completed(result, response_code, headers, body):
- var response = parse_json(body.get_string_from_utf8())
+ var json = JSON.new()
+ json.parse(body.get_string_from_utf8())
+ var response = json.get_data()
# Will print the user agent string used by the HTTPRequest node (as recognized by httpbin.org).
print(response.headers["User-Agent"])
@@ -44,7 +46,7 @@
// Create an HTTP request node and connect its completion signal.
var httpRequest = new HTTPRequest();
AddChild(httpRequest);
- httpRequest.Connect("request_completed", this, nameof(HttpRequestCompleted));
+ httpRequest.RequestCompleted += HttpRequestCompleted;
// Perform a GET request. The URL below returns JSON as of writing.
Error error = httpRequest.Request("https://httpbin.org/get");
@@ -56,21 +58,24 @@
// Perform a POST request. The URL below returns JSON as of writing.
// Note: Don't make simultaneous requests using a single HTTPRequest node.
// The snippet below is provided for reference only.
- string[] body = { "name", "Godette" };
- // GDScript to_json is non existent, so we use JSON.Print() here.
- error = httpRequest.Request("https://httpbin.org/post", null, true, HTTPClient.Method.Post, JSON.Print(body));
+ string body = new JSON().Stringify(new Godot.Collections.Dictionary
+ {
+ { "name", "Godette" }
+ });
+ error = httpRequest.Request("https://httpbin.org/post", null, true, HTTPClient.Method.Post, body);
if (error != Error.Ok)
{
GD.PushError("An error occurred in the HTTP request.");
}
}
-
// Called when the HTTP request is completed.
private void HttpRequestCompleted(int result, int response_code, string[] headers, byte[] body)
{
- // GDScript parse_json is non existent so we have to use JSON.parse, which has a slightly different syntax.
- var response = JSON.Parse(body.GetStringFromUTF8()).Result as Godot.Collections.Dictionary;
+ var json = new JSON();
+ json.Parse(body.GetStringFromUTF8());
+ var response = json.GetData() as Godot.Collections.Dictionary;
+
// Will print the user agent string used by the HTTPRequest node (as recognized by httpbin.org).
GD.Print((response["headers"] as Godot.Collections.Dictionary)["User-Agent"]);
}
@@ -83,7 +88,7 @@
# Create an HTTP request node and connect its completion signal.
var http_request = HTTPRequest.new()
add_child(http_request)
- http_request.connect("request_completed", self, "_http_request_completed")
+ http_request.request_completed.connect(self._http_request_completed)
# Perform the HTTP request. The URL below returns a PNG image as of writing.
var error = http_request.request("https://via.placeholder.com/512")
@@ -115,7 +120,7 @@
// Create an HTTP request node and connect its completion signal.
var httpRequest = new HTTPRequest();
AddChild(httpRequest);
- httpRequest.Connect("request_completed", this, nameof(HttpRequestCompleted));
+ httpRequest.RequestCompleted += HttpRequestCompleted;
// Perform the HTTP request. The URL below returns a PNG image as of writing.
Error error = httpRequest.Request("https://via.placeholder.com/512");
@@ -125,7 +130,6 @@
}
}
-
// Called when the HTTP request is completed.
private void HttpRequestCompleted(int result, int response_code, string[] headers, byte[] body)
{
diff --git a/doc/classes/Image.xml b/doc/classes/Image.xml
index da5b907fab..43b03ce65e 100644
--- a/doc/classes/Image.xml
+++ b/doc/classes/Image.xml
@@ -380,16 +380,59 @@
[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.
</description>
</method>
+ <method name="save_exr_to_buffer" qualifiers="const">
+ <return type="PackedByteArray" />
+ <argument index="0" name="grayscale" type="bool" default="false" />
+ <description>
+ Saves the image as an EXR file to a byte array. 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 an empty byte array if Godot was compiled without the TinyEXR module.
+ [b]Note:[/b] The TinyEXR module is disabled in non-editor builds, which means [method save_exr] will return an empty byte array when it is called from an exported project.
+ </description>
+ </method>
+ <method name="save_jpg" qualifiers="const">
+ <return type="int" enum="Error" />
+ <argument index="0" name="path" type="String" />
+ <argument index="1" name="quality" type="float" default="0.75" />
+ <description>
+ Saves the image as a JPEG file to [code]path[/code] with the specified [code]quality[/code] between [code]0.01[/code] and [code]1.0[/code] (inclusive). Higher [code]quality[/code] values result in better-looking output at the cost of larger file sizes. Recommended [code]quality[/code] values are between [code]0.75[/code] and [code]0.90[/code]. Even at quality [code]1.00[/code], JPEG compression remains lossy.
+ [b]Note:[/b] JPEG does not save an alpha channel. If the [Image] contains an alpha channel, the image will still be saved, but the resulting JPEG file won't contain the alpha channel.
+ </description>
+ </method>
+ <method name="save_jpg_to_buffer" qualifiers="const">
+ <return type="PackedByteArray" />
+ <argument index="0" name="quality" type="float" default="0.75" />
+ <description>
+ Saves the image as a JPEG file to a byte array with the specified [code]quality[/code] between [code]0.01[/code] and [code]1.0[/code] (inclusive). Higher [code]quality[/code] values result in better-looking output at the cost of larger byte array sizes (and therefore memory usage). Recommended [code]quality[/code] values are between [code]0.75[/code] and [code]0.90[/code]. Even at quality [code]1.00[/code], JPEG compression remains lossy.
+ [b]Note:[/b] JPEG does not save an alpha channel. If the [Image] contains an alpha channel, the image will still be saved, but the resulting byte array won't contain the alpha channel.
+ </description>
+ </method>
<method name="save_png" qualifiers="const">
<return type="int" enum="Error" />
<argument index="0" name="path" type="String" />
<description>
- Saves the image as a PNG file to [code]path[/code].
+ Saves the image as a PNG file to the file at [code]path[/code].
</description>
</method>
<method name="save_png_to_buffer" qualifiers="const">
<return type="PackedByteArray" />
<description>
+ Saves the image as a PNG file to a byte array.
+ </description>
+ </method>
+ <method name="save_webp" qualifiers="const">
+ <return type="int" enum="Error" />
+ <argument index="0" name="path" type="String" />
+ <argument index="1" name="lossy" type="bool" default="false" />
+ <argument index="2" name="quality" type="float" default="0.75" />
+ <description>
+ Saves the image as a WebP (Web Picture) file to the file at [code]path[/code]. By default it will save lossless. If [code]lossy[/code] is true, the image will be saved lossy, using the [code]quality[/code] setting between 0.0 and 1.0 (inclusive).
+ </description>
+ </method>
+ <method name="save_webp_to_buffer" qualifiers="const">
+ <return type="PackedByteArray" />
+ <argument index="0" name="lossy" type="bool" default="false" />
+ <argument index="1" name="quality" type="float" default="0.75" />
+ <description>
+ Saves the image as a WebP (Web Picture) file to a byte array. By default it will save lossless. If [code]lossy[/code] is true, the image will be saved lossy, using the [code]quality[/code] setting between 0.0 and 1.0 (inclusive).
</description>
</method>
<method name="set_pixel">
diff --git a/doc/classes/ItemList.xml b/doc/classes/ItemList.xml
index 83e7eba5e5..d52234e9ac 100644
--- a/doc/classes/ItemList.xml
+++ b/doc/classes/ItemList.xml
@@ -8,6 +8,7 @@
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 [kbd]Enter[/kbd].
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.
All [code]set_*[/code] methods allow negative item index, which makes the item accessed from the last one.
+ [b]Incremental search:[/b] Like [PopupMenu] and [Tree], [ItemList] supports searching within the list while the control is focused. Press a key that matches the first letter of an item's name to select the first item starting with the given letter. After that point, there are two ways to perform incremental search: 1) Press the same key again before the timeout duration to select the next item starting with the same letter. 2) Press letter keys that match the rest of the word before the timeout duration to match to select the item in question directly. Both of these actions will be reset to the beginning of the list if the timeout duration has passed since the last keystroke was registered. You can adjust the timeout duration by changing [member ProjectSettings.gui/timers/incremental_search_max_interval_msec].
</description>
<tutorials>
</tutorials>
@@ -402,8 +403,8 @@
<member name="select_mode" type="int" setter="set_select_mode" getter="get_select_mode" enum="ItemList.SelectMode" default="0">
Allows single or multiple item selection. See the [enum SelectMode] constants.
</member>
- <member name="text_overrun_behavior" type="int" setter="set_text_overrun_behavior" getter="get_text_overrun_behavior" enum="TextParagraph.OverrunBehavior" default="3">
- Sets the clipping behavior when the text exceeds an item's bounding rectangle. See [enum TextParagraph.OverrunBehavior] for a description of all modes.
+ <member name="text_overrun_behavior" type="int" setter="set_text_overrun_behavior" getter="get_text_overrun_behavior" enum="TextServer.OverrunBehavior" default="3">
+ Sets the clipping behavior when the text exceeds an item's bounding rectangle. See [enum TextServer.OverrunBehavior] for a description of all modes.
</member>
</members>
<signals>
diff --git a/doc/classes/Label.xml b/doc/classes/Label.xml
index d5744bbc42..b5f045621b 100644
--- a/doc/classes/Label.xml
+++ b/doc/classes/Label.xml
@@ -61,8 +61,8 @@
</method>
</methods>
<members>
- <member name="autowrap_mode" type="int" setter="set_autowrap_mode" getter="get_autowrap_mode" enum="Label.AutowrapMode" default="0">
- If set to something other than [constant AUTOWRAP_OFF], the text gets wrapped inside the node's bounding rectangle. If you resize the node, it will change its height automatically to show all the text. To see how each mode behaves, see [enum AutowrapMode].
+ <member name="autowrap_mode" type="int" setter="set_autowrap_mode" getter="get_autowrap_mode" enum="TextServer.AutowrapMode" default="0">
+ If set to something other than [constant TextServer.AUTOWRAP_OFF], the text gets wrapped inside the node's bounding rectangle. If you resize the node, it will change its height automatically to show all the text. To see how each mode behaves, see [enum TextServer.AutowrapMode].
</member>
<member name="clip_text" type="bool" setter="set_clip_text" getter="is_clipping_text" default="false">
If [code]true[/code], the Label only shows the text that fits inside its bounding rectangle and will clip text horizontally.
@@ -97,8 +97,8 @@
<member name="text_direction" type="int" setter="set_text_direction" getter="get_text_direction" enum="Control.TextDirection" default="0">
Base text writing direction.
</member>
- <member name="text_overrun_behavior" type="int" setter="set_text_overrun_behavior" getter="get_text_overrun_behavior" enum="Label.OverrunBehavior" default="0">
- Sets the clipping behavior when the text exceeds the node's bounding rectangle. See [enum OverrunBehavior] for a description of all modes.
+ <member name="text_overrun_behavior" type="int" setter="set_text_overrun_behavior" getter="get_text_overrun_behavior" enum="TextServer.OverrunBehavior" default="0">
+ Sets the clipping behavior when the text exceeds the node's bounding rectangle. See [enum TextServer.OverrunBehavior] for a description of all modes.
</member>
<member name="uppercase" type="bool" setter="set_uppercase" getter="is_uppercase" default="false">
If [code]true[/code], all the text displays as UPPERCASE.
@@ -110,54 +110,10 @@
Restricts the number of characters to display. Set to -1 to disable.
[b]Note:[/b] Setting this property updates [member percent_visible] based on current [method get_total_character_count].
</member>
- <member name="visible_characters_behavior" type="int" setter="set_visible_characters_behavior" getter="get_visible_characters_behavior" enum="Label.VisibleCharactersBehavior" default="0">
- Sets the clipping behavior when [member visible_characters] or [member percent_visible] is set. See [enum VisibleCharactersBehavior] for more info.
+ <member name="visible_characters_behavior" type="int" setter="set_visible_characters_behavior" getter="get_visible_characters_behavior" enum="TextServer.VisibleCharactersBehavior" default="0">
+ Sets the clipping behavior when [member visible_characters] or [member percent_visible] is set. See [enum TextServer.VisibleCharactersBehavior] for more info.
</member>
</members>
- <constants>
- <constant name="AUTOWRAP_OFF" value="0" enum="AutowrapMode">
- Autowrap is disabled.
- </constant>
- <constant name="AUTOWRAP_ARBITRARY" value="1" enum="AutowrapMode">
- Wraps the text inside the node's bounding rectangle by allowing to break lines at arbitrary positions, which is useful when very limited space is available.
- </constant>
- <constant name="AUTOWRAP_WORD" value="2" enum="AutowrapMode">
- Wraps the text inside the node's bounding rectangle by soft-breaking between words.
- </constant>
- <constant name="AUTOWRAP_WORD_SMART" value="3" enum="AutowrapMode">
- Behaves similarly to [constant AUTOWRAP_WORD], but force-breaks a word if that single word does not fit in one line.
- </constant>
- <constant name="OVERRUN_NO_TRIMMING" value="0" enum="OverrunBehavior">
- No text trimming is performed.
- </constant>
- <constant name="OVERRUN_TRIM_CHAR" value="1" enum="OverrunBehavior">
- Trims the text per character.
- </constant>
- <constant name="OVERRUN_TRIM_WORD" value="2" enum="OverrunBehavior">
- Trims the text per word.
- </constant>
- <constant name="OVERRUN_TRIM_ELLIPSIS" value="3" enum="OverrunBehavior">
- Trims the text per character and adds an ellipsis to indicate that parts are hidden.
- </constant>
- <constant name="OVERRUN_TRIM_WORD_ELLIPSIS" value="4" enum="OverrunBehavior">
- Trims the text per word and adds an ellipsis to indicate that parts are hidden.
- </constant>
- <constant name="VC_CHARS_BEFORE_SHAPING" value="0" enum="VisibleCharactersBehavior">
- Trims text before the shaping. e.g, increasing [member visible_characters] value is visually identical to typing the text.
- </constant>
- <constant name="VC_CHARS_AFTER_SHAPING" value="1" enum="VisibleCharactersBehavior">
- Displays glyphs that are mapped to the first [member visible_characters] characters from the beginning of the text.
- </constant>
- <constant name="VC_GLYPHS_AUTO" value="2" enum="VisibleCharactersBehavior">
- Displays [member percent_visible] glyphs, starting from the left or from the right, depending on [member Control.layout_direction] value.
- </constant>
- <constant name="VC_GLYPHS_LTR" value="3" enum="VisibleCharactersBehavior">
- Displays [member percent_visible] glyphs, starting from the left.
- </constant>
- <constant name="VC_GLYPHS_RTL" value="4" enum="VisibleCharactersBehavior">
- Displays [member percent_visible] glyphs, starting from the right.
- </constant>
- </constants>
<theme_items>
<theme_item name="font_color" data_type="color" type="Color" default="Color(1, 1, 1, 1)">
Default text [Color] of the [Label].
diff --git a/doc/classes/Label3D.xml b/doc/classes/Label3D.xml
index c4d02e6101..47126575f7 100644
--- a/doc/classes/Label3D.xml
+++ b/doc/classes/Label3D.xml
@@ -59,8 +59,8 @@
<member name="alpha_scissor_threshold" type="float" setter="set_alpha_scissor_threshold" getter="get_alpha_scissor_threshold" default="0.5">
Threshold at which the alpha scissor will discard values.
</member>
- <member name="autowrap_mode" type="int" setter="set_autowrap_mode" getter="get_autowrap_mode" enum="Label3D.AutowrapMode" default="0">
- If set to something other than [constant AUTOWRAP_OFF], the text gets wrapped inside the node's bounding rectangle. If you resize the node, it will change its height automatically to show all the text. To see how each mode behaves, see [enum AutowrapMode].
+ <member name="autowrap_mode" type="int" setter="set_autowrap_mode" getter="get_autowrap_mode" enum="TextServer.AutowrapMode" default="0">
+ If set to something other than [constant TextServer.AUTOWRAP_OFF], the text gets wrapped inside the node's bounding rectangle. If you resize the node, it will change its height automatically to show all the text. To see how each mode behaves, see [enum TextServer.AutowrapMode].
</member>
<member name="billboard" type="int" setter="set_billboard_mode" getter="get_billboard_mode" enum="BaseMaterial3D.BillboardMode" default="0">
The billboard mode to use for the label. See [enum BaseMaterial3D.BillboardMode] for possible values.
@@ -143,18 +143,6 @@
</member>
</members>
<constants>
- <constant name="AUTOWRAP_OFF" value="0" enum="AutowrapMode">
- Autowrap is disabled.
- </constant>
- <constant name="AUTOWRAP_ARBITRARY" value="1" enum="AutowrapMode">
- Wraps the text inside the node's bounding rectangle by allowing to break lines at arbitrary positions, which is useful when very limited space is available.
- </constant>
- <constant name="AUTOWRAP_WORD" value="2" enum="AutowrapMode">
- Wraps the text inside the node's bounding rectangle by soft-breaking between words.
- </constant>
- <constant name="AUTOWRAP_WORD_SMART" value="3" enum="AutowrapMode">
- Behaves similarly to [constant AUTOWRAP_WORD], but force-breaks a word if that single word does not fit in one line.
- </constant>
<constant name="FLAG_SHADED" value="0" enum="DrawFlags">
If set, lights in the environment affect the label.
</constant>
diff --git a/doc/classes/MovieWriter.xml b/doc/classes/MovieWriter.xml
new file mode 100644
index 0000000000..bc702adde6
--- /dev/null
+++ b/doc/classes/MovieWriter.xml
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<class name="MovieWriter" inherits="Object" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
+ <brief_description>
+ Abstract class for non-real-time video recording encoders.
+ </brief_description>
+ <description>
+ Godot can record videos with non-real-time simulation. Like the [code]--fixed-fps[/code] command line argument, this forces the reported [code]delta[/code] in [method Node._process] functions to be identical across frames, regardless of how long it actually took to render the frame. This can be used to record high-quality videos with perfect frame pacing regardless of your hardware's capabilities.
+ Godot has 2 built-in [MovieWriter]s:
+ - AVI container with MJPEG for video and uncompressed audio ([code].avi[/code] file extension). Lossy compression, medium file sizes, fast encoding. The lossy compression quality can be adjusted by changing [member ProjectSettings.editor/movie_writer/mjpeg_quality]. The resulting file can be viewed in most video players, but it must be converted to another format for viewing on the web or by Godot with [VideoStreamPlayer]. MJPEG does not support transparency. AVI output is currently limited to a file of 4 GB in size at most.
+ - PNG image sequence for video and WAV for audio ([code].png[/code] file extension). Lossless compression, large file sizes, slow encoding. Designed to be encoded to a video file with another tool such as [url=https://ffmpeg.org/]FFmpeg[/url] after recording. Transparency is currently not supported, even if the root viewport is set to be transparent.
+ If you need to encode to a different format or pipe a stream through third-party software, you can extend the [MovieWriter] class to create your own movie writers. This should typically be done using GDExtension for performance reasons.
+ [b]Editor usage:[/b] A default movie file path can be specified in [member ProjectSettings.editor/movie_writer/movie_file]. Alternatively, for running single scenes, a [code]movie_path[/code] metadata can be added to the root node, specifying the path to a movie file that will be used when recording that scene. Once a path is set, click the video reel icon in the top-right corner of the editor to enable Movie Maker mode, then run any scene as usual. The engine will start recording as soon as the splash screen is finished, and it will only stop recording when the engine quits. Click the video reel icon again to disable Movie Maker mode. Note that toggling Movie Maker mode does not affect project instances that are already running.
+ [b]Note:[/b] MovieWriter is available for use in both the editor and exported projects, but it is [i]not[/i] designed for use by end users to record videos while playing. Players wishing to record gameplay videos should install tools such as [url=https://obsproject.com/]OBS Studio[/url] or [url=https://www.maartenbaert.be/simplescreenrecorder/]SimpleScreenRecorder[/url] instead.
+ </description>
+ <tutorials>
+ </tutorials>
+ <methods>
+ <method name="_get_audio_mix_rate" qualifiers="virtual const">
+ <return type="int" />
+ <description>
+ Called when the audio sample rate used for recording the audio is requested by the engine. The value returned must be specified in Hz. Defaults to 48000 Hz if [method _get_audio_mix_rate] is not overridden.
+ </description>
+ </method>
+ <method name="_get_audio_speaker_mode" qualifiers="virtual const">
+ <return type="int" enum="AudioServer.SpeakerMode" />
+ <description>
+ Called when the audio speaker mode used for recording the audio is requested by the engine. This can affect the number of output channels in the resulting audio file/stream. Defaults to [constant AudioServer.SPEAKER_MODE_STEREO] if [method _get_audio_speaker_mode] is not overridden.
+ </description>
+ </method>
+ <method name="_handles_file" qualifiers="virtual const">
+ <return type="bool" />
+ <argument index="0" name="path" type="String" />
+ <description>
+ Called when the engine determines whether this [MovieWriter] is able to handle the file at [code]path[/code]. Must return [code]true[/code] if this [MovieWriter] is able to handle the given file path, [code]false[/code] otherwise. Typically, [method _handles_file] is overridden as follows to allow the user to record a file at any path with a given file extension:
+ [codeblock]
+ func _handles_file(path):
+ # Allows specifying an output file with a `.mkv` file extension (case-insensitive),
+ # either in the Project Settings or with the `--write-movie &lt;path&gt;` command line argument.
+ return path.get_extension().to_lower() == "mkv"
+ [/codeblock]
+ </description>
+ </method>
+ <method name="_write_begin" qualifiers="virtual">
+ <return type="int" enum="Error" />
+ <argument index="0" name="movie_size" type="Vector2i" />
+ <argument index="1" name="fps" type="int" />
+ <argument index="2" name="base_path" type="String" />
+ <description>
+ Called once before the engine starts writing video and audio data. [code]movie_size[/code] is the width and height of the video to save. [code]fps[/code] is the number of frames per second specified in the project settings or using the [code]--fixed-fps &lt;fps&gt;[/code] command line argument.
+ </description>
+ </method>
+ <method name="_write_end" qualifiers="virtual">
+ <return type="void" />
+ <description>
+ Called when the engine finishes writing. This occurs when the engine quits by pressing the window manager's close button, or when [method SceneTree.quit] is called.
+ [b]Note:[/b] Pressing [kbd]Ctrl + C[/kbd] on the terminal running the editor/project does [i]not[/i] result in [method _write_end] being called.
+ </description>
+ </method>
+ <method name="_write_frame" qualifiers="virtual">
+ <return type="int" enum="Error" />
+ <argument index="0" name="frame_image" type="Image" />
+ <argument index="1" name="audio_frame_block" type="const void*" />
+ <description>
+ Called at the end of every rendered frame. The [code]frame_image[/code] and [code]audio_frame_block[/code] function arguments should be written to.
+ </description>
+ </method>
+ <method name="add_writer" qualifiers="static">
+ <return type="void" />
+ <argument index="0" name="writer" type="MovieWriter" />
+ <description>
+ Adds a writer to be usable by the engine. The supported file extensions can be set by overridding [method _handles_file].
+ [b]Note:[/b] [method add_writer] must be called early enough in the engine initialization to work, as movie writing is designed to start at the same time as the rest of the engine.
+ </description>
+ </method>
+ </methods>
+</class>
diff --git a/doc/classes/NavigationAgent2D.xml b/doc/classes/NavigationAgent2D.xml
index 0ac9513464..058f1032cb 100644
--- a/doc/classes/NavigationAgent2D.xml
+++ b/doc/classes/NavigationAgent2D.xml
@@ -34,6 +34,13 @@
Returns which index the agent is currently on in the navigation path's [PackedVector2Array].
</description>
</method>
+ <method name="get_navigation_layer_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 navigation_layers] bitmask is enabled, given a [code]layer_number[/code] between 1 and 32.
+ </description>
+ </method>
<method name="get_navigation_map" qualifiers="const">
<return type="RID" />
<description>
@@ -76,6 +83,14 @@
Returns true if the target location is reached. The target location is set using [method set_target_location]. It may not always be possible to reach the target location. It should always be possible to reach the final location though. See [method get_final_location].
</description>
</method>
+ <method name="set_navigation_layer_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 navigation_layers] bitmask, given a [code]layer_number[/code] between 1 and 32.
+ </description>
+ </method>
<method name="set_navigation_map">
<return type="void" />
<argument index="0" name="navigation_map" type="RID" />
@@ -114,14 +129,18 @@
<member name="neighbor_dist" type="float" setter="set_neighbor_dist" getter="get_neighbor_dist" default="500.0">
The distance to search for other agents.
</member>
+ <member name="path_desired_distance" type="float" setter="set_path_desired_distance" getter="get_path_desired_distance" default="1.0">
+ The distance threshold before a path point is considered to be reached. This will allow an agent to not have to hit a path point on the path exactly, but in the area. If this value is set to high the NavigationAgent will skip points on the path which can lead to leaving the navigation mesh. If this value is set to low the NavigationAgent will be stuck in a repath loop cause it will constantly overshoot or undershoot the distance to the next point on each physics frame update.
+ </member>
<member name="path_max_distance" type="float" setter="set_path_max_distance" getter="get_path_max_distance" default="3.0">
The maximum distance the agent is allowed away from the ideal path to the final location. This can happen due to trying to avoid collisions. When the maximum distance is exceeded, it recalculates the ideal path.
</member>
<member name="radius" type="float" setter="set_radius" getter="get_radius" default="10.0">
- The radius of the agent.
+ The radius of the avoidance agent. This is the "body" of the avoidance agent and not the avoidance maneuver starting radius (which is controlled by [member neighbor_dist]).
+ Does not affect normal pathfinding. To change an actor's pathfinding radius bake [NavigationMesh] resources with a different [member NavigationMesh.agent_radius] property and use different navigation maps for each actor size.
</member>
<member name="target_desired_distance" type="float" setter="set_target_desired_distance" getter="get_target_desired_distance" default="1.0">
- The distance threshold before a target is considered to be reached. This will allow an agent to not have to hit a point on the path exactly, but in the area.
+ The distance threshold before the final target point is considered to be reached. This will allow an agent to not have to hit the point of the final target exactly, but only the area. If this value is set to low the NavigationAgent will be stuck in a repath loop cause it will constantly overshoot or undershoot the distance to the final target point on each physics frame update.
</member>
<member name="time_horizon" type="float" setter="set_time_horizon" getter="get_time_horizon" default="20.0">
The minimal amount of time for which this agent's velocities, that are computed with the collision avoidance algorithm, are safe with respect to other agents. The larger the number, the sooner the agent will respond to other agents, but less freedom in choosing its velocities. Must be positive.
diff --git a/doc/classes/NavigationAgent3D.xml b/doc/classes/NavigationAgent3D.xml
index cc45a43ffc..c689ddc345 100644
--- a/doc/classes/NavigationAgent3D.xml
+++ b/doc/classes/NavigationAgent3D.xml
@@ -34,6 +34,13 @@
Returns which index the agent is currently on in the navigation path's [PackedVector3Array].
</description>
</method>
+ <method name="get_navigation_layer_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 navigation_layers] bitmask is enabled, given a [code]layer_number[/code] between 1 and 32.
+ </description>
+ </method>
<method name="get_navigation_map" qualifiers="const">
<return type="RID" />
<description>
@@ -76,6 +83,14 @@
Returns true if the target location is reached. The target location is set using [method set_target_location]. It may not always be possible to reach the target location. It should always be possible to reach the final location though. See [method get_final_location].
</description>
</method>
+ <method name="set_navigation_layer_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 navigation_layers] bitmask, given a [code]layer_number[/code] between 1 and 32.
+ </description>
+ </method>
<method name="set_navigation_map">
<return type="void" />
<argument index="0" name="navigation_map" type="RID" />
@@ -120,14 +135,18 @@
<member name="neighbor_dist" type="float" setter="set_neighbor_dist" getter="get_neighbor_dist" default="50.0">
The distance to search for other agents.
</member>
+ <member name="path_desired_distance" type="float" setter="set_path_desired_distance" getter="get_path_desired_distance" default="1.0">
+ The distance threshold before a path point is considered to be reached. This will allow an agent to not have to hit a path point on the path exactly, but in the area. If this value is set to high the NavigationAgent will skip points on the path which can lead to leaving the navigation mesh. If this value is set to low the NavigationAgent will be stuck in a repath loop cause it will constantly overshoot or undershoot the distance to the next point on each physics frame update.
+ </member>
<member name="path_max_distance" type="float" setter="set_path_max_distance" getter="get_path_max_distance" default="3.0">
The maximum distance the agent is allowed away from the ideal path to the final location. This can happen due to trying to avoid collisions. When the maximum distance is exceeded, it recalculates the ideal path.
</member>
<member name="radius" type="float" setter="set_radius" getter="get_radius" default="1.0">
- The radius of the agent.
+ The radius of the avoidance agent. This is the "body" of the avoidance agent and not the avoidance maneuver starting radius (which is controlled by [member neighbor_dist]).
+ Does not affect normal pathfinding. To change an actor's pathfinding radius bake [NavigationMesh] resources with a different [member NavigationMesh.agent_radius] property and use different navigation maps for each actor size.
</member>
<member name="target_desired_distance" type="float" setter="set_target_desired_distance" getter="get_target_desired_distance" default="1.0">
- The distance threshold before a target is considered to be reached. This will allow an agent to not have to hit a point on the path exactly, but in the area.
+ The distance threshold before the final target point is considered to be reached. This will allow an agent to not have to hit the point of the final target exactly, but only the area. If this value is set to low the NavigationAgent will be stuck in a repath loop cause it will constantly overshoot or undershoot the distance to the final target point on each physics frame update.
</member>
<member name="time_horizon" type="float" setter="set_time_horizon" getter="get_time_horizon" default="5.0">
The minimal amount of time for which this agent's velocities, that are computed with the collision avoidance algorithm, are safe with respect to other agents. The larger the number, the sooner the agent will respond to other agents, but less freedom in choosing its velocities. Must be positive.
diff --git a/doc/classes/NavigationMesh.xml b/doc/classes/NavigationMesh.xml
index 3c18b56658..966f964b12 100644
--- a/doc/classes/NavigationMesh.xml
+++ b/doc/classes/NavigationMesh.xml
@@ -107,6 +107,12 @@
The maximum allowed length for contour edges along the border of the mesh.
[b]Note:[/b] While baking, this value will be rounded up to the nearest multiple of [member cell_size].
</member>
+ <member name="filter_baking_aabb" type="AABB" setter="set_filter_baking_aabb" getter="get_filter_baking_aabb" default="AABB(0, 0, 0, 0, 0, 0)">
+ If the baking [AABB] has a volume the navigation mesh baking will be restricted to its enclosing area.
+ </member>
+ <member name="filter_baking_aabb_offset" type="Vector3" setter="set_filter_baking_aabb_offset" getter="get_filter_baking_aabb_offset" default="Vector3(0, 0, 0)">
+ The position offset applied to the [member filter_baking_aabb] [AABB].
+ </member>
<member name="filter_ledge_spans" type="bool" setter="set_filter_ledge_spans" getter="get_filter_ledge_spans" default="false">
If [code]true[/code], marks spans that are ledges as non-walkable.
</member>
diff --git a/doc/classes/NavigationMeshGenerator.xml b/doc/classes/NavigationMeshGenerator.xml
index b92183fda0..612ce54d34 100644
--- a/doc/classes/NavigationMeshGenerator.xml
+++ b/doc/classes/NavigationMeshGenerator.xml
@@ -8,6 +8,7 @@
The entire navigation mesh baking is best done in a separate thread as the voxelization, collision tests and mesh optimization steps involved are very performance and time hungry operations.
Navigation mesh baking happens in multiple steps and the result depends on 3D source geometry and properties of the [NavigationMesh] resource. In the first step, starting from a root node and depending on [NavigationMesh] properties all valid 3D source geometry nodes are collected from the [SceneTree]. Second, all collected nodes are parsed for their relevant 3D geometry data and a combined 3D mesh is build. Due to the many different types of parsable objects, from normal [MeshInstance3D]s to [CSGShape3D]s or various [CollisionObject3D]s, some operations to collect geometry data can trigger [RenderingServer] and [PhysicsServer3D] synchronizations. Server synchronization can have a negative effect on baking time or framerate as it often involves [Mutex] locking for thread security. Many parsable objects and the continuous synchronization with other threaded Servers can increase the baking time significantly. On the other hand only a few but very large and complex objects will take some time to prepare for the Servers which can noticeably stall the next frame render. As a general rule the total amount of parsable objects and their individual size and complexity should be balanced to avoid framerate issues or very long baking times. The combined mesh is then passed to the Recast Navigation Object to test the source geometry for walkable terrain suitable to [NavigationMesh] agent properties by creating a voxel world around the meshes bounding area.
The finalized navigation mesh is then returned and stored inside the [NavigationMesh] for use as a resource inside [NavigationRegion3D] nodes.
+ [b]Note:[/b] Using meshes to not only define walkable surfaces but also obstruct navigation baking does not always work. The navigation baking has no concept of what is a geometry "inside" when dealing with mesh source geometry and this is intentional. Depending on current baking parameters, as soon as the obstructing mesh is large enough to fit a navigation mesh area inside, the baking will generate navigation mesh areas that are inside the obstructing source geometry mesh.
</description>
<tutorials>
</tutorials>
diff --git a/doc/classes/NavigationRegion2D.xml b/doc/classes/NavigationRegion2D.xml
index 62e64f2a3c..c48ca18e9e 100644
--- a/doc/classes/NavigationRegion2D.xml
+++ b/doc/classes/NavigationRegion2D.xml
@@ -14,19 +14,34 @@
<tutorials>
</tutorials>
<methods>
+ <method name="get_navigation_layer_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 navigation_layers] bitmask is enabled, given a [code]layer_number[/code] between 1 and 32.
+ </description>
+ </method>
<method name="get_region_rid" qualifiers="const">
<return type="RID" />
<description>
Returns the [RID] of this region on the [NavigationServer2D]. Combined with [method NavigationServer2D.map_get_closest_point_owner] can be used to identify the [NavigationRegion2D] closest to a point on the merged navigation map.
</description>
</method>
+ <method name="set_navigation_layer_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 navigation_layers] bitmask, given a [code]layer_number[/code] between 1 and 32.
+ </description>
+ </method>
</methods>
<members>
<member name="enabled" type="bool" setter="set_enabled" getter="is_enabled" default="true">
Determines if the [NavigationRegion2D] is enabled or disabled.
</member>
<member name="enter_cost" type="float" setter="set_enter_cost" getter="get_enter_cost" default="0.0">
- When pathfinding enters this regions navmesh from another regions navmesh the [code]enter_cost[/code] value is added to the path distance for determining the shortest path.
+ When pathfinding enters this region's navmesh from another regions navmesh the [code]enter_cost[/code] value is added to the path distance for determining the shortest path.
</member>
<member name="navigation_layers" type="int" setter="set_navigation_layers" getter="get_navigation_layers" default="1">
A bitfield determining all navigation layers the region belongs to. These navigation layers can be checked upon when requesting a path with [method NavigationServer2D.map_get_path].
@@ -35,7 +50,7 @@
The [NavigationPolygon] resource to use.
</member>
<member name="travel_cost" type="float" setter="set_travel_cost" getter="get_travel_cost" default="1.0">
- When pathfinding moves inside this regions navmesh the traveled distances are multiplied with [code]travel_cost[/code] for determining the shortest path.
+ When pathfinding moves inside this region's navmesh the traveled distances are multiplied with [code]travel_cost[/code] for determining the shortest path.
</member>
</members>
</class>
diff --git a/doc/classes/NavigationRegion3D.xml b/doc/classes/NavigationRegion3D.xml
index 3af7fe5c97..9f4feee072 100644
--- a/doc/classes/NavigationRegion3D.xml
+++ b/doc/classes/NavigationRegion3D.xml
@@ -21,19 +21,34 @@
Bakes the [NavigationMesh]. If [code]on_thread[/code] is set to [code]true[/code] (default), the baking is done on a separate thread. Baking on separate thread is useful because navigation baking is not a cheap operation. When it is completed, it automatically sets the new [NavigationMesh]. Please note that baking on separate thread may be very slow if geometry is parsed from meshes as async access to each mesh involves heavy synchronization. Also, please note that baking on a separate thread is automatically disabled on operating systems that cannot use threads (such as HTML5 with threads disabled).
</description>
</method>
+ <method name="get_navigation_layer_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 navigation_layers] bitmask is enabled, given a [code]layer_number[/code] between 1 and 32.
+ </description>
+ </method>
<method name="get_region_rid" qualifiers="const">
<return type="RID" />
<description>
Returns the [RID] of this region on the [NavigationServer3D]. Combined with [method NavigationServer3D.map_get_closest_point_owner] can be used to identify the [NavigationRegion3D] closest to a point on the merged navigation map.
</description>
</method>
+ <method name="set_navigation_layer_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 navigation_layers] bitmask, given a [code]layer_number[/code] between 1 and 32.
+ </description>
+ </method>
</methods>
<members>
<member name="enabled" type="bool" setter="set_enabled" getter="is_enabled" default="true">
Determines if the [NavigationRegion3D] is enabled or disabled.
</member>
<member name="enter_cost" type="float" setter="set_enter_cost" getter="get_enter_cost" default="0.0">
- When pathfinding enters this regions navmesh from another regions navmesh the [code]enter_cost[/code] value is added to the path distance for determining the shortest path.
+ When pathfinding enters this region's navmesh from another regions navmesh the [code]enter_cost[/code] value is added to the path distance for determining the shortest path.
</member>
<member name="navigation_layers" type="int" setter="set_navigation_layers" getter="get_navigation_layers" default="1">
A bitfield determining all navigation layers the region belongs to. These navigation layers can be checked upon when requesting a path with [method NavigationServer3D.map_get_path].
@@ -42,7 +57,7 @@
The [NavigationMesh] resource to use.
</member>
<member name="travel_cost" type="float" setter="set_travel_cost" getter="get_travel_cost" default="1.0">
- When pathfinding moves inside this regions navmesh the traveled distances are multiplied with [code]travel_cost[/code] for determining the shortest path.
+ When pathfinding moves inside this region's navmesh the traveled distances are multiplied with [code]travel_cost[/code] for determining the shortest path.
</member>
</members>
<signals>
diff --git a/doc/classes/NavigationServer2D.xml b/doc/classes/NavigationServer2D.xml
index 220c12ce7f..36379d2531 100644
--- a/doc/classes/NavigationServer2D.xml
+++ b/doc/classes/NavigationServer2D.xml
@@ -127,12 +127,28 @@
Destroys the given RID.
</description>
</method>
+ <method name="get_maps" qualifiers="const">
+ <return type="Array" />
+ <description>
+ Returns all created navigation map [RID]s on the NavigationServer. This returns both 2D and 3D created navigation maps as there is technically no distinction between them.
+ </description>
+ </method>
<method name="map_create" qualifiers="const">
<return type="RID" />
<description>
Create a new map.
</description>
</method>
+ <method name="map_force_update">
+ <return type="void" />
+ <argument index="0" name="map" type="RID" />
+ <description>
+ This function immediately forces synchronization of the specified navigation [code]map[/code] [RID]. By default navigation maps are only synchronized at the end of each physics frame. This function can be used to immediately (re)calculate all the navigation meshes and region connections of the navigation map. This makes it possible to query a navigation path for a changed map immediately and in the same frame (multiple times if needed).
+ Due to technical restrictions the current NavigationServer command queue will be flushed. This means all already queued update commands for this physics frame will be executed, even those intended for other maps, regions and agents not part of the specified map. The expensive computation of the navigation meshes and region connections of a map will only be done for the specified map. Other maps will receive the normal synchronization at the end of the physics frame. Should the specified map receive changes after the forced update it will update again as well when the other maps receive their update.
+ Avoidance processing and dispatch of the [code]safe_velocity[/code] signals is untouched by this function and continues to happen for all maps and agents at the end of the physics frame.
+ [b]Note:[/b] With great power comes great responsibility. This function should only be used by users that really know what they are doing and have a good reason for it. Forcing an immediate update of a navigation map requires locking the NavigationServer and flushing the entire NavigationServer command queue. Not only can this severely impact the performance of a game but it can also introduce bugs if used inappropriately without much foresight.
+ </description>
+ </method>
<method name="map_get_agents" qualifiers="const">
<return type="Array" />
<argument index="0" name="map" type="RID" />
@@ -276,6 +292,16 @@
Returns the [code]travel_cost[/code] of this [code]region[/code].
</description>
</method>
+ <method name="region_owns_point" qualifiers="const">
+ <return type="bool" />
+ <argument index="0" name="region" type="RID" />
+ <argument index="1" name="point" type="Vector2" />
+ <description>
+ Returns [code]true[/code] if the provided [code]point[/code] in world space is currently owned by the provided navigation [code]region[/code]. Owned in this context means that one of the region's navigation mesh polygon faces has a possible position at the closest distance to this point compared to all other navigation meshes from other navigation regions that are also registered on the navigation map of the provided region.
+ If multiple navigation meshes have positions at equal distance the navigation region whose polygons are processed first wins the ownership. Polygons are processed in the same order that navigation regions were registered on the NavigationServer.
+ [b]Note:[/b] If navigation meshes from different navigation regions overlap (which should be avoided in general) the result might not be what is expected.
+ </description>
+ </method>
<method name="region_set_enter_cost" qualifiers="const">
<return type="void" />
<argument index="0" name="region" type="RID" />
diff --git a/doc/classes/NavigationServer3D.xml b/doc/classes/NavigationServer3D.xml
index d2eef49cfd..5185b353bc 100644
--- a/doc/classes/NavigationServer3D.xml
+++ b/doc/classes/NavigationServer3D.xml
@@ -127,12 +127,28 @@
Destroys the given RID.
</description>
</method>
+ <method name="get_maps" qualifiers="const">
+ <return type="Array" />
+ <description>
+ Returns all created navigation map [RID]s on the NavigationServer. This returns both 2D and 3D created navigation maps as there is technically no distinction between them.
+ </description>
+ </method>
<method name="map_create" qualifiers="const">
<return type="RID" />
<description>
Create a new map.
</description>
</method>
+ <method name="map_force_update">
+ <return type="void" />
+ <argument index="0" name="map" type="RID" />
+ <description>
+ This function immediately forces synchronization of the specified navigation [code]map[/code] [RID]. By default navigation maps are only synchronized at the end of each physics frame. This function can be used to immediately (re)calculate all the navigation meshes and region connections of the navigation map. This makes it possible to query a navigation path for a changed map immediately and in the same frame (multiple times if needed).
+ Due to technical restrictions the current NavigationServer command queue will be flushed. This means all already queued update commands for this physics frame will be executed, even those intended for other maps, regions and agents not part of the specified map. The expensive computation of the navigation meshes and region connections of a map will only be done for the specified map. Other maps will receive the normal synchronization at the end of the physics frame. Should the specified map receive changes after the forced update it will update again as well when the other maps receive their update.
+ Avoidance processing and dispatch of the [code]safe_velocity[/code] signals is untouched by this function and continues to happen for all maps and agents at the end of the physics frame.
+ [b]Note:[/b] With great power comes great responsibility. This function should only be used by users that really know what they are doing and have a good reason for it. Forcing an immediate update of a navigation map requires locking the NavigationServer and flushing the entire NavigationServer command queue. Not only can this severely impact the performance of a game but it can also introduce bugs if used inappropriately without much foresight.
+ </description>
+ </method>
<method name="map_get_agents" qualifiers="const">
<return type="Array" />
<argument index="0" name="map" type="RID" />
@@ -326,6 +342,16 @@
Returns the [code]travel_cost[/code] of this [code]region[/code].
</description>
</method>
+ <method name="region_owns_point" qualifiers="const">
+ <return type="bool" />
+ <argument index="0" name="region" type="RID" />
+ <argument index="1" name="point" type="Vector3" />
+ <description>
+ Returns [code]true[/code] if the provided [code]point[/code] in world space is currently owned by the provided navigation [code]region[/code]. Owned in this context means that one of the region's navigation mesh polygon faces has a possible position at the closest distance to this point compared to all other navigation meshes from other navigation regions that are also registered on the navigation map of the provided region.
+ If multiple navigation meshes have positions at equal distance the navigation region whose polygons are processed first wins the ownership. Polygons are processed in the same order that navigation regions were registered on the NavigationServer.
+ [b]Note:[/b] If navigation meshes from different navigation regions overlap (which should be avoided in general) the result might not be what is expected.
+ </description>
+ </method>
<method name="region_set_enter_cost" qualifiers="const">
<return type="void" />
<argument index="0" name="region" type="RID" />
diff --git a/doc/classes/Node.xml b/doc/classes/Node.xml
index 966e24c537..b7591ed4f4 100644
--- a/doc/classes/Node.xml
+++ b/doc/classes/Node.xml
@@ -778,12 +778,14 @@
<argument index="0" name="node" type="Node" />
<description>
Emitted when a child node enters the scene tree, either because it entered on its own or because this node entered with it.
+ This signal is emitted [i]after[/i] the child node's own [constant NOTIFICATION_ENTER_TREE] and [signal tree_entered].
</description>
</signal>
- <signal name="child_exited_tree">
+ <signal name="child_exiting_tree">
<argument index="0" name="node" type="Node" />
<description>
- Emitted when a child node exits the scene tree, either because it exited on its own or because this node exited.
+ Emitted when a child node is about to exit the scene tree, either because it is being removed or freed directly, or because this node is exiting the tree.
+ When this signal is received, the child [code]node[/code] is still in the tree and valid. This signal is emitted [i]after[/i] the child node's own [signal tree_exiting] and [constant NOTIFICATION_EXIT_TREE].
</description>
</signal>
<signal name="ready">
@@ -799,6 +801,7 @@
<signal name="tree_entered">
<description>
Emitted when the node enters the tree.
+ This signal is emitted [i]after[/i] the related [constant NOTIFICATION_ENTER_TREE] notification.
</description>
</signal>
<signal name="tree_exited">
@@ -809,15 +812,18 @@
<signal name="tree_exiting">
<description>
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).
+ This signal is emitted [i]before[/i] the related [constant NOTIFICATION_EXIT_TREE] notification.
</description>
</signal>
</signals>
<constants>
<constant name="NOTIFICATION_ENTER_TREE" value="10">
Notification received when the node enters a [SceneTree].
+ This notification is emitted [i]before[/i] the related [signal tree_entered].
</constant>
<constant name="NOTIFICATION_EXIT_TREE" value="11">
Notification received when the node is about to exit a [SceneTree].
+ This notification is emitted [i]after[/i] the related [signal tree_exiting].
</constant>
<constant name="NOTIFICATION_MOVED_IN_PARENT" value="12">
Notification received when the node is moved in the parent.
diff --git a/doc/classes/Node2D.xml b/doc/classes/Node2D.xml
index e65c666900..2238be4ece 100644
--- a/doc/classes/Node2D.xml
+++ b/doc/classes/Node2D.xml
@@ -116,6 +116,7 @@
</member>
<member name="scale" type="Vector2" setter="set_scale" getter="get_scale" default="Vector2(1, 1)">
The node's scale. Unscaled value: [code](1, 1)[/code].
+ [b]Note:[/b] Negative X scales in 2D are not decomposable from the transformation matrix. Due to the way scale is represented with transformation matrices in Godot, negative scales on the X axis will be changed to negative scales on the Y axis and a rotation of 180 degrees when decomposed.
</member>
<member name="skew" type="float" setter="set_skew" getter="get_skew" default="0.0">
</member>
diff --git a/doc/classes/Node3D.xml b/doc/classes/Node3D.xml
index 4444416a06..ac434af4fa 100644
--- a/doc/classes/Node3D.xml
+++ b/doc/classes/Node3D.xml
@@ -302,6 +302,7 @@
</member>
<member name="scale" type="Vector3" setter="set_scale" getter="get_scale" default="Vector3(1, 1, 1)">
Scale part of the local transformation.
+ [b]Note:[/b] Mixed negative scales in 3D are not decomposable from the transformation matrix. Due to the way scale is represented with transformation matrices in Godot, the scale values will either be all positive or all negative.
</member>
<member name="top_level" type="bool" setter="set_as_top_level" getter="is_set_as_top_level" default="false">
If [code]true[/code], the node will not inherit its transformations from its parent. Node transformations are only in global space.
diff --git a/doc/classes/ORMMaterial3D.xml b/doc/classes/ORMMaterial3D.xml
index 69d238ceff..656594a3c3 100644
--- a/doc/classes/ORMMaterial3D.xml
+++ b/doc/classes/ORMMaterial3D.xml
@@ -1,9 +1,12 @@
<?xml version="1.0" encoding="UTF-8" ?>
<class name="ORMMaterial3D" inherits="BaseMaterial3D" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
<brief_description>
+ Physically based rendering (PBR) material that can be applied to 3D objects, can use an ORM texture.
</brief_description>
<description>
+ ORMMaterial3D's properties are inherited from [BaseMaterial3D]. Unlike [StandardMaterial3D], ORMMaterial3D uses a single texture for ambient occlusion, roughness and metallic maps, known as an ORM texture.
</description>
<tutorials>
+ <link title="Standard Material 3D and ORM Material 3D">$DOCS_URL/tutorials/3d/standard_material_3d.html</link>
</tutorials>
</class>
diff --git a/doc/classes/OS.xml b/doc/classes/OS.xml
index e6d5ea61da..aaf08dec2f 100644
--- a/doc/classes/OS.xml
+++ b/doc/classes/OS.xml
@@ -175,6 +175,10 @@
if argument.find("=") &gt; -1:
var key_value = argument.split("=")
arguments[key_value[0].lstrip("--")] = key_value[1]
+ else:
+ # Options without an argument will be present in the dictionary,
+ # with the value set to an empty string.
+ arguments[argument.lstrip("--")] = ""
[/gdscript]
[csharp]
var arguments = new Godot.Collections.Dictionary();
@@ -185,6 +189,12 @@
string[] keyValue = argument.Split("=");
arguments[keyValue[0].LStrip("--")] = keyValue[1];
}
+ else
+ {
+ // Options without an argument will be present in the dictionary,
+ // with the value set to an empty string.
+ arguments[keyValue[0].LStrip("--")] = "";
+ }
}
[/csharp]
[/codeblocks]
diff --git a/doc/classes/PopupMenu.xml b/doc/classes/PopupMenu.xml
index eb2b681071..73413b379e 100644
--- a/doc/classes/PopupMenu.xml
+++ b/doc/classes/PopupMenu.xml
@@ -8,6 +8,7 @@
The size of a [PopupMenu] can be limited by using [member Window.max_size]. If the height of the list of items is larger than the maximum height of the [PopupMenu], a [ScrollContainer] within the popup will allow the user to scroll the contents.
If no maximum size is set, or if it is set to 0, the [PopupMenu] height will be limited by its parent rect.
All [code]set_*[/code] methods allow negative item index, which makes the item accessed from the last one.
+ [b]Incremental search:[/b] Like [ItemList] and [Tree], [PopupMenu] supports searching within the list while the control is focused. Press a key that matches the first letter of an item's name to select the first item starting with the given letter. After that point, there are two ways to perform incremental search: 1) Press the same key again before the timeout duration to select the next item starting with the same letter. 2) Press letter keys that match the rest of the word before the timeout duration to match to select the item in question directly. Both of these actions will be reset to the beginning of the list if the timeout duration has passed since the last keystroke was registered. You can adjust the timeout duration by changing [member ProjectSettings.gui/timers/incremental_search_max_interval_msec].
</description>
<tutorials>
</tutorials>
diff --git a/doc/classes/ProjectSettings.xml b/doc/classes/ProjectSettings.xml
index 2e46e61ccf..553005c4c4 100644
--- a/doc/classes/ProjectSettings.xml
+++ b/doc/classes/ProjectSettings.xml
@@ -307,6 +307,12 @@
<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.
</member>
+ <member name="audio/general/2d_panning_strength" type="float" setter="" getter="" default="1.0">
+ The base strength of the panning effect for all AudioStreamPlayer2D nodes. The panning strength can be further scaled on each Node using [member AudioStreamPlayer2D.panning_strength].
+ </member>
+ <member name="audio/general/3d_panning_strength" type="float" setter="" getter="" default="1.0">
+ The base strength of the panning effect for all AudioStreamPlayer3D nodes. The panning strength can be further scaled on each Node using [member AudioStreamPlayer3D.panning_strength].
+ </member>
<member name="audio/video/video_delay_compensation_ms" type="int" setter="" getter="" default="0">
Setting to hardcode audio delay when playing video. Best to leave this untouched unless you know what you are doing.
</member>
@@ -441,8 +447,11 @@
<member name="debug/gdscript/warnings/void_assignment" type="int" setter="" getter="" default="1">
If [code]enabled[/code], prints a warning or an error when assigning the result of a function that returns [code]void[/code] to a variable.
</member>
- <member name="debug/settings/crash_handler/message" type="String" setter="" getter="" default="&quot;Please include this when reporting the bug on https://github.com/godotengine/godot/issues&quot;">
- Message to be displayed before the backtrace when the engine crashes.
+ <member name="debug/settings/crash_handler/message" type="String" setter="" getter="" default="&quot;Please include this when reporting the bug to the project developer.&quot;">
+ Message to be displayed before the backtrace when the engine crashes. By default, this message is only used in exported projects due to the editor-only override applied to this setting.
+ </member>
+ <member name="debug/settings/crash_handler/message.editor" type="String" setter="" getter="" default="&quot;Please include this when reporting the bug on: https://github.com/godotengine/godot/issues&quot;">
+ Editor-only override for [member debug/settings/crash_handler/message]. Does not affect exported projects in debug or release mode.
</member>
<member name="debug/settings/fps/force_fps" type="int" setter="" getter="" default="0">
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.
@@ -550,6 +559,32 @@
See [enum DisplayServer.VSyncMode] for possible values and how they affect the behavior of your application.
Depending on the platform and used renderer, the engine will fall back to [code]Enabled[/code], if the desired mode is not supported.
</member>
+ <member name="editor/movie_writer/disable_vsync" type="bool" setter="" getter="" default="false">
+ If [code]true[/code], requests V-Sync to be disabled when writing a movie (similar to setting [member display/window/vsync/vsync_mode] to [b]Disabled[/b]). This can speed up video writing if the hardware is fast enough to render, encode and save the video at a framerate higher than the monitor's refresh rate.
+ [b]Note:[/b] [member editor/movie_writer/disable_vsync] has no effect if the operating system or graphics driver forces V-Sync with no way for applications to disable it.
+ </member>
+ <member name="editor/movie_writer/fps" type="int" setter="" getter="" default="60">
+ The number of frames per second to record in the video when writing a movie. Simulation speed will adjust to always match the specified framerate, which means the engine will appear to run slower at higher [member editor/movie_writer/fps] values. Certain FPS values will require you to adjust [member editor/movie_writer/mix_rate] to prevent audio from desynchronizing over time.
+ This can be specified manually on the command line using the [code]--fixed-fps &lt;fps&gt;[/code] command line argument.
+ </member>
+ <member name="editor/movie_writer/mix_rate" type="int" setter="" getter="" default="48000">
+ The audio mix rate to use in the recorded audio when writing a movie (in Hz). This can be different from [member audio/driver/mix_rate], but this value must be divisible by [member editor/movie_writer/fps] to prevent audio from desynchronizing over time.
+ </member>
+ <member name="editor/movie_writer/mjpeg_quality" type="float" setter="" getter="" default="0.75">
+ The JPEG quality to use when writing a video to an AVI file, between [code]0.01[/code] and [code]1.0[/code] (inclusive). Higher [code]quality[/code] values result in better-looking output at the cost of larger file sizes. Recommended [code]quality[/code] values are between [code]0.75[/code] and [code]0.9[/code]. Even at quality [code]1.0[/code], JPEG compression remains lossy.
+ [b]Note:[/b] This does not affect the audio quality or writing PNG image sequences.
+ </member>
+ <member name="editor/movie_writer/movie_file" type="String" setter="" getter="" default="&quot;&quot;">
+ The output path for the movie. The file extension determines the [MovieWriter] that will be used.
+ Godot has 2 built-in [MovieWriter]s:
+ - AVI container with MJPEG for video and uncompressed audio ([code].avi[/code] file extension). Lossy compression, medium file sizes, fast encoding. The lossy compression quality can be adjusted by changing [member ProjectSettings.editor/movie_writer/mjpeg_quality]. The resulting file can be viewed in most video players, but it must be converted to another format for viewing on the web or by Godot with [VideoStreamPlayer]. MJPEG does not support transparency. AVI output is currently limited to a file of 4 GB in size at most.
+ - PNG image sequence for video and WAV for audio ([code].png[/code] file extension). Lossless compression, large file sizes, slow encoding. Designed to be encoded to a video file with another tool such as [url=https://ffmpeg.org/]FFmpeg[/url] after recording. Transparency is currently not supported, even if the root viewport is set to be transparent.
+ If you need to encode to a different format or pipe a stream through third-party software, you can extend this [MovieWriter] class to create your own movie writers.
+ When using PNG output, the frame number will be appended at the end of the file name. It starts from 0 and is padded with 8 digits to ensure correct sorting and easier processing. For example, if the output path is [code]/tmp/hello.png[/code], the first two frames will be [code]/tmp/hello00000000.png[/code] and [code]/tmp/hello00000001.png[/code]. The audio will be saved at [code]/tmp/hello.wav[/code].
+ </member>
+ <member name="editor/movie_writer/speaker_mode" type="int" setter="" getter="" default="0">
+ The speaker mode to use in the recorded audio when writing a movie. See [enum AudioServer.SpeakerMode] for possible values.
+ </member>
<member name="editor/node_naming/name_casing" type="int" setter="" getter="" default="0">
When creating node names automatically, set the type of casing in this project. This is mostly an editor setting.
</member>
diff --git a/doc/classes/RichTextLabel.xml b/doc/classes/RichTextLabel.xml
index c5cc343fac..1294e5b58a 100644
--- a/doc/classes/RichTextLabel.xml
+++ b/doc/classes/RichTextLabel.xml
@@ -454,8 +454,8 @@
</method>
</methods>
<members>
- <member name="autowrap_mode" type="int" setter="set_autowrap_mode" getter="get_autowrap_mode" enum="RichTextLabel.AutowrapMode" default="3">
- If set to something other than [constant AUTOWRAP_OFF], the text gets wrapped inside the node's bounding rectangle. To see how each mode behaves, see [enum AutowrapMode].
+ <member name="autowrap_mode" type="int" setter="set_autowrap_mode" getter="get_autowrap_mode" enum="TextServer.AutowrapMode" default="3">
+ If set to something other than [constant TextServer.AUTOWRAP_OFF], the text gets wrapped inside the node's bounding rectangle. To see how each mode behaves, see [enum TextServer.AutowrapMode].
</member>
<member name="bbcode_enabled" type="bool" setter="set_use_bbcode" getter="is_using_bbcode" default="false">
If [code]true[/code], the label uses BBCode formatting.
@@ -530,8 +530,8 @@
The restricted number of characters to display in the label. If [code]-1[/code], all characters will be displayed.
[b]Note:[/b] Setting this property updates [member percent_visible] based on current [method get_total_character_count].
</member>
- <member name="visible_characters_behavior" type="int" setter="set_visible_characters_behavior" getter="get_visible_characters_behavior" enum="RichTextLabel.VisibleCharactersBehavior" default="0">
- Sets the clipping behavior when [member visible_characters] or [member percent_visible] is set. See [enum VisibleCharactersBehavior] for more info.
+ <member name="visible_characters_behavior" type="int" setter="set_visible_characters_behavior" getter="get_visible_characters_behavior" enum="TextServer.VisibleCharactersBehavior" default="0">
+ Sets the clipping behavior when [member visible_characters] or [member percent_visible] is set. See [enum TextServer.VisibleCharactersBehavior] for more info.
</member>
</members>
<signals>
@@ -560,18 +560,6 @@
</signal>
</signals>
<constants>
- <constant name="AUTOWRAP_OFF" value="0" enum="AutowrapMode">
- Autowrap is disabled.
- </constant>
- <constant name="AUTOWRAP_ARBITRARY" value="1" enum="AutowrapMode">
- Wraps the text inside the node's bounding rectangle by allowing to break lines at arbitrary positions, which is useful when very limited space is available.
- </constant>
- <constant name="AUTOWRAP_WORD" value="2" enum="AutowrapMode">
- Wraps the text inside the node's bounding rectangle by soft-breaking between words.
- </constant>
- <constant name="AUTOWRAP_WORD_SMART" value="3" enum="AutowrapMode">
- Behaves similarly to [constant AUTOWRAP_WORD], but force-breaks a word if that single word does not fit in one line.
- </constant>
<constant name="LIST_NUMBERS" value="0" enum="ListType">
Each list item has a number marker.
</constant>
@@ -638,21 +626,6 @@
</constant>
<constant name="ITEM_CUSTOMFX" value="26" enum="ItemType">
</constant>
- <constant name="VC_CHARS_BEFORE_SHAPING" value="0" enum="VisibleCharactersBehavior">
- Trims text before the shaping. e.g, increasing [member visible_characters] value is visually identical to typing the text.
- </constant>
- <constant name="VC_CHARS_AFTER_SHAPING" value="1" enum="VisibleCharactersBehavior">
- Displays glyphs that are mapped to the first [member visible_characters] characters from the beginning of the text.
- </constant>
- <constant name="VC_GLYPHS_AUTO" value="2" enum="VisibleCharactersBehavior">
- Displays [member percent_visible] glyphs, starting from the left or from the right, depending on [member Control.layout_direction] value.
- </constant>
- <constant name="VC_GLYPHS_LTR" value="3" enum="VisibleCharactersBehavior">
- Displays [member percent_visible] glyphs, starting from the left.
- </constant>
- <constant name="VC_GLYPHS_RTL" value="4" enum="VisibleCharactersBehavior">
- Displays [member percent_visible] glyphs, starting from the right.
- </constant>
</constants>
<theme_items>
<theme_item name="default_color" data_type="color" type="Color" default="Color(1, 1, 1, 1)">
diff --git a/doc/classes/ScrollContainer.xml b/doc/classes/ScrollContainer.xml
index 658793c4c0..1bbf5cb91b 100644
--- a/doc/classes/ScrollContainer.xml
+++ b/doc/classes/ScrollContainer.xml
@@ -5,7 +5,7 @@
</brief_description>
<description>
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.minimum_size] of the Control relative to the ScrollContainer.
+ 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.custom_minimum_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).
</description>
<tutorials>
diff --git a/doc/classes/StandardMaterial3D.xml b/doc/classes/StandardMaterial3D.xml
index 2305a9d325..bd6e5cdfa2 100644
--- a/doc/classes/StandardMaterial3D.xml
+++ b/doc/classes/StandardMaterial3D.xml
@@ -1,10 +1,12 @@
<?xml version="1.0" encoding="UTF-8" ?>
<class name="StandardMaterial3D" inherits="BaseMaterial3D" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
<brief_description>
+ Physically based rendering (PBR) material that can be applied to 3D objects.
</brief_description>
<description>
+ StandardMaterial3D's properties are inherited from [BaseMaterial3D].
</description>
<tutorials>
- <link title="Standard Material 3D">$DOCS_URL/tutorials/3d/standard_material_3d.html</link>
+ <link title="Standard Material 3D and ORM Material 3D">$DOCS_URL/tutorials/3d/standard_material_3d.html</link>
</tutorials>
</class>
diff --git a/doc/classes/TextEdit.xml b/doc/classes/TextEdit.xml
index 58fdd2d058..2de185903d 100644
--- a/doc/classes/TextEdit.xml
+++ b/doc/classes/TextEdit.xml
@@ -956,6 +956,9 @@
<member name="deselect_on_focus_loss_enabled" type="bool" setter="set_deselect_on_focus_loss_enabled" getter="is_deselect_on_focus_loss_enabled" default="true">
If [code]true[/code], the selected text will be deselected when focus is lost.
</member>
+ <member name="drag_and_drop_selection_enabled" type="bool" setter="set_drag_and_drop_selection_enabled" getter="is_drag_and_drop_selection_enabled" default="true">
+ If [code]true[/code], allow drag and drop of selected text.
+ </member>
<member name="draw_control_chars" type="bool" setter="set_draw_control_chars" getter="get_draw_control_chars" default="false">
If [code]true[/code], control characters are displayed.
</member>
diff --git a/doc/classes/TextLine.xml b/doc/classes/TextLine.xml
index 5359937db5..f154cbbe9a 100644
--- a/doc/classes/TextLine.xml
+++ b/doc/classes/TextLine.xml
@@ -161,28 +161,11 @@
<member name="preserve_invalid" type="bool" setter="set_preserve_invalid" getter="get_preserve_invalid" default="true">
If set to [code]true[/code] text will display invalid characters.
</member>
- <member name="text_overrun_behavior" type="int" setter="set_text_overrun_behavior" getter="get_text_overrun_behavior" enum="TextLine.OverrunBehavior" default="3">
- Sets the clipping behavior when the text exceeds the text line's set width. See [enum OverrunBehavior] for a description of all modes.
+ <member name="text_overrun_behavior" type="int" setter="set_text_overrun_behavior" getter="get_text_overrun_behavior" enum="TextServer.OverrunBehavior" default="3">
+ Sets the clipping behavior when the text exceeds the text line's set width. See [enum TextServer.OverrunBehavior] for a description of all modes.
</member>
<member name="width" type="float" setter="set_width" getter="get_width" default="-1.0">
Text line width.
</member>
</members>
- <constants>
- <constant name="OVERRUN_NO_TRIMMING" value="0" enum="OverrunBehavior">
- No text trimming is performed.
- </constant>
- <constant name="OVERRUN_TRIM_CHAR" value="1" enum="OverrunBehavior">
- Trims the text per character.
- </constant>
- <constant name="OVERRUN_TRIM_WORD" value="2" enum="OverrunBehavior">
- Trims the text per word.
- </constant>
- <constant name="OVERRUN_TRIM_ELLIPSIS" value="3" enum="OverrunBehavior">
- Trims the text per character and adds an ellipsis to indicate that parts are hidden.
- </constant>
- <constant name="OVERRUN_TRIM_WORD_ELLIPSIS" value="4" enum="OverrunBehavior">
- Trims the text per word and adds an ellipsis to indicate that parts are hidden.
- </constant>
- </constants>
</class>
diff --git a/doc/classes/TextParagraph.xml b/doc/classes/TextParagraph.xml
index 964e2c771f..aaaacfe3ac 100644
--- a/doc/classes/TextParagraph.xml
+++ b/doc/classes/TextParagraph.xml
@@ -298,28 +298,11 @@
<member name="preserve_invalid" type="bool" setter="set_preserve_invalid" getter="get_preserve_invalid" default="true">
If set to [code]true[/code] text will display invalid characters.
</member>
- <member name="text_overrun_behavior" type="int" setter="set_text_overrun_behavior" getter="get_text_overrun_behavior" enum="TextParagraph.OverrunBehavior" default="0">
- Sets the clipping behavior when the text exceeds the paragraph's set width. See [enum OverrunBehavior] for a description of all modes.
+ <member name="text_overrun_behavior" type="int" setter="set_text_overrun_behavior" getter="get_text_overrun_behavior" enum="TextServer.OverrunBehavior" default="0">
+ Sets the clipping behavior when the text exceeds the paragraph's set width. See [enum TextServer.OverrunBehavior] for a description of all modes.
</member>
<member name="width" type="float" setter="set_width" getter="get_width" default="-1.0">
Paragraph width.
</member>
</members>
- <constants>
- <constant name="OVERRUN_NO_TRIMMING" value="0" enum="OverrunBehavior">
- No text trimming is performed.
- </constant>
- <constant name="OVERRUN_TRIM_CHAR" value="1" enum="OverrunBehavior">
- Trims the text per character.
- </constant>
- <constant name="OVERRUN_TRIM_WORD" value="2" enum="OverrunBehavior">
- Trims the text per word.
- </constant>
- <constant name="OVERRUN_TRIM_ELLIPSIS" value="3" enum="OverrunBehavior">
- Trims the text per character and adds an ellipsis to indicate that parts are hidden.
- </constant>
- <constant name="OVERRUN_TRIM_WORD_ELLIPSIS" value="4" enum="OverrunBehavior">
- Trims the text per word and adds an ellipsis to indicate that parts are hidden.
- </constant>
- </constants>
</class>
diff --git a/doc/classes/TextServer.xml b/doc/classes/TextServer.xml
index 19be38b323..ca1aec19ea 100644
--- a/doc/classes/TextServer.xml
+++ b/doc/classes/TextServer.xml
@@ -1542,6 +1542,18 @@
<constant name="JUSTIFICATION_CONSTRAIN_ELLIPSIS" value="16" enum="JustificationFlag">
Apply justification to the trimmed line with ellipsis.
</constant>
+ <constant name="AUTOWRAP_OFF" value="0" enum="AutowrapMode">
+ Autowrap is disabled.
+ </constant>
+ <constant name="AUTOWRAP_ARBITRARY" value="1" enum="AutowrapMode">
+ Wraps the text inside the node's bounding rectangle by allowing to break lines at arbitrary positions, which is useful when very limited space is available.
+ </constant>
+ <constant name="AUTOWRAP_WORD" value="2" enum="AutowrapMode">
+ Wraps the text inside the node's bounding rectangle by soft-breaking between words.
+ </constant>
+ <constant name="AUTOWRAP_WORD_SMART" value="3" enum="AutowrapMode">
+ Behaves similarly to [constant AUTOWRAP_WORD], but force-breaks a word if that single word does not fit in one line.
+ </constant>
<constant name="BREAK_NONE" value="0" enum="LineBreakFlag">
Do not break the line.
</constant>
@@ -1557,7 +1569,37 @@
<constant name="BREAK_WORD_BOUND_ADAPTIVE" value="320" enum="LineBreakFlag">
Break the line between the words, or any unconnected graphemes if line is too short to fit the whole word.
</constant>
- <constant name="OVERRUN_NO_TRIMMING" value="0" enum="TextOverrunFlag">
+ <constant name="VC_CHARS_BEFORE_SHAPING" value="0" enum="VisibleCharactersBehavior">
+ Trims text before the shaping. e.g, increasing [member Label.visible_characters] or [member RichTextLabel.visible_characters] value is visually identical to typing the text.
+ </constant>
+ <constant name="VC_CHARS_AFTER_SHAPING" value="1" enum="VisibleCharactersBehavior">
+ Displays glyphs that are mapped to the first [member Label.visible_characters] or [member RichTextLabel.visible_characters] characters from the beginning of the text.
+ </constant>
+ <constant name="VC_GLYPHS_AUTO" value="2" enum="VisibleCharactersBehavior">
+ Displays [member Label.percent_visible] or [member RichTextLabel.percent_visible] glyphs, starting from the left or from the right, depending on [member Control.layout_direction] value.
+ </constant>
+ <constant name="VC_GLYPHS_LTR" value="3" enum="VisibleCharactersBehavior">
+ Displays [member Label.percent_visible] or [member RichTextLabel.percent_visible] glyphs, starting from the left.
+ </constant>
+ <constant name="VC_GLYPHS_RTL" value="4" enum="VisibleCharactersBehavior">
+ Displays [member Label.percent_visible] or [member RichTextLabel.percent_visible] glyphs, starting from the right.
+ </constant>
+ <constant name="OVERRUN_NO_TRIMMING" value="0" enum="OverrunBehavior">
+ No text trimming is performed.
+ </constant>
+ <constant name="OVERRUN_TRIM_CHAR" value="1" enum="OverrunBehavior">
+ Trims the text per character.
+ </constant>
+ <constant name="OVERRUN_TRIM_WORD" value="2" enum="OverrunBehavior">
+ Trims the text per word.
+ </constant>
+ <constant name="OVERRUN_TRIM_ELLIPSIS" value="3" enum="OverrunBehavior">
+ Trims the text per character and adds an ellipsis to indicate that parts are hidden.
+ </constant>
+ <constant name="OVERRUN_TRIM_WORD_ELLIPSIS" value="4" enum="OverrunBehavior">
+ Trims the text per word and adds an ellipsis to indicate that parts are hidden.
+ </constant>
+ <constant name="OVERRUN_NO_TRIM" value="0" enum="TextOverrunFlag">
No trimming is performed.
</constant>
<constant name="OVERRUN_TRIM" value="1" enum="TextOverrunFlag">
diff --git a/doc/classes/Thread.xml b/doc/classes/Thread.xml
index d78b8db052..513daff37c 100644
--- a/doc/classes/Thread.xml
+++ b/doc/classes/Thread.xml
@@ -35,10 +35,11 @@
<method name="start">
<return type="int" enum="Error" />
<argument index="0" name="callable" type="Callable" />
- <argument index="1" name="userdata" type="Variant" default="null" />
- <argument index="2" name="priority" type="int" enum="Thread.Priority" default="1" />
+ <argument index="1" name="priority" type="int" enum="Thread.Priority" default="1" />
<description>
- Starts a new [Thread] that calls [code]callable[/code] with [code]userdata[/code] passed as an argument. Even if no userdata is passed, [code]callable[/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.
+ Starts a new [Thread] that calls [code]callable[/code].
+ If the method takes some arguments, you can pass them using [method Callable.bind].
+ The [code]priority[/code] of the [Thread] can be changed by passing a value from the [enum Priority] enum.
Returns [constant OK] on success, or [constant ERR_CANT_CREATE] on failure.
</description>
</method>
diff --git a/doc/classes/TileData.xml b/doc/classes/TileData.xml
index 0c2961fd5e..66cf602e5d 100644
--- a/doc/classes/TileData.xml
+++ b/doc/classes/TileData.xml
@@ -199,7 +199,8 @@
</member>
<member name="flip_v" type="bool" setter="set_flip_v" getter="get_flip_v" default="false">
</member>
- <member name="material" type="ShaderMaterial" setter="set_material" getter="get_material">
+ <member name="material" type="Material" setter="set_material" getter="get_material">
+ The [Material] to use for this [TileData]. This can be a [CanvasItemMaterial] to use the default shader, or a [ShaderMaterial] to use a custom shader.
</member>
<member name="modulate" type="Color" setter="set_modulate" getter="get_modulate" default="Color(1, 1, 1, 1)">
</member>
diff --git a/doc/classes/Transform2D.xml b/doc/classes/Transform2D.xml
index 8c2a5aa6d9..e1f7ff21d0 100644
--- a/doc/classes/Transform2D.xml
+++ b/doc/classes/Transform2D.xml
@@ -163,6 +163,7 @@
<argument index="0" name="scale" type="Vector2" />
<description>
Sets the transform's scale.
+ [b]Note:[/b] Negative X scales in 2D are not decomposable from the transformation matrix. Due to the way scale is represented with transformation matrices in Godot, negative scales on the X axis will be changed to negative scales on the Y axis and a rotation of 180 degrees when decomposed.
</description>
</method>
<method name="set_skew">
diff --git a/doc/classes/Tree.xml b/doc/classes/Tree.xml
index 6ae85ad242..8a30364ebe 100644
--- a/doc/classes/Tree.xml
+++ b/doc/classes/Tree.xml
@@ -31,6 +31,7 @@
[/csharp]
[/codeblocks]
To iterate over all the [TreeItem] objects in a [Tree] object, use [method TreeItem.get_next] and [method TreeItem.get_first_child] after getting the root through [method get_root]. You can use [method Object.free] on a [TreeItem] to remove it from the [Tree].
+ [b]Incremental search:[/b] Like [ItemList] and [PopupMenu], [Tree] supports searching within the list while the control is focused. Press a key that matches the first letter of an item's name to select the first item starting with the given letter. After that point, there are two ways to perform incremental search: 1) Press the same key again before the timeout duration to select the next item starting with the same letter. 2) Press letter keys that match the rest of the word before the timeout duration to match to select the item in question directly. Both of these actions will be reset to the beginning of the list if the timeout duration has passed since the last keystroke was registered. You can adjust the timeout duration by changing [member ProjectSettings.gui/timers/incremental_search_max_interval_msec].
</description>
<tutorials>
</tutorials>
diff --git a/doc/classes/Tween.xml b/doc/classes/Tween.xml
index f9ec0d115d..b18232f5c3 100644
--- a/doc/classes/Tween.xml
+++ b/doc/classes/Tween.xml
@@ -4,41 +4,41 @@
Lightweight object used for general-purpose animation via script, using [Tweener]s.
</brief_description>
<description>
- Tweens are mostly 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.
+ Tweens are mostly 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. Animating something with a [Tween] is called tweening.
[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]; it would be difficult to do the same thing with an [AnimationPlayer] node. Tweens are also more light-weight than [AnimationPlayer], so they are very much suited for simple animations or general tasks that don't require visual tweaking provided by the editor. They can be used in a fire-and-forget manner for some logic that normally would be done by code. You can e.g. make something shoot periodically by using a looped [CallbackTweener] with a delay.
A [Tween] can be created by using either [method SceneTree.create_tween] or [method Node.create_tween]. [Tween]s created manually (i.e. by using [code]Tween.new()[/code]) are invalid and can't be used for tweening values.
- A [Tween] animation is composed of a sequence of [Tweener]s, which by default are executed one after another. You can create a sequence by appending [Tweener]s to the [Tween]. Animating something with a [Tweener] is called tweening. Example tweening sequence looks like this:
+ A tween animation is created by adding [Tweener]s to the [Tween] object, using [method tween_property], [method tween_interval], [method tween_callback] or [method tween_method]:
[codeblock]
var tween = get_tree().create_tween()
tween.tween_property($Sprite, "modulate", Color.red, 1)
tween.tween_property($Sprite, "scale", Vector2(), 1)
tween.tween_callback($Sprite.queue_free)
[/codeblock]
- This sequence will make the [code]$Sprite[/code] node turn red, then shrink and finally the [method Node.queue_free] is called to remove the sprite. See methods [method tween_property], [method tween_interval], [method tween_callback] and [method tween_method] for more usage information.
- When a [Tweener] is created with one of the [code]tween_*[/code] methods, a chained method call can be used to tweak the properties of this [Tweener]. For example, if you want to set different transition type in the above example, you can do:
+ This sequence will make the [code]$Sprite[/code] node turn red, then shrink, before finally calling [method Node.queue_free] to free the sprite. [Tweener]s are executed one after another by default. This behavior can be changed using [method parallel] and [method set_parallel].
+ When a [Tweener] is created with one of the [code]tween_*[/code] methods, a chained method call can be used to tweak the properties of this [Tweener]. For example, if you want to set a different transition type in the above example, you can use [method set_trans]:
[codeblock]
var tween = get_tree().create_tween()
tween.tween_property($Sprite, "modulate", Color.red, 1).set_trans(Tween.TRANS_SINE)
tween.tween_property($Sprite, "scale", Vector2(), 1).set_trans(Tween.TRANS_BOUNCE)
tween.tween_callback($Sprite.queue_free)
[/codeblock]
- Most of the [Tween] methods can be chained this way too. In this example the [Tween] is bound and have set a default transition:
+ Most of the [Tween] methods can be chained this way too. In the following example the [Tween] is bound to the running script's node and a default transition is set for its [Tweener]s:
[codeblock]
var tween = get_tree().create_tween().bind_node(self).set_trans(Tween.TRANS_ELASTIC)
tween.tween_property($Sprite, "modulate", Color.red, 1)
tween.tween_property($Sprite, "scale", Vector2(), 1)
tween.tween_callback($Sprite.queue_free)
[/codeblock]
- Another interesting use for [Tween]s is animating arbitrary set of objects:
+ Another interesting use for [Tween]s is animating arbitrary sets of objects:
[codeblock]
var tween = create_tween()
for sprite in get_children():
- tween.tween_property(sprite, "position", Vector2(), 1)
+ tween.tween_property(sprite, "position", Vector2(0, 0), 1)
[/codeblock]
In the example above, all children of a node are moved one after another to position (0, 0).
- Some [Tweener]s use transitions and eases. 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.
+ Some [Tweener]s use transitions and eases. The first accepts a [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.
[url=https://raw.githubusercontent.com/godotengine/godot-docs/master/img/tween_cheatsheet.png]Tween easing and transition types cheatsheet[/url]
- [b]Note:[/b] All [Tween]s will automatically start by default. To prevent a [Tween] from autostarting, you can call [method stop] immediately after it was created.
+ [b]Note:[/b] All [Tween]s will automatically start by default. To prevent a [Tween] from autostarting, you can call [method stop] immediately after it is created.
</description>
<tutorials>
</tutorials>
@@ -67,15 +67,15 @@
<return type="bool" />
<argument index="0" name="delta" type="float" />
<description>
- Processes the [Tween] by given [code]delta[/code] value, in seconds. Mostly useful when the [Tween] is paused, for controlling it manually. Can also be used to end the [Tween] animation immediately, by using [code]delta[/code] longer than the whole duration.
+ Processes the [Tween] by the given [code]delta[/code] value, in seconds. This is mostly useful for manual control when the [Tween] is paused. It can also be used to end the [Tween] animation immediately, by setting [code]delta[/code] longer than the whole duration of the [Tween] animation.
Returns [code]true[/code] if the [Tween] still has [Tweener]s that haven't finished.
- [b]Note:[/b] The [Tween] will become invalid after finished, but you can call [method stop] after the step, to keep it and reset.
+ [b]Note:[/b] The [Tween] will become invalid in the next processing frame after its animation finishes. Calling [method stop] after performing [method custom_step] instead keeps and resets the [Tween].
</description>
</method>
<method name="get_total_elapsed_time" qualifiers="const">
<return type="float" />
<description>
- Returns the total time in seconds the [Tween] has been animating (i.e. time since it started, not counting pauses etc.). The time is affected by [method set_speed_scale] and [method stop] will reset it to [code]0[/code].
+ Returns the total time in seconds the [Tween] has been animating (i.e. the time since it started, not counting pauses etc.). The time is affected by [method set_speed_scale], and [method stop] will reset it to [code]0[/code].
[b]Note:[/b] As it results from accumulating frame deltas, the time returned after the [Tween] has finished animating will be slightly greater than the actual [Tween] duration.
</description>
</method>
@@ -105,7 +105,7 @@
<method name="is_valid">
<return type="bool" />
<description>
- Returns whether the [Tween] is valid. A valid [Tween] is a [Tween] contained by the scene tree (i.e. the array from [method SceneTree.get_processed_tweens] will contain this [Tween]). [Tween] might become invalid when it has finished tweening or was killed, also when created with [code]Tween.new()[/code]. Invalid [Tween] can't have [Tweener]s appended, because it can't animate them.
+ Returns whether the [Tween] is valid. A valid [Tween] is a [Tween] contained by the scene tree (i.e. the array from [method SceneTree.get_processed_tweens] will contain this [Tween]). A [Tween] might become invalid when it has finished tweening, is killed, or when created with [code]Tween.new()[/code]. Invalid [Tween]s can't have [Tweener]s appended.
</description>
</method>
<method name="kill">
@@ -152,8 +152,8 @@
<argument index="0" name="loops" type="int" default="0" />
<description>
Sets the number of times the tweening sequence will be repeated, i.e. [code]set_loops(2)[/code] will run the animation twice.
- Calling this method without arguments will make the [Tween] run infinitely, until it is either killed by [method kill] or by freeing bound node, or all the animated objects have been freed (which makes further animation impossible).
- [b]Warning:[/b] Make sure to always add some duration/delay when using infinite loops. 0-duration looped animations (e.g. single [CallbackTweener] with no delay or [PropertyTweener] with invalid node) are equivalent to infinite [code]while[/code] loops and will freeze your game. If a [Tween]'s lifetime depends on some node, always use [method bind_node].
+ Calling this method without arguments will make the [Tween] run infinitely, until either it is killed with [method kill], the [Tween]'s bound node is freed, or all the animated objects have been freed (which makes further animation impossible).
+ [b]Warning:[/b] Make sure to always add some duration/delay when using infinite loops. To prevent the game freezing, 0-duration looped animations (e.g. a single [CallbackTweener] with no delay) are stopped after a small number of loops, which may produce unexpected results. If a [Tween]'s lifetime depends on some node, always use [method bind_node].
</description>
</method>
<method name="set_parallel">
@@ -221,7 +221,7 @@
<return type="IntervalTweener" />
<argument index="0" name="time" type="float" />
<description>
- Creates and appends an [IntervalTweener]. This method can be used to create delays in the tween animation, as an alternative for using the delay in other [Tweener]s or when there's no animation (in which case the [Tween] acts as a timer). [code]time[/code] is the length of the interval, in seconds.
+ Creates and appends an [IntervalTweener]. This method can be used to create delays in the tween animation, as an alternative to using the delay in other [Tweener]s, or when there's no animation (in which case the [Tween] acts as a timer). [code]time[/code] is the length of the interval, in seconds.
Example: creating an interval in code execution.
[codeblock]
# ... some code
@@ -271,7 +271,7 @@
<argument index="2" name="final_val" type="Variant" />
<argument index="3" name="duration" type="float" />
<description>
- Creates and appends a [PropertyTweener]. This method tweens a [code]property[/code] of an [code]object[/code] between an initial value and [code]final_val[/code] in a span of time equal to [code]duration[/code], in seconds. The initial value by default is a value at the time the tweening of the [PropertyTweener] start. For example:
+ Creates and appends a [PropertyTweener]. This method tweens a [code]property[/code] of an [code]object[/code] between an initial value and [code]final_val[/code] in a span of time equal to [code]duration[/code], in seconds. The initial value by default is the property's value at the time the tweening of the [PropertyTweener] starts. For example:
[codeblock]
var tween = create_tween()
tween.tween_property($Sprite, "position", Vector2(100, 200), 1)
@@ -292,19 +292,19 @@
<signal name="finished">
<description>
Emitted when the [Tween] has finished all tweening. Never emitted when the [Tween] is set to infinite looping (see [method set_loops]).
- [b]Note:[/b] The [Tween] is removed (invalidated) after this signal is emitted, but it doesn't happen immediately, but on the next processing frame. Calling [method stop] inside the signal callback will preserve the [Tween].
+ [b]Note:[/b] The [Tween] is removed (invalidated) in the next processing frame after this signal is emitted. Calling [method stop] inside the signal callback will prevent the [Tween] from being removed.
</description>
</signal>
<signal name="loop_finished">
<argument index="0" name="loop_count" type="int" />
<description>
- Emitted when a full loop is complete (see [method set_loops]), providing the loop index. This signal is not emitted after final loop, use [signal finished] instead for this case.
+ Emitted when a full loop is complete (see [method set_loops]), providing the loop index. This signal is not emitted after the final loop, use [signal finished] instead for this case.
</description>
</signal>
<signal name="step_finished">
<argument index="0" name="idx" type="int" />
<description>
- Emitted when one step of the [Tween] is complete, providing the step index. One step is either a single [Tweener] or a group of [Tweener]s running parallelly.
+ Emitted when one step of the [Tween] is complete, providing the step index. One step is either a single [Tweener] or a group of [Tweener]s running in parallel.
</description>
</signal>
</signals>
diff --git a/doc/classes/Vector2.xml b/doc/classes/Vector2.xml
index 6ccc0fc6a6..454db51919 100644
--- a/doc/classes/Vector2.xml
+++ b/doc/classes/Vector2.xml
@@ -85,6 +85,16 @@
Returns the aspect ratio of this vector, the ratio of [member x] to [member y].
</description>
</method>
+ <method name="bezier_interpolate" qualifiers="const">
+ <return type="Vector2" />
+ <argument index="0" name="control_1" type="Vector2" />
+ <argument index="1" name="control_2" type="Vector2" />
+ <argument index="2" name="end" type="Vector2" />
+ <argument index="3" name="t" type="float" />
+ <description>
+ Returns the point at the given [code]t[/code] on the [url=https://en.wikipedia.org/wiki/B%C3%A9zier_curve]Bezier curve[/url] defined by this vector and the given [code]control_1[/code], [code]control_2[/code], and [code]end[/code] points.
+ </description>
+ </method>
<method name="bounce" qualifiers="const">
<return type="Vector2" />
<argument index="0" name="n" type="Vector2" />
diff --git a/doc/classes/Vector3.xml b/doc/classes/Vector3.xml
index d907ceb52b..c181720a66 100644
--- a/doc/classes/Vector3.xml
+++ b/doc/classes/Vector3.xml
@@ -61,6 +61,16 @@
Returns the unsigned minimum angle to the given vector, in radians.
</description>
</method>
+ <method name="bezier_interpolate" qualifiers="const">
+ <return type="Vector3" />
+ <argument index="0" name="control_1" type="Vector3" />
+ <argument index="1" name="control_2" type="Vector3" />
+ <argument index="2" name="end" type="Vector3" />
+ <argument index="3" name="t" type="float" />
+ <description>
+ Returns the point at the given [code]t[/code] on the [url=https://en.wikipedia.org/wiki/B%C3%A9zier_curve]Bezier curve[/url] defined by this vector and the given [code]control_1[/code], [code]control_2[/code], and [code]end[/code] points.
+ </description>
+ </method>
<method name="bounce" qualifiers="const">
<return type="Vector3" />
<argument index="0" name="n" type="Vector3" />
diff --git a/doc/classes/VisualShader.xml b/doc/classes/VisualShader.xml
index 5f13e4e7bc..64d901cd79 100644
--- a/doc/classes/VisualShader.xml
+++ b/doc/classes/VisualShader.xml
@@ -166,10 +166,6 @@
</method>
</methods>
<members>
- <member name="engine_version" type="Dictionary" setter="set_engine_version" getter="get_engine_version" default="{}">
- The Godot version this [VisualShader] was designed for, in the form of a [Dictionary] with [code]major[/code] and [code]minor[/code] keys with integer values. Example: [code]{"major": 4, "minor": 0}[/code]
- This is used by the editor to convert visual shaders from older Godot versions.
- </member>
<member name="graph_offset" type="Vector2" setter="set_graph_offset" getter="get_graph_offset" default="Vector2(0, 0)">
The offset vector of the whole graph.
</member>
diff --git a/doc/classes/Window.xml b/doc/classes/Window.xml
index 5ce870a899..f4eaaac2e1 100644
--- a/doc/classes/Window.xml
+++ b/doc/classes/Window.xml
@@ -4,7 +4,8 @@
Base class for all windows.
</brief_description>
<description>
- A node that creates a window.
+ A node that creates a window. The window can either be a native system window or embedded inside another [Window] (see [member Viewport.gui_embed_subwindows]).
+ At runtime, [Window]s will not close automatically when requested. You need to handle it manually using [signal close_requested] (this applies both to clicking close button and clicking outside popup).
</description>
<tutorials>
</tutorials>
@@ -18,12 +19,13 @@
<method name="child_controls_changed">
<return type="void" />
<description>
+ Requests an update of the [Window] size to fit underlying [Control] nodes.
</description>
</method>
<method name="get_contents_minimum_size" qualifiers="const">
<return type="Vector2" />
<description>
- Returns the combined minimum size from the child [Control] nodes of the window.
+ Returns the combined minimum size from the child [Control] nodes of the window. Use [method child_controls_changed] to update it when children nodes have changed.
</description>
</method>
<method name="get_flag" qualifiers="const">
@@ -50,6 +52,8 @@
<argument index="0" name="name" type="StringName" />
<argument index="1" name="theme_type" type="StringName" default="&quot;&quot;" />
<description>
+ Returns the [Color] at [code]name[/code] if the theme has [code]theme_type[/code].
+ See [method Control.get_theme_color] for more details.
</description>
</method>
<method name="get_theme_constant" qualifiers="const">
@@ -57,21 +61,29 @@
<argument index="0" name="name" type="StringName" />
<argument index="1" name="theme_type" type="StringName" default="&quot;&quot;" />
<description>
+ Returns the constant at [code]name[/code] if the theme has [code]theme_type[/code].
+ See [method Control.get_theme_color] for more details.
</description>
</method>
<method name="get_theme_default_base_scale" qualifiers="const">
<return type="float" />
<description>
+ Returns the default base scale defined in the attached [Theme].
+ See [member Theme.default_base_scale] for more details.
</description>
</method>
<method name="get_theme_default_font" qualifiers="const">
<return type="Font" />
<description>
+ Returns the default [Font] defined in the attached [Theme].
+ See [member Theme.default_font] for more details.
</description>
</method>
<method name="get_theme_default_font_size" qualifiers="const">
<return type="int" />
<description>
+ Returns the default font size defined in the attached [Theme].
+ See [member Theme.default_font_size] for more details.
</description>
</method>
<method name="get_theme_font" qualifiers="const">
@@ -80,6 +92,7 @@
<argument index="1" name="theme_type" type="StringName" default="&quot;&quot;" />
<description>
Returns the [Font] at [code]name[/code] if the theme has [code]theme_type[/code].
+ See [method Control.get_theme_color] for more details.
</description>
</method>
<method name="get_theme_font_size" qualifiers="const">
@@ -88,6 +101,7 @@
<argument index="1" name="theme_type" type="StringName" default="&quot;&quot;" />
<description>
Returns the font size at [code]name[/code] if the theme has [code]theme_type[/code].
+ See [method Control.get_theme_color] for more details.
</description>
</method>
<method name="get_theme_icon" qualifiers="const">
@@ -95,6 +109,8 @@
<argument index="0" name="name" type="StringName" />
<argument index="1" name="theme_type" type="StringName" default="&quot;&quot;" />
<description>
+ Returns the icon at [code]name[/code] if the theme has [code]theme_type[/code].
+ See [method Control.get_theme_color] for more details.
</description>
</method>
<method name="get_theme_stylebox" qualifiers="const">
@@ -102,6 +118,8 @@
<argument index="0" name="name" type="StringName" />
<argument index="1" name="theme_type" type="StringName" default="&quot;&quot;" />
<description>
+ Returns the [StyleBox] at [code]name[/code] if the theme has [code]theme_type[/code].
+ See [method Control.get_theme_color] for more details.
</description>
</method>
<method name="grab_focus">
@@ -121,6 +139,7 @@
<argument index="0" name="name" type="StringName" />
<argument index="1" name="theme_type" type="StringName" default="&quot;&quot;" />
<description>
+ Returns [code]true[/code] if [Color] with [code]name[/code] is in [code]theme_type[/code].
</description>
</method>
<method name="has_theme_constant" qualifiers="const">
@@ -128,6 +147,7 @@
<argument index="0" name="name" type="StringName" />
<argument index="1" name="theme_type" type="StringName" default="&quot;&quot;" />
<description>
+ Returns [code]true[/code] if constant with [code]name[/code] is in [code]theme_type[/code].
</description>
</method>
<method name="has_theme_font" qualifiers="const">
@@ -136,7 +156,6 @@
<argument index="1" name="theme_type" type="StringName" default="&quot;&quot;" />
<description>
Returns [code]true[/code] if [Font] with [code]name[/code] is in [code]theme_type[/code].
- Returns [code]false[/code] if the theme does not have [code]theme_type[/code].
</description>
</method>
<method name="has_theme_font_size" qualifiers="const">
@@ -145,7 +164,6 @@
<argument index="1" name="theme_type" type="StringName" default="&quot;&quot;" />
<description>
Returns [code]true[/code] if font size with [code]name[/code] is in [code]theme_type[/code].
- Returns [code]false[/code] if the theme does not have [code]theme_type[/code].
</description>
</method>
<method name="has_theme_icon" qualifiers="const">
@@ -153,6 +171,7 @@
<argument index="0" name="name" type="StringName" />
<argument index="1" name="theme_type" type="StringName" default="&quot;&quot;" />
<description>
+ Returns [code]true[/code] if icon with [code]name[/code] is in [code]theme_type[/code].
</description>
</method>
<method name="has_theme_stylebox" qualifiers="const">
@@ -160,11 +179,13 @@
<argument index="0" name="name" type="StringName" />
<argument index="1" name="theme_type" type="StringName" default="&quot;&quot;" />
<description>
+ Returns [code]true[/code] if [StyleBox] with [code]name[/code] is in [code]theme_type[/code].
</description>
</method>
<method name="hide">
<return type="void" />
<description>
+ Hides the window. This is not the same as minimized state. Hidden window can't be interacted with and needs to be made visible with [method show].
</description>
</method>
<method name="is_embedded" qualifiers="const">
@@ -182,28 +203,35 @@
<method name="is_maximize_allowed" qualifiers="const">
<return type="bool" />
<description>
+ Returns [code]true[/code] if the window can be maximized (the maximize button is enabled).
</description>
</method>
<method name="is_using_font_oversampling" qualifiers="const">
<return type="bool" />
<description>
+ Returns [code]true[/code] if font oversampling is enabled. See [method set_use_font_oversampling].
</description>
</method>
<method name="move_to_foreground">
<return type="void" />
<description>
+ Moves the [Window] on top of other windows and focuses it.
</description>
</method>
<method name="popup">
<return type="void" />
<argument index="0" name="rect" type="Rect2i" default="Rect2i(0, 0, 0, 0)" />
<description>
+ Shows the [Window] and makes it transient (see [member transient]). If [code]rect[/code] is provided, it will be set as the [Window]'s size.
+ Fails if called on the main window.
</description>
</method>
<method name="popup_centered">
<return type="void" />
<argument index="0" name="minsize" type="Vector2i" default="Vector2i(0, 0)" />
<description>
+ Popups the [Window] at the center of the current screen, with optionally given minimum size.
+ If the [Window] is embedded, it will be centered in the parent [Viewport] instead.
</description>
</method>
<method name="popup_centered_clamped">
@@ -211,23 +239,29 @@
<argument index="0" name="minsize" type="Vector2i" default="Vector2i(0, 0)" />
<argument index="1" name="fallback_ratio" type="float" default="0.75" />
<description>
+ Popups the [Window] centered inside its parent [Window].
+ [code]fallback_ratio[/code] determines the maximum size of the [Window], in relation to its parent.
</description>
</method>
<method name="popup_centered_ratio">
<return type="void" />
<argument index="0" name="ratio" type="float" default="0.8" />
<description>
+ Popups the [Window] centered inside its parent [Window] and sets its size as a [code]ratio[/code] of parent's size.
</description>
</method>
<method name="popup_on_parent">
<return type="void" />
<argument index="0" name="parent_rect" type="Rect2i" />
<description>
+ Popups the [Window] with a position shifted by parent [Window]'s position.
+ If the [Window] is embedded, has the same effect as [method popup].
</description>
</method>
<method name="request_attention">
<return type="void" />
<description>
+ Tells the OS that the [Window] needs an attention. This makes the window stand out in some way depending on the system, e.g. it might blink on the task bar.
</description>
</method>
<method name="reset_size">
@@ -248,12 +282,14 @@
<return type="void" />
<argument index="0" name="active" type="bool" />
<description>
+ If [code]active[/code] is [code]true[/code], enables system's native IME (Input Method Editor).
</description>
</method>
<method name="set_ime_position">
<return type="void" />
<argument index="0" name="position" type="Vector2i" />
<description>
+ Moves IME to the given position.
</description>
</method>
<method name="set_layout_direction">
@@ -267,17 +303,19 @@
<return type="void" />
<argument index="0" name="enable" type="bool" />
<description>
+ Enables font oversampling. This makes fonts look better when they are scaled up.
</description>
</method>
<method name="show">
<return type="void" />
<description>
+ Makes the [Window] appear. This enables interactions with the [Window] and doesn't change any of its property other than visibility (unlike e.g. [method popup]).
</description>
</method>
</methods>
<members>
<member name="always_on_top" type="bool" setter="set_flag" getter="get_flag" default="false">
- If [code]true[/code], the window will be on top of all other windows.
+ If [code]true[/code], the window will be on top of all other windows. Does not work if [member transient] is enabled.
</member>
<member name="auto_translate" type="bool" setter="set_auto_translate" getter="is_auto_translating" default="true">
Toggles if any text should automatically change to its translated version depending on the current locale.
@@ -286,27 +324,36 @@
If [code]true[/code], the window will have no borders.
</member>
<member name="content_scale_aspect" type="int" setter="set_content_scale_aspect" getter="get_content_scale_aspect" enum="Window.ContentScaleAspect" default="0">
+ Specifies how the content's aspect behaves when the [Window] is resized. The base aspect is determined by [member content_scale_size].
</member>
<member name="content_scale_factor" type="float" setter="set_content_scale_factor" getter="get_content_scale_factor" default="1.0">
+ Specifies the base scale of [Window]'s content when its [member size] is equal to [member content_scale_size].
</member>
<member name="content_scale_mode" type="int" setter="set_content_scale_mode" getter="get_content_scale_mode" enum="Window.ContentScaleMode" default="0">
+ Specifies how the content is scaled when the [Window] is resized.
</member>
<member name="content_scale_size" type="Vector2i" setter="set_content_scale_size" getter="get_content_scale_size" default="Vector2i(0, 0)">
+ Base size of the content (i.e. nodes that are drawn inside the window). If non-zero, [Window]'s content will be scaled when the window is resized to a different size.
</member>
<member name="current_screen" type="int" setter="set_current_screen" getter="get_current_screen" default="0">
The screen the window is currently on.
</member>
<member name="exclusive" type="bool" setter="set_exclusive" getter="is_exclusive" default="false">
+ If [code]true[/code], the [Window] will be in exclusive mode. Exclusive windows are always on top of their parent and will block all input going to the parent [Window].
+ Needs [member transient] enabled to work.
</member>
<member name="max_size" type="Vector2i" setter="set_max_size" getter="get_max_size" default="Vector2i(0, 0)">
+ If non-zero, the [Window] can't be resized to be bigger than this size.
</member>
<member name="min_size" type="Vector2i" setter="set_min_size" getter="get_min_size" default="Vector2i(0, 0)">
+ If non-zero, the [Window] can't be resized to be smaller than this size.
</member>
<member name="mode" type="int" setter="set_mode" getter="get_mode" enum="Window.Mode" default="0">
Set's the window's current mode.
[b]Note:[/b] Fullscreen mode is not exclusive fullscreen on Windows and Linux.
</member>
<member name="popup_window" type="bool" setter="set_flag" getter="get_flag" default="false">
+ If [code]true[/code], the [Window] will be considered a popup. Popups are sub-windows that don't show as separate windows in system's window manager's window list and will send close request when anything is clicked outside of them (unless [member exclusive] is enabled).
</member>
<member name="position" type="Vector2i" setter="set_position" getter="get_position" default="Vector2i(0, 0)">
The window's position in pixels.
@@ -315,34 +362,46 @@
The window's size in pixels.
</member>
<member name="theme" type="Theme" setter="set_theme" getter="get_theme">
+ The [Theme] resource that determines the style of the underlying [Control] nodes.
+ [Window] styles will have no effect unless the window is embedded.
</member>
<member name="theme_type_variation" type="StringName" setter="set_theme_type_variation" getter="get_theme_type_variation" default="&amp;&quot;&quot;">
+ The name of a theme type variation used by this [Window] to look up its own theme items. See [member Control.theme_type_variation] for more details.
</member>
<member name="title" type="String" setter="set_title" getter="get_title" default="&quot;&quot;">
- The window's title.
+ The window's title. If the [Window] is non-embedded, title styles set in [Theme] will have no effect.
</member>
<member name="transient" type="bool" setter="set_transient" getter="is_transient" default="false">
+ If [code]true[/code], the [Window] is transient, i.e. it's considered a child of another [Window]. Transient windows can't be in fullscreen mode and will return focus to their parent when closed.
+ Note that behavior might be different depending on the platform.
</member>
<member name="transparent" type="bool" setter="set_flag" getter="get_flag" default="false">
+ If [code]true[/code], the [Window]'s background can be transparent. This is best used with embedded windows. Currently non-embedded [Window] transparency is implemented only for MacOS.
</member>
<member name="unfocusable" type="bool" setter="set_flag" getter="get_flag" default="false">
+ If [code]true[/code], the [Window] can't be focused nor interacted with. It can still be visible.
</member>
<member name="unresizable" type="bool" setter="set_flag" getter="get_flag" default="false">
- If [code]true[/code], the window can't be resized.
+ If [code]true[/code], the window can't be resized. Minimize and maximize buttons are disabled.
</member>
<member name="visible" type="bool" setter="set_visible" getter="is_visible" default="true">
If [code]true[/code], the window is visible.
</member>
<member name="wrap_controls" type="bool" setter="set_wrap_controls" getter="is_wrapping_controls" default="false">
+ If [code]true[/code], the window's size will automatically update when a child node is added or removed.
+ If [code]false[/code], you need to call [method child_controls_changed] manually.
</member>
</members>
<signals>
<signal name="about_to_popup">
<description>
+ Emitted right after [method popup] call, before the [Window] appears or does anything.
</description>
</signal>
<signal name="close_requested">
<description>
+ Emitted when the [Window]'s close button is pressed or when [member popup_window] is enabled and user clicks outside the window.
+ This signal can be used to handle window closing, e.g. by connecting it to [method hide].
</description>
</signal>
<signal name="files_dropped">
@@ -362,49 +421,58 @@
</signal>
<signal name="focus_entered">
<description>
+ Emitted when the [Window] gains focus.
</description>
</signal>
<signal name="focus_exited">
<description>
+ Emitted when the [Window] loses its focus.
</description>
</signal>
<signal name="go_back_requested">
<description>
+ Emitted when a go back request is sent (e.g. pressing the "Back" button on Android), right after [constant Node.NOTIFICATION_WM_GO_BACK_REQUEST].
</description>
</signal>
<signal name="mouse_entered">
<description>
+ Emitted when the mouse cursor enters the [Window]'s area, regardless if it's currently focused or not.
</description>
</signal>
<signal name="mouse_exited">
<description>
+ Emitted when the mouse cursor exits the [Window]'s area (including when it's hovered over another window on top of this one).
</description>
</signal>
<signal name="theme_changed">
<description>
+ Emitted when the [member theme] is modified or changed to another [Theme].
</description>
</signal>
<signal name="visibility_changed">
<description>
+ Emitted when [Window] is made visible or disappears.
</description>
</signal>
<signal name="window_input">
<argument index="0" name="event" type="InputEvent" />
<description>
+ Emitted when the [Window] is currently focused and receives any input, passing the received event as an argument.
</description>
</signal>
</signals>
<constants>
<constant name="NOTIFICATION_VISIBILITY_CHANGED" value="30">
+ Emitted when [Window]'s visibility changes, right before [signal visibility_changed].
</constant>
<constant name="MODE_WINDOWED" value="0" enum="Mode">
- Windowed mode.
+ Windowed mode, i.e. [Window] doesn't occupy whole screen (unless set to the size of the screen).
</constant>
<constant name="MODE_MINIMIZED" value="1" enum="Mode">
- Minimized window mode.
+ Minimized window mode, i.e. [Window] is not visible and available on window manager's window list. Normally happens when the minimize button is presesd.
</constant>
<constant name="MODE_MAXIMIZED" value="2" enum="Mode">
- Maximized window mode.
+ Maximized window mode, i.e. [Window] will occupy whole screen area except task bar and still display its borders. Normally happens when the minimize button is presesd.
</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.
@@ -416,37 +484,49 @@
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.
+ The window's ability to be resized. Set with [member unresizable].
</constant>
<constant name="FLAG_BORDERLESS" value="1" enum="Flags">
- Borderless window.
+ Borderless window. Set with [member borderless].
</constant>
<constant name="FLAG_ALWAYS_ON_TOP" value="2" enum="Flags">
- Flag for making the window always on top of all other windows.
+ Flag for making the window always on top of all other windows. Set with [member always_on_top].
</constant>
<constant name="FLAG_TRANSPARENT" value="3" enum="Flags">
+ Flag for per-pixel transparency. Set with [member transparent].
</constant>
<constant name="FLAG_NO_FOCUS" value="4" enum="Flags">
+ The window's ability to gain focus. Set with [member unfocusable].
</constant>
<constant name="FLAG_POPUP" value="5" enum="Flags">
+ Whether the window is popup or a regular window. Set with [member popup_window].
</constant>
<constant name="FLAG_MAX" value="6" enum="Flags">
+ Max value of the [enum Flags].
</constant>
<constant name="CONTENT_SCALE_MODE_DISABLED" value="0" enum="ContentScaleMode">
+ The content will not be scaled to match the [Window]'s size.
</constant>
<constant name="CONTENT_SCALE_MODE_CANVAS_ITEMS" value="1" enum="ContentScaleMode">
+ The content will be rendered at the target size. This is more performance-expensive than [constant CONTENT_SCALE_MODE_VIEWPORT], but provides better results.
</constant>
<constant name="CONTENT_SCALE_MODE_VIEWPORT" value="2" enum="ContentScaleMode">
+ The content will be rendered at the base size and then scaled to the target size. More performant than [constant CONTENT_SCALE_MODE_CANVAS_ITEMS], but results in pixelated image.
</constant>
<constant name="CONTENT_SCALE_ASPECT_IGNORE" value="0" enum="ContentScaleAspect">
+ The aspect will be ignored. Scaling will simply stretch the content to fit the target size.
</constant>
<constant name="CONTENT_SCALE_ASPECT_KEEP" value="1" enum="ContentScaleAspect">
+ The content's aspect will be preserved. If the target size has different aspect from the base one, the image will be centered and black bars will appear on left and right sides.
</constant>
<constant name="CONTENT_SCALE_ASPECT_KEEP_WIDTH" value="2" enum="ContentScaleAspect">
+ The content can be expanded vertically. Scaling horizontally will result in keeping the width ratio and then black bars on left and right sides.
</constant>
<constant name="CONTENT_SCALE_ASPECT_KEEP_HEIGHT" value="3" enum="ContentScaleAspect">
+ The content can be expanded horizontally. Scaling vertically will result in keeping the height ratio and then black bars on top and bottom sides.
</constant>
<constant name="CONTENT_SCALE_ASPECT_EXPAND" value="4" enum="ContentScaleAspect">
+ The content's aspect will be preserved. If the target size has different aspect from the base one, the content will stay in the to-left corner and add an extra visible area in the stretched space.
</constant>
<constant name="LAYOUT_DIRECTION_INHERITED" value="0" enum="LayoutDirection">
Automatic layout direction, determined from the parent window layout direction.
@@ -463,33 +543,41 @@
</constants>
<theme_items>
<theme_item name="title_color" data_type="color" type="Color" default="Color(0.875, 0.875, 0.875, 1)">
+ The color of the title's text.
</theme_item>
<theme_item name="title_outline_modulate" data_type="color" type="Color" default="Color(1, 1, 1, 1)">
- The color of the title outline.
+ The color of the title's text outline.
</theme_item>
<theme_item name="close_h_offset" data_type="constant" type="int" default="18">
+ Horizontal position offset of the close button.
</theme_item>
<theme_item name="close_v_offset" data_type="constant" type="int" default="24">
+ Vertical position offset of the close button.
</theme_item>
<theme_item name="resize_margin" data_type="constant" type="int" default="4">
- </theme_item>
- <theme_item name="scaleborder_size" data_type="constant" type="int" default="4">
+ Defines the outside margin at which the window border can be grabbed with mouse and resized.
</theme_item>
<theme_item name="title_height" data_type="constant" type="int" default="36">
+ Height of the title bar.
</theme_item>
<theme_item name="title_outline_size" data_type="constant" type="int" default="0">
The size of the title outline.
</theme_item>
<theme_item name="title_font" data_type="font" type="Font">
+ The font used to draw the title.
</theme_item>
<theme_item name="title_font_size" data_type="font_size" type="int">
The size of the title font.
</theme_item>
<theme_item name="close" data_type="icon" type="Texture2D">
+ The icon for the close button.
</theme_item>
<theme_item name="close_pressed" data_type="icon" type="Texture2D">
+ The icon for the close button when it's being pressed.
</theme_item>
<theme_item name="embedded_border" data_type="style" type="StyleBox">
+ The background style used when the [Window] is embedded. Note that this is drawn only under the window's content, excluding the title. For proper borders and title bar style, you can use [code]expand_margin_*[/code] properties of [StyleBoxFlat].
+ [b]Note:[/b] The content background will not be visible unless [member transparent] is enabled.
</theme_item>
</theme_items>
</class>
diff --git a/doc/classes/World3D.xml b/doc/classes/World3D.xml
index c57029a180..56a662d062 100644
--- a/doc/classes/World3D.xml
+++ b/doc/classes/World3D.xml
@@ -19,7 +19,7 @@
The World3D's [Environment].
</member>
<member name="fallback_environment" type="Environment" setter="set_fallback_environment" getter="get_fallback_environment">
- The World3D's fallback_environment will be used if the World3D's [Environment] fails or is missing.
+ The World3D's fallback environment will be used if [member environment] fails or is missing.
</member>
<member name="navigation_map" type="RID" setter="" getter="get_navigation_map">
The [RID] of this world's navigation map. Used by the [NavigationServer3D].
diff --git a/doc/tools/make_rst.py b/doc/tools/make_rst.py
index f59f2ff872..ce09361dfa 100755
--- a/doc/tools/make_rst.py
+++ b/doc/tools/make_rst.py
@@ -913,9 +913,9 @@ def format_codeblock(code_type, post_text, indent_level, state): # types: str,
if to_skip > indent_level:
print_error(
- "{}.xml: Four spaces should be used for indentation within ["
- + code_type
- + "].".format(state.current_class),
+ "{}.xml: Four spaces should be used for indentation within [{}].".format(
+ state.current_class, code_type
+ ),
state,
)
diff --git a/doc/translations/ar.po b/doc/translations/ar.po
index e611dbc51d..dcfbccb71c 100644
--- a/doc/translations/ar.po
+++ b/doc/translations/ar.po
@@ -480,7 +480,7 @@ msgstr ""
#, fuzzy
msgid ""
"Compares two values by checking their actual contents, recursing into any "
-"`Array` or `Dictionary` up to its deepest level.\n"
+"[Array] or [Dictionary] up to its deepest level.\n"
"This compares to [code]==[/code] in a number of ways:\n"
"- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/"
"code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] "
@@ -545,7 +545,7 @@ msgid ""
"- 1.0: Linear\n"
"- Greater than 1.0 (exclusive): Ease in\n"
"[/codeblock]\n"
-"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.4/img/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/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]."
@@ -1258,7 +1258,7 @@ msgid ""
"[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/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/img/"
"smoothstep_ease_comparison.png]Comparison between smoothstep() and ease(x, "
"-1.6521) return values[/url]"
msgstr ""
@@ -3543,6 +3543,12 @@ msgstr ""
#: doc/classes/@GlobalScope.xml
msgid ""
+"Hints that an integer property is a bitmask using the optionally named 2D "
+"navigation layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml
+msgid ""
"Hints that an integer property is a bitmask using the optionally named 3D "
"render layers."
msgstr ""
@@ -3555,6 +3561,12 @@ msgstr ""
#: doc/classes/@GlobalScope.xml
msgid ""
+"Hints that an integer property is a bitmask using the optionally named 3D "
+"navigation layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml
+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]."
@@ -8532,7 +8544,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/AStar.xml
+#: doc/classes/AStar.xml doc/classes/AStar2D.xml
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[/"
@@ -8731,7 +8743,10 @@ msgid ""
msgstr ""
#: doc/classes/AStar2D.xml
-msgid "Returns whether there is a connection/segment between the given points."
+msgid ""
+"Returns whether there is a connection/segment between the given points. 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/AStar2D.xml
@@ -8748,10 +8763,6 @@ msgid ""
msgstr ""
#: doc/classes/AStar2D.xml
-msgid "Deletes the segment between the given points."
-msgstr ""
-
-#: doc/classes/AStar2D.xml
msgid ""
"Returns the closest position to [code]to_position[/code] that resides inside "
"a segment between two connected points.\n"
@@ -8936,7 +8947,9 @@ msgid ""
"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."
+"transmit audio over the network. When capturing audio data from a "
+"microphone, the format of the samples will be stereo 32-bit floating point "
+"PCM."
msgstr ""
#: doc/classes/AudioEffectCapture.xml
@@ -13785,7 +13798,7 @@ msgid ""
msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
-#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/Navigation2D.xml
msgid "Returns the object's [RID]."
msgstr ""
@@ -19269,11 +19282,15 @@ msgid ""
msgstr ""
#: doc/classes/CurveTexture.xml
-msgid "The [code]curve[/code] rendered onto the texture."
-msgstr ""
+#, fuzzy
+msgid "The [Curve] that is rendered onto the texture."
+msgstr "ÙŠÙØ±Ø¬Ø¹ جيب المَعلم."
#: doc/classes/CurveTexture.xml
-msgid "The width of the texture."
+msgid ""
+"The width of the texture (in pixels). Higher values make it possible to "
+"represent high-frequency data better (such as sudden direction changes), at "
+"the cost of increased generation time and memory usage."
msgstr ""
#: doc/classes/CylinderMesh.xml
@@ -19559,6 +19576,13 @@ msgid "Returns the list of keys in the [Dictionary]."
msgstr ""
#: doc/classes/Dictionary.xml
+msgid ""
+"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, "
+"duplicate keys will not be copied over, unless [code]overwrite[/code] is "
+"[code]true[/code]."
+msgstr ""
+
+#: doc/classes/Dictionary.xml
#, fuzzy
msgid "Returns the number of keys in the dictionary."
msgstr "ÙŠÙØ±Ø¬Ø¹ باقي قسمة كل من Ø§Ù„Ù…ÙØªØ¬Ù‡ÙŠÙ† (الشعاعين)."
@@ -21499,9 +21523,23 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide a state data you want to be saved, like view "
+"position, grid settings, folding, etc. 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). This data is automatically saved for "
+"each scene in an [code]editstate[/code] file in the editor metadata folder. "
+"If you want to store global (scene-independent) editor data for your plugin, "
+"you can use [method get_window_layout] instead.\n"
+"Use [method set_state] to restore your saved state.\n"
+"[b]Note:[/b] This method should not be used to save important settings that "
+"should persist with the project.\n"
+"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be "
+"stored and restored correctly.\n"
+"[codeblock]\n"
+"func get_state():\n"
+" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n"
+" return state\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -21512,9 +21550,18 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide the GUI layout of the plugin or any other "
+"data you want to be stored. 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). The data is stored in the "
+"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n"
+"Use [method set_window_layout] to restore your saved layout.\n"
+"[codeblock]\n"
+"func get_window_layout(configuration):\n"
+" configuration.set_value(\"MyPlugin\", \"window_position\", $Window."
+"position)\n"
+" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -21627,11 +21674,30 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the state saved by [method get_state]."
+msgid ""
+"Restore the state saved by [method get_state]. This method is called when "
+"the current scene tab is changed in the editor.\n"
+"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise "
+"it will not be recognized and this method will not be called.\n"
+"[codeblock]\n"
+"func set_state(data):\n"
+" zoom = data.get(\"zoom\", 1.0)\n"
+" preferred_color = data.get(\"my_color\", Color.white)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the plugin GUI layout saved by [method get_window_layout]."
+msgid ""
+"Restore the plugin GUI layout and data saved by [method get_window_layout]. "
+"This method is called for every plugin on editor startup. Use the provided "
+"[code]configuration[/code] file to read your saved data.\n"
+"[codeblock]\n"
+"func set_window_layout(configuration):\n"
+" $Window.position = configuration.get_value(\"MyPlugin\", "
+"\"window_position\", Vector2())\n"
+" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", "
+"Color.white)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -26277,7 +26343,8 @@ msgid ""
"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])."
+"at fixed steps (see [member width]). See also [GradientTexture2D] and "
+"[CurveTexture]."
msgstr ""
#: doc/classes/GradientTexture.xml
@@ -26299,7 +26366,8 @@ msgid ""
"repeat] types using colors obtained from the gradient. 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] and [member height])."
+"[member width] and [member height]). See also [GradientTexture] and "
+"[CurveTexture]."
msgstr ""
#: doc/classes/GradientTexture2D.xml
@@ -27107,6 +27175,12 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+msgid ""
+"If [code]true[/code], this GridMap uses cell navmesh resources to create "
+"navigation regions."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid "If [code]true[/code], grid items are centered on the X axis."
msgstr ""
@@ -27157,6 +27231,10 @@ msgid "The assigned [MeshLibrary]."
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+msgid "The navigation layers the GridMap generates its navigation regions in."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
"Overrides the default friction and bounce physics properties for the whole "
"[GridMap]."
@@ -28380,7 +28458,7 @@ msgid ""
" # 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 body = to_json({\"name\": \"Godette\"})\n"
" error = http_request.request(\"https://httpbin.org/post\", [], true, "
"HTTPClient.METHOD_POST, body)\n"
" if error != OK:\n"
@@ -29549,7 +29627,7 @@ msgstr ""
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 "
+"([member 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 "
@@ -29698,10 +29776,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Returns the mouse mode. See the constants for more information."
-msgstr ""
-
-#: doc/classes/Input.xml
msgid ""
"Gets an input vector by specifying four actions for the positive and "
"negative X and Y axes.\n"
@@ -29895,24 +29969,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Sets the mouse mode. See the constants for more information."
-msgstr ""
-
-#: doc/classes/Input.xml
-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
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 "
@@ -29948,6 +30004,24 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
+msgid "Controls the mouse mode. See [enum MouseMode] for more information."
+msgstr ""
+
+#: doc/classes/Input.xml
+msgid ""
+"If [code]true[/code], similar input events sent by the operating system are "
+"accumulated. 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 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
msgid "Emitted when a joypad device has been connected or disconnected."
msgstr ""
@@ -30255,8 +30329,8 @@ msgstr ""
#: doc/classes/InputEventJoypadButton.xml
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]."
+"Represents the pressure the user puts on the button with their finger, if "
+"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]."
msgstr ""
#: doc/classes/InputEventJoypadMotion.xml
@@ -30519,9 +30593,9 @@ 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 "
+"at most. If you need more precise input reporting, set [member Input."
+"use_accumulated_input] to [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."
@@ -31009,7 +31083,18 @@ msgid ""
"[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."
+"fixed_column_width] greater than zero to wrap the text.\n"
+"[b]Incremental search:[/b] Like [PopupMenu] and [Tree], [ItemList] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/ItemList.xml
@@ -34760,12 +34845,18 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Returns the override [Material] for a surface of the [Mesh] resource.\n"
+"[b]Note:[/b] This function only returns [i]override[/i] materials associated "
+"with this [MeshInstance]. Consider using [method get_active_material] or "
+"[method Mesh.surface_get_material] to get materials associated with the "
+"[Mesh] resource."
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the number of surface materials."
-msgstr ""
+#, fuzzy
+msgid "Returns the number of surface override materials."
+msgstr "ÙŠÙØ±Ø¬Ø¹ باقي قسمة كل من Ø§Ù„Ù…ÙØªØ¬Ù‡ÙŠÙ† (الشعاعين)."
#: doc/classes/MeshInstance.xml
msgid ""
@@ -34801,7 +34892,10 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Sets the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Sets the override [Material] for the specified surface of the [Mesh] "
+"resource. This material is associated with this [MeshInstance] rather than "
+"with the [Mesh] resource."
msgstr ""
#: doc/classes/MeshInstance.xml
@@ -34832,9 +34926,10 @@ msgstr ""
#: doc/classes/MeshInstance2D.xml
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\"."
+"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be "
+"automatically created from an existing [Sprite] via a tool in the editor "
+"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to "
+"MeshInstance2D[/b] at the top of the 2D editor viewport."
msgstr ""
#: doc/classes/MeshInstance2D.xml
@@ -35599,6 +35694,9 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"Provides navigation and pathfinding within a collection of "
"[NavigationMesh]es. By default, these will be automatically collected from "
"child [NavigationMeshInstance] nodes. In addition to basic pathfinding, this "
@@ -35639,7 +35737,15 @@ msgid ""
msgstr ""
#: doc/classes/Navigation.xml
+#, fuzzy
+msgid "Returns the [RID] of the navigation map on the [NavigationServer]."
+msgstr "ÙŠÙØ±Ø¬Ø¹ جيب المَعلم."
+
+#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"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, "
@@ -35661,16 +35767,31 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation.get_simple_path] path query."
+msgstr ""
+
+#: doc/classes/Navigation.xml
+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/Navigation.xml doc/classes/Navigation2DServer.xml
+#: doc/classes/NavigationServer.xml
+msgid ""
+"Emitted when a navigation map is updated, when a region moves or is modified."
+msgstr ""
+
#: doc/classes/Navigation2D.xml
msgid "2D navigation and pathfinding node."
msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -35690,6 +35811,9 @@ msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -35699,6 +35823,12 @@ msgstr ""
msgid "The XY plane cell size to use for fields."
msgstr ""
+#: doc/classes/Navigation2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation2D.get_simple_path] path query."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml
msgid "Server interface for low-level 2D navigation access."
msgstr ""
@@ -35715,8 +35845,12 @@ msgid ""
"through scripts.\n"
"For two regions to be connected to each other, they must share a similar "
"edge. An edge is considered connected to another if both of its two vertices "
-"are at a distance less than [member Navigation.edge_connection_margin] to "
-"the respective other edge's vertex.\n"
+"are at a distance less than navigation map [code]edge_connection_margin[/"
+"code] to the respective other edge's vertex.\n"
+"You may assign navigation layers to regions with [method Navigation2DServer."
+"region_set_navigation_layers], which then can be checked upon when "
+"requesting a path with [method Navigation2DServer.map_get_path]. This allows "
+"allowing or forbidding some areas to 2D objects.\n"
"To use the collision avoidance system, you may use agents. You can set an "
"agent's target velocity, then the servers will emit a callback with a "
"modified velocity.\n"
@@ -35744,7 +35878,17 @@ msgid "Returns [code]true[/code] if the map got changed the previous frame."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Callback called at the end of the RVO process."
+msgid ""
+"Callback called at the end of the RVO process. If a callback is created "
+"manually and the agent is placed on a navigation map it will calculate "
+"avoidance for the agent and dispatch the calculated [code]safe_velocity[/"
+"code] to the [code]receiver[/code] object with a signal to the chosen "
+"[code]method[/code] name.\n"
+"[b]Note:[/b] Created callbacks are always processed independently of the "
+"SceneTree state as long as the agent is on a navigation map and not freed. "
+"To disable the dispatch of a callback from an agent use [method "
+"agent_set_callback] again with a [code]null[/code] object as the "
+"[code]receiver[/code]."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -35805,15 +35949,55 @@ msgid "Destroys the given RID."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns all created navigation map [RID]s on the NavigationServer. This "
+"returns both 2D and 3D created navigation maps as there is technically no "
+"distinction between them."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Create a new map."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"This function immediately forces synchronization of the specified navigation "
+"[code]map[/code] [RID]. By default navigation maps are only synchronized at "
+"the end of each physics frame. This function can be used to immediately "
+"(re)calculate all the navigation meshes and region connections of the "
+"navigation map. This makes it possible to query a navigation path for a "
+"changed map immediately and in the same frame (multiple times if needed).\n"
+"Due to technical restrictions the current NavigationServer command queue "
+"will be flushed. This means all already queued update commands for this "
+"physics frame will be executed, even those intended for other maps, regions "
+"and agents not part of the specified map. The expensive computation of the "
+"navigation meshes and region connections of a map will only be done for the "
+"specified map. Other maps will receive the normal synchronization at the end "
+"of the physics frame. Should the specified map receive changes after the "
+"forced update it will update again as well when the other maps receive their "
+"update.\n"
+"Avoidance processing and dispatch of the [code]safe_velocity[/code] signals "
+"is untouched by this function and continues to happen for all maps and "
+"agents at the end of the physics frame.\n"
+"[b]Note:[/b] With great power comes great responsibility. This function "
+"should only be used by users that really know what they are doing and have a "
+"good reason for it. Forcing an immediate update of a navigation map requires "
+"locking the NavigationServer and flushing the entire NavigationServer "
+"command queue. Not only can this severely impact the performance of a game "
+"but it can also introduce bugs if used inappropriately without much "
+"foresight."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns all navigation agents [RID]s that are currently assigned to the "
"requested navigation [code]map[/code]."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
#, fuzzy
msgid "Returns the map cell size."
@@ -35838,7 +36022,10 @@ msgid ""
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Returns the navigation path to reach the destination from the origin."
+msgid ""
+"Returns the navigation path to reach the destination from the origin. "
+"[code]navigation_layers[/code] is a bitmask of all region layers that are "
+"allowed to be in the path."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -35857,6 +36044,12 @@ msgstr "ÙŠÙØ±Ø¬Ø¹ جيب التمام \"cosine \" لقيمة المَعلم."
msgid "Sets the map active."
msgstr "ÙŠÙØ±Ø¬Ø¹ قيمة الجيب العكسية للمَعلم."
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/"
+"b] Currently not implemented."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Set the map cell size used to weld the navigation mesh polygons."
msgstr ""
@@ -35872,15 +36065,78 @@ msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"Returns the ending point of a connection door. [code]connection[/code] is an "
+"index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns the starting point of a connection door. [code]connection[/code] is "
+"an index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns how many connections this [code]region[/code] has with other regions "
+"in the map."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]."
+msgstr "ÙŠÙØ±Ø¬Ø¹ باقي قسمة كل من Ø§Ù„Ù…ÙØªØ¬Ù‡ÙŠÙ† (الشعاعين)."
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns the navigation map [RID] the requested [code]region[/code] is "
"currently assigned to."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
#, fuzzy
+msgid "Returns the region's navigation layers."
+msgstr "ÙŠÙØ±Ø¬Ø¹ جيب المَعلم."
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]."
+msgstr "ÙŠÙØ±Ø¬Ø¹ جيب المَعلم."
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns [code]true[/code] if the provided [code]point[/code] in world space "
+"is currently owned by the provided navigation [code]region[/code]. Owned in "
+"this context means that one of the region's navigation mesh polygon faces "
+"has a possible position at the closest distance to this point compared to "
+"all other navigation meshes from other navigation regions that are also "
+"registered on the navigation map of the provided region.\n"
+"If multiple navigation meshes have positions at equal distance the "
+"navigation region whose polygons are processed first wins the ownership. "
+"Polygons are processed in the same order that navigation regions were "
+"registered on the NavigationServer.\n"
+"[b]Note:[/b] If navigation meshes from different navigation regions overlap "
+"(which should be avoided in general) the result might not be what is "
+"expected."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]."
+msgstr "ÙŠÙØ±Ø¬Ø¹ جيب المَعلم."
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
msgid "Sets the map for the region."
msgstr "ÙŠÙØ±Ø¬Ø¹ جيب المَعلم."
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method Navigation2DServer.map_get_path])."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
#, fuzzy
msgid "Sets the navigation mesh for the region."
@@ -35890,6 +36146,11 @@ msgstr "ÙŠÙØ±Ø¬Ø¹ القيمة المعاكسة للمَعلم."
msgid "Sets the global transformation for the region."
msgstr ""
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]."
+msgstr "ÙŠÙØ±Ø¬Ø¹ جيب المَعلم."
+
#: doc/classes/NavigationAgent.xml
msgid "3D agent used in navigation for collision avoidance."
msgstr ""
@@ -35899,9 +36160,16 @@ msgid ""
"3D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationAgent] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World] navigation map. If this node is a child of a [Navigation] "
+"node it will register to the navigation map of the navigation node or the "
+"function [method set_navigation] can be used to set the navigation node "
+"directly. [NavigationAgent] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -35919,7 +36187,15 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-msgid "Returns the path from start to finish in global coordinates."
+msgid ""
+"Returns this agent's current path from start to finish in global "
+"coordinates. The path only updates when the target location is changed or "
+"the agent requires a repath. The path array is not intended to be used in "
+"direct path movement as the agent has its own internal path logic that would "
+"get corrupted by changing the path array manually. Use the intended [method "
+"get_next_location] once every physics frame to receive the next path point "
+"for the agents movement as this function also updates the internal path "
+"logic."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -35935,11 +36211,24 @@ msgid ""
"system."
msgstr ""
-#: doc/classes/NavigationAgent.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"Returns a [Vector3] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the origin of the agent's parent."
+"Returns the [RID] of the navigation map for this NavigationAgent node. This "
+"function returns always the map set on the NavigationAgent node and not the "
+"map of the abstract agent on the NavigationServer. If the agent map is "
+"changed directly with the NavigationServer API the NavigationAgent node will "
+"not be aware of the map change. Use [method set_navigation_map] to change "
+"the navigation map for the NavigationAgent and also update the agent on the "
+"NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
+"Returns the next location in global coordinates that can be moved to, making "
+"sure that there are no static objects in the way. If the agent does not have "
+"a navigation path, it will return the position of the agent's parent. The "
+"use of this function once every physics frame is required to update the "
+"internal path logic of the NavigationAgent."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -35981,6 +36270,12 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"Sets the [RID] of the navigation map this NavigationAgent node should use "
+"and also updates the [code]agent[/code] on the NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"Sets the user desired final location. This will clear the current navigation "
"path."
msgstr ""
@@ -35993,7 +36288,13 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml
-msgid "The agent height offset to match the navigation mesh height."
+msgid ""
+"The NavigationAgent height offset is subtracted from the y-axis value of any "
+"vector path position for this NavigationAgent. The NavigationAgent height "
+"offset does not change or influence the navigation mesh or pathfinding query "
+"result. Additional navigation maps that use regions with navigation meshes "
+"that the developer baked with appropriate agent radius or height values are "
+"required to support different-sized agents."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -36020,26 +36321,53 @@ msgstr ""
msgid "The maximum speed that an agent can move."
msgstr ""
+#: doc/classes/NavigationAgent.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "The distance to search for other agents."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"The distance threshold before a path point is considered to be reached. This "
+"will allow an agent to not have to hit a path point on the path exactly, but "
+"in the area. If this value is set to high the NavigationAgent will skip "
+"points on the path which can lead to leaving the navigation mesh. If this "
+"value is set to low the NavigationAgent will be stuck in a repath loop cause "
+"it will constantly overshoot or undershoot the distance to the next point on "
+"each physics frame update."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"The maximum distance the agent is allowed away from the ideal path to the "
"final location. This can happen due to trying to avoid collisions. When the "
"maximum distance is exceeded, it recalculates the ideal path."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-msgid "The radius of the agent."
+msgid ""
+"The radius of the avoidance agent. This is the \"body\" of the avoidance "
+"agent and not the avoidance maneuver starting radius (which is controlled by "
+"[member neighbor_dist]).\n"
+"Does not affect normal pathfinding. To change an actor's pathfinding radius "
+"bake [NavigationMesh] resources with a different [member NavigationMesh."
+"agent_radius] property and use different navigation maps for each actor size."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"The distance threshold before a target is considered to be reached. This "
-"will allow an agent to not have to hit a point on the path exactly, but in "
-"the area."
+"The distance threshold before the final target point is considered to be "
+"reached. This will allow an agent to not have to hit the point of the final "
+"target exactly, but only the area. If this value is set to low the "
+"NavigationAgent will be stuck in a repath loop cause it will constantly "
+"overshoot or undershoot the distance to the final target point on each "
+"physics frame update."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -36082,9 +36410,16 @@ msgid ""
"2D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationAgent2D] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World2D] navigation map. If this node is a child of a "
+"[Navigation2D] node it will register to the navigation map of the navigation "
+"node or the function [method set_navigation] can be used to set the "
+"navigation node directly. [NavigationAgent2D] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent2D.xml
@@ -36101,13 +36436,6 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent2D.xml
-msgid ""
-"Returns a [Vector2] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the position of the agent's parent."
-msgstr ""
-
-#: doc/classes/NavigationAgent2D.xml
#, fuzzy
msgid "Returns the [RID] of this agent on the [Navigation2DServer]."
msgstr "ÙŠÙØ±Ø¬Ø¹ جيب المَعلم."
@@ -36128,6 +36456,13 @@ msgid ""
"only be enabled on agents that currently require it."
msgstr ""
+#: doc/classes/NavigationAgent2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent2D] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationMesh.xml
msgid "A mesh to approximate the walkable areas and obstacles."
msgstr ""
@@ -36158,8 +36493,8 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
-"Returns whether the specified [code]bit[/code] of the [member geometry/"
-"collision_mask] is set."
+"Returns whether the specified [code]bit[/code] of the [member "
+"geometry_collision_mask] is set."
msgstr ""
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
@@ -36182,9 +36517,9 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/"
-"code] in the [member geometry/collision_mask].\n"
+"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]."
+"code] in the [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
@@ -36198,14 +36533,14 @@ 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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36217,7 +36552,7 @@ 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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36245,13 +36580,17 @@ msgstr ""
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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
-"If [code]true[/code], marks walkable spans as not walkable if the clearance "
-"above the span is less than [member agent/height]."
+"If the baking [AABB] has a volume the navigation mesh baking will be "
+"restricted to its enclosing area."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+msgid "The position offset applied to the [member filter_baking_aabb] [AABB]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36261,13 +36600,19 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]true[/code], marks non-walkable spans as walkable if their maximum "
-"is within [member agent/max_climb] of a walkable neighbor."
+"is within [member agent_max_climb] of a walkable neighbor."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+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
msgid ""
"The physics layers to scan for static colliders.\n"
-"Only used when [member geometry/parsed_geometry_type] is [constant "
+"Only used when [member geometry_parsed_geometry_type] is [constant "
"PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]."
msgstr ""
@@ -36286,7 +36631,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"The name of the group to scan for geometry.\n"
-"Only used when [member geometry/source_geometry_mode] is [constant "
+"Only used when [member geometry_source_geometry_mode] is [constant "
"SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant "
"SOURCE_GEOMETRY_GROUPS_EXPLICIT]."
msgstr ""
@@ -36349,7 +36694,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Parses [StaticBody] colliders as geometry. The collider should be in any of "
-"the layers specified by [member geometry/collision_mask]."
+"the layers specified by [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36371,13 +36716,13 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Scans nodes in a group and their child nodes recursively for geometry. The "
-"group is specified by [member geometry/source_group_name]."
+"group is specified by [member geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Uses nodes in a group for geometry. The group is specified by [member "
-"geometry/source_group_name]."
+"geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36419,7 +36764,15 @@ msgid ""
"geometry for walkable terrain suitable to [NavigationMesh] agent properties "
"by creating a voxel world around the meshes bounding area.\n"
"The finalized navigation mesh is then returned and stored inside the "
-"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes."
+"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] "
+"nodes.\n"
+"[b]Note:[/b] Using meshes to not only define walkable surfaces but also "
+"obstruct navigation baking does not always work. The navigation baking has "
+"no concept of what is a geometry \"inside\" when dealing with mesh source "
+"geometry and this is intentional. Depending on current baking parameters, as "
+"soon as the obstructing mesh is large enough to fit a navigation mesh area "
+"inside, the baking will generate navigation mesh areas that are inside the "
+"obstructing source geometry mesh."
msgstr ""
#: doc/classes/NavigationMeshGenerator.xml
@@ -36427,8 +36780,8 @@ msgid ""
"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child "
"nodes under the provided [code]root_node[/code] or a specific group of nodes "
"for potential source geometry. The parse behavior can be controlled with the "
-"[member NavigationMesh.geometry/parsed_geometry_type] and [member "
-"NavigationMesh.geometry/source_geometry_mode] properties on the "
+"[member NavigationMesh.geometry_parsed_geometry_type] and [member "
+"NavigationMesh.geometry_source_geometry_mode] properties on the "
"[NavigationMesh] resource."
msgstr ""
@@ -36446,8 +36799,21 @@ msgstr ""
#: doc/classes/NavigationMeshInstance.xml
msgid ""
"An instance of a [NavigationMesh]. It tells the [Navigation] node what can "
-"be navigated and what cannot, based on the [NavigationMesh] resource. This "
-"should be a child of a [Navigation] node."
+"be navigated and what cannot, based on the [NavigationMesh] resource.\n"
+"By default this node will register to the default [World] navigation map. If "
+"this node is a child of a [Navigation] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method NavigationServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The cost of entering this region from another region can be controlled with "
+"the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The cost of traveling distances inside this region can be controlled with "
+"the [member travel_cost] multiplier."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
@@ -36476,10 +36842,34 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding enters this region's navmesh from another regions navmesh "
+"the [code]enter_cost[/code] value is added to the path distance for "
+"determining the shortest path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationMesh] "
+"belongs to. On path requests with [method NavigationServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
msgid "The [NavigationMesh] resource to use."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding moves inside this region's navmesh the traveled distances "
+"are multiplied with [code]travel_cost[/code] for determining the shortest "
+"path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
msgid "Notifies when the navigation mesh bake operation is completed."
msgstr ""
@@ -36496,7 +36886,9 @@ msgid ""
"3D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationObstacle] is physics safe."
+"[NavigationObstacle] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle.xml
@@ -36537,7 +36929,9 @@ msgid ""
"2D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationObstacle2D] is physics safe."
+"[NavigationObstacle2D] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle2D.xml
@@ -36618,6 +37012,14 @@ msgstr ""
#: doc/classes/NavigationPolygon.xml
msgid ""
+"Returns the [NavigationMesh] resulting from this navigation polygon. This "
+"navmesh can be used to update the navmesh of a region with the [method "
+"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server "
+"behind the scene)."
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml
+msgid ""
"Returns a [PoolVector2Array] containing the vertices of an outline that was "
"created in the editor or by script."
msgstr ""
@@ -36654,6 +37056,30 @@ msgid ""
msgstr ""
#: doc/classes/NavigationPolygonInstance.xml
+msgid "A region of the 2D navigation map."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A region of the navigation map. It tells the [Navigation2DServer] what can "
+"be navigated and what cannot, based on its [NavigationPolygon] resource.\n"
+"By default this node will register to the default [World2D] navigation map. "
+"If this node is a child of a [Navigation2D] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The pathfinding cost of entering this region from another region can be "
+"controlled with the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The pathfinding cost of traveling distances inside this region can be "
+"controlled with the [member travel_cost] multiplier."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
msgid ""
"Returns the [RID] of this region on the [Navigation2DServer]. Combined with "
"[method Navigation2DServer.map_get_closest_point_owner] can be used to "
@@ -36661,6 +37087,22 @@ msgid ""
"navigation map."
msgstr ""
+#: doc/classes/NavigationPolygonInstance.xml
+msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationPolygon] "
+"belongs to. On path requests with [method Navigation2DServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid "The [NavigationPolygon] resource to use."
+msgstr ""
+
#: doc/classes/NavigationServer.xml
msgid "Server interface for low-level 3D navigation access."
msgstr ""
@@ -36740,6 +37182,12 @@ msgid "Bakes the navigation mesh."
msgstr ""
#: doc/classes/NavigationServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method NavigationServer.map_get_path])."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
msgid "Control activation of this server."
msgstr ""
@@ -38206,13 +38654,19 @@ msgstr ""
#: doc/classes/Node.xml
msgid ""
"Emitted when a child node enters the scene tree, either because it entered "
-"on its own or because this node entered with it."
+"on its own or because this node entered with it.\n"
+"This signal is emitted [i]after[/i] the child node's own [constant "
+"NOTIFICATION_ENTER_TREE] and [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
msgid ""
-"Emitted when a child node exits the scene tree, either because it exited on "
-"its own or because this node exited."
+"Emitted when a child node is about to exit the scene tree, either because it "
+"is being removed or freed directly, or because this node is exiting the "
+"tree.\n"
+"When this signal is received, the child [code]node[/code] is still in the "
+"tree and valid. This signal is emitted [i]after[/i] the child node's own "
+"[signal tree_exiting] and [constant NOTIFICATION_EXIT_TREE]."
msgstr ""
#: doc/classes/Node.xml
@@ -38224,7 +38678,10 @@ msgid "Emitted when the node is renamed."
msgstr ""
#: doc/classes/Node.xml
-msgid "Emitted when the node enters the tree."
+msgid ""
+"Emitted when the node enters the tree.\n"
+"This signal is emitted [i]after[/i] the related [constant "
+"NOTIFICATION_ENTER_TREE] notification."
msgstr ""
#: doc/classes/Node.xml
@@ -38234,15 +38691,21 @@ msgstr ""
#: doc/classes/Node.xml
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)."
+"the right place for de-initialization (or a \"destructor\", if you will).\n"
+"This signal is emitted [i]before[/i] the related [constant "
+"NOTIFICATION_EXIT_TREE] notification."
msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node enters a [SceneTree]."
+msgid ""
+"Notification received when the node enters a [SceneTree].\n"
+"This notification is emitted [i]before[/i] the related [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node is about to exit a [SceneTree]."
+msgid ""
+"Notification received when the node is about to exit a [SceneTree].\n"
+"This notification is emitted [i]after[/i] the related [signal tree_exiting]."
msgstr ""
#: doc/classes/Node.xml
@@ -38503,7 +38966,13 @@ msgid "Rotation in degrees, relative to the node's parent."
msgstr ""
#: doc/classes/Node2D.xml
-msgid "The node's scale. Unscaled value: [code](1, 1)[/code]."
+msgid ""
+"The node's scale. Unscaled value: [code](1, 1)[/code].\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
#: doc/classes/Node2D.xml
@@ -39948,6 +40417,10 @@ msgid ""
" if argument.find(\"=\") > -1:\n"
" var key_value = argument.split(\"=\")\n"
" arguments[key_value[0].lstrip(\"--\")] = key_value[1]\n"
+" else:\n"
+" # Options without an argument will be present in the dictionary,\n"
+" # with the value set to an empty string.\n"
+" arguments[argument.lstrip(\"--\")] = \"\"\n"
"[/codeblock]"
msgstr ""
@@ -40604,8 +41077,15 @@ msgstr ""
msgid ""
"Moves the file or directory to the system's recycle bin. See also [method "
"Directory.remove].\n"
+"The method takes only global paths, so you may need to use [method "
+"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/"
+"code] as it will not work in exported project.\n"
"[b]Note:[/b] If the user has disabled the recycle bin on their system, the "
-"file will be permanently deleted instead."
+"file will be permanently deleted instead.\n"
+"[codeblock]\n"
+"var file_to_remove = \"user://slot1.sav\"\n"
+"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/OS.xml
@@ -45463,7 +45943,18 @@ msgstr ""
#: doc/classes/PopupMenu.xml
msgid ""
"[PopupMenu] is a [Control] that displays a list of options. They are popular "
-"in toolbars or context menus."
+"in toolbars or context menus.\n"
+"[b]Incremental search:[/b] Like [ItemList] and [Tree], [PopupMenu] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/PopupMenu.xml
@@ -46973,7 +47464,16 @@ msgid ""
msgstr ""
#: doc/classes/ProjectSettings.xml
-msgid "Message to be displayed before the backtrace when the engine crashes."
+msgid ""
+"Message to be displayed before the backtrace when the engine crashes. By "
+"default, this message is only used in exported projects due to the editor-"
+"only override applied to this setting."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Editor-only override for [member debug/settings/crash_handler/message]. Does "
+"not affect exported projects in debug or release mode."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -47218,6 +47718,18 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default naming style for scene files to infer from their root nodes. "
+"Possible options are:\n"
+"- [code]0[/code] (Auto): Uses the scene root name as is without changing its "
+"casing.\n"
+"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase "
+"casing.\n"
+"- [code]2[/code] (snake_case): Converts the scene root name to snake_case "
+"casing."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -47443,6 +47955,198 @@ msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 1."
msgstr ""
@@ -47651,6 +48355,198 @@ msgid "Optional name for the 2D render layer 9."
msgstr ""
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 1."
msgstr ""
@@ -47918,6 +48814,49 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default cell height for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_height].\n"
+"[b]Note:[/b] Currently not implemented."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 2D navigation maps. See [method "
+"Navigation2DServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell height for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_height]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 3D navigation maps. See [method "
+"NavigationServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default map up vector for 3D navigation maps. See [method NavigationServer."
+"map_set_up]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -48591,20 +49530,28 @@ msgid ""
"cause.\n"
"The default value is a conservative one, so you are advised to tweak it "
"according to the hardware you are targeting.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"The default is a very conservative override for [code]rendering/gles3/"
-"shaders/max_concurrent_compiles[/code].\n"
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
"Depending on the specific devices you are targeting, you may want to raise "
"it.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
+"Depending on the specific browsers you are targeting, you may want to raise "
+"it.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -48612,19 +49559,28 @@ msgid ""
"The maximum size, in megabytes, that the ubershader cache can grow up to. On "
"startup, the least recently used entries will be deleted until the total "
"size is within bounds.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/ubershader_cache_size_mb[/"
-"code], so a smaller maximum size can be configured for mobile platforms, "
-"where storage space is more limited.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for mobile platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for web platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] Currently, shader caching is generally unavailable on web "
+"platforms.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -48656,14 +49612,22 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/shader_compilation_mode[/"
-"code], so asynchronous compilation can be disabled for mobile.\n"
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on mobile platforms.\n"
"You may want to do that since mobile GPUs generally won't support "
"ubershaders due to their complexity."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on web platforms.\n"
+"You may want to do that since certain browsers (especially on mobile "
+"platforms) generally won't support ubershaders due to their complexity."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
@@ -49420,7 +50384,6 @@ msgid ""
"- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/"
"code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, "
"small grid radius values may lead to unwanted groupings.\n"
-"[/codeblock]\n"
"[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more "
"effective and faster [VisibilityNotifier] functionality. For most use cases, "
"[method Vector3.distance_to] or [method Vector3.distance_squared_to] are "
@@ -51569,6 +52532,22 @@ msgid "Makes text fill width."
msgstr ""
#: doc/classes/RichTextLabel.xml
+msgid "Aligns top of the inline image to the top of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns center of the inline image to the center of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns bottom of the inline image to the baseline of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns bottom of the inline image to the bottom of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
msgid "Each list item has a number marker."
msgstr ""
@@ -53306,8 +54285,8 @@ msgid ""
" yield(get_tree().create_timer(1.0), \"timeout\")\n"
" print(\"Timer ended.\")\n"
"[/codeblock]\n"
-"The timer will be automatically freed after its time elapses, so be aware "
-"that any reference you might have kept to it will become invalid."
+"The timer will be dereferenced after its time elapses. To preserve the "
+"timer, you can keep a reference to it. See [Reference]."
msgstr ""
#: doc/classes/SceneTreeTimer.xml
@@ -53339,24 +54318,23 @@ msgid ""
"manually (i.e. by using [code]Tween.new()[/code]) are invalid. They can't be "
"used for tweening values, but you can do manual interpolation with [method "
"interpolate_value].\n"
-"A [SceneTreeTween] animation is composed of a sequence of [Tweener]s, which "
-"by default are executed one after another. You can create a sequence by "
-"appending [Tweener]s to the [SceneTreeTween]. Animating something with a "
-"[Tweener] is called tweening. Example tweening sequence looks like this:\n"
+"A tween animation is created by adding [Tweener]s to the [SceneTreeTween] "
+"object, using [method tween_property], [method tween_interval], [method "
+"tween_callback] or [method tween_method]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1)\n"
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"This sequence will make the [code]$Sprite[/code] node turn red, then shrink "
-"and finally the [method Node.queue_free] is called to remove the sprite. See "
-"methods [method tween_property], [method tween_interval], [method "
-"tween_callback] and [method tween_method] for more usage information.\n"
+"This sequence will make the [code]$Sprite[/code] node turn red, then shrink, "
+"before finally calling [method Node.queue_free] to free the sprite. "
+"[Tweener]s are executed one after another by default. This behavior can be "
+"changed using [method parallel] and [method set_parallel].\n"
"When a [Tweener] is created with one of the [code]tween_*[/code] methods, a "
"chained method call can be used to tweak the properties of this [Tweener]. "
-"For example, if you want to set different transition type in the above "
-"example, you can do:\n"
+"For example, if you want to set a different transition type in the above "
+"example, you can use [method set_trans]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1).set_trans(Tween."
@@ -53365,8 +54343,9 @@ msgid ""
"TRANS_BOUNCE)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Most of the [SceneTreeTween] methods can be chained this way too. In this "
-"example the [SceneTreeTween] is bound and have set a default transition:\n"
+"Most of the [SceneTreeTween] methods can be chained this way too. In the "
+"following example the [SceneTreeTween] is bound to the running script's node "
+"and a default transition is set for its [Tweener]s:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween().bind_node(self).set_trans(Tween."
"TRANS_ELASTIC)\n"
@@ -53374,16 +54353,16 @@ msgid ""
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Another interesting use for [SceneTreeTween]s is animating arbitrary set of "
+"Another interesting use for [SceneTreeTween]s is animating arbitrary sets of "
"objects:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"for sprite in get_children():\n"
-" tween.tween_property(sprite, \"position\", Vector2(), 1)\n"
+" tween.tween_property(sprite, \"position\", Vector2(0, 0), 1)\n"
"[/codeblock]\n"
"In the example above, all children of a node are moved one after another to "
"position (0, 0).\n"
-"Some [Tweener]s use transitions and eases. The first accepts an [enum Tween."
+"Some [Tweener]s use transitions and eases. The first accepts a [enum Tween."
"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 Tween.EaseType] constant, and "
@@ -53395,7 +54374,7 @@ msgid ""
"tween_cheatsheet.png]Tween easing and transition types cheatsheet[/url]\n"
"[b]Note:[/b] All [SceneTreeTween]s will automatically start by default. To "
"prevent a [SceneTreeTween] from autostarting, you can call [method stop] "
-"immediately after it was created."
+"immediately after it is created."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53425,21 +54404,24 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
-"Processes the [SceneTreeTween] by given [code]delta[/code] value, in "
-"seconds. Mostly useful when the [SceneTreeTween] is paused, for controlling "
-"it manually. Can also be used to end the [SceneTreeTween] animation "
-"immediately, by using [code]delta[/code] longer than the whole duration.\n"
+"Processes the [SceneTreeTween] by the given [code]delta[/code] value, in "
+"seconds. This is mostly useful for manual control when the [SceneTreeTween] "
+"is paused. It can also be used to end the [SceneTreeTween] animation "
+"immediately, by setting [code]delta[/code] longer than the whole duration of "
+"the [SceneTreeTween] animation.\n"
"Returns [code]true[/code] if the [SceneTreeTween] still has [Tweener]s that "
"haven't finished.\n"
-"[b]Note:[/b] The [SceneTreeTween] will become invalid after finished, but "
-"you can call [method stop] after the step, to keep it and reset."
+"[b]Note:[/b] The [SceneTreeTween] will become invalid in the next processing "
+"frame after its animation finishes. Calling [method stop] after performing "
+"[method custom_step] instead keeps and resets the [SceneTreeTween]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Returns the total time in seconds the [SceneTreeTween] has been animating (i."
-"e. time since it started, not counting pauses etc.). The time is affected by "
-"[method set_speed_scale] and [method stop] will reset it to [code]0[/code].\n"
+"e. the time since it started, not counting pauses etc.). The time is "
+"affected by [method set_speed_scale], and [method stop] will reset it to "
+"[code]0[/code].\n"
"[b]Note:[/b] As it results from accumulating frame deltas, the time returned "
"after the [SceneTreeTween] has finished animating will be slightly greater "
"than the actual [SceneTreeTween] duration."
@@ -53475,11 +54457,10 @@ msgstr ""
msgid ""
"Returns whether the [SceneTreeTween] is valid. A valid [SceneTreeTween] is a "
"[SceneTreeTween] contained by the scene tree (i.e. the array from [method "
-"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). "
-"[SceneTreeTween] might become invalid when it has finished tweening or was "
-"killed, also when created with [code]Tween.new()[/code]. Invalid "
-"[SceneTreeTween] can't have [Tweener]s appended, because it can't animate "
-"them. You can however still use [method interpolate_value]."
+"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). A "
+"[SceneTreeTween] might become invalid when it has finished tweening, is "
+"killed, or when created with [code]SceneTreeTween.new()[/code]. Invalid "
+"[SceneTreeTween]s can't have [Tweener]s appended."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53519,16 +54500,15 @@ msgstr ""
msgid ""
"Sets the number of times the tweening sequence will be repeated, i.e. "
"[code]set_loops(2)[/code] will run the animation twice.\n"
-"Calling this method without arguments will make the [SceneTreeTween] run "
-"infinitely, until it is either killed by [method kill] or by freeing bound "
-"node, or all the animated objects have been freed (which makes further "
+"Calling this method without arguments will make the [Tween] run infinitely, "
+"until either it is killed with [method kill], the [Tween]'s bound node is "
+"freed, or all the animated objects have been freed (which makes further "
"animation impossible).\n"
"[b]Warning:[/b] Make sure to always add some duration/delay when using "
-"infinite loops. 0-duration looped animations (e.g. single [CallbackTweener] "
-"with no delay or [PropertyTweener] with invalid node) are equivalent to "
-"infinite [code]while[/code] loops and will freeze your game. If a "
-"[SceneTreeTween]'s lifetime depends on some node, always use [method "
-"bind_node]."
+"infinite loops. To prevent the game freezing, 0-duration looped animations "
+"(e.g. a single [CallbackTweener] with no delay) are stopped after a small "
+"number of loops, which may produce unexpected results. If a [Tween]'s "
+"lifetime depends on some node, always use [method bind_node]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53590,10 +54570,10 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Creates and appends an [IntervalTweener]. This method can be used to create "
-"delays in the tween animation, as an alternative for using the delay in "
-"other [Tweener]s or when there's no animation (in which case the "
-"[SceneTreeTween] acts as a timer). [code]time[/code] is the length of the "
-"interval, in seconds.\n"
+"delays in the tween animation, as an alternative to using the delay in other "
+"[Tweener]s, or when there's no animation (in which case the [SceneTreeTween] "
+"acts as a timer). [code]time[/code] is the length of the interval, in "
+"seconds.\n"
"Example: creating an interval in code execution.\n"
"[codeblock]\n"
"# ... some code\n"
@@ -53647,8 +54627,8 @@ msgid ""
"Creates and appends a [PropertyTweener]. This method tweens a "
"[code]property[/code] of an [code]object[/code] between an initial value and "
"[code]final_val[/code] in a span of time equal to [code]duration[/code], in "
-"seconds. The initial value by default is a value at the time the tweening of "
-"the [PropertyTweener] start. For example:\n"
+"seconds. The initial value by default is the property's value at the time "
+"the tweening of the [PropertyTweener] starts. For example:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"tween.tween_property($Sprite, \"position\", Vector2(100, 200), 1)\n"
@@ -53679,16 +54659,15 @@ msgid ""
"Emitted when the [SceneTreeTween] has finished all tweening. Never emitted "
"when the [SceneTreeTween] is set to infinite looping (see [method "
"set_loops]).\n"
-"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) after this signal "
-"is emitted, but it doesn't happen immediately, but on the next processing "
-"frame. Calling [method stop] inside the signal callback will preserve the "
-"[SceneTreeTween]."
+"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) in the next "
+"processing frame after this signal is emitted. Calling [method stop] inside "
+"the signal callback will prevent the [SceneTreeTween] from being removed."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Emitted when a full loop is complete (see [method set_loops]), providing the "
-"loop index. This signal is not emitted after final loop, use [signal "
+"loop index. This signal is not emitted after the final loop, use [signal "
"finished] instead for this case."
msgstr ""
@@ -53696,7 +54675,7 @@ msgstr ""
msgid ""
"Emitted when one step of the [SceneTreeTween] is complete, providing the "
"step index. One step is either a single [Tweener] or a group of [Tweener]s "
-"running parallelly."
+"running in parallel."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -55028,7 +56007,12 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-msgid "Scale part of the local transformation."
+msgid ""
+"Scale part of the local transformation.\n"
+"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, the scale values will either be all "
+"positive or all negative."
msgstr ""
#: doc/classes/Spatial.xml
@@ -57661,11 +58645,11 @@ msgstr ""
msgid ""
"Returns [code]true[/code] if this string contains a valid integer.\n"
"[codeblock]\n"
-"print(\"7\".is_valid_int()) # Prints \"True\"\n"
-"print(\"14.6\".is_valid_int()) # Prints \"False\"\n"
-"print(\"L\".is_valid_int()) # Prints \"False\"\n"
-"print(\"+3\".is_valid_int()) # Prints \"True\"\n"
-"print(\"-12\".is_valid_int()) # Prints \"True\"\n"
+"print(\"7\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"14.6\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"L\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"+3\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"-12\".is_valid_integer()) # Prints \"True\"\n"
"[/codeblock]"
msgstr ""
@@ -61140,6 +62124,11 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml
+#, fuzzy
+msgid "If [code]true[/code], this TileMap bakes a navigation region."
+msgstr "ÙŠÙØ±Ø¬Ø¹ جيب التمام \"cosine \" لقيمة المَعلم."
+
+#: doc/classes/TileMap.xml
msgid "If [code]true[/code], the cell's UVs will be clipped."
msgstr ""
@@ -61246,6 +62235,10 @@ msgid "The TileMap orientation mode. See [enum Mode] for possible values."
msgstr ""
#: doc/classes/TileMap.xml
+msgid "The navigation layers the TileMap generates its navigation regions in."
+msgstr ""
+
+#: doc/classes/TileMap.xml
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 "
@@ -62377,7 +63370,12 @@ msgstr ""
#: doc/classes/Transform2D.xml
msgid ""
"Returns a copy of the transform scaled by the given [code]scale[/code] "
-"factor, using matrix multiplication."
+"factor, using matrix multiplication.\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
#: doc/classes/Transform2D.xml
@@ -62533,7 +63531,18 @@ msgid ""
"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]."
+"to remove it from the [Tree].\n"
+"[b]Incremental search:[/b] Like [ItemList] and [PopupMenu], [Tree] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/Tree.xml
@@ -66060,11 +67069,12 @@ msgid "This enabler will stop [Particles2D] nodes."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _process function."
+msgid "This enabler will stop the parent's [method Node._process] function."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _physics_process function."
+msgid ""
+"This enabler will stop the parent's [method Node._physics_process] function."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
@@ -66104,6 +67114,16 @@ msgid "The VisibilityNotifier's bounding box."
msgstr ""
#: doc/classes/VisibilityNotifier.xml
+msgid ""
+"In addition to checking whether a node is on screen or within a [Camera]'s "
+"view, VisibilityNotifier can also optionally check whether a node is within "
+"a specified maximum distance when using a [Camera] with perspective "
+"projection. This is useful for throttling the performance requirements of "
+"nodes that are far away.\n"
+"[b]Note:[/b] This feature will be disabled if set to 0.0."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier.xml
msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view."
msgstr ""
@@ -70866,6 +71886,16 @@ msgid "The amount of shader rebinds in the frame."
msgstr ""
#: doc/classes/VisualServer.xml
+msgid ""
+"The peak amount of shaders that have been under compilation in the frame.\n"
+"This is useful to know when asynchronous shader compilation has finished for "
+"the current shaders on screen.\n"
+"[b]Note:[/b] For complete certainty, only assume there are no outstanding "
+"compilations when this value is zero for at least two frames in a row.\n"
+"Unimplemented in the GLES2 rendering backend, always returns 0."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
msgid "The amount of surface changes in the frame."
msgstr ""
@@ -74066,8 +75096,8 @@ msgstr ""
#: doc/classes/World.xml
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."
+"scenario, a navigation map and a sound space. Spatial nodes register their "
+"resources into the current world."
msgstr ""
#: doc/classes/World.xml
@@ -74082,11 +75112,17 @@ msgstr ""
#: doc/classes/World.xml
msgid ""
-"The World's fallback_environment will be used if the World's [Environment] "
-"fails or is missing."
+"The World's fallback environment will be used if [member environment] fails "
+"or is missing."
msgstr ""
#: doc/classes/World.xml
+#, fuzzy
+msgid ""
+"The [RID] of this world's navigation map. Used by the [NavigationServer]."
+msgstr "ÙŠÙØ±Ø¬Ø¹ جيب المَعلم."
+
+#: doc/classes/World.xml
msgid "The World's visual scenario."
msgstr ""
@@ -74101,8 +75137,8 @@ msgstr ""
#: doc/classes/World2D.xml
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."
+"visual scenario, a navigation map and a sound space. 2D nodes register their "
+"resources into the current 2D world."
msgstr ""
#: doc/classes/World2D.xml
@@ -74119,6 +75155,12 @@ msgid ""
msgstr ""
#: doc/classes/World2D.xml
+#, fuzzy
+msgid ""
+"The [RID] of this world's navigation map. Used by the [Navigation2DServer]."
+msgstr "ÙŠÙØ±Ø¬Ø¹ جيب المَعلم."
+
+#: doc/classes/World2D.xml
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."
diff --git a/doc/translations/ca.po b/doc/translations/ca.po
index ebf220d30b..8576fd5bf3 100644
--- a/doc/translations/ca.po
+++ b/doc/translations/ca.po
@@ -460,7 +460,7 @@ msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
msgid ""
"Compares two values by checking their actual contents, recursing into any "
-"`Array` or `Dictionary` up to its deepest level.\n"
+"[Array] or [Dictionary] up to its deepest level.\n"
"This compares to [code]==[/code] in a number of ways:\n"
"- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/"
"code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] "
@@ -507,7 +507,7 @@ msgid ""
"- 1.0: Linear\n"
"- Greater than 1.0 (exclusive): Ease in\n"
"[/codeblock]\n"
-"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.4/img/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/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]."
@@ -1214,7 +1214,7 @@ msgid ""
"[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/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/img/"
"smoothstep_ease_comparison.png]Comparison between smoothstep() and ease(x, "
"-1.6521) return values[/url]"
msgstr ""
@@ -3492,6 +3492,12 @@ msgstr ""
#: doc/classes/@GlobalScope.xml
msgid ""
+"Hints that an integer property is a bitmask using the optionally named 2D "
+"navigation layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml
+msgid ""
"Hints that an integer property is a bitmask using the optionally named 3D "
"render layers."
msgstr ""
@@ -3504,6 +3510,12 @@ msgstr ""
#: doc/classes/@GlobalScope.xml
msgid ""
+"Hints that an integer property is a bitmask using the optionally named 3D "
+"navigation layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml
+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]."
@@ -8479,7 +8491,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/AStar.xml
+#: doc/classes/AStar.xml doc/classes/AStar2D.xml
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[/"
@@ -8678,7 +8690,10 @@ msgid ""
msgstr ""
#: doc/classes/AStar2D.xml
-msgid "Returns whether there is a connection/segment between the given points."
+msgid ""
+"Returns whether there is a connection/segment between the given points. 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/AStar2D.xml
@@ -8695,10 +8710,6 @@ msgid ""
msgstr ""
#: doc/classes/AStar2D.xml
-msgid "Deletes the segment between the given points."
-msgstr ""
-
-#: doc/classes/AStar2D.xml
msgid ""
"Returns the closest position to [code]to_position[/code] that resides inside "
"a segment between two connected points.\n"
@@ -8883,7 +8894,9 @@ msgid ""
"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."
+"transmit audio over the network. When capturing audio data from a "
+"microphone, the format of the samples will be stereo 32-bit floating point "
+"PCM."
msgstr ""
#: doc/classes/AudioEffectCapture.xml
@@ -13726,7 +13739,7 @@ msgid ""
msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
-#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/Navigation2D.xml
msgid "Returns the object's [RID]."
msgstr ""
@@ -19201,11 +19214,14 @@ msgid ""
msgstr ""
#: doc/classes/CurveTexture.xml
-msgid "The [code]curve[/code] rendered onto the texture."
+msgid "The [Curve] that is rendered onto the texture."
msgstr ""
#: doc/classes/CurveTexture.xml
-msgid "The width of the texture."
+msgid ""
+"The width of the texture (in pixels). Higher values make it possible to "
+"represent high-frequency data better (such as sudden direction changes), at "
+"the cost of increased generation time and memory usage."
msgstr ""
#: doc/classes/CylinderMesh.xml
@@ -19491,6 +19507,13 @@ msgid "Returns the list of keys in the [Dictionary]."
msgstr ""
#: doc/classes/Dictionary.xml
+msgid ""
+"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, "
+"duplicate keys will not be copied over, unless [code]overwrite[/code] is "
+"[code]true[/code]."
+msgstr ""
+
+#: doc/classes/Dictionary.xml
msgid "Returns the number of keys in the dictionary."
msgstr ""
@@ -21429,9 +21452,23 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide a state data you want to be saved, like view "
+"position, grid settings, folding, etc. 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). This data is automatically saved for "
+"each scene in an [code]editstate[/code] file in the editor metadata folder. "
+"If you want to store global (scene-independent) editor data for your plugin, "
+"you can use [method get_window_layout] instead.\n"
+"Use [method set_state] to restore your saved state.\n"
+"[b]Note:[/b] This method should not be used to save important settings that "
+"should persist with the project.\n"
+"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be "
+"stored and restored correctly.\n"
+"[codeblock]\n"
+"func get_state():\n"
+" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n"
+" return state\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -21442,9 +21479,18 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide the GUI layout of the plugin or any other "
+"data you want to be stored. 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). The data is stored in the "
+"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n"
+"Use [method set_window_layout] to restore your saved layout.\n"
+"[codeblock]\n"
+"func get_window_layout(configuration):\n"
+" configuration.set_value(\"MyPlugin\", \"window_position\", $Window."
+"position)\n"
+" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -21557,11 +21603,30 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the state saved by [method get_state]."
+msgid ""
+"Restore the state saved by [method get_state]. This method is called when "
+"the current scene tab is changed in the editor.\n"
+"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise "
+"it will not be recognized and this method will not be called.\n"
+"[codeblock]\n"
+"func set_state(data):\n"
+" zoom = data.get(\"zoom\", 1.0)\n"
+" preferred_color = data.get(\"my_color\", Color.white)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the plugin GUI layout saved by [method get_window_layout]."
+msgid ""
+"Restore the plugin GUI layout and data saved by [method get_window_layout]. "
+"This method is called for every plugin on editor startup. Use the provided "
+"[code]configuration[/code] file to read your saved data.\n"
+"[codeblock]\n"
+"func set_window_layout(configuration):\n"
+" $Window.position = configuration.get_value(\"MyPlugin\", "
+"\"window_position\", Vector2())\n"
+" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", "
+"Color.white)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -26199,7 +26264,8 @@ msgid ""
"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])."
+"at fixed steps (see [member width]). See also [GradientTexture2D] and "
+"[CurveTexture]."
msgstr ""
#: doc/classes/GradientTexture.xml
@@ -26221,7 +26287,8 @@ msgid ""
"repeat] types using colors obtained from the gradient. 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] and [member height])."
+"[member width] and [member height]). See also [GradientTexture] and "
+"[CurveTexture]."
msgstr ""
#: doc/classes/GradientTexture2D.xml
@@ -27027,6 +27094,12 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+msgid ""
+"If [code]true[/code], this GridMap uses cell navmesh resources to create "
+"navigation regions."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid "If [code]true[/code], grid items are centered on the X axis."
msgstr ""
@@ -27077,6 +27150,10 @@ msgid "The assigned [MeshLibrary]."
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+msgid "The navigation layers the GridMap generates its navigation regions in."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
"Overrides the default friction and bounce physics properties for the whole "
"[GridMap]."
@@ -28300,7 +28377,7 @@ msgid ""
" # 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 body = to_json({\"name\": \"Godette\"})\n"
" error = http_request.request(\"https://httpbin.org/post\", [], true, "
"HTTPClient.METHOD_POST, body)\n"
" if error != OK:\n"
@@ -29467,7 +29544,7 @@ msgstr ""
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 "
+"([member 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 "
@@ -29616,10 +29693,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Returns the mouse mode. See the constants for more information."
-msgstr ""
-
-#: doc/classes/Input.xml
msgid ""
"Gets an input vector by specifying four actions for the positive and "
"negative X and Y axes.\n"
@@ -29813,24 +29886,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Sets the mouse mode. See the constants for more information."
-msgstr ""
-
-#: doc/classes/Input.xml
-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
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 "
@@ -29866,6 +29921,24 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
+msgid "Controls the mouse mode. See [enum MouseMode] for more information."
+msgstr ""
+
+#: doc/classes/Input.xml
+msgid ""
+"If [code]true[/code], similar input events sent by the operating system are "
+"accumulated. 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 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
msgid "Emitted when a joypad device has been connected or disconnected."
msgstr ""
@@ -30173,8 +30246,8 @@ msgstr ""
#: doc/classes/InputEventJoypadButton.xml
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]."
+"Represents the pressure the user puts on the button with their finger, if "
+"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]."
msgstr ""
#: doc/classes/InputEventJoypadMotion.xml
@@ -30437,9 +30510,9 @@ 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 "
+"at most. If you need more precise input reporting, set [member Input."
+"use_accumulated_input] to [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."
@@ -30926,7 +30999,18 @@ msgid ""
"[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."
+"fixed_column_width] greater than zero to wrap the text.\n"
+"[b]Incremental search:[/b] Like [PopupMenu] and [Tree], [ItemList] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/ItemList.xml
@@ -34673,11 +34757,16 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Returns the override [Material] for a surface of the [Mesh] resource.\n"
+"[b]Note:[/b] This function only returns [i]override[/i] materials associated "
+"with this [MeshInstance]. Consider using [method get_active_material] or "
+"[method Mesh.surface_get_material] to get materials associated with the "
+"[Mesh] resource."
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the number of surface materials."
+msgid "Returns the number of surface override materials."
msgstr ""
#: doc/classes/MeshInstance.xml
@@ -34714,7 +34803,10 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Sets the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Sets the override [Material] for the specified surface of the [Mesh] "
+"resource. This material is associated with this [MeshInstance] rather than "
+"with the [Mesh] resource."
msgstr ""
#: doc/classes/MeshInstance.xml
@@ -34745,9 +34837,10 @@ msgstr ""
#: doc/classes/MeshInstance2D.xml
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\"."
+"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be "
+"automatically created from an existing [Sprite] via a tool in the editor "
+"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to "
+"MeshInstance2D[/b] at the top of the 2D editor viewport."
msgstr ""
#: doc/classes/MeshInstance2D.xml
@@ -35505,6 +35598,9 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"Provides navigation and pathfinding within a collection of "
"[NavigationMesh]es. By default, these will be automatically collected from "
"child [NavigationMeshInstance] nodes. In addition to basic pathfinding, this "
@@ -35545,7 +35641,14 @@ msgid ""
msgstr ""
#: doc/classes/Navigation.xml
+msgid "Returns the [RID] of the navigation map on the [NavigationServer]."
+msgstr ""
+
+#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"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, "
@@ -35567,16 +35670,31 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation.get_simple_path] path query."
+msgstr ""
+
+#: doc/classes/Navigation.xml
+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/Navigation.xml doc/classes/Navigation2DServer.xml
+#: doc/classes/NavigationServer.xml
+msgid ""
+"Emitted when a navigation map is updated, when a region moves or is modified."
+msgstr ""
+
#: doc/classes/Navigation2D.xml
msgid "2D navigation and pathfinding node."
msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -35596,6 +35714,9 @@ msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -35605,6 +35726,12 @@ msgstr ""
msgid "The XY plane cell size to use for fields."
msgstr ""
+#: doc/classes/Navigation2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation2D.get_simple_path] path query."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml
msgid "Server interface for low-level 2D navigation access."
msgstr ""
@@ -35621,8 +35748,12 @@ msgid ""
"through scripts.\n"
"For two regions to be connected to each other, they must share a similar "
"edge. An edge is considered connected to another if both of its two vertices "
-"are at a distance less than [member Navigation.edge_connection_margin] to "
-"the respective other edge's vertex.\n"
+"are at a distance less than navigation map [code]edge_connection_margin[/"
+"code] to the respective other edge's vertex.\n"
+"You may assign navigation layers to regions with [method Navigation2DServer."
+"region_set_navigation_layers], which then can be checked upon when "
+"requesting a path with [method Navigation2DServer.map_get_path]. This allows "
+"allowing or forbidding some areas to 2D objects.\n"
"To use the collision avoidance system, you may use agents. You can set an "
"agent's target velocity, then the servers will emit a callback with a "
"modified velocity.\n"
@@ -35650,7 +35781,17 @@ msgid "Returns [code]true[/code] if the map got changed the previous frame."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Callback called at the end of the RVO process."
+msgid ""
+"Callback called at the end of the RVO process. If a callback is created "
+"manually and the agent is placed on a navigation map it will calculate "
+"avoidance for the agent and dispatch the calculated [code]safe_velocity[/"
+"code] to the [code]receiver[/code] object with a signal to the chosen "
+"[code]method[/code] name.\n"
+"[b]Note:[/b] Created callbacks are always processed independently of the "
+"SceneTree state as long as the agent is on a navigation map and not freed. "
+"To disable the dispatch of a callback from an agent use [method "
+"agent_set_callback] again with a [code]null[/code] object as the "
+"[code]receiver[/code]."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -35705,15 +35846,55 @@ msgid "Destroys the given RID."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns all created navigation map [RID]s on the NavigationServer. This "
+"returns both 2D and 3D created navigation maps as there is technically no "
+"distinction between them."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Create a new map."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"This function immediately forces synchronization of the specified navigation "
+"[code]map[/code] [RID]. By default navigation maps are only synchronized at "
+"the end of each physics frame. This function can be used to immediately "
+"(re)calculate all the navigation meshes and region connections of the "
+"navigation map. This makes it possible to query a navigation path for a "
+"changed map immediately and in the same frame (multiple times if needed).\n"
+"Due to technical restrictions the current NavigationServer command queue "
+"will be flushed. This means all already queued update commands for this "
+"physics frame will be executed, even those intended for other maps, regions "
+"and agents not part of the specified map. The expensive computation of the "
+"navigation meshes and region connections of a map will only be done for the "
+"specified map. Other maps will receive the normal synchronization at the end "
+"of the physics frame. Should the specified map receive changes after the "
+"forced update it will update again as well when the other maps receive their "
+"update.\n"
+"Avoidance processing and dispatch of the [code]safe_velocity[/code] signals "
+"is untouched by this function and continues to happen for all maps and "
+"agents at the end of the physics frame.\n"
+"[b]Note:[/b] With great power comes great responsibility. This function "
+"should only be used by users that really know what they are doing and have a "
+"good reason for it. Forcing an immediate update of a navigation map requires "
+"locking the NavigationServer and flushing the entire NavigationServer "
+"command queue. Not only can this severely impact the performance of a game "
+"but it can also introduce bugs if used inappropriately without much "
+"foresight."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns all navigation agents [RID]s that are currently assigned to the "
"requested navigation [code]map[/code]."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Returns the map cell size."
msgstr ""
@@ -35737,7 +35918,10 @@ msgid ""
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Returns the navigation path to reach the destination from the origin."
+msgid ""
+"Returns the navigation path to reach the destination from the origin. "
+"[code]navigation_layers[/code] is a bitmask of all region layers that are "
+"allowed to be in the path."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -35754,6 +35938,12 @@ msgstr ""
msgid "Sets the map active."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/"
+"b] Currently not implemented."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Set the map cell size used to weld the navigation mesh polygons."
msgstr ""
@@ -35769,14 +35959,73 @@ msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"Returns the ending point of a connection door. [code]connection[/code] is an "
+"index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns the starting point of a connection door. [code]connection[/code] is "
+"an index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns how many connections this [code]region[/code] has with other regions "
+"in the map."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns the navigation map [RID] the requested [code]region[/code] is "
"currently assigned to."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Returns the region's navigation layers."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns [code]true[/code] if the provided [code]point[/code] in world space "
+"is currently owned by the provided navigation [code]region[/code]. Owned in "
+"this context means that one of the region's navigation mesh polygon faces "
+"has a possible position at the closest distance to this point compared to "
+"all other navigation meshes from other navigation regions that are also "
+"registered on the navigation map of the provided region.\n"
+"If multiple navigation meshes have positions at equal distance the "
+"navigation region whose polygons are processed first wins the ownership. "
+"Polygons are processed in the same order that navigation regions were "
+"registered on the NavigationServer.\n"
+"[b]Note:[/b] If navigation meshes from different navigation regions overlap "
+"(which should be avoided in general) the result might not be what is "
+"expected."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Sets the map for the region."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method Navigation2DServer.map_get_path])."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Sets the navigation mesh for the region."
msgstr ""
@@ -35785,6 +36034,10 @@ msgstr ""
msgid "Sets the global transformation for the region."
msgstr ""
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]."
+msgstr ""
+
#: doc/classes/NavigationAgent.xml
msgid "3D agent used in navigation for collision avoidance."
msgstr ""
@@ -35794,9 +36047,16 @@ msgid ""
"3D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationAgent] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World] navigation map. If this node is a child of a [Navigation] "
+"node it will register to the navigation map of the navigation node or the "
+"function [method set_navigation] can be used to set the navigation node "
+"directly. [NavigationAgent] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -35814,7 +36074,15 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-msgid "Returns the path from start to finish in global coordinates."
+msgid ""
+"Returns this agent's current path from start to finish in global "
+"coordinates. The path only updates when the target location is changed or "
+"the agent requires a repath. The path array is not intended to be used in "
+"direct path movement as the agent has its own internal path logic that would "
+"get corrupted by changing the path array manually. Use the intended [method "
+"get_next_location] once every physics frame to receive the next path point "
+"for the agents movement as this function also updates the internal path "
+"logic."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -35829,11 +36097,24 @@ msgid ""
"system."
msgstr ""
-#: doc/classes/NavigationAgent.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"Returns a [Vector3] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the origin of the agent's parent."
+"Returns the [RID] of the navigation map for this NavigationAgent node. This "
+"function returns always the map set on the NavigationAgent node and not the "
+"map of the abstract agent on the NavigationServer. If the agent map is "
+"changed directly with the NavigationServer API the NavigationAgent node will "
+"not be aware of the map change. Use [method set_navigation_map] to change "
+"the navigation map for the NavigationAgent and also update the agent on the "
+"NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
+"Returns the next location in global coordinates that can be moved to, making "
+"sure that there are no static objects in the way. If the agent does not have "
+"a navigation path, it will return the position of the agent's parent. The "
+"use of this function once every physics frame is required to update the "
+"internal path logic of the NavigationAgent."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -35874,6 +36155,12 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"Sets the [RID] of the navigation map this NavigationAgent node should use "
+"and also updates the [code]agent[/code] on the NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"Sets the user desired final location. This will clear the current navigation "
"path."
msgstr ""
@@ -35886,7 +36173,13 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml
-msgid "The agent height offset to match the navigation mesh height."
+msgid ""
+"The NavigationAgent height offset is subtracted from the y-axis value of any "
+"vector path position for this NavigationAgent. The NavigationAgent height "
+"offset does not change or influence the navigation mesh or pathfinding query "
+"result. Additional navigation maps that use regions with navigation meshes "
+"that the developer baked with appropriate agent radius or height values are "
+"required to support different-sized agents."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -35913,26 +36206,53 @@ msgstr ""
msgid "The maximum speed that an agent can move."
msgstr ""
+#: doc/classes/NavigationAgent.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "The distance to search for other agents."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"The distance threshold before a path point is considered to be reached. This "
+"will allow an agent to not have to hit a path point on the path exactly, but "
+"in the area. If this value is set to high the NavigationAgent will skip "
+"points on the path which can lead to leaving the navigation mesh. If this "
+"value is set to low the NavigationAgent will be stuck in a repath loop cause "
+"it will constantly overshoot or undershoot the distance to the next point on "
+"each physics frame update."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"The maximum distance the agent is allowed away from the ideal path to the "
"final location. This can happen due to trying to avoid collisions. When the "
"maximum distance is exceeded, it recalculates the ideal path."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-msgid "The radius of the agent."
+msgid ""
+"The radius of the avoidance agent. This is the \"body\" of the avoidance "
+"agent and not the avoidance maneuver starting radius (which is controlled by "
+"[member neighbor_dist]).\n"
+"Does not affect normal pathfinding. To change an actor's pathfinding radius "
+"bake [NavigationMesh] resources with a different [member NavigationMesh."
+"agent_radius] property and use different navigation maps for each actor size."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"The distance threshold before a target is considered to be reached. This "
-"will allow an agent to not have to hit a point on the path exactly, but in "
-"the area."
+"The distance threshold before the final target point is considered to be "
+"reached. This will allow an agent to not have to hit the point of the final "
+"target exactly, but only the area. If this value is set to low the "
+"NavigationAgent will be stuck in a repath loop cause it will constantly "
+"overshoot or undershoot the distance to the final target point on each "
+"physics frame update."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -35975,9 +36295,16 @@ msgid ""
"2D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationAgent2D] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World2D] navigation map. If this node is a child of a "
+"[Navigation2D] node it will register to the navigation map of the navigation "
+"node or the function [method set_navigation] can be used to set the "
+"navigation node directly. [NavigationAgent2D] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent2D.xml
@@ -35993,13 +36320,6 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent2D.xml
-msgid ""
-"Returns a [Vector2] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the position of the agent's parent."
-msgstr ""
-
-#: doc/classes/NavigationAgent2D.xml
msgid "Returns the [RID] of this agent on the [Navigation2DServer]."
msgstr ""
@@ -36019,6 +36339,13 @@ msgid ""
"only be enabled on agents that currently require it."
msgstr ""
+#: doc/classes/NavigationAgent2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent2D] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationMesh.xml
msgid "A mesh to approximate the walkable areas and obstacles."
msgstr ""
@@ -36049,8 +36376,8 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
-"Returns whether the specified [code]bit[/code] of the [member geometry/"
-"collision_mask] is set."
+"Returns whether the specified [code]bit[/code] of the [member "
+"geometry_collision_mask] is set."
msgstr ""
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
@@ -36072,9 +36399,9 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/"
-"code] in the [member geometry/collision_mask].\n"
+"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]."
+"code] in the [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
@@ -36088,14 +36415,14 @@ 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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36107,7 +36434,7 @@ 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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36135,13 +36462,17 @@ msgstr ""
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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
-"If [code]true[/code], marks walkable spans as not walkable if the clearance "
-"above the span is less than [member agent/height]."
+"If the baking [AABB] has a volume the navigation mesh baking will be "
+"restricted to its enclosing area."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+msgid "The position offset applied to the [member filter_baking_aabb] [AABB]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36151,13 +36482,19 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]true[/code], marks non-walkable spans as walkable if their maximum "
-"is within [member agent/max_climb] of a walkable neighbor."
+"is within [member agent_max_climb] of a walkable neighbor."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+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
msgid ""
"The physics layers to scan for static colliders.\n"
-"Only used when [member geometry/parsed_geometry_type] is [constant "
+"Only used when [member geometry_parsed_geometry_type] is [constant "
"PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]."
msgstr ""
@@ -36176,7 +36513,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"The name of the group to scan for geometry.\n"
-"Only used when [member geometry/source_geometry_mode] is [constant "
+"Only used when [member geometry_source_geometry_mode] is [constant "
"SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant "
"SOURCE_GEOMETRY_GROUPS_EXPLICIT]."
msgstr ""
@@ -36239,7 +36576,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Parses [StaticBody] colliders as geometry. The collider should be in any of "
-"the layers specified by [member geometry/collision_mask]."
+"the layers specified by [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36260,13 +36597,13 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Scans nodes in a group and their child nodes recursively for geometry. The "
-"group is specified by [member geometry/source_group_name]."
+"group is specified by [member geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Uses nodes in a group for geometry. The group is specified by [member "
-"geometry/source_group_name]."
+"geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36308,7 +36645,15 @@ msgid ""
"geometry for walkable terrain suitable to [NavigationMesh] agent properties "
"by creating a voxel world around the meshes bounding area.\n"
"The finalized navigation mesh is then returned and stored inside the "
-"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes."
+"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] "
+"nodes.\n"
+"[b]Note:[/b] Using meshes to not only define walkable surfaces but also "
+"obstruct navigation baking does not always work. The navigation baking has "
+"no concept of what is a geometry \"inside\" when dealing with mesh source "
+"geometry and this is intentional. Depending on current baking parameters, as "
+"soon as the obstructing mesh is large enough to fit a navigation mesh area "
+"inside, the baking will generate navigation mesh areas that are inside the "
+"obstructing source geometry mesh."
msgstr ""
#: doc/classes/NavigationMeshGenerator.xml
@@ -36316,8 +36661,8 @@ msgid ""
"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child "
"nodes under the provided [code]root_node[/code] or a specific group of nodes "
"for potential source geometry. The parse behavior can be controlled with the "
-"[member NavigationMesh.geometry/parsed_geometry_type] and [member "
-"NavigationMesh.geometry/source_geometry_mode] properties on the "
+"[member NavigationMesh.geometry_parsed_geometry_type] and [member "
+"NavigationMesh.geometry_source_geometry_mode] properties on the "
"[NavigationMesh] resource."
msgstr ""
@@ -36334,8 +36679,21 @@ msgstr ""
#: doc/classes/NavigationMeshInstance.xml
msgid ""
"An instance of a [NavigationMesh]. It tells the [Navigation] node what can "
-"be navigated and what cannot, based on the [NavigationMesh] resource. This "
-"should be a child of a [Navigation] node."
+"be navigated and what cannot, based on the [NavigationMesh] resource.\n"
+"By default this node will register to the default [World] navigation map. If "
+"this node is a child of a [Navigation] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method NavigationServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The cost of entering this region from another region can be controlled with "
+"the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The cost of traveling distances inside this region can be controlled with "
+"the [member travel_cost] multiplier."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
@@ -36364,10 +36722,34 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding enters this region's navmesh from another regions navmesh "
+"the [code]enter_cost[/code] value is added to the path distance for "
+"determining the shortest path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationMesh] "
+"belongs to. On path requests with [method NavigationServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
msgid "The [NavigationMesh] resource to use."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding moves inside this region's navmesh the traveled distances "
+"are multiplied with [code]travel_cost[/code] for determining the shortest "
+"path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
msgid "Notifies when the navigation mesh bake operation is completed."
msgstr ""
@@ -36384,7 +36766,9 @@ msgid ""
"3D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationObstacle] is physics safe."
+"[NavigationObstacle] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle.xml
@@ -36424,7 +36808,9 @@ msgid ""
"2D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationObstacle2D] is physics safe."
+"[NavigationObstacle2D] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle2D.xml
@@ -36504,6 +36890,14 @@ msgstr ""
#: doc/classes/NavigationPolygon.xml
msgid ""
+"Returns the [NavigationMesh] resulting from this navigation polygon. This "
+"navmesh can be used to update the navmesh of a region with the [method "
+"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server "
+"behind the scene)."
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml
+msgid ""
"Returns a [PoolVector2Array] containing the vertices of an outline that was "
"created in the editor or by script."
msgstr ""
@@ -36540,6 +36934,30 @@ msgid ""
msgstr ""
#: doc/classes/NavigationPolygonInstance.xml
+msgid "A region of the 2D navigation map."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A region of the navigation map. It tells the [Navigation2DServer] what can "
+"be navigated and what cannot, based on its [NavigationPolygon] resource.\n"
+"By default this node will register to the default [World2D] navigation map. "
+"If this node is a child of a [Navigation2D] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The pathfinding cost of entering this region from another region can be "
+"controlled with the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The pathfinding cost of traveling distances inside this region can be "
+"controlled with the [member travel_cost] multiplier."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
msgid ""
"Returns the [RID] of this region on the [Navigation2DServer]. Combined with "
"[method Navigation2DServer.map_get_closest_point_owner] can be used to "
@@ -36547,6 +36965,22 @@ msgid ""
"navigation map."
msgstr ""
+#: doc/classes/NavigationPolygonInstance.xml
+msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationPolygon] "
+"belongs to. On path requests with [method Navigation2DServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid "The [NavigationPolygon] resource to use."
+msgstr ""
+
#: doc/classes/NavigationServer.xml
msgid "Server interface for low-level 3D navigation access."
msgstr ""
@@ -36622,6 +37056,12 @@ msgid "Bakes the navigation mesh."
msgstr ""
#: doc/classes/NavigationServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method NavigationServer.map_get_path])."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
msgid "Control activation of this server."
msgstr ""
@@ -38088,13 +38528,19 @@ msgstr ""
#: doc/classes/Node.xml
msgid ""
"Emitted when a child node enters the scene tree, either because it entered "
-"on its own or because this node entered with it."
+"on its own or because this node entered with it.\n"
+"This signal is emitted [i]after[/i] the child node's own [constant "
+"NOTIFICATION_ENTER_TREE] and [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
msgid ""
-"Emitted when a child node exits the scene tree, either because it exited on "
-"its own or because this node exited."
+"Emitted when a child node is about to exit the scene tree, either because it "
+"is being removed or freed directly, or because this node is exiting the "
+"tree.\n"
+"When this signal is received, the child [code]node[/code] is still in the "
+"tree and valid. This signal is emitted [i]after[/i] the child node's own "
+"[signal tree_exiting] and [constant NOTIFICATION_EXIT_TREE]."
msgstr ""
#: doc/classes/Node.xml
@@ -38106,7 +38552,10 @@ msgid "Emitted when the node is renamed."
msgstr ""
#: doc/classes/Node.xml
-msgid "Emitted when the node enters the tree."
+msgid ""
+"Emitted when the node enters the tree.\n"
+"This signal is emitted [i]after[/i] the related [constant "
+"NOTIFICATION_ENTER_TREE] notification."
msgstr ""
#: doc/classes/Node.xml
@@ -38116,15 +38565,21 @@ msgstr ""
#: doc/classes/Node.xml
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)."
+"the right place for de-initialization (or a \"destructor\", if you will).\n"
+"This signal is emitted [i]before[/i] the related [constant "
+"NOTIFICATION_EXIT_TREE] notification."
msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node enters a [SceneTree]."
+msgid ""
+"Notification received when the node enters a [SceneTree].\n"
+"This notification is emitted [i]before[/i] the related [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node is about to exit a [SceneTree]."
+msgid ""
+"Notification received when the node is about to exit a [SceneTree].\n"
+"This notification is emitted [i]after[/i] the related [signal tree_exiting]."
msgstr ""
#: doc/classes/Node.xml
@@ -38385,7 +38840,13 @@ msgid "Rotation in degrees, relative to the node's parent."
msgstr ""
#: doc/classes/Node2D.xml
-msgid "The node's scale. Unscaled value: [code](1, 1)[/code]."
+msgid ""
+"The node's scale. Unscaled value: [code](1, 1)[/code].\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
#: doc/classes/Node2D.xml
@@ -39825,6 +40286,10 @@ msgid ""
" if argument.find(\"=\") > -1:\n"
" var key_value = argument.split(\"=\")\n"
" arguments[key_value[0].lstrip(\"--\")] = key_value[1]\n"
+" else:\n"
+" # Options without an argument will be present in the dictionary,\n"
+" # with the value set to an empty string.\n"
+" arguments[argument.lstrip(\"--\")] = \"\"\n"
"[/codeblock]"
msgstr ""
@@ -40478,8 +40943,15 @@ msgstr ""
msgid ""
"Moves the file or directory to the system's recycle bin. See also [method "
"Directory.remove].\n"
+"The method takes only global paths, so you may need to use [method "
+"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/"
+"code] as it will not work in exported project.\n"
"[b]Note:[/b] If the user has disabled the recycle bin on their system, the "
-"file will be permanently deleted instead."
+"file will be permanently deleted instead.\n"
+"[codeblock]\n"
+"var file_to_remove = \"user://slot1.sav\"\n"
+"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/OS.xml
@@ -45318,7 +45790,18 @@ msgstr ""
#: doc/classes/PopupMenu.xml
msgid ""
"[PopupMenu] is a [Control] that displays a list of options. They are popular "
-"in toolbars or context menus."
+"in toolbars or context menus.\n"
+"[b]Incremental search:[/b] Like [ItemList] and [Tree], [PopupMenu] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/PopupMenu.xml
@@ -46825,7 +47308,16 @@ msgid ""
msgstr ""
#: doc/classes/ProjectSettings.xml
-msgid "Message to be displayed before the backtrace when the engine crashes."
+msgid ""
+"Message to be displayed before the backtrace when the engine crashes. By "
+"default, this message is only used in exported projects due to the editor-"
+"only override applied to this setting."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Editor-only override for [member debug/settings/crash_handler/message]. Does "
+"not affect exported projects in debug or release mode."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -47070,6 +47562,18 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default naming style for scene files to infer from their root nodes. "
+"Possible options are:\n"
+"- [code]0[/code] (Auto): Uses the scene root name as is without changing its "
+"casing.\n"
+"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase "
+"casing.\n"
+"- [code]2[/code] (snake_case): Converts the scene root name to snake_case "
+"casing."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -47295,6 +47799,198 @@ msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 1."
msgstr ""
@@ -47503,6 +48199,198 @@ msgid "Optional name for the 2D render layer 9."
msgstr ""
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 1."
msgstr ""
@@ -47770,6 +48658,49 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default cell height for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_height].\n"
+"[b]Note:[/b] Currently not implemented."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 2D navigation maps. See [method "
+"Navigation2DServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell height for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_height]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 3D navigation maps. See [method "
+"NavigationServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default map up vector for 3D navigation maps. See [method NavigationServer."
+"map_set_up]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -48443,20 +49374,28 @@ msgid ""
"cause.\n"
"The default value is a conservative one, so you are advised to tweak it "
"according to the hardware you are targeting.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"The default is a very conservative override for [code]rendering/gles3/"
-"shaders/max_concurrent_compiles[/code].\n"
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
"Depending on the specific devices you are targeting, you may want to raise "
"it.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
+"Depending on the specific browsers you are targeting, you may want to raise "
+"it.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -48464,19 +49403,28 @@ msgid ""
"The maximum size, in megabytes, that the ubershader cache can grow up to. On "
"startup, the least recently used entries will be deleted until the total "
"size is within bounds.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/ubershader_cache_size_mb[/"
-"code], so a smaller maximum size can be configured for mobile platforms, "
-"where storage space is more limited.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for mobile platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for web platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] Currently, shader caching is generally unavailable on web "
+"platforms.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -48508,14 +49456,22 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/shader_compilation_mode[/"
-"code], so asynchronous compilation can be disabled for mobile.\n"
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on mobile platforms.\n"
"You may want to do that since mobile GPUs generally won't support "
"ubershaders due to their complexity."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on web platforms.\n"
+"You may want to do that since certain browsers (especially on mobile "
+"platforms) generally won't support ubershaders due to their complexity."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
@@ -49272,7 +50228,6 @@ msgid ""
"- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/"
"code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, "
"small grid radius values may lead to unwanted groupings.\n"
-"[/codeblock]\n"
"[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more "
"effective and faster [VisibilityNotifier] functionality. For most use cases, "
"[method Vector3.distance_to] or [method Vector3.distance_squared_to] are "
@@ -51419,6 +52374,22 @@ msgid "Makes text fill width."
msgstr ""
#: doc/classes/RichTextLabel.xml
+msgid "Aligns top of the inline image to the top of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns center of the inline image to the center of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns bottom of the inline image to the baseline of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns bottom of the inline image to the bottom of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
msgid "Each list item has a number marker."
msgstr ""
@@ -53156,8 +54127,8 @@ msgid ""
" yield(get_tree().create_timer(1.0), \"timeout\")\n"
" print(\"Timer ended.\")\n"
"[/codeblock]\n"
-"The timer will be automatically freed after its time elapses, so be aware "
-"that any reference you might have kept to it will become invalid."
+"The timer will be dereferenced after its time elapses. To preserve the "
+"timer, you can keep a reference to it. See [Reference]."
msgstr ""
#: doc/classes/SceneTreeTimer.xml
@@ -53189,24 +54160,23 @@ msgid ""
"manually (i.e. by using [code]Tween.new()[/code]) are invalid. They can't be "
"used for tweening values, but you can do manual interpolation with [method "
"interpolate_value].\n"
-"A [SceneTreeTween] animation is composed of a sequence of [Tweener]s, which "
-"by default are executed one after another. You can create a sequence by "
-"appending [Tweener]s to the [SceneTreeTween]. Animating something with a "
-"[Tweener] is called tweening. Example tweening sequence looks like this:\n"
+"A tween animation is created by adding [Tweener]s to the [SceneTreeTween] "
+"object, using [method tween_property], [method tween_interval], [method "
+"tween_callback] or [method tween_method]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1)\n"
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"This sequence will make the [code]$Sprite[/code] node turn red, then shrink "
-"and finally the [method Node.queue_free] is called to remove the sprite. See "
-"methods [method tween_property], [method tween_interval], [method "
-"tween_callback] and [method tween_method] for more usage information.\n"
+"This sequence will make the [code]$Sprite[/code] node turn red, then shrink, "
+"before finally calling [method Node.queue_free] to free the sprite. "
+"[Tweener]s are executed one after another by default. This behavior can be "
+"changed using [method parallel] and [method set_parallel].\n"
"When a [Tweener] is created with one of the [code]tween_*[/code] methods, a "
"chained method call can be used to tweak the properties of this [Tweener]. "
-"For example, if you want to set different transition type in the above "
-"example, you can do:\n"
+"For example, if you want to set a different transition type in the above "
+"example, you can use [method set_trans]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1).set_trans(Tween."
@@ -53215,8 +54185,9 @@ msgid ""
"TRANS_BOUNCE)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Most of the [SceneTreeTween] methods can be chained this way too. In this "
-"example the [SceneTreeTween] is bound and have set a default transition:\n"
+"Most of the [SceneTreeTween] methods can be chained this way too. In the "
+"following example the [SceneTreeTween] is bound to the running script's node "
+"and a default transition is set for its [Tweener]s:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween().bind_node(self).set_trans(Tween."
"TRANS_ELASTIC)\n"
@@ -53224,16 +54195,16 @@ msgid ""
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Another interesting use for [SceneTreeTween]s is animating arbitrary set of "
+"Another interesting use for [SceneTreeTween]s is animating arbitrary sets of "
"objects:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"for sprite in get_children():\n"
-" tween.tween_property(sprite, \"position\", Vector2(), 1)\n"
+" tween.tween_property(sprite, \"position\", Vector2(0, 0), 1)\n"
"[/codeblock]\n"
"In the example above, all children of a node are moved one after another to "
"position (0, 0).\n"
-"Some [Tweener]s use transitions and eases. The first accepts an [enum Tween."
+"Some [Tweener]s use transitions and eases. The first accepts a [enum Tween."
"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 Tween.EaseType] constant, and "
@@ -53245,7 +54216,7 @@ msgid ""
"tween_cheatsheet.png]Tween easing and transition types cheatsheet[/url]\n"
"[b]Note:[/b] All [SceneTreeTween]s will automatically start by default. To "
"prevent a [SceneTreeTween] from autostarting, you can call [method stop] "
-"immediately after it was created."
+"immediately after it is created."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53275,21 +54246,24 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
-"Processes the [SceneTreeTween] by given [code]delta[/code] value, in "
-"seconds. Mostly useful when the [SceneTreeTween] is paused, for controlling "
-"it manually. Can also be used to end the [SceneTreeTween] animation "
-"immediately, by using [code]delta[/code] longer than the whole duration.\n"
+"Processes the [SceneTreeTween] by the given [code]delta[/code] value, in "
+"seconds. This is mostly useful for manual control when the [SceneTreeTween] "
+"is paused. It can also be used to end the [SceneTreeTween] animation "
+"immediately, by setting [code]delta[/code] longer than the whole duration of "
+"the [SceneTreeTween] animation.\n"
"Returns [code]true[/code] if the [SceneTreeTween] still has [Tweener]s that "
"haven't finished.\n"
-"[b]Note:[/b] The [SceneTreeTween] will become invalid after finished, but "
-"you can call [method stop] after the step, to keep it and reset."
+"[b]Note:[/b] The [SceneTreeTween] will become invalid in the next processing "
+"frame after its animation finishes. Calling [method stop] after performing "
+"[method custom_step] instead keeps and resets the [SceneTreeTween]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Returns the total time in seconds the [SceneTreeTween] has been animating (i."
-"e. time since it started, not counting pauses etc.). The time is affected by "
-"[method set_speed_scale] and [method stop] will reset it to [code]0[/code].\n"
+"e. the time since it started, not counting pauses etc.). The time is "
+"affected by [method set_speed_scale], and [method stop] will reset it to "
+"[code]0[/code].\n"
"[b]Note:[/b] As it results from accumulating frame deltas, the time returned "
"after the [SceneTreeTween] has finished animating will be slightly greater "
"than the actual [SceneTreeTween] duration."
@@ -53325,11 +54299,10 @@ msgstr ""
msgid ""
"Returns whether the [SceneTreeTween] is valid. A valid [SceneTreeTween] is a "
"[SceneTreeTween] contained by the scene tree (i.e. the array from [method "
-"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). "
-"[SceneTreeTween] might become invalid when it has finished tweening or was "
-"killed, also when created with [code]Tween.new()[/code]. Invalid "
-"[SceneTreeTween] can't have [Tweener]s appended, because it can't animate "
-"them. You can however still use [method interpolate_value]."
+"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). A "
+"[SceneTreeTween] might become invalid when it has finished tweening, is "
+"killed, or when created with [code]SceneTreeTween.new()[/code]. Invalid "
+"[SceneTreeTween]s can't have [Tweener]s appended."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53369,16 +54342,15 @@ msgstr ""
msgid ""
"Sets the number of times the tweening sequence will be repeated, i.e. "
"[code]set_loops(2)[/code] will run the animation twice.\n"
-"Calling this method without arguments will make the [SceneTreeTween] run "
-"infinitely, until it is either killed by [method kill] or by freeing bound "
-"node, or all the animated objects have been freed (which makes further "
+"Calling this method without arguments will make the [Tween] run infinitely, "
+"until either it is killed with [method kill], the [Tween]'s bound node is "
+"freed, or all the animated objects have been freed (which makes further "
"animation impossible).\n"
"[b]Warning:[/b] Make sure to always add some duration/delay when using "
-"infinite loops. 0-duration looped animations (e.g. single [CallbackTweener] "
-"with no delay or [PropertyTweener] with invalid node) are equivalent to "
-"infinite [code]while[/code] loops and will freeze your game. If a "
-"[SceneTreeTween]'s lifetime depends on some node, always use [method "
-"bind_node]."
+"infinite loops. To prevent the game freezing, 0-duration looped animations "
+"(e.g. a single [CallbackTweener] with no delay) are stopped after a small "
+"number of loops, which may produce unexpected results. If a [Tween]'s "
+"lifetime depends on some node, always use [method bind_node]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53440,10 +54412,10 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Creates and appends an [IntervalTweener]. This method can be used to create "
-"delays in the tween animation, as an alternative for using the delay in "
-"other [Tweener]s or when there's no animation (in which case the "
-"[SceneTreeTween] acts as a timer). [code]time[/code] is the length of the "
-"interval, in seconds.\n"
+"delays in the tween animation, as an alternative to using the delay in other "
+"[Tweener]s, or when there's no animation (in which case the [SceneTreeTween] "
+"acts as a timer). [code]time[/code] is the length of the interval, in "
+"seconds.\n"
"Example: creating an interval in code execution.\n"
"[codeblock]\n"
"# ... some code\n"
@@ -53497,8 +54469,8 @@ msgid ""
"Creates and appends a [PropertyTweener]. This method tweens a "
"[code]property[/code] of an [code]object[/code] between an initial value and "
"[code]final_val[/code] in a span of time equal to [code]duration[/code], in "
-"seconds. The initial value by default is a value at the time the tweening of "
-"the [PropertyTweener] start. For example:\n"
+"seconds. The initial value by default is the property's value at the time "
+"the tweening of the [PropertyTweener] starts. For example:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"tween.tween_property($Sprite, \"position\", Vector2(100, 200), 1)\n"
@@ -53529,16 +54501,15 @@ msgid ""
"Emitted when the [SceneTreeTween] has finished all tweening. Never emitted "
"when the [SceneTreeTween] is set to infinite looping (see [method "
"set_loops]).\n"
-"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) after this signal "
-"is emitted, but it doesn't happen immediately, but on the next processing "
-"frame. Calling [method stop] inside the signal callback will preserve the "
-"[SceneTreeTween]."
+"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) in the next "
+"processing frame after this signal is emitted. Calling [method stop] inside "
+"the signal callback will prevent the [SceneTreeTween] from being removed."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Emitted when a full loop is complete (see [method set_loops]), providing the "
-"loop index. This signal is not emitted after final loop, use [signal "
+"loop index. This signal is not emitted after the final loop, use [signal "
"finished] instead for this case."
msgstr ""
@@ -53546,7 +54517,7 @@ msgstr ""
msgid ""
"Emitted when one step of the [SceneTreeTween] is complete, providing the "
"step index. One step is either a single [Tweener] or a group of [Tweener]s "
-"running parallelly."
+"running in parallel."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -54878,7 +55849,12 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-msgid "Scale part of the local transformation."
+msgid ""
+"Scale part of the local transformation.\n"
+"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, the scale values will either be all "
+"positive or all negative."
msgstr ""
#: doc/classes/Spatial.xml
@@ -57509,11 +58485,11 @@ msgstr ""
msgid ""
"Returns [code]true[/code] if this string contains a valid integer.\n"
"[codeblock]\n"
-"print(\"7\".is_valid_int()) # Prints \"True\"\n"
-"print(\"14.6\".is_valid_int()) # Prints \"False\"\n"
-"print(\"L\".is_valid_int()) # Prints \"False\"\n"
-"print(\"+3\".is_valid_int()) # Prints \"True\"\n"
-"print(\"-12\".is_valid_int()) # Prints \"True\"\n"
+"print(\"7\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"14.6\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"L\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"+3\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"-12\".is_valid_integer()) # Prints \"True\"\n"
"[/codeblock]"
msgstr ""
@@ -60979,6 +61955,10 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml
+msgid "If [code]true[/code], this TileMap bakes a navigation region."
+msgstr ""
+
+#: doc/classes/TileMap.xml
msgid "If [code]true[/code], the cell's UVs will be clipped."
msgstr ""
@@ -61085,6 +62065,10 @@ msgid "The TileMap orientation mode. See [enum Mode] for possible values."
msgstr ""
#: doc/classes/TileMap.xml
+msgid "The navigation layers the TileMap generates its navigation regions in."
+msgstr ""
+
+#: doc/classes/TileMap.xml
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 "
@@ -62216,7 +63200,12 @@ msgstr ""
#: doc/classes/Transform2D.xml
msgid ""
"Returns a copy of the transform scaled by the given [code]scale[/code] "
-"factor, using matrix multiplication."
+"factor, using matrix multiplication.\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
#: doc/classes/Transform2D.xml
@@ -62371,7 +63360,18 @@ msgid ""
"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]."
+"to remove it from the [Tree].\n"
+"[b]Incremental search:[/b] Like [ItemList] and [PopupMenu], [Tree] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/Tree.xml
@@ -65887,11 +66887,12 @@ msgid "This enabler will stop [Particles2D] nodes."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _process function."
+msgid "This enabler will stop the parent's [method Node._process] function."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _physics_process function."
+msgid ""
+"This enabler will stop the parent's [method Node._physics_process] function."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
@@ -65931,6 +66932,16 @@ msgid "The VisibilityNotifier's bounding box."
msgstr ""
#: doc/classes/VisibilityNotifier.xml
+msgid ""
+"In addition to checking whether a node is on screen or within a [Camera]'s "
+"view, VisibilityNotifier can also optionally check whether a node is within "
+"a specified maximum distance when using a [Camera] with perspective "
+"projection. This is useful for throttling the performance requirements of "
+"nodes that are far away.\n"
+"[b]Note:[/b] This feature will be disabled if set to 0.0."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier.xml
msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view."
msgstr ""
@@ -70676,6 +71687,16 @@ msgid "The amount of shader rebinds in the frame."
msgstr ""
#: doc/classes/VisualServer.xml
+msgid ""
+"The peak amount of shaders that have been under compilation in the frame.\n"
+"This is useful to know when asynchronous shader compilation has finished for "
+"the current shaders on screen.\n"
+"[b]Note:[/b] For complete certainty, only assume there are no outstanding "
+"compilations when this value is zero for at least two frames in a row.\n"
+"Unimplemented in the GLES2 rendering backend, always returns 0."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
msgid "The amount of surface changes in the frame."
msgstr ""
@@ -73872,8 +74893,8 @@ msgstr ""
#: doc/classes/World.xml
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."
+"scenario, a navigation map and a sound space. Spatial nodes register their "
+"resources into the current world."
msgstr ""
#: doc/classes/World.xml
@@ -73888,8 +74909,13 @@ msgstr ""
#: doc/classes/World.xml
msgid ""
-"The World's fallback_environment will be used if the World's [Environment] "
-"fails or is missing."
+"The World's fallback environment will be used if [member environment] fails "
+"or is missing."
+msgstr ""
+
+#: doc/classes/World.xml
+msgid ""
+"The [RID] of this world's navigation map. Used by the [NavigationServer]."
msgstr ""
#: doc/classes/World.xml
@@ -73907,8 +74933,8 @@ msgstr ""
#: doc/classes/World2D.xml
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."
+"visual scenario, a navigation map and a sound space. 2D nodes register their "
+"resources into the current 2D world."
msgstr ""
#: doc/classes/World2D.xml
@@ -73926,6 +74952,11 @@ msgstr ""
#: doc/classes/World2D.xml
msgid ""
+"The [RID] of this world's navigation map. Used by the [Navigation2DServer]."
+msgstr ""
+
+#: doc/classes/World2D.xml
+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 ""
diff --git a/doc/translations/classes.pot b/doc/translations/classes.pot
index 30133154a8..dba0a87744 100644
--- a/doc/translations/classes.pot
+++ b/doc/translations/classes.pot
@@ -340,7 +340,7 @@ msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
msgid ""
"Compares two values by checking their actual contents, recursing into any "
-"`Array` or `Dictionary` up to its deepest level.\n"
+"[Array] or [Dictionary] up to its deepest level.\n"
"This compares to [code]==[/code] in a number of ways:\n"
"- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/"
"code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] "
@@ -387,7 +387,7 @@ msgid ""
"- 1.0: Linear\n"
"- Greater than 1.0 (exclusive): Ease in\n"
"[/codeblock]\n"
-"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.4/img/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/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]."
@@ -1094,7 +1094,7 @@ msgid ""
"[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/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/img/"
"smoothstep_ease_comparison.png]Comparison between smoothstep() and ease(x, "
"-1.6521) return values[/url]"
msgstr ""
@@ -3372,6 +3372,12 @@ msgstr ""
#: doc/classes/@GlobalScope.xml
msgid ""
+"Hints that an integer property is a bitmask using the optionally named 2D "
+"navigation layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml
+msgid ""
"Hints that an integer property is a bitmask using the optionally named 3D "
"render layers."
msgstr ""
@@ -3384,6 +3390,12 @@ msgstr ""
#: doc/classes/@GlobalScope.xml
msgid ""
+"Hints that an integer property is a bitmask using the optionally named 3D "
+"navigation layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml
+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]."
@@ -8359,7 +8371,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/AStar.xml
+#: doc/classes/AStar.xml doc/classes/AStar2D.xml
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[/"
@@ -8558,7 +8570,10 @@ msgid ""
msgstr ""
#: doc/classes/AStar2D.xml
-msgid "Returns whether there is a connection/segment between the given points."
+msgid ""
+"Returns whether there is a connection/segment between the given points. 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/AStar2D.xml
@@ -8575,10 +8590,6 @@ msgid ""
msgstr ""
#: doc/classes/AStar2D.xml
-msgid "Deletes the segment between the given points."
-msgstr ""
-
-#: doc/classes/AStar2D.xml
msgid ""
"Returns the closest position to [code]to_position[/code] that resides inside "
"a segment between two connected points.\n"
@@ -8763,7 +8774,9 @@ msgid ""
"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."
+"transmit audio over the network. When capturing audio data from a "
+"microphone, the format of the samples will be stereo 32-bit floating point "
+"PCM."
msgstr ""
#: doc/classes/AudioEffectCapture.xml
@@ -13606,7 +13619,7 @@ msgid ""
msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
-#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/Navigation2D.xml
msgid "Returns the object's [RID]."
msgstr ""
@@ -19081,11 +19094,14 @@ msgid ""
msgstr ""
#: doc/classes/CurveTexture.xml
-msgid "The [code]curve[/code] rendered onto the texture."
+msgid "The [Curve] that is rendered onto the texture."
msgstr ""
#: doc/classes/CurveTexture.xml
-msgid "The width of the texture."
+msgid ""
+"The width of the texture (in pixels). Higher values make it possible to "
+"represent high-frequency data better (such as sudden direction changes), at "
+"the cost of increased generation time and memory usage."
msgstr ""
#: doc/classes/CylinderMesh.xml
@@ -19371,6 +19387,13 @@ msgid "Returns the list of keys in the [Dictionary]."
msgstr ""
#: doc/classes/Dictionary.xml
+msgid ""
+"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, "
+"duplicate keys will not be copied over, unless [code]overwrite[/code] is "
+"[code]true[/code]."
+msgstr ""
+
+#: doc/classes/Dictionary.xml
msgid "Returns the number of keys in the dictionary."
msgstr ""
@@ -21309,9 +21332,23 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide a state data you want to be saved, like view "
+"position, grid settings, folding, etc. 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). This data is automatically saved for "
+"each scene in an [code]editstate[/code] file in the editor metadata folder. "
+"If you want to store global (scene-independent) editor data for your plugin, "
+"you can use [method get_window_layout] instead.\n"
+"Use [method set_state] to restore your saved state.\n"
+"[b]Note:[/b] This method should not be used to save important settings that "
+"should persist with the project.\n"
+"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be "
+"stored and restored correctly.\n"
+"[codeblock]\n"
+"func get_state():\n"
+" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n"
+" return state\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -21322,9 +21359,18 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide the GUI layout of the plugin or any other "
+"data you want to be stored. 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). The data is stored in the "
+"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n"
+"Use [method set_window_layout] to restore your saved layout.\n"
+"[codeblock]\n"
+"func get_window_layout(configuration):\n"
+" configuration.set_value(\"MyPlugin\", \"window_position\", $Window."
+"position)\n"
+" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -21437,11 +21483,30 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the state saved by [method get_state]."
+msgid ""
+"Restore the state saved by [method get_state]. This method is called when "
+"the current scene tab is changed in the editor.\n"
+"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise "
+"it will not be recognized and this method will not be called.\n"
+"[codeblock]\n"
+"func set_state(data):\n"
+" zoom = data.get(\"zoom\", 1.0)\n"
+" preferred_color = data.get(\"my_color\", Color.white)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the plugin GUI layout saved by [method get_window_layout]."
+msgid ""
+"Restore the plugin GUI layout and data saved by [method get_window_layout]. "
+"This method is called for every plugin on editor startup. Use the provided "
+"[code]configuration[/code] file to read your saved data.\n"
+"[codeblock]\n"
+"func set_window_layout(configuration):\n"
+" $Window.position = configuration.get_value(\"MyPlugin\", "
+"\"window_position\", Vector2())\n"
+" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", "
+"Color.white)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -26076,7 +26141,8 @@ msgid ""
"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])."
+"at fixed steps (see [member width]). See also [GradientTexture2D] and "
+"[CurveTexture]."
msgstr ""
#: doc/classes/GradientTexture.xml
@@ -26098,7 +26164,8 @@ msgid ""
"repeat] types using colors obtained from the gradient. 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] and [member height])."
+"[member width] and [member height]). See also [GradientTexture] and "
+"[CurveTexture]."
msgstr ""
#: doc/classes/GradientTexture2D.xml
@@ -26904,6 +26971,12 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+msgid ""
+"If [code]true[/code], this GridMap uses cell navmesh resources to create "
+"navigation regions."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid "If [code]true[/code], grid items are centered on the X axis."
msgstr ""
@@ -26954,6 +27027,10 @@ msgid "The assigned [MeshLibrary]."
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+msgid "The navigation layers the GridMap generates its navigation regions in."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
"Overrides the default friction and bounce physics properties for the whole "
"[GridMap]."
@@ -28177,7 +28254,7 @@ msgid ""
" # 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 body = to_json({\"name\": \"Godette\"})\n"
" error = http_request.request(\"https://httpbin.org/post\", [], true, "
"HTTPClient.METHOD_POST, body)\n"
" if error != OK:\n"
@@ -29344,7 +29421,7 @@ msgstr ""
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 "
+"([member 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 "
@@ -29493,10 +29570,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Returns the mouse mode. See the constants for more information."
-msgstr ""
-
-#: doc/classes/Input.xml
msgid ""
"Gets an input vector by specifying four actions for the positive and "
"negative X and Y axes.\n"
@@ -29690,24 +29763,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Sets the mouse mode. See the constants for more information."
-msgstr ""
-
-#: doc/classes/Input.xml
-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
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 "
@@ -29743,6 +29798,24 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
+msgid "Controls the mouse mode. See [enum MouseMode] for more information."
+msgstr ""
+
+#: doc/classes/Input.xml
+msgid ""
+"If [code]true[/code], similar input events sent by the operating system are "
+"accumulated. 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 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
msgid "Emitted when a joypad device has been connected or disconnected."
msgstr ""
@@ -30050,8 +30123,8 @@ msgstr ""
#: doc/classes/InputEventJoypadButton.xml
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]."
+"Represents the pressure the user puts on the button with their finger, if "
+"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]."
msgstr ""
#: doc/classes/InputEventJoypadMotion.xml
@@ -30314,9 +30387,9 @@ 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 "
+"at most. If you need more precise input reporting, set [member Input."
+"use_accumulated_input] to [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."
@@ -30803,7 +30876,18 @@ msgid ""
"[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."
+"fixed_column_width] greater than zero to wrap the text.\n"
+"[b]Incremental search:[/b] Like [PopupMenu] and [Tree], [ItemList] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/ItemList.xml
@@ -34550,11 +34634,16 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Returns the override [Material] for a surface of the [Mesh] resource.\n"
+"[b]Note:[/b] This function only returns [i]override[/i] materials associated "
+"with this [MeshInstance]. Consider using [method get_active_material] or "
+"[method Mesh.surface_get_material] to get materials associated with the "
+"[Mesh] resource."
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the number of surface materials."
+msgid "Returns the number of surface override materials."
msgstr ""
#: doc/classes/MeshInstance.xml
@@ -34591,7 +34680,10 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Sets the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Sets the override [Material] for the specified surface of the [Mesh] "
+"resource. This material is associated with this [MeshInstance] rather than "
+"with the [Mesh] resource."
msgstr ""
#: doc/classes/MeshInstance.xml
@@ -34622,9 +34714,10 @@ msgstr ""
#: doc/classes/MeshInstance2D.xml
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\"."
+"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be "
+"automatically created from an existing [Sprite] via a tool in the editor "
+"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to "
+"MeshInstance2D[/b] at the top of the 2D editor viewport."
msgstr ""
#: doc/classes/MeshInstance2D.xml
@@ -35382,6 +35475,9 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"Provides navigation and pathfinding within a collection of "
"[NavigationMesh]es. By default, these will be automatically collected from "
"child [NavigationMeshInstance] nodes. In addition to basic pathfinding, this "
@@ -35422,7 +35518,14 @@ msgid ""
msgstr ""
#: doc/classes/Navigation.xml
+msgid "Returns the [RID] of the navigation map on the [NavigationServer]."
+msgstr ""
+
+#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"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, "
@@ -35444,16 +35547,31 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation.get_simple_path] path query."
+msgstr ""
+
+#: doc/classes/Navigation.xml
+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/Navigation.xml doc/classes/Navigation2DServer.xml
+#: doc/classes/NavigationServer.xml
+msgid ""
+"Emitted when a navigation map is updated, when a region moves or is modified."
+msgstr ""
+
#: doc/classes/Navigation2D.xml
msgid "2D navigation and pathfinding node."
msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -35473,6 +35591,9 @@ msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -35482,6 +35603,12 @@ msgstr ""
msgid "The XY plane cell size to use for fields."
msgstr ""
+#: doc/classes/Navigation2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation2D.get_simple_path] path query."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml
msgid "Server interface for low-level 2D navigation access."
msgstr ""
@@ -35498,8 +35625,12 @@ msgid ""
"through scripts.\n"
"For two regions to be connected to each other, they must share a similar "
"edge. An edge is considered connected to another if both of its two vertices "
-"are at a distance less than [member Navigation.edge_connection_margin] to "
-"the respective other edge's vertex.\n"
+"are at a distance less than navigation map [code]edge_connection_margin[/"
+"code] to the respective other edge's vertex.\n"
+"You may assign navigation layers to regions with [method Navigation2DServer."
+"region_set_navigation_layers], which then can be checked upon when "
+"requesting a path with [method Navigation2DServer.map_get_path]. This allows "
+"allowing or forbidding some areas to 2D objects.\n"
"To use the collision avoidance system, you may use agents. You can set an "
"agent's target velocity, then the servers will emit a callback with a "
"modified velocity.\n"
@@ -35527,7 +35658,17 @@ msgid "Returns [code]true[/code] if the map got changed the previous frame."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Callback called at the end of the RVO process."
+msgid ""
+"Callback called at the end of the RVO process. If a callback is created "
+"manually and the agent is placed on a navigation map it will calculate "
+"avoidance for the agent and dispatch the calculated [code]safe_velocity[/"
+"code] to the [code]receiver[/code] object with a signal to the chosen "
+"[code]method[/code] name.\n"
+"[b]Note:[/b] Created callbacks are always processed independently of the "
+"SceneTree state as long as the agent is on a navigation map and not freed. "
+"To disable the dispatch of a callback from an agent use [method "
+"agent_set_callback] again with a [code]null[/code] object as the "
+"[code]receiver[/code]."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -35582,15 +35723,55 @@ msgid "Destroys the given RID."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns all created navigation map [RID]s on the NavigationServer. This "
+"returns both 2D and 3D created navigation maps as there is technically no "
+"distinction between them."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Create a new map."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"This function immediately forces synchronization of the specified navigation "
+"[code]map[/code] [RID]. By default navigation maps are only synchronized at "
+"the end of each physics frame. This function can be used to immediately "
+"(re)calculate all the navigation meshes and region connections of the "
+"navigation map. This makes it possible to query a navigation path for a "
+"changed map immediately and in the same frame (multiple times if needed).\n"
+"Due to technical restrictions the current NavigationServer command queue "
+"will be flushed. This means all already queued update commands for this "
+"physics frame will be executed, even those intended for other maps, regions "
+"and agents not part of the specified map. The expensive computation of the "
+"navigation meshes and region connections of a map will only be done for the "
+"specified map. Other maps will receive the normal synchronization at the end "
+"of the physics frame. Should the specified map receive changes after the "
+"forced update it will update again as well when the other maps receive their "
+"update.\n"
+"Avoidance processing and dispatch of the [code]safe_velocity[/code] signals "
+"is untouched by this function and continues to happen for all maps and "
+"agents at the end of the physics frame.\n"
+"[b]Note:[/b] With great power comes great responsibility. This function "
+"should only be used by users that really know what they are doing and have a "
+"good reason for it. Forcing an immediate update of a navigation map requires "
+"locking the NavigationServer and flushing the entire NavigationServer "
+"command queue. Not only can this severely impact the performance of a game "
+"but it can also introduce bugs if used inappropriately without much "
+"foresight."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns all navigation agents [RID]s that are currently assigned to the "
"requested navigation [code]map[/code]."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Returns the map cell size."
msgstr ""
@@ -35614,7 +35795,10 @@ msgid ""
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Returns the navigation path to reach the destination from the origin."
+msgid ""
+"Returns the navigation path to reach the destination from the origin. "
+"[code]navigation_layers[/code] is a bitmask of all region layers that are "
+"allowed to be in the path."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -35631,6 +35815,12 @@ msgstr ""
msgid "Sets the map active."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/"
+"b] Currently not implemented."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Set the map cell size used to weld the navigation mesh polygons."
msgstr ""
@@ -35646,14 +35836,73 @@ msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"Returns the ending point of a connection door. [code]connection[/code] is an "
+"index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns the starting point of a connection door. [code]connection[/code] is "
+"an index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns how many connections this [code]region[/code] has with other regions "
+"in the map."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns the navigation map [RID] the requested [code]region[/code] is "
"currently assigned to."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Returns the region's navigation layers."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns [code]true[/code] if the provided [code]point[/code] in world space "
+"is currently owned by the provided navigation [code]region[/code]. Owned in "
+"this context means that one of the region's navigation mesh polygon faces "
+"has a possible position at the closest distance to this point compared to "
+"all other navigation meshes from other navigation regions that are also "
+"registered on the navigation map of the provided region.\n"
+"If multiple navigation meshes have positions at equal distance the "
+"navigation region whose polygons are processed first wins the ownership. "
+"Polygons are processed in the same order that navigation regions were "
+"registered on the NavigationServer.\n"
+"[b]Note:[/b] If navigation meshes from different navigation regions overlap "
+"(which should be avoided in general) the result might not be what is "
+"expected."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Sets the map for the region."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method Navigation2DServer.map_get_path])."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Sets the navigation mesh for the region."
msgstr ""
@@ -35662,6 +35911,10 @@ msgstr ""
msgid "Sets the global transformation for the region."
msgstr ""
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]."
+msgstr ""
+
#: doc/classes/NavigationAgent.xml
msgid "3D agent used in navigation for collision avoidance."
msgstr ""
@@ -35671,9 +35924,16 @@ msgid ""
"3D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationAgent] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World] navigation map. If this node is a child of a [Navigation] "
+"node it will register to the navigation map of the navigation node or the "
+"function [method set_navigation] can be used to set the navigation node "
+"directly. [NavigationAgent] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -35691,7 +35951,15 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-msgid "Returns the path from start to finish in global coordinates."
+msgid ""
+"Returns this agent's current path from start to finish in global "
+"coordinates. The path only updates when the target location is changed or "
+"the agent requires a repath. The path array is not intended to be used in "
+"direct path movement as the agent has its own internal path logic that would "
+"get corrupted by changing the path array manually. Use the intended [method "
+"get_next_location] once every physics frame to receive the next path point "
+"for the agents movement as this function also updates the internal path "
+"logic."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -35706,11 +35974,24 @@ msgid ""
"system."
msgstr ""
-#: doc/classes/NavigationAgent.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"Returns a [Vector3] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the origin of the agent's parent."
+"Returns the [RID] of the navigation map for this NavigationAgent node. This "
+"function returns always the map set on the NavigationAgent node and not the "
+"map of the abstract agent on the NavigationServer. If the agent map is "
+"changed directly with the NavigationServer API the NavigationAgent node will "
+"not be aware of the map change. Use [method set_navigation_map] to change "
+"the navigation map for the NavigationAgent and also update the agent on the "
+"NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
+"Returns the next location in global coordinates that can be moved to, making "
+"sure that there are no static objects in the way. If the agent does not have "
+"a navigation path, it will return the position of the agent's parent. The "
+"use of this function once every physics frame is required to update the "
+"internal path logic of the NavigationAgent."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -35751,6 +36032,12 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"Sets the [RID] of the navigation map this NavigationAgent node should use "
+"and also updates the [code]agent[/code] on the NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"Sets the user desired final location. This will clear the current navigation "
"path."
msgstr ""
@@ -35763,7 +36050,13 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml
-msgid "The agent height offset to match the navigation mesh height."
+msgid ""
+"The NavigationAgent height offset is subtracted from the y-axis value of any "
+"vector path position for this NavigationAgent. The NavigationAgent height "
+"offset does not change or influence the navigation mesh or pathfinding query "
+"result. Additional navigation maps that use regions with navigation meshes "
+"that the developer baked with appropriate agent radius or height values are "
+"required to support different-sized agents."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -35790,26 +36083,53 @@ msgstr ""
msgid "The maximum speed that an agent can move."
msgstr ""
+#: doc/classes/NavigationAgent.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "The distance to search for other agents."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"The distance threshold before a path point is considered to be reached. This "
+"will allow an agent to not have to hit a path point on the path exactly, but "
+"in the area. If this value is set to high the NavigationAgent will skip "
+"points on the path which can lead to leaving the navigation mesh. If this "
+"value is set to low the NavigationAgent will be stuck in a repath loop cause "
+"it will constantly overshoot or undershoot the distance to the next point on "
+"each physics frame update."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"The maximum distance the agent is allowed away from the ideal path to the "
"final location. This can happen due to trying to avoid collisions. When the "
"maximum distance is exceeded, it recalculates the ideal path."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-msgid "The radius of the agent."
+msgid ""
+"The radius of the avoidance agent. This is the \"body\" of the avoidance "
+"agent and not the avoidance maneuver starting radius (which is controlled by "
+"[member neighbor_dist]).\n"
+"Does not affect normal pathfinding. To change an actor's pathfinding radius "
+"bake [NavigationMesh] resources with a different [member NavigationMesh."
+"agent_radius] property and use different navigation maps for each actor size."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"The distance threshold before a target is considered to be reached. This "
-"will allow an agent to not have to hit a point on the path exactly, but in "
-"the area."
+"The distance threshold before the final target point is considered to be "
+"reached. This will allow an agent to not have to hit the point of the final "
+"target exactly, but only the area. If this value is set to low the "
+"NavigationAgent will be stuck in a repath loop cause it will constantly "
+"overshoot or undershoot the distance to the final target point on each "
+"physics frame update."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -35852,9 +36172,16 @@ msgid ""
"2D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationAgent2D] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World2D] navigation map. If this node is a child of a "
+"[Navigation2D] node it will register to the navigation map of the navigation "
+"node or the function [method set_navigation] can be used to set the "
+"navigation node directly. [NavigationAgent2D] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent2D.xml
@@ -35870,13 +36197,6 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent2D.xml
-msgid ""
-"Returns a [Vector2] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the position of the agent's parent."
-msgstr ""
-
-#: doc/classes/NavigationAgent2D.xml
msgid "Returns the [RID] of this agent on the [Navigation2DServer]."
msgstr ""
@@ -35896,6 +36216,13 @@ msgid ""
"only be enabled on agents that currently require it."
msgstr ""
+#: doc/classes/NavigationAgent2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent2D] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationMesh.xml
msgid "A mesh to approximate the walkable areas and obstacles."
msgstr ""
@@ -35926,8 +36253,8 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
-"Returns whether the specified [code]bit[/code] of the [member geometry/"
-"collision_mask] is set."
+"Returns whether the specified [code]bit[/code] of the [member "
+"geometry_collision_mask] is set."
msgstr ""
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
@@ -35949,9 +36276,9 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/"
-"code] in the [member geometry/collision_mask].\n"
+"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]."
+"code] in the [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
@@ -35965,14 +36292,14 @@ 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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -35984,7 +36311,7 @@ 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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36012,13 +36339,17 @@ msgstr ""
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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
-"If [code]true[/code], marks walkable spans as not walkable if the clearance "
-"above the span is less than [member agent/height]."
+"If the baking [AABB] has a volume the navigation mesh baking will be "
+"restricted to its enclosing area."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+msgid "The position offset applied to the [member filter_baking_aabb] [AABB]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36028,13 +36359,19 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]true[/code], marks non-walkable spans as walkable if their maximum "
-"is within [member agent/max_climb] of a walkable neighbor."
+"is within [member agent_max_climb] of a walkable neighbor."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+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
msgid ""
"The physics layers to scan for static colliders.\n"
-"Only used when [member geometry/parsed_geometry_type] is [constant "
+"Only used when [member geometry_parsed_geometry_type] is [constant "
"PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]."
msgstr ""
@@ -36053,7 +36390,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"The name of the group to scan for geometry.\n"
-"Only used when [member geometry/source_geometry_mode] is [constant "
+"Only used when [member geometry_source_geometry_mode] is [constant "
"SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant "
"SOURCE_GEOMETRY_GROUPS_EXPLICIT]."
msgstr ""
@@ -36116,7 +36453,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Parses [StaticBody] colliders as geometry. The collider should be in any of "
-"the layers specified by [member geometry/collision_mask]."
+"the layers specified by [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36137,13 +36474,13 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Scans nodes in a group and their child nodes recursively for geometry. The "
-"group is specified by [member geometry/source_group_name]."
+"group is specified by [member geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Uses nodes in a group for geometry. The group is specified by [member "
-"geometry/source_group_name]."
+"geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36185,7 +36522,15 @@ msgid ""
"geometry for walkable terrain suitable to [NavigationMesh] agent properties "
"by creating a voxel world around the meshes bounding area.\n"
"The finalized navigation mesh is then returned and stored inside the "
-"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes."
+"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] "
+"nodes.\n"
+"[b]Note:[/b] Using meshes to not only define walkable surfaces but also "
+"obstruct navigation baking does not always work. The navigation baking has "
+"no concept of what is a geometry \"inside\" when dealing with mesh source "
+"geometry and this is intentional. Depending on current baking parameters, as "
+"soon as the obstructing mesh is large enough to fit a navigation mesh area "
+"inside, the baking will generate navigation mesh areas that are inside the "
+"obstructing source geometry mesh."
msgstr ""
#: doc/classes/NavigationMeshGenerator.xml
@@ -36193,8 +36538,8 @@ msgid ""
"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child "
"nodes under the provided [code]root_node[/code] or a specific group of nodes "
"for potential source geometry. The parse behavior can be controlled with the "
-"[member NavigationMesh.geometry/parsed_geometry_type] and [member "
-"NavigationMesh.geometry/source_geometry_mode] properties on the "
+"[member NavigationMesh.geometry_parsed_geometry_type] and [member "
+"NavigationMesh.geometry_source_geometry_mode] properties on the "
"[NavigationMesh] resource."
msgstr ""
@@ -36211,8 +36556,21 @@ msgstr ""
#: doc/classes/NavigationMeshInstance.xml
msgid ""
"An instance of a [NavigationMesh]. It tells the [Navigation] node what can "
-"be navigated and what cannot, based on the [NavigationMesh] resource. This "
-"should be a child of a [Navigation] node."
+"be navigated and what cannot, based on the [NavigationMesh] resource.\n"
+"By default this node will register to the default [World] navigation map. If "
+"this node is a child of a [Navigation] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method NavigationServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The cost of entering this region from another region can be controlled with "
+"the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The cost of traveling distances inside this region can be controlled with "
+"the [member travel_cost] multiplier."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
@@ -36241,10 +36599,34 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding enters this region's navmesh from another regions navmesh "
+"the [code]enter_cost[/code] value is added to the path distance for "
+"determining the shortest path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationMesh] "
+"belongs to. On path requests with [method NavigationServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
msgid "The [NavigationMesh] resource to use."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding moves inside this region's navmesh the traveled distances "
+"are multiplied with [code]travel_cost[/code] for determining the shortest "
+"path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
msgid "Notifies when the navigation mesh bake operation is completed."
msgstr ""
@@ -36261,7 +36643,9 @@ msgid ""
"3D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationObstacle] is physics safe."
+"[NavigationObstacle] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle.xml
@@ -36301,7 +36685,9 @@ msgid ""
"2D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationObstacle2D] is physics safe."
+"[NavigationObstacle2D] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle2D.xml
@@ -36381,6 +36767,14 @@ msgstr ""
#: doc/classes/NavigationPolygon.xml
msgid ""
+"Returns the [NavigationMesh] resulting from this navigation polygon. This "
+"navmesh can be used to update the navmesh of a region with the [method "
+"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server "
+"behind the scene)."
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml
+msgid ""
"Returns a [PoolVector2Array] containing the vertices of an outline that was "
"created in the editor or by script."
msgstr ""
@@ -36417,6 +36811,30 @@ msgid ""
msgstr ""
#: doc/classes/NavigationPolygonInstance.xml
+msgid "A region of the 2D navigation map."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A region of the navigation map. It tells the [Navigation2DServer] what can "
+"be navigated and what cannot, based on its [NavigationPolygon] resource.\n"
+"By default this node will register to the default [World2D] navigation map. "
+"If this node is a child of a [Navigation2D] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The pathfinding cost of entering this region from another region can be "
+"controlled with the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The pathfinding cost of traveling distances inside this region can be "
+"controlled with the [member travel_cost] multiplier."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
msgid ""
"Returns the [RID] of this region on the [Navigation2DServer]. Combined with "
"[method Navigation2DServer.map_get_closest_point_owner] can be used to "
@@ -36424,6 +36842,22 @@ msgid ""
"navigation map."
msgstr ""
+#: doc/classes/NavigationPolygonInstance.xml
+msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationPolygon] "
+"belongs to. On path requests with [method Navigation2DServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid "The [NavigationPolygon] resource to use."
+msgstr ""
+
#: doc/classes/NavigationServer.xml
msgid "Server interface for low-level 3D navigation access."
msgstr ""
@@ -36499,6 +36933,12 @@ msgid "Bakes the navigation mesh."
msgstr ""
#: doc/classes/NavigationServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method NavigationServer.map_get_path])."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
msgid "Control activation of this server."
msgstr ""
@@ -37965,13 +38405,19 @@ msgstr ""
#: doc/classes/Node.xml
msgid ""
"Emitted when a child node enters the scene tree, either because it entered "
-"on its own or because this node entered with it."
+"on its own or because this node entered with it.\n"
+"This signal is emitted [i]after[/i] the child node's own [constant "
+"NOTIFICATION_ENTER_TREE] and [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
msgid ""
-"Emitted when a child node exits the scene tree, either because it exited on "
-"its own or because this node exited."
+"Emitted when a child node is about to exit the scene tree, either because it "
+"is being removed or freed directly, or because this node is exiting the "
+"tree.\n"
+"When this signal is received, the child [code]node[/code] is still in the "
+"tree and valid. This signal is emitted [i]after[/i] the child node's own "
+"[signal tree_exiting] and [constant NOTIFICATION_EXIT_TREE]."
msgstr ""
#: doc/classes/Node.xml
@@ -37983,7 +38429,10 @@ msgid "Emitted when the node is renamed."
msgstr ""
#: doc/classes/Node.xml
-msgid "Emitted when the node enters the tree."
+msgid ""
+"Emitted when the node enters the tree.\n"
+"This signal is emitted [i]after[/i] the related [constant "
+"NOTIFICATION_ENTER_TREE] notification."
msgstr ""
#: doc/classes/Node.xml
@@ -37993,15 +38442,21 @@ msgstr ""
#: doc/classes/Node.xml
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)."
+"the right place for de-initialization (or a \"destructor\", if you will).\n"
+"This signal is emitted [i]before[/i] the related [constant "
+"NOTIFICATION_EXIT_TREE] notification."
msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node enters a [SceneTree]."
+msgid ""
+"Notification received when the node enters a [SceneTree].\n"
+"This notification is emitted [i]before[/i] the related [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node is about to exit a [SceneTree]."
+msgid ""
+"Notification received when the node is about to exit a [SceneTree].\n"
+"This notification is emitted [i]after[/i] the related [signal tree_exiting]."
msgstr ""
#: doc/classes/Node.xml
@@ -38262,7 +38717,13 @@ msgid "Rotation in degrees, relative to the node's parent."
msgstr ""
#: doc/classes/Node2D.xml
-msgid "The node's scale. Unscaled value: [code](1, 1)[/code]."
+msgid ""
+"The node's scale. Unscaled value: [code](1, 1)[/code].\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
#: doc/classes/Node2D.xml
@@ -39702,6 +40163,10 @@ msgid ""
" if argument.find(\"=\") > -1:\n"
" var key_value = argument.split(\"=\")\n"
" arguments[key_value[0].lstrip(\"--\")] = key_value[1]\n"
+" else:\n"
+" # Options without an argument will be present in the dictionary,\n"
+" # with the value set to an empty string.\n"
+" arguments[argument.lstrip(\"--\")] = \"\"\n"
"[/codeblock]"
msgstr ""
@@ -40355,8 +40820,15 @@ msgstr ""
msgid ""
"Moves the file or directory to the system's recycle bin. See also [method "
"Directory.remove].\n"
+"The method takes only global paths, so you may need to use [method "
+"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/"
+"code] as it will not work in exported project.\n"
"[b]Note:[/b] If the user has disabled the recycle bin on their system, the "
-"file will be permanently deleted instead."
+"file will be permanently deleted instead.\n"
+"[codeblock]\n"
+"var file_to_remove = \"user://slot1.sav\"\n"
+"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/OS.xml
@@ -45195,7 +45667,18 @@ msgstr ""
#: doc/classes/PopupMenu.xml
msgid ""
"[PopupMenu] is a [Control] that displays a list of options. They are popular "
-"in toolbars or context menus."
+"in toolbars or context menus.\n"
+"[b]Incremental search:[/b] Like [ItemList] and [Tree], [PopupMenu] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/PopupMenu.xml
@@ -46702,7 +47185,16 @@ msgid ""
msgstr ""
#: doc/classes/ProjectSettings.xml
-msgid "Message to be displayed before the backtrace when the engine crashes."
+msgid ""
+"Message to be displayed before the backtrace when the engine crashes. By "
+"default, this message is only used in exported projects due to the editor-"
+"only override applied to this setting."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Editor-only override for [member debug/settings/crash_handler/message]. Does "
+"not affect exported projects in debug or release mode."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -46947,6 +47439,18 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default naming style for scene files to infer from their root nodes. "
+"Possible options are:\n"
+"- [code]0[/code] (Auto): Uses the scene root name as is without changing its "
+"casing.\n"
+"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase "
+"casing.\n"
+"- [code]2[/code] (snake_case): Converts the scene root name to snake_case "
+"casing."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -47172,6 +47676,198 @@ msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 1."
msgstr ""
@@ -47380,6 +48076,198 @@ msgid "Optional name for the 2D render layer 9."
msgstr ""
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 1."
msgstr ""
@@ -47647,6 +48535,49 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default cell height for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_height].\n"
+"[b]Note:[/b] Currently not implemented."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 2D navigation maps. See [method "
+"Navigation2DServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell height for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_height]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 3D navigation maps. See [method "
+"NavigationServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default map up vector for 3D navigation maps. See [method NavigationServer."
+"map_set_up]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -48320,20 +49251,28 @@ msgid ""
"cause.\n"
"The default value is a conservative one, so you are advised to tweak it "
"according to the hardware you are targeting.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"The default is a very conservative override for [code]rendering/gles3/"
-"shaders/max_concurrent_compiles[/code].\n"
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
"Depending on the specific devices you are targeting, you may want to raise "
"it.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
+"Depending on the specific browsers you are targeting, you may want to raise "
+"it.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -48341,19 +49280,28 @@ msgid ""
"The maximum size, in megabytes, that the ubershader cache can grow up to. On "
"startup, the least recently used entries will be deleted until the total "
"size is within bounds.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/ubershader_cache_size_mb[/"
-"code], so a smaller maximum size can be configured for mobile platforms, "
-"where storage space is more limited.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for mobile platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for web platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] Currently, shader caching is generally unavailable on web "
+"platforms.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -48385,14 +49333,22 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/shader_compilation_mode[/"
-"code], so asynchronous compilation can be disabled for mobile.\n"
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on mobile platforms.\n"
"You may want to do that since mobile GPUs generally won't support "
"ubershaders due to their complexity."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on web platforms.\n"
+"You may want to do that since certain browsers (especially on mobile "
+"platforms) generally won't support ubershaders due to their complexity."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
@@ -49149,7 +50105,6 @@ msgid ""
"- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/"
"code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, "
"small grid radius values may lead to unwanted groupings.\n"
-"[/codeblock]\n"
"[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more "
"effective and faster [VisibilityNotifier] functionality. For most use cases, "
"[method Vector3.distance_to] or [method Vector3.distance_squared_to] are "
@@ -51296,6 +52251,22 @@ msgid "Makes text fill width."
msgstr ""
#: doc/classes/RichTextLabel.xml
+msgid "Aligns top of the inline image to the top of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns center of the inline image to the center of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns bottom of the inline image to the baseline of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns bottom of the inline image to the bottom of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
msgid "Each list item has a number marker."
msgstr ""
@@ -53033,8 +54004,8 @@ msgid ""
" yield(get_tree().create_timer(1.0), \"timeout\")\n"
" print(\"Timer ended.\")\n"
"[/codeblock]\n"
-"The timer will be automatically freed after its time elapses, so be aware "
-"that any reference you might have kept to it will become invalid."
+"The timer will be dereferenced after its time elapses. To preserve the "
+"timer, you can keep a reference to it. See [Reference]."
msgstr ""
#: doc/classes/SceneTreeTimer.xml
@@ -53066,24 +54037,23 @@ msgid ""
"manually (i.e. by using [code]Tween.new()[/code]) are invalid. They can't be "
"used for tweening values, but you can do manual interpolation with [method "
"interpolate_value].\n"
-"A [SceneTreeTween] animation is composed of a sequence of [Tweener]s, which "
-"by default are executed one after another. You can create a sequence by "
-"appending [Tweener]s to the [SceneTreeTween]. Animating something with a "
-"[Tweener] is called tweening. Example tweening sequence looks like this:\n"
+"A tween animation is created by adding [Tweener]s to the [SceneTreeTween] "
+"object, using [method tween_property], [method tween_interval], [method "
+"tween_callback] or [method tween_method]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1)\n"
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"This sequence will make the [code]$Sprite[/code] node turn red, then shrink "
-"and finally the [method Node.queue_free] is called to remove the sprite. See "
-"methods [method tween_property], [method tween_interval], [method "
-"tween_callback] and [method tween_method] for more usage information.\n"
+"This sequence will make the [code]$Sprite[/code] node turn red, then shrink, "
+"before finally calling [method Node.queue_free] to free the sprite. "
+"[Tweener]s are executed one after another by default. This behavior can be "
+"changed using [method parallel] and [method set_parallel].\n"
"When a [Tweener] is created with one of the [code]tween_*[/code] methods, a "
"chained method call can be used to tweak the properties of this [Tweener]. "
-"For example, if you want to set different transition type in the above "
-"example, you can do:\n"
+"For example, if you want to set a different transition type in the above "
+"example, you can use [method set_trans]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1).set_trans(Tween."
@@ -53092,8 +54062,9 @@ msgid ""
"TRANS_BOUNCE)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Most of the [SceneTreeTween] methods can be chained this way too. In this "
-"example the [SceneTreeTween] is bound and have set a default transition:\n"
+"Most of the [SceneTreeTween] methods can be chained this way too. In the "
+"following example the [SceneTreeTween] is bound to the running script's node "
+"and a default transition is set for its [Tweener]s:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween().bind_node(self).set_trans(Tween."
"TRANS_ELASTIC)\n"
@@ -53101,16 +54072,16 @@ msgid ""
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Another interesting use for [SceneTreeTween]s is animating arbitrary set of "
+"Another interesting use for [SceneTreeTween]s is animating arbitrary sets of "
"objects:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"for sprite in get_children():\n"
-" tween.tween_property(sprite, \"position\", Vector2(), 1)\n"
+" tween.tween_property(sprite, \"position\", Vector2(0, 0), 1)\n"
"[/codeblock]\n"
"In the example above, all children of a node are moved one after another to "
"position (0, 0).\n"
-"Some [Tweener]s use transitions and eases. The first accepts an [enum Tween."
+"Some [Tweener]s use transitions and eases. The first accepts a [enum Tween."
"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 Tween.EaseType] constant, and "
@@ -53122,7 +54093,7 @@ msgid ""
"tween_cheatsheet.png]Tween easing and transition types cheatsheet[/url]\n"
"[b]Note:[/b] All [SceneTreeTween]s will automatically start by default. To "
"prevent a [SceneTreeTween] from autostarting, you can call [method stop] "
-"immediately after it was created."
+"immediately after it is created."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53152,21 +54123,24 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
-"Processes the [SceneTreeTween] by given [code]delta[/code] value, in "
-"seconds. Mostly useful when the [SceneTreeTween] is paused, for controlling "
-"it manually. Can also be used to end the [SceneTreeTween] animation "
-"immediately, by using [code]delta[/code] longer than the whole duration.\n"
+"Processes the [SceneTreeTween] by the given [code]delta[/code] value, in "
+"seconds. This is mostly useful for manual control when the [SceneTreeTween] "
+"is paused. It can also be used to end the [SceneTreeTween] animation "
+"immediately, by setting [code]delta[/code] longer than the whole duration of "
+"the [SceneTreeTween] animation.\n"
"Returns [code]true[/code] if the [SceneTreeTween] still has [Tweener]s that "
"haven't finished.\n"
-"[b]Note:[/b] The [SceneTreeTween] will become invalid after finished, but "
-"you can call [method stop] after the step, to keep it and reset."
+"[b]Note:[/b] The [SceneTreeTween] will become invalid in the next processing "
+"frame after its animation finishes. Calling [method stop] after performing "
+"[method custom_step] instead keeps and resets the [SceneTreeTween]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Returns the total time in seconds the [SceneTreeTween] has been animating (i."
-"e. time since it started, not counting pauses etc.). The time is affected by "
-"[method set_speed_scale] and [method stop] will reset it to [code]0[/code].\n"
+"e. the time since it started, not counting pauses etc.). The time is "
+"affected by [method set_speed_scale], and [method stop] will reset it to "
+"[code]0[/code].\n"
"[b]Note:[/b] As it results from accumulating frame deltas, the time returned "
"after the [SceneTreeTween] has finished animating will be slightly greater "
"than the actual [SceneTreeTween] duration."
@@ -53202,11 +54176,10 @@ msgstr ""
msgid ""
"Returns whether the [SceneTreeTween] is valid. A valid [SceneTreeTween] is a "
"[SceneTreeTween] contained by the scene tree (i.e. the array from [method "
-"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). "
-"[SceneTreeTween] might become invalid when it has finished tweening or was "
-"killed, also when created with [code]Tween.new()[/code]. Invalid "
-"[SceneTreeTween] can't have [Tweener]s appended, because it can't animate "
-"them. You can however still use [method interpolate_value]."
+"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). A "
+"[SceneTreeTween] might become invalid when it has finished tweening, is "
+"killed, or when created with [code]SceneTreeTween.new()[/code]. Invalid "
+"[SceneTreeTween]s can't have [Tweener]s appended."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53246,16 +54219,15 @@ msgstr ""
msgid ""
"Sets the number of times the tweening sequence will be repeated, i.e. "
"[code]set_loops(2)[/code] will run the animation twice.\n"
-"Calling this method without arguments will make the [SceneTreeTween] run "
-"infinitely, until it is either killed by [method kill] or by freeing bound "
-"node, or all the animated objects have been freed (which makes further "
+"Calling this method without arguments will make the [Tween] run infinitely, "
+"until either it is killed with [method kill], the [Tween]'s bound node is "
+"freed, or all the animated objects have been freed (which makes further "
"animation impossible).\n"
"[b]Warning:[/b] Make sure to always add some duration/delay when using "
-"infinite loops. 0-duration looped animations (e.g. single [CallbackTweener] "
-"with no delay or [PropertyTweener] with invalid node) are equivalent to "
-"infinite [code]while[/code] loops and will freeze your game. If a "
-"[SceneTreeTween]'s lifetime depends on some node, always use [method "
-"bind_node]."
+"infinite loops. To prevent the game freezing, 0-duration looped animations "
+"(e.g. a single [CallbackTweener] with no delay) are stopped after a small "
+"number of loops, which may produce unexpected results. If a [Tween]'s "
+"lifetime depends on some node, always use [method bind_node]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53317,10 +54289,10 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Creates and appends an [IntervalTweener]. This method can be used to create "
-"delays in the tween animation, as an alternative for using the delay in "
-"other [Tweener]s or when there's no animation (in which case the "
-"[SceneTreeTween] acts as a timer). [code]time[/code] is the length of the "
-"interval, in seconds.\n"
+"delays in the tween animation, as an alternative to using the delay in other "
+"[Tweener]s, or when there's no animation (in which case the [SceneTreeTween] "
+"acts as a timer). [code]time[/code] is the length of the interval, in "
+"seconds.\n"
"Example: creating an interval in code execution.\n"
"[codeblock]\n"
"# ... some code\n"
@@ -53374,8 +54346,8 @@ msgid ""
"Creates and appends a [PropertyTweener]. This method tweens a "
"[code]property[/code] of an [code]object[/code] between an initial value and "
"[code]final_val[/code] in a span of time equal to [code]duration[/code], in "
-"seconds. The initial value by default is a value at the time the tweening of "
-"the [PropertyTweener] start. For example:\n"
+"seconds. The initial value by default is the property's value at the time "
+"the tweening of the [PropertyTweener] starts. For example:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"tween.tween_property($Sprite, \"position\", Vector2(100, 200), 1)\n"
@@ -53406,16 +54378,15 @@ msgid ""
"Emitted when the [SceneTreeTween] has finished all tweening. Never emitted "
"when the [SceneTreeTween] is set to infinite looping (see [method "
"set_loops]).\n"
-"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) after this signal "
-"is emitted, but it doesn't happen immediately, but on the next processing "
-"frame. Calling [method stop] inside the signal callback will preserve the "
-"[SceneTreeTween]."
+"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) in the next "
+"processing frame after this signal is emitted. Calling [method stop] inside "
+"the signal callback will prevent the [SceneTreeTween] from being removed."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Emitted when a full loop is complete (see [method set_loops]), providing the "
-"loop index. This signal is not emitted after final loop, use [signal "
+"loop index. This signal is not emitted after the final loop, use [signal "
"finished] instead for this case."
msgstr ""
@@ -53423,7 +54394,7 @@ msgstr ""
msgid ""
"Emitted when one step of the [SceneTreeTween] is complete, providing the "
"step index. One step is either a single [Tweener] or a group of [Tweener]s "
-"running parallelly."
+"running in parallel."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -54755,7 +55726,12 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-msgid "Scale part of the local transformation."
+msgid ""
+"Scale part of the local transformation.\n"
+"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, the scale values will either be all "
+"positive or all negative."
msgstr ""
#: doc/classes/Spatial.xml
@@ -57386,11 +58362,11 @@ msgstr ""
msgid ""
"Returns [code]true[/code] if this string contains a valid integer.\n"
"[codeblock]\n"
-"print(\"7\".is_valid_int()) # Prints \"True\"\n"
-"print(\"14.6\".is_valid_int()) # Prints \"False\"\n"
-"print(\"L\".is_valid_int()) # Prints \"False\"\n"
-"print(\"+3\".is_valid_int()) # Prints \"True\"\n"
-"print(\"-12\".is_valid_int()) # Prints \"True\"\n"
+"print(\"7\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"14.6\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"L\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"+3\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"-12\".is_valid_integer()) # Prints \"True\"\n"
"[/codeblock]"
msgstr ""
@@ -60856,6 +61832,10 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml
+msgid "If [code]true[/code], this TileMap bakes a navigation region."
+msgstr ""
+
+#: doc/classes/TileMap.xml
msgid "If [code]true[/code], the cell's UVs will be clipped."
msgstr ""
@@ -60962,6 +61942,10 @@ msgid "The TileMap orientation mode. See [enum Mode] for possible values."
msgstr ""
#: doc/classes/TileMap.xml
+msgid "The navigation layers the TileMap generates its navigation regions in."
+msgstr ""
+
+#: doc/classes/TileMap.xml
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 "
@@ -62093,7 +63077,12 @@ msgstr ""
#: doc/classes/Transform2D.xml
msgid ""
"Returns a copy of the transform scaled by the given [code]scale[/code] "
-"factor, using matrix multiplication."
+"factor, using matrix multiplication.\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
#: doc/classes/Transform2D.xml
@@ -62248,7 +63237,18 @@ msgid ""
"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]."
+"to remove it from the [Tree].\n"
+"[b]Incremental search:[/b] Like [ItemList] and [PopupMenu], [Tree] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/Tree.xml
@@ -65764,11 +66764,12 @@ msgid "This enabler will stop [Particles2D] nodes."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _process function."
+msgid "This enabler will stop the parent's [method Node._process] function."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _physics_process function."
+msgid ""
+"This enabler will stop the parent's [method Node._physics_process] function."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
@@ -65808,6 +66809,16 @@ msgid "The VisibilityNotifier's bounding box."
msgstr ""
#: doc/classes/VisibilityNotifier.xml
+msgid ""
+"In addition to checking whether a node is on screen or within a [Camera]'s "
+"view, VisibilityNotifier can also optionally check whether a node is within "
+"a specified maximum distance when using a [Camera] with perspective "
+"projection. This is useful for throttling the performance requirements of "
+"nodes that are far away.\n"
+"[b]Note:[/b] This feature will be disabled if set to 0.0."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier.xml
msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view."
msgstr ""
@@ -70553,6 +71564,16 @@ msgid "The amount of shader rebinds in the frame."
msgstr ""
#: doc/classes/VisualServer.xml
+msgid ""
+"The peak amount of shaders that have been under compilation in the frame.\n"
+"This is useful to know when asynchronous shader compilation has finished for "
+"the current shaders on screen.\n"
+"[b]Note:[/b] For complete certainty, only assume there are no outstanding "
+"compilations when this value is zero for at least two frames in a row.\n"
+"Unimplemented in the GLES2 rendering backend, always returns 0."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
msgid "The amount of surface changes in the frame."
msgstr ""
@@ -73749,8 +74770,8 @@ msgstr ""
#: doc/classes/World.xml
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."
+"scenario, a navigation map and a sound space. Spatial nodes register their "
+"resources into the current world."
msgstr ""
#: doc/classes/World.xml
@@ -73765,8 +74786,13 @@ msgstr ""
#: doc/classes/World.xml
msgid ""
-"The World's fallback_environment will be used if the World's [Environment] "
-"fails or is missing."
+"The World's fallback environment will be used if [member environment] fails "
+"or is missing."
+msgstr ""
+
+#: doc/classes/World.xml
+msgid ""
+"The [RID] of this world's navigation map. Used by the [NavigationServer]."
msgstr ""
#: doc/classes/World.xml
@@ -73784,8 +74810,8 @@ msgstr ""
#: doc/classes/World2D.xml
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."
+"visual scenario, a navigation map and a sound space. 2D nodes register their "
+"resources into the current 2D world."
msgstr ""
#: doc/classes/World2D.xml
@@ -73803,6 +74829,11 @@ msgstr ""
#: doc/classes/World2D.xml
msgid ""
+"The [RID] of this world's navigation map. Used by the [Navigation2DServer]."
+msgstr ""
+
+#: doc/classes/World2D.xml
+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 ""
diff --git a/doc/translations/cs.po b/doc/translations/cs.po
index 8673936d3f..e6d0fc8c49 100644
--- a/doc/translations/cs.po
+++ b/doc/translations/cs.po
@@ -489,7 +489,7 @@ msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
msgid ""
"Compares two values by checking their actual contents, recursing into any "
-"`Array` or `Dictionary` up to its deepest level.\n"
+"[Array] or [Dictionary] up to its deepest level.\n"
"This compares to [code]==[/code] in a number of ways:\n"
"- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/"
"code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] "
@@ -542,7 +542,7 @@ msgid ""
"- 1.0: Linear\n"
"- Greater than 1.0 (exclusive): Ease in\n"
"[/codeblock]\n"
-"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.4/img/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/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]."
@@ -1574,7 +1574,7 @@ msgid ""
"[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/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/img/"
"smoothstep_ease_comparison.png]Comparison between smoothstep() and ease(x, "
"-1.6521) return values[/url]"
msgstr ""
@@ -3877,6 +3877,12 @@ msgstr ""
#: doc/classes/@GlobalScope.xml
msgid ""
+"Hints that an integer property is a bitmask using the optionally named 2D "
+"navigation layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml
+msgid ""
"Hints that an integer property is a bitmask using the optionally named 3D "
"render layers."
msgstr ""
@@ -3889,6 +3895,12 @@ msgstr ""
#: doc/classes/@GlobalScope.xml
msgid ""
+"Hints that an integer property is a bitmask using the optionally named 3D "
+"navigation layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml
+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]."
@@ -8869,7 +8881,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/AStar.xml
+#: doc/classes/AStar.xml doc/classes/AStar2D.xml
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[/"
@@ -9068,7 +9080,10 @@ msgid ""
msgstr ""
#: doc/classes/AStar2D.xml
-msgid "Returns whether there is a connection/segment between the given points."
+msgid ""
+"Returns whether there is a connection/segment between the given points. 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/AStar2D.xml
@@ -9085,10 +9100,6 @@ msgid ""
msgstr ""
#: doc/classes/AStar2D.xml
-msgid "Deletes the segment between the given points."
-msgstr ""
-
-#: doc/classes/AStar2D.xml
msgid ""
"Returns the closest position to [code]to_position[/code] that resides inside "
"a segment between two connected points.\n"
@@ -9273,7 +9284,9 @@ msgid ""
"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."
+"transmit audio over the network. When capturing audio data from a "
+"microphone, the format of the samples will be stereo 32-bit floating point "
+"PCM."
msgstr ""
#: doc/classes/AudioEffectCapture.xml
@@ -14133,7 +14146,7 @@ msgid ""
msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
-#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/Navigation2D.xml
msgid "Returns the object's [RID]."
msgstr ""
@@ -19646,11 +19659,15 @@ msgid ""
msgstr ""
#: doc/classes/CurveTexture.xml
-msgid "The [code]curve[/code] rendered onto the texture."
-msgstr ""
+#, fuzzy
+msgid "The [Curve] that is rendered onto the texture."
+msgstr "Vrátí sinus parametru."
#: doc/classes/CurveTexture.xml
-msgid "The width of the texture."
+msgid ""
+"The width of the texture (in pixels). Higher values make it possible to "
+"represent high-frequency data better (such as sudden direction changes), at "
+"the cost of increased generation time and memory usage."
msgstr ""
#: doc/classes/CylinderMesh.xml
@@ -19937,6 +19954,13 @@ msgid "Returns the list of keys in the [Dictionary]."
msgstr ""
#: doc/classes/Dictionary.xml
+msgid ""
+"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, "
+"duplicate keys will not be copied over, unless [code]overwrite[/code] is "
+"[code]true[/code]."
+msgstr ""
+
+#: doc/classes/Dictionary.xml
#, fuzzy
msgid "Returns the number of keys in the dictionary."
msgstr "Vrátí zbytek po dělení dvou vektorů."
@@ -21878,9 +21902,23 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide a state data you want to be saved, like view "
+"position, grid settings, folding, etc. 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). This data is automatically saved for "
+"each scene in an [code]editstate[/code] file in the editor metadata folder. "
+"If you want to store global (scene-independent) editor data for your plugin, "
+"you can use [method get_window_layout] instead.\n"
+"Use [method set_state] to restore your saved state.\n"
+"[b]Note:[/b] This method should not be used to save important settings that "
+"should persist with the project.\n"
+"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be "
+"stored and restored correctly.\n"
+"[codeblock]\n"
+"func get_state():\n"
+" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n"
+" return state\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -21891,9 +21929,18 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide the GUI layout of the plugin or any other "
+"data you want to be stored. 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). The data is stored in the "
+"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n"
+"Use [method set_window_layout] to restore your saved layout.\n"
+"[codeblock]\n"
+"func get_window_layout(configuration):\n"
+" configuration.set_value(\"MyPlugin\", \"window_position\", $Window."
+"position)\n"
+" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -22006,11 +22053,30 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the state saved by [method get_state]."
+msgid ""
+"Restore the state saved by [method get_state]. This method is called when "
+"the current scene tab is changed in the editor.\n"
+"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise "
+"it will not be recognized and this method will not be called.\n"
+"[codeblock]\n"
+"func set_state(data):\n"
+" zoom = data.get(\"zoom\", 1.0)\n"
+" preferred_color = data.get(\"my_color\", Color.white)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the plugin GUI layout saved by [method get_window_layout]."
+msgid ""
+"Restore the plugin GUI layout and data saved by [method get_window_layout]. "
+"This method is called for every plugin on editor startup. Use the provided "
+"[code]configuration[/code] file to read your saved data.\n"
+"[codeblock]\n"
+"func set_window_layout(configuration):\n"
+" $Window.position = configuration.get_value(\"MyPlugin\", "
+"\"window_position\", Vector2())\n"
+" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", "
+"Color.white)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -26661,7 +26727,8 @@ msgid ""
"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])."
+"at fixed steps (see [member width]). See also [GradientTexture2D] and "
+"[CurveTexture]."
msgstr ""
#: doc/classes/GradientTexture.xml
@@ -26683,7 +26750,8 @@ msgid ""
"repeat] types using colors obtained from the gradient. 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] and [member height])."
+"[member width] and [member height]). See also [GradientTexture] and "
+"[CurveTexture]."
msgstr ""
#: doc/classes/GradientTexture2D.xml
@@ -27495,6 +27563,13 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+#, fuzzy
+msgid ""
+"If [code]true[/code], this GridMap uses cell navmesh resources to create "
+"navigation regions."
+msgstr "Vrací [code]true[/code] pokud [code]s[/code] je nula nebo téměř nula."
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid "If [code]true[/code], grid items are centered on the X axis."
msgstr ""
@@ -27545,6 +27620,10 @@ msgid "The assigned [MeshLibrary]."
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+msgid "The navigation layers the GridMap generates its navigation regions in."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
"Overrides the default friction and bounce physics properties for the whole "
"[GridMap]."
@@ -28768,7 +28847,7 @@ msgid ""
" # 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 body = to_json({\"name\": \"Godette\"})\n"
" error = http_request.request(\"https://httpbin.org/post\", [], true, "
"HTTPClient.METHOD_POST, body)\n"
" if error != OK:\n"
@@ -29938,7 +30017,7 @@ msgstr ""
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 "
+"([member 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 "
@@ -30087,10 +30166,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Returns the mouse mode. See the constants for more information."
-msgstr ""
-
-#: doc/classes/Input.xml
msgid ""
"Gets an input vector by specifying four actions for the positive and "
"negative X and Y axes.\n"
@@ -30284,24 +30359,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Sets the mouse mode. See the constants for more information."
-msgstr ""
-
-#: doc/classes/Input.xml
-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
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 "
@@ -30337,6 +30394,24 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
+msgid "Controls the mouse mode. See [enum MouseMode] for more information."
+msgstr ""
+
+#: doc/classes/Input.xml
+msgid ""
+"If [code]true[/code], similar input events sent by the operating system are "
+"accumulated. 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 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
msgid "Emitted when a joypad device has been connected or disconnected."
msgstr ""
@@ -30644,8 +30719,8 @@ msgstr ""
#: doc/classes/InputEventJoypadButton.xml
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]."
+"Represents the pressure the user puts on the button with their finger, if "
+"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]."
msgstr ""
#: doc/classes/InputEventJoypadMotion.xml
@@ -30908,9 +30983,9 @@ 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 "
+"at most. If you need more precise input reporting, set [member Input."
+"use_accumulated_input] to [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."
@@ -31398,7 +31473,18 @@ msgid ""
"[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."
+"fixed_column_width] greater than zero to wrap the text.\n"
+"[b]Incremental search:[/b] Like [PopupMenu] and [Tree], [ItemList] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/ItemList.xml
@@ -35154,12 +35240,18 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Returns the override [Material] for a surface of the [Mesh] resource.\n"
+"[b]Note:[/b] This function only returns [i]override[/i] materials associated "
+"with this [MeshInstance]. Consider using [method get_active_material] or "
+"[method Mesh.surface_get_material] to get materials associated with the "
+"[Mesh] resource."
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the number of surface materials."
-msgstr ""
+#, fuzzy
+msgid "Returns the number of surface override materials."
+msgstr "Vrátí zbytek po dělení dvou vektorů."
#: doc/classes/MeshInstance.xml
msgid ""
@@ -35195,7 +35287,10 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Sets the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Sets the override [Material] for the specified surface of the [Mesh] "
+"resource. This material is associated with this [MeshInstance] rather than "
+"with the [Mesh] resource."
msgstr ""
#: doc/classes/MeshInstance.xml
@@ -35226,9 +35321,10 @@ msgstr ""
#: doc/classes/MeshInstance2D.xml
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\"."
+"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be "
+"automatically created from an existing [Sprite] via a tool in the editor "
+"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to "
+"MeshInstance2D[/b] at the top of the 2D editor viewport."
msgstr ""
#: doc/classes/MeshInstance2D.xml
@@ -35994,6 +36090,9 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"Provides navigation and pathfinding within a collection of "
"[NavigationMesh]es. By default, these will be automatically collected from "
"child [NavigationMeshInstance] nodes. In addition to basic pathfinding, this "
@@ -36034,7 +36133,15 @@ msgid ""
msgstr ""
#: doc/classes/Navigation.xml
+#, fuzzy
+msgid "Returns the [RID] of the navigation map on the [NavigationServer]."
+msgstr "Vrátí sinus parametru."
+
+#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"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, "
@@ -36056,16 +36163,31 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation.get_simple_path] path query."
+msgstr ""
+
+#: doc/classes/Navigation.xml
+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/Navigation.xml doc/classes/Navigation2DServer.xml
+#: doc/classes/NavigationServer.xml
+msgid ""
+"Emitted when a navigation map is updated, when a region moves or is modified."
+msgstr ""
+
#: doc/classes/Navigation2D.xml
msgid "2D navigation and pathfinding node."
msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -36085,6 +36207,9 @@ msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -36094,6 +36219,12 @@ msgstr ""
msgid "The XY plane cell size to use for fields."
msgstr ""
+#: doc/classes/Navigation2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation2D.get_simple_path] path query."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml
msgid "Server interface for low-level 2D navigation access."
msgstr ""
@@ -36110,8 +36241,12 @@ msgid ""
"through scripts.\n"
"For two regions to be connected to each other, they must share a similar "
"edge. An edge is considered connected to another if both of its two vertices "
-"are at a distance less than [member Navigation.edge_connection_margin] to "
-"the respective other edge's vertex.\n"
+"are at a distance less than navigation map [code]edge_connection_margin[/"
+"code] to the respective other edge's vertex.\n"
+"You may assign navigation layers to regions with [method Navigation2DServer."
+"region_set_navigation_layers], which then can be checked upon when "
+"requesting a path with [method Navigation2DServer.map_get_path]. This allows "
+"allowing or forbidding some areas to 2D objects.\n"
"To use the collision avoidance system, you may use agents. You can set an "
"agent's target velocity, then the servers will emit a callback with a "
"modified velocity.\n"
@@ -36140,7 +36275,17 @@ msgid "Returns [code]true[/code] if the map got changed the previous frame."
msgstr "Vrátí [code] true [/code], pokud je vektor normalizován, jinak false."
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Callback called at the end of the RVO process."
+msgid ""
+"Callback called at the end of the RVO process. If a callback is created "
+"manually and the agent is placed on a navigation map it will calculate "
+"avoidance for the agent and dispatch the calculated [code]safe_velocity[/"
+"code] to the [code]receiver[/code] object with a signal to the chosen "
+"[code]method[/code] name.\n"
+"[b]Note:[/b] Created callbacks are always processed independently of the "
+"SceneTree state as long as the agent is on a navigation map and not freed. "
+"To disable the dispatch of a callback from an agent use [method "
+"agent_set_callback] again with a [code]null[/code] object as the "
+"[code]receiver[/code]."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -36201,15 +36346,55 @@ msgid "Destroys the given RID."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns all created navigation map [RID]s on the NavigationServer. This "
+"returns both 2D and 3D created navigation maps as there is technically no "
+"distinction between them."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Create a new map."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"This function immediately forces synchronization of the specified navigation "
+"[code]map[/code] [RID]. By default navigation maps are only synchronized at "
+"the end of each physics frame. This function can be used to immediately "
+"(re)calculate all the navigation meshes and region connections of the "
+"navigation map. This makes it possible to query a navigation path for a "
+"changed map immediately and in the same frame (multiple times if needed).\n"
+"Due to technical restrictions the current NavigationServer command queue "
+"will be flushed. This means all already queued update commands for this "
+"physics frame will be executed, even those intended for other maps, regions "
+"and agents not part of the specified map. The expensive computation of the "
+"navigation meshes and region connections of a map will only be done for the "
+"specified map. Other maps will receive the normal synchronization at the end "
+"of the physics frame. Should the specified map receive changes after the "
+"forced update it will update again as well when the other maps receive their "
+"update.\n"
+"Avoidance processing and dispatch of the [code]safe_velocity[/code] signals "
+"is untouched by this function and continues to happen for all maps and "
+"agents at the end of the physics frame.\n"
+"[b]Note:[/b] With great power comes great responsibility. This function "
+"should only be used by users that really know what they are doing and have a "
+"good reason for it. Forcing an immediate update of a navigation map requires "
+"locking the NavigationServer and flushing the entire NavigationServer "
+"command queue. Not only can this severely impact the performance of a game "
+"but it can also introduce bugs if used inappropriately without much "
+"foresight."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns all navigation agents [RID]s that are currently assigned to the "
"requested navigation [code]map[/code]."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
#, fuzzy
msgid "Returns the map cell size."
@@ -36234,7 +36419,10 @@ msgid ""
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Returns the navigation path to reach the destination from the origin."
+msgid ""
+"Returns the navigation path to reach the destination from the origin. "
+"[code]navigation_layers[/code] is a bitmask of all region layers that are "
+"allowed to be in the path."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -36253,6 +36441,12 @@ msgstr "Vrátí [code] true [/code], pokud je vektor normalizován, jinak false.
msgid "Sets the map active."
msgstr "Vrátí arkus sinus parametru."
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/"
+"b] Currently not implemented."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Set the map cell size used to weld the navigation mesh polygons."
msgstr ""
@@ -36268,15 +36462,78 @@ msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"Returns the ending point of a connection door. [code]connection[/code] is an "
+"index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns the starting point of a connection door. [code]connection[/code] is "
+"an index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns how many connections this [code]region[/code] has with other regions "
+"in the map."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]."
+msgstr "Vrací [code]true[/code] pokud [code]s[/code] je nula nebo téměř nula."
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns the navigation map [RID] the requested [code]region[/code] is "
"currently assigned to."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
#, fuzzy
+msgid "Returns the region's navigation layers."
+msgstr "Vrátí sinus parametru."
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]."
+msgstr "Vrací [code]true[/code] pokud [code]s[/code] je nula nebo téměř nula."
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns [code]true[/code] if the provided [code]point[/code] in world space "
+"is currently owned by the provided navigation [code]region[/code]. Owned in "
+"this context means that one of the region's navigation mesh polygon faces "
+"has a possible position at the closest distance to this point compared to "
+"all other navigation meshes from other navigation regions that are also "
+"registered on the navigation map of the provided region.\n"
+"If multiple navigation meshes have positions at equal distance the "
+"navigation region whose polygons are processed first wins the ownership. "
+"Polygons are processed in the same order that navigation regions were "
+"registered on the NavigationServer.\n"
+"[b]Note:[/b] If navigation meshes from different navigation regions overlap "
+"(which should be avoided in general) the result might not be what is "
+"expected."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]."
+msgstr "Vrací [code]true[/code] pokud [code]s[/code] je nula nebo téměř nula."
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
msgid "Sets the map for the region."
msgstr "Vrátí sinus parametru."
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method Navigation2DServer.map_get_path])."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
#, fuzzy
msgid "Sets the navigation mesh for the region."
@@ -36286,6 +36543,11 @@ msgstr "Vrátí opaÄnou hodnotu parametru."
msgid "Sets the global transformation for the region."
msgstr ""
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]."
+msgstr "Vrací [code]true[/code] pokud [code]s[/code] je nula nebo téměř nula."
+
#: doc/classes/NavigationAgent.xml
msgid "3D agent used in navigation for collision avoidance."
msgstr ""
@@ -36295,9 +36557,16 @@ msgid ""
"3D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationAgent] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World] navigation map. If this node is a child of a [Navigation] "
+"node it will register to the navigation map of the navigation node or the "
+"function [method set_navigation] can be used to set the navigation node "
+"directly. [NavigationAgent] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -36315,7 +36584,15 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-msgid "Returns the path from start to finish in global coordinates."
+msgid ""
+"Returns this agent's current path from start to finish in global "
+"coordinates. The path only updates when the target location is changed or "
+"the agent requires a repath. The path array is not intended to be used in "
+"direct path movement as the agent has its own internal path logic that would "
+"get corrupted by changing the path array manually. Use the intended [method "
+"get_next_location] once every physics frame to receive the next path point "
+"for the agents movement as this function also updates the internal path "
+"logic."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -36331,11 +36608,24 @@ msgid ""
"system."
msgstr ""
-#: doc/classes/NavigationAgent.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"Returns a [Vector3] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the origin of the agent's parent."
+"Returns the [RID] of the navigation map for this NavigationAgent node. This "
+"function returns always the map set on the NavigationAgent node and not the "
+"map of the abstract agent on the NavigationServer. If the agent map is "
+"changed directly with the NavigationServer API the NavigationAgent node will "
+"not be aware of the map change. Use [method set_navigation_map] to change "
+"the navigation map for the NavigationAgent and also update the agent on the "
+"NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
+"Returns the next location in global coordinates that can be moved to, making "
+"sure that there are no static objects in the way. If the agent does not have "
+"a navigation path, it will return the position of the agent's parent. The "
+"use of this function once every physics frame is required to update the "
+"internal path logic of the NavigationAgent."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -36379,6 +36669,12 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"Sets the [RID] of the navigation map this NavigationAgent node should use "
+"and also updates the [code]agent[/code] on the NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"Sets the user desired final location. This will clear the current navigation "
"path."
msgstr ""
@@ -36391,7 +36687,13 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml
-msgid "The agent height offset to match the navigation mesh height."
+msgid ""
+"The NavigationAgent height offset is subtracted from the y-axis value of any "
+"vector path position for this NavigationAgent. The NavigationAgent height "
+"offset does not change or influence the navigation mesh or pathfinding query "
+"result. Additional navigation maps that use regions with navigation meshes "
+"that the developer baked with appropriate agent radius or height values are "
+"required to support different-sized agents."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -36418,26 +36720,53 @@ msgstr ""
msgid "The maximum speed that an agent can move."
msgstr ""
+#: doc/classes/NavigationAgent.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "The distance to search for other agents."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"The distance threshold before a path point is considered to be reached. This "
+"will allow an agent to not have to hit a path point on the path exactly, but "
+"in the area. If this value is set to high the NavigationAgent will skip "
+"points on the path which can lead to leaving the navigation mesh. If this "
+"value is set to low the NavigationAgent will be stuck in a repath loop cause "
+"it will constantly overshoot or undershoot the distance to the next point on "
+"each physics frame update."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"The maximum distance the agent is allowed away from the ideal path to the "
"final location. This can happen due to trying to avoid collisions. When the "
"maximum distance is exceeded, it recalculates the ideal path."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-msgid "The radius of the agent."
+msgid ""
+"The radius of the avoidance agent. This is the \"body\" of the avoidance "
+"agent and not the avoidance maneuver starting radius (which is controlled by "
+"[member neighbor_dist]).\n"
+"Does not affect normal pathfinding. To change an actor's pathfinding radius "
+"bake [NavigationMesh] resources with a different [member NavigationMesh."
+"agent_radius] property and use different navigation maps for each actor size."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"The distance threshold before a target is considered to be reached. This "
-"will allow an agent to not have to hit a point on the path exactly, but in "
-"the area."
+"The distance threshold before the final target point is considered to be "
+"reached. This will allow an agent to not have to hit the point of the final "
+"target exactly, but only the area. If this value is set to low the "
+"NavigationAgent will be stuck in a repath loop cause it will constantly "
+"overshoot or undershoot the distance to the final target point on each "
+"physics frame update."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -36480,9 +36809,16 @@ msgid ""
"2D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationAgent2D] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World2D] navigation map. If this node is a child of a "
+"[Navigation2D] node it will register to the navigation map of the navigation "
+"node or the function [method set_navigation] can be used to set the "
+"navigation node directly. [NavigationAgent2D] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent2D.xml
@@ -36499,13 +36835,6 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent2D.xml
-msgid ""
-"Returns a [Vector2] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the position of the agent's parent."
-msgstr ""
-
-#: doc/classes/NavigationAgent2D.xml
#, fuzzy
msgid "Returns the [RID] of this agent on the [Navigation2DServer]."
msgstr "Vrátí sinus parametru."
@@ -36526,6 +36855,13 @@ msgid ""
"only be enabled on agents that currently require it."
msgstr ""
+#: doc/classes/NavigationAgent2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent2D] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationMesh.xml
msgid "A mesh to approximate the walkable areas and obstacles."
msgstr ""
@@ -36555,10 +36891,13 @@ msgid ""
msgstr ""
#: doc/classes/NavigationMesh.xml
+#, fuzzy
msgid ""
-"Returns whether the specified [code]bit[/code] of the [member geometry/"
-"collision_mask] is set."
+"Returns whether the specified [code]bit[/code] of the [member "
+"geometry_collision_mask] is set."
msgstr ""
+"Vrací [code]true[/code] pokud si jsou [code]a[/code] a [code]b[/code] "
+"přiblížně rovny."
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
msgid ""
@@ -36580,9 +36919,9 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/"
-"code] in the [member geometry/collision_mask].\n"
+"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]."
+"code] in the [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
@@ -36596,14 +36935,14 @@ 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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36615,7 +36954,7 @@ 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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36643,13 +36982,17 @@ msgstr ""
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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
-"If [code]true[/code], marks walkable spans as not walkable if the clearance "
-"above the span is less than [member agent/height]."
+"If the baking [AABB] has a volume the navigation mesh baking will be "
+"restricted to its enclosing area."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+msgid "The position offset applied to the [member filter_baking_aabb] [AABB]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36659,13 +37002,19 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]true[/code], marks non-walkable spans as walkable if their maximum "
-"is within [member agent/max_climb] of a walkable neighbor."
+"is within [member agent_max_climb] of a walkable neighbor."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+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
msgid ""
"The physics layers to scan for static colliders.\n"
-"Only used when [member geometry/parsed_geometry_type] is [constant "
+"Only used when [member geometry_parsed_geometry_type] is [constant "
"PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]."
msgstr ""
@@ -36684,7 +37033,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"The name of the group to scan for geometry.\n"
-"Only used when [member geometry/source_geometry_mode] is [constant "
+"Only used when [member geometry_source_geometry_mode] is [constant "
"SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant "
"SOURCE_GEOMETRY_GROUPS_EXPLICIT]."
msgstr ""
@@ -36747,7 +37096,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Parses [StaticBody] colliders as geometry. The collider should be in any of "
-"the layers specified by [member geometry/collision_mask]."
+"the layers specified by [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36769,13 +37118,13 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Scans nodes in a group and their child nodes recursively for geometry. The "
-"group is specified by [member geometry/source_group_name]."
+"group is specified by [member geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Uses nodes in a group for geometry. The group is specified by [member "
-"geometry/source_group_name]."
+"geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36817,7 +37166,15 @@ msgid ""
"geometry for walkable terrain suitable to [NavigationMesh] agent properties "
"by creating a voxel world around the meshes bounding area.\n"
"The finalized navigation mesh is then returned and stored inside the "
-"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes."
+"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] "
+"nodes.\n"
+"[b]Note:[/b] Using meshes to not only define walkable surfaces but also "
+"obstruct navigation baking does not always work. The navigation baking has "
+"no concept of what is a geometry \"inside\" when dealing with mesh source "
+"geometry and this is intentional. Depending on current baking parameters, as "
+"soon as the obstructing mesh is large enough to fit a navigation mesh area "
+"inside, the baking will generate navigation mesh areas that are inside the "
+"obstructing source geometry mesh."
msgstr ""
#: doc/classes/NavigationMeshGenerator.xml
@@ -36825,8 +37182,8 @@ msgid ""
"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child "
"nodes under the provided [code]root_node[/code] or a specific group of nodes "
"for potential source geometry. The parse behavior can be controlled with the "
-"[member NavigationMesh.geometry/parsed_geometry_type] and [member "
-"NavigationMesh.geometry/source_geometry_mode] properties on the "
+"[member NavigationMesh.geometry_parsed_geometry_type] and [member "
+"NavigationMesh.geometry_source_geometry_mode] properties on the "
"[NavigationMesh] resource."
msgstr ""
@@ -36844,8 +37201,21 @@ msgstr ""
#: doc/classes/NavigationMeshInstance.xml
msgid ""
"An instance of a [NavigationMesh]. It tells the [Navigation] node what can "
-"be navigated and what cannot, based on the [NavigationMesh] resource. This "
-"should be a child of a [Navigation] node."
+"be navigated and what cannot, based on the [NavigationMesh] resource.\n"
+"By default this node will register to the default [World] navigation map. If "
+"this node is a child of a [Navigation] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method NavigationServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The cost of entering this region from another region can be controlled with "
+"the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The cost of traveling distances inside this region can be controlled with "
+"the [member travel_cost] multiplier."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
@@ -36874,10 +37244,34 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding enters this region's navmesh from another regions navmesh "
+"the [code]enter_cost[/code] value is added to the path distance for "
+"determining the shortest path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationMesh] "
+"belongs to. On path requests with [method NavigationServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
msgid "The [NavigationMesh] resource to use."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding moves inside this region's navmesh the traveled distances "
+"are multiplied with [code]travel_cost[/code] for determining the shortest "
+"path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
msgid "Notifies when the navigation mesh bake operation is completed."
msgstr ""
@@ -36894,7 +37288,9 @@ msgid ""
"3D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationObstacle] is physics safe."
+"[NavigationObstacle] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle.xml
@@ -36935,7 +37331,9 @@ msgid ""
"2D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationObstacle2D] is physics safe."
+"[NavigationObstacle2D] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle2D.xml
@@ -37016,6 +37414,14 @@ msgstr ""
#: doc/classes/NavigationPolygon.xml
msgid ""
+"Returns the [NavigationMesh] resulting from this navigation polygon. This "
+"navmesh can be used to update the navmesh of a region with the [method "
+"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server "
+"behind the scene)."
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml
+msgid ""
"Returns a [PoolVector2Array] containing the vertices of an outline that was "
"created in the editor or by script."
msgstr ""
@@ -37052,6 +37458,30 @@ msgid ""
msgstr ""
#: doc/classes/NavigationPolygonInstance.xml
+msgid "A region of the 2D navigation map."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A region of the navigation map. It tells the [Navigation2DServer] what can "
+"be navigated and what cannot, based on its [NavigationPolygon] resource.\n"
+"By default this node will register to the default [World2D] navigation map. "
+"If this node is a child of a [Navigation2D] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The pathfinding cost of entering this region from another region can be "
+"controlled with the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The pathfinding cost of traveling distances inside this region can be "
+"controlled with the [member travel_cost] multiplier."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
msgid ""
"Returns the [RID] of this region on the [Navigation2DServer]. Combined with "
"[method Navigation2DServer.map_get_closest_point_owner] can be used to "
@@ -37059,6 +37489,22 @@ msgid ""
"navigation map."
msgstr ""
+#: doc/classes/NavigationPolygonInstance.xml
+msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationPolygon] "
+"belongs to. On path requests with [method Navigation2DServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid "The [NavigationPolygon] resource to use."
+msgstr ""
+
#: doc/classes/NavigationServer.xml
msgid "Server interface for low-level 3D navigation access."
msgstr ""
@@ -37138,6 +37584,12 @@ msgid "Bakes the navigation mesh."
msgstr ""
#: doc/classes/NavigationServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method NavigationServer.map_get_path])."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
msgid "Control activation of this server."
msgstr ""
@@ -38604,13 +39056,19 @@ msgstr ""
#: doc/classes/Node.xml
msgid ""
"Emitted when a child node enters the scene tree, either because it entered "
-"on its own or because this node entered with it."
+"on its own or because this node entered with it.\n"
+"This signal is emitted [i]after[/i] the child node's own [constant "
+"NOTIFICATION_ENTER_TREE] and [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
msgid ""
-"Emitted when a child node exits the scene tree, either because it exited on "
-"its own or because this node exited."
+"Emitted when a child node is about to exit the scene tree, either because it "
+"is being removed or freed directly, or because this node is exiting the "
+"tree.\n"
+"When this signal is received, the child [code]node[/code] is still in the "
+"tree and valid. This signal is emitted [i]after[/i] the child node's own "
+"[signal tree_exiting] and [constant NOTIFICATION_EXIT_TREE]."
msgstr ""
#: doc/classes/Node.xml
@@ -38622,7 +39080,10 @@ msgid "Emitted when the node is renamed."
msgstr ""
#: doc/classes/Node.xml
-msgid "Emitted when the node enters the tree."
+msgid ""
+"Emitted when the node enters the tree.\n"
+"This signal is emitted [i]after[/i] the related [constant "
+"NOTIFICATION_ENTER_TREE] notification."
msgstr ""
#: doc/classes/Node.xml
@@ -38632,15 +39093,21 @@ msgstr ""
#: doc/classes/Node.xml
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)."
+"the right place for de-initialization (or a \"destructor\", if you will).\n"
+"This signal is emitted [i]before[/i] the related [constant "
+"NOTIFICATION_EXIT_TREE] notification."
msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node enters a [SceneTree]."
+msgid ""
+"Notification received when the node enters a [SceneTree].\n"
+"This notification is emitted [i]before[/i] the related [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node is about to exit a [SceneTree]."
+msgid ""
+"Notification received when the node is about to exit a [SceneTree].\n"
+"This notification is emitted [i]after[/i] the related [signal tree_exiting]."
msgstr ""
#: doc/classes/Node.xml
@@ -38901,7 +39368,13 @@ msgid "Rotation in degrees, relative to the node's parent."
msgstr ""
#: doc/classes/Node2D.xml
-msgid "The node's scale. Unscaled value: [code](1, 1)[/code]."
+msgid ""
+"The node's scale. Unscaled value: [code](1, 1)[/code].\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
#: doc/classes/Node2D.xml
@@ -40350,6 +40823,10 @@ msgid ""
" if argument.find(\"=\") > -1:\n"
" var key_value = argument.split(\"=\")\n"
" arguments[key_value[0].lstrip(\"--\")] = key_value[1]\n"
+" else:\n"
+" # Options without an argument will be present in the dictionary,\n"
+" # with the value set to an empty string.\n"
+" arguments[argument.lstrip(\"--\")] = \"\"\n"
"[/codeblock]"
msgstr ""
@@ -41011,8 +41488,15 @@ msgstr ""
msgid ""
"Moves the file or directory to the system's recycle bin. See also [method "
"Directory.remove].\n"
+"The method takes only global paths, so you may need to use [method "
+"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/"
+"code] as it will not work in exported project.\n"
"[b]Note:[/b] If the user has disabled the recycle bin on their system, the "
-"file will be permanently deleted instead."
+"file will be permanently deleted instead.\n"
+"[codeblock]\n"
+"var file_to_remove = \"user://slot1.sav\"\n"
+"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/OS.xml
@@ -45876,7 +46360,18 @@ msgstr ""
#: doc/classes/PopupMenu.xml
msgid ""
"[PopupMenu] is a [Control] that displays a list of options. They are popular "
-"in toolbars or context menus."
+"in toolbars or context menus.\n"
+"[b]Incremental search:[/b] Like [ItemList] and [Tree], [PopupMenu] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/PopupMenu.xml
@@ -47387,7 +47882,16 @@ msgid ""
msgstr ""
#: doc/classes/ProjectSettings.xml
-msgid "Message to be displayed before the backtrace when the engine crashes."
+msgid ""
+"Message to be displayed before the backtrace when the engine crashes. By "
+"default, this message is only used in exported projects due to the editor-"
+"only override applied to this setting."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Editor-only override for [member debug/settings/crash_handler/message]. Does "
+"not affect exported projects in debug or release mode."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -47632,6 +48136,18 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default naming style for scene files to infer from their root nodes. "
+"Possible options are:\n"
+"- [code]0[/code] (Auto): Uses the scene root name as is without changing its "
+"casing.\n"
+"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase "
+"casing.\n"
+"- [code]2[/code] (snake_case): Converts the scene root name to snake_case "
+"casing."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -47857,6 +48373,198 @@ msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 1."
msgstr ""
@@ -48065,6 +48773,198 @@ msgid "Optional name for the 2D render layer 9."
msgstr ""
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 1."
msgstr ""
@@ -48332,6 +49232,49 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default cell height for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_height].\n"
+"[b]Note:[/b] Currently not implemented."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 2D navigation maps. See [method "
+"Navigation2DServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell height for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_height]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 3D navigation maps. See [method "
+"NavigationServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default map up vector for 3D navigation maps. See [method NavigationServer."
+"map_set_up]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -49005,20 +49948,28 @@ msgid ""
"cause.\n"
"The default value is a conservative one, so you are advised to tweak it "
"according to the hardware you are targeting.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"The default is a very conservative override for [code]rendering/gles3/"
-"shaders/max_concurrent_compiles[/code].\n"
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
"Depending on the specific devices you are targeting, you may want to raise "
"it.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
+"Depending on the specific browsers you are targeting, you may want to raise "
+"it.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -49026,19 +49977,28 @@ msgid ""
"The maximum size, in megabytes, that the ubershader cache can grow up to. On "
"startup, the least recently used entries will be deleted until the total "
"size is within bounds.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/ubershader_cache_size_mb[/"
-"code], so a smaller maximum size can be configured for mobile platforms, "
-"where storage space is more limited.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for mobile platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for web platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] Currently, shader caching is generally unavailable on web "
+"platforms.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -49070,14 +50030,22 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/shader_compilation_mode[/"
-"code], so asynchronous compilation can be disabled for mobile.\n"
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on mobile platforms.\n"
"You may want to do that since mobile GPUs generally won't support "
"ubershaders due to their complexity."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on web platforms.\n"
+"You may want to do that since certain browsers (especially on mobile "
+"platforms) generally won't support ubershaders due to their complexity."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
@@ -49834,7 +50802,6 @@ msgid ""
"- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/"
"code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, "
"small grid radius values may lead to unwanted groupings.\n"
-"[/codeblock]\n"
"[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more "
"effective and faster [VisibilityNotifier] functionality. For most use cases, "
"[method Vector3.distance_to] or [method Vector3.distance_squared_to] are "
@@ -51990,6 +52957,22 @@ msgid "Makes text fill width."
msgstr ""
#: doc/classes/RichTextLabel.xml
+msgid "Aligns top of the inline image to the top of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns center of the inline image to the center of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns bottom of the inline image to the baseline of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns bottom of the inline image to the bottom of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
msgid "Each list item has a number marker."
msgstr ""
@@ -53728,8 +54711,8 @@ msgid ""
" yield(get_tree().create_timer(1.0), \"timeout\")\n"
" print(\"Timer ended.\")\n"
"[/codeblock]\n"
-"The timer will be automatically freed after its time elapses, so be aware "
-"that any reference you might have kept to it will become invalid."
+"The timer will be dereferenced after its time elapses. To preserve the "
+"timer, you can keep a reference to it. See [Reference]."
msgstr ""
#: doc/classes/SceneTreeTimer.xml
@@ -53761,24 +54744,23 @@ msgid ""
"manually (i.e. by using [code]Tween.new()[/code]) are invalid. They can't be "
"used for tweening values, but you can do manual interpolation with [method "
"interpolate_value].\n"
-"A [SceneTreeTween] animation is composed of a sequence of [Tweener]s, which "
-"by default are executed one after another. You can create a sequence by "
-"appending [Tweener]s to the [SceneTreeTween]. Animating something with a "
-"[Tweener] is called tweening. Example tweening sequence looks like this:\n"
+"A tween animation is created by adding [Tweener]s to the [SceneTreeTween] "
+"object, using [method tween_property], [method tween_interval], [method "
+"tween_callback] or [method tween_method]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1)\n"
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"This sequence will make the [code]$Sprite[/code] node turn red, then shrink "
-"and finally the [method Node.queue_free] is called to remove the sprite. See "
-"methods [method tween_property], [method tween_interval], [method "
-"tween_callback] and [method tween_method] for more usage information.\n"
+"This sequence will make the [code]$Sprite[/code] node turn red, then shrink, "
+"before finally calling [method Node.queue_free] to free the sprite. "
+"[Tweener]s are executed one after another by default. This behavior can be "
+"changed using [method parallel] and [method set_parallel].\n"
"When a [Tweener] is created with one of the [code]tween_*[/code] methods, a "
"chained method call can be used to tweak the properties of this [Tweener]. "
-"For example, if you want to set different transition type in the above "
-"example, you can do:\n"
+"For example, if you want to set a different transition type in the above "
+"example, you can use [method set_trans]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1).set_trans(Tween."
@@ -53787,8 +54769,9 @@ msgid ""
"TRANS_BOUNCE)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Most of the [SceneTreeTween] methods can be chained this way too. In this "
-"example the [SceneTreeTween] is bound and have set a default transition:\n"
+"Most of the [SceneTreeTween] methods can be chained this way too. In the "
+"following example the [SceneTreeTween] is bound to the running script's node "
+"and a default transition is set for its [Tweener]s:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween().bind_node(self).set_trans(Tween."
"TRANS_ELASTIC)\n"
@@ -53796,16 +54779,16 @@ msgid ""
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Another interesting use for [SceneTreeTween]s is animating arbitrary set of "
+"Another interesting use for [SceneTreeTween]s is animating arbitrary sets of "
"objects:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"for sprite in get_children():\n"
-" tween.tween_property(sprite, \"position\", Vector2(), 1)\n"
+" tween.tween_property(sprite, \"position\", Vector2(0, 0), 1)\n"
"[/codeblock]\n"
"In the example above, all children of a node are moved one after another to "
"position (0, 0).\n"
-"Some [Tweener]s use transitions and eases. The first accepts an [enum Tween."
+"Some [Tweener]s use transitions and eases. The first accepts a [enum Tween."
"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 Tween.EaseType] constant, and "
@@ -53817,7 +54800,7 @@ msgid ""
"tween_cheatsheet.png]Tween easing and transition types cheatsheet[/url]\n"
"[b]Note:[/b] All [SceneTreeTween]s will automatically start by default. To "
"prevent a [SceneTreeTween] from autostarting, you can call [method stop] "
-"immediately after it was created."
+"immediately after it is created."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53847,21 +54830,24 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
-"Processes the [SceneTreeTween] by given [code]delta[/code] value, in "
-"seconds. Mostly useful when the [SceneTreeTween] is paused, for controlling "
-"it manually. Can also be used to end the [SceneTreeTween] animation "
-"immediately, by using [code]delta[/code] longer than the whole duration.\n"
+"Processes the [SceneTreeTween] by the given [code]delta[/code] value, in "
+"seconds. This is mostly useful for manual control when the [SceneTreeTween] "
+"is paused. It can also be used to end the [SceneTreeTween] animation "
+"immediately, by setting [code]delta[/code] longer than the whole duration of "
+"the [SceneTreeTween] animation.\n"
"Returns [code]true[/code] if the [SceneTreeTween] still has [Tweener]s that "
"haven't finished.\n"
-"[b]Note:[/b] The [SceneTreeTween] will become invalid after finished, but "
-"you can call [method stop] after the step, to keep it and reset."
+"[b]Note:[/b] The [SceneTreeTween] will become invalid in the next processing "
+"frame after its animation finishes. Calling [method stop] after performing "
+"[method custom_step] instead keeps and resets the [SceneTreeTween]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Returns the total time in seconds the [SceneTreeTween] has been animating (i."
-"e. time since it started, not counting pauses etc.). The time is affected by "
-"[method set_speed_scale] and [method stop] will reset it to [code]0[/code].\n"
+"e. the time since it started, not counting pauses etc.). The time is "
+"affected by [method set_speed_scale], and [method stop] will reset it to "
+"[code]0[/code].\n"
"[b]Note:[/b] As it results from accumulating frame deltas, the time returned "
"after the [SceneTreeTween] has finished animating will be slightly greater "
"than the actual [SceneTreeTween] duration."
@@ -53897,11 +54883,10 @@ msgstr ""
msgid ""
"Returns whether the [SceneTreeTween] is valid. A valid [SceneTreeTween] is a "
"[SceneTreeTween] contained by the scene tree (i.e. the array from [method "
-"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). "
-"[SceneTreeTween] might become invalid when it has finished tweening or was "
-"killed, also when created with [code]Tween.new()[/code]. Invalid "
-"[SceneTreeTween] can't have [Tweener]s appended, because it can't animate "
-"them. You can however still use [method interpolate_value]."
+"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). A "
+"[SceneTreeTween] might become invalid when it has finished tweening, is "
+"killed, or when created with [code]SceneTreeTween.new()[/code]. Invalid "
+"[SceneTreeTween]s can't have [Tweener]s appended."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53941,16 +54926,15 @@ msgstr ""
msgid ""
"Sets the number of times the tweening sequence will be repeated, i.e. "
"[code]set_loops(2)[/code] will run the animation twice.\n"
-"Calling this method without arguments will make the [SceneTreeTween] run "
-"infinitely, until it is either killed by [method kill] or by freeing bound "
-"node, or all the animated objects have been freed (which makes further "
+"Calling this method without arguments will make the [Tween] run infinitely, "
+"until either it is killed with [method kill], the [Tween]'s bound node is "
+"freed, or all the animated objects have been freed (which makes further "
"animation impossible).\n"
"[b]Warning:[/b] Make sure to always add some duration/delay when using "
-"infinite loops. 0-duration looped animations (e.g. single [CallbackTweener] "
-"with no delay or [PropertyTweener] with invalid node) are equivalent to "
-"infinite [code]while[/code] loops and will freeze your game. If a "
-"[SceneTreeTween]'s lifetime depends on some node, always use [method "
-"bind_node]."
+"infinite loops. To prevent the game freezing, 0-duration looped animations "
+"(e.g. a single [CallbackTweener] with no delay) are stopped after a small "
+"number of loops, which may produce unexpected results. If a [Tween]'s "
+"lifetime depends on some node, always use [method bind_node]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -54012,10 +54996,10 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Creates and appends an [IntervalTweener]. This method can be used to create "
-"delays in the tween animation, as an alternative for using the delay in "
-"other [Tweener]s or when there's no animation (in which case the "
-"[SceneTreeTween] acts as a timer). [code]time[/code] is the length of the "
-"interval, in seconds.\n"
+"delays in the tween animation, as an alternative to using the delay in other "
+"[Tweener]s, or when there's no animation (in which case the [SceneTreeTween] "
+"acts as a timer). [code]time[/code] is the length of the interval, in "
+"seconds.\n"
"Example: creating an interval in code execution.\n"
"[codeblock]\n"
"# ... some code\n"
@@ -54069,8 +55053,8 @@ msgid ""
"Creates and appends a [PropertyTweener]. This method tweens a "
"[code]property[/code] of an [code]object[/code] between an initial value and "
"[code]final_val[/code] in a span of time equal to [code]duration[/code], in "
-"seconds. The initial value by default is a value at the time the tweening of "
-"the [PropertyTweener] start. For example:\n"
+"seconds. The initial value by default is the property's value at the time "
+"the tweening of the [PropertyTweener] starts. For example:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"tween.tween_property($Sprite, \"position\", Vector2(100, 200), 1)\n"
@@ -54101,16 +55085,15 @@ msgid ""
"Emitted when the [SceneTreeTween] has finished all tweening. Never emitted "
"when the [SceneTreeTween] is set to infinite looping (see [method "
"set_loops]).\n"
-"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) after this signal "
-"is emitted, but it doesn't happen immediately, but on the next processing "
-"frame. Calling [method stop] inside the signal callback will preserve the "
-"[SceneTreeTween]."
+"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) in the next "
+"processing frame after this signal is emitted. Calling [method stop] inside "
+"the signal callback will prevent the [SceneTreeTween] from being removed."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Emitted when a full loop is complete (see [method set_loops]), providing the "
-"loop index. This signal is not emitted after final loop, use [signal "
+"loop index. This signal is not emitted after the final loop, use [signal "
"finished] instead for this case."
msgstr ""
@@ -54118,7 +55101,7 @@ msgstr ""
msgid ""
"Emitted when one step of the [SceneTreeTween] is complete, providing the "
"step index. One step is either a single [Tweener] or a group of [Tweener]s "
-"running parallelly."
+"running in parallel."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -55451,7 +56434,12 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-msgid "Scale part of the local transformation."
+msgid ""
+"Scale part of the local transformation.\n"
+"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, the scale values will either be all "
+"positive or all negative."
msgstr ""
#: doc/classes/Spatial.xml
@@ -58091,11 +59079,11 @@ msgstr ""
msgid ""
"Returns [code]true[/code] if this string contains a valid integer.\n"
"[codeblock]\n"
-"print(\"7\".is_valid_int()) # Prints \"True\"\n"
-"print(\"14.6\".is_valid_int()) # Prints \"False\"\n"
-"print(\"L\".is_valid_int()) # Prints \"False\"\n"
-"print(\"+3\".is_valid_int()) # Prints \"True\"\n"
-"print(\"-12\".is_valid_int()) # Prints \"True\"\n"
+"print(\"7\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"14.6\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"L\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"+3\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"-12\".is_valid_integer()) # Prints \"True\"\n"
"[/codeblock]"
msgstr ""
@@ -61599,6 +62587,11 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml
+#, fuzzy
+msgid "If [code]true[/code], this TileMap bakes a navigation region."
+msgstr "Vrátí [code] true [/code], pokud je vektor normalizován, jinak false."
+
+#: doc/classes/TileMap.xml
msgid "If [code]true[/code], the cell's UVs will be clipped."
msgstr ""
@@ -61705,6 +62698,10 @@ msgid "The TileMap orientation mode. See [enum Mode] for possible values."
msgstr ""
#: doc/classes/TileMap.xml
+msgid "The navigation layers the TileMap generates its navigation regions in."
+msgstr ""
+
+#: doc/classes/TileMap.xml
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 "
@@ -62839,7 +63836,12 @@ msgstr ""
#: doc/classes/Transform2D.xml
msgid ""
"Returns a copy of the transform scaled by the given [code]scale[/code] "
-"factor, using matrix multiplication."
+"factor, using matrix multiplication.\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
#: doc/classes/Transform2D.xml
@@ -62995,7 +63997,18 @@ msgid ""
"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]."
+"to remove it from the [Tree].\n"
+"[b]Incremental search:[/b] Like [ItemList] and [PopupMenu], [Tree] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/Tree.xml
@@ -66533,11 +67546,12 @@ msgid "This enabler will stop [Particles2D] nodes."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _process function."
+msgid "This enabler will stop the parent's [method Node._process] function."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _physics_process function."
+msgid ""
+"This enabler will stop the parent's [method Node._physics_process] function."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
@@ -66577,6 +67591,16 @@ msgid "The VisibilityNotifier's bounding box."
msgstr ""
#: doc/classes/VisibilityNotifier.xml
+msgid ""
+"In addition to checking whether a node is on screen or within a [Camera]'s "
+"view, VisibilityNotifier can also optionally check whether a node is within "
+"a specified maximum distance when using a [Camera] with perspective "
+"projection. This is useful for throttling the performance requirements of "
+"nodes that are far away.\n"
+"[b]Note:[/b] This feature will be disabled if set to 0.0."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier.xml
msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view."
msgstr ""
@@ -71346,6 +72370,16 @@ msgid "The amount of shader rebinds in the frame."
msgstr ""
#: doc/classes/VisualServer.xml
+msgid ""
+"The peak amount of shaders that have been under compilation in the frame.\n"
+"This is useful to know when asynchronous shader compilation has finished for "
+"the current shaders on screen.\n"
+"[b]Note:[/b] For complete certainty, only assume there are no outstanding "
+"compilations when this value is zero for at least two frames in a row.\n"
+"Unimplemented in the GLES2 rendering backend, always returns 0."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
msgid "The amount of surface changes in the frame."
msgstr ""
@@ -74546,8 +75580,8 @@ msgstr ""
#: doc/classes/World.xml
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."
+"scenario, a navigation map and a sound space. Spatial nodes register their "
+"resources into the current world."
msgstr ""
#: doc/classes/World.xml
@@ -74562,11 +75596,17 @@ msgstr ""
#: doc/classes/World.xml
msgid ""
-"The World's fallback_environment will be used if the World's [Environment] "
-"fails or is missing."
+"The World's fallback environment will be used if [member environment] fails "
+"or is missing."
msgstr ""
#: doc/classes/World.xml
+#, fuzzy
+msgid ""
+"The [RID] of this world's navigation map. Used by the [NavigationServer]."
+msgstr "Vrátí sinus parametru."
+
+#: doc/classes/World.xml
msgid "The World's visual scenario."
msgstr ""
@@ -74581,8 +75621,8 @@ msgstr ""
#: doc/classes/World2D.xml
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."
+"visual scenario, a navigation map and a sound space. 2D nodes register their "
+"resources into the current 2D world."
msgstr ""
#: doc/classes/World2D.xml
@@ -74599,6 +75639,12 @@ msgid ""
msgstr ""
#: doc/classes/World2D.xml
+#, fuzzy
+msgid ""
+"The [RID] of this world's navigation map. Used by the [Navigation2DServer]."
+msgstr "Vrátí sinus parametru."
+
+#: doc/classes/World2D.xml
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."
diff --git a/doc/translations/de.po b/doc/translations/de.po
index fd65d8b4bf..14a4d14da6 100644
--- a/doc/translations/de.po
+++ b/doc/translations/de.po
@@ -47,12 +47,13 @@
# Andreas <self@andreasbresser.de>, 2022.
# Christian Packenius <christian@packenius.com>, 2022.
# Hannes Petersen <01zustrom.baklava@icloud.com>, 2022.
+# Hans Peter <figefi6308@runqx.com>, 2022.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2022-05-13 19:27+0000\n"
-"Last-Translator: Hannes Petersen <01zustrom.baklava@icloud.com>\n"
+"PO-Revision-Date: 2022-06-22 23:17+0000\n"
+"Last-Translator: Hans Peter <figefi6308@runqx.com>\n"
"Language-Team: German <https://hosted.weblate.org/projects/godot-engine/"
"godot-class-reference/de/>\n"
"Language: de\n"
@@ -60,7 +61,7 @@ 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.13-dev\n"
+"X-Generator: Weblate 4.13.1-dev\n"
#: doc/tools/make_rst.py
msgid "Description"
@@ -533,9 +534,10 @@ msgstr ""
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml
+#, fuzzy
msgid ""
"Compares two values by checking their actual contents, recursing into any "
-"`Array` or `Dictionary` up to its deepest level.\n"
+"[Array] or [Dictionary] up to its deepest level.\n"
"This compares to [code]==[/code] in a number of ways:\n"
"- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/"
"code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] "
@@ -605,7 +607,7 @@ msgid ""
"- 1.0: Linear\n"
"- Greater than 1.0 (exclusive): Ease in\n"
"[/codeblock]\n"
-"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.4/img/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/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]."
@@ -1773,7 +1775,7 @@ msgid ""
"[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/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/img/"
"smoothstep_ease_comparison.png]Comparison between smoothstep() and ease(x, "
"-1.6521) return values[/url]"
msgstr ""
@@ -4378,6 +4380,15 @@ msgstr ""
"die optional benannten 2D-Physikebenen verwendet."
#: doc/classes/@GlobalScope.xml
+#, fuzzy
+msgid ""
+"Hints that an integer property is a bitmask using the optionally named 2D "
+"navigation layers."
+msgstr ""
+"Weist darauf hin, dass eine Integer-Eigenschaft eine Bitmaske ist, welche "
+"die optional benannten 2D-Renderebenen verwendet."
+
+#: doc/classes/@GlobalScope.xml
msgid ""
"Hints that an integer property is a bitmask using the optionally named 3D "
"render layers."
@@ -4394,6 +4405,15 @@ msgstr ""
"die optional benannten 3D-Physikebenen verwendet."
#: doc/classes/@GlobalScope.xml
+#, fuzzy
+msgid ""
+"Hints that an integer property is a bitmask using the optionally named 3D "
+"navigation layers."
+msgstr ""
+"Weist darauf hin, dass eine Integer-Eigenschaft eine Bitmaske ist, welche "
+"die optional benannten 2D-Renderebenen verwendet."
+
+#: doc/classes/@GlobalScope.xml
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 "
@@ -10407,7 +10427,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/AStar.xml
+#: doc/classes/AStar.xml doc/classes/AStar2D.xml
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[/"
@@ -10606,7 +10626,10 @@ msgid ""
msgstr ""
#: doc/classes/AStar2D.xml
-msgid "Returns whether there is a connection/segment between the given points."
+msgid ""
+"Returns whether there is a connection/segment between the given points. 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/AStar2D.xml
@@ -10623,10 +10646,6 @@ msgid ""
msgstr ""
#: doc/classes/AStar2D.xml
-msgid "Deletes the segment between the given points."
-msgstr ""
-
-#: doc/classes/AStar2D.xml
msgid ""
"Returns the closest position to [code]to_position[/code] that resides inside "
"a segment between two connected points.\n"
@@ -10811,7 +10830,9 @@ msgid ""
"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."
+"transmit audio over the network. When capturing audio data from a "
+"microphone, the format of the samples will be stereo 32-bit floating point "
+"PCM."
msgstr ""
#: doc/classes/AudioEffectCapture.xml
@@ -15732,7 +15753,7 @@ msgid ""
msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
-#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/Navigation2D.xml
msgid "Returns the object's [RID]."
msgstr ""
@@ -21355,11 +21376,15 @@ msgid ""
msgstr ""
#: doc/classes/CurveTexture.xml
-msgid "The [code]curve[/code] rendered onto the texture."
-msgstr ""
+#, fuzzy
+msgid "The [Curve] that is rendered onto the texture."
+msgstr "Der Name des Audiobusses des Bereichs."
#: doc/classes/CurveTexture.xml
-msgid "The width of the texture."
+msgid ""
+"The width of the texture (in pixels). Higher values make it possible to "
+"represent high-frequency data better (such as sudden direction changes), at "
+"the cost of increased generation time and memory usage."
msgstr ""
#: doc/classes/CylinderMesh.xml
@@ -21647,6 +21672,13 @@ msgid "Returns the list of keys in the [Dictionary]."
msgstr ""
#: doc/classes/Dictionary.xml
+msgid ""
+"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, "
+"duplicate keys will not be copied over, unless [code]overwrite[/code] is "
+"[code]true[/code]."
+msgstr ""
+
+#: doc/classes/Dictionary.xml
#, fuzzy
msgid "Returns the number of keys in the dictionary."
msgstr "Gibt die Nummer von Elementen innerhalb eines Arrays wieder."
@@ -23591,9 +23623,23 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide a state data you want to be saved, like view "
+"position, grid settings, folding, etc. 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). This data is automatically saved for "
+"each scene in an [code]editstate[/code] file in the editor metadata folder. "
+"If you want to store global (scene-independent) editor data for your plugin, "
+"you can use [method get_window_layout] instead.\n"
+"Use [method set_state] to restore your saved state.\n"
+"[b]Note:[/b] This method should not be used to save important settings that "
+"should persist with the project.\n"
+"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be "
+"stored and restored correctly.\n"
+"[codeblock]\n"
+"func get_state():\n"
+" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n"
+" return state\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -23604,9 +23650,18 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide the GUI layout of the plugin or any other "
+"data you want to be stored. 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). The data is stored in the "
+"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n"
+"Use [method set_window_layout] to restore your saved layout.\n"
+"[codeblock]\n"
+"func get_window_layout(configuration):\n"
+" configuration.set_value(\"MyPlugin\", \"window_position\", $Window."
+"position)\n"
+" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -23719,11 +23774,30 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the state saved by [method get_state]."
+msgid ""
+"Restore the state saved by [method get_state]. This method is called when "
+"the current scene tab is changed in the editor.\n"
+"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise "
+"it will not be recognized and this method will not be called.\n"
+"[codeblock]\n"
+"func set_state(data):\n"
+" zoom = data.get(\"zoom\", 1.0)\n"
+" preferred_color = data.get(\"my_color\", Color.white)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the plugin GUI layout saved by [method get_window_layout]."
+msgid ""
+"Restore the plugin GUI layout and data saved by [method get_window_layout]. "
+"This method is called for every plugin on editor startup. Use the provided "
+"[code]configuration[/code] file to read your saved data.\n"
+"[codeblock]\n"
+"func set_window_layout(configuration):\n"
+" $Window.position = configuration.get_value(\"MyPlugin\", "
+"\"window_position\", Vector2())\n"
+" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", "
+"Color.white)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -28408,7 +28482,8 @@ msgid ""
"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])."
+"at fixed steps (see [member width]). See also [GradientTexture2D] and "
+"[CurveTexture]."
msgstr ""
#: doc/classes/GradientTexture.xml
@@ -28430,7 +28505,8 @@ msgid ""
"repeat] types using colors obtained from the gradient. 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] and [member height])."
+"[member width] and [member height]). See also [GradientTexture] and "
+"[CurveTexture]."
msgstr ""
#: doc/classes/GradientTexture2D.xml
@@ -29261,6 +29337,15 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+#, fuzzy
+msgid ""
+"If [code]true[/code], this GridMap uses cell navmesh resources to create "
+"navigation regions."
+msgstr ""
+"Wenn [code]true[/code], aktualisiert Animationen als Reaktion auf "
+"prozessbezogene Benachrichtigungen."
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid "If [code]true[/code], grid items are centered on the X axis."
msgstr ""
@@ -29311,6 +29396,10 @@ msgid "The assigned [MeshLibrary]."
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+msgid "The navigation layers the GridMap generates its navigation regions in."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
"Overrides the default friction and bounce physics properties for the whole "
"[GridMap]."
@@ -30540,7 +30629,7 @@ msgid ""
" # 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 body = to_json({\"name\": \"Godette\"})\n"
" error = http_request.request(\"https://httpbin.org/post\", [], true, "
"HTTPClient.METHOD_POST, body)\n"
" if error != OK:\n"
@@ -31715,7 +31804,7 @@ msgstr ""
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 "
+"([member 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 "
@@ -31864,10 +31953,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Returns the mouse mode. See the constants for more information."
-msgstr ""
-
-#: doc/classes/Input.xml
msgid ""
"Gets an input vector by specifying four actions for the positive and "
"negative X and Y axes.\n"
@@ -32064,24 +32149,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Sets the mouse mode. See the constants for more information."
-msgstr ""
-
-#: doc/classes/Input.xml
-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
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 "
@@ -32117,6 +32184,25 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
+#, fuzzy
+msgid "Controls the mouse mode. See [enum MouseMode] for more information."
+msgstr "Der operator, der benutzt wird. Siehe [enum Operator] für Optionen."
+
+#: doc/classes/Input.xml
+msgid ""
+"If [code]true[/code], similar input events sent by the operating system are "
+"accumulated. 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 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
msgid "Emitted when a joypad device has been connected or disconnected."
msgstr ""
@@ -32424,8 +32510,8 @@ msgstr ""
#: doc/classes/InputEventJoypadButton.xml
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]."
+"Represents the pressure the user puts on the button with their finger, if "
+"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]."
msgstr ""
#: doc/classes/InputEventJoypadMotion.xml
@@ -32688,9 +32774,9 @@ 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 "
+"at most. If you need more precise input reporting, set [member Input."
+"use_accumulated_input] to [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."
@@ -33182,7 +33268,18 @@ msgid ""
"[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."
+"fixed_column_width] greater than zero to wrap the text.\n"
+"[b]Incremental search:[/b] Like [PopupMenu] and [Tree], [ItemList] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/ItemList.xml
@@ -34475,6 +34572,8 @@ msgid ""
"Displays plain text in a line or wrapped inside a rectangle. For formatted "
"text, use [RichTextLabel]."
msgstr ""
+"Zeigt einfachen Text in einer Zeile oder in einem Rechteck an. Verwenden Sie "
+"für formatierten Text [RichTextLabel]."
#: doc/classes/Label.xml
msgid ""
@@ -34491,6 +34590,19 @@ 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 zeigt einfachen Text auf dem Bildschirm an. Sie können die horizontale "
+"und vertikale Ausrichtung steuern und den Text innerhalb des "
+"Begrenzungsrahmens des Nodes umbrechen. Fett, kursiv oder andere "
+"Formatierungen werden nicht unterstützt. Verwenden Sie stattdessen "
+"[RichTextLabel] für diesen Zweck.\n"
+"[b]Hinweis:[/b] Im Gegensatz zu den meisten anderen [Steuerelementen] ist "
+"Labels [member Control.mouse_filter] standardmäßig auf [constant Control."
+"MOUSE_FILTER_IGNORE] eingestellt (d.h. es reagiert nicht auf Mauseingaben). "
+"Das bedeutet, dass ein Label keinen konfigurierten [member Control."
+"hint_tooltip] anzeigt, solange Sie seinen Mausfilter nicht ändern.\n"
+"[b]Hinweis:[/b] Unicode-Zeichen nach [code]0xffff[/code] (wie die meisten "
+"Emoji) werden [i]nicht[/i] von Windows unterstützt. Sie werden stattdessen "
+"als unbekannte Zeichen angezeigt. Dies wird in Godot 4.0 behoben."
#: doc/classes/Label.xml
msgid "Returns the amount of lines of text the Label has."
@@ -34517,6 +34629,9 @@ 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 ""
+"Steuert die horizontale Ausrichtung des Textes. Unterstützt links, "
+"zentriert, rechts und füllen oder ausrichten. Setzen Sie ihn auf eine der "
+"[enum Align] Konstanten."
#: doc/classes/Label.xml
msgid ""
@@ -34524,12 +34639,19 @@ msgid ""
"If you resize the node, it will change its height automatically to show all "
"the text."
msgstr ""
+"Wenn [code]An[/code], wird der Text innerhalb des Begrenzungsrechtecks des "
+"Nodes angepasst (Es wird automatisch eine neue Zeile angefangen, wenn der "
+"Text nicht in eine Zeile passt). Sollte der Text nicht in das "
+"Begrenzungsrechtecks des Nodes passen, wird das Begrenzungsrechteck "
+"automatisch in der Höhe angepasst."
#: doc/classes/Label.xml
msgid ""
"If [code]true[/code], the Label only shows the text that fits inside its "
"bounding rectangle and will clip text horizontally."
msgstr ""
+"Wenn [code]An[/code], zeigt das Label nur den Text, der in sein "
+"Begrenzungsrechteck passt an und schneidet den restlichen Text ab."
#: doc/classes/Label.xml
msgid ""
@@ -34539,7 +34661,7 @@ msgstr ""
#: doc/classes/Label.xml
msgid "Limits the lines of text the node shows on screen."
-msgstr ""
+msgstr "Begrenzt die Textzeilen, die das Node auf dem Bildschirm anzeigt."
#: doc/classes/Label.xml
msgid ""
@@ -34547,24 +34669,32 @@ msgid ""
"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 ""
+"Begrenzt die Anzahl der sichtbaren Zeichen. Wenn Sie [code]percent_visible[/"
+"code] auf 0,5 setzen, wird nur der halbe Text auf dem Bildschirm angezeigt. "
+"Nützlich, um den Text in einem Dialogfeld zu animieren."
#: doc/classes/Label.xml doc/classes/Label3D.xml
msgid "The text to display on screen."
-msgstr ""
+msgstr "Der Text, der auf dem Bildschirm angezeigt werden soll."
#: doc/classes/Label.xml doc/classes/Label3D.xml doc/classes/TextMesh.xml
msgid "If [code]true[/code], all the text displays as UPPERCASE."
msgstr ""
+"Wenn [code]An[/code] , wird der gesamte Text in GROSSBUCHSTABEN angezeigt."
#: doc/classes/Label.xml
msgid ""
"Controls the text's vertical align. Supports top, center, bottom, and fill. "
"Set it to one of the [enum VAlign] constants."
msgstr ""
+"Steuert die vertikale Ausrichtung des Textes. Unterstützt oben, mitte, unten "
+"und füllen. Setzen Sie ihn auf eine der [enum VAlign] Konstanten."
#: doc/classes/Label.xml
msgid "Restricts the number of characters to display. Set to -1 to disable."
msgstr ""
+"Begrenzt die Anzahl der anzuzeigenden Zeichen. Zum Deaktivieren auf -1 "
+"setzen."
#: doc/classes/Label.xml doc/classes/Label3D.xml doc/classes/TextMesh.xml
msgid "Align rows to the left (default)."
@@ -36958,12 +37088,18 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Returns the override [Material] for a surface of the [Mesh] resource.\n"
+"[b]Note:[/b] This function only returns [i]override[/i] materials associated "
+"with this [MeshInstance]. Consider using [method get_active_material] or "
+"[method Mesh.surface_get_material] to get materials associated with the "
+"[Mesh] resource."
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the number of surface materials."
-msgstr ""
+#, fuzzy
+msgid "Returns the number of surface override materials."
+msgstr "Gibt die Anzahl der Punkte auf der Blend-Achse zurück."
#: doc/classes/MeshInstance.xml
msgid ""
@@ -36999,7 +37135,10 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Sets the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Sets the override [Material] for the specified surface of the [Mesh] "
+"resource. This material is associated with this [MeshInstance] rather than "
+"with the [Mesh] resource."
msgstr ""
#: doc/classes/MeshInstance.xml
@@ -37030,9 +37169,10 @@ msgstr ""
#: doc/classes/MeshInstance2D.xml
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\"."
+"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be "
+"automatically created from an existing [Sprite] via a tool in the editor "
+"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to "
+"MeshInstance2D[/b] at the top of the 2D editor viewport."
msgstr ""
#: doc/classes/MeshInstance2D.xml
@@ -37798,6 +37938,9 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"Provides navigation and pathfinding within a collection of "
"[NavigationMesh]es. By default, these will be automatically collected from "
"child [NavigationMeshInstance] nodes. In addition to basic pathfinding, this "
@@ -37838,7 +37981,15 @@ msgid ""
msgstr ""
#: doc/classes/Navigation.xml
+#, fuzzy
+msgid "Returns the [RID] of the navigation map on the [NavigationServer]."
+msgstr "Gibt die Anzahl der Spuren in der Animation zurück."
+
+#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"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, "
@@ -37861,16 +38012,31 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation.get_simple_path] path query."
+msgstr ""
+
+#: doc/classes/Navigation.xml
+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/Navigation.xml doc/classes/Navigation2DServer.xml
+#: doc/classes/NavigationServer.xml
+msgid ""
+"Emitted when a navigation map is updated, when a region moves or is modified."
+msgstr ""
+
#: doc/classes/Navigation2D.xml
msgid "2D navigation and pathfinding node."
msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -37890,6 +38056,9 @@ msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -37900,6 +38069,12 @@ msgstr ""
msgid "The XY plane cell size to use for fields."
msgstr "Der Anrufmodus, der für Spuren der Anrufmethode verwendet werden soll."
+#: doc/classes/Navigation2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation2D.get_simple_path] path query."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml
#, fuzzy
msgid "Server interface for low-level 2D navigation access."
@@ -37917,8 +38092,12 @@ msgid ""
"through scripts.\n"
"For two regions to be connected to each other, they must share a similar "
"edge. An edge is considered connected to another if both of its two vertices "
-"are at a distance less than [member Navigation.edge_connection_margin] to "
-"the respective other edge's vertex.\n"
+"are at a distance less than navigation map [code]edge_connection_margin[/"
+"code] to the respective other edge's vertex.\n"
+"You may assign navigation layers to regions with [method Navigation2DServer."
+"region_set_navigation_layers], which then can be checked upon when "
+"requesting a path with [method Navigation2DServer.map_get_path]. This allows "
+"allowing or forbidding some areas to 2D objects.\n"
"To use the collision avoidance system, you may use agents. You can set an "
"agent's target velocity, then the servers will emit a callback with a "
"modified velocity.\n"
@@ -37952,7 +38131,17 @@ msgstr ""
"Gibt [code]true[/code] zurück, wenn der Graph das übergebene Node enthält."
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Callback called at the end of the RVO process."
+msgid ""
+"Callback called at the end of the RVO process. If a callback is created "
+"manually and the agent is placed on a navigation map it will calculate "
+"avoidance for the agent and dispatch the calculated [code]safe_velocity[/"
+"code] to the [code]receiver[/code] object with a signal to the chosen "
+"[code]method[/code] name.\n"
+"[b]Note:[/b] Created callbacks are always processed independently of the "
+"SceneTree state as long as the agent is on a navigation map and not freed. "
+"To disable the dispatch of a callback from an agent use [method "
+"agent_set_callback] again with a [code]null[/code] object as the "
+"[code]receiver[/code]."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -38014,15 +38203,58 @@ msgid "Destroys the given RID."
msgstr "Gibt den gegebenen Übergang zurück."
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns all created navigation map [RID]s on the NavigationServer. This "
+"returns both 2D and 3D created navigation maps as there is technically no "
+"distinction between them."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Create a new map."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"This function immediately forces synchronization of the specified navigation "
+"[code]map[/code] [RID]. By default navigation maps are only synchronized at "
+"the end of each physics frame. This function can be used to immediately "
+"(re)calculate all the navigation meshes and region connections of the "
+"navigation map. This makes it possible to query a navigation path for a "
+"changed map immediately and in the same frame (multiple times if needed).\n"
+"Due to technical restrictions the current NavigationServer command queue "
+"will be flushed. This means all already queued update commands for this "
+"physics frame will be executed, even those intended for other maps, regions "
+"and agents not part of the specified map. The expensive computation of the "
+"navigation meshes and region connections of a map will only be done for the "
+"specified map. Other maps will receive the normal synchronization at the end "
+"of the physics frame. Should the specified map receive changes after the "
+"forced update it will update again as well when the other maps receive their "
+"update.\n"
+"Avoidance processing and dispatch of the [code]safe_velocity[/code] signals "
+"is untouched by this function and continues to happen for all maps and "
+"agents at the end of the physics frame.\n"
+"[b]Note:[/b] With great power comes great responsibility. This function "
+"should only be used by users that really know what they are doing and have a "
+"good reason for it. Forcing an immediate update of a navigation map requires "
+"locking the NavigationServer and flushing the entire NavigationServer "
+"command queue. Not only can this severely impact the performance of a game "
+"but it can also introduce bugs if used inappropriately without much "
+"foresight."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns all navigation agents [RID]s that are currently assigned to the "
"requested navigation [code]map[/code]."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+#, fuzzy
+msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented."
+msgstr ""
+"Gibt die aktuelle Zeile in der geöffneten Datei zurück (aktuell nicht "
+"implementiert)."
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
#, fuzzy
msgid "Returns the map cell size."
@@ -38050,7 +38282,10 @@ msgid ""
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Returns the navigation path to reach the destination from the origin."
+msgid ""
+"Returns the navigation path to reach the destination from the origin. "
+"[code]navigation_layers[/code] is a bitmask of all region layers that are "
+"allowed to be in the path."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -38069,6 +38304,12 @@ msgstr "Gibt [code]true[/code] zurück falls das Array leer ist."
msgid "Sets the map active."
msgstr "Die letzte Aktion wiederholen."
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/"
+"b] Currently not implemented."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Set the map cell size used to weld the navigation mesh polygons."
msgstr ""
@@ -38084,15 +38325,79 @@ msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"Returns the ending point of a connection door. [code]connection[/code] is an "
+"index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns the starting point of a connection door. [code]connection[/code] is "
+"an index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns how many connections this [code]region[/code] has with other regions "
+"in the map."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]."
+msgstr ""
+"Gibt [code]true[/code] zurück, wenn das Array [code]value[/code] enthält."
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns the navigation map [RID] the requested [code]region[/code] is "
"currently assigned to."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
#, fuzzy
+msgid "Returns the region's navigation layers."
+msgstr "Gibt die Anzahl der Verbindungen im Graphen zurück."
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]."
+msgstr "Logischer ODER-Operator ([code]oder[/code] oder [code]||[/code])."
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns [code]true[/code] if the provided [code]point[/code] in world space "
+"is currently owned by the provided navigation [code]region[/code]. Owned in "
+"this context means that one of the region's navigation mesh polygon faces "
+"has a possible position at the closest distance to this point compared to "
+"all other navigation meshes from other navigation regions that are also "
+"registered on the navigation map of the provided region.\n"
+"If multiple navigation meshes have positions at equal distance the "
+"navigation region whose polygons are processed first wins the ownership. "
+"Polygons are processed in the same order that navigation regions were "
+"registered on the NavigationServer.\n"
+"[b]Note:[/b] If navigation meshes from different navigation regions overlap "
+"(which should be avoided in general) the result might not be what is "
+"expected."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]."
+msgstr "Logischer ODER-Operator ([code]oder[/code] oder [code]||[/code])."
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
msgid "Sets the map for the region."
msgstr "Gibt die Größe des Arrays zurück."
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method Navigation2DServer.map_get_path])."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
#, fuzzy
msgid "Sets the navigation mesh for the region."
@@ -38105,6 +38410,11 @@ msgstr ""
"Gibt zurück, ob die Knochenauflage für den Bone an [code]bone_idx[/code] "
"deaktiviert ist."
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]."
+msgstr "Logischer ODER-Operator ([code]oder[/code] oder [code]||[/code])."
+
#: doc/classes/NavigationAgent.xml
msgid "3D agent used in navigation for collision avoidance."
msgstr ""
@@ -38114,9 +38424,16 @@ msgid ""
"3D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationAgent] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World] navigation map. If this node is a child of a [Navigation] "
+"node it will register to the navigation map of the navigation node or the "
+"function [method set_navigation] can be used to set the navigation node "
+"directly. [NavigationAgent] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -38134,9 +38451,16 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-#, fuzzy
-msgid "Returns the path from start to finish in global coordinates."
-msgstr "Gibt die Rotation in Radians zurück."
+msgid ""
+"Returns this agent's current path from start to finish in global "
+"coordinates. The path only updates when the target location is changed or "
+"the agent requires a repath. The path array is not intended to be used in "
+"direct path movement as the agent has its own internal path logic that would "
+"get corrupted by changing the path array manually. Use the intended [method "
+"get_next_location] once every physics frame to receive the next path point "
+"for the agents movement as this function also updates the internal path "
+"logic."
+msgstr ""
#: doc/classes/NavigationAgent.xml
#, fuzzy
@@ -38152,11 +38476,24 @@ msgid ""
"system."
msgstr "Gibt das AnimationNode mit dem gegebenen Namen zurück."
-#: doc/classes/NavigationAgent.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
+"Returns the [RID] of the navigation map for this NavigationAgent node. This "
+"function returns always the map set on the NavigationAgent node and not the "
+"map of the abstract agent on the NavigationServer. If the agent map is "
+"changed directly with the NavigationServer API the NavigationAgent node will "
+"not be aware of the map change. Use [method set_navigation_map] to change "
+"the navigation map for the NavigationAgent and also update the agent on the "
+"NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"Returns a [Vector3] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the origin of the agent's parent."
+"Returns the next location in global coordinates that can be moved to, making "
+"sure that there are no static objects in the way. If the agent does not have "
+"a navigation path, it will return the position of the agent's parent. The "
+"use of this function once every physics frame is required to update the "
+"internal path logic of the NavigationAgent."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -38202,6 +38539,12 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"Sets the [RID] of the navigation map this NavigationAgent node should use "
+"and also updates the [code]agent[/code] on the NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"Sets the user desired final location. This will clear the current navigation "
"path."
msgstr ""
@@ -38214,7 +38557,13 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml
-msgid "The agent height offset to match the navigation mesh height."
+msgid ""
+"The NavigationAgent height offset is subtracted from the y-axis value of any "
+"vector path position for this NavigationAgent. The NavigationAgent height "
+"offset does not change or influence the navigation mesh or pathfinding query "
+"result. Additional navigation maps that use regions with navigation meshes "
+"that the developer baked with appropriate agent radius or height values are "
+"required to support different-sized agents."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -38241,27 +38590,53 @@ msgstr ""
msgid "The maximum speed that an agent can move."
msgstr ""
+#: doc/classes/NavigationAgent.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "The distance to search for other agents."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"The distance threshold before a path point is considered to be reached. This "
+"will allow an agent to not have to hit a path point on the path exactly, but "
+"in the area. If this value is set to high the NavigationAgent will skip "
+"points on the path which can lead to leaving the navigation mesh. If this "
+"value is set to low the NavigationAgent will be stuck in a repath loop cause "
+"it will constantly overshoot or undershoot the distance to the next point on "
+"each physics frame update."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"The maximum distance the agent is allowed away from the ideal path to the "
"final location. This can happen due to trying to avoid collisions. When the "
"maximum distance is exceeded, it recalculates the ideal path."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-#, fuzzy
-msgid "The radius of the agent."
-msgstr "Der Name des Audiobusses des Bereichs."
+msgid ""
+"The radius of the avoidance agent. This is the \"body\" of the avoidance "
+"agent and not the avoidance maneuver starting radius (which is controlled by "
+"[member neighbor_dist]).\n"
+"Does not affect normal pathfinding. To change an actor's pathfinding radius "
+"bake [NavigationMesh] resources with a different [member NavigationMesh."
+"agent_radius] property and use different navigation maps for each actor size."
+msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"The distance threshold before a target is considered to be reached. This "
-"will allow an agent to not have to hit a point on the path exactly, but in "
-"the area."
+"The distance threshold before the final target point is considered to be "
+"reached. This will allow an agent to not have to hit the point of the final "
+"target exactly, but only the area. If this value is set to low the "
+"NavigationAgent will be stuck in a repath loop cause it will constantly "
+"overshoot or undershoot the distance to the final target point on each "
+"physics frame update."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -38305,9 +38680,16 @@ msgid ""
"2D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationAgent2D] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World2D] navigation map. If this node is a child of a "
+"[Navigation2D] node it will register to the navigation map of the navigation "
+"node or the function [method set_navigation] can be used to set the "
+"navigation node directly. [NavigationAgent2D] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent2D.xml
@@ -38325,13 +38707,6 @@ msgid ""
msgstr "Gibt das AnimationNode mit dem gegebenen Namen zurück."
#: doc/classes/NavigationAgent2D.xml
-msgid ""
-"Returns a [Vector2] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the position of the agent's parent."
-msgstr ""
-
-#: doc/classes/NavigationAgent2D.xml
#, fuzzy
msgid "Returns the [RID] of this agent on the [Navigation2DServer]."
msgstr "Gibt die Anzahl der Spuren in der Animation zurück."
@@ -38352,6 +38727,13 @@ msgid ""
"only be enabled on agents that currently require it."
msgstr ""
+#: doc/classes/NavigationAgent2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent2D] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationMesh.xml
msgid "A mesh to approximate the walkable areas and obstacles."
msgstr ""
@@ -38381,10 +38763,11 @@ msgid ""
msgstr ""
#: doc/classes/NavigationMesh.xml
+#, fuzzy
msgid ""
-"Returns whether the specified [code]bit[/code] of the [member geometry/"
-"collision_mask] is set."
-msgstr ""
+"Returns whether the specified [code]bit[/code] of the [member "
+"geometry_collision_mask] is set."
+msgstr "Gibt das Unternodemit dem angegebenen [code]Namen[/code] zurück."
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
msgid ""
@@ -38406,9 +38789,9 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/"
-"code] in the [member geometry/collision_mask].\n"
+"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]."
+"code] in the [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
@@ -38422,14 +38805,14 @@ 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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -38441,7 +38824,7 @@ 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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -38470,13 +38853,17 @@ msgstr ""
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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
-"If [code]true[/code], marks walkable spans as not walkable if the clearance "
-"above the span is less than [member agent/height]."
+"If the baking [AABB] has a volume the navigation mesh baking will be "
+"restricted to its enclosing area."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+msgid "The position offset applied to the [member filter_baking_aabb] [AABB]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -38487,13 +38874,22 @@ msgstr "Wenn [code]true[/code], ist die Filterung aktiviert."
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]true[/code], marks non-walkable spans as walkable if their maximum "
-"is within [member agent/max_climb] of a walkable neighbor."
+"is within [member agent_max_climb] of a walkable neighbor."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+#, fuzzy
+msgid ""
+"If [code]true[/code], marks walkable spans as not walkable if the clearance "
+"above the span is less than [member agent_height]."
msgstr ""
+"Wenn der Wert [code]true[/code] ist, dann ist Tranzparenz für den Körper "
+"aktiviert. Siehe auch [member blend_mode]."
#: doc/classes/NavigationMesh.xml
msgid ""
"The physics layers to scan for static colliders.\n"
-"Only used when [member geometry/parsed_geometry_type] is [constant "
+"Only used when [member geometry_parsed_geometry_type] is [constant "
"PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]."
msgstr ""
@@ -38512,7 +38908,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"The name of the group to scan for geometry.\n"
-"Only used when [member geometry/source_geometry_mode] is [constant "
+"Only used when [member geometry_source_geometry_mode] is [constant "
"SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant "
"SOURCE_GEOMETRY_GROUPS_EXPLICIT]."
msgstr ""
@@ -38576,7 +38972,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Parses [StaticBody] colliders as geometry. The collider should be in any of "
-"the layers specified by [member geometry/collision_mask]."
+"the layers specified by [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -38598,13 +38994,13 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Scans nodes in a group and their child nodes recursively for geometry. The "
-"group is specified by [member geometry/source_group_name]."
+"group is specified by [member geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Uses nodes in a group for geometry. The group is specified by [member "
-"geometry/source_group_name]."
+"geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -38647,7 +39043,15 @@ msgid ""
"geometry for walkable terrain suitable to [NavigationMesh] agent properties "
"by creating a voxel world around the meshes bounding area.\n"
"The finalized navigation mesh is then returned and stored inside the "
-"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes."
+"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] "
+"nodes.\n"
+"[b]Note:[/b] Using meshes to not only define walkable surfaces but also "
+"obstruct navigation baking does not always work. The navigation baking has "
+"no concept of what is a geometry \"inside\" when dealing with mesh source "
+"geometry and this is intentional. Depending on current baking parameters, as "
+"soon as the obstructing mesh is large enough to fit a navigation mesh area "
+"inside, the baking will generate navigation mesh areas that are inside the "
+"obstructing source geometry mesh."
msgstr ""
#: doc/classes/NavigationMeshGenerator.xml
@@ -38655,8 +39059,8 @@ msgid ""
"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child "
"nodes under the provided [code]root_node[/code] or a specific group of nodes "
"for potential source geometry. The parse behavior can be controlled with the "
-"[member NavigationMesh.geometry/parsed_geometry_type] and [member "
-"NavigationMesh.geometry/source_geometry_mode] properties on the "
+"[member NavigationMesh.geometry_parsed_geometry_type] and [member "
+"NavigationMesh.geometry_source_geometry_mode] properties on the "
"[NavigationMesh] resource."
msgstr ""
@@ -38674,8 +39078,21 @@ msgstr ""
#: doc/classes/NavigationMeshInstance.xml
msgid ""
"An instance of a [NavigationMesh]. It tells the [Navigation] node what can "
-"be navigated and what cannot, based on the [NavigationMesh] resource. This "
-"should be a child of a [Navigation] node."
+"be navigated and what cannot, based on the [NavigationMesh] resource.\n"
+"By default this node will register to the default [World] navigation map. If "
+"this node is a child of a [Navigation] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method NavigationServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The cost of entering this region from another region can be controlled with "
+"the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The cost of traveling distances inside this region can be controlled with "
+"the [member travel_cost] multiplier."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
@@ -38704,11 +39121,35 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding enters this region's navmesh from another regions navmesh "
+"the [code]enter_cost[/code] value is added to the path distance for "
+"determining the shortest path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationMesh] "
+"belongs to. On path requests with [method NavigationServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
#, fuzzy
msgid "The [NavigationMesh] resource to use."
msgstr "Das [NavigationMeshGenerator] Singleton."
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding moves inside this region's navmesh the traveled distances "
+"are multiplied with [code]travel_cost[/code] for determining the shortest "
+"path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
#, fuzzy
msgid "Notifies when the navigation mesh bake operation is completed."
msgstr "Benachrichtigt, wenn eine Animation abgespielt wird."
@@ -38727,7 +39168,9 @@ msgid ""
"3D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationObstacle] is physics safe."
+"[NavigationObstacle] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle.xml
@@ -38769,7 +39212,9 @@ msgid ""
"2D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationObstacle2D] is physics safe."
+"[NavigationObstacle2D] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle2D.xml
@@ -38850,6 +39295,14 @@ msgstr ""
#: doc/classes/NavigationPolygon.xml
msgid ""
+"Returns the [NavigationMesh] resulting from this navigation polygon. This "
+"navmesh can be used to update the navmesh of a region with the [method "
+"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server "
+"behind the scene)."
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml
+msgid ""
"Returns a [PoolVector2Array] containing the vertices of an outline that was "
"created in the editor or by script."
msgstr ""
@@ -38886,6 +39339,30 @@ msgid ""
msgstr ""
#: doc/classes/NavigationPolygonInstance.xml
+msgid "A region of the 2D navigation map."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A region of the navigation map. It tells the [Navigation2DServer] what can "
+"be navigated and what cannot, based on its [NavigationPolygon] resource.\n"
+"By default this node will register to the default [World2D] navigation map. "
+"If this node is a child of a [Navigation2D] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The pathfinding cost of entering this region from another region can be "
+"controlled with the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The pathfinding cost of traveling distances inside this region can be "
+"controlled with the [member travel_cost] multiplier."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
msgid ""
"Returns the [RID] of this region on the [Navigation2DServer]. Combined with "
"[method Navigation2DServer.map_get_closest_point_owner] can be used to "
@@ -38893,6 +39370,23 @@ msgid ""
"navigation map."
msgstr ""
+#: doc/classes/NavigationPolygonInstance.xml
+msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationPolygon] "
+"belongs to. On path requests with [method Navigation2DServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+#, fuzzy
+msgid "The [NavigationPolygon] resource to use."
+msgstr "Das [NavigationMeshGenerator] Singleton."
+
#: doc/classes/NavigationServer.xml
#, fuzzy
msgid "Server interface for low-level 3D navigation access."
@@ -38974,6 +39468,12 @@ msgid "Bakes the navigation mesh."
msgstr ""
#: doc/classes/NavigationServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method NavigationServer.map_get_path])."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
msgid "Control activation of this server."
msgstr ""
@@ -40443,13 +40943,19 @@ msgstr ""
#: doc/classes/Node.xml
msgid ""
"Emitted when a child node enters the scene tree, either because it entered "
-"on its own or because this node entered with it."
+"on its own or because this node entered with it.\n"
+"This signal is emitted [i]after[/i] the child node's own [constant "
+"NOTIFICATION_ENTER_TREE] and [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
msgid ""
-"Emitted when a child node exits the scene tree, either because it exited on "
-"its own or because this node exited."
+"Emitted when a child node is about to exit the scene tree, either because it "
+"is being removed or freed directly, or because this node is exiting the "
+"tree.\n"
+"When this signal is received, the child [code]node[/code] is still in the "
+"tree and valid. This signal is emitted [i]after[/i] the child node's own "
+"[signal tree_exiting] and [constant NOTIFICATION_EXIT_TREE]."
msgstr ""
#: doc/classes/Node.xml
@@ -40461,7 +40967,10 @@ msgid "Emitted when the node is renamed."
msgstr ""
#: doc/classes/Node.xml
-msgid "Emitted when the node enters the tree."
+msgid ""
+"Emitted when the node enters the tree.\n"
+"This signal is emitted [i]after[/i] the related [constant "
+"NOTIFICATION_ENTER_TREE] notification."
msgstr ""
#: doc/classes/Node.xml
@@ -40471,15 +40980,21 @@ msgstr ""
#: doc/classes/Node.xml
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)."
+"the right place for de-initialization (or a \"destructor\", if you will).\n"
+"This signal is emitted [i]before[/i] the related [constant "
+"NOTIFICATION_EXIT_TREE] notification."
msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node enters a [SceneTree]."
+msgid ""
+"Notification received when the node enters a [SceneTree].\n"
+"This notification is emitted [i]before[/i] the related [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node is about to exit a [SceneTree]."
+msgid ""
+"Notification received when the node is about to exit a [SceneTree].\n"
+"This notification is emitted [i]after[/i] the related [signal tree_exiting]."
msgstr ""
#: doc/classes/Node.xml
@@ -40740,7 +41255,13 @@ msgid "Rotation in degrees, relative to the node's parent."
msgstr ""
#: doc/classes/Node2D.xml
-msgid "The node's scale. Unscaled value: [code](1, 1)[/code]."
+msgid ""
+"The node's scale. Unscaled value: [code](1, 1)[/code].\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
#: doc/classes/Node2D.xml
@@ -42192,6 +42713,10 @@ msgid ""
" if argument.find(\"=\") > -1:\n"
" var key_value = argument.split(\"=\")\n"
" arguments[key_value[0].lstrip(\"--\")] = key_value[1]\n"
+" else:\n"
+" # Options without an argument will be present in the dictionary,\n"
+" # with the value set to an empty string.\n"
+" arguments[argument.lstrip(\"--\")] = \"\"\n"
"[/codeblock]"
msgstr ""
@@ -42865,8 +43390,15 @@ msgstr ""
msgid ""
"Moves the file or directory to the system's recycle bin. See also [method "
"Directory.remove].\n"
+"The method takes only global paths, so you may need to use [method "
+"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/"
+"code] as it will not work in exported project.\n"
"[b]Note:[/b] If the user has disabled the recycle bin on their system, the "
-"file will be permanently deleted instead."
+"file will be permanently deleted instead.\n"
+"[codeblock]\n"
+"var file_to_remove = \"user://slot1.sav\"\n"
+"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/OS.xml
@@ -47795,7 +48327,18 @@ msgstr ""
#: doc/classes/PopupMenu.xml
msgid ""
"[PopupMenu] is a [Control] that displays a list of options. They are popular "
-"in toolbars or context menus."
+"in toolbars or context menus.\n"
+"[b]Incremental search:[/b] Like [ItemList] and [Tree], [PopupMenu] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/PopupMenu.xml
@@ -49324,7 +49867,16 @@ msgid ""
msgstr ""
#: doc/classes/ProjectSettings.xml
-msgid "Message to be displayed before the backtrace when the engine crashes."
+msgid ""
+"Message to be displayed before the backtrace when the engine crashes. By "
+"default, this message is only used in exported projects due to the editor-"
+"only override applied to this setting."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Editor-only override for [member debug/settings/crash_handler/message]. Does "
+"not affect exported projects in debug or release mode."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -49569,6 +50121,18 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default naming style for scene files to infer from their root nodes. "
+"Possible options are:\n"
+"- [code]0[/code] (Auto): Uses the scene root name as is without changing its "
+"casing.\n"
+"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase "
+"casing.\n"
+"- [code]2[/code] (snake_case): Converts the scene root name to snake_case "
+"casing."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -49794,6 +50358,198 @@ msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 1."
msgstr ""
@@ -50002,6 +50758,198 @@ msgid "Optional name for the 2D render layer 9."
msgstr ""
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 1."
msgstr ""
@@ -50269,6 +51217,49 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default cell height for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_height].\n"
+"[b]Note:[/b] Currently not implemented."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 2D navigation maps. See [method "
+"Navigation2DServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell height for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_height]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 3D navigation maps. See [method "
+"NavigationServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default map up vector for 3D navigation maps. See [method NavigationServer."
+"map_set_up]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -50942,20 +51933,28 @@ msgid ""
"cause.\n"
"The default value is a conservative one, so you are advised to tweak it "
"according to the hardware you are targeting.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"The default is a very conservative override for [code]rendering/gles3/"
-"shaders/max_concurrent_compiles[/code].\n"
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
"Depending on the specific devices you are targeting, you may want to raise "
"it.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
+"Depending on the specific browsers you are targeting, you may want to raise "
+"it.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -50963,19 +51962,28 @@ msgid ""
"The maximum size, in megabytes, that the ubershader cache can grow up to. On "
"startup, the least recently used entries will be deleted until the total "
"size is within bounds.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/ubershader_cache_size_mb[/"
-"code], so a smaller maximum size can be configured for mobile platforms, "
-"where storage space is more limited.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for mobile platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for web platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] Currently, shader caching is generally unavailable on web "
+"platforms.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -51007,14 +52015,22 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/shader_compilation_mode[/"
-"code], so asynchronous compilation can be disabled for mobile.\n"
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on mobile platforms.\n"
"You may want to do that since mobile GPUs generally won't support "
"ubershaders due to their complexity."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on web platforms.\n"
+"You may want to do that since certain browsers (especially on mobile "
+"platforms) generally won't support ubershaders due to their complexity."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
@@ -51773,7 +52789,6 @@ msgid ""
"- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/"
"code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, "
"small grid radius values may lead to unwanted groupings.\n"
-"[/codeblock]\n"
"[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more "
"effective and faster [VisibilityNotifier] functionality. For most use cases, "
"[method Vector3.distance_to] or [method Vector3.distance_squared_to] are "
@@ -53966,6 +54981,22 @@ msgid "Makes text fill width."
msgstr ""
#: doc/classes/RichTextLabel.xml
+msgid "Aligns top of the inline image to the top of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns center of the inline image to the center of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns bottom of the inline image to the baseline of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns bottom of the inline image to the bottom of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
msgid "Each list item has a number marker."
msgstr ""
@@ -55720,8 +56751,8 @@ msgid ""
" yield(get_tree().create_timer(1.0), \"timeout\")\n"
" print(\"Timer ended.\")\n"
"[/codeblock]\n"
-"The timer will be automatically freed after its time elapses, so be aware "
-"that any reference you might have kept to it will become invalid."
+"The timer will be dereferenced after its time elapses. To preserve the "
+"timer, you can keep a reference to it. See [Reference]."
msgstr ""
#: doc/classes/SceneTreeTimer.xml
@@ -55753,24 +56784,23 @@ msgid ""
"manually (i.e. by using [code]Tween.new()[/code]) are invalid. They can't be "
"used for tweening values, but you can do manual interpolation with [method "
"interpolate_value].\n"
-"A [SceneTreeTween] animation is composed of a sequence of [Tweener]s, which "
-"by default are executed one after another. You can create a sequence by "
-"appending [Tweener]s to the [SceneTreeTween]. Animating something with a "
-"[Tweener] is called tweening. Example tweening sequence looks like this:\n"
+"A tween animation is created by adding [Tweener]s to the [SceneTreeTween] "
+"object, using [method tween_property], [method tween_interval], [method "
+"tween_callback] or [method tween_method]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1)\n"
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"This sequence will make the [code]$Sprite[/code] node turn red, then shrink "
-"and finally the [method Node.queue_free] is called to remove the sprite. See "
-"methods [method tween_property], [method tween_interval], [method "
-"tween_callback] and [method tween_method] for more usage information.\n"
+"This sequence will make the [code]$Sprite[/code] node turn red, then shrink, "
+"before finally calling [method Node.queue_free] to free the sprite. "
+"[Tweener]s are executed one after another by default. This behavior can be "
+"changed using [method parallel] and [method set_parallel].\n"
"When a [Tweener] is created with one of the [code]tween_*[/code] methods, a "
"chained method call can be used to tweak the properties of this [Tweener]. "
-"For example, if you want to set different transition type in the above "
-"example, you can do:\n"
+"For example, if you want to set a different transition type in the above "
+"example, you can use [method set_trans]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1).set_trans(Tween."
@@ -55779,8 +56809,9 @@ msgid ""
"TRANS_BOUNCE)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Most of the [SceneTreeTween] methods can be chained this way too. In this "
-"example the [SceneTreeTween] is bound and have set a default transition:\n"
+"Most of the [SceneTreeTween] methods can be chained this way too. In the "
+"following example the [SceneTreeTween] is bound to the running script's node "
+"and a default transition is set for its [Tweener]s:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween().bind_node(self).set_trans(Tween."
"TRANS_ELASTIC)\n"
@@ -55788,16 +56819,16 @@ msgid ""
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Another interesting use for [SceneTreeTween]s is animating arbitrary set of "
+"Another interesting use for [SceneTreeTween]s is animating arbitrary sets of "
"objects:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"for sprite in get_children():\n"
-" tween.tween_property(sprite, \"position\", Vector2(), 1)\n"
+" tween.tween_property(sprite, \"position\", Vector2(0, 0), 1)\n"
"[/codeblock]\n"
"In the example above, all children of a node are moved one after another to "
"position (0, 0).\n"
-"Some [Tweener]s use transitions and eases. The first accepts an [enum Tween."
+"Some [Tweener]s use transitions and eases. The first accepts a [enum Tween."
"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 Tween.EaseType] constant, and "
@@ -55809,7 +56840,7 @@ msgid ""
"tween_cheatsheet.png]Tween easing and transition types cheatsheet[/url]\n"
"[b]Note:[/b] All [SceneTreeTween]s will automatically start by default. To "
"prevent a [SceneTreeTween] from autostarting, you can call [method stop] "
-"immediately after it was created."
+"immediately after it is created."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -55839,21 +56870,24 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
-"Processes the [SceneTreeTween] by given [code]delta[/code] value, in "
-"seconds. Mostly useful when the [SceneTreeTween] is paused, for controlling "
-"it manually. Can also be used to end the [SceneTreeTween] animation "
-"immediately, by using [code]delta[/code] longer than the whole duration.\n"
+"Processes the [SceneTreeTween] by the given [code]delta[/code] value, in "
+"seconds. This is mostly useful for manual control when the [SceneTreeTween] "
+"is paused. It can also be used to end the [SceneTreeTween] animation "
+"immediately, by setting [code]delta[/code] longer than the whole duration of "
+"the [SceneTreeTween] animation.\n"
"Returns [code]true[/code] if the [SceneTreeTween] still has [Tweener]s that "
"haven't finished.\n"
-"[b]Note:[/b] The [SceneTreeTween] will become invalid after finished, but "
-"you can call [method stop] after the step, to keep it and reset."
+"[b]Note:[/b] The [SceneTreeTween] will become invalid in the next processing "
+"frame after its animation finishes. Calling [method stop] after performing "
+"[method custom_step] instead keeps and resets the [SceneTreeTween]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Returns the total time in seconds the [SceneTreeTween] has been animating (i."
-"e. time since it started, not counting pauses etc.). The time is affected by "
-"[method set_speed_scale] and [method stop] will reset it to [code]0[/code].\n"
+"e. the time since it started, not counting pauses etc.). The time is "
+"affected by [method set_speed_scale], and [method stop] will reset it to "
+"[code]0[/code].\n"
"[b]Note:[/b] As it results from accumulating frame deltas, the time returned "
"after the [SceneTreeTween] has finished animating will be slightly greater "
"than the actual [SceneTreeTween] duration."
@@ -55889,11 +56923,10 @@ msgstr ""
msgid ""
"Returns whether the [SceneTreeTween] is valid. A valid [SceneTreeTween] is a "
"[SceneTreeTween] contained by the scene tree (i.e. the array from [method "
-"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). "
-"[SceneTreeTween] might become invalid when it has finished tweening or was "
-"killed, also when created with [code]Tween.new()[/code]. Invalid "
-"[SceneTreeTween] can't have [Tweener]s appended, because it can't animate "
-"them. You can however still use [method interpolate_value]."
+"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). A "
+"[SceneTreeTween] might become invalid when it has finished tweening, is "
+"killed, or when created with [code]SceneTreeTween.new()[/code]. Invalid "
+"[SceneTreeTween]s can't have [Tweener]s appended."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -55933,16 +56966,15 @@ msgstr ""
msgid ""
"Sets the number of times the tweening sequence will be repeated, i.e. "
"[code]set_loops(2)[/code] will run the animation twice.\n"
-"Calling this method without arguments will make the [SceneTreeTween] run "
-"infinitely, until it is either killed by [method kill] or by freeing bound "
-"node, or all the animated objects have been freed (which makes further "
+"Calling this method without arguments will make the [Tween] run infinitely, "
+"until either it is killed with [method kill], the [Tween]'s bound node is "
+"freed, or all the animated objects have been freed (which makes further "
"animation impossible).\n"
"[b]Warning:[/b] Make sure to always add some duration/delay when using "
-"infinite loops. 0-duration looped animations (e.g. single [CallbackTweener] "
-"with no delay or [PropertyTweener] with invalid node) are equivalent to "
-"infinite [code]while[/code] loops and will freeze your game. If a "
-"[SceneTreeTween]'s lifetime depends on some node, always use [method "
-"bind_node]."
+"infinite loops. To prevent the game freezing, 0-duration looped animations "
+"(e.g. a single [CallbackTweener] with no delay) are stopped after a small "
+"number of loops, which may produce unexpected results. If a [Tween]'s "
+"lifetime depends on some node, always use [method bind_node]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -56004,10 +57036,10 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Creates and appends an [IntervalTweener]. This method can be used to create "
-"delays in the tween animation, as an alternative for using the delay in "
-"other [Tweener]s or when there's no animation (in which case the "
-"[SceneTreeTween] acts as a timer). [code]time[/code] is the length of the "
-"interval, in seconds.\n"
+"delays in the tween animation, as an alternative to using the delay in other "
+"[Tweener]s, or when there's no animation (in which case the [SceneTreeTween] "
+"acts as a timer). [code]time[/code] is the length of the interval, in "
+"seconds.\n"
"Example: creating an interval in code execution.\n"
"[codeblock]\n"
"# ... some code\n"
@@ -56061,8 +57093,8 @@ msgid ""
"Creates and appends a [PropertyTweener]. This method tweens a "
"[code]property[/code] of an [code]object[/code] between an initial value and "
"[code]final_val[/code] in a span of time equal to [code]duration[/code], in "
-"seconds. The initial value by default is a value at the time the tweening of "
-"the [PropertyTweener] start. For example:\n"
+"seconds. The initial value by default is the property's value at the time "
+"the tweening of the [PropertyTweener] starts. For example:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"tween.tween_property($Sprite, \"position\", Vector2(100, 200), 1)\n"
@@ -56093,16 +57125,15 @@ msgid ""
"Emitted when the [SceneTreeTween] has finished all tweening. Never emitted "
"when the [SceneTreeTween] is set to infinite looping (see [method "
"set_loops]).\n"
-"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) after this signal "
-"is emitted, but it doesn't happen immediately, but on the next processing "
-"frame. Calling [method stop] inside the signal callback will preserve the "
-"[SceneTreeTween]."
+"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) in the next "
+"processing frame after this signal is emitted. Calling [method stop] inside "
+"the signal callback will prevent the [SceneTreeTween] from being removed."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Emitted when a full loop is complete (see [method set_loops]), providing the "
-"loop index. This signal is not emitted after final loop, use [signal "
+"loop index. This signal is not emitted after the final loop, use [signal "
"finished] instead for this case."
msgstr ""
@@ -56110,7 +57141,7 @@ msgstr ""
msgid ""
"Emitted when one step of the [SceneTreeTween] is complete, providing the "
"step index. One step is either a single [Tweener] or a group of [Tweener]s "
-"running parallelly."
+"running in parallel."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -57454,7 +58485,12 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-msgid "Scale part of the local transformation."
+msgid ""
+"Scale part of the local transformation.\n"
+"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, the scale values will either be all "
+"positive or all negative."
msgstr ""
#: doc/classes/Spatial.xml
@@ -60135,11 +61171,11 @@ msgstr ""
msgid ""
"Returns [code]true[/code] if this string contains a valid integer.\n"
"[codeblock]\n"
-"print(\"7\".is_valid_int()) # Prints \"True\"\n"
-"print(\"14.6\".is_valid_int()) # Prints \"False\"\n"
-"print(\"L\".is_valid_int()) # Prints \"False\"\n"
-"print(\"+3\".is_valid_int()) # Prints \"True\"\n"
-"print(\"-12\".is_valid_int()) # Prints \"True\"\n"
+"print(\"7\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"14.6\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"L\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"+3\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"-12\".is_valid_integer()) # Prints \"True\"\n"
"[/codeblock]"
msgstr ""
@@ -63689,6 +64725,11 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml
+#, fuzzy
+msgid "If [code]true[/code], this TileMap bakes a navigation region."
+msgstr "Wenn [code]true[/code], ist die Filterung aktiviert."
+
+#: doc/classes/TileMap.xml
msgid "If [code]true[/code], the cell's UVs will be clipped."
msgstr ""
@@ -63795,6 +64836,10 @@ msgid "The TileMap orientation mode. See [enum Mode] for possible values."
msgstr ""
#: doc/classes/TileMap.xml
+msgid "The navigation layers the TileMap generates its navigation regions in."
+msgstr ""
+
+#: doc/classes/TileMap.xml
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 "
@@ -64932,7 +65977,12 @@ msgstr ""
#: doc/classes/Transform2D.xml
msgid ""
"Returns a copy of the transform scaled by the given [code]scale[/code] "
-"factor, using matrix multiplication."
+"factor, using matrix multiplication.\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
#: doc/classes/Transform2D.xml
@@ -65090,7 +66140,18 @@ msgid ""
"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]."
+"to remove it from the [Tree].\n"
+"[b]Incremental search:[/b] Like [ItemList] and [PopupMenu], [Tree] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/Tree.xml
@@ -68799,12 +69860,16 @@ msgid "This enabler will stop [Particles2D] nodes."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _process function."
+msgid "This enabler will stop the parent's [method Node._process] function."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _physics_process function."
+#, fuzzy
+msgid ""
+"This enabler will stop the parent's [method Node._physics_process] function."
msgstr ""
+"Die Animationen werden während des Physikframes (d. h. [method Node."
+"_physics_process]) fortgesetzt."
#: doc/classes/VisibilityEnabler2D.xml
msgid "This enabler will stop [AnimatedSprite] nodes animations."
@@ -68843,6 +69908,16 @@ msgid "The VisibilityNotifier's bounding box."
msgstr ""
#: doc/classes/VisibilityNotifier.xml
+msgid ""
+"In addition to checking whether a node is on screen or within a [Camera]'s "
+"view, VisibilityNotifier can also optionally check whether a node is within "
+"a specified maximum distance when using a [Camera] with perspective "
+"projection. This is useful for throttling the performance requirements of "
+"nodes that are far away.\n"
+"[b]Note:[/b] This feature will be disabled if set to 0.0."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier.xml
#, fuzzy
msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view."
msgstr "Gesendet wenn die Sichtbarkeit (versteckt/sichtbar) sich verändert."
@@ -73673,6 +74748,16 @@ msgid "The amount of shader rebinds in the frame."
msgstr ""
#: doc/classes/VisualServer.xml
+msgid ""
+"The peak amount of shaders that have been under compilation in the frame.\n"
+"This is useful to know when asynchronous shader compilation has finished for "
+"the current shaders on screen.\n"
+"[b]Note:[/b] For complete certainty, only assume there are no outstanding "
+"compilations when this value is zero for at least two frames in a row.\n"
+"Unimplemented in the GLES2 rendering backend, always returns 0."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
msgid "The amount of surface changes in the frame."
msgstr ""
@@ -76898,11 +77983,15 @@ msgid "Class that has everything pertaining to a world."
msgstr "Eine Klasse die alles für eine Welt mitbringt."
#: doc/classes/World.xml
+#, fuzzy
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."
+"scenario, a navigation map and a sound space. Spatial nodes register their "
+"resources into the current world."
msgstr ""
+"Eine Klasse die alles für eine 2D Welt mitbringt. Einen physikalischen Raum, "
+"ein visuelles Szenario und einen Bereich für Sounds. 2D Knotenpunkte "
+"registrieren ihre Resourcen in die aktuelle 2D Welt."
#: doc/classes/World.xml
msgid ""
@@ -76917,14 +78006,21 @@ msgid "The World's [Environment]."
msgstr "Das [Environment] der Welt."
#: doc/classes/World.xml
+#, fuzzy
msgid ""
-"The World's fallback_environment will be used if the World's [Environment] "
-"fails or is missing."
+"The World's fallback environment will be used if [member environment] fails "
+"or is missing."
msgstr ""
"Das fallback_environment der Welt wird genutzt, sollte das [Environment] der "
"Welt nicht existieren oder nicht geladen werden können."
#: doc/classes/World.xml
+#, fuzzy
+msgid ""
+"The [RID] of this world's navigation map. Used by the [NavigationServer]."
+msgstr "Gibt die Anzahl der Spuren in der Animation zurück."
+
+#: doc/classes/World.xml
msgid "The World's visual scenario."
msgstr "Das visuelle Szenario der Welt."
@@ -76937,10 +78033,11 @@ msgid "Class that has everything pertaining to a 2D world."
msgstr "Eine Klasse die alles für eine 2D Welt mitbringt."
#: doc/classes/World2D.xml
+#, fuzzy
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."
+"visual scenario, a navigation map and a sound space. 2D nodes register their "
+"resources into the current 2D world."
msgstr ""
"Eine Klasse die alles für eine 2D Welt mitbringt. Einen physikalischen Raum, "
"ein visuelles Szenario und einen Bereich für Sounds. 2D Knotenpunkte "
@@ -76962,6 +78059,12 @@ msgid ""
msgstr ""
#: doc/classes/World2D.xml
+#, fuzzy
+msgid ""
+"The [RID] of this world's navigation map. Used by the [Navigation2DServer]."
+msgstr "Gibt die Anzahl der Spuren in der Animation zurück."
+
+#: doc/classes/World2D.xml
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."
diff --git a/doc/translations/el.po b/doc/translations/el.po
index 41e4925578..782205fcfa 100644
--- a/doc/translations/el.po
+++ b/doc/translations/el.po
@@ -355,7 +355,7 @@ msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
msgid ""
"Compares two values by checking their actual contents, recursing into any "
-"`Array` or `Dictionary` up to its deepest level.\n"
+"[Array] or [Dictionary] up to its deepest level.\n"
"This compares to [code]==[/code] in a number of ways:\n"
"- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/"
"code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] "
@@ -402,7 +402,7 @@ msgid ""
"- 1.0: Linear\n"
"- Greater than 1.0 (exclusive): Ease in\n"
"[/codeblock]\n"
-"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.4/img/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/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]."
@@ -1109,7 +1109,7 @@ msgid ""
"[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/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/img/"
"smoothstep_ease_comparison.png]Comparison between smoothstep() and ease(x, "
"-1.6521) return values[/url]"
msgstr ""
@@ -3387,6 +3387,12 @@ msgstr ""
#: doc/classes/@GlobalScope.xml
msgid ""
+"Hints that an integer property is a bitmask using the optionally named 2D "
+"navigation layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml
+msgid ""
"Hints that an integer property is a bitmask using the optionally named 3D "
"render layers."
msgstr ""
@@ -3399,6 +3405,12 @@ msgstr ""
#: doc/classes/@GlobalScope.xml
msgid ""
+"Hints that an integer property is a bitmask using the optionally named 3D "
+"navigation layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml
+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]."
@@ -8376,7 +8388,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/AStar.xml
+#: doc/classes/AStar.xml doc/classes/AStar2D.xml
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[/"
@@ -8575,7 +8587,10 @@ msgid ""
msgstr ""
#: doc/classes/AStar2D.xml
-msgid "Returns whether there is a connection/segment between the given points."
+msgid ""
+"Returns whether there is a connection/segment between the given points. 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/AStar2D.xml
@@ -8592,10 +8607,6 @@ msgid ""
msgstr ""
#: doc/classes/AStar2D.xml
-msgid "Deletes the segment between the given points."
-msgstr ""
-
-#: doc/classes/AStar2D.xml
msgid ""
"Returns the closest position to [code]to_position[/code] that resides inside "
"a segment between two connected points.\n"
@@ -8780,7 +8791,9 @@ msgid ""
"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."
+"transmit audio over the network. When capturing audio data from a "
+"microphone, the format of the samples will be stereo 32-bit floating point "
+"PCM."
msgstr ""
#: doc/classes/AudioEffectCapture.xml
@@ -13630,7 +13643,7 @@ msgid ""
msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
-#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/Navigation2D.xml
msgid "Returns the object's [RID]."
msgstr ""
@@ -19114,11 +19127,15 @@ msgid ""
msgstr ""
#: doc/classes/CurveTexture.xml
-msgid "The [code]curve[/code] rendered onto the texture."
-msgstr ""
+#, fuzzy
+msgid "The [Curve] that is rendered onto the texture."
+msgstr "ΕπιστÏέφει το ημίτονο της παÏαμέτÏου."
#: doc/classes/CurveTexture.xml
-msgid "The width of the texture."
+msgid ""
+"The width of the texture (in pixels). Higher values make it possible to "
+"represent high-frequency data better (such as sudden direction changes), at "
+"the cost of increased generation time and memory usage."
msgstr ""
#: doc/classes/CylinderMesh.xml
@@ -19404,6 +19421,13 @@ msgid "Returns the list of keys in the [Dictionary]."
msgstr ""
#: doc/classes/Dictionary.xml
+msgid ""
+"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, "
+"duplicate keys will not be copied over, unless [code]overwrite[/code] is "
+"[code]true[/code]."
+msgstr ""
+
+#: doc/classes/Dictionary.xml
#, fuzzy
msgid "Returns the number of keys in the dictionary."
msgstr "ΕπιστÏέφει το υπόλοιπο των 2 διανυσμάτων."
@@ -21344,9 +21368,23 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide a state data you want to be saved, like view "
+"position, grid settings, folding, etc. 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). This data is automatically saved for "
+"each scene in an [code]editstate[/code] file in the editor metadata folder. "
+"If you want to store global (scene-independent) editor data for your plugin, "
+"you can use [method get_window_layout] instead.\n"
+"Use [method set_state] to restore your saved state.\n"
+"[b]Note:[/b] This method should not be used to save important settings that "
+"should persist with the project.\n"
+"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be "
+"stored and restored correctly.\n"
+"[codeblock]\n"
+"func get_state():\n"
+" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n"
+" return state\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -21357,9 +21395,18 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide the GUI layout of the plugin or any other "
+"data you want to be stored. 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). The data is stored in the "
+"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n"
+"Use [method set_window_layout] to restore your saved layout.\n"
+"[codeblock]\n"
+"func get_window_layout(configuration):\n"
+" configuration.set_value(\"MyPlugin\", \"window_position\", $Window."
+"position)\n"
+" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -21472,11 +21519,30 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the state saved by [method get_state]."
+msgid ""
+"Restore the state saved by [method get_state]. This method is called when "
+"the current scene tab is changed in the editor.\n"
+"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise "
+"it will not be recognized and this method will not be called.\n"
+"[codeblock]\n"
+"func set_state(data):\n"
+" zoom = data.get(\"zoom\", 1.0)\n"
+" preferred_color = data.get(\"my_color\", Color.white)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the plugin GUI layout saved by [method get_window_layout]."
+msgid ""
+"Restore the plugin GUI layout and data saved by [method get_window_layout]. "
+"This method is called for every plugin on editor startup. Use the provided "
+"[code]configuration[/code] file to read your saved data.\n"
+"[codeblock]\n"
+"func set_window_layout(configuration):\n"
+" $Window.position = configuration.get_value(\"MyPlugin\", "
+"\"window_position\", Vector2())\n"
+" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", "
+"Color.white)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -26122,7 +26188,8 @@ msgid ""
"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])."
+"at fixed steps (see [member width]). See also [GradientTexture2D] and "
+"[CurveTexture]."
msgstr ""
#: doc/classes/GradientTexture.xml
@@ -26144,7 +26211,8 @@ msgid ""
"repeat] types using colors obtained from the gradient. 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] and [member height])."
+"[member width] and [member height]). See also [GradientTexture] and "
+"[CurveTexture]."
msgstr ""
#: doc/classes/GradientTexture2D.xml
@@ -26952,6 +27020,12 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+msgid ""
+"If [code]true[/code], this GridMap uses cell navmesh resources to create "
+"navigation regions."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid "If [code]true[/code], grid items are centered on the X axis."
msgstr ""
@@ -27002,6 +27076,10 @@ msgid "The assigned [MeshLibrary]."
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+msgid "The navigation layers the GridMap generates its navigation regions in."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
"Overrides the default friction and bounce physics properties for the whole "
"[GridMap]."
@@ -28225,7 +28303,7 @@ msgid ""
" # 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 body = to_json({\"name\": \"Godette\"})\n"
" error = http_request.request(\"https://httpbin.org/post\", [], true, "
"HTTPClient.METHOD_POST, body)\n"
" if error != OK:\n"
@@ -29394,7 +29472,7 @@ msgstr ""
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 "
+"([member 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 "
@@ -29543,10 +29621,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Returns the mouse mode. See the constants for more information."
-msgstr ""
-
-#: doc/classes/Input.xml
msgid ""
"Gets an input vector by specifying four actions for the positive and "
"negative X and Y axes.\n"
@@ -29740,24 +29814,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Sets the mouse mode. See the constants for more information."
-msgstr ""
-
-#: doc/classes/Input.xml
-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
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 "
@@ -29793,6 +29849,24 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
+msgid "Controls the mouse mode. See [enum MouseMode] for more information."
+msgstr ""
+
+#: doc/classes/Input.xml
+msgid ""
+"If [code]true[/code], similar input events sent by the operating system are "
+"accumulated. 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 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
msgid "Emitted when a joypad device has been connected or disconnected."
msgstr ""
@@ -30100,8 +30174,8 @@ msgstr ""
#: doc/classes/InputEventJoypadButton.xml
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]."
+"Represents the pressure the user puts on the button with their finger, if "
+"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]."
msgstr ""
#: doc/classes/InputEventJoypadMotion.xml
@@ -30364,9 +30438,9 @@ 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 "
+"at most. If you need more precise input reporting, set [member Input."
+"use_accumulated_input] to [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."
@@ -30854,7 +30928,18 @@ msgid ""
"[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."
+"fixed_column_width] greater than zero to wrap the text.\n"
+"[b]Incremental search:[/b] Like [PopupMenu] and [Tree], [ItemList] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/ItemList.xml
@@ -34605,12 +34690,18 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Returns the override [Material] for a surface of the [Mesh] resource.\n"
+"[b]Note:[/b] This function only returns [i]override[/i] materials associated "
+"with this [MeshInstance]. Consider using [method get_active_material] or "
+"[method Mesh.surface_get_material] to get materials associated with the "
+"[Mesh] resource."
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the number of surface materials."
-msgstr ""
+#, fuzzy
+msgid "Returns the number of surface override materials."
+msgstr "ΕπιστÏέφει το υπόλοιπο των 2 διανυσμάτων."
#: doc/classes/MeshInstance.xml
msgid ""
@@ -34646,7 +34737,10 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Sets the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Sets the override [Material] for the specified surface of the [Mesh] "
+"resource. This material is associated with this [MeshInstance] rather than "
+"with the [Mesh] resource."
msgstr ""
#: doc/classes/MeshInstance.xml
@@ -34677,9 +34771,10 @@ msgstr ""
#: doc/classes/MeshInstance2D.xml
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\"."
+"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be "
+"automatically created from an existing [Sprite] via a tool in the editor "
+"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to "
+"MeshInstance2D[/b] at the top of the 2D editor viewport."
msgstr ""
#: doc/classes/MeshInstance2D.xml
@@ -35438,6 +35533,9 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"Provides navigation and pathfinding within a collection of "
"[NavigationMesh]es. By default, these will be automatically collected from "
"child [NavigationMeshInstance] nodes. In addition to basic pathfinding, this "
@@ -35478,7 +35576,15 @@ msgid ""
msgstr ""
#: doc/classes/Navigation.xml
+#, fuzzy
+msgid "Returns the [RID] of the navigation map on the [NavigationServer]."
+msgstr "ΕπιστÏέφει το ημίτονο της παÏαμέτÏου."
+
+#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"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, "
@@ -35500,16 +35606,31 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation.get_simple_path] path query."
+msgstr ""
+
+#: doc/classes/Navigation.xml
+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/Navigation.xml doc/classes/Navigation2DServer.xml
+#: doc/classes/NavigationServer.xml
+msgid ""
+"Emitted when a navigation map is updated, when a region moves or is modified."
+msgstr ""
+
#: doc/classes/Navigation2D.xml
msgid "2D navigation and pathfinding node."
msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -35529,6 +35650,9 @@ msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -35538,6 +35662,12 @@ msgstr ""
msgid "The XY plane cell size to use for fields."
msgstr ""
+#: doc/classes/Navigation2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation2D.get_simple_path] path query."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml
msgid "Server interface for low-level 2D navigation access."
msgstr ""
@@ -35554,8 +35684,12 @@ msgid ""
"through scripts.\n"
"For two regions to be connected to each other, they must share a similar "
"edge. An edge is considered connected to another if both of its two vertices "
-"are at a distance less than [member Navigation.edge_connection_margin] to "
-"the respective other edge's vertex.\n"
+"are at a distance less than navigation map [code]edge_connection_margin[/"
+"code] to the respective other edge's vertex.\n"
+"You may assign navigation layers to regions with [method Navigation2DServer."
+"region_set_navigation_layers], which then can be checked upon when "
+"requesting a path with [method Navigation2DServer.map_get_path]. This allows "
+"allowing or forbidding some areas to 2D objects.\n"
"To use the collision avoidance system, you may use agents. You can set an "
"agent's target velocity, then the servers will emit a callback with a "
"modified velocity.\n"
@@ -35583,7 +35717,17 @@ msgid "Returns [code]true[/code] if the map got changed the previous frame."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Callback called at the end of the RVO process."
+msgid ""
+"Callback called at the end of the RVO process. If a callback is created "
+"manually and the agent is placed on a navigation map it will calculate "
+"avoidance for the agent and dispatch the calculated [code]safe_velocity[/"
+"code] to the [code]receiver[/code] object with a signal to the chosen "
+"[code]method[/code] name.\n"
+"[b]Note:[/b] Created callbacks are always processed independently of the "
+"SceneTree state as long as the agent is on a navigation map and not freed. "
+"To disable the dispatch of a callback from an agent use [method "
+"agent_set_callback] again with a [code]null[/code] object as the "
+"[code]receiver[/code]."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -35644,15 +35788,55 @@ msgid "Destroys the given RID."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns all created navigation map [RID]s on the NavigationServer. This "
+"returns both 2D and 3D created navigation maps as there is technically no "
+"distinction between them."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Create a new map."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"This function immediately forces synchronization of the specified navigation "
+"[code]map[/code] [RID]. By default navigation maps are only synchronized at "
+"the end of each physics frame. This function can be used to immediately "
+"(re)calculate all the navigation meshes and region connections of the "
+"navigation map. This makes it possible to query a navigation path for a "
+"changed map immediately and in the same frame (multiple times if needed).\n"
+"Due to technical restrictions the current NavigationServer command queue "
+"will be flushed. This means all already queued update commands for this "
+"physics frame will be executed, even those intended for other maps, regions "
+"and agents not part of the specified map. The expensive computation of the "
+"navigation meshes and region connections of a map will only be done for the "
+"specified map. Other maps will receive the normal synchronization at the end "
+"of the physics frame. Should the specified map receive changes after the "
+"forced update it will update again as well when the other maps receive their "
+"update.\n"
+"Avoidance processing and dispatch of the [code]safe_velocity[/code] signals "
+"is untouched by this function and continues to happen for all maps and "
+"agents at the end of the physics frame.\n"
+"[b]Note:[/b] With great power comes great responsibility. This function "
+"should only be used by users that really know what they are doing and have a "
+"good reason for it. Forcing an immediate update of a navigation map requires "
+"locking the NavigationServer and flushing the entire NavigationServer "
+"command queue. Not only can this severely impact the performance of a game "
+"but it can also introduce bugs if used inappropriately without much "
+"foresight."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns all navigation agents [RID]s that are currently assigned to the "
"requested navigation [code]map[/code]."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
#, fuzzy
msgid "Returns the map cell size."
@@ -35677,7 +35861,10 @@ msgid ""
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Returns the navigation path to reach the destination from the origin."
+msgid ""
+"Returns the navigation path to reach the destination from the origin. "
+"[code]navigation_layers[/code] is a bitmask of all region layers that are "
+"allowed to be in the path."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -35696,6 +35883,12 @@ msgstr "ΕπιστÏέφει το συνημίτονο της παÏαμέτÏο
msgid "Sets the map active."
msgstr "ΕπιστÏέφει το τόξο ημιτόνου της παÏαμέτÏου."
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/"
+"b] Currently not implemented."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Set the map cell size used to weld the navigation mesh polygons."
msgstr ""
@@ -35711,15 +35904,78 @@ msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"Returns the ending point of a connection door. [code]connection[/code] is an "
+"index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns the starting point of a connection door. [code]connection[/code] is "
+"an index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns how many connections this [code]region[/code] has with other regions "
+"in the map."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]."
+msgstr "ΕπιστÏέφει το υπόλοιπο των 2 διανυσμάτων."
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns the navigation map [RID] the requested [code]region[/code] is "
"currently assigned to."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
#, fuzzy
+msgid "Returns the region's navigation layers."
+msgstr "ΕπιστÏέφει το ημίτονο της παÏαμέτÏου."
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]."
+msgstr "ΕπιστÏέφει το ημίτονο της παÏαμέτÏου."
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns [code]true[/code] if the provided [code]point[/code] in world space "
+"is currently owned by the provided navigation [code]region[/code]. Owned in "
+"this context means that one of the region's navigation mesh polygon faces "
+"has a possible position at the closest distance to this point compared to "
+"all other navigation meshes from other navigation regions that are also "
+"registered on the navigation map of the provided region.\n"
+"If multiple navigation meshes have positions at equal distance the "
+"navigation region whose polygons are processed first wins the ownership. "
+"Polygons are processed in the same order that navigation regions were "
+"registered on the NavigationServer.\n"
+"[b]Note:[/b] If navigation meshes from different navigation regions overlap "
+"(which should be avoided in general) the result might not be what is "
+"expected."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]."
+msgstr "ΕπιστÏέφει το ημίτονο της παÏαμέτÏου."
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
msgid "Sets the map for the region."
msgstr "ΕπιστÏέφει το ημίτονο της παÏαμέτÏου."
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method Navigation2DServer.map_get_path])."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
#, fuzzy
msgid "Sets the navigation mesh for the region."
@@ -35729,6 +35985,11 @@ msgstr "ΕπιστÏέφει την αντίθετη τιμή της παÏαμÎ
msgid "Sets the global transformation for the region."
msgstr ""
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]."
+msgstr "ΕπιστÏέφει το ημίτονο της παÏαμέτÏου."
+
#: doc/classes/NavigationAgent.xml
msgid "3D agent used in navigation for collision avoidance."
msgstr ""
@@ -35738,9 +35999,16 @@ msgid ""
"3D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationAgent] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World] navigation map. If this node is a child of a [Navigation] "
+"node it will register to the navigation map of the navigation node or the "
+"function [method set_navigation] can be used to set the navigation node "
+"directly. [NavigationAgent] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -35758,7 +36026,15 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-msgid "Returns the path from start to finish in global coordinates."
+msgid ""
+"Returns this agent's current path from start to finish in global "
+"coordinates. The path only updates when the target location is changed or "
+"the agent requires a repath. The path array is not intended to be used in "
+"direct path movement as the agent has its own internal path logic that would "
+"get corrupted by changing the path array manually. Use the intended [method "
+"get_next_location] once every physics frame to receive the next path point "
+"for the agents movement as this function also updates the internal path "
+"logic."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -35774,11 +36050,24 @@ msgid ""
"system."
msgstr ""
-#: doc/classes/NavigationAgent.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"Returns a [Vector3] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the origin of the agent's parent."
+"Returns the [RID] of the navigation map for this NavigationAgent node. This "
+"function returns always the map set on the NavigationAgent node and not the "
+"map of the abstract agent on the NavigationServer. If the agent map is "
+"changed directly with the NavigationServer API the NavigationAgent node will "
+"not be aware of the map change. Use [method set_navigation_map] to change "
+"the navigation map for the NavigationAgent and also update the agent on the "
+"NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
+"Returns the next location in global coordinates that can be moved to, making "
+"sure that there are no static objects in the way. If the agent does not have "
+"a navigation path, it will return the position of the agent's parent. The "
+"use of this function once every physics frame is required to update the "
+"internal path logic of the NavigationAgent."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -35820,6 +36109,12 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"Sets the [RID] of the navigation map this NavigationAgent node should use "
+"and also updates the [code]agent[/code] on the NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"Sets the user desired final location. This will clear the current navigation "
"path."
msgstr ""
@@ -35832,7 +36127,13 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml
-msgid "The agent height offset to match the navigation mesh height."
+msgid ""
+"The NavigationAgent height offset is subtracted from the y-axis value of any "
+"vector path position for this NavigationAgent. The NavigationAgent height "
+"offset does not change or influence the navigation mesh or pathfinding query "
+"result. Additional navigation maps that use regions with navigation meshes "
+"that the developer baked with appropriate agent radius or height values are "
+"required to support different-sized agents."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -35859,26 +36160,53 @@ msgstr ""
msgid "The maximum speed that an agent can move."
msgstr ""
+#: doc/classes/NavigationAgent.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "The distance to search for other agents."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"The distance threshold before a path point is considered to be reached. This "
+"will allow an agent to not have to hit a path point on the path exactly, but "
+"in the area. If this value is set to high the NavigationAgent will skip "
+"points on the path which can lead to leaving the navigation mesh. If this "
+"value is set to low the NavigationAgent will be stuck in a repath loop cause "
+"it will constantly overshoot or undershoot the distance to the next point on "
+"each physics frame update."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"The maximum distance the agent is allowed away from the ideal path to the "
"final location. This can happen due to trying to avoid collisions. When the "
"maximum distance is exceeded, it recalculates the ideal path."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-msgid "The radius of the agent."
+msgid ""
+"The radius of the avoidance agent. This is the \"body\" of the avoidance "
+"agent and not the avoidance maneuver starting radius (which is controlled by "
+"[member neighbor_dist]).\n"
+"Does not affect normal pathfinding. To change an actor's pathfinding radius "
+"bake [NavigationMesh] resources with a different [member NavigationMesh."
+"agent_radius] property and use different navigation maps for each actor size."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"The distance threshold before a target is considered to be reached. This "
-"will allow an agent to not have to hit a point on the path exactly, but in "
-"the area."
+"The distance threshold before the final target point is considered to be "
+"reached. This will allow an agent to not have to hit the point of the final "
+"target exactly, but only the area. If this value is set to low the "
+"NavigationAgent will be stuck in a repath loop cause it will constantly "
+"overshoot or undershoot the distance to the final target point on each "
+"physics frame update."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -35921,9 +36249,16 @@ msgid ""
"2D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationAgent2D] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World2D] navigation map. If this node is a child of a "
+"[Navigation2D] node it will register to the navigation map of the navigation "
+"node or the function [method set_navigation] can be used to set the "
+"navigation node directly. [NavigationAgent2D] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent2D.xml
@@ -35940,13 +36275,6 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent2D.xml
-msgid ""
-"Returns a [Vector2] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the position of the agent's parent."
-msgstr ""
-
-#: doc/classes/NavigationAgent2D.xml
#, fuzzy
msgid "Returns the [RID] of this agent on the [Navigation2DServer]."
msgstr "ΕπιστÏέφει το ημίτονο της παÏαμέτÏου."
@@ -35967,6 +36295,13 @@ msgid ""
"only be enabled on agents that currently require it."
msgstr ""
+#: doc/classes/NavigationAgent2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent2D] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationMesh.xml
msgid "A mesh to approximate the walkable areas and obstacles."
msgstr ""
@@ -35997,8 +36332,8 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
-"Returns whether the specified [code]bit[/code] of the [member geometry/"
-"collision_mask] is set."
+"Returns whether the specified [code]bit[/code] of the [member "
+"geometry_collision_mask] is set."
msgstr ""
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
@@ -36021,9 +36356,9 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/"
-"code] in the [member geometry/collision_mask].\n"
+"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]."
+"code] in the [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
@@ -36037,14 +36372,14 @@ 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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36056,7 +36391,7 @@ 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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36084,13 +36419,17 @@ msgstr ""
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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
-"If [code]true[/code], marks walkable spans as not walkable if the clearance "
-"above the span is less than [member agent/height]."
+"If the baking [AABB] has a volume the navigation mesh baking will be "
+"restricted to its enclosing area."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+msgid "The position offset applied to the [member filter_baking_aabb] [AABB]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36100,13 +36439,19 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]true[/code], marks non-walkable spans as walkable if their maximum "
-"is within [member agent/max_climb] of a walkable neighbor."
+"is within [member agent_max_climb] of a walkable neighbor."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+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
msgid ""
"The physics layers to scan for static colliders.\n"
-"Only used when [member geometry/parsed_geometry_type] is [constant "
+"Only used when [member geometry_parsed_geometry_type] is [constant "
"PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]."
msgstr ""
@@ -36125,7 +36470,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"The name of the group to scan for geometry.\n"
-"Only used when [member geometry/source_geometry_mode] is [constant "
+"Only used when [member geometry_source_geometry_mode] is [constant "
"SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant "
"SOURCE_GEOMETRY_GROUPS_EXPLICIT]."
msgstr ""
@@ -36188,7 +36533,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Parses [StaticBody] colliders as geometry. The collider should be in any of "
-"the layers specified by [member geometry/collision_mask]."
+"the layers specified by [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36210,13 +36555,13 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Scans nodes in a group and their child nodes recursively for geometry. The "
-"group is specified by [member geometry/source_group_name]."
+"group is specified by [member geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Uses nodes in a group for geometry. The group is specified by [member "
-"geometry/source_group_name]."
+"geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36258,7 +36603,15 @@ msgid ""
"geometry for walkable terrain suitable to [NavigationMesh] agent properties "
"by creating a voxel world around the meshes bounding area.\n"
"The finalized navigation mesh is then returned and stored inside the "
-"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes."
+"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] "
+"nodes.\n"
+"[b]Note:[/b] Using meshes to not only define walkable surfaces but also "
+"obstruct navigation baking does not always work. The navigation baking has "
+"no concept of what is a geometry \"inside\" when dealing with mesh source "
+"geometry and this is intentional. Depending on current baking parameters, as "
+"soon as the obstructing mesh is large enough to fit a navigation mesh area "
+"inside, the baking will generate navigation mesh areas that are inside the "
+"obstructing source geometry mesh."
msgstr ""
#: doc/classes/NavigationMeshGenerator.xml
@@ -36266,8 +36619,8 @@ msgid ""
"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child "
"nodes under the provided [code]root_node[/code] or a specific group of nodes "
"for potential source geometry. The parse behavior can be controlled with the "
-"[member NavigationMesh.geometry/parsed_geometry_type] and [member "
-"NavigationMesh.geometry/source_geometry_mode] properties on the "
+"[member NavigationMesh.geometry_parsed_geometry_type] and [member "
+"NavigationMesh.geometry_source_geometry_mode] properties on the "
"[NavigationMesh] resource."
msgstr ""
@@ -36285,8 +36638,21 @@ msgstr ""
#: doc/classes/NavigationMeshInstance.xml
msgid ""
"An instance of a [NavigationMesh]. It tells the [Navigation] node what can "
-"be navigated and what cannot, based on the [NavigationMesh] resource. This "
-"should be a child of a [Navigation] node."
+"be navigated and what cannot, based on the [NavigationMesh] resource.\n"
+"By default this node will register to the default [World] navigation map. If "
+"this node is a child of a [Navigation] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method NavigationServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The cost of entering this region from another region can be controlled with "
+"the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The cost of traveling distances inside this region can be controlled with "
+"the [member travel_cost] multiplier."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
@@ -36315,10 +36681,34 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding enters this region's navmesh from another regions navmesh "
+"the [code]enter_cost[/code] value is added to the path distance for "
+"determining the shortest path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationMesh] "
+"belongs to. On path requests with [method NavigationServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
msgid "The [NavigationMesh] resource to use."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding moves inside this region's navmesh the traveled distances "
+"are multiplied with [code]travel_cost[/code] for determining the shortest "
+"path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
msgid "Notifies when the navigation mesh bake operation is completed."
msgstr ""
@@ -36335,7 +36725,9 @@ msgid ""
"3D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationObstacle] is physics safe."
+"[NavigationObstacle] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle.xml
@@ -36376,7 +36768,9 @@ msgid ""
"2D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationObstacle2D] is physics safe."
+"[NavigationObstacle2D] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle2D.xml
@@ -36457,6 +36851,14 @@ msgstr ""
#: doc/classes/NavigationPolygon.xml
msgid ""
+"Returns the [NavigationMesh] resulting from this navigation polygon. This "
+"navmesh can be used to update the navmesh of a region with the [method "
+"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server "
+"behind the scene)."
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml
+msgid ""
"Returns a [PoolVector2Array] containing the vertices of an outline that was "
"created in the editor or by script."
msgstr ""
@@ -36493,6 +36895,30 @@ msgid ""
msgstr ""
#: doc/classes/NavigationPolygonInstance.xml
+msgid "A region of the 2D navigation map."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A region of the navigation map. It tells the [Navigation2DServer] what can "
+"be navigated and what cannot, based on its [NavigationPolygon] resource.\n"
+"By default this node will register to the default [World2D] navigation map. "
+"If this node is a child of a [Navigation2D] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The pathfinding cost of entering this region from another region can be "
+"controlled with the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The pathfinding cost of traveling distances inside this region can be "
+"controlled with the [member travel_cost] multiplier."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
msgid ""
"Returns the [RID] of this region on the [Navigation2DServer]. Combined with "
"[method Navigation2DServer.map_get_closest_point_owner] can be used to "
@@ -36500,6 +36926,22 @@ msgid ""
"navigation map."
msgstr ""
+#: doc/classes/NavigationPolygonInstance.xml
+msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationPolygon] "
+"belongs to. On path requests with [method Navigation2DServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid "The [NavigationPolygon] resource to use."
+msgstr ""
+
#: doc/classes/NavigationServer.xml
msgid "Server interface for low-level 3D navigation access."
msgstr ""
@@ -36579,6 +37021,12 @@ msgid "Bakes the navigation mesh."
msgstr ""
#: doc/classes/NavigationServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method NavigationServer.map_get_path])."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
msgid "Control activation of this server."
msgstr ""
@@ -38045,13 +38493,19 @@ msgstr ""
#: doc/classes/Node.xml
msgid ""
"Emitted when a child node enters the scene tree, either because it entered "
-"on its own or because this node entered with it."
+"on its own or because this node entered with it.\n"
+"This signal is emitted [i]after[/i] the child node's own [constant "
+"NOTIFICATION_ENTER_TREE] and [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
msgid ""
-"Emitted when a child node exits the scene tree, either because it exited on "
-"its own or because this node exited."
+"Emitted when a child node is about to exit the scene tree, either because it "
+"is being removed or freed directly, or because this node is exiting the "
+"tree.\n"
+"When this signal is received, the child [code]node[/code] is still in the "
+"tree and valid. This signal is emitted [i]after[/i] the child node's own "
+"[signal tree_exiting] and [constant NOTIFICATION_EXIT_TREE]."
msgstr ""
#: doc/classes/Node.xml
@@ -38063,7 +38517,10 @@ msgid "Emitted when the node is renamed."
msgstr ""
#: doc/classes/Node.xml
-msgid "Emitted when the node enters the tree."
+msgid ""
+"Emitted when the node enters the tree.\n"
+"This signal is emitted [i]after[/i] the related [constant "
+"NOTIFICATION_ENTER_TREE] notification."
msgstr ""
#: doc/classes/Node.xml
@@ -38073,15 +38530,21 @@ msgstr ""
#: doc/classes/Node.xml
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)."
+"the right place for de-initialization (or a \"destructor\", if you will).\n"
+"This signal is emitted [i]before[/i] the related [constant "
+"NOTIFICATION_EXIT_TREE] notification."
msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node enters a [SceneTree]."
+msgid ""
+"Notification received when the node enters a [SceneTree].\n"
+"This notification is emitted [i]before[/i] the related [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node is about to exit a [SceneTree]."
+msgid ""
+"Notification received when the node is about to exit a [SceneTree].\n"
+"This notification is emitted [i]after[/i] the related [signal tree_exiting]."
msgstr ""
#: doc/classes/Node.xml
@@ -38342,7 +38805,13 @@ msgid "Rotation in degrees, relative to the node's parent."
msgstr ""
#: doc/classes/Node2D.xml
-msgid "The node's scale. Unscaled value: [code](1, 1)[/code]."
+msgid ""
+"The node's scale. Unscaled value: [code](1, 1)[/code].\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
#: doc/classes/Node2D.xml
@@ -39787,6 +40256,10 @@ msgid ""
" if argument.find(\"=\") > -1:\n"
" var key_value = argument.split(\"=\")\n"
" arguments[key_value[0].lstrip(\"--\")] = key_value[1]\n"
+" else:\n"
+" # Options without an argument will be present in the dictionary,\n"
+" # with the value set to an empty string.\n"
+" arguments[argument.lstrip(\"--\")] = \"\"\n"
"[/codeblock]"
msgstr ""
@@ -40443,8 +40916,15 @@ msgstr ""
msgid ""
"Moves the file or directory to the system's recycle bin. See also [method "
"Directory.remove].\n"
+"The method takes only global paths, so you may need to use [method "
+"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/"
+"code] as it will not work in exported project.\n"
"[b]Note:[/b] If the user has disabled the recycle bin on their system, the "
-"file will be permanently deleted instead."
+"file will be permanently deleted instead.\n"
+"[codeblock]\n"
+"var file_to_remove = \"user://slot1.sav\"\n"
+"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/OS.xml
@@ -45289,7 +45769,18 @@ msgstr ""
#: doc/classes/PopupMenu.xml
msgid ""
"[PopupMenu] is a [Control] that displays a list of options. They are popular "
-"in toolbars or context menus."
+"in toolbars or context menus.\n"
+"[b]Incremental search:[/b] Like [ItemList] and [Tree], [PopupMenu] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/PopupMenu.xml
@@ -46799,7 +47290,16 @@ msgid ""
msgstr ""
#: doc/classes/ProjectSettings.xml
-msgid "Message to be displayed before the backtrace when the engine crashes."
+msgid ""
+"Message to be displayed before the backtrace when the engine crashes. By "
+"default, this message is only used in exported projects due to the editor-"
+"only override applied to this setting."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Editor-only override for [member debug/settings/crash_handler/message]. Does "
+"not affect exported projects in debug or release mode."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -47044,6 +47544,18 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default naming style for scene files to infer from their root nodes. "
+"Possible options are:\n"
+"- [code]0[/code] (Auto): Uses the scene root name as is without changing its "
+"casing.\n"
+"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase "
+"casing.\n"
+"- [code]2[/code] (snake_case): Converts the scene root name to snake_case "
+"casing."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -47269,6 +47781,198 @@ msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 1."
msgstr ""
@@ -47477,6 +48181,198 @@ msgid "Optional name for the 2D render layer 9."
msgstr ""
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 1."
msgstr ""
@@ -47744,6 +48640,49 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default cell height for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_height].\n"
+"[b]Note:[/b] Currently not implemented."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 2D navigation maps. See [method "
+"Navigation2DServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell height for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_height]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 3D navigation maps. See [method "
+"NavigationServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default map up vector for 3D navigation maps. See [method NavigationServer."
+"map_set_up]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -48417,20 +49356,28 @@ msgid ""
"cause.\n"
"The default value is a conservative one, so you are advised to tweak it "
"according to the hardware you are targeting.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"The default is a very conservative override for [code]rendering/gles3/"
-"shaders/max_concurrent_compiles[/code].\n"
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
"Depending on the specific devices you are targeting, you may want to raise "
"it.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
+"Depending on the specific browsers you are targeting, you may want to raise "
+"it.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -48438,19 +49385,28 @@ msgid ""
"The maximum size, in megabytes, that the ubershader cache can grow up to. On "
"startup, the least recently used entries will be deleted until the total "
"size is within bounds.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/ubershader_cache_size_mb[/"
-"code], so a smaller maximum size can be configured for mobile platforms, "
-"where storage space is more limited.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for mobile platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for web platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] Currently, shader caching is generally unavailable on web "
+"platforms.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -48482,14 +49438,22 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/shader_compilation_mode[/"
-"code], so asynchronous compilation can be disabled for mobile.\n"
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on mobile platforms.\n"
"You may want to do that since mobile GPUs generally won't support "
"ubershaders due to their complexity."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on web platforms.\n"
+"You may want to do that since certain browsers (especially on mobile "
+"platforms) generally won't support ubershaders due to their complexity."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
@@ -49246,7 +50210,6 @@ msgid ""
"- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/"
"code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, "
"small grid radius values may lead to unwanted groupings.\n"
-"[/codeblock]\n"
"[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more "
"effective and faster [VisibilityNotifier] functionality. For most use cases, "
"[method Vector3.distance_to] or [method Vector3.distance_squared_to] are "
@@ -51395,6 +52358,22 @@ msgid "Makes text fill width."
msgstr ""
#: doc/classes/RichTextLabel.xml
+msgid "Aligns top of the inline image to the top of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns center of the inline image to the center of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns bottom of the inline image to the baseline of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns bottom of the inline image to the bottom of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
msgid "Each list item has a number marker."
msgstr ""
@@ -53132,8 +54111,8 @@ msgid ""
" yield(get_tree().create_timer(1.0), \"timeout\")\n"
" print(\"Timer ended.\")\n"
"[/codeblock]\n"
-"The timer will be automatically freed after its time elapses, so be aware "
-"that any reference you might have kept to it will become invalid."
+"The timer will be dereferenced after its time elapses. To preserve the "
+"timer, you can keep a reference to it. See [Reference]."
msgstr ""
#: doc/classes/SceneTreeTimer.xml
@@ -53165,24 +54144,23 @@ msgid ""
"manually (i.e. by using [code]Tween.new()[/code]) are invalid. They can't be "
"used for tweening values, but you can do manual interpolation with [method "
"interpolate_value].\n"
-"A [SceneTreeTween] animation is composed of a sequence of [Tweener]s, which "
-"by default are executed one after another. You can create a sequence by "
-"appending [Tweener]s to the [SceneTreeTween]. Animating something with a "
-"[Tweener] is called tweening. Example tweening sequence looks like this:\n"
+"A tween animation is created by adding [Tweener]s to the [SceneTreeTween] "
+"object, using [method tween_property], [method tween_interval], [method "
+"tween_callback] or [method tween_method]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1)\n"
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"This sequence will make the [code]$Sprite[/code] node turn red, then shrink "
-"and finally the [method Node.queue_free] is called to remove the sprite. See "
-"methods [method tween_property], [method tween_interval], [method "
-"tween_callback] and [method tween_method] for more usage information.\n"
+"This sequence will make the [code]$Sprite[/code] node turn red, then shrink, "
+"before finally calling [method Node.queue_free] to free the sprite. "
+"[Tweener]s are executed one after another by default. This behavior can be "
+"changed using [method parallel] and [method set_parallel].\n"
"When a [Tweener] is created with one of the [code]tween_*[/code] methods, a "
"chained method call can be used to tweak the properties of this [Tweener]. "
-"For example, if you want to set different transition type in the above "
-"example, you can do:\n"
+"For example, if you want to set a different transition type in the above "
+"example, you can use [method set_trans]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1).set_trans(Tween."
@@ -53191,8 +54169,9 @@ msgid ""
"TRANS_BOUNCE)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Most of the [SceneTreeTween] methods can be chained this way too. In this "
-"example the [SceneTreeTween] is bound and have set a default transition:\n"
+"Most of the [SceneTreeTween] methods can be chained this way too. In the "
+"following example the [SceneTreeTween] is bound to the running script's node "
+"and a default transition is set for its [Tweener]s:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween().bind_node(self).set_trans(Tween."
"TRANS_ELASTIC)\n"
@@ -53200,16 +54179,16 @@ msgid ""
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Another interesting use for [SceneTreeTween]s is animating arbitrary set of "
+"Another interesting use for [SceneTreeTween]s is animating arbitrary sets of "
"objects:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"for sprite in get_children():\n"
-" tween.tween_property(sprite, \"position\", Vector2(), 1)\n"
+" tween.tween_property(sprite, \"position\", Vector2(0, 0), 1)\n"
"[/codeblock]\n"
"In the example above, all children of a node are moved one after another to "
"position (0, 0).\n"
-"Some [Tweener]s use transitions and eases. The first accepts an [enum Tween."
+"Some [Tweener]s use transitions and eases. The first accepts a [enum Tween."
"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 Tween.EaseType] constant, and "
@@ -53221,7 +54200,7 @@ msgid ""
"tween_cheatsheet.png]Tween easing and transition types cheatsheet[/url]\n"
"[b]Note:[/b] All [SceneTreeTween]s will automatically start by default. To "
"prevent a [SceneTreeTween] from autostarting, you can call [method stop] "
-"immediately after it was created."
+"immediately after it is created."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53251,21 +54230,24 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
-"Processes the [SceneTreeTween] by given [code]delta[/code] value, in "
-"seconds. Mostly useful when the [SceneTreeTween] is paused, for controlling "
-"it manually. Can also be used to end the [SceneTreeTween] animation "
-"immediately, by using [code]delta[/code] longer than the whole duration.\n"
+"Processes the [SceneTreeTween] by the given [code]delta[/code] value, in "
+"seconds. This is mostly useful for manual control when the [SceneTreeTween] "
+"is paused. It can also be used to end the [SceneTreeTween] animation "
+"immediately, by setting [code]delta[/code] longer than the whole duration of "
+"the [SceneTreeTween] animation.\n"
"Returns [code]true[/code] if the [SceneTreeTween] still has [Tweener]s that "
"haven't finished.\n"
-"[b]Note:[/b] The [SceneTreeTween] will become invalid after finished, but "
-"you can call [method stop] after the step, to keep it and reset."
+"[b]Note:[/b] The [SceneTreeTween] will become invalid in the next processing "
+"frame after its animation finishes. Calling [method stop] after performing "
+"[method custom_step] instead keeps and resets the [SceneTreeTween]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Returns the total time in seconds the [SceneTreeTween] has been animating (i."
-"e. time since it started, not counting pauses etc.). The time is affected by "
-"[method set_speed_scale] and [method stop] will reset it to [code]0[/code].\n"
+"e. the time since it started, not counting pauses etc.). The time is "
+"affected by [method set_speed_scale], and [method stop] will reset it to "
+"[code]0[/code].\n"
"[b]Note:[/b] As it results from accumulating frame deltas, the time returned "
"after the [SceneTreeTween] has finished animating will be slightly greater "
"than the actual [SceneTreeTween] duration."
@@ -53301,11 +54283,10 @@ msgstr ""
msgid ""
"Returns whether the [SceneTreeTween] is valid. A valid [SceneTreeTween] is a "
"[SceneTreeTween] contained by the scene tree (i.e. the array from [method "
-"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). "
-"[SceneTreeTween] might become invalid when it has finished tweening or was "
-"killed, also when created with [code]Tween.new()[/code]. Invalid "
-"[SceneTreeTween] can't have [Tweener]s appended, because it can't animate "
-"them. You can however still use [method interpolate_value]."
+"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). A "
+"[SceneTreeTween] might become invalid when it has finished tweening, is "
+"killed, or when created with [code]SceneTreeTween.new()[/code]. Invalid "
+"[SceneTreeTween]s can't have [Tweener]s appended."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53345,16 +54326,15 @@ msgstr ""
msgid ""
"Sets the number of times the tweening sequence will be repeated, i.e. "
"[code]set_loops(2)[/code] will run the animation twice.\n"
-"Calling this method without arguments will make the [SceneTreeTween] run "
-"infinitely, until it is either killed by [method kill] or by freeing bound "
-"node, or all the animated objects have been freed (which makes further "
+"Calling this method without arguments will make the [Tween] run infinitely, "
+"until either it is killed with [method kill], the [Tween]'s bound node is "
+"freed, or all the animated objects have been freed (which makes further "
"animation impossible).\n"
"[b]Warning:[/b] Make sure to always add some duration/delay when using "
-"infinite loops. 0-duration looped animations (e.g. single [CallbackTweener] "
-"with no delay or [PropertyTweener] with invalid node) are equivalent to "
-"infinite [code]while[/code] loops and will freeze your game. If a "
-"[SceneTreeTween]'s lifetime depends on some node, always use [method "
-"bind_node]."
+"infinite loops. To prevent the game freezing, 0-duration looped animations "
+"(e.g. a single [CallbackTweener] with no delay) are stopped after a small "
+"number of loops, which may produce unexpected results. If a [Tween]'s "
+"lifetime depends on some node, always use [method bind_node]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53416,10 +54396,10 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Creates and appends an [IntervalTweener]. This method can be used to create "
-"delays in the tween animation, as an alternative for using the delay in "
-"other [Tweener]s or when there's no animation (in which case the "
-"[SceneTreeTween] acts as a timer). [code]time[/code] is the length of the "
-"interval, in seconds.\n"
+"delays in the tween animation, as an alternative to using the delay in other "
+"[Tweener]s, or when there's no animation (in which case the [SceneTreeTween] "
+"acts as a timer). [code]time[/code] is the length of the interval, in "
+"seconds.\n"
"Example: creating an interval in code execution.\n"
"[codeblock]\n"
"# ... some code\n"
@@ -53473,8 +54453,8 @@ msgid ""
"Creates and appends a [PropertyTweener]. This method tweens a "
"[code]property[/code] of an [code]object[/code] between an initial value and "
"[code]final_val[/code] in a span of time equal to [code]duration[/code], in "
-"seconds. The initial value by default is a value at the time the tweening of "
-"the [PropertyTweener] start. For example:\n"
+"seconds. The initial value by default is the property's value at the time "
+"the tweening of the [PropertyTweener] starts. For example:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"tween.tween_property($Sprite, \"position\", Vector2(100, 200), 1)\n"
@@ -53505,16 +54485,15 @@ msgid ""
"Emitted when the [SceneTreeTween] has finished all tweening. Never emitted "
"when the [SceneTreeTween] is set to infinite looping (see [method "
"set_loops]).\n"
-"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) after this signal "
-"is emitted, but it doesn't happen immediately, but on the next processing "
-"frame. Calling [method stop] inside the signal callback will preserve the "
-"[SceneTreeTween]."
+"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) in the next "
+"processing frame after this signal is emitted. Calling [method stop] inside "
+"the signal callback will prevent the [SceneTreeTween] from being removed."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Emitted when a full loop is complete (see [method set_loops]), providing the "
-"loop index. This signal is not emitted after final loop, use [signal "
+"loop index. This signal is not emitted after the final loop, use [signal "
"finished] instead for this case."
msgstr ""
@@ -53522,7 +54501,7 @@ msgstr ""
msgid ""
"Emitted when one step of the [SceneTreeTween] is complete, providing the "
"step index. One step is either a single [Tweener] or a group of [Tweener]s "
-"running parallelly."
+"running in parallel."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -54854,7 +55833,12 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-msgid "Scale part of the local transformation."
+msgid ""
+"Scale part of the local transformation.\n"
+"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, the scale values will either be all "
+"positive or all negative."
msgstr ""
#: doc/classes/Spatial.xml
@@ -57487,11 +58471,11 @@ msgstr ""
msgid ""
"Returns [code]true[/code] if this string contains a valid integer.\n"
"[codeblock]\n"
-"print(\"7\".is_valid_int()) # Prints \"True\"\n"
-"print(\"14.6\".is_valid_int()) # Prints \"False\"\n"
-"print(\"L\".is_valid_int()) # Prints \"False\"\n"
-"print(\"+3\".is_valid_int()) # Prints \"True\"\n"
-"print(\"-12\".is_valid_int()) # Prints \"True\"\n"
+"print(\"7\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"14.6\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"L\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"+3\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"-12\".is_valid_integer()) # Prints \"True\"\n"
"[/codeblock]"
msgstr ""
@@ -60966,6 +61950,11 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml
+#, fuzzy
+msgid "If [code]true[/code], this TileMap bakes a navigation region."
+msgstr "ΕπιστÏέφει το συνημίτονο της παÏαμέτÏου."
+
+#: doc/classes/TileMap.xml
msgid "If [code]true[/code], the cell's UVs will be clipped."
msgstr ""
@@ -61072,6 +62061,10 @@ msgid "The TileMap orientation mode. See [enum Mode] for possible values."
msgstr ""
#: doc/classes/TileMap.xml
+msgid "The navigation layers the TileMap generates its navigation regions in."
+msgstr ""
+
+#: doc/classes/TileMap.xml
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 "
@@ -62203,7 +63196,12 @@ msgstr ""
#: doc/classes/Transform2D.xml
msgid ""
"Returns a copy of the transform scaled by the given [code]scale[/code] "
-"factor, using matrix multiplication."
+"factor, using matrix multiplication.\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
#: doc/classes/Transform2D.xml
@@ -62359,7 +63357,18 @@ msgid ""
"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]."
+"to remove it from the [Tree].\n"
+"[b]Incremental search:[/b] Like [ItemList] and [PopupMenu], [Tree] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/Tree.xml
@@ -65886,11 +66895,12 @@ msgid "This enabler will stop [Particles2D] nodes."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _process function."
+msgid "This enabler will stop the parent's [method Node._process] function."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _physics_process function."
+msgid ""
+"This enabler will stop the parent's [method Node._physics_process] function."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
@@ -65930,6 +66940,16 @@ msgid "The VisibilityNotifier's bounding box."
msgstr ""
#: doc/classes/VisibilityNotifier.xml
+msgid ""
+"In addition to checking whether a node is on screen or within a [Camera]'s "
+"view, VisibilityNotifier can also optionally check whether a node is within "
+"a specified maximum distance when using a [Camera] with perspective "
+"projection. This is useful for throttling the performance requirements of "
+"nodes that are far away.\n"
+"[b]Note:[/b] This feature will be disabled if set to 0.0."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier.xml
msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view."
msgstr ""
@@ -70692,6 +71712,16 @@ msgid "The amount of shader rebinds in the frame."
msgstr ""
#: doc/classes/VisualServer.xml
+msgid ""
+"The peak amount of shaders that have been under compilation in the frame.\n"
+"This is useful to know when asynchronous shader compilation has finished for "
+"the current shaders on screen.\n"
+"[b]Note:[/b] For complete certainty, only assume there are no outstanding "
+"compilations when this value is zero for at least two frames in a row.\n"
+"Unimplemented in the GLES2 rendering backend, always returns 0."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
msgid "The amount of surface changes in the frame."
msgstr ""
@@ -73891,8 +74921,8 @@ msgstr ""
#: doc/classes/World.xml
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."
+"scenario, a navigation map and a sound space. Spatial nodes register their "
+"resources into the current world."
msgstr ""
#: doc/classes/World.xml
@@ -73907,11 +74937,17 @@ msgstr ""
#: doc/classes/World.xml
msgid ""
-"The World's fallback_environment will be used if the World's [Environment] "
-"fails or is missing."
+"The World's fallback environment will be used if [member environment] fails "
+"or is missing."
msgstr ""
#: doc/classes/World.xml
+#, fuzzy
+msgid ""
+"The [RID] of this world's navigation map. Used by the [NavigationServer]."
+msgstr "ΕπιστÏέφει το ημίτονο της παÏαμέτÏου."
+
+#: doc/classes/World.xml
msgid "The World's visual scenario."
msgstr ""
@@ -73926,8 +74962,8 @@ msgstr ""
#: doc/classes/World2D.xml
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."
+"visual scenario, a navigation map and a sound space. 2D nodes register their "
+"resources into the current 2D world."
msgstr ""
#: doc/classes/World2D.xml
@@ -73944,6 +74980,12 @@ msgid ""
msgstr ""
#: doc/classes/World2D.xml
+#, fuzzy
+msgid ""
+"The [RID] of this world's navigation map. Used by the [Navigation2DServer]."
+msgstr "ΕπιστÏέφει το ημίτονο της παÏαμέτÏου."
+
+#: doc/classes/World2D.xml
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."
diff --git a/doc/translations/es.po b/doc/translations/es.po
index ced2e2ad3e..242710fe39 100644
--- a/doc/translations/es.po
+++ b/doc/translations/es.po
@@ -34,12 +34,13 @@
# Francesco Santoro <fgsantoror20@gmail.com>, 2022.
# Jake-insane <jake0insane@gmail.com>, 2022.
# Luis Alberto Flores Baca <betofloresbaca@gmail.com>, 2022.
+# emnrx <emanuelermancia@gmail.com>, 2022.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2022-04-25 15:12+0000\n"
-"Last-Translator: Ventura Pérez García <vetu@protonmail.com>\n"
+"PO-Revision-Date: 2022-06-16 18:58+0000\n"
+"Last-Translator: emnrx <emanuelermancia@gmail.com>\n"
"Language-Team: Spanish <https://hosted.weblate.org/projects/godot-engine/"
"godot-class-reference/es/>\n"
"Language: es\n"
@@ -47,7 +48,7 @@ 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.12.1-dev\n"
+"X-Generator: Weblate 4.13-dev\n"
#: doc/tools/make_rst.py
msgid "Description"
@@ -525,7 +526,7 @@ msgstr ""
#, fuzzy
msgid ""
"Compares two values by checking their actual contents, recursing into any "
-"`Array` or `Dictionary` up to its deepest level.\n"
+"[Array] or [Dictionary] up to its deepest level.\n"
"This compares to [code]==[/code] in a number of ways:\n"
"- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/"
"code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] "
@@ -598,7 +599,7 @@ msgid ""
"- 1.0: Linear\n"
"- Greater than 1.0 (exclusive): Ease in\n"
"[/codeblock]\n"
-"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.4/img/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/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]."
@@ -1748,7 +1749,7 @@ msgid ""
"[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/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/img/"
"smoothstep_ease_comparison.png]Comparison between smoothstep() and ease(x, "
"-1.6521) return values[/url]"
msgstr ""
@@ -4433,6 +4434,15 @@ msgstr ""
"opcionalmente nombradas, capas de física 2D."
#: doc/classes/@GlobalScope.xml
+#, fuzzy
+msgid ""
+"Hints that an integer property is a bitmask using the optionally named 2D "
+"navigation layers."
+msgstr ""
+"Sugiere que una propiedad entera es una máscara de bits usando las, "
+"opcionalmente nombradas, capas de representación 2D."
+
+#: doc/classes/@GlobalScope.xml
msgid ""
"Hints that an integer property is a bitmask using the optionally named 3D "
"render layers."
@@ -4449,6 +4459,15 @@ msgstr ""
"opcionalmente nombrada, capas fisicas 3D."
#: doc/classes/@GlobalScope.xml
+#, fuzzy
+msgid ""
+"Hints that an integer property is a bitmask using the optionally named 3D "
+"navigation layers."
+msgstr ""
+"Sugiere que una propiedad entera es una máscara de bits usando las, "
+"opcionalmente nombradas, capas de representación 2D."
+
+#: doc/classes/@GlobalScope.xml
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 "
@@ -11064,7 +11083,7 @@ msgstr ""
"astar.connect_points(1,2, false)\n"
"[/codeblock]"
-#: doc/classes/AStar.xml
+#: doc/classes/AStar.xml doc/classes/AStar2D.xml
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[/"
@@ -11356,8 +11375,16 @@ msgstr ""
"actualizados con los pesos dados."
#: doc/classes/AStar2D.xml
-msgid "Returns whether there is a connection/segment between the given points."
-msgstr "Devuelve si hay una conexion/segmento entre los puntos dados."
+#, fuzzy
+msgid ""
+"Returns whether there is a connection/segment between the given points. 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 ""
+"Devuelve si dos puntos dados estan directamente conectados por un segmento. "
+"Si [code]bidirectional[/code] es [code]false[/code], devuelve si el "
+"movimiento desde [code]id[/code] a [code]to_id[/code] es posible a traves "
+"del segmento."
#: doc/classes/AStar2D.xml
msgid ""
@@ -11382,10 +11409,6 @@ msgstr ""
"[/codeblock]"
#: doc/classes/AStar2D.xml
-msgid "Deletes the segment between the given points."
-msgstr "Elimina el segmento entre los puntos dados."
-
-#: doc/classes/AStar2D.xml
msgid ""
"Returns the closest position to [code]to_position[/code] that resides inside "
"a segment between two connected points.\n"
@@ -11640,7 +11663,9 @@ msgid ""
"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."
+"transmit audio over the network. When capturing audio data from a "
+"microphone, the format of the samples will be stereo 32-bit floating point "
+"PCM."
msgstr ""
#: doc/classes/AudioEffectCapture.xml
@@ -17842,7 +17867,7 @@ msgstr ""
"configurado."
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
-#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/Navigation2D.xml
msgid "Returns the object's [RID]."
msgstr "Devuelve el [RID] del objeto."
@@ -25066,12 +25091,16 @@ msgstr ""
"de dibujar curvas y/o guardarlas como archivos de imagen."
#: doc/classes/CurveTexture.xml
-msgid "The [code]curve[/code] rendered onto the texture."
+#, fuzzy
+msgid "The [Curve] that is rendered onto the texture."
msgstr "La [code]curve[/code] renderizada en la textura."
#: doc/classes/CurveTexture.xml
-msgid "The width of the texture."
-msgstr "El ancho de la textura."
+msgid ""
+"The width of the texture (in pixels). Higher values make it possible to "
+"represent high-frequency data better (such as sudden direction changes), at "
+"the cost of increased generation time and memory usage."
+msgstr ""
#: doc/classes/CylinderMesh.xml
msgid "Class representing a cylindrical [PrimitiveMesh]."
@@ -25504,6 +25533,13 @@ msgid "Returns the list of keys in the [Dictionary]."
msgstr "Devuelve la lista de claves en el [Dictionary]."
#: doc/classes/Dictionary.xml
+msgid ""
+"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, "
+"duplicate keys will not be copied over, unless [code]overwrite[/code] is "
+"[code]true[/code]."
+msgstr ""
+
+#: doc/classes/Dictionary.xml
#, fuzzy
msgid "Returns the number of keys in the dictionary."
msgstr "Devuelve el número de archivos en este directorio."
@@ -28190,13 +28226,24 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide a state data you want to be saved, like view "
+"position, grid settings, folding, etc. 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). This data is automatically saved for "
+"each scene in an [code]editstate[/code] file in the editor metadata folder. "
+"If you want to store global (scene-independent) editor data for your plugin, "
+"you can use [method get_window_layout] instead.\n"
+"Use [method set_state] to restore your saved state.\n"
+"[b]Note:[/b] This method should not be used to save important settings that "
+"should persist with the project.\n"
+"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be "
+"stored and restored correctly.\n"
+"[codeblock]\n"
+"func get_state():\n"
+" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n"
+" return state\n"
+"[/codeblock]"
msgstr ""
-"Obtiene el estado de su editor de plugins. Se usa cuando se guarda la escena "
-"(así que el estado se mantiene al abrirla de nuevo) y para cambiar de "
-"pestaña (así que el estado puede ser restaurado cuando la pestaña vuelve)."
#: doc/classes/EditorPlugin.xml
msgid ""
@@ -28209,14 +28256,19 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide the GUI layout of the plugin or any other "
+"data you want to be stored. 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). The data is stored in the "
+"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n"
+"Use [method set_window_layout] to restore your saved layout.\n"
+"[codeblock]\n"
+"func get_window_layout(configuration):\n"
+" configuration.set_value(\"MyPlugin\", \"window_position\", $Window."
+"position)\n"
+" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n"
+"[/codeblock]"
msgstr ""
-"Consigue el diseño de la interfaz gráfica del plugin. Se utiliza para "
-"guardar la disposición del editor del proyecto cuando se llama a [method "
-"queue_save_layout] o se ha cambiado la disposición del editor (por ejemplo, "
-"cambiando la posición de un dock)."
#: doc/classes/EditorPlugin.xml
msgid ""
@@ -28357,13 +28409,31 @@ msgstr ""
"especialmente útil si tu plugin quiere usar raycast en la escena."
#: doc/classes/EditorPlugin.xml
-msgid "Restore the state saved by [method get_state]."
-msgstr "Restaurar el estado guardado por [method get_state]."
+msgid ""
+"Restore the state saved by [method get_state]. This method is called when "
+"the current scene tab is changed in the editor.\n"
+"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise "
+"it will not be recognized and this method will not be called.\n"
+"[codeblock]\n"
+"func set_state(data):\n"
+" zoom = data.get(\"zoom\", 1.0)\n"
+" preferred_color = data.get(\"my_color\", Color.white)\n"
+"[/codeblock]"
+msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the plugin GUI layout saved by [method get_window_layout]."
+msgid ""
+"Restore the plugin GUI layout and data saved by [method get_window_layout]. "
+"This method is called for every plugin on editor startup. Use the provided "
+"[code]configuration[/code] file to read your saved data.\n"
+"[codeblock]\n"
+"func set_window_layout(configuration):\n"
+" $Window.position = configuration.get_value(\"MyPlugin\", "
+"\"window_position\", Vector2())\n"
+" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", "
+"Color.white)\n"
+"[/codeblock]"
msgstr ""
-"Restaurar el diseño del plugin GUI guardado por [method get_window_layout]."
#: doc/classes/EditorPlugin.xml
msgid ""
@@ -34517,12 +34587,14 @@ msgid "Gradient-filled texture."
msgstr "Textura llena de gradientes."
#: doc/classes/GradientTexture.xml
+#, fuzzy
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])."
+"at fixed steps (see [member width]). See also [GradientTexture2D] and "
+"[CurveTexture]."
msgstr ""
"GradientTexture utiliza un [Gradient] para rellenar los datos de la textura. "
"El gradiente se rellenará de izquierda a derecha usando los colores "
@@ -34551,7 +34623,8 @@ msgid ""
"repeat] types using colors obtained from the gradient. 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] and [member height])."
+"[member width] and [member height]). See also [GradientTexture] and "
+"[CurveTexture]."
msgstr ""
"GradientTexture utiliza un [Gradient] para rellenar los datos de la textura. "
"El gradiente se rellenará de izquierda a derecha usando los colores "
@@ -35589,6 +35662,15 @@ msgstr ""
"GridMap."
#: modules/gridmap/doc_classes/GridMap.xml
+#, fuzzy
+msgid ""
+"If [code]true[/code], this GridMap uses cell navmesh resources to create "
+"navigation regions."
+msgstr ""
+"Si [code]true[/code], actualiza las animaciones en respuesta a las "
+"notificaciones relacionadas con el proceso."
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid "If [code]true[/code], grid items are centered on the X axis."
msgstr ""
"Si [code]true[/code], los elementos de la cuadrícula se centran en el eje X."
@@ -35654,6 +35736,10 @@ msgid "The assigned [MeshLibrary]."
msgstr "La [MeshLibrary] asignada."
#: modules/gridmap/doc_classes/GridMap.xml
+msgid "The navigation layers the GridMap generates its navigation regions in."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
"Overrides the default friction and bounce physics properties for the whole "
"[GridMap]."
@@ -37332,7 +37418,7 @@ msgid ""
" # 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 body = to_json({\"name\": \"Godette\"})\n"
" error = http_request.request(\"https://httpbin.org/post\", [], true, "
"HTTPClient.METHOD_POST, body)\n"
" if error != OK:\n"
@@ -38952,7 +39038,7 @@ msgstr ""
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 "
+"([member 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 "
@@ -39135,10 +39221,6 @@ msgstr ""
"botones del ratón al mismo tiempo, los bits se suman."
#: doc/classes/Input.xml
-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
msgid ""
"Gets an input vector by specifying four actions for the positive and "
"negative X and Y axes.\n"
@@ -39396,36 +39478,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-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
-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 ""
-"Habilita o deshabilita la acumulación de eventos de entrada similares "
-"enviados por el sistema operativo. Cuando la acumulación de entrada está "
-"activada, todos los eventos de entrada generados durante una trama se "
-"fusionarán y se emitirán cuando la trama se termine de renderizar. Por lo "
-"tanto, esto limita el número de llamadas del método de entrada por segundo "
-"al FPS de renderización.\n"
-"La acumulación de entrada está habilitada por defecto. Se puede desactivar "
-"para obtener una entrada ligeramente más precisa/reactiva a costa de un "
-"mayor uso de la CPU. En aplicaciones donde se requiere dibujar líneas a mano "
-"alzada, la acumulación de entrada generalmente debe deshabilitarse mientras "
-"el usuario está dibujando la línea para obtener resultados que sigan de "
-"cerca la entrada real."
-
-#: doc/classes/Input.xml
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 "
@@ -39474,6 +39526,38 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
+#, fuzzy
+msgid "Controls the mouse mode. See [enum MouseMode] for more information."
+msgstr "Establece el modo del ratón. Vea las constantes para más información."
+
+#: doc/classes/Input.xml
+#, fuzzy
+msgid ""
+"If [code]true[/code], similar input events sent by the operating system are "
+"accumulated. 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 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 ""
+"Habilita o deshabilita la acumulación de eventos de entrada similares "
+"enviados por el sistema operativo. Cuando la acumulación de entrada está "
+"activada, todos los eventos de entrada generados durante una trama se "
+"fusionarán y se emitirán cuando la trama se termine de renderizar. Por lo "
+"tanto, esto limita el número de llamadas del método de entrada por segundo "
+"al FPS de renderización.\n"
+"La acumulación de entrada está habilitada por defecto. Se puede desactivar "
+"para obtener una entrada ligeramente más precisa/reactiva a costa de un "
+"mayor uso de la CPU. En aplicaciones donde se requiere dibujar líneas a mano "
+"alzada, la acumulación de entrada generalmente debe deshabilitarse mientras "
+"el usuario está dibujando la línea para obtener resultados que sigan de "
+"cerca la entrada real."
+
+#: doc/classes/Input.xml
msgid "Emitted when a joypad device has been connected or disconnected."
msgstr "Se emite cuando se ha conectado o desconectado un dispositivo joypad."
@@ -39889,9 +39973,10 @@ msgstr ""
"code], se libera el estado del botón."
#: doc/classes/InputEventJoypadButton.xml
+#, fuzzy
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]."
+"Represents the pressure the user puts on the button with their finger, if "
+"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]."
msgstr ""
"Representa la presión que el usuario ejerce sobre el botón con su dedo, si "
"el controlador lo soporta. Va de [code]0[/code] a [code]1[/code]."
@@ -40212,13 +40297,14 @@ msgid "Input event type for mouse motion events."
msgstr "Tipo de evento de entrada para los eventos de movimiento del ratón."
#: doc/classes/InputEventMouseMotion.xml
+#, fuzzy
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 "
+"at most. If you need more precise input reporting, set [member Input."
+"use_accumulated_input] to [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."
@@ -40873,7 +40959,18 @@ msgid ""
"[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."
+"fixed_column_width] greater than zero to wrap the text.\n"
+"[b]Incremental search:[/b] Like [PopupMenu] and [Tree], [ItemList] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
"Este control proporciona una lista seleccionable de elementos que pueden "
"estar en una sola (o varias columnas) con opción de texto, iconos o ambos. "
@@ -45791,14 +45888,17 @@ msgstr ""
"material de anulación."
#: doc/classes/MeshInstance.xml
-#, fuzzy
-msgid "Returns the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Returns the override [Material] for a surface of the [Mesh] resource.\n"
+"[b]Note:[/b] This function only returns [i]override[/i] materials associated "
+"with this [MeshInstance]. Consider using [method get_active_material] or "
+"[method Mesh.surface_get_material] to get materials associated with the "
+"[Mesh] resource."
msgstr ""
-"Devuelve el [Material] sobreescrito para la superficie especificada del "
-"recurso [Mesh]."
#: doc/classes/MeshInstance.xml
-msgid "Returns the number of surface materials."
+#, fuzzy
+msgid "Returns the number of surface override materials."
msgstr "Devuelve el número de materiales de la superficie."
#: doc/classes/MeshInstance.xml
@@ -45835,11 +45935,11 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-#, fuzzy
-msgid "Sets the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Sets the override [Material] for the specified surface of the [Mesh] "
+"resource. This material is associated with this [MeshInstance] rather than "
+"with the [Mesh] resource."
msgstr ""
-"Devuelve el [Material] sobreescrito para la superficie especificada del "
-"recurso [Mesh]."
#: doc/classes/MeshInstance.xml
msgid "The [Mesh] resource for the instance."
@@ -45871,9 +45971,10 @@ msgstr "Nodo utilizado para mostrar una [Mesh] en 2D."
#: doc/classes/MeshInstance2D.xml
#, 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\"."
+"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be "
+"automatically created from an existing [Sprite] via a tool in the editor "
+"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to "
+"MeshInstance2D[/b] at the top of the 2D editor viewport."
msgstr ""
"Nodo utilizado para mostrar una [Mesh] en 2D. Puede ser construido a partir "
"de un [Sprite2D] existente mediante una herramienta en la barra de "
@@ -46885,6 +46986,9 @@ msgstr "Nodo de navegación y busqueda de caminos basado en una malla."
#: doc/classes/Navigation.xml
#, fuzzy
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"Provides navigation and pathfinding within a collection of "
"[NavigationMesh]es. By default, these will be automatically collected from "
"child [NavigationMeshInstance] nodes. In addition to basic pathfinding, this "
@@ -46937,7 +47041,15 @@ msgstr ""
#: doc/classes/Navigation.xml
#, fuzzy
+msgid "Returns the [RID] of the navigation map on the [NavigationServer]."
+msgstr "Devuelve el [RID] de la forma enésima de un área."
+
+#: doc/classes/Navigation.xml
+#, fuzzy
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"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, "
@@ -46965,12 +47077,24 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation.get_simple_path] path query."
+msgstr ""
+
+#: doc/classes/Navigation.xml
+msgid ""
"Defines which direction is up. By default, this is [code](0, 1, 0)[/code], "
"which is the world's \"up\" direction."
msgstr ""
"Define qué dirección es hacia arriba. Por defecto, esto es [code](0, 1, 0)[/"
"code], que es la dirección \"arriba\" del mundo."
+#: doc/classes/Navigation.xml doc/classes/Navigation2DServer.xml
+#: doc/classes/NavigationServer.xml
+msgid ""
+"Emitted when a navigation map is updated, when a region moves or is modified."
+msgstr ""
+
#: doc/classes/Navigation2D.xml
msgid "2D navigation and pathfinding node."
msgstr "Navegación 2D y nodo de búsqueda de caminos."
@@ -46978,6 +47102,9 @@ msgstr "Navegación 2D y nodo de búsqueda de caminos."
#: doc/classes/Navigation2D.xml
#, fuzzy
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -47001,6 +47128,9 @@ msgstr ""
#: doc/classes/Navigation2D.xml
#, fuzzy
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -47015,6 +47145,12 @@ msgstr ""
msgid "The XY plane cell size to use for fields."
msgstr "El modo de llamada a utilizar para las Call Method Tracks."
+#: doc/classes/Navigation2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation2D.get_simple_path] path query."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml
#, fuzzy
msgid "Server interface for low-level 2D navigation access."
@@ -47032,8 +47168,12 @@ msgid ""
"through scripts.\n"
"For two regions to be connected to each other, they must share a similar "
"edge. An edge is considered connected to another if both of its two vertices "
-"are at a distance less than [member Navigation.edge_connection_margin] to "
-"the respective other edge's vertex.\n"
+"are at a distance less than navigation map [code]edge_connection_margin[/"
+"code] to the respective other edge's vertex.\n"
+"You may assign navigation layers to regions with [method Navigation2DServer."
+"region_set_navigation_layers], which then can be checked upon when "
+"requesting a path with [method Navigation2DServer.map_get_path]. This allows "
+"allowing or forbidding some areas to 2D objects.\n"
"To use the collision avoidance system, you may use agents. You can set an "
"agent's target velocity, then the servers will emit a callback with a "
"modified velocity.\n"
@@ -47066,7 +47206,17 @@ msgid "Returns [code]true[/code] if the map got changed the previous frame."
msgstr "Devuelve [code]true[/code] si el script puede ser instanciado."
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Callback called at the end of the RVO process."
+msgid ""
+"Callback called at the end of the RVO process. If a callback is created "
+"manually and the agent is placed on a navigation map it will calculate "
+"avoidance for the agent and dispatch the calculated [code]safe_velocity[/"
+"code] to the [code]receiver[/code] object with a signal to the chosen "
+"[code]method[/code] name.\n"
+"[b]Note:[/b] Created callbacks are always processed independently of the "
+"SceneTree state as long as the agent is on a navigation map and not freed. "
+"To disable the dispatch of a callback from an agent use [method "
+"agent_set_callback] again with a [code]null[/code] object as the "
+"[code]receiver[/code]."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -47128,16 +47278,59 @@ msgid "Destroys the given RID."
msgstr "Quita la identificación del tile dado."
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns all created navigation map [RID]s on the NavigationServer. This "
+"returns both 2D and 3D created navigation maps as there is technically no "
+"distinction between them."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
#, fuzzy
msgid "Create a new map."
msgstr "Crea un [Area2D]."
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"This function immediately forces synchronization of the specified navigation "
+"[code]map[/code] [RID]. By default navigation maps are only synchronized at "
+"the end of each physics frame. This function can be used to immediately "
+"(re)calculate all the navigation meshes and region connections of the "
+"navigation map. This makes it possible to query a navigation path for a "
+"changed map immediately and in the same frame (multiple times if needed).\n"
+"Due to technical restrictions the current NavigationServer command queue "
+"will be flushed. This means all already queued update commands for this "
+"physics frame will be executed, even those intended for other maps, regions "
+"and agents not part of the specified map. The expensive computation of the "
+"navigation meshes and region connections of a map will only be done for the "
+"specified map. Other maps will receive the normal synchronization at the end "
+"of the physics frame. Should the specified map receive changes after the "
+"forced update it will update again as well when the other maps receive their "
+"update.\n"
+"Avoidance processing and dispatch of the [code]safe_velocity[/code] signals "
+"is untouched by this function and continues to happen for all maps and "
+"agents at the end of the physics frame.\n"
+"[b]Note:[/b] With great power comes great responsibility. This function "
+"should only be used by users that really know what they are doing and have a "
+"good reason for it. Forcing an immediate update of a navigation map requires "
+"locking the NavigationServer and flushing the entire NavigationServer "
+"command queue. Not only can this severely impact the performance of a game "
+"but it can also introduce bugs if used inappropriately without much "
+"foresight."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns all navigation agents [RID]s that are currently assigned to the "
"requested navigation [code]map[/code]."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+#, fuzzy
+msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented."
+msgstr ""
+"Obtiene la línea actual en el archivo analizado (actualmente no "
+"implementado)."
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
#, fuzzy
msgid "Returns the map cell size."
@@ -47168,9 +47361,11 @@ msgid ""
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-#, fuzzy
-msgid "Returns the navigation path to reach the destination from the origin."
-msgstr "Devuelve el polígono de navegación del tile."
+msgid ""
+"Returns the navigation path to reach the destination from the origin. "
+"[code]navigation_layers[/code] is a bitmask of all region layers that are "
+"allowed to be in the path."
+msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
@@ -47188,6 +47383,13 @@ msgstr "Devuelve [code]true[/code] si la selección está activa."
msgid "Sets the map active."
msgstr "Detiene el temporizador."
+#: doc/classes/Navigation2DServer.xml
+#, fuzzy
+msgid ""
+"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/"
+"b] Currently not implemented."
+msgstr "Devuelve la transformada aplicada a la malla de navegación del objeto."
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
#, fuzzy
msgid "Set the map cell size used to weld the navigation mesh polygons."
@@ -47205,15 +47407,81 @@ msgstr "Crea un [Area2D]."
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"Returns the ending point of a connection door. [code]connection[/code] is an "
+"index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns the starting point of a connection door. [code]connection[/code] is "
+"an index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid ""
+"Returns how many connections this [code]region[/code] has with other regions "
+"in the map."
+msgstr ""
+"Devuelve la proyección ortogonal de [code]point[/code] en un punto del plano."
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]."
+msgstr "Devuelve [code]true[/code] si existe la [code]signal[/code] dada."
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns the navigation map [RID] the requested [code]region[/code] is "
"currently assigned to."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
#, fuzzy
+msgid "Returns the region's navigation layers."
+msgstr "Devuelve la malla de navegación del objeto."
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]."
+msgstr "Devuelve [code]true[/code] si existe la [code]signal[/code] dada."
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns [code]true[/code] if the provided [code]point[/code] in world space "
+"is currently owned by the provided navigation [code]region[/code]. Owned in "
+"this context means that one of the region's navigation mesh polygon faces "
+"has a possible position at the closest distance to this point compared to "
+"all other navigation meshes from other navigation regions that are also "
+"registered on the navigation map of the provided region.\n"
+"If multiple navigation meshes have positions at equal distance the "
+"navigation region whose polygons are processed first wins the ownership. "
+"Polygons are processed in the same order that navigation regions were "
+"registered on the NavigationServer.\n"
+"[b]Note:[/b] If navigation meshes from different navigation regions overlap "
+"(which should be avoided in general) the result might not be what is "
+"expected."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]."
+msgstr ""
+"Coloca la [code]position[/code] para el punto con el [code]id[/code] dado."
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
msgid "Sets the map for the region."
msgstr "Establece los metadatos del borde dado."
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method Navigation2DServer.map_get_path])."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
#, fuzzy
msgid "Sets the navigation mesh for the region."
@@ -47224,6 +47492,12 @@ msgstr "Establece la malla de navegación del objeto."
msgid "Sets the global transformation for the region."
msgstr "Establece la matriz de transformación global del Viewport."
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]."
+msgstr ""
+"Coloca la [code]position[/code] para el punto con el [code]id[/code] dado."
+
#: doc/classes/NavigationAgent.xml
msgid "3D agent used in navigation for collision avoidance."
msgstr ""
@@ -47233,9 +47507,16 @@ msgid ""
"3D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationAgent] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World] navigation map. If this node is a child of a [Navigation] "
+"node it will register to the navigation map of the navigation node or the "
+"function [method set_navigation] can be used to set the navigation node "
+"directly. [NavigationAgent] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -47253,9 +47534,16 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-#, fuzzy
-msgid "Returns the path from start to finish in global coordinates."
-msgstr "Devuelve el RID del viewport del [VisualServer]."
+msgid ""
+"Returns this agent's current path from start to finish in global "
+"coordinates. The path only updates when the target location is changed or "
+"the agent requires a repath. The path array is not intended to be used in "
+"direct path movement as the agent has its own internal path logic that would "
+"get corrupted by changing the path array manually. Use the intended [method "
+"get_next_location] once every physics frame to receive the next path point "
+"for the agents movement as this function also updates the internal path "
+"logic."
+msgstr ""
#: doc/classes/NavigationAgent.xml
#, fuzzy
@@ -47271,11 +47559,24 @@ msgid ""
"system."
msgstr "Devuelve el nodo animacion con el nombre dado."
-#: doc/classes/NavigationAgent.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"Returns a [Vector3] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the origin of the agent's parent."
+"Returns the [RID] of the navigation map for this NavigationAgent node. This "
+"function returns always the map set on the NavigationAgent node and not the "
+"map of the abstract agent on the NavigationServer. If the agent map is "
+"changed directly with the NavigationServer API the NavigationAgent node will "
+"not be aware of the map change. Use [method set_navigation_map] to change "
+"the navigation map for the NavigationAgent and also update the agent on the "
+"NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
+"Returns the next location in global coordinates that can be moved to, making "
+"sure that there are no static objects in the way. If the agent does not have "
+"a navigation path, it will return the position of the agent's parent. The "
+"use of this function once every physics frame is required to update the "
+"internal path logic of the NavigationAgent."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -47322,6 +47623,12 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"Sets the [RID] of the navigation map this NavigationAgent node should use "
+"and also updates the [code]agent[/code] on the NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"Sets the user desired final location. This will clear the current navigation "
"path."
msgstr ""
@@ -47334,9 +47641,14 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml
-#, fuzzy
-msgid "The agent height offset to match the navigation mesh height."
-msgstr "Devuelve el desplazamiento del polígono de navegación del tile."
+msgid ""
+"The NavigationAgent height offset is subtracted from the y-axis value of any "
+"vector path position for this NavigationAgent. The NavigationAgent height "
+"offset does not change or influence the navigation mesh or pathfinding query "
+"result. Additional navigation maps that use regions with navigation meshes "
+"that the developer baked with appropriate agent radius or height values are "
+"required to support different-sized agents."
+msgstr ""
#: doc/classes/NavigationAgent.xml
msgid ""
@@ -47364,6 +47676,13 @@ msgstr "El valor máximo de luminosidad para la exposición automática."
msgid "The maximum speed that an agent can move."
msgstr "El valor máximo que puede alcanzar la curva."
+#: doc/classes/NavigationAgent.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
#, fuzzy
msgid "The distance to search for other agents."
@@ -47371,21 +47690,40 @@ msgstr "La instancia no tiene un tipo."
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"The distance threshold before a path point is considered to be reached. This "
+"will allow an agent to not have to hit a path point on the path exactly, but "
+"in the area. If this value is set to high the NavigationAgent will skip "
+"points on the path which can lead to leaving the navigation mesh. If this "
+"value is set to low the NavigationAgent will be stuck in a repath loop cause "
+"it will constantly overshoot or undershoot the distance to the next point on "
+"each physics frame update."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"The maximum distance the agent is allowed away from the ideal path to the "
"final location. This can happen due to trying to avoid collisions. When the "
"maximum distance is exceeded, it recalculates the ideal path."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-#, fuzzy
-msgid "The radius of the agent."
-msgstr "El radio del cilindro."
+msgid ""
+"The radius of the avoidance agent. This is the \"body\" of the avoidance "
+"agent and not the avoidance maneuver starting radius (which is controlled by "
+"[member neighbor_dist]).\n"
+"Does not affect normal pathfinding. To change an actor's pathfinding radius "
+"bake [NavigationMesh] resources with a different [member NavigationMesh."
+"agent_radius] property and use different navigation maps for each actor size."
+msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"The distance threshold before a target is considered to be reached. This "
-"will allow an agent to not have to hit a point on the path exactly, but in "
-"the area."
+"The distance threshold before the final target point is considered to be "
+"reached. This will allow an agent to not have to hit the point of the final "
+"target exactly, but only the area. If this value is set to low the "
+"NavigationAgent will be stuck in a repath loop cause it will constantly "
+"overshoot or undershoot the distance to the final target point on each "
+"physics frame update."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -47429,9 +47767,16 @@ msgid ""
"2D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationAgent2D] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World2D] navigation map. If this node is a child of a "
+"[Navigation2D] node it will register to the navigation map of the navigation "
+"node or the function [method set_navigation] can be used to set the "
+"navigation node directly. [NavigationAgent2D] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent2D.xml
@@ -47449,13 +47794,6 @@ msgid ""
msgstr "Devuelve el nodo animacion con el nombre dado."
#: doc/classes/NavigationAgent2D.xml
-msgid ""
-"Returns a [Vector2] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the position of the agent's parent."
-msgstr ""
-
-#: doc/classes/NavigationAgent2D.xml
#, fuzzy
msgid "Returns the [RID] of this agent on the [Navigation2DServer]."
msgstr "Devuelve el [RID] de la forma enésima de un área."
@@ -47476,6 +47814,13 @@ msgid ""
"only be enabled on agents that currently require it."
msgstr ""
+#: doc/classes/NavigationAgent2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent2D] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationMesh.xml
msgid "A mesh to approximate the walkable areas and obstacles."
msgstr ""
@@ -47512,8 +47857,8 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
#, fuzzy
msgid ""
-"Returns whether the specified [code]bit[/code] of the [member geometry/"
-"collision_mask] is set."
+"Returns whether the specified [code]bit[/code] of the [member "
+"geometry_collision_mask] is set."
msgstr ""
"Devuelve [code]true[/code] si el bit de la máscara de colisión dada está "
"configurado."
@@ -47544,9 +47889,9 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/"
-"code] in the [member geometry/collision_mask].\n"
+"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]."
+"code] in the [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
@@ -47562,14 +47907,14 @@ 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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -47582,7 +47927,7 @@ 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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -47611,13 +47956,17 @@ msgstr ""
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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
-"If [code]true[/code], marks walkable spans as not walkable if the clearance "
-"above the span is less than [member agent/height]."
+"If the baking [AABB] has a volume the navigation mesh baking will be "
+"restricted to its enclosing area."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+msgid "The position offset applied to the [member filter_baking_aabb] [AABB]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -47628,13 +47977,22 @@ msgstr "Si [code]true[/code], se activan las pulsaciones de paso."
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]true[/code], marks non-walkable spans as walkable if their maximum "
-"is within [member agent/max_climb] of a walkable neighbor."
+"is within [member agent_max_climb] of a walkable neighbor."
msgstr ""
#: doc/classes/NavigationMesh.xml
+#, fuzzy
+msgid ""
+"If [code]true[/code], marks walkable spans as not walkable if the clearance "
+"above the span is less than [member agent_height]."
+msgstr ""
+"Si [code]true[/code], las partículas emitirán una vez y luego se detendrán. "
+"Equivalente a [member GPUParticles.one_shot]."
+
+#: doc/classes/NavigationMesh.xml
msgid ""
"The physics layers to scan for static colliders.\n"
-"Only used when [member geometry/parsed_geometry_type] is [constant "
+"Only used when [member geometry_parsed_geometry_type] is [constant "
"PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]."
msgstr ""
@@ -47657,7 +48015,7 @@ msgstr "El modo de fondo. Ver [enum BGMode] para los posibles valores."
#: doc/classes/NavigationMesh.xml
msgid ""
"The name of the group to scan for geometry.\n"
-"Only used when [member geometry/source_geometry_mode] is [constant "
+"Only used when [member geometry_source_geometry_mode] is [constant "
"SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant "
"SOURCE_GEOMETRY_GROUPS_EXPLICIT]."
msgstr ""
@@ -47724,7 +48082,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Parses [StaticBody] colliders as geometry. The collider should be in any of "
-"the layers specified by [member geometry/collision_mask]."
+"the layers specified by [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -47746,13 +48104,13 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Scans nodes in a group and their child nodes recursively for geometry. The "
-"group is specified by [member geometry/source_group_name]."
+"group is specified by [member geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Uses nodes in a group for geometry. The group is specified by [member "
-"geometry/source_group_name]."
+"geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -47795,7 +48153,15 @@ msgid ""
"geometry for walkable terrain suitable to [NavigationMesh] agent properties "
"by creating a voxel world around the meshes bounding area.\n"
"The finalized navigation mesh is then returned and stored inside the "
-"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes."
+"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] "
+"nodes.\n"
+"[b]Note:[/b] Using meshes to not only define walkable surfaces but also "
+"obstruct navigation baking does not always work. The navigation baking has "
+"no concept of what is a geometry \"inside\" when dealing with mesh source "
+"geometry and this is intentional. Depending on current baking parameters, as "
+"soon as the obstructing mesh is large enough to fit a navigation mesh area "
+"inside, the baking will generate navigation mesh areas that are inside the "
+"obstructing source geometry mesh."
msgstr ""
#: doc/classes/NavigationMeshGenerator.xml
@@ -47803,8 +48169,8 @@ msgid ""
"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child "
"nodes under the provided [code]root_node[/code] or a specific group of nodes "
"for potential source geometry. The parse behavior can be controlled with the "
-"[member NavigationMesh.geometry/parsed_geometry_type] and [member "
-"NavigationMesh.geometry/source_geometry_mode] properties on the "
+"[member NavigationMesh.geometry_parsed_geometry_type] and [member "
+"NavigationMesh.geometry_source_geometry_mode] properties on the "
"[NavigationMesh] resource."
msgstr ""
@@ -47823,8 +48189,21 @@ msgstr "Nodo que instancia un [MultiMesh]."
#: doc/classes/NavigationMeshInstance.xml
msgid ""
"An instance of a [NavigationMesh]. It tells the [Navigation] node what can "
-"be navigated and what cannot, based on the [NavigationMesh] resource. This "
-"should be a child of a [Navigation] node."
+"be navigated and what cannot, based on the [NavigationMesh] resource.\n"
+"By default this node will register to the default [World] navigation map. If "
+"this node is a child of a [Navigation] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method NavigationServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The cost of entering this region from another region can be controlled with "
+"the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The cost of traveling distances inside this region can be controlled with "
+"the [member travel_cost] multiplier."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
@@ -47853,11 +48232,35 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding enters this region's navmesh from another regions navmesh "
+"the [code]enter_cost[/code] value is added to the path distance for "
+"determining the shortest path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationMesh] "
+"belongs to. On path requests with [method NavigationServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
#, fuzzy
msgid "The [NavigationMesh] resource to use."
msgstr "El recurso [Mesh] para la instancia."
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding moves inside this region's navmesh the traveled distances "
+"are multiplied with [code]travel_cost[/code] for determining the shortest "
+"path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
#, fuzzy
msgid "Notifies when the navigation mesh bake operation is completed."
msgstr "Notifica cuando una animación comienza a reproducirse."
@@ -47876,7 +48279,9 @@ msgid ""
"3D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationObstacle] is physics safe."
+"[NavigationObstacle] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle.xml
@@ -47921,7 +48326,9 @@ msgid ""
"2D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationObstacle2D] is physics safe."
+"[NavigationObstacle2D] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle2D.xml
@@ -48039,6 +48446,14 @@ msgstr ""
"vértices."
#: doc/classes/NavigationPolygon.xml
+msgid ""
+"Returns the [NavigationMesh] resulting from this navigation polygon. This "
+"navmesh can be used to update the navmesh of a region with the [method "
+"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server "
+"behind the scene)."
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml
#, fuzzy
msgid ""
"Returns a [PoolVector2Array] containing the vertices of an outline that was "
@@ -48090,6 +48505,31 @@ msgstr ""
"[method make_polygons_from_outlines] para que los polígonos se actualicen."
#: doc/classes/NavigationPolygonInstance.xml
+#, fuzzy
+msgid "A region of the 2D navigation map."
+msgstr "Establece la malla de navegación del objeto."
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A region of the navigation map. It tells the [Navigation2DServer] what can "
+"be navigated and what cannot, based on its [NavigationPolygon] resource.\n"
+"By default this node will register to the default [World2D] navigation map. "
+"If this node is a child of a [Navigation2D] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The pathfinding cost of entering this region from another region can be "
+"controlled with the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The pathfinding cost of traveling distances inside this region can be "
+"controlled with the [member travel_cost] multiplier."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
msgid ""
"Returns the [RID] of this region on the [Navigation2DServer]. Combined with "
"[method Navigation2DServer.map_get_closest_point_owner] can be used to "
@@ -48097,6 +48537,23 @@ msgid ""
"navigation map."
msgstr ""
+#: doc/classes/NavigationPolygonInstance.xml
+msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationPolygon] "
+"belongs to. On path requests with [method Navigation2DServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+#, fuzzy
+msgid "The [NavigationPolygon] resource to use."
+msgstr "El recurso [Mesh] para la instancia."
+
#: doc/classes/NavigationServer.xml
#, fuzzy
msgid "Server interface for low-level 3D navigation access."
@@ -48182,6 +48639,12 @@ msgid "Bakes the navigation mesh."
msgstr "Establece la malla de navegación del objeto."
#: doc/classes/NavigationServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method NavigationServer.map_get_path])."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
#, fuzzy
msgid "Control activation of this server."
msgstr "Traducción local de este nodo."
@@ -50393,13 +50856,19 @@ msgstr ""
#: doc/classes/Node.xml
msgid ""
"Emitted when a child node enters the scene tree, either because it entered "
-"on its own or because this node entered with it."
+"on its own or because this node entered with it.\n"
+"This signal is emitted [i]after[/i] the child node's own [constant "
+"NOTIFICATION_ENTER_TREE] and [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
msgid ""
-"Emitted when a child node exits the scene tree, either because it exited on "
-"its own or because this node exited."
+"Emitted when a child node is about to exit the scene tree, either because it "
+"is being removed or freed directly, or because this node is exiting the "
+"tree.\n"
+"When this signal is received, the child [code]node[/code] is still in the "
+"tree and valid. This signal is emitted [i]after[/i] the child node's own "
+"[signal tree_exiting] and [constant NOTIFICATION_EXIT_TREE]."
msgstr ""
#: doc/classes/Node.xml
@@ -50411,28 +50880,39 @@ msgid "Emitted when the node is renamed."
msgstr "Emitido cuando el nodo es renombrado."
#: doc/classes/Node.xml
-msgid "Emitted when the node enters the tree."
-msgstr "Emitido cuando el nodo entra en el árbol."
+msgid ""
+"Emitted when the node enters the tree.\n"
+"This signal is emitted [i]after[/i] the related [constant "
+"NOTIFICATION_ENTER_TREE] notification."
+msgstr ""
#: doc/classes/Node.xml
msgid "Emitted after the node exits the tree and is no longer active."
msgstr "Emitido después de que el nodo sale del árbol y ya no está activo."
#: doc/classes/Node.xml
+#, fuzzy
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)."
+"the right place for de-initialization (or a \"destructor\", if you will).\n"
+"This signal is emitted [i]before[/i] the related [constant "
+"NOTIFICATION_EXIT_TREE] notification."
msgstr ""
"Emitido cuando el nodo está todavía activo pero a punto de salir del árbol. "
"Este es el lugar adecuado para la des-inicialización (o un \"destructor\", "
"si se quiere)."
#: doc/classes/Node.xml
-msgid "Notification received when the node enters a [SceneTree]."
-msgstr "Notificación recibida cuando el nodo entra en un [SceneTree]."
+msgid ""
+"Notification received when the node enters a [SceneTree].\n"
+"This notification is emitted [i]before[/i] the related [signal tree_entered]."
+msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node is about to exit a [SceneTree]."
+#, fuzzy
+msgid ""
+"Notification received when the node is about to exit a [SceneTree].\n"
+"This notification is emitted [i]after[/i] the related [signal tree_exiting]."
msgstr ""
"Notificación recibida cuando el nodo está a punto de salir de un [SceneTree]."
@@ -50745,8 +51225,14 @@ msgid "Rotation in degrees, relative to the node's parent."
msgstr "Rotación en grados, en relación con el padre del nodo."
#: doc/classes/Node2D.xml
-msgid "The node's scale. Unscaled value: [code](1, 1)[/code]."
-msgstr "La escala del nodo. Valor no escalado: [code](1, 1)[/code]."
+msgid ""
+"The node's scale. Unscaled value: [code](1, 1)[/code].\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
+msgstr ""
#: doc/classes/Node2D.xml
msgid "Local [Transform2D]."
@@ -52765,6 +53251,10 @@ msgid ""
" if argument.find(\"=\") > -1:\n"
" var key_value = argument.split(\"=\")\n"
" arguments[key_value[0].lstrip(\"--\")] = key_value[1]\n"
+" else:\n"
+" # Options without an argument will be present in the dictionary,\n"
+" # with the value set to an empty string.\n"
+" arguments[argument.lstrip(\"--\")] = \"\"\n"
"[/codeblock]"
msgstr ""
"Devuelve los argumentos de la línea de mando pasados al motor.\n"
@@ -53656,8 +54146,15 @@ msgstr ""
msgid ""
"Moves the file or directory to the system's recycle bin. See also [method "
"Directory.remove].\n"
+"The method takes only global paths, so you may need to use [method "
+"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/"
+"code] as it will not work in exported project.\n"
"[b]Note:[/b] If the user has disabled the recycle bin on their system, the "
-"file will be permanently deleted instead."
+"file will be permanently deleted instead.\n"
+"[codeblock]\n"
+"var file_to_remove = \"user://slot1.sav\"\n"
+"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/OS.xml
@@ -60087,10 +60584,19 @@ msgstr "El PopupMenu muestra una lista de opciones."
#: doc/classes/PopupMenu.xml
msgid ""
"[PopupMenu] is a [Control] that displays a list of options. They are popular "
-"in toolbars or context menus."
+"in toolbars or context menus.\n"
+"[b]Incremental search:[/b] Like [ItemList] and [Tree], [PopupMenu] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
-"[PopupMenu] es un [Control] que muestra una lista de opciones. Son populares "
-"en las barras de herramientas o en los menús contextuales."
#: doc/classes/PopupMenu.xml
msgid ""
@@ -62139,9 +62645,17 @@ msgstr ""
"una función que devuelve [code]void[/code] a una variable."
#: doc/classes/ProjectSettings.xml
-msgid "Message to be displayed before the backtrace when the engine crashes."
+msgid ""
+"Message to be displayed before the backtrace when the engine crashes. By "
+"default, this message is only used in exported projects due to the editor-"
+"only override applied to this setting."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Editor-only override for [member debug/settings/crash_handler/message]. Does "
+"not affect exported projects in debug or release mode."
msgstr ""
-"Mensaje que se mostrará antes del retroceso cuando el motor se crashea."
#: doc/classes/ProjectSettings.xml
#, fuzzy
@@ -62455,6 +62969,18 @@ msgid ""
msgstr ""
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default naming style for scene files to infer from their root nodes. "
+"Possible options are:\n"
+"- [code]0[/code] (Auto): Uses the scene root name as is without changing its "
+"casing.\n"
+"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase "
+"casing.\n"
+"- [code]2[/code] (snake_case): Converts the scene root name to snake_case "
+"casing."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
#, fuzzy
msgid ""
"Search path for project-specific script templates. Godot will search for "
@@ -62779,6 +63305,198 @@ msgid "Default delay for touch events. This only affects iOS devices."
msgstr "Retraso predeterminado para las sugerencias (en segundos)."
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 1."
msgstr "Nombre opcional para la capa 1 de la física 2D."
@@ -62999,6 +63717,198 @@ msgid "Optional name for the 2D render layer 9."
msgstr "Nombre opcional para la capa 9 del renderizado 2D."
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 1."
msgstr "Nombre opcional para la capa 1 de la física 3D."
@@ -63294,6 +64204,49 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default cell height for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_height].\n"
+"[b]Note:[/b] Currently not implemented."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 2D navigation maps. See [method "
+"Navigation2DServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell height for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_height]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 3D navigation maps. See [method "
+"NavigationServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default map up vector for 3D navigation maps. See [method NavigationServer."
+"map_set_up]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -64111,20 +65064,28 @@ msgid ""
"cause.\n"
"The default value is a conservative one, so you are advised to tweak it "
"according to the hardware you are targeting.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"The default is a very conservative override for [code]rendering/gles3/"
-"shaders/max_concurrent_compiles[/code].\n"
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
"Depending on the specific devices you are targeting, you may want to raise "
"it.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
+"Depending on the specific browsers you are targeting, you may want to raise "
+"it.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -64132,19 +65093,28 @@ msgid ""
"The maximum size, in megabytes, that the ubershader cache can grow up to. On "
"startup, the least recently used entries will be deleted until the total "
"size is within bounds.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/ubershader_cache_size_mb[/"
-"code], so a smaller maximum size can be configured for mobile platforms, "
-"where storage space is more limited.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for mobile platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for web platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] Currently, shader caching is generally unavailable on web "
+"platforms.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -64176,14 +65146,22 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/shader_compilation_mode[/"
-"code], so asynchronous compilation can be disabled for mobile.\n"
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on mobile platforms.\n"
"You may want to do that since mobile GPUs generally won't support "
"ubershaders due to their complexity."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on web platforms.\n"
+"You may want to do that since certain browsers (especially on mobile "
+"platforms) generally won't support ubershaders due to their complexity."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
@@ -64356,6 +65334,12 @@ msgid ""
"when it is set to [code]false[/code], i.e. there are problems with the "
"default method."
msgstr ""
+"Usa un método simplificado para generar datos CPV (Conjunto Potencialmente "
+"Visible). Los resultados pueden no ser precisos cuando más de un portal une "
+"habitaciones adyacentes.\n"
+"[b]Nota:[/b] Por lo general, solo deberías utilizar esta opción si "
+"encuentras errores al estar en [code]false[/code], por ej. cuando hay "
+"problemas con el método predeterminado."
#: doc/classes/ProjectSettings.xml
msgid ""
@@ -65082,7 +66066,6 @@ msgid ""
"- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/"
"code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, "
"small grid radius values may lead to unwanted groupings.\n"
-"[/codeblock]\n"
"[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more "
"effective and faster [VisibilityNotifier] functionality. For most use cases, "
"[method Vector3.distance_to] or [method Vector3.distance_squared_to] are "
@@ -68009,6 +68992,26 @@ msgid "Makes text fill width."
msgstr "Hace que el texto se expanda para rellenar el ancho."
#: doc/classes/RichTextLabel.xml
+#, fuzzy
+msgid "Aligns top of the inline image to the top of the text."
+msgstr "La altura de la caja medida desde el centro de la caja."
+
+#: doc/classes/RichTextLabel.xml
+#, fuzzy
+msgid "Aligns center of the inline image to the center of the text."
+msgstr "Alinea a los niños con el centro del contenedor."
+
+#: doc/classes/RichTextLabel.xml
+#, fuzzy
+msgid "Aligns bottom of the inline image to the baseline of the text."
+msgstr "La altura de la caja medida desde el centro de la caja."
+
+#: doc/classes/RichTextLabel.xml
+#, fuzzy
+msgid "Aligns bottom of the inline image to the bottom of the text."
+msgstr "Alinea a los niños con el final del contenedor."
+
+#: doc/classes/RichTextLabel.xml
msgid "Each list item has a number marker."
msgstr "Cada elemento de la lista tiene un marcador numérico."
@@ -70221,8 +71224,8 @@ msgid ""
" yield(get_tree().create_timer(1.0), \"timeout\")\n"
" print(\"Timer ended.\")\n"
"[/codeblock]\n"
-"The timer will be automatically freed after its time elapses, so be aware "
-"that any reference you might have kept to it will become invalid."
+"The timer will be dereferenced after its time elapses. To preserve the "
+"timer, you can keep a reference to it. See [Reference]."
msgstr ""
"Un temporizador de un solo uso gestionado por el árbol de la escena, que "
"emite [signal timeout] al finalizar. Véase también [method SceneTree."
@@ -70267,24 +71270,23 @@ msgid ""
"manually (i.e. by using [code]Tween.new()[/code]) are invalid. They can't be "
"used for tweening values, but you can do manual interpolation with [method "
"interpolate_value].\n"
-"A [SceneTreeTween] animation is composed of a sequence of [Tweener]s, which "
-"by default are executed one after another. You can create a sequence by "
-"appending [Tweener]s to the [SceneTreeTween]. Animating something with a "
-"[Tweener] is called tweening. Example tweening sequence looks like this:\n"
+"A tween animation is created by adding [Tweener]s to the [SceneTreeTween] "
+"object, using [method tween_property], [method tween_interval], [method "
+"tween_callback] or [method tween_method]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1)\n"
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"This sequence will make the [code]$Sprite[/code] node turn red, then shrink "
-"and finally the [method Node.queue_free] is called to remove the sprite. See "
-"methods [method tween_property], [method tween_interval], [method "
-"tween_callback] and [method tween_method] for more usage information.\n"
+"This sequence will make the [code]$Sprite[/code] node turn red, then shrink, "
+"before finally calling [method Node.queue_free] to free the sprite. "
+"[Tweener]s are executed one after another by default. This behavior can be "
+"changed using [method parallel] and [method set_parallel].\n"
"When a [Tweener] is created with one of the [code]tween_*[/code] methods, a "
"chained method call can be used to tweak the properties of this [Tweener]. "
-"For example, if you want to set different transition type in the above "
-"example, you can do:\n"
+"For example, if you want to set a different transition type in the above "
+"example, you can use [method set_trans]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1).set_trans(Tween."
@@ -70293,8 +71295,9 @@ msgid ""
"TRANS_BOUNCE)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Most of the [SceneTreeTween] methods can be chained this way too. In this "
-"example the [SceneTreeTween] is bound and have set a default transition:\n"
+"Most of the [SceneTreeTween] methods can be chained this way too. In the "
+"following example the [SceneTreeTween] is bound to the running script's node "
+"and a default transition is set for its [Tweener]s:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween().bind_node(self).set_trans(Tween."
"TRANS_ELASTIC)\n"
@@ -70302,16 +71305,16 @@ msgid ""
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Another interesting use for [SceneTreeTween]s is animating arbitrary set of "
+"Another interesting use for [SceneTreeTween]s is animating arbitrary sets of "
"objects:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"for sprite in get_children():\n"
-" tween.tween_property(sprite, \"position\", Vector2(), 1)\n"
+" tween.tween_property(sprite, \"position\", Vector2(0, 0), 1)\n"
"[/codeblock]\n"
"In the example above, all children of a node are moved one after another to "
"position (0, 0).\n"
-"Some [Tweener]s use transitions and eases. The first accepts an [enum Tween."
+"Some [Tweener]s use transitions and eases. The first accepts a [enum Tween."
"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 Tween.EaseType] constant, and "
@@ -70323,7 +71326,7 @@ msgid ""
"tween_cheatsheet.png]Tween easing and transition types cheatsheet[/url]\n"
"[b]Note:[/b] All [SceneTreeTween]s will automatically start by default. To "
"prevent a [SceneTreeTween] from autostarting, you can call [method stop] "
-"immediately after it was created."
+"immediately after it is created."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -70353,21 +71356,24 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
-"Processes the [SceneTreeTween] by given [code]delta[/code] value, in "
-"seconds. Mostly useful when the [SceneTreeTween] is paused, for controlling "
-"it manually. Can also be used to end the [SceneTreeTween] animation "
-"immediately, by using [code]delta[/code] longer than the whole duration.\n"
+"Processes the [SceneTreeTween] by the given [code]delta[/code] value, in "
+"seconds. This is mostly useful for manual control when the [SceneTreeTween] "
+"is paused. It can also be used to end the [SceneTreeTween] animation "
+"immediately, by setting [code]delta[/code] longer than the whole duration of "
+"the [SceneTreeTween] animation.\n"
"Returns [code]true[/code] if the [SceneTreeTween] still has [Tweener]s that "
"haven't finished.\n"
-"[b]Note:[/b] The [SceneTreeTween] will become invalid after finished, but "
-"you can call [method stop] after the step, to keep it and reset."
+"[b]Note:[/b] The [SceneTreeTween] will become invalid in the next processing "
+"frame after its animation finishes. Calling [method stop] after performing "
+"[method custom_step] instead keeps and resets the [SceneTreeTween]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Returns the total time in seconds the [SceneTreeTween] has been animating (i."
-"e. time since it started, not counting pauses etc.). The time is affected by "
-"[method set_speed_scale] and [method stop] will reset it to [code]0[/code].\n"
+"e. the time since it started, not counting pauses etc.). The time is "
+"affected by [method set_speed_scale], and [method stop] will reset it to "
+"[code]0[/code].\n"
"[b]Note:[/b] As it results from accumulating frame deltas, the time returned "
"after the [SceneTreeTween] has finished animating will be slightly greater "
"than the actual [SceneTreeTween] duration."
@@ -70403,11 +71409,10 @@ msgstr ""
msgid ""
"Returns whether the [SceneTreeTween] is valid. A valid [SceneTreeTween] is a "
"[SceneTreeTween] contained by the scene tree (i.e. the array from [method "
-"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). "
-"[SceneTreeTween] might become invalid when it has finished tweening or was "
-"killed, also when created with [code]Tween.new()[/code]. Invalid "
-"[SceneTreeTween] can't have [Tweener]s appended, because it can't animate "
-"them. You can however still use [method interpolate_value]."
+"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). A "
+"[SceneTreeTween] might become invalid when it has finished tweening, is "
+"killed, or when created with [code]SceneTreeTween.new()[/code]. Invalid "
+"[SceneTreeTween]s can't have [Tweener]s appended."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -70447,16 +71452,15 @@ msgstr ""
msgid ""
"Sets the number of times the tweening sequence will be repeated, i.e. "
"[code]set_loops(2)[/code] will run the animation twice.\n"
-"Calling this method without arguments will make the [SceneTreeTween] run "
-"infinitely, until it is either killed by [method kill] or by freeing bound "
-"node, or all the animated objects have been freed (which makes further "
+"Calling this method without arguments will make the [Tween] run infinitely, "
+"until either it is killed with [method kill], the [Tween]'s bound node is "
+"freed, or all the animated objects have been freed (which makes further "
"animation impossible).\n"
"[b]Warning:[/b] Make sure to always add some duration/delay when using "
-"infinite loops. 0-duration looped animations (e.g. single [CallbackTweener] "
-"with no delay or [PropertyTweener] with invalid node) are equivalent to "
-"infinite [code]while[/code] loops and will freeze your game. If a "
-"[SceneTreeTween]'s lifetime depends on some node, always use [method "
-"bind_node]."
+"infinite loops. To prevent the game freezing, 0-duration looped animations "
+"(e.g. a single [CallbackTweener] with no delay) are stopped after a small "
+"number of loops, which may produce unexpected results. If a [Tween]'s "
+"lifetime depends on some node, always use [method bind_node]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -70518,10 +71522,10 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Creates and appends an [IntervalTweener]. This method can be used to create "
-"delays in the tween animation, as an alternative for using the delay in "
-"other [Tweener]s or when there's no animation (in which case the "
-"[SceneTreeTween] acts as a timer). [code]time[/code] is the length of the "
-"interval, in seconds.\n"
+"delays in the tween animation, as an alternative to using the delay in other "
+"[Tweener]s, or when there's no animation (in which case the [SceneTreeTween] "
+"acts as a timer). [code]time[/code] is the length of the interval, in "
+"seconds.\n"
"Example: creating an interval in code execution.\n"
"[codeblock]\n"
"# ... some code\n"
@@ -70575,8 +71579,8 @@ msgid ""
"Creates and appends a [PropertyTweener]. This method tweens a "
"[code]property[/code] of an [code]object[/code] between an initial value and "
"[code]final_val[/code] in a span of time equal to [code]duration[/code], in "
-"seconds. The initial value by default is a value at the time the tweening of "
-"the [PropertyTweener] start. For example:\n"
+"seconds. The initial value by default is the property's value at the time "
+"the tweening of the [PropertyTweener] starts. For example:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"tween.tween_property($Sprite, \"position\", Vector2(100, 200), 1)\n"
@@ -70607,16 +71611,15 @@ msgid ""
"Emitted when the [SceneTreeTween] has finished all tweening. Never emitted "
"when the [SceneTreeTween] is set to infinite looping (see [method "
"set_loops]).\n"
-"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) after this signal "
-"is emitted, but it doesn't happen immediately, but on the next processing "
-"frame. Calling [method stop] inside the signal callback will preserve the "
-"[SceneTreeTween]."
+"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) in the next "
+"processing frame after this signal is emitted. Calling [method stop] inside "
+"the signal callback will prevent the [SceneTreeTween] from being removed."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Emitted when a full loop is complete (see [method set_loops]), providing the "
-"loop index. This signal is not emitted after final loop, use [signal "
+"loop index. This signal is not emitted after the final loop, use [signal "
"finished] instead for this case."
msgstr ""
@@ -70624,7 +71627,7 @@ msgstr ""
msgid ""
"Emitted when one step of the [SceneTreeTween] is complete, providing the "
"step index. One step is either a single [Tweener] or a group of [Tweener]s "
-"running parallelly."
+"running in parallel."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -72308,8 +73311,13 @@ msgstr ""
"términos de ángulos YXZ-Euler en el formato (ángulo X, ángulo Y, ángulo Z)."
#: doc/classes/Spatial.xml
-msgid "Scale part of the local transformation."
-msgstr "Parte de Escala de la transformación local."
+msgid ""
+"Scale part of the local transformation.\n"
+"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, the scale values will either be all "
+"positive or all negative."
+msgstr ""
#: doc/classes/Spatial.xml
msgid "Local space [Transform] of this node, with respect to the parent node."
@@ -75660,11 +76668,11 @@ msgstr ""
msgid ""
"Returns [code]true[/code] if this string contains a valid integer.\n"
"[codeblock]\n"
-"print(\"7\".is_valid_int()) # Prints \"True\"\n"
-"print(\"14.6\".is_valid_int()) # Prints \"False\"\n"
-"print(\"L\".is_valid_int()) # Prints \"False\"\n"
-"print(\"+3\".is_valid_int()) # Prints \"True\"\n"
-"print(\"-12\".is_valid_int()) # Prints \"True\"\n"
+"print(\"7\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"14.6\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"L\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"+3\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"-12\".is_valid_integer()) # Prints \"True\"\n"
"[/codeblock]"
msgstr ""
"Devuelve [code]true[/code] si esta string es un identificador válido. Un "
@@ -80131,6 +81139,11 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml
+#, fuzzy
+msgid "If [code]true[/code], this TileMap bakes a navigation region."
+msgstr "Si [code]true[/code], la animación nombrada existe."
+
+#: doc/classes/TileMap.xml
msgid "If [code]true[/code], the cell's UVs will be clipped."
msgstr "Si [code]true[/code], los UV de la celda serán recortados."
@@ -80280,6 +81293,10 @@ msgstr ""
"El modo de orientación de TileMap. Vea [enum Mode] para los posibles valores."
#: doc/classes/TileMap.xml
+msgid "The navigation layers the TileMap generates its navigation regions in."
+msgstr ""
+
+#: doc/classes/TileMap.xml
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 "
@@ -81660,13 +82677,15 @@ msgstr ""
"multiplicación de la matriz."
#: doc/classes/Transform2D.xml
-#, fuzzy
msgid ""
"Returns a copy of the transform scaled by the given [code]scale[/code] "
-"factor, using matrix multiplication."
+"factor, using matrix multiplication.\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
-"Escala la transformación por el factor de escala dado, usando la "
-"multiplicación de la matriz."
#: doc/classes/Transform2D.xml
#, fuzzy
@@ -81818,6 +82837,7 @@ msgid "Control to show a tree of items."
msgstr "Control para mostrar un árbol de objetos."
#: doc/classes/Tree.xml
+#, fuzzy
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, "
@@ -81839,7 +82859,18 @@ msgid ""
"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]."
+"to remove it from the [Tree].\n"
+"[b]Incremental search:[/b] Like [ItemList] and [PopupMenu], [Tree] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
"Esto muestra un árbol de objetos que pueden ser seleccionados, expandidos y "
"colapsados. El árbol puede tener múltiples columnas con controles "
@@ -86613,11 +87644,14 @@ msgid "This enabler will stop [Particles2D] nodes."
msgstr "Este habilitador detendrá los nodos [GPUParticles2D]."
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _process function."
+#, fuzzy
+msgid "This enabler will stop the parent's [method Node._process] function."
msgstr "Este habilitador detendrá la función _process del padre."
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _physics_process function."
+#, fuzzy
+msgid ""
+"This enabler will stop the parent's [method Node._physics_process] function."
msgstr "Este habilitador detendrá la función del _physics_process del padre."
#: doc/classes/VisibilityEnabler2D.xml
@@ -86677,6 +87711,16 @@ msgid "The VisibilityNotifier's bounding box."
msgstr "El cuadro delimitador del VisibilityNotifier."
#: doc/classes/VisibilityNotifier.xml
+msgid ""
+"In addition to checking whether a node is on screen or within a [Camera]'s "
+"view, VisibilityNotifier can also optionally check whether a node is within "
+"a specified maximum distance when using a [Camera] with perspective "
+"projection. This is useful for throttling the performance requirements of "
+"nodes that are far away.\n"
+"[b]Note:[/b] This feature will be disabled if set to 0.0."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier.xml
#, fuzzy
msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view."
msgstr ""
@@ -92791,6 +93835,16 @@ msgid "The amount of shader rebinds in the frame."
msgstr "La cantidad del shader se repite en el fotograma."
#: doc/classes/VisualServer.xml
+msgid ""
+"The peak amount of shaders that have been under compilation in the frame.\n"
+"This is useful to know when asynchronous shader compilation has finished for "
+"the current shaders on screen.\n"
+"[b]Note:[/b] For complete certainty, only assume there are no outstanding "
+"compilations when this value is zero for at least two frames in a row.\n"
+"Unimplemented in the GLES2 rendering backend, always returns 0."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
msgid "The amount of surface changes in the frame."
msgstr "La cantidad de superficie cambia en el fotograma."
@@ -96917,8 +97971,8 @@ msgstr "Clase que tiene todo lo que pertenece a un mundo."
#, fuzzy
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."
+"scenario, a navigation map and a sound space. Spatial nodes register their "
+"resources into the current world."
msgstr ""
"Clase que tiene todo lo que pertenece a un mundo. Un espacio físico, un "
"escenario visual y un espacio sonoro. Los nodos de Spatial registran sus "
@@ -96942,14 +97996,20 @@ msgstr "El [Environment] del World."
#: doc/classes/World.xml
#, fuzzy
msgid ""
-"The World's fallback_environment will be used if the World's [Environment] "
-"fails or is missing."
+"The World's fallback environment will be used if [member environment] fails "
+"or is missing."
msgstr ""
"El fallback_environment del World3D se usará si el [Environment] de World3D "
"falla o falta."
#: doc/classes/World.xml
#, fuzzy
+msgid ""
+"The [RID] of this world's navigation map. Used by the [NavigationServer]."
+msgstr "Devuelve el [RID] de la forma enésima de un área."
+
+#: doc/classes/World.xml
+#, fuzzy
msgid "The World's visual scenario."
msgstr "El escenario visual de World."
@@ -96963,10 +98023,11 @@ msgid "Class that has everything pertaining to a 2D world."
msgstr "Clase que tiene todo lo que pertenece a un mundo 2D."
#: doc/classes/World2D.xml
+#, fuzzy
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."
+"visual scenario, a navigation map and a sound space. 2D nodes register their "
+"resources into the current 2D world."
msgstr ""
"Clase que tiene todo lo que pertenece a un mundo 2D. Un espacio físico, un "
"escenario visual y un espacio sonoro. Los nodos 2D registran sus recursos en "
@@ -96995,6 +98056,12 @@ msgstr ""
#: doc/classes/World2D.xml
#, fuzzy
msgid ""
+"The [RID] of this world's navigation map. Used by the [Navigation2DServer]."
+msgstr "Devuelve el [RID] de la forma enésima de un área."
+
+#: doc/classes/World2D.xml
+#, fuzzy
+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 ""
diff --git a/doc/translations/fa.po b/doc/translations/fa.po
index 8f5ee45c36..a8972b49a5 100644
--- a/doc/translations/fa.po
+++ b/doc/translations/fa.po
@@ -15,12 +15,13 @@
# ahmad maftoon <ahmadmaftoon.1387@gmail.com>, 2021.
# Seyed Fazel Alavi <fazel8195@gmail.com>, 2022.
# Giga hertz <gigahertzyt@gmail.com>, 2022.
+# ilia khormali <iliakhormaly1384@gmail.com>, 2022.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2022-04-03 08:11+0000\n"
-"Last-Translator: Giga hertz <gigahertzyt@gmail.com>\n"
+"PO-Revision-Date: 2022-06-21 15:55+0000\n"
+"Last-Translator: ilia khormali <iliakhormaly1384@gmail.com>\n"
"Language-Team: Persian <https://hosted.weblate.org/projects/godot-engine/"
"godot-class-reference/fa/>\n"
"Language: fa\n"
@@ -28,7 +29,7 @@ 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.12-dev\n"
+"X-Generator: Weblate 4.13.1-dev\n"
#: doc/tools/make_rst.py
msgid "Description"
@@ -106,6 +107,7 @@ msgstr ""
msgid ""
"This method should typically be overridden by the user to have any effect."
msgstr ""
+"این روش معمولا نیازمند است توسط خود ÙØ±Ø¯ نوشته شود تا بتواند تاثییری بگذارد."
#: doc/tools/make_rst.py
msgid ""
@@ -492,7 +494,7 @@ msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
msgid ""
"Compares two values by checking their actual contents, recursing into any "
-"`Array` or `Dictionary` up to its deepest level.\n"
+"[Array] or [Dictionary] up to its deepest level.\n"
"This compares to [code]==[/code] in a number of ways:\n"
"- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/"
"code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] "
@@ -548,7 +550,7 @@ msgid ""
"- 1.0: Linear\n"
"- Greater than 1.0 (exclusive): Ease in\n"
"[/codeblock]\n"
-"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.4/img/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/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]."
@@ -1527,7 +1529,7 @@ msgid ""
"[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/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/img/"
"smoothstep_ease_comparison.png]Comparison between smoothstep() and ease(x, "
"-1.6521) return values[/url]"
msgstr ""
@@ -3811,6 +3813,12 @@ msgstr ""
#: doc/classes/@GlobalScope.xml
msgid ""
+"Hints that an integer property is a bitmask using the optionally named 2D "
+"navigation layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml
+msgid ""
"Hints that an integer property is a bitmask using the optionally named 3D "
"render layers."
msgstr ""
@@ -3823,6 +3831,12 @@ msgstr ""
#: doc/classes/@GlobalScope.xml
msgid ""
+"Hints that an integer property is a bitmask using the optionally named 3D "
+"navigation layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml
+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]."
@@ -8798,7 +8812,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/AStar.xml
+#: doc/classes/AStar.xml doc/classes/AStar2D.xml
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[/"
@@ -8997,7 +9011,10 @@ msgid ""
msgstr ""
#: doc/classes/AStar2D.xml
-msgid "Returns whether there is a connection/segment between the given points."
+msgid ""
+"Returns whether there is a connection/segment between the given points. 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/AStar2D.xml
@@ -9014,10 +9031,6 @@ msgid ""
msgstr ""
#: doc/classes/AStar2D.xml
-msgid "Deletes the segment between the given points."
-msgstr ""
-
-#: doc/classes/AStar2D.xml
msgid ""
"Returns the closest position to [code]to_position[/code] that resides inside "
"a segment between two connected points.\n"
@@ -9202,7 +9215,9 @@ msgid ""
"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."
+"transmit audio over the network. When capturing audio data from a "
+"microphone, the format of the samples will be stereo 32-bit floating point "
+"PCM."
msgstr ""
#: doc/classes/AudioEffectCapture.xml
@@ -14045,7 +14060,7 @@ msgid ""
msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
-#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/Navigation2D.xml
msgid "Returns the object's [RID]."
msgstr ""
@@ -19520,11 +19535,14 @@ msgid ""
msgstr ""
#: doc/classes/CurveTexture.xml
-msgid "The [code]curve[/code] rendered onto the texture."
+msgid "The [Curve] that is rendered onto the texture."
msgstr ""
#: doc/classes/CurveTexture.xml
-msgid "The width of the texture."
+msgid ""
+"The width of the texture (in pixels). Higher values make it possible to "
+"represent high-frequency data better (such as sudden direction changes), at "
+"the cost of increased generation time and memory usage."
msgstr ""
#: doc/classes/CylinderMesh.xml
@@ -19810,6 +19828,13 @@ msgid "Returns the list of keys in the [Dictionary]."
msgstr ""
#: doc/classes/Dictionary.xml
+msgid ""
+"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, "
+"duplicate keys will not be copied over, unless [code]overwrite[/code] is "
+"[code]true[/code]."
+msgstr ""
+
+#: doc/classes/Dictionary.xml
msgid "Returns the number of keys in the dictionary."
msgstr ""
@@ -21748,9 +21773,23 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide a state data you want to be saved, like view "
+"position, grid settings, folding, etc. 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). This data is automatically saved for "
+"each scene in an [code]editstate[/code] file in the editor metadata folder. "
+"If you want to store global (scene-independent) editor data for your plugin, "
+"you can use [method get_window_layout] instead.\n"
+"Use [method set_state] to restore your saved state.\n"
+"[b]Note:[/b] This method should not be used to save important settings that "
+"should persist with the project.\n"
+"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be "
+"stored and restored correctly.\n"
+"[codeblock]\n"
+"func get_state():\n"
+" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n"
+" return state\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -21761,9 +21800,18 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide the GUI layout of the plugin or any other "
+"data you want to be stored. 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). The data is stored in the "
+"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n"
+"Use [method set_window_layout] to restore your saved layout.\n"
+"[codeblock]\n"
+"func get_window_layout(configuration):\n"
+" configuration.set_value(\"MyPlugin\", \"window_position\", $Window."
+"position)\n"
+" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -21876,11 +21924,30 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the state saved by [method get_state]."
+msgid ""
+"Restore the state saved by [method get_state]. This method is called when "
+"the current scene tab is changed in the editor.\n"
+"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise "
+"it will not be recognized and this method will not be called.\n"
+"[codeblock]\n"
+"func set_state(data):\n"
+" zoom = data.get(\"zoom\", 1.0)\n"
+" preferred_color = data.get(\"my_color\", Color.white)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the plugin GUI layout saved by [method get_window_layout]."
+msgid ""
+"Restore the plugin GUI layout and data saved by [method get_window_layout]. "
+"This method is called for every plugin on editor startup. Use the provided "
+"[code]configuration[/code] file to read your saved data.\n"
+"[codeblock]\n"
+"func set_window_layout(configuration):\n"
+" $Window.position = configuration.get_value(\"MyPlugin\", "
+"\"window_position\", Vector2())\n"
+" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", "
+"Color.white)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -26518,7 +26585,8 @@ msgid ""
"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])."
+"at fixed steps (see [member width]). See also [GradientTexture2D] and "
+"[CurveTexture]."
msgstr ""
#: doc/classes/GradientTexture.xml
@@ -26540,7 +26608,8 @@ msgid ""
"repeat] types using colors obtained from the gradient. 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] and [member height])."
+"[member width] and [member height]). See also [GradientTexture] and "
+"[CurveTexture]."
msgstr ""
#: doc/classes/GradientTexture2D.xml
@@ -27346,6 +27415,12 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+msgid ""
+"If [code]true[/code], this GridMap uses cell navmesh resources to create "
+"navigation regions."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid "If [code]true[/code], grid items are centered on the X axis."
msgstr ""
@@ -27396,6 +27471,10 @@ msgid "The assigned [MeshLibrary]."
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+msgid "The navigation layers the GridMap generates its navigation regions in."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
"Overrides the default friction and bounce physics properties for the whole "
"[GridMap]."
@@ -28619,7 +28698,7 @@ msgid ""
" # 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 body = to_json({\"name\": \"Godette\"})\n"
" error = http_request.request(\"https://httpbin.org/post\", [], true, "
"HTTPClient.METHOD_POST, body)\n"
" if error != OK:\n"
@@ -29786,7 +29865,7 @@ msgstr ""
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 "
+"([member 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 "
@@ -29935,10 +30014,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Returns the mouse mode. See the constants for more information."
-msgstr ""
-
-#: doc/classes/Input.xml
msgid ""
"Gets an input vector by specifying four actions for the positive and "
"negative X and Y axes.\n"
@@ -30132,24 +30207,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Sets the mouse mode. See the constants for more information."
-msgstr ""
-
-#: doc/classes/Input.xml
-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
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 "
@@ -30185,6 +30242,24 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
+msgid "Controls the mouse mode. See [enum MouseMode] for more information."
+msgstr ""
+
+#: doc/classes/Input.xml
+msgid ""
+"If [code]true[/code], similar input events sent by the operating system are "
+"accumulated. 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 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
msgid "Emitted when a joypad device has been connected or disconnected."
msgstr ""
@@ -30492,8 +30567,8 @@ msgstr ""
#: doc/classes/InputEventJoypadButton.xml
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]."
+"Represents the pressure the user puts on the button with their finger, if "
+"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]."
msgstr ""
#: doc/classes/InputEventJoypadMotion.xml
@@ -30756,9 +30831,9 @@ 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 "
+"at most. If you need more precise input reporting, set [member Input."
+"use_accumulated_input] to [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."
@@ -31245,7 +31320,18 @@ msgid ""
"[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."
+"fixed_column_width] greater than zero to wrap the text.\n"
+"[b]Incremental search:[/b] Like [PopupMenu] and [Tree], [ItemList] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/ItemList.xml
@@ -34992,11 +35078,16 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Returns the override [Material] for a surface of the [Mesh] resource.\n"
+"[b]Note:[/b] This function only returns [i]override[/i] materials associated "
+"with this [MeshInstance]. Consider using [method get_active_material] or "
+"[method Mesh.surface_get_material] to get materials associated with the "
+"[Mesh] resource."
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the number of surface materials."
+msgid "Returns the number of surface override materials."
msgstr ""
#: doc/classes/MeshInstance.xml
@@ -35033,7 +35124,10 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Sets the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Sets the override [Material] for the specified surface of the [Mesh] "
+"resource. This material is associated with this [MeshInstance] rather than "
+"with the [Mesh] resource."
msgstr ""
#: doc/classes/MeshInstance.xml
@@ -35064,9 +35158,10 @@ msgstr ""
#: doc/classes/MeshInstance2D.xml
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\"."
+"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be "
+"automatically created from an existing [Sprite] via a tool in the editor "
+"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to "
+"MeshInstance2D[/b] at the top of the 2D editor viewport."
msgstr ""
#: doc/classes/MeshInstance2D.xml
@@ -35830,6 +35925,9 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"Provides navigation and pathfinding within a collection of "
"[NavigationMesh]es. By default, these will be automatically collected from "
"child [NavigationMeshInstance] nodes. In addition to basic pathfinding, this "
@@ -35870,7 +35968,14 @@ msgid ""
msgstr ""
#: doc/classes/Navigation.xml
+msgid "Returns the [RID] of the navigation map on the [NavigationServer]."
+msgstr ""
+
+#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"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, "
@@ -35892,16 +35997,31 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation.get_simple_path] path query."
+msgstr ""
+
+#: doc/classes/Navigation.xml
+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/Navigation.xml doc/classes/Navigation2DServer.xml
+#: doc/classes/NavigationServer.xml
+msgid ""
+"Emitted when a navigation map is updated, when a region moves or is modified."
+msgstr ""
+
#: doc/classes/Navigation2D.xml
msgid "2D navigation and pathfinding node."
msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -35921,6 +36041,9 @@ msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -35930,6 +36053,12 @@ msgstr ""
msgid "The XY plane cell size to use for fields."
msgstr ""
+#: doc/classes/Navigation2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation2D.get_simple_path] path query."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml
msgid "Server interface for low-level 2D navigation access."
msgstr ""
@@ -35946,8 +36075,12 @@ msgid ""
"through scripts.\n"
"For two regions to be connected to each other, they must share a similar "
"edge. An edge is considered connected to another if both of its two vertices "
-"are at a distance less than [member Navigation.edge_connection_margin] to "
-"the respective other edge's vertex.\n"
+"are at a distance less than navigation map [code]edge_connection_margin[/"
+"code] to the respective other edge's vertex.\n"
+"You may assign navigation layers to regions with [method Navigation2DServer."
+"region_set_navigation_layers], which then can be checked upon when "
+"requesting a path with [method Navigation2DServer.map_get_path]. This allows "
+"allowing or forbidding some areas to 2D objects.\n"
"To use the collision avoidance system, you may use agents. You can set an "
"agent's target velocity, then the servers will emit a callback with a "
"modified velocity.\n"
@@ -35975,7 +36108,17 @@ msgid "Returns [code]true[/code] if the map got changed the previous frame."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Callback called at the end of the RVO process."
+msgid ""
+"Callback called at the end of the RVO process. If a callback is created "
+"manually and the agent is placed on a navigation map it will calculate "
+"avoidance for the agent and dispatch the calculated [code]safe_velocity[/"
+"code] to the [code]receiver[/code] object with a signal to the chosen "
+"[code]method[/code] name.\n"
+"[b]Note:[/b] Created callbacks are always processed independently of the "
+"SceneTree state as long as the agent is on a navigation map and not freed. "
+"To disable the dispatch of a callback from an agent use [method "
+"agent_set_callback] again with a [code]null[/code] object as the "
+"[code]receiver[/code]."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -36030,15 +36173,55 @@ msgid "Destroys the given RID."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns all created navigation map [RID]s on the NavigationServer. This "
+"returns both 2D and 3D created navigation maps as there is technically no "
+"distinction between them."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Create a new map."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"This function immediately forces synchronization of the specified navigation "
+"[code]map[/code] [RID]. By default navigation maps are only synchronized at "
+"the end of each physics frame. This function can be used to immediately "
+"(re)calculate all the navigation meshes and region connections of the "
+"navigation map. This makes it possible to query a navigation path for a "
+"changed map immediately and in the same frame (multiple times if needed).\n"
+"Due to technical restrictions the current NavigationServer command queue "
+"will be flushed. This means all already queued update commands for this "
+"physics frame will be executed, even those intended for other maps, regions "
+"and agents not part of the specified map. The expensive computation of the "
+"navigation meshes and region connections of a map will only be done for the "
+"specified map. Other maps will receive the normal synchronization at the end "
+"of the physics frame. Should the specified map receive changes after the "
+"forced update it will update again as well when the other maps receive their "
+"update.\n"
+"Avoidance processing and dispatch of the [code]safe_velocity[/code] signals "
+"is untouched by this function and continues to happen for all maps and "
+"agents at the end of the physics frame.\n"
+"[b]Note:[/b] With great power comes great responsibility. This function "
+"should only be used by users that really know what they are doing and have a "
+"good reason for it. Forcing an immediate update of a navigation map requires "
+"locking the NavigationServer and flushing the entire NavigationServer "
+"command queue. Not only can this severely impact the performance of a game "
+"but it can also introduce bugs if used inappropriately without much "
+"foresight."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns all navigation agents [RID]s that are currently assigned to the "
"requested navigation [code]map[/code]."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Returns the map cell size."
msgstr ""
@@ -36062,7 +36245,10 @@ msgid ""
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Returns the navigation path to reach the destination from the origin."
+msgid ""
+"Returns the navigation path to reach the destination from the origin. "
+"[code]navigation_layers[/code] is a bitmask of all region layers that are "
+"allowed to be in the path."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -36079,6 +36265,12 @@ msgstr ""
msgid "Sets the map active."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/"
+"b] Currently not implemented."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Set the map cell size used to weld the navigation mesh polygons."
msgstr ""
@@ -36094,14 +36286,73 @@ msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"Returns the ending point of a connection door. [code]connection[/code] is an "
+"index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns the starting point of a connection door. [code]connection[/code] is "
+"an index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns how many connections this [code]region[/code] has with other regions "
+"in the map."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns the navigation map [RID] the requested [code]region[/code] is "
"currently assigned to."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Returns the region's navigation layers."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns [code]true[/code] if the provided [code]point[/code] in world space "
+"is currently owned by the provided navigation [code]region[/code]. Owned in "
+"this context means that one of the region's navigation mesh polygon faces "
+"has a possible position at the closest distance to this point compared to "
+"all other navigation meshes from other navigation regions that are also "
+"registered on the navigation map of the provided region.\n"
+"If multiple navigation meshes have positions at equal distance the "
+"navigation region whose polygons are processed first wins the ownership. "
+"Polygons are processed in the same order that navigation regions were "
+"registered on the NavigationServer.\n"
+"[b]Note:[/b] If navigation meshes from different navigation regions overlap "
+"(which should be avoided in general) the result might not be what is "
+"expected."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Sets the map for the region."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method Navigation2DServer.map_get_path])."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Sets the navigation mesh for the region."
msgstr ""
@@ -36110,6 +36361,10 @@ msgstr ""
msgid "Sets the global transformation for the region."
msgstr ""
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]."
+msgstr ""
+
#: doc/classes/NavigationAgent.xml
msgid "3D agent used in navigation for collision avoidance."
msgstr ""
@@ -36119,9 +36374,16 @@ msgid ""
"3D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationAgent] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World] navigation map. If this node is a child of a [Navigation] "
+"node it will register to the navigation map of the navigation node or the "
+"function [method set_navigation] can be used to set the navigation node "
+"directly. [NavigationAgent] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -36139,7 +36401,15 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-msgid "Returns the path from start to finish in global coordinates."
+msgid ""
+"Returns this agent's current path from start to finish in global "
+"coordinates. The path only updates when the target location is changed or "
+"the agent requires a repath. The path array is not intended to be used in "
+"direct path movement as the agent has its own internal path logic that would "
+"get corrupted by changing the path array manually. Use the intended [method "
+"get_next_location] once every physics frame to receive the next path point "
+"for the agents movement as this function also updates the internal path "
+"logic."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -36154,11 +36424,24 @@ msgid ""
"system."
msgstr ""
-#: doc/classes/NavigationAgent.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"Returns a [Vector3] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the origin of the agent's parent."
+"Returns the [RID] of the navigation map for this NavigationAgent node. This "
+"function returns always the map set on the NavigationAgent node and not the "
+"map of the abstract agent on the NavigationServer. If the agent map is "
+"changed directly with the NavigationServer API the NavigationAgent node will "
+"not be aware of the map change. Use [method set_navigation_map] to change "
+"the navigation map for the NavigationAgent and also update the agent on the "
+"NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
+"Returns the next location in global coordinates that can be moved to, making "
+"sure that there are no static objects in the way. If the agent does not have "
+"a navigation path, it will return the position of the agent's parent. The "
+"use of this function once every physics frame is required to update the "
+"internal path logic of the NavigationAgent."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -36199,6 +36482,12 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"Sets the [RID] of the navigation map this NavigationAgent node should use "
+"and also updates the [code]agent[/code] on the NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"Sets the user desired final location. This will clear the current navigation "
"path."
msgstr ""
@@ -36211,7 +36500,13 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml
-msgid "The agent height offset to match the navigation mesh height."
+msgid ""
+"The NavigationAgent height offset is subtracted from the y-axis value of any "
+"vector path position for this NavigationAgent. The NavigationAgent height "
+"offset does not change or influence the navigation mesh or pathfinding query "
+"result. Additional navigation maps that use regions with navigation meshes "
+"that the developer baked with appropriate agent radius or height values are "
+"required to support different-sized agents."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -36238,26 +36533,53 @@ msgstr ""
msgid "The maximum speed that an agent can move."
msgstr ""
+#: doc/classes/NavigationAgent.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "The distance to search for other agents."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"The distance threshold before a path point is considered to be reached. This "
+"will allow an agent to not have to hit a path point on the path exactly, but "
+"in the area. If this value is set to high the NavigationAgent will skip "
+"points on the path which can lead to leaving the navigation mesh. If this "
+"value is set to low the NavigationAgent will be stuck in a repath loop cause "
+"it will constantly overshoot or undershoot the distance to the next point on "
+"each physics frame update."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"The maximum distance the agent is allowed away from the ideal path to the "
"final location. This can happen due to trying to avoid collisions. When the "
"maximum distance is exceeded, it recalculates the ideal path."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-msgid "The radius of the agent."
+msgid ""
+"The radius of the avoidance agent. This is the \"body\" of the avoidance "
+"agent and not the avoidance maneuver starting radius (which is controlled by "
+"[member neighbor_dist]).\n"
+"Does not affect normal pathfinding. To change an actor's pathfinding radius "
+"bake [NavigationMesh] resources with a different [member NavigationMesh."
+"agent_radius] property and use different navigation maps for each actor size."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"The distance threshold before a target is considered to be reached. This "
-"will allow an agent to not have to hit a point on the path exactly, but in "
-"the area."
+"The distance threshold before the final target point is considered to be "
+"reached. This will allow an agent to not have to hit the point of the final "
+"target exactly, but only the area. If this value is set to low the "
+"NavigationAgent will be stuck in a repath loop cause it will constantly "
+"overshoot or undershoot the distance to the final target point on each "
+"physics frame update."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -36300,9 +36622,16 @@ msgid ""
"2D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationAgent2D] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World2D] navigation map. If this node is a child of a "
+"[Navigation2D] node it will register to the navigation map of the navigation "
+"node or the function [method set_navigation] can be used to set the "
+"navigation node directly. [NavigationAgent2D] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent2D.xml
@@ -36318,13 +36647,6 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent2D.xml
-msgid ""
-"Returns a [Vector2] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the position of the agent's parent."
-msgstr ""
-
-#: doc/classes/NavigationAgent2D.xml
msgid "Returns the [RID] of this agent on the [Navigation2DServer]."
msgstr ""
@@ -36344,6 +36666,13 @@ msgid ""
"only be enabled on agents that currently require it."
msgstr ""
+#: doc/classes/NavigationAgent2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent2D] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationMesh.xml
msgid "A mesh to approximate the walkable areas and obstacles."
msgstr ""
@@ -36374,8 +36703,8 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
-"Returns whether the specified [code]bit[/code] of the [member geometry/"
-"collision_mask] is set."
+"Returns whether the specified [code]bit[/code] of the [member "
+"geometry_collision_mask] is set."
msgstr ""
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
@@ -36397,9 +36726,9 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/"
-"code] in the [member geometry/collision_mask].\n"
+"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]."
+"code] in the [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
@@ -36413,14 +36742,14 @@ 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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36432,7 +36761,7 @@ 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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36460,13 +36789,17 @@ msgstr ""
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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
-"If [code]true[/code], marks walkable spans as not walkable if the clearance "
-"above the span is less than [member agent/height]."
+"If the baking [AABB] has a volume the navigation mesh baking will be "
+"restricted to its enclosing area."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+msgid "The position offset applied to the [member filter_baking_aabb] [AABB]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36476,13 +36809,19 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]true[/code], marks non-walkable spans as walkable if their maximum "
-"is within [member agent/max_climb] of a walkable neighbor."
+"is within [member agent_max_climb] of a walkable neighbor."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+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
msgid ""
"The physics layers to scan for static colliders.\n"
-"Only used when [member geometry/parsed_geometry_type] is [constant "
+"Only used when [member geometry_parsed_geometry_type] is [constant "
"PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]."
msgstr ""
@@ -36501,7 +36840,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"The name of the group to scan for geometry.\n"
-"Only used when [member geometry/source_geometry_mode] is [constant "
+"Only used when [member geometry_source_geometry_mode] is [constant "
"SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant "
"SOURCE_GEOMETRY_GROUPS_EXPLICIT]."
msgstr ""
@@ -36564,7 +36903,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Parses [StaticBody] colliders as geometry. The collider should be in any of "
-"the layers specified by [member geometry/collision_mask]."
+"the layers specified by [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36585,13 +36924,13 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Scans nodes in a group and their child nodes recursively for geometry. The "
-"group is specified by [member geometry/source_group_name]."
+"group is specified by [member geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Uses nodes in a group for geometry. The group is specified by [member "
-"geometry/source_group_name]."
+"geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36633,7 +36972,15 @@ msgid ""
"geometry for walkable terrain suitable to [NavigationMesh] agent properties "
"by creating a voxel world around the meshes bounding area.\n"
"The finalized navigation mesh is then returned and stored inside the "
-"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes."
+"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] "
+"nodes.\n"
+"[b]Note:[/b] Using meshes to not only define walkable surfaces but also "
+"obstruct navigation baking does not always work. The navigation baking has "
+"no concept of what is a geometry \"inside\" when dealing with mesh source "
+"geometry and this is intentional. Depending on current baking parameters, as "
+"soon as the obstructing mesh is large enough to fit a navigation mesh area "
+"inside, the baking will generate navigation mesh areas that are inside the "
+"obstructing source geometry mesh."
msgstr ""
#: doc/classes/NavigationMeshGenerator.xml
@@ -36641,8 +36988,8 @@ msgid ""
"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child "
"nodes under the provided [code]root_node[/code] or a specific group of nodes "
"for potential source geometry. The parse behavior can be controlled with the "
-"[member NavigationMesh.geometry/parsed_geometry_type] and [member "
-"NavigationMesh.geometry/source_geometry_mode] properties on the "
+"[member NavigationMesh.geometry_parsed_geometry_type] and [member "
+"NavigationMesh.geometry_source_geometry_mode] properties on the "
"[NavigationMesh] resource."
msgstr ""
@@ -36659,8 +37006,21 @@ msgstr ""
#: doc/classes/NavigationMeshInstance.xml
msgid ""
"An instance of a [NavigationMesh]. It tells the [Navigation] node what can "
-"be navigated and what cannot, based on the [NavigationMesh] resource. This "
-"should be a child of a [Navigation] node."
+"be navigated and what cannot, based on the [NavigationMesh] resource.\n"
+"By default this node will register to the default [World] navigation map. If "
+"this node is a child of a [Navigation] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method NavigationServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The cost of entering this region from another region can be controlled with "
+"the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The cost of traveling distances inside this region can be controlled with "
+"the [member travel_cost] multiplier."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
@@ -36689,10 +37049,34 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding enters this region's navmesh from another regions navmesh "
+"the [code]enter_cost[/code] value is added to the path distance for "
+"determining the shortest path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationMesh] "
+"belongs to. On path requests with [method NavigationServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
msgid "The [NavigationMesh] resource to use."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding moves inside this region's navmesh the traveled distances "
+"are multiplied with [code]travel_cost[/code] for determining the shortest "
+"path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
msgid "Notifies when the navigation mesh bake operation is completed."
msgstr ""
@@ -36709,7 +37093,9 @@ msgid ""
"3D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationObstacle] is physics safe."
+"[NavigationObstacle] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle.xml
@@ -36749,7 +37135,9 @@ msgid ""
"2D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationObstacle2D] is physics safe."
+"[NavigationObstacle2D] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle2D.xml
@@ -36829,6 +37217,14 @@ msgstr ""
#: doc/classes/NavigationPolygon.xml
msgid ""
+"Returns the [NavigationMesh] resulting from this navigation polygon. This "
+"navmesh can be used to update the navmesh of a region with the [method "
+"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server "
+"behind the scene)."
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml
+msgid ""
"Returns a [PoolVector2Array] containing the vertices of an outline that was "
"created in the editor or by script."
msgstr ""
@@ -36865,6 +37261,30 @@ msgid ""
msgstr ""
#: doc/classes/NavigationPolygonInstance.xml
+msgid "A region of the 2D navigation map."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A region of the navigation map. It tells the [Navigation2DServer] what can "
+"be navigated and what cannot, based on its [NavigationPolygon] resource.\n"
+"By default this node will register to the default [World2D] navigation map. "
+"If this node is a child of a [Navigation2D] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The pathfinding cost of entering this region from another region can be "
+"controlled with the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The pathfinding cost of traveling distances inside this region can be "
+"controlled with the [member travel_cost] multiplier."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
msgid ""
"Returns the [RID] of this region on the [Navigation2DServer]. Combined with "
"[method Navigation2DServer.map_get_closest_point_owner] can be used to "
@@ -36872,6 +37292,22 @@ msgid ""
"navigation map."
msgstr ""
+#: doc/classes/NavigationPolygonInstance.xml
+msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationPolygon] "
+"belongs to. On path requests with [method Navigation2DServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid "The [NavigationPolygon] resource to use."
+msgstr ""
+
#: doc/classes/NavigationServer.xml
msgid "Server interface for low-level 3D navigation access."
msgstr ""
@@ -36947,6 +37383,12 @@ msgid "Bakes the navigation mesh."
msgstr ""
#: doc/classes/NavigationServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method NavigationServer.map_get_path])."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
msgid "Control activation of this server."
msgstr ""
@@ -38413,13 +38855,19 @@ msgstr ""
#: doc/classes/Node.xml
msgid ""
"Emitted when a child node enters the scene tree, either because it entered "
-"on its own or because this node entered with it."
+"on its own or because this node entered with it.\n"
+"This signal is emitted [i]after[/i] the child node's own [constant "
+"NOTIFICATION_ENTER_TREE] and [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
msgid ""
-"Emitted when a child node exits the scene tree, either because it exited on "
-"its own or because this node exited."
+"Emitted when a child node is about to exit the scene tree, either because it "
+"is being removed or freed directly, or because this node is exiting the "
+"tree.\n"
+"When this signal is received, the child [code]node[/code] is still in the "
+"tree and valid. This signal is emitted [i]after[/i] the child node's own "
+"[signal tree_exiting] and [constant NOTIFICATION_EXIT_TREE]."
msgstr ""
#: doc/classes/Node.xml
@@ -38431,7 +38879,10 @@ msgid "Emitted when the node is renamed."
msgstr ""
#: doc/classes/Node.xml
-msgid "Emitted when the node enters the tree."
+msgid ""
+"Emitted when the node enters the tree.\n"
+"This signal is emitted [i]after[/i] the related [constant "
+"NOTIFICATION_ENTER_TREE] notification."
msgstr ""
#: doc/classes/Node.xml
@@ -38441,15 +38892,21 @@ msgstr ""
#: doc/classes/Node.xml
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)."
+"the right place for de-initialization (or a \"destructor\", if you will).\n"
+"This signal is emitted [i]before[/i] the related [constant "
+"NOTIFICATION_EXIT_TREE] notification."
msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node enters a [SceneTree]."
+msgid ""
+"Notification received when the node enters a [SceneTree].\n"
+"This notification is emitted [i]before[/i] the related [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node is about to exit a [SceneTree]."
+msgid ""
+"Notification received when the node is about to exit a [SceneTree].\n"
+"This notification is emitted [i]after[/i] the related [signal tree_exiting]."
msgstr ""
#: doc/classes/Node.xml
@@ -38710,7 +39167,13 @@ msgid "Rotation in degrees, relative to the node's parent."
msgstr ""
#: doc/classes/Node2D.xml
-msgid "The node's scale. Unscaled value: [code](1, 1)[/code]."
+msgid ""
+"The node's scale. Unscaled value: [code](1, 1)[/code].\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
#: doc/classes/Node2D.xml
@@ -40150,6 +40613,10 @@ msgid ""
" if argument.find(\"=\") > -1:\n"
" var key_value = argument.split(\"=\")\n"
" arguments[key_value[0].lstrip(\"--\")] = key_value[1]\n"
+" else:\n"
+" # Options without an argument will be present in the dictionary,\n"
+" # with the value set to an empty string.\n"
+" arguments[argument.lstrip(\"--\")] = \"\"\n"
"[/codeblock]"
msgstr ""
@@ -40803,8 +41270,15 @@ msgstr ""
msgid ""
"Moves the file or directory to the system's recycle bin. See also [method "
"Directory.remove].\n"
+"The method takes only global paths, so you may need to use [method "
+"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/"
+"code] as it will not work in exported project.\n"
"[b]Note:[/b] If the user has disabled the recycle bin on their system, the "
-"file will be permanently deleted instead."
+"file will be permanently deleted instead.\n"
+"[codeblock]\n"
+"var file_to_remove = \"user://slot1.sav\"\n"
+"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/OS.xml
@@ -45655,7 +46129,18 @@ msgstr ""
#: doc/classes/PopupMenu.xml
msgid ""
"[PopupMenu] is a [Control] that displays a list of options. They are popular "
-"in toolbars or context menus."
+"in toolbars or context menus.\n"
+"[b]Incremental search:[/b] Like [ItemList] and [Tree], [PopupMenu] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/PopupMenu.xml
@@ -47162,7 +47647,16 @@ msgid ""
msgstr ""
#: doc/classes/ProjectSettings.xml
-msgid "Message to be displayed before the backtrace when the engine crashes."
+msgid ""
+"Message to be displayed before the backtrace when the engine crashes. By "
+"default, this message is only used in exported projects due to the editor-"
+"only override applied to this setting."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Editor-only override for [member debug/settings/crash_handler/message]. Does "
+"not affect exported projects in debug or release mode."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -47407,6 +47901,18 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default naming style for scene files to infer from their root nodes. "
+"Possible options are:\n"
+"- [code]0[/code] (Auto): Uses the scene root name as is without changing its "
+"casing.\n"
+"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase "
+"casing.\n"
+"- [code]2[/code] (snake_case): Converts the scene root name to snake_case "
+"casing."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -47632,6 +48138,198 @@ msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 1."
msgstr ""
@@ -47840,6 +48538,198 @@ msgid "Optional name for the 2D render layer 9."
msgstr ""
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 1."
msgstr ""
@@ -48107,6 +48997,49 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default cell height for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_height].\n"
+"[b]Note:[/b] Currently not implemented."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 2D navigation maps. See [method "
+"Navigation2DServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell height for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_height]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 3D navigation maps. See [method "
+"NavigationServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default map up vector for 3D navigation maps. See [method NavigationServer."
+"map_set_up]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -48780,20 +49713,28 @@ msgid ""
"cause.\n"
"The default value is a conservative one, so you are advised to tweak it "
"according to the hardware you are targeting.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"The default is a very conservative override for [code]rendering/gles3/"
-"shaders/max_concurrent_compiles[/code].\n"
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
"Depending on the specific devices you are targeting, you may want to raise "
"it.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
+"Depending on the specific browsers you are targeting, you may want to raise "
+"it.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -48801,19 +49742,28 @@ msgid ""
"The maximum size, in megabytes, that the ubershader cache can grow up to. On "
"startup, the least recently used entries will be deleted until the total "
"size is within bounds.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/ubershader_cache_size_mb[/"
-"code], so a smaller maximum size can be configured for mobile platforms, "
-"where storage space is more limited.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for mobile platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for web platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] Currently, shader caching is generally unavailable on web "
+"platforms.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -48845,14 +49795,22 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/shader_compilation_mode[/"
-"code], so asynchronous compilation can be disabled for mobile.\n"
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on mobile platforms.\n"
"You may want to do that since mobile GPUs generally won't support "
"ubershaders due to their complexity."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on web platforms.\n"
+"You may want to do that since certain browsers (especially on mobile "
+"platforms) generally won't support ubershaders due to their complexity."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
@@ -49609,7 +50567,6 @@ msgid ""
"- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/"
"code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, "
"small grid radius values may lead to unwanted groupings.\n"
-"[/codeblock]\n"
"[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more "
"effective and faster [VisibilityNotifier] functionality. For most use cases, "
"[method Vector3.distance_to] or [method Vector3.distance_squared_to] are "
@@ -51760,6 +52717,22 @@ msgid "Makes text fill width."
msgstr ""
#: doc/classes/RichTextLabel.xml
+msgid "Aligns top of the inline image to the top of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns center of the inline image to the center of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns bottom of the inline image to the baseline of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns bottom of the inline image to the bottom of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
msgid "Each list item has a number marker."
msgstr ""
@@ -53497,8 +54470,8 @@ msgid ""
" yield(get_tree().create_timer(1.0), \"timeout\")\n"
" print(\"Timer ended.\")\n"
"[/codeblock]\n"
-"The timer will be automatically freed after its time elapses, so be aware "
-"that any reference you might have kept to it will become invalid."
+"The timer will be dereferenced after its time elapses. To preserve the "
+"timer, you can keep a reference to it. See [Reference]."
msgstr ""
#: doc/classes/SceneTreeTimer.xml
@@ -53530,24 +54503,23 @@ msgid ""
"manually (i.e. by using [code]Tween.new()[/code]) are invalid. They can't be "
"used for tweening values, but you can do manual interpolation with [method "
"interpolate_value].\n"
-"A [SceneTreeTween] animation is composed of a sequence of [Tweener]s, which "
-"by default are executed one after another. You can create a sequence by "
-"appending [Tweener]s to the [SceneTreeTween]. Animating something with a "
-"[Tweener] is called tweening. Example tweening sequence looks like this:\n"
+"A tween animation is created by adding [Tweener]s to the [SceneTreeTween] "
+"object, using [method tween_property], [method tween_interval], [method "
+"tween_callback] or [method tween_method]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1)\n"
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"This sequence will make the [code]$Sprite[/code] node turn red, then shrink "
-"and finally the [method Node.queue_free] is called to remove the sprite. See "
-"methods [method tween_property], [method tween_interval], [method "
-"tween_callback] and [method tween_method] for more usage information.\n"
+"This sequence will make the [code]$Sprite[/code] node turn red, then shrink, "
+"before finally calling [method Node.queue_free] to free the sprite. "
+"[Tweener]s are executed one after another by default. This behavior can be "
+"changed using [method parallel] and [method set_parallel].\n"
"When a [Tweener] is created with one of the [code]tween_*[/code] methods, a "
"chained method call can be used to tweak the properties of this [Tweener]. "
-"For example, if you want to set different transition type in the above "
-"example, you can do:\n"
+"For example, if you want to set a different transition type in the above "
+"example, you can use [method set_trans]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1).set_trans(Tween."
@@ -53556,8 +54528,9 @@ msgid ""
"TRANS_BOUNCE)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Most of the [SceneTreeTween] methods can be chained this way too. In this "
-"example the [SceneTreeTween] is bound and have set a default transition:\n"
+"Most of the [SceneTreeTween] methods can be chained this way too. In the "
+"following example the [SceneTreeTween] is bound to the running script's node "
+"and a default transition is set for its [Tweener]s:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween().bind_node(self).set_trans(Tween."
"TRANS_ELASTIC)\n"
@@ -53565,16 +54538,16 @@ msgid ""
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Another interesting use for [SceneTreeTween]s is animating arbitrary set of "
+"Another interesting use for [SceneTreeTween]s is animating arbitrary sets of "
"objects:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"for sprite in get_children():\n"
-" tween.tween_property(sprite, \"position\", Vector2(), 1)\n"
+" tween.tween_property(sprite, \"position\", Vector2(0, 0), 1)\n"
"[/codeblock]\n"
"In the example above, all children of a node are moved one after another to "
"position (0, 0).\n"
-"Some [Tweener]s use transitions and eases. The first accepts an [enum Tween."
+"Some [Tweener]s use transitions and eases. The first accepts a [enum Tween."
"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 Tween.EaseType] constant, and "
@@ -53586,7 +54559,7 @@ msgid ""
"tween_cheatsheet.png]Tween easing and transition types cheatsheet[/url]\n"
"[b]Note:[/b] All [SceneTreeTween]s will automatically start by default. To "
"prevent a [SceneTreeTween] from autostarting, you can call [method stop] "
-"immediately after it was created."
+"immediately after it is created."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53616,21 +54589,24 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
-"Processes the [SceneTreeTween] by given [code]delta[/code] value, in "
-"seconds. Mostly useful when the [SceneTreeTween] is paused, for controlling "
-"it manually. Can also be used to end the [SceneTreeTween] animation "
-"immediately, by using [code]delta[/code] longer than the whole duration.\n"
+"Processes the [SceneTreeTween] by the given [code]delta[/code] value, in "
+"seconds. This is mostly useful for manual control when the [SceneTreeTween] "
+"is paused. It can also be used to end the [SceneTreeTween] animation "
+"immediately, by setting [code]delta[/code] longer than the whole duration of "
+"the [SceneTreeTween] animation.\n"
"Returns [code]true[/code] if the [SceneTreeTween] still has [Tweener]s that "
"haven't finished.\n"
-"[b]Note:[/b] The [SceneTreeTween] will become invalid after finished, but "
-"you can call [method stop] after the step, to keep it and reset."
+"[b]Note:[/b] The [SceneTreeTween] will become invalid in the next processing "
+"frame after its animation finishes. Calling [method stop] after performing "
+"[method custom_step] instead keeps and resets the [SceneTreeTween]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Returns the total time in seconds the [SceneTreeTween] has been animating (i."
-"e. time since it started, not counting pauses etc.). The time is affected by "
-"[method set_speed_scale] and [method stop] will reset it to [code]0[/code].\n"
+"e. the time since it started, not counting pauses etc.). The time is "
+"affected by [method set_speed_scale], and [method stop] will reset it to "
+"[code]0[/code].\n"
"[b]Note:[/b] As it results from accumulating frame deltas, the time returned "
"after the [SceneTreeTween] has finished animating will be slightly greater "
"than the actual [SceneTreeTween] duration."
@@ -53666,11 +54642,10 @@ msgstr ""
msgid ""
"Returns whether the [SceneTreeTween] is valid. A valid [SceneTreeTween] is a "
"[SceneTreeTween] contained by the scene tree (i.e. the array from [method "
-"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). "
-"[SceneTreeTween] might become invalid when it has finished tweening or was "
-"killed, also when created with [code]Tween.new()[/code]. Invalid "
-"[SceneTreeTween] can't have [Tweener]s appended, because it can't animate "
-"them. You can however still use [method interpolate_value]."
+"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). A "
+"[SceneTreeTween] might become invalid when it has finished tweening, is "
+"killed, or when created with [code]SceneTreeTween.new()[/code]. Invalid "
+"[SceneTreeTween]s can't have [Tweener]s appended."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53710,16 +54685,15 @@ msgstr ""
msgid ""
"Sets the number of times the tweening sequence will be repeated, i.e. "
"[code]set_loops(2)[/code] will run the animation twice.\n"
-"Calling this method without arguments will make the [SceneTreeTween] run "
-"infinitely, until it is either killed by [method kill] or by freeing bound "
-"node, or all the animated objects have been freed (which makes further "
+"Calling this method without arguments will make the [Tween] run infinitely, "
+"until either it is killed with [method kill], the [Tween]'s bound node is "
+"freed, or all the animated objects have been freed (which makes further "
"animation impossible).\n"
"[b]Warning:[/b] Make sure to always add some duration/delay when using "
-"infinite loops. 0-duration looped animations (e.g. single [CallbackTweener] "
-"with no delay or [PropertyTweener] with invalid node) are equivalent to "
-"infinite [code]while[/code] loops and will freeze your game. If a "
-"[SceneTreeTween]'s lifetime depends on some node, always use [method "
-"bind_node]."
+"infinite loops. To prevent the game freezing, 0-duration looped animations "
+"(e.g. a single [CallbackTweener] with no delay) are stopped after a small "
+"number of loops, which may produce unexpected results. If a [Tween]'s "
+"lifetime depends on some node, always use [method bind_node]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53781,10 +54755,10 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Creates and appends an [IntervalTweener]. This method can be used to create "
-"delays in the tween animation, as an alternative for using the delay in "
-"other [Tweener]s or when there's no animation (in which case the "
-"[SceneTreeTween] acts as a timer). [code]time[/code] is the length of the "
-"interval, in seconds.\n"
+"delays in the tween animation, as an alternative to using the delay in other "
+"[Tweener]s, or when there's no animation (in which case the [SceneTreeTween] "
+"acts as a timer). [code]time[/code] is the length of the interval, in "
+"seconds.\n"
"Example: creating an interval in code execution.\n"
"[codeblock]\n"
"# ... some code\n"
@@ -53838,8 +54812,8 @@ msgid ""
"Creates and appends a [PropertyTweener]. This method tweens a "
"[code]property[/code] of an [code]object[/code] between an initial value and "
"[code]final_val[/code] in a span of time equal to [code]duration[/code], in "
-"seconds. The initial value by default is a value at the time the tweening of "
-"the [PropertyTweener] start. For example:\n"
+"seconds. The initial value by default is the property's value at the time "
+"the tweening of the [PropertyTweener] starts. For example:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"tween.tween_property($Sprite, \"position\", Vector2(100, 200), 1)\n"
@@ -53870,16 +54844,15 @@ msgid ""
"Emitted when the [SceneTreeTween] has finished all tweening. Never emitted "
"when the [SceneTreeTween] is set to infinite looping (see [method "
"set_loops]).\n"
-"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) after this signal "
-"is emitted, but it doesn't happen immediately, but on the next processing "
-"frame. Calling [method stop] inside the signal callback will preserve the "
-"[SceneTreeTween]."
+"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) in the next "
+"processing frame after this signal is emitted. Calling [method stop] inside "
+"the signal callback will prevent the [SceneTreeTween] from being removed."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Emitted when a full loop is complete (see [method set_loops]), providing the "
-"loop index. This signal is not emitted after final loop, use [signal "
+"loop index. This signal is not emitted after the final loop, use [signal "
"finished] instead for this case."
msgstr ""
@@ -53887,7 +54860,7 @@ msgstr ""
msgid ""
"Emitted when one step of the [SceneTreeTween] is complete, providing the "
"step index. One step is either a single [Tweener] or a group of [Tweener]s "
-"running parallelly."
+"running in parallel."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -55219,7 +56192,12 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-msgid "Scale part of the local transformation."
+msgid ""
+"Scale part of the local transformation.\n"
+"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, the scale values will either be all "
+"positive or all negative."
msgstr ""
#: doc/classes/Spatial.xml
@@ -57850,11 +58828,11 @@ msgstr ""
msgid ""
"Returns [code]true[/code] if this string contains a valid integer.\n"
"[codeblock]\n"
-"print(\"7\".is_valid_int()) # Prints \"True\"\n"
-"print(\"14.6\".is_valid_int()) # Prints \"False\"\n"
-"print(\"L\".is_valid_int()) # Prints \"False\"\n"
-"print(\"+3\".is_valid_int()) # Prints \"True\"\n"
-"print(\"-12\".is_valid_int()) # Prints \"True\"\n"
+"print(\"7\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"14.6\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"L\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"+3\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"-12\".is_valid_integer()) # Prints \"True\"\n"
"[/codeblock]"
msgstr ""
@@ -61320,6 +62298,10 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml
+msgid "If [code]true[/code], this TileMap bakes a navigation region."
+msgstr ""
+
+#: doc/classes/TileMap.xml
msgid "If [code]true[/code], the cell's UVs will be clipped."
msgstr ""
@@ -61426,6 +62408,10 @@ msgid "The TileMap orientation mode. See [enum Mode] for possible values."
msgstr ""
#: doc/classes/TileMap.xml
+msgid "The navigation layers the TileMap generates its navigation regions in."
+msgstr ""
+
+#: doc/classes/TileMap.xml
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 "
@@ -62557,7 +63543,12 @@ msgstr ""
#: doc/classes/Transform2D.xml
msgid ""
"Returns a copy of the transform scaled by the given [code]scale[/code] "
-"factor, using matrix multiplication."
+"factor, using matrix multiplication.\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
#: doc/classes/Transform2D.xml
@@ -62712,7 +63703,18 @@ msgid ""
"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]."
+"to remove it from the [Tree].\n"
+"[b]Incremental search:[/b] Like [ItemList] and [PopupMenu], [Tree] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/Tree.xml
@@ -66228,11 +67230,12 @@ msgid "This enabler will stop [Particles2D] nodes."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _process function."
+msgid "This enabler will stop the parent's [method Node._process] function."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _physics_process function."
+msgid ""
+"This enabler will stop the parent's [method Node._physics_process] function."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
@@ -66272,6 +67275,16 @@ msgid "The VisibilityNotifier's bounding box."
msgstr ""
#: doc/classes/VisibilityNotifier.xml
+msgid ""
+"In addition to checking whether a node is on screen or within a [Camera]'s "
+"view, VisibilityNotifier can also optionally check whether a node is within "
+"a specified maximum distance when using a [Camera] with perspective "
+"projection. This is useful for throttling the performance requirements of "
+"nodes that are far away.\n"
+"[b]Note:[/b] This feature will be disabled if set to 0.0."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier.xml
msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view."
msgstr ""
@@ -71017,6 +72030,16 @@ msgid "The amount of shader rebinds in the frame."
msgstr ""
#: doc/classes/VisualServer.xml
+msgid ""
+"The peak amount of shaders that have been under compilation in the frame.\n"
+"This is useful to know when asynchronous shader compilation has finished for "
+"the current shaders on screen.\n"
+"[b]Note:[/b] For complete certainty, only assume there are no outstanding "
+"compilations when this value is zero for at least two frames in a row.\n"
+"Unimplemented in the GLES2 rendering backend, always returns 0."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
msgid "The amount of surface changes in the frame."
msgstr ""
@@ -74213,8 +75236,8 @@ msgstr ""
#: doc/classes/World.xml
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."
+"scenario, a navigation map and a sound space. Spatial nodes register their "
+"resources into the current world."
msgstr ""
#: doc/classes/World.xml
@@ -74229,8 +75252,13 @@ msgstr ""
#: doc/classes/World.xml
msgid ""
-"The World's fallback_environment will be used if the World's [Environment] "
-"fails or is missing."
+"The World's fallback environment will be used if [member environment] fails "
+"or is missing."
+msgstr ""
+
+#: doc/classes/World.xml
+msgid ""
+"The [RID] of this world's navigation map. Used by the [NavigationServer]."
msgstr ""
#: doc/classes/World.xml
@@ -74248,8 +75276,8 @@ msgstr ""
#: doc/classes/World2D.xml
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."
+"visual scenario, a navigation map and a sound space. 2D nodes register their "
+"resources into the current 2D world."
msgstr ""
#: doc/classes/World2D.xml
@@ -74267,6 +75295,11 @@ msgstr ""
#: doc/classes/World2D.xml
msgid ""
+"The [RID] of this world's navigation map. Used by the [Navigation2DServer]."
+msgstr ""
+
+#: doc/classes/World2D.xml
+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 ""
diff --git a/doc/translations/fi.po b/doc/translations/fi.po
index 316c56f70e..9c41935f5e 100644
--- a/doc/translations/fi.po
+++ b/doc/translations/fi.po
@@ -422,7 +422,7 @@ msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
msgid ""
"Compares two values by checking their actual contents, recursing into any "
-"`Array` or `Dictionary` up to its deepest level.\n"
+"[Array] or [Dictionary] up to its deepest level.\n"
"This compares to [code]==[/code] in a number of ways:\n"
"- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/"
"code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] "
@@ -469,7 +469,7 @@ msgid ""
"- 1.0: Linear\n"
"- Greater than 1.0 (exclusive): Ease in\n"
"[/codeblock]\n"
-"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.4/img/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/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]."
@@ -1176,7 +1176,7 @@ msgid ""
"[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/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/img/"
"smoothstep_ease_comparison.png]Comparison between smoothstep() and ease(x, "
"-1.6521) return values[/url]"
msgstr ""
@@ -3454,6 +3454,12 @@ msgstr ""
#: doc/classes/@GlobalScope.xml
msgid ""
+"Hints that an integer property is a bitmask using the optionally named 2D "
+"navigation layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml
+msgid ""
"Hints that an integer property is a bitmask using the optionally named 3D "
"render layers."
msgstr ""
@@ -3466,6 +3472,12 @@ msgstr ""
#: doc/classes/@GlobalScope.xml
msgid ""
+"Hints that an integer property is a bitmask using the optionally named 3D "
+"navigation layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml
+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]."
@@ -8449,7 +8461,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/AStar.xml
+#: doc/classes/AStar.xml doc/classes/AStar2D.xml
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[/"
@@ -8648,7 +8660,10 @@ msgid ""
msgstr ""
#: doc/classes/AStar2D.xml
-msgid "Returns whether there is a connection/segment between the given points."
+msgid ""
+"Returns whether there is a connection/segment between the given points. 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/AStar2D.xml
@@ -8665,10 +8680,6 @@ msgid ""
msgstr ""
#: doc/classes/AStar2D.xml
-msgid "Deletes the segment between the given points."
-msgstr ""
-
-#: doc/classes/AStar2D.xml
msgid ""
"Returns the closest position to [code]to_position[/code] that resides inside "
"a segment between two connected points.\n"
@@ -8853,7 +8864,9 @@ msgid ""
"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."
+"transmit audio over the network. When capturing audio data from a "
+"microphone, the format of the samples will be stereo 32-bit floating point "
+"PCM."
msgstr ""
#: doc/classes/AudioEffectCapture.xml
@@ -13705,7 +13718,7 @@ msgid ""
msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
-#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/Navigation2D.xml
msgid "Returns the object's [RID]."
msgstr ""
@@ -19190,11 +19203,15 @@ msgid ""
msgstr ""
#: doc/classes/CurveTexture.xml
-msgid "The [code]curve[/code] rendered onto the texture."
-msgstr ""
+#, fuzzy
+msgid "The [Curve] that is rendered onto the texture."
+msgstr "Palauttaa parametrin sinin."
#: doc/classes/CurveTexture.xml
-msgid "The width of the texture."
+msgid ""
+"The width of the texture (in pixels). Higher values make it possible to "
+"represent high-frequency data better (such as sudden direction changes), at "
+"the cost of increased generation time and memory usage."
msgstr ""
#: doc/classes/CylinderMesh.xml
@@ -19480,6 +19497,13 @@ msgid "Returns the list of keys in the [Dictionary]."
msgstr ""
#: doc/classes/Dictionary.xml
+msgid ""
+"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, "
+"duplicate keys will not be copied over, unless [code]overwrite[/code] is "
+"[code]true[/code]."
+msgstr ""
+
+#: doc/classes/Dictionary.xml
#, fuzzy
msgid "Returns the number of keys in the dictionary."
msgstr "Palauttaa kahden vektorin jäännöksen."
@@ -21420,9 +21444,23 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide a state data you want to be saved, like view "
+"position, grid settings, folding, etc. 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). This data is automatically saved for "
+"each scene in an [code]editstate[/code] file in the editor metadata folder. "
+"If you want to store global (scene-independent) editor data for your plugin, "
+"you can use [method get_window_layout] instead.\n"
+"Use [method set_state] to restore your saved state.\n"
+"[b]Note:[/b] This method should not be used to save important settings that "
+"should persist with the project.\n"
+"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be "
+"stored and restored correctly.\n"
+"[codeblock]\n"
+"func get_state():\n"
+" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n"
+" return state\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -21433,9 +21471,18 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide the GUI layout of the plugin or any other "
+"data you want to be stored. 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). The data is stored in the "
+"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n"
+"Use [method set_window_layout] to restore your saved layout.\n"
+"[codeblock]\n"
+"func get_window_layout(configuration):\n"
+" configuration.set_value(\"MyPlugin\", \"window_position\", $Window."
+"position)\n"
+" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -21548,11 +21595,30 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the state saved by [method get_state]."
+msgid ""
+"Restore the state saved by [method get_state]. This method is called when "
+"the current scene tab is changed in the editor.\n"
+"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise "
+"it will not be recognized and this method will not be called.\n"
+"[codeblock]\n"
+"func set_state(data):\n"
+" zoom = data.get(\"zoom\", 1.0)\n"
+" preferred_color = data.get(\"my_color\", Color.white)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the plugin GUI layout saved by [method get_window_layout]."
+msgid ""
+"Restore the plugin GUI layout and data saved by [method get_window_layout]. "
+"This method is called for every plugin on editor startup. Use the provided "
+"[code]configuration[/code] file to read your saved data.\n"
+"[codeblock]\n"
+"func set_window_layout(configuration):\n"
+" $Window.position = configuration.get_value(\"MyPlugin\", "
+"\"window_position\", Vector2())\n"
+" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", "
+"Color.white)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -26199,7 +26265,8 @@ msgid ""
"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])."
+"at fixed steps (see [member width]). See also [GradientTexture2D] and "
+"[CurveTexture]."
msgstr ""
#: doc/classes/GradientTexture.xml
@@ -26221,7 +26288,8 @@ msgid ""
"repeat] types using colors obtained from the gradient. 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] and [member height])."
+"[member width] and [member height]). See also [GradientTexture] and "
+"[CurveTexture]."
msgstr ""
#: doc/classes/GradientTexture2D.xml
@@ -27035,6 +27103,12 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+msgid ""
+"If [code]true[/code], this GridMap uses cell navmesh resources to create "
+"navigation regions."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid "If [code]true[/code], grid items are centered on the X axis."
msgstr ""
@@ -27085,6 +27159,10 @@ msgid "The assigned [MeshLibrary]."
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+msgid "The navigation layers the GridMap generates its navigation regions in."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
"Overrides the default friction and bounce physics properties for the whole "
"[GridMap]."
@@ -28308,7 +28386,7 @@ msgid ""
" # 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 body = to_json({\"name\": \"Godette\"})\n"
" error = http_request.request(\"https://httpbin.org/post\", [], true, "
"HTTPClient.METHOD_POST, body)\n"
" if error != OK:\n"
@@ -29477,7 +29555,7 @@ msgstr ""
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 "
+"([member 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 "
@@ -29626,10 +29704,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Returns the mouse mode. See the constants for more information."
-msgstr ""
-
-#: doc/classes/Input.xml
msgid ""
"Gets an input vector by specifying four actions for the positive and "
"negative X and Y axes.\n"
@@ -29823,24 +29897,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Sets the mouse mode. See the constants for more information."
-msgstr ""
-
-#: doc/classes/Input.xml
-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
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 "
@@ -29876,6 +29932,24 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
+msgid "Controls the mouse mode. See [enum MouseMode] for more information."
+msgstr ""
+
+#: doc/classes/Input.xml
+msgid ""
+"If [code]true[/code], similar input events sent by the operating system are "
+"accumulated. 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 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
msgid "Emitted when a joypad device has been connected or disconnected."
msgstr ""
@@ -30183,8 +30257,8 @@ msgstr ""
#: doc/classes/InputEventJoypadButton.xml
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]."
+"Represents the pressure the user puts on the button with their finger, if "
+"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]."
msgstr ""
#: doc/classes/InputEventJoypadMotion.xml
@@ -30447,9 +30521,9 @@ 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 "
+"at most. If you need more precise input reporting, set [member Input."
+"use_accumulated_input] to [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."
@@ -30937,7 +31011,18 @@ msgid ""
"[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."
+"fixed_column_width] greater than zero to wrap the text.\n"
+"[b]Incremental search:[/b] Like [PopupMenu] and [Tree], [ItemList] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/ItemList.xml
@@ -34689,12 +34774,18 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Returns the override [Material] for a surface of the [Mesh] resource.\n"
+"[b]Note:[/b] This function only returns [i]override[/i] materials associated "
+"with this [MeshInstance]. Consider using [method get_active_material] or "
+"[method Mesh.surface_get_material] to get materials associated with the "
+"[Mesh] resource."
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the number of surface materials."
-msgstr ""
+#, fuzzy
+msgid "Returns the number of surface override materials."
+msgstr "Palauttaa kahden vektorin jäännöksen."
#: doc/classes/MeshInstance.xml
msgid ""
@@ -34730,7 +34821,10 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Sets the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Sets the override [Material] for the specified surface of the [Mesh] "
+"resource. This material is associated with this [MeshInstance] rather than "
+"with the [Mesh] resource."
msgstr ""
#: doc/classes/MeshInstance.xml
@@ -34761,9 +34855,10 @@ msgstr ""
#: doc/classes/MeshInstance2D.xml
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\"."
+"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be "
+"automatically created from an existing [Sprite] via a tool in the editor "
+"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to "
+"MeshInstance2D[/b] at the top of the 2D editor viewport."
msgstr ""
#: doc/classes/MeshInstance2D.xml
@@ -35522,6 +35617,9 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"Provides navigation and pathfinding within a collection of "
"[NavigationMesh]es. By default, these will be automatically collected from "
"child [NavigationMeshInstance] nodes. In addition to basic pathfinding, this "
@@ -35562,7 +35660,15 @@ msgid ""
msgstr ""
#: doc/classes/Navigation.xml
+#, fuzzy
+msgid "Returns the [RID] of the navigation map on the [NavigationServer]."
+msgstr "Palauttaa parametrin sinin."
+
+#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"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, "
@@ -35584,16 +35690,31 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation.get_simple_path] path query."
+msgstr ""
+
+#: doc/classes/Navigation.xml
+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/Navigation.xml doc/classes/Navigation2DServer.xml
+#: doc/classes/NavigationServer.xml
+msgid ""
+"Emitted when a navigation map is updated, when a region moves or is modified."
+msgstr ""
+
#: doc/classes/Navigation2D.xml
msgid "2D navigation and pathfinding node."
msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -35613,6 +35734,9 @@ msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -35622,6 +35746,12 @@ msgstr ""
msgid "The XY plane cell size to use for fields."
msgstr ""
+#: doc/classes/Navigation2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation2D.get_simple_path] path query."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml
msgid "Server interface for low-level 2D navigation access."
msgstr ""
@@ -35638,8 +35768,12 @@ msgid ""
"through scripts.\n"
"For two regions to be connected to each other, they must share a similar "
"edge. An edge is considered connected to another if both of its two vertices "
-"are at a distance less than [member Navigation.edge_connection_margin] to "
-"the respective other edge's vertex.\n"
+"are at a distance less than navigation map [code]edge_connection_margin[/"
+"code] to the respective other edge's vertex.\n"
+"You may assign navigation layers to regions with [method Navigation2DServer."
+"region_set_navigation_layers], which then can be checked upon when "
+"requesting a path with [method Navigation2DServer.map_get_path]. This allows "
+"allowing or forbidding some areas to 2D objects.\n"
"To use the collision avoidance system, you may use agents. You can set an "
"agent's target velocity, then the servers will emit a callback with a "
"modified velocity.\n"
@@ -35667,7 +35801,17 @@ msgid "Returns [code]true[/code] if the map got changed the previous frame."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Callback called at the end of the RVO process."
+msgid ""
+"Callback called at the end of the RVO process. If a callback is created "
+"manually and the agent is placed on a navigation map it will calculate "
+"avoidance for the agent and dispatch the calculated [code]safe_velocity[/"
+"code] to the [code]receiver[/code] object with a signal to the chosen "
+"[code]method[/code] name.\n"
+"[b]Note:[/b] Created callbacks are always processed independently of the "
+"SceneTree state as long as the agent is on a navigation map and not freed. "
+"To disable the dispatch of a callback from an agent use [method "
+"agent_set_callback] again with a [code]null[/code] object as the "
+"[code]receiver[/code]."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -35728,15 +35872,55 @@ msgid "Destroys the given RID."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns all created navigation map [RID]s on the NavigationServer. This "
+"returns both 2D and 3D created navigation maps as there is technically no "
+"distinction between them."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Create a new map."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"This function immediately forces synchronization of the specified navigation "
+"[code]map[/code] [RID]. By default navigation maps are only synchronized at "
+"the end of each physics frame. This function can be used to immediately "
+"(re)calculate all the navigation meshes and region connections of the "
+"navigation map. This makes it possible to query a navigation path for a "
+"changed map immediately and in the same frame (multiple times if needed).\n"
+"Due to technical restrictions the current NavigationServer command queue "
+"will be flushed. This means all already queued update commands for this "
+"physics frame will be executed, even those intended for other maps, regions "
+"and agents not part of the specified map. The expensive computation of the "
+"navigation meshes and region connections of a map will only be done for the "
+"specified map. Other maps will receive the normal synchronization at the end "
+"of the physics frame. Should the specified map receive changes after the "
+"forced update it will update again as well when the other maps receive their "
+"update.\n"
+"Avoidance processing and dispatch of the [code]safe_velocity[/code] signals "
+"is untouched by this function and continues to happen for all maps and "
+"agents at the end of the physics frame.\n"
+"[b]Note:[/b] With great power comes great responsibility. This function "
+"should only be used by users that really know what they are doing and have a "
+"good reason for it. Forcing an immediate update of a navigation map requires "
+"locking the NavigationServer and flushing the entire NavigationServer "
+"command queue. Not only can this severely impact the performance of a game "
+"but it can also introduce bugs if used inappropriately without much "
+"foresight."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns all navigation agents [RID]s that are currently assigned to the "
"requested navigation [code]map[/code]."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
#, fuzzy
msgid "Returns the map cell size."
@@ -35761,7 +35945,10 @@ msgid ""
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Returns the navigation path to reach the destination from the origin."
+msgid ""
+"Returns the navigation path to reach the destination from the origin. "
+"[code]navigation_layers[/code] is a bitmask of all region layers that are "
+"allowed to be in the path."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -35780,6 +35967,12 @@ msgstr "Palauttaa parametrin kosinin."
msgid "Sets the map active."
msgstr "Palauttaa parametrin arkussinin."
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/"
+"b] Currently not implemented."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Set the map cell size used to weld the navigation mesh polygons."
msgstr ""
@@ -35795,15 +35988,78 @@ msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"Returns the ending point of a connection door. [code]connection[/code] is an "
+"index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns the starting point of a connection door. [code]connection[/code] is "
+"an index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns how many connections this [code]region[/code] has with other regions "
+"in the map."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]."
+msgstr "Laskee kahden vektorin ristitulon."
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns the navigation map [RID] the requested [code]region[/code] is "
"currently assigned to."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
#, fuzzy
+msgid "Returns the region's navigation layers."
+msgstr "Palauttaa parametrin sinin."
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]."
+msgstr "Laskee kahden vektorin ristitulon."
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns [code]true[/code] if the provided [code]point[/code] in world space "
+"is currently owned by the provided navigation [code]region[/code]. Owned in "
+"this context means that one of the region's navigation mesh polygon faces "
+"has a possible position at the closest distance to this point compared to "
+"all other navigation meshes from other navigation regions that are also "
+"registered on the navigation map of the provided region.\n"
+"If multiple navigation meshes have positions at equal distance the "
+"navigation region whose polygons are processed first wins the ownership. "
+"Polygons are processed in the same order that navigation regions were "
+"registered on the NavigationServer.\n"
+"[b]Note:[/b] If navigation meshes from different navigation regions overlap "
+"(which should be avoided in general) the result might not be what is "
+"expected."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]."
+msgstr "Laskee kahden vektorin ristitulon."
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
msgid "Sets the map for the region."
msgstr "Palauttaa parametrin sinin."
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method Navigation2DServer.map_get_path])."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
#, fuzzy
msgid "Sets the navigation mesh for the region."
@@ -35814,6 +36070,11 @@ msgstr "Palauttaa parametrin vasta-arvon."
msgid "Sets the global transformation for the region."
msgstr "Laskee kahden vektorin ristitulon."
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]."
+msgstr "Laskee kahden vektorin ristitulon."
+
#: doc/classes/NavigationAgent.xml
msgid "3D agent used in navigation for collision avoidance."
msgstr ""
@@ -35823,9 +36084,16 @@ msgid ""
"3D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationAgent] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World] navigation map. If this node is a child of a [Navigation] "
+"node it will register to the navigation map of the navigation node or the "
+"function [method set_navigation] can be used to set the navigation node "
+"directly. [NavigationAgent] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -35843,7 +36111,15 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-msgid "Returns the path from start to finish in global coordinates."
+msgid ""
+"Returns this agent's current path from start to finish in global "
+"coordinates. The path only updates when the target location is changed or "
+"the agent requires a repath. The path array is not intended to be used in "
+"direct path movement as the agent has its own internal path logic that would "
+"get corrupted by changing the path array manually. Use the intended [method "
+"get_next_location] once every physics frame to receive the next path point "
+"for the agents movement as this function also updates the internal path "
+"logic."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -35859,11 +36135,24 @@ msgid ""
"system."
msgstr ""
-#: doc/classes/NavigationAgent.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"Returns a [Vector3] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the origin of the agent's parent."
+"Returns the [RID] of the navigation map for this NavigationAgent node. This "
+"function returns always the map set on the NavigationAgent node and not the "
+"map of the abstract agent on the NavigationServer. If the agent map is "
+"changed directly with the NavigationServer API the NavigationAgent node will "
+"not be aware of the map change. Use [method set_navigation_map] to change "
+"the navigation map for the NavigationAgent and also update the agent on the "
+"NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
+"Returns the next location in global coordinates that can be moved to, making "
+"sure that there are no static objects in the way. If the agent does not have "
+"a navigation path, it will return the position of the agent's parent. The "
+"use of this function once every physics frame is required to update the "
+"internal path logic of the NavigationAgent."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -35905,6 +36194,12 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"Sets the [RID] of the navigation map this NavigationAgent node should use "
+"and also updates the [code]agent[/code] on the NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"Sets the user desired final location. This will clear the current navigation "
"path."
msgstr ""
@@ -35917,7 +36212,13 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml
-msgid "The agent height offset to match the navigation mesh height."
+msgid ""
+"The NavigationAgent height offset is subtracted from the y-axis value of any "
+"vector path position for this NavigationAgent. The NavigationAgent height "
+"offset does not change or influence the navigation mesh or pathfinding query "
+"result. Additional navigation maps that use regions with navigation meshes "
+"that the developer baked with appropriate agent radius or height values are "
+"required to support different-sized agents."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -35944,26 +36245,53 @@ msgstr ""
msgid "The maximum speed that an agent can move."
msgstr ""
+#: doc/classes/NavigationAgent.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "The distance to search for other agents."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"The distance threshold before a path point is considered to be reached. This "
+"will allow an agent to not have to hit a path point on the path exactly, but "
+"in the area. If this value is set to high the NavigationAgent will skip "
+"points on the path which can lead to leaving the navigation mesh. If this "
+"value is set to low the NavigationAgent will be stuck in a repath loop cause "
+"it will constantly overshoot or undershoot the distance to the next point on "
+"each physics frame update."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"The maximum distance the agent is allowed away from the ideal path to the "
"final location. This can happen due to trying to avoid collisions. When the "
"maximum distance is exceeded, it recalculates the ideal path."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-msgid "The radius of the agent."
+msgid ""
+"The radius of the avoidance agent. This is the \"body\" of the avoidance "
+"agent and not the avoidance maneuver starting radius (which is controlled by "
+"[member neighbor_dist]).\n"
+"Does not affect normal pathfinding. To change an actor's pathfinding radius "
+"bake [NavigationMesh] resources with a different [member NavigationMesh."
+"agent_radius] property and use different navigation maps for each actor size."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"The distance threshold before a target is considered to be reached. This "
-"will allow an agent to not have to hit a point on the path exactly, but in "
-"the area."
+"The distance threshold before the final target point is considered to be "
+"reached. This will allow an agent to not have to hit the point of the final "
+"target exactly, but only the area. If this value is set to low the "
+"NavigationAgent will be stuck in a repath loop cause it will constantly "
+"overshoot or undershoot the distance to the final target point on each "
+"physics frame update."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -36006,9 +36334,16 @@ msgid ""
"2D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationAgent2D] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World2D] navigation map. If this node is a child of a "
+"[Navigation2D] node it will register to the navigation map of the navigation "
+"node or the function [method set_navigation] can be used to set the "
+"navigation node directly. [NavigationAgent2D] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent2D.xml
@@ -36025,13 +36360,6 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent2D.xml
-msgid ""
-"Returns a [Vector2] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the position of the agent's parent."
-msgstr ""
-
-#: doc/classes/NavigationAgent2D.xml
#, fuzzy
msgid "Returns the [RID] of this agent on the [Navigation2DServer]."
msgstr "Palauttaa parametrin sinin."
@@ -36052,6 +36380,13 @@ msgid ""
"only be enabled on agents that currently require it."
msgstr ""
+#: doc/classes/NavigationAgent2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent2D] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationMesh.xml
msgid "A mesh to approximate the walkable areas and obstacles."
msgstr ""
@@ -36082,8 +36417,8 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
-"Returns whether the specified [code]bit[/code] of the [member geometry/"
-"collision_mask] is set."
+"Returns whether the specified [code]bit[/code] of the [member "
+"geometry_collision_mask] is set."
msgstr ""
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
@@ -36106,9 +36441,9 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/"
-"code] in the [member geometry/collision_mask].\n"
+"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]."
+"code] in the [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
@@ -36122,14 +36457,14 @@ 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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36141,7 +36476,7 @@ 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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36169,13 +36504,17 @@ msgstr ""
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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
-"If [code]true[/code], marks walkable spans as not walkable if the clearance "
-"above the span is less than [member agent/height]."
+"If the baking [AABB] has a volume the navigation mesh baking will be "
+"restricted to its enclosing area."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+msgid "The position offset applied to the [member filter_baking_aabb] [AABB]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36185,13 +36524,19 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]true[/code], marks non-walkable spans as walkable if their maximum "
-"is within [member agent/max_climb] of a walkable neighbor."
+"is within [member agent_max_climb] of a walkable neighbor."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+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
msgid ""
"The physics layers to scan for static colliders.\n"
-"Only used when [member geometry/parsed_geometry_type] is [constant "
+"Only used when [member geometry_parsed_geometry_type] is [constant "
"PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]."
msgstr ""
@@ -36210,7 +36555,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"The name of the group to scan for geometry.\n"
-"Only used when [member geometry/source_geometry_mode] is [constant "
+"Only used when [member geometry_source_geometry_mode] is [constant "
"SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant "
"SOURCE_GEOMETRY_GROUPS_EXPLICIT]."
msgstr ""
@@ -36273,7 +36618,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Parses [StaticBody] colliders as geometry. The collider should be in any of "
-"the layers specified by [member geometry/collision_mask]."
+"the layers specified by [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36295,13 +36640,13 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Scans nodes in a group and their child nodes recursively for geometry. The "
-"group is specified by [member geometry/source_group_name]."
+"group is specified by [member geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Uses nodes in a group for geometry. The group is specified by [member "
-"geometry/source_group_name]."
+"geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36343,7 +36688,15 @@ msgid ""
"geometry for walkable terrain suitable to [NavigationMesh] agent properties "
"by creating a voxel world around the meshes bounding area.\n"
"The finalized navigation mesh is then returned and stored inside the "
-"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes."
+"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] "
+"nodes.\n"
+"[b]Note:[/b] Using meshes to not only define walkable surfaces but also "
+"obstruct navigation baking does not always work. The navigation baking has "
+"no concept of what is a geometry \"inside\" when dealing with mesh source "
+"geometry and this is intentional. Depending on current baking parameters, as "
+"soon as the obstructing mesh is large enough to fit a navigation mesh area "
+"inside, the baking will generate navigation mesh areas that are inside the "
+"obstructing source geometry mesh."
msgstr ""
#: doc/classes/NavigationMeshGenerator.xml
@@ -36351,8 +36704,8 @@ msgid ""
"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child "
"nodes under the provided [code]root_node[/code] or a specific group of nodes "
"for potential source geometry. The parse behavior can be controlled with the "
-"[member NavigationMesh.geometry/parsed_geometry_type] and [member "
-"NavigationMesh.geometry/source_geometry_mode] properties on the "
+"[member NavigationMesh.geometry_parsed_geometry_type] and [member "
+"NavigationMesh.geometry_source_geometry_mode] properties on the "
"[NavigationMesh] resource."
msgstr ""
@@ -36370,8 +36723,21 @@ msgstr ""
#: doc/classes/NavigationMeshInstance.xml
msgid ""
"An instance of a [NavigationMesh]. It tells the [Navigation] node what can "
-"be navigated and what cannot, based on the [NavigationMesh] resource. This "
-"should be a child of a [Navigation] node."
+"be navigated and what cannot, based on the [NavigationMesh] resource.\n"
+"By default this node will register to the default [World] navigation map. If "
+"this node is a child of a [Navigation] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method NavigationServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The cost of entering this region from another region can be controlled with "
+"the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The cost of traveling distances inside this region can be controlled with "
+"the [member travel_cost] multiplier."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
@@ -36400,10 +36766,34 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding enters this region's navmesh from another regions navmesh "
+"the [code]enter_cost[/code] value is added to the path distance for "
+"determining the shortest path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationMesh] "
+"belongs to. On path requests with [method NavigationServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
msgid "The [NavigationMesh] resource to use."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding moves inside this region's navmesh the traveled distances "
+"are multiplied with [code]travel_cost[/code] for determining the shortest "
+"path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
msgid "Notifies when the navigation mesh bake operation is completed."
msgstr ""
@@ -36420,7 +36810,9 @@ msgid ""
"3D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationObstacle] is physics safe."
+"[NavigationObstacle] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle.xml
@@ -36461,7 +36853,9 @@ msgid ""
"2D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationObstacle2D] is physics safe."
+"[NavigationObstacle2D] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle2D.xml
@@ -36542,6 +36936,14 @@ msgstr ""
#: doc/classes/NavigationPolygon.xml
msgid ""
+"Returns the [NavigationMesh] resulting from this navigation polygon. This "
+"navmesh can be used to update the navmesh of a region with the [method "
+"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server "
+"behind the scene)."
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml
+msgid ""
"Returns a [PoolVector2Array] containing the vertices of an outline that was "
"created in the editor or by script."
msgstr ""
@@ -36578,6 +36980,30 @@ msgid ""
msgstr ""
#: doc/classes/NavigationPolygonInstance.xml
+msgid "A region of the 2D navigation map."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A region of the navigation map. It tells the [Navigation2DServer] what can "
+"be navigated and what cannot, based on its [NavigationPolygon] resource.\n"
+"By default this node will register to the default [World2D] navigation map. "
+"If this node is a child of a [Navigation2D] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The pathfinding cost of entering this region from another region can be "
+"controlled with the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The pathfinding cost of traveling distances inside this region can be "
+"controlled with the [member travel_cost] multiplier."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
msgid ""
"Returns the [RID] of this region on the [Navigation2DServer]. Combined with "
"[method Navigation2DServer.map_get_closest_point_owner] can be used to "
@@ -36585,6 +37011,22 @@ msgid ""
"navigation map."
msgstr ""
+#: doc/classes/NavigationPolygonInstance.xml
+msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationPolygon] "
+"belongs to. On path requests with [method Navigation2DServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid "The [NavigationPolygon] resource to use."
+msgstr ""
+
#: doc/classes/NavigationServer.xml
msgid "Server interface for low-level 3D navigation access."
msgstr ""
@@ -36664,6 +37106,12 @@ msgid "Bakes the navigation mesh."
msgstr ""
#: doc/classes/NavigationServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method NavigationServer.map_get_path])."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
msgid "Control activation of this server."
msgstr ""
@@ -38130,13 +38578,19 @@ msgstr ""
#: doc/classes/Node.xml
msgid ""
"Emitted when a child node enters the scene tree, either because it entered "
-"on its own or because this node entered with it."
+"on its own or because this node entered with it.\n"
+"This signal is emitted [i]after[/i] the child node's own [constant "
+"NOTIFICATION_ENTER_TREE] and [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
msgid ""
-"Emitted when a child node exits the scene tree, either because it exited on "
-"its own or because this node exited."
+"Emitted when a child node is about to exit the scene tree, either because it "
+"is being removed or freed directly, or because this node is exiting the "
+"tree.\n"
+"When this signal is received, the child [code]node[/code] is still in the "
+"tree and valid. This signal is emitted [i]after[/i] the child node's own "
+"[signal tree_exiting] and [constant NOTIFICATION_EXIT_TREE]."
msgstr ""
#: doc/classes/Node.xml
@@ -38148,7 +38602,10 @@ msgid "Emitted when the node is renamed."
msgstr ""
#: doc/classes/Node.xml
-msgid "Emitted when the node enters the tree."
+msgid ""
+"Emitted when the node enters the tree.\n"
+"This signal is emitted [i]after[/i] the related [constant "
+"NOTIFICATION_ENTER_TREE] notification."
msgstr ""
#: doc/classes/Node.xml
@@ -38158,15 +38615,21 @@ msgstr ""
#: doc/classes/Node.xml
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)."
+"the right place for de-initialization (or a \"destructor\", if you will).\n"
+"This signal is emitted [i]before[/i] the related [constant "
+"NOTIFICATION_EXIT_TREE] notification."
msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node enters a [SceneTree]."
+msgid ""
+"Notification received when the node enters a [SceneTree].\n"
+"This notification is emitted [i]before[/i] the related [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node is about to exit a [SceneTree]."
+msgid ""
+"Notification received when the node is about to exit a [SceneTree].\n"
+"This notification is emitted [i]after[/i] the related [signal tree_exiting]."
msgstr ""
#: doc/classes/Node.xml
@@ -38427,7 +38890,13 @@ msgid "Rotation in degrees, relative to the node's parent."
msgstr ""
#: doc/classes/Node2D.xml
-msgid "The node's scale. Unscaled value: [code](1, 1)[/code]."
+msgid ""
+"The node's scale. Unscaled value: [code](1, 1)[/code].\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
#: doc/classes/Node2D.xml
@@ -39872,6 +40341,10 @@ msgid ""
" if argument.find(\"=\") > -1:\n"
" var key_value = argument.split(\"=\")\n"
" arguments[key_value[0].lstrip(\"--\")] = key_value[1]\n"
+" else:\n"
+" # Options without an argument will be present in the dictionary,\n"
+" # with the value set to an empty string.\n"
+" arguments[argument.lstrip(\"--\")] = \"\"\n"
"[/codeblock]"
msgstr ""
@@ -40528,8 +41001,15 @@ msgstr ""
msgid ""
"Moves the file or directory to the system's recycle bin. See also [method "
"Directory.remove].\n"
+"The method takes only global paths, so you may need to use [method "
+"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/"
+"code] as it will not work in exported project.\n"
"[b]Note:[/b] If the user has disabled the recycle bin on their system, the "
-"file will be permanently deleted instead."
+"file will be permanently deleted instead.\n"
+"[codeblock]\n"
+"var file_to_remove = \"user://slot1.sav\"\n"
+"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/OS.xml
@@ -45374,7 +45854,18 @@ msgstr ""
#: doc/classes/PopupMenu.xml
msgid ""
"[PopupMenu] is a [Control] that displays a list of options. They are popular "
-"in toolbars or context menus."
+"in toolbars or context menus.\n"
+"[b]Incremental search:[/b] Like [ItemList] and [Tree], [PopupMenu] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/PopupMenu.xml
@@ -46884,7 +47375,16 @@ msgid ""
msgstr ""
#: doc/classes/ProjectSettings.xml
-msgid "Message to be displayed before the backtrace when the engine crashes."
+msgid ""
+"Message to be displayed before the backtrace when the engine crashes. By "
+"default, this message is only used in exported projects due to the editor-"
+"only override applied to this setting."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Editor-only override for [member debug/settings/crash_handler/message]. Does "
+"not affect exported projects in debug or release mode."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -47129,6 +47629,18 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default naming style for scene files to infer from their root nodes. "
+"Possible options are:\n"
+"- [code]0[/code] (Auto): Uses the scene root name as is without changing its "
+"casing.\n"
+"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase "
+"casing.\n"
+"- [code]2[/code] (snake_case): Converts the scene root name to snake_case "
+"casing."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -47354,6 +47866,198 @@ msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 1."
msgstr ""
@@ -47562,6 +48266,198 @@ msgid "Optional name for the 2D render layer 9."
msgstr ""
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 1."
msgstr ""
@@ -47829,6 +48725,49 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default cell height for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_height].\n"
+"[b]Note:[/b] Currently not implemented."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 2D navigation maps. See [method "
+"Navigation2DServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell height for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_height]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 3D navigation maps. See [method "
+"NavigationServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default map up vector for 3D navigation maps. See [method NavigationServer."
+"map_set_up]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -48502,20 +49441,28 @@ msgid ""
"cause.\n"
"The default value is a conservative one, so you are advised to tweak it "
"according to the hardware you are targeting.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"The default is a very conservative override for [code]rendering/gles3/"
-"shaders/max_concurrent_compiles[/code].\n"
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
"Depending on the specific devices you are targeting, you may want to raise "
"it.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
+"Depending on the specific browsers you are targeting, you may want to raise "
+"it.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -48523,19 +49470,28 @@ msgid ""
"The maximum size, in megabytes, that the ubershader cache can grow up to. On "
"startup, the least recently used entries will be deleted until the total "
"size is within bounds.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/ubershader_cache_size_mb[/"
-"code], so a smaller maximum size can be configured for mobile platforms, "
-"where storage space is more limited.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for mobile platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for web platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] Currently, shader caching is generally unavailable on web "
+"platforms.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -48567,14 +49523,22 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/shader_compilation_mode[/"
-"code], so asynchronous compilation can be disabled for mobile.\n"
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on mobile platforms.\n"
"You may want to do that since mobile GPUs generally won't support "
"ubershaders due to their complexity."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on web platforms.\n"
+"You may want to do that since certain browsers (especially on mobile "
+"platforms) generally won't support ubershaders due to their complexity."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
@@ -49331,7 +50295,6 @@ msgid ""
"- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/"
"code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, "
"small grid radius values may lead to unwanted groupings.\n"
-"[/codeblock]\n"
"[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more "
"effective and faster [VisibilityNotifier] functionality. For most use cases, "
"[method Vector3.distance_to] or [method Vector3.distance_squared_to] are "
@@ -51480,6 +52443,22 @@ msgid "Makes text fill width."
msgstr ""
#: doc/classes/RichTextLabel.xml
+msgid "Aligns top of the inline image to the top of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns center of the inline image to the center of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns bottom of the inline image to the baseline of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns bottom of the inline image to the bottom of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
msgid "Each list item has a number marker."
msgstr ""
@@ -53217,8 +54196,8 @@ msgid ""
" yield(get_tree().create_timer(1.0), \"timeout\")\n"
" print(\"Timer ended.\")\n"
"[/codeblock]\n"
-"The timer will be automatically freed after its time elapses, so be aware "
-"that any reference you might have kept to it will become invalid."
+"The timer will be dereferenced after its time elapses. To preserve the "
+"timer, you can keep a reference to it. See [Reference]."
msgstr ""
#: doc/classes/SceneTreeTimer.xml
@@ -53250,24 +54229,23 @@ msgid ""
"manually (i.e. by using [code]Tween.new()[/code]) are invalid. They can't be "
"used for tweening values, but you can do manual interpolation with [method "
"interpolate_value].\n"
-"A [SceneTreeTween] animation is composed of a sequence of [Tweener]s, which "
-"by default are executed one after another. You can create a sequence by "
-"appending [Tweener]s to the [SceneTreeTween]. Animating something with a "
-"[Tweener] is called tweening. Example tweening sequence looks like this:\n"
+"A tween animation is created by adding [Tweener]s to the [SceneTreeTween] "
+"object, using [method tween_property], [method tween_interval], [method "
+"tween_callback] or [method tween_method]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1)\n"
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"This sequence will make the [code]$Sprite[/code] node turn red, then shrink "
-"and finally the [method Node.queue_free] is called to remove the sprite. See "
-"methods [method tween_property], [method tween_interval], [method "
-"tween_callback] and [method tween_method] for more usage information.\n"
+"This sequence will make the [code]$Sprite[/code] node turn red, then shrink, "
+"before finally calling [method Node.queue_free] to free the sprite. "
+"[Tweener]s are executed one after another by default. This behavior can be "
+"changed using [method parallel] and [method set_parallel].\n"
"When a [Tweener] is created with one of the [code]tween_*[/code] methods, a "
"chained method call can be used to tweak the properties of this [Tweener]. "
-"For example, if you want to set different transition type in the above "
-"example, you can do:\n"
+"For example, if you want to set a different transition type in the above "
+"example, you can use [method set_trans]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1).set_trans(Tween."
@@ -53276,8 +54254,9 @@ msgid ""
"TRANS_BOUNCE)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Most of the [SceneTreeTween] methods can be chained this way too. In this "
-"example the [SceneTreeTween] is bound and have set a default transition:\n"
+"Most of the [SceneTreeTween] methods can be chained this way too. In the "
+"following example the [SceneTreeTween] is bound to the running script's node "
+"and a default transition is set for its [Tweener]s:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween().bind_node(self).set_trans(Tween."
"TRANS_ELASTIC)\n"
@@ -53285,16 +54264,16 @@ msgid ""
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Another interesting use for [SceneTreeTween]s is animating arbitrary set of "
+"Another interesting use for [SceneTreeTween]s is animating arbitrary sets of "
"objects:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"for sprite in get_children():\n"
-" tween.tween_property(sprite, \"position\", Vector2(), 1)\n"
+" tween.tween_property(sprite, \"position\", Vector2(0, 0), 1)\n"
"[/codeblock]\n"
"In the example above, all children of a node are moved one after another to "
"position (0, 0).\n"
-"Some [Tweener]s use transitions and eases. The first accepts an [enum Tween."
+"Some [Tweener]s use transitions and eases. The first accepts a [enum Tween."
"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 Tween.EaseType] constant, and "
@@ -53306,7 +54285,7 @@ msgid ""
"tween_cheatsheet.png]Tween easing and transition types cheatsheet[/url]\n"
"[b]Note:[/b] All [SceneTreeTween]s will automatically start by default. To "
"prevent a [SceneTreeTween] from autostarting, you can call [method stop] "
-"immediately after it was created."
+"immediately after it is created."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53336,21 +54315,24 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
-"Processes the [SceneTreeTween] by given [code]delta[/code] value, in "
-"seconds. Mostly useful when the [SceneTreeTween] is paused, for controlling "
-"it manually. Can also be used to end the [SceneTreeTween] animation "
-"immediately, by using [code]delta[/code] longer than the whole duration.\n"
+"Processes the [SceneTreeTween] by the given [code]delta[/code] value, in "
+"seconds. This is mostly useful for manual control when the [SceneTreeTween] "
+"is paused. It can also be used to end the [SceneTreeTween] animation "
+"immediately, by setting [code]delta[/code] longer than the whole duration of "
+"the [SceneTreeTween] animation.\n"
"Returns [code]true[/code] if the [SceneTreeTween] still has [Tweener]s that "
"haven't finished.\n"
-"[b]Note:[/b] The [SceneTreeTween] will become invalid after finished, but "
-"you can call [method stop] after the step, to keep it and reset."
+"[b]Note:[/b] The [SceneTreeTween] will become invalid in the next processing "
+"frame after its animation finishes. Calling [method stop] after performing "
+"[method custom_step] instead keeps and resets the [SceneTreeTween]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Returns the total time in seconds the [SceneTreeTween] has been animating (i."
-"e. time since it started, not counting pauses etc.). The time is affected by "
-"[method set_speed_scale] and [method stop] will reset it to [code]0[/code].\n"
+"e. the time since it started, not counting pauses etc.). The time is "
+"affected by [method set_speed_scale], and [method stop] will reset it to "
+"[code]0[/code].\n"
"[b]Note:[/b] As it results from accumulating frame deltas, the time returned "
"after the [SceneTreeTween] has finished animating will be slightly greater "
"than the actual [SceneTreeTween] duration."
@@ -53386,11 +54368,10 @@ msgstr ""
msgid ""
"Returns whether the [SceneTreeTween] is valid. A valid [SceneTreeTween] is a "
"[SceneTreeTween] contained by the scene tree (i.e. the array from [method "
-"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). "
-"[SceneTreeTween] might become invalid when it has finished tweening or was "
-"killed, also when created with [code]Tween.new()[/code]. Invalid "
-"[SceneTreeTween] can't have [Tweener]s appended, because it can't animate "
-"them. You can however still use [method interpolate_value]."
+"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). A "
+"[SceneTreeTween] might become invalid when it has finished tweening, is "
+"killed, or when created with [code]SceneTreeTween.new()[/code]. Invalid "
+"[SceneTreeTween]s can't have [Tweener]s appended."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53430,16 +54411,15 @@ msgstr ""
msgid ""
"Sets the number of times the tweening sequence will be repeated, i.e. "
"[code]set_loops(2)[/code] will run the animation twice.\n"
-"Calling this method without arguments will make the [SceneTreeTween] run "
-"infinitely, until it is either killed by [method kill] or by freeing bound "
-"node, or all the animated objects have been freed (which makes further "
+"Calling this method without arguments will make the [Tween] run infinitely, "
+"until either it is killed with [method kill], the [Tween]'s bound node is "
+"freed, or all the animated objects have been freed (which makes further "
"animation impossible).\n"
"[b]Warning:[/b] Make sure to always add some duration/delay when using "
-"infinite loops. 0-duration looped animations (e.g. single [CallbackTweener] "
-"with no delay or [PropertyTweener] with invalid node) are equivalent to "
-"infinite [code]while[/code] loops and will freeze your game. If a "
-"[SceneTreeTween]'s lifetime depends on some node, always use [method "
-"bind_node]."
+"infinite loops. To prevent the game freezing, 0-duration looped animations "
+"(e.g. a single [CallbackTweener] with no delay) are stopped after a small "
+"number of loops, which may produce unexpected results. If a [Tween]'s "
+"lifetime depends on some node, always use [method bind_node]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53501,10 +54481,10 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Creates and appends an [IntervalTweener]. This method can be used to create "
-"delays in the tween animation, as an alternative for using the delay in "
-"other [Tweener]s or when there's no animation (in which case the "
-"[SceneTreeTween] acts as a timer). [code]time[/code] is the length of the "
-"interval, in seconds.\n"
+"delays in the tween animation, as an alternative to using the delay in other "
+"[Tweener]s, or when there's no animation (in which case the [SceneTreeTween] "
+"acts as a timer). [code]time[/code] is the length of the interval, in "
+"seconds.\n"
"Example: creating an interval in code execution.\n"
"[codeblock]\n"
"# ... some code\n"
@@ -53558,8 +54538,8 @@ msgid ""
"Creates and appends a [PropertyTweener]. This method tweens a "
"[code]property[/code] of an [code]object[/code] between an initial value and "
"[code]final_val[/code] in a span of time equal to [code]duration[/code], in "
-"seconds. The initial value by default is a value at the time the tweening of "
-"the [PropertyTweener] start. For example:\n"
+"seconds. The initial value by default is the property's value at the time "
+"the tweening of the [PropertyTweener] starts. For example:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"tween.tween_property($Sprite, \"position\", Vector2(100, 200), 1)\n"
@@ -53590,16 +54570,15 @@ msgid ""
"Emitted when the [SceneTreeTween] has finished all tweening. Never emitted "
"when the [SceneTreeTween] is set to infinite looping (see [method "
"set_loops]).\n"
-"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) after this signal "
-"is emitted, but it doesn't happen immediately, but on the next processing "
-"frame. Calling [method stop] inside the signal callback will preserve the "
-"[SceneTreeTween]."
+"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) in the next "
+"processing frame after this signal is emitted. Calling [method stop] inside "
+"the signal callback will prevent the [SceneTreeTween] from being removed."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Emitted when a full loop is complete (see [method set_loops]), providing the "
-"loop index. This signal is not emitted after final loop, use [signal "
+"loop index. This signal is not emitted after the final loop, use [signal "
"finished] instead for this case."
msgstr ""
@@ -53607,7 +54586,7 @@ msgstr ""
msgid ""
"Emitted when one step of the [SceneTreeTween] is complete, providing the "
"step index. One step is either a single [Tweener] or a group of [Tweener]s "
-"running parallelly."
+"running in parallel."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -54940,7 +55919,12 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-msgid "Scale part of the local transformation."
+msgid ""
+"Scale part of the local transformation.\n"
+"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, the scale values will either be all "
+"positive or all negative."
msgstr ""
#: doc/classes/Spatial.xml
@@ -57574,11 +58558,11 @@ msgstr ""
msgid ""
"Returns [code]true[/code] if this string contains a valid integer.\n"
"[codeblock]\n"
-"print(\"7\".is_valid_int()) # Prints \"True\"\n"
-"print(\"14.6\".is_valid_int()) # Prints \"False\"\n"
-"print(\"L\".is_valid_int()) # Prints \"False\"\n"
-"print(\"+3\".is_valid_int()) # Prints \"True\"\n"
-"print(\"-12\".is_valid_int()) # Prints \"True\"\n"
+"print(\"7\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"14.6\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"L\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"+3\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"-12\".is_valid_integer()) # Prints \"True\"\n"
"[/codeblock]"
msgstr ""
@@ -61056,6 +62040,11 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml
+#, fuzzy
+msgid "If [code]true[/code], this TileMap bakes a navigation region."
+msgstr "Palauttaa parametrin kosinin."
+
+#: doc/classes/TileMap.xml
msgid "If [code]true[/code], the cell's UVs will be clipped."
msgstr ""
@@ -61162,6 +62151,10 @@ msgid "The TileMap orientation mode. See [enum Mode] for possible values."
msgstr ""
#: doc/classes/TileMap.xml
+msgid "The navigation layers the TileMap generates its navigation regions in."
+msgstr ""
+
+#: doc/classes/TileMap.xml
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 "
@@ -62293,7 +63286,12 @@ msgstr ""
#: doc/classes/Transform2D.xml
msgid ""
"Returns a copy of the transform scaled by the given [code]scale[/code] "
-"factor, using matrix multiplication."
+"factor, using matrix multiplication.\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
#: doc/classes/Transform2D.xml
@@ -62449,7 +63447,18 @@ msgid ""
"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]."
+"to remove it from the [Tree].\n"
+"[b]Incremental search:[/b] Like [ItemList] and [PopupMenu], [Tree] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/Tree.xml
@@ -65979,11 +66988,12 @@ msgid "This enabler will stop [Particles2D] nodes."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _process function."
+msgid "This enabler will stop the parent's [method Node._process] function."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _physics_process function."
+msgid ""
+"This enabler will stop the parent's [method Node._physics_process] function."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
@@ -66023,6 +67033,16 @@ msgid "The VisibilityNotifier's bounding box."
msgstr ""
#: doc/classes/VisibilityNotifier.xml
+msgid ""
+"In addition to checking whether a node is on screen or within a [Camera]'s "
+"view, VisibilityNotifier can also optionally check whether a node is within "
+"a specified maximum distance when using a [Camera] with perspective "
+"projection. This is useful for throttling the performance requirements of "
+"nodes that are far away.\n"
+"[b]Note:[/b] This feature will be disabled if set to 0.0."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier.xml
msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view."
msgstr ""
@@ -70787,6 +71807,16 @@ msgid "The amount of shader rebinds in the frame."
msgstr ""
#: doc/classes/VisualServer.xml
+msgid ""
+"The peak amount of shaders that have been under compilation in the frame.\n"
+"This is useful to know when asynchronous shader compilation has finished for "
+"the current shaders on screen.\n"
+"[b]Note:[/b] For complete certainty, only assume there are no outstanding "
+"compilations when this value is zero for at least two frames in a row.\n"
+"Unimplemented in the GLES2 rendering backend, always returns 0."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
msgid "The amount of surface changes in the frame."
msgstr ""
@@ -73988,8 +75018,8 @@ msgstr ""
#: doc/classes/World.xml
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."
+"scenario, a navigation map and a sound space. Spatial nodes register their "
+"resources into the current world."
msgstr ""
#: doc/classes/World.xml
@@ -74004,11 +75034,17 @@ msgstr ""
#: doc/classes/World.xml
msgid ""
-"The World's fallback_environment will be used if the World's [Environment] "
-"fails or is missing."
+"The World's fallback environment will be used if [member environment] fails "
+"or is missing."
msgstr ""
#: doc/classes/World.xml
+#, fuzzy
+msgid ""
+"The [RID] of this world's navigation map. Used by the [NavigationServer]."
+msgstr "Palauttaa parametrin sinin."
+
+#: doc/classes/World.xml
msgid "The World's visual scenario."
msgstr ""
@@ -74023,8 +75059,8 @@ msgstr ""
#: doc/classes/World2D.xml
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."
+"visual scenario, a navigation map and a sound space. 2D nodes register their "
+"resources into the current 2D world."
msgstr ""
#: doc/classes/World2D.xml
@@ -74041,6 +75077,12 @@ msgid ""
msgstr ""
#: doc/classes/World2D.xml
+#, fuzzy
+msgid ""
+"The [RID] of this world's navigation map. Used by the [Navigation2DServer]."
+msgstr "Palauttaa parametrin sinin."
+
+#: doc/classes/World2D.xml
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."
diff --git a/doc/translations/fil.po b/doc/translations/fil.po
index 7da7a394ca..1ae1d0b02b 100644
--- a/doc/translations/fil.po
+++ b/doc/translations/fil.po
@@ -356,7 +356,7 @@ msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
msgid ""
"Compares two values by checking their actual contents, recursing into any "
-"`Array` or `Dictionary` up to its deepest level.\n"
+"[Array] or [Dictionary] up to its deepest level.\n"
"This compares to [code]==[/code] in a number of ways:\n"
"- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/"
"code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] "
@@ -403,7 +403,7 @@ msgid ""
"- 1.0: Linear\n"
"- Greater than 1.0 (exclusive): Ease in\n"
"[/codeblock]\n"
-"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.4/img/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/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]."
@@ -1110,7 +1110,7 @@ msgid ""
"[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/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/img/"
"smoothstep_ease_comparison.png]Comparison between smoothstep() and ease(x, "
"-1.6521) return values[/url]"
msgstr ""
@@ -3388,6 +3388,12 @@ msgstr ""
#: doc/classes/@GlobalScope.xml
msgid ""
+"Hints that an integer property is a bitmask using the optionally named 2D "
+"navigation layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml
+msgid ""
"Hints that an integer property is a bitmask using the optionally named 3D "
"render layers."
msgstr ""
@@ -3400,6 +3406,12 @@ msgstr ""
#: doc/classes/@GlobalScope.xml
msgid ""
+"Hints that an integer property is a bitmask using the optionally named 3D "
+"navigation layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml
+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]."
@@ -8375,7 +8387,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/AStar.xml
+#: doc/classes/AStar.xml doc/classes/AStar2D.xml
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[/"
@@ -8574,7 +8586,10 @@ msgid ""
msgstr ""
#: doc/classes/AStar2D.xml
-msgid "Returns whether there is a connection/segment between the given points."
+msgid ""
+"Returns whether there is a connection/segment between the given points. 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/AStar2D.xml
@@ -8591,10 +8606,6 @@ msgid ""
msgstr ""
#: doc/classes/AStar2D.xml
-msgid "Deletes the segment between the given points."
-msgstr ""
-
-#: doc/classes/AStar2D.xml
msgid ""
"Returns the closest position to [code]to_position[/code] that resides inside "
"a segment between two connected points.\n"
@@ -8779,7 +8790,9 @@ msgid ""
"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."
+"transmit audio over the network. When capturing audio data from a "
+"microphone, the format of the samples will be stereo 32-bit floating point "
+"PCM."
msgstr ""
#: doc/classes/AudioEffectCapture.xml
@@ -13622,7 +13635,7 @@ msgid ""
msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
-#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/Navigation2D.xml
msgid "Returns the object's [RID]."
msgstr ""
@@ -19097,11 +19110,14 @@ msgid ""
msgstr ""
#: doc/classes/CurveTexture.xml
-msgid "The [code]curve[/code] rendered onto the texture."
+msgid "The [Curve] that is rendered onto the texture."
msgstr ""
#: doc/classes/CurveTexture.xml
-msgid "The width of the texture."
+msgid ""
+"The width of the texture (in pixels). Higher values make it possible to "
+"represent high-frequency data better (such as sudden direction changes), at "
+"the cost of increased generation time and memory usage."
msgstr ""
#: doc/classes/CylinderMesh.xml
@@ -19387,6 +19403,13 @@ msgid "Returns the list of keys in the [Dictionary]."
msgstr ""
#: doc/classes/Dictionary.xml
+msgid ""
+"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, "
+"duplicate keys will not be copied over, unless [code]overwrite[/code] is "
+"[code]true[/code]."
+msgstr ""
+
+#: doc/classes/Dictionary.xml
msgid "Returns the number of keys in the dictionary."
msgstr ""
@@ -21325,9 +21348,23 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide a state data you want to be saved, like view "
+"position, grid settings, folding, etc. 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). This data is automatically saved for "
+"each scene in an [code]editstate[/code] file in the editor metadata folder. "
+"If you want to store global (scene-independent) editor data for your plugin, "
+"you can use [method get_window_layout] instead.\n"
+"Use [method set_state] to restore your saved state.\n"
+"[b]Note:[/b] This method should not be used to save important settings that "
+"should persist with the project.\n"
+"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be "
+"stored and restored correctly.\n"
+"[codeblock]\n"
+"func get_state():\n"
+" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n"
+" return state\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -21338,9 +21375,18 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide the GUI layout of the plugin or any other "
+"data you want to be stored. 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). The data is stored in the "
+"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n"
+"Use [method set_window_layout] to restore your saved layout.\n"
+"[codeblock]\n"
+"func get_window_layout(configuration):\n"
+" configuration.set_value(\"MyPlugin\", \"window_position\", $Window."
+"position)\n"
+" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -21453,11 +21499,30 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the state saved by [method get_state]."
+msgid ""
+"Restore the state saved by [method get_state]. This method is called when "
+"the current scene tab is changed in the editor.\n"
+"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise "
+"it will not be recognized and this method will not be called.\n"
+"[codeblock]\n"
+"func set_state(data):\n"
+" zoom = data.get(\"zoom\", 1.0)\n"
+" preferred_color = data.get(\"my_color\", Color.white)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the plugin GUI layout saved by [method get_window_layout]."
+msgid ""
+"Restore the plugin GUI layout and data saved by [method get_window_layout]. "
+"This method is called for every plugin on editor startup. Use the provided "
+"[code]configuration[/code] file to read your saved data.\n"
+"[codeblock]\n"
+"func set_window_layout(configuration):\n"
+" $Window.position = configuration.get_value(\"MyPlugin\", "
+"\"window_position\", Vector2())\n"
+" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", "
+"Color.white)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -26095,7 +26160,8 @@ msgid ""
"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])."
+"at fixed steps (see [member width]). See also [GradientTexture2D] and "
+"[CurveTexture]."
msgstr ""
#: doc/classes/GradientTexture.xml
@@ -26117,7 +26183,8 @@ msgid ""
"repeat] types using colors obtained from the gradient. 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] and [member height])."
+"[member width] and [member height]). See also [GradientTexture] and "
+"[CurveTexture]."
msgstr ""
#: doc/classes/GradientTexture2D.xml
@@ -26923,6 +26990,12 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+msgid ""
+"If [code]true[/code], this GridMap uses cell navmesh resources to create "
+"navigation regions."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid "If [code]true[/code], grid items are centered on the X axis."
msgstr ""
@@ -26973,6 +27046,10 @@ msgid "The assigned [MeshLibrary]."
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+msgid "The navigation layers the GridMap generates its navigation regions in."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
"Overrides the default friction and bounce physics properties for the whole "
"[GridMap]."
@@ -28196,7 +28273,7 @@ msgid ""
" # 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 body = to_json({\"name\": \"Godette\"})\n"
" error = http_request.request(\"https://httpbin.org/post\", [], true, "
"HTTPClient.METHOD_POST, body)\n"
" if error != OK:\n"
@@ -29363,7 +29440,7 @@ msgstr ""
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 "
+"([member 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 "
@@ -29512,10 +29589,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Returns the mouse mode. See the constants for more information."
-msgstr ""
-
-#: doc/classes/Input.xml
msgid ""
"Gets an input vector by specifying four actions for the positive and "
"negative X and Y axes.\n"
@@ -29709,24 +29782,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Sets the mouse mode. See the constants for more information."
-msgstr ""
-
-#: doc/classes/Input.xml
-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
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 "
@@ -29762,6 +29817,24 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
+msgid "Controls the mouse mode. See [enum MouseMode] for more information."
+msgstr ""
+
+#: doc/classes/Input.xml
+msgid ""
+"If [code]true[/code], similar input events sent by the operating system are "
+"accumulated. 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 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
msgid "Emitted when a joypad device has been connected or disconnected."
msgstr ""
@@ -30069,8 +30142,8 @@ msgstr ""
#: doc/classes/InputEventJoypadButton.xml
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]."
+"Represents the pressure the user puts on the button with their finger, if "
+"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]."
msgstr ""
#: doc/classes/InputEventJoypadMotion.xml
@@ -30333,9 +30406,9 @@ 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 "
+"at most. If you need more precise input reporting, set [member Input."
+"use_accumulated_input] to [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."
@@ -30822,7 +30895,18 @@ msgid ""
"[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."
+"fixed_column_width] greater than zero to wrap the text.\n"
+"[b]Incremental search:[/b] Like [PopupMenu] and [Tree], [ItemList] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/ItemList.xml
@@ -34569,11 +34653,16 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Returns the override [Material] for a surface of the [Mesh] resource.\n"
+"[b]Note:[/b] This function only returns [i]override[/i] materials associated "
+"with this [MeshInstance]. Consider using [method get_active_material] or "
+"[method Mesh.surface_get_material] to get materials associated with the "
+"[Mesh] resource."
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the number of surface materials."
+msgid "Returns the number of surface override materials."
msgstr ""
#: doc/classes/MeshInstance.xml
@@ -34610,7 +34699,10 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Sets the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Sets the override [Material] for the specified surface of the [Mesh] "
+"resource. This material is associated with this [MeshInstance] rather than "
+"with the [Mesh] resource."
msgstr ""
#: doc/classes/MeshInstance.xml
@@ -34641,9 +34733,10 @@ msgstr ""
#: doc/classes/MeshInstance2D.xml
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\"."
+"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be "
+"automatically created from an existing [Sprite] via a tool in the editor "
+"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to "
+"MeshInstance2D[/b] at the top of the 2D editor viewport."
msgstr ""
#: doc/classes/MeshInstance2D.xml
@@ -35401,6 +35494,9 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"Provides navigation and pathfinding within a collection of "
"[NavigationMesh]es. By default, these will be automatically collected from "
"child [NavigationMeshInstance] nodes. In addition to basic pathfinding, this "
@@ -35441,7 +35537,14 @@ msgid ""
msgstr ""
#: doc/classes/Navigation.xml
+msgid "Returns the [RID] of the navigation map on the [NavigationServer]."
+msgstr ""
+
+#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"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, "
@@ -35463,16 +35566,31 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation.get_simple_path] path query."
+msgstr ""
+
+#: doc/classes/Navigation.xml
+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/Navigation.xml doc/classes/Navigation2DServer.xml
+#: doc/classes/NavigationServer.xml
+msgid ""
+"Emitted when a navigation map is updated, when a region moves or is modified."
+msgstr ""
+
#: doc/classes/Navigation2D.xml
msgid "2D navigation and pathfinding node."
msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -35492,6 +35610,9 @@ msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -35501,6 +35622,12 @@ msgstr ""
msgid "The XY plane cell size to use for fields."
msgstr ""
+#: doc/classes/Navigation2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation2D.get_simple_path] path query."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml
msgid "Server interface for low-level 2D navigation access."
msgstr ""
@@ -35517,8 +35644,12 @@ msgid ""
"through scripts.\n"
"For two regions to be connected to each other, they must share a similar "
"edge. An edge is considered connected to another if both of its two vertices "
-"are at a distance less than [member Navigation.edge_connection_margin] to "
-"the respective other edge's vertex.\n"
+"are at a distance less than navigation map [code]edge_connection_margin[/"
+"code] to the respective other edge's vertex.\n"
+"You may assign navigation layers to regions with [method Navigation2DServer."
+"region_set_navigation_layers], which then can be checked upon when "
+"requesting a path with [method Navigation2DServer.map_get_path]. This allows "
+"allowing or forbidding some areas to 2D objects.\n"
"To use the collision avoidance system, you may use agents. You can set an "
"agent's target velocity, then the servers will emit a callback with a "
"modified velocity.\n"
@@ -35546,7 +35677,17 @@ msgid "Returns [code]true[/code] if the map got changed the previous frame."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Callback called at the end of the RVO process."
+msgid ""
+"Callback called at the end of the RVO process. If a callback is created "
+"manually and the agent is placed on a navigation map it will calculate "
+"avoidance for the agent and dispatch the calculated [code]safe_velocity[/"
+"code] to the [code]receiver[/code] object with a signal to the chosen "
+"[code]method[/code] name.\n"
+"[b]Note:[/b] Created callbacks are always processed independently of the "
+"SceneTree state as long as the agent is on a navigation map and not freed. "
+"To disable the dispatch of a callback from an agent use [method "
+"agent_set_callback] again with a [code]null[/code] object as the "
+"[code]receiver[/code]."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -35601,15 +35742,55 @@ msgid "Destroys the given RID."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns all created navigation map [RID]s on the NavigationServer. This "
+"returns both 2D and 3D created navigation maps as there is technically no "
+"distinction between them."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Create a new map."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"This function immediately forces synchronization of the specified navigation "
+"[code]map[/code] [RID]. By default navigation maps are only synchronized at "
+"the end of each physics frame. This function can be used to immediately "
+"(re)calculate all the navigation meshes and region connections of the "
+"navigation map. This makes it possible to query a navigation path for a "
+"changed map immediately and in the same frame (multiple times if needed).\n"
+"Due to technical restrictions the current NavigationServer command queue "
+"will be flushed. This means all already queued update commands for this "
+"physics frame will be executed, even those intended for other maps, regions "
+"and agents not part of the specified map. The expensive computation of the "
+"navigation meshes and region connections of a map will only be done for the "
+"specified map. Other maps will receive the normal synchronization at the end "
+"of the physics frame. Should the specified map receive changes after the "
+"forced update it will update again as well when the other maps receive their "
+"update.\n"
+"Avoidance processing and dispatch of the [code]safe_velocity[/code] signals "
+"is untouched by this function and continues to happen for all maps and "
+"agents at the end of the physics frame.\n"
+"[b]Note:[/b] With great power comes great responsibility. This function "
+"should only be used by users that really know what they are doing and have a "
+"good reason for it. Forcing an immediate update of a navigation map requires "
+"locking the NavigationServer and flushing the entire NavigationServer "
+"command queue. Not only can this severely impact the performance of a game "
+"but it can also introduce bugs if used inappropriately without much "
+"foresight."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns all navigation agents [RID]s that are currently assigned to the "
"requested navigation [code]map[/code]."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Returns the map cell size."
msgstr ""
@@ -35633,7 +35814,10 @@ msgid ""
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Returns the navigation path to reach the destination from the origin."
+msgid ""
+"Returns the navigation path to reach the destination from the origin. "
+"[code]navigation_layers[/code] is a bitmask of all region layers that are "
+"allowed to be in the path."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -35650,6 +35834,12 @@ msgstr ""
msgid "Sets the map active."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/"
+"b] Currently not implemented."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Set the map cell size used to weld the navigation mesh polygons."
msgstr ""
@@ -35665,14 +35855,73 @@ msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"Returns the ending point of a connection door. [code]connection[/code] is an "
+"index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns the starting point of a connection door. [code]connection[/code] is "
+"an index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns how many connections this [code]region[/code] has with other regions "
+"in the map."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns the navigation map [RID] the requested [code]region[/code] is "
"currently assigned to."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Returns the region's navigation layers."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns [code]true[/code] if the provided [code]point[/code] in world space "
+"is currently owned by the provided navigation [code]region[/code]. Owned in "
+"this context means that one of the region's navigation mesh polygon faces "
+"has a possible position at the closest distance to this point compared to "
+"all other navigation meshes from other navigation regions that are also "
+"registered on the navigation map of the provided region.\n"
+"If multiple navigation meshes have positions at equal distance the "
+"navigation region whose polygons are processed first wins the ownership. "
+"Polygons are processed in the same order that navigation regions were "
+"registered on the NavigationServer.\n"
+"[b]Note:[/b] If navigation meshes from different navigation regions overlap "
+"(which should be avoided in general) the result might not be what is "
+"expected."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Sets the map for the region."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method Navigation2DServer.map_get_path])."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Sets the navigation mesh for the region."
msgstr ""
@@ -35681,6 +35930,10 @@ msgstr ""
msgid "Sets the global transformation for the region."
msgstr ""
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]."
+msgstr ""
+
#: doc/classes/NavigationAgent.xml
msgid "3D agent used in navigation for collision avoidance."
msgstr ""
@@ -35690,9 +35943,16 @@ msgid ""
"3D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationAgent] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World] navigation map. If this node is a child of a [Navigation] "
+"node it will register to the navigation map of the navigation node or the "
+"function [method set_navigation] can be used to set the navigation node "
+"directly. [NavigationAgent] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -35710,7 +35970,15 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-msgid "Returns the path from start to finish in global coordinates."
+msgid ""
+"Returns this agent's current path from start to finish in global "
+"coordinates. The path only updates when the target location is changed or "
+"the agent requires a repath. The path array is not intended to be used in "
+"direct path movement as the agent has its own internal path logic that would "
+"get corrupted by changing the path array manually. Use the intended [method "
+"get_next_location] once every physics frame to receive the next path point "
+"for the agents movement as this function also updates the internal path "
+"logic."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -35725,11 +35993,24 @@ msgid ""
"system."
msgstr ""
-#: doc/classes/NavigationAgent.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"Returns a [Vector3] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the origin of the agent's parent."
+"Returns the [RID] of the navigation map for this NavigationAgent node. This "
+"function returns always the map set on the NavigationAgent node and not the "
+"map of the abstract agent on the NavigationServer. If the agent map is "
+"changed directly with the NavigationServer API the NavigationAgent node will "
+"not be aware of the map change. Use [method set_navigation_map] to change "
+"the navigation map for the NavigationAgent and also update the agent on the "
+"NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
+"Returns the next location in global coordinates that can be moved to, making "
+"sure that there are no static objects in the way. If the agent does not have "
+"a navigation path, it will return the position of the agent's parent. The "
+"use of this function once every physics frame is required to update the "
+"internal path logic of the NavigationAgent."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -35770,6 +36051,12 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"Sets the [RID] of the navigation map this NavigationAgent node should use "
+"and also updates the [code]agent[/code] on the NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"Sets the user desired final location. This will clear the current navigation "
"path."
msgstr ""
@@ -35782,7 +36069,13 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml
-msgid "The agent height offset to match the navigation mesh height."
+msgid ""
+"The NavigationAgent height offset is subtracted from the y-axis value of any "
+"vector path position for this NavigationAgent. The NavigationAgent height "
+"offset does not change or influence the navigation mesh or pathfinding query "
+"result. Additional navigation maps that use regions with navigation meshes "
+"that the developer baked with appropriate agent radius or height values are "
+"required to support different-sized agents."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -35809,26 +36102,53 @@ msgstr ""
msgid "The maximum speed that an agent can move."
msgstr ""
+#: doc/classes/NavigationAgent.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "The distance to search for other agents."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"The distance threshold before a path point is considered to be reached. This "
+"will allow an agent to not have to hit a path point on the path exactly, but "
+"in the area. If this value is set to high the NavigationAgent will skip "
+"points on the path which can lead to leaving the navigation mesh. If this "
+"value is set to low the NavigationAgent will be stuck in a repath loop cause "
+"it will constantly overshoot or undershoot the distance to the next point on "
+"each physics frame update."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"The maximum distance the agent is allowed away from the ideal path to the "
"final location. This can happen due to trying to avoid collisions. When the "
"maximum distance is exceeded, it recalculates the ideal path."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-msgid "The radius of the agent."
+msgid ""
+"The radius of the avoidance agent. This is the \"body\" of the avoidance "
+"agent and not the avoidance maneuver starting radius (which is controlled by "
+"[member neighbor_dist]).\n"
+"Does not affect normal pathfinding. To change an actor's pathfinding radius "
+"bake [NavigationMesh] resources with a different [member NavigationMesh."
+"agent_radius] property and use different navigation maps for each actor size."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"The distance threshold before a target is considered to be reached. This "
-"will allow an agent to not have to hit a point on the path exactly, but in "
-"the area."
+"The distance threshold before the final target point is considered to be "
+"reached. This will allow an agent to not have to hit the point of the final "
+"target exactly, but only the area. If this value is set to low the "
+"NavigationAgent will be stuck in a repath loop cause it will constantly "
+"overshoot or undershoot the distance to the final target point on each "
+"physics frame update."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -35871,9 +36191,16 @@ msgid ""
"2D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationAgent2D] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World2D] navigation map. If this node is a child of a "
+"[Navigation2D] node it will register to the navigation map of the navigation "
+"node or the function [method set_navigation] can be used to set the "
+"navigation node directly. [NavigationAgent2D] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent2D.xml
@@ -35889,13 +36216,6 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent2D.xml
-msgid ""
-"Returns a [Vector2] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the position of the agent's parent."
-msgstr ""
-
-#: doc/classes/NavigationAgent2D.xml
msgid "Returns the [RID] of this agent on the [Navigation2DServer]."
msgstr ""
@@ -35915,6 +36235,13 @@ msgid ""
"only be enabled on agents that currently require it."
msgstr ""
+#: doc/classes/NavigationAgent2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent2D] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationMesh.xml
msgid "A mesh to approximate the walkable areas and obstacles."
msgstr ""
@@ -35945,8 +36272,8 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
-"Returns whether the specified [code]bit[/code] of the [member geometry/"
-"collision_mask] is set."
+"Returns whether the specified [code]bit[/code] of the [member "
+"geometry_collision_mask] is set."
msgstr ""
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
@@ -35968,9 +36295,9 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/"
-"code] in the [member geometry/collision_mask].\n"
+"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]."
+"code] in the [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
@@ -35984,14 +36311,14 @@ 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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36003,7 +36330,7 @@ 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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36031,13 +36358,17 @@ msgstr ""
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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
-"If [code]true[/code], marks walkable spans as not walkable if the clearance "
-"above the span is less than [member agent/height]."
+"If the baking [AABB] has a volume the navigation mesh baking will be "
+"restricted to its enclosing area."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+msgid "The position offset applied to the [member filter_baking_aabb] [AABB]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36047,13 +36378,19 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]true[/code], marks non-walkable spans as walkable if their maximum "
-"is within [member agent/max_climb] of a walkable neighbor."
+"is within [member agent_max_climb] of a walkable neighbor."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+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
msgid ""
"The physics layers to scan for static colliders.\n"
-"Only used when [member geometry/parsed_geometry_type] is [constant "
+"Only used when [member geometry_parsed_geometry_type] is [constant "
"PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]."
msgstr ""
@@ -36072,7 +36409,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"The name of the group to scan for geometry.\n"
-"Only used when [member geometry/source_geometry_mode] is [constant "
+"Only used when [member geometry_source_geometry_mode] is [constant "
"SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant "
"SOURCE_GEOMETRY_GROUPS_EXPLICIT]."
msgstr ""
@@ -36135,7 +36472,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Parses [StaticBody] colliders as geometry. The collider should be in any of "
-"the layers specified by [member geometry/collision_mask]."
+"the layers specified by [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36156,13 +36493,13 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Scans nodes in a group and their child nodes recursively for geometry. The "
-"group is specified by [member geometry/source_group_name]."
+"group is specified by [member geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Uses nodes in a group for geometry. The group is specified by [member "
-"geometry/source_group_name]."
+"geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36204,7 +36541,15 @@ msgid ""
"geometry for walkable terrain suitable to [NavigationMesh] agent properties "
"by creating a voxel world around the meshes bounding area.\n"
"The finalized navigation mesh is then returned and stored inside the "
-"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes."
+"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] "
+"nodes.\n"
+"[b]Note:[/b] Using meshes to not only define walkable surfaces but also "
+"obstruct navigation baking does not always work. The navigation baking has "
+"no concept of what is a geometry \"inside\" when dealing with mesh source "
+"geometry and this is intentional. Depending on current baking parameters, as "
+"soon as the obstructing mesh is large enough to fit a navigation mesh area "
+"inside, the baking will generate navigation mesh areas that are inside the "
+"obstructing source geometry mesh."
msgstr ""
#: doc/classes/NavigationMeshGenerator.xml
@@ -36212,8 +36557,8 @@ msgid ""
"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child "
"nodes under the provided [code]root_node[/code] or a specific group of nodes "
"for potential source geometry. The parse behavior can be controlled with the "
-"[member NavigationMesh.geometry/parsed_geometry_type] and [member "
-"NavigationMesh.geometry/source_geometry_mode] properties on the "
+"[member NavigationMesh.geometry_parsed_geometry_type] and [member "
+"NavigationMesh.geometry_source_geometry_mode] properties on the "
"[NavigationMesh] resource."
msgstr ""
@@ -36230,8 +36575,21 @@ msgstr ""
#: doc/classes/NavigationMeshInstance.xml
msgid ""
"An instance of a [NavigationMesh]. It tells the [Navigation] node what can "
-"be navigated and what cannot, based on the [NavigationMesh] resource. This "
-"should be a child of a [Navigation] node."
+"be navigated and what cannot, based on the [NavigationMesh] resource.\n"
+"By default this node will register to the default [World] navigation map. If "
+"this node is a child of a [Navigation] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method NavigationServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The cost of entering this region from another region can be controlled with "
+"the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The cost of traveling distances inside this region can be controlled with "
+"the [member travel_cost] multiplier."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
@@ -36260,10 +36618,34 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding enters this region's navmesh from another regions navmesh "
+"the [code]enter_cost[/code] value is added to the path distance for "
+"determining the shortest path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationMesh] "
+"belongs to. On path requests with [method NavigationServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
msgid "The [NavigationMesh] resource to use."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding moves inside this region's navmesh the traveled distances "
+"are multiplied with [code]travel_cost[/code] for determining the shortest "
+"path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
msgid "Notifies when the navigation mesh bake operation is completed."
msgstr ""
@@ -36280,7 +36662,9 @@ msgid ""
"3D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationObstacle] is physics safe."
+"[NavigationObstacle] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle.xml
@@ -36320,7 +36704,9 @@ msgid ""
"2D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationObstacle2D] is physics safe."
+"[NavigationObstacle2D] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle2D.xml
@@ -36400,6 +36786,14 @@ msgstr ""
#: doc/classes/NavigationPolygon.xml
msgid ""
+"Returns the [NavigationMesh] resulting from this navigation polygon. This "
+"navmesh can be used to update the navmesh of a region with the [method "
+"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server "
+"behind the scene)."
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml
+msgid ""
"Returns a [PoolVector2Array] containing the vertices of an outline that was "
"created in the editor or by script."
msgstr ""
@@ -36436,6 +36830,30 @@ msgid ""
msgstr ""
#: doc/classes/NavigationPolygonInstance.xml
+msgid "A region of the 2D navigation map."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A region of the navigation map. It tells the [Navigation2DServer] what can "
+"be navigated and what cannot, based on its [NavigationPolygon] resource.\n"
+"By default this node will register to the default [World2D] navigation map. "
+"If this node is a child of a [Navigation2D] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The pathfinding cost of entering this region from another region can be "
+"controlled with the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The pathfinding cost of traveling distances inside this region can be "
+"controlled with the [member travel_cost] multiplier."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
msgid ""
"Returns the [RID] of this region on the [Navigation2DServer]. Combined with "
"[method Navigation2DServer.map_get_closest_point_owner] can be used to "
@@ -36443,6 +36861,22 @@ msgid ""
"navigation map."
msgstr ""
+#: doc/classes/NavigationPolygonInstance.xml
+msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationPolygon] "
+"belongs to. On path requests with [method Navigation2DServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid "The [NavigationPolygon] resource to use."
+msgstr ""
+
#: doc/classes/NavigationServer.xml
msgid "Server interface for low-level 3D navigation access."
msgstr ""
@@ -36518,6 +36952,12 @@ msgid "Bakes the navigation mesh."
msgstr ""
#: doc/classes/NavigationServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method NavigationServer.map_get_path])."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
msgid "Control activation of this server."
msgstr ""
@@ -37984,13 +38424,19 @@ msgstr ""
#: doc/classes/Node.xml
msgid ""
"Emitted when a child node enters the scene tree, either because it entered "
-"on its own or because this node entered with it."
+"on its own or because this node entered with it.\n"
+"This signal is emitted [i]after[/i] the child node's own [constant "
+"NOTIFICATION_ENTER_TREE] and [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
msgid ""
-"Emitted when a child node exits the scene tree, either because it exited on "
-"its own or because this node exited."
+"Emitted when a child node is about to exit the scene tree, either because it "
+"is being removed or freed directly, or because this node is exiting the "
+"tree.\n"
+"When this signal is received, the child [code]node[/code] is still in the "
+"tree and valid. This signal is emitted [i]after[/i] the child node's own "
+"[signal tree_exiting] and [constant NOTIFICATION_EXIT_TREE]."
msgstr ""
#: doc/classes/Node.xml
@@ -38002,7 +38448,10 @@ msgid "Emitted when the node is renamed."
msgstr ""
#: doc/classes/Node.xml
-msgid "Emitted when the node enters the tree."
+msgid ""
+"Emitted when the node enters the tree.\n"
+"This signal is emitted [i]after[/i] the related [constant "
+"NOTIFICATION_ENTER_TREE] notification."
msgstr ""
#: doc/classes/Node.xml
@@ -38012,15 +38461,21 @@ msgstr ""
#: doc/classes/Node.xml
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)."
+"the right place for de-initialization (or a \"destructor\", if you will).\n"
+"This signal is emitted [i]before[/i] the related [constant "
+"NOTIFICATION_EXIT_TREE] notification."
msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node enters a [SceneTree]."
+msgid ""
+"Notification received when the node enters a [SceneTree].\n"
+"This notification is emitted [i]before[/i] the related [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node is about to exit a [SceneTree]."
+msgid ""
+"Notification received when the node is about to exit a [SceneTree].\n"
+"This notification is emitted [i]after[/i] the related [signal tree_exiting]."
msgstr ""
#: doc/classes/Node.xml
@@ -38281,7 +38736,13 @@ msgid "Rotation in degrees, relative to the node's parent."
msgstr ""
#: doc/classes/Node2D.xml
-msgid "The node's scale. Unscaled value: [code](1, 1)[/code]."
+msgid ""
+"The node's scale. Unscaled value: [code](1, 1)[/code].\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
#: doc/classes/Node2D.xml
@@ -39721,6 +40182,10 @@ msgid ""
" if argument.find(\"=\") > -1:\n"
" var key_value = argument.split(\"=\")\n"
" arguments[key_value[0].lstrip(\"--\")] = key_value[1]\n"
+" else:\n"
+" # Options without an argument will be present in the dictionary,\n"
+" # with the value set to an empty string.\n"
+" arguments[argument.lstrip(\"--\")] = \"\"\n"
"[/codeblock]"
msgstr ""
@@ -40374,8 +40839,15 @@ msgstr ""
msgid ""
"Moves the file or directory to the system's recycle bin. See also [method "
"Directory.remove].\n"
+"The method takes only global paths, so you may need to use [method "
+"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/"
+"code] as it will not work in exported project.\n"
"[b]Note:[/b] If the user has disabled the recycle bin on their system, the "
-"file will be permanently deleted instead."
+"file will be permanently deleted instead.\n"
+"[codeblock]\n"
+"var file_to_remove = \"user://slot1.sav\"\n"
+"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/OS.xml
@@ -45214,7 +45686,18 @@ msgstr ""
#: doc/classes/PopupMenu.xml
msgid ""
"[PopupMenu] is a [Control] that displays a list of options. They are popular "
-"in toolbars or context menus."
+"in toolbars or context menus.\n"
+"[b]Incremental search:[/b] Like [ItemList] and [Tree], [PopupMenu] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/PopupMenu.xml
@@ -46721,7 +47204,16 @@ msgid ""
msgstr ""
#: doc/classes/ProjectSettings.xml
-msgid "Message to be displayed before the backtrace when the engine crashes."
+msgid ""
+"Message to be displayed before the backtrace when the engine crashes. By "
+"default, this message is only used in exported projects due to the editor-"
+"only override applied to this setting."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Editor-only override for [member debug/settings/crash_handler/message]. Does "
+"not affect exported projects in debug or release mode."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -46966,6 +47458,18 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default naming style for scene files to infer from their root nodes. "
+"Possible options are:\n"
+"- [code]0[/code] (Auto): Uses the scene root name as is without changing its "
+"casing.\n"
+"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase "
+"casing.\n"
+"- [code]2[/code] (snake_case): Converts the scene root name to snake_case "
+"casing."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -47191,6 +47695,198 @@ msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 1."
msgstr ""
@@ -47399,6 +48095,198 @@ msgid "Optional name for the 2D render layer 9."
msgstr ""
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 1."
msgstr ""
@@ -47666,6 +48554,49 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default cell height for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_height].\n"
+"[b]Note:[/b] Currently not implemented."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 2D navigation maps. See [method "
+"Navigation2DServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell height for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_height]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 3D navigation maps. See [method "
+"NavigationServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default map up vector for 3D navigation maps. See [method NavigationServer."
+"map_set_up]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -48339,20 +49270,28 @@ msgid ""
"cause.\n"
"The default value is a conservative one, so you are advised to tweak it "
"according to the hardware you are targeting.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"The default is a very conservative override for [code]rendering/gles3/"
-"shaders/max_concurrent_compiles[/code].\n"
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
"Depending on the specific devices you are targeting, you may want to raise "
"it.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
+"Depending on the specific browsers you are targeting, you may want to raise "
+"it.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -48360,19 +49299,28 @@ msgid ""
"The maximum size, in megabytes, that the ubershader cache can grow up to. On "
"startup, the least recently used entries will be deleted until the total "
"size is within bounds.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/ubershader_cache_size_mb[/"
-"code], so a smaller maximum size can be configured for mobile platforms, "
-"where storage space is more limited.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for mobile platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for web platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] Currently, shader caching is generally unavailable on web "
+"platforms.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -48404,14 +49352,22 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/shader_compilation_mode[/"
-"code], so asynchronous compilation can be disabled for mobile.\n"
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on mobile platforms.\n"
"You may want to do that since mobile GPUs generally won't support "
"ubershaders due to their complexity."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on web platforms.\n"
+"You may want to do that since certain browsers (especially on mobile "
+"platforms) generally won't support ubershaders due to their complexity."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
@@ -49168,7 +50124,6 @@ msgid ""
"- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/"
"code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, "
"small grid radius values may lead to unwanted groupings.\n"
-"[/codeblock]\n"
"[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more "
"effective and faster [VisibilityNotifier] functionality. For most use cases, "
"[method Vector3.distance_to] or [method Vector3.distance_squared_to] are "
@@ -51315,6 +52270,22 @@ msgid "Makes text fill width."
msgstr ""
#: doc/classes/RichTextLabel.xml
+msgid "Aligns top of the inline image to the top of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns center of the inline image to the center of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns bottom of the inline image to the baseline of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns bottom of the inline image to the bottom of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
msgid "Each list item has a number marker."
msgstr ""
@@ -53052,8 +54023,8 @@ msgid ""
" yield(get_tree().create_timer(1.0), \"timeout\")\n"
" print(\"Timer ended.\")\n"
"[/codeblock]\n"
-"The timer will be automatically freed after its time elapses, so be aware "
-"that any reference you might have kept to it will become invalid."
+"The timer will be dereferenced after its time elapses. To preserve the "
+"timer, you can keep a reference to it. See [Reference]."
msgstr ""
#: doc/classes/SceneTreeTimer.xml
@@ -53085,24 +54056,23 @@ msgid ""
"manually (i.e. by using [code]Tween.new()[/code]) are invalid. They can't be "
"used for tweening values, but you can do manual interpolation with [method "
"interpolate_value].\n"
-"A [SceneTreeTween] animation is composed of a sequence of [Tweener]s, which "
-"by default are executed one after another. You can create a sequence by "
-"appending [Tweener]s to the [SceneTreeTween]. Animating something with a "
-"[Tweener] is called tweening. Example tweening sequence looks like this:\n"
+"A tween animation is created by adding [Tweener]s to the [SceneTreeTween] "
+"object, using [method tween_property], [method tween_interval], [method "
+"tween_callback] or [method tween_method]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1)\n"
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"This sequence will make the [code]$Sprite[/code] node turn red, then shrink "
-"and finally the [method Node.queue_free] is called to remove the sprite. See "
-"methods [method tween_property], [method tween_interval], [method "
-"tween_callback] and [method tween_method] for more usage information.\n"
+"This sequence will make the [code]$Sprite[/code] node turn red, then shrink, "
+"before finally calling [method Node.queue_free] to free the sprite. "
+"[Tweener]s are executed one after another by default. This behavior can be "
+"changed using [method parallel] and [method set_parallel].\n"
"When a [Tweener] is created with one of the [code]tween_*[/code] methods, a "
"chained method call can be used to tweak the properties of this [Tweener]. "
-"For example, if you want to set different transition type in the above "
-"example, you can do:\n"
+"For example, if you want to set a different transition type in the above "
+"example, you can use [method set_trans]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1).set_trans(Tween."
@@ -53111,8 +54081,9 @@ msgid ""
"TRANS_BOUNCE)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Most of the [SceneTreeTween] methods can be chained this way too. In this "
-"example the [SceneTreeTween] is bound and have set a default transition:\n"
+"Most of the [SceneTreeTween] methods can be chained this way too. In the "
+"following example the [SceneTreeTween] is bound to the running script's node "
+"and a default transition is set for its [Tweener]s:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween().bind_node(self).set_trans(Tween."
"TRANS_ELASTIC)\n"
@@ -53120,16 +54091,16 @@ msgid ""
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Another interesting use for [SceneTreeTween]s is animating arbitrary set of "
+"Another interesting use for [SceneTreeTween]s is animating arbitrary sets of "
"objects:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"for sprite in get_children():\n"
-" tween.tween_property(sprite, \"position\", Vector2(), 1)\n"
+" tween.tween_property(sprite, \"position\", Vector2(0, 0), 1)\n"
"[/codeblock]\n"
"In the example above, all children of a node are moved one after another to "
"position (0, 0).\n"
-"Some [Tweener]s use transitions and eases. The first accepts an [enum Tween."
+"Some [Tweener]s use transitions and eases. The first accepts a [enum Tween."
"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 Tween.EaseType] constant, and "
@@ -53141,7 +54112,7 @@ msgid ""
"tween_cheatsheet.png]Tween easing and transition types cheatsheet[/url]\n"
"[b]Note:[/b] All [SceneTreeTween]s will automatically start by default. To "
"prevent a [SceneTreeTween] from autostarting, you can call [method stop] "
-"immediately after it was created."
+"immediately after it is created."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53171,21 +54142,24 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
-"Processes the [SceneTreeTween] by given [code]delta[/code] value, in "
-"seconds. Mostly useful when the [SceneTreeTween] is paused, for controlling "
-"it manually. Can also be used to end the [SceneTreeTween] animation "
-"immediately, by using [code]delta[/code] longer than the whole duration.\n"
+"Processes the [SceneTreeTween] by the given [code]delta[/code] value, in "
+"seconds. This is mostly useful for manual control when the [SceneTreeTween] "
+"is paused. It can also be used to end the [SceneTreeTween] animation "
+"immediately, by setting [code]delta[/code] longer than the whole duration of "
+"the [SceneTreeTween] animation.\n"
"Returns [code]true[/code] if the [SceneTreeTween] still has [Tweener]s that "
"haven't finished.\n"
-"[b]Note:[/b] The [SceneTreeTween] will become invalid after finished, but "
-"you can call [method stop] after the step, to keep it and reset."
+"[b]Note:[/b] The [SceneTreeTween] will become invalid in the next processing "
+"frame after its animation finishes. Calling [method stop] after performing "
+"[method custom_step] instead keeps and resets the [SceneTreeTween]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Returns the total time in seconds the [SceneTreeTween] has been animating (i."
-"e. time since it started, not counting pauses etc.). The time is affected by "
-"[method set_speed_scale] and [method stop] will reset it to [code]0[/code].\n"
+"e. the time since it started, not counting pauses etc.). The time is "
+"affected by [method set_speed_scale], and [method stop] will reset it to "
+"[code]0[/code].\n"
"[b]Note:[/b] As it results from accumulating frame deltas, the time returned "
"after the [SceneTreeTween] has finished animating will be slightly greater "
"than the actual [SceneTreeTween] duration."
@@ -53221,11 +54195,10 @@ msgstr ""
msgid ""
"Returns whether the [SceneTreeTween] is valid. A valid [SceneTreeTween] is a "
"[SceneTreeTween] contained by the scene tree (i.e. the array from [method "
-"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). "
-"[SceneTreeTween] might become invalid when it has finished tweening or was "
-"killed, also when created with [code]Tween.new()[/code]. Invalid "
-"[SceneTreeTween] can't have [Tweener]s appended, because it can't animate "
-"them. You can however still use [method interpolate_value]."
+"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). A "
+"[SceneTreeTween] might become invalid when it has finished tweening, is "
+"killed, or when created with [code]SceneTreeTween.new()[/code]. Invalid "
+"[SceneTreeTween]s can't have [Tweener]s appended."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53265,16 +54238,15 @@ msgstr ""
msgid ""
"Sets the number of times the tweening sequence will be repeated, i.e. "
"[code]set_loops(2)[/code] will run the animation twice.\n"
-"Calling this method without arguments will make the [SceneTreeTween] run "
-"infinitely, until it is either killed by [method kill] or by freeing bound "
-"node, or all the animated objects have been freed (which makes further "
+"Calling this method without arguments will make the [Tween] run infinitely, "
+"until either it is killed with [method kill], the [Tween]'s bound node is "
+"freed, or all the animated objects have been freed (which makes further "
"animation impossible).\n"
"[b]Warning:[/b] Make sure to always add some duration/delay when using "
-"infinite loops. 0-duration looped animations (e.g. single [CallbackTweener] "
-"with no delay or [PropertyTweener] with invalid node) are equivalent to "
-"infinite [code]while[/code] loops and will freeze your game. If a "
-"[SceneTreeTween]'s lifetime depends on some node, always use [method "
-"bind_node]."
+"infinite loops. To prevent the game freezing, 0-duration looped animations "
+"(e.g. a single [CallbackTweener] with no delay) are stopped after a small "
+"number of loops, which may produce unexpected results. If a [Tween]'s "
+"lifetime depends on some node, always use [method bind_node]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53336,10 +54308,10 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Creates and appends an [IntervalTweener]. This method can be used to create "
-"delays in the tween animation, as an alternative for using the delay in "
-"other [Tweener]s or when there's no animation (in which case the "
-"[SceneTreeTween] acts as a timer). [code]time[/code] is the length of the "
-"interval, in seconds.\n"
+"delays in the tween animation, as an alternative to using the delay in other "
+"[Tweener]s, or when there's no animation (in which case the [SceneTreeTween] "
+"acts as a timer). [code]time[/code] is the length of the interval, in "
+"seconds.\n"
"Example: creating an interval in code execution.\n"
"[codeblock]\n"
"# ... some code\n"
@@ -53393,8 +54365,8 @@ msgid ""
"Creates and appends a [PropertyTweener]. This method tweens a "
"[code]property[/code] of an [code]object[/code] between an initial value and "
"[code]final_val[/code] in a span of time equal to [code]duration[/code], in "
-"seconds. The initial value by default is a value at the time the tweening of "
-"the [PropertyTweener] start. For example:\n"
+"seconds. The initial value by default is the property's value at the time "
+"the tweening of the [PropertyTweener] starts. For example:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"tween.tween_property($Sprite, \"position\", Vector2(100, 200), 1)\n"
@@ -53425,16 +54397,15 @@ msgid ""
"Emitted when the [SceneTreeTween] has finished all tweening. Never emitted "
"when the [SceneTreeTween] is set to infinite looping (see [method "
"set_loops]).\n"
-"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) after this signal "
-"is emitted, but it doesn't happen immediately, but on the next processing "
-"frame. Calling [method stop] inside the signal callback will preserve the "
-"[SceneTreeTween]."
+"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) in the next "
+"processing frame after this signal is emitted. Calling [method stop] inside "
+"the signal callback will prevent the [SceneTreeTween] from being removed."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Emitted when a full loop is complete (see [method set_loops]), providing the "
-"loop index. This signal is not emitted after final loop, use [signal "
+"loop index. This signal is not emitted after the final loop, use [signal "
"finished] instead for this case."
msgstr ""
@@ -53442,7 +54413,7 @@ msgstr ""
msgid ""
"Emitted when one step of the [SceneTreeTween] is complete, providing the "
"step index. One step is either a single [Tweener] or a group of [Tweener]s "
-"running parallelly."
+"running in parallel."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -54774,7 +55745,12 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-msgid "Scale part of the local transformation."
+msgid ""
+"Scale part of the local transformation.\n"
+"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, the scale values will either be all "
+"positive or all negative."
msgstr ""
#: doc/classes/Spatial.xml
@@ -57405,11 +58381,11 @@ msgstr ""
msgid ""
"Returns [code]true[/code] if this string contains a valid integer.\n"
"[codeblock]\n"
-"print(\"7\".is_valid_int()) # Prints \"True\"\n"
-"print(\"14.6\".is_valid_int()) # Prints \"False\"\n"
-"print(\"L\".is_valid_int()) # Prints \"False\"\n"
-"print(\"+3\".is_valid_int()) # Prints \"True\"\n"
-"print(\"-12\".is_valid_int()) # Prints \"True\"\n"
+"print(\"7\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"14.6\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"L\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"+3\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"-12\".is_valid_integer()) # Prints \"True\"\n"
"[/codeblock]"
msgstr ""
@@ -60875,6 +61851,10 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml
+msgid "If [code]true[/code], this TileMap bakes a navigation region."
+msgstr ""
+
+#: doc/classes/TileMap.xml
msgid "If [code]true[/code], the cell's UVs will be clipped."
msgstr ""
@@ -60981,6 +61961,10 @@ msgid "The TileMap orientation mode. See [enum Mode] for possible values."
msgstr ""
#: doc/classes/TileMap.xml
+msgid "The navigation layers the TileMap generates its navigation regions in."
+msgstr ""
+
+#: doc/classes/TileMap.xml
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 "
@@ -62112,7 +63096,12 @@ msgstr ""
#: doc/classes/Transform2D.xml
msgid ""
"Returns a copy of the transform scaled by the given [code]scale[/code] "
-"factor, using matrix multiplication."
+"factor, using matrix multiplication.\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
#: doc/classes/Transform2D.xml
@@ -62267,7 +63256,18 @@ msgid ""
"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]."
+"to remove it from the [Tree].\n"
+"[b]Incremental search:[/b] Like [ItemList] and [PopupMenu], [Tree] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/Tree.xml
@@ -65783,11 +66783,12 @@ msgid "This enabler will stop [Particles2D] nodes."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _process function."
+msgid "This enabler will stop the parent's [method Node._process] function."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _physics_process function."
+msgid ""
+"This enabler will stop the parent's [method Node._physics_process] function."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
@@ -65827,6 +66828,16 @@ msgid "The VisibilityNotifier's bounding box."
msgstr ""
#: doc/classes/VisibilityNotifier.xml
+msgid ""
+"In addition to checking whether a node is on screen or within a [Camera]'s "
+"view, VisibilityNotifier can also optionally check whether a node is within "
+"a specified maximum distance when using a [Camera] with perspective "
+"projection. This is useful for throttling the performance requirements of "
+"nodes that are far away.\n"
+"[b]Note:[/b] This feature will be disabled if set to 0.0."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier.xml
msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view."
msgstr ""
@@ -70572,6 +71583,16 @@ msgid "The amount of shader rebinds in the frame."
msgstr ""
#: doc/classes/VisualServer.xml
+msgid ""
+"The peak amount of shaders that have been under compilation in the frame.\n"
+"This is useful to know when asynchronous shader compilation has finished for "
+"the current shaders on screen.\n"
+"[b]Note:[/b] For complete certainty, only assume there are no outstanding "
+"compilations when this value is zero for at least two frames in a row.\n"
+"Unimplemented in the GLES2 rendering backend, always returns 0."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
msgid "The amount of surface changes in the frame."
msgstr ""
@@ -73768,8 +74789,8 @@ msgstr ""
#: doc/classes/World.xml
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."
+"scenario, a navigation map and a sound space. Spatial nodes register their "
+"resources into the current world."
msgstr ""
#: doc/classes/World.xml
@@ -73784,8 +74805,13 @@ msgstr ""
#: doc/classes/World.xml
msgid ""
-"The World's fallback_environment will be used if the World's [Environment] "
-"fails or is missing."
+"The World's fallback environment will be used if [member environment] fails "
+"or is missing."
+msgstr ""
+
+#: doc/classes/World.xml
+msgid ""
+"The [RID] of this world's navigation map. Used by the [NavigationServer]."
msgstr ""
#: doc/classes/World.xml
@@ -73803,8 +74829,8 @@ msgstr ""
#: doc/classes/World2D.xml
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."
+"visual scenario, a navigation map and a sound space. 2D nodes register their "
+"resources into the current 2D world."
msgstr ""
#: doc/classes/World2D.xml
@@ -73822,6 +74848,11 @@ msgstr ""
#: doc/classes/World2D.xml
msgid ""
+"The [RID] of this world's navigation map. Used by the [Navigation2DServer]."
+msgstr ""
+
+#: doc/classes/World2D.xml
+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 ""
diff --git a/doc/translations/fr.po b/doc/translations/fr.po
index 587e9e0512..2dcac4940b 100644
--- a/doc/translations/fr.po
+++ b/doc/translations/fr.po
@@ -61,7 +61,7 @@ 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: 2022-06-08 05:20+0000\n"
+"PO-Revision-Date: 2022-06-28 04:52+0000\n"
"Last-Translator: Maxime Leroy <lisacintosh@gmail.com>\n"
"Language-Team: French <https://hosted.weblate.org/projects/godot-engine/"
"godot-class-reference/fr/>\n"
@@ -70,7 +70,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.13-dev\n"
+"X-Generator: Weblate 4.13.1-dev\n"
#: doc/tools/make_rst.py
msgid "Description"
@@ -548,9 +548,10 @@ msgstr ""
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml
+#, fuzzy
msgid ""
"Compares two values by checking their actual contents, recursing into any "
-"`Array` or `Dictionary` up to its deepest level.\n"
+"[Array] or [Dictionary] up to its deepest level.\n"
"This compares to [code]==[/code] in a number of ways:\n"
"- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/"
"code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] "
@@ -607,6 +608,7 @@ msgstr ""
"nouveau en une instance. Utile pour la désérialisation."
#: modules/gdscript/doc_classes/@GDScript.xml
+#, 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 "
@@ -621,7 +623,7 @@ msgid ""
"- 1.0: Linear\n"
"- Greater than 1.0 (exclusive): Ease in\n"
"[/codeblock]\n"
-"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.4/img/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/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]."
@@ -983,6 +985,7 @@ msgstr ""
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml
+#, fuzzy
msgid ""
"Linearly interpolates between two values by the factor defined in "
"[code]weight[/code]. To perform interpolation, [code]weight[/code] should be "
@@ -1806,6 +1809,7 @@ msgstr ""
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml
+#, fuzzy
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] "
@@ -1826,7 +1830,7 @@ msgid ""
"[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/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/img/"
"smoothstep_ease_comparison.png]Comparison between smoothstep() and ease(x, "
"-1.6521) return values[/url]"
msgstr ""
@@ -2078,9 +2082,9 @@ msgid ""
"[code]true[/code] encoding objects is allowed (and can potentially include "
"code)."
msgstr ""
-"Encode la valeur d'une variable en un tableau d'octets ([i]byte array[/i]). "
-"Lorsque [code]full_objects[/code] a la valeur [code]true[/code], l'encodage "
-"d'objets est autorisé (et peut potentiellement inclure du code)."
+"Encode la valeur d'une variable en un tableau d'octets. Lorsque "
+"[code]full_objects[/code] a la valeur [code]true[/code], l'encodage d'objets "
+"est autorisé (et peut potentiellement inclure du code)."
#: modules/gdscript/doc_classes/@GDScript.xml
msgid ""
@@ -3985,9 +3989,8 @@ msgid "Gamepad right analog trigger."
msgstr "Gâchette analogique droite de la manette."
#: doc/classes/@GlobalScope.xml
-#, fuzzy
msgid "VR Controller analog trigger."
-msgstr "Axe du déclencheur gauche du contrôleur de jeu."
+msgstr "Gâchette analogique de la manette VR."
#: doc/classes/@GlobalScope.xml
#, fuzzy
@@ -4015,7 +4018,7 @@ msgid ""
"MIDI note OFF message. See the documentation of [InputEventMIDI] for "
"information of how to use MIDI inputs."
msgstr ""
-"Le message MIDI pour la note OFF. Référez vous à la documentation de "
+"Le message OFF pour la note MIDI. Référez vous à la documentation de "
"[InputEventMIDI] pour avoir des informations concernant les entrées MIDI."
#: doc/classes/@GlobalScope.xml
@@ -4039,18 +4042,17 @@ msgid ""
"MIDI control change message. This message is sent when a controller value "
"changes. Controllers include devices such as pedals and levers."
msgstr ""
-"Le message MIDI de changement de contrôle. Ce message est envoyé lorsqu'un "
+"Le message de changement de contrôle MIDI. Ce message est envoyé lorsqu'un "
"contrôleur change de valeur. Les contrôleurs comprennent des dispositifs "
"comme des pédales, des leviers."
#: doc/classes/@GlobalScope.xml
-#, fuzzy
msgid ""
"MIDI program change message. This message sent when the program patch number "
"changes."
msgstr ""
-"Le message de changement de programme MIDI. Ce message est envoyé lorsque "
-"l'on reçoit une consigne de changement de programme."
+"Le message de changement de programme MIDI. Ce message est envoyé lorsque le "
+"nombre du patch du programme est changée."
#: doc/classes/@GlobalScope.xml
msgid ""
@@ -4064,6 +4066,8 @@ msgid ""
"MIDI pitch bend message. This message is sent to indicate a change in the "
"pitch bender (wheel or lever, typically)."
msgstr ""
+"Le message de la hauteur MIDI. Ce message est envoyé pour indiquer un "
+"changement dans le plieur de hauteur (généralement une roue ou un levier)."
#: doc/classes/@GlobalScope.xml
msgid ""
@@ -4404,6 +4408,15 @@ msgid ""
"specified by appending [code]:integer[/code] to the name, e.g. [code]\"Zero,"
"One,Three:3,Four,Six:6\"[/code]."
msgstr ""
+"Indique qu'une propriété d'un entier, un flottant ou une chaine de "
+"caractères est une valeur énumérée à choisir depuis une liste spécifiée par "
+"l'indicateur.\n"
+"Cet indicateur est une liste séparée par des virgules de noms tels que "
+"[code]\"Bonjour,Salut,Autre\"[/code]. Pour les propriétés d'entiers et de "
+"flottants, le premier nom de la liste a valeur 0, le suivant 1, et ainsi de "
+"suite. Les valeurs explicites peuvent également être spécifiées en ajoutant "
+"[code]:integer[/code] au nom, par ex. [code]\"Zéro,Un,Trois:3,Quatre,"
+"Six:6\"[/code]."
#: doc/classes/@GlobalScope.xml
msgid ""
@@ -4462,6 +4475,15 @@ msgstr ""
"les couches de physique 2D optionnellement nommées."
#: doc/classes/@GlobalScope.xml
+#, fuzzy
+msgid ""
+"Hints that an integer property is a bitmask using the optionally named 2D "
+"navigation layers."
+msgstr ""
+"Indique qu'une propriété nombre entier est un masque de bits utilisant les "
+"couches de rendu 2D optionnellement nommées."
+
+#: doc/classes/@GlobalScope.xml
msgid ""
"Hints that an integer property is a bitmask using the optionally named 3D "
"render layers."
@@ -4478,6 +4500,15 @@ msgstr ""
"couches de physique 3D optionnellement nommées."
#: doc/classes/@GlobalScope.xml
+#, fuzzy
+msgid ""
+"Hints that an integer property is a bitmask using the optionally named 3D "
+"navigation layers."
+msgstr ""
+"Indique qu'une propriété nombre entier est un masque de bits utilisant les "
+"couches de rendu 2D optionnellement nommées."
+
+#: doc/classes/@GlobalScope.xml
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 "
@@ -4947,6 +4978,15 @@ msgid ""
"var box2 = box.expand(Vector3(0, -1, 2))\n"
"[/codeblock]"
msgstr ""
+"Retourne une copie de ce [AABB] aggrandi pour inclure le point donné.\n"
+"[b]Exemple :[/b]\n"
+"[codeblock]\n"
+"# position -(3, 2, 0,) taille (1, 1, 1)\n"
+"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n"
+"# position -(3, -1, 0,) taille (3, 4, 2,), il contient maintenant l'ABB "
+"original et le point Vector3(0, -1, 2)\n"
+"var box2 = box.expand(Vector3(0, -1, 2))\n"
+"/[codeblock]"
#: doc/classes/AABB.xml
msgid "Returns the volume of the [AABB]."
@@ -4957,6 +4997,8 @@ msgid ""
"Returns the center of the [AABB], which is equal to [member position] + "
"([member size] / 2)."
msgstr ""
+"Retourne le centre du [AABB], qui est égal à [member position] + ([member "
+"size] / 2)."
#: doc/classes/AABB.xml
msgid "Gets the position of the 8 endpoints of the [AABB] in space."
@@ -5138,6 +5180,10 @@ msgid ""
"may cause a crash. If you wish to hide it or any of its children, use their "
"[member CanvasItem.visible] property."
msgstr ""
+"Retourne le label utilisé pour le texte intégré.\n"
+"[b]Avertissement :[/b] Il s'agit d'un nœud interne nécessaire, le retirer et "
+"le libérer peut causer un plantage. Si vous voulez le cacher lui ou l'un de "
+"ses enfants, utilisez plutôt [membre CanvasItem.visible]."
#: doc/classes/AcceptDialog.xml
msgid ""
@@ -5146,6 +5192,10 @@ msgid ""
"may cause a crash. If you wish to hide it or any of its children, use their "
"[member CanvasItem.visible] property."
msgstr ""
+"Retourne l'instance du [Button] \"OK\".\n"
+"[b]Avertissement :[/b] Il s'agit d'un nœud interne nécessaire, le retirer et "
+"le libérer peut causer un plantage. Si vous voulez le cacher lui ou l'un de "
+"ses enfants, utilisez plutôt [membre CanvasItem.visible]."
#: doc/classes/AcceptDialog.xml
msgid ""
@@ -5156,6 +5206,7 @@ msgstr ""
"entrée, le dialogue sera accepté."
#: doc/classes/AcceptDialog.xml
+#, fuzzy
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 "
@@ -5164,7 +5215,7 @@ msgid ""
"custom_action] signal or cancel this dialog."
msgstr ""
"Enlever le [code]bouton[/code] de la boite de la boîte de dialogue. Ne "
-"libère pas le bouton. Le bouton dois être un [Button] ajouté avec la méthode "
+"libère PAS le bouton. Le bouton dois être un [Button] ajouté avec la méthode "
"[method add_button] ou [method add_cancel] ."
#: doc/classes/AcceptDialog.xml
@@ -6533,7 +6584,7 @@ msgstr ""
"- L'animation à mélanger quand la valeur est dans la plage [code][-1.0, 0.0]"
"[/code].\n"
"- L'animation à mélanger quand la valeur est dans la plage [code][0.0, 1.0][/"
-"code]."
+"code]"
#: doc/classes/AnimationNodeAdd3.xml doc/classes/AnimationNodeAnimation.xml
#: doc/classes/AnimationNodeBlend2.xml
@@ -7549,6 +7600,20 @@ msgid ""
"time this is called, they may be updated too early. To perform the update "
"immediately, call [code]advance(0)[/code]."
msgstr ""
+"Joue l'animation avec la clé [code]name[/code]. Les temps de mélange et la "
+"vitesse peuvent être définis. Si [code]custom_speed[/code] est négatif et "
+"[code]from_end[/code] est [code]true[/code], l'animation se joué à l'envers "
+"et depuis la fin (qui est équivalent à appeler [method play_backwards)].\n"
+"Le [AnimationPlayer] garde la trace de son animation actuelle ou la dernière "
+"avec [member assigned_animation]. Si cette méthode est appelée avec cette "
+"même animation nommée [code]name[/code], ou sans paramètre [code]name[/"
+"code], l'animation assignée reprendra le jeu si elle a été interrompue, ou "
+"redémarrer si elle a été arrêtée (voir [method stop] pour mettre en pause et "
+"arrêter). Si l'animation jouait déjà, elle continuera d'être jouée.\n"
+"[b]Note :[/b] L'animation sera mise à jour la prochaine fois que "
+"[AnimationPlayer] sera traitée. Si d'autres variables sont mises à jour en "
+"même temps, elles peuvent être mises à jour trop tôt. Pour effectuer une "
+"mise à jour immédiate, appelez [code]advance(0)[/code]."
#: doc/classes/AnimationPlayer.xml
msgid ""
@@ -7595,6 +7660,14 @@ msgid ""
"animation_finished]. If you want to skip animation and emit the signal, use "
"[method advance]."
msgstr ""
+"Avance la lecture de l'animation à la position [code]secondes[/code] dans le "
+"temps (en secondes). Si [code]update[/code] est [code]true[/code], "
+"l'animation se mettra à jour, sinon elle le sera au moment du traitement. "
+"Les événements entre la trame actuel et la position [code]secondes[/code] "
+"sont ignorés.\n"
+"[b]Note :[/b] Aller à la fin de l'animation n'émet pas le signal [signal "
+"animation_finished]. Si vous voulez sauter l'animation et émettre le signal, "
+"utilisez plutôt [method advance]."
#: doc/classes/AnimationPlayer.xml
msgid ""
@@ -7881,15 +7954,15 @@ msgid ""
"_physics_process])."
msgstr ""
"Les animations progresseront pendant les trames physiques (dans [méthode "
-"Node._physics_process)]"
+"Node._physics_process)]."
#: doc/classes/AnimationTree.xml
msgid ""
"The animations will progress during the idle frame (i.e. [method Node."
"_process])."
msgstr ""
-"Les animations progresseront pendant les trames d'inactivité (dans [méthode "
-"Node._process)]"
+"Les animations progresseront pendant les trames d'inactivité (dans [method "
+"Node._process])."
#: doc/classes/AnimationTree.xml
msgid "The animations will only progress manually (see [method advance])."
@@ -8486,6 +8559,9 @@ msgid ""
"multiplies the gravity vector. This is useful to alter the force of gravity "
"without altering its direction."
msgstr ""
+"L'intensité de la gravité (en mètres par seconde au carré). Cette valeur "
+"multiplie le vecteur de gravité. Ceci est utile pour modifier la force de la "
+"gravité sans modifier sa direction."
#: doc/classes/Area.xml doc/classes/Area2D.xml
msgid ""
@@ -8498,6 +8574,8 @@ msgid ""
"If [code]true[/code], gravity is calculated from a point (set via [member "
"gravity_vec]). See also [member space_override]."
msgstr ""
+"Si [code]true[/code], la gravité est calculée à partir d'un point (set via "
+"[member gravity_vec)]. Voir aussi [member space_override]."
#: doc/classes/Area.xml doc/classes/Area2D.xml
msgid ""
@@ -8544,16 +8622,21 @@ msgstr ""
#: doc/classes/Area.xml
msgid "If [code]true[/code], the area applies reverb to its associated audio."
msgstr ""
+"Si [code]true[/code], la zone applique de la réverbération à l'audio qui lui "
+"est associé."
#: doc/classes/Area.xml
msgid "The reverb bus name to use for this area's associated audio."
msgstr ""
+"Le nom de bus de réverbération à utiliser pour l'audio associé à cette aire."
#: doc/classes/Area.xml
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 ""
+"Le degré de réverbération de cette zone est un effet uniforme. L'intervalle "
+"va de [code]0[/code] à [code]1[/code] avec une précision de [code]0.1[/code]."
#: doc/classes/Area.xml doc/classes/Area2D.xml
msgid ""
@@ -8645,6 +8728,20 @@ msgid ""
"the [PhysicsServer]. Get the [CollisionShape] node with [code]self."
"shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
+"Émis quand une des [Shape] d'un [PhysicsBody] ou [GridMap] entre dans une "
+"des [Shape] de cette Area. Nécessite [member monitoring] d'être à "
+"[code]true[/code]. Les [GridMap] sont détectées si le [MeshLibrary] à une "
+"[Shape] de Collision.\n"
+"[code]body_rid[/code] le [RID] du [CollisionObject] du [PhysicsBody] ou du "
+"[MeshLibrary] utilisé par le [PhysicsServer].\n"
+"[code]body[/code] le [Node], s'il existe dans l'arborescence, du "
+"[PhysicsBody] ou [GridMap].\n"
+"[code]body_shape_index[/code] l'index de la [Shape] du [PhysicsBody] ou "
+"[GridMap] utilisé par le [PhysicsServer]. Obtenez le nœud [CollisionShape] "
+"avec [code]body.shape_owner_get_owner(body_shape_index)[/code].\n"
+"[code]local_shape_index[/code] l'index de la [Shape] de cette Area utilisée "
+"par le [PhysicsServer]. Obtenez le nœud [CollisionShape] nœud avec "
+"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
#: doc/classes/Area.xml doc/classes/Area2D.xml
msgid "This area does not affect gravity/damping."
@@ -8709,6 +8806,14 @@ msgid ""
"list is modified once during the physics step, not immediately after objects "
"are moved. Consider using signals instead."
msgstr ""
+"Retourne une liste des [Area2D] qui s'intersectent. Le [member "
+"CollisionObject2D.collision_layer] de l'aire intersectant doit faire partie "
+"du [membre CollisionObject2D.collision_mask] de cette aire pour être "
+"détecté.\n"
+"Pour des raisons de performance (les colonnes sont toutes traitées en même "
+"temps) cette liste est modifiée une fois pendant l'étape physique, pas "
+"immédiatement après le déplacement des objets. Considérez plutôt utiliser "
+"des signaux."
#: doc/classes/Area2D.xml
msgid ""
@@ -8806,6 +8911,18 @@ msgid ""
"used by the [Physics2DServer]. Get the [CollisionShape2D] node with "
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
+"Émis lorsque l'une des [Shape2D] de l'autre Area2D entre dans l'une des "
+"[Shape2D] de cette Area2D. Nécessite [member monitoring] d'être définie à "
+"[code]true[/code].\n"
+"[code]area_rid[/code] le [RID] du [CollisionObject2D] de l'autre Area2D "
+"utilisé par [Physics2DServer].\n"
+"[code]area[/code] l'autre Area2D.\n"
+"[code]area_shape_index[/code] l'index de la [Shape2D] de l'autre Area2D "
+"utilisée par [Physics2DServer]. Obtenez le nœud [CollisionShape2D] avec "
+"[code]area.shape_owner_get_owner(area_shape_index)[/code].\n"
+"[code]local_shape_index[/code] l'index de la [Shape2D] de cette Area2D "
+"utilisée par [Physics2DServer]. Obtenez le nœud [CollisionShape2D] avec "
+"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
#: doc/classes/Area2D.xml
msgid ""
@@ -8821,6 +8938,18 @@ msgid ""
"used by the [Physics2DServer]. Get the [CollisionShape2D] node with "
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
+"Émis lorsque l'une des [Shape2D] de l'autre Area2D quitte l'une des "
+"[Shape2D] de cette Area2D. Nécessite [member monitoring] d'être définie à "
+"[code]true[/code].\n"
+"[code]area_rid[/code] le [RID] du [CollisionObject2D] de l'autre Area2D "
+"utilisé par [Physics2DServer].\n"
+"[code]area[/code] l'autre Area2D.\n"
+"[code]area_shape_index[/code] l'index de la [Shape2D] de l'autre Area2D "
+"utilisée par [Physics2DServer]. Obtenez le nœud [CollisionShape2D] avec "
+"[code]area.shape_owner_get_owner(area_shape_index)[/code].\n"
+"[code]local_shape_index[/code] l'index de la [Shape2D] de cette Area2D "
+"utilisée par [Physics2DServer]. Obtenez le nœud [CollisionShape2D] avec "
+"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
#: doc/classes/Area2D.xml
msgid ""
@@ -8830,6 +8959,11 @@ msgid ""
"[code]body[/code] the [Node], if it exists in the tree, of the other "
"[PhysicsBody2D] or [TileMap]."
msgstr ""
+"Émis quand un [PhysicsBody2D] ou [TileMap] entre dans cette Area2D. "
+"Nécessite [member monitoring] d'être [code]true[/code]. Les [TileMap] sont "
+"détectés si le [TileSet] a une [Shape2D] de Collision.\n"
+"[code]body[/code] le [Node], s'il existe dans l'arborescence, de l'autre "
+"[PhysicsBody2D] ou [TileMap]."
#: doc/classes/Area2D.xml
msgid ""
@@ -8839,6 +8973,11 @@ msgid ""
"[code]body[/code] the [Node], if it exists in the tree, of the other "
"[PhysicsBody2D] or [TileMap]."
msgstr ""
+"Émis quand un [PhysicsBody2D] ou [TileMap] quitte dans cette Area2D. "
+"Nécessite [member monitoring] d'être [code]true[/code]. Les [TileMap] sont "
+"détectés si le [TileSet] a une [Shape2D] de Collision.\n"
+"[code]body[/code] le [Node], s'il existe dans l'arborescence, de l'autre "
+"[PhysicsBody2D] ou [TileMap]."
#: doc/classes/Area2D.xml
msgid ""
@@ -8858,6 +8997,21 @@ msgid ""
"used by the [Physics2DServer]. Get the [CollisionShape2D] node with "
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
+"Émis quand une des [Shape2D] d'un [PhysicsBody2D] ou d'une [TileMap] entre "
+"dans une des [Shape2D] de cette Area2D. Nécessite [member monitoring] à "
+"[code]true[/code]. Les [TileMap] sont détectées si le [TileSet] a une "
+"[Shape2D] de collision.\n"
+"[code]body_rid[/code] le [RID] du [CollisionObject2D] du [PhysicsBody2D] ou "
+"du [TileSet] utilisé par le [Physics2DServer].\n"
+"[code]body[/code] le [Node], s'il existe dans l'arborescence, du "
+"[PhysicsBody2D] ou du [TileMap].\n"
+"[code]body_shape_index[/code] l'index de la [Shape2D] du [PhysicsBody2D] ou "
+"du [TileMap] utilisé par le [Physics2DServer]. Obtenez le nœud "
+"[CollisionShape2D] avec [code]body.shape_owner_get_owner(body_shape_index)[/"
+"code].\n"
+"[code]local_shape_index[/code] l'index de la [Shape2D] de ce Area2D utilisée "
+"par [Physics2DServer]. Obtenez le nœud [CollisionShape2D] avec [code]self."
+"shape_owner_get_owner(local_shape_index)[/code]."
#: doc/classes/Area2D.xml
msgid ""
@@ -8877,6 +9031,21 @@ msgid ""
"used by the [Physics2DServer]. Get the [CollisionShape2D] node with "
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
+"Émis quand une des [Shape2D] d'un [PhysicsBody2D] ou d'une [TileMap] quitte "
+"une des [Shape2D] de cette Area2D. Nécessite [member monitoring] à "
+"[code]true[/code]. Les [TileMap] sont détectées si le [TileSet] a une "
+"[Shape2D] de collision.\n"
+"[code]body_rid[/code] le [RID] du [CollisionObject2D] du [PhysicsBody2D] ou "
+"du [TileSet] utilisé par le [Physics2DServer].\n"
+"[code]body[/code] le [Node], s'il existe dans l'arborescence, du "
+"[PhysicsBody2D] ou du [TileMap].\n"
+"[code]body_shape_index[/code] l'index de la [Shape2D] du [PhysicsBody2D] ou "
+"du [TileMap] utilisé par le [Physics2DServer]. Obtenez le nœud "
+"[CollisionShape2D] avec [code]body.shape_owner_get_owner(body_shape_index)[/"
+"code].\n"
+"[code]local_shape_index[/code] l'index de la [Shape2D] de ce Area2D utilisée "
+"par [Physics2DServer]. Obtenez le nœud [CollisionShape2D] avec [code]self."
+"shape_owner_get_owner(local_shape_index)[/code]."
#: doc/classes/Array.xml
msgid "A generic array datatype."
@@ -9027,6 +9196,14 @@ msgid ""
"[b]Note:[/b] Calling [method bsearch] on an unsorted array results in "
"unexpected behavior."
msgstr ""
+"Cherche la position d'une valeur existante (ou la position d'insertion qui "
+"maintient l'ordre de tri, si la valeur n'est pas encore présente dans le "
+"tableau) en utilisant la recherche d'arbre binaire. En option, la valeur "
+"[code]before[/code] peut être passé. Si [code]false[/code], la position "
+"retournée vient après toutes les entrées existantes de la valeur dans le "
+"tableau.\n"
+"[b]Note :[/b] Appeler [method bsearch] sur un tableau non trié provoque un "
+"comportement inattendu."
#: doc/classes/Array.xml
msgid ""
@@ -9127,6 +9304,14 @@ msgid ""
"modifying a sub-array or dictionary in the copy will also impact those "
"referenced in the source array."
msgstr ""
+"Retourne une copie du tableau.\n"
+"Si [code]deep[/code] est [code]true[/code], une copie profonde est "
+"effectuée : tous les sous-tableaux et les sous-dictionnaires sont copié et "
+"ne seront pas partagés avec le tableau d'origine. Si [code]false[/code], une "
+"copie de surface est faite et les références aux tableaux et aux "
+"dictionnaires originaux sont conservés, de sorte que la modification d'un "
+"sous-tableau ou d'un sous-dictionnaire dans la copie modifiera aussi ceux "
+"référencés dans le tableau d'origine."
#: doc/classes/Array.xml doc/classes/PoolByteArray.xml
#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml
@@ -9204,6 +9389,11 @@ msgid ""
"[/code]. If the array is empty, accessing by index will pause project "
"execution when running from the editor."
msgstr ""
+"Renvoie le premier élément du tableau. Affiche une erreur et retourne "
+"[code]null[/code] si le tableau est vide.\n"
+"[b]Note :[/b] L'appel de cette fonction n'est pas le même que d'écrire "
+"[code]array[0][/code]. Si le tableau est vide, accéder à un élément par sa "
+"position va suspendre l'exécution de projet depuis l'éditeur."
#: doc/classes/Array.xml
msgid ""
@@ -9246,6 +9436,13 @@ msgid ""
"does [i]not[/i] imply the arrays are equal, because different arrays can "
"have identical hash values due to hash collisions."
msgstr ""
+"Renvoie entier 32 bits de chachage représentant le tableau ainsi que son "
+"contenu.\n"
+"[b]Note :[/b] Les [Array] avec le même contenu produira toujours la même "
+"hachage. Cependant, la réciproque n'est pas vrai. Retourner un hachage "
+"identiques [i]n'implique pas[/i] que les tableaux ont le même contenu, car "
+"différents tableaux peuvent avoir des hachages identiques à cause des "
+"collisions des hachages."
#: doc/classes/Array.xml
msgid ""
@@ -9277,6 +9474,9 @@ msgid ""
"comparable types. If the elements can't be compared, [code]null[/code] is "
"returned."
msgstr ""
+"Retourne la valeur maximale contenue dans le tableau si tous les éléments "
+"peuvent être comparés entre eux. Si les éléments ne peuvent pas être "
+"comparés, [code]null[/code] est retourné."
#: doc/classes/Array.xml
msgid ""
@@ -9284,6 +9484,9 @@ msgid ""
"comparable types. If the elements can't be compared, [code]null[/code] is "
"returned."
msgstr ""
+"Retourne la valeur minimale contenue dans le tableau si tous les éléments "
+"peuvent être comparés entre eux. Si les éléments ne peuvent pas être "
+"comparés, [code]null[/code] est retourné."
#: doc/classes/Array.xml
msgid ""
@@ -9297,6 +9500,16 @@ msgid ""
"removed element. The larger the array and the lower the index of the removed "
"element, the slower [method pop_at] will be."
msgstr ""
+"Retire et retourne l'élément du tableau à la [code]position[/code]. Si "
+"négatif, [code]position[/code] part de la la fin du tableau vers le début. "
+"Laisse le tableau intact et retourne [code]null[/code] si le tableau est "
+"vide ou s'il la position est en dehors des limites du tableau. Un message "
+"d'erreur est affiché lorsque la position est en dehors des limites du "
+"tableau, mais pas lorsque le tableau est vide.\n"
+"[b]Note :[/b] Pour les grands tableaux, cette méthode peut être plus lente "
+"que [method pop_back] car elle réindexera les éléments du tableau qui sont "
+"situés après l'élément enlevé. Plus le tableau est grand et plus la position "
+"de l'élément enlevé, plus [method pop_at] sera lent."
#: doc/classes/Array.xml
msgid ""
@@ -9304,6 +9517,9 @@ msgid ""
"if the array is empty, without printing an error message. See also [method "
"pop_front]."
msgstr ""
+"Retire et retourne le dernier élément du tableau. Retourne [code]null[/code] "
+"si le tableau est vide, sans affiche de message d'erreur. Voir aussi [method "
+"pop_front]."
#: doc/classes/Array.xml
msgid ""
@@ -9314,6 +9530,13 @@ 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 ""
+"Retire et retourne le premier élément du tableau. Retourne [code]null[/code] "
+"si le tableau est vide, sans afficher de message d'erreur. Voir aussi "
+"[method pop_back].\n"
+"[b]Note :[/b] Pour les grands tableaux, cette méthode peut être plus lente "
+"que [method pop_back] car elle réindexera les éléments du tableau suivants "
+"chaque fois qu'elle est appelée. Plus le tableau est grand et plus la "
+"position de l'élément enlevé, plus [method pop_front] sera lent."
#: doc/classes/Array.xml
msgid ""
@@ -9327,6 +9550,11 @@ 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 ""
+"Ajoute un élément au début du tableau. Voir aussi [method push_back].\n"
+"[b]Note :[/b] Pour les grands tableaux, cette méthode peut être plus lente "
+"que [method push_back] car elle réindexera les éléments du tableau suivants "
+"chaque fois qu'elle est appelée. Plus le tableau est grand et plus la "
+"position de l'élément enlevé, plus [method push_front] sera lent."
#: doc/classes/Array.xml
msgid ""
@@ -9338,6 +9566,13 @@ 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 ""
+"Retire un élément du tableau par index. Si l'index n'existe pas dans le "
+"tableau, rien ne se passe. Pour supprimer un élément en recherchant sa "
+"valeur, utilisez plutôt [method erase].\n"
+"[b]Note :[/b] Cette méthode ne renvoie pas une valeur.\n"
+"[b]Note :[/b] Sur de grands tableaux, cette méthode sera plus lente si "
+"l'élément enlevé est proche du début du tableau (index 0). C'est parce que "
+"tous les éléments placés après l'élément enlevé doivent être réindexés."
#: doc/classes/Array.xml
msgid ""
@@ -9345,6 +9580,10 @@ msgid ""
"size is smaller, elements are cleared, if bigger, new elements are "
"[code]null[/code]."
msgstr ""
+"Redimensionne le tableau pour contenir un nombre différent d'éléments. Si la "
+"taille du tableau est plus petite, les éléments en trop seront effacés, et "
+"si la taille est plus grande, les nouveaux éléments seront à [code]null[/"
+"code]."
#: doc/classes/Array.xml doc/classes/PoolByteArray.xml
#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml
@@ -9369,6 +9608,11 @@ msgid ""
"@GDScript.randi]. Call [method @GDScript.randomize] to ensure that a new "
"seed will be used each time if you want non-reproducible shuffling."
msgstr ""
+"Trie le tableau de sorte que tous les éléments auront une position "
+"aléatoire. Cette méthode utilise le générateur de nombres aléatoires global "
+"commun aux méthodes comme [method @GDScript.randi]. Appelez [méthod "
+"@GDScript.randomize] pour s'assurer qu'une nouvelle graine sera utilisée à "
+"chaque fois si vous voulez toujours des séquences de tri aléatoires."
#: doc/classes/Array.xml doc/classes/PoolByteArray.xml
#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml
@@ -9384,6 +9628,11 @@ msgid ""
"and upper index are inclusive, with the [code]step[/code] describing the "
"change between indices while slicing."
msgstr ""
+"Duplique le sous-ensemble décrit dans la fonction et le renvoie dans un "
+"tableau, en recopiant le tableau en profondeur si [code]deep[/code] est "
+"[code]true[/code]. Les indices inférieur et supérieur sont inclus, avec le "
+"[code]step[/code] décrivant le changement entre les indices pendant le "
+"découpage."
#: doc/classes/Array.xml
msgid ""
@@ -9397,6 +9646,17 @@ msgid ""
"print(strings) # Prints [string1, string10, string11, string2]\n"
"[/codeblock]"
msgstr ""
+"Trie le tableau.\n"
+"[b]Note :[/b] Les chaines sont triées par ordre alphabétique (par opposition "
+"à l'ordre naturel). Cela peut conduire à un comportement inattendu lors du "
+"tri d'un tableau de chaînes se terminant par des nombres. Examinez l'exemple "
+"suivant :\n"
+"[codeblock]\n"
+"var strings = [\"string1\", \"string2\", \"string10\", \"string11\"]\n"
+"strings.sort)(\n"
+"print(strings) # Affiche [string1, string10, string11, string2], parce que "
+"la chaine \"1...\" est avant \"2...\"\n"
+"[/codeblock]"
#: doc/classes/Array.xml
msgid ""
@@ -9422,11 +9682,34 @@ msgid ""
"print(my_items) # Prints [[4, Tomato], [5, Potato], [9, Rice]].\n"
"[/codeblock]"
msgstr ""
+"Trie le tableau en utilisant une méthode personnalisée. Les arguments sont "
+"un objet qui détient la méthode et le nom de cette méthode. La méthode "
+"personnalisée reçoit deux arguments (une paire d'éléments du tableau) et "
+"doit retourner soit [code]true[/code] ou [code]false[/code].\n"
+"Pour deux éléments [code]a[/code] et [code]b[/code], si la méthode donnée "
+"retourne [code]true[/code], l'élément [code]b[/code] sera après élément "
+"[code]a[/code] dans le tableau trié.\n"
+"[b]Note :[/b] Vous ne pouvez pas retourner une valeur de comparaison "
+"aléatoire car l'algorithme de tri s'attend à un résultat déterministe. Cela "
+"entraînerait un comportement inattendu.\n"
+"[codeblock]\n"
+"class MyCustomSorter:\n"
+" static func sort_ascending(a, b): # Par premier élément croissant\n"
+" if a[0] < b[0]:\n"
+" return true\n"
+" return false\n"
+"\n"
+"var my_items = [[5, \"Pomme\"], [9, \"Abricot\"], [4, \"Tomate\"]]\n"
+"my_items.sort_custom(MyCustomSorter, \"sort_ascending\")\n"
+"print(my_items) # Affiche [[4, Tomate], [5, Pomme], [9, Abricot]].\n"
+"[/codeblock]"
#: doc/classes/ArrayMesh.xml
msgid ""
"[Mesh] type that provides utility for constructing a surface from arrays."
msgstr ""
+"Le type [Mesh] qui fournit un utilitaire pour la construction d'une nouvelle "
+"surface à partir de tableaux."
#: doc/classes/ArrayMesh.xml
msgid ""
@@ -9504,10 +9787,25 @@ msgid ""
"length as the vertex array or be empty, except for [constant ARRAY_INDEX] if "
"it is used."
msgstr ""
+"Crée une nouvelle surface.\n"
+"Les surfaces sont créées pour être rendues en utilisant une [code]primitive[/"
+"code], qui peut être l'un des types définis dans [enum Mesh.PrimitiveType] "
+"(Il est préférable lors de l'utilisation d'indices d'utiliser uniquement des "
+"points, des lignes ou des triangles). [method Mesh.get_surface_count] "
+"deviendra l'index [code]surf_idx[/code] pour cette nouvelle surface.\n"
+"L'argument [code]arrays[/code] est un tableau de tableaux. Voir [enum "
+"ArrayType] pour les valeurs utilisées dans ce tableau. Par exemple, "
+"l'argument [code]arrays[/code] est le tableau des sommets. Ce premier sous-"
+"tableau de sommets est nécessaire ; les autres sont facultatifs. L'ajout "
+"d'un tableau d'indices met cette fonction en \"mode index\" où les sommets "
+"et d'autres tableaux deviennent les sources de données et le tableau d'index "
+"définit l'ordre des vertex. Tous les sous-tableau doivent avoir la même "
+"longueur que le tableau des sommets, ou être vides, sauf pour [constant "
+"ARRAY_INDEX] s'il est utilisé."
#: doc/classes/ArrayMesh.xml
msgid "Removes all blend shapes from this [ArrayMesh]."
-msgstr ""
+msgstr "Retire toutes les formes de mélange de ce [ArrayMesh]."
#: doc/classes/ArrayMesh.xml
msgid "Removes all surfaces from this [ArrayMesh]."
@@ -9515,11 +9813,11 @@ msgstr "Retirer toutes les surfaces de ce [ArrayMesh]."
#: doc/classes/ArrayMesh.xml
msgid "Returns the number of blend shapes that the [ArrayMesh] holds."
-msgstr ""
+msgstr "Retourne le nombre de formes de mélange détenues par ce [ArrayMesh]."
#: doc/classes/ArrayMesh.xml
msgid "Returns the name of the blend shape at this index."
-msgstr ""
+msgstr "Retourne le nom de la forme du mélange à cette position."
#: doc/classes/ArrayMesh.xml
msgid ""
@@ -9536,6 +9834,8 @@ msgid ""
"Returns the index of the first surface with this name held within this "
"[ArrayMesh]. If none are found, -1 is returned."
msgstr ""
+"Retourne l'index de la première surface avec ce nom dans ce [ArrayMesh]. Si "
+"aucune surface n'existe, -1 est retourné."
#: doc/classes/ArrayMesh.xml
msgid ""
@@ -9554,6 +9854,8 @@ msgid ""
"Returns the format mask of the requested surface (see [method "
"add_surface_from_arrays])."
msgstr ""
+"Retourne le masque de format de la surface demandée (voir [méthode "
+"add_surface_from_arrays)]."
#: doc/classes/ArrayMesh.xml
msgid "Gets the name assigned to this surface."
@@ -9564,6 +9866,8 @@ msgid ""
"Returns the primitive type of the requested surface (see [method "
"add_surface_from_arrays])."
msgstr ""
+"Retourne le type primitif de la surface demandée (voir [method "
+"add_surface_from_arrays)]."
#: doc/classes/ArrayMesh.xml
msgid ""
@@ -9583,6 +9887,11 @@ msgid ""
"[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 ""
+"Met à jour une région spécifique de tableaux de maillage directement dans le "
+"GPU.\n"
+"[b]Avertissement :[/b] N'utilisez cette méthode que si vous savez ce que "
+"vous faites. Vous pouvez facilement causer des plantages en appelant cette "
+"fonction avec des arguments inappropriés."
#: doc/classes/ArrayMesh.xml
msgid "Sets the blend shape mode to one of [enum Mesh.BlendShapeMode]."
@@ -9594,6 +9903,9 @@ msgid ""
"Especially useful to avoid unexpected culling when using a shader to offset "
"vertices."
msgstr ""
+"Surcharge le [AABB] avec celui défini par l'utilisateur pour le calcul du "
+"culling d'affichage. Particulièrement utile pour éviter un culling inattendu "
+"lors de l'utilisation d'un shader qui décale les sommets."
#: doc/classes/ArrayMesh.xml
#, fuzzy
@@ -9621,6 +9933,9 @@ msgid ""
"first 3 floats determine the tangent, and the last the binormal direction as "
"-1 or 1."
msgstr ""
+"Le [PoolRealArray] de tangentes des sommets. Chaque élément est un groupe de "
+"4 flottants, les 3 premiers déterminent la tangente, et le dernier la "
+"direction binormale qui est soit -1 ou 1."
#: doc/classes/ArrayMesh.xml
msgid "[PoolColorArray] of vertex colors."
@@ -9661,6 +9976,17 @@ msgid ""
"vertices of each triangle. For lines, the index array is in pairs indicating "
"the start and end of each line."
msgstr ""
+"Un [PoolIntArray] d'entiers utilisés comme indices référentiels de sommets, "
+"de couleurs, de normales, de tangentes et de textures. Tous ces tableaux "
+"doivent avoir le même nombre d'éléments que le tableau des sommets. Aucun "
+"index ne peut dépasser la taille du tableau des sommets. Lorsque ce tableau "
+"d'index est présent, il met la fonction en \"mode d'index\", où l'index "
+"sélectionne les *n-ième* sommet, normal, tangent, couleur, UV, etc. Cela "
+"signifie que si vous voulez avoir des normales ou des couleurs différentes "
+"le long d'une arrête, vous devez doubler ces sommets.\n"
+"Pour les triangles, le tableau d'index est interprété comme des trios, se "
+"référant aux sommets de chaque triangle. Pour les lignes, le tableau d'index "
+"contient des paires indiquant le point de début et de fin de chaque ligne."
#: doc/classes/ArrayMesh.xml doc/classes/Mesh.xml doc/classes/VisualServer.xml
msgid "Represents the size of the [enum ArrayType] enum."
@@ -9722,6 +10048,20 @@ msgid ""
"more about the real world out there especially if only part of the surface "
"is in view."
msgstr ""
+"Le point [ARVRAnchor] est un nœud spatial qui cartographie un emplacement "
+"réel du monde identifié par la plateforme AR à une position dans le monde du "
+"jeu. Par exemple, tant que la détection des plans dans ARKit est activée, "
+"ARKit identifiera et mettra à jour la position des plans (tables, planchers, "
+"etc) et créera des ancrages pour eux.\n"
+"Ce nœud est connecté à l'une des ancres à travers son identifiant unique. "
+"Lorsque vous recevez un signal qu'une nouvelle ancre est disponible, vous "
+"devez ajouter ce nœud à votre scène pour cette ancre. Vous pouvez prédéfinir "
+"les nœuds et définir l'identifiant ; les nœuds resteront simplement sur "
+"0,0,0 jusqu'à ce qu'un plan soit reconnu.\n"
+"Gardez à l'esprit que, tant que la détection du plan est activée, la taille, "
+"le placement et l'orientation d'une ancre seront mis à jour car la logique "
+"de détection en apprend davantage sur le monde réel, surtout si une partie "
+"seulement de la surface est en vue."
#: doc/classes/ARVRAnchor.xml
msgid "Returns the name given to this anchor."
@@ -9732,6 +10072,8 @@ 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 ""
+"Retourne [code]true[/code] si l'ancre est suivie et [code]false[/code] si "
+"aucune ancre avec cet identifiant n'est actuellement connue."
#: doc/classes/ARVRAnchor.xml
msgid ""
@@ -9741,6 +10083,11 @@ msgid ""
"can be used to create shadows/reflections on surfaces or for generating "
"collision shapes."
msgstr ""
+"Si fourni par la [ARVRInterface], ça retourne un maillage pour l'ancre. Pour "
+"une ancre, il peut s'agir d'une forme liée à l'objet suivi ou peut être une "
+"maille qui fournit une topologie liée à l'ancre et qui peut être utilisée "
+"pour créer des ombres ou des réflexions sur les surfaces ou pour générer des "
+"formes de collision."
#: doc/classes/ARVRAnchor.xml
msgid ""
@@ -9768,6 +10115,13 @@ msgid ""
"when the AR server identifies that two anchors represent different parts of "
"the same plane and merges them."
msgstr ""
+"L'identifiant de l'ancre. Vous pouvez la définir avant que cette ancre "
+"existe. La première ancre obtient l'identifiant [code]1[/code], la seconde "
+"[code]2[/code], etc. Lorsque les ancres sont enlevées, le moteur peut alors "
+"attribuer l'identifiant correspondant aux nouvelles ancres. Le plus souvent "
+"les ancres \"disparaissent\" quand le serveur AR identifie que deux ancres "
+"représentent différentes parties d'un même plan et décide alors de les "
+"fusionner."
#: doc/classes/ARVRAnchor.xml
msgid ""
@@ -9801,6 +10155,17 @@ 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 ""
+"Il s'agit d'un nœud d'aide spatiale pour notre caméra ; notez que, si le "
+"rendu stéréoscopique est applicable (VR-HMD), la plupart des propriétés de "
+"la caméra sont ignorées, car l'information HMD les annule. Les seules "
+"propriétés qui peuvent être fiables sont les plans proches et lointains.\n"
+"La position et l'orientation de ce nœud sont automatiquement mises à jour "
+"par le serveur ARVR pour représenter l'emplacement du HMD si ce suivi est "
+"disponible et peut donc être utilisé par la logique du jeu. Notez que, "
+"contrairement au contrôleur ARVR, le fil d'exécution pour le rendu a accès "
+"aux données de suivi les plus récentes de la HMD et l'emplacement de "
+"l'ARVRCamera peut retarder l'accès de ces données au rendu de quelques "
+"millisecondes."
#: doc/classes/ARVRController.xml
msgid "A spatial node representing a spatially-tracked controller."
@@ -9821,6 +10186,19 @@ msgid ""
"[ARVRServer]. This makes this node ideal to add child nodes to visualize the "
"controller."
msgstr ""
+"C'est un nœud d'aide spatiale qui est lié au suivi des contrôleurs. Il offre "
+"également plusieurs liens utiles à l'état des boutons et commandes des "
+"contrôleurs.\n"
+"Les contrôleurs sont liés par leur identifiant. Vous pouvez créer des nœuds "
+"de contrôleur avant même que les contrôleurs ne soient disponibles. Si votre "
+"jeu utilise toujours deux contrôleurs (un pour chaque main), vous pouvez "
+"prédéfinir les contrôleurs avec les identfiant 1 et 2 ; ils deviendront "
+"actifs dès que les contrôleurs seront identifiés. Si vous attendez que des "
+"contrôleurs supplémentaires soient utilisés, vous devez réagir aux signaux "
+"et ajouter des nœuds ARVRController à votre scène.\n"
+"La position du nœud de contrôleur est automatiquement mise à jour par le "
+"[ARVRServer]. Cela rend ce nœud idéal pour ajouter des nœuds pour visualiser "
+"le contrôleur."
#: doc/classes/ARVRController.xml
msgid ""
@@ -9831,7 +10209,6 @@ msgstr ""
"AR / VR utilisé."
#: doc/classes/ARVRController.xml
-#, fuzzy
msgid ""
"Returns the hand holding this controller, if known. See [enum "
"ARVRPositionalTracker.TrackerHand]."
@@ -9864,6 +10241,13 @@ msgid ""
"the AR/VR controllers. This ID is purely offered as information so you can "
"link up the controller with its joystick entry."
msgstr ""
+"Renvoie l'identifiant de l'objet joystick qui est lié. Chaque contrôleur "
+"suivi par le [ARVRServer] qui a des boutons et un axe sera également "
+"enregistré comme un joystick dans Godot. Cela signifie que tout le suivi "
+"normal des joysticks et la gestion des entrées fonctionnera pour les boutons "
+"et axes trouvés sur les contrôleurs AR/VR. Cet identifiant est seulement "
+"disponible pour que vous puissiez lier le contrôleur avec son entrée de "
+"joystick."
#: doc/classes/ARVRController.xml
msgid ""
@@ -9874,14 +10258,14 @@ msgstr ""
"contrôleur. Ceci peut être utilisé pour visualiser le contrôleur."
#: doc/classes/ARVRController.xml
-#, 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 ""
-"Rentourne [code]true[/code] (vrai) si le bouton d'index [code]button[/code] "
-"est préssé. Voir [enum JoyButtonList]."
+"Retourne [code]true[/code] si le bouton d'index [code]button[/code] est "
+"appuyé. Voir [enum JoyButtonList], et surtout les constantes [code]JOY_VR_*[/"
+"code]."
#: doc/classes/ARVRController.xml
msgid ""
@@ -9895,6 +10279,16 @@ 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 du contrôleur.\n"
+"Un identifiant de contrôleur à 0 est déconnecté et entraînera toujours un "
+"nœud inactif. L'identifiant de contrôleur 1 est réservé au premier "
+"contrôleur qui s'identifie comme le contrôleur gauche et l'identifiant 2 aux "
+"contrôleur droit.\n"
+"Pour tout autre contrôleur que le [ARVRServer] détecte, les identifiants des "
+"contrôleurs continueront à partir de 3.\n"
+"Lorsqu'un contrôleur est éteint, son emplacement est libéré. Cela assure que "
+"les contrôleurs garderont le même identifiant même si un contrôleur avec un "
+"identifiant inférieur est éteint."
#: doc/classes/ARVRController.xml
msgid ""
@@ -9904,6 +10298,11 @@ msgid ""
"This is a useful property to animate if you want the controller to vibrate "
"for a limited duration."
msgstr ""
+"L'intensité de vibration du contrôleur. L'intervalle va de [code]0.0[/code] "
+"à [code]1.0[/code] avec une précision de [code]0.01[/code]. Si changé, met à "
+"jour [membrez ARVRPositionalTracker.rumble] en conséquence.\n"
+"C'est une propriété utile à animer si vous souhaitez que le contrôleur vibre "
+"pendant une durée limitée."
#: doc/classes/ARVRController.xml
msgid "Emitted when a button on this controller is pressed."
@@ -9938,6 +10337,15 @@ msgid ""
"give us a working setup. You can query the available interfaces through "
"[ARVRServer]."
msgstr ""
+"Cette classe doit être implémentée pour rendre une plateforme AR ou VR "
+"disponible dans Godot et ces modules devraient être implémentés avec des "
+"modules C+ ou GDNative (notez que pour GDNative, la sous-classe "
+"ARVRScriptInterface devrait être utilisée). Une partie de l'interface est "
+"exposée à GDScript afin que vous puissiez détecter, activer et configurer "
+"une plateforme AR ou VR.\n"
+"Les interfaces doivent être écrites de telle manière qu'elles permettent de "
+"fonctionner simplement. Vous pouvez rechercher les interfaces disponibles "
+"via [ARVRServer]."
#: doc/classes/ARVRInterface.xml
msgid ""
@@ -9976,6 +10384,8 @@ msgid ""
"provide feedback to the user whether there are issues with positional "
"tracking."
msgstr ""
+"Si supporté, retourne l'état de notre suivi. Cela vous permettra de fournir "
+"des retours à l'utilisateur s'il y a des problèmes avec le suivi de position."
#: doc/classes/ARVRInterface.xml
msgid ""
@@ -9996,6 +10406,25 @@ msgid ""
"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 ""
+"Appelez ceci pour initialiser cette interface. La première interface qui est "
+"initialisée est identifiée comme l'interface primaire et elle sera utilisée "
+"pour faire le rendu de la sortie.\n"
+"Après l'initialisation de l'interface que vous souhaitez utiliser, vous "
+"devez activer le mode AR/VR d'un viseur et le rendu devrait commencer.\n"
+"[b]Note :[/b] Vous devez activer le mode AR/VR sur le point de vue principal "
+"pour tout appareil qui utilise la sortie principale de Godot, comme pour la "
+"VR mobile.\n"
+"Si vous faites cela pour une plate-forme qui gère sa propre sortie (comme "
+"OpenVR), Godot affichera juste un des yeux sans distorsion à l'écran. "
+"Alternativement, vous pouvez ajouter une fenêtre d'affichage séparée à votre "
+"scène et activer AR/VR sur cette fenêtre de d'affichage. Elle sera utilisée "
+"pour sortir HMD, vous permettant d'utiliser la fenêtre principale pour tout "
+"autre utilisation, comme l'utilisation d'une caméra séparée comme pour un "
+"spectateur ou faire un rendu complètement différent.\n"
+"Bien que non utilisé pour l'instant, vous pouvez activer des interfaces "
+"supplémentaires. Vous pouvez le faire si vous voulez suivre les contrôleurs "
+"venant d'autres plateformes. Cependant, actuellement, une seule interface "
+"peut rendre un HMD."
#: doc/classes/ARVRInterface.xml
msgid ""
@@ -10069,12 +10498,18 @@ msgid ""
"Left eye output, this is mostly used internally when rendering the image for "
"the left eye and obtaining positioning and projection information."
msgstr ""
+"Sortie de l'œil gauche, cela est principalement utilisé à l'interne pour "
+"rendre l'image pour l'œil gauche et obtenir des informations de "
+"positionnement et de projection."
#: doc/classes/ARVRInterface.xml
msgid ""
"Right eye output, this is mostly used internally when rendering the image "
"for the right eye and obtaining positioning and projection information."
msgstr ""
+"La sortie de l'œil droit, c'est principalement utilisé à l'interne pour "
+"rendre l'image pour l'œil droit et obtenir des informations de "
+"positionnement et de projection."
#: doc/classes/ARVRInterface.xml
msgid "Tracking is behaving as expected."
@@ -10085,6 +10520,8 @@ msgid ""
"Tracking is hindered by excessive motion (the player is moving faster than "
"tracking can keep up)."
msgstr ""
+"Le suivi est gêné par un mouvement excessif (le joueur se déplace trop vite "
+"par rapport à ce que le suivi peut suivre)."
#: doc/classes/ARVRInterface.xml
msgid ""
@@ -10097,12 +10534,16 @@ msgid ""
"We don't know the status of the tracking or this interface does not provide "
"feedback."
msgstr ""
+"Nous ne connaissons pas l'état du suivi, ou alors cette interface ne fournit "
+"aucune indication."
#: doc/classes/ARVRInterface.xml
msgid ""
"Tracking is not functional (camera not plugged in or obscured, lighthouses "
"turned off, etc.)."
msgstr ""
+"Le suivi n'est pas fonctionnel (la caméra n'est pas branchée ou cachée, les "
+"lumières sont éteintes, etc.)."
#: modules/gdnative/doc_classes/ARVRInterfaceGDNative.xml
#, fuzzy
@@ -10157,6 +10598,9 @@ msgid ""
"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 ""
+"Vous permet d'ajuster l'échelle à vos unités de votre game. La plupart des "
+"plateformes AR/VR assument une échelle de 1 unité jeu = 1 mètre réel.\n"
+"[b]Note :[/b] Cette méthode est un passage direct au [ARVRServer]."
#: doc/classes/ARVRPositionalTracker.xml
msgid "A tracked object."
@@ -10192,12 +10636,16 @@ msgid ""
"Returns the hand holding this tracker, if known. See [enum TrackerHand] "
"constants."
msgstr ""
+"Retourne la main tenant ce traqueur, si connu. Voir les constantes [enum "
+"TrackerHand]."
#: doc/classes/ARVRPositionalTracker.xml
msgid ""
"If this is a controller that is being tracked, the controller will also be "
"represented by a joystick entry with this ID."
msgstr ""
+"Si c'est un contrôleur qui est suivi, le contrôleur sera également "
+"représenté par une entrée de joystick avec cet identifiant."
#: doc/classes/ARVRPositionalTracker.xml
msgid ""
@@ -10206,7 +10654,7 @@ msgstr ""
#: doc/classes/ARVRPositionalTracker.xml
msgid "Returns the controller or anchor point's name if available."
-msgstr ""
+msgstr "Retourne le nom du contrôleur ou du point d'ancrage, si disponible."
#: doc/classes/ARVRPositionalTracker.xml
msgid "Returns the controller's orientation matrix."
@@ -10222,6 +10670,9 @@ msgid ""
"tracker type and matches the ID you need to specify for nodes such as the "
"[ARVRController] and [ARVRAnchor] nodes."
msgstr ""
+"Retourne l'identifiant de suivi interne. Cet identifiant est unique au "
+"suiveur et correspond à l'identifiant que vous devez spécifier pour les "
+"nœuds tels que les nœuds [ARVRController] et [ARVRAnchor]."
#: doc/classes/ARVRPositionalTracker.xml
msgid "Returns [code]true[/code] if this device tracks orientation."
@@ -10249,7 +10700,7 @@ msgstr ""
#: doc/classes/ARVRPositionalTracker.xml
msgid "The hand this tracker is held in is unknown or not applicable."
-msgstr ""
+msgstr "La main de ce traqueur est inconnue ou sa valeur est invalide."
#: doc/classes/ARVRPositionalTracker.xml
msgid "This tracker is the left hand controller."
@@ -10330,6 +10781,8 @@ msgstr ""
msgid ""
"Clears our current primary interface if it is set to the provided interface."
msgstr ""
+"Efface notre actuelle interface principale si elle est définie pour "
+"l'interface donnée."
#: doc/classes/ARVRServer.xml
msgid ""
@@ -10443,6 +10896,10 @@ msgid ""
"important to react to this signal to add the appropriate [ARVRController] or "
"[ARVRAnchor] nodes related to this new tracker."
msgstr ""
+"Émis quand un nouveau suiveur a été ajouté. Si vous n'utilisez pas un nombre "
+"fixe de contrôleurs ou si vous utilisez [ARVRAnchor] pour une solution AR, "
+"il est important de réagir à ce signal pour ajouter les nœuds appropriés "
+"[ARVRController] ou [ARVRAnchor] liés à ce nouveau suiveur."
#: doc/classes/ARVRServer.xml
msgid ""
@@ -10452,6 +10909,11 @@ msgid ""
"available (i.e. a new controller is switched on that takes the place of the "
"previous one)."
msgstr ""
+"Émis quand une suiveur est retiré. Vous devez supprimer tout "
+"[ARVRController] ou [ARVRAnchor] si nécessaire. Ce n'est pas non plus "
+"obligatoire, les nœuds deviennent tout simplement inactifs et seront de "
+"nouveau actifs lorsqu'un nouveau suiveur sera disponible (quand un nouveau "
+"contrôleur activé prendra la place du précédent)."
#: doc/classes/ARVRServer.xml
msgid "The tracker tracks the location of a controller."
@@ -10520,6 +10982,10 @@ msgid ""
"the container size is dynamic and the contents' size needs to adjust "
"accordingly without losing proportions."
msgstr ""
+"Arrange les contrôles enfants pour préserver automatiquement leur aspect "
+"lorsque le conteneur est redimensionné. Résout le problème où la taille du "
+"conteneur est dynamique et la taille du contenu doit s'adapter en "
+"conséquence sans perdre ses proportions."
#: doc/classes/AspectRatioContainer.xml doc/classes/BoxContainer.xml
#: doc/classes/CenterContainer.xml doc/classes/Container.xml
@@ -10583,6 +11049,12 @@ msgid ""
"and [member Control.rect_clip_content] is enabled, this allows to show only "
"the container's area restricted by its own bounding rectangle."
msgstr ""
+"La largeur et la hauteur des contrôles enfants sont automatiquement ajustées "
+"pour que leur rectangle englobant recouvre toute la zone du conteneur tout "
+"en gardant le même aspect.\n"
+"Lorsque le rectangle englobant des contrôles d'enfants dépasse la taille du "
+"conteneur et que [member Control.rect_clip_content] est activé, cela permet "
+"de limiter la visibilité à seulement la taille du conteneur."
#: doc/classes/AspectRatioContainer.xml
#, fuzzy
@@ -10678,7 +11150,7 @@ msgstr ""
" return min(0, abs(u - v) - 1)\n"
"[/codeblock]\n"
"[method estimate_cost] doit retourne la valeur minimale de la distance, soit "
-"[code]_estimate_cost(u, v) <= compute_cost(u, v)[ /code]. Cela sert d'indice "
+"[code]_estimate_cost(u, v) <= compute_cost(u, v)[/code]. Cela sert d'indice "
"pour l'algorithme la méthode [code]_compute_cost[/code] peut être longue à "
"calculer. Si ce n'est pas le cas, utilisez [method estimate_cost] pour "
"retourner la même valeur que [method compute_cost] pour fournir à "
@@ -10688,7 +11160,7 @@ msgstr ""
"limite inférieure du coût du chemin, les chemins retournés par A* seront les "
"chemins les moins coûteux. Ici, le coût d'un chemin correspond à la somme "
"des résultats [méthode compute_cost] de tous les segments dans le chemin "
-"multiplié par le [code]weight_scale[/code]s des paramètres de fin des "
+"multiplié par le [code]weight_scale[/code] des paramètres de fin des "
"segments respectifs. Si les méthodes par défaut sont utilisées et que le "
"[code]weight_scale[/code] de tous les points est [code]1.0[/code], ça "
"correspond à la somme des distances euclidiennes de tous les segments du "
@@ -10753,6 +11225,10 @@ msgid ""
"[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 ""
+"Retourne si les deux points donnés sont directement reliés par un segment. "
+"Si [code]bidirectionnel[/code] est [code]false[/code], retourne si le "
+"mouvement d'identifiant [code]id[/code] vers l'autre identifiant "
+"[code]to_id[/code] est possible par ce segment."
#: doc/classes/AStar.xml doc/classes/AStar2D.xml
msgid "Clears all the points and segments."
@@ -10780,12 +11256,16 @@ msgstr ""
"astar.connect_points(1, 2, false)\n"
"[/codeblock]"
-#: doc/classes/AStar.xml
+#: doc/classes/AStar.xml doc/classes/AStar2D.xml
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 ""
+"Supprime le segment entre les points donnés. Si [code]bidirectionnel[/code] "
+"est [code]false[/code], seul le mouvement de l'identifiant [code]id[/code] "
+"vers l'autre identifiant [code]to_id[/code] est bloqué, et un segment "
+"unidirectionnel peut rester."
#: doc/classes/AStar.xml doc/classes/AStar2D.xml
msgid "Returns the next available point ID with no point associated to it."
@@ -10802,6 +11282,12 @@ msgid ""
"the one with the smallest ID will be returned, ensuring a deterministic "
"result."
msgstr ""
+"Retourne l'identifiant du point le plus proche de [code]to_position[/code], "
+"en prenant en compte les points désactivés en option. Retourne [code]-1[/"
+"code] s'il n'y a pas de points dans l'ensemble de points.\n"
+"[b]Note :[/b] Si plusieurs points sont proches de [code]to_position[/code], "
+"celui avec le plus petit identifiant sera retourné, permettant d'obtenir un "
+"résultat déterministe."
#: doc/classes/AStar.xml
msgid ""
@@ -11059,8 +11545,16 @@ msgstr ""
"position et sont facteur de poids seront mis à jour avec la valeur donnée."
#: doc/classes/AStar2D.xml
-msgid "Returns whether there is a connection/segment between the given points."
-msgstr "Retourne s'il y a une connexion/segment entre les points spécifiés."
+#, fuzzy
+msgid ""
+"Returns whether there is a connection/segment between the given points. 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 ""
+"Retourne si les deux points donnés sont directement reliés par un segment. "
+"Si [code]bidirectionnel[/code] est [code]false[/code], retourne si le "
+"mouvement d'identifiant [code]id[/code] vers l'autre identifiant "
+"[code]to_id[/code] est possible par ce segment."
#: doc/classes/AStar2D.xml
msgid ""
@@ -11085,10 +11579,6 @@ msgstr ""
"[/codeblock]"
#: doc/classes/AStar2D.xml
-msgid "Deletes the segment between the given points."
-msgstr "Supprime le segment entre les points donnés."
-
-#: doc/classes/AStar2D.xml
msgid ""
"Returns the closest position to [code]to_position[/code] that resides inside "
"a segment between two connected points.\n"
@@ -11177,6 +11667,20 @@ msgid ""
"var neighbors = astar.get_point_connections(1) # Returns [2, 3]\n"
"[/codeblock]"
msgstr ""
+"Retourne un tableau avec les identifiants des points qui forment la "
+"connexion avec le point donné.\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) # Retourne [2, 3]\n"
+"[/codeblock]"
#: doc/classes/AStar2D.xml
msgid ""
@@ -11217,6 +11721,23 @@ msgid ""
"FLAG_REPEAT] and [constant Texture.FLAG_MIRRORED_REPEAT] flags are ignored "
"when using an AtlasTexture."
msgstr ""
+"La ressource [Texture] qui ne continent qu'une partie de la texture [member "
+"atlas], définie par [member region]. Le principal usage est de découper des "
+"textures d'un atlas de texture, qui est un grand fichier de texture qui "
+"contient plusieurs textures plus petites. Ça consiste en une [Texture] pour "
+"le [member atlas], d'une [member region] qui définit la zone de [member "
+"atlas] à utiliser, et une [member margin] qui définit la largeur de la "
+"bordure autour.\n"
+"[AtlasTexture] ne peut pas être utilisé dans une [AnimatedTexture], ne peut "
+"pas être répéré dans les nœuds tels que [TextureRect], et ne fonctionne pas "
+"correctement si utilisé à l'intérieur d'autres [AtlasTexture]. Plusieurs "
+"[AtlasTexture] peuvent être utilisées pour découper plusieurs textures de "
+"l'atlas. L'utilisation d'un atlas de textures permet d'optimiser "
+"l'utilisation de la mémoire vidéo en limiter les appels par rapport à "
+"plusieurs petits fichiers.\n"
+"[b]Note :[/b] AtlasTextures ne supporte pas les répétition. Les options "
+"[constant Texture.FLAG_REPEAT] et [constant Texture.FLAG_MIRRORED_REPEAT] "
+"sont ignorés pour les AtlasTexture."
#: doc/classes/AtlasTexture.xml
#, fuzzy
@@ -11237,6 +11758,9 @@ msgid ""
"(\"w\" and \"h\" in the editor) resizes the texture so it fits within the "
"margin."
msgstr ""
+"La marge autour de la région. Le paramètre [membre Rect2.size] du [Rect2] "
+"(\"w\" et \"h\" dans l'éditeur) redimensionne la texture de sorte qu'elle "
+"correspond à cette marge."
#: doc/classes/AtlasTexture.xml
msgid "The AtlasTexture's used region."
@@ -11276,13 +11800,15 @@ msgstr ""
#: doc/classes/AudioEffectAmplify.xml
msgid "Increases or decreases the volume being routed through the audio bus."
-msgstr ""
+msgstr "Augmente ou diminue le volume passé au bus audio."
#: doc/classes/AudioEffectAmplify.xml
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 ""
+"La quantité d'amplification en décibels. Les valeurs positives augmentent le "
+"son, les valeurs négatives le diminue. La valeur peut aller de -80 à 24 dB."
#: doc/classes/AudioEffectBandLimitFilter.xml
msgid "Adds a band limit filter to the audio bus."
@@ -11315,7 +11841,9 @@ msgid ""
"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."
+"transmit audio over the network. When capturing audio data from a "
+"microphone, the format of the samples will be stereo 32-bit floating point "
+"PCM."
msgstr ""
#: doc/classes/AudioEffectCapture.xml
@@ -11338,6 +11866,11 @@ msgid ""
"samples if available, or an empty [PoolVector2Array] if insufficient data "
"was available."
msgstr ""
+"Retourne les prochains [code]frames[/code] d'échantillonnage audio de la "
+"mémoire interne en anneau.\n"
+"Retourne un [PoolVector2Array] contenant exactement [code]frames[/code] "
+"échantillons audio si disponible, ou un [PoolVector2Array] vide s'il n'y a "
+"pas assez de données disponibles."
#: doc/classes/AudioEffectCapture.xml
#, fuzzy
@@ -11438,6 +11971,21 @@ msgid ""
"- Accentuates transients by using a wider attack, making effects sound more "
"punchy."
msgstr ""
+"Le compresseur dynamique d'intensité réduit le niveau du son lorsque le "
+"volume dépasse un certain seuil de décibels. L'une des principales "
+"utilisations d'un compresseur est d'augmenter la gamme dynamique en essayant "
+"de saturer le moins possible le son (quand le son dépasse 0dB).\n"
+"Le compresseur a de nombreuses utilisations dans les mélanges :\n"
+"- Dans le bus \"Master\" pour compresser toute la sortie (même si un "
+"[AudioEffectLimiter] est souvent plus adapté).\n"
+"- Dans les canaux de voix pour s'assurer qu'ils sonnent aussi équilibré que "
+"possible.\n"
+"- Pour le \"Sidechained\". Cela peut réduire le niveau de son enchaînement "
+"avec un autre bus audio pour la détection des seuils. Cette technique est "
+"courante dans le jeu vidéo se mélangeant au niveau de la musique et SFX "
+"tandis que les voix sont entendues.\n"
+"- Accentue les transitions en utilisant une attaque plus grande, rendant les "
+"effets sonores plus percutants."
#: doc/classes/AudioEffectCompressor.xml
msgid ""
@@ -11664,6 +12212,9 @@ msgid ""
"over frequencies from 31 Hz to 16000 Hz.\n"
"Each frequency can be modulated between -60/+24 dB."
msgstr ""
+"Ajoute un effet audio d'égaliseur de 10 bandes à un bus audio. Vous donne le "
+"contrôle des fréquences de 31 Hz à 16000 Hz.\n"
+"Chaque fréquence peut être modulée entre -60/+24 dB."
#: doc/classes/AudioEffectEQ10.xml
msgid ""
@@ -11680,6 +12231,18 @@ msgid ""
"Band 10: 16000 Hz\n"
"See also [AudioEffectEQ], [AudioEffectEQ6], [AudioEffectEQ21]."
msgstr ""
+"Bandes de fréquence :\n"
+"Bande 1 : 31 Hz\n"
+"Bande 2 : 62 Hz\n"
+"Bande 3 : 125 Hz\n"
+"Bande 4 : 250 Hz\n"
+"Bande 5 : 500 Hz\n"
+"Bande 6 : 1000 Hz\n"
+"Bande 7 : 2000 Hz\n"
+"Bande 8 : 4000 Hz\n"
+"Bande 9 : 8000 Hz\n"
+"Bande 10 : 16000 Hz\n"
+"Voir aussi [AudioEffectEQ], [AudioEffectEQ6], [AudioEffectEQ21]."
#: doc/classes/AudioEffectEQ21.xml
msgid ""
@@ -11687,6 +12250,9 @@ msgid ""
"over frequencies from 22 Hz to 22000 Hz.\n"
"Each frequency can be modulated between -60/+24 dB."
msgstr ""
+"Ajoute un effet audio d'égaliseur de 21 bandes à un bus audio. Vous donne le "
+"contrôle des fréquences de 22 Hz à 22000 Hz.\n"
+"Chaque fréquence peut être modulée entre -60/+24 dB."
#: doc/classes/AudioEffectEQ21.xml
msgid ""
@@ -11744,6 +12310,9 @@ msgid ""
"frequencies from 32 Hz to 10000 Hz.\n"
"Each frequency can be modulated between -60/+24 dB."
msgstr ""
+"Ajoute un effet audio d'égaliseur de 6 bandes à un bus audio. Vous donne le "
+"contrôle des fréquences de 32 Hz à 10000 Hz.\n"
+"Chaque fréquence peut être modulée entre -60/+24 dB."
#: doc/classes/AudioEffectEQ6.xml
msgid ""
@@ -11756,6 +12325,14 @@ msgid ""
"Band 6: 10000 Hz\n"
"See also [AudioEffectEQ], [AudioEffectEQ10], [AudioEffectEQ21]."
msgstr ""
+"Bandes de fréquence :\n"
+"Bande 1 : 32 Hz\n"
+"Bande 2 : 100 Hz\n"
+"Bande 3 : 320 Hz\n"
+"Bande 4 : 1000 Hz\n"
+"Bande 5 : 3200 Hz\n"
+"Bande 6 : 10000 Hz\n"
+"Voir aussi [AudioEffectEQ], [AudioEffectEQ10] et [AudioEffectEQ21]."
#: doc/classes/AudioEffectFilter.xml
msgid "Adds a filter to the audio bus."
@@ -11810,6 +12387,13 @@ msgid ""
"and progressively increases its effect as the input level increases such "
"that the threshold is never exceeded."
msgstr ""
+"Un limiteur est semblable à un compresseur, mais il est moins flexible et "
+"conçu pour limiter le son au delà d'un certain seuil de décibels donné. "
+"L'ajout d'un limiteur dans le bus \"Master\" est toujours recommandé pour "
+"réduire les effets de la coupure.\n"
+"La coupure douce commence à réduire les pics un peu en dessous du seuil et "
+"augmente progressivement son effet puisque le niveau d'entrée augmente de "
+"sorte que le seuil n'est jamais dépassé."
#: doc/classes/AudioEffectLimiter.xml
msgid ""
@@ -11934,6 +12518,11 @@ msgid ""
"this higher latency are especially noticeable on sounds that have sudden "
"amplitude changes."
msgstr ""
+"La taille de la mémoire de la [url=https://fr.wikipedia.org/wiki/"
+"Transformation_de_Fourier_rapide]Transformation de Fourier rapide[/url]. Les "
+"valeurs plus élevées lissent l'effet dans le temps, mais ont une plus grande "
+"latence. Cette latence sera bien plus visible sur les sons qui changent "
+"soudainement."
#: doc/classes/AudioEffectPitchShift.xml
msgid ""
@@ -12379,6 +12968,13 @@ msgid ""
"input. If an invalid device name is set, the value will be reverted back to "
"[code]\"Default\"[/code]."
msgstr ""
+"Le nom du périphérique actuel pour l'entrée audio (voir [method "
+"get_device_list)]. Sur les systèmes avec plusieurs entrées audio (comme "
+"l'analogique, l'USB et l'audio par HDMI), cela peut être utilisé pour "
+"sélectionner le périphérique d'entrée pour l'audio. La valeur "
+"[code]\"Defaut\"[/code] enregistrera l'audio sur l'entrée audio par défaut "
+"du système. Si un nom de périphérique invalide est défini, la valeur sera "
+"retournée à [code]\"Defaut\"[/code]."
#: doc/classes/AudioServer.xml
msgid ""
@@ -12389,6 +12985,13 @@ msgid ""
"output. If an invalid device name is set, the value will be reverted back to "
"[code]\"Default\"[/code]."
msgstr ""
+"Le nom du périphérique actuel pour la sortie audio (voir [method "
+"get_device_list)]. Sur les systèmes avec plusieurs sorties audio (tels que "
+"l'analogique, l'USB et l'audio par HDMI), cela peut être utilisé pour "
+"sélectionner le périphérique de sortie de l'audio. La valeur "
+"[code]\"Default\"[/code] jouera l'audio sur la sortie audio par défaut au "
+"niveau du système. Si un nom de périphérique invalide est défini, la valeur "
+"[code]\"Default\"[/code] sera retournée."
#: doc/classes/AudioServer.xml
msgid ""
@@ -12481,6 +13084,18 @@ msgid ""
"as [code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
+"Le taux d'échantillonnage à utiliser (en Hz). Les valeurs plus élevées "
+"demandent plus de puissant de CPU, mais cela produit une meilleure qualité.\n"
+"Dans les jeux, les taux d'échantillonnage courants sont [code]11025[/code], "
+"[code]16000[/code], [code]22050[/code], [code]32000[/code], [code]44100[/"
+"code], et [code]48000[/code].\n"
+"D'après le [url=https://fr.wikipedia.org/wiki/"
+"Th%C3%A9or%C3%A8me_d'%C3%A9chantillonnage]Théorème d'échantillonnage[/url], "
+"il n'y a aucune différence de qualité pour l'audition humaine au-delà de 40 "
+"000 Hz (puisque la plupart des humains ne peuvent entendre que jusqu'à 20 "
+"000 Hz, et souvent bien moins). Si vous générez des sons inférieurs tels que "
+"les voix, des taux d'échantillonnage inférieurs tels que [code]32000[/code] "
+"ou [code]22050[/code] peuvent être utilisables sans perte de qualité audible."
#: doc/classes/AudioStreamGeneratorPlayback.xml
msgid "Plays back audio generated using [AudioStreamGenerator]."
@@ -12491,6 +13106,8 @@ msgid ""
"This class is meant to be used with [AudioStreamGenerator] to play back the "
"generated audio in real-time."
msgstr ""
+"Cette classe est destinée à être utilisée avec un [AudioStreamGenerator] "
+"pour lire l'audio généré en temps réel."
#: doc/classes/AudioStreamGeneratorPlayback.xml
#, fuzzy
@@ -12740,6 +13357,19 @@ msgid ""
"[member unit_db] to a very low value like [code]-100[/code] (which isn't "
"audible to human hearing)."
msgstr ""
+"Joue un effet sonore avec des effets sonores dirigés, amortit par la "
+"distance au besoin, qui génère l'effet de la position audible dans l'espace "
+"environnement. Pour plus de réalisme, un filtre à passe-bas s'applique "
+"automatiquement aux sons lointains. Cela peut être désactivé en définissant "
+"[member attenuation_filter_cutoff_hz] à [code]20500[/code].\n"
+"Par défaut, l'audio est entendu depuis la position de la caméra. Cela peut "
+"être changé en ajoutant un nœud [Listener] à la scène et en l'activant en "
+"appelant [method Listener.make_current] sur lui.\n"
+"Voir aussi [AudioStreamPlayer] pour jouer un son non-positionnel.\n"
+"[b]Note :[/b] Masquer un nœud [AudioStreamPlayer3D] ne désactive pas sa "
+"sortie audio. Pour désactiver temporairement une sortie audio "
+"[AudioStreamPlayer3D], définissez [member unit_db] à une valeur très basse "
+"comme [code]-100[/code] dB (qui n'est pas audible humainement)."
#: doc/classes/AudioStreamPlayer3D.xml
msgid ""
@@ -12756,6 +13386,12 @@ msgid ""
"\"water\" area so that sounds played in the water are redirected through an "
"audio bus to make them sound like they are being played underwater."
msgstr ""
+"Détermine quelles calques du [Area] affectent le son pour les effets de "
+"réverbération et les effets des bus audio. Les aires peuvent être utilisées "
+"pour rediriger les [AudioStream] afin qu'ils jouent dans un certain bus "
+"audio. Un exemple d'utilisation est de faire une aire \"eau\" où les sons "
+"joués dans l'eau sont redirigés par un bus audio qui modifie ces sons pour "
+"qu'ils donnent l'impression d'être joués dans l'eau."
#: doc/classes/AudioStreamPlayer3D.xml
msgid ""
@@ -12798,6 +13434,11 @@ msgid ""
"doppler_tracking] property is set to a value other than [constant Camera."
"DOPPLER_TRACKING_DISABLED]."
msgstr ""
+"Décide dans quelle mesure [url=https://fr.wikipedia.org/wiki/"
+"Effet_Doppler]L'effet Doppler[/url] doit être calculé.\n"
+"[b]Note :[/b] Ce n'est actif que si la propriété [member Camera."
+"doppler_tracking] de la [Camera] actuelle est définie à une valeur autre que "
+"[constant Camera.DOPPLER_TRACKING_DISABLED]."
#: doc/classes/AudioStreamPlayer3D.xml
msgid "The angle in which the audio reaches cameras undampened."
@@ -12995,6 +13636,19 @@ msgid ""
"[code]32000[/code] or [code]22050[/code] may be usable with no loss in "
"quality."
msgstr ""
+"Le taux d'échantillonnage pour mélanger ce son. Les valeurs plus élevées "
+"nécessitent plus d'espace de stockage, mais proposent une meilleure "
+"qualité.\n"
+"Dans les jeux, les taux d'échantillonnage courants sont [code]11025[/code], "
+"[code]16000[/code], [code]22050[/code], [code]32000[/code], [code]44100[/"
+"code], et [code]48000[/code].\n"
+"D'après le [url=https://fr.wikipedia.org/wiki/"
+"Th%C3%A9or%C3%A8me_d'%C3%A9chantillonnage]Théorème d'échantillonnage[/url], "
+"il n'y a aucune différence de qualité pour l'audition humaine au-delà de 40 "
+"000 Hz (puisque la plupart des humains ne peuvent entendre que jusqu'à 20 "
+"000 Hz, et souvent bien moins). Si vous générez des sons inférieurs tels que "
+"les voix, des taux d'échantillonnage inférieurs tels que [code]32000[/code] "
+"ou [code]22050[/code] peuvent être utilisables sans perte de qualité audible."
#: doc/classes/AudioStreamSample.xml
msgid "If [code]true[/code], audio is stereo."
@@ -13670,8 +14324,8 @@ msgid ""
"discarded. Don't use the epsilon argument, it does nothing."
msgstr ""
"Retourne [code]true[/code] si cette base et [code]b[/code] sont "
-"approximativement égales, en appelant [method @GDScript.is_equal_approx] sur "
-"chaque composantes.\n"
+"approximativement égales, en appelant [code]is_equal_approx[/code] sur "
+"chaque composant.\n"
"[b]Note :[/b] Pour des raisons compliquées, l'argument epsilon est toujours "
"ignoré. Ne l'utilisez pas, il ne sert à rien."
@@ -14392,6 +15046,12 @@ msgid ""
"to create [CallbackTweener]. Any [CallbackTweener] created manually will not "
"function correctly."
msgstr ""
+"[CallbackTweener] est utilisé pour appeler une méthode dans une séquence "
+"d'interpolation. Voir [method SceneTreeTween.tween_callback] pour plus "
+"d'informations sur son utilisation.\n"
+"[b]Note :[/b] [method SceneTreeTween.tween_callback] est le seul moyen "
+"correct de créer un [CallbackTweener]. Tout [CallbackTweener] créé "
+"manuellement ne fonctionnera pas correctement."
#: doc/classes/CallbackTweener.xml
msgid ""
@@ -14402,6 +15062,12 @@ msgid ""
"after 2 seconds\n"
"[/codeblock]"
msgstr ""
+"Retarde l'appel par le temps donné en secondes. Par exemple :\n"
+"[codeblock]\n"
+"var tween = get_tree().create_tween()\n"
+"tween.tween_callback(queue_free).set_delay(2) # Cela va appeler "
+"\"queue_free()\"\" après 2 secondes\n"
+"/[codeblock]"
#: doc/classes/Camera.xml
msgid "Camera node, displays from a point of view."
@@ -14417,6 +15083,14 @@ msgid ""
"capabilities to a [Viewport], and, without one, a scene registered in that "
"[Viewport] (or higher viewports) can't be displayed."
msgstr ""
+"La caméra est un nœud spécial qui affiche ce qui est visible depuis son "
+"emplacement actuel. Les caméras s'enregistrent dans le nœud [Viewport] le "
+"plus proche (en remontant l'arborescence). Une seule caméra peut être active "
+"par fenêtre d'affichage. Si aucune fenêtre d'affichage n'est disponible dans "
+"l'arborescence, la caméra s'enregistrera dans la fenêtre d'affichage racine. "
+"En d'autres termes, une caméra permet l'affichage en 3D dans un [Viewport] "
+"et, sans caméra, une scène enregistrée dans ce [Viewport] (où les fenêtres "
+"d'affichage plus hautes) n'affichent rien."
#: doc/classes/Camera.xml
msgid ""
@@ -14543,6 +15217,19 @@ msgid ""
"unproject_position(global_transform.origin)\n"
"[/codeblock]"
msgstr ""
+"Retourne les coordonnées 2D dans le rectangle [Viewport] qui projette le "
+"point 3D donné dans l'espace global.\n"
+"[b]Note :[/b] Lors de l'utilisation de cette fonction pour positionner des "
+"éléments graphiques sur un viseur 3D, utilisez [method is_position_behind] "
+"pour les empêcher d'apparaître si ce point 3D est derrière la caméra :\n"
+"[codeblock]\n"
+"# Ce bloc de code fait partie d'un script qui hérite de Spatial.\n"
+"# `control` est une référence à un nœud héritant de 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
msgid ""
@@ -14568,6 +15255,15 @@ msgid ""
"Perspective menu in the top-left corner of the 3D viewport and toggle "
"[b]Enable Doppler[/b]."
msgstr ""
+"Si n'est pas [constant DOPPLER_TRACKING_DISABLED], cette caméra simulera "
+"[url=https://fr.wikipedia.org/wiki/Effet_Doppler]L'effet Doppler[/url] pour "
+"les objets modifiés en particulier durant la méthode [code]_process[/code]. "
+"L'effet Doppler est seulement simulé pour les nœuds [AudioStreamPlayer3D] "
+"qui ont [member AudioStreamPlayer3D.doppler_tracking] défini à une valeur "
+"autre que [constant AudioStreamPlayer3D.DOPPLER_TRACKING_DISABLED]\n"
+"[b]Note :[/b] Pour basculer la prévisualisation de l'effet Doppler dans "
+"l'éditeur, utilisez le menu \"Perspective\" dans le coin supérieur gauche de "
+"la vue 3D et activer l'option [b]Activer Doppler[/b]."
#: doc/classes/Camera.xml
msgid "The [Environment] to use for this camera."
@@ -14692,6 +15388,11 @@ msgid ""
"objects affect how audio is perceived (changing the audio's [member "
"AudioStreamPlayer3D.pitch_scale])."
msgstr ""
+"Simulate [url=https://fr.wikipedia.org/wiki/Effet_Doppler]l'effet Doppler[/"
+"url] en suivant la position des objets qui ont changé lors de "
+"[code]_process[/code]. Les changements dans la vitesse relative de cette "
+"caméra par rapport à ces objets affectent la façon dont l'audio est perçu "
+"(changement de la hauteur [member AudioStreamPlayer3D.pitch_scale])."
#: doc/classes/Camera.xml
msgid ""
@@ -14722,6 +15423,21 @@ msgid ""
"limits. You can use [method get_camera_screen_center] to get the real "
"position."
msgstr ""
+"Le nœud de la caméra pour les scènes 2D. Il force l'écran (le calque actuel) "
+"à défiler en suivant ce nœud. Cela rend plus facile (et plus rapide) de "
+"programmer des scènes qui défilent que de changer manuellement la position "
+"des nœuds basés sur [CanvasItem].\n"
+"Ce nœud est destiné à être une simple aide pour obtenir les objets qui vont "
+"rapidement, mais plus de fonctionnalités peuvent être désirées pour changer "
+"la façon dont la caméra se comporte. Pour faire votre propre nœud de caméra "
+"personnalisé, héritez de [Node2D] et modifiez la transformation du canevas "
+"en paramétrant [member Viewport.canvas_transform] dans [Viewport] (vous "
+"pouvez obtenir le [Viewport] actuel en utilisant [method Node."
+"get_viewport])\n"
+"Notez que la [code]position[/code] de la [Camera2D] ne représente pas la "
+"position réelle de l'écran, qui peut différer en raison de lissage ou de "
+"limites appliqués. Vous pouvez utiliser [method get_camera_screen_center] "
+"pour obtenir la position réelle."
#: doc/classes/Camera2D.xml doc/classes/TileMap.xml doc/classes/TileSet.xml
msgid "2D Isometric Demo"
@@ -14741,6 +15457,7 @@ msgid ""
"Removes any [Camera2D] from the ancestor [Viewport]'s internal currently-"
"assigned camera."
msgstr ""
+"Enlève toute caméra [Camera2D] du [Viewport] parent assigné en interne."
#: doc/classes/Camera2D.xml
msgid "Forces the camera to update scroll immediately."
@@ -14976,6 +15693,8 @@ msgid ""
"The camera's position is fixed so that the top-left corner is always at the "
"origin."
msgstr ""
+"La position de l'appareil photo est fixe de telle sorte que le coin "
+"supérieur gauche soit toujours placé sur l'origine."
#: doc/classes/Camera2D.xml
msgid ""
@@ -14998,6 +15717,8 @@ msgid ""
"A camera feed gives you access to a single physical camera attached to your "
"device."
msgstr ""
+"Un flux de caméra vous donne accès à une caméra physique qui est connectée à "
+"votre appareil."
#: doc/classes/CameraFeed.xml
msgid ""
@@ -15009,6 +15730,14 @@ msgid ""
"for you if you set the environment to show the camera image in the "
"background."
msgstr ""
+"Un flux de caméra vous donne accès à une caméra physique qui est connectée à "
+"votre appareil. Lorsqu'il est activé, Godot commencera à capturer les images "
+"de cette caméra qui pourront alors être utilisées. Voir aussi "
+"[CameraServer].\n"
+"[b]Note :[/b] Beaucoup de caméras renvoient des images au format YCbCr qui "
+"sont divisées en deux textures et doivent être combinées dans un shader. "
+"Godot le fera automatiquement si vous configurez l'environnement pour "
+"afficher cette image comme arrière-plan."
#: doc/classes/CameraFeed.xml
msgid "Returns the unique ID for this feed."
@@ -15050,6 +15779,8 @@ msgid ""
"Feed supplies separate Y and CbCr images that need to be combined and "
"converted to RGB."
msgstr ""
+"Fournis des images Y et CbCr séparées qui doivent être combinées puis "
+"converties en RGB."
#: doc/classes/CameraFeed.xml
msgid "Unspecified position."
@@ -15076,6 +15807,13 @@ msgid ""
"[b]Note:[/b] This class is currently only implemented on macOS and iOS. On "
"other platforms, no [CameraFeed]s will be available."
msgstr ""
+"Le [CameraServer] garde en mémoire de différentes caméras accessibles dans "
+"Godot. Ce sont des caméras externes telles que des webcams ou les caméras "
+"sur votre téléphone.\n"
+"Ce serveur est notamment utilisé pour fournir des flux vidéo venant de la "
+"caméra aux modules AR.\n"
+"[b]Note :[/b] Cette classe n'est actuellement implémentée que sur macOS et "
+"iOS. Sur les autres plates-formes, aucun [CameraFeed] ne sera disponible."
#: doc/classes/CameraServer.xml
#, fuzzy
@@ -15187,6 +15925,33 @@ msgid ""
"parameters must have angles specified as [i]radians[/i]. To convert degrees "
"to radians, use [method @GDScript.deg2rad]."
msgstr ""
+"La classe de base de tout ce qui est en 2D. Les objets du canevas sont placé "
+"dans une arborescence; les enfants héritent et étendent la transformation du "
+"parent. [CanvasItem] est hérité par [Control] pour tout ce qui concerne "
+"l'interface utilisateur, et par [Node2D] pour tout ce qui concerne le moteur "
+"2D.\n"
+"Tout [CanvasItem] peut servir à dessiner. Pour cela, [méthode update] doit "
+"être appelée, puis [constant NOTIFICATION_DRAW] sera reçu lors du temps "
+"inoccupé pour la requête de dessin. En raison de cela, les éléments des "
+"canevas n'ont pas besoin d'être redessinés à chaque trame, ce qui améliore "
+"considérablement les performances. Plusieurs fonctions pour dessiner dans un "
+"[CanvasItem] sont fournies (voir [code]draw_*[/code]). Cependant, elles ne "
+"peuvent être utilisés qu'à l'intérieur des fonctions virtuelles [method "
+"Object._notification], des signaux ou de [method _draw].\n"
+"Les objets des canevas sont dessinés dans l'ordre de l'arborescence. Par "
+"défaut, les enfants sont au-dessus de leurs parents afin que le [CanvasItem] "
+"racine soit dessiné en arrière fond. Ce comportement peut être modifié pour "
+"chaque élément.\n"
+"Un [CanvasItem] peut aussi être caché, ce qui cachera aussi ses enfants. Il "
+"existe de nombreuses façons de modifier des paramètres tels que la "
+"modulation (pour lui-même et ses enfants) et la modulation de ce seul "
+"élément, ainsi que son mode de mélange.\n"
+"Enfin, une notification de transformation peut être demandée, ce qui "
+"signalera au nœud que sa position globale a changé au cas où l'arborescence "
+"parente a changé.\n"
+"[b]Note :[/b] Sauf exception, toutes les paramètres d'angle doivent être des "
+"spécifiés en [i]radians[/i]. Pour convertir des degrés en radians, utilisez "
+"[méthod @GDScript.deg2rad]."
#: doc/classes/CanvasItem.xml doc/classes/CanvasLayer.xml
#: doc/classes/InputEvent.xml doc/classes/Viewport.xml
@@ -15218,12 +15983,28 @@ msgid ""
"mipmaps to perform antialiasing. 2D batching is also still supported with "
"those antialiased lines."
msgstr ""
+"Dessine un arc non rempli entre les deux angles donnés. Plus la valeur "
+"[code]point_count[/code] est grande, plus la courbe est lisse. Voir aussi "
+"[method draw_circle].\n"
+"[b]Note :[/b] Le dessin de ligne n'est pas accéléré par lots si "
+"[code]antialiased[/code] est [code]true[/code].\n"
+"[b]Note :[/b] En raison de son fonctionnement, l'anticrénelage calculé en "
+"interne n'est pas correct pour les lignes semi-transparents voire peut ne "
+"pas fonctionner sur certaines plateformes. Vous pouvez corriger ce problème "
+"en installant le greffon [url=https://github.com/godot-extended-libraries/"
+"godot-antialiased-line2d]Antialiased Line2D[/url] puis créez un nœud "
+"\"AntialiasedPolygon2D\". Ce nœud utilise des texture avec des mipmaps "
+"personnalisés pour afficher l'anticrénelage. L'accélération par lot est "
+"toujours supporté même avec les lignes avec anticrénelage."
#: doc/classes/CanvasItem.xml
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 ""
+"Dessine un caractère d'une chaîne en utilisant une police personnalisée. "
+"Retourne l'avancement, en fonction de la largeur de caractère et du kerning "
+"avec un caractère optionnel suivant."
#: doc/classes/CanvasItem.xml
msgid ""
@@ -15235,6 +16016,14 @@ msgid ""
"create an AntialiasedRegularPolygon2D node. That node relies on a texture "
"with custom mipmaps to perform antialiasing."
msgstr ""
+"Dessine un cercle coloré rempli. Voir aussi [method draw_arc], [method "
+"draw_polyline] et [method draw_polygon].\n"
+"[b]Note :[/b] L'anticrénelage intégré n'est pas prévu pour [méthod "
+"draw_circle]. Vous pouvez corriger ce problème en installant le greffon "
+"[url=https://github.com/godot-extended-libraries/godot-antialiased-"
+"line2d]Antialiased Line2D[/url] puis créez un nœud "
+"AntialiasedRegularPolygon2D. Ce nœud utilise des texture avec des mipmaps "
+"personnalisés pour afficher l'anticrénelage."
#: doc/classes/CanvasItem.xml
msgid ""
@@ -15248,6 +16037,16 @@ msgid ""
"AntialiasedPolygon2D node. That node relies on a texture with custom mipmaps "
"to perform antialiasing."
msgstr ""
+"Dessine un polygone coloré avec un nombre donné de points, qu'il soit "
+"convexe ou concave. Contrairement à [method draw_polygon], une seule couleur "
+"doit être spécifiée pour tout le polygone.\n"
+"[b]Note :[/b] En raison de son fonctionnement, l'anticrénelage calculé en "
+"interne n'est pas correct pour les polygones semi-transparents voire peut ne "
+"pas fonctionner sur certaines plateformes. Vous pouvez corriger ce problème "
+"en installant le greffon [url=https://github.com/godot-extended-libraries/"
+"godot-antialiased-line2d]Antialiased Line2D[/url] puis créez un nœud "
+"\"AntialiasedPolygon2D\". Ce nœud utilise des texture avec des mipmaps "
+"personnalisés pour afficher l'anticrénelage."
#: doc/classes/CanvasItem.xml
msgid ""
@@ -15264,6 +16063,19 @@ msgid ""
"perform antialiasing. 2D batching is also still supported with those "
"antialiased lines."
msgstr ""
+"Dessine une ligne d'un point 2D à un autre, avec une couleur et une "
+"épaisseur données. L'anticrénelage peut être activé en option. Voir aussi "
+"[method draw_multiline] et [method draw_polyline].\n"
+"[b]Note :[/b] Le dessin de ligne n'est pas accéléré par lots si "
+"[code]antialiased[/code] est [code]true[/code].\n"
+"[b]Note :[/b] En raison de son fonctionnement, l'anticrénelage calculé en "
+"interne n'est pas correct pour les lignes semi-transparents voire peut ne "
+"pas fonctionner sur certaines plateformes. Vous pouvez corriger ce problème "
+"en installant le greffon [url=https://github.com/godot-extended-libraries/"
+"godot-antialiased-line2d]Antialiased Line2D[/url] puis créez un nœud "
+"\"AntialiasedPolygon2D\". Ce nœud utilise des texture avec des mipmaps "
+"personnalisés pour afficher l'anticrénelage. L'accélération par lot est "
+"toujours supporté même avec les lignes avec anticrénelage."
#: doc/classes/CanvasItem.xml
msgid ""
@@ -15298,6 +16110,7 @@ msgstr ""
"avec anti-crénelage."
#: doc/classes/CanvasItem.xml
+#, fuzzy
msgid ""
"Draws multiple disconnected lines with a uniform [code]width[/code] and "
"segment-by-segment coloring. Colors assigned to line segments match by index "
@@ -15344,6 +16157,17 @@ msgid ""
"AntialiasedPolygon2D node. That node relies on a texture with custom mipmaps "
"to perform antialiasing."
msgstr ""
+"Dessine un polygone plein à partir d'un nombre arbitraire de points, qu'il "
+"soit convexe ou concave. Contrairement à [method draw_colored_polygon], la "
+"couleur de chaque point peut être changée individuellement. Voir aussi "
+"[method draw_polyline] et [method draw_polyline_colors].\n"
+"[b]Note :[/b] En raison de son fonctionnement, l'anticrénelage calculé en "
+"interne n'est pas correct pour les polygones semi-transparents voire peut ne "
+"pas fonctionner sur certaines plateformes. Vous pouvez corriger ce problème "
+"en installant le greffon [url=https://github.com/godot-extended-libraries/"
+"godot-antialiased-line2d]Antialiased Line2D[/url] puis créez un nœud "
+"\"AntialiasedPolygon2D\". Ce nœud utilise des texture avec des mipmaps "
+"personnalisés pour afficher l'anticrénelage."
#: doc/classes/CanvasItem.xml
msgid ""
@@ -15359,6 +16183,19 @@ msgid ""
"AntialiasedPolygon2D node. That node relies on a texture with custom mipmaps "
"to perform antialiasing."
msgstr ""
+"Dessine des segments interconnectés d'une couleur [code]color[/code] et "
+"d'une épaisseur [code]width[/code] constantes avec un anticrénelage "
+"facultatif. Si vous dessinez de grandes quantités de lignes, cette méthode "
+"est plus rapide que d'appeler [méthode draw_line] à chaque ligne. Pour "
+"dessiner des lignes déconnectées, utilisez plutôt [method draw_multiline]. "
+"Voir aussi [method draw_polygon].\n"
+"[b]Note :[/b] En raison de son fonctionnement, l'anticrénelage calculé en "
+"interne n'est pas correct pour les polygones semi-transparents voire peut ne "
+"pas fonctionner sur certaines plateformes. Vous pouvez corriger ce problème "
+"en installant le greffon [url=https://github.com/godot-extended-libraries/"
+"godot-antialiased-line2d]Antialiased Line2D[/url] puis créez un nœud "
+"\"AntialiasedPolygon2D\". Ce nœud utilise des texture avec des mipmaps "
+"personnalisés pour afficher l'anticrénelage."
#: doc/classes/CanvasItem.xml
msgid ""
@@ -15398,6 +16235,11 @@ msgid ""
"See also [method draw_line], [method draw_polyline], [method draw_polygon], "
"and [method draw_rect]."
msgstr ""
+"Dessine une primitive personnalisée. 1 point pour dessiner un point, 2 "
+"points pour une ligne, 3 points pour un triangle, et 4 points pour un quad. "
+"Si 0 points ou plus de 4 points sont spécifiés, rien ne sera dessiné et un "
+"message d'erreur sera affiché. Voir aussi [method draw_line], [method "
+"draw_polyline], [method draw_polygon], et [method draw_rect]."
#: doc/classes/CanvasItem.xml
msgid ""
@@ -15416,6 +16258,21 @@ msgid ""
"AntialiasedPolygon2D node. That node relies on a texture with custom mipmaps "
"to perform antialiasing."
msgstr ""
+"Dessine un rectangle. Si [code]filled[/code] est [code]true[/code], le "
+"rectangle sera rempli avec la couleur [code]color[/code] spécifiée. Si "
+"[code]filled[/code] est [code]false[/code], seule la bordure du rectangle "
+"sera dessinée avec [code]color[/code] et l'épaisseur [code]width[/code] "
+"spécifiées. Si [code]antialiased[/code] est [code]true[/code], il sera tenté "
+"d'utiliser de l'anticrénelage pour l'affichage des bordures via OpenGL.\n"
+"[b]Note :[/b] [code]width[/code] et [code]antialiased[/code] ne seront pris "
+"en compte que quand [code]filled[/code] est [code]false[/code].\n"
+"[b]Note :[/b] En raison de son fonctionnement, l'anticrénelage calculé en "
+"interne n'est pas correct pour les polygones semi-transparents voire peut ne "
+"pas fonctionner sur certaines plateformes. Vous pouvez corriger ce problème "
+"en installant le greffon [url=https://github.com/godot-extended-libraries/"
+"godot-antialiased-line2d]Antialiased Line2D[/url] puis créez un nœud "
+"\"AntialiasedPolygon2D\". Ce nœud utilise des texture avec des mipmaps "
+"personnalisés pour afficher l'anticrénelage."
#: doc/classes/CanvasItem.xml
msgid ""
@@ -15479,6 +16336,9 @@ msgid ""
"color. If [code]transpose[/code] is [code]true[/code], the texture will have "
"its X and Y coordinates swapped."
msgstr ""
+"Dessine un rectangle texturé à une position donnée, coloré par une couleur "
+"facultative donnée. Si [code]transpose[/code] est [code]true[/code], la "
+"texture aura ses coordonnées X et Y échangées."
#: doc/classes/CanvasItem.xml
msgid ""
@@ -15611,6 +16471,12 @@ msgid ""
"top-level. The [CanvasItem] will effectively act as if it was placed as a "
"child of a bare [Node]. See also [method is_set_as_toplevel]."
msgstr ""
+"Si [code]enable[/code] est [code]true[/code], ce [CanvasItem] n'héritera "
+"[i]pas[/i] de sa transformation de son [CanvasItem] parent. Son ordre "
+"d'affichage sera également modifié pour dessiner sur les autres [CanvasItem] "
+"qui ne sont pas prioritaires. Le [CanvasItem] se comportera efficacement "
+"comme s'il était placé comme un enfant d'un [Node] vide. Voir aussi [method "
+"is_set_as_toplevel]."
#: doc/classes/CanvasItem.xml
msgid ""
@@ -15618,12 +16484,17 @@ msgid ""
"[constant NOTIFICATION_LOCAL_TRANSFORM_CHANGED] when its local transform "
"changes."
msgstr ""
+"Si [code]enable[/code] est [code]true[/code], ce nœud recevra [constant "
+"NOTIFICATION_LOCAL_TRANSFORM_CHANGED] lorsque sa transformation locale "
+"changera."
#: doc/classes/CanvasItem.xml
msgid ""
"If [code]enable[/code] is [code]true[/code], this node will receive "
"[constant NOTIFICATION_TRANSFORM_CHANGED] when its global transform changes."
msgstr ""
+"Si [code]enable[/code] est [code]true[/code], ce nœud recevra [constant "
+"NOTIFICATION_TRANSFORM_CHANGED] lorsque sa transformation globale changera."
#: doc/classes/CanvasItem.xml
msgid ""
@@ -15643,7 +16514,7 @@ msgstr ""
msgid ""
"The rendering layers in which this [CanvasItem] responds to [Light2D] nodes."
msgstr ""
-"Les claques de rendu où le [CanvasItem] est affecté par les nœuds [Light2D]."
+"Les calques de rendu où le [CanvasItem] est affecté par les nœuds [Light2D]."
#: doc/classes/CanvasItem.xml
msgid "The material applied to textures on this [CanvasItem]."
@@ -15799,6 +16670,9 @@ msgid ""
"[b]Note:[/b] This property is only used and visible in the editor if [member "
"particles_animation] is [code]true[/code]."
msgstr ""
+"Si [code]true[/code], l'animation des particules boucle.\n"
+"[b]Note :[/b] Cette propriété est uniquement utilisée et visible dans "
+"l'éditeur si [member particles_animation] est [code]true[/code]."
#: doc/classes/CanvasItemMaterial.xml
msgid ""
@@ -15807,6 +16681,10 @@ msgid ""
"[b]Note:[/b] This property is only used and visible in the editor if [member "
"particles_animation] is [code]true[/code]."
msgstr ""
+"Le nombre de lignes dans la feuille de textures assigné comme [Texture] pour "
+"un [Particles2D] ou un [CPUParticles2D].\n"
+"[b]Note :[/b] Cette propriété est uniquement utilisée et visible dans "
+"l'éditeur si [member particles_animation] est [code]true[/code]."
#: doc/classes/CanvasItemMaterial.xml
msgid ""
@@ -15817,6 +16695,13 @@ msgid ""
"This property (and other [code]particles_anim_*[/code] properties that "
"depend on it) has no effect on other types of nodes."
msgstr ""
+"Si [code]true[/code], cela active les fonctionnalités d'animation basées sur "
+"des feuilles de textures lorsqu'elles sont affectées aux nœuds [Particles2D] "
+"et [CPUParticles2D]. Le [member ParticlesMaterial.anim_speed] ou [member "
+"CPUParticles2D.anim_speed] doit être une valeur positive pour l'animation à "
+"jouer.\n"
+"Cette propriété (et les autres propriétés [code]particles_anim_*[/code] qui "
+"en dépendent) n'a aucun effet sur d'autres types de nœuds."
#: doc/classes/CanvasItemMaterial.xml
msgid ""
@@ -15845,10 +16730,17 @@ msgid ""
"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 ""
+"Le calque de dessin du canevas. Les nœuds [CanvasItem] qui sont des enfants "
+"directs ou indirects d'un [CanvasLayer] seront dessinés dans ce calque. Le "
+"calque est un index numérique qui définit l'ordre d'affichage. La scène 2D "
+"par défaut fait le rendu avec l'index 0, donc un [CanvasLayer] avec index -1 "
+"sera dessiné en-dessous, et un avec l'index 1 sera dessiné par dessus. Ceci "
+"est très utile pour les interfaces (dans la calque +1 ou au-dessus,) ou les "
+"arrière-plans (dans un calque -1 ou en dessous)."
#: doc/classes/CanvasLayer.xml
msgid "Canvas layers"
-msgstr "Claques du canevas"
+msgstr "Calques du canevas"
#: doc/classes/CanvasLayer.xml
msgid "Returns the RID of the canvas used by this layer."
@@ -16130,6 +17022,15 @@ msgid ""
"See also [BaseButton] which contains common properties and methods "
"associated with this node."
msgstr ""
+"Une case à cocher qui permet à l'utilisateur de faire un choix binaire "
+"(pouvoir seulement choisir une des deux options). C'est similaire à un "
+"[CheckButton] dans ses fonctionnalités, mais avec une apparence différente. "
+"Pour suivre les recommendations d'interface établies, il est recommandé "
+"d'utiliser une CheckBox lorsqu'il n'a [b]pas[/b] d'effet immédiat sur "
+"quelque chose. Par exemple, quand le basculement sera effectif qu'une fois "
+"un bouton de confirmation pressé.\n"
+"Voir aussi [BaseButton] qui contient des propriétés et des méthodes communes "
+"associées à ce nœud."
#: doc/classes/CheckBox.xml
msgid "The [CheckBox] text's font color."
@@ -16146,6 +17047,9 @@ msgid ""
"text color of the checkbox. Disabled, hovered, and pressed states take "
"precedence over this color."
msgstr ""
+"La couleur de la police du texte de la [CheckBox] quand elle a le focus. Ne "
+"remplace que la couleur normale du texte de la case à cocher. Les états "
+"désactivé, survolé et pressé sont prioritaires sur cette couleur."
#: doc/classes/CheckBox.xml
msgid "The [CheckBox] text's font color when it's hovered."
@@ -16234,6 +17138,8 @@ msgid ""
"The [StyleBox] to display as a background when the [CheckBox] is hovered and "
"pressed."
msgstr ""
+"La [StyleBox] à afficher en arrière-plan lorsque la [CheckBox] est survolée "
+"et appuyée."
#: doc/classes/CheckBox.xml doc/classes/CheckButton.xml
msgid "The [StyleBox] to display as a background."
@@ -16260,6 +17166,14 @@ msgid ""
"See also [BaseButton] which contains common properties and methods "
"associated with this node."
msgstr ""
+"CheckButton est un bouton à bascule affiché avec une coche. Il est semblable "
+"à [CheckBox] dans ses fonctionnalités, mais son apparence est différente. "
+"Pour suivre les modèles UX établis, il est recommandé d'utiliser CheckButton "
+"pour les effet [b]immédiat[/b] d'une action. Par exemple, il devrait être "
+"utilisé si le basculement active/désactive un réglage sans nécessiter que "
+"l'utilisateur appuie sur un bouton de confirmation.\n"
+"Voir aussi [BaseButton] qui contient des propriétés et des méthodes communes "
+"associées à ce nœud."
#: doc/classes/CheckButton.xml
msgid "The [CheckButton] text's font color."
@@ -16608,6 +17522,8 @@ msgid ""
"The camera's collision margin. The camera can't get closer than this "
"distance to a colliding object."
msgstr ""
+"La marge de collision de la caméra. La caméra ne peut pas se rapprocher plus "
+"d'un objet de collision que cette distance."
#: doc/classes/ClippedCamera.xml
msgid "The camera's process callback. See [enum ProcessMode]."
@@ -16640,6 +17556,8 @@ msgid ""
"Creates a new shape owner for the given object. Returns [code]owner_id[/"
"code] of the new owner for future reference."
msgstr ""
+"Crée un nouveau propriétaire de forme pour l'objet donné. Retourne "
+"[code]owner_id[/code] du nouveau propriétaire pour une prochaine référence."
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
msgid ""
@@ -16658,7 +17576,7 @@ msgstr ""
"défini."
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
-#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/Navigation2D.xml
msgid "Returns the object's [RID]."
msgstr "Retourne le [RID] de l'objet."
@@ -16667,10 +17585,15 @@ 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 ""
+"Retourne un [Array] d'identifiants [code]owner_id[/code]. Vous pouvez "
+"utiliser ces identifiants dans les méthodes prennant [code]owner_id[/code] "
+"comme argument."
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
msgid "If [code]true[/code], the shape owner and its shapes are disabled."
msgstr ""
+"Si [code]true[/code], le propriétaire de la forme et toutes ses formes sont "
+"désactivés."
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
msgid "Removes the given shape owner."
@@ -16683,6 +17606,10 @@ msgid ""
"If [code]value[/code] is [code]false[/code], clears the specified [code]bit[/"
"code] in the the [member collision_layer]."
msgstr ""
+"Si [code]value[/code] est [code]true[/code], définit le [code]bit[/code] "
+"spécifié dans le calque [member collision_layer].\n"
+"Si [code]value[/code] est [code]false[/code], rétablit le [code]bit[/code] "
+"spécifié dans le calque [member collision_layer]."
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
msgid ""
@@ -16691,6 +17618,10 @@ msgid ""
"If [code]value[/code] is [code]false[/code], clears the specified [code]bit[/"
"code] in the the [member collision_mask]."
msgstr ""
+"Si [code]value[/code] est [code]true[/code]], définit le [code]bit[/code] "
+"spécifié dans le masque [nom collision_mask].\n"
+"Si [code]value[/code] est [code]false[/code], rétablit le [code]bit[/code] "
+"spécifié dans le masque [nom collision_mask]."
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
msgid "Returns the [code]owner_id[/code] of the given shape."
@@ -16750,6 +17681,14 @@ msgid ""
"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
+"Les calques physiques où ce CollisionObject3D est inclu. Les objets de "
+"collision peuvent exister dans un ou plusieurs des 32 calques existants. "
+"Voir aussi [member collision_mask].\n"
+"[b]Note :[/b] Un contact est détecté si l'objet A est dans l'un des calques "
+"que l'objet B observe, ou l'objet B est dans toutes les couches que l'objet "
+"A observe. Voir [url=$DOCS_URL/tutorials/physics/physics_introduction."
+"html#collision-layers-and-masks]Calques et masques de collision[/url] dans "
+"la documentation pour plus d'informations."
#: doc/classes/CollisionObject.xml
msgid ""
@@ -16761,12 +17700,22 @@ msgid ""
"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
+"Le calque physique que ce CollisionObject3D observe. Les objets de collision "
+"peuvent observer un ou plusieurs des 32 calques existants. Voir aussi "
+"[member collision_layer].\n"
+"[b]Note :[/b] Un contact est détecté si l'objet A est dans l'une des couches "
+"que l'objet B observe, ou l'objet B est dans toutes les couches que l'objet "
+"A observe. Voir [url=$DOCS_URL/tutorials/physics/physics_introduction."
+"html#collision-layers-and-masks]Calques et masques de collision[/url] dans "
+"la documentation pour plus d'informations."
#: doc/classes/CollisionObject.xml
msgid ""
"If [code]true[/code], the [CollisionObject] will continue to receive input "
"events as the mouse is dragged across its shapes."
msgstr ""
+"Si [code]true[/code], le [CollisionObject] continuera de recevoir des "
+"événements d'entrée quand la souris sera déplacée au-dessus de ses formes."
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
msgid ""
@@ -16782,6 +17731,10 @@ msgid ""
"the shape with index [code]shape_idx[/code] and [code]normal[/code] is the "
"normal vector of the surface at that point."
msgstr ""
+"Émis lorsque l'objet reçoit un [InputEvent] non traité. [code]position[/"
+"code] est l'emplacement dans les coordonnées globales de la souris sur la "
+"surface de la forme à l'index [code]shape_idx[/code], et [code]normal[/code] "
+"est la normale à la surface à ce point."
#: doc/classes/CollisionObject.xml
msgid "Emitted when the mouse pointer enters any of this object's shapes."
@@ -16807,6 +17760,16 @@ msgid ""
"([Viewport] canvas or [CanvasLayer]) are supported. The behavior of "
"collisions between objects in different canvases is undefined."
msgstr ""
+"CollisionObject2D est la classe de base pour les objets de physique en 2D. "
+"Il peut contenir n'importe quel nombre de formes [Shape2D] de collisions 2D. "
+"Chaque forme doit être assignée à un propriétaire de [i]forme[/i]. Le "
+"CollisionObject2D peut avoir autant de propriétaires de forme qui "
+"nécessaire. Les propriétaires de forme ne sont pas des nœuds et ne "
+"apparaissent pas dans l'éditeur, mais sont accessibles par le code en "
+"utilisant les méthodes [code]shape_owner_*[/code].\n"
+"[b]Note :[/b] Seules les collisions entre des objets dans le même canevas "
+"(dans une même [Viewport] ou [CanvasLayer]) sont supportées. Le comportement "
+"des collisions entre des objets dans différents canevas est indéfini."
#: doc/classes/CollisionObject2D.xml
msgid ""
@@ -16876,6 +17839,14 @@ msgid ""
"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
+"Le calque physique où est ce CollisionObject2D. Les objets de collision "
+"peuvent exister dans un ou plusieurs des 32 calques différents. Voir aussi "
+"[member collision_mask].\n"
+"[b]Note :[/b] Un contact est détecté si l'objet A est dans l'un des calques "
+"que l'objet B scanne, ou si l'objet B est dans tous les calques que l'objet "
+"A scanne. Voir [url=$DOCS_URL/tutorials/physics/physics_introduction."
+"html#collision-layers-and-masks]Calques et masques de Collision[/url] dans "
+"la documentation pour plus d'informations."
#: doc/classes/CollisionObject2D.xml
msgid ""
@@ -16887,6 +17858,14 @@ msgid ""
"and-masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
+"Le calque physique que ce CollisionObject2D scanne. Les objets de collision "
+"peuvent exister dans un ou plusieurs des 32 calques différents. Voir aussi "
+"[member collision_mask].\n"
+"[b]Note :[/b] Un contact est détecté si l'objet A est dans l'une des calques "
+"que l'objet B scanne, ou l'objet B est dans toutes les calques que l'objet A "
+"scanne. Voir [url=$DOCS_URL/tutorials/physics/physics_introduction."
+"html#collision-layers-and-masks]Collision calques et masques[/url] dans la "
+"documentation pour plus d'informations."
#: doc/classes/CollisionObject2D.xml
msgid ""
@@ -16894,6 +17873,10 @@ msgid ""
"[code]true[/code] and at least one [code]collision_layer[/code] bit to be "
"set. See [method _input_event] for details."
msgstr ""
+"Émis lorsqu'un événement d'entrée se produit. Nécessite [member "
+"input_pickable] d'être à [code]true[/code] et au moins un des bits de "
+"[code]collision_layer[/code] d'être définit. Voir [method input_event] pour "
+"plus de détails."
#: doc/classes/CollisionObject2D.xml
msgid ""
@@ -16901,6 +17884,9 @@ msgid ""
"[member input_pickable] to be [code]true[/code] and at least one "
"[code]collision_layer[/code] bit to be set."
msgstr ""
+"Émis lorsque le curseur de la souris entre dans l'une de ces formes. "
+"Nécessite [member input_pickable] d'être à [code]true[/code] et au moins un "
+"des bits de [code]collision_layer[/code] d'être définit."
#: doc/classes/CollisionObject2D.xml
msgid ""
@@ -16908,6 +17894,9 @@ msgid ""
"[member input_pickable] to be [code]true[/code] and at least one "
"[code]collision_layer[/code] bit to be set."
msgstr ""
+"Émis lorsque le curseur de la souris sort de toutes les formes. Nécessite "
+"[member input_pickable] d'être à [code]true[/code] et au moins un des bits "
+"de [code]collision_layer[/code] d'être définit."
#: doc/classes/CollisionPolygon.xml
msgid "Editor-only class for defining a collision polygon in 3D space."
@@ -16987,10 +17976,12 @@ msgid ""
"first. The returned value is a clone of the [PoolVector2Array], not a "
"reference."
msgstr ""
+"La liste des sommets du polygone. Le dernier point sera relié au premier. La "
+"valeur retournée est un copie du [PoolVector2Array], et non une référence."
#: doc/classes/CollisionPolygon2D.xml
msgid "Collisions will include the polygon and its contained area."
-msgstr ""
+msgstr "Les collisions comprendront ce polygone et sa zone englobante."
#: doc/classes/CollisionPolygon2D.xml
msgid "Collisions will only include the polygon edges."
@@ -17046,6 +18037,7 @@ msgstr "La forme réelle appartenant à cette forme de collision."
#: doc/classes/CollisionShape2D.xml
msgid "Node that represents collision shape data in 2D space."
msgstr ""
+"Le nœud qui représente les données de forme de collision dans l'espace 2D."
#: doc/classes/CollisionShape2D.xml
msgid ""
@@ -17115,6 +18107,24 @@ msgid ""
"[url=https://raw.githubusercontent.com/godotengine/godot-docs/master/img/"
"color_constants.png]Color constants cheatsheet[/url]"
msgstr ""
+"Une couleur représentée par des composants rouge, vert, bleu et alpha "
+"(RGBA). Le composant alpha est souvent utilisé pour l'opacité. Les valeurs "
+"sont des flottants et vont habituellement de 0 à 1. Certaines propriétés "
+"(comme CanvasItem.modulate) peuvent accepter des valeurs supérieures à 1 "
+"(sur-luminosité ou HDR).\n"
+"Vous pouvez également créer une couleur à partir de noms de couleurs "
+"standardisés en utilisant [méthode @GDScript.ColorN] ou en utilisant "
+"directement les constantes de couleur définies ici. Le jeu de couleurs "
+"standardisé est basé sur la liste [url=https://fr.wikipedia.org/wiki/"
+"Noms_de_couleur_X11]des noms de couleurs X11[/url].\n"
+"Si vous voulez fournir des valeurs dans une gamme de 0 à 255, vous devez "
+"utiliser [méthode @GDScript.Color8]\n"
+"[b]Note :[/b] Lors de la conversion en booléen, une Color sera évaluée à "
+"[code]false[/code] si elle correspond à [code]Color(0, 0, 0, 1)[/code] (noir "
+"complètement opaque). Sinon, une Color sera toujours évaluée à [code]true[/"
+"code].\n"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/master/img/"
+"color_constants.png]Antiscèhe des constantes de couleurs[/url]"
#: doc/classes/Color.xml doc/classes/ColorPickerButton.xml
msgid "2D GD Paint Demo"
@@ -17248,8 +18258,8 @@ msgstr ""
"Construit une couleur à partir d’un profil HSV. [code]h[/code], [code]s[/"
"code], et [code]v[/code] sont des valeurs comprises entre 0 et 1.\n"
"[codeblock]\n"
-"var color = Color.from_hsv(0,58, 0,5, 0,79, 0,8) # Équivalent au HSV (210, 50, "
-"79, 0,8) ou au Color8 (100, 151, 201, 0,8)\n"
+"var color = Color.from_hsv(0,58, 0,5, 0,79, 0,8) # Équivalent au HSV (210, "
+"50, 79, 0,8) ou au Color8 (100, 151, 201, 0,8)\n"
"[/codeblock]"
#: doc/classes/Color.xml
@@ -17417,6 +18427,15 @@ msgid ""
"var s2 = color.to_html(false) # Returns \"ffffff\"\n"
"[/codeblock]"
msgstr ""
+"Retourne la chaîne de caractères avec le code hexadécimal façon HTML au "
+"format ARGB (par exemple [code]ff34f822[/code)].\n"
+"Définir [code]with_alpha[/code] à [code]false[/code] ne retourne pas la "
+"valeur alpha dans le code hexadécimal retourné.\n"
+"[codeblock]\n"
+"var color = Color(1, 1, 1, 0.5)\n"
+"var s1 = color.to_html() # Retourne \"7fffffff\"\n"
+"var s2 = color.to_html(false) # Retourne \"ffffff\"\n"
+"[/codeblock]"
#: doc/classes/Color.xml
msgid ""
@@ -17458,6 +18477,9 @@ msgid ""
"means that the color is fully transparent. A value of 1 means that the color "
"is fully opaque."
msgstr ""
+"Le composant alpha de la couleur, généralement de 0 à 1. Une valeur de 0 "
+"signifie que la couleur est entièrement transparente. Une valeur de 1 "
+"signifie que la couleur est entièrement opaque."
#: doc/classes/Color.xml
msgid "Wrapper for [member a] that uses the range 0 to 255 instead of 0 to 1."
@@ -17467,7 +18489,7 @@ msgstr ""
#: doc/classes/Color.xml
msgid "The color's blue component, typically on the range of 0 to 1."
-msgstr ""
+msgstr "Le composant bleu de la couleur, généralement de 0 à 1."
#: doc/classes/Color.xml
msgid "Wrapper for [member b] that uses the range 0 to 255 instead of 0 to 1."
@@ -17477,7 +18499,7 @@ msgstr ""
#: doc/classes/Color.xml
msgid "The color's green component, typically on the range of 0 to 1."
-msgstr ""
+msgstr "Le composant vert de la couleur, généralement de 0 à 1."
#: doc/classes/Color.xml
msgid "Wrapper for [member g] that uses the range 0 to 255 instead of 0 to 1."
@@ -17487,11 +18509,11 @@ msgstr ""
#: doc/classes/Color.xml
msgid "The HSV hue of this color, on the range 0 to 1."
-msgstr ""
+msgstr "La teinte HSV de cette couleur, dans l'intervalle de 0 à 1."
#: doc/classes/Color.xml
msgid "The color's red component, typically on the range of 0 to 1."
-msgstr ""
+msgstr "Le composant rouge de la couleur, généralement de 0 à 1."
#: doc/classes/Color.xml
msgid "Wrapper for [member r] that uses the range 0 to 255 instead of 0 to 1."
@@ -17501,7 +18523,7 @@ msgstr ""
#: doc/classes/Color.xml
msgid "The HSV saturation of this color, on the range 0 to 1."
-msgstr ""
+msgstr "La saturation HSV de cette couleur, dans l'intervalle de 0 à 1."
#: doc/classes/Color.xml
msgid "The HSV value (brightness) of this color, on the range 0 to 1."
@@ -18118,6 +19140,11 @@ msgid ""
"[ColorPickerButton] instead if you need a button that brings up a "
"[ColorPicker] in a pop-up."
msgstr ""
+"Affiche un widget de sélection de couleurs. Utile pour sélectionner une "
+"couleur dans un espace de couleur RGB/RGBA.\n"
+"[b]Note :[/b] Ce contrôle est lui-même le widget de sélection de couleur. "
+"Vous pouvez utiliser un [ColorPickerButton] en remplacement si vous avez "
+"souhaitez un bouton qui affiche un [ColorPicker] dans une pop-up."
#: doc/classes/ColorPicker.xml
msgid ""
@@ -18361,6 +19388,11 @@ msgid ""
"$ColorRect.color = Color(1, 0, 0, 1) # Set ColorRect's color to red.\n"
"[/codeblock]"
msgstr ""
+"La couleur de remplissage.\n"
+"[codeblock]\n"
+"$ColorRect.color = Color(1, 0, 0, 1) # Définit la couleur du ColorRect à "
+"rouge.\n"
+"[/codeblock]"
#: doc/classes/ConcavePolygonShape.xml
msgid "Concave polygon shape."
@@ -18692,6 +19724,11 @@ msgid ""
"The output file uses an INI-style structure.\n"
"Returns one of the [enum Error] code constants ([code]OK[/code] on success)."
msgstr ""
+"Enregistre le contenu de l'objet [ConfigFile] crypté par le fichier AES-256 "
+"donné en paramètre, en utilisant le [code]key[/code] fourni pour le crypté. "
+"Le fichier de sortie utilise une structure de type INI.\n"
+"Retourne une des constantes de code [enum Error] ([code]OK[/code] sur le "
+"succès)."
#: doc/classes/ConfigFile.xml
msgid ""
@@ -18700,6 +19737,12 @@ msgid ""
"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 ""
+"Enregistre le contenu de l'objet [ConfigFile] crypté avec la clé AES-256 "
+"donnée en paramètre, en utilisant le mot de passe [code]password[/code] "
+"fourni pour le crypté. Le fichier de sortie utilise une structure de type "
+"INI.\n"
+"Retourne une des constantes de code [enum Error] ([code]OK[/code] sur le "
+"succès)."
#: doc/classes/ConfigFile.xml
msgid ""
@@ -18723,6 +19766,13 @@ msgid ""
"get_cancel().connect(\"pressed\", self, \"cancelled\")\n"
"[/codeblock]."
msgstr ""
+"Le dialogue pour la confirmation des actions. Ce dialogue hérite de "
+"[AcceptDialog], mais a par défaut un bouton OK et Annuler (dans l'ordre "
+"définit par le système d'exploitation hôte).\n"
+"Pour annuler l'action, vous pouvez utiliser:\n"
+"[codeblock]\n"
+"get_cancel().connect(\"pressed\", self, \"cancelled\")\n"
+"[/codeblock]."
#: doc/classes/ConfirmationDialog.xml
msgid ""
@@ -18805,6 +19855,45 @@ msgid ""
"[method get_icon], [method get_stylebox], and the [code]add_*_override[/"
"code] methods provided by this class."
msgstr ""
+"La classe de base pour tous les nœuds liés à l'interface utilisateur. "
+"[Control] contient un rectangle englobant qui définit sa taille, une "
+"position d'ancrage par rapport au contrôle parent ou à la fenêtre "
+"d'affichage actuele, et des marges qui représentent un décalage par rapport "
+"à l'ancre. Les marges se mettent à jour automatiquement lorsque le nœud, "
+"l'un de ses parents ou la taille de l'écran changent.\n"
+"Pour plus d'informations sur le système d'interface utilisateur, les ancres, "
+"les marges et les conteneurs, voir les tutoriels correspondants dans la "
+"documentation. Pour construire des interfaces flexibles, vous avez besoin "
+"d'un ensemble d'éléments de l'interface utilisateur héritant de [Control] et "
+"de [Container].\n"
+"[b]Nœuds d'interface utilisateur et les événements[/b]\n"
+"Godot envoie d'abord des événements d'entrée au nœud racine de la scène, en "
+"appelant [method Node._input]. [method Node._input] fait suivre les "
+"événements vers le bas de l'arborescence sous le curseur de la souris, ou "
+"suivant le focus du clavier. Pour cela, Godot appelle [method MainLoop."
+"_input_event]. Appelez [méthode accept_event] pour qu'aucun autre nœud ne "
+"puisse recevoir cet événement. Une fois que vous acceptez un événement "
+"d'entrée, elle est modifiée pour qu'aucune méthode [method Node."
+"_unhandled_input] ne la reçoive.\n"
+"Un seul nœud [Control] peut avoir le focus du clavier. Et seulement ce nœud "
+"recevra des événements de clavier. Pour obtenir le focus, appelez [method "
+"grab_focus]. Les nœuds [Controle] perdent de le focus quand un autre nœud le "
+"prend, ou si vous désactivez ce nœud pour qu'il ne puisse plus obtenir le "
+"focus.\n"
+"Mettez [member souris_filter] à [constant MOUSE_FILTER_IGNORE] pour "
+"signifier qu' un nœud [Control] doit ignorer les événements de souris ou du "
+"clavier. Vous en avez besoin si vous placez une icône par dessus un bouton.\n"
+"Les ressources [Theme] ressources changent l'aspect des Control. Si vous "
+"changez le [Thème] sur un nœud [Control], cela affectera aussi tous ses "
+"enfants. Pour remplacer certains paramètres du thème, appelez l'une des "
+"méthodes [code]add_*_override[/code], comme [method add_font_override]. Vous "
+"pouvez surcharger le thème depuis l'inspecteur.\n"
+"[b]Note :[/b] Les objets des thèmes sont des propriétés et [i]non pas[/i] "
+"des [Object]. Cela signifie que vous ne pouvez pas enregistrer leurs valeurs "
+"en utilisant les méthodes [method Object.get] et [method Object.set]. Au "
+"lieu de cela, utilisez les méthodes [method get_color], [method "
+"get_constant], [method get_font], [method get_icon], [method get_stylebox], "
+"et [code]add_*_override[/code] fournies par cette classe."
#: doc/classes/Control.xml
msgid "GUI tutorial index"
@@ -18872,6 +19961,27 @@ msgid ""
"[member rect_clip_content] or [method _clips_input] enabled.\n"
"[b]Note:[/b] Event position is relative to the control origin."
msgstr ""
+"La méthode virtuelle à surcharger par l'utilisateur. Utilisez cette méthode "
+"pour traiter et accepter les entrées sur les éléments d'interface "
+"utilisateur. Voir [method accept_event].\n"
+"Exemple : cliquer sur un contrôle.\n"
+"[codeblock]\n"
+"func _gui_input(event):\n"
+" if event is InputEventMouseButton:\n"
+" if event.button_index == BUTTON_LEFT and event.pressed:\n"
+" print(\"J'ai cliqué !\")\n"
+"/[codeblock]\n"
+"L'événement ne sera pas déclenché si :\n"
+"* le clic est en dehors du contrôle (voir [method has_point)] ;\n"
+"* le contrôle a [member mouse_filter] à [constant MOUSE_FILTER_IGNORE] ;\n"
+"* le contrôle est recouvert par un autre [Control], si celui-ci n'a pas "
+"[member mouse_filter] à [constant MOUSE_FILTER_IGNORE] ;\n"
+"* le parent de ce contrôle a [member mouse_filter] à [constant "
+"MOUSE_FILTER_STOP] ou a accepté cet événement ;\n"
+"* le clic est en dehors du rectangle du parent et ce parent a soit [member "
+"rect_clip_content] ou [method _clips_input] d'activé.\n"
+"[b]Note :[/b] La position de l'événement est relative à l'origine du "
+"contrôle."
#: doc/classes/Control.xml
msgid ""
@@ -19001,6 +20111,13 @@ msgid ""
"remove_font_override] instead.\n"
"See also [method get_font]."
msgstr ""
+"Crée une surcharge locale pour la police [Font] du thème nommée [code]name[/"
+"code]. Les surcharges locales ont toujours la priorité lors de la "
+"récupération des éléments d'un contrôle.\n"
+"[b]Note :[/b] Une surcharge peut être supprimée en lui assignant la valeur "
+"[code]null[/code]. Ce comportement est obsolète et sera retiré dans 4.0, "
+"utilisez plutôt [method remove_font_override].\n"
+"Voir aussi [method get_font]."
#: doc/classes/Control.xml
msgid ""
@@ -19012,6 +20129,13 @@ msgid ""
"remove_icon_override] instead.\n"
"See also [method get_icon]."
msgstr ""
+"Crée une surcharge locale pour l'icône du thème nommée [code]name[/code]. "
+"Les surcharges locales ont toujours la priorité lors de la récupération des "
+"éléments d'un contrôle.\n"
+"[b]Note :[/b] Une surcharge peut être supprimée en lui assignant la valeur "
+"[code]null[/code]. Ce comportement est obsolète et sera retiré dans 4.0, "
+"utilisez plutôt [method remove_icon_override].\n"
+"Voir aussi [method get_icon]."
#: doc/classes/Control.xml
msgid ""
@@ -19022,6 +20146,12 @@ msgid ""
"value. This behavior is deprecated and will be removed in 4.0, use [method "
"remove_shader_override] instead."
msgstr ""
+"Crée une surcharge locale pour le shader du thème nommé [code]name[/code]. "
+"Les surcharges locales ont toujours la priorité lors de la récupération des "
+"éléments d'un contrôle.\n"
+"[b]Note :[/b] Une surcharge peut être supprimée en lui assignant la valeur "
+"[code]null[/code]. Ce comportement est obsolète et sera retiré dans 4.0, "
+"utilisez plutôt [method remove_shader_override]."
#: doc/classes/Control.xml
msgid ""
@@ -19111,6 +20241,17 @@ msgid ""
" color = data[\"color\"]\n"
"[/codeblock]"
msgstr ""
+"Godot appelle cette méthode pour transmettre le résultat [code]data[/code] "
+"d'un paramètre. Godot appelle d'abord [method can_drop_data] pour tester si "
+"[code]data[/code] est autorisé à recevoir à [code]position[/code] où "
+"[code]position[/code] est local à ce contrôle.\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]"
#: doc/classes/Control.xml
msgid ""
@@ -19142,6 +20283,10 @@ msgid ""
"Margin] enum. A getter method for [member anchor_bottom], [member "
"anchor_left], [member anchor_right] and [member anchor_top]."
msgstr ""
+"Retourne l'ancre identifiée par la constante [code]margin[/code] de "
+"l'énumération [enum Margin]. Une méthode de getter pour [member "
+"anchor_bottom], [member anchor_left], [member anchor_right] et [member "
+"anchor_top]."
#: doc/classes/Control.xml
msgid ""
@@ -19174,6 +20319,29 @@ msgid ""
" modulate = get_color(\"font_color\", \"Button\")\n"
"[/codeblock]"
msgstr ""
+"Retourne un [Color] de la première correspondance dans le [Theme] de "
+"l'arborescence si ce [Theme] a un élément de couleur avec le nom [code]name[/"
+"code] et le type [code]theme_type[/code] spécifiés. Si [code]theme_type[/"
+"code] n'est pas précisé, le nom de classe du contrôle actuel sera utilisé "
+"pour le type, ou [member theme_type_variation] si elle est définie. Si le "
+"type est un nom de classe, ses classes parentes sont également testées, par "
+"ordre d'héritage.\n"
+"Pour le contrôle actuel, ses surcharges locales sont considérées en premier "
+"(voir [method add_color_override]), puis son nom [member theme]. Après le "
+"contrôle actuel, chaque contrôle parental et son [membre theme] assigné "
+"seront pris en considération ; les contrôles sans [member theme] attribué "
+"sont ignorés. Si aucune correspondance de [Theme] n'est trouvée dans "
+"l'arborescence, le [Theme] personnalisé du projet (voir [membre "
+"ProjectSettings.gui/theme/custom]) et le [Theme] par défaut seront "
+"utilisés.\n"
+"[codeblock]\n"
+"func _ready():\n"
+" # Obtenir la couleur de police définie pour la classe actuelle du "
+"Contrôle actuel, si elle existe.\n"
+" modulate = get_color(\"font_color\")\n"
+" # Obtenir la couleur de police définie pour la classe Button.\n"
+" modulate = get_color(\"font_color\", \"Button\")\n"
+"[/codeblock]"
#: doc/classes/Control.xml
msgid ""
@@ -19190,6 +20358,10 @@ msgid ""
"[code]theme_type[/code].\n"
"See [method get_color] for details."
msgstr ""
+"Retourne une constante du premier [Theme] correspondant dans l'arborescence "
+"si ce [Theme] a un élément constant avec le code nommé [code]name[/code] et "
+"le type [code]theme_type[/code].\n"
+"Voir [method get_color] pour plus de détails."
#: doc/classes/Control.xml
msgid ""
@@ -19214,6 +20386,21 @@ msgid ""
" return mydata\n"
"[/codeblock]"
msgstr ""
+"Godot appelle cette méthode pour obtenir des données qui peuvent être "
+"déposées et glissées sur les contrôles qui gère le déposé-glissé. Retournez "
+"[code]null[/code] s'il n'y a pas de données à glisser. Les contrôles qui "
+"veulent recevoir les déposé-glissé doivent implémenter [method "
+"can_drop_data] et [method drop_data]. [code]position[/code] est local à ce "
+"contrôle. Le déposé-glissé peut être forcé avec [method force_drag].\n"
+"Un aperçu affiché à côté de la souris représentant les données peut être "
+"défini avec [methode set_drag_preview]. L'appel à cette méthode est un bon "
+"moment définir cet aperçu.\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]"
#: doc/classes/Control.xml
msgid "Returns [member margin_right] and [member margin_bottom]."
@@ -19525,6 +20712,18 @@ msgid ""
"[code]push_opposite_anchor[/code] was [code]false[/code], the left anchor "
"would get value 0.5."
msgstr ""
+"Définit l'ancre identifiée par la constante [code]margin[/code] de "
+"l'énumération [enum Margin] avec [code]anchor[/code]. C'est une méthode de "
+"setter pour [member anchor_bottom], [member anchor_left], [member "
+"anchor_right] et [member anchor_top].\n"
+"Si [code]keep_margin[/code] est [code]true[/code], les marges ne seront pas "
+"mises à jour après cette opération.\n"
+"Si [code]push_opposite_anchor[/code] est [code]true[/code] et que l'ancre "
+"opposée recouvre cette ancre, l'ancre opposée aura sa valeur surchargée. Par "
+"exemple, lorsque l'ancre gauche est fixée à 1 et que l'ancre droite a une "
+"valeur de 0,5, l'ancre droite aura également une valeur de 1. Si "
+"[code]push_opposite_anchor[/code] est [code]false[/code], l'ancre gauche a "
+"alors la valeur 0.5."
#: doc/classes/Control.xml
msgid ""
@@ -19672,6 +20871,10 @@ msgid ""
"If [code]keep_margins[/code] is [code]true[/code], control's anchors will be "
"updated instead of margins."
msgstr ""
+"Définit le [member rect_global_position] à la [code]position[/code] "
+"spécifiée.\n"
+"Si [code]keep_margins[/code] est [code]true[/code], les ancrages de contrôle "
+"seront changés à la place des marges."
#: doc/classes/Control.xml
msgid ""
@@ -19776,6 +20979,12 @@ 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 ""
+"Signale à Godot qu'il ne devrait pas donner le focus du clavier si "
+"l'utilisateur presse la flèche bas sur le clavier ou le gamepad par défaut. "
+"Vous pouvez modifier la clé en éditant l'action d'entrée [code]ui_down[/"
+"code]. Le nœud doit être un [Control]. Si cette propriété n'est pas définie, "
+"Godot placera le focus sur le [Control] le plus proche en-dessous de celui-"
+"ci."
#: doc/classes/Control.xml
msgid ""
@@ -19785,6 +20994,12 @@ msgid ""
"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 ""
+"Signale à Godot qu'il ne doit pas donner le focus du clavier si "
+"l'utilisateur appuie sur la flèche gauche sur le clavier ou le gamepad par "
+"défaut. Vous pouvez modifier la clé en éditant l'action d'entrée "
+"[code]ui_left[/code]. Le nœud doit être un [Control]. Si cette propriété "
+"n'est pas définie, Godot placera le focus sur le [Control] le plus proche à "
+"gauche de celui-ci."
#: doc/classes/Control.xml
msgid ""
@@ -19794,6 +21009,12 @@ 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 ""
+"Signale à Godot qu'il ne doit pas donner le focus du clavier si "
+"l'utilisateur presse la flèche droite sur le clavier ou le gamepad par "
+"défaut. Vous pouvez modifier la clé en éditant l'action d'entrée "
+"[code]ui_right[/code]. Le nœud doit être un [Control]. Si cette propriété "
+"n'est pas définie, Godot placera le focus sur le [Control] le plus proche en-"
+"dessous de celui-ci."
#: doc/classes/Control.xml
msgid ""
@@ -19803,6 +21024,12 @@ msgid ""
"[Control]. If this property is not set, Godot will give focus to the closest "
"[Control] to the bottom of this one."
msgstr ""
+"Signale à Godot qu'il ne devrait pas donner le focus du clavier si "
+"l'utilisateur appuie sur la flèche haut sur le clavier ou sur le gamepad par "
+"défaut. Vous pouvez modifier la clé en éditant l'action d'entrée "
+"[code]ui_top[/code]. Le nœud doit être un [Control]. Si cette propriété "
+"n'est pas définie, Godot placera le focus sur le [Control] le plus proche en-"
+"dessous de celui-ci."
#: doc/classes/Control.xml
msgid ""
@@ -19812,6 +21039,11 @@ msgid ""
"If this property is not set, Godot will select a \"best guess\" based on "
"surrounding nodes in the scene tree."
msgstr ""
+"Signale à Godot qu'il ne devrait pas donner le focus du clavier si "
+"l'utilisateur presse \"Tab\" sur un clavier par défaut. Vous pouvez modifier "
+"la clé en éditant l'action d'entrée [code]ui_focus_next[/code].\n"
+"Si cette propriété n'est pas définie, Godot choisira la « meilleure solution "
+"» basée sur les nœuds environnants dans l'arborescence."
#: doc/classes/Control.xml
msgid ""
@@ -19821,6 +21053,11 @@ msgid ""
"If this property is not set, Godot will select a \"best guess\" based on "
"surrounding nodes in the scene tree."
msgstr ""
+"Signale à Godot qu'il ne devrait pas donner le focus du clavier si "
+"l'utilisateur presse \"Shift+Tab\" sur un clavier par défaut. Vous pouvez "
+"modifier la clé en éditant l'action d'entrée [code]ui_focus_prev[/code].\n"
+"Si cette propriété n'est pas définie, Godot choisira la « meilleure solution "
+"» basée sur les nœuds environnants dans l'arborescence."
#: doc/classes/Control.xml
msgid ""
@@ -19858,6 +21095,27 @@ msgid ""
"theme.set_color(\"font_color\", \"TooltipLabel\", Color(0, 1, 1))\n"
"[/codeblock]"
msgstr ""
+"Change le texte de l'infobulle. Cette infobulle apparaît lorsque le curseur "
+"de la souris reste sur ce contrôle durant quelques instants, à condition que "
+"la propriété [member mouse_filter] ne soit pas [constant "
+"MOUSE_FILTER_IGNORE]. Vous pouvez modifier le temps nécessaire avant que "
+"l'infobulle n'apparaisse avec [code]gui/timers/tooltip_delay_sec[/code] dans "
+"les réglages du projet.\n"
+"Le panneau de l'infobulle utilisera soit l'implémentation par défaut, soit "
+"une que vous pouvez personnaliser avec [method make_custom_tooltip]. "
+"L'infobulle par défaut comprend un [PopupPanel] et un [Label] dont les "
+"propriétés thématiques peuvent être personnalisées en utilisant un [Thème] "
+"pour le panneau [code]\"TooltipPanel\"[/code] et le label "
+"[code]\"TooltipLabel\"[/code] respectivement. Par exemple :\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"
+"# On part du principe ici que la propriété `theme` a déjà été assignée avec "
+"un Theme personnalisé.\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
msgid ""
@@ -19875,6 +21133,12 @@ msgid ""
"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 ""
+"La distance entre le bord du bas du nœud et son contrôle parent, basé sur "
+"[member anchor_bottom].\n"
+"Les marges sont souvent contrôlées par un ou plusieurs nœuds [Container] "
+"parents, de sorte que vous ne devriez pas les modifier manuellement si votre "
+"nœud est un enfant direct d'un [Container]. Les marges se mettent à jour "
+"automatiquement lorsque vous déplacez ou redimensionnez le nœud."
#: doc/classes/Control.xml
msgid ""
@@ -19884,6 +21148,12 @@ msgid ""
"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 ""
+"La distance entre le bord gauche du nœud et son contrôle parent, basé sur "
+"[member anchor_bottom].\n"
+"Les marges sont souvent contrôlées par un ou plusieurs nœuds [Container] "
+"parents, de sorte que vous ne devriez pas les modifier manuellement si votre "
+"nœud est un enfant direct d'un [Container]. Les marges se mettent à jour "
+"automatiquement lorsque vous déplacez ou redimensionnez le nœud."
#: doc/classes/Control.xml
msgid ""
@@ -19893,6 +21163,12 @@ msgid ""
"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 ""
+"La distance entre le bord droit du nœud et son contrôle parent, basé sur "
+"[member anchor_bottom].\n"
+"Les marges sont souvent contrôlées par un ou plusieurs nœuds [Container] "
+"parents, de sorte que vous ne devriez pas les modifier manuellement si votre "
+"nœud est un enfant direct d'un [Container]. Les marges se mettent à jour "
+"automatiquement lorsque vous déplacez ou redimensionnez le nœud."
#: doc/classes/Control.xml
msgid ""
@@ -19902,6 +21178,12 @@ msgid ""
"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 ""
+"La distance entre le bord du bas du nœud et son contrôle parent, basé sur "
+"[member anchor_bottom].\n"
+"Les marges sont souvent contrôlées par un ou plusieurs nœuds [Container] "
+"parents, de sorte que vous ne devriez pas les modifier manuellement si votre "
+"nœud est un enfant direct d'un [Container]. Les marges se mettent à jour "
+"automatiquement lorsque vous déplacez ou redimensionnez le nœud."
#: doc/classes/Control.xml
msgid ""
@@ -19910,6 +21192,11 @@ msgid ""
"[b]Note:[/b] On Linux, shapes may vary depending on the cursor theme of the "
"system."
msgstr ""
+"La forme par défaut du curseur pour ce contrôle. Utile pour les greffons de "
+"Godot et applications ou jeux qui utilisent les curseurs de souris du "
+"système.\n"
+"[b]Note :[/b] Sur Linux, les formes peuvent varier selon le thème du curseur "
+"du système."
#: doc/classes/Control.xml
msgid ""
@@ -19918,6 +21205,11 @@ msgid ""
"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 ""
+"Contrôle si la commande sera en mesure de recevoir les événements d'entrée "
+"de la souris via [method gui_input] et comment ces événements seront "
+"traités. Contrôle également si le contrôle peut recevoir les signaux [signal "
+"mouse_entered] et [signal mouse_exited]. Voyez les constantes pour connaitre "
+"le rôle de chacun."
#: doc/classes/Control.xml
msgid ""
@@ -19978,6 +21270,21 @@ msgid ""
"[code]yield(get_tree(), \"idle_frame\")[/code] then set its [member "
"rect_scale] property."
msgstr ""
+"Le facteur de mise à l'échelle, relative à [member rect_size]. Changez cette "
+"propriété pour changer l'échelle du nœud centré sur [member "
+"rect_pivot_offset]. Le[member hint_tooltip] du Control sera également "
+"réduite en fonction de cette valeur.\n"
+"[b]Note :[/b] Cette propriété est principalement destinée à être utilisée "
+"pour les animation. Le texte à l'intérieur du Control sera pixelisé ou flou "
+"lorsque la mise à l'échelle change. Pour supporter plusieurs résolutions "
+"dans votre projet, utilisez un mode d'étirement approprié suivant la "
+"[url=$DOCS_URL/tutorials/rendering/multiple_resolutions.html]documentation[/"
+"url] au lieu de changer chaque Control individuellement.\n"
+"[b]Note :[/b] Si le nœud de contrôle est un enfant d'un nœud [Container], "
+"l'échelle sera réinitialisée à [code]Vector2(1, 1)[/code] lorsque la scène "
+"est instanciée. Pour définir l'échelle du Control lors de son instanciation, "
+"attendez une trame avec [code]yield(get_tree,) \"idle_frame\")[/code] puis "
+"définissez son [member rect_scale]."
#: doc/classes/Control.xml
msgid ""
@@ -20032,6 +21339,24 @@ msgid ""
"The earliest match against any type/class name is returned. The project-"
"level Theme and the default Theme are checked last."
msgstr ""
+"Le nom d'une variation de type d'un thème utilisée par ce [Control] pour "
+"examiner ses propres éléments thématiques. Lorsqu'il est vide, le nom de "
+"classe du nœud est utilisé (par exemple [code]Button[/code] pour le contrôle "
+"[Button]), ainsi que les noms de classe de toutes les classes parentes (dans "
+"l'ordre d'héritage).\n"
+"Lorsqu'elle est définie, cette propriété donne la plus haute priorité pour "
+"le type de nom qui est spécifié. Ce type peut ensuite étendre un autre type, "
+"formant une chaîne de dépendance. Voir [method Theme.set_type_variation]. Si "
+"l'élément de thème n'est pas trouvé en utilisant ce type ou ces types de "
+"base, la recherche revient alors sur les noms de classe.\n"
+"[b]Note :[/b] Pour rechercher les éléments d'un [Control], utilisez les "
+"méthodes [code]get_*[/code] sans spécifier de [code]theme_type[/code].\n"
+"[b]Note :[/b] Les objets de thème sont recherchés dans l'ordre de "
+"l'arborescence, depuis le contrôle jusqu'à la racine, où chaque nœud "
+"[Control] est vérifié suivant sa propriété [member theme]. Le premier "
+"résultat trouvé de la recherche sur n'importe quel type ou classe est "
+"retourné. Le thème du projet et celui par défaut est utilisé en dernier "
+"recours."
#: doc/classes/Control.xml
msgid "Emitted when the node gains keyboard focus."
@@ -20080,6 +21405,19 @@ msgid ""
" # Not hovering over area.\n"
"[/codeblock]"
msgstr ""
+"Émis lorsque la souris quitte la zone [code]Rect[/code] de contrôle, à "
+"condition que l'événement l'atteigne.\n"
+"[b]Note :[/b] [signal mouse_exited] sera émis si la souris entre dans un "
+"nœud [Control] enfant, même si le curseur de la souris est encore à "
+"l'intérieur de la zone [code]Rect[/code] du parent.\n"
+"Si vous voulez vérifier si la souris a vraiment quitté la zone, en ignorant "
+"les nœuds parents, vous pouvez utiliser le code comme ceci :\n"
+"[codeblock]\n"
+"func on_mouse_exited():\n"
+" if not Rect2(Vector2(), rect_size)."
+"has_point(get_local_mouse_position()):\n"
+" # Ne survole pas la zone.\n"
+"[/codeblock]"
#: doc/classes/Control.xml
msgid "Emitted when the control changes size."
@@ -20198,6 +21536,10 @@ msgid ""
"when the user hovers the node. It tells the user they're currently dragging "
"an item, like a node in the Scene dock."
msgstr ""
+"Affiche le curseur de la souris de déposé-glissé, souvent un poing fermé ou "
+"un symbole de croix, lorsque l'utilisateur survole le nœud. Ça précise à "
+"l'utilisateur qu'il déplace actuellement un objet, comme un nœud dans le "
+"dock de Scene."
#: doc/classes/Control.xml
msgid ""
@@ -20205,12 +21547,18 @@ msgid ""
"an open hand. It tells the user they can drop an item they're currently "
"grabbing, like a node in the Scene dock."
msgstr ""
+"Affiche le curseur de la souris lorsque l'utilisateur survole le nœud. Ça "
+"peut être une main ouverte. Ça précise à l'utilisateur qu'il peut déposer un "
+"élément qu'il était en traint de déplacer, comme un nœud dans le dock de "
+"Scene."
#: doc/classes/Control.xml
msgid ""
"Show the system's forbidden mouse cursor when the user hovers the node. "
"Often a crossed circle."
msgstr ""
+"Affiche le curseur de souris d'interdition système lorsque l'utilisateur "
+"survole le nœud. C'est souvent un cercle barré."
#: doc/classes/Control.xml
msgid ""
@@ -20218,6 +21566,10 @@ msgid ""
"node. A double-headed vertical arrow. It tells the user they can resize the "
"window or the panel vertically."
msgstr ""
+"Afficher le curseur de souris de redimensionnement vertical lorsque "
+"l'utilisateur survole le nœud. Une flèche verticale à double tête. Ça "
+"précise à l'utilisateur qu'il peut redimensionner la fenêtre ou le panneau "
+"verticalement."
#: doc/classes/Control.xml
msgid ""
@@ -20225,6 +21577,10 @@ msgid ""
"node. A double-headed horizontal arrow. It tells the user they can resize "
"the window or the panel horizontally."
msgstr ""
+"Affiche le curseur de la souris de redimensionnement horizontal lorsque "
+"l'utilisateur survole le nœud. Une flèche horizontale à double tête. Ça "
+"précise à l'utilisateur qu'il peut redimensionner la fenêtre ou le panneau "
+"horizontalement."
#: doc/classes/Control.xml
msgid ""
@@ -20233,6 +21589,11 @@ msgid ""
"top right. It tells the user they can resize the window or the panel both "
"horizontally and vertically."
msgstr ""
+"Affiche le curseur de la souris de redimensionnement de la fenêtre lorsque "
+"l'utilisateur survole le nœud. Le curseur est une flèche à double tête qui "
+"va du bas à gauche au sommet à droite. Ça précise à l'utilisateur qu'il peut "
+"redimensionner la fenêtre ou le panneau à la fois horizontalement et "
+"verticalement."
#: doc/classes/Control.xml
msgid ""
@@ -20241,6 +21602,11 @@ msgid ""
"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 ""
+"Affiche le curseur de la souris de redimensionnement de la fenêtre lorsque "
+"l'utilisateur survole le nœud. Le curseur est une flèche à double tête qui "
+"va du haut à gauche au bas à droite, le contraire de [constant "
+"CURSOR_BDIAGSIZE]. Ça précise à l'utilisateur qu'il peut redimensionner la "
+"fenêtre ou le panneau à la fois horizontalement et verticalement."
#: doc/classes/Control.xml
msgid ""
@@ -20248,6 +21614,9 @@ msgid ""
"2 double-headed arrows at a 90 degree angle. It tells the user they can move "
"a UI element freely."
msgstr ""
+"Affiche le curseur de la souris de déplacement lorsque l'utilisateur survole "
+"le nœud. Il montre 2 flèches doubles à un angle de 90 degrés. Ça précise à "
+"l'utilisateur qu'il peut déplacer un élément d'interface librement."
#: doc/classes/Control.xml
msgid ""
@@ -20416,6 +21785,10 @@ msgid ""
"expand size flags. Use with [member size_flags_horizontal] and [member "
"size_flags_vertical]."
msgstr ""
+"Précise au [Container] parent de centrer le nœud en son milieu. Il centre le "
+"contrôle basé sur sont rectangle englobant, donc ça ne fonctionne pas avec "
+"les drapeaux de remplissage ou d'extension. Utilisez avec [membre "
+"size_flags_horizontal] et [membre size_flags_vertical]."
#: doc/classes/Control.xml
msgid ""
@@ -20424,6 +21797,10 @@ msgid ""
"flags. Use with [member size_flags_horizontal] and [member "
"size_flags_vertical]."
msgstr ""
+"Précise au [Container] parent d'aligner le nœud sur la fin, soit en bas, "
+"soit sur bord droit. Il ne fonctionne pas avec les drapeaux de remplissage "
+"ou d'extension. Utilisez avec [membre size_flags_horizontal] et [membre "
+"size_flags_vertical]."
#: doc/classes/Control.xml
msgid ""
@@ -20433,6 +21810,12 @@ msgid ""
"automatically marked as handled, and they will not propagate further to "
"other controls. This also results in blocking signals in other controls."
msgstr ""
+"Le contrôle recevra les événements d'entrée de la souris via [method "
+"gui_input] si vous cliquez dessus. Et le contrôle recevra les signaux "
+"[signal mouse_entered] et [signal mouse_exited]. Ces événements sont "
+"automatiquement marqués comme traités, et ils ne se propagent pas vers les "
+"autres contrôles. Cela permet également de bloquer la propagation de ces "
+"signaux à partir d'autres contrôles."
#: doc/classes/Control.xml
msgid ""
@@ -20445,6 +21828,14 @@ msgid ""
"all, the event will still be handled automatically, so unhandled input will "
"not be fired."
msgstr ""
+"La contrôle recevra les événements d'entrée de la souris via [method "
+"gui_input] si vous cliquez dessus. Et le contrôle recevra les signaux "
+"[signal mouse_entered] et [signal mouse_exited]. Si ce contrôle ne traite "
+"pas l'événement, cet événement sera envoyé au contrôle parent (s'il existe), "
+"et ainsi de suite jusqu'à ce qu'il n'y ait plus de contrôle parent pour le "
+"traiter. Cela permet également aux signaux d'être émis dans d'autres "
+"contrôles. Même si aucun contrôle ne l'a traité, l'événement sera toujours "
+"traité automatiquement, alors les entrées non traitées ne seront pas émises."
#: doc/classes/Control.xml
msgid ""
@@ -20454,24 +21845,35 @@ msgid ""
"receiving these events or firing the signals. Ignored events will not be "
"handled automatically."
msgstr ""
+"Le contrôle ne recevra pas d'événements d'entrée de la souris via [méthode "
+"gui_input]. Le contrôle ne recevra pas non plus les signaux [signal "
+"mouse_entered] et [signal mouse_exited]. Cela ne bloquera pas d'autres "
+"contrôles de recevoir ces événements et n'émettra pas les signaux. Les "
+"événements ignorés ne seront pas traités automatiquement."
#: doc/classes/Control.xml
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 ""
+"Le contrôle va croître à gauche ou en haut pour compenser si sa taille "
+"minimale est plus grande que sa taille actuelle selon l'axe correspondant."
#: doc/classes/Control.xml
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 ""
+"Le contrôle va croître à droite ou en bas pour compenser si sa taille "
+"minimale est plus grande que sa taille actuelle selon l'axe correspondant."
#: doc/classes/Control.xml
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 ""
+"Le contrôle va croître dans les deux directions de façon égale pour "
+"compenser si sa taille minimale est plus grande que sa taille actuelle."
#: doc/classes/Control.xml
msgid ""
@@ -21928,6 +23330,17 @@ msgid ""
"masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
+"Le calque physique de cette zone.\n"
+"Les objets de collision peuvent exister dans l'un des 32 calques "
+"différentes. Ces calques fonctionnent comme un système de marquage, et ne "
+"sont pas visuels. Un objet de collision peut utiliser ces calques pour "
+"sélectionner avec quels objets il peut entrer en collision, en utilisant la "
+"propriété [member collision_mask].\n"
+"Un contact est détecté si l'objet A est dans l'un des calques que l'objet B "
+"observe, ou si l'objet B est dans tous les calques observés par l'objet A. "
+"Voir [url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-"
+"layers-and-masks]Calques et masques de collision[/url] dans la documentation "
+"pour plus d'informations."
#: modules/csg/doc_classes/CSGShape.xml
msgid ""
@@ -22097,6 +23510,8 @@ msgid ""
"Returns an [Image] for a side of the [CubeMap] using one of the [enum Side] "
"constants."
msgstr ""
+"Retourne une [Image] pour le côté du [CubeMap] correspondant à l'une des "
+"constantes [enum Side]."
#: doc/classes/CubeMap.xml
#, fuzzy
@@ -22108,6 +23523,8 @@ msgid ""
"Sets an [Image] for a side of the [CubeMap] using one of the [enum Side] "
"constants."
msgstr ""
+"Définit une [Image] pour le côté du [CubeMap] correspondant à l'une des "
+"constantes [enum Side]."
#: doc/classes/CubeMap.xml
msgid ""
@@ -22122,6 +23539,8 @@ msgid ""
"The lossy storage quality of the [CubeMap] if the storage mode is set to "
"[constant STORAGE_COMPRESS_LOSSY]."
msgstr ""
+"La qualité de stockage avec perte du [CubeMap] si le mode de stockage est "
+"défini à [constant STORAGE_COMPRESS_LOSSY]."
#: doc/classes/CubeMap.xml
#, fuzzy
@@ -22181,10 +23600,14 @@ msgstr "Répète (plutôt que s'arrête aux bords)."
#: doc/classes/CubeMap.xml
msgid "Turn on magnifying filter, to enable smooth zooming in of the texture."
msgstr ""
+"Active le filtre grossissant pour permettre un agrandissement plus lisse de "
+"la texture."
#: doc/classes/CubeMap.xml
msgid "Default flags. Generate mipmaps, repeat, and filter are enabled."
msgstr ""
+"Les drapeaux par défaut. Cela génère les mipmaps, et active la répétition et "
+"le filtrage de la texture."
#: doc/classes/CubeMesh.xml
msgid "Generate an axis-aligned cuboid [PrimitiveMesh]."
@@ -22627,6 +24050,19 @@ msgid ""
"segment may deviate from the real curve, before the segment has to be "
"subdivided."
msgstr ""
+"Retourne une liste de points le long de la courbe, avec une densité de point "
+"contrôlée par sa courbure. C'est-à-dire que les virages de la courbe auront "
+"plus de points que les segments bien droits.\n"
+"Cette approximation génère des segments droits entre chaque point, puis "
+"divise ces segments jusqu'à ce que la nouvelle forme soit assez proche.\n"
+"L'argument [code]max_stages[/code] contrôle le nombre de divisions qu'un "
+"segment de courbe peut avoir avant qu'il soit considéré comme assez proche. "
+"Chaque division découpe le segment en deux, de sorte que les 5 étapes par "
+"défaut peuvent atteindre 32 divisions par segment de la courbe. Soyez donc "
+"prudent si vous augmentez cette valeur !\n"
+"L'argument [code]tolerance_degrees[/code] contrôle de quel angle, en degrés, "
+"le point du milieu d'un segment peut s'éloigné de la courbe avant que ce "
+"segment ne soit divisé."
#: doc/classes/Curve2D.xml
msgid ""
@@ -22636,6 +24072,11 @@ msgid ""
"smaller the distance, the more points in the cache and the more memory it "
"will consume, so use with care."
msgstr ""
+"La distance en pixels entre deux points du cache qui sont voisins. Le "
+"changement recalcule le cache des points la fois suivante où [method "
+"get_baked_points] ou [method get_baked_length] sera appelée. Plus la "
+"distance est petite, plus il y a de points dans ce cache, et donc plus il "
+"consommera de mémoire, à utiliser donc avec soin."
#: doc/classes/Curve3D.xml
msgid "Describes a Bézier curve in 3D space."
@@ -22788,12 +24229,16 @@ msgid ""
msgstr ""
#: doc/classes/CurveTexture.xml
-msgid "The [code]curve[/code] rendered onto the texture."
+#, fuzzy
+msgid "The [Curve] that is rendered onto the texture."
msgstr "La [code]curve[/code] rendue sur la texture."
#: doc/classes/CurveTexture.xml
-msgid "The width of the texture."
-msgstr "La largeur de la texture."
+msgid ""
+"The width of the texture (in pixels). Higher values make it possible to "
+"represent high-frequency data better (such as sudden direction changes), at "
+"the cost of increased generation time and memory usage."
+msgstr ""
#: doc/classes/CylinderMesh.xml
msgid "Class representing a cylindrical [PrimitiveMesh]."
@@ -23220,6 +24665,13 @@ msgid "Returns the list of keys in the [Dictionary]."
msgstr "Retourne la liste des clés dans le [Dictionary]."
#: doc/classes/Dictionary.xml
+msgid ""
+"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, "
+"duplicate keys will not be copied over, unless [code]overwrite[/code] is "
+"[code]true[/code]."
+msgstr ""
+
+#: doc/classes/Dictionary.xml
msgid "Returns the number of keys in the dictionary."
msgstr "Retourne le nombre de clés dans le dictionnaire."
@@ -23403,6 +24855,13 @@ msgid ""
"code] or [code]res://somedir/newdir[/code]).\n"
"Returns one of the [enum Error] code constants ([code]OK[/code] on success)."
msgstr ""
+"Change le dossier actuellement ouvert par celui donné en argument. "
+"L'argument peut être relatif au répertoire actuel (par exemple "
+"[code]nouveau_dossier[/code] ou [code]./dossier[ /code,)] ou être un chemin "
+"absolu (par exemple [code]/tmp/dossier[/code] ou [code]res://parent/"
+"dossier[ /code)].\n"
+"Retourne une des constantes de code [enum Error] (et [code]OK[/code] en cas "
+"de succès)."
#: doc/classes/Directory.xml
msgid ""
@@ -23425,6 +24884,10 @@ msgid ""
"call is a directory ([code].[/code] and [code]..[/code] are considered "
"directories)."
msgstr ""
+"Retourne si l'élément actuellement traité lors du dernier appel à [method "
+"get_next] est un dossier (le dossier actuel [code].[/code] et le dossier "
+"parent [code]..[/code] comptent aussi des dossiers ordinaires pour cette "
+"méthode)."
#: doc/classes/Directory.xml
msgid ""
@@ -23455,6 +24918,8 @@ msgid ""
"Returns the currently opened directory's drive index. See [method get_drive] "
"to convert returned index to the name of the drive."
msgstr ""
+"Retourne l'index du disque du dossier actuellement ouvert. Voir [method "
+"get_drive] pour convertir cet index retourné en nom du disque."
#: doc/classes/Directory.xml
msgid ""
@@ -23466,6 +24931,14 @@ msgid ""
"On other platforms, or if the requested drive does not exist, the method "
"returns an empty String."
msgstr ""
+"Sur Windows, retourne le nom du disque (du moins la partition) passé en "
+"argument (par exemple [code]C:[/code]).\n"
+"Sur macOS, retourne le chemin vers le volume monté qui est passé en "
+"argument.\n"
+"Sur Linux, retourne le chemin vers le volume monté, ou le favoris GTK 3, "
+"passé en argument.\n"
+"Pour les autres plates-formes, ou si le disque demandé n'existe pas, la "
+"méthode retourne une chaîne vide."
#: doc/classes/Directory.xml
msgid ""
@@ -23475,6 +24948,12 @@ msgid ""
"On Linux, returns the number of mounted volumes and GTK 3 bookmarks.\n"
"On other platforms, the method returns 0."
msgstr ""
+"Sur Windows, retourne le nombre de disque (de partitions) montés sur le "
+"système de fichiers actuel.\n"
+"Sur macOS, retourne le nombre de volumes montés.\n"
+"Sur Linux, retourne le nombre de volumes montés, ainsi que les favoris GTK "
+"3.\n"
+"Pour les autres plates-formes, la méthode retourne 0."
#: doc/classes/Directory.xml
msgid ""
@@ -23486,6 +24965,14 @@ msgid ""
"closes the stream automatically (i.e. [method list_dir_end] would not be "
"mandatory in such a case)."
msgstr ""
+"Retourne l'élément suivant (un fichier ou un dossier) dans le dossier actuel "
+"(y compris [code].[/code] et [code].[/code], sauf si "
+"[code]skip_navigational[/code] a été passé lors de l'appel [method "
+"list_dir_begin)].\n"
+"Le nom du fichier ou du dossier est retourné (et non pas son chemin "
+"complet). Une fois que le flux a été entièrement traité, la méthode retourne "
+"une String vide et ferme automatiquement ce flux (dans ce cas, l'appel à "
+"[méthod list_dir_end] n'était pas obligatoire)."
#: doc/classes/Directory.xml
msgid ""
@@ -23522,6 +25009,8 @@ 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 ""
+"Ferme le flux ouvert actuel avec [method list_dir_begin] (qu'il ait été "
+"entièrement traité avec [method get_next] n'a pas d'importance)."
#: doc/classes/Directory.xml
msgid ""
@@ -23531,6 +25020,11 @@ msgid ""
"make_dir_recursive]).\n"
"Returns one of the [enum Error] code constants ([code]OK[/code] on success)."
msgstr ""
+"Crée un dossier. L'argument peut être un chemin relatif au dossier actuel, "
+"ou un chemin absolu. Le dossier cible doit être placé dans un dossier déjà "
+"existant (pour créer les dossiers intermédiaires, voir [méthod "
+"make_dir_recursive)].\n"
+"Retourne un des code [enum Error] ([code]OK[/code] en cas de succès)."
#: doc/classes/Directory.xml
msgid ""
@@ -23539,6 +25033,10 @@ msgid ""
"to the current directory, or an absolute path.\n"
"Returns one of the [enum Error] code constants ([code]OK[/code] on success)."
msgstr ""
+"Crée un dossier cible et ainsi que tous les dossiers intermédiaires "
+"nécessaires, en appelant [method make_dir] de façon récursive. L'argument "
+"peut être un chemin relatif au dossier actuel, ou un chemin absolu.\n"
+"Retourne un des code [enum Error] ([code]OK[/code] en cas de succès)."
#: doc/classes/Directory.xml
msgid ""
@@ -23565,6 +25063,12 @@ msgid ""
"move_to_trash] instead.\n"
"Returns one of the [enum Error] code constants ([code]OK[/code] on success)."
msgstr ""
+"Supprime définitivement le fichier cible ou un répertoire s'il est vide. "
+"L'argument peut être un chemin relatif au dossier actuel, ou un chemin "
+"absolu. Si le répertoire cible n'est pas vide, l'opération échouera.\n"
+"Si vous ne voulez pas supprimer définitivement le fichier ou le dossier, "
+"utilisez plutôt [method OS.move_to_trash].\n"
+"Retourne un des codes [enum Error] (et [code]OK[/code] en cas de succès)."
#: doc/classes/Directory.xml
msgid ""
@@ -23574,6 +25078,12 @@ msgid ""
"is not access-protected, it will be overwritten.\n"
"Returns one of the [enum Error] code constants ([code]OK[/code] on success)."
msgstr ""
+"Renomme (déplace) le fichier ou le dossier [code]from[/code] vers la "
+"destination [code]to[/code]. Les deux arguments devraient être des chemins "
+"vers des fichiers ou des dossiers, soit relatifs ou absolus. Si le fichier "
+"ou le dossier de destination existe et que son accès n'est pas protégé en "
+"écriture, il sera écrasé.\n"
+"Retourne un des code [enum Error] ([code]OK[/code] en cas de succès)."
#: doc/classes/DTLSServer.xml
msgid "Helper class to implement a DTLS server."
@@ -23713,6 +25223,10 @@ msgid ""
"[code]chain[/code] parameter to provide additional CA chain information "
"along with the certificate."
msgstr ""
+"Configure le serveur DTLS pour utiliser la clé privée [code]private_key[/"
+"code] et fourni le certificat [code]certificate[/code] aux clients. Vous "
+"pouvez passer le paramètre facultatif [code]chain[/code] pour fournir des "
+"informations supplémentaires sur la chaîne \"CA\" en plus du certificat."
#: doc/classes/DTLSServer.xml
msgid ""
@@ -23723,6 +25237,12 @@ msgid ""
"[constant PacketPeerDTLS.STATUS_HANDSHAKING], as it is normal that 50% of "
"the new connections will be invalid due to cookie exchange."
msgstr ""
+"Essaye de débuter une poignée de main DTLS avec le pair [code]udp_peer[/"
+"code] qui doit être connecté au préalable (voir [method PacketPeerUDP."
+"connect_to_host)]\n"
+"[b]Note :[/b] Vous devez vérifier que le status du PacketPeerUDP est "
+"[constant PacketPeerDTLS.STATUS_HANDSHAKING], car il est commun que 50% des "
+"nouvelles connexions deviennent invalides en raison de l'échange de cookies."
#: doc/classes/DynamicFont.xml
msgid "DynamicFont renders vector font files at runtime."
@@ -23781,7 +25301,7 @@ msgstr ""
"police TTF, vous pouvez utiliser [url=https://fontforge.org/]FontForge[/url] "
"pour cela. Dans FontForge, utilisez [b]Fichier > Polices Générales[/b], "
"cliquez sur [b]Options[/b], puis choisissez la fonctionnalité voulue lors de "
-"la génération de la police"
+"la génération de la police."
#: doc/classes/DynamicFont.xml
msgid "Adds a fallback font."
@@ -23961,6 +25481,13 @@ msgid ""
"To use [EditorExportPlugin], register it using the [method EditorPlugin."
"add_export_plugin] method first."
msgstr ""
+"Les [EditorExportPlugin] sont automatiquement invoqués lorsque l'utilisateur "
+"exporte le projet. Ils sont plus le souvent utilisés de déterminer quels "
+"fichiers doivent être inclus dans le projet exporté. Pour chaque greffon, "
+"[method export_begin] est appelé au début du processus d'exportation, et "
+"[method export_file] est appelé pour chaque fichier exporté.\n"
+"Pour utiliser [EditorExportPlugin], enregistrez-le d'abord avec la méthode "
+"[method EditorPlugin.add_export_greffon]."
#: doc/classes/EditorExportPlugin.xml
msgid ""
@@ -23971,12 +25498,22 @@ msgid ""
"exported project. [code]flags[/code] is only used when running a runnable "
"profile, e.g. when using native run on Android."
msgstr ""
+"La méthode virtuelle à surcharger par l'utilisateur. Il est appelé lorsque "
+"l'exportation commence et fournit toutes les informations sur cette "
+"exportation. [code]features[/code] est la liste des fonctionnalités de "
+"l'exportation, [code]is_debug[/code] est [code]true[/code] pour les exports "
+"avec l'option de débogage, et [code]path[/code] est le chemin cible pour "
+"l'export du projet. [code]flags[/code] est seulement utilisé pour les "
+"profils de lancement, par exemple lorsque vous utilisez le lancement natif "
+"sur Android."
#: doc/classes/EditorExportPlugin.xml
msgid ""
"Virtual method to be overridden by the user. Called when the export is "
"finished."
msgstr ""
+"Une méthode virtuelle à surcharger par l'utilisateur. Elle est appelée "
+"lorsque l'exportation est terminée."
#: doc/classes/EditorExportPlugin.xml
msgid ""
@@ -23988,6 +25525,14 @@ msgid ""
"Calling [method skip] inside this callback will make the file not included "
"in the export."
msgstr ""
+"Une méthode virtuelle à surcharger par l'utilisateur. Elle est appelée pour "
+"chaque fichier exporté, passant des arguments qui permettent d'identifier le "
+"fichier exporté. [code]path[/code] est le chemin du fichier, [code]type[/"
+"code] est la [Resource] représentée par ce fichier (par exemple "
+"[PackedScene]) et [code]features[/code] est la liste des fonctionnalités de "
+"cette exportation.\n"
+"Appeler [method skip] dans cette méthode surchargée pour ne pas exporter ce "
+"fichier."
#: doc/classes/EditorExportPlugin.xml
msgid ""
@@ -23996,6 +25541,11 @@ 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 ""
+"Ajoute un fichier personnalisé à exporter. [code]path[/code] est le chemin "
+"virtuel qui peut être utilisé pour charger le fichier, [code]file[/code] "
+"représente les données binaires du fichier. Si [code]remap[/code] est "
+"[code]true[/code], le fichier ne sera pas exporté, mais sera remplacé par "
+"une référence au chemin [code]path[/code]."
#: doc/classes/EditorExportPlugin.xml
msgid ""
@@ -24008,6 +25558,8 @@ msgid ""
"Adds a C++ code to the iOS export. The final code is created from the code "
"appended by each active export plugin."
msgstr ""
+"Ajoute un code C++ à l'exportation iOS. Le code final est créé à partir de "
+"ce code ajouté à chaque greffon d'exportation actif."
#: doc/classes/EditorExportPlugin.xml
msgid ""
@@ -24053,12 +25605,21 @@ msgid ""
"In case of a directory code-sign will error if you place non code object in "
"directory."
msgstr ""
+"Ajoute un objet partagé ou un dossier contenant uniquement des objets "
+"partagés avec les étiquettes [code]tags[/code] et le chemin de destination "
+"[code]path[/code].\n"
+"[b]Note :[/b] En cas d'exportation pour macOS, ces objets partagés seront "
+"ajoutés au dossier [code]Frameworks[/code] de l'app bundle.\n"
+"Pour les dossiers, \"code-sign\" affichera une erreur si vous placez dans ce "
+"dossier un objet qui n'est pas du code."
#: doc/classes/EditorExportPlugin.xml
msgid ""
"To be called inside [method _export_file]. Skips the current file, so it's "
"not included in the export."
msgstr ""
+"Sera appelé dans [method export_file]. Ignore le fichier actuel, il ne "
+"figurera donc pas dans l'exportation."
#: doc/classes/EditorFeatureProfile.xml
msgid ""
@@ -24078,6 +25639,17 @@ msgid ""
"To manage editor feature profiles visually, use [b]Editor > Manage Feature "
"Profiles...[/b] at the top of the editor window."
msgstr ""
+"Un profil d'éditeur peut être utilisé pour désactiver certaines "
+"fonctionnalités spécifiques de l'éditeur Godot. Lorsqu'elles sont "
+"désactivées, ces fonctionnalités n'apparaîtront pas dans l'éditeur, ce qui "
+"rend simplie l'éditeur. Cela est utile dans les milieux d'éducation pour "
+"réduire la confusion ou lorsque vous travaillez dans une équipe. Par "
+"exemple, les artistes et les concepteurs de niveau pourraient utiliser un "
+"profil de fonctionnalités qui désactive l'éditeur de script pour éviter des "
+"modifications accidentelles aux fichiers qu'ils ne sont pas censés "
+"modifier.\n"
+"Pour gérer visuellement les profils d'éditeur, utilisez [b]Éditeur > Gérer "
+"les profils de fonctionnalités.[/b] en haut de la fenêtre de l'éditeur."
#: doc/classes/EditorFeatureProfile.xml
msgid "Returns the specified [code]feature[/code]'s human-readable name."
@@ -24090,6 +25662,9 @@ msgid ""
"is disabled. When disabled, the class won't appear in the Create New Node "
"dialog."
msgstr ""
+"Retourne [code]true[/code] si la classe spécifiée par [code]class_name[/"
+"code] est désactivée. Lorsqu'elle est désactivée, la classe n'apparaitre pas "
+"dans le dialogue \"Créer un nouveau nœud\"."
#: doc/classes/EditorFeatureProfile.xml
msgid ""
@@ -24111,12 +25686,19 @@ msgid ""
"appear in the inspector when selecting a node that extends the class "
"specified by [code]class_name[/code]."
msgstr ""
+"Retourne [code]true[/code] si [code]property[/code] est désactivé dans la "
+"classe spécifiée par [code]class_name[/code]. Lorsqu'une propriété est "
+"désactivée, elle n'apparaît pas dans l'inspecteur pour un nœud qui étend la "
+"classe spécifiée par [code]class_name[/code]."
#: doc/classes/EditorFeatureProfile.xml
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 ""
+"Retourne [code]true[/code] si la fonctionnalité [code]feature[/code] est "
+"désactivée. Lorsqu'une fonctionnalité est désactivée, elle disparaîtra "
+"entièrement de l'éditeur."
#: doc/classes/EditorFeatureProfile.xml
msgid ""
@@ -24124,6 +25706,9 @@ msgid ""
"format obtained by using the feature profile manager's [b]Export[/b] button "
"or the [method save_to_file] method."
msgstr ""
+"Charge un profil d'éditeur depuis un fichier. Le fichier doit respecter le "
+"format JSON obtenu en utilisant le bouton [b]Export[/b] ou via la méthode "
+"[method save_to_file]."
#: doc/classes/EditorFeatureProfile.xml
msgid ""
@@ -24131,6 +25716,9 @@ msgid ""
"imported using the feature profile manager's [b]Import[/b] button or the "
"[method load_from_file] button."
msgstr ""
+"Enregistre le profil de fonctionnalité de l'éditeur dans un fichier au "
+"format JSON. Il peut ensuite être importé en utilisant le bouton [b]Import[/"
+"b] ou la méthode [method load_from_file]."
#: doc/classes/EditorFeatureProfile.xml
msgid ""
@@ -24138,6 +25726,9 @@ msgid ""
"by [code]class_name[/code]. When disabled, the class won't appear in the "
"Create New Node dialog."
msgstr ""
+"Si [code]disable[/code] est [code]true[/code], désactive la classe nommée "
+"[code]class_name[/code]. Lorsqu'elle est désactivée, la classe n'apparait "
+"pas dans le dialogue \"Créer un nouveau nœud\"."
#: doc/classes/EditorFeatureProfile.xml
msgid ""
@@ -24146,6 +25737,11 @@ msgid ""
"appear in the Create New Node dialog but the inspector will be read-only "
"when selecting a node that extends the class."
msgstr ""
+"Si [code]disable[/code] est [code]true[/code], désactive l'édition de la "
+"classe nommée [code]class_name[/code]. Lorsqu'elle est désactivée, la classe "
+"apparaîtra toujours dans le dialogue \"Créer un nouveau nœud\", mais "
+"l'inspecteur ne permettra pas de modifier ses propriétés pour les nœuds qui "
+"étendent cette classe."
#: doc/classes/EditorFeatureProfile.xml
msgid ""
@@ -24161,48 +25757,68 @@ msgid ""
"specified in [code]feature[/code]. When a feature is disabled, it will "
"disappear from the editor entirely."
msgstr ""
+"Si [code]disable[/code] est [code]true[/code], désactive la fonction "
+"d'éditeur spécifiée dans [code]feature[/code]. Lorsqu'une fonction est "
+"désactivée, elle disparaîtra entièrement de l'éditeur."
#: doc/classes/EditorFeatureProfile.xml
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 ""
+"L'éditeur 3D. Si cette fonctionnalité est désactivée, l'éditeur 3D ne sera "
+"pas affiché mais les nœuds 3D seront toujours affichés dans le dialogue "
+"\"Créer un nouveau nœud\"."
#: doc/classes/EditorFeatureProfile.xml
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 ""
+"L'onglet \"Script\", qui contient l'éditeur de script et le navigateur de "
+"documentation des classes. Si cette fonctionnalité est désactivée, "
+"l'affichage de l'onglet \"Script\" ne sera pas affiché."
#: doc/classes/EditorFeatureProfile.xml
msgid ""
"The AssetLib tab. If this feature is disabled, the AssetLib tab won't "
"display."
msgstr ""
+"L'onglet AssetLib. Si cette caractéristique est désactivée, l'onglet "
+"AssetLib ne sera pas affiché."
#: doc/classes/EditorFeatureProfile.xml
msgid ""
"Scene tree editing. If this feature is disabled, the Scene tree dock will "
"still be visible but will be read-only."
msgstr ""
+"L'éditeur de l'arborescence de la scène. Si cette caractéristique est "
+"désactivée, le dock de l'arborescence de la scène sera toujours visible, "
+"mais ne pourra pas être modifié."
#: doc/classes/EditorFeatureProfile.xml
msgid ""
"The Node dock. If this feature is disabled, signals and groups won't be "
"visible and modifiable from the editor."
msgstr ""
+"Le dock des Nœuds. Si cette caractéristique est désactivée, les signaux et "
+"les groupes ne seront pas affichés ni modifiables dans l'éditeur."
#: doc/classes/EditorFeatureProfile.xml
msgid ""
"The FileSystem dock. If this feature is disabled, the FileSystem dock won't "
"be visible."
msgstr ""
+"Le dock de système de fichiers. Si cette caractéristique est désactivée, le "
+"dock de système de fichiers ne sera pas visible."
#: doc/classes/EditorFeatureProfile.xml
msgid ""
"The Import dock. If this feature is disabled, the Import dock won't be "
"visible."
msgstr ""
+"Le dock d'importation. Si cette caractéristique est désactivée, le dock "
+"d'importation ne sera pas visible."
#: doc/classes/EditorFeatureProfile.xml doc/classes/SpatialMaterial.xml
msgid "Represents the size of the [enum Feature] enum."
@@ -24219,6 +25835,11 @@ msgid ""
"For example, [code]\"*.tscn, *.scn; Scenes\"[/code] results in filter text "
"\"Scenes (*.tscn, *.scn)\"."
msgstr ""
+"Ajoute une option de filtrage d'extension de fichier délimitée par des "
+"virgules à [EditorFileDialog] avec une étiquette optionnelle délimitée par "
+"des point-virgules.\n"
+"Par exemple, [code]\"*.tscn, *.scn; Scenes\"[/code] donne le filtre \"Scenes "
+"(*.tscn, *.scn)\"."
#: doc/classes/EditorFileDialog.xml
msgid "Removes all filters except for \"All Files (*)\"."
@@ -24231,6 +25852,11 @@ msgid ""
"may cause a crash. If you wish to hide it or any of its children, use their "
"[member CanvasItem.visible] property."
msgstr ""
+"Retourne le [code]VBoxContainer[/code] utilisé pour afficher le système de "
+"fichiers.\n"
+"[b]Avertissement :[/b] Il s'agit d'un nœud requis en interne, l'enlever et "
+"le libérer peut causer un plantage. Si vous voulez le cacher lui ou un de "
+"ses enfants, utilisez la propriété [membre CanvasItem.visible]."
#: doc/classes/EditorFileDialog.xml
msgid ""
@@ -24660,6 +26286,13 @@ msgid ""
"code] unless overridden by a specific importer. See [enum ResourceImporter."
"ImportOrder] for some predefined values."
msgstr ""
+"Retourne l'ordre de lancement de cet importateur lors de l'importation de "
+"ressources. Les importateurs avec un ordre d'importation plus [i]bas[/i] "
+"seront appelés en premier, et des valeurs supérieures seront appelées après. "
+"Utilisez-le pour s'assurer que l'importateur fonctionne après l'importation "
+"des dépendances. L'ordre d'importation par défaut est [code]0[/code] à moins "
+"d'être remplacé par un importateur spécifique. Voir [enum ResourceImporter."
+"ImportOrder] pour certaines valeurs prédéfinies."
#: doc/classes/EditorImportPlugin.xml
msgid "Gets the unique name of the importer."
@@ -24703,6 +26336,9 @@ msgid ""
"get_import_options] to get the default options for the preset and [method "
"get_preset_name] to get the name of the preset."
msgstr ""
+"Retourne le nombre de préréglages initiaux définis par le greffon. Utilisez "
+"[method get_import_options] pour obtenir les options par défaut pour le "
+"préréglage et [method get_preset_name] pour obtenir son nom."
#: doc/classes/EditorImportPlugin.xml
msgid "Gets the name of the options preset at this index."
@@ -24713,12 +26349,17 @@ 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 ""
+"Retourne la priorité de ce greffon pour l'extension reconnue. Des greffons "
+"le plus prioritaires seront préférés. La priorité par défaut est [code]1.0[/"
+"code]."
#: doc/classes/EditorImportPlugin.xml
msgid ""
"Gets the list of file extensions to associate with this loader (case-"
"insensitive). e.g. [code][\"obj\"][/code]."
msgstr ""
+"Retourne la liste des extensions de fichier à associer à ce chargeur "
+"(insensible à la casse). Par exemple [code][\"obj\"][/code]."
#: doc/classes/EditorImportPlugin.xml
msgid ""
@@ -24734,12 +26375,18 @@ msgid ""
"directory (see [member ProjectSettings.application/config/"
"use_hidden_project_data_directory])."
msgstr ""
+"Retourne l'extension utilisée pour sauvegarder cette ressource dans le "
+"dossier [code].import[/code] (voir [membre ProjectSettings.application/"
+"config/use_hidden_project_data_directory])."
#: doc/classes/EditorImportPlugin.xml
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 ""
+"Retourne le nom à afficher dans la fenêtre d'importation. Vous devriez "
+"choisir ce nom comme une suite à \"Importer comme\", par exemple \"Importer "
+"comme Maillage Spécial\"."
#: doc/classes/EditorImportPlugin.xml
msgid ""
@@ -24749,6 +26396,13 @@ msgid ""
"This method must be overridden to do the actual importing work. See this "
"class' description for an example of overriding this method."
msgstr ""
+"Importe [code]source_file[/code] dans [code]save_path[/code] avec l'option "
+"[code]options[/code] d'importation spécifié. Les tableaux "
+"[code]platform_variants[/code] et [code]gen_files[/code] seront modifiés par "
+"cette fonction.\n"
+"Cette méthode doit être surchargée pour exécuter le véritable travail "
+"d'importation. Voir la description de cette classe pour un exemple de "
+"surcharge de cette méthode."
#: doc/classes/EditorInspector.xml
#, fuzzy
@@ -24782,6 +26436,33 @@ msgid ""
"groups. So properties with group usage usually use capitalized names instead "
"of snake_cased names."
msgstr ""
+"Il s'agit du contrôle qui permet l'édition des propriétés dans les dialogues "
+"des Paramètres de l'éditeur, le dock Inspecteur, etc. Pour obtenir le "
+"[EditorInspector] utilisé dans le fichier d'inspecteur de l'éditeur, "
+"utilisez [method EditorInterface.get_inspector]\n"
+"[EditorInspector] affichera les propriétés dans le même ordre que le tableau "
+"retourné par [method Object.get_property_list]\n"
+"Si le nom d'un propriété établie est semblable à celui d'un chemin (c'est-à-"
+"dire s'il commence par des barres obliques), [EditorInspector] créera des "
+"sections imbriquées pour les « dossier » suivant le chemin. Par exemple, si "
+"une propriété est nommée [code]highlighting/gdscript/node_path_color[/code], "
+"elle sera affichée comme \"Node Path Color\" dans la section \"GDScript\" "
+"imbriquée dans la section \"Highlighting\".\n"
+"Si une propriété a l'usage [constant @GlobalScope.PROPERTY_USAGE_GROUP], "
+"elle regroupera les propriétés dont le nom commence par la chaîne d'indice "
+"de la propriété. Le groupe se termine quand une propriété ne commence pas "
+"avec cette chaîne d'indice ou quand un nouveau groupe commence. Un nom de "
+"groupe vide termine le groupe actuel. [EditorInspector] créera une section "
+"tout en haut pour chaque groupe. Par exemple, si une propriété avec "
+"l'utilisation de groupe est nommée [code]Collide With[/code] et que sa "
+"chaîne d'indice est [code]collide_with[/code], une propriété "
+"[code]collide_with_area[/code] suivante sera affichée comme \"Area\" dans la "
+"section \"Collide With\".\n"
+"[b]Note :[/b] Contrairement aux sections créées à partir de noms de "
+"propriété selon des chemins, [EditorInspector] a obtenu le nom de sections "
+"créées à partir de groupes. Ainsi, les propriétés avec l'utilisation de "
+"groupe utilisent généralement des noms capitalisés au lieu des noms en "
+"\"snake_case\"."
#: doc/classes/EditorInspector.xml
msgid ""
@@ -24791,16 +26472,24 @@ msgid ""
"code] editor setting hasn't passed yet since this method was last called. "
"(By default, this interval is set to 0.3 seconds.)"
msgstr ""
+"Actualise l'inspecteur.\n"
+"[b]Note :[/b] Pour économiser les ressources CPU, l'appel de cette méthode "
+"ne fera rien si le temps spécifié dans [code]docks/property_editor/"
+"auto_refresh_interval[/code] des réglages de l'éditeur n'a pas encore été "
+"écoulé depuis le dernier appel à cette méthode. (Par défaut, cet intervalle "
+"est de 0,3 secondes.)"
#: doc/classes/EditorInspector.xml
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 ""
+"Émis lorsque le bouton Edit d'un [Objet] a été pressé dans l'inspecteur. "
+"Ceci est principalement utilisé dans l'inspecteur d'une scène distante."
#: doc/classes/EditorInspector.xml
msgid "Emitted when a property is edited in the inspector."
-msgstr ""
+msgstr "Émis lorsqu'une propriété est modifiée dans l'inspecteur."
#: doc/classes/EditorInspector.xml
msgid ""
@@ -24853,6 +26542,19 @@ msgid ""
"To use [EditorInspectorPlugin], register it using the [method EditorPlugin."
"add_inspector_plugin] method first."
msgstr ""
+"[EditorInspectorPlugin] permet d'ajouter des éditeurs de propriétés "
+"personnalisés dans [EditorInspector].\n"
+"Lorsqu'un objet est modifié, la fonction [method can_handle] est appelée et "
+"doit retourner [code]true[/code] si ce type d'objet est supporté.\n"
+"Si supporté, la fonction [method parse_begin] sera appelée, permettant de "
+"placer des contrôles personnalisés au début de la classe.\n"
+"Puis, les méthodes [méthod parse_category] et [method parse_property] seront "
+"appelées pour chaque catégorie et chaque propriété. Elles offrent la "
+"possibilité d'ajouter d'autres contrôles personnalisés à l'inspecteur.\n"
+"Enfin, la méthode [method parse_end] sera appelée.\n"
+"Sur chacun de ces appels, les methodes \"add\" peuvent être appelées.\n"
+"Pour utiliser votre [EditorInspectorPlugin], commencez par l'enregistrer "
+"avec la méthode [method EditorPlugin.add_inspector_greffon]."
#: doc/classes/EditorInspectorPlugin.xml
msgid "Inspector plugins"
@@ -24912,12 +26614,22 @@ msgid ""
"[b]Note:[/b] This class shouldn't be instantiated directly. Instead, access "
"the singleton using [method EditorPlugin.get_editor_interface]."
msgstr ""
+"EditorInterface vous donne le contrôle de la fenêtre de l'éditeur Godot. Il "
+"permet de personnaliser la fenêtre, d'enregistrer et (re)charger des scènes, "
+"de faire des aperçus des mailles, d'inspecter et d'éditer des ressources et "
+"des objets, et fournit l'accès à [EditorSettings], [EditorFileSystem], "
+"[EditorResourcePreview], [ScriptEditor], la fenêtre d'affichage de l'éditeur "
+"et des informations sur les scènes.\n"
+"[b]Note :[/b] Cette classe ne doit pas être instanciée directement. Accédez "
+"plutôt au singleton en utilisant [method EditorPlugin.get_editor_interface]."
#: doc/classes/EditorInterface.xml
msgid ""
"Edits the given [Node]. The node will be also selected if it's inside the "
"scene tree."
msgstr ""
+"Édite le [Node] donné. Le nœud sera également sélectionné s'il s'agit d'une "
+"arborescence de scène."
#: doc/classes/EditorInterface.xml
msgid ""
@@ -24971,6 +26683,12 @@ msgid ""
"[b]Warning:[/b] Removing and freeing this node will render a part of the "
"editor useless and may cause a crash."
msgstr ""
+"Retourne le contrôle principal de l'éditeur. Utilisez-le comme parent pour "
+"les écrans principaux.\n"
+"[b]Note :[/b] Cela retourne le contrôle principal de l'éditeur contenant "
+"tout l'éditeur, pas seulement les vues 2D ou 3D.\n"
+"[b]Avertissement :[/b] Enlever et libérer ce nœud rendra une partie de "
+"l'éditeur inutile et peut causer un crash."
#: doc/classes/EditorInterface.xml
msgid ""
@@ -24978,6 +26696,9 @@ msgid ""
"[b]Warning:[/b] Removing and freeing this node will render a part of the "
"editor useless and may cause a crash."
msgstr ""
+"Retourne l'instance [FileSystemDock] de l'éditeur.\n"
+"[b]Avertissement :[/b] Enlever et libérer ce nœud rendra une partie de "
+"l'éditeur inutile et peut causer un crash."
#: doc/classes/EditorInterface.xml
msgid ""
@@ -24985,6 +26706,9 @@ msgid ""
"[b]Warning:[/b] Removing and freeing this node will render a part of the "
"editor useless and may cause a crash."
msgstr ""
+"Retourne l'instance [EditorInspector] de l'éditeur.\n"
+"[b]Avertissement :[/b] Enlever et libérer ce nœud rendra une partie de "
+"l'éditeur inutile et peut causer un crash."
#: doc/classes/EditorInterface.xml
msgid "Returns an [Array] with the file paths of the currently opened scenes."
@@ -24995,6 +26719,8 @@ msgid ""
"Returns the name of the scene that is being played. If no scene is currently "
"being played, returns an empty string."
msgstr ""
+"Retourne le nom de la scène qui est en train d'être jouée. Si aucune scène "
+"n'est actuellement jouée, retourne une chaîne vide."
#: doc/classes/EditorInterface.xml
msgid "Returns the editor's [EditorFileSystem] instance."
@@ -25010,6 +26736,9 @@ msgid ""
"[b]Warning:[/b] Removing and freeing this node will render a part of the "
"editor useless and may cause a crash."
msgstr ""
+"Retourne l'instance [ScriptEditor].\n"
+"[b]Avertissement :[/b] Enlever et libérer ce nœud rendra une partie de "
+"l'éditeur inutile et peut causer un crash."
#: doc/classes/EditorInterface.xml
msgid ""
@@ -25136,6 +26865,8 @@ msgstr ""
msgid ""
"Adds a script at [code]path[/code] to the Autoload list as [code]name[/code]."
msgstr ""
+"Ajoute un script à [code]path[/code] à la liste des scripts chargés "
+"automatiquement sous le nom [code]name[/code]."
#: doc/classes/EditorPlugin.xml
msgid ""
@@ -25145,6 +26876,12 @@ msgid ""
"your custom control with [method remove_control_from_bottom_panel] and free "
"it with [method Node.queue_free]."
msgstr ""
+"Ajoute un contrôle au panneau du bus (avec \"Sortie\", \"Deboggage\", "
+"\"Animation\", etc.). Retourne une référence au bouton ajouté. Il revient à "
+"vous de masquer le bouton si besoin. Lorsque votre greffon est désactivé, "
+"assurez-vous de supprimer votre contrôle personnalisé avec [method "
+"remove_control_from_bottom_panel] et de le libérer avec [method Node."
+"queue_free]."
#: doc/classes/EditorPlugin.xml
msgid ""
@@ -25157,6 +26894,15 @@ msgid ""
"with [method remove_control_from_container] and free it with [method Node."
"queue_free]."
msgstr ""
+"Ajoute un contrôle personnalisé à un conteneur (voir [enum "
+"CustomControlContainer)]. Il existe de nombreux emplacements où des "
+"contrôles personnalisés peuvent être ajoutés dans l'interface utilisateur de "
+"l'éditeur.\n"
+"N'oubliez pas que vous devez gérer la visibilité de vos contrôles "
+"personnalisés vous-même (et probablement le cacher après l'avoir ajouté).\n"
+"Lorsque votre greffon est désactivé, assurez-vous de supprimer votre "
+"contrôle personnalisé avec [method remove_control_from_container] et de le "
+"libérer avec [method Node.queue_free]."
#: doc/classes/EditorPlugin.xml
msgid ""
@@ -25167,6 +26913,13 @@ msgid ""
"with [method remove_control_from_docks] and free it with [method Node."
"queue_free]."
msgstr ""
+"Ajoute le contrôle à un emplacement spécifique du dock (voir [enum DockSlot] "
+"pour les options).\n"
+"Si le dock est repositionné et aussi longtemps que le greffon est actif, "
+"l'éditeur enregistrera la position du dock pour d'autres sessions.\n"
+"Lorsque votre greffon est désactivé, assurez-vous de supprimer votre "
+"contrôle personnalisé avec [method remove_control_from_container] et de le "
+"libérer avec [method Node.queue_free]."
#: doc/classes/EditorPlugin.xml
msgid ""
@@ -25181,6 +26934,16 @@ msgid ""
"During run-time, this will be a simple object with a script so this function "
"does not need to be called then."
msgstr ""
+"Ajoute un type personnalisé qui apparaîtra dans la liste des nœuds ou des "
+"ressources. Une icône peut être spécifiée en option.\n"
+"Lorsque le nœud ou la ressource est sélectionné, le type de base sera "
+"instancié (c'est-à-dire \"Spatial, \"Control\", \"Resource\"), puis le "
+"script sera chargé et défini pour cet objet.\n"
+"Vous pouvez utiliser la méthode virtuelle [method handles] pour vérifier si "
+"votre objet personnalisé est édité en vérifiant le script ou en utilisant le "
+"mot-clé [code]is[/code].\n"
+"Pendant l'exécution, ce sera un objet simple avec un script de sorte que "
+"cette fonction n'a pas besoin d'être appelée à ce moment."
#: doc/classes/EditorPlugin.xml
msgid ""
@@ -25188,6 +26951,10 @@ msgid ""
"tasks when the project is being exported.\n"
"See [method add_inspector_plugin] for an example of how to register a plugin."
msgstr ""
+"Enregistre un nouveau [EditorExportPlugin]. Les greffons d'exportation sont "
+"utilisés pour effectuer des tâches lorsque le projet est exporté.\n"
+"Voir [method add_inspector_plugin] pour un exemple sur comment enregistrer "
+"un greffon."
#: doc/classes/EditorPlugin.xml
msgid ""
@@ -25197,6 +26964,13 @@ msgid ""
"add_scene_import_plugin] instead.\n"
"See [method add_inspector_plugin] for an example of how to register a plugin."
msgstr ""
+"Enregistre un nouveau [EditorImportPlugin]. Les greffons d'importation sont "
+"utilisés pour importer des éléments personnalisés et non reconnus comme un "
+"type personnalisé [Resource].\n"
+"[b]Note :[/b] Si vous voulez importer des formats d'éléments 3D "
+"personnalisés, utilisez plutôt [method add_scene_import_plugin].\n"
+"Voir [method add_inspector_plugin] pour un exemple sur comment enregistrer "
+"un greffon."
#: doc/classes/EditorPlugin.xml
msgid ""
@@ -25218,6 +26992,24 @@ msgid ""
" remove_inspector_plugin(inspector_plugin)\n"
"[/codeblock]"
msgstr ""
+"Enregistre un nouveau [EditorInspectorPlugin]. Les greffons de l'inspecteur "
+"sont utilisés pour étendre [EditorInspector] et fournir des outils de "
+"configuration personnalisés pour les propriétés de votre objet.\n"
+"[b]Note :[/b] Utilisez toujours [method remove_inspector_plugin] pour "
+"supprimer l'enregistrement de votre [EditorInspectorPlugin] lorsque votre "
+"[EditorPlugin] est désactivé pour empêcher les fuites de mémoire et un "
+"comportement inattendu.\n"
+"[codeblock]\n"
+"const MyInspectorPlugin = preload(\"res://addons/votre_greffon/le/chemin/"
+"vers/votre/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
msgid ""
@@ -25544,13 +27336,43 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide a state data you want to be saved, like view "
+"position, grid settings, folding, etc. 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). This data is automatically saved for "
+"each scene in an [code]editstate[/code] file in the editor metadata folder. "
+"If you want to store global (scene-independent) editor data for your plugin, "
+"you can use [method get_window_layout] instead.\n"
+"Use [method set_state] to restore your saved state.\n"
+"[b]Note:[/b] This method should not be used to save important settings that "
+"should persist with the project.\n"
+"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be "
+"stored and restored correctly.\n"
+"[codeblock]\n"
+"func get_state():\n"
+" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n"
+" return state\n"
+"[/codeblock]"
msgstr ""
-"Retourne l'état de votre greffon de l'éditeur. Ceci est utilisé pour sauver "
-"la scène (ainsi l'état est maintenu lors de l'ouverture à nouveau) et pour "
-"les onglets (pour que l'état puisse être restauré lorsque l'onglet retourne)."
+"Surchargez cette méthode pour fournir des données d'état que vous souhaitez "
+"enregistrer, comme la position de la vue, les paramètres de grille, les "
+"réductions, etc. Ceci est utilisé pour enregistrer la scène (ainsi l'état "
+"est maintenu lors de l'ouverture suivante) et pour les onglets (pour que "
+"l'état soit restauré quand l'onglet est ouvert à nouveau). Ces données sont "
+"automatiquement sauvegardées pour chaque scène dans un fichier "
+"[code]editstate[/code] dans le dossier de métadonnées de l'éditeur. Si vous "
+"souhaitez stocker des données globales (indépendantes de la scène) pour "
+"votre greffon, utilisez plutôt [method get_window_layout].\n"
+"Utilisez [method set_state] pour restaurer votre état sauvegardé.\n"
+"[b]Note :[/b] Cette méthode ne devrait pas être utilisée pour sauvegarder "
+"des paramètres importants qui devraient persister dans le projet.\n"
+"[b]Note :[/b] Vous devez implémenter [method get_greffon_name] pour que "
+"l'état soit stocké et restauré correctement.\n"
+"[codeblock]\n"
+"func get_state():\n"
+" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n"
+" return state\n"
+"[/codeblock]"
#: doc/classes/EditorPlugin.xml
msgid ""
@@ -25563,13 +27385,34 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide the GUI layout of the plugin or any other "
+"data you want to be stored. 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). The data is stored in the "
+"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n"
+"Use [method set_window_layout] to restore your saved layout.\n"
+"[codeblock]\n"
+"func get_window_layout(configuration):\n"
+" configuration.set_value(\"MyPlugin\", \"window_position\", $Window."
+"position)\n"
+" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n"
+"[/codeblock]"
msgstr ""
-"Retourne la mise en page de l'interface du greffon. Ceci permet "
-"d'enregistrer la mise en page de l'éditeur du projet lorsqu'il s'agit d'un "
-"fichier d'éditeur (par exemple en changeant la position d'un dock)."
+"Surchargez cette méthode pour fournir la mise en page de l'interface du "
+"greffon ou toute autre donnée que vous souhaitez enregistrer. Ceci est "
+"utilisé pour sauvegarder la mise en page de l'éditeur du projet lorsque "
+"[method queue_save_layout] est appelée ou la mise en page de l'éditeur a été "
+"modifiée (par exemple, changer la position d'un dock). Les données sont "
+"enregistrées dans le fichier [code]editor_layout.cfg[/code] dans le dossier "
+"des métadonnées de l'éditeur.\n"
+"Utilisez [method set_window_layout] pour restaurer la mise en page qui a été "
+"sauvegardée.\n"
+"[codeblock]\n"
+"func get_window_layout(configuration):\n"
+" configuration.set_value(\"MyPlugin\", \"window_position\", $Window."
+"position)\n"
+" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n"
+"[/codeblock]"
#: doc/classes/EditorPlugin.xml
msgid ""
@@ -25593,6 +27436,9 @@ msgid ""
"the workspace selector together with [b]2D[/b], [b]3D[/b], [b]Script[/b] and "
"[b]AssetLib[/b])."
msgstr ""
+"Retourne [code]true[/code] si c'est ce greffon de l'éditeur concerne l'écran "
+"principal (qui va dans le sélecteur d'espace de travail à côté de [b]2D[/b], "
+"[b]3D[/b], [b]Script[/b] et [b]AssetLib[/b])."
#: doc/classes/EditorPlugin.xml
msgid "Minimizes the bottom panel."
@@ -25698,12 +27544,51 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the state saved by [method get_state]."
-msgstr "Restaurer l’état enregistré par [method get_state]."
+msgid ""
+"Restore the state saved by [method get_state]. This method is called when "
+"the current scene tab is changed in the editor.\n"
+"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise "
+"it will not be recognized and this method will not be called.\n"
+"[codeblock]\n"
+"func set_state(data):\n"
+" zoom = data.get(\"zoom\", 1.0)\n"
+" preferred_color = data.get(\"my_color\", Color.white)\n"
+"[/codeblock]"
+msgstr ""
+"Restaure l'état enregistrée par [méthode get_state]. Cette méthode est "
+"appelée lorsque l'onglet de scène actuelle est changé dans l'éditeur.\n"
+"[b]Note :[/b] Votre greffon doit implémenter [method get_greffon_name], "
+"sinon il ne sera pas reconnu et cette méthode ne sera pas appelée.\n"
+"[codeblock]\n"
+"func set_state(data):\n"
+" zoom = data.get(\"zoom\", 1.0)\n"
+" preferred_color = data.get(\"my_color\", Color.white)\n"
+"[/codeblock]"
#: doc/classes/EditorPlugin.xml
-msgid "Restore the plugin GUI layout saved by [method get_window_layout]."
+msgid ""
+"Restore the plugin GUI layout and data saved by [method get_window_layout]. "
+"This method is called for every plugin on editor startup. Use the provided "
+"[code]configuration[/code] file to read your saved data.\n"
+"[codeblock]\n"
+"func set_window_layout(configuration):\n"
+" $Window.position = configuration.get_value(\"MyPlugin\", "
+"\"window_position\", Vector2())\n"
+" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", "
+"Color.white)\n"
+"[/codeblock]"
msgstr ""
+"Restaurer la disposition de l'interface du greffon et les données "
+"enregistrées par [method get_window_layout]. Cette méthode est appelée pour "
+"chaque greffon au démarrage de l'éditeur. Utilisez le fichier "
+"[code]configuration[/code] pour lire vos données sauvegardées.\n"
+"[codeblock]\n"
+"func set_window_layout(configuration):\n"
+" $Window.position = configuration.get_value(\"MyPlugin\", "
+"\"window_position\", Vector2())\n"
+" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", "
+"Color.white)\n"
+"[/codeblock]"
#: doc/classes/EditorPlugin.xml
msgid ""
@@ -25998,6 +27883,17 @@ msgid ""
"[code]receiver_func[/code] will still be called, but the preview will be "
"null."
msgstr ""
+"Met la [code]resource[/code] modifiée en attente pour être prévisualisée. "
+"Une fois la prévisualisation prête, la méthode [code]receiver_func[/code] du "
+"[code]receiver[/code] sera appelée. Le [code]receiver_func[/code] doit "
+"prendre les quatre arguments suivants : le chemin (\"path\") [String], la "
+"[Texture] de l'aperçu (\"preview\"), la [Texture] de la vignette "
+"(\"thumbnail_preview\") et les données personnées (\"userdata\") sous forme "
+"de [Variant]. [code]userdata[/code] peut continir n'importe quel type de "
+"données, et sera retourné quand [code]receiver_func[/code] sera appelé.\n"
+"[b]Note :[/b] S'il n'était pas possible de créer la prévisualisation, "
+"[code]receiver_func[/code] sera toujours appelé, mais la prévisualisation "
+"sera \"null\"."
#: doc/classes/EditorResourcePreview.xml
msgid ""
@@ -26011,6 +27907,18 @@ msgid ""
"[code]receiver_func[/code] will still be called, but the preview will be "
"null."
msgstr ""
+"Met le fichier de ressource situé à [code]path[/code] en attente pour être "
+"prévisualisé. Une fois la prévisualisation prête, la méthode "
+"[code]receiver_func[/code] du [code]receiver[/code] sera appelée. Le "
+"[code]receiver_func[/code] doit prendre les quatre arguments suivants : le "
+"chemin (\"path\") [String], la [Texture] de l'aperçu (\"preview\"), la "
+"[Texture] de la vignette (\"thumbnail_preview\") et les données personnées "
+"(\"userdata\") sous forme de [Variant]. [code]userdata[/code] peut continir "
+"n'importe quel type de données, et sera retourné quand [code]receiver_func[/"
+"code] sera appelé.\n"
+"[b]Note :[/b] S'il n'était pas possible de créer la prévisualisation, "
+"[code]receiver_func[/code] sera toujours appelé, mais la prévisualisation "
+"sera \"null\"."
#: doc/classes/EditorResourcePreview.xml
msgid "Removes a custom preview generator."
@@ -26039,6 +27947,10 @@ msgid ""
"generate] or [method generate_from_path] for small previews as well.\n"
"By default, it returns [code]false[/code]."
msgstr ""
+"Si cette fonction retourne [code]true[/code], le générateur appellera "
+"[method generate] ou [method generate_from_path] pour les aperçus de petite "
+"taille.\n"
+"Par défaut, il retourne [code]false[/code]."
#: doc/classes/EditorResourcePreviewGenerator.xml
msgid ""
@@ -26049,6 +27961,12 @@ msgid ""
"Care must be taken because this function is always called from a thread (not "
"the main thread)."
msgstr ""
+"Génère un aperçu d'une ressource donnée avec la taille spécifiée. Cela doit "
+"toujours être implémenté.\n"
+"Retourner une texture vide est une bonne façon de signaler un échec et "
+"laisser un autre générateur s'occuper de l'aperçu.\n"
+"Ça nécessite de prendre des précautions parce que cette fonction est "
+"toujours appelée à partir d'un fil d'exécution qui n'est pas celui principal."
#: doc/classes/EditorResourcePreviewGenerator.xml
msgid ""
@@ -26060,6 +27978,13 @@ msgid ""
"Care must be taken because this function is always called from a thread (not "
"the main thread)."
msgstr ""
+"Génère un aperçu directement à partir d'un chemin avec la taille spécifiée. "
+"La mise en œuvre est facultative, car le code par défaut va charger et "
+"appeler [method generate].\n"
+"Retourner une texture vide est une bonne façon de signaler un échec et "
+"laisser un autre générateur s'occuper de l'aperçu.\n"
+"Ça nécessite de prendre des précautions parce que cette fonction est "
+"toujours appelée à partir d'un fil d'exécution qui n'est pas celui principal."
#: doc/classes/EditorResourcePreviewGenerator.xml
msgid ""
@@ -26068,6 +27993,11 @@ msgid ""
"methods [method generate] or [method generate_from_path].\n"
"By default, it returns [code]false[/code]."
msgstr ""
+"Si cette fonction retourne [code]true[/code], le générateur générera "
+"automatiquement les petits aperçus à partir de la texture de "
+"prévisualisation de taille normale générée par les méthodes [method "
+"generate] ou [method generate_from_path].\n"
+"Par défaut, elle retourne [code]false[/code]."
#: doc/classes/EditorResourcePreviewGenerator.xml
msgid ""
@@ -26088,6 +28018,10 @@ msgid ""
"To use [EditorSceneImporter], register it using the [method EditorPlugin."
"add_scene_import_plugin] method first."
msgstr ""
+"[EditorSceneImporter] permet de définir un script importateur pour un format "
+"3D tiers.\n"
+"Pour utiliser [EditorSceneImporter], enregistrez-le d'abord en utilisant la "
+"méthode [method EditorPlugin.add_scene_import_greffon]."
#: modules/fbx/doc_classes/EditorSceneImporterFBX.xml
msgid "FBX 3D asset importer."
@@ -26286,10 +28220,19 @@ msgid ""
"[b]Note:[/b] You must set the [member script_owner] for the custom context "
"menu items to work."
msgstr ""
+"Similaire à [EditorResourcePicker], ce nœud [Control] est utilisé dans le "
+"dock d'inspecteur de l'éditeur, mais seulement pour modifier la propriété "
+"[code]script[/code] d'un [Node]. Les options par défaut pour créer de "
+"nouvelles ressources de tous les sous-types possibles sont remplacées par "
+"des boutons dédiés qui ouvrent le dialogue \"Attaché un Script\". Peut être "
+"utilisé avec [EditorInspectorPlugin] pour recréer le même comportement.\n"
+"[b]Note :[/b] Vous devez définir le [member script_owner] pour les éléments "
+"de menu contextuel personnalisés fonctionnent."
#: doc/classes/EditorScriptPicker.xml
msgid "The owner [Node] of the script property that holds the edited resource."
msgstr ""
+"Le [Node] propriétaire de la propriété Script qui a la ressource modifiée."
#: doc/classes/EditorSelection.xml
msgid "Manages the SceneTree selection in the editor."
@@ -26360,6 +28303,28 @@ msgid ""
"[b]Note:[/b] This class shouldn't be instantiated directly. Instead, access "
"the singleton using [method EditorInterface.get_editor_settings]."
msgstr ""
+"L'objet qui détient les paramètres de l'éditeur indépendant du projet. Ces "
+"paramètres sont généralement visibles dans le menu [b]Éditeur > Paramètres "
+"de l'éditeur[/b].\n"
+"Les noms de propriété utilisent des délimiteurs avec des barres obliques (\"/"
+"\") pour distinguer les sections. Les valeurs de réglage peuvent être de "
+"tout type [Variant]. Il est recommandé d'utiliser la casse [code]snake_case[/"
+"code] pour que les paramètres de l'éditeur soient compatibles avec l'éditeur "
+"Godot lui-même.\n"
+"L'accès aux paramètres peut être fait en utilisant les méthodes suivantes :\n"
+"[codeblock]\n"
+"# `settings.set(\"une/propriete\", value)` fonctionne aussi puisque cette "
+"classe surcharge `_set()` en interne.\n"
+"settings.set_setting(\"une/propriete\",value)\n"
+"\n"
+"# `settings.get(\"une/propriete\", value)` fonctionne aussi puisque cette "
+"classe surcharge `_get()` en interne.\n"
+"settings.get_setting(\"une/propriete\")\n"
+"\n"
+"var list_of_settings = settings.get_property_list()\n"
+"[/codeblock]\n"
+"[b]Note :[/b] Cette classe ne devrait être pas instanciée. Accédez plutôt au "
+"singleton [method EditorInterface.get_editor_settings]."
#: doc/classes/EditorSettings.xml
msgid ""
@@ -26382,10 +28347,29 @@ msgid ""
"editor_settings.add_property_info(property_info)\n"
"[/codeblock]"
msgstr ""
+"Ajoute une info de propriété personnalisée à une propriété. Le dictionnaire "
+"doit contenir :\n"
+"- [code]name[/code]: [String] (le nom de la propriété)\n"
+"- [code]type[/code]: [int] (voir [enum Variant.Type])\n"
+"- en option [code]hint[/code]: [int] (voir [enum PropertyHint]) et "
+"[code]hint_string[/code]: [String]\n"
+"[b]Exemple :[/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\": \"un,deux,trois\"\n"
+"}\n"
+"\n"
+"editor_settings.add_property_info(property_info)\n"
+"[/codeblock]"
#: doc/classes/EditorSettings.xml
msgid "Erases the setting whose name is specified by [code]property[/code]."
-msgstr ""
+msgstr "Efface le réglage nommé [code]property[/code]."
#: doc/classes/EditorSettings.xml
msgid "Returns the list of favorite files and directories for this project."
@@ -26404,12 +28388,17 @@ msgid ""
"subdirectory inside the settings path where project-specific settings are "
"saved."
msgstr ""
+"Retourne le chemin des paramètres spécifiques à ce projet. Les projets ont "
+"tous un sous-dossier unique où les paramètres spécifiques au projet sont "
+"sauvegardés."
#: doc/classes/EditorSettings.xml
msgid ""
"Returns the list of recently visited folders in the file dialog for this "
"project."
msgstr ""
+"Retourne la liste des dossiers récemment visités dans le dialogue des "
+"fichiers de ce projet."
#: doc/classes/EditorSettings.xml
msgid ""
@@ -26424,6 +28413,11 @@ msgid ""
"[code]settings/tmp[/code] - Used for temporary storage of files\n"
"[code]settings/templates[/code] - Where export templates are located"
msgstr ""
+"Retourne le chemin des réglages généraux du moteur. Dans ce chemin, vous "
+"pouvez trouver des chemins standards tels que :\n"
+"[code]settings/tmp[/code] - L'emplacement où sont stockés les fichiers "
+"temporaires\n"
+"[code]settings/templates[/code] - L'emplacement où sont stockés les modèles"
#: doc/classes/EditorSettings.xml
msgid ""
@@ -26793,6 +28787,14 @@ msgid ""
"plug-n-play experience. A custom VCS plugin is supposed to inherit from "
"[EditorVCSInterface] and override these virtual functions."
msgstr ""
+"Définit l'API que l'éditeur utilise pour extraire des informations du VCS "
+"utilisé. La mise en œuvre de cette API est incluse dans les greffons VCS, "
+"qui sont des scripts qui héritent de [EditorVCSInterface] et sont liés (à la "
+"demande) à au singleton de [EditorVCSInterface]. Plutôt qu'accomplir la "
+"tâche elle-même, toutes les fonctions virtuelles énumérées ci-dessous "
+"appellent les fonctions surchargées internes dans les greffons VCS pour "
+"fournir un fonctionnement automatique. Un greffon VCS personnalisé devrait "
+"hériter de [EditorVCSInterface] et surcharger ces fonctions virtuelles."
#: doc/classes/EditorVCSInterface.xml
#, fuzzy
@@ -26967,6 +28969,16 @@ msgid ""
"created. [code]offset_minutes[/code] is the timezone offset in minutes, "
"recorded from the system timezone where the commit was created."
msgstr ""
+"Une fonction d'aide pour créer un [Dictionnaire] des données d'un commit. "
+"[code]msg[/code] est le message de commit. [code]author[/code] est une "
+"simple chaîne intelligible contenant tous les détails de l'auteur, par "
+"exemple son e-mail et le nom comme configurés dans le VCS. [code]id[/code] "
+"est le code de hachage du commit, dans lequel votre VCS peut fournir un "
+"identifiant unique pour chaque commit. [code]unix_timestamp[/code] est "
+"l'horodatage Unix basé sur UTC de la date de création de la commit. "
+"[code]offset_minutes[/code] is le décalage horaire par rapport à UTC, in "
+"minutes, enregistré depuis la zone horaire du système lors de la création du "
+"commit."
#: doc/classes/EditorVCSInterface.xml
msgid ""
@@ -27081,6 +29093,15 @@ msgid ""
"[code]project_managers[/code] - Array of Strings, project manager names\n"
"[code]developers[/code] - Array of Strings, developer names"
msgstr ""
+"Retourne les informations des auteurs du moteur dans un dictionnaire.\n"
+"[code]lead_developers[/code] - Un tableau de String, avec le nom de "
+"développeurs principaux\n"
+"[code]fondateurs[/code] - Un tableau de String, le nom des "
+"fondateurs\n"
+"[code]project_managers[/code] - Un tableau de String, le nom des chefs de "
+"projet\n"
+"[code]developers[/code] - Un tableau de String, le nom de "
+"développeurs"
#: doc/classes/Engine.xml
msgid ""
@@ -27090,6 +29111,11 @@ msgid ""
"[code]copyright[/code], [code]license[/code]} describing subsections of the "
"component"
msgstr ""
+"Retourne un Array d'information sur le copyright dans un dictionnaire.\n"
+"[code]name[/code] - String, le nom du composant\n"
+"[code]parts[/code] - Un table de Dictionary {[code]files[/code], "
+"[code]copyright[/code], [code]license[/code]} décrivant chaque paragraphe de "
+"la licence du composant"
#: doc/classes/Engine.xml
msgid ""
@@ -27099,6 +29125,11 @@ msgid ""
"[code]mini_sponsors[/code], [code]gold_donors[/code], [code]silver_donors[/"
"code], [code]bronze_donors[/code]}"
msgstr ""
+"Retourne un Dictionnaire des Arrays de noms des donateurs.\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
msgid ""
@@ -29921,6 +31952,11 @@ msgid ""
"on ([code]p1[/code], [code]q1[/code]) as well the accompanying point on "
"([code]p2[/code], [code]q2[/code])."
msgstr ""
+"À partir de deux segments 2D (de [code]p1[/code] à [code]q1[/code]) et (de "
+"[code]p2[/code] à [code]q2[/code]), retourne les deux points qui sont les "
+"plus proches de l'autre segment sur ces deux segments. Retourne un "
+"[PoolVector2Array] qui contient deux points, un sur chaque segment (de "
+"[code]p1[/code] à [code]q1[/code], et de [code]p2[/code] à [code]q2[/code])."
#: doc/classes/Geometry.xml
msgid "Used internally by the engine."
@@ -29951,6 +31987,9 @@ msgid ""
"it's located exactly [i]on[/i] the circle's boundary, otherwise returns "
"[code]false[/code]."
msgstr ""
+"Retourne [code]true[/code] si [code]point[/code] est à l'intérieur du cercle "
+"ou s'il se trouve exactement [i]sur[/i] la bordure du cercle, et retourne "
+"[code]false[/code] sinon."
#: doc/classes/Geometry.xml
msgid ""
@@ -29958,6 +31997,9 @@ msgid ""
"code] or if it's located exactly [i]on[/i] polygon's boundary, otherwise "
"returns [code]false[/code]."
msgstr ""
+"Retourne [code]true[/code] si [code]point[/code] est à l'intérieur du "
+"[code]polygon[/code] ou s'il se trouve exactement [i]sur[/i] la bodure du "
+"polygone, retourne [code]false[/code] sinon."
#: doc/classes/Geometry.xml
msgid ""
@@ -29975,6 +32017,14 @@ msgid ""
"[code]null[/code].\n"
"[b]Note:[/b] The lines are specified using direction vectors, not end points."
msgstr ""
+"Vérifie si les deux lignes (de [code]from_a[/code] et en direction de "
+"[code]dir_a[/code]) et (de [code]from_b[/code] et en direction de "
+"[code]dir_b[/code]) s'intersectent. Si oui, retourne le point d'intersection "
+"dans un [Vector2]. Si aucune intersection n'existe, retourne [code]null[/"
+"code].\n"
+"[b]Note :[/b] Ces lignes sont spécifiées en utilisant des vecteurs de "
+"direction, pas des points de fin, puisqu'une ligne n'a pas par définition de "
+"fin."
#: doc/classes/Geometry.xml
msgid ""
@@ -29983,6 +32033,11 @@ msgid ""
"[Vector2] that specifies the positions of each tile, [code]size[/code] "
"contains the overall size of the whole atlas as [Vector2]."
msgstr ""
+"À partir d'un tableau de [Vector2] représentant des tuiles, construit un "
+"atlas. Le dictionnaire retourné a deux clés : [code]points[/code] est un "
+"tableau de [Vector2] qui précise les positions de chaque tuile, et "
+"[code]size[/code] contient la taille globale de l'atlas entier sous forme de "
+"[Vector2]."
#: doc/classes/Geometry.xml
msgid ""
@@ -29993,6 +32048,12 @@ msgid ""
"polygons (holes) produced which could be distinguished by calling [method "
"is_polygon_clockwise]."
msgstr ""
+"Fusionne (combine) les polygones [code]polygon_a[/code] et [code]polygon_b[/"
+"code] et retourne un tableau de polygones fusionnés. Ça utilise "
+"[OPERATION_UNION] entre les polygones.\n"
+"L'opération peut fournir un polygone extérieur (la limite) et plusieurs "
+"polygones à intérieur (représentant les trous) qui pourraient être "
+"distingués en appelant [méthode is_polygon_clockwise]."
#: doc/classes/Geometry.xml
msgid ""
@@ -30019,6 +32080,29 @@ msgid ""
"150), Vector2(50, 150)]\n"
"[/codeblock]"
msgstr ""
+"Gonfle ou dégonfle [code]polygon[/code] par la quantité [code]delta[/code] "
+"unités (pixels) dans toutes les directions. Si [code]delta[/code] est "
+"positif, le polygone décale chaque sommet vers l'extérieur. Si [code]delta[/"
+"code] est négatif, décale chaque sommet vers l'intérieur. Retourne une liste "
+"des polygones parce que gonflage/dégonflage peut produire plusieurs "
+"polygones distinctes. Retourne un tableau vide si [code]delta[/code] est "
+"négatif et la valeur absolue de celui-ci dépasse approximativement les "
+"dimensions du rectangle minimal englobant du polygone.\n"
+"Les sommets de chaque polygone sont arrondis suivant [code]join_type[/code], "
+"voir [enum PolyJoinType].\n"
+"L'opération peut fournir un polygone extérieur (la limite extérieure) et "
+"plusieurs polygones à intérieur (représentant les trous) qui pourraient être "
+"distingués en appelant [méthode is_polygon_clockwise].\n"
+"[b]Note :[/b] Pour transformer les sommets en polygone, utilisez la méthode "
+"[méthode 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) # Affiche [Vector2(50, 50), Vector2(150, 50), Vector2(150, "
+"150), Vector2(50, 150)]\n"
+"[/codeblock]"
#: doc/classes/Geometry.xml
msgid ""
@@ -30035,6 +32119,18 @@ msgid ""
"(hole) produced which could be distinguished by calling [method "
"is_polygon_clockwise]."
msgstr ""
+"par la quantité [code]delta[/code] unités (pixels) dans toutes les "
+"directions. Si [code]delta[/code] est positif, le polygone décale chaque "
+"sommet vers l'extérieur. Retourne une liste des polygones parce que gonflage/"
+"dégonflage peut produire plusieurs polygones distinctes. Si [code]delta[/"
+"code] est négatif, retourne un tableau vide.\n"
+"Les sommets de chaque polygone sont arrondis suivant [code]join_type[/code], "
+"voir [enum PolyJoinType].\n"
+"Chaque point d'extrémité du polygone sera arrondi suivant [code]end_type[/"
+"code], voir [enum PolyEndType].\n"
+"L'opération peut fournir un polygone extérieur (la limite extérieur) et "
+"plusieurs polygones à intérieur (représentant les trous) qui pourraient être "
+"distingués en appelant [method is_polygon_clockwise]."
#: doc/classes/Geometry.xml
msgid ""
@@ -30080,6 +32176,11 @@ 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 ""
+"Vérifie si le segment (de [code]from[/code] à [code]to[/code]) intersecte le "
+"cylindre avec la hauteur [code]height[/code] qui est centré à l'origine et a "
+"rayon de [code]radius[/code]. Si non, retourne un [PoolVector3Array] vide. "
+"S'il y une intersection, le tableau retourné contient le point et la normale "
+"de l'intersection."
#: doc/classes/Geometry.xml
msgid ""
@@ -30088,6 +32189,10 @@ msgid ""
"of intersection as [Vector2]. If no intersection takes place, returns "
"[code]null[/code]."
msgstr ""
+"Vérifie si les deux segments (de [code]from_a[/code] à [code]to_a[/code]) et "
+"(de [code]from_b[/code] à [code]to_b[/code]) intersectent. Si oui, retournez "
+"le point d'intersection dans un [Vector2]. Si aucune intersection n'a lieu, "
+"retourne [code]null[/code]."
#: doc/classes/Geometry.xml
msgid ""
@@ -30116,6 +32221,13 @@ msgid ""
"triangles). If the triangulation did not succeed, an empty [PoolIntArray] is "
"returned."
msgstr ""
+"Triangule l'aire spécifiée par un ensemble discret de [code]points[/code] de "
+"sorte qu'aucun point ne soit à l'intérieur du cercle d'un des triangles "
+"résultant. Retourne un [PoolIntArray] où chaque triangle se compose de trois "
+"indices de point consécutifs de [code]points[/code] (c'est-à-dire que le "
+"tableau retourné aura [code]n * 3[/code] éléments, avec [code]n[/code] étant "
+"le nombre de triangles trouvés). Si la triangulation n'a pas réussi, un "
+"[PoolIntArray] vide sera retourné."
#: doc/classes/Geometry.xml
msgid ""
@@ -30127,6 +32239,13 @@ msgid ""
"contour will be flipped if it's clockwise. If the triangulation did not "
"succeed, an empty [PoolIntArray] is returned."
msgstr ""
+"Triangule le polygone spécifié par les points dans [code]polygon[/code]. "
+"Retourne un [PoolIntArray] où chaque triangle se compose de trois indices de "
+"point consécutifs de [code]polygon[/code] (c'est-à-dire le tableau retourné "
+"aura [code]n * 3[/code] éléments, avec [code]n[/code] étant le nombre de "
+"triangles trouvés). Les triangles de sortie seront toujours dans le sens "
+"anti-horaire, et le contour sera inversé si c'est dans le sens horaire. Si "
+"la triangulation n'a pas réussi, un [PoolIntArray] vide sera retourné."
#: doc/classes/Geometry.xml
msgid ""
@@ -30214,12 +32333,16 @@ 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 ""
+"Surcharge le rectangle englobant de ce nœud avec un personnalisé. Pour le "
+"supprimer, définissez un [AABB] avec tous les champs mis à zéro."
#: doc/classes/GeometryInstance.xml
msgid ""
"Sets the [enum GeometryInstance.Flags] specified. See [enum GeometryInstance."
"Flags] for options."
msgstr ""
+"Défini le [enum GeometryInstance.Flags] spécifiés. Voir [enum "
+"GeometryInstance.Flags] pour les options."
#: doc/classes/GeometryInstance.xml
msgid ""
@@ -30359,6 +32482,8 @@ msgid ""
"Unused in this class, exposed for consistency with [enum VisualServer."
"InstanceFlags]."
msgstr ""
+"Inutilisé dans cette classe, mais exposé pour être cohérent avec [enum "
+"VisualServer.InstanceFlags]."
#: doc/classes/GIProbe.xml
msgid "Real-time global illumination (GI) probe."
@@ -30395,10 +32520,43 @@ msgid ""
"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
"emit light in a [GIProbe]."
msgstr ""
+"[GIProbe] sont utilisées pour fournir une lumière indirecte en temps réel et "
+"en haute qualité aux scènes. Ils pré-calculent les lumières émises par "
+"objets et les effets statiques pour simuler le comportement complexe de la "
+"lumière en temps réel. Les [GIProbe] doivent être calculées avant "
+"utilisation, mais une fois calculées, les objets dynamiques recevront la "
+"lumière. De plus, les lumières peuvent être entièrement dynamiques ou "
+"calculées.\n"
+"Placer des [GIProbe] dans une scène peut réduire grandement les "
+"performances, la qualité de la sonde peut être réduite en échange de "
+"meilleures performances depuis les [ProjectSettings] en utilisant [membre "
+"ProjectSettings.rendering/quality/voxel_cone_tracing/high_quality]\n"
+"[b]La génération procédurale :[/b] Une [GIProbe] peut être calculée dans un "
+"projet exporté, ce qui lui permet d'être adaptée pour niveaux générés de "
+"manière procédurale ou construits par l'utilisateur tant que la géométrie "
+"est générée à l'avance.\n"
+"[b]Performance :[/b] La [GIProbe] est relativement exigeant pour le GPU et "
+"n'est pas adaptée au matériel d'entrée de gamme tel que les cartes "
+"graphiques intégrées (utilisez plutôt [BakedLightmap]). Pour supporter le "
+"matériel d'entrée de gamme, envisagez d'ajouter une option pour désactiver "
+"les [GIProbe] dans les menus d'options de votre projet. Une [GIProbe] peut "
+"être désactivé en cachant son nœud.\n"
+"[b]Note :[/b] Les maillages doivent avoir des murs suffisamment épais pour "
+"éviter les fuites de lumière au travers (évitez les murs qui n'ont qu'un "
+"seul côté). Pour les niveaux intérieurs, enfermez votre géométrie de niveau "
+"dans une boîte suffisamment grande bouchez les trous pour fermer le "
+"maillage. Pour éviter les fuites de lumière, vous pouvez également placer "
+"stratégiquement des nœuds [MeshInstance] temporaires avec [membre "
+"GeometryInstance.use_in_baked_light] activés. Ces nœuds temporaires peuvent "
+"alors être cachés une fois le calcul des [GIProbe] terminé.\n"
+"[b]Note :[/b] En raison d'une limitation de rendu, les [ShaderMaterial] avec "
+"émission ne peuvent pas émettre de lumière lorsqu'ils sont utilisés avec une "
+"[GIProbe]. Seuls les [SpatialMaterial] peuvent émettre de la lumière qui "
+"sera pris en compte par un [GIProbe]."
#: doc/classes/GIProbe.xml
msgid "GI probes"
-msgstr ""
+msgstr "Les sondes GI"
#: doc/classes/GIProbe.xml
msgid ""
@@ -30440,6 +32598,8 @@ msgid ""
"[i]Deprecated.[/i] This property has been deprecated due to known bugs and "
"no longer has any effect when enabled."
msgstr ""
+"[i]Obsolète.[/i] Cette propriété a été rendue obsolète en raison de bugs "
+"connus et n'a plus d'effet lorsqu'elle est activée."
#: doc/classes/GIProbe.xml
msgid "The [GIProbeData] resource that holds the data for this [GIProbe]."
@@ -30527,6 +32687,10 @@ msgid ""
"loading and saving is [i]not[/i] available in exported projects. References "
"to [GLTFAccessor] within a script will cause an error in an exported project."
msgstr ""
+"[b]Note :[/b] Cette classe n'est compilée que pour les version de l'éditeur. "
+"Le chargement et l'enregistrement au format glTF n'est [i]pas[/i] disponible "
+"dans les projets exportés. Les références à [GLTFAccessor] dans un script "
+"causeront une erreur dans un projet exporté."
#: modules/gltf/doc_classes/GLTFAnimation.xml
msgid ""
@@ -30535,6 +32699,10 @@ msgid ""
"to [GLTFAnimation] within a script will cause an error in an exported "
"project."
msgstr ""
+"[b]Note :[/b] Cette classe n'est compilée que pour les version de l'éditeur. "
+"Le chargement et l'enregistrement au format glTF n'est [i]pas[/i] disponible "
+"dans les projets exportés. Les références à [GLTFAnimation] dans un script "
+"causeront une erreur dans un projet exporté."
#: modules/gltf/doc_classes/GLTFBufferView.xml
msgid ""
@@ -30543,6 +32711,10 @@ msgid ""
"to [GLTFBufferView] within a script will cause an error in an exported "
"project."
msgstr ""
+"[b]Note :[/b] Cette classe n'est compilée que pour les version de l'éditeur. "
+"Le chargement et l'enregistrement au format glTF n'est [i]pas[/i] disponible "
+"dans les projets exportés. Les références à [GLTFBufferView] dans un script "
+"causeront une erreur dans un projet exporté."
#: modules/gltf/doc_classes/GLTFCamera.xml
msgid ""
@@ -30550,6 +32722,10 @@ msgid ""
"loading and saving is [i]not[/i] available in exported projects. References "
"to [GLTFCamera] within a script will cause an error in an exported project."
msgstr ""
+"[b]Note :[/b] Cette classe n'est compilée que pour les version de l'éditeur. "
+"Le chargement et l'enregistrement au format glTF n'est [i]pas[/i] disponible "
+"dans les projets exportés. Les références à [GLTFCamera] dans un script "
+"causeront une erreur dans un projet exporté."
#: modules/gltf/doc_classes/GLTFDocument.xml
msgid ""
@@ -30557,6 +32733,10 @@ msgid ""
"loading and saving is [i]not[/i] available in exported projects. References "
"to [GLTFDocument] within a script will cause an error in an exported project."
msgstr ""
+"[b]Note :[/b] Cette classe n'est compilée que pour les version de l'éditeur. "
+"Le chargement et l'enregistrement au format glTF n'est [i]pas[/i] disponible "
+"dans les projets exportés. Les références à [GLTFDocument] dans un script "
+"causeront une erreur dans un projet exporté."
#: modules/gltf/doc_classes/GLTFLight.xml
msgid ""
@@ -30564,12 +32744,18 @@ msgid ""
"loading and saving is [i]not[/i] available in exported projects. References "
"to [GLTFLight] within a script will cause an error in an exported project."
msgstr ""
+"[b]Note :[/b] Cette classe n'est compilée que pour les version de l'éditeur. "
+"Le chargement et l'enregistrement au format glTF n'est [i]pas[/i] disponible "
+"dans les projets exportés. Les références à [GLTFLight] dans un script "
+"causeront une erreur dans un projet exporté."
#: modules/gltf/doc_classes/GLTFLight.xml
msgid ""
"The [Color] of the light. Defaults to white. A black color causes the light "
"to have no effect."
msgstr ""
+"La [Color] de la lumière. La couleur par défauts est blanc. Une couleur "
+"noire fait que la lumière n'a aucun effet."
#: modules/gltf/doc_classes/GLTFLight.xml
msgid ""
@@ -30580,6 +32766,13 @@ 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 ""
+"L'angle intérieur du cône dans un projecteur. Doit être inférieur ou égal à "
+"l'angle de cône externe.\n"
+"Dans cet angle, la lumière est à pleine luminosité. Entre les angles "
+"intérieur et extérieur de cône, il y a une transition de la luminosité "
+"totale à aucune. Lors de la création d'un [SpotLight], le rapport entre les "
+"angles de cône intérieur et extérieur est utilisé pour calculer "
+"l'atténuation de la lumière."
#: modules/gltf/doc_classes/GLTFLight.xml
msgid ""
@@ -30588,6 +32781,10 @@ msgid ""
"directional lights. When creating a Godot light, this value is converted to "
"a unitless multiplier."
msgstr ""
+"L'intensité de la lumière. Ceci est exprimé en candelas (lumens par "
+"stéradian) pour les lumières en point et les spots, et en lux (lumens par "
+"m²) pour les lumières directionnels. En créant une lumière, cette valeur est "
+"convertie en un multiplicateur sans unité."
#: modules/gltf/doc_classes/GLTFLight.xml
msgid ""
@@ -30606,6 +32803,10 @@ 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 ""
+"La portée de la lumière, au-delà de laquelle la lumière n'a plus aucun "
+"effet. Les feux GLTF sans limite de portée définie se comportent comme des "
+"lumières physiques (qui ont une portée infinie). Lors de la création d'une "
+"lumière Godot, la portée est fixée à 4096 unités."
#: modules/gltf/doc_classes/GLTFLight.xml
msgid ""
@@ -30613,6 +32814,9 @@ msgid ""
"and \"directional\", which correspond to Godot's [OmniLight], [SpotLight], "
"and [DirectionalLight] respectively."
msgstr ""
+"Le type de lumière. Les valeurs acceptées par Godot sont « point », « spot » "
+"et « directionnelle », qui correspondent respectivement au type Godot "
+"[OmniLight], [SpotLight] et [DirectionalLight]."
#: modules/gltf/doc_classes/GLTFMesh.xml
msgid ""
@@ -30620,6 +32824,10 @@ msgid ""
"loading and saving is [i]not[/i] available in exported projects. References "
"to [GLTFMesh] within a script will cause an error in an exported project."
msgstr ""
+"[b]Note :[/b] Cette classe n'est compilée que pour les version de l'éditeur. "
+"Le chargement et l'enregistrement au format glTF n'est [i]pas[/i] disponible "
+"dans les projets exportés. Les références à [GLTFMesh] dans un script "
+"causeront une erreur dans un projet exporté."
#: modules/gltf/doc_classes/GLTFNode.xml
msgid ""
@@ -30627,6 +32835,10 @@ msgid ""
"loading and saving is [i]not[/i] available in exported projects. References "
"to [GLTFNode] within a script will cause an error in an exported project."
msgstr ""
+"[b]Note :[/b] Cette classe n'est compilée que pour les version de l'éditeur. "
+"Le chargement et l'enregistrement au format glTF n'est [i]pas[/i] disponible "
+"dans les projets exportés. Les références à [GLTFNode] dans un script "
+"causeront une erreur dans un projet exporté."
#: modules/gltf/doc_classes/GLTFSkeleton.xml
msgid ""
@@ -30634,6 +32846,10 @@ msgid ""
"loading and saving is [i]not[/i] available in exported projects. References "
"to [GLTFSkeleton] within a script will cause an error in an exported project."
msgstr ""
+"[b]Note :[/b] Cette classe n'est compilée que dans les éditeurs. Le "
+"chargement et l'économie de glTF en cours est [i]not[/i] disponible dans les "
+"projets exportés. Les références à [GLTFSkeleton] dans un script causeront "
+"une erreur dans un projet exporté."
#: modules/gltf/doc_classes/GLTFSpecGloss.xml
msgid ""
@@ -30642,6 +32858,10 @@ msgid ""
"to [GLTFSpecGloss] within a script will cause an error in an exported "
"project."
msgstr ""
+"[b]Note :[/b] Cette classe n'est compilée que dans les éditeurs. Le "
+"chargement et l'économie de glTF en cours est [i]not[/i] disponible dans les "
+"projets exportés. Les références à [GLTFSpecGloss] dans un script causeront "
+"une erreur dans un projet exporté."
#: modules/gltf/doc_classes/GLTFState.xml
msgid ""
@@ -30649,6 +32869,10 @@ msgid ""
"loading and saving is [i]not[/i] available in exported projects. References "
"to [GLTFState] within a script will cause an error in an exported project."
msgstr ""
+"[b]Note :[/b] Cette classe n'est compilée que pour les version de l'éditeur. "
+"Le chargement et l'enregistrement au format glTF n'est [i]pas[/i] disponible "
+"dans les projets exportés. Les références à [GLTFState] dans un script "
+"causeront une erreur dans un projet exporté."
#: modules/gltf/doc_classes/GLTFTexture.xml
msgid ""
@@ -30656,6 +32880,10 @@ msgid ""
"loading and saving is [i]not[/i] available in exported projects. References "
"to [GLTFTexture] within a script will cause an error in an exported project."
msgstr ""
+"[b]Note :[/b] Cette classe n'est compilée que pour les version de l'éditeur. "
+"Le chargement et l'enregistrement au format glTF n'est [i]pas[/i] disponible "
+"dans les projets exportés. Les références à [GLTFTexture] dans un script "
+"causeront une erreur dans un projet exporté."
#: modules/mono/doc_classes/GodotSharp.xml
msgid "Bridge between Godot and the Mono runtime (Mono-enabled builds only)."
@@ -30732,6 +32960,8 @@ msgid ""
"A color interpolator resource which can be used to generate colors between "
"user-defined color points."
msgstr ""
+"Une ressource d'interpolation de couleur qui peut être utilisé pour générer "
+"des couleurs entre des points de couleur définis par l'utilisateur."
#: doc/classes/Gradient.xml
msgid ""
@@ -30741,11 +32971,18 @@ msgid ""
"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 ""
+"À partir d'un ensemble de couleurs, cette ressource les interpolera dans "
+"l'ordre. Cela signifie que si vous avez la couleur 1, la couleur 2 et la "
+"couleur 3, la rampe interpolera de la couleur 1 à la couleur 2 et de la "
+"couleur 2 à la couleur 3. La rampe aura d'abord 2 couleurs (noir et blanc), "
+"la première couleur (le noir) sera utilisé pour les positions inférieurs à 0 "
+"et l'autre (le blanc) pour les positions supérieurs à 1."
#: doc/classes/Gradient.xml
msgid ""
"Adds the specified color to the end of the ramp, with the specified offset."
msgstr ""
+"Ajoute la couleur spécifiée à la fin du dégradé, à la position spécifiée."
#: doc/classes/Gradient.xml
msgid "Returns the color of the ramp color at index [code]point[/code]."
@@ -30788,6 +33025,8 @@ msgid ""
"Defines how the colors between points of the gradient are interpolated. See "
"[enum InterpolationMode] for available modes."
msgstr ""
+"Définit comment les couleurs entre les points du dégradé sont interpolées. "
+"Voir [enum InterpolationMode] pour les modes disponibles."
#: doc/classes/Gradient.xml
msgid "Gradient's offsets returned as a [PoolRealArray]."
@@ -30799,6 +33038,9 @@ msgid ""
"uniform between. This might cause visible aliasing when used for a gradient "
"texture in some cases."
msgstr ""
+"Interpolation constante, la couleur change brusquement à chaque point et "
+"reste uniforme entre. Cela pourrait causer un crénelage visible lorsqu'elle "
+"est utilisée pour une texture de dégradé dans certains cas."
#: doc/classes/GradientTexture.xml
msgid "Gradient-filled texture."
@@ -30810,8 +33052,15 @@ msgid ""
"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])."
+"at fixed steps (see [member width]). See also [GradientTexture2D] and "
+"[CurveTexture]."
msgstr ""
+"GradientTexture utilise un [Gradient] pour remplir la texture. Le gradient "
+"sera rempli de gauche à droite en utilisant les couleurs obtenues du "
+"dégradé. Cela signifie que la texture ne représente pas nécessairement une "
+"copie exacte du dégradé, mais plutôt une interpolation des échantillons "
+"obtenus du dégradé à des étapes fixes (voir [member width)]. Voir aussi "
+"[GradientTexture2D] et [CurveTexture]."
#: doc/classes/GradientTexture.xml
msgid "The [Gradient] that will be used to fill the texture."
@@ -30835,8 +33084,16 @@ msgid ""
"repeat] types using colors obtained from the gradient. 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] and [member height])."
+"[member width] and [member height]). See also [GradientTexture] and "
+"[CurveTexture]."
msgstr ""
+"La texture utilise un [Gradient] pour remplir les données la texture 2D. Le "
+"dégradé est rempli selon les types spécifiés [member fill] et [member "
+"repeat] en utilisant les couleurs obtenues du dégradé. La texture ne "
+"représente pas nécessairement une copie exacte du dégradé, mais plutôt une "
+"interpolation des échantillons obtenus du dégradé à des étapes fixes (voir "
+"[member width] et [member height]). Voir aussi [GradientTexture] et "
+"[CurveTexture]."
#: doc/classes/GradientTexture2D.xml
msgid ""
@@ -30844,6 +33101,9 @@ msgid ""
"by interpolating colors starting from [member fill_from] to [member fill_to] "
"offsets."
msgstr ""
+"Le type de remplissage du dégradé, c'est l'une des valeurs de [enum Fill]. "
+"La texture est remplie par des couleurs interpolées à partir des positions "
+"de [member fill_from] à [member fill_to]."
#: doc/classes/GradientTexture2D.xml
msgid ""
@@ -30876,6 +33136,10 @@ msgid ""
"filled starting from [member fill_from] to [member fill_to] offsets by "
"default, but the gradient fill can be repeated to cover the entire texture."
msgstr ""
+"Le type de répétition du dégradé, c'est l'une des valeurs de [enum Repeat]. "
+"La texture est remplie à partir des positions de [member fill_from] à "
+"[member fill_to] par défaut, mais le remplissage peut être répété pour "
+"couvrir toute la texture."
#: doc/classes/GradientTexture2D.xml
msgid ""
@@ -30885,6 +33149,12 @@ msgid ""
"code], the generated texture will use low dynamic range; overbright colors "
"will be clamped ([constant Image.FORMAT_RGBA8] format)."
msgstr ""
+"Si [code]true[/code], la texture générée aura une gamme dynamique élevée (le "
+"format sera [constant Image.FORMAT_RGBAF]). Cela permet aux effets de lueur "
+"de fonctionner si [member Environment.glow_enabled] est [code]true[/code]. "
+"Si [code]false[/code], la texture générée utilisera une plage dynamique "
+"basse ; les couleurs trop lumineuses seront limitées (le format sera "
+"[constant Image.FORMAT_RGBA8]."
#: doc/classes/GradientTexture2D.xml
msgid ""
@@ -30896,17 +33166,19 @@ msgstr ""
#: doc/classes/GradientTexture2D.xml
msgid "The colors are linearly interpolated in a straight line."
-msgstr ""
+msgstr "Les couleurs sont linéairement interpolées selon une ligne droite."
#: doc/classes/GradientTexture2D.xml
msgid "The colors are linearly interpolated in a circular pattern."
-msgstr ""
+msgstr "Les couleurs sont linéairement interpolées selon un motif circulaire."
#: doc/classes/GradientTexture2D.xml
msgid ""
"The gradient fill is restricted to the range defined by [member fill_from] "
"to [member fill_to] offsets."
msgstr ""
+"Le remplissage du dégradé est limité à la plage définie par les positions de "
+"[member fill_from] à [member fill_to]."
#: doc/classes/GradientTexture2D.xml
msgid ""
@@ -30921,12 +33193,16 @@ msgid ""
"The texture is filled starting from [member fill_from] to [member fill_to] "
"offsets, mirroring the pattern in both directions."
msgstr ""
+"La texture est remplie à partir des positions de [member fill_from] à "
+"[member fill_to], en répétant en miroir le motif dans les deux directions."
#: doc/classes/GraphEdit.xml
msgid ""
"GraphEdit is an area capable of showing various GraphNodes. It manages "
"connection events between them."
msgstr ""
+"GraphEdit est une zone capable de montrer divers GraphNode. Il gère les "
+"événements de connexion entre eux."
#: doc/classes/GraphEdit.xml
msgid ""
@@ -30937,24 +33213,37 @@ msgid ""
"It is greatly advised to enable low-processor usage mode (see [member OS."
"low_processor_usage_mode]) when using GraphEdits."
msgstr ""
+"GraphEdit gère la représentation des GraphNode qu'il contient, ainsi que les "
+"connexions et les déconnections entre eux. Les signaux sont envoyés pour "
+"chacun de ces deux événements. La déconnection entre les emplacements des "
+"GraphNode est désactivé par défaut.\n"
+"Il est fortement conseillé d'activer le mode d'utilisation à faible "
+"processeur (voir [member OS.low_processor_usage_mode)] lors de l'utilisation "
+"des GraphEdit."
#: doc/classes/GraphEdit.xml
msgid ""
"Makes possible the connection between two different slot types. The type is "
"defined with the [method GraphNode.set_slot] method."
msgstr ""
+"Rend possible la connexion entre deux types différents d'emplacements. Le "
+"type est défini avec la méthode [method GraphNode.set_slot]."
#: doc/classes/GraphEdit.xml
msgid ""
"Makes possible to disconnect nodes when dragging from the slot at the left "
"if it has the specified type."
msgstr ""
+"Permet de déconnecter les nœuds en glissant l'emplacement à gauche s'il a le "
+"type spécifié."
#: doc/classes/GraphEdit.xml
msgid ""
"Makes possible to disconnect nodes when dragging from the slot at the right "
"if it has the specified type."
msgstr ""
+"Permet de déconnecter les nœuds en glissant de l'emplacement à droite s'il a "
+"le type spécifié."
#: doc/classes/GraphEdit.xml
msgid "Removes all connections between nodes."
@@ -30978,6 +33267,10 @@ msgid ""
"[code]to[/code] GraphNode. If the connection does not exist, no connection "
"is removed."
msgstr ""
+"Supprimer la connexion entre l'emplacement [code]from_port[/code] du "
+"GraphNode [code]from[/code] et l'emplacement [code]to_port[/code] du "
+"GraphNode [code]to[/code]. Si la connexion n'existe pas, aucune connexion ne "
+"sera supprimée."
#: doc/classes/GraphEdit.xml
msgid ""
@@ -30985,6 +33278,9 @@ msgid ""
"in a structure of the form [code]{ from_port: 0, from: \"GraphNode name 0\", "
"to_port: 1, to: \"GraphNode name 1\" }[/code]."
msgstr ""
+"Retourne un Array contenant la liste des connexions. Une connexion se "
+"compose d'une structure de la forme [code]{ from_port: 0, from: \"GraphNode "
+"name 0\", to_port: 1, to: \"GraphNode name 1\" }[/code]."
#: doc/classes/GraphEdit.xml
msgid ""
@@ -30995,6 +33291,13 @@ msgid ""
"may cause a crash. If you wish to hide it or any of its children, use their "
"[member CanvasItem.visible] property."
msgstr ""
+"Retourne le [HBoxContainer] qui contient les contrôles de zoom et de "
+"magnétisation de la grille en haut à gauche du graphe. Vous pouvez utiliser "
+"cette méthode pour repositionner la barre d'outils ou pour y ajouter vos "
+"propres contrôles personnalisés.\n"
+"[b]Avertissement :[/b] Il s'agit d'un nœud interne requis, l'enlever et le "
+"libérer peut causer un plantage. Si vous voulez le cacher lui ou un de ses "
+"enfants, utilisez plutôt la propriété [membre CanvasItem.visible]."
#: doc/classes/GraphEdit.xml
msgid ""
@@ -31002,28 +33305,38 @@ msgid ""
"[code]from[/code] GraphNode is connected to the [code]to_port[/code] slot of "
"the [code]to[/code] GraphNode."
msgstr ""
+"Retourne [code]true[/code] si l'emplacement [code]from_port[/code] du "
+"GraphNode [code]from[/code] est connecté à l'emplacement [code]to_port[/"
+"code] du GraphNode [code]to[/code]."
#: doc/classes/GraphEdit.xml
msgid "Returns whether it's possible to connect slots of the specified types."
msgstr ""
+"Retourne s'il est possible de connecter les emplacements des types spécifiés."
#: doc/classes/GraphEdit.xml
msgid ""
"Makes it not possible to connect between two different slot types. The type "
"is defined with the [method GraphNode.set_slot] method."
msgstr ""
+"Permet d'empêcher de connecter deux types d'emplacements différents. Le type "
+"est défini avec la méthode [method GraphNode.set_slot]."
#: doc/classes/GraphEdit.xml
msgid ""
"Removes the possibility to disconnect nodes when dragging from the slot at "
"the left if it has the specified type."
msgstr ""
+"Supprime la possibilité de déconnecter les nœuds en glissant l'emplacement "
+"de gauche si elle a le type spécifié."
#: doc/classes/GraphEdit.xml
msgid ""
"Removes the possibility to disconnect nodes when dragging from the slot at "
"the right if it has the specified type."
msgstr ""
+"Supprime la possibilité de déconnecter les nœuds en glissant l'emplacement "
+"de droite si elle a le type spécifié."
#: doc/classes/GraphEdit.xml
msgid ""
@@ -31031,6 +33344,9 @@ msgid ""
"[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 ""
+"Définit la coloration de la connexion entre [code]from[/code] de "
+"[code]from_port[/code] et [code]to[/code]) de [code]to_port[/code] avec la "
+"couleur spécifiée dans la propriété [code]activity[/code] du thème."
#: doc/classes/GraphEdit.xml
msgid "Sets the specified [code]node[/code] as the one selected."
@@ -31050,12 +33366,17 @@ 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 ""
+"La taille du rectangle de la mini-carte. La carte elle-même est basée sur la "
+"taille de la zone de grille et est mise à l'échelle pour s'adapter à ce "
+"rectangle."
#: doc/classes/GraphEdit.xml
msgid ""
"If [code]true[/code], enables disconnection of existing connections in the "
"GraphEdit by dragging the right end."
msgstr ""
+"Si [code]true[/code], permet de déconnecter les connexions existantes dans "
+"le GraphEdit en faisant glisser l'extrémité droite."
#: doc/classes/GraphEdit.xml
msgid "The scroll offset."
@@ -31104,6 +33425,8 @@ msgid ""
"Emitted when user dragging connection from input port into empty space of "
"the graph."
msgstr ""
+"Émis quand l'utilisateur fait glisser la connexion du port d'entrée vers "
+"l'espace vide du graphe."
#: doc/classes/GraphEdit.xml
msgid ""
@@ -31120,6 +33443,8 @@ msgid ""
"Emitted when user dragging connection from output port into empty space of "
"the graph."
msgstr ""
+"Émis lorsque l'utilisateur fait glisser la connexion du port de sortie vers "
+"l'espace vide du graphe."
#: doc/classes/GraphEdit.xml
msgid "Emitted when the user presses [code]Ctrl + C[/code]."
@@ -31138,6 +33463,9 @@ msgid ""
"slot of [code]from[/code] GraphNode and [code]to_slot[/code] slot of "
"[code]to[/code] GraphNode is attempted to be removed."
msgstr ""
+"Émis au GraphEdit lors d'une tentative de supprimer la connexion entre "
+"l'emplacement [code]from_slot[/code] du GraphNode [code]from[/code] et "
+"l'emplacement [code]to_slot[/code] de GraphNode [code]to[/code]."
#: doc/classes/GraphEdit.xml
msgid ""
@@ -31236,6 +33564,24 @@ msgid ""
"are on the right side of GraphNode. Only enabled slots are counted as "
"connections."
msgstr ""
+"Un GraphNode est un conteneur. Chaque GraphNode peut avoir plusieurs "
+"emplacement d'entrée et de sortie, parfois appelé ports, permettant des "
+"connexions entre les GraphNode. Pour ajouter une emplacement à un GraphNode, "
+"ajoutez-lui n'importe quel nœud enfant dérivé de [Control].\n"
+"Après l'ajout d'au moins un enfant au GraphNode, de nouvelles sections "
+"seront automatiquement créées dans l'inspecteur appelé 'Emplacement'. "
+"Lorsque cet 'Emplacement' est agrandi, vous verrez la liste avec l'index "
+"pour chaque emplacement. Vous pouvez cliquer sur chacun d'eux les agrandir "
+"davantage.\n"
+"Dans l'inspecteur, vous pouvez activer (montrer) ou désactiver (cacher) ces "
+"emplacements. Par défaut, toutes les emplacements sont désactivées afin que "
+"vous ne voyez pas d'emplacements sur votre GraphNode au début. Vous pouvez "
+"attribuer un type à chaque emplacement. Seules les emplacements du même type "
+"pourront se connecter. Vous pouvez également attribuer des couleurs aux "
+"emplacements. Une liste des entrées et sorties est défini pour chaque "
+"élément d'interface inclus dans le GraphNode. Les connexions d'entrée sont "
+"sur la gauche et les connexions de sortie sur la droite du GraphNode. Seuls "
+"les emplacements activés sont comptés comme des connexions."
#: doc/classes/GraphNode.xml
msgid "Disables all input and output slots of the GraphNode."
@@ -31331,6 +33677,21 @@ msgid ""
"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 ""
+"Définit les propriétés de l'emplacement avec identifiant [code]idx[/code].\n"
+"Si [code]enable_left[code]/[code]right[/code], un port apparaîtra et "
+"l'emplacement pourra être connectée de ce côté.\n"
+"[code]type_left[code]/[code]right[/code] est un type arbitraire du port. "
+"Seuls les ports avec le même type peuvent être connectés.\n"
+"[code]color_left[code]/[code]right[/code] est la teinte de l'icône du port "
+"de ce côté.\n"
+"[code]custom_left[code]/[code]right[/code] est une texture personnalisée "
+"pour le port de ce côté.\n"
+"[b]Note :[/b] Cette méthode ne définit que les propriétés de l'emplacement. "
+"Pour créer l'emplacement, ajoutez un enfant dérivé de [Control] au "
+"GraphNode.\n"
+"Les propriétés individuelles peuvent être définies en utilisant l'une des "
+"méthodes [code]set_slot_*[/code]. Vous devez activer au moins un côté de "
+"l'emplacement pour le faire."
#: doc/classes/GraphNode.xml
msgid ""
@@ -31354,6 +33715,9 @@ msgid ""
"[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 ""
+"Bascule le côté gauche (entrée) de l'emplacement à l'index [code]idx[/code]. "
+"Si [code]enable_left[/code] est [code]true[/code], un port apparaîtra sur le "
+"côté gauche et l'emplacement pourra être connecté de ce côté."
#: doc/classes/GraphNode.xml
msgid ""
@@ -31361,6 +33725,9 @@ msgid ""
"[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 ""
+"Bascule le côté droit (sortie) de l'emplacement à l'index [code]idx[/code]. "
+"Si [code]enable_right[/code] est [code]true[/code], un port apparaîtra sur "
+"le côté droit et l'emplacement pourra être connecté de ce côté."
#: doc/classes/GraphNode.xml
msgid ""
@@ -31400,6 +33767,9 @@ msgid ""
"[b]Note:[/b] Dragging the handle will only emit the [signal resize_request] "
"signal, the GraphNode needs to be resized manually."
msgstr ""
+"Si [code]true[/code], l'utilisateur peut redimensionner le GraphNode.\n"
+"[b]Note :[/b] Faire glisser la poignée n'émettra que le signal [signal "
+"resize_request], le GraphNode doit être redimensionné manuellement."
#: doc/classes/GraphNode.xml
msgid "If [code]true[/code], the GraphNode is selected."
@@ -31411,6 +33781,9 @@ msgid ""
"[b]Note:[/b] Pressing it will only emit the [signal close_request] signal, "
"the GraphNode needs to be removed manually."
msgstr ""
+"Si [code]true[/code], le bouton de fermeture sera visible.\n"
+"[b]Note :[/b] Appuyer ce bouton n'émettra que le signal [signal "
+"close_request], le GraphNode doit être retiré manuellement."
#: doc/classes/GraphNode.xml
msgid "The text displayed in the GraphNode's title bar."
@@ -31561,12 +33934,25 @@ msgid ""
"[b]Note:[/b] GridContainer only works with child nodes inheriting from "
"Control. It won't rearrange child nodes inheriting from Node2D."
msgstr ""
+"GridContainer arrangera ses enfants du type Control dans une structure en "
+"grille, les colonnes de la grille sont spécifiées en utilisant la propriété "
+"[member columns] et le nombre de lignes sera égal au nombre d'enfants dans "
+"le conteneur divisé par le nombre de colonnes. Par exemple, si le conteneur "
+"a 5 enfants et 2 colonnes, il y aura 3 rangées dans le conteneur.\n"
+"Notez que la mise en page des grilles conservera les colonnes et les rangées "
+"pour chaque taille du conteneur, et que les colonnes vides seront étendues "
+"automatiquement.\n"
+"[b]Note :[/b] GridContainer ne fonctionne que avec des nœuds d'enfants "
+"héritant de Control. Par exemple, elle ne réarrangera pas les nœuds enfants "
+"héritant de Node2D."
#: doc/classes/GridContainer.xml
msgid ""
"The number of columns in the [GridContainer]. If modified, [GridContainer] "
"reorders its Control-derived children to accommodate the new layout."
msgstr ""
+"Le nombre de colonnes dans le [GridContainer]. Si modifié, [GridContainer] "
+"réarrangera à ses enfants de type Control suivant la nouvelle mise en page."
#: doc/classes/GridContainer.xml doc/classes/HFlowContainer.xml
#: doc/classes/VFlowContainer.xml
@@ -31599,6 +33985,22 @@ msgid ""
"light not affect the first layer, the whole GridMap won't be lit by the "
"light in question."
msgstr ""
+"GridMap vous permet de placer de manière interactive des maillages sur une "
+"grille. Il fonctionne à la fois à partir de l'éditeur et des scripts, et "
+"vous pouvez vous en servir pour créer des éditeurs de niveau dans un jeu.\n"
+"GridMaps utilise une [MeshLibrary] qui contient une liste de tuiles. Chaque "
+"tuile est un maillage avec des matériaux, en plus de formes de collision et "
+"de navigation en option.\n"
+"Un GridMap contient une collection de cellules. Chaque cellule de grille se "
+"réfère à une tuile dans le [MeshLibrary]. Toutes les cellules de la carte "
+"ont les mêmes dimensions.\n"
+"En interne, un GridMap est divisé par des d'octants séparés pour améliorer "
+"le rendu et le traitement physique. Chaque octant a les mêmes dimensions et "
+"peut contenir plusieurs cellules.\n"
+"[b]Note :[/b] GridMap ne s'étend pas [VisualInstance] et donc de ne pas être "
+"cachés ou masqués à partir de [member VisualInstance.layers]. Si vous "
+"ajoutez une lumière qui n'affecte pas le premier calque, aucune partie de "
+"l'ensemble du GridMap ne sera éclairé par cette lumière."
#: modules/gridmap/doc_classes/GridMap.xml
msgid "Using gridmaps"
@@ -31626,6 +34028,8 @@ msgid ""
"The orientation of the cell at the grid-based X, Y and Z coordinates. -1 is "
"returned if the cell is empty."
msgstr ""
+"L'orientation de la cellule aux coordonnées X, Y et Z. -1 est retourné si la "
+"cellule est vide."
#: modules/gridmap/doc_classes/GridMap.xml
msgid "Returns an individual bit on the [member collision_layer]."
@@ -31675,6 +34079,11 @@ msgid ""
"Optionally, the item's orientation can be passed. For valid orientation "
"values, see [method Basis.get_orthogonal_index]."
msgstr ""
+"Définit l'indice de maillage de la cellule pour ces coordonnées X, Y et Z de "
+"la grille.\n"
+"Un index négatif comme [constant INVALID_CELL_ITEM] effacera la cellule.\n"
+"En option, l'orientation de l'objet peut être spécifiée. Pour les valeurs "
+"d'orientation valides, voir [method Basis.get_orthogonal_index]."
#: modules/gridmap/doc_classes/GridMap.xml
msgid "Sets an individual bit on the [member collision_layer]."
@@ -31691,6 +34100,15 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+#, fuzzy
+msgid ""
+"If [code]true[/code], this GridMap uses cell navmesh resources to create "
+"navigation regions."
+msgstr ""
+"Si [code]true[/code], met à jour les animations en réponse aux notifications "
+"liées au processus."
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid "If [code]true[/code], grid items are centered on the X axis."
msgstr ""
"Si [code]true[/code], les éléments de la grille sont centrés sur l'axe X."
@@ -31710,6 +34128,8 @@ msgid ""
"The size of each octant measured in number of cells. This applies to all "
"three axis."
msgstr ""
+"La taille de chaque octant mesurée en nombre de cellules. Ceci s'applique "
+"aux trois axes."
#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
@@ -31746,6 +34166,10 @@ msgid "The assigned [MeshLibrary]."
msgstr "La [MeshLibrary] assignée."
#: modules/gridmap/doc_classes/GridMap.xml
+msgid "The navigation layers the GridMap generates its navigation regions in."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
"Overrides the default friction and bounce physics properties for the whole "
"[GridMap]."
@@ -32136,6 +34560,10 @@ msgid ""
"[method finish] is called to append [code]data[/code] to the message, but "
"cannot be called until [method start] has been called."
msgstr ""
+"Met à jour le message pour être un HMAC. Ceci peut être appelé plusieurs "
+"fois avant que [method finish] soit appelé pour ajouter les données "
+"[code]data[/code] au message, mais ne peut être appelé avant que [method "
+"start] ne soit appelé."
#: doc/classes/HScrollBar.xml
msgid "Horizontal scroll bar."
@@ -32153,6 +34581,9 @@ msgid ""
"Icon used as a button to scroll the [ScrollBar] left. Supports custom step "
"using the [member ScrollBar.custom_step] property."
msgstr ""
+"L'icône utilisée comme bouton pour défiler la [ScrollBar] de gauche. "
+"Supporte une valeur de déplacement personnalisé en utilisant la propriété "
+"[member ScrollBar.custom_step]."
#: doc/classes/HScrollBar.xml doc/classes/VScrollBar.xml
msgid "Displayed when the mouse cursor hovers over the decrement button."
@@ -32256,13 +34687,15 @@ msgstr ""
#: doc/classes/HSlider.xml
msgid "The background of the area to the left of the grabber."
-msgstr ""
+msgstr "L'arrière-plan de la zone à gauche du glisseur."
#: doc/classes/HSlider.xml
msgid ""
"The background for the whole slider. Determines the height of the "
"[code]grabber_area[/code]."
msgstr ""
+"L'arrière-plan pour tout le curseur. Détermine la hauteur de "
+"[code]grabber_area[/code]."
#: doc/classes/HSplitContainer.xml
msgid "Horizontal split container."
@@ -32272,7 +34705,7 @@ msgstr "Conteneur fractionné horizontal."
msgid ""
"Horizontal split container. See [SplitContainer]. This goes from left to "
"right."
-msgstr ""
+msgstr "Conteneur horizontal. Voir [SplitContainer]. Va de gauche à droite."
#: doc/classes/HSplitContainer.xml doc/classes/VSplitContainer.xml
msgid ""
@@ -32290,7 +34723,7 @@ msgstr "L'espace entre les côtés des conteneurs."
#: doc/classes/HSplitContainer.xml doc/classes/VSplitContainer.xml
msgid "The icon used for the grabber drawn in the middle area."
-msgstr ""
+msgstr "L'icône utilisée pour le glisseur affiché au milieu."
#: doc/classes/HTTPClient.xml
msgid "Low-level hyper-text transfer protocol client."
@@ -32330,6 +34763,42 @@ msgid ""
"are otherwise valid. If this is a concern, you may want to use automatically "
"managed certificates with a short validity period."
msgstr ""
+"Client de protocole de transfert hypertexte (parfois appelé \"User Agent\"). "
+"Utilisé pour faire des requêtes HTTP pour télécharger du contenu web, des "
+"fichiers et d'autres données ou communiquer avec divers services, ou pour "
+"d'autres cas d'utilisation. [b]Voir le nœud [HTTPRequest] pour une "
+"alternative de haut-niveau[/b].\n"
+"[b]Note :[/b] Ce client doit seulement se connecter à un hôte une fois (voir "
+"[method connect_to_host)] pour envoyer plusieurs requêtes. En raison de "
+"cela, les méthodes qui prennent des URL prennent généralement juste la "
+"partie après l'hôte au lieu de l'URL complète, puisque le client est déjà "
+"connecté à l'hôte. Voir [method request] pour un exemple complet pour "
+"pouvoir démarrer.\n"
+"Un [HTTPClient] devrait être réutilisé entre plusieurs requêtes ou pour se "
+"connecter à différents hôtes au lieu de créer un client par requête. "
+"Supporte les serveurs SSL et la vérification des certificats des serveurs "
+"SSL. Les codes de statut HTTP de la gamme 2xx indiquent un succès, 3xx une "
+"redirection (c.-à-d. \"essayez à nouveau, mais ici\"), 4xx que quelque chose "
+"ne va pas avec la requête, et 5xx qu'un problème est survenu du côté du "
+"serveur.\n"
+"Pour plus d'informations sur HTTP, voir [url=https://developer.mozilla.org/"
+"en-US/docs/Web/HTTP] (ou lire le RFC 2616 pour le lire directement depuis la "
+"soruce : [url=https://tools.ietf.org/html/rfc2616])\n"
+"[b]Note :[/b] Lorsque vous effectuez des requêtes HTTP d'un projet exporté "
+"vers HTML5, gardez à l'esprit que le serveur distant peut ne pas autoriser "
+"des requêtes d'origine étrangère en raison de [url=https://developer.mozilla."
+"org/en-US/docs/Web/HTTP/CORS]CORS[/url]. Si vous hébergez le serveur en "
+"question, vous devez modifier son implémentation pour permettre des requêtes "
+"d'origine étrangère en ajoutant l'en-tête HTTP [code]Access-Control-Allow-"
+"Origin: *[/code].\n"
+"[b]Note :[/b] Le support SSL/TLS est actuellement limité à TLS 1.0, TLS 1.1 "
+"et TLS 1.2. Tenter de se connecter à un serveur TLS 1.3 retournera une "
+"erreur.\n"
+"[b]Avertissement :[/b] La révocation du certificat SSL/TLS et le pinning de "
+"certificat ne sont pas supportés. Les certificats révoqués sont acceptés "
+"aussi longtemps qu'ils sont valides. Si c'est un problème, vous pouvez "
+"utiliser des certificats gérés automatiquement avec une courte période de "
+"validité."
#: doc/classes/HTTPClient.xml
msgid "Closes the current connection, allowing reuse of this [HTTPClient]."
@@ -32348,6 +34817,14 @@ msgid ""
"[code]verify_host[/code] will check the SSL identity of the host if set to "
"[code]true[/code]."
msgstr ""
+"Se connecte à un hôte. C'est nécessaire avant toute requête.\n"
+"L'hôte ne doit pas avoir \"http://\" d'ajouté au début, mais ignorera "
+"l'identifiant du protocole si fourni.\n"
+"Si aucun [code]port[/code] n'est spécifié (ou [code]-1[/code] est utilisé), "
+"il est automatiquement défini à 80 pour HTTP et 443 pour HTTPS (dans le cas "
+"où [code]use_ssl[/code] est activé).\n"
+"[code]verify_host[/code] vérifie l'identité SSL de l'hôte si elle est "
+"définie à [code]true[/code]."
#: doc/classes/HTTPClient.xml
msgid ""
@@ -32356,6 +34833,11 @@ msgid ""
"value returned will be [code]-1[/code]. If using chunked transfer encoding, "
"the body length will also be [code]-1[/code]."
msgstr ""
+"Retourne la longueur du corps de la requête.\n"
+"[b]Note :[/b] Certains serveurs web peuvent ne pas envoyer de longueur du "
+"corps. Dans ce cas, la valeur retournée sera [code]-1[/code]. Si vous "
+"utilisez l'encodage de transfert par morceau, la longueur du corps sera "
+"également [code]-1[/code]."
#: doc/classes/HTTPClient.xml
msgid "Returns the response's HTTP status code."
@@ -32415,6 +34897,8 @@ msgid ""
"This needs to be called in order to have any request processed. Check "
"results with [method get_status]."
msgstr ""
+"Cela doit être appelé pour que les requêtes puissent être traitée. Vérifiez "
+"les résultats avec [method get_status]."
#: doc/classes/HTTPClient.xml
msgid ""
@@ -32523,6 +35007,18 @@ msgid ""
"Method].\n"
"Sends the body data raw, as a byte array and does not encode it in any way."
msgstr ""
+"Envoyez une requête brute à l'hôte connecté.\n"
+"Le paramètre URL est généralement juste la partie après le nom de l'hôte, "
+"donc pour [code]http://somehost.com/index.php[/code], c'est [code]/index."
+"php[/code]. Lors de l'envoi de requêtes vers un serveur de proxy HTTP, ça "
+"doit être une URL absolue. Pour [constant HTTPClient.METHOD_OPTIONS] "
+"requêtes, [code]*[/code] est également autorisé. Pour [constant HTTPClient."
+"METHOD_CONNECT] demande, ça doit être le composant d'autorité ([code]host:"
+"port[/code]).\n"
+"Les en-têtes sont des en-têtes de requête HTTP. Pour les méthodes HTTP "
+"disponibles, voir [enum Method].\n"
+"Envoie les données de corps brutes, comme un tableau d'octet et ne l'encode "
+"pas."
#: doc/classes/HTTPClient.xml doc/classes/HTTPRequest.xml
msgid ""
@@ -32579,6 +35075,10 @@ msgid ""
"GET request, but without the response body. This is useful to request "
"metadata like HTTP headers or to check if a resource exists."
msgstr ""
+"La méthode HTTP \"HEAD\". La méthode \"HEAD\" demande une réponse identique "
+"à celle d'une requête \"GET\", mais sans le corps de la réponse. Ceci est "
+"utile pour demander des métadonnées comme des en-têtes HTTP ou pour vérifier "
+"si une ressource existe."
#: doc/classes/HTTPClient.xml
msgid ""
@@ -32586,6 +35086,10 @@ msgid ""
"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 ""
+"La méthode HTTP \"POST\". La méthode \"POST\" est utilisée pour soumettre "
+"une entité à la ressource spécifiée, causant souvent un changement d'état "
+"sur le serveur. Ceci est souvent utilisé pour les formulaires, pour "
+"soumettre des données ou télécharger des fichiers."
#: doc/classes/HTTPClient.xml
msgid ""
@@ -32594,6 +35098,11 @@ msgid ""
"\"create or update\" and PUT as \"update\", although many services tend to "
"not make a clear distinction or change their meaning)."
msgstr ""
+"La méthode HTTP \"PUT\". La méthode \"PUT\" demander à remplacer toutes les "
+"représentations actuelles de la ressource cible par les données fournies. "
+"(Vous pouvez considérer \"POST\" comme une méthode pour \"créer ou mettre à "
+"jour\" et \"PUT\" comme \"mise à jour\", même que de nombreux services ne "
+"font pas de distinction voire en change leur sens)."
#: doc/classes/HTTPClient.xml
msgid ""
@@ -32608,6 +35117,9 @@ msgid ""
"HTTP OPTIONS method. The OPTIONS method asks for a description of the "
"communication options for the target resource. Rarely used."
msgstr ""
+"La méthode HTTP \"OPTIONS\". La méthode \"OPTIONS\" demande une description "
+"des options de communication pour la ressource cible. Elle est rarement "
+"utilisée."
#: doc/classes/HTTPClient.xml
msgid ""
@@ -32615,18 +35127,25 @@ msgid ""
"the path to the target resource. Returns the entire HTTP request received in "
"the response body. Rarely used."
msgstr ""
+"La méthode HTTP \"TRACE\". La méthode \"TRACE\" effectue un test de boucle "
+"de message suivant le chemin vers la ressource cible. Retourne toute la "
+"requête \"HTTP\" reçue dans le corps de réponse. Elle est rarement utilisée."
#: doc/classes/HTTPClient.xml
msgid ""
"HTTP CONNECT method. The CONNECT method establishes a tunnel to the server "
"identified by the target resource. Rarely used."
msgstr ""
+"La méthode HTTP \"CONNECT\". La méthode \"CONNECT\" établit un tunnel vers "
+"serveur identifié par la ressource cible. Elle est rarement utilisée."
#: doc/classes/HTTPClient.xml
msgid ""
"HTTP PATCH method. The PATCH method is used to apply partial modifications "
"to a resource."
msgstr ""
+"La méthode HTTP \"PATCH\". La méthode \"PATCH\" est utilisée pour appliquer "
+"des modifications partielles à une ressource."
#: doc/classes/HTTPClient.xml
msgid "Represents the size of the [enum Method] enum."
@@ -32645,6 +35164,7 @@ msgstr ""
#: doc/classes/HTTPClient.xml
msgid "Status: DNS failure: Can't resolve the hostname for the given URL."
msgstr ""
+"Statut: Échec du DNS : N'a pu résoudre le nom d'hôte pour l'URL spécifiée."
#: doc/classes/HTTPClient.xml
msgid "Status: Currently connecting to server."
@@ -32680,6 +35200,9 @@ msgid ""
"everything so far is OK and that the client should continue with the request "
"(or ignore this status if already finished)."
msgstr ""
+"Le code d'état HTTP [code]100 Continue[/code]. La réponse intermédiaire qui "
+"indique que tout est bon jusqu'à présent et que le client devrait continuer "
+"avec cette demande (ou ignorer ce statut s'il a déjà terminé)."
#: doc/classes/HTTPClient.xml
msgid ""
@@ -32687,6 +35210,9 @@ msgid ""
"[code]Upgrade[/code] request header by the client. Indicates the protocol "
"the server is switching to."
msgstr ""
+"Le code d'état HTTP [code]101 Switching Protocol[/code]. Envoyé en réponse à "
+"une en-tête de requête [code]Upgrade[/code] du client. Précise le nouveau "
+"protocole que le serveur utilise dès à présent."
#: doc/classes/HTTPClient.xml
msgid ""
@@ -32708,6 +35234,13 @@ msgid ""
"TRACE: The message body contains the request message as received by the "
"server."
msgstr ""
+"Le code d'état HTTP [code]200 OK[/code]. La requête a réussi. C'est la "
+"réponse par défaut pour les requêtes réussies. La signification varie selon "
+"la requête. Pour \"GET\" : La ressource a été récupérée et est transmise "
+"dans le corps du message. Pour \"HEAD\" : Les en-têtes de l'entité sont dans "
+"le corps du message. Pour \"POST\" : La ressource décrivant le résultat de "
+"l'action est transmise dans le corps du message. Pour \"TRACE\" : Le corps "
+"du message contient le message de requête reçu par le serveur."
#: doc/classes/HTTPClient.xml
msgid ""
@@ -32715,6 +35248,9 @@ msgid ""
"new resource has been created as a result of it. This is typically the "
"response sent after a PUT request."
msgstr ""
+"Le code d'état HTTP [code]201 Created[/code]. La requête a réussi et une "
+"nouvelle ressource a été créée en conséquence. C'est généralement la réponse "
+"envoyée après une requête \"PUT\"."
#: doc/classes/HTTPClient.xml
msgid ""
@@ -32724,6 +35260,11 @@ msgid ""
"processing the request. It is intended for cases where another process or "
"server handles the request, or for batch processing."
msgstr ""
+"Le code d'état HTTP [code]202 Accepted[/code]. La requête a été reçue mais "
+"n'a pas encore été traitée. Aucune réponse n'est envoyé même asynchrone "
+"indiquant le résultat du traitement de cette requête. Il est destiné aux cas "
+"où un autre processus ou un serveur traite la requête, ou pour le traitement "
+"par lots."
#: doc/classes/HTTPClient.xml
msgid ""
@@ -32733,6 +35274,11 @@ msgid ""
"party copy. Except this condition, 200 OK response should be preferred "
"instead of this response."
msgstr ""
+"Le code d'état HTTP [code]203 Non-Authoritative Information[/code]. Ce code "
+"de réponse signifie que l'ensemble de méta-donnée retournée n'est pas la "
+"copie exacte de celles sur le serveur d'origine, mais composée à partir "
+"d'une copie locale ou autre. Sauf dans ce cas, la réponse 200 \"OK\" est "
+"préférable à la place de cette réponse."
#: doc/classes/HTTPClient.xml
msgid ""
@@ -32740,6 +35286,10 @@ msgid ""
"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 ""
+"Le code d'état HTTP [code]204 No Content[/code]. Il n'y a pas de contenu à "
+"retourner en réponse à cette requête, mais les en-têtes peuvent contenir des "
+"informations. Le user-agent peut mettre à jour les en-têtes de cette "
+"ressource qu'il a en cache avec ces nouvelles données."
#: doc/classes/HTTPClient.xml
msgid ""
@@ -32748,6 +35298,10 @@ msgid ""
"caused the request to be sent to its original state as received from the "
"origin server."
msgstr ""
+"Le code d'état HTTP [code]205 Reset Content[/code]. Le serveur a rempli la "
+"requête et souhaite que le client réinitialise son « vue de document » qui a "
+"envoyé la requête à son état original tel qu'il a été reçu du serveur "
+"d'origine."
#: doc/classes/HTTPClient.xml
msgid ""
@@ -32755,6 +35309,9 @@ msgid ""
"used because of a range header sent by the client to separate download into "
"multiple streams."
msgstr ""
+"Le code d'état HTTP [code]206 Partial Content[/code]. Ce code de réponse est "
+"utilisé suivant l'intervalle spécifié dans l'en-tête envoyé par le client "
+"pour que le téléchargement soit disponible dans plusieurs flux."
#: doc/classes/HTTPClient.xml
msgid ""
@@ -32762,6 +35319,9 @@ msgid ""
"response conveys information about multiple resources in situations where "
"multiple status codes might be appropriate."
msgstr ""
+"Le code d'état HTTP [code]207 Multi-Status[/code] (WebDAV). Une réponse "
+"multi-états qui transmet des informations sur plusieurs ressources dans des "
+"situations où plusieurs codes de statut seraient appropriés."
#: doc/classes/HTTPClient.xml
msgid ""
@@ -32769,6 +35329,10 @@ msgid ""
"DAV: propstat response element to avoid enumerating the internal members of "
"multiple bindings to the same collection repeatedly."
msgstr ""
+"Le code d'état HTTP [code]208 Already Reported[/code] (WebDAV). Utilisé à "
+"l'intérieur d'un DAV : l'élément de réponse \"propstat\" pour éviter "
+"d'énumérer plusieurs fois les membres internes de liaisons d'une même "
+"collection."
#: doc/classes/HTTPClient.xml
msgid ""
@@ -32776,6 +35340,10 @@ msgid ""
"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 ""
+"Le code d'état HTTP [code]226 IM Used[/code] (WebDAV). Le serveur a traité "
+"une requête GET pour cette ressource, et la réponse est une représentation "
+"du résultat d'une ou plusieurs manipulations d'instance appliquées à "
+"l'instance actuelle."
#: doc/classes/HTTPClient.xml
msgid ""
@@ -32783,6 +35351,10 @@ msgid ""
"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 ""
+"Le code d'état HTTP [code]300 Multiple Choice[/code]. La requête a plusieurs "
+"réponses possibles et il n'y a pas de moyen spécifique de choisir la bonne "
+"réponse. C'est alors le user-agent ou l'utilisateur qui devrait la choisir "
+"parmi celle retournées."
#: doc/classes/HTTPClient.xml
msgid ""
@@ -32790,6 +35362,9 @@ msgid ""
"response code means the URI of requested resource has been changed. The new "
"URI is usually included in the response."
msgstr ""
+"Le code d'état HTTP [code]301 Moved Permanently[/code]. Redirection. Ce code "
+"de réponse signifie que l'URI des ressources demandées a été modifiée. La "
+"nouvelle URI est généralement retournée dans cette réponse."
#: doc/classes/HTTPClient.xml
msgid ""
@@ -33136,6 +35711,7 @@ msgid "A node with the ability to send HTTP(S) requests."
msgstr "Un nœud qui permet d'envoyer des requêtes HTTP(S)."
#: doc/classes/HTTPRequest.xml
+#, fuzzy
msgid ""
"A node with the ability to send HTTP requests. Uses [HTTPClient] "
"internally.\n"
@@ -33162,7 +35738,7 @@ msgid ""
" # 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 body = to_json({\"name\": \"Godette\"})\n"
" error = http_request.request(\"https://httpbin.org/post\", [], true, "
"HTTPClient.METHOD_POST, body)\n"
" if error != OK:\n"
@@ -34536,7 +37112,7 @@ msgstr ""
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 "
+"([member 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 "
@@ -34693,11 +37269,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Returns the mouse mode. See the constants for more information."
-msgstr ""
-"Retourne le mode de la souris. Voir les constantes pour plus d'informations."
-
-#: doc/classes/Input.xml
msgid ""
"Gets an input vector by specifying four actions for the positive and "
"negative X and Y axes.\n"
@@ -34893,25 +37464,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Sets the mouse mode. See the constants for more information."
-msgstr ""
-"Définit le mode de la souris. Voir les constantes pour plus d'informations."
-
-#: doc/classes/Input.xml
-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
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 "
@@ -34947,6 +37499,26 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
+#, fuzzy
+msgid "Controls the mouse mode. See [enum MouseMode] for more information."
+msgstr ""
+"Définit le mode de la souris. Voir les constantes pour plus d'informations."
+
+#: doc/classes/Input.xml
+msgid ""
+"If [code]true[/code], similar input events sent by the operating system are "
+"accumulated. 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 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
msgid "Emitted when a joypad device has been connected or disconnected."
msgstr "Émis quand un contrôleur a été connecté ou déconnecté."
@@ -35299,8 +37871,8 @@ msgstr ""
#: doc/classes/InputEventJoypadButton.xml
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]."
+"Represents the pressure the user puts on the button with their finger, if "
+"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]."
msgstr ""
#: doc/classes/InputEventJoypadMotion.xml
@@ -35584,9 +38156,9 @@ 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 "
+"at most. If you need more precise input reporting, set [member Input."
+"use_accumulated_input] to [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."
@@ -36126,7 +38698,18 @@ msgid ""
"[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."
+"fixed_column_width] greater than zero to wrap the text.\n"
+"[b]Incremental search:[/b] Like [PopupMenu] and [Tree], [ItemList] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/ItemList.xml
@@ -38128,7 +40711,7 @@ msgstr ""
#: doc/classes/Light.xml
msgid "The light will affect objects in the selected layers."
-msgstr "La lumière affectera les objets dans les claques sélectionnés."
+msgstr "La lumière affectera les objets dans les calques sélectionnés."
#: doc/classes/Light.xml
msgid ""
@@ -40391,12 +42974,17 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-#, fuzzy
-msgid "Returns the [Material] for a surface of the [Mesh] resource."
-msgstr "Retourne le matériel affecté à la [ImmediateGeometry3D]."
+msgid ""
+"Returns the override [Material] for a surface of the [Mesh] resource.\n"
+"[b]Note:[/b] This function only returns [i]override[/i] materials associated "
+"with this [MeshInstance]. Consider using [method get_active_material] or "
+"[method Mesh.surface_get_material] to get materials associated with the "
+"[Mesh] resource."
+msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the number of surface materials."
+#, fuzzy
+msgid "Returns the number of surface override materials."
msgstr "Retourne le nombre de surfaces du matériau."
#: doc/classes/MeshInstance.xml
@@ -40433,7 +43021,10 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Sets the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Sets the override [Material] for the specified surface of the [Mesh] "
+"resource. This material is associated with this [MeshInstance] rather than "
+"with the [Mesh] resource."
msgstr ""
#: doc/classes/MeshInstance.xml
@@ -40464,9 +43055,10 @@ msgstr "Un nœud utilisé pour afficher des [Mesh] en 2D."
#: doc/classes/MeshInstance2D.xml
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\"."
+"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be "
+"automatically created from an existing [Sprite] via a tool in the editor "
+"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to "
+"MeshInstance2D[/b] at the top of the 2D editor viewport."
msgstr ""
#: doc/classes/MeshInstance2D.xml
@@ -41270,6 +43862,9 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"Provides navigation and pathfinding within a collection of "
"[NavigationMesh]es. By default, these will be automatically collected from "
"child [NavigationMeshInstance] nodes. In addition to basic pathfinding, this "
@@ -41310,7 +43905,15 @@ msgid ""
msgstr ""
#: doc/classes/Navigation.xml
+#, fuzzy
+msgid "Returns the [RID] of the navigation map on the [NavigationServer]."
+msgstr "Retourne le [RID] de la énième forme d'une zone."
+
+#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"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, "
@@ -41332,16 +43935,31 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation.get_simple_path] path query."
+msgstr ""
+
+#: doc/classes/Navigation.xml
+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/Navigation.xml doc/classes/Navigation2DServer.xml
+#: doc/classes/NavigationServer.xml
+msgid ""
+"Emitted when a navigation map is updated, when a region moves or is modified."
+msgstr ""
+
#: doc/classes/Navigation2D.xml
msgid "2D navigation and pathfinding node."
msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -41361,6 +43979,9 @@ msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -41370,6 +43991,12 @@ msgstr ""
msgid "The XY plane cell size to use for fields."
msgstr ""
+#: doc/classes/Navigation2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation2D.get_simple_path] path query."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml
#, fuzzy
msgid "Server interface for low-level 2D navigation access."
@@ -41388,8 +44015,12 @@ msgid ""
"through scripts.\n"
"For two regions to be connected to each other, they must share a similar "
"edge. An edge is considered connected to another if both of its two vertices "
-"are at a distance less than [member Navigation.edge_connection_margin] to "
-"the respective other edge's vertex.\n"
+"are at a distance less than navigation map [code]edge_connection_margin[/"
+"code] to the respective other edge's vertex.\n"
+"You may assign navigation layers to regions with [method Navigation2DServer."
+"region_set_navigation_layers], which then can be checked upon when "
+"requesting a path with [method Navigation2DServer.map_get_path]. This allows "
+"allowing or forbidding some areas to 2D objects.\n"
"To use the collision avoidance system, you may use agents. You can set an "
"agent's target velocity, then the servers will emit a callback with a "
"modified velocity.\n"
@@ -41438,7 +44069,17 @@ msgid "Returns [code]true[/code] if the map got changed the previous frame."
msgstr "Renvoie [code]true[/code] si le chemin donné est filtré."
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Callback called at the end of the RVO process."
+msgid ""
+"Callback called at the end of the RVO process. If a callback is created "
+"manually and the agent is placed on a navigation map it will calculate "
+"avoidance for the agent and dispatch the calculated [code]safe_velocity[/"
+"code] to the [code]receiver[/code] object with a signal to the chosen "
+"[code]method[/code] name.\n"
+"[b]Note:[/b] Created callbacks are always processed independently of the "
+"SceneTree state as long as the agent is on a navigation map and not freed. "
+"To disable the dispatch of a callback from an agent use [method "
+"agent_set_callback] again with a [code]null[/code] object as the "
+"[code]receiver[/code]."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -41496,15 +44137,58 @@ msgid "Destroys the given RID."
msgstr "Supprimer le RID renseigné."
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns all created navigation map [RID]s on the NavigationServer. This "
+"returns both 2D and 3D created navigation maps as there is technically no "
+"distinction between them."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Create a new map."
msgstr "Crée une nouvelle carte."
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"This function immediately forces synchronization of the specified navigation "
+"[code]map[/code] [RID]. By default navigation maps are only synchronized at "
+"the end of each physics frame. This function can be used to immediately "
+"(re)calculate all the navigation meshes and region connections of the "
+"navigation map. This makes it possible to query a navigation path for a "
+"changed map immediately and in the same frame (multiple times if needed).\n"
+"Due to technical restrictions the current NavigationServer command queue "
+"will be flushed. This means all already queued update commands for this "
+"physics frame will be executed, even those intended for other maps, regions "
+"and agents not part of the specified map. The expensive computation of the "
+"navigation meshes and region connections of a map will only be done for the "
+"specified map. Other maps will receive the normal synchronization at the end "
+"of the physics frame. Should the specified map receive changes after the "
+"forced update it will update again as well when the other maps receive their "
+"update.\n"
+"Avoidance processing and dispatch of the [code]safe_velocity[/code] signals "
+"is untouched by this function and continues to happen for all maps and "
+"agents at the end of the physics frame.\n"
+"[b]Note:[/b] With great power comes great responsibility. This function "
+"should only be used by users that really know what they are doing and have a "
+"good reason for it. Forcing an immediate update of a navigation map requires "
+"locking the NavigationServer and flushing the entire NavigationServer "
+"command queue. Not only can this severely impact the performance of a game "
+"but it can also introduce bugs if used inappropriately without much "
+"foresight."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns all navigation agents [RID]s that are currently assigned to the "
"requested navigation [code]map[/code]."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+#, fuzzy
+msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented."
+msgstr ""
+"Retourne l'actuelle ligne du fichier interprété (actuellement non "
+"implémenté)."
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Returns the map cell size."
msgstr "Retourne la taille des cellules de la carte."
@@ -41530,9 +44214,11 @@ msgid ""
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-#, fuzzy
-msgid "Returns the navigation path to reach the destination from the origin."
-msgstr "Renvoie le traqueur de position à l'identification donnée."
+msgid ""
+"Returns the navigation path to reach the destination from the origin. "
+"[code]navigation_layers[/code] is a bitmask of all region layers that are "
+"allowed to be in the path."
+msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
@@ -41549,6 +44235,13 @@ msgstr "Retourne [code]true[/code] si l'[AABB] est vide."
msgid "Sets the map active."
msgstr "Définit la carte comme active."
+#: doc/classes/Navigation2DServer.xml
+#, fuzzy
+msgid ""
+"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/"
+"b] Currently not implemented."
+msgstr "Définit le polygone de navigation de la tuile."
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
#, fuzzy
msgid "Set the map cell size used to weld the navigation mesh polygons."
@@ -41565,15 +44258,80 @@ msgstr "Crée une nouvelle région."
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"Returns the ending point of a connection door. [code]connection[/code] is an "
+"index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns the starting point of a connection door. [code]connection[/code] is "
+"an index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns how many connections this [code]region[/code] has with other regions "
+"in the map."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]."
+msgstr "Retourne [code]true[/code] si le [code]signal[/code] donné existe."
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns the navigation map [RID] the requested [code]region[/code] is "
"currently assigned to."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
#, fuzzy
+msgid "Returns the region's navigation layers."
+msgstr "Retourne le maillage de navigation de l'élément."
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]."
+msgstr "Retourne [code]true[/code] si le [code]signal[/code] donné existe."
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns [code]true[/code] if the provided [code]point[/code] in world space "
+"is currently owned by the provided navigation [code]region[/code]. Owned in "
+"this context means that one of the region's navigation mesh polygon faces "
+"has a possible position at the closest distance to this point compared to "
+"all other navigation meshes from other navigation regions that are also "
+"registered on the navigation map of the provided region.\n"
+"If multiple navigation meshes have positions at equal distance the "
+"navigation region whose polygons are processed first wins the ownership. "
+"Polygons are processed in the same order that navigation regions were "
+"registered on the NavigationServer.\n"
+"[b]Note:[/b] If navigation meshes from different navigation regions overlap "
+"(which should be avoided in general) the result might not be what is "
+"expected."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]."
+msgstr ""
+"Définit la [code]position[/code] du point avec l'identifiant [code]id[/code] "
+"spécifié."
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
msgid "Sets the map for the region."
msgstr "Retourne la hauteur du contenu."
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method Navigation2DServer.map_get_path])."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
#, fuzzy
msgid "Sets the navigation mesh for the region."
@@ -41584,6 +44342,13 @@ msgstr "Définit le polygone de navigation de la tuile."
msgid "Sets the global transformation for the region."
msgstr "Retourne la matrice de transformation globale de cet élément."
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]."
+msgstr ""
+"Définit la [code]position[/code] du point avec l'identifiant [code]id[/code] "
+"spécifié."
+
#: doc/classes/NavigationAgent.xml
msgid "3D agent used in navigation for collision avoidance."
msgstr "Un agent 3D utilisé dans les navigations pour esquiver les collisions."
@@ -41593,9 +44358,16 @@ msgid ""
"3D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationAgent] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World] navigation map. If this node is a child of a [Navigation] "
+"node it will register to the navigation map of the navigation node or the "
+"function [method set_navigation] can be used to set the navigation node "
+"directly. [NavigationAgent] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -41613,9 +44385,16 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-#, fuzzy
-msgid "Returns the path from start to finish in global coordinates."
-msgstr "Le point de collision, dans les coordonnées globales."
+msgid ""
+"Returns this agent's current path from start to finish in global "
+"coordinates. The path only updates when the target location is changed or "
+"the agent requires a repath. The path array is not intended to be used in "
+"direct path movement as the agent has its own internal path logic that would "
+"get corrupted by changing the path array manually. Use the intended [method "
+"get_next_location] once every physics frame to receive the next path point "
+"for the agents movement as this function also updates the internal path "
+"logic."
+msgstr ""
#: doc/classes/NavigationAgent.xml
msgid ""
@@ -41629,11 +44408,24 @@ msgid ""
"system."
msgstr ""
-#: doc/classes/NavigationAgent.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"Returns a [Vector3] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the origin of the agent's parent."
+"Returns the [RID] of the navigation map for this NavigationAgent node. This "
+"function returns always the map set on the NavigationAgent node and not the "
+"map of the abstract agent on the NavigationServer. If the agent map is "
+"changed directly with the NavigationServer API the NavigationAgent node will "
+"not be aware of the map change. Use [method set_navigation_map] to change "
+"the navigation map for the NavigationAgent and also update the agent on the "
+"NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
+"Returns the next location in global coordinates that can be moved to, making "
+"sure that there are no static objects in the way. If the agent does not have "
+"a navigation path, it will return the position of the agent's parent. The "
+"use of this function once every physics frame is required to update the "
+"internal path logic of the NavigationAgent."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -41679,6 +44471,12 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"Sets the [RID] of the navigation map this NavigationAgent node should use "
+"and also updates the [code]agent[/code] on the NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"Sets the user desired final location. This will clear the current navigation "
"path."
msgstr ""
@@ -41691,7 +44489,13 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml
-msgid "The agent height offset to match the navigation mesh height."
+msgid ""
+"The NavigationAgent height offset is subtracted from the y-axis value of any "
+"vector path position for this NavigationAgent. The NavigationAgent height "
+"offset does not change or influence the navigation mesh or pathfinding query "
+"result. Additional navigation maps that use regions with navigation meshes "
+"that the developer baked with appropriate agent radius or height values are "
+"required to support different-sized agents."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -41720,6 +44524,13 @@ msgstr "La valeur de luminance maximale pour l'exposition automatique."
msgid "The maximum speed that an agent can move."
msgstr "Rotation maximale à travers la charnière."
+#: doc/classes/NavigationAgent.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
#, fuzzy
msgid "The distance to search for other agents."
@@ -41727,20 +44538,40 @@ msgstr "L’instance n’a pas de type."
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"The distance threshold before a path point is considered to be reached. This "
+"will allow an agent to not have to hit a path point on the path exactly, but "
+"in the area. If this value is set to high the NavigationAgent will skip "
+"points on the path which can lead to leaving the navigation mesh. If this "
+"value is set to low the NavigationAgent will be stuck in a repath loop cause "
+"it will constantly overshoot or undershoot the distance to the next point on "
+"each physics frame update."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"The maximum distance the agent is allowed away from the ideal path to the "
"final location. This can happen due to trying to avoid collisions. When the "
"maximum distance is exceeded, it recalculates the ideal path."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-msgid "The radius of the agent."
-msgstr "Le rayon de l'agent."
+msgid ""
+"The radius of the avoidance agent. This is the \"body\" of the avoidance "
+"agent and not the avoidance maneuver starting radius (which is controlled by "
+"[member neighbor_dist]).\n"
+"Does not affect normal pathfinding. To change an actor's pathfinding radius "
+"bake [NavigationMesh] resources with a different [member NavigationMesh."
+"agent_radius] property and use different navigation maps for each actor size."
+msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"The distance threshold before a target is considered to be reached. This "
-"will allow an agent to not have to hit a point on the path exactly, but in "
-"the area."
+"The distance threshold before the final target point is considered to be "
+"reached. This will allow an agent to not have to hit the point of the final "
+"target exactly, but only the area. If this value is set to low the "
+"NavigationAgent will be stuck in a repath loop cause it will constantly "
+"overshoot or undershoot the distance to the final target point on each "
+"physics frame update."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -41784,9 +44615,16 @@ msgid ""
"2D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationAgent2D] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World2D] navigation map. If this node is a child of a "
+"[Navigation2D] node it will register to the navigation map of the navigation "
+"node or the function [method set_navigation] can be used to set the "
+"navigation node directly. [NavigationAgent2D] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent2D.xml
@@ -41802,13 +44640,6 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent2D.xml
-msgid ""
-"Returns a [Vector2] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the position of the agent's parent."
-msgstr ""
-
-#: doc/classes/NavigationAgent2D.xml
#, fuzzy
msgid "Returns the [RID] of this agent on the [Navigation2DServer]."
msgstr "Retourne le [RID] de la énième forme d'une zone."
@@ -41829,6 +44660,13 @@ msgid ""
"only be enabled on agents that currently require it."
msgstr ""
+#: doc/classes/NavigationAgent2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent2D] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationMesh.xml
msgid "A mesh to approximate the walkable areas and obstacles."
msgstr ""
@@ -41861,8 +44699,8 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
#, fuzzy
msgid ""
-"Returns whether the specified [code]bit[/code] of the [member geometry/"
-"collision_mask] is set."
+"Returns whether the specified [code]bit[/code] of the [member "
+"geometry_collision_mask] is set."
msgstr "Retourne si la [code]class[/code] spécifiée est disponible ou non."
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
@@ -41887,12 +44725,17 @@ msgstr ""
"créé."
#: doc/classes/NavigationMesh.xml
+#, fuzzy
msgid ""
"If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/"
-"code] in the [member geometry/collision_mask].\n"
+"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]."
+"code] in the [member geometry_collision_mask]."
msgstr ""
+"Si [code]value[/code] est [code]true[/code]], définit le [code]bit[/code] "
+"spécifié dans le masque [nom collision_mask].\n"
+"Si [code]value[/code] est [code]false[/code], rétablit le [code]bit[/code] "
+"spécifié dans le masque [nom collision_mask]."
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
msgid ""
@@ -41905,14 +44748,14 @@ 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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -41925,7 +44768,7 @@ 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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -41953,13 +44796,17 @@ msgstr ""
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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
-"If [code]true[/code], marks walkable spans as not walkable if the clearance "
-"above the span is less than [member agent/height]."
+"If the baking [AABB] has a volume the navigation mesh baking will be "
+"restricted to its enclosing area."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+msgid "The position offset applied to the [member filter_baking_aabb] [AABB]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -41970,13 +44817,22 @@ msgstr "Si [code]true[/code], les titres des colonnes sont visibles."
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]true[/code], marks non-walkable spans as walkable if their maximum "
-"is within [member agent/max_climb] of a walkable neighbor."
+"is within [member agent_max_climb] of a walkable neighbor."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+#, fuzzy
+msgid ""
+"If [code]true[/code], marks walkable spans as not walkable if the clearance "
+"above the span is less than [member agent_height]."
msgstr ""
+"Si [code]true[/code], les particules sera émise une seule fois puis "
+"arrêtées. Équivalent à [member Particles.one_shot]."
#: doc/classes/NavigationMesh.xml
msgid ""
"The physics layers to scan for static colliders.\n"
-"Only used when [member geometry/parsed_geometry_type] is [constant "
+"Only used when [member geometry_parsed_geometry_type] is [constant "
"PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]."
msgstr ""
@@ -41995,7 +44851,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"The name of the group to scan for geometry.\n"
-"Only used when [member geometry/source_geometry_mode] is [constant "
+"Only used when [member geometry_source_geometry_mode] is [constant "
"SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant "
"SOURCE_GEOMETRY_GROUPS_EXPLICIT]."
msgstr ""
@@ -42060,7 +44916,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Parses [StaticBody] colliders as geometry. The collider should be in any of "
-"the layers specified by [member geometry/collision_mask]."
+"the layers specified by [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -42083,13 +44939,13 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Scans nodes in a group and their child nodes recursively for geometry. The "
-"group is specified by [member geometry/source_group_name]."
+"group is specified by [member geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Uses nodes in a group for geometry. The group is specified by [member "
-"geometry/source_group_name]."
+"geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -42131,7 +44987,15 @@ msgid ""
"geometry for walkable terrain suitable to [NavigationMesh] agent properties "
"by creating a voxel world around the meshes bounding area.\n"
"The finalized navigation mesh is then returned and stored inside the "
-"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes."
+"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] "
+"nodes.\n"
+"[b]Note:[/b] Using meshes to not only define walkable surfaces but also "
+"obstruct navigation baking does not always work. The navigation baking has "
+"no concept of what is a geometry \"inside\" when dealing with mesh source "
+"geometry and this is intentional. Depending on current baking parameters, as "
+"soon as the obstructing mesh is large enough to fit a navigation mesh area "
+"inside, the baking will generate navigation mesh areas that are inside the "
+"obstructing source geometry mesh."
msgstr ""
#: doc/classes/NavigationMeshGenerator.xml
@@ -42139,8 +45003,8 @@ msgid ""
"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child "
"nodes under the provided [code]root_node[/code] or a specific group of nodes "
"for potential source geometry. The parse behavior can be controlled with the "
-"[member NavigationMesh.geometry/parsed_geometry_type] and [member "
-"NavigationMesh.geometry/source_geometry_mode] properties on the "
+"[member NavigationMesh.geometry_parsed_geometry_type] and [member "
+"NavigationMesh.geometry_source_geometry_mode] properties on the "
"[NavigationMesh] resource."
msgstr ""
@@ -42158,8 +45022,21 @@ msgstr "Une instance de [NavigationMesh]."
#: doc/classes/NavigationMeshInstance.xml
msgid ""
"An instance of a [NavigationMesh]. It tells the [Navigation] node what can "
-"be navigated and what cannot, based on the [NavigationMesh] resource. This "
-"should be a child of a [Navigation] node."
+"be navigated and what cannot, based on the [NavigationMesh] resource.\n"
+"By default this node will register to the default [World] navigation map. If "
+"this node is a child of a [Navigation] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method NavigationServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The cost of entering this region from another region can be controlled with "
+"the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The cost of traveling distances inside this region can be controlled with "
+"the [member travel_cost] multiplier."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
@@ -42188,10 +45065,34 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled."
msgstr "Détermine si le [NavigationMeshInstance] est actif ou non."
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding enters this region's navmesh from another regions navmesh "
+"the [code]enter_cost[/code] value is added to the path distance for "
+"determining the shortest path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationMesh] "
+"belongs to. On path requests with [method NavigationServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
msgid "The [NavigationMesh] resource to use."
msgstr "La ressource [NavigationMesh] à utiliser."
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding moves inside this region's navmesh the traveled distances "
+"are multiplied with [code]travel_cost[/code] for determining the shortest "
+"path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
#, fuzzy
msgid "Notifies when the navigation mesh bake operation is completed."
msgstr "Avertit quand une animation commence à jouer."
@@ -42209,7 +45110,9 @@ msgid ""
"3D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationObstacle] is physics safe."
+"[NavigationObstacle] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle.xml
@@ -42249,7 +45152,9 @@ msgid ""
"2D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationObstacle2D] is physics safe."
+"[NavigationObstacle2D] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle2D.xml
@@ -42329,6 +45234,14 @@ msgstr ""
#: doc/classes/NavigationPolygon.xml
msgid ""
+"Returns the [NavigationMesh] resulting from this navigation polygon. This "
+"navmesh can be used to update the navmesh of a region with the [method "
+"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server "
+"behind the scene)."
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml
+msgid ""
"Returns a [PoolVector2Array] containing the vertices of an outline that was "
"created in the editor or by script."
msgstr ""
@@ -42365,6 +45278,31 @@ msgid ""
msgstr ""
#: doc/classes/NavigationPolygonInstance.xml
+#, fuzzy
+msgid "A region of the 2D navigation map."
+msgstr "Prépare le maillage de navigation."
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A region of the navigation map. It tells the [Navigation2DServer] what can "
+"be navigated and what cannot, based on its [NavigationPolygon] resource.\n"
+"By default this node will register to the default [World2D] navigation map. "
+"If this node is a child of a [Navigation2D] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The pathfinding cost of entering this region from another region can be "
+"controlled with the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The pathfinding cost of traveling distances inside this region can be "
+"controlled with the [member travel_cost] multiplier."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
msgid ""
"Returns the [RID] of this region on the [Navigation2DServer]. Combined with "
"[method Navigation2DServer.map_get_closest_point_owner] can be used to "
@@ -42372,6 +45310,24 @@ msgid ""
"navigation map."
msgstr ""
+#: doc/classes/NavigationPolygonInstance.xml
+#, fuzzy
+msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled."
+msgstr "Détermine si le [NavigationMeshInstance] est actif ou non."
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationPolygon] "
+"belongs to. On path requests with [method Navigation2DServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+#, fuzzy
+msgid "The [NavigationPolygon] resource to use."
+msgstr "La ressource [NavigationMesh] à utiliser."
+
#: doc/classes/NavigationServer.xml
#, fuzzy
msgid "Server interface for low-level 3D navigation access."
@@ -42474,6 +45430,12 @@ msgid "Bakes the navigation mesh."
msgstr "Prépare le maillage de navigation."
#: doc/classes/NavigationServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method NavigationServer.map_get_path])."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
msgid "Control activation of this server."
msgstr "Contrôle l'activation de ce serveur."
@@ -43829,12 +46791,11 @@ msgid ""
msgstr ""
#: doc/classes/Node.xml
-#, fuzzy
msgid ""
"Sends a [method rpc] using an unreliable protocol. Returns [code]null[/code]."
msgstr ""
-"Envoie un [method rpc] en utilisant un protocole non fiable. Retourne un "
-"[Variant] vide."
+"Envoie un [method rpc] en utilisant un protocole non fiable. Retourne "
+"[code]null[/code]."
#: doc/classes/Node.xml
msgid ""
@@ -44059,13 +47020,19 @@ msgstr ""
#: doc/classes/Node.xml
msgid ""
"Emitted when a child node enters the scene tree, either because it entered "
-"on its own or because this node entered with it."
+"on its own or because this node entered with it.\n"
+"This signal is emitted [i]after[/i] the child node's own [constant "
+"NOTIFICATION_ENTER_TREE] and [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
msgid ""
-"Emitted when a child node exits the scene tree, either because it exited on "
-"its own or because this node exited."
+"Emitted when a child node is about to exit the scene tree, either because it "
+"is being removed or freed directly, or because this node is exiting the "
+"tree.\n"
+"When this signal is received, the child [code]node[/code] is still in the "
+"tree and valid. This signal is emitted [i]after[/i] the child node's own "
+"[signal tree_exiting] and [constant NOTIFICATION_EXIT_TREE]."
msgstr ""
#: doc/classes/Node.xml
@@ -44077,8 +47044,11 @@ msgid "Emitted when the node is renamed."
msgstr "Émis quand le nœud est renommé."
#: doc/classes/Node.xml
-msgid "Emitted when the node enters the tree."
-msgstr "Émis quand le nœud entre dans l'arborescence."
+msgid ""
+"Emitted when the node enters the tree.\n"
+"This signal is emitted [i]after[/i] the related [constant "
+"NOTIFICATION_ENTER_TREE] notification."
+msgstr ""
#: doc/classes/Node.xml
msgid "Emitted after the node exits the tree and is no longer active."
@@ -44087,15 +47057,22 @@ msgstr "Émis quand le nœud quitte l'arborescence et n'est plus actif."
#: doc/classes/Node.xml
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)."
+"the right place for de-initialization (or a \"destructor\", if you will).\n"
+"This signal is emitted [i]before[/i] the related [constant "
+"NOTIFICATION_EXIT_TREE] notification."
msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node enters a [SceneTree]."
-msgstr "La notification reçue quand un nœud entre dans le [SceneTree]."
+msgid ""
+"Notification received when the node enters a [SceneTree].\n"
+"This notification is emitted [i]before[/i] the related [signal tree_entered]."
+msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node is about to exit a [SceneTree]."
+#, fuzzy
+msgid ""
+"Notification received when the node is about to exit a [SceneTree].\n"
+"This notification is emitted [i]after[/i] the related [signal tree_exiting]."
msgstr "La notification reçue quand le nœud va quitter le [SceneTree]."
#: doc/classes/Node.xml
@@ -44361,10 +47338,14 @@ msgid "Rotation in degrees, relative to the node's parent."
msgstr "La rotation en degrés, relative au parent de ce nœud."
#: doc/classes/Node2D.xml
-msgid "The node's scale. Unscaled value: [code](1, 1)[/code]."
+msgid ""
+"The node's scale. Unscaled value: [code](1, 1)[/code].\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
-"La mise à l'échelle du nœud. La valeur sans mise à l'échelle est [code](1, 1)"
-"[/code]."
#: doc/classes/Node2D.xml
msgid "Local [Transform2D]."
@@ -46088,6 +49069,10 @@ msgid ""
" if argument.find(\"=\") > -1:\n"
" var key_value = argument.split(\"=\")\n"
" arguments[key_value[0].lstrip(\"--\")] = key_value[1]\n"
+" else:\n"
+" # Options without an argument will be present in the dictionary,\n"
+" # with the value set to an empty string.\n"
+" arguments[argument.lstrip(\"--\")] = \"\"\n"
"[/codeblock]"
msgstr ""
@@ -46807,8 +49792,15 @@ msgstr ""
msgid ""
"Moves the file or directory to the system's recycle bin. See also [method "
"Directory.remove].\n"
+"The method takes only global paths, so you may need to use [method "
+"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/"
+"code] as it will not work in exported project.\n"
"[b]Note:[/b] If the user has disabled the recycle bin on their system, the "
-"file will be permanently deleted instead."
+"file will be permanently deleted instead.\n"
+"[codeblock]\n"
+"var file_to_remove = \"user://slot1.sav\"\n"
+"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/OS.xml
@@ -51430,7 +54422,6 @@ msgid "A pooled array of bytes."
msgstr "Un tableau compacté d'octets."
#: doc/classes/PoolByteArray.xml
-#, fuzzy
msgid ""
"An array specifically designed to hold bytes. Optimized for memory usage, "
"does not fragment the memory.\n"
@@ -51462,7 +54453,7 @@ msgstr ""
"[codeblock]\n"
"var array = [PoolByteArray()]\n"
"array[0].push_back(123) # Accède à une copie du PoolByteArray\n"
-"print(array) # [[]] (Un PoolByteArray vide dans un Array vide)\n"
+"print(array) # [[]] (Un PoolByteArray vide dans un Array)\n"
"[/codeblock]\n"
"Au lieu de ça, le [PoolByteArray] en entier doit être [i]réassigné[/i] avec "
"[code]=[/code] pour que sa modification soit prise en compte :\n"
@@ -51480,6 +54471,8 @@ msgid ""
"Constructs a new [PoolByteArray]. Optionally, you can pass in a generic "
"[Array] that will be converted."
msgstr ""
+"Construit un nouvel [PoolByteArray]. En option, vous pouvez passer un "
+"[Array] générique qui sera converti."
#: doc/classes/PoolByteArray.xml
msgid "Appends a [PoolByteArray] at the end of this array."
@@ -51611,7 +54604,6 @@ msgid "A pooled array of [Color]s."
msgstr "Un tableau compacté de [Color]."
#: doc/classes/PoolColorArray.xml
-#, fuzzy
msgid ""
"An array specifically designed to hold [Color]. Optimized for memory usage, "
"does not fragment the memory.\n"
@@ -51645,7 +54637,7 @@ msgstr ""
"var array = [PoolColorArray()]\n"
"array[0].push_back(Color(0.1, 0.2, 0.3, 0.4)) # Accède à une copie du "
"PoolColorArray\n"
-"print(array) # [[]] (Un PoolColorArray vide dans un Array vide)\n"
+"print(array) # [[]] (Un PoolColorArray vide dans un Array)\n"
"[/codeblock]\n"
"Au lieu de ça, le [PoolColorArray] en entier doit être [i]réassigné[/i] avec "
"[code]=[/code] pour que sa modification soit prise en compte :\n"
@@ -51664,6 +54656,8 @@ msgid ""
"Constructs a new [PoolColorArray]. Optionally, you can pass in a generic "
"[Array] that will be converted."
msgstr ""
+"Construit un nouvel [PoolColorArray]. En option, vous pouvez passer un "
+"[Array] générique qui sera converti."
#: doc/classes/PoolColorArray.xml
msgid "Appends a [PoolColorArray] at the end of this array."
@@ -51690,7 +54684,6 @@ msgid "A pooled array of integers ([int])."
msgstr "Un tableau compacté d'entiers ([int])."
#: doc/classes/PoolIntArray.xml
-#, fuzzy
msgid ""
"An array specifically designed to hold integer values ([int]). Optimized for "
"memory usage, does not fragment the memory.\n"
@@ -51727,7 +54720,7 @@ msgstr ""
"[codeblock]\n"
"var array = [PoolIntArray()]\n"
"array[0].push_back(1234) # Accède à une copie du PoolIntArray\n"
-"print(array) # [[]] (Un PoolIntArray vide dans un Array vide)\n"
+"print(array) # [[]] (Un PoolIntArray vide dans un Array)\n"
"[/codeblock]\n"
"Au lieu de ça, le [PoolIntArray] en entier doit être [i]réassigné[/i] avec "
"[code]=[/code] pour que sa modification soit prise en compte :\n"
@@ -51750,8 +54743,8 @@ msgid ""
"Constructs a new [PoolIntArray]. Optionally, you can pass in a generic "
"[Array] that will be converted."
msgstr ""
-"Construit un nouvel [PoolIntArray]. En option, il est possible de passer un "
-"[Array] générique qui sera converti."
+"Construit un nouvel [PoolIntArray]. En option, vous pouvez passer un [Array] "
+"générique qui sera converti."
#: doc/classes/PoolIntArray.xml
msgid "Appends a [PoolIntArray] at the end of this array."
@@ -51776,7 +54769,6 @@ msgid "A pooled array of real numbers ([float])."
msgstr "Un tableau compacté de flottants ([float])."
#: doc/classes/PoolRealArray.xml
-#, fuzzy
msgid ""
"An array specifically designed to hold floating-point values. Optimized for "
"memory usage, does not fragment the memory.\n"
@@ -51815,7 +54807,7 @@ msgstr ""
"[codeblock]\n"
"var array = [PoolRealArray()]\n"
"array[0].push_back(12.34) # Accède à une copie du PoolRealArray\n"
-"print(array) # [[]] (Un PoolRealArray vide dans un Array vide)\n"
+"print(array) # [[]] (Un PoolRealArray vide dans un Array)\n"
"[/codeblock]\n"
"Au lieu de ça, le [PoolRealArray] en entier doit être [i]réassigné[/i] avec "
"[code]=[/code] pour que sa modification soit prise en compte :\n"
@@ -51841,7 +54833,7 @@ msgid ""
"Constructs a new [PoolRealArray]. Optionally, you can pass in a generic "
"[Array] that will be converted."
msgstr ""
-"Construit un nouvel [PoolRealArray]. En option, il est possible de passer un "
+"Construit un nouvel [PoolRealArray]. En option, vous pouvez passer un "
"[Array] générique qui sera converti."
#: doc/classes/PoolRealArray.xml
@@ -51858,7 +54850,6 @@ msgid "A pooled array of [String]s."
msgstr "Un tableau compacté de [String]."
#: doc/classes/PoolStringArray.xml
-#, fuzzy
msgid ""
"An array specifically designed to hold [String]s. Optimized for memory "
"usage, does not fragment the memory.\n"
@@ -51890,7 +54881,7 @@ msgstr ""
"[codeblock]\n"
"var array = [PoolStringArray()]\n"
"array[0].push_back(\"hello\") # Accède à une copie du PoolStringArray\n"
-"print(array) # [[]] (Un PoolStringArray vide dans un Array vide)\n"
+"print(array) # [[]] (Un PoolStringArray vide dans un Array)\n"
"[/codeblock]\n"
"Au lieu de ça, le [PoolStringArray] en entier doit être [i]réassigné[/i] "
"avec [code]=[/code] pour que sa modification soit prise en compte :\n"
@@ -51938,7 +54929,6 @@ msgid "A pooled array of [Vector2]s."
msgstr "Un tableau compacté de [Vector2]."
#: doc/classes/PoolVector2Array.xml
-#, fuzzy
msgid ""
"An array specifically designed to hold [Vector2]. Optimized for memory "
"usage, does not fragment the memory.\n"
@@ -51972,7 +54962,7 @@ msgstr ""
"var array = [PoolVector2Array()]\n"
"array[0].push_back(Vector2(12, 34)) # Accède à une copie du "
"PoolVector2Array\n"
-"print(array) # [[]] (Un PoolVector2Array vide dans un Array vide)\n"
+"print(array) # [[]] (Un PoolVector2Array vide dans un Array)\n"
"[/codeblock]\n"
"Au lieu de ça, le [PoolVector2Array] en entier doit être [i]réassigné[/i] "
"avec [code]=[/code] pour que sa modification soit prise en compte :\n"
@@ -51996,8 +54986,8 @@ msgid ""
"Constructs a new [PoolVector2Array]. Optionally, you can pass in a generic "
"[Array] that will be converted."
msgstr ""
-"Construit un nouvel [PoolVector2Array]. En option, il est possible de passer "
-"un [Array] générique qui sera converti."
+"Construit un nouvel [PoolVector2Array]. En option, vous pouvez passer un "
+"[Array] générique qui sera converti."
#: doc/classes/PoolVector2Array.xml
msgid "Appends a [PoolVector2Array] at the end of this array."
@@ -52069,8 +55059,8 @@ msgid ""
"Constructs a new [PoolVector3Array]. Optionally, you can pass in a generic "
"[Array] that will be converted."
msgstr ""
-"Construit un nouvel [PoolVector3Array]. En option, il est possible de passer "
-"un [Array] générique qui sera converti."
+"Construit un nouvel [PoolVector3Array]. En option, vous pouvez passer un "
+"[Array] générique qui sera converti."
#: doc/classes/PoolVector3Array.xml
msgid "Appends a [PoolVector3Array] at the end of this array."
@@ -52190,10 +55180,19 @@ msgstr "Un PopupMenu affiche une liste d'options."
#: doc/classes/PopupMenu.xml
msgid ""
"[PopupMenu] is a [Control] that displays a list of options. They are popular "
-"in toolbars or context menus."
+"in toolbars or context menus.\n"
+"[b]Incremental search:[/b] Like [ItemList] and [Tree], [PopupMenu] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
-"Un [PopupMenu] est un [Control] qui affiche une liste d'options. Souvent "
-"utilisé dans les barres d'outils ou les menus contextuels."
#: doc/classes/PopupMenu.xml
msgid ""
@@ -53846,8 +56845,17 @@ msgstr ""
"résultat d'une fonction qui retourne [code]void[/code] à une variable."
#: doc/classes/ProjectSettings.xml
-msgid "Message to be displayed before the backtrace when the engine crashes."
-msgstr "Le message à afficher avant les détails de crash du moteur."
+msgid ""
+"Message to be displayed before the backtrace when the engine crashes. By "
+"default, this message is only used in exported projects due to the editor-"
+"only override applied to this setting."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Editor-only override for [member debug/settings/crash_handler/message]. Does "
+"not affect exported projects in debug or release mode."
+msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
@@ -54099,6 +57107,18 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default naming style for scene files to infer from their root nodes. "
+"Possible options are:\n"
+"- [code]0[/code] (Auto): Uses the scene root name as is without changing its "
+"casing.\n"
+"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase "
+"casing.\n"
+"- [code]2[/code] (snake_case): Converts the scene root name to snake_case "
+"casing."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -54375,421 +57395,805 @@ msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 1."
-msgstr "Le nom facultatif pour le claque 1 de physique 2D."
+msgstr "Le nom facultatif pour le calque 1 de physique 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 10."
-msgstr "Le nom facultatif pour le claque 10 de physique 2D."
+msgstr "Le nom facultatif pour le calque 10 de physique 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 11."
-msgstr "Le nom facultatif pour le claque 11 de physique 2D."
+msgstr "Le nom facultatif pour le calque 11 de physique 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 12."
-msgstr "Le nom facultatif pour le claque 12 de physique 2D."
+msgstr "Le nom facultatif pour le calque 12 de physique 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 13."
-msgstr "Le nom facultatif pour le claque 13 de physique 2D."
+msgstr "Le nom facultatif pour le calque 13 de physique 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 14."
-msgstr "Le nom facultatif pour le claque 14 de physique 2D."
+msgstr "Le nom facultatif pour le calque 14 de physique 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 15."
-msgstr "Le nom facultatif pour le claque 15 de physique 2D."
+msgstr "Le nom facultatif pour le calque 15 de physique 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 16."
-msgstr "Le nom facultatif pour le claque 16 de physique 2D."
+msgstr "Le nom facultatif pour le calque 16 de physique 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 17."
-msgstr "Le nom facultatif pour le claque 17 de physique 2D."
+msgstr "Le nom facultatif pour le calque 17 de physique 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 18."
-msgstr "Le nom facultatif pour le claque 18 de physique 2D."
+msgstr "Le nom facultatif pour le calque 18 de physique 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 19."
-msgstr "Le nom facultatif pour le claque 19 de physique 2D."
+msgstr "Le nom facultatif pour le calque 19 de physique 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 2."
-msgstr "Le nom facultatif pour le claque 2 de physique 2D."
+msgstr "Le nom facultatif pour le calque 2 de physique 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 20."
-msgstr "Le nom facultatif pour le claque 20 de physique 2D."
+msgstr "Le nom facultatif pour le calque 20 de physique 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 21."
-msgstr "Le nom optionnel pour le claque physique 2D numéro 21."
+msgstr "Le nom optionnel pour le calque physique 2D numéro 21."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 22."
-msgstr "Le nom optionnel pour le claque physique 2D numéro 22."
+msgstr "Le nom optionnel pour le calque physique 2D numéro 22."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 23."
-msgstr "Le nom optionnel pour le claque physique 2D numéro 23."
+msgstr "Le nom optionnel pour le calque physique 2D numéro 23."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 24."
-msgstr "Le nom optionnel pour le claque physique 2D numéro 24."
+msgstr "Le nom optionnel pour le calque physique 2D numéro 24."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 25."
-msgstr "Le nom optionnel pour le claque physique 2D numéro 25."
+msgstr "Le nom optionnel pour le calque physique 2D numéro 25."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 26."
-msgstr "Le nom optionnel pour le claque physique 2D numéro 26."
+msgstr "Le nom optionnel pour le calque physique 2D numéro 26."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 27."
-msgstr "Le nom optionnel pour le claque physique 2D numéro 27."
+msgstr "Le nom optionnel pour le calque physique 2D numéro 27."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 28."
-msgstr "Le nom optionnel pour le claque physique 2D numéro 28."
+msgstr "Le nom optionnel pour le calque physique 2D numéro 28."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 29."
-msgstr "Le nom optionnel pour le claque physique 2D numéro 29."
+msgstr "Le nom optionnel pour le calque physique 2D numéro 29."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 3."
-msgstr "Le nom facultatif pour le claque 3 de physique 2D."
+msgstr "Le nom facultatif pour le calque 3 de physique 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 30."
-msgstr "Le nom optionnel pour le claque physique 2D numéro 30."
+msgstr "Le nom optionnel pour le calque physique 2D numéro 30."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 31."
-msgstr "Le nom optionnel pour le claque physique 2D numéro 31."
+msgstr "Le nom optionnel pour le calque physique 2D numéro 31."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 32."
-msgstr "Le nom optionnel pour le claque physique 2D numéro 32."
+msgstr "Le nom optionnel pour le calque physique 2D numéro 32."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 4."
-msgstr "Le nom facultatif pour le claque 4 de physique 2D."
+msgstr "Le nom facultatif pour le calque 4 de physique 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 5."
-msgstr "Le nom facultatif pour le claque 5 de physique 2D."
+msgstr "Le nom facultatif pour le calque 5 de physique 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 6."
-msgstr "Le nom facultatif pour le claque 6 de physique 2D."
+msgstr "Le nom facultatif pour le calque 6 de physique 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 7."
-msgstr "Le nom facultatif pour le claque 7 de physique 2D."
+msgstr "Le nom facultatif pour le calque 7 de physique 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 8."
-msgstr "Le nom facultatif pour le claque 8 de physique 2D."
+msgstr "Le nom facultatif pour le calque 8 de physique 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 9."
-msgstr "Le nom facultatif pour le claque 9 de physique 2D."
+msgstr "Le nom facultatif pour le calque 9 de physique 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D render layer 1."
-msgstr "Le nom facultatif pour le claque 1 de rendu 2D."
+msgstr "Le nom facultatif pour le calque 1 de rendu 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D render layer 10."
-msgstr "Le nom facultatif pour le claque 10 de rendu 2D."
+msgstr "Le nom facultatif pour le calque 10 de rendu 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D render layer 11."
-msgstr "Le nom facultatif pour le claque 11 de rendu 2D."
+msgstr "Le nom facultatif pour le calque 11 de rendu 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D render layer 12."
-msgstr "Le nom facultatif pour le claque 12 de rendu 2D."
+msgstr "Le nom facultatif pour le calque 12 de rendu 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D render layer 13."
-msgstr "Le nom facultatif pour le claque 13 de rendu 2D."
+msgstr "Le nom facultatif pour le calque 13 de rendu 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D render layer 14."
-msgstr "Le nom facultatif pour le claque 14 de rendu 2D."
+msgstr "Le nom facultatif pour le calque 14 de rendu 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D render layer 15."
-msgstr "Le nom facultatif pour le claque 15 de rendu 2D."
+msgstr "Le nom facultatif pour le calque 15 de rendu 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D render layer 16."
-msgstr "Le nom facultatif pour le claque 16 de rendu 2D."
+msgstr "Le nom facultatif pour le calque 16 de rendu 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D render layer 17."
-msgstr "Le nom facultatif pour le claque 17 de rendu 2D."
+msgstr "Le nom facultatif pour le calque 17 de rendu 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D render layer 18."
-msgstr "Le nom facultatif pour le claque 18 de rendu 2D."
+msgstr "Le nom facultatif pour le calque 18 de rendu 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D render layer 19."
-msgstr "Le nom facultatif pour le claque 19 de rendu 2D."
+msgstr "Le nom facultatif pour le calque 19 de rendu 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D render layer 2."
-msgstr "Le nom facultatif pour le claque 2 de rendu 2D."
+msgstr "Le nom facultatif pour le calque 2 de rendu 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D render layer 20."
-msgstr "Le nom facultatif pour le claque 20 de rendu 2D."
+msgstr "Le nom facultatif pour le calque 20 de rendu 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D render layer 3."
-msgstr "Le nom facultatif pour le claque 3 de rendu 2D."
+msgstr "Le nom facultatif pour le calque 3 de rendu 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D render layer 4."
-msgstr "Le nom facultatif pour le claque 4 rendu 2D."
+msgstr "Le nom facultatif pour le calque 4 rendu 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D render layer 5."
-msgstr "Le nom facultatif pour le claque 5 de rendu 2D."
+msgstr "Le nom facultatif pour le calque 5 de rendu 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D render layer 6."
-msgstr "Le nom facultatif pour le claque 6 rendu 2D."
+msgstr "Le nom facultatif pour le calque 6 rendu 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D render layer 7."
-msgstr "Le nom facultatif pour le claque 7 de rendu 2D."
+msgstr "Le nom facultatif pour le calque 7 de rendu 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D render layer 8."
-msgstr "Le nom facultatif pour le claque 8 de rendu 2D."
+msgstr "Le nom facultatif pour le calque 8 de rendu 2D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D render layer 9."
-msgstr "Le nom facultatif pour le claque 9 de rendu 2D."
+msgstr "Le nom facultatif pour le calque 9 de rendu 2D."
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 1."
-msgstr "Le nom facultatif pour le claque 1 de physique 3D."
+msgstr "Le nom facultatif pour le calque 1 de physique 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 10."
-msgstr "Le nom facultatif pour le claque 10 de physique 3D."
+msgstr "Le nom facultatif pour le calque 10 de physique 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 11."
-msgstr "Le nom facultatif pour le claque 11 de physique 3D."
+msgstr "Le nom facultatif pour le calque 11 de physique 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 12."
-msgstr "Le nom facultatif pour le claque 12 de physique 3D."
+msgstr "Le nom facultatif pour le calque 12 de physique 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 13."
-msgstr "Le nom facultatif pour le claque 13 de physique 3D."
+msgstr "Le nom facultatif pour le calque 13 de physique 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 14."
-msgstr "Le nom facultatif pour le claque 14 de physique 3D."
+msgstr "Le nom facultatif pour le calque 14 de physique 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 15."
-msgstr "Le nom facultatif pour le claque 15 de physique 3D."
+msgstr "Le nom facultatif pour le calque 15 de physique 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 16."
-msgstr "Le nom facultatif pour le claque 16 de physique 3D."
+msgstr "Le nom facultatif pour le calque 16 de physique 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 17."
-msgstr "Le nom facultatif pour le claque 17 de physique 3D."
+msgstr "Le nom facultatif pour le calque 17 de physique 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 18."
-msgstr "Le nom facultatif pour le claque 18 de physique 3D."
+msgstr "Le nom facultatif pour le calque 18 de physique 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 19."
-msgstr "Le nom facultatif pour le claque 19 de physique 3D."
+msgstr "Le nom facultatif pour le calque 19 de physique 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 2."
-msgstr "Le nom facultatif pour le claque 2 de physique 3D."
+msgstr "Le nom facultatif pour le calque 2 de physique 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 20."
-msgstr "Le nom facultatif pour le claque 20 de physique 3D."
+msgstr "Le nom facultatif pour le calque 20 de physique 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 21."
-msgstr "Le nom facultatif pour le claque 21 de physique 3D."
+msgstr "Le nom facultatif pour le calque 21 de physique 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 22."
-msgstr "Le nom facultatif pour le claque 22 de physique 3D."
+msgstr "Le nom facultatif pour le calque 22 de physique 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 23."
-msgstr "Le nom facultatif pour le claque 23 de physique 3D."
+msgstr "Le nom facultatif pour le calque 23 de physique 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 24."
-msgstr "Le nom facultatif pour le claque 24 de physique 3D."
+msgstr "Le nom facultatif pour le calque 24 de physique 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 25."
-msgstr "Le nom facultatif pour le claque 25 de physique 3D."
+msgstr "Le nom facultatif pour le calque 25 de physique 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 26."
-msgstr "Le nom facultatif pour le claque 26 de physique 3D."
+msgstr "Le nom facultatif pour le calque 26 de physique 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 27."
-msgstr "Le nom facultatif pour le claque 27 de physique 3D."
+msgstr "Le nom facultatif pour le calque 27 de physique 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 28."
-msgstr "Le nom facultatif pour le claque 28 de physique 3D."
+msgstr "Le nom facultatif pour le calque 28 de physique 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 29."
-msgstr "Le nom facultatif pour le claque 29 de physique 3D."
+msgstr "Le nom facultatif pour le calque 29 de physique 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 3."
-msgstr "Le nom facultatif pour le claque 3 de physique 3D."
+msgstr "Le nom facultatif pour le calque 3 de physique 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 30."
-msgstr "Le nom facultatif pour le claque 30 de physique 3D."
+msgstr "Le nom facultatif pour le calque 30 de physique 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 31."
-msgstr "Le nom facultatif pour le claque 31 de physique 3D."
+msgstr "Le nom facultatif pour le calque 31 de physique 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 32."
-msgstr "Le nom facultatif pour le claque 32 de physique 3D."
+msgstr "Le nom facultatif pour le calque 32 de physique 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 4."
-msgstr "Le nom facultatif pour le claque 4 de physique 3D."
+msgstr "Le nom facultatif pour le calque 4 de physique 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 5."
-msgstr "Le nom facultatif pour le claque 5 de physique 3D."
+msgstr "Le nom facultatif pour le calque 5 de physique 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 6."
-msgstr "Le nom facultatif pour le claque 6 de physique 3D."
+msgstr "Le nom facultatif pour le calque 6 de physique 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 7."
-msgstr "Le nom facultatif pour le claque 7 de physique 3D."
+msgstr "Le nom facultatif pour le calque 7 de physique 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 8."
-msgstr "Le nom facultatif pour le claque 8 de physique 3D."
+msgstr "Le nom facultatif pour le calque 8 de physique 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 9."
-msgstr "Le nom facultatif pour le claque 9 de physique 3D."
+msgstr "Le nom facultatif pour le calque 9 de physique 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D render layer 1."
-msgstr "Le nom facultatif pour le claque 1 de rendu 3D."
+msgstr "Le nom facultatif pour le calque 1 de rendu 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D render layer 10."
-msgstr "Le nom facultatif pour le claque 10 de rendu 3D."
+msgstr "Le nom facultatif pour le calque 10 de rendu 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D render layer 11."
-msgstr "Le nom facultatif pour le claque 11 de rendu 3D."
+msgstr "Le nom facultatif pour le calque 11 de rendu 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D render layer 12."
-msgstr "Le nom facultatif pour le claque 12 de rendu 3D."
+msgstr "Le nom facultatif pour le calque 12 de rendu 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D render layer 13."
-msgstr "Le nom facultatif pour le claque 13 de rendu 3D."
+msgstr "Le nom facultatif pour le calque 13 de rendu 3D."
#: doc/classes/ProjectSettings.xml
#, fuzzy
msgid "Optional name for the 3D render layer 14."
-msgstr "Le nom facultatif pour le claque 14 de rendu 3D"
+msgstr "Le nom facultatif pour le calque 14 de rendu 3D"
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D render layer 15."
-msgstr "Le nom facultatif pour le claque 15 de rendu 3D."
+msgstr "Le nom facultatif pour le calque 15 de rendu 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D render layer 16."
-msgstr "Le nom facultatif pour le claque 16 de rendu 3D."
+msgstr "Le nom facultatif pour le calque 16 de rendu 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D render layer 17."
-msgstr "Le nom facultatif pour le claque 17 de rendu 3D."
+msgstr "Le nom facultatif pour le calque 17 de rendu 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D render layer 18."
-msgstr "Le nom facultatif pour le claque 18 de rendu 3D."
+msgstr "Le nom facultatif pour le calque 18 de rendu 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D render layer 19."
-msgstr "Le nom facultatif pour le claque 19 de rendu 3D."
+msgstr "Le nom facultatif pour le calque 19 de rendu 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D render layer 2."
-msgstr "Le nom facultatif pour le claque 2 de rendu 3D."
+msgstr "Le nom facultatif pour le calque 2 de rendu 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D render layer 20."
-msgstr "Le nom facultatif pour le claque 20 de rendu 3D."
+msgstr "Le nom facultatif pour le calque 20 de rendu 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D render layer 3."
-msgstr "Le nom facultatif pour le claque 3 de rendu 3D."
+msgstr "Le nom facultatif pour le calque 3 de rendu 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D render layer 4."
-msgstr "Le nom facultatif pour le claque 4 de rendu 3D."
+msgstr "Le nom facultatif pour le calque 4 de rendu 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D render layer 5."
-msgstr "Le nom facultatif pour le claque 5 de rendu 3D."
+msgstr "Le nom facultatif pour le calque 5 de rendu 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D render layer 6."
-msgstr "Le nom facultatif pour le claque 6 de rendu 3D."
+msgstr "Le nom facultatif pour le calque 6 de rendu 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D render layer 7."
-msgstr "Le nom facultatif pour le claque 7 de rendu 3D."
+msgstr "Le nom facultatif pour le calque 7 de rendu 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D render layer 8."
-msgstr "Le nom facultatif pour le claque 8 de rendu 3D."
+msgstr "Le nom facultatif pour le calque 8 de rendu 3D."
#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D render layer 9."
-msgstr "Le nom facultatif pour le claque 9 de rendu 3D."
+msgstr "Le nom facultatif pour le calque 9 de rendu 3D."
#: doc/classes/ProjectSettings.xml
msgid ""
@@ -54857,6 +58261,49 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default cell height for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_height].\n"
+"[b]Note:[/b] Currently not implemented."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 2D navigation maps. See [method "
+"Navigation2DServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell height for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_height]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 3D navigation maps. See [method "
+"NavigationServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default map up vector for 3D navigation maps. See [method NavigationServer."
+"map_set_up]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -54974,14 +58421,15 @@ msgid ""
msgstr ""
#: doc/classes/ProjectSettings.xml
-#, fuzzy
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 ""
"Taille de la table de hachage utilisée pour l'algorithme de grille de "
-"hachage 2D à large phase."
+"hachage 2D à large phase.\n"
+"[b]Note :[/b] Non utilisé si [member ProjectSettings.physics/2d/use_bvh] est "
+"actif."
#: doc/classes/ProjectSettings.xml
msgid ""
@@ -55557,20 +59005,28 @@ msgid ""
"cause.\n"
"The default value is a conservative one, so you are advised to tweak it "
"according to the hardware you are targeting.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"The default is a very conservative override for [code]rendering/gles3/"
-"shaders/max_concurrent_compiles[/code].\n"
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
"Depending on the specific devices you are targeting, you may want to raise "
"it.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
+"Depending on the specific browsers you are targeting, you may want to raise "
+"it.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -55578,19 +59034,28 @@ msgid ""
"The maximum size, in megabytes, that the ubershader cache can grow up to. On "
"startup, the least recently used entries will be deleted until the total "
"size is within bounds.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/ubershader_cache_size_mb[/"
-"code], so a smaller maximum size can be configured for mobile platforms, "
-"where storage space is more limited.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for mobile platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for web platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] Currently, shader caching is generally unavailable on web "
+"platforms.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -55622,14 +59087,22 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/shader_compilation_mode[/"
-"code], so asynchronous compilation can be disabled for mobile.\n"
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on mobile platforms.\n"
"You may want to do that since mobile GPUs generally won't support "
"ubershaders due to their complexity."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on web platforms.\n"
+"You may want to do that since certain browsers (especially on mobile "
+"platforms) generally won't support ubershaders due to their complexity."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
@@ -56398,7 +59871,6 @@ msgid ""
"- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/"
"code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, "
"small grid radius values may lead to unwanted groupings.\n"
-"[/codeblock]\n"
"[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more "
"effective and faster [VisibilityNotifier] functionality. For most use cases, "
"[method Vector3.distance_to] or [method Vector3.distance_squared_to] are "
@@ -58779,6 +62251,26 @@ msgid "Makes text fill width."
msgstr "Rempli le texte en largeur."
#: doc/classes/RichTextLabel.xml
+#, fuzzy
+msgid "Aligns top of the inline image to the top of the text."
+msgstr "La hauteur de la boite mesuré depuis son centre."
+
+#: doc/classes/RichTextLabel.xml
+#, fuzzy
+msgid "Aligns center of the inline image to the center of the text."
+msgstr "Aligne les enfants avec le centre du conteneur."
+
+#: doc/classes/RichTextLabel.xml
+#, fuzzy
+msgid "Aligns bottom of the inline image to the baseline of the text."
+msgstr "La hauteur de la boite mesuré depuis son centre."
+
+#: doc/classes/RichTextLabel.xml
+#, fuzzy
+msgid "Aligns bottom of the inline image to the bottom of the text."
+msgstr "Aligne les enfants avec le centre du conteneur."
+
+#: doc/classes/RichTextLabel.xml
msgid "Each list item has a number marker."
msgstr "Chaque élément de la liste à un chiffre comme marqueur."
@@ -60605,8 +64097,8 @@ msgid ""
" yield(get_tree().create_timer(1.0), \"timeout\")\n"
" print(\"Timer ended.\")\n"
"[/codeblock]\n"
-"The timer will be automatically freed after its time elapses, so be aware "
-"that any reference you might have kept to it will become invalid."
+"The timer will be dereferenced after its time elapses. To preserve the "
+"timer, you can keep a reference to it. See [Reference]."
msgstr ""
"Un minuteur à un coup géré par l'arborescence, qui émet le signal [signal "
"timeout] quand il se termine. Voir aussi [method SceneTree.create_timer].\n"
@@ -60637,6 +64129,7 @@ msgid ""
msgstr ""
#: doc/classes/SceneTreeTween.xml
+#, fuzzy
msgid ""
"[SceneTreeTween] is a tween managed by the scene tree. As opposed to "
"[Tween], it does not require the instantiation of a node.\n"
@@ -60651,24 +64144,23 @@ msgid ""
"manually (i.e. by using [code]Tween.new()[/code]) are invalid. They can't be "
"used for tweening values, but you can do manual interpolation with [method "
"interpolate_value].\n"
-"A [SceneTreeTween] animation is composed of a sequence of [Tweener]s, which "
-"by default are executed one after another. You can create a sequence by "
-"appending [Tweener]s to the [SceneTreeTween]. Animating something with a "
-"[Tweener] is called tweening. Example tweening sequence looks like this:\n"
+"A tween animation is created by adding [Tweener]s to the [SceneTreeTween] "
+"object, using [method tween_property], [method tween_interval], [method "
+"tween_callback] or [method tween_method]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1)\n"
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"This sequence will make the [code]$Sprite[/code] node turn red, then shrink "
-"and finally the [method Node.queue_free] is called to remove the sprite. See "
-"methods [method tween_property], [method tween_interval], [method "
-"tween_callback] and [method tween_method] for more usage information.\n"
+"This sequence will make the [code]$Sprite[/code] node turn red, then shrink, "
+"before finally calling [method Node.queue_free] to free the sprite. "
+"[Tweener]s are executed one after another by default. This behavior can be "
+"changed using [method parallel] and [method set_parallel].\n"
"When a [Tweener] is created with one of the [code]tween_*[/code] methods, a "
"chained method call can be used to tweak the properties of this [Tweener]. "
-"For example, if you want to set different transition type in the above "
-"example, you can do:\n"
+"For example, if you want to set a different transition type in the above "
+"example, you can use [method set_trans]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1).set_trans(Tween."
@@ -60677,8 +64169,9 @@ msgid ""
"TRANS_BOUNCE)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Most of the [SceneTreeTween] methods can be chained this way too. In this "
-"example the [SceneTreeTween] is bound and have set a default transition:\n"
+"Most of the [SceneTreeTween] methods can be chained this way too. In the "
+"following example the [SceneTreeTween] is bound to the running script's node "
+"and a default transition is set for its [Tweener]s:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween().bind_node(self).set_trans(Tween."
"TRANS_ELASTIC)\n"
@@ -60686,16 +64179,16 @@ msgid ""
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Another interesting use for [SceneTreeTween]s is animating arbitrary set of "
+"Another interesting use for [SceneTreeTween]s is animating arbitrary sets of "
"objects:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"for sprite in get_children():\n"
-" tween.tween_property(sprite, \"position\", Vector2(), 1)\n"
+" tween.tween_property(sprite, \"position\", Vector2(0, 0), 1)\n"
"[/codeblock]\n"
"In the example above, all children of a node are moved one after another to "
"position (0, 0).\n"
-"Some [Tweener]s use transitions and eases. The first accepts an [enum Tween."
+"Some [Tweener]s use transitions and eases. The first accepts a [enum Tween."
"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 Tween.EaseType] constant, and "
@@ -60707,7 +64200,7 @@ msgid ""
"tween_cheatsheet.png]Tween easing and transition types cheatsheet[/url]\n"
"[b]Note:[/b] All [SceneTreeTween]s will automatically start by default. To "
"prevent a [SceneTreeTween] from autostarting, you can call [method stop] "
-"immediately after it was created."
+"immediately after it is created."
msgstr ""
"[SceneTreeTween] est un tween géré par l'arborescence. Contrairement à un "
"[Tween], il ne nécessite pas la création d'un nœud.\n"
@@ -60822,21 +64315,24 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
-"Processes the [SceneTreeTween] by given [code]delta[/code] value, in "
-"seconds. Mostly useful when the [SceneTreeTween] is paused, for controlling "
-"it manually. Can also be used to end the [SceneTreeTween] animation "
-"immediately, by using [code]delta[/code] longer than the whole duration.\n"
+"Processes the [SceneTreeTween] by the given [code]delta[/code] value, in "
+"seconds. This is mostly useful for manual control when the [SceneTreeTween] "
+"is paused. It can also be used to end the [SceneTreeTween] animation "
+"immediately, by setting [code]delta[/code] longer than the whole duration of "
+"the [SceneTreeTween] animation.\n"
"Returns [code]true[/code] if the [SceneTreeTween] still has [Tweener]s that "
"haven't finished.\n"
-"[b]Note:[/b] The [SceneTreeTween] will become invalid after finished, but "
-"you can call [method stop] after the step, to keep it and reset."
+"[b]Note:[/b] The [SceneTreeTween] will become invalid in the next processing "
+"frame after its animation finishes. Calling [method stop] after performing "
+"[method custom_step] instead keeps and resets the [SceneTreeTween]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Returns the total time in seconds the [SceneTreeTween] has been animating (i."
-"e. time since it started, not counting pauses etc.). The time is affected by "
-"[method set_speed_scale] and [method stop] will reset it to [code]0[/code].\n"
+"e. the time since it started, not counting pauses etc.). The time is "
+"affected by [method set_speed_scale], and [method stop] will reset it to "
+"[code]0[/code].\n"
"[b]Note:[/b] As it results from accumulating frame deltas, the time returned "
"after the [SceneTreeTween] has finished animating will be slightly greater "
"than the actual [SceneTreeTween] duration."
@@ -60872,11 +64368,10 @@ msgstr ""
msgid ""
"Returns whether the [SceneTreeTween] is valid. A valid [SceneTreeTween] is a "
"[SceneTreeTween] contained by the scene tree (i.e. the array from [method "
-"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). "
-"[SceneTreeTween] might become invalid when it has finished tweening or was "
-"killed, also when created with [code]Tween.new()[/code]. Invalid "
-"[SceneTreeTween] can't have [Tweener]s appended, because it can't animate "
-"them. You can however still use [method interpolate_value]."
+"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). A "
+"[SceneTreeTween] might become invalid when it has finished tweening, is "
+"killed, or when created with [code]SceneTreeTween.new()[/code]. Invalid "
+"[SceneTreeTween]s can't have [Tweener]s appended."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -60916,16 +64411,15 @@ msgstr ""
msgid ""
"Sets the number of times the tweening sequence will be repeated, i.e. "
"[code]set_loops(2)[/code] will run the animation twice.\n"
-"Calling this method without arguments will make the [SceneTreeTween] run "
-"infinitely, until it is either killed by [method kill] or by freeing bound "
-"node, or all the animated objects have been freed (which makes further "
+"Calling this method without arguments will make the [Tween] run infinitely, "
+"until either it is killed with [method kill], the [Tween]'s bound node is "
+"freed, or all the animated objects have been freed (which makes further "
"animation impossible).\n"
"[b]Warning:[/b] Make sure to always add some duration/delay when using "
-"infinite loops. 0-duration looped animations (e.g. single [CallbackTweener] "
-"with no delay or [PropertyTweener] with invalid node) are equivalent to "
-"infinite [code]while[/code] loops and will freeze your game. If a "
-"[SceneTreeTween]'s lifetime depends on some node, always use [method "
-"bind_node]."
+"infinite loops. To prevent the game freezing, 0-duration looped animations "
+"(e.g. a single [CallbackTweener] with no delay) are stopped after a small "
+"number of loops, which may produce unexpected results. If a [Tween]'s "
+"lifetime depends on some node, always use [method bind_node]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -61002,12 +64496,13 @@ msgstr ""
"[/codeblock]"
#: doc/classes/SceneTreeTween.xml
+#, fuzzy
msgid ""
"Creates and appends an [IntervalTweener]. This method can be used to create "
-"delays in the tween animation, as an alternative for using the delay in "
-"other [Tweener]s or when there's no animation (in which case the "
-"[SceneTreeTween] acts as a timer). [code]time[/code] is the length of the "
-"interval, in seconds.\n"
+"delays in the tween animation, as an alternative to using the delay in other "
+"[Tweener]s, or when there's no animation (in which case the [SceneTreeTween] "
+"acts as a timer). [code]time[/code] is the length of the interval, in "
+"seconds.\n"
"Example: creating an interval in code execution.\n"
"[codeblock]\n"
"# ... some code\n"
@@ -61105,12 +64600,13 @@ msgstr ""
"[/codeblock]"
#: doc/classes/SceneTreeTween.xml
+#, fuzzy
msgid ""
"Creates and appends a [PropertyTweener]. This method tweens a "
"[code]property[/code] of an [code]object[/code] between an initial value and "
"[code]final_val[/code] in a span of time equal to [code]duration[/code], in "
-"seconds. The initial value by default is a value at the time the tweening of "
-"the [PropertyTweener] start. For example:\n"
+"seconds. The initial value by default is the property's value at the time "
+"the tweening of the [PropertyTweener] starts. For example:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"tween.tween_property($Sprite, \"position\", Vector2(100, 200), 1)\n"
@@ -61170,16 +64666,15 @@ msgid ""
"Emitted when the [SceneTreeTween] has finished all tweening. Never emitted "
"when the [SceneTreeTween] is set to infinite looping (see [method "
"set_loops]).\n"
-"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) after this signal "
-"is emitted, but it doesn't happen immediately, but on the next processing "
-"frame. Calling [method stop] inside the signal callback will preserve the "
-"[SceneTreeTween]."
+"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) in the next "
+"processing frame after this signal is emitted. Calling [method stop] inside "
+"the signal callback will prevent the [SceneTreeTween] from being removed."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Emitted when a full loop is complete (see [method set_loops]), providing the "
-"loop index. This signal is not emitted after final loop, use [signal "
+"loop index. This signal is not emitted after the final loop, use [signal "
"finished] instead for this case."
msgstr ""
@@ -61187,7 +64682,7 @@ msgstr ""
msgid ""
"Emitted when one step of the [SceneTreeTween] is complete, providing the "
"step index. One step is either a single [Tweener] or a group of [Tweener]s "
-"running parallelly."
+"running in parallel."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -62576,7 +66071,12 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-msgid "Scale part of the local transformation."
+msgid ""
+"Scale part of the local transformation.\n"
+"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, the scale values will either be all "
+"positive or all negative."
msgstr ""
#: doc/classes/Spatial.xml
@@ -64939,20 +68439,15 @@ msgstr ""
#: doc/classes/String.xml
msgid "Constructs a new String from the given [bool]."
-msgstr ""
-"Construit une nouvelle chaîne de caractères à partir du [bool] (booléen) "
-"donné."
+msgstr "Construit une nouvelle chaîne de caractères à partir du [bool] donné."
#: doc/classes/String.xml
msgid "Constructs a new String from the given [int]."
-msgstr ""
-"Construit une nouvelle chaîne de caractères à partir du [int] (entier) donné."
+msgstr "Construit une nouvelle chaîne de caractères à partir du [int] donné."
#: doc/classes/String.xml
msgid "Constructs a new String from the given [float]."
-msgstr ""
-"Construit une nouvelle chaîne de caractères à partir du [float] (flottant) "
-"donné."
+msgstr "Construit une nouvelle chaîne de caractères à partir du [float] donné."
#: doc/classes/String.xml
msgid "Constructs a new String from the given [Vector2]."
@@ -64971,7 +68466,8 @@ msgstr ""
#: doc/classes/String.xml
msgid "Constructs a new String from the given [Transform2D]."
msgstr ""
-"Construit une nouvelle chaîne de caractères à partir du [Transform2D] donné."
+"Construit une nouvelle chaîne de caractères à partir de la [Transform2D] "
+"donnée."
#: doc/classes/String.xml
msgid "Constructs a new String from the given [Plane]."
@@ -64987,7 +68483,8 @@ msgstr "Construit une nouvelle chaîne de caractères à partir du [AABB] donné
#: doc/classes/String.xml
msgid "Constructs a new String from the given [Basis]."
-msgstr "Construit une nouvelle chaîne de caractères à partir du [Basis] donné."
+msgstr ""
+"Construit une nouvelle chaîne de caractères à partir de la [Basis] donnée."
#: doc/classes/String.xml
msgid "Constructs a new String from the given [Transform]."
@@ -64998,14 +68495,12 @@ msgstr ""
#: doc/classes/String.xml
msgid "Constructs a new String from the given [Color]."
msgstr ""
-"Construit une nouvelle chaîne de caractères à partir de la [Color] (couleur) "
-"donnée."
+"Construit une nouvelle chaîne de caractères à partir de la [Color] donnée."
#: doc/classes/String.xml
msgid "Constructs a new String from the given [NodePath]."
msgstr ""
-"Construit une nouvelle chaîne de caractères à partir du [NodePath] (chemin "
-"du nœud) donné."
+"Construit une nouvelle chaîne de caractères à partir du [NodePath] donné."
#: doc/classes/String.xml
msgid "Constructs a new String from the given [RID]."
@@ -65014,8 +68509,7 @@ msgstr "Construit une nouvelle chaîne de caractères à partir du [RID] donné.
#: doc/classes/String.xml
msgid "Constructs a new String from the given [Dictionary]."
msgstr ""
-"Construit une nouvelle chaîne de caractères à partir du [Dictionary]"
-"(dictionaire) donné."
+"Construit une nouvelle chaîne de caractères à partir du [Dictionary] donné."
#: doc/classes/String.xml
msgid "Constructs a new String from the given [Array]."
@@ -65451,11 +68945,11 @@ msgstr ""
msgid ""
"Returns [code]true[/code] if this string contains a valid integer.\n"
"[codeblock]\n"
-"print(\"7\".is_valid_int()) # Prints \"True\"\n"
-"print(\"14.6\".is_valid_int()) # Prints \"False\"\n"
-"print(\"L\".is_valid_int()) # Prints \"False\"\n"
-"print(\"+3\".is_valid_int()) # Prints \"True\"\n"
-"print(\"-12\".is_valid_int()) # Prints \"True\"\n"
+"print(\"7\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"14.6\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"L\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"+3\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"-12\".is_valid_integer()) # Prints \"True\"\n"
"[/codeblock]"
msgstr ""
@@ -68236,7 +71730,7 @@ msgid ""
"way to render them in a hardware-accelerated manner."
msgstr ""
"Les [TextureArray] stockent un tableau de plusieurs [Image] dans une seule "
-"[Texture] de base. Chaque claque de ce tableau de textures génère ses "
+"[Texture] de base. Chaque calque de ce tableau de textures génère ses "
"propres mipmaps. C'est une bonne alternative pour les atlas de textures. "
"Voir aussi [Texture3D].\n"
"Les [TextureArray] doivent être affichés avec des shaders. Après "
@@ -69447,6 +72941,11 @@ msgstr ""
#: doc/classes/TileMap.xml
#, fuzzy
+msgid "If [code]true[/code], this TileMap bakes a navigation region."
+msgstr "Si [code]true[/code], l'animation nommée existe."
+
+#: doc/classes/TileMap.xml
+#, fuzzy
msgid "If [code]true[/code], the cell's UVs will be clipped."
msgstr "Si [code]true[/code], les UV de la cellule seront limités."
@@ -69562,6 +73061,10 @@ msgstr ""
"possibles."
#: doc/classes/TileMap.xml
+msgid "The navigation layers the TileMap generates its navigation regions in."
+msgstr ""
+
+#: doc/classes/TileMap.xml
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 "
@@ -69893,7 +73396,7 @@ msgstr "Retourne le [enum TileMode] de la tuile."
#: doc/classes/TileSet.xml
msgid "Returns the tile's Z index (drawing layer)."
-msgstr "Retourne l'index selon Z (le claque d'affichage) de la tuile."
+msgstr "Retourne l'index selon Z (le calque d'affichage) de la tuile."
#: doc/classes/TileSet.xml
msgid "Sets a light occluder for the tile."
@@ -70779,10 +74282,13 @@ msgstr ""
#: doc/classes/Transform2D.xml
msgid ""
"Returns a copy of the transform scaled by the given [code]scale[/code] "
-"factor, using matrix multiplication."
+"factor, using matrix multiplication.\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
-"Retourne une copie de la transformation mise à jour l'échelle par le facteur "
-"[code]scale[/code] spécifié, en utilisant la multiplication matricielle."
#: doc/classes/Transform2D.xml
msgid ""
@@ -70927,6 +74433,7 @@ msgid "Control to show a tree of items."
msgstr "Un contrôle pour afficher l'arborescence d'éléments."
#: doc/classes/Tree.xml
+#, fuzzy
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, "
@@ -70948,7 +74455,18 @@ msgid ""
"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]."
+"to remove it from the [Tree].\n"
+"[b]Incremental search:[/b] Like [ItemList] and [PopupMenu], [Tree] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
"Ça affiche une arborescence d'éléments qui peuvent être sélectionnés, "
"développés ou réduits. Cette arborescence peut avoir plusieurs colonnes avec "
@@ -73205,10 +76723,11 @@ msgid "3Blue1Brown Essence of Linear Algebra"
msgstr "3Blue1Brown Essence of Linear Algebra"
#: doc/classes/Vector2.xml
-#, fuzzy
msgid ""
"Constructs a new Vector2 from the given [code]x[/code] and [code]y[/code]."
-msgstr "Construit une nouvelle chaîne de caractères à partir du [Plane] donné."
+msgstr ""
+"Construit un nouvel Vector2 à partir des [code]x[/code] et [code]y[/code] "
+"donnés."
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
msgid ""
@@ -74394,13 +77913,12 @@ msgid ""
msgstr ""
#: doc/classes/Viewport.xml
-#, fuzzy
msgid ""
"If [code]true[/code], the viewport will use a unique copy of the [World] "
"defined in [member world]."
msgstr ""
-"Si [code]true[/code], la fenêtre d'affichage utilisera le [World] défini par "
-"la propriété [code]world[/code]."
+"Si [code]true[/code], la fenêtre d'affichage utilisera une copie du [World] "
+"défini dans la propriété [member world]."
#: doc/classes/Viewport.xml
msgid ""
@@ -74866,11 +78384,14 @@ msgid "This enabler will stop [Particles2D] nodes."
msgstr "Cet activateur arrêtera les nœuds [Particles2D]."
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _process function."
+#, fuzzy
+msgid "This enabler will stop the parent's [method Node._process] function."
msgstr "Cet activateur arrêtera la fonction _process du parent."
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _physics_process function."
+#, fuzzy
+msgid ""
+"This enabler will stop the parent's [method Node._physics_process] function."
msgstr "Cet activateur arrêtera la fonction _physics_process du parent."
#: doc/classes/VisibilityEnabler2D.xml
@@ -74915,6 +78436,16 @@ msgid "The VisibilityNotifier's bounding box."
msgstr "Le rectangle du VisibilityNotifier."
#: doc/classes/VisibilityNotifier.xml
+msgid ""
+"In addition to checking whether a node is on screen or within a [Camera]'s "
+"view, VisibilityNotifier can also optionally check whether a node is within "
+"a specified maximum distance when using a [Camera] with perspective "
+"projection. This is useful for throttling the performance requirements of "
+"nodes that are far away.\n"
+"[b]Note:[/b] This feature will be disabled if set to 0.0."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier.xml
#, fuzzy
msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view."
msgstr ""
@@ -75034,7 +78565,7 @@ msgstr ""
#: doc/classes/VisualInstance.xml
msgid "Enables a particular layer in [member layers]."
-msgstr "Active un claque spécifique dans [member layers]."
+msgstr "Active un calque spécifique dans [member layers]."
#: doc/classes/VisualInstance.xml
msgid ""
@@ -76932,9 +80463,7 @@ msgstr ""
"RID qui est retourné. Ce RID peut être utilisé dans la plupart des fonctions "
"[code]camera_*[/code] VisualServer.\n"
"Une fois terminé avec votre RID, vous voudrez libérer le RID à l’aide de la "
-"méthode statique [method free_rid] du VisualServer.\n"
-"Pour placer dans une scène, attachez cette caméra à une instance en "
-"utilisant la [method instance_set_base] utilisant le RID retourné."
+"méthode statique [method free_rid] du VisualServer."
#: doc/classes/VisualServer.xml
msgid ""
@@ -77199,9 +80728,7 @@ msgstr ""
"consulté avec le RID qui est retourné. Ce RID peut être utilisé dans la "
"plupart des fonctions [code]canvas_light_*[/code] VisualServer.\n"
"Une fois terminé avec votre RID, vous voudrez libérer le RID à l’aide de la "
-"méthode statique [method free_rid] du VisualServer.\n"
-"Pour placer dans une scène, attachez ce canevas de lumière à une instance en "
-"utilisant la [method instance_set_base] utilisant le RID retourné."
+"méthode statique [method free_rid] du VisualServer."
#: doc/classes/VisualServer.xml
msgid ""
@@ -77222,9 +80749,7 @@ msgstr ""
"consulté avec le RID qui est retourné. Ce RID peut être utilisé dans la "
"plupart des fonctions [code]canvas_light_ocluder_*[/code] VisualServer.\n"
"Une fois terminé avec votre RID, vous voudrez libérer le RID à l’aide de la "
-"méthode statique [method free_rid] du VisualServer.\n"
-"Pour placer dans une scène, attachez ce occulteur de lumière à une instance "
-"en utilisant la [method instance_set_base] utilisant le RID retourné."
+"méthode statique [method free_rid] du VisualServer."
#: doc/classes/VisualServer.xml
msgid "Enables or disables light occluder."
@@ -77406,9 +80931,7 @@ msgstr ""
"avec le RID qui est retourné. Ce RID peut être utilisé dans la plupart des "
"fonctions [code]environment_*[/code] VisualServer.\n"
"Une fois terminé avec votre RID, vous voudrez libérer le RID à l’aide de la "
-"méthode statique [method free_rid] du VisualServer.\n"
-"Pour placer dans une scène, attachez cet environnement à une instance en "
-"utilisant la [method instance_set_base] utilisant le RID retourné."
+"méthode statique [method free_rid] du VisualServer."
#: doc/classes/VisualServer.xml
msgid ""
@@ -77441,7 +80964,7 @@ msgstr "Définit l'intensité de la couleur de l'arrière-plan."
#: doc/classes/VisualServer.xml
msgid "Sets the maximum layer to use if using Canvas background mode."
msgstr ""
-"Définit le claque maximal à utiliser si l'arrière-plan utilise un canevas."
+"Définit le calque maximal à utiliser si l'arrière-plan utilise un canevas."
#: doc/classes/VisualServer.xml
msgid ""
@@ -78235,9 +81758,7 @@ msgstr ""
"avec le RID qui est retourné. Ce RID peut être utilisé dans la plupart des "
"fonctions [code]material_*[/code] VisualServer.\n"
"Une fois terminé avec votre RID, vous voudrez libérer le RID à l’aide de la "
-"méthode statique [method free_rid] du VisualServer.\n"
-"Pour placer dans une scène, attachez cette lumière spot à une instance en "
-"utilisant la [method instance_set_base] utilisant le RID retourné."
+"méthode statique [method free_rid] du VisualServer."
#: doc/classes/VisualServer.xml
msgid "Returns the value of a certain material's parameter."
@@ -78937,9 +82458,7 @@ msgstr ""
"le RID qui est retourné. Ce RID peut être utilisé dans la plupart des "
"fonctions [code]shader_*[/code] VisualServer.\n"
"Une fois terminé avec votre RID, vous voudrez libérer le RID à l’aide de la "
-"méthode statique [method free_rid] du VisualServer.\n"
-"Pour placer dans une scène, attachez ce shader vide à une instance en "
-"utilisant la [method instance_set_base] utilisant le RID retourné."
+"méthode statique [method free_rid] du VisualServer."
#: doc/classes/VisualServer.xml
#, fuzzy
@@ -78997,9 +82516,7 @@ msgstr ""
"RID qui est retourné. Ce RID peut être utilisé dans la plupart des fonctions "
"[code]skeleton_*[/code] VisualServer.\n"
"Une fois terminé avec votre RID, vous voudrez libérer le RID à l’aide de la "
-"méthode statique [method free_rid] du VisualServer.\n"
-"Pour placer dans une scène, attachez ce squelette à une instance en "
-"utilisant la [method instance_set_base] utilisant le RID retourné."
+"méthode statique [method free_rid] du VisualServer."
#: doc/classes/VisualServer.xml
msgid "Returns the number of bones allocated for this skeleton."
@@ -79017,9 +82534,7 @@ msgstr ""
"RID qui est retourné. Ce RID peut être utilisé dans la plupart des fonctions "
"[code]sky_*[/code] VisualServer.\n"
"Une fois terminé avec votre RID, vous voudrez libérer le RID à l’aide de la "
-"méthode statique [method free_rid] du VisualServer.\n"
-"Pour placer dans une scène, attachez ce ciel vide à une instance en "
-"utilisant la [method instance_set_base] utilisant le RID retourné."
+"méthode statique [method free_rid] du VisualServer."
#: doc/classes/VisualServer.xml
msgid "Sets a sky's texture."
@@ -79065,9 +82580,7 @@ msgstr ""
"avec le RID qui est retourné. Ce RID peut être utilisé dans la plupart des "
"fonctions [code]texture_*[/code] VisualServer.\n"
"Une fois terminé avec votre RID, vous voudrez libérer le RID à l’aide de la "
-"méthode statique [method free_rid] du VisualServer.\n"
-"Pour placer dans une scène, attachez cette texture vide à une instance en "
-"utilisant la [method instance_set_base] utilisant le RID retourné."
+"méthode statique [method free_rid] du VisualServer."
#: doc/classes/VisualServer.xml
msgid ""
@@ -79498,15 +83011,16 @@ msgid "Number of weights/bones per vertex."
msgstr "Nombre de poids / os par sommet."
#: doc/classes/VisualServer.xml
+#, fuzzy
msgid "The minimum Z-layer for canvas items."
msgstr ""
-"Le niveau minimal du claque de profondeur pour les éléments de canevas."
+"Le niveau minimal du calque de profondeur pour les éléments de canevas."
#: doc/classes/VisualServer.xml
#, fuzzy
msgid "The maximum Z-layer for canvas items."
msgstr ""
-"Le niveau maximal du claque de profondeur pour les éléments de canevas."
+"Le niveau maximal du calque de profondeur pour les éléments de canevas."
#: doc/classes/VisualServer.xml
msgid ""
@@ -80177,6 +83691,16 @@ msgid "The amount of shader rebinds in the frame."
msgstr "Le nombre de shaders reconnectés dans cette trame."
#: doc/classes/VisualServer.xml
+msgid ""
+"The peak amount of shaders that have been under compilation in the frame.\n"
+"This is useful to know when asynchronous shader compilation has finished for "
+"the current shaders on screen.\n"
+"[b]Note:[/b] For complete certainty, only assume there are no outstanding "
+"compilations when this value is zero for at least two frames in a row.\n"
+"Unimplemented in the GLES2 rendering backend, always returns 0."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
msgid "The amount of surface changes in the frame."
msgstr "Le nombre de changements de surface dans la trame."
@@ -83724,8 +87248,8 @@ msgstr ""
#: doc/classes/World.xml
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."
+"scenario, a navigation map and a sound space. Spatial nodes register their "
+"resources into the current world."
msgstr ""
#: doc/classes/World.xml
@@ -83740,11 +87264,17 @@ msgstr "L'[Environment] du World."
#: doc/classes/World.xml
msgid ""
-"The World's fallback_environment will be used if the World's [Environment] "
-"fails or is missing."
+"The World's fallback environment will be used if [member environment] fails "
+"or is missing."
msgstr ""
#: doc/classes/World.xml
+#, fuzzy
+msgid ""
+"The [RID] of this world's navigation map. Used by the [NavigationServer]."
+msgstr "Retourne le [RID] de la énième forme d'une zone."
+
+#: doc/classes/World.xml
msgid "The World's visual scenario."
msgstr "Le scénario visuel du World."
@@ -83754,13 +87284,13 @@ msgstr "L’espace physique du World."
#: doc/classes/World2D.xml
msgid "Class that has everything pertaining to a 2D world."
-msgstr ""
+msgstr "La classe pour tout ce qui est en rapport avec le monde 2D."
#: doc/classes/World2D.xml
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."
+"visual scenario, a navigation map and a sound space. 2D nodes register their "
+"resources into the current 2D world."
msgstr ""
#: doc/classes/World2D.xml
@@ -83777,6 +87307,12 @@ msgid ""
msgstr ""
#: doc/classes/World2D.xml
+#, fuzzy
+msgid ""
+"The [RID] of this world's navigation map. Used by the [Navigation2DServer]."
+msgstr "Retourne le [RID] de la énième forme d'une zone."
+
+#: doc/classes/World2D.xml
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."
@@ -83787,6 +87323,8 @@ msgid ""
"Default environment properties for the entire scene (post-processing "
"effects, lighting and background settings)."
msgstr ""
+"Les propriétés par défaut de l'environnement de toute la scène (effets de "
+"post-processing, éclairage et réglages de l'arrière-plan)."
#: doc/classes/WorldEnvironment.xml
msgid ""
diff --git a/doc/translations/gl.po b/doc/translations/gl.po
index 15aec4b4e1..39d5ab2f2b 100644
--- a/doc/translations/gl.po
+++ b/doc/translations/gl.po
@@ -348,7 +348,7 @@ msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
msgid ""
"Compares two values by checking their actual contents, recursing into any "
-"`Array` or `Dictionary` up to its deepest level.\n"
+"[Array] or [Dictionary] up to its deepest level.\n"
"This compares to [code]==[/code] in a number of ways:\n"
"- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/"
"code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] "
@@ -395,7 +395,7 @@ msgid ""
"- 1.0: Linear\n"
"- Greater than 1.0 (exclusive): Ease in\n"
"[/codeblock]\n"
-"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.4/img/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/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]."
@@ -1102,7 +1102,7 @@ msgid ""
"[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/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/img/"
"smoothstep_ease_comparison.png]Comparison between smoothstep() and ease(x, "
"-1.6521) return values[/url]"
msgstr ""
@@ -3380,6 +3380,12 @@ msgstr ""
#: doc/classes/@GlobalScope.xml
msgid ""
+"Hints that an integer property is a bitmask using the optionally named 2D "
+"navigation layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml
+msgid ""
"Hints that an integer property is a bitmask using the optionally named 3D "
"render layers."
msgstr ""
@@ -3392,6 +3398,12 @@ msgstr ""
#: doc/classes/@GlobalScope.xml
msgid ""
+"Hints that an integer property is a bitmask using the optionally named 3D "
+"navigation layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml
+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]."
@@ -8367,7 +8379,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/AStar.xml
+#: doc/classes/AStar.xml doc/classes/AStar2D.xml
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[/"
@@ -8566,7 +8578,10 @@ msgid ""
msgstr ""
#: doc/classes/AStar2D.xml
-msgid "Returns whether there is a connection/segment between the given points."
+msgid ""
+"Returns whether there is a connection/segment between the given points. 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/AStar2D.xml
@@ -8583,10 +8598,6 @@ msgid ""
msgstr ""
#: doc/classes/AStar2D.xml
-msgid "Deletes the segment between the given points."
-msgstr ""
-
-#: doc/classes/AStar2D.xml
msgid ""
"Returns the closest position to [code]to_position[/code] that resides inside "
"a segment between two connected points.\n"
@@ -8771,7 +8782,9 @@ msgid ""
"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."
+"transmit audio over the network. When capturing audio data from a "
+"microphone, the format of the samples will be stereo 32-bit floating point "
+"PCM."
msgstr ""
#: doc/classes/AudioEffectCapture.xml
@@ -13614,7 +13627,7 @@ msgid ""
msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
-#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/Navigation2D.xml
msgid "Returns the object's [RID]."
msgstr ""
@@ -19089,11 +19102,14 @@ msgid ""
msgstr ""
#: doc/classes/CurveTexture.xml
-msgid "The [code]curve[/code] rendered onto the texture."
+msgid "The [Curve] that is rendered onto the texture."
msgstr ""
#: doc/classes/CurveTexture.xml
-msgid "The width of the texture."
+msgid ""
+"The width of the texture (in pixels). Higher values make it possible to "
+"represent high-frequency data better (such as sudden direction changes), at "
+"the cost of increased generation time and memory usage."
msgstr ""
#: doc/classes/CylinderMesh.xml
@@ -19379,6 +19395,13 @@ msgid "Returns the list of keys in the [Dictionary]."
msgstr ""
#: doc/classes/Dictionary.xml
+msgid ""
+"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, "
+"duplicate keys will not be copied over, unless [code]overwrite[/code] is "
+"[code]true[/code]."
+msgstr ""
+
+#: doc/classes/Dictionary.xml
msgid "Returns the number of keys in the dictionary."
msgstr ""
@@ -21317,9 +21340,23 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide a state data you want to be saved, like view "
+"position, grid settings, folding, etc. 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). This data is automatically saved for "
+"each scene in an [code]editstate[/code] file in the editor metadata folder. "
+"If you want to store global (scene-independent) editor data for your plugin, "
+"you can use [method get_window_layout] instead.\n"
+"Use [method set_state] to restore your saved state.\n"
+"[b]Note:[/b] This method should not be used to save important settings that "
+"should persist with the project.\n"
+"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be "
+"stored and restored correctly.\n"
+"[codeblock]\n"
+"func get_state():\n"
+" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n"
+" return state\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -21330,9 +21367,18 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide the GUI layout of the plugin or any other "
+"data you want to be stored. 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). The data is stored in the "
+"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n"
+"Use [method set_window_layout] to restore your saved layout.\n"
+"[codeblock]\n"
+"func get_window_layout(configuration):\n"
+" configuration.set_value(\"MyPlugin\", \"window_position\", $Window."
+"position)\n"
+" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -21445,11 +21491,30 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the state saved by [method get_state]."
+msgid ""
+"Restore the state saved by [method get_state]. This method is called when "
+"the current scene tab is changed in the editor.\n"
+"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise "
+"it will not be recognized and this method will not be called.\n"
+"[codeblock]\n"
+"func set_state(data):\n"
+" zoom = data.get(\"zoom\", 1.0)\n"
+" preferred_color = data.get(\"my_color\", Color.white)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the plugin GUI layout saved by [method get_window_layout]."
+msgid ""
+"Restore the plugin GUI layout and data saved by [method get_window_layout]. "
+"This method is called for every plugin on editor startup. Use the provided "
+"[code]configuration[/code] file to read your saved data.\n"
+"[codeblock]\n"
+"func set_window_layout(configuration):\n"
+" $Window.position = configuration.get_value(\"MyPlugin\", "
+"\"window_position\", Vector2())\n"
+" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", "
+"Color.white)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -26084,7 +26149,8 @@ msgid ""
"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])."
+"at fixed steps (see [member width]). See also [GradientTexture2D] and "
+"[CurveTexture]."
msgstr ""
#: doc/classes/GradientTexture.xml
@@ -26106,7 +26172,8 @@ msgid ""
"repeat] types using colors obtained from the gradient. 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] and [member height])."
+"[member width] and [member height]). See also [GradientTexture] and "
+"[CurveTexture]."
msgstr ""
#: doc/classes/GradientTexture2D.xml
@@ -26912,6 +26979,12 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+msgid ""
+"If [code]true[/code], this GridMap uses cell navmesh resources to create "
+"navigation regions."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid "If [code]true[/code], grid items are centered on the X axis."
msgstr ""
@@ -26962,6 +27035,10 @@ msgid "The assigned [MeshLibrary]."
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+msgid "The navigation layers the GridMap generates its navigation regions in."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
"Overrides the default friction and bounce physics properties for the whole "
"[GridMap]."
@@ -28185,7 +28262,7 @@ msgid ""
" # 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 body = to_json({\"name\": \"Godette\"})\n"
" error = http_request.request(\"https://httpbin.org/post\", [], true, "
"HTTPClient.METHOD_POST, body)\n"
" if error != OK:\n"
@@ -29352,7 +29429,7 @@ msgstr ""
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 "
+"([member 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 "
@@ -29501,10 +29578,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Returns the mouse mode. See the constants for more information."
-msgstr ""
-
-#: doc/classes/Input.xml
msgid ""
"Gets an input vector by specifying four actions for the positive and "
"negative X and Y axes.\n"
@@ -29698,24 +29771,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Sets the mouse mode. See the constants for more information."
-msgstr ""
-
-#: doc/classes/Input.xml
-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
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 "
@@ -29751,6 +29806,24 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
+msgid "Controls the mouse mode. See [enum MouseMode] for more information."
+msgstr ""
+
+#: doc/classes/Input.xml
+msgid ""
+"If [code]true[/code], similar input events sent by the operating system are "
+"accumulated. 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 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
msgid "Emitted when a joypad device has been connected or disconnected."
msgstr ""
@@ -30058,8 +30131,8 @@ msgstr ""
#: doc/classes/InputEventJoypadButton.xml
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]."
+"Represents the pressure the user puts on the button with their finger, if "
+"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]."
msgstr ""
#: doc/classes/InputEventJoypadMotion.xml
@@ -30322,9 +30395,9 @@ 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 "
+"at most. If you need more precise input reporting, set [member Input."
+"use_accumulated_input] to [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."
@@ -30811,7 +30884,18 @@ msgid ""
"[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."
+"fixed_column_width] greater than zero to wrap the text.\n"
+"[b]Incremental search:[/b] Like [PopupMenu] and [Tree], [ItemList] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/ItemList.xml
@@ -34558,11 +34642,16 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Returns the override [Material] for a surface of the [Mesh] resource.\n"
+"[b]Note:[/b] This function only returns [i]override[/i] materials associated "
+"with this [MeshInstance]. Consider using [method get_active_material] or "
+"[method Mesh.surface_get_material] to get materials associated with the "
+"[Mesh] resource."
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the number of surface materials."
+msgid "Returns the number of surface override materials."
msgstr ""
#: doc/classes/MeshInstance.xml
@@ -34599,7 +34688,10 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Sets the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Sets the override [Material] for the specified surface of the [Mesh] "
+"resource. This material is associated with this [MeshInstance] rather than "
+"with the [Mesh] resource."
msgstr ""
#: doc/classes/MeshInstance.xml
@@ -34630,9 +34722,10 @@ msgstr ""
#: doc/classes/MeshInstance2D.xml
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\"."
+"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be "
+"automatically created from an existing [Sprite] via a tool in the editor "
+"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to "
+"MeshInstance2D[/b] at the top of the 2D editor viewport."
msgstr ""
#: doc/classes/MeshInstance2D.xml
@@ -35390,6 +35483,9 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"Provides navigation and pathfinding within a collection of "
"[NavigationMesh]es. By default, these will be automatically collected from "
"child [NavigationMeshInstance] nodes. In addition to basic pathfinding, this "
@@ -35430,7 +35526,14 @@ msgid ""
msgstr ""
#: doc/classes/Navigation.xml
+msgid "Returns the [RID] of the navigation map on the [NavigationServer]."
+msgstr ""
+
+#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"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, "
@@ -35452,16 +35555,31 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation.get_simple_path] path query."
+msgstr ""
+
+#: doc/classes/Navigation.xml
+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/Navigation.xml doc/classes/Navigation2DServer.xml
+#: doc/classes/NavigationServer.xml
+msgid ""
+"Emitted when a navigation map is updated, when a region moves or is modified."
+msgstr ""
+
#: doc/classes/Navigation2D.xml
msgid "2D navigation and pathfinding node."
msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -35481,6 +35599,9 @@ msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -35490,6 +35611,12 @@ msgstr ""
msgid "The XY plane cell size to use for fields."
msgstr ""
+#: doc/classes/Navigation2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation2D.get_simple_path] path query."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml
msgid "Server interface for low-level 2D navigation access."
msgstr ""
@@ -35506,8 +35633,12 @@ msgid ""
"through scripts.\n"
"For two regions to be connected to each other, they must share a similar "
"edge. An edge is considered connected to another if both of its two vertices "
-"are at a distance less than [member Navigation.edge_connection_margin] to "
-"the respective other edge's vertex.\n"
+"are at a distance less than navigation map [code]edge_connection_margin[/"
+"code] to the respective other edge's vertex.\n"
+"You may assign navigation layers to regions with [method Navigation2DServer."
+"region_set_navigation_layers], which then can be checked upon when "
+"requesting a path with [method Navigation2DServer.map_get_path]. This allows "
+"allowing or forbidding some areas to 2D objects.\n"
"To use the collision avoidance system, you may use agents. You can set an "
"agent's target velocity, then the servers will emit a callback with a "
"modified velocity.\n"
@@ -35535,7 +35666,17 @@ msgid "Returns [code]true[/code] if the map got changed the previous frame."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Callback called at the end of the RVO process."
+msgid ""
+"Callback called at the end of the RVO process. If a callback is created "
+"manually and the agent is placed on a navigation map it will calculate "
+"avoidance for the agent and dispatch the calculated [code]safe_velocity[/"
+"code] to the [code]receiver[/code] object with a signal to the chosen "
+"[code]method[/code] name.\n"
+"[b]Note:[/b] Created callbacks are always processed independently of the "
+"SceneTree state as long as the agent is on a navigation map and not freed. "
+"To disable the dispatch of a callback from an agent use [method "
+"agent_set_callback] again with a [code]null[/code] object as the "
+"[code]receiver[/code]."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -35590,15 +35731,55 @@ msgid "Destroys the given RID."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns all created navigation map [RID]s on the NavigationServer. This "
+"returns both 2D and 3D created navigation maps as there is technically no "
+"distinction between them."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Create a new map."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"This function immediately forces synchronization of the specified navigation "
+"[code]map[/code] [RID]. By default navigation maps are only synchronized at "
+"the end of each physics frame. This function can be used to immediately "
+"(re)calculate all the navigation meshes and region connections of the "
+"navigation map. This makes it possible to query a navigation path for a "
+"changed map immediately and in the same frame (multiple times if needed).\n"
+"Due to technical restrictions the current NavigationServer command queue "
+"will be flushed. This means all already queued update commands for this "
+"physics frame will be executed, even those intended for other maps, regions "
+"and agents not part of the specified map. The expensive computation of the "
+"navigation meshes and region connections of a map will only be done for the "
+"specified map. Other maps will receive the normal synchronization at the end "
+"of the physics frame. Should the specified map receive changes after the "
+"forced update it will update again as well when the other maps receive their "
+"update.\n"
+"Avoidance processing and dispatch of the [code]safe_velocity[/code] signals "
+"is untouched by this function and continues to happen for all maps and "
+"agents at the end of the physics frame.\n"
+"[b]Note:[/b] With great power comes great responsibility. This function "
+"should only be used by users that really know what they are doing and have a "
+"good reason for it. Forcing an immediate update of a navigation map requires "
+"locking the NavigationServer and flushing the entire NavigationServer "
+"command queue. Not only can this severely impact the performance of a game "
+"but it can also introduce bugs if used inappropriately without much "
+"foresight."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns all navigation agents [RID]s that are currently assigned to the "
"requested navigation [code]map[/code]."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Returns the map cell size."
msgstr ""
@@ -35622,7 +35803,10 @@ msgid ""
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Returns the navigation path to reach the destination from the origin."
+msgid ""
+"Returns the navigation path to reach the destination from the origin. "
+"[code]navigation_layers[/code] is a bitmask of all region layers that are "
+"allowed to be in the path."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -35639,6 +35823,12 @@ msgstr ""
msgid "Sets the map active."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/"
+"b] Currently not implemented."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Set the map cell size used to weld the navigation mesh polygons."
msgstr ""
@@ -35654,14 +35844,73 @@ msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"Returns the ending point of a connection door. [code]connection[/code] is an "
+"index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns the starting point of a connection door. [code]connection[/code] is "
+"an index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns how many connections this [code]region[/code] has with other regions "
+"in the map."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns the navigation map [RID] the requested [code]region[/code] is "
"currently assigned to."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Returns the region's navigation layers."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns [code]true[/code] if the provided [code]point[/code] in world space "
+"is currently owned by the provided navigation [code]region[/code]. Owned in "
+"this context means that one of the region's navigation mesh polygon faces "
+"has a possible position at the closest distance to this point compared to "
+"all other navigation meshes from other navigation regions that are also "
+"registered on the navigation map of the provided region.\n"
+"If multiple navigation meshes have positions at equal distance the "
+"navigation region whose polygons are processed first wins the ownership. "
+"Polygons are processed in the same order that navigation regions were "
+"registered on the NavigationServer.\n"
+"[b]Note:[/b] If navigation meshes from different navigation regions overlap "
+"(which should be avoided in general) the result might not be what is "
+"expected."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Sets the map for the region."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method Navigation2DServer.map_get_path])."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Sets the navigation mesh for the region."
msgstr ""
@@ -35670,6 +35919,10 @@ msgstr ""
msgid "Sets the global transformation for the region."
msgstr ""
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]."
+msgstr ""
+
#: doc/classes/NavigationAgent.xml
msgid "3D agent used in navigation for collision avoidance."
msgstr ""
@@ -35679,9 +35932,16 @@ msgid ""
"3D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationAgent] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World] navigation map. If this node is a child of a [Navigation] "
+"node it will register to the navigation map of the navigation node or the "
+"function [method set_navigation] can be used to set the navigation node "
+"directly. [NavigationAgent] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -35699,7 +35959,15 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-msgid "Returns the path from start to finish in global coordinates."
+msgid ""
+"Returns this agent's current path from start to finish in global "
+"coordinates. The path only updates when the target location is changed or "
+"the agent requires a repath. The path array is not intended to be used in "
+"direct path movement as the agent has its own internal path logic that would "
+"get corrupted by changing the path array manually. Use the intended [method "
+"get_next_location] once every physics frame to receive the next path point "
+"for the agents movement as this function also updates the internal path "
+"logic."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -35714,11 +35982,24 @@ msgid ""
"system."
msgstr ""
-#: doc/classes/NavigationAgent.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"Returns a [Vector3] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the origin of the agent's parent."
+"Returns the [RID] of the navigation map for this NavigationAgent node. This "
+"function returns always the map set on the NavigationAgent node and not the "
+"map of the abstract agent on the NavigationServer. If the agent map is "
+"changed directly with the NavigationServer API the NavigationAgent node will "
+"not be aware of the map change. Use [method set_navigation_map] to change "
+"the navigation map for the NavigationAgent and also update the agent on the "
+"NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
+"Returns the next location in global coordinates that can be moved to, making "
+"sure that there are no static objects in the way. If the agent does not have "
+"a navigation path, it will return the position of the agent's parent. The "
+"use of this function once every physics frame is required to update the "
+"internal path logic of the NavigationAgent."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -35759,6 +36040,12 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"Sets the [RID] of the navigation map this NavigationAgent node should use "
+"and also updates the [code]agent[/code] on the NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"Sets the user desired final location. This will clear the current navigation "
"path."
msgstr ""
@@ -35771,7 +36058,13 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml
-msgid "The agent height offset to match the navigation mesh height."
+msgid ""
+"The NavigationAgent height offset is subtracted from the y-axis value of any "
+"vector path position for this NavigationAgent. The NavigationAgent height "
+"offset does not change or influence the navigation mesh or pathfinding query "
+"result. Additional navigation maps that use regions with navigation meshes "
+"that the developer baked with appropriate agent radius or height values are "
+"required to support different-sized agents."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -35798,26 +36091,53 @@ msgstr ""
msgid "The maximum speed that an agent can move."
msgstr ""
+#: doc/classes/NavigationAgent.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "The distance to search for other agents."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"The distance threshold before a path point is considered to be reached. This "
+"will allow an agent to not have to hit a path point on the path exactly, but "
+"in the area. If this value is set to high the NavigationAgent will skip "
+"points on the path which can lead to leaving the navigation mesh. If this "
+"value is set to low the NavigationAgent will be stuck in a repath loop cause "
+"it will constantly overshoot or undershoot the distance to the next point on "
+"each physics frame update."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"The maximum distance the agent is allowed away from the ideal path to the "
"final location. This can happen due to trying to avoid collisions. When the "
"maximum distance is exceeded, it recalculates the ideal path."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-msgid "The radius of the agent."
+msgid ""
+"The radius of the avoidance agent. This is the \"body\" of the avoidance "
+"agent and not the avoidance maneuver starting radius (which is controlled by "
+"[member neighbor_dist]).\n"
+"Does not affect normal pathfinding. To change an actor's pathfinding radius "
+"bake [NavigationMesh] resources with a different [member NavigationMesh."
+"agent_radius] property and use different navigation maps for each actor size."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"The distance threshold before a target is considered to be reached. This "
-"will allow an agent to not have to hit a point on the path exactly, but in "
-"the area."
+"The distance threshold before the final target point is considered to be "
+"reached. This will allow an agent to not have to hit the point of the final "
+"target exactly, but only the area. If this value is set to low the "
+"NavigationAgent will be stuck in a repath loop cause it will constantly "
+"overshoot or undershoot the distance to the final target point on each "
+"physics frame update."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -35860,9 +36180,16 @@ msgid ""
"2D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationAgent2D] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World2D] navigation map. If this node is a child of a "
+"[Navigation2D] node it will register to the navigation map of the navigation "
+"node or the function [method set_navigation] can be used to set the "
+"navigation node directly. [NavigationAgent2D] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent2D.xml
@@ -35878,13 +36205,6 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent2D.xml
-msgid ""
-"Returns a [Vector2] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the position of the agent's parent."
-msgstr ""
-
-#: doc/classes/NavigationAgent2D.xml
msgid "Returns the [RID] of this agent on the [Navigation2DServer]."
msgstr ""
@@ -35904,6 +36224,13 @@ msgid ""
"only be enabled on agents that currently require it."
msgstr ""
+#: doc/classes/NavigationAgent2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent2D] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationMesh.xml
msgid "A mesh to approximate the walkable areas and obstacles."
msgstr ""
@@ -35934,8 +36261,8 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
-"Returns whether the specified [code]bit[/code] of the [member geometry/"
-"collision_mask] is set."
+"Returns whether the specified [code]bit[/code] of the [member "
+"geometry_collision_mask] is set."
msgstr ""
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
@@ -35957,9 +36284,9 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/"
-"code] in the [member geometry/collision_mask].\n"
+"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]."
+"code] in the [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
@@ -35973,14 +36300,14 @@ 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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -35992,7 +36319,7 @@ 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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36020,13 +36347,17 @@ msgstr ""
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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
-"If [code]true[/code], marks walkable spans as not walkable if the clearance "
-"above the span is less than [member agent/height]."
+"If the baking [AABB] has a volume the navigation mesh baking will be "
+"restricted to its enclosing area."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+msgid "The position offset applied to the [member filter_baking_aabb] [AABB]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36036,13 +36367,19 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]true[/code], marks non-walkable spans as walkable if their maximum "
-"is within [member agent/max_climb] of a walkable neighbor."
+"is within [member agent_max_climb] of a walkable neighbor."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+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
msgid ""
"The physics layers to scan for static colliders.\n"
-"Only used when [member geometry/parsed_geometry_type] is [constant "
+"Only used when [member geometry_parsed_geometry_type] is [constant "
"PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]."
msgstr ""
@@ -36061,7 +36398,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"The name of the group to scan for geometry.\n"
-"Only used when [member geometry/source_geometry_mode] is [constant "
+"Only used when [member geometry_source_geometry_mode] is [constant "
"SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant "
"SOURCE_GEOMETRY_GROUPS_EXPLICIT]."
msgstr ""
@@ -36124,7 +36461,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Parses [StaticBody] colliders as geometry. The collider should be in any of "
-"the layers specified by [member geometry/collision_mask]."
+"the layers specified by [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36145,13 +36482,13 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Scans nodes in a group and their child nodes recursively for geometry. The "
-"group is specified by [member geometry/source_group_name]."
+"group is specified by [member geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Uses nodes in a group for geometry. The group is specified by [member "
-"geometry/source_group_name]."
+"geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36193,7 +36530,15 @@ msgid ""
"geometry for walkable terrain suitable to [NavigationMesh] agent properties "
"by creating a voxel world around the meshes bounding area.\n"
"The finalized navigation mesh is then returned and stored inside the "
-"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes."
+"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] "
+"nodes.\n"
+"[b]Note:[/b] Using meshes to not only define walkable surfaces but also "
+"obstruct navigation baking does not always work. The navigation baking has "
+"no concept of what is a geometry \"inside\" when dealing with mesh source "
+"geometry and this is intentional. Depending on current baking parameters, as "
+"soon as the obstructing mesh is large enough to fit a navigation mesh area "
+"inside, the baking will generate navigation mesh areas that are inside the "
+"obstructing source geometry mesh."
msgstr ""
#: doc/classes/NavigationMeshGenerator.xml
@@ -36201,8 +36546,8 @@ msgid ""
"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child "
"nodes under the provided [code]root_node[/code] or a specific group of nodes "
"for potential source geometry. The parse behavior can be controlled with the "
-"[member NavigationMesh.geometry/parsed_geometry_type] and [member "
-"NavigationMesh.geometry/source_geometry_mode] properties on the "
+"[member NavigationMesh.geometry_parsed_geometry_type] and [member "
+"NavigationMesh.geometry_source_geometry_mode] properties on the "
"[NavigationMesh] resource."
msgstr ""
@@ -36219,8 +36564,21 @@ msgstr ""
#: doc/classes/NavigationMeshInstance.xml
msgid ""
"An instance of a [NavigationMesh]. It tells the [Navigation] node what can "
-"be navigated and what cannot, based on the [NavigationMesh] resource. This "
-"should be a child of a [Navigation] node."
+"be navigated and what cannot, based on the [NavigationMesh] resource.\n"
+"By default this node will register to the default [World] navigation map. If "
+"this node is a child of a [Navigation] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method NavigationServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The cost of entering this region from another region can be controlled with "
+"the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The cost of traveling distances inside this region can be controlled with "
+"the [member travel_cost] multiplier."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
@@ -36249,10 +36607,34 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding enters this region's navmesh from another regions navmesh "
+"the [code]enter_cost[/code] value is added to the path distance for "
+"determining the shortest path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationMesh] "
+"belongs to. On path requests with [method NavigationServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
msgid "The [NavigationMesh] resource to use."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding moves inside this region's navmesh the traveled distances "
+"are multiplied with [code]travel_cost[/code] for determining the shortest "
+"path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
msgid "Notifies when the navigation mesh bake operation is completed."
msgstr ""
@@ -36269,7 +36651,9 @@ msgid ""
"3D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationObstacle] is physics safe."
+"[NavigationObstacle] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle.xml
@@ -36309,7 +36693,9 @@ msgid ""
"2D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationObstacle2D] is physics safe."
+"[NavigationObstacle2D] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle2D.xml
@@ -36389,6 +36775,14 @@ msgstr ""
#: doc/classes/NavigationPolygon.xml
msgid ""
+"Returns the [NavigationMesh] resulting from this navigation polygon. This "
+"navmesh can be used to update the navmesh of a region with the [method "
+"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server "
+"behind the scene)."
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml
+msgid ""
"Returns a [PoolVector2Array] containing the vertices of an outline that was "
"created in the editor or by script."
msgstr ""
@@ -36425,6 +36819,30 @@ msgid ""
msgstr ""
#: doc/classes/NavigationPolygonInstance.xml
+msgid "A region of the 2D navigation map."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A region of the navigation map. It tells the [Navigation2DServer] what can "
+"be navigated and what cannot, based on its [NavigationPolygon] resource.\n"
+"By default this node will register to the default [World2D] navigation map. "
+"If this node is a child of a [Navigation2D] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The pathfinding cost of entering this region from another region can be "
+"controlled with the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The pathfinding cost of traveling distances inside this region can be "
+"controlled with the [member travel_cost] multiplier."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
msgid ""
"Returns the [RID] of this region on the [Navigation2DServer]. Combined with "
"[method Navigation2DServer.map_get_closest_point_owner] can be used to "
@@ -36432,6 +36850,22 @@ msgid ""
"navigation map."
msgstr ""
+#: doc/classes/NavigationPolygonInstance.xml
+msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationPolygon] "
+"belongs to. On path requests with [method Navigation2DServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid "The [NavigationPolygon] resource to use."
+msgstr ""
+
#: doc/classes/NavigationServer.xml
msgid "Server interface for low-level 3D navigation access."
msgstr ""
@@ -36507,6 +36941,12 @@ msgid "Bakes the navigation mesh."
msgstr ""
#: doc/classes/NavigationServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method NavigationServer.map_get_path])."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
msgid "Control activation of this server."
msgstr ""
@@ -37973,13 +38413,19 @@ msgstr ""
#: doc/classes/Node.xml
msgid ""
"Emitted when a child node enters the scene tree, either because it entered "
-"on its own or because this node entered with it."
+"on its own or because this node entered with it.\n"
+"This signal is emitted [i]after[/i] the child node's own [constant "
+"NOTIFICATION_ENTER_TREE] and [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
msgid ""
-"Emitted when a child node exits the scene tree, either because it exited on "
-"its own or because this node exited."
+"Emitted when a child node is about to exit the scene tree, either because it "
+"is being removed or freed directly, or because this node is exiting the "
+"tree.\n"
+"When this signal is received, the child [code]node[/code] is still in the "
+"tree and valid. This signal is emitted [i]after[/i] the child node's own "
+"[signal tree_exiting] and [constant NOTIFICATION_EXIT_TREE]."
msgstr ""
#: doc/classes/Node.xml
@@ -37991,7 +38437,10 @@ msgid "Emitted when the node is renamed."
msgstr ""
#: doc/classes/Node.xml
-msgid "Emitted when the node enters the tree."
+msgid ""
+"Emitted when the node enters the tree.\n"
+"This signal is emitted [i]after[/i] the related [constant "
+"NOTIFICATION_ENTER_TREE] notification."
msgstr ""
#: doc/classes/Node.xml
@@ -38001,15 +38450,21 @@ msgstr ""
#: doc/classes/Node.xml
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)."
+"the right place for de-initialization (or a \"destructor\", if you will).\n"
+"This signal is emitted [i]before[/i] the related [constant "
+"NOTIFICATION_EXIT_TREE] notification."
msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node enters a [SceneTree]."
+msgid ""
+"Notification received when the node enters a [SceneTree].\n"
+"This notification is emitted [i]before[/i] the related [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node is about to exit a [SceneTree]."
+msgid ""
+"Notification received when the node is about to exit a [SceneTree].\n"
+"This notification is emitted [i]after[/i] the related [signal tree_exiting]."
msgstr ""
#: doc/classes/Node.xml
@@ -38270,7 +38725,13 @@ msgid "Rotation in degrees, relative to the node's parent."
msgstr ""
#: doc/classes/Node2D.xml
-msgid "The node's scale. Unscaled value: [code](1, 1)[/code]."
+msgid ""
+"The node's scale. Unscaled value: [code](1, 1)[/code].\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
#: doc/classes/Node2D.xml
@@ -39710,6 +40171,10 @@ msgid ""
" if argument.find(\"=\") > -1:\n"
" var key_value = argument.split(\"=\")\n"
" arguments[key_value[0].lstrip(\"--\")] = key_value[1]\n"
+" else:\n"
+" # Options without an argument will be present in the dictionary,\n"
+" # with the value set to an empty string.\n"
+" arguments[argument.lstrip(\"--\")] = \"\"\n"
"[/codeblock]"
msgstr ""
@@ -40363,8 +40828,15 @@ msgstr ""
msgid ""
"Moves the file or directory to the system's recycle bin. See also [method "
"Directory.remove].\n"
+"The method takes only global paths, so you may need to use [method "
+"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/"
+"code] as it will not work in exported project.\n"
"[b]Note:[/b] If the user has disabled the recycle bin on their system, the "
-"file will be permanently deleted instead."
+"file will be permanently deleted instead.\n"
+"[codeblock]\n"
+"var file_to_remove = \"user://slot1.sav\"\n"
+"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/OS.xml
@@ -45203,7 +45675,18 @@ msgstr ""
#: doc/classes/PopupMenu.xml
msgid ""
"[PopupMenu] is a [Control] that displays a list of options. They are popular "
-"in toolbars or context menus."
+"in toolbars or context menus.\n"
+"[b]Incremental search:[/b] Like [ItemList] and [Tree], [PopupMenu] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/PopupMenu.xml
@@ -46710,7 +47193,16 @@ msgid ""
msgstr ""
#: doc/classes/ProjectSettings.xml
-msgid "Message to be displayed before the backtrace when the engine crashes."
+msgid ""
+"Message to be displayed before the backtrace when the engine crashes. By "
+"default, this message is only used in exported projects due to the editor-"
+"only override applied to this setting."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Editor-only override for [member debug/settings/crash_handler/message]. Does "
+"not affect exported projects in debug or release mode."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -46955,6 +47447,18 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default naming style for scene files to infer from their root nodes. "
+"Possible options are:\n"
+"- [code]0[/code] (Auto): Uses the scene root name as is without changing its "
+"casing.\n"
+"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase "
+"casing.\n"
+"- [code]2[/code] (snake_case): Converts the scene root name to snake_case "
+"casing."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -47180,6 +47684,198 @@ msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 1."
msgstr ""
@@ -47388,6 +48084,198 @@ msgid "Optional name for the 2D render layer 9."
msgstr ""
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 1."
msgstr ""
@@ -47655,6 +48543,49 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default cell height for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_height].\n"
+"[b]Note:[/b] Currently not implemented."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 2D navigation maps. See [method "
+"Navigation2DServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell height for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_height]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 3D navigation maps. See [method "
+"NavigationServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default map up vector for 3D navigation maps. See [method NavigationServer."
+"map_set_up]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -48328,20 +49259,28 @@ msgid ""
"cause.\n"
"The default value is a conservative one, so you are advised to tweak it "
"according to the hardware you are targeting.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"The default is a very conservative override for [code]rendering/gles3/"
-"shaders/max_concurrent_compiles[/code].\n"
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
"Depending on the specific devices you are targeting, you may want to raise "
"it.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
+"Depending on the specific browsers you are targeting, you may want to raise "
+"it.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -48349,19 +49288,28 @@ msgid ""
"The maximum size, in megabytes, that the ubershader cache can grow up to. On "
"startup, the least recently used entries will be deleted until the total "
"size is within bounds.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/ubershader_cache_size_mb[/"
-"code], so a smaller maximum size can be configured for mobile platforms, "
-"where storage space is more limited.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for mobile platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for web platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] Currently, shader caching is generally unavailable on web "
+"platforms.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -48393,14 +49341,22 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/shader_compilation_mode[/"
-"code], so asynchronous compilation can be disabled for mobile.\n"
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on mobile platforms.\n"
"You may want to do that since mobile GPUs generally won't support "
"ubershaders due to their complexity."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on web platforms.\n"
+"You may want to do that since certain browsers (especially on mobile "
+"platforms) generally won't support ubershaders due to their complexity."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
@@ -49157,7 +50113,6 @@ msgid ""
"- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/"
"code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, "
"small grid radius values may lead to unwanted groupings.\n"
-"[/codeblock]\n"
"[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more "
"effective and faster [VisibilityNotifier] functionality. For most use cases, "
"[method Vector3.distance_to] or [method Vector3.distance_squared_to] are "
@@ -51304,6 +52259,22 @@ msgid "Makes text fill width."
msgstr ""
#: doc/classes/RichTextLabel.xml
+msgid "Aligns top of the inline image to the top of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns center of the inline image to the center of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns bottom of the inline image to the baseline of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns bottom of the inline image to the bottom of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
msgid "Each list item has a number marker."
msgstr ""
@@ -53041,8 +54012,8 @@ msgid ""
" yield(get_tree().create_timer(1.0), \"timeout\")\n"
" print(\"Timer ended.\")\n"
"[/codeblock]\n"
-"The timer will be automatically freed after its time elapses, so be aware "
-"that any reference you might have kept to it will become invalid."
+"The timer will be dereferenced after its time elapses. To preserve the "
+"timer, you can keep a reference to it. See [Reference]."
msgstr ""
#: doc/classes/SceneTreeTimer.xml
@@ -53074,24 +54045,23 @@ msgid ""
"manually (i.e. by using [code]Tween.new()[/code]) are invalid. They can't be "
"used for tweening values, but you can do manual interpolation with [method "
"interpolate_value].\n"
-"A [SceneTreeTween] animation is composed of a sequence of [Tweener]s, which "
-"by default are executed one after another. You can create a sequence by "
-"appending [Tweener]s to the [SceneTreeTween]. Animating something with a "
-"[Tweener] is called tweening. Example tweening sequence looks like this:\n"
+"A tween animation is created by adding [Tweener]s to the [SceneTreeTween] "
+"object, using [method tween_property], [method tween_interval], [method "
+"tween_callback] or [method tween_method]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1)\n"
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"This sequence will make the [code]$Sprite[/code] node turn red, then shrink "
-"and finally the [method Node.queue_free] is called to remove the sprite. See "
-"methods [method tween_property], [method tween_interval], [method "
-"tween_callback] and [method tween_method] for more usage information.\n"
+"This sequence will make the [code]$Sprite[/code] node turn red, then shrink, "
+"before finally calling [method Node.queue_free] to free the sprite. "
+"[Tweener]s are executed one after another by default. This behavior can be "
+"changed using [method parallel] and [method set_parallel].\n"
"When a [Tweener] is created with one of the [code]tween_*[/code] methods, a "
"chained method call can be used to tweak the properties of this [Tweener]. "
-"For example, if you want to set different transition type in the above "
-"example, you can do:\n"
+"For example, if you want to set a different transition type in the above "
+"example, you can use [method set_trans]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1).set_trans(Tween."
@@ -53100,8 +54070,9 @@ msgid ""
"TRANS_BOUNCE)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Most of the [SceneTreeTween] methods can be chained this way too. In this "
-"example the [SceneTreeTween] is bound and have set a default transition:\n"
+"Most of the [SceneTreeTween] methods can be chained this way too. In the "
+"following example the [SceneTreeTween] is bound to the running script's node "
+"and a default transition is set for its [Tweener]s:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween().bind_node(self).set_trans(Tween."
"TRANS_ELASTIC)\n"
@@ -53109,16 +54080,16 @@ msgid ""
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Another interesting use for [SceneTreeTween]s is animating arbitrary set of "
+"Another interesting use for [SceneTreeTween]s is animating arbitrary sets of "
"objects:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"for sprite in get_children():\n"
-" tween.tween_property(sprite, \"position\", Vector2(), 1)\n"
+" tween.tween_property(sprite, \"position\", Vector2(0, 0), 1)\n"
"[/codeblock]\n"
"In the example above, all children of a node are moved one after another to "
"position (0, 0).\n"
-"Some [Tweener]s use transitions and eases. The first accepts an [enum Tween."
+"Some [Tweener]s use transitions and eases. The first accepts a [enum Tween."
"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 Tween.EaseType] constant, and "
@@ -53130,7 +54101,7 @@ msgid ""
"tween_cheatsheet.png]Tween easing and transition types cheatsheet[/url]\n"
"[b]Note:[/b] All [SceneTreeTween]s will automatically start by default. To "
"prevent a [SceneTreeTween] from autostarting, you can call [method stop] "
-"immediately after it was created."
+"immediately after it is created."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53160,21 +54131,24 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
-"Processes the [SceneTreeTween] by given [code]delta[/code] value, in "
-"seconds. Mostly useful when the [SceneTreeTween] is paused, for controlling "
-"it manually. Can also be used to end the [SceneTreeTween] animation "
-"immediately, by using [code]delta[/code] longer than the whole duration.\n"
+"Processes the [SceneTreeTween] by the given [code]delta[/code] value, in "
+"seconds. This is mostly useful for manual control when the [SceneTreeTween] "
+"is paused. It can also be used to end the [SceneTreeTween] animation "
+"immediately, by setting [code]delta[/code] longer than the whole duration of "
+"the [SceneTreeTween] animation.\n"
"Returns [code]true[/code] if the [SceneTreeTween] still has [Tweener]s that "
"haven't finished.\n"
-"[b]Note:[/b] The [SceneTreeTween] will become invalid after finished, but "
-"you can call [method stop] after the step, to keep it and reset."
+"[b]Note:[/b] The [SceneTreeTween] will become invalid in the next processing "
+"frame after its animation finishes. Calling [method stop] after performing "
+"[method custom_step] instead keeps and resets the [SceneTreeTween]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Returns the total time in seconds the [SceneTreeTween] has been animating (i."
-"e. time since it started, not counting pauses etc.). The time is affected by "
-"[method set_speed_scale] and [method stop] will reset it to [code]0[/code].\n"
+"e. the time since it started, not counting pauses etc.). The time is "
+"affected by [method set_speed_scale], and [method stop] will reset it to "
+"[code]0[/code].\n"
"[b]Note:[/b] As it results from accumulating frame deltas, the time returned "
"after the [SceneTreeTween] has finished animating will be slightly greater "
"than the actual [SceneTreeTween] duration."
@@ -53210,11 +54184,10 @@ msgstr ""
msgid ""
"Returns whether the [SceneTreeTween] is valid. A valid [SceneTreeTween] is a "
"[SceneTreeTween] contained by the scene tree (i.e. the array from [method "
-"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). "
-"[SceneTreeTween] might become invalid when it has finished tweening or was "
-"killed, also when created with [code]Tween.new()[/code]. Invalid "
-"[SceneTreeTween] can't have [Tweener]s appended, because it can't animate "
-"them. You can however still use [method interpolate_value]."
+"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). A "
+"[SceneTreeTween] might become invalid when it has finished tweening, is "
+"killed, or when created with [code]SceneTreeTween.new()[/code]. Invalid "
+"[SceneTreeTween]s can't have [Tweener]s appended."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53254,16 +54227,15 @@ msgstr ""
msgid ""
"Sets the number of times the tweening sequence will be repeated, i.e. "
"[code]set_loops(2)[/code] will run the animation twice.\n"
-"Calling this method without arguments will make the [SceneTreeTween] run "
-"infinitely, until it is either killed by [method kill] or by freeing bound "
-"node, or all the animated objects have been freed (which makes further "
+"Calling this method without arguments will make the [Tween] run infinitely, "
+"until either it is killed with [method kill], the [Tween]'s bound node is "
+"freed, or all the animated objects have been freed (which makes further "
"animation impossible).\n"
"[b]Warning:[/b] Make sure to always add some duration/delay when using "
-"infinite loops. 0-duration looped animations (e.g. single [CallbackTweener] "
-"with no delay or [PropertyTweener] with invalid node) are equivalent to "
-"infinite [code]while[/code] loops and will freeze your game. If a "
-"[SceneTreeTween]'s lifetime depends on some node, always use [method "
-"bind_node]."
+"infinite loops. To prevent the game freezing, 0-duration looped animations "
+"(e.g. a single [CallbackTweener] with no delay) are stopped after a small "
+"number of loops, which may produce unexpected results. If a [Tween]'s "
+"lifetime depends on some node, always use [method bind_node]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53325,10 +54297,10 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Creates and appends an [IntervalTweener]. This method can be used to create "
-"delays in the tween animation, as an alternative for using the delay in "
-"other [Tweener]s or when there's no animation (in which case the "
-"[SceneTreeTween] acts as a timer). [code]time[/code] is the length of the "
-"interval, in seconds.\n"
+"delays in the tween animation, as an alternative to using the delay in other "
+"[Tweener]s, or when there's no animation (in which case the [SceneTreeTween] "
+"acts as a timer). [code]time[/code] is the length of the interval, in "
+"seconds.\n"
"Example: creating an interval in code execution.\n"
"[codeblock]\n"
"# ... some code\n"
@@ -53382,8 +54354,8 @@ msgid ""
"Creates and appends a [PropertyTweener]. This method tweens a "
"[code]property[/code] of an [code]object[/code] between an initial value and "
"[code]final_val[/code] in a span of time equal to [code]duration[/code], in "
-"seconds. The initial value by default is a value at the time the tweening of "
-"the [PropertyTweener] start. For example:\n"
+"seconds. The initial value by default is the property's value at the time "
+"the tweening of the [PropertyTweener] starts. For example:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"tween.tween_property($Sprite, \"position\", Vector2(100, 200), 1)\n"
@@ -53414,16 +54386,15 @@ msgid ""
"Emitted when the [SceneTreeTween] has finished all tweening. Never emitted "
"when the [SceneTreeTween] is set to infinite looping (see [method "
"set_loops]).\n"
-"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) after this signal "
-"is emitted, but it doesn't happen immediately, but on the next processing "
-"frame. Calling [method stop] inside the signal callback will preserve the "
-"[SceneTreeTween]."
+"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) in the next "
+"processing frame after this signal is emitted. Calling [method stop] inside "
+"the signal callback will prevent the [SceneTreeTween] from being removed."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Emitted when a full loop is complete (see [method set_loops]), providing the "
-"loop index. This signal is not emitted after final loop, use [signal "
+"loop index. This signal is not emitted after the final loop, use [signal "
"finished] instead for this case."
msgstr ""
@@ -53431,7 +54402,7 @@ msgstr ""
msgid ""
"Emitted when one step of the [SceneTreeTween] is complete, providing the "
"step index. One step is either a single [Tweener] or a group of [Tweener]s "
-"running parallelly."
+"running in parallel."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -54763,7 +55734,12 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-msgid "Scale part of the local transformation."
+msgid ""
+"Scale part of the local transformation.\n"
+"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, the scale values will either be all "
+"positive or all negative."
msgstr ""
#: doc/classes/Spatial.xml
@@ -57394,11 +58370,11 @@ msgstr ""
msgid ""
"Returns [code]true[/code] if this string contains a valid integer.\n"
"[codeblock]\n"
-"print(\"7\".is_valid_int()) # Prints \"True\"\n"
-"print(\"14.6\".is_valid_int()) # Prints \"False\"\n"
-"print(\"L\".is_valid_int()) # Prints \"False\"\n"
-"print(\"+3\".is_valid_int()) # Prints \"True\"\n"
-"print(\"-12\".is_valid_int()) # Prints \"True\"\n"
+"print(\"7\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"14.6\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"L\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"+3\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"-12\".is_valid_integer()) # Prints \"True\"\n"
"[/codeblock]"
msgstr ""
@@ -60864,6 +61840,10 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml
+msgid "If [code]true[/code], this TileMap bakes a navigation region."
+msgstr ""
+
+#: doc/classes/TileMap.xml
msgid "If [code]true[/code], the cell's UVs will be clipped."
msgstr ""
@@ -60970,6 +61950,10 @@ msgid "The TileMap orientation mode. See [enum Mode] for possible values."
msgstr ""
#: doc/classes/TileMap.xml
+msgid "The navigation layers the TileMap generates its navigation regions in."
+msgstr ""
+
+#: doc/classes/TileMap.xml
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 "
@@ -62101,7 +63085,12 @@ msgstr ""
#: doc/classes/Transform2D.xml
msgid ""
"Returns a copy of the transform scaled by the given [code]scale[/code] "
-"factor, using matrix multiplication."
+"factor, using matrix multiplication.\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
#: doc/classes/Transform2D.xml
@@ -62256,7 +63245,18 @@ msgid ""
"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]."
+"to remove it from the [Tree].\n"
+"[b]Incremental search:[/b] Like [ItemList] and [PopupMenu], [Tree] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/Tree.xml
@@ -65772,11 +66772,12 @@ msgid "This enabler will stop [Particles2D] nodes."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _process function."
+msgid "This enabler will stop the parent's [method Node._process] function."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _physics_process function."
+msgid ""
+"This enabler will stop the parent's [method Node._physics_process] function."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
@@ -65816,6 +66817,16 @@ msgid "The VisibilityNotifier's bounding box."
msgstr ""
#: doc/classes/VisibilityNotifier.xml
+msgid ""
+"In addition to checking whether a node is on screen or within a [Camera]'s "
+"view, VisibilityNotifier can also optionally check whether a node is within "
+"a specified maximum distance when using a [Camera] with perspective "
+"projection. This is useful for throttling the performance requirements of "
+"nodes that are far away.\n"
+"[b]Note:[/b] This feature will be disabled if set to 0.0."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier.xml
msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view."
msgstr ""
@@ -70561,6 +71572,16 @@ msgid "The amount of shader rebinds in the frame."
msgstr ""
#: doc/classes/VisualServer.xml
+msgid ""
+"The peak amount of shaders that have been under compilation in the frame.\n"
+"This is useful to know when asynchronous shader compilation has finished for "
+"the current shaders on screen.\n"
+"[b]Note:[/b] For complete certainty, only assume there are no outstanding "
+"compilations when this value is zero for at least two frames in a row.\n"
+"Unimplemented in the GLES2 rendering backend, always returns 0."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
msgid "The amount of surface changes in the frame."
msgstr ""
@@ -73757,8 +74778,8 @@ msgstr ""
#: doc/classes/World.xml
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."
+"scenario, a navigation map and a sound space. Spatial nodes register their "
+"resources into the current world."
msgstr ""
#: doc/classes/World.xml
@@ -73773,8 +74794,13 @@ msgstr ""
#: doc/classes/World.xml
msgid ""
-"The World's fallback_environment will be used if the World's [Environment] "
-"fails or is missing."
+"The World's fallback environment will be used if [member environment] fails "
+"or is missing."
+msgstr ""
+
+#: doc/classes/World.xml
+msgid ""
+"The [RID] of this world's navigation map. Used by the [NavigationServer]."
msgstr ""
#: doc/classes/World.xml
@@ -73792,8 +74818,8 @@ msgstr ""
#: doc/classes/World2D.xml
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."
+"visual scenario, a navigation map and a sound space. 2D nodes register their "
+"resources into the current 2D world."
msgstr ""
#: doc/classes/World2D.xml
@@ -73811,6 +74837,11 @@ msgstr ""
#: doc/classes/World2D.xml
msgid ""
+"The [RID] of this world's navigation map. Used by the [Navigation2DServer]."
+msgstr ""
+
+#: doc/classes/World2D.xml
+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 ""
diff --git a/doc/translations/hi.po b/doc/translations/hi.po
index 021e1463f6..a104e2ae6d 100644
--- a/doc/translations/hi.po
+++ b/doc/translations/hi.po
@@ -347,7 +347,7 @@ msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
msgid ""
"Compares two values by checking their actual contents, recursing into any "
-"`Array` or `Dictionary` up to its deepest level.\n"
+"[Array] or [Dictionary] up to its deepest level.\n"
"This compares to [code]==[/code] in a number of ways:\n"
"- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/"
"code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] "
@@ -394,7 +394,7 @@ msgid ""
"- 1.0: Linear\n"
"- Greater than 1.0 (exclusive): Ease in\n"
"[/codeblock]\n"
-"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.4/img/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/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]."
@@ -1101,7 +1101,7 @@ msgid ""
"[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/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/img/"
"smoothstep_ease_comparison.png]Comparison between smoothstep() and ease(x, "
"-1.6521) return values[/url]"
msgstr ""
@@ -3379,6 +3379,12 @@ msgstr ""
#: doc/classes/@GlobalScope.xml
msgid ""
+"Hints that an integer property is a bitmask using the optionally named 2D "
+"navigation layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml
+msgid ""
"Hints that an integer property is a bitmask using the optionally named 3D "
"render layers."
msgstr ""
@@ -3391,6 +3397,12 @@ msgstr ""
#: doc/classes/@GlobalScope.xml
msgid ""
+"Hints that an integer property is a bitmask using the optionally named 3D "
+"navigation layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml
+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]."
@@ -8366,7 +8378,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/AStar.xml
+#: doc/classes/AStar.xml doc/classes/AStar2D.xml
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[/"
@@ -8565,7 +8577,10 @@ msgid ""
msgstr ""
#: doc/classes/AStar2D.xml
-msgid "Returns whether there is a connection/segment between the given points."
+msgid ""
+"Returns whether there is a connection/segment between the given points. 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/AStar2D.xml
@@ -8582,10 +8597,6 @@ msgid ""
msgstr ""
#: doc/classes/AStar2D.xml
-msgid "Deletes the segment between the given points."
-msgstr ""
-
-#: doc/classes/AStar2D.xml
msgid ""
"Returns the closest position to [code]to_position[/code] that resides inside "
"a segment between two connected points.\n"
@@ -8770,7 +8781,9 @@ msgid ""
"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."
+"transmit audio over the network. When capturing audio data from a "
+"microphone, the format of the samples will be stereo 32-bit floating point "
+"PCM."
msgstr ""
#: doc/classes/AudioEffectCapture.xml
@@ -13613,7 +13626,7 @@ msgid ""
msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
-#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/Navigation2D.xml
msgid "Returns the object's [RID]."
msgstr ""
@@ -19088,11 +19101,14 @@ msgid ""
msgstr ""
#: doc/classes/CurveTexture.xml
-msgid "The [code]curve[/code] rendered onto the texture."
+msgid "The [Curve] that is rendered onto the texture."
msgstr ""
#: doc/classes/CurveTexture.xml
-msgid "The width of the texture."
+msgid ""
+"The width of the texture (in pixels). Higher values make it possible to "
+"represent high-frequency data better (such as sudden direction changes), at "
+"the cost of increased generation time and memory usage."
msgstr ""
#: doc/classes/CylinderMesh.xml
@@ -19378,6 +19394,13 @@ msgid "Returns the list of keys in the [Dictionary]."
msgstr ""
#: doc/classes/Dictionary.xml
+msgid ""
+"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, "
+"duplicate keys will not be copied over, unless [code]overwrite[/code] is "
+"[code]true[/code]."
+msgstr ""
+
+#: doc/classes/Dictionary.xml
msgid "Returns the number of keys in the dictionary."
msgstr ""
@@ -21316,9 +21339,23 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide a state data you want to be saved, like view "
+"position, grid settings, folding, etc. 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). This data is automatically saved for "
+"each scene in an [code]editstate[/code] file in the editor metadata folder. "
+"If you want to store global (scene-independent) editor data for your plugin, "
+"you can use [method get_window_layout] instead.\n"
+"Use [method set_state] to restore your saved state.\n"
+"[b]Note:[/b] This method should not be used to save important settings that "
+"should persist with the project.\n"
+"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be "
+"stored and restored correctly.\n"
+"[codeblock]\n"
+"func get_state():\n"
+" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n"
+" return state\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -21329,9 +21366,18 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide the GUI layout of the plugin or any other "
+"data you want to be stored. 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). The data is stored in the "
+"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n"
+"Use [method set_window_layout] to restore your saved layout.\n"
+"[codeblock]\n"
+"func get_window_layout(configuration):\n"
+" configuration.set_value(\"MyPlugin\", \"window_position\", $Window."
+"position)\n"
+" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -21444,11 +21490,30 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the state saved by [method get_state]."
+msgid ""
+"Restore the state saved by [method get_state]. This method is called when "
+"the current scene tab is changed in the editor.\n"
+"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise "
+"it will not be recognized and this method will not be called.\n"
+"[codeblock]\n"
+"func set_state(data):\n"
+" zoom = data.get(\"zoom\", 1.0)\n"
+" preferred_color = data.get(\"my_color\", Color.white)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the plugin GUI layout saved by [method get_window_layout]."
+msgid ""
+"Restore the plugin GUI layout and data saved by [method get_window_layout]. "
+"This method is called for every plugin on editor startup. Use the provided "
+"[code]configuration[/code] file to read your saved data.\n"
+"[codeblock]\n"
+"func set_window_layout(configuration):\n"
+" $Window.position = configuration.get_value(\"MyPlugin\", "
+"\"window_position\", Vector2())\n"
+" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", "
+"Color.white)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -26083,7 +26148,8 @@ msgid ""
"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])."
+"at fixed steps (see [member width]). See also [GradientTexture2D] and "
+"[CurveTexture]."
msgstr ""
#: doc/classes/GradientTexture.xml
@@ -26105,7 +26171,8 @@ msgid ""
"repeat] types using colors obtained from the gradient. 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] and [member height])."
+"[member width] and [member height]). See also [GradientTexture] and "
+"[CurveTexture]."
msgstr ""
#: doc/classes/GradientTexture2D.xml
@@ -26911,6 +26978,12 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+msgid ""
+"If [code]true[/code], this GridMap uses cell navmesh resources to create "
+"navigation regions."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid "If [code]true[/code], grid items are centered on the X axis."
msgstr ""
@@ -26961,6 +27034,10 @@ msgid "The assigned [MeshLibrary]."
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+msgid "The navigation layers the GridMap generates its navigation regions in."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
"Overrides the default friction and bounce physics properties for the whole "
"[GridMap]."
@@ -28184,7 +28261,7 @@ msgid ""
" # 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 body = to_json({\"name\": \"Godette\"})\n"
" error = http_request.request(\"https://httpbin.org/post\", [], true, "
"HTTPClient.METHOD_POST, body)\n"
" if error != OK:\n"
@@ -29351,7 +29428,7 @@ msgstr ""
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 "
+"([member 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 "
@@ -29500,10 +29577,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Returns the mouse mode. See the constants for more information."
-msgstr ""
-
-#: doc/classes/Input.xml
msgid ""
"Gets an input vector by specifying four actions for the positive and "
"negative X and Y axes.\n"
@@ -29697,24 +29770,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Sets the mouse mode. See the constants for more information."
-msgstr ""
-
-#: doc/classes/Input.xml
-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
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 "
@@ -29750,6 +29805,24 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
+msgid "Controls the mouse mode. See [enum MouseMode] for more information."
+msgstr ""
+
+#: doc/classes/Input.xml
+msgid ""
+"If [code]true[/code], similar input events sent by the operating system are "
+"accumulated. 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 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
msgid "Emitted when a joypad device has been connected or disconnected."
msgstr ""
@@ -30057,8 +30130,8 @@ msgstr ""
#: doc/classes/InputEventJoypadButton.xml
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]."
+"Represents the pressure the user puts on the button with their finger, if "
+"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]."
msgstr ""
#: doc/classes/InputEventJoypadMotion.xml
@@ -30321,9 +30394,9 @@ 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 "
+"at most. If you need more precise input reporting, set [member Input."
+"use_accumulated_input] to [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."
@@ -30810,7 +30883,18 @@ msgid ""
"[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."
+"fixed_column_width] greater than zero to wrap the text.\n"
+"[b]Incremental search:[/b] Like [PopupMenu] and [Tree], [ItemList] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/ItemList.xml
@@ -34557,11 +34641,16 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Returns the override [Material] for a surface of the [Mesh] resource.\n"
+"[b]Note:[/b] This function only returns [i]override[/i] materials associated "
+"with this [MeshInstance]. Consider using [method get_active_material] or "
+"[method Mesh.surface_get_material] to get materials associated with the "
+"[Mesh] resource."
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the number of surface materials."
+msgid "Returns the number of surface override materials."
msgstr ""
#: doc/classes/MeshInstance.xml
@@ -34598,7 +34687,10 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Sets the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Sets the override [Material] for the specified surface of the [Mesh] "
+"resource. This material is associated with this [MeshInstance] rather than "
+"with the [Mesh] resource."
msgstr ""
#: doc/classes/MeshInstance.xml
@@ -34629,9 +34721,10 @@ msgstr ""
#: doc/classes/MeshInstance2D.xml
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\"."
+"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be "
+"automatically created from an existing [Sprite] via a tool in the editor "
+"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to "
+"MeshInstance2D[/b] at the top of the 2D editor viewport."
msgstr ""
#: doc/classes/MeshInstance2D.xml
@@ -35389,6 +35482,9 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"Provides navigation and pathfinding within a collection of "
"[NavigationMesh]es. By default, these will be automatically collected from "
"child [NavigationMeshInstance] nodes. In addition to basic pathfinding, this "
@@ -35429,7 +35525,14 @@ msgid ""
msgstr ""
#: doc/classes/Navigation.xml
+msgid "Returns the [RID] of the navigation map on the [NavigationServer]."
+msgstr ""
+
+#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"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, "
@@ -35451,16 +35554,31 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation.get_simple_path] path query."
+msgstr ""
+
+#: doc/classes/Navigation.xml
+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/Navigation.xml doc/classes/Navigation2DServer.xml
+#: doc/classes/NavigationServer.xml
+msgid ""
+"Emitted when a navigation map is updated, when a region moves or is modified."
+msgstr ""
+
#: doc/classes/Navigation2D.xml
msgid "2D navigation and pathfinding node."
msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -35480,6 +35598,9 @@ msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -35489,6 +35610,12 @@ msgstr ""
msgid "The XY plane cell size to use for fields."
msgstr ""
+#: doc/classes/Navigation2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation2D.get_simple_path] path query."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml
msgid "Server interface for low-level 2D navigation access."
msgstr ""
@@ -35505,8 +35632,12 @@ msgid ""
"through scripts.\n"
"For two regions to be connected to each other, they must share a similar "
"edge. An edge is considered connected to another if both of its two vertices "
-"are at a distance less than [member Navigation.edge_connection_margin] to "
-"the respective other edge's vertex.\n"
+"are at a distance less than navigation map [code]edge_connection_margin[/"
+"code] to the respective other edge's vertex.\n"
+"You may assign navigation layers to regions with [method Navigation2DServer."
+"region_set_navigation_layers], which then can be checked upon when "
+"requesting a path with [method Navigation2DServer.map_get_path]. This allows "
+"allowing or forbidding some areas to 2D objects.\n"
"To use the collision avoidance system, you may use agents. You can set an "
"agent's target velocity, then the servers will emit a callback with a "
"modified velocity.\n"
@@ -35534,7 +35665,17 @@ msgid "Returns [code]true[/code] if the map got changed the previous frame."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Callback called at the end of the RVO process."
+msgid ""
+"Callback called at the end of the RVO process. If a callback is created "
+"manually and the agent is placed on a navigation map it will calculate "
+"avoidance for the agent and dispatch the calculated [code]safe_velocity[/"
+"code] to the [code]receiver[/code] object with a signal to the chosen "
+"[code]method[/code] name.\n"
+"[b]Note:[/b] Created callbacks are always processed independently of the "
+"SceneTree state as long as the agent is on a navigation map and not freed. "
+"To disable the dispatch of a callback from an agent use [method "
+"agent_set_callback] again with a [code]null[/code] object as the "
+"[code]receiver[/code]."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -35589,15 +35730,55 @@ msgid "Destroys the given RID."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns all created navigation map [RID]s on the NavigationServer. This "
+"returns both 2D and 3D created navigation maps as there is technically no "
+"distinction between them."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Create a new map."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"This function immediately forces synchronization of the specified navigation "
+"[code]map[/code] [RID]. By default navigation maps are only synchronized at "
+"the end of each physics frame. This function can be used to immediately "
+"(re)calculate all the navigation meshes and region connections of the "
+"navigation map. This makes it possible to query a navigation path for a "
+"changed map immediately and in the same frame (multiple times if needed).\n"
+"Due to technical restrictions the current NavigationServer command queue "
+"will be flushed. This means all already queued update commands for this "
+"physics frame will be executed, even those intended for other maps, regions "
+"and agents not part of the specified map. The expensive computation of the "
+"navigation meshes and region connections of a map will only be done for the "
+"specified map. Other maps will receive the normal synchronization at the end "
+"of the physics frame. Should the specified map receive changes after the "
+"forced update it will update again as well when the other maps receive their "
+"update.\n"
+"Avoidance processing and dispatch of the [code]safe_velocity[/code] signals "
+"is untouched by this function and continues to happen for all maps and "
+"agents at the end of the physics frame.\n"
+"[b]Note:[/b] With great power comes great responsibility. This function "
+"should only be used by users that really know what they are doing and have a "
+"good reason for it. Forcing an immediate update of a navigation map requires "
+"locking the NavigationServer and flushing the entire NavigationServer "
+"command queue. Not only can this severely impact the performance of a game "
+"but it can also introduce bugs if used inappropriately without much "
+"foresight."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns all navigation agents [RID]s that are currently assigned to the "
"requested navigation [code]map[/code]."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Returns the map cell size."
msgstr ""
@@ -35621,7 +35802,10 @@ msgid ""
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Returns the navigation path to reach the destination from the origin."
+msgid ""
+"Returns the navigation path to reach the destination from the origin. "
+"[code]navigation_layers[/code] is a bitmask of all region layers that are "
+"allowed to be in the path."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -35638,6 +35822,12 @@ msgstr ""
msgid "Sets the map active."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/"
+"b] Currently not implemented."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Set the map cell size used to weld the navigation mesh polygons."
msgstr ""
@@ -35653,14 +35843,73 @@ msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"Returns the ending point of a connection door. [code]connection[/code] is an "
+"index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns the starting point of a connection door. [code]connection[/code] is "
+"an index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns how many connections this [code]region[/code] has with other regions "
+"in the map."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns the navigation map [RID] the requested [code]region[/code] is "
"currently assigned to."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Returns the region's navigation layers."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns [code]true[/code] if the provided [code]point[/code] in world space "
+"is currently owned by the provided navigation [code]region[/code]. Owned in "
+"this context means that one of the region's navigation mesh polygon faces "
+"has a possible position at the closest distance to this point compared to "
+"all other navigation meshes from other navigation regions that are also "
+"registered on the navigation map of the provided region.\n"
+"If multiple navigation meshes have positions at equal distance the "
+"navigation region whose polygons are processed first wins the ownership. "
+"Polygons are processed in the same order that navigation regions were "
+"registered on the NavigationServer.\n"
+"[b]Note:[/b] If navigation meshes from different navigation regions overlap "
+"(which should be avoided in general) the result might not be what is "
+"expected."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Sets the map for the region."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method Navigation2DServer.map_get_path])."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Sets the navigation mesh for the region."
msgstr ""
@@ -35669,6 +35918,10 @@ msgstr ""
msgid "Sets the global transformation for the region."
msgstr ""
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]."
+msgstr ""
+
#: doc/classes/NavigationAgent.xml
msgid "3D agent used in navigation for collision avoidance."
msgstr ""
@@ -35678,9 +35931,16 @@ msgid ""
"3D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationAgent] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World] navigation map. If this node is a child of a [Navigation] "
+"node it will register to the navigation map of the navigation node or the "
+"function [method set_navigation] can be used to set the navigation node "
+"directly. [NavigationAgent] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -35698,7 +35958,15 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-msgid "Returns the path from start to finish in global coordinates."
+msgid ""
+"Returns this agent's current path from start to finish in global "
+"coordinates. The path only updates when the target location is changed or "
+"the agent requires a repath. The path array is not intended to be used in "
+"direct path movement as the agent has its own internal path logic that would "
+"get corrupted by changing the path array manually. Use the intended [method "
+"get_next_location] once every physics frame to receive the next path point "
+"for the agents movement as this function also updates the internal path "
+"logic."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -35713,11 +35981,24 @@ msgid ""
"system."
msgstr ""
-#: doc/classes/NavigationAgent.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"Returns a [Vector3] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the origin of the agent's parent."
+"Returns the [RID] of the navigation map for this NavigationAgent node. This "
+"function returns always the map set on the NavigationAgent node and not the "
+"map of the abstract agent on the NavigationServer. If the agent map is "
+"changed directly with the NavigationServer API the NavigationAgent node will "
+"not be aware of the map change. Use [method set_navigation_map] to change "
+"the navigation map for the NavigationAgent and also update the agent on the "
+"NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
+"Returns the next location in global coordinates that can be moved to, making "
+"sure that there are no static objects in the way. If the agent does not have "
+"a navigation path, it will return the position of the agent's parent. The "
+"use of this function once every physics frame is required to update the "
+"internal path logic of the NavigationAgent."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -35758,6 +36039,12 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"Sets the [RID] of the navigation map this NavigationAgent node should use "
+"and also updates the [code]agent[/code] on the NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"Sets the user desired final location. This will clear the current navigation "
"path."
msgstr ""
@@ -35770,7 +36057,13 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml
-msgid "The agent height offset to match the navigation mesh height."
+msgid ""
+"The NavigationAgent height offset is subtracted from the y-axis value of any "
+"vector path position for this NavigationAgent. The NavigationAgent height "
+"offset does not change or influence the navigation mesh or pathfinding query "
+"result. Additional navigation maps that use regions with navigation meshes "
+"that the developer baked with appropriate agent radius or height values are "
+"required to support different-sized agents."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -35797,26 +36090,53 @@ msgstr ""
msgid "The maximum speed that an agent can move."
msgstr ""
+#: doc/classes/NavigationAgent.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "The distance to search for other agents."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"The distance threshold before a path point is considered to be reached. This "
+"will allow an agent to not have to hit a path point on the path exactly, but "
+"in the area. If this value is set to high the NavigationAgent will skip "
+"points on the path which can lead to leaving the navigation mesh. If this "
+"value is set to low the NavigationAgent will be stuck in a repath loop cause "
+"it will constantly overshoot or undershoot the distance to the next point on "
+"each physics frame update."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"The maximum distance the agent is allowed away from the ideal path to the "
"final location. This can happen due to trying to avoid collisions. When the "
"maximum distance is exceeded, it recalculates the ideal path."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-msgid "The radius of the agent."
+msgid ""
+"The radius of the avoidance agent. This is the \"body\" of the avoidance "
+"agent and not the avoidance maneuver starting radius (which is controlled by "
+"[member neighbor_dist]).\n"
+"Does not affect normal pathfinding. To change an actor's pathfinding radius "
+"bake [NavigationMesh] resources with a different [member NavigationMesh."
+"agent_radius] property and use different navigation maps for each actor size."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"The distance threshold before a target is considered to be reached. This "
-"will allow an agent to not have to hit a point on the path exactly, but in "
-"the area."
+"The distance threshold before the final target point is considered to be "
+"reached. This will allow an agent to not have to hit the point of the final "
+"target exactly, but only the area. If this value is set to low the "
+"NavigationAgent will be stuck in a repath loop cause it will constantly "
+"overshoot or undershoot the distance to the final target point on each "
+"physics frame update."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -35859,9 +36179,16 @@ msgid ""
"2D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationAgent2D] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World2D] navigation map. If this node is a child of a "
+"[Navigation2D] node it will register to the navigation map of the navigation "
+"node or the function [method set_navigation] can be used to set the "
+"navigation node directly. [NavigationAgent2D] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent2D.xml
@@ -35877,13 +36204,6 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent2D.xml
-msgid ""
-"Returns a [Vector2] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the position of the agent's parent."
-msgstr ""
-
-#: doc/classes/NavigationAgent2D.xml
msgid "Returns the [RID] of this agent on the [Navigation2DServer]."
msgstr ""
@@ -35903,6 +36223,13 @@ msgid ""
"only be enabled on agents that currently require it."
msgstr ""
+#: doc/classes/NavigationAgent2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent2D] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationMesh.xml
msgid "A mesh to approximate the walkable areas and obstacles."
msgstr ""
@@ -35933,8 +36260,8 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
-"Returns whether the specified [code]bit[/code] of the [member geometry/"
-"collision_mask] is set."
+"Returns whether the specified [code]bit[/code] of the [member "
+"geometry_collision_mask] is set."
msgstr ""
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
@@ -35956,9 +36283,9 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/"
-"code] in the [member geometry/collision_mask].\n"
+"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]."
+"code] in the [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
@@ -35972,14 +36299,14 @@ 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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -35991,7 +36318,7 @@ 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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36019,13 +36346,17 @@ msgstr ""
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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
-"If [code]true[/code], marks walkable spans as not walkable if the clearance "
-"above the span is less than [member agent/height]."
+"If the baking [AABB] has a volume the navigation mesh baking will be "
+"restricted to its enclosing area."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+msgid "The position offset applied to the [member filter_baking_aabb] [AABB]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36035,13 +36366,19 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]true[/code], marks non-walkable spans as walkable if their maximum "
-"is within [member agent/max_climb] of a walkable neighbor."
+"is within [member agent_max_climb] of a walkable neighbor."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+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
msgid ""
"The physics layers to scan for static colliders.\n"
-"Only used when [member geometry/parsed_geometry_type] is [constant "
+"Only used when [member geometry_parsed_geometry_type] is [constant "
"PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]."
msgstr ""
@@ -36060,7 +36397,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"The name of the group to scan for geometry.\n"
-"Only used when [member geometry/source_geometry_mode] is [constant "
+"Only used when [member geometry_source_geometry_mode] is [constant "
"SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant "
"SOURCE_GEOMETRY_GROUPS_EXPLICIT]."
msgstr ""
@@ -36123,7 +36460,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Parses [StaticBody] colliders as geometry. The collider should be in any of "
-"the layers specified by [member geometry/collision_mask]."
+"the layers specified by [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36144,13 +36481,13 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Scans nodes in a group and their child nodes recursively for geometry. The "
-"group is specified by [member geometry/source_group_name]."
+"group is specified by [member geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Uses nodes in a group for geometry. The group is specified by [member "
-"geometry/source_group_name]."
+"geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36192,7 +36529,15 @@ msgid ""
"geometry for walkable terrain suitable to [NavigationMesh] agent properties "
"by creating a voxel world around the meshes bounding area.\n"
"The finalized navigation mesh is then returned and stored inside the "
-"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes."
+"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] "
+"nodes.\n"
+"[b]Note:[/b] Using meshes to not only define walkable surfaces but also "
+"obstruct navigation baking does not always work. The navigation baking has "
+"no concept of what is a geometry \"inside\" when dealing with mesh source "
+"geometry and this is intentional. Depending on current baking parameters, as "
+"soon as the obstructing mesh is large enough to fit a navigation mesh area "
+"inside, the baking will generate navigation mesh areas that are inside the "
+"obstructing source geometry mesh."
msgstr ""
#: doc/classes/NavigationMeshGenerator.xml
@@ -36200,8 +36545,8 @@ msgid ""
"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child "
"nodes under the provided [code]root_node[/code] or a specific group of nodes "
"for potential source geometry. The parse behavior can be controlled with the "
-"[member NavigationMesh.geometry/parsed_geometry_type] and [member "
-"NavigationMesh.geometry/source_geometry_mode] properties on the "
+"[member NavigationMesh.geometry_parsed_geometry_type] and [member "
+"NavigationMesh.geometry_source_geometry_mode] properties on the "
"[NavigationMesh] resource."
msgstr ""
@@ -36218,8 +36563,21 @@ msgstr ""
#: doc/classes/NavigationMeshInstance.xml
msgid ""
"An instance of a [NavigationMesh]. It tells the [Navigation] node what can "
-"be navigated and what cannot, based on the [NavigationMesh] resource. This "
-"should be a child of a [Navigation] node."
+"be navigated and what cannot, based on the [NavigationMesh] resource.\n"
+"By default this node will register to the default [World] navigation map. If "
+"this node is a child of a [Navigation] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method NavigationServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The cost of entering this region from another region can be controlled with "
+"the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The cost of traveling distances inside this region can be controlled with "
+"the [member travel_cost] multiplier."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
@@ -36248,10 +36606,34 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding enters this region's navmesh from another regions navmesh "
+"the [code]enter_cost[/code] value is added to the path distance for "
+"determining the shortest path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationMesh] "
+"belongs to. On path requests with [method NavigationServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
msgid "The [NavigationMesh] resource to use."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding moves inside this region's navmesh the traveled distances "
+"are multiplied with [code]travel_cost[/code] for determining the shortest "
+"path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
msgid "Notifies when the navigation mesh bake operation is completed."
msgstr ""
@@ -36268,7 +36650,9 @@ msgid ""
"3D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationObstacle] is physics safe."
+"[NavigationObstacle] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle.xml
@@ -36308,7 +36692,9 @@ msgid ""
"2D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationObstacle2D] is physics safe."
+"[NavigationObstacle2D] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle2D.xml
@@ -36388,6 +36774,14 @@ msgstr ""
#: doc/classes/NavigationPolygon.xml
msgid ""
+"Returns the [NavigationMesh] resulting from this navigation polygon. This "
+"navmesh can be used to update the navmesh of a region with the [method "
+"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server "
+"behind the scene)."
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml
+msgid ""
"Returns a [PoolVector2Array] containing the vertices of an outline that was "
"created in the editor or by script."
msgstr ""
@@ -36424,6 +36818,30 @@ msgid ""
msgstr ""
#: doc/classes/NavigationPolygonInstance.xml
+msgid "A region of the 2D navigation map."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A region of the navigation map. It tells the [Navigation2DServer] what can "
+"be navigated and what cannot, based on its [NavigationPolygon] resource.\n"
+"By default this node will register to the default [World2D] navigation map. "
+"If this node is a child of a [Navigation2D] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The pathfinding cost of entering this region from another region can be "
+"controlled with the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The pathfinding cost of traveling distances inside this region can be "
+"controlled with the [member travel_cost] multiplier."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
msgid ""
"Returns the [RID] of this region on the [Navigation2DServer]. Combined with "
"[method Navigation2DServer.map_get_closest_point_owner] can be used to "
@@ -36431,6 +36849,22 @@ msgid ""
"navigation map."
msgstr ""
+#: doc/classes/NavigationPolygonInstance.xml
+msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationPolygon] "
+"belongs to. On path requests with [method Navigation2DServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid "The [NavigationPolygon] resource to use."
+msgstr ""
+
#: doc/classes/NavigationServer.xml
msgid "Server interface for low-level 3D navigation access."
msgstr ""
@@ -36506,6 +36940,12 @@ msgid "Bakes the navigation mesh."
msgstr ""
#: doc/classes/NavigationServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method NavigationServer.map_get_path])."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
msgid "Control activation of this server."
msgstr ""
@@ -37972,13 +38412,19 @@ msgstr ""
#: doc/classes/Node.xml
msgid ""
"Emitted when a child node enters the scene tree, either because it entered "
-"on its own or because this node entered with it."
+"on its own or because this node entered with it.\n"
+"This signal is emitted [i]after[/i] the child node's own [constant "
+"NOTIFICATION_ENTER_TREE] and [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
msgid ""
-"Emitted when a child node exits the scene tree, either because it exited on "
-"its own or because this node exited."
+"Emitted when a child node is about to exit the scene tree, either because it "
+"is being removed or freed directly, or because this node is exiting the "
+"tree.\n"
+"When this signal is received, the child [code]node[/code] is still in the "
+"tree and valid. This signal is emitted [i]after[/i] the child node's own "
+"[signal tree_exiting] and [constant NOTIFICATION_EXIT_TREE]."
msgstr ""
#: doc/classes/Node.xml
@@ -37990,7 +38436,10 @@ msgid "Emitted when the node is renamed."
msgstr ""
#: doc/classes/Node.xml
-msgid "Emitted when the node enters the tree."
+msgid ""
+"Emitted when the node enters the tree.\n"
+"This signal is emitted [i]after[/i] the related [constant "
+"NOTIFICATION_ENTER_TREE] notification."
msgstr ""
#: doc/classes/Node.xml
@@ -38000,15 +38449,21 @@ msgstr ""
#: doc/classes/Node.xml
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)."
+"the right place for de-initialization (or a \"destructor\", if you will).\n"
+"This signal is emitted [i]before[/i] the related [constant "
+"NOTIFICATION_EXIT_TREE] notification."
msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node enters a [SceneTree]."
+msgid ""
+"Notification received when the node enters a [SceneTree].\n"
+"This notification is emitted [i]before[/i] the related [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node is about to exit a [SceneTree]."
+msgid ""
+"Notification received when the node is about to exit a [SceneTree].\n"
+"This notification is emitted [i]after[/i] the related [signal tree_exiting]."
msgstr ""
#: doc/classes/Node.xml
@@ -38269,7 +38724,13 @@ msgid "Rotation in degrees, relative to the node's parent."
msgstr ""
#: doc/classes/Node2D.xml
-msgid "The node's scale. Unscaled value: [code](1, 1)[/code]."
+msgid ""
+"The node's scale. Unscaled value: [code](1, 1)[/code].\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
#: doc/classes/Node2D.xml
@@ -39709,6 +40170,10 @@ msgid ""
" if argument.find(\"=\") > -1:\n"
" var key_value = argument.split(\"=\")\n"
" arguments[key_value[0].lstrip(\"--\")] = key_value[1]\n"
+" else:\n"
+" # Options without an argument will be present in the dictionary,\n"
+" # with the value set to an empty string.\n"
+" arguments[argument.lstrip(\"--\")] = \"\"\n"
"[/codeblock]"
msgstr ""
@@ -40362,8 +40827,15 @@ msgstr ""
msgid ""
"Moves the file or directory to the system's recycle bin. See also [method "
"Directory.remove].\n"
+"The method takes only global paths, so you may need to use [method "
+"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/"
+"code] as it will not work in exported project.\n"
"[b]Note:[/b] If the user has disabled the recycle bin on their system, the "
-"file will be permanently deleted instead."
+"file will be permanently deleted instead.\n"
+"[codeblock]\n"
+"var file_to_remove = \"user://slot1.sav\"\n"
+"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/OS.xml
@@ -45202,7 +45674,18 @@ msgstr ""
#: doc/classes/PopupMenu.xml
msgid ""
"[PopupMenu] is a [Control] that displays a list of options. They are popular "
-"in toolbars or context menus."
+"in toolbars or context menus.\n"
+"[b]Incremental search:[/b] Like [ItemList] and [Tree], [PopupMenu] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/PopupMenu.xml
@@ -46709,7 +47192,16 @@ msgid ""
msgstr ""
#: doc/classes/ProjectSettings.xml
-msgid "Message to be displayed before the backtrace when the engine crashes."
+msgid ""
+"Message to be displayed before the backtrace when the engine crashes. By "
+"default, this message is only used in exported projects due to the editor-"
+"only override applied to this setting."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Editor-only override for [member debug/settings/crash_handler/message]. Does "
+"not affect exported projects in debug or release mode."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -46954,6 +47446,18 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default naming style for scene files to infer from their root nodes. "
+"Possible options are:\n"
+"- [code]0[/code] (Auto): Uses the scene root name as is without changing its "
+"casing.\n"
+"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase "
+"casing.\n"
+"- [code]2[/code] (snake_case): Converts the scene root name to snake_case "
+"casing."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -47179,6 +47683,198 @@ msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 1."
msgstr ""
@@ -47387,6 +48083,198 @@ msgid "Optional name for the 2D render layer 9."
msgstr ""
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 1."
msgstr ""
@@ -47654,6 +48542,49 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default cell height for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_height].\n"
+"[b]Note:[/b] Currently not implemented."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 2D navigation maps. See [method "
+"Navigation2DServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell height for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_height]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 3D navigation maps. See [method "
+"NavigationServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default map up vector for 3D navigation maps. See [method NavigationServer."
+"map_set_up]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -48327,20 +49258,28 @@ msgid ""
"cause.\n"
"The default value is a conservative one, so you are advised to tweak it "
"according to the hardware you are targeting.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"The default is a very conservative override for [code]rendering/gles3/"
-"shaders/max_concurrent_compiles[/code].\n"
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
"Depending on the specific devices you are targeting, you may want to raise "
"it.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
+"Depending on the specific browsers you are targeting, you may want to raise "
+"it.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -48348,19 +49287,28 @@ msgid ""
"The maximum size, in megabytes, that the ubershader cache can grow up to. On "
"startup, the least recently used entries will be deleted until the total "
"size is within bounds.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/ubershader_cache_size_mb[/"
-"code], so a smaller maximum size can be configured for mobile platforms, "
-"where storage space is more limited.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for mobile platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for web platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] Currently, shader caching is generally unavailable on web "
+"platforms.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -48392,14 +49340,22 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/shader_compilation_mode[/"
-"code], so asynchronous compilation can be disabled for mobile.\n"
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on mobile platforms.\n"
"You may want to do that since mobile GPUs generally won't support "
"ubershaders due to their complexity."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on web platforms.\n"
+"You may want to do that since certain browsers (especially on mobile "
+"platforms) generally won't support ubershaders due to their complexity."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
@@ -49156,7 +50112,6 @@ msgid ""
"- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/"
"code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, "
"small grid radius values may lead to unwanted groupings.\n"
-"[/codeblock]\n"
"[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more "
"effective and faster [VisibilityNotifier] functionality. For most use cases, "
"[method Vector3.distance_to] or [method Vector3.distance_squared_to] are "
@@ -51303,6 +52258,22 @@ msgid "Makes text fill width."
msgstr ""
#: doc/classes/RichTextLabel.xml
+msgid "Aligns top of the inline image to the top of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns center of the inline image to the center of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns bottom of the inline image to the baseline of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns bottom of the inline image to the bottom of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
msgid "Each list item has a number marker."
msgstr ""
@@ -53040,8 +54011,8 @@ msgid ""
" yield(get_tree().create_timer(1.0), \"timeout\")\n"
" print(\"Timer ended.\")\n"
"[/codeblock]\n"
-"The timer will be automatically freed after its time elapses, so be aware "
-"that any reference you might have kept to it will become invalid."
+"The timer will be dereferenced after its time elapses. To preserve the "
+"timer, you can keep a reference to it. See [Reference]."
msgstr ""
#: doc/classes/SceneTreeTimer.xml
@@ -53073,24 +54044,23 @@ msgid ""
"manually (i.e. by using [code]Tween.new()[/code]) are invalid. They can't be "
"used for tweening values, but you can do manual interpolation with [method "
"interpolate_value].\n"
-"A [SceneTreeTween] animation is composed of a sequence of [Tweener]s, which "
-"by default are executed one after another. You can create a sequence by "
-"appending [Tweener]s to the [SceneTreeTween]. Animating something with a "
-"[Tweener] is called tweening. Example tweening sequence looks like this:\n"
+"A tween animation is created by adding [Tweener]s to the [SceneTreeTween] "
+"object, using [method tween_property], [method tween_interval], [method "
+"tween_callback] or [method tween_method]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1)\n"
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"This sequence will make the [code]$Sprite[/code] node turn red, then shrink "
-"and finally the [method Node.queue_free] is called to remove the sprite. See "
-"methods [method tween_property], [method tween_interval], [method "
-"tween_callback] and [method tween_method] for more usage information.\n"
+"This sequence will make the [code]$Sprite[/code] node turn red, then shrink, "
+"before finally calling [method Node.queue_free] to free the sprite. "
+"[Tweener]s are executed one after another by default. This behavior can be "
+"changed using [method parallel] and [method set_parallel].\n"
"When a [Tweener] is created with one of the [code]tween_*[/code] methods, a "
"chained method call can be used to tweak the properties of this [Tweener]. "
-"For example, if you want to set different transition type in the above "
-"example, you can do:\n"
+"For example, if you want to set a different transition type in the above "
+"example, you can use [method set_trans]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1).set_trans(Tween."
@@ -53099,8 +54069,9 @@ msgid ""
"TRANS_BOUNCE)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Most of the [SceneTreeTween] methods can be chained this way too. In this "
-"example the [SceneTreeTween] is bound and have set a default transition:\n"
+"Most of the [SceneTreeTween] methods can be chained this way too. In the "
+"following example the [SceneTreeTween] is bound to the running script's node "
+"and a default transition is set for its [Tweener]s:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween().bind_node(self).set_trans(Tween."
"TRANS_ELASTIC)\n"
@@ -53108,16 +54079,16 @@ msgid ""
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Another interesting use for [SceneTreeTween]s is animating arbitrary set of "
+"Another interesting use for [SceneTreeTween]s is animating arbitrary sets of "
"objects:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"for sprite in get_children():\n"
-" tween.tween_property(sprite, \"position\", Vector2(), 1)\n"
+" tween.tween_property(sprite, \"position\", Vector2(0, 0), 1)\n"
"[/codeblock]\n"
"In the example above, all children of a node are moved one after another to "
"position (0, 0).\n"
-"Some [Tweener]s use transitions and eases. The first accepts an [enum Tween."
+"Some [Tweener]s use transitions and eases. The first accepts a [enum Tween."
"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 Tween.EaseType] constant, and "
@@ -53129,7 +54100,7 @@ msgid ""
"tween_cheatsheet.png]Tween easing and transition types cheatsheet[/url]\n"
"[b]Note:[/b] All [SceneTreeTween]s will automatically start by default. To "
"prevent a [SceneTreeTween] from autostarting, you can call [method stop] "
-"immediately after it was created."
+"immediately after it is created."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53159,21 +54130,24 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
-"Processes the [SceneTreeTween] by given [code]delta[/code] value, in "
-"seconds. Mostly useful when the [SceneTreeTween] is paused, for controlling "
-"it manually. Can also be used to end the [SceneTreeTween] animation "
-"immediately, by using [code]delta[/code] longer than the whole duration.\n"
+"Processes the [SceneTreeTween] by the given [code]delta[/code] value, in "
+"seconds. This is mostly useful for manual control when the [SceneTreeTween] "
+"is paused. It can also be used to end the [SceneTreeTween] animation "
+"immediately, by setting [code]delta[/code] longer than the whole duration of "
+"the [SceneTreeTween] animation.\n"
"Returns [code]true[/code] if the [SceneTreeTween] still has [Tweener]s that "
"haven't finished.\n"
-"[b]Note:[/b] The [SceneTreeTween] will become invalid after finished, but "
-"you can call [method stop] after the step, to keep it and reset."
+"[b]Note:[/b] The [SceneTreeTween] will become invalid in the next processing "
+"frame after its animation finishes. Calling [method stop] after performing "
+"[method custom_step] instead keeps and resets the [SceneTreeTween]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Returns the total time in seconds the [SceneTreeTween] has been animating (i."
-"e. time since it started, not counting pauses etc.). The time is affected by "
-"[method set_speed_scale] and [method stop] will reset it to [code]0[/code].\n"
+"e. the time since it started, not counting pauses etc.). The time is "
+"affected by [method set_speed_scale], and [method stop] will reset it to "
+"[code]0[/code].\n"
"[b]Note:[/b] As it results from accumulating frame deltas, the time returned "
"after the [SceneTreeTween] has finished animating will be slightly greater "
"than the actual [SceneTreeTween] duration."
@@ -53209,11 +54183,10 @@ msgstr ""
msgid ""
"Returns whether the [SceneTreeTween] is valid. A valid [SceneTreeTween] is a "
"[SceneTreeTween] contained by the scene tree (i.e. the array from [method "
-"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). "
-"[SceneTreeTween] might become invalid when it has finished tweening or was "
-"killed, also when created with [code]Tween.new()[/code]. Invalid "
-"[SceneTreeTween] can't have [Tweener]s appended, because it can't animate "
-"them. You can however still use [method interpolate_value]."
+"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). A "
+"[SceneTreeTween] might become invalid when it has finished tweening, is "
+"killed, or when created with [code]SceneTreeTween.new()[/code]. Invalid "
+"[SceneTreeTween]s can't have [Tweener]s appended."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53253,16 +54226,15 @@ msgstr ""
msgid ""
"Sets the number of times the tweening sequence will be repeated, i.e. "
"[code]set_loops(2)[/code] will run the animation twice.\n"
-"Calling this method without arguments will make the [SceneTreeTween] run "
-"infinitely, until it is either killed by [method kill] or by freeing bound "
-"node, or all the animated objects have been freed (which makes further "
+"Calling this method without arguments will make the [Tween] run infinitely, "
+"until either it is killed with [method kill], the [Tween]'s bound node is "
+"freed, or all the animated objects have been freed (which makes further "
"animation impossible).\n"
"[b]Warning:[/b] Make sure to always add some duration/delay when using "
-"infinite loops. 0-duration looped animations (e.g. single [CallbackTweener] "
-"with no delay or [PropertyTweener] with invalid node) are equivalent to "
-"infinite [code]while[/code] loops and will freeze your game. If a "
-"[SceneTreeTween]'s lifetime depends on some node, always use [method "
-"bind_node]."
+"infinite loops. To prevent the game freezing, 0-duration looped animations "
+"(e.g. a single [CallbackTweener] with no delay) are stopped after a small "
+"number of loops, which may produce unexpected results. If a [Tween]'s "
+"lifetime depends on some node, always use [method bind_node]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53324,10 +54296,10 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Creates and appends an [IntervalTweener]. This method can be used to create "
-"delays in the tween animation, as an alternative for using the delay in "
-"other [Tweener]s or when there's no animation (in which case the "
-"[SceneTreeTween] acts as a timer). [code]time[/code] is the length of the "
-"interval, in seconds.\n"
+"delays in the tween animation, as an alternative to using the delay in other "
+"[Tweener]s, or when there's no animation (in which case the [SceneTreeTween] "
+"acts as a timer). [code]time[/code] is the length of the interval, in "
+"seconds.\n"
"Example: creating an interval in code execution.\n"
"[codeblock]\n"
"# ... some code\n"
@@ -53381,8 +54353,8 @@ msgid ""
"Creates and appends a [PropertyTweener]. This method tweens a "
"[code]property[/code] of an [code]object[/code] between an initial value and "
"[code]final_val[/code] in a span of time equal to [code]duration[/code], in "
-"seconds. The initial value by default is a value at the time the tweening of "
-"the [PropertyTweener] start. For example:\n"
+"seconds. The initial value by default is the property's value at the time "
+"the tweening of the [PropertyTweener] starts. For example:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"tween.tween_property($Sprite, \"position\", Vector2(100, 200), 1)\n"
@@ -53413,16 +54385,15 @@ msgid ""
"Emitted when the [SceneTreeTween] has finished all tweening. Never emitted "
"when the [SceneTreeTween] is set to infinite looping (see [method "
"set_loops]).\n"
-"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) after this signal "
-"is emitted, but it doesn't happen immediately, but on the next processing "
-"frame. Calling [method stop] inside the signal callback will preserve the "
-"[SceneTreeTween]."
+"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) in the next "
+"processing frame after this signal is emitted. Calling [method stop] inside "
+"the signal callback will prevent the [SceneTreeTween] from being removed."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Emitted when a full loop is complete (see [method set_loops]), providing the "
-"loop index. This signal is not emitted after final loop, use [signal "
+"loop index. This signal is not emitted after the final loop, use [signal "
"finished] instead for this case."
msgstr ""
@@ -53430,7 +54401,7 @@ msgstr ""
msgid ""
"Emitted when one step of the [SceneTreeTween] is complete, providing the "
"step index. One step is either a single [Tweener] or a group of [Tweener]s "
-"running parallelly."
+"running in parallel."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -54762,7 +55733,12 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-msgid "Scale part of the local transformation."
+msgid ""
+"Scale part of the local transformation.\n"
+"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, the scale values will either be all "
+"positive or all negative."
msgstr ""
#: doc/classes/Spatial.xml
@@ -57393,11 +58369,11 @@ msgstr ""
msgid ""
"Returns [code]true[/code] if this string contains a valid integer.\n"
"[codeblock]\n"
-"print(\"7\".is_valid_int()) # Prints \"True\"\n"
-"print(\"14.6\".is_valid_int()) # Prints \"False\"\n"
-"print(\"L\".is_valid_int()) # Prints \"False\"\n"
-"print(\"+3\".is_valid_int()) # Prints \"True\"\n"
-"print(\"-12\".is_valid_int()) # Prints \"True\"\n"
+"print(\"7\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"14.6\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"L\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"+3\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"-12\".is_valid_integer()) # Prints \"True\"\n"
"[/codeblock]"
msgstr ""
@@ -60863,6 +61839,10 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml
+msgid "If [code]true[/code], this TileMap bakes a navigation region."
+msgstr ""
+
+#: doc/classes/TileMap.xml
msgid "If [code]true[/code], the cell's UVs will be clipped."
msgstr ""
@@ -60969,6 +61949,10 @@ msgid "The TileMap orientation mode. See [enum Mode] for possible values."
msgstr ""
#: doc/classes/TileMap.xml
+msgid "The navigation layers the TileMap generates its navigation regions in."
+msgstr ""
+
+#: doc/classes/TileMap.xml
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 "
@@ -62100,7 +63084,12 @@ msgstr ""
#: doc/classes/Transform2D.xml
msgid ""
"Returns a copy of the transform scaled by the given [code]scale[/code] "
-"factor, using matrix multiplication."
+"factor, using matrix multiplication.\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
#: doc/classes/Transform2D.xml
@@ -62255,7 +63244,18 @@ msgid ""
"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]."
+"to remove it from the [Tree].\n"
+"[b]Incremental search:[/b] Like [ItemList] and [PopupMenu], [Tree] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/Tree.xml
@@ -65771,11 +66771,12 @@ msgid "This enabler will stop [Particles2D] nodes."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _process function."
+msgid "This enabler will stop the parent's [method Node._process] function."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _physics_process function."
+msgid ""
+"This enabler will stop the parent's [method Node._physics_process] function."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
@@ -65815,6 +66816,16 @@ msgid "The VisibilityNotifier's bounding box."
msgstr ""
#: doc/classes/VisibilityNotifier.xml
+msgid ""
+"In addition to checking whether a node is on screen or within a [Camera]'s "
+"view, VisibilityNotifier can also optionally check whether a node is within "
+"a specified maximum distance when using a [Camera] with perspective "
+"projection. This is useful for throttling the performance requirements of "
+"nodes that are far away.\n"
+"[b]Note:[/b] This feature will be disabled if set to 0.0."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier.xml
msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view."
msgstr ""
@@ -70560,6 +71571,16 @@ msgid "The amount of shader rebinds in the frame."
msgstr ""
#: doc/classes/VisualServer.xml
+msgid ""
+"The peak amount of shaders that have been under compilation in the frame.\n"
+"This is useful to know when asynchronous shader compilation has finished for "
+"the current shaders on screen.\n"
+"[b]Note:[/b] For complete certainty, only assume there are no outstanding "
+"compilations when this value is zero for at least two frames in a row.\n"
+"Unimplemented in the GLES2 rendering backend, always returns 0."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
msgid "The amount of surface changes in the frame."
msgstr ""
@@ -73756,8 +74777,8 @@ msgstr ""
#: doc/classes/World.xml
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."
+"scenario, a navigation map and a sound space. Spatial nodes register their "
+"resources into the current world."
msgstr ""
#: doc/classes/World.xml
@@ -73772,8 +74793,13 @@ msgstr ""
#: doc/classes/World.xml
msgid ""
-"The World's fallback_environment will be used if the World's [Environment] "
-"fails or is missing."
+"The World's fallback environment will be used if [member environment] fails "
+"or is missing."
+msgstr ""
+
+#: doc/classes/World.xml
+msgid ""
+"The [RID] of this world's navigation map. Used by the [NavigationServer]."
msgstr ""
#: doc/classes/World.xml
@@ -73791,8 +74817,8 @@ msgstr ""
#: doc/classes/World2D.xml
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."
+"visual scenario, a navigation map and a sound space. 2D nodes register their "
+"resources into the current 2D world."
msgstr ""
#: doc/classes/World2D.xml
@@ -73810,6 +74836,11 @@ msgstr ""
#: doc/classes/World2D.xml
msgid ""
+"The [RID] of this world's navigation map. Used by the [Navigation2DServer]."
+msgstr ""
+
+#: doc/classes/World2D.xml
+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 ""
diff --git a/doc/translations/hu.po b/doc/translations/hu.po
index 7ff6d66bf1..280424c8c0 100644
--- a/doc/translations/hu.po
+++ b/doc/translations/hu.po
@@ -10,12 +10,13 @@
# balintmaci <balintmaci@gmail.com>, 2021.
# Balázs Püspök-Kiss <pkblazsak@gmail.com>, 2021.
# Szevin <kevingeiger25@gmail.com>, 2022.
+# 6Leoo6 <leo.takacs@yahoo.com>, 2022.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2022-01-26 23:53+0000\n"
-"Last-Translator: Szevin <kevingeiger25@gmail.com>\n"
+"PO-Revision-Date: 2022-06-19 11:54+0000\n"
+"Last-Translator: 6Leoo6 <leo.takacs@yahoo.com>\n"
"Language-Team: Hungarian <https://hosted.weblate.org/projects/godot-engine/"
"godot-class-reference/hu/>\n"
"Language: hu\n"
@@ -23,7 +24,7 @@ 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.11-dev\n"
+"X-Generator: Weblate 4.13.1-dev\n"
#: doc/tools/make_rst.py
msgid "Description"
@@ -47,7 +48,7 @@ msgstr "Téma Tulajdonságai"
#: doc/tools/make_rst.py
msgid "Signals"
-msgstr "Jelzések"
+msgstr "jelek"
#: doc/tools/make_rst.py
msgid "Enumerations"
@@ -365,7 +366,7 @@ msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
msgid ""
"Compares two values by checking their actual contents, recursing into any "
-"`Array` or `Dictionary` up to its deepest level.\n"
+"[Array] or [Dictionary] up to its deepest level.\n"
"This compares to [code]==[/code] in a number of ways:\n"
"- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/"
"code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] "
@@ -412,7 +413,7 @@ msgid ""
"- 1.0: Linear\n"
"- Greater than 1.0 (exclusive): Ease in\n"
"[/codeblock]\n"
-"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.4/img/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/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]."
@@ -1119,7 +1120,7 @@ msgid ""
"[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/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/img/"
"smoothstep_ease_comparison.png]Comparison between smoothstep() and ease(x, "
"-1.6521) return values[/url]"
msgstr ""
@@ -3397,6 +3398,12 @@ msgstr ""
#: doc/classes/@GlobalScope.xml
msgid ""
+"Hints that an integer property is a bitmask using the optionally named 2D "
+"navigation layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml
+msgid ""
"Hints that an integer property is a bitmask using the optionally named 3D "
"render layers."
msgstr ""
@@ -3409,6 +3416,12 @@ msgstr ""
#: doc/classes/@GlobalScope.xml
msgid ""
+"Hints that an integer property is a bitmask using the optionally named 3D "
+"navigation layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml
+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]."
@@ -8384,7 +8397,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/AStar.xml
+#: doc/classes/AStar.xml doc/classes/AStar2D.xml
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[/"
@@ -8583,7 +8596,10 @@ msgid ""
msgstr ""
#: doc/classes/AStar2D.xml
-msgid "Returns whether there is a connection/segment between the given points."
+msgid ""
+"Returns whether there is a connection/segment between the given points. 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/AStar2D.xml
@@ -8600,10 +8616,6 @@ msgid ""
msgstr ""
#: doc/classes/AStar2D.xml
-msgid "Deletes the segment between the given points."
-msgstr ""
-
-#: doc/classes/AStar2D.xml
msgid ""
"Returns the closest position to [code]to_position[/code] that resides inside "
"a segment between two connected points.\n"
@@ -8788,7 +8800,9 @@ msgid ""
"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."
+"transmit audio over the network. When capturing audio data from a "
+"microphone, the format of the samples will be stereo 32-bit floating point "
+"PCM."
msgstr ""
#: doc/classes/AudioEffectCapture.xml
@@ -13631,7 +13645,7 @@ msgid ""
msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
-#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/Navigation2D.xml
msgid "Returns the object's [RID]."
msgstr ""
@@ -19106,11 +19120,14 @@ msgid ""
msgstr ""
#: doc/classes/CurveTexture.xml
-msgid "The [code]curve[/code] rendered onto the texture."
+msgid "The [Curve] that is rendered onto the texture."
msgstr ""
#: doc/classes/CurveTexture.xml
-msgid "The width of the texture."
+msgid ""
+"The width of the texture (in pixels). Higher values make it possible to "
+"represent high-frequency data better (such as sudden direction changes), at "
+"the cost of increased generation time and memory usage."
msgstr ""
#: doc/classes/CylinderMesh.xml
@@ -19396,6 +19413,13 @@ msgid "Returns the list of keys in the [Dictionary]."
msgstr ""
#: doc/classes/Dictionary.xml
+msgid ""
+"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, "
+"duplicate keys will not be copied over, unless [code]overwrite[/code] is "
+"[code]true[/code]."
+msgstr ""
+
+#: doc/classes/Dictionary.xml
msgid "Returns the number of keys in the dictionary."
msgstr ""
@@ -21334,9 +21358,23 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide a state data you want to be saved, like view "
+"position, grid settings, folding, etc. 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). This data is automatically saved for "
+"each scene in an [code]editstate[/code] file in the editor metadata folder. "
+"If you want to store global (scene-independent) editor data for your plugin, "
+"you can use [method get_window_layout] instead.\n"
+"Use [method set_state] to restore your saved state.\n"
+"[b]Note:[/b] This method should not be used to save important settings that "
+"should persist with the project.\n"
+"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be "
+"stored and restored correctly.\n"
+"[codeblock]\n"
+"func get_state():\n"
+" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n"
+" return state\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -21347,9 +21385,18 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide the GUI layout of the plugin or any other "
+"data you want to be stored. 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). The data is stored in the "
+"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n"
+"Use [method set_window_layout] to restore your saved layout.\n"
+"[codeblock]\n"
+"func get_window_layout(configuration):\n"
+" configuration.set_value(\"MyPlugin\", \"window_position\", $Window."
+"position)\n"
+" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -21462,11 +21509,30 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the state saved by [method get_state]."
+msgid ""
+"Restore the state saved by [method get_state]. This method is called when "
+"the current scene tab is changed in the editor.\n"
+"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise "
+"it will not be recognized and this method will not be called.\n"
+"[codeblock]\n"
+"func set_state(data):\n"
+" zoom = data.get(\"zoom\", 1.0)\n"
+" preferred_color = data.get(\"my_color\", Color.white)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the plugin GUI layout saved by [method get_window_layout]."
+msgid ""
+"Restore the plugin GUI layout and data saved by [method get_window_layout]. "
+"This method is called for every plugin on editor startup. Use the provided "
+"[code]configuration[/code] file to read your saved data.\n"
+"[codeblock]\n"
+"func set_window_layout(configuration):\n"
+" $Window.position = configuration.get_value(\"MyPlugin\", "
+"\"window_position\", Vector2())\n"
+" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", "
+"Color.white)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -26101,7 +26167,8 @@ msgid ""
"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])."
+"at fixed steps (see [member width]). See also [GradientTexture2D] and "
+"[CurveTexture]."
msgstr ""
#: doc/classes/GradientTexture.xml
@@ -26123,7 +26190,8 @@ msgid ""
"repeat] types using colors obtained from the gradient. 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] and [member height])."
+"[member width] and [member height]). See also [GradientTexture] and "
+"[CurveTexture]."
msgstr ""
#: doc/classes/GradientTexture2D.xml
@@ -26929,6 +26997,12 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+msgid ""
+"If [code]true[/code], this GridMap uses cell navmesh resources to create "
+"navigation regions."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid "If [code]true[/code], grid items are centered on the X axis."
msgstr ""
@@ -26979,6 +27053,10 @@ msgid "The assigned [MeshLibrary]."
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+msgid "The navigation layers the GridMap generates its navigation regions in."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
"Overrides the default friction and bounce physics properties for the whole "
"[GridMap]."
@@ -28202,7 +28280,7 @@ msgid ""
" # 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 body = to_json({\"name\": \"Godette\"})\n"
" error = http_request.request(\"https://httpbin.org/post\", [], true, "
"HTTPClient.METHOD_POST, body)\n"
" if error != OK:\n"
@@ -29369,7 +29447,7 @@ msgstr ""
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 "
+"([member 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 "
@@ -29518,10 +29596,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Returns the mouse mode. See the constants for more information."
-msgstr ""
-
-#: doc/classes/Input.xml
msgid ""
"Gets an input vector by specifying four actions for the positive and "
"negative X and Y axes.\n"
@@ -29715,24 +29789,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Sets the mouse mode. See the constants for more information."
-msgstr ""
-
-#: doc/classes/Input.xml
-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
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 "
@@ -29768,6 +29824,24 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
+msgid "Controls the mouse mode. See [enum MouseMode] for more information."
+msgstr ""
+
+#: doc/classes/Input.xml
+msgid ""
+"If [code]true[/code], similar input events sent by the operating system are "
+"accumulated. 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 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
msgid "Emitted when a joypad device has been connected or disconnected."
msgstr ""
@@ -30075,8 +30149,8 @@ msgstr ""
#: doc/classes/InputEventJoypadButton.xml
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]."
+"Represents the pressure the user puts on the button with their finger, if "
+"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]."
msgstr ""
#: doc/classes/InputEventJoypadMotion.xml
@@ -30339,9 +30413,9 @@ 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 "
+"at most. If you need more precise input reporting, set [member Input."
+"use_accumulated_input] to [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."
@@ -30828,7 +30902,18 @@ msgid ""
"[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."
+"fixed_column_width] greater than zero to wrap the text.\n"
+"[b]Incremental search:[/b] Like [PopupMenu] and [Tree], [ItemList] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/ItemList.xml
@@ -34575,11 +34660,16 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Returns the override [Material] for a surface of the [Mesh] resource.\n"
+"[b]Note:[/b] This function only returns [i]override[/i] materials associated "
+"with this [MeshInstance]. Consider using [method get_active_material] or "
+"[method Mesh.surface_get_material] to get materials associated with the "
+"[Mesh] resource."
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the number of surface materials."
+msgid "Returns the number of surface override materials."
msgstr ""
#: doc/classes/MeshInstance.xml
@@ -34616,7 +34706,10 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Sets the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Sets the override [Material] for the specified surface of the [Mesh] "
+"resource. This material is associated with this [MeshInstance] rather than "
+"with the [Mesh] resource."
msgstr ""
#: doc/classes/MeshInstance.xml
@@ -34647,9 +34740,10 @@ msgstr ""
#: doc/classes/MeshInstance2D.xml
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\"."
+"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be "
+"automatically created from an existing [Sprite] via a tool in the editor "
+"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to "
+"MeshInstance2D[/b] at the top of the 2D editor viewport."
msgstr ""
#: doc/classes/MeshInstance2D.xml
@@ -35407,6 +35501,9 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"Provides navigation and pathfinding within a collection of "
"[NavigationMesh]es. By default, these will be automatically collected from "
"child [NavigationMeshInstance] nodes. In addition to basic pathfinding, this "
@@ -35447,7 +35544,14 @@ msgid ""
msgstr ""
#: doc/classes/Navigation.xml
+msgid "Returns the [RID] of the navigation map on the [NavigationServer]."
+msgstr ""
+
+#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"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, "
@@ -35469,16 +35573,31 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation.get_simple_path] path query."
+msgstr ""
+
+#: doc/classes/Navigation.xml
+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/Navigation.xml doc/classes/Navigation2DServer.xml
+#: doc/classes/NavigationServer.xml
+msgid ""
+"Emitted when a navigation map is updated, when a region moves or is modified."
+msgstr ""
+
#: doc/classes/Navigation2D.xml
msgid "2D navigation and pathfinding node."
msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -35498,6 +35617,9 @@ msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -35507,6 +35629,12 @@ msgstr ""
msgid "The XY plane cell size to use for fields."
msgstr ""
+#: doc/classes/Navigation2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation2D.get_simple_path] path query."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml
msgid "Server interface for low-level 2D navigation access."
msgstr ""
@@ -35523,8 +35651,12 @@ msgid ""
"through scripts.\n"
"For two regions to be connected to each other, they must share a similar "
"edge. An edge is considered connected to another if both of its two vertices "
-"are at a distance less than [member Navigation.edge_connection_margin] to "
-"the respective other edge's vertex.\n"
+"are at a distance less than navigation map [code]edge_connection_margin[/"
+"code] to the respective other edge's vertex.\n"
+"You may assign navigation layers to regions with [method Navigation2DServer."
+"region_set_navigation_layers], which then can be checked upon when "
+"requesting a path with [method Navigation2DServer.map_get_path]. This allows "
+"allowing or forbidding some areas to 2D objects.\n"
"To use the collision avoidance system, you may use agents. You can set an "
"agent's target velocity, then the servers will emit a callback with a "
"modified velocity.\n"
@@ -35552,7 +35684,17 @@ msgid "Returns [code]true[/code] if the map got changed the previous frame."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Callback called at the end of the RVO process."
+msgid ""
+"Callback called at the end of the RVO process. If a callback is created "
+"manually and the agent is placed on a navigation map it will calculate "
+"avoidance for the agent and dispatch the calculated [code]safe_velocity[/"
+"code] to the [code]receiver[/code] object with a signal to the chosen "
+"[code]method[/code] name.\n"
+"[b]Note:[/b] Created callbacks are always processed independently of the "
+"SceneTree state as long as the agent is on a navigation map and not freed. "
+"To disable the dispatch of a callback from an agent use [method "
+"agent_set_callback] again with a [code]null[/code] object as the "
+"[code]receiver[/code]."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -35607,15 +35749,55 @@ msgid "Destroys the given RID."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns all created navigation map [RID]s on the NavigationServer. This "
+"returns both 2D and 3D created navigation maps as there is technically no "
+"distinction between them."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Create a new map."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"This function immediately forces synchronization of the specified navigation "
+"[code]map[/code] [RID]. By default navigation maps are only synchronized at "
+"the end of each physics frame. This function can be used to immediately "
+"(re)calculate all the navigation meshes and region connections of the "
+"navigation map. This makes it possible to query a navigation path for a "
+"changed map immediately and in the same frame (multiple times if needed).\n"
+"Due to technical restrictions the current NavigationServer command queue "
+"will be flushed. This means all already queued update commands for this "
+"physics frame will be executed, even those intended for other maps, regions "
+"and agents not part of the specified map. The expensive computation of the "
+"navigation meshes and region connections of a map will only be done for the "
+"specified map. Other maps will receive the normal synchronization at the end "
+"of the physics frame. Should the specified map receive changes after the "
+"forced update it will update again as well when the other maps receive their "
+"update.\n"
+"Avoidance processing and dispatch of the [code]safe_velocity[/code] signals "
+"is untouched by this function and continues to happen for all maps and "
+"agents at the end of the physics frame.\n"
+"[b]Note:[/b] With great power comes great responsibility. This function "
+"should only be used by users that really know what they are doing and have a "
+"good reason for it. Forcing an immediate update of a navigation map requires "
+"locking the NavigationServer and flushing the entire NavigationServer "
+"command queue. Not only can this severely impact the performance of a game "
+"but it can also introduce bugs if used inappropriately without much "
+"foresight."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns all navigation agents [RID]s that are currently assigned to the "
"requested navigation [code]map[/code]."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Returns the map cell size."
msgstr ""
@@ -35639,7 +35821,10 @@ msgid ""
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Returns the navigation path to reach the destination from the origin."
+msgid ""
+"Returns the navigation path to reach the destination from the origin. "
+"[code]navigation_layers[/code] is a bitmask of all region layers that are "
+"allowed to be in the path."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -35656,6 +35841,12 @@ msgstr ""
msgid "Sets the map active."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/"
+"b] Currently not implemented."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Set the map cell size used to weld the navigation mesh polygons."
msgstr ""
@@ -35671,14 +35862,73 @@ msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"Returns the ending point of a connection door. [code]connection[/code] is an "
+"index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns the starting point of a connection door. [code]connection[/code] is "
+"an index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns how many connections this [code]region[/code] has with other regions "
+"in the map."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns the navigation map [RID] the requested [code]region[/code] is "
"currently assigned to."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Returns the region's navigation layers."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns [code]true[/code] if the provided [code]point[/code] in world space "
+"is currently owned by the provided navigation [code]region[/code]. Owned in "
+"this context means that one of the region's navigation mesh polygon faces "
+"has a possible position at the closest distance to this point compared to "
+"all other navigation meshes from other navigation regions that are also "
+"registered on the navigation map of the provided region.\n"
+"If multiple navigation meshes have positions at equal distance the "
+"navigation region whose polygons are processed first wins the ownership. "
+"Polygons are processed in the same order that navigation regions were "
+"registered on the NavigationServer.\n"
+"[b]Note:[/b] If navigation meshes from different navigation regions overlap "
+"(which should be avoided in general) the result might not be what is "
+"expected."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Sets the map for the region."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method Navigation2DServer.map_get_path])."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Sets the navigation mesh for the region."
msgstr ""
@@ -35687,6 +35937,10 @@ msgstr ""
msgid "Sets the global transformation for the region."
msgstr ""
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]."
+msgstr ""
+
#: doc/classes/NavigationAgent.xml
msgid "3D agent used in navigation for collision avoidance."
msgstr ""
@@ -35696,9 +35950,16 @@ msgid ""
"3D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationAgent] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World] navigation map. If this node is a child of a [Navigation] "
+"node it will register to the navigation map of the navigation node or the "
+"function [method set_navigation] can be used to set the navigation node "
+"directly. [NavigationAgent] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -35716,7 +35977,15 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-msgid "Returns the path from start to finish in global coordinates."
+msgid ""
+"Returns this agent's current path from start to finish in global "
+"coordinates. The path only updates when the target location is changed or "
+"the agent requires a repath. The path array is not intended to be used in "
+"direct path movement as the agent has its own internal path logic that would "
+"get corrupted by changing the path array manually. Use the intended [method "
+"get_next_location] once every physics frame to receive the next path point "
+"for the agents movement as this function also updates the internal path "
+"logic."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -35731,11 +36000,24 @@ msgid ""
"system."
msgstr ""
-#: doc/classes/NavigationAgent.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"Returns a [Vector3] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the origin of the agent's parent."
+"Returns the [RID] of the navigation map for this NavigationAgent node. This "
+"function returns always the map set on the NavigationAgent node and not the "
+"map of the abstract agent on the NavigationServer. If the agent map is "
+"changed directly with the NavigationServer API the NavigationAgent node will "
+"not be aware of the map change. Use [method set_navigation_map] to change "
+"the navigation map for the NavigationAgent and also update the agent on the "
+"NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
+"Returns the next location in global coordinates that can be moved to, making "
+"sure that there are no static objects in the way. If the agent does not have "
+"a navigation path, it will return the position of the agent's parent. The "
+"use of this function once every physics frame is required to update the "
+"internal path logic of the NavigationAgent."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -35776,6 +36058,12 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"Sets the [RID] of the navigation map this NavigationAgent node should use "
+"and also updates the [code]agent[/code] on the NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"Sets the user desired final location. This will clear the current navigation "
"path."
msgstr ""
@@ -35788,7 +36076,13 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml
-msgid "The agent height offset to match the navigation mesh height."
+msgid ""
+"The NavigationAgent height offset is subtracted from the y-axis value of any "
+"vector path position for this NavigationAgent. The NavigationAgent height "
+"offset does not change or influence the navigation mesh or pathfinding query "
+"result. Additional navigation maps that use regions with navigation meshes "
+"that the developer baked with appropriate agent radius or height values are "
+"required to support different-sized agents."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -35815,26 +36109,53 @@ msgstr ""
msgid "The maximum speed that an agent can move."
msgstr ""
+#: doc/classes/NavigationAgent.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "The distance to search for other agents."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"The distance threshold before a path point is considered to be reached. This "
+"will allow an agent to not have to hit a path point on the path exactly, but "
+"in the area. If this value is set to high the NavigationAgent will skip "
+"points on the path which can lead to leaving the navigation mesh. If this "
+"value is set to low the NavigationAgent will be stuck in a repath loop cause "
+"it will constantly overshoot or undershoot the distance to the next point on "
+"each physics frame update."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"The maximum distance the agent is allowed away from the ideal path to the "
"final location. This can happen due to trying to avoid collisions. When the "
"maximum distance is exceeded, it recalculates the ideal path."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-msgid "The radius of the agent."
+msgid ""
+"The radius of the avoidance agent. This is the \"body\" of the avoidance "
+"agent and not the avoidance maneuver starting radius (which is controlled by "
+"[member neighbor_dist]).\n"
+"Does not affect normal pathfinding. To change an actor's pathfinding radius "
+"bake [NavigationMesh] resources with a different [member NavigationMesh."
+"agent_radius] property and use different navigation maps for each actor size."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"The distance threshold before a target is considered to be reached. This "
-"will allow an agent to not have to hit a point on the path exactly, but in "
-"the area."
+"The distance threshold before the final target point is considered to be "
+"reached. This will allow an agent to not have to hit the point of the final "
+"target exactly, but only the area. If this value is set to low the "
+"NavigationAgent will be stuck in a repath loop cause it will constantly "
+"overshoot or undershoot the distance to the final target point on each "
+"physics frame update."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -35877,9 +36198,16 @@ msgid ""
"2D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationAgent2D] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World2D] navigation map. If this node is a child of a "
+"[Navigation2D] node it will register to the navigation map of the navigation "
+"node or the function [method set_navigation] can be used to set the "
+"navigation node directly. [NavigationAgent2D] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent2D.xml
@@ -35895,13 +36223,6 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent2D.xml
-msgid ""
-"Returns a [Vector2] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the position of the agent's parent."
-msgstr ""
-
-#: doc/classes/NavigationAgent2D.xml
msgid "Returns the [RID] of this agent on the [Navigation2DServer]."
msgstr ""
@@ -35921,6 +36242,13 @@ msgid ""
"only be enabled on agents that currently require it."
msgstr ""
+#: doc/classes/NavigationAgent2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent2D] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationMesh.xml
msgid "A mesh to approximate the walkable areas and obstacles."
msgstr ""
@@ -35951,8 +36279,8 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
-"Returns whether the specified [code]bit[/code] of the [member geometry/"
-"collision_mask] is set."
+"Returns whether the specified [code]bit[/code] of the [member "
+"geometry_collision_mask] is set."
msgstr ""
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
@@ -35974,9 +36302,9 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/"
-"code] in the [member geometry/collision_mask].\n"
+"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]."
+"code] in the [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
@@ -35990,14 +36318,14 @@ 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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36009,7 +36337,7 @@ 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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36037,13 +36365,17 @@ msgstr ""
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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
-"If [code]true[/code], marks walkable spans as not walkable if the clearance "
-"above the span is less than [member agent/height]."
+"If the baking [AABB] has a volume the navigation mesh baking will be "
+"restricted to its enclosing area."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+msgid "The position offset applied to the [member filter_baking_aabb] [AABB]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36053,13 +36385,19 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]true[/code], marks non-walkable spans as walkable if their maximum "
-"is within [member agent/max_climb] of a walkable neighbor."
+"is within [member agent_max_climb] of a walkable neighbor."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+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
msgid ""
"The physics layers to scan for static colliders.\n"
-"Only used when [member geometry/parsed_geometry_type] is [constant "
+"Only used when [member geometry_parsed_geometry_type] is [constant "
"PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]."
msgstr ""
@@ -36078,7 +36416,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"The name of the group to scan for geometry.\n"
-"Only used when [member geometry/source_geometry_mode] is [constant "
+"Only used when [member geometry_source_geometry_mode] is [constant "
"SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant "
"SOURCE_GEOMETRY_GROUPS_EXPLICIT]."
msgstr ""
@@ -36141,7 +36479,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Parses [StaticBody] colliders as geometry. The collider should be in any of "
-"the layers specified by [member geometry/collision_mask]."
+"the layers specified by [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36162,13 +36500,13 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Scans nodes in a group and their child nodes recursively for geometry. The "
-"group is specified by [member geometry/source_group_name]."
+"group is specified by [member geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Uses nodes in a group for geometry. The group is specified by [member "
-"geometry/source_group_name]."
+"geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36210,7 +36548,15 @@ msgid ""
"geometry for walkable terrain suitable to [NavigationMesh] agent properties "
"by creating a voxel world around the meshes bounding area.\n"
"The finalized navigation mesh is then returned and stored inside the "
-"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes."
+"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] "
+"nodes.\n"
+"[b]Note:[/b] Using meshes to not only define walkable surfaces but also "
+"obstruct navigation baking does not always work. The navigation baking has "
+"no concept of what is a geometry \"inside\" when dealing with mesh source "
+"geometry and this is intentional. Depending on current baking parameters, as "
+"soon as the obstructing mesh is large enough to fit a navigation mesh area "
+"inside, the baking will generate navigation mesh areas that are inside the "
+"obstructing source geometry mesh."
msgstr ""
#: doc/classes/NavigationMeshGenerator.xml
@@ -36218,8 +36564,8 @@ msgid ""
"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child "
"nodes under the provided [code]root_node[/code] or a specific group of nodes "
"for potential source geometry. The parse behavior can be controlled with the "
-"[member NavigationMesh.geometry/parsed_geometry_type] and [member "
-"NavigationMesh.geometry/source_geometry_mode] properties on the "
+"[member NavigationMesh.geometry_parsed_geometry_type] and [member "
+"NavigationMesh.geometry_source_geometry_mode] properties on the "
"[NavigationMesh] resource."
msgstr ""
@@ -36236,8 +36582,21 @@ msgstr ""
#: doc/classes/NavigationMeshInstance.xml
msgid ""
"An instance of a [NavigationMesh]. It tells the [Navigation] node what can "
-"be navigated and what cannot, based on the [NavigationMesh] resource. This "
-"should be a child of a [Navigation] node."
+"be navigated and what cannot, based on the [NavigationMesh] resource.\n"
+"By default this node will register to the default [World] navigation map. If "
+"this node is a child of a [Navigation] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method NavigationServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The cost of entering this region from another region can be controlled with "
+"the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The cost of traveling distances inside this region can be controlled with "
+"the [member travel_cost] multiplier."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
@@ -36266,10 +36625,34 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding enters this region's navmesh from another regions navmesh "
+"the [code]enter_cost[/code] value is added to the path distance for "
+"determining the shortest path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationMesh] "
+"belongs to. On path requests with [method NavigationServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
msgid "The [NavigationMesh] resource to use."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding moves inside this region's navmesh the traveled distances "
+"are multiplied with [code]travel_cost[/code] for determining the shortest "
+"path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
msgid "Notifies when the navigation mesh bake operation is completed."
msgstr ""
@@ -36286,7 +36669,9 @@ msgid ""
"3D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationObstacle] is physics safe."
+"[NavigationObstacle] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle.xml
@@ -36326,7 +36711,9 @@ msgid ""
"2D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationObstacle2D] is physics safe."
+"[NavigationObstacle2D] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle2D.xml
@@ -36406,6 +36793,14 @@ msgstr ""
#: doc/classes/NavigationPolygon.xml
msgid ""
+"Returns the [NavigationMesh] resulting from this navigation polygon. This "
+"navmesh can be used to update the navmesh of a region with the [method "
+"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server "
+"behind the scene)."
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml
+msgid ""
"Returns a [PoolVector2Array] containing the vertices of an outline that was "
"created in the editor or by script."
msgstr ""
@@ -36442,6 +36837,30 @@ msgid ""
msgstr ""
#: doc/classes/NavigationPolygonInstance.xml
+msgid "A region of the 2D navigation map."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A region of the navigation map. It tells the [Navigation2DServer] what can "
+"be navigated and what cannot, based on its [NavigationPolygon] resource.\n"
+"By default this node will register to the default [World2D] navigation map. "
+"If this node is a child of a [Navigation2D] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The pathfinding cost of entering this region from another region can be "
+"controlled with the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The pathfinding cost of traveling distances inside this region can be "
+"controlled with the [member travel_cost] multiplier."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
msgid ""
"Returns the [RID] of this region on the [Navigation2DServer]. Combined with "
"[method Navigation2DServer.map_get_closest_point_owner] can be used to "
@@ -36449,6 +36868,22 @@ msgid ""
"navigation map."
msgstr ""
+#: doc/classes/NavigationPolygonInstance.xml
+msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationPolygon] "
+"belongs to. On path requests with [method Navigation2DServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid "The [NavigationPolygon] resource to use."
+msgstr ""
+
#: doc/classes/NavigationServer.xml
msgid "Server interface for low-level 3D navigation access."
msgstr ""
@@ -36524,6 +36959,12 @@ msgid "Bakes the navigation mesh."
msgstr ""
#: doc/classes/NavigationServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method NavigationServer.map_get_path])."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
msgid "Control activation of this server."
msgstr ""
@@ -37990,13 +38431,19 @@ msgstr ""
#: doc/classes/Node.xml
msgid ""
"Emitted when a child node enters the scene tree, either because it entered "
-"on its own or because this node entered with it."
+"on its own or because this node entered with it.\n"
+"This signal is emitted [i]after[/i] the child node's own [constant "
+"NOTIFICATION_ENTER_TREE] and [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
msgid ""
-"Emitted when a child node exits the scene tree, either because it exited on "
-"its own or because this node exited."
+"Emitted when a child node is about to exit the scene tree, either because it "
+"is being removed or freed directly, or because this node is exiting the "
+"tree.\n"
+"When this signal is received, the child [code]node[/code] is still in the "
+"tree and valid. This signal is emitted [i]after[/i] the child node's own "
+"[signal tree_exiting] and [constant NOTIFICATION_EXIT_TREE]."
msgstr ""
#: doc/classes/Node.xml
@@ -38008,7 +38455,10 @@ msgid "Emitted when the node is renamed."
msgstr ""
#: doc/classes/Node.xml
-msgid "Emitted when the node enters the tree."
+msgid ""
+"Emitted when the node enters the tree.\n"
+"This signal is emitted [i]after[/i] the related [constant "
+"NOTIFICATION_ENTER_TREE] notification."
msgstr ""
#: doc/classes/Node.xml
@@ -38018,15 +38468,21 @@ msgstr ""
#: doc/classes/Node.xml
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)."
+"the right place for de-initialization (or a \"destructor\", if you will).\n"
+"This signal is emitted [i]before[/i] the related [constant "
+"NOTIFICATION_EXIT_TREE] notification."
msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node enters a [SceneTree]."
+msgid ""
+"Notification received when the node enters a [SceneTree].\n"
+"This notification is emitted [i]before[/i] the related [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node is about to exit a [SceneTree]."
+msgid ""
+"Notification received when the node is about to exit a [SceneTree].\n"
+"This notification is emitted [i]after[/i] the related [signal tree_exiting]."
msgstr ""
#: doc/classes/Node.xml
@@ -38287,7 +38743,13 @@ msgid "Rotation in degrees, relative to the node's parent."
msgstr ""
#: doc/classes/Node2D.xml
-msgid "The node's scale. Unscaled value: [code](1, 1)[/code]."
+msgid ""
+"The node's scale. Unscaled value: [code](1, 1)[/code].\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
#: doc/classes/Node2D.xml
@@ -39727,6 +40189,10 @@ msgid ""
" if argument.find(\"=\") > -1:\n"
" var key_value = argument.split(\"=\")\n"
" arguments[key_value[0].lstrip(\"--\")] = key_value[1]\n"
+" else:\n"
+" # Options without an argument will be present in the dictionary,\n"
+" # with the value set to an empty string.\n"
+" arguments[argument.lstrip(\"--\")] = \"\"\n"
"[/codeblock]"
msgstr ""
@@ -40380,8 +40846,15 @@ msgstr ""
msgid ""
"Moves the file or directory to the system's recycle bin. See also [method "
"Directory.remove].\n"
+"The method takes only global paths, so you may need to use [method "
+"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/"
+"code] as it will not work in exported project.\n"
"[b]Note:[/b] If the user has disabled the recycle bin on their system, the "
-"file will be permanently deleted instead."
+"file will be permanently deleted instead.\n"
+"[codeblock]\n"
+"var file_to_remove = \"user://slot1.sav\"\n"
+"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/OS.xml
@@ -45220,7 +45693,18 @@ msgstr ""
#: doc/classes/PopupMenu.xml
msgid ""
"[PopupMenu] is a [Control] that displays a list of options. They are popular "
-"in toolbars or context menus."
+"in toolbars or context menus.\n"
+"[b]Incremental search:[/b] Like [ItemList] and [Tree], [PopupMenu] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/PopupMenu.xml
@@ -46727,7 +47211,16 @@ msgid ""
msgstr ""
#: doc/classes/ProjectSettings.xml
-msgid "Message to be displayed before the backtrace when the engine crashes."
+msgid ""
+"Message to be displayed before the backtrace when the engine crashes. By "
+"default, this message is only used in exported projects due to the editor-"
+"only override applied to this setting."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Editor-only override for [member debug/settings/crash_handler/message]. Does "
+"not affect exported projects in debug or release mode."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -46972,6 +47465,18 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default naming style for scene files to infer from their root nodes. "
+"Possible options are:\n"
+"- [code]0[/code] (Auto): Uses the scene root name as is without changing its "
+"casing.\n"
+"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase "
+"casing.\n"
+"- [code]2[/code] (snake_case): Converts the scene root name to snake_case "
+"casing."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -47197,6 +47702,198 @@ msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 1."
msgstr ""
@@ -47405,6 +48102,198 @@ msgid "Optional name for the 2D render layer 9."
msgstr ""
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 1."
msgstr ""
@@ -47672,6 +48561,49 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default cell height for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_height].\n"
+"[b]Note:[/b] Currently not implemented."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 2D navigation maps. See [method "
+"Navigation2DServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell height for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_height]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 3D navigation maps. See [method "
+"NavigationServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default map up vector for 3D navigation maps. See [method NavigationServer."
+"map_set_up]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -48345,20 +49277,28 @@ msgid ""
"cause.\n"
"The default value is a conservative one, so you are advised to tweak it "
"according to the hardware you are targeting.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"The default is a very conservative override for [code]rendering/gles3/"
-"shaders/max_concurrent_compiles[/code].\n"
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
"Depending on the specific devices you are targeting, you may want to raise "
"it.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
+"Depending on the specific browsers you are targeting, you may want to raise "
+"it.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -48366,19 +49306,28 @@ msgid ""
"The maximum size, in megabytes, that the ubershader cache can grow up to. On "
"startup, the least recently used entries will be deleted until the total "
"size is within bounds.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/ubershader_cache_size_mb[/"
-"code], so a smaller maximum size can be configured for mobile platforms, "
-"where storage space is more limited.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for mobile platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for web platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] Currently, shader caching is generally unavailable on web "
+"platforms.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -48410,14 +49359,22 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/shader_compilation_mode[/"
-"code], so asynchronous compilation can be disabled for mobile.\n"
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on mobile platforms.\n"
"You may want to do that since mobile GPUs generally won't support "
"ubershaders due to their complexity."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on web platforms.\n"
+"You may want to do that since certain browsers (especially on mobile "
+"platforms) generally won't support ubershaders due to their complexity."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
@@ -49174,7 +50131,6 @@ msgid ""
"- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/"
"code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, "
"small grid radius values may lead to unwanted groupings.\n"
-"[/codeblock]\n"
"[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more "
"effective and faster [VisibilityNotifier] functionality. For most use cases, "
"[method Vector3.distance_to] or [method Vector3.distance_squared_to] are "
@@ -51321,6 +52277,22 @@ msgid "Makes text fill width."
msgstr ""
#: doc/classes/RichTextLabel.xml
+msgid "Aligns top of the inline image to the top of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns center of the inline image to the center of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns bottom of the inline image to the baseline of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns bottom of the inline image to the bottom of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
msgid "Each list item has a number marker."
msgstr ""
@@ -53058,8 +54030,8 @@ msgid ""
" yield(get_tree().create_timer(1.0), \"timeout\")\n"
" print(\"Timer ended.\")\n"
"[/codeblock]\n"
-"The timer will be automatically freed after its time elapses, so be aware "
-"that any reference you might have kept to it will become invalid."
+"The timer will be dereferenced after its time elapses. To preserve the "
+"timer, you can keep a reference to it. See [Reference]."
msgstr ""
#: doc/classes/SceneTreeTimer.xml
@@ -53091,24 +54063,23 @@ msgid ""
"manually (i.e. by using [code]Tween.new()[/code]) are invalid. They can't be "
"used for tweening values, but you can do manual interpolation with [method "
"interpolate_value].\n"
-"A [SceneTreeTween] animation is composed of a sequence of [Tweener]s, which "
-"by default are executed one after another. You can create a sequence by "
-"appending [Tweener]s to the [SceneTreeTween]. Animating something with a "
-"[Tweener] is called tweening. Example tweening sequence looks like this:\n"
+"A tween animation is created by adding [Tweener]s to the [SceneTreeTween] "
+"object, using [method tween_property], [method tween_interval], [method "
+"tween_callback] or [method tween_method]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1)\n"
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"This sequence will make the [code]$Sprite[/code] node turn red, then shrink "
-"and finally the [method Node.queue_free] is called to remove the sprite. See "
-"methods [method tween_property], [method tween_interval], [method "
-"tween_callback] and [method tween_method] for more usage information.\n"
+"This sequence will make the [code]$Sprite[/code] node turn red, then shrink, "
+"before finally calling [method Node.queue_free] to free the sprite. "
+"[Tweener]s are executed one after another by default. This behavior can be "
+"changed using [method parallel] and [method set_parallel].\n"
"When a [Tweener] is created with one of the [code]tween_*[/code] methods, a "
"chained method call can be used to tweak the properties of this [Tweener]. "
-"For example, if you want to set different transition type in the above "
-"example, you can do:\n"
+"For example, if you want to set a different transition type in the above "
+"example, you can use [method set_trans]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1).set_trans(Tween."
@@ -53117,8 +54088,9 @@ msgid ""
"TRANS_BOUNCE)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Most of the [SceneTreeTween] methods can be chained this way too. In this "
-"example the [SceneTreeTween] is bound and have set a default transition:\n"
+"Most of the [SceneTreeTween] methods can be chained this way too. In the "
+"following example the [SceneTreeTween] is bound to the running script's node "
+"and a default transition is set for its [Tweener]s:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween().bind_node(self).set_trans(Tween."
"TRANS_ELASTIC)\n"
@@ -53126,16 +54098,16 @@ msgid ""
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Another interesting use for [SceneTreeTween]s is animating arbitrary set of "
+"Another interesting use for [SceneTreeTween]s is animating arbitrary sets of "
"objects:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"for sprite in get_children():\n"
-" tween.tween_property(sprite, \"position\", Vector2(), 1)\n"
+" tween.tween_property(sprite, \"position\", Vector2(0, 0), 1)\n"
"[/codeblock]\n"
"In the example above, all children of a node are moved one after another to "
"position (0, 0).\n"
-"Some [Tweener]s use transitions and eases. The first accepts an [enum Tween."
+"Some [Tweener]s use transitions and eases. The first accepts a [enum Tween."
"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 Tween.EaseType] constant, and "
@@ -53147,7 +54119,7 @@ msgid ""
"tween_cheatsheet.png]Tween easing and transition types cheatsheet[/url]\n"
"[b]Note:[/b] All [SceneTreeTween]s will automatically start by default. To "
"prevent a [SceneTreeTween] from autostarting, you can call [method stop] "
-"immediately after it was created."
+"immediately after it is created."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53177,21 +54149,24 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
-"Processes the [SceneTreeTween] by given [code]delta[/code] value, in "
-"seconds. Mostly useful when the [SceneTreeTween] is paused, for controlling "
-"it manually. Can also be used to end the [SceneTreeTween] animation "
-"immediately, by using [code]delta[/code] longer than the whole duration.\n"
+"Processes the [SceneTreeTween] by the given [code]delta[/code] value, in "
+"seconds. This is mostly useful for manual control when the [SceneTreeTween] "
+"is paused. It can also be used to end the [SceneTreeTween] animation "
+"immediately, by setting [code]delta[/code] longer than the whole duration of "
+"the [SceneTreeTween] animation.\n"
"Returns [code]true[/code] if the [SceneTreeTween] still has [Tweener]s that "
"haven't finished.\n"
-"[b]Note:[/b] The [SceneTreeTween] will become invalid after finished, but "
-"you can call [method stop] after the step, to keep it and reset."
+"[b]Note:[/b] The [SceneTreeTween] will become invalid in the next processing "
+"frame after its animation finishes. Calling [method stop] after performing "
+"[method custom_step] instead keeps and resets the [SceneTreeTween]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Returns the total time in seconds the [SceneTreeTween] has been animating (i."
-"e. time since it started, not counting pauses etc.). The time is affected by "
-"[method set_speed_scale] and [method stop] will reset it to [code]0[/code].\n"
+"e. the time since it started, not counting pauses etc.). The time is "
+"affected by [method set_speed_scale], and [method stop] will reset it to "
+"[code]0[/code].\n"
"[b]Note:[/b] As it results from accumulating frame deltas, the time returned "
"after the [SceneTreeTween] has finished animating will be slightly greater "
"than the actual [SceneTreeTween] duration."
@@ -53227,11 +54202,10 @@ msgstr ""
msgid ""
"Returns whether the [SceneTreeTween] is valid. A valid [SceneTreeTween] is a "
"[SceneTreeTween] contained by the scene tree (i.e. the array from [method "
-"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). "
-"[SceneTreeTween] might become invalid when it has finished tweening or was "
-"killed, also when created with [code]Tween.new()[/code]. Invalid "
-"[SceneTreeTween] can't have [Tweener]s appended, because it can't animate "
-"them. You can however still use [method interpolate_value]."
+"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). A "
+"[SceneTreeTween] might become invalid when it has finished tweening, is "
+"killed, or when created with [code]SceneTreeTween.new()[/code]. Invalid "
+"[SceneTreeTween]s can't have [Tweener]s appended."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53271,16 +54245,15 @@ msgstr ""
msgid ""
"Sets the number of times the tweening sequence will be repeated, i.e. "
"[code]set_loops(2)[/code] will run the animation twice.\n"
-"Calling this method without arguments will make the [SceneTreeTween] run "
-"infinitely, until it is either killed by [method kill] or by freeing bound "
-"node, or all the animated objects have been freed (which makes further "
+"Calling this method without arguments will make the [Tween] run infinitely, "
+"until either it is killed with [method kill], the [Tween]'s bound node is "
+"freed, or all the animated objects have been freed (which makes further "
"animation impossible).\n"
"[b]Warning:[/b] Make sure to always add some duration/delay when using "
-"infinite loops. 0-duration looped animations (e.g. single [CallbackTweener] "
-"with no delay or [PropertyTweener] with invalid node) are equivalent to "
-"infinite [code]while[/code] loops and will freeze your game. If a "
-"[SceneTreeTween]'s lifetime depends on some node, always use [method "
-"bind_node]."
+"infinite loops. To prevent the game freezing, 0-duration looped animations "
+"(e.g. a single [CallbackTweener] with no delay) are stopped after a small "
+"number of loops, which may produce unexpected results. If a [Tween]'s "
+"lifetime depends on some node, always use [method bind_node]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53342,10 +54315,10 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Creates and appends an [IntervalTweener]. This method can be used to create "
-"delays in the tween animation, as an alternative for using the delay in "
-"other [Tweener]s or when there's no animation (in which case the "
-"[SceneTreeTween] acts as a timer). [code]time[/code] is the length of the "
-"interval, in seconds.\n"
+"delays in the tween animation, as an alternative to using the delay in other "
+"[Tweener]s, or when there's no animation (in which case the [SceneTreeTween] "
+"acts as a timer). [code]time[/code] is the length of the interval, in "
+"seconds.\n"
"Example: creating an interval in code execution.\n"
"[codeblock]\n"
"# ... some code\n"
@@ -53399,8 +54372,8 @@ msgid ""
"Creates and appends a [PropertyTweener]. This method tweens a "
"[code]property[/code] of an [code]object[/code] between an initial value and "
"[code]final_val[/code] in a span of time equal to [code]duration[/code], in "
-"seconds. The initial value by default is a value at the time the tweening of "
-"the [PropertyTweener] start. For example:\n"
+"seconds. The initial value by default is the property's value at the time "
+"the tweening of the [PropertyTweener] starts. For example:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"tween.tween_property($Sprite, \"position\", Vector2(100, 200), 1)\n"
@@ -53431,16 +54404,15 @@ msgid ""
"Emitted when the [SceneTreeTween] has finished all tweening. Never emitted "
"when the [SceneTreeTween] is set to infinite looping (see [method "
"set_loops]).\n"
-"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) after this signal "
-"is emitted, but it doesn't happen immediately, but on the next processing "
-"frame. Calling [method stop] inside the signal callback will preserve the "
-"[SceneTreeTween]."
+"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) in the next "
+"processing frame after this signal is emitted. Calling [method stop] inside "
+"the signal callback will prevent the [SceneTreeTween] from being removed."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Emitted when a full loop is complete (see [method set_loops]), providing the "
-"loop index. This signal is not emitted after final loop, use [signal "
+"loop index. This signal is not emitted after the final loop, use [signal "
"finished] instead for this case."
msgstr ""
@@ -53448,7 +54420,7 @@ msgstr ""
msgid ""
"Emitted when one step of the [SceneTreeTween] is complete, providing the "
"step index. One step is either a single [Tweener] or a group of [Tweener]s "
-"running parallelly."
+"running in parallel."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -54780,7 +55752,12 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-msgid "Scale part of the local transformation."
+msgid ""
+"Scale part of the local transformation.\n"
+"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, the scale values will either be all "
+"positive or all negative."
msgstr ""
#: doc/classes/Spatial.xml
@@ -57411,11 +58388,11 @@ msgstr ""
msgid ""
"Returns [code]true[/code] if this string contains a valid integer.\n"
"[codeblock]\n"
-"print(\"7\".is_valid_int()) # Prints \"True\"\n"
-"print(\"14.6\".is_valid_int()) # Prints \"False\"\n"
-"print(\"L\".is_valid_int()) # Prints \"False\"\n"
-"print(\"+3\".is_valid_int()) # Prints \"True\"\n"
-"print(\"-12\".is_valid_int()) # Prints \"True\"\n"
+"print(\"7\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"14.6\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"L\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"+3\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"-12\".is_valid_integer()) # Prints \"True\"\n"
"[/codeblock]"
msgstr ""
@@ -60881,6 +61858,10 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml
+msgid "If [code]true[/code], this TileMap bakes a navigation region."
+msgstr ""
+
+#: doc/classes/TileMap.xml
msgid "If [code]true[/code], the cell's UVs will be clipped."
msgstr ""
@@ -60987,6 +61968,10 @@ msgid "The TileMap orientation mode. See [enum Mode] for possible values."
msgstr ""
#: doc/classes/TileMap.xml
+msgid "The navigation layers the TileMap generates its navigation regions in."
+msgstr ""
+
+#: doc/classes/TileMap.xml
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 "
@@ -62118,7 +63103,12 @@ msgstr ""
#: doc/classes/Transform2D.xml
msgid ""
"Returns a copy of the transform scaled by the given [code]scale[/code] "
-"factor, using matrix multiplication."
+"factor, using matrix multiplication.\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
#: doc/classes/Transform2D.xml
@@ -62273,7 +63263,18 @@ msgid ""
"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]."
+"to remove it from the [Tree].\n"
+"[b]Incremental search:[/b] Like [ItemList] and [PopupMenu], [Tree] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/Tree.xml
@@ -65789,11 +66790,12 @@ msgid "This enabler will stop [Particles2D] nodes."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _process function."
+msgid "This enabler will stop the parent's [method Node._process] function."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _physics_process function."
+msgid ""
+"This enabler will stop the parent's [method Node._physics_process] function."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
@@ -65833,6 +66835,16 @@ msgid "The VisibilityNotifier's bounding box."
msgstr ""
#: doc/classes/VisibilityNotifier.xml
+msgid ""
+"In addition to checking whether a node is on screen or within a [Camera]'s "
+"view, VisibilityNotifier can also optionally check whether a node is within "
+"a specified maximum distance when using a [Camera] with perspective "
+"projection. This is useful for throttling the performance requirements of "
+"nodes that are far away.\n"
+"[b]Note:[/b] This feature will be disabled if set to 0.0."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier.xml
msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view."
msgstr ""
@@ -70578,6 +71590,16 @@ msgid "The amount of shader rebinds in the frame."
msgstr ""
#: doc/classes/VisualServer.xml
+msgid ""
+"The peak amount of shaders that have been under compilation in the frame.\n"
+"This is useful to know when asynchronous shader compilation has finished for "
+"the current shaders on screen.\n"
+"[b]Note:[/b] For complete certainty, only assume there are no outstanding "
+"compilations when this value is zero for at least two frames in a row.\n"
+"Unimplemented in the GLES2 rendering backend, always returns 0."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
msgid "The amount of surface changes in the frame."
msgstr ""
@@ -73774,8 +74796,8 @@ msgstr ""
#: doc/classes/World.xml
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."
+"scenario, a navigation map and a sound space. Spatial nodes register their "
+"resources into the current world."
msgstr ""
#: doc/classes/World.xml
@@ -73790,8 +74812,13 @@ msgstr ""
#: doc/classes/World.xml
msgid ""
-"The World's fallback_environment will be used if the World's [Environment] "
-"fails or is missing."
+"The World's fallback environment will be used if [member environment] fails "
+"or is missing."
+msgstr ""
+
+#: doc/classes/World.xml
+msgid ""
+"The [RID] of this world's navigation map. Used by the [NavigationServer]."
msgstr ""
#: doc/classes/World.xml
@@ -73809,8 +74836,8 @@ msgstr ""
#: doc/classes/World2D.xml
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."
+"visual scenario, a navigation map and a sound space. 2D nodes register their "
+"resources into the current 2D world."
msgstr ""
#: doc/classes/World2D.xml
@@ -73828,6 +74855,11 @@ msgstr ""
#: doc/classes/World2D.xml
msgid ""
+"The [RID] of this world's navigation map. Used by the [Navigation2DServer]."
+msgstr ""
+
+#: doc/classes/World2D.xml
+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 ""
diff --git a/doc/translations/id.po b/doc/translations/id.po
index 6e3e57b9e1..2f741d544d 100644
--- a/doc/translations/id.po
+++ b/doc/translations/id.po
@@ -502,7 +502,7 @@ msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
msgid ""
"Compares two values by checking their actual contents, recursing into any "
-"`Array` or `Dictionary` up to its deepest level.\n"
+"[Array] or [Dictionary] up to its deepest level.\n"
"This compares to [code]==[/code] in a number of ways:\n"
"- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/"
"code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] "
@@ -558,7 +558,7 @@ msgid ""
"- 1.0: Linear\n"
"- Greater than 1.0 (exclusive): Ease in\n"
"[/codeblock]\n"
-"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.4/img/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/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]."
@@ -1505,7 +1505,7 @@ msgid ""
"[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/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/img/"
"smoothstep_ease_comparison.png]Comparison between smoothstep() and ease(x, "
"-1.6521) return values[/url]"
msgstr ""
@@ -3790,6 +3790,12 @@ msgstr ""
#: doc/classes/@GlobalScope.xml
msgid ""
+"Hints that an integer property is a bitmask using the optionally named 2D "
+"navigation layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml
+msgid ""
"Hints that an integer property is a bitmask using the optionally named 3D "
"render layers."
msgstr ""
@@ -3802,6 +3808,12 @@ msgstr ""
#: doc/classes/@GlobalScope.xml
msgid ""
+"Hints that an integer property is a bitmask using the optionally named 3D "
+"navigation layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml
+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]."
@@ -8778,7 +8790,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/AStar.xml
+#: doc/classes/AStar.xml doc/classes/AStar2D.xml
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[/"
@@ -8977,7 +8989,10 @@ msgid ""
msgstr ""
#: doc/classes/AStar2D.xml
-msgid "Returns whether there is a connection/segment between the given points."
+msgid ""
+"Returns whether there is a connection/segment between the given points. 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/AStar2D.xml
@@ -8994,10 +9009,6 @@ msgid ""
msgstr ""
#: doc/classes/AStar2D.xml
-msgid "Deletes the segment between the given points."
-msgstr ""
-
-#: doc/classes/AStar2D.xml
msgid ""
"Returns the closest position to [code]to_position[/code] that resides inside "
"a segment between two connected points.\n"
@@ -9182,7 +9193,9 @@ msgid ""
"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."
+"transmit audio over the network. When capturing audio data from a "
+"microphone, the format of the samples will be stereo 32-bit floating point "
+"PCM."
msgstr ""
#: doc/classes/AudioEffectCapture.xml
@@ -14026,7 +14039,7 @@ msgid ""
msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
-#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/Navigation2D.xml
msgid "Returns the object's [RID]."
msgstr ""
@@ -19501,11 +19514,15 @@ msgid ""
msgstr ""
#: doc/classes/CurveTexture.xml
-msgid "The [code]curve[/code] rendered onto the texture."
-msgstr ""
+#, fuzzy
+msgid "The [Curve] that is rendered onto the texture."
+msgstr "Mengembalikan nilai hiperbolik tangen dari parameter."
#: doc/classes/CurveTexture.xml
-msgid "The width of the texture."
+msgid ""
+"The width of the texture (in pixels). Higher values make it possible to "
+"represent high-frequency data better (such as sudden direction changes), at "
+"the cost of increased generation time and memory usage."
msgstr ""
#: doc/classes/CylinderMesh.xml
@@ -19791,6 +19808,13 @@ msgid "Returns the list of keys in the [Dictionary]."
msgstr ""
#: doc/classes/Dictionary.xml
+msgid ""
+"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, "
+"duplicate keys will not be copied over, unless [code]overwrite[/code] is "
+"[code]true[/code]."
+msgstr ""
+
+#: doc/classes/Dictionary.xml
msgid "Returns the number of keys in the dictionary."
msgstr ""
@@ -21729,9 +21753,23 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide a state data you want to be saved, like view "
+"position, grid settings, folding, etc. 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). This data is automatically saved for "
+"each scene in an [code]editstate[/code] file in the editor metadata folder. "
+"If you want to store global (scene-independent) editor data for your plugin, "
+"you can use [method get_window_layout] instead.\n"
+"Use [method set_state] to restore your saved state.\n"
+"[b]Note:[/b] This method should not be used to save important settings that "
+"should persist with the project.\n"
+"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be "
+"stored and restored correctly.\n"
+"[codeblock]\n"
+"func get_state():\n"
+" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n"
+" return state\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -21742,9 +21780,18 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide the GUI layout of the plugin or any other "
+"data you want to be stored. 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). The data is stored in the "
+"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n"
+"Use [method set_window_layout] to restore your saved layout.\n"
+"[codeblock]\n"
+"func get_window_layout(configuration):\n"
+" configuration.set_value(\"MyPlugin\", \"window_position\", $Window."
+"position)\n"
+" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -21857,11 +21904,30 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the state saved by [method get_state]."
+msgid ""
+"Restore the state saved by [method get_state]. This method is called when "
+"the current scene tab is changed in the editor.\n"
+"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise "
+"it will not be recognized and this method will not be called.\n"
+"[codeblock]\n"
+"func set_state(data):\n"
+" zoom = data.get(\"zoom\", 1.0)\n"
+" preferred_color = data.get(\"my_color\", Color.white)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the plugin GUI layout saved by [method get_window_layout]."
+msgid ""
+"Restore the plugin GUI layout and data saved by [method get_window_layout]. "
+"This method is called for every plugin on editor startup. Use the provided "
+"[code]configuration[/code] file to read your saved data.\n"
+"[codeblock]\n"
+"func set_window_layout(configuration):\n"
+" $Window.position = configuration.get_value(\"MyPlugin\", "
+"\"window_position\", Vector2())\n"
+" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", "
+"Color.white)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -26506,7 +26572,8 @@ msgid ""
"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])."
+"at fixed steps (see [member width]). See also [GradientTexture2D] and "
+"[CurveTexture]."
msgstr ""
#: doc/classes/GradientTexture.xml
@@ -26528,7 +26595,8 @@ msgid ""
"repeat] types using colors obtained from the gradient. 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] and [member height])."
+"[member width] and [member height]). See also [GradientTexture] and "
+"[CurveTexture]."
msgstr ""
#: doc/classes/GradientTexture2D.xml
@@ -27335,6 +27403,12 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+msgid ""
+"If [code]true[/code], this GridMap uses cell navmesh resources to create "
+"navigation regions."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid "If [code]true[/code], grid items are centered on the X axis."
msgstr ""
@@ -27385,6 +27459,10 @@ msgid "The assigned [MeshLibrary]."
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+msgid "The navigation layers the GridMap generates its navigation regions in."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
"Overrides the default friction and bounce physics properties for the whole "
"[GridMap]."
@@ -28608,7 +28686,7 @@ msgid ""
" # 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 body = to_json({\"name\": \"Godette\"})\n"
" error = http_request.request(\"https://httpbin.org/post\", [], true, "
"HTTPClient.METHOD_POST, body)\n"
" if error != OK:\n"
@@ -29775,7 +29853,7 @@ msgstr ""
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 "
+"([member 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 "
@@ -29924,10 +30002,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Returns the mouse mode. See the constants for more information."
-msgstr ""
-
-#: doc/classes/Input.xml
msgid ""
"Gets an input vector by specifying four actions for the positive and "
"negative X and Y axes.\n"
@@ -30121,24 +30195,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Sets the mouse mode. See the constants for more information."
-msgstr ""
-
-#: doc/classes/Input.xml
-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
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 "
@@ -30174,6 +30230,24 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
+msgid "Controls the mouse mode. See [enum MouseMode] for more information."
+msgstr ""
+
+#: doc/classes/Input.xml
+msgid ""
+"If [code]true[/code], similar input events sent by the operating system are "
+"accumulated. 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 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
msgid "Emitted when a joypad device has been connected or disconnected."
msgstr ""
@@ -30481,8 +30555,8 @@ msgstr ""
#: doc/classes/InputEventJoypadButton.xml
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]."
+"Represents the pressure the user puts on the button with their finger, if "
+"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]."
msgstr ""
#: doc/classes/InputEventJoypadMotion.xml
@@ -30745,9 +30819,9 @@ 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 "
+"at most. If you need more precise input reporting, set [member Input."
+"use_accumulated_input] to [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."
@@ -31234,7 +31308,18 @@ msgid ""
"[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."
+"fixed_column_width] greater than zero to wrap the text.\n"
+"[b]Incremental search:[/b] Like [PopupMenu] and [Tree], [ItemList] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/ItemList.xml
@@ -34981,12 +35066,18 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Returns the override [Material] for a surface of the [Mesh] resource.\n"
+"[b]Note:[/b] This function only returns [i]override[/i] materials associated "
+"with this [MeshInstance]. Consider using [method get_active_material] or "
+"[method Mesh.surface_get_material] to get materials associated with the "
+"[Mesh] resource."
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the number of surface materials."
-msgstr ""
+#, fuzzy
+msgid "Returns the number of surface override materials."
+msgstr "Mengembalikan nilai hiperbolik tangen dari parameter."
#: doc/classes/MeshInstance.xml
msgid ""
@@ -35022,7 +35113,10 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Sets the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Sets the override [Material] for the specified surface of the [Mesh] "
+"resource. This material is associated with this [MeshInstance] rather than "
+"with the [Mesh] resource."
msgstr ""
#: doc/classes/MeshInstance.xml
@@ -35053,9 +35147,10 @@ msgstr ""
#: doc/classes/MeshInstance2D.xml
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\"."
+"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be "
+"automatically created from an existing [Sprite] via a tool in the editor "
+"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to "
+"MeshInstance2D[/b] at the top of the 2D editor viewport."
msgstr ""
#: doc/classes/MeshInstance2D.xml
@@ -35819,6 +35914,9 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"Provides navigation and pathfinding within a collection of "
"[NavigationMesh]es. By default, these will be automatically collected from "
"child [NavigationMeshInstance] nodes. In addition to basic pathfinding, this "
@@ -35859,7 +35957,15 @@ msgid ""
msgstr ""
#: doc/classes/Navigation.xml
+#, fuzzy
+msgid "Returns the [RID] of the navigation map on the [NavigationServer]."
+msgstr "Mengembalikan nilai hiperbolik tangen dari parameter."
+
+#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"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, "
@@ -35881,16 +35987,31 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation.get_simple_path] path query."
+msgstr ""
+
+#: doc/classes/Navigation.xml
+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/Navigation.xml doc/classes/Navigation2DServer.xml
+#: doc/classes/NavigationServer.xml
+msgid ""
+"Emitted when a navigation map is updated, when a region moves or is modified."
+msgstr ""
+
#: doc/classes/Navigation2D.xml
msgid "2D navigation and pathfinding node."
msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -35910,6 +36031,9 @@ msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -35919,6 +36043,12 @@ msgstr ""
msgid "The XY plane cell size to use for fields."
msgstr ""
+#: doc/classes/Navigation2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation2D.get_simple_path] path query."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml
msgid "Server interface for low-level 2D navigation access."
msgstr ""
@@ -35935,8 +36065,12 @@ msgid ""
"through scripts.\n"
"For two regions to be connected to each other, they must share a similar "
"edge. An edge is considered connected to another if both of its two vertices "
-"are at a distance less than [member Navigation.edge_connection_margin] to "
-"the respective other edge's vertex.\n"
+"are at a distance less than navigation map [code]edge_connection_margin[/"
+"code] to the respective other edge's vertex.\n"
+"You may assign navigation layers to regions with [method Navigation2DServer."
+"region_set_navigation_layers], which then can be checked upon when "
+"requesting a path with [method Navigation2DServer.map_get_path]. This allows "
+"allowing or forbidding some areas to 2D objects.\n"
"To use the collision avoidance system, you may use agents. You can set an "
"agent's target velocity, then the servers will emit a callback with a "
"modified velocity.\n"
@@ -35964,7 +36098,17 @@ msgid "Returns [code]true[/code] if the map got changed the previous frame."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Callback called at the end of the RVO process."
+msgid ""
+"Callback called at the end of the RVO process. If a callback is created "
+"manually and the agent is placed on a navigation map it will calculate "
+"avoidance for the agent and dispatch the calculated [code]safe_velocity[/"
+"code] to the [code]receiver[/code] object with a signal to the chosen "
+"[code]method[/code] name.\n"
+"[b]Note:[/b] Created callbacks are always processed independently of the "
+"SceneTree state as long as the agent is on a navigation map and not freed. "
+"To disable the dispatch of a callback from an agent use [method "
+"agent_set_callback] again with a [code]null[/code] object as the "
+"[code]receiver[/code]."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -36022,15 +36166,55 @@ msgid "Destroys the given RID."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns all created navigation map [RID]s on the NavigationServer. This "
+"returns both 2D and 3D created navigation maps as there is technically no "
+"distinction between them."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Create a new map."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"This function immediately forces synchronization of the specified navigation "
+"[code]map[/code] [RID]. By default navigation maps are only synchronized at "
+"the end of each physics frame. This function can be used to immediately "
+"(re)calculate all the navigation meshes and region connections of the "
+"navigation map. This makes it possible to query a navigation path for a "
+"changed map immediately and in the same frame (multiple times if needed).\n"
+"Due to technical restrictions the current NavigationServer command queue "
+"will be flushed. This means all already queued update commands for this "
+"physics frame will be executed, even those intended for other maps, regions "
+"and agents not part of the specified map. The expensive computation of the "
+"navigation meshes and region connections of a map will only be done for the "
+"specified map. Other maps will receive the normal synchronization at the end "
+"of the physics frame. Should the specified map receive changes after the "
+"forced update it will update again as well when the other maps receive their "
+"update.\n"
+"Avoidance processing and dispatch of the [code]safe_velocity[/code] signals "
+"is untouched by this function and continues to happen for all maps and "
+"agents at the end of the physics frame.\n"
+"[b]Note:[/b] With great power comes great responsibility. This function "
+"should only be used by users that really know what they are doing and have a "
+"good reason for it. Forcing an immediate update of a navigation map requires "
+"locking the NavigationServer and flushing the entire NavigationServer "
+"command queue. Not only can this severely impact the performance of a game "
+"but it can also introduce bugs if used inappropriately without much "
+"foresight."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns all navigation agents [RID]s that are currently assigned to the "
"requested navigation [code]map[/code]."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
#, fuzzy
msgid "Returns the map cell size."
@@ -36055,7 +36239,10 @@ msgid ""
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Returns the navigation path to reach the destination from the origin."
+msgid ""
+"Returns the navigation path to reach the destination from the origin. "
+"[code]navigation_layers[/code] is a bitmask of all region layers that are "
+"allowed to be in the path."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -36072,6 +36259,12 @@ msgstr ""
msgid "Sets the map active."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/"
+"b] Currently not implemented."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Set the map cell size used to weld the navigation mesh polygons."
msgstr ""
@@ -36087,15 +36280,78 @@ msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"Returns the ending point of a connection door. [code]connection[/code] is an "
+"index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns the starting point of a connection door. [code]connection[/code] is "
+"an index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns how many connections this [code]region[/code] has with other regions "
+"in the map."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]."
+msgstr "Mengembalikan nilai hiperbolik tangen dari parameter."
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns the navigation map [RID] the requested [code]region[/code] is "
"currently assigned to."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
#, fuzzy
+msgid "Returns the region's navigation layers."
+msgstr "Mengembalikan nilai hiperbolik tangen dari parameter."
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]."
+msgstr "Mengembalikan nilai hiperbolik tangen dari parameter."
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns [code]true[/code] if the provided [code]point[/code] in world space "
+"is currently owned by the provided navigation [code]region[/code]. Owned in "
+"this context means that one of the region's navigation mesh polygon faces "
+"has a possible position at the closest distance to this point compared to "
+"all other navigation meshes from other navigation regions that are also "
+"registered on the navigation map of the provided region.\n"
+"If multiple navigation meshes have positions at equal distance the "
+"navigation region whose polygons are processed first wins the ownership. "
+"Polygons are processed in the same order that navigation regions were "
+"registered on the NavigationServer.\n"
+"[b]Note:[/b] If navigation meshes from different navigation regions overlap "
+"(which should be avoided in general) the result might not be what is "
+"expected."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]."
+msgstr "Mengembalikan nilai hiperbolik tangen dari parameter."
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
msgid "Sets the map for the region."
msgstr "Mengembalikan nilai hiperbolik tangen dari parameter."
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method Navigation2DServer.map_get_path])."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
#, fuzzy
msgid "Sets the navigation mesh for the region."
@@ -36105,6 +36361,11 @@ msgstr "Mengembalikan nilai hiperbolik tangen dari parameter."
msgid "Sets the global transformation for the region."
msgstr ""
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]."
+msgstr "Mengembalikan nilai hiperbolik tangen dari parameter."
+
#: doc/classes/NavigationAgent.xml
msgid "3D agent used in navigation for collision avoidance."
msgstr ""
@@ -36114,9 +36375,16 @@ msgid ""
"3D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationAgent] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World] navigation map. If this node is a child of a [Navigation] "
+"node it will register to the navigation map of the navigation node or the "
+"function [method set_navigation] can be used to set the navigation node "
+"directly. [NavigationAgent] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -36134,7 +36402,15 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-msgid "Returns the path from start to finish in global coordinates."
+msgid ""
+"Returns this agent's current path from start to finish in global "
+"coordinates. The path only updates when the target location is changed or "
+"the agent requires a repath. The path array is not intended to be used in "
+"direct path movement as the agent has its own internal path logic that would "
+"get corrupted by changing the path array manually. Use the intended [method "
+"get_next_location] once every physics frame to receive the next path point "
+"for the agents movement as this function also updates the internal path "
+"logic."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -36149,11 +36425,24 @@ msgid ""
"system."
msgstr ""
-#: doc/classes/NavigationAgent.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"Returns a [Vector3] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the origin of the agent's parent."
+"Returns the [RID] of the navigation map for this NavigationAgent node. This "
+"function returns always the map set on the NavigationAgent node and not the "
+"map of the abstract agent on the NavigationServer. If the agent map is "
+"changed directly with the NavigationServer API the NavigationAgent node will "
+"not be aware of the map change. Use [method set_navigation_map] to change "
+"the navigation map for the NavigationAgent and also update the agent on the "
+"NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
+"Returns the next location in global coordinates that can be moved to, making "
+"sure that there are no static objects in the way. If the agent does not have "
+"a navigation path, it will return the position of the agent's parent. The "
+"use of this function once every physics frame is required to update the "
+"internal path logic of the NavigationAgent."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -36195,6 +36484,12 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"Sets the [RID] of the navigation map this NavigationAgent node should use "
+"and also updates the [code]agent[/code] on the NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"Sets the user desired final location. This will clear the current navigation "
"path."
msgstr ""
@@ -36207,7 +36502,13 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml
-msgid "The agent height offset to match the navigation mesh height."
+msgid ""
+"The NavigationAgent height offset is subtracted from the y-axis value of any "
+"vector path position for this NavigationAgent. The NavigationAgent height "
+"offset does not change or influence the navigation mesh or pathfinding query "
+"result. Additional navigation maps that use regions with navigation meshes "
+"that the developer baked with appropriate agent radius or height values are "
+"required to support different-sized agents."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -36234,26 +36535,53 @@ msgstr ""
msgid "The maximum speed that an agent can move."
msgstr ""
+#: doc/classes/NavigationAgent.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "The distance to search for other agents."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"The distance threshold before a path point is considered to be reached. This "
+"will allow an agent to not have to hit a path point on the path exactly, but "
+"in the area. If this value is set to high the NavigationAgent will skip "
+"points on the path which can lead to leaving the navigation mesh. If this "
+"value is set to low the NavigationAgent will be stuck in a repath loop cause "
+"it will constantly overshoot or undershoot the distance to the next point on "
+"each physics frame update."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"The maximum distance the agent is allowed away from the ideal path to the "
"final location. This can happen due to trying to avoid collisions. When the "
"maximum distance is exceeded, it recalculates the ideal path."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-msgid "The radius of the agent."
+msgid ""
+"The radius of the avoidance agent. This is the \"body\" of the avoidance "
+"agent and not the avoidance maneuver starting radius (which is controlled by "
+"[member neighbor_dist]).\n"
+"Does not affect normal pathfinding. To change an actor's pathfinding radius "
+"bake [NavigationMesh] resources with a different [member NavigationMesh."
+"agent_radius] property and use different navigation maps for each actor size."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"The distance threshold before a target is considered to be reached. This "
-"will allow an agent to not have to hit a point on the path exactly, but in "
-"the area."
+"The distance threshold before the final target point is considered to be "
+"reached. This will allow an agent to not have to hit the point of the final "
+"target exactly, but only the area. If this value is set to low the "
+"NavigationAgent will be stuck in a repath loop cause it will constantly "
+"overshoot or undershoot the distance to the final target point on each "
+"physics frame update."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -36296,9 +36624,16 @@ msgid ""
"2D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationAgent2D] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World2D] navigation map. If this node is a child of a "
+"[Navigation2D] node it will register to the navigation map of the navigation "
+"node or the function [method set_navigation] can be used to set the "
+"navigation node directly. [NavigationAgent2D] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent2D.xml
@@ -36314,13 +36649,6 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent2D.xml
-msgid ""
-"Returns a [Vector2] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the position of the agent's parent."
-msgstr ""
-
-#: doc/classes/NavigationAgent2D.xml
#, fuzzy
msgid "Returns the [RID] of this agent on the [Navigation2DServer]."
msgstr "Mengembalikan nilai hiperbolik tangen dari parameter."
@@ -36341,6 +36669,13 @@ msgid ""
"only be enabled on agents that currently require it."
msgstr ""
+#: doc/classes/NavigationAgent2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent2D] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationMesh.xml
msgid "A mesh to approximate the walkable areas and obstacles."
msgstr ""
@@ -36371,8 +36706,8 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
-"Returns whether the specified [code]bit[/code] of the [member geometry/"
-"collision_mask] is set."
+"Returns whether the specified [code]bit[/code] of the [member "
+"geometry_collision_mask] is set."
msgstr ""
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
@@ -36394,9 +36729,9 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/"
-"code] in the [member geometry/collision_mask].\n"
+"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]."
+"code] in the [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
@@ -36410,14 +36745,14 @@ 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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36429,7 +36764,7 @@ 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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36457,13 +36792,17 @@ msgstr ""
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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
-"If [code]true[/code], marks walkable spans as not walkable if the clearance "
-"above the span is less than [member agent/height]."
+"If the baking [AABB] has a volume the navigation mesh baking will be "
+"restricted to its enclosing area."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+msgid "The position offset applied to the [member filter_baking_aabb] [AABB]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36473,13 +36812,19 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]true[/code], marks non-walkable spans as walkable if their maximum "
-"is within [member agent/max_climb] of a walkable neighbor."
+"is within [member agent_max_climb] of a walkable neighbor."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+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
msgid ""
"The physics layers to scan for static colliders.\n"
-"Only used when [member geometry/parsed_geometry_type] is [constant "
+"Only used when [member geometry_parsed_geometry_type] is [constant "
"PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]."
msgstr ""
@@ -36498,7 +36843,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"The name of the group to scan for geometry.\n"
-"Only used when [member geometry/source_geometry_mode] is [constant "
+"Only used when [member geometry_source_geometry_mode] is [constant "
"SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant "
"SOURCE_GEOMETRY_GROUPS_EXPLICIT]."
msgstr ""
@@ -36561,7 +36906,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Parses [StaticBody] colliders as geometry. The collider should be in any of "
-"the layers specified by [member geometry/collision_mask]."
+"the layers specified by [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36582,13 +36927,13 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Scans nodes in a group and their child nodes recursively for geometry. The "
-"group is specified by [member geometry/source_group_name]."
+"group is specified by [member geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Uses nodes in a group for geometry. The group is specified by [member "
-"geometry/source_group_name]."
+"geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36630,7 +36975,15 @@ msgid ""
"geometry for walkable terrain suitable to [NavigationMesh] agent properties "
"by creating a voxel world around the meshes bounding area.\n"
"The finalized navigation mesh is then returned and stored inside the "
-"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes."
+"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] "
+"nodes.\n"
+"[b]Note:[/b] Using meshes to not only define walkable surfaces but also "
+"obstruct navigation baking does not always work. The navigation baking has "
+"no concept of what is a geometry \"inside\" when dealing with mesh source "
+"geometry and this is intentional. Depending on current baking parameters, as "
+"soon as the obstructing mesh is large enough to fit a navigation mesh area "
+"inside, the baking will generate navigation mesh areas that are inside the "
+"obstructing source geometry mesh."
msgstr ""
#: doc/classes/NavigationMeshGenerator.xml
@@ -36638,8 +36991,8 @@ msgid ""
"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child "
"nodes under the provided [code]root_node[/code] or a specific group of nodes "
"for potential source geometry. The parse behavior can be controlled with the "
-"[member NavigationMesh.geometry/parsed_geometry_type] and [member "
-"NavigationMesh.geometry/source_geometry_mode] properties on the "
+"[member NavigationMesh.geometry_parsed_geometry_type] and [member "
+"NavigationMesh.geometry_source_geometry_mode] properties on the "
"[NavigationMesh] resource."
msgstr ""
@@ -36656,8 +37009,21 @@ msgstr ""
#: doc/classes/NavigationMeshInstance.xml
msgid ""
"An instance of a [NavigationMesh]. It tells the [Navigation] node what can "
-"be navigated and what cannot, based on the [NavigationMesh] resource. This "
-"should be a child of a [Navigation] node."
+"be navigated and what cannot, based on the [NavigationMesh] resource.\n"
+"By default this node will register to the default [World] navigation map. If "
+"this node is a child of a [Navigation] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method NavigationServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The cost of entering this region from another region can be controlled with "
+"the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The cost of traveling distances inside this region can be controlled with "
+"the [member travel_cost] multiplier."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
@@ -36686,10 +37052,34 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding enters this region's navmesh from another regions navmesh "
+"the [code]enter_cost[/code] value is added to the path distance for "
+"determining the shortest path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationMesh] "
+"belongs to. On path requests with [method NavigationServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
msgid "The [NavigationMesh] resource to use."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding moves inside this region's navmesh the traveled distances "
+"are multiplied with [code]travel_cost[/code] for determining the shortest "
+"path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
msgid "Notifies when the navigation mesh bake operation is completed."
msgstr ""
@@ -36706,7 +37096,9 @@ msgid ""
"3D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationObstacle] is physics safe."
+"[NavigationObstacle] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle.xml
@@ -36746,7 +37138,9 @@ msgid ""
"2D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationObstacle2D] is physics safe."
+"[NavigationObstacle2D] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle2D.xml
@@ -36826,6 +37220,14 @@ msgstr ""
#: doc/classes/NavigationPolygon.xml
msgid ""
+"Returns the [NavigationMesh] resulting from this navigation polygon. This "
+"navmesh can be used to update the navmesh of a region with the [method "
+"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server "
+"behind the scene)."
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml
+msgid ""
"Returns a [PoolVector2Array] containing the vertices of an outline that was "
"created in the editor or by script."
msgstr ""
@@ -36862,6 +37264,30 @@ msgid ""
msgstr ""
#: doc/classes/NavigationPolygonInstance.xml
+msgid "A region of the 2D navigation map."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A region of the navigation map. It tells the [Navigation2DServer] what can "
+"be navigated and what cannot, based on its [NavigationPolygon] resource.\n"
+"By default this node will register to the default [World2D] navigation map. "
+"If this node is a child of a [Navigation2D] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The pathfinding cost of entering this region from another region can be "
+"controlled with the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The pathfinding cost of traveling distances inside this region can be "
+"controlled with the [member travel_cost] multiplier."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
msgid ""
"Returns the [RID] of this region on the [Navigation2DServer]. Combined with "
"[method Navigation2DServer.map_get_closest_point_owner] can be used to "
@@ -36869,6 +37295,22 @@ msgid ""
"navigation map."
msgstr ""
+#: doc/classes/NavigationPolygonInstance.xml
+msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationPolygon] "
+"belongs to. On path requests with [method Navigation2DServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid "The [NavigationPolygon] resource to use."
+msgstr ""
+
#: doc/classes/NavigationServer.xml
msgid "Server interface for low-level 3D navigation access."
msgstr ""
@@ -36946,6 +37388,12 @@ msgid "Bakes the navigation mesh."
msgstr ""
#: doc/classes/NavigationServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method NavigationServer.map_get_path])."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
msgid "Control activation of this server."
msgstr ""
@@ -38412,13 +38860,19 @@ msgstr ""
#: doc/classes/Node.xml
msgid ""
"Emitted when a child node enters the scene tree, either because it entered "
-"on its own or because this node entered with it."
+"on its own or because this node entered with it.\n"
+"This signal is emitted [i]after[/i] the child node's own [constant "
+"NOTIFICATION_ENTER_TREE] and [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
msgid ""
-"Emitted when a child node exits the scene tree, either because it exited on "
-"its own or because this node exited."
+"Emitted when a child node is about to exit the scene tree, either because it "
+"is being removed or freed directly, or because this node is exiting the "
+"tree.\n"
+"When this signal is received, the child [code]node[/code] is still in the "
+"tree and valid. This signal is emitted [i]after[/i] the child node's own "
+"[signal tree_exiting] and [constant NOTIFICATION_EXIT_TREE]."
msgstr ""
#: doc/classes/Node.xml
@@ -38430,7 +38884,10 @@ msgid "Emitted when the node is renamed."
msgstr ""
#: doc/classes/Node.xml
-msgid "Emitted when the node enters the tree."
+msgid ""
+"Emitted when the node enters the tree.\n"
+"This signal is emitted [i]after[/i] the related [constant "
+"NOTIFICATION_ENTER_TREE] notification."
msgstr ""
#: doc/classes/Node.xml
@@ -38440,15 +38897,21 @@ msgstr ""
#: doc/classes/Node.xml
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)."
+"the right place for de-initialization (or a \"destructor\", if you will).\n"
+"This signal is emitted [i]before[/i] the related [constant "
+"NOTIFICATION_EXIT_TREE] notification."
msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node enters a [SceneTree]."
+msgid ""
+"Notification received when the node enters a [SceneTree].\n"
+"This notification is emitted [i]before[/i] the related [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node is about to exit a [SceneTree]."
+msgid ""
+"Notification received when the node is about to exit a [SceneTree].\n"
+"This notification is emitted [i]after[/i] the related [signal tree_exiting]."
msgstr ""
#: doc/classes/Node.xml
@@ -38709,7 +39172,13 @@ msgid "Rotation in degrees, relative to the node's parent."
msgstr ""
#: doc/classes/Node2D.xml
-msgid "The node's scale. Unscaled value: [code](1, 1)[/code]."
+msgid ""
+"The node's scale. Unscaled value: [code](1, 1)[/code].\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
#: doc/classes/Node2D.xml
@@ -40151,6 +40620,10 @@ msgid ""
" if argument.find(\"=\") > -1:\n"
" var key_value = argument.split(\"=\")\n"
" arguments[key_value[0].lstrip(\"--\")] = key_value[1]\n"
+" else:\n"
+" # Options without an argument will be present in the dictionary,\n"
+" # with the value set to an empty string.\n"
+" arguments[argument.lstrip(\"--\")] = \"\"\n"
"[/codeblock]"
msgstr ""
@@ -40805,8 +41278,15 @@ msgstr ""
msgid ""
"Moves the file or directory to the system's recycle bin. See also [method "
"Directory.remove].\n"
+"The method takes only global paths, so you may need to use [method "
+"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/"
+"code] as it will not work in exported project.\n"
"[b]Note:[/b] If the user has disabled the recycle bin on their system, the "
-"file will be permanently deleted instead."
+"file will be permanently deleted instead.\n"
+"[codeblock]\n"
+"var file_to_remove = \"user://slot1.sav\"\n"
+"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/OS.xml
@@ -45660,7 +46140,18 @@ msgstr ""
#: doc/classes/PopupMenu.xml
msgid ""
"[PopupMenu] is a [Control] that displays a list of options. They are popular "
-"in toolbars or context menus."
+"in toolbars or context menus.\n"
+"[b]Incremental search:[/b] Like [ItemList] and [Tree], [PopupMenu] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/PopupMenu.xml
@@ -47169,7 +47660,16 @@ msgid ""
msgstr ""
#: doc/classes/ProjectSettings.xml
-msgid "Message to be displayed before the backtrace when the engine crashes."
+msgid ""
+"Message to be displayed before the backtrace when the engine crashes. By "
+"default, this message is only used in exported projects due to the editor-"
+"only override applied to this setting."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Editor-only override for [member debug/settings/crash_handler/message]. Does "
+"not affect exported projects in debug or release mode."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -47414,6 +47914,18 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default naming style for scene files to infer from their root nodes. "
+"Possible options are:\n"
+"- [code]0[/code] (Auto): Uses the scene root name as is without changing its "
+"casing.\n"
+"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase "
+"casing.\n"
+"- [code]2[/code] (snake_case): Converts the scene root name to snake_case "
+"casing."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -47639,6 +48151,198 @@ msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 1."
msgstr ""
@@ -47847,6 +48551,198 @@ msgid "Optional name for the 2D render layer 9."
msgstr ""
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 1."
msgstr ""
@@ -48114,6 +49010,49 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default cell height for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_height].\n"
+"[b]Note:[/b] Currently not implemented."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 2D navigation maps. See [method "
+"Navigation2DServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell height for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_height]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 3D navigation maps. See [method "
+"NavigationServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default map up vector for 3D navigation maps. See [method NavigationServer."
+"map_set_up]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -48787,20 +49726,28 @@ msgid ""
"cause.\n"
"The default value is a conservative one, so you are advised to tweak it "
"according to the hardware you are targeting.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"The default is a very conservative override for [code]rendering/gles3/"
-"shaders/max_concurrent_compiles[/code].\n"
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
"Depending on the specific devices you are targeting, you may want to raise "
"it.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
+"Depending on the specific browsers you are targeting, you may want to raise "
+"it.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -48808,19 +49755,28 @@ msgid ""
"The maximum size, in megabytes, that the ubershader cache can grow up to. On "
"startup, the least recently used entries will be deleted until the total "
"size is within bounds.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/ubershader_cache_size_mb[/"
-"code], so a smaller maximum size can be configured for mobile platforms, "
-"where storage space is more limited.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for mobile platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for web platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] Currently, shader caching is generally unavailable on web "
+"platforms.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -48852,14 +49808,22 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/shader_compilation_mode[/"
-"code], so asynchronous compilation can be disabled for mobile.\n"
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on mobile platforms.\n"
"You may want to do that since mobile GPUs generally won't support "
"ubershaders due to their complexity."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on web platforms.\n"
+"You may want to do that since certain browsers (especially on mobile "
+"platforms) generally won't support ubershaders due to their complexity."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
@@ -49616,7 +50580,6 @@ msgid ""
"- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/"
"code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, "
"small grid radius values may lead to unwanted groupings.\n"
-"[/codeblock]\n"
"[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more "
"effective and faster [VisibilityNotifier] functionality. For most use cases, "
"[method Vector3.distance_to] or [method Vector3.distance_squared_to] are "
@@ -51764,6 +52727,22 @@ msgid "Makes text fill width."
msgstr ""
#: doc/classes/RichTextLabel.xml
+msgid "Aligns top of the inline image to the top of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns center of the inline image to the center of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns bottom of the inline image to the baseline of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns bottom of the inline image to the bottom of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
msgid "Each list item has a number marker."
msgstr ""
@@ -53501,8 +54480,8 @@ msgid ""
" yield(get_tree().create_timer(1.0), \"timeout\")\n"
" print(\"Timer ended.\")\n"
"[/codeblock]\n"
-"The timer will be automatically freed after its time elapses, so be aware "
-"that any reference you might have kept to it will become invalid."
+"The timer will be dereferenced after its time elapses. To preserve the "
+"timer, you can keep a reference to it. See [Reference]."
msgstr ""
#: doc/classes/SceneTreeTimer.xml
@@ -53534,24 +54513,23 @@ msgid ""
"manually (i.e. by using [code]Tween.new()[/code]) are invalid. They can't be "
"used for tweening values, but you can do manual interpolation with [method "
"interpolate_value].\n"
-"A [SceneTreeTween] animation is composed of a sequence of [Tweener]s, which "
-"by default are executed one after another. You can create a sequence by "
-"appending [Tweener]s to the [SceneTreeTween]. Animating something with a "
-"[Tweener] is called tweening. Example tweening sequence looks like this:\n"
+"A tween animation is created by adding [Tweener]s to the [SceneTreeTween] "
+"object, using [method tween_property], [method tween_interval], [method "
+"tween_callback] or [method tween_method]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1)\n"
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"This sequence will make the [code]$Sprite[/code] node turn red, then shrink "
-"and finally the [method Node.queue_free] is called to remove the sprite. See "
-"methods [method tween_property], [method tween_interval], [method "
-"tween_callback] and [method tween_method] for more usage information.\n"
+"This sequence will make the [code]$Sprite[/code] node turn red, then shrink, "
+"before finally calling [method Node.queue_free] to free the sprite. "
+"[Tweener]s are executed one after another by default. This behavior can be "
+"changed using [method parallel] and [method set_parallel].\n"
"When a [Tweener] is created with one of the [code]tween_*[/code] methods, a "
"chained method call can be used to tweak the properties of this [Tweener]. "
-"For example, if you want to set different transition type in the above "
-"example, you can do:\n"
+"For example, if you want to set a different transition type in the above "
+"example, you can use [method set_trans]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1).set_trans(Tween."
@@ -53560,8 +54538,9 @@ msgid ""
"TRANS_BOUNCE)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Most of the [SceneTreeTween] methods can be chained this way too. In this "
-"example the [SceneTreeTween] is bound and have set a default transition:\n"
+"Most of the [SceneTreeTween] methods can be chained this way too. In the "
+"following example the [SceneTreeTween] is bound to the running script's node "
+"and a default transition is set for its [Tweener]s:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween().bind_node(self).set_trans(Tween."
"TRANS_ELASTIC)\n"
@@ -53569,16 +54548,16 @@ msgid ""
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Another interesting use for [SceneTreeTween]s is animating arbitrary set of "
+"Another interesting use for [SceneTreeTween]s is animating arbitrary sets of "
"objects:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"for sprite in get_children():\n"
-" tween.tween_property(sprite, \"position\", Vector2(), 1)\n"
+" tween.tween_property(sprite, \"position\", Vector2(0, 0), 1)\n"
"[/codeblock]\n"
"In the example above, all children of a node are moved one after another to "
"position (0, 0).\n"
-"Some [Tweener]s use transitions and eases. The first accepts an [enum Tween."
+"Some [Tweener]s use transitions and eases. The first accepts a [enum Tween."
"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 Tween.EaseType] constant, and "
@@ -53590,7 +54569,7 @@ msgid ""
"tween_cheatsheet.png]Tween easing and transition types cheatsheet[/url]\n"
"[b]Note:[/b] All [SceneTreeTween]s will automatically start by default. To "
"prevent a [SceneTreeTween] from autostarting, you can call [method stop] "
-"immediately after it was created."
+"immediately after it is created."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53620,21 +54599,24 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
-"Processes the [SceneTreeTween] by given [code]delta[/code] value, in "
-"seconds. Mostly useful when the [SceneTreeTween] is paused, for controlling "
-"it manually. Can also be used to end the [SceneTreeTween] animation "
-"immediately, by using [code]delta[/code] longer than the whole duration.\n"
+"Processes the [SceneTreeTween] by the given [code]delta[/code] value, in "
+"seconds. This is mostly useful for manual control when the [SceneTreeTween] "
+"is paused. It can also be used to end the [SceneTreeTween] animation "
+"immediately, by setting [code]delta[/code] longer than the whole duration of "
+"the [SceneTreeTween] animation.\n"
"Returns [code]true[/code] if the [SceneTreeTween] still has [Tweener]s that "
"haven't finished.\n"
-"[b]Note:[/b] The [SceneTreeTween] will become invalid after finished, but "
-"you can call [method stop] after the step, to keep it and reset."
+"[b]Note:[/b] The [SceneTreeTween] will become invalid in the next processing "
+"frame after its animation finishes. Calling [method stop] after performing "
+"[method custom_step] instead keeps and resets the [SceneTreeTween]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Returns the total time in seconds the [SceneTreeTween] has been animating (i."
-"e. time since it started, not counting pauses etc.). The time is affected by "
-"[method set_speed_scale] and [method stop] will reset it to [code]0[/code].\n"
+"e. the time since it started, not counting pauses etc.). The time is "
+"affected by [method set_speed_scale], and [method stop] will reset it to "
+"[code]0[/code].\n"
"[b]Note:[/b] As it results from accumulating frame deltas, the time returned "
"after the [SceneTreeTween] has finished animating will be slightly greater "
"than the actual [SceneTreeTween] duration."
@@ -53670,11 +54652,10 @@ msgstr ""
msgid ""
"Returns whether the [SceneTreeTween] is valid. A valid [SceneTreeTween] is a "
"[SceneTreeTween] contained by the scene tree (i.e. the array from [method "
-"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). "
-"[SceneTreeTween] might become invalid when it has finished tweening or was "
-"killed, also when created with [code]Tween.new()[/code]. Invalid "
-"[SceneTreeTween] can't have [Tweener]s appended, because it can't animate "
-"them. You can however still use [method interpolate_value]."
+"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). A "
+"[SceneTreeTween] might become invalid when it has finished tweening, is "
+"killed, or when created with [code]SceneTreeTween.new()[/code]. Invalid "
+"[SceneTreeTween]s can't have [Tweener]s appended."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53714,16 +54695,15 @@ msgstr ""
msgid ""
"Sets the number of times the tweening sequence will be repeated, i.e. "
"[code]set_loops(2)[/code] will run the animation twice.\n"
-"Calling this method without arguments will make the [SceneTreeTween] run "
-"infinitely, until it is either killed by [method kill] or by freeing bound "
-"node, or all the animated objects have been freed (which makes further "
+"Calling this method without arguments will make the [Tween] run infinitely, "
+"until either it is killed with [method kill], the [Tween]'s bound node is "
+"freed, or all the animated objects have been freed (which makes further "
"animation impossible).\n"
"[b]Warning:[/b] Make sure to always add some duration/delay when using "
-"infinite loops. 0-duration looped animations (e.g. single [CallbackTweener] "
-"with no delay or [PropertyTweener] with invalid node) are equivalent to "
-"infinite [code]while[/code] loops and will freeze your game. If a "
-"[SceneTreeTween]'s lifetime depends on some node, always use [method "
-"bind_node]."
+"infinite loops. To prevent the game freezing, 0-duration looped animations "
+"(e.g. a single [CallbackTweener] with no delay) are stopped after a small "
+"number of loops, which may produce unexpected results. If a [Tween]'s "
+"lifetime depends on some node, always use [method bind_node]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53785,10 +54765,10 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Creates and appends an [IntervalTweener]. This method can be used to create "
-"delays in the tween animation, as an alternative for using the delay in "
-"other [Tweener]s or when there's no animation (in which case the "
-"[SceneTreeTween] acts as a timer). [code]time[/code] is the length of the "
-"interval, in seconds.\n"
+"delays in the tween animation, as an alternative to using the delay in other "
+"[Tweener]s, or when there's no animation (in which case the [SceneTreeTween] "
+"acts as a timer). [code]time[/code] is the length of the interval, in "
+"seconds.\n"
"Example: creating an interval in code execution.\n"
"[codeblock]\n"
"# ... some code\n"
@@ -53842,8 +54822,8 @@ msgid ""
"Creates and appends a [PropertyTweener]. This method tweens a "
"[code]property[/code] of an [code]object[/code] between an initial value and "
"[code]final_val[/code] in a span of time equal to [code]duration[/code], in "
-"seconds. The initial value by default is a value at the time the tweening of "
-"the [PropertyTweener] start. For example:\n"
+"seconds. The initial value by default is the property's value at the time "
+"the tweening of the [PropertyTweener] starts. For example:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"tween.tween_property($Sprite, \"position\", Vector2(100, 200), 1)\n"
@@ -53874,16 +54854,15 @@ msgid ""
"Emitted when the [SceneTreeTween] has finished all tweening. Never emitted "
"when the [SceneTreeTween] is set to infinite looping (see [method "
"set_loops]).\n"
-"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) after this signal "
-"is emitted, but it doesn't happen immediately, but on the next processing "
-"frame. Calling [method stop] inside the signal callback will preserve the "
-"[SceneTreeTween]."
+"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) in the next "
+"processing frame after this signal is emitted. Calling [method stop] inside "
+"the signal callback will prevent the [SceneTreeTween] from being removed."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Emitted when a full loop is complete (see [method set_loops]), providing the "
-"loop index. This signal is not emitted after final loop, use [signal "
+"loop index. This signal is not emitted after the final loop, use [signal "
"finished] instead for this case."
msgstr ""
@@ -53891,7 +54870,7 @@ msgstr ""
msgid ""
"Emitted when one step of the [SceneTreeTween] is complete, providing the "
"step index. One step is either a single [Tweener] or a group of [Tweener]s "
-"running parallelly."
+"running in parallel."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -55223,7 +56202,12 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-msgid "Scale part of the local transformation."
+msgid ""
+"Scale part of the local transformation.\n"
+"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, the scale values will either be all "
+"positive or all negative."
msgstr ""
#: doc/classes/Spatial.xml
@@ -57856,11 +58840,11 @@ msgstr ""
msgid ""
"Returns [code]true[/code] if this string contains a valid integer.\n"
"[codeblock]\n"
-"print(\"7\".is_valid_int()) # Prints \"True\"\n"
-"print(\"14.6\".is_valid_int()) # Prints \"False\"\n"
-"print(\"L\".is_valid_int()) # Prints \"False\"\n"
-"print(\"+3\".is_valid_int()) # Prints \"True\"\n"
-"print(\"-12\".is_valid_int()) # Prints \"True\"\n"
+"print(\"7\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"14.6\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"L\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"+3\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"-12\".is_valid_integer()) # Prints \"True\"\n"
"[/codeblock]"
msgstr ""
@@ -61330,6 +62314,10 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml
+msgid "If [code]true[/code], this TileMap bakes a navigation region."
+msgstr ""
+
+#: doc/classes/TileMap.xml
msgid "If [code]true[/code], the cell's UVs will be clipped."
msgstr ""
@@ -61436,6 +62424,10 @@ msgid "The TileMap orientation mode. See [enum Mode] for possible values."
msgstr ""
#: doc/classes/TileMap.xml
+msgid "The navigation layers the TileMap generates its navigation regions in."
+msgstr ""
+
+#: doc/classes/TileMap.xml
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 "
@@ -62567,7 +63559,12 @@ msgstr ""
#: doc/classes/Transform2D.xml
msgid ""
"Returns a copy of the transform scaled by the given [code]scale[/code] "
-"factor, using matrix multiplication."
+"factor, using matrix multiplication.\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
#: doc/classes/Transform2D.xml
@@ -62722,7 +63719,18 @@ msgid ""
"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]."
+"to remove it from the [Tree].\n"
+"[b]Incremental search:[/b] Like [ItemList] and [PopupMenu], [Tree] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/Tree.xml
@@ -66239,11 +67247,12 @@ msgid "This enabler will stop [Particles2D] nodes."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _process function."
+msgid "This enabler will stop the parent's [method Node._process] function."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _physics_process function."
+msgid ""
+"This enabler will stop the parent's [method Node._physics_process] function."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
@@ -66283,6 +67292,16 @@ msgid "The VisibilityNotifier's bounding box."
msgstr ""
#: doc/classes/VisibilityNotifier.xml
+msgid ""
+"In addition to checking whether a node is on screen or within a [Camera]'s "
+"view, VisibilityNotifier can also optionally check whether a node is within "
+"a specified maximum distance when using a [Camera] with perspective "
+"projection. This is useful for throttling the performance requirements of "
+"nodes that are far away.\n"
+"[b]Note:[/b] This feature will be disabled if set to 0.0."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier.xml
msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view."
msgstr ""
@@ -71033,6 +72052,16 @@ msgid "The amount of shader rebinds in the frame."
msgstr ""
#: doc/classes/VisualServer.xml
+msgid ""
+"The peak amount of shaders that have been under compilation in the frame.\n"
+"This is useful to know when asynchronous shader compilation has finished for "
+"the current shaders on screen.\n"
+"[b]Note:[/b] For complete certainty, only assume there are no outstanding "
+"compilations when this value is zero for at least two frames in a row.\n"
+"Unimplemented in the GLES2 rendering backend, always returns 0."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
msgid "The amount of surface changes in the frame."
msgstr ""
@@ -74230,8 +75259,8 @@ msgstr ""
#: doc/classes/World.xml
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."
+"scenario, a navigation map and a sound space. Spatial nodes register their "
+"resources into the current world."
msgstr ""
#: doc/classes/World.xml
@@ -74246,11 +75275,17 @@ msgstr ""
#: doc/classes/World.xml
msgid ""
-"The World's fallback_environment will be used if the World's [Environment] "
-"fails or is missing."
+"The World's fallback environment will be used if [member environment] fails "
+"or is missing."
msgstr ""
#: doc/classes/World.xml
+#, fuzzy
+msgid ""
+"The [RID] of this world's navigation map. Used by the [NavigationServer]."
+msgstr "Mengembalikan nilai hiperbolik tangen dari parameter."
+
+#: doc/classes/World.xml
msgid "The World's visual scenario."
msgstr ""
@@ -74265,8 +75300,8 @@ msgstr ""
#: doc/classes/World2D.xml
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."
+"visual scenario, a navigation map and a sound space. 2D nodes register their "
+"resources into the current 2D world."
msgstr ""
#: doc/classes/World2D.xml
@@ -74283,6 +75318,12 @@ msgid ""
msgstr ""
#: doc/classes/World2D.xml
+#, fuzzy
+msgid ""
+"The [RID] of this world's navigation map. Used by the [Navigation2DServer]."
+msgstr "Mengembalikan nilai hiperbolik tangen dari parameter."
+
+#: doc/classes/World2D.xml
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."
diff --git a/doc/translations/is.po b/doc/translations/is.po
index 34704b5dd4..4dd42d807e 100644
--- a/doc/translations/is.po
+++ b/doc/translations/is.po
@@ -347,7 +347,7 @@ msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
msgid ""
"Compares two values by checking their actual contents, recursing into any "
-"`Array` or `Dictionary` up to its deepest level.\n"
+"[Array] or [Dictionary] up to its deepest level.\n"
"This compares to [code]==[/code] in a number of ways:\n"
"- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/"
"code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] "
@@ -394,7 +394,7 @@ msgid ""
"- 1.0: Linear\n"
"- Greater than 1.0 (exclusive): Ease in\n"
"[/codeblock]\n"
-"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.4/img/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/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]."
@@ -1101,7 +1101,7 @@ msgid ""
"[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/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/img/"
"smoothstep_ease_comparison.png]Comparison between smoothstep() and ease(x, "
"-1.6521) return values[/url]"
msgstr ""
@@ -3379,6 +3379,12 @@ msgstr ""
#: doc/classes/@GlobalScope.xml
msgid ""
+"Hints that an integer property is a bitmask using the optionally named 2D "
+"navigation layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml
+msgid ""
"Hints that an integer property is a bitmask using the optionally named 3D "
"render layers."
msgstr ""
@@ -3391,6 +3397,12 @@ msgstr ""
#: doc/classes/@GlobalScope.xml
msgid ""
+"Hints that an integer property is a bitmask using the optionally named 3D "
+"navigation layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml
+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]."
@@ -8366,7 +8378,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/AStar.xml
+#: doc/classes/AStar.xml doc/classes/AStar2D.xml
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[/"
@@ -8565,7 +8577,10 @@ msgid ""
msgstr ""
#: doc/classes/AStar2D.xml
-msgid "Returns whether there is a connection/segment between the given points."
+msgid ""
+"Returns whether there is a connection/segment between the given points. 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/AStar2D.xml
@@ -8582,10 +8597,6 @@ msgid ""
msgstr ""
#: doc/classes/AStar2D.xml
-msgid "Deletes the segment between the given points."
-msgstr ""
-
-#: doc/classes/AStar2D.xml
msgid ""
"Returns the closest position to [code]to_position[/code] that resides inside "
"a segment between two connected points.\n"
@@ -8770,7 +8781,9 @@ msgid ""
"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."
+"transmit audio over the network. When capturing audio data from a "
+"microphone, the format of the samples will be stereo 32-bit floating point "
+"PCM."
msgstr ""
#: doc/classes/AudioEffectCapture.xml
@@ -13613,7 +13626,7 @@ msgid ""
msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
-#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/Navigation2D.xml
msgid "Returns the object's [RID]."
msgstr ""
@@ -19088,11 +19101,14 @@ msgid ""
msgstr ""
#: doc/classes/CurveTexture.xml
-msgid "The [code]curve[/code] rendered onto the texture."
+msgid "The [Curve] that is rendered onto the texture."
msgstr ""
#: doc/classes/CurveTexture.xml
-msgid "The width of the texture."
+msgid ""
+"The width of the texture (in pixels). Higher values make it possible to "
+"represent high-frequency data better (such as sudden direction changes), at "
+"the cost of increased generation time and memory usage."
msgstr ""
#: doc/classes/CylinderMesh.xml
@@ -19378,6 +19394,13 @@ msgid "Returns the list of keys in the [Dictionary]."
msgstr ""
#: doc/classes/Dictionary.xml
+msgid ""
+"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, "
+"duplicate keys will not be copied over, unless [code]overwrite[/code] is "
+"[code]true[/code]."
+msgstr ""
+
+#: doc/classes/Dictionary.xml
msgid "Returns the number of keys in the dictionary."
msgstr ""
@@ -21316,9 +21339,23 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide a state data you want to be saved, like view "
+"position, grid settings, folding, etc. 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). This data is automatically saved for "
+"each scene in an [code]editstate[/code] file in the editor metadata folder. "
+"If you want to store global (scene-independent) editor data for your plugin, "
+"you can use [method get_window_layout] instead.\n"
+"Use [method set_state] to restore your saved state.\n"
+"[b]Note:[/b] This method should not be used to save important settings that "
+"should persist with the project.\n"
+"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be "
+"stored and restored correctly.\n"
+"[codeblock]\n"
+"func get_state():\n"
+" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n"
+" return state\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -21329,9 +21366,18 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide the GUI layout of the plugin or any other "
+"data you want to be stored. 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). The data is stored in the "
+"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n"
+"Use [method set_window_layout] to restore your saved layout.\n"
+"[codeblock]\n"
+"func get_window_layout(configuration):\n"
+" configuration.set_value(\"MyPlugin\", \"window_position\", $Window."
+"position)\n"
+" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -21444,11 +21490,30 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the state saved by [method get_state]."
+msgid ""
+"Restore the state saved by [method get_state]. This method is called when "
+"the current scene tab is changed in the editor.\n"
+"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise "
+"it will not be recognized and this method will not be called.\n"
+"[codeblock]\n"
+"func set_state(data):\n"
+" zoom = data.get(\"zoom\", 1.0)\n"
+" preferred_color = data.get(\"my_color\", Color.white)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the plugin GUI layout saved by [method get_window_layout]."
+msgid ""
+"Restore the plugin GUI layout and data saved by [method get_window_layout]. "
+"This method is called for every plugin on editor startup. Use the provided "
+"[code]configuration[/code] file to read your saved data.\n"
+"[codeblock]\n"
+"func set_window_layout(configuration):\n"
+" $Window.position = configuration.get_value(\"MyPlugin\", "
+"\"window_position\", Vector2())\n"
+" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", "
+"Color.white)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -26083,7 +26148,8 @@ msgid ""
"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])."
+"at fixed steps (see [member width]). See also [GradientTexture2D] and "
+"[CurveTexture]."
msgstr ""
#: doc/classes/GradientTexture.xml
@@ -26105,7 +26171,8 @@ msgid ""
"repeat] types using colors obtained from the gradient. 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] and [member height])."
+"[member width] and [member height]). See also [GradientTexture] and "
+"[CurveTexture]."
msgstr ""
#: doc/classes/GradientTexture2D.xml
@@ -26911,6 +26978,12 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+msgid ""
+"If [code]true[/code], this GridMap uses cell navmesh resources to create "
+"navigation regions."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid "If [code]true[/code], grid items are centered on the X axis."
msgstr ""
@@ -26961,6 +27034,10 @@ msgid "The assigned [MeshLibrary]."
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+msgid "The navigation layers the GridMap generates its navigation regions in."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
"Overrides the default friction and bounce physics properties for the whole "
"[GridMap]."
@@ -28184,7 +28261,7 @@ msgid ""
" # 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 body = to_json({\"name\": \"Godette\"})\n"
" error = http_request.request(\"https://httpbin.org/post\", [], true, "
"HTTPClient.METHOD_POST, body)\n"
" if error != OK:\n"
@@ -29351,7 +29428,7 @@ msgstr ""
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 "
+"([member 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 "
@@ -29500,10 +29577,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Returns the mouse mode. See the constants for more information."
-msgstr ""
-
-#: doc/classes/Input.xml
msgid ""
"Gets an input vector by specifying four actions for the positive and "
"negative X and Y axes.\n"
@@ -29697,24 +29770,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Sets the mouse mode. See the constants for more information."
-msgstr ""
-
-#: doc/classes/Input.xml
-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
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 "
@@ -29750,6 +29805,24 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
+msgid "Controls the mouse mode. See [enum MouseMode] for more information."
+msgstr ""
+
+#: doc/classes/Input.xml
+msgid ""
+"If [code]true[/code], similar input events sent by the operating system are "
+"accumulated. 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 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
msgid "Emitted when a joypad device has been connected or disconnected."
msgstr ""
@@ -30057,8 +30130,8 @@ msgstr ""
#: doc/classes/InputEventJoypadButton.xml
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]."
+"Represents the pressure the user puts on the button with their finger, if "
+"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]."
msgstr ""
#: doc/classes/InputEventJoypadMotion.xml
@@ -30321,9 +30394,9 @@ 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 "
+"at most. If you need more precise input reporting, set [member Input."
+"use_accumulated_input] to [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."
@@ -30810,7 +30883,18 @@ msgid ""
"[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."
+"fixed_column_width] greater than zero to wrap the text.\n"
+"[b]Incremental search:[/b] Like [PopupMenu] and [Tree], [ItemList] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/ItemList.xml
@@ -34557,11 +34641,16 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Returns the override [Material] for a surface of the [Mesh] resource.\n"
+"[b]Note:[/b] This function only returns [i]override[/i] materials associated "
+"with this [MeshInstance]. Consider using [method get_active_material] or "
+"[method Mesh.surface_get_material] to get materials associated with the "
+"[Mesh] resource."
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the number of surface materials."
+msgid "Returns the number of surface override materials."
msgstr ""
#: doc/classes/MeshInstance.xml
@@ -34598,7 +34687,10 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Sets the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Sets the override [Material] for the specified surface of the [Mesh] "
+"resource. This material is associated with this [MeshInstance] rather than "
+"with the [Mesh] resource."
msgstr ""
#: doc/classes/MeshInstance.xml
@@ -34629,9 +34721,10 @@ msgstr ""
#: doc/classes/MeshInstance2D.xml
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\"."
+"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be "
+"automatically created from an existing [Sprite] via a tool in the editor "
+"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to "
+"MeshInstance2D[/b] at the top of the 2D editor viewport."
msgstr ""
#: doc/classes/MeshInstance2D.xml
@@ -35389,6 +35482,9 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"Provides navigation and pathfinding within a collection of "
"[NavigationMesh]es. By default, these will be automatically collected from "
"child [NavigationMeshInstance] nodes. In addition to basic pathfinding, this "
@@ -35429,7 +35525,14 @@ msgid ""
msgstr ""
#: doc/classes/Navigation.xml
+msgid "Returns the [RID] of the navigation map on the [NavigationServer]."
+msgstr ""
+
+#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"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, "
@@ -35451,16 +35554,31 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation.get_simple_path] path query."
+msgstr ""
+
+#: doc/classes/Navigation.xml
+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/Navigation.xml doc/classes/Navigation2DServer.xml
+#: doc/classes/NavigationServer.xml
+msgid ""
+"Emitted when a navigation map is updated, when a region moves or is modified."
+msgstr ""
+
#: doc/classes/Navigation2D.xml
msgid "2D navigation and pathfinding node."
msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -35480,6 +35598,9 @@ msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -35489,6 +35610,12 @@ msgstr ""
msgid "The XY plane cell size to use for fields."
msgstr ""
+#: doc/classes/Navigation2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation2D.get_simple_path] path query."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml
msgid "Server interface for low-level 2D navigation access."
msgstr ""
@@ -35505,8 +35632,12 @@ msgid ""
"through scripts.\n"
"For two regions to be connected to each other, they must share a similar "
"edge. An edge is considered connected to another if both of its two vertices "
-"are at a distance less than [member Navigation.edge_connection_margin] to "
-"the respective other edge's vertex.\n"
+"are at a distance less than navigation map [code]edge_connection_margin[/"
+"code] to the respective other edge's vertex.\n"
+"You may assign navigation layers to regions with [method Navigation2DServer."
+"region_set_navigation_layers], which then can be checked upon when "
+"requesting a path with [method Navigation2DServer.map_get_path]. This allows "
+"allowing or forbidding some areas to 2D objects.\n"
"To use the collision avoidance system, you may use agents. You can set an "
"agent's target velocity, then the servers will emit a callback with a "
"modified velocity.\n"
@@ -35534,7 +35665,17 @@ msgid "Returns [code]true[/code] if the map got changed the previous frame."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Callback called at the end of the RVO process."
+msgid ""
+"Callback called at the end of the RVO process. If a callback is created "
+"manually and the agent is placed on a navigation map it will calculate "
+"avoidance for the agent and dispatch the calculated [code]safe_velocity[/"
+"code] to the [code]receiver[/code] object with a signal to the chosen "
+"[code]method[/code] name.\n"
+"[b]Note:[/b] Created callbacks are always processed independently of the "
+"SceneTree state as long as the agent is on a navigation map and not freed. "
+"To disable the dispatch of a callback from an agent use [method "
+"agent_set_callback] again with a [code]null[/code] object as the "
+"[code]receiver[/code]."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -35589,15 +35730,55 @@ msgid "Destroys the given RID."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns all created navigation map [RID]s on the NavigationServer. This "
+"returns both 2D and 3D created navigation maps as there is technically no "
+"distinction between them."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Create a new map."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"This function immediately forces synchronization of the specified navigation "
+"[code]map[/code] [RID]. By default navigation maps are only synchronized at "
+"the end of each physics frame. This function can be used to immediately "
+"(re)calculate all the navigation meshes and region connections of the "
+"navigation map. This makes it possible to query a navigation path for a "
+"changed map immediately and in the same frame (multiple times if needed).\n"
+"Due to technical restrictions the current NavigationServer command queue "
+"will be flushed. This means all already queued update commands for this "
+"physics frame will be executed, even those intended for other maps, regions "
+"and agents not part of the specified map. The expensive computation of the "
+"navigation meshes and region connections of a map will only be done for the "
+"specified map. Other maps will receive the normal synchronization at the end "
+"of the physics frame. Should the specified map receive changes after the "
+"forced update it will update again as well when the other maps receive their "
+"update.\n"
+"Avoidance processing and dispatch of the [code]safe_velocity[/code] signals "
+"is untouched by this function and continues to happen for all maps and "
+"agents at the end of the physics frame.\n"
+"[b]Note:[/b] With great power comes great responsibility. This function "
+"should only be used by users that really know what they are doing and have a "
+"good reason for it. Forcing an immediate update of a navigation map requires "
+"locking the NavigationServer and flushing the entire NavigationServer "
+"command queue. Not only can this severely impact the performance of a game "
+"but it can also introduce bugs if used inappropriately without much "
+"foresight."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns all navigation agents [RID]s that are currently assigned to the "
"requested navigation [code]map[/code]."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Returns the map cell size."
msgstr ""
@@ -35621,7 +35802,10 @@ msgid ""
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Returns the navigation path to reach the destination from the origin."
+msgid ""
+"Returns the navigation path to reach the destination from the origin. "
+"[code]navigation_layers[/code] is a bitmask of all region layers that are "
+"allowed to be in the path."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -35638,6 +35822,12 @@ msgstr ""
msgid "Sets the map active."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/"
+"b] Currently not implemented."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Set the map cell size used to weld the navigation mesh polygons."
msgstr ""
@@ -35653,14 +35843,73 @@ msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"Returns the ending point of a connection door. [code]connection[/code] is an "
+"index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns the starting point of a connection door. [code]connection[/code] is "
+"an index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns how many connections this [code]region[/code] has with other regions "
+"in the map."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns the navigation map [RID] the requested [code]region[/code] is "
"currently assigned to."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Returns the region's navigation layers."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns [code]true[/code] if the provided [code]point[/code] in world space "
+"is currently owned by the provided navigation [code]region[/code]. Owned in "
+"this context means that one of the region's navigation mesh polygon faces "
+"has a possible position at the closest distance to this point compared to "
+"all other navigation meshes from other navigation regions that are also "
+"registered on the navigation map of the provided region.\n"
+"If multiple navigation meshes have positions at equal distance the "
+"navigation region whose polygons are processed first wins the ownership. "
+"Polygons are processed in the same order that navigation regions were "
+"registered on the NavigationServer.\n"
+"[b]Note:[/b] If navigation meshes from different navigation regions overlap "
+"(which should be avoided in general) the result might not be what is "
+"expected."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Sets the map for the region."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method Navigation2DServer.map_get_path])."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Sets the navigation mesh for the region."
msgstr ""
@@ -35669,6 +35918,10 @@ msgstr ""
msgid "Sets the global transformation for the region."
msgstr ""
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]."
+msgstr ""
+
#: doc/classes/NavigationAgent.xml
msgid "3D agent used in navigation for collision avoidance."
msgstr ""
@@ -35678,9 +35931,16 @@ msgid ""
"3D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationAgent] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World] navigation map. If this node is a child of a [Navigation] "
+"node it will register to the navigation map of the navigation node or the "
+"function [method set_navigation] can be used to set the navigation node "
+"directly. [NavigationAgent] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -35698,7 +35958,15 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-msgid "Returns the path from start to finish in global coordinates."
+msgid ""
+"Returns this agent's current path from start to finish in global "
+"coordinates. The path only updates when the target location is changed or "
+"the agent requires a repath. The path array is not intended to be used in "
+"direct path movement as the agent has its own internal path logic that would "
+"get corrupted by changing the path array manually. Use the intended [method "
+"get_next_location] once every physics frame to receive the next path point "
+"for the agents movement as this function also updates the internal path "
+"logic."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -35713,11 +35981,24 @@ msgid ""
"system."
msgstr ""
-#: doc/classes/NavigationAgent.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"Returns a [Vector3] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the origin of the agent's parent."
+"Returns the [RID] of the navigation map for this NavigationAgent node. This "
+"function returns always the map set on the NavigationAgent node and not the "
+"map of the abstract agent on the NavigationServer. If the agent map is "
+"changed directly with the NavigationServer API the NavigationAgent node will "
+"not be aware of the map change. Use [method set_navigation_map] to change "
+"the navigation map for the NavigationAgent and also update the agent on the "
+"NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
+"Returns the next location in global coordinates that can be moved to, making "
+"sure that there are no static objects in the way. If the agent does not have "
+"a navigation path, it will return the position of the agent's parent. The "
+"use of this function once every physics frame is required to update the "
+"internal path logic of the NavigationAgent."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -35758,6 +36039,12 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"Sets the [RID] of the navigation map this NavigationAgent node should use "
+"and also updates the [code]agent[/code] on the NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"Sets the user desired final location. This will clear the current navigation "
"path."
msgstr ""
@@ -35770,7 +36057,13 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml
-msgid "The agent height offset to match the navigation mesh height."
+msgid ""
+"The NavigationAgent height offset is subtracted from the y-axis value of any "
+"vector path position for this NavigationAgent. The NavigationAgent height "
+"offset does not change or influence the navigation mesh or pathfinding query "
+"result. Additional navigation maps that use regions with navigation meshes "
+"that the developer baked with appropriate agent radius or height values are "
+"required to support different-sized agents."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -35797,26 +36090,53 @@ msgstr ""
msgid "The maximum speed that an agent can move."
msgstr ""
+#: doc/classes/NavigationAgent.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "The distance to search for other agents."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"The distance threshold before a path point is considered to be reached. This "
+"will allow an agent to not have to hit a path point on the path exactly, but "
+"in the area. If this value is set to high the NavigationAgent will skip "
+"points on the path which can lead to leaving the navigation mesh. If this "
+"value is set to low the NavigationAgent will be stuck in a repath loop cause "
+"it will constantly overshoot or undershoot the distance to the next point on "
+"each physics frame update."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"The maximum distance the agent is allowed away from the ideal path to the "
"final location. This can happen due to trying to avoid collisions. When the "
"maximum distance is exceeded, it recalculates the ideal path."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-msgid "The radius of the agent."
+msgid ""
+"The radius of the avoidance agent. This is the \"body\" of the avoidance "
+"agent and not the avoidance maneuver starting radius (which is controlled by "
+"[member neighbor_dist]).\n"
+"Does not affect normal pathfinding. To change an actor's pathfinding radius "
+"bake [NavigationMesh] resources with a different [member NavigationMesh."
+"agent_radius] property and use different navigation maps for each actor size."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"The distance threshold before a target is considered to be reached. This "
-"will allow an agent to not have to hit a point on the path exactly, but in "
-"the area."
+"The distance threshold before the final target point is considered to be "
+"reached. This will allow an agent to not have to hit the point of the final "
+"target exactly, but only the area. If this value is set to low the "
+"NavigationAgent will be stuck in a repath loop cause it will constantly "
+"overshoot or undershoot the distance to the final target point on each "
+"physics frame update."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -35859,9 +36179,16 @@ msgid ""
"2D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationAgent2D] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World2D] navigation map. If this node is a child of a "
+"[Navigation2D] node it will register to the navigation map of the navigation "
+"node or the function [method set_navigation] can be used to set the "
+"navigation node directly. [NavigationAgent2D] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent2D.xml
@@ -35877,13 +36204,6 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent2D.xml
-msgid ""
-"Returns a [Vector2] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the position of the agent's parent."
-msgstr ""
-
-#: doc/classes/NavigationAgent2D.xml
msgid "Returns the [RID] of this agent on the [Navigation2DServer]."
msgstr ""
@@ -35903,6 +36223,13 @@ msgid ""
"only be enabled on agents that currently require it."
msgstr ""
+#: doc/classes/NavigationAgent2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent2D] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationMesh.xml
msgid "A mesh to approximate the walkable areas and obstacles."
msgstr ""
@@ -35933,8 +36260,8 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
-"Returns whether the specified [code]bit[/code] of the [member geometry/"
-"collision_mask] is set."
+"Returns whether the specified [code]bit[/code] of the [member "
+"geometry_collision_mask] is set."
msgstr ""
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
@@ -35956,9 +36283,9 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/"
-"code] in the [member geometry/collision_mask].\n"
+"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]."
+"code] in the [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
@@ -35972,14 +36299,14 @@ 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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -35991,7 +36318,7 @@ 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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36019,13 +36346,17 @@ msgstr ""
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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
-"If [code]true[/code], marks walkable spans as not walkable if the clearance "
-"above the span is less than [member agent/height]."
+"If the baking [AABB] has a volume the navigation mesh baking will be "
+"restricted to its enclosing area."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+msgid "The position offset applied to the [member filter_baking_aabb] [AABB]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36035,13 +36366,19 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]true[/code], marks non-walkable spans as walkable if their maximum "
-"is within [member agent/max_climb] of a walkable neighbor."
+"is within [member agent_max_climb] of a walkable neighbor."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+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
msgid ""
"The physics layers to scan for static colliders.\n"
-"Only used when [member geometry/parsed_geometry_type] is [constant "
+"Only used when [member geometry_parsed_geometry_type] is [constant "
"PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]."
msgstr ""
@@ -36060,7 +36397,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"The name of the group to scan for geometry.\n"
-"Only used when [member geometry/source_geometry_mode] is [constant "
+"Only used when [member geometry_source_geometry_mode] is [constant "
"SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant "
"SOURCE_GEOMETRY_GROUPS_EXPLICIT]."
msgstr ""
@@ -36123,7 +36460,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Parses [StaticBody] colliders as geometry. The collider should be in any of "
-"the layers specified by [member geometry/collision_mask]."
+"the layers specified by [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36144,13 +36481,13 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Scans nodes in a group and their child nodes recursively for geometry. The "
-"group is specified by [member geometry/source_group_name]."
+"group is specified by [member geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Uses nodes in a group for geometry. The group is specified by [member "
-"geometry/source_group_name]."
+"geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36192,7 +36529,15 @@ msgid ""
"geometry for walkable terrain suitable to [NavigationMesh] agent properties "
"by creating a voxel world around the meshes bounding area.\n"
"The finalized navigation mesh is then returned and stored inside the "
-"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes."
+"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] "
+"nodes.\n"
+"[b]Note:[/b] Using meshes to not only define walkable surfaces but also "
+"obstruct navigation baking does not always work. The navigation baking has "
+"no concept of what is a geometry \"inside\" when dealing with mesh source "
+"geometry and this is intentional. Depending on current baking parameters, as "
+"soon as the obstructing mesh is large enough to fit a navigation mesh area "
+"inside, the baking will generate navigation mesh areas that are inside the "
+"obstructing source geometry mesh."
msgstr ""
#: doc/classes/NavigationMeshGenerator.xml
@@ -36200,8 +36545,8 @@ msgid ""
"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child "
"nodes under the provided [code]root_node[/code] or a specific group of nodes "
"for potential source geometry. The parse behavior can be controlled with the "
-"[member NavigationMesh.geometry/parsed_geometry_type] and [member "
-"NavigationMesh.geometry/source_geometry_mode] properties on the "
+"[member NavigationMesh.geometry_parsed_geometry_type] and [member "
+"NavigationMesh.geometry_source_geometry_mode] properties on the "
"[NavigationMesh] resource."
msgstr ""
@@ -36218,8 +36563,21 @@ msgstr ""
#: doc/classes/NavigationMeshInstance.xml
msgid ""
"An instance of a [NavigationMesh]. It tells the [Navigation] node what can "
-"be navigated and what cannot, based on the [NavigationMesh] resource. This "
-"should be a child of a [Navigation] node."
+"be navigated and what cannot, based on the [NavigationMesh] resource.\n"
+"By default this node will register to the default [World] navigation map. If "
+"this node is a child of a [Navigation] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method NavigationServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The cost of entering this region from another region can be controlled with "
+"the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The cost of traveling distances inside this region can be controlled with "
+"the [member travel_cost] multiplier."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
@@ -36248,10 +36606,34 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding enters this region's navmesh from another regions navmesh "
+"the [code]enter_cost[/code] value is added to the path distance for "
+"determining the shortest path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationMesh] "
+"belongs to. On path requests with [method NavigationServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
msgid "The [NavigationMesh] resource to use."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding moves inside this region's navmesh the traveled distances "
+"are multiplied with [code]travel_cost[/code] for determining the shortest "
+"path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
msgid "Notifies when the navigation mesh bake operation is completed."
msgstr ""
@@ -36268,7 +36650,9 @@ msgid ""
"3D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationObstacle] is physics safe."
+"[NavigationObstacle] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle.xml
@@ -36308,7 +36692,9 @@ msgid ""
"2D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationObstacle2D] is physics safe."
+"[NavigationObstacle2D] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle2D.xml
@@ -36388,6 +36774,14 @@ msgstr ""
#: doc/classes/NavigationPolygon.xml
msgid ""
+"Returns the [NavigationMesh] resulting from this navigation polygon. This "
+"navmesh can be used to update the navmesh of a region with the [method "
+"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server "
+"behind the scene)."
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml
+msgid ""
"Returns a [PoolVector2Array] containing the vertices of an outline that was "
"created in the editor or by script."
msgstr ""
@@ -36424,6 +36818,30 @@ msgid ""
msgstr ""
#: doc/classes/NavigationPolygonInstance.xml
+msgid "A region of the 2D navigation map."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A region of the navigation map. It tells the [Navigation2DServer] what can "
+"be navigated and what cannot, based on its [NavigationPolygon] resource.\n"
+"By default this node will register to the default [World2D] navigation map. "
+"If this node is a child of a [Navigation2D] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The pathfinding cost of entering this region from another region can be "
+"controlled with the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The pathfinding cost of traveling distances inside this region can be "
+"controlled with the [member travel_cost] multiplier."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
msgid ""
"Returns the [RID] of this region on the [Navigation2DServer]. Combined with "
"[method Navigation2DServer.map_get_closest_point_owner] can be used to "
@@ -36431,6 +36849,22 @@ msgid ""
"navigation map."
msgstr ""
+#: doc/classes/NavigationPolygonInstance.xml
+msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationPolygon] "
+"belongs to. On path requests with [method Navigation2DServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid "The [NavigationPolygon] resource to use."
+msgstr ""
+
#: doc/classes/NavigationServer.xml
msgid "Server interface for low-level 3D navigation access."
msgstr ""
@@ -36506,6 +36940,12 @@ msgid "Bakes the navigation mesh."
msgstr ""
#: doc/classes/NavigationServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method NavigationServer.map_get_path])."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
msgid "Control activation of this server."
msgstr ""
@@ -37972,13 +38412,19 @@ msgstr ""
#: doc/classes/Node.xml
msgid ""
"Emitted when a child node enters the scene tree, either because it entered "
-"on its own or because this node entered with it."
+"on its own or because this node entered with it.\n"
+"This signal is emitted [i]after[/i] the child node's own [constant "
+"NOTIFICATION_ENTER_TREE] and [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
msgid ""
-"Emitted when a child node exits the scene tree, either because it exited on "
-"its own or because this node exited."
+"Emitted when a child node is about to exit the scene tree, either because it "
+"is being removed or freed directly, or because this node is exiting the "
+"tree.\n"
+"When this signal is received, the child [code]node[/code] is still in the "
+"tree and valid. This signal is emitted [i]after[/i] the child node's own "
+"[signal tree_exiting] and [constant NOTIFICATION_EXIT_TREE]."
msgstr ""
#: doc/classes/Node.xml
@@ -37990,7 +38436,10 @@ msgid "Emitted when the node is renamed."
msgstr ""
#: doc/classes/Node.xml
-msgid "Emitted when the node enters the tree."
+msgid ""
+"Emitted when the node enters the tree.\n"
+"This signal is emitted [i]after[/i] the related [constant "
+"NOTIFICATION_ENTER_TREE] notification."
msgstr ""
#: doc/classes/Node.xml
@@ -38000,15 +38449,21 @@ msgstr ""
#: doc/classes/Node.xml
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)."
+"the right place for de-initialization (or a \"destructor\", if you will).\n"
+"This signal is emitted [i]before[/i] the related [constant "
+"NOTIFICATION_EXIT_TREE] notification."
msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node enters a [SceneTree]."
+msgid ""
+"Notification received when the node enters a [SceneTree].\n"
+"This notification is emitted [i]before[/i] the related [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node is about to exit a [SceneTree]."
+msgid ""
+"Notification received when the node is about to exit a [SceneTree].\n"
+"This notification is emitted [i]after[/i] the related [signal tree_exiting]."
msgstr ""
#: doc/classes/Node.xml
@@ -38269,7 +38724,13 @@ msgid "Rotation in degrees, relative to the node's parent."
msgstr ""
#: doc/classes/Node2D.xml
-msgid "The node's scale. Unscaled value: [code](1, 1)[/code]."
+msgid ""
+"The node's scale. Unscaled value: [code](1, 1)[/code].\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
#: doc/classes/Node2D.xml
@@ -39709,6 +40170,10 @@ msgid ""
" if argument.find(\"=\") > -1:\n"
" var key_value = argument.split(\"=\")\n"
" arguments[key_value[0].lstrip(\"--\")] = key_value[1]\n"
+" else:\n"
+" # Options without an argument will be present in the dictionary,\n"
+" # with the value set to an empty string.\n"
+" arguments[argument.lstrip(\"--\")] = \"\"\n"
"[/codeblock]"
msgstr ""
@@ -40362,8 +40827,15 @@ msgstr ""
msgid ""
"Moves the file or directory to the system's recycle bin. See also [method "
"Directory.remove].\n"
+"The method takes only global paths, so you may need to use [method "
+"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/"
+"code] as it will not work in exported project.\n"
"[b]Note:[/b] If the user has disabled the recycle bin on their system, the "
-"file will be permanently deleted instead."
+"file will be permanently deleted instead.\n"
+"[codeblock]\n"
+"var file_to_remove = \"user://slot1.sav\"\n"
+"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/OS.xml
@@ -45202,7 +45674,18 @@ msgstr ""
#: doc/classes/PopupMenu.xml
msgid ""
"[PopupMenu] is a [Control] that displays a list of options. They are popular "
-"in toolbars or context menus."
+"in toolbars or context menus.\n"
+"[b]Incremental search:[/b] Like [ItemList] and [Tree], [PopupMenu] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/PopupMenu.xml
@@ -46709,7 +47192,16 @@ msgid ""
msgstr ""
#: doc/classes/ProjectSettings.xml
-msgid "Message to be displayed before the backtrace when the engine crashes."
+msgid ""
+"Message to be displayed before the backtrace when the engine crashes. By "
+"default, this message is only used in exported projects due to the editor-"
+"only override applied to this setting."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Editor-only override for [member debug/settings/crash_handler/message]. Does "
+"not affect exported projects in debug or release mode."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -46954,6 +47446,18 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default naming style for scene files to infer from their root nodes. "
+"Possible options are:\n"
+"- [code]0[/code] (Auto): Uses the scene root name as is without changing its "
+"casing.\n"
+"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase "
+"casing.\n"
+"- [code]2[/code] (snake_case): Converts the scene root name to snake_case "
+"casing."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -47179,6 +47683,198 @@ msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 1."
msgstr ""
@@ -47387,6 +48083,198 @@ msgid "Optional name for the 2D render layer 9."
msgstr ""
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 1."
msgstr ""
@@ -47654,6 +48542,49 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default cell height for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_height].\n"
+"[b]Note:[/b] Currently not implemented."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 2D navigation maps. See [method "
+"Navigation2DServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell height for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_height]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 3D navigation maps. See [method "
+"NavigationServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default map up vector for 3D navigation maps. See [method NavigationServer."
+"map_set_up]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -48327,20 +49258,28 @@ msgid ""
"cause.\n"
"The default value is a conservative one, so you are advised to tweak it "
"according to the hardware you are targeting.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"The default is a very conservative override for [code]rendering/gles3/"
-"shaders/max_concurrent_compiles[/code].\n"
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
"Depending on the specific devices you are targeting, you may want to raise "
"it.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
+"Depending on the specific browsers you are targeting, you may want to raise "
+"it.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -48348,19 +49287,28 @@ msgid ""
"The maximum size, in megabytes, that the ubershader cache can grow up to. On "
"startup, the least recently used entries will be deleted until the total "
"size is within bounds.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/ubershader_cache_size_mb[/"
-"code], so a smaller maximum size can be configured for mobile platforms, "
-"where storage space is more limited.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for mobile platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for web platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] Currently, shader caching is generally unavailable on web "
+"platforms.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -48392,14 +49340,22 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/shader_compilation_mode[/"
-"code], so asynchronous compilation can be disabled for mobile.\n"
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on mobile platforms.\n"
"You may want to do that since mobile GPUs generally won't support "
"ubershaders due to their complexity."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on web platforms.\n"
+"You may want to do that since certain browsers (especially on mobile "
+"platforms) generally won't support ubershaders due to their complexity."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
@@ -49156,7 +50112,6 @@ msgid ""
"- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/"
"code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, "
"small grid radius values may lead to unwanted groupings.\n"
-"[/codeblock]\n"
"[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more "
"effective and faster [VisibilityNotifier] functionality. For most use cases, "
"[method Vector3.distance_to] or [method Vector3.distance_squared_to] are "
@@ -51303,6 +52258,22 @@ msgid "Makes text fill width."
msgstr ""
#: doc/classes/RichTextLabel.xml
+msgid "Aligns top of the inline image to the top of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns center of the inline image to the center of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns bottom of the inline image to the baseline of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns bottom of the inline image to the bottom of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
msgid "Each list item has a number marker."
msgstr ""
@@ -53040,8 +54011,8 @@ msgid ""
" yield(get_tree().create_timer(1.0), \"timeout\")\n"
" print(\"Timer ended.\")\n"
"[/codeblock]\n"
-"The timer will be automatically freed after its time elapses, so be aware "
-"that any reference you might have kept to it will become invalid."
+"The timer will be dereferenced after its time elapses. To preserve the "
+"timer, you can keep a reference to it. See [Reference]."
msgstr ""
#: doc/classes/SceneTreeTimer.xml
@@ -53073,24 +54044,23 @@ msgid ""
"manually (i.e. by using [code]Tween.new()[/code]) are invalid. They can't be "
"used for tweening values, but you can do manual interpolation with [method "
"interpolate_value].\n"
-"A [SceneTreeTween] animation is composed of a sequence of [Tweener]s, which "
-"by default are executed one after another. You can create a sequence by "
-"appending [Tweener]s to the [SceneTreeTween]. Animating something with a "
-"[Tweener] is called tweening. Example tweening sequence looks like this:\n"
+"A tween animation is created by adding [Tweener]s to the [SceneTreeTween] "
+"object, using [method tween_property], [method tween_interval], [method "
+"tween_callback] or [method tween_method]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1)\n"
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"This sequence will make the [code]$Sprite[/code] node turn red, then shrink "
-"and finally the [method Node.queue_free] is called to remove the sprite. See "
-"methods [method tween_property], [method tween_interval], [method "
-"tween_callback] and [method tween_method] for more usage information.\n"
+"This sequence will make the [code]$Sprite[/code] node turn red, then shrink, "
+"before finally calling [method Node.queue_free] to free the sprite. "
+"[Tweener]s are executed one after another by default. This behavior can be "
+"changed using [method parallel] and [method set_parallel].\n"
"When a [Tweener] is created with one of the [code]tween_*[/code] methods, a "
"chained method call can be used to tweak the properties of this [Tweener]. "
-"For example, if you want to set different transition type in the above "
-"example, you can do:\n"
+"For example, if you want to set a different transition type in the above "
+"example, you can use [method set_trans]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1).set_trans(Tween."
@@ -53099,8 +54069,9 @@ msgid ""
"TRANS_BOUNCE)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Most of the [SceneTreeTween] methods can be chained this way too. In this "
-"example the [SceneTreeTween] is bound and have set a default transition:\n"
+"Most of the [SceneTreeTween] methods can be chained this way too. In the "
+"following example the [SceneTreeTween] is bound to the running script's node "
+"and a default transition is set for its [Tweener]s:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween().bind_node(self).set_trans(Tween."
"TRANS_ELASTIC)\n"
@@ -53108,16 +54079,16 @@ msgid ""
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Another interesting use for [SceneTreeTween]s is animating arbitrary set of "
+"Another interesting use for [SceneTreeTween]s is animating arbitrary sets of "
"objects:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"for sprite in get_children():\n"
-" tween.tween_property(sprite, \"position\", Vector2(), 1)\n"
+" tween.tween_property(sprite, \"position\", Vector2(0, 0), 1)\n"
"[/codeblock]\n"
"In the example above, all children of a node are moved one after another to "
"position (0, 0).\n"
-"Some [Tweener]s use transitions and eases. The first accepts an [enum Tween."
+"Some [Tweener]s use transitions and eases. The first accepts a [enum Tween."
"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 Tween.EaseType] constant, and "
@@ -53129,7 +54100,7 @@ msgid ""
"tween_cheatsheet.png]Tween easing and transition types cheatsheet[/url]\n"
"[b]Note:[/b] All [SceneTreeTween]s will automatically start by default. To "
"prevent a [SceneTreeTween] from autostarting, you can call [method stop] "
-"immediately after it was created."
+"immediately after it is created."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53159,21 +54130,24 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
-"Processes the [SceneTreeTween] by given [code]delta[/code] value, in "
-"seconds. Mostly useful when the [SceneTreeTween] is paused, for controlling "
-"it manually. Can also be used to end the [SceneTreeTween] animation "
-"immediately, by using [code]delta[/code] longer than the whole duration.\n"
+"Processes the [SceneTreeTween] by the given [code]delta[/code] value, in "
+"seconds. This is mostly useful for manual control when the [SceneTreeTween] "
+"is paused. It can also be used to end the [SceneTreeTween] animation "
+"immediately, by setting [code]delta[/code] longer than the whole duration of "
+"the [SceneTreeTween] animation.\n"
"Returns [code]true[/code] if the [SceneTreeTween] still has [Tweener]s that "
"haven't finished.\n"
-"[b]Note:[/b] The [SceneTreeTween] will become invalid after finished, but "
-"you can call [method stop] after the step, to keep it and reset."
+"[b]Note:[/b] The [SceneTreeTween] will become invalid in the next processing "
+"frame after its animation finishes. Calling [method stop] after performing "
+"[method custom_step] instead keeps and resets the [SceneTreeTween]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Returns the total time in seconds the [SceneTreeTween] has been animating (i."
-"e. time since it started, not counting pauses etc.). The time is affected by "
-"[method set_speed_scale] and [method stop] will reset it to [code]0[/code].\n"
+"e. the time since it started, not counting pauses etc.). The time is "
+"affected by [method set_speed_scale], and [method stop] will reset it to "
+"[code]0[/code].\n"
"[b]Note:[/b] As it results from accumulating frame deltas, the time returned "
"after the [SceneTreeTween] has finished animating will be slightly greater "
"than the actual [SceneTreeTween] duration."
@@ -53209,11 +54183,10 @@ msgstr ""
msgid ""
"Returns whether the [SceneTreeTween] is valid. A valid [SceneTreeTween] is a "
"[SceneTreeTween] contained by the scene tree (i.e. the array from [method "
-"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). "
-"[SceneTreeTween] might become invalid when it has finished tweening or was "
-"killed, also when created with [code]Tween.new()[/code]. Invalid "
-"[SceneTreeTween] can't have [Tweener]s appended, because it can't animate "
-"them. You can however still use [method interpolate_value]."
+"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). A "
+"[SceneTreeTween] might become invalid when it has finished tweening, is "
+"killed, or when created with [code]SceneTreeTween.new()[/code]. Invalid "
+"[SceneTreeTween]s can't have [Tweener]s appended."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53253,16 +54226,15 @@ msgstr ""
msgid ""
"Sets the number of times the tweening sequence will be repeated, i.e. "
"[code]set_loops(2)[/code] will run the animation twice.\n"
-"Calling this method without arguments will make the [SceneTreeTween] run "
-"infinitely, until it is either killed by [method kill] or by freeing bound "
-"node, or all the animated objects have been freed (which makes further "
+"Calling this method without arguments will make the [Tween] run infinitely, "
+"until either it is killed with [method kill], the [Tween]'s bound node is "
+"freed, or all the animated objects have been freed (which makes further "
"animation impossible).\n"
"[b]Warning:[/b] Make sure to always add some duration/delay when using "
-"infinite loops. 0-duration looped animations (e.g. single [CallbackTweener] "
-"with no delay or [PropertyTweener] with invalid node) are equivalent to "
-"infinite [code]while[/code] loops and will freeze your game. If a "
-"[SceneTreeTween]'s lifetime depends on some node, always use [method "
-"bind_node]."
+"infinite loops. To prevent the game freezing, 0-duration looped animations "
+"(e.g. a single [CallbackTweener] with no delay) are stopped after a small "
+"number of loops, which may produce unexpected results. If a [Tween]'s "
+"lifetime depends on some node, always use [method bind_node]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53324,10 +54296,10 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Creates and appends an [IntervalTweener]. This method can be used to create "
-"delays in the tween animation, as an alternative for using the delay in "
-"other [Tweener]s or when there's no animation (in which case the "
-"[SceneTreeTween] acts as a timer). [code]time[/code] is the length of the "
-"interval, in seconds.\n"
+"delays in the tween animation, as an alternative to using the delay in other "
+"[Tweener]s, or when there's no animation (in which case the [SceneTreeTween] "
+"acts as a timer). [code]time[/code] is the length of the interval, in "
+"seconds.\n"
"Example: creating an interval in code execution.\n"
"[codeblock]\n"
"# ... some code\n"
@@ -53381,8 +54353,8 @@ msgid ""
"Creates and appends a [PropertyTweener]. This method tweens a "
"[code]property[/code] of an [code]object[/code] between an initial value and "
"[code]final_val[/code] in a span of time equal to [code]duration[/code], in "
-"seconds. The initial value by default is a value at the time the tweening of "
-"the [PropertyTweener] start. For example:\n"
+"seconds. The initial value by default is the property's value at the time "
+"the tweening of the [PropertyTweener] starts. For example:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"tween.tween_property($Sprite, \"position\", Vector2(100, 200), 1)\n"
@@ -53413,16 +54385,15 @@ msgid ""
"Emitted when the [SceneTreeTween] has finished all tweening. Never emitted "
"when the [SceneTreeTween] is set to infinite looping (see [method "
"set_loops]).\n"
-"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) after this signal "
-"is emitted, but it doesn't happen immediately, but on the next processing "
-"frame. Calling [method stop] inside the signal callback will preserve the "
-"[SceneTreeTween]."
+"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) in the next "
+"processing frame after this signal is emitted. Calling [method stop] inside "
+"the signal callback will prevent the [SceneTreeTween] from being removed."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Emitted when a full loop is complete (see [method set_loops]), providing the "
-"loop index. This signal is not emitted after final loop, use [signal "
+"loop index. This signal is not emitted after the final loop, use [signal "
"finished] instead for this case."
msgstr ""
@@ -53430,7 +54401,7 @@ msgstr ""
msgid ""
"Emitted when one step of the [SceneTreeTween] is complete, providing the "
"step index. One step is either a single [Tweener] or a group of [Tweener]s "
-"running parallelly."
+"running in parallel."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -54762,7 +55733,12 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-msgid "Scale part of the local transformation."
+msgid ""
+"Scale part of the local transformation.\n"
+"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, the scale values will either be all "
+"positive or all negative."
msgstr ""
#: doc/classes/Spatial.xml
@@ -57393,11 +58369,11 @@ msgstr ""
msgid ""
"Returns [code]true[/code] if this string contains a valid integer.\n"
"[codeblock]\n"
-"print(\"7\".is_valid_int()) # Prints \"True\"\n"
-"print(\"14.6\".is_valid_int()) # Prints \"False\"\n"
-"print(\"L\".is_valid_int()) # Prints \"False\"\n"
-"print(\"+3\".is_valid_int()) # Prints \"True\"\n"
-"print(\"-12\".is_valid_int()) # Prints \"True\"\n"
+"print(\"7\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"14.6\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"L\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"+3\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"-12\".is_valid_integer()) # Prints \"True\"\n"
"[/codeblock]"
msgstr ""
@@ -60863,6 +61839,10 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml
+msgid "If [code]true[/code], this TileMap bakes a navigation region."
+msgstr ""
+
+#: doc/classes/TileMap.xml
msgid "If [code]true[/code], the cell's UVs will be clipped."
msgstr ""
@@ -60969,6 +61949,10 @@ msgid "The TileMap orientation mode. See [enum Mode] for possible values."
msgstr ""
#: doc/classes/TileMap.xml
+msgid "The navigation layers the TileMap generates its navigation regions in."
+msgstr ""
+
+#: doc/classes/TileMap.xml
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 "
@@ -62100,7 +63084,12 @@ msgstr ""
#: doc/classes/Transform2D.xml
msgid ""
"Returns a copy of the transform scaled by the given [code]scale[/code] "
-"factor, using matrix multiplication."
+"factor, using matrix multiplication.\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
#: doc/classes/Transform2D.xml
@@ -62255,7 +63244,18 @@ msgid ""
"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]."
+"to remove it from the [Tree].\n"
+"[b]Incremental search:[/b] Like [ItemList] and [PopupMenu], [Tree] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/Tree.xml
@@ -65771,11 +66771,12 @@ msgid "This enabler will stop [Particles2D] nodes."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _process function."
+msgid "This enabler will stop the parent's [method Node._process] function."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _physics_process function."
+msgid ""
+"This enabler will stop the parent's [method Node._physics_process] function."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
@@ -65815,6 +66816,16 @@ msgid "The VisibilityNotifier's bounding box."
msgstr ""
#: doc/classes/VisibilityNotifier.xml
+msgid ""
+"In addition to checking whether a node is on screen or within a [Camera]'s "
+"view, VisibilityNotifier can also optionally check whether a node is within "
+"a specified maximum distance when using a [Camera] with perspective "
+"projection. This is useful for throttling the performance requirements of "
+"nodes that are far away.\n"
+"[b]Note:[/b] This feature will be disabled if set to 0.0."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier.xml
msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view."
msgstr ""
@@ -70560,6 +71571,16 @@ msgid "The amount of shader rebinds in the frame."
msgstr ""
#: doc/classes/VisualServer.xml
+msgid ""
+"The peak amount of shaders that have been under compilation in the frame.\n"
+"This is useful to know when asynchronous shader compilation has finished for "
+"the current shaders on screen.\n"
+"[b]Note:[/b] For complete certainty, only assume there are no outstanding "
+"compilations when this value is zero for at least two frames in a row.\n"
+"Unimplemented in the GLES2 rendering backend, always returns 0."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
msgid "The amount of surface changes in the frame."
msgstr ""
@@ -73756,8 +74777,8 @@ msgstr ""
#: doc/classes/World.xml
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."
+"scenario, a navigation map and a sound space. Spatial nodes register their "
+"resources into the current world."
msgstr ""
#: doc/classes/World.xml
@@ -73772,8 +74793,13 @@ msgstr ""
#: doc/classes/World.xml
msgid ""
-"The World's fallback_environment will be used if the World's [Environment] "
-"fails or is missing."
+"The World's fallback environment will be used if [member environment] fails "
+"or is missing."
+msgstr ""
+
+#: doc/classes/World.xml
+msgid ""
+"The [RID] of this world's navigation map. Used by the [NavigationServer]."
msgstr ""
#: doc/classes/World.xml
@@ -73791,8 +74817,8 @@ msgstr ""
#: doc/classes/World2D.xml
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."
+"visual scenario, a navigation map and a sound space. 2D nodes register their "
+"resources into the current 2D world."
msgstr ""
#: doc/classes/World2D.xml
@@ -73810,6 +74836,11 @@ msgstr ""
#: doc/classes/World2D.xml
msgid ""
+"The [RID] of this world's navigation map. Used by the [Navigation2DServer]."
+msgstr ""
+
+#: doc/classes/World2D.xml
+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 ""
diff --git a/doc/translations/it.po b/doc/translations/it.po
index 55dae12030..9157d2ecc0 100644
--- a/doc/translations/it.po
+++ b/doc/translations/it.po
@@ -515,9 +515,10 @@ msgstr ""
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml
+#, fuzzy
msgid ""
"Compares two values by checking their actual contents, recursing into any "
-"`Array` or `Dictionary` up to its deepest level.\n"
+"[Array] or [Dictionary] up to its deepest level.\n"
"This compares to [code]==[/code] in a number of ways:\n"
"- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/"
"code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] "
@@ -588,7 +589,7 @@ msgid ""
"- 1.0: Linear\n"
"- Greater than 1.0 (exclusive): Ease in\n"
"[/codeblock]\n"
-"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.4/img/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/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]."
@@ -1742,7 +1743,7 @@ msgid ""
"[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/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/img/"
"smoothstep_ease_comparison.png]Comparison between smoothstep() and ease(x, "
"-1.6521) return values[/url]"
msgstr ""
@@ -4372,6 +4373,12 @@ msgstr ""
#: doc/classes/@GlobalScope.xml
msgid ""
+"Hints that an integer property is a bitmask using the optionally named 2D "
+"navigation layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml
+msgid ""
"Hints that an integer property is a bitmask using the optionally named 3D "
"render layers."
msgstr ""
@@ -4384,6 +4391,12 @@ msgstr ""
#: doc/classes/@GlobalScope.xml
msgid ""
+"Hints that an integer property is a bitmask using the optionally named 3D "
+"navigation layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml
+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]."
@@ -9384,7 +9397,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/AStar.xml
+#: doc/classes/AStar.xml doc/classes/AStar2D.xml
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[/"
@@ -9583,7 +9596,10 @@ msgid ""
msgstr ""
#: doc/classes/AStar2D.xml
-msgid "Returns whether there is a connection/segment between the given points."
+msgid ""
+"Returns whether there is a connection/segment between the given points. 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/AStar2D.xml
@@ -9600,10 +9616,6 @@ msgid ""
msgstr ""
#: doc/classes/AStar2D.xml
-msgid "Deletes the segment between the given points."
-msgstr ""
-
-#: doc/classes/AStar2D.xml
msgid ""
"Returns the closest position to [code]to_position[/code] that resides inside "
"a segment between two connected points.\n"
@@ -9788,7 +9800,9 @@ msgid ""
"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."
+"transmit audio over the network. When capturing audio data from a "
+"microphone, the format of the samples will be stereo 32-bit floating point "
+"PCM."
msgstr ""
#: doc/classes/AudioEffectCapture.xml
@@ -14652,7 +14666,7 @@ msgid ""
msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
-#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/Navigation2D.xml
msgid "Returns the object's [RID]."
msgstr ""
@@ -20223,11 +20237,15 @@ msgid ""
msgstr ""
#: doc/classes/CurveTexture.xml
-msgid "The [code]curve[/code] rendered onto the texture."
-msgstr ""
+#, fuzzy
+msgid "The [Curve] that is rendered onto the texture."
+msgstr "Restituisce il seno del parametro."
#: doc/classes/CurveTexture.xml
-msgid "The width of the texture."
+msgid ""
+"The width of the texture (in pixels). Higher values make it possible to "
+"represent high-frequency data better (such as sudden direction changes), at "
+"the cost of increased generation time and memory usage."
msgstr ""
#: doc/classes/CylinderMesh.xml
@@ -20514,6 +20532,13 @@ msgid "Returns the list of keys in the [Dictionary]."
msgstr ""
#: doc/classes/Dictionary.xml
+msgid ""
+"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, "
+"duplicate keys will not be copied over, unless [code]overwrite[/code] is "
+"[code]true[/code]."
+msgstr ""
+
+#: doc/classes/Dictionary.xml
#, fuzzy
msgid "Returns the number of keys in the dictionary."
msgstr "Restituisce il resto dei due vettori."
@@ -22456,9 +22481,23 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide a state data you want to be saved, like view "
+"position, grid settings, folding, etc. 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). This data is automatically saved for "
+"each scene in an [code]editstate[/code] file in the editor metadata folder. "
+"If you want to store global (scene-independent) editor data for your plugin, "
+"you can use [method get_window_layout] instead.\n"
+"Use [method set_state] to restore your saved state.\n"
+"[b]Note:[/b] This method should not be used to save important settings that "
+"should persist with the project.\n"
+"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be "
+"stored and restored correctly.\n"
+"[codeblock]\n"
+"func get_state():\n"
+" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n"
+" return state\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -22469,9 +22508,18 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide the GUI layout of the plugin or any other "
+"data you want to be stored. 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). The data is stored in the "
+"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n"
+"Use [method set_window_layout] to restore your saved layout.\n"
+"[codeblock]\n"
+"func get_window_layout(configuration):\n"
+" configuration.set_value(\"MyPlugin\", \"window_position\", $Window."
+"position)\n"
+" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -22584,11 +22632,30 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the state saved by [method get_state]."
+msgid ""
+"Restore the state saved by [method get_state]. This method is called when "
+"the current scene tab is changed in the editor.\n"
+"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise "
+"it will not be recognized and this method will not be called.\n"
+"[codeblock]\n"
+"func set_state(data):\n"
+" zoom = data.get(\"zoom\", 1.0)\n"
+" preferred_color = data.get(\"my_color\", Color.white)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the plugin GUI layout saved by [method get_window_layout]."
+msgid ""
+"Restore the plugin GUI layout and data saved by [method get_window_layout]. "
+"This method is called for every plugin on editor startup. Use the provided "
+"[code]configuration[/code] file to read your saved data.\n"
+"[codeblock]\n"
+"func set_window_layout(configuration):\n"
+" $Window.position = configuration.get_value(\"MyPlugin\", "
+"\"window_position\", Vector2())\n"
+" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", "
+"Color.white)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -27251,7 +27318,8 @@ msgid ""
"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])."
+"at fixed steps (see [member width]). See also [GradientTexture2D] and "
+"[CurveTexture]."
msgstr ""
#: doc/classes/GradientTexture.xml
@@ -27273,7 +27341,8 @@ msgid ""
"repeat] types using colors obtained from the gradient. 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] and [member height])."
+"[member width] and [member height]). See also [GradientTexture] and "
+"[CurveTexture]."
msgstr ""
#: doc/classes/GradientTexture2D.xml
@@ -28092,6 +28161,13 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+#, fuzzy
+msgid ""
+"If [code]true[/code], this GridMap uses cell navmesh resources to create "
+"navigation regions."
+msgstr "Ritorna [code]true[/code] se [code]s[/code] è zero o quasi zero."
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid "If [code]true[/code], grid items are centered on the X axis."
msgstr ""
@@ -28142,6 +28218,10 @@ msgid "The assigned [MeshLibrary]."
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+msgid "The navigation layers the GridMap generates its navigation regions in."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
"Overrides the default friction and bounce physics properties for the whole "
"[GridMap]."
@@ -29366,7 +29446,7 @@ msgid ""
" # 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 body = to_json({\"name\": \"Godette\"})\n"
" error = http_request.request(\"https://httpbin.org/post\", [], true, "
"HTTPClient.METHOD_POST, body)\n"
" if error != OK:\n"
@@ -30537,7 +30617,7 @@ msgstr ""
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 "
+"([member 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 "
@@ -30686,10 +30766,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Returns the mouse mode. See the constants for more information."
-msgstr ""
-
-#: doc/classes/Input.xml
msgid ""
"Gets an input vector by specifying four actions for the positive and "
"negative X and Y axes.\n"
@@ -30884,24 +30960,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Sets the mouse mode. See the constants for more information."
-msgstr ""
-
-#: doc/classes/Input.xml
-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
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 "
@@ -30937,6 +30995,24 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
+msgid "Controls the mouse mode. See [enum MouseMode] for more information."
+msgstr ""
+
+#: doc/classes/Input.xml
+msgid ""
+"If [code]true[/code], similar input events sent by the operating system are "
+"accumulated. 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 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
msgid "Emitted when a joypad device has been connected or disconnected."
msgstr ""
@@ -31244,8 +31320,8 @@ msgstr ""
#: doc/classes/InputEventJoypadButton.xml
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]."
+"Represents the pressure the user puts on the button with their finger, if "
+"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]."
msgstr ""
#: doc/classes/InputEventJoypadMotion.xml
@@ -31509,9 +31585,9 @@ 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 "
+"at most. If you need more precise input reporting, set [member Input."
+"use_accumulated_input] to [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."
@@ -32002,7 +32078,18 @@ msgid ""
"[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."
+"fixed_column_width] greater than zero to wrap the text.\n"
+"[b]Incremental search:[/b] Like [PopupMenu] and [Tree], [ItemList] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/ItemList.xml
@@ -35769,12 +35856,18 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Returns the override [Material] for a surface of the [Mesh] resource.\n"
+"[b]Note:[/b] This function only returns [i]override[/i] materials associated "
+"with this [MeshInstance]. Consider using [method get_active_material] or "
+"[method Mesh.surface_get_material] to get materials associated with the "
+"[Mesh] resource."
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the number of surface materials."
-msgstr ""
+#, fuzzy
+msgid "Returns the number of surface override materials."
+msgstr "Restituisce il resto dei due vettori."
#: doc/classes/MeshInstance.xml
msgid ""
@@ -35810,7 +35903,10 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Sets the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Sets the override [Material] for the specified surface of the [Mesh] "
+"resource. This material is associated with this [MeshInstance] rather than "
+"with the [Mesh] resource."
msgstr ""
#: doc/classes/MeshInstance.xml
@@ -35841,9 +35937,10 @@ msgstr ""
#: doc/classes/MeshInstance2D.xml
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\"."
+"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be "
+"automatically created from an existing [Sprite] via a tool in the editor "
+"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to "
+"MeshInstance2D[/b] at the top of the 2D editor viewport."
msgstr ""
#: doc/classes/MeshInstance2D.xml
@@ -36609,6 +36706,9 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"Provides navigation and pathfinding within a collection of "
"[NavigationMesh]es. By default, these will be automatically collected from "
"child [NavigationMeshInstance] nodes. In addition to basic pathfinding, this "
@@ -36649,7 +36749,15 @@ msgid ""
msgstr ""
#: doc/classes/Navigation.xml
+#, fuzzy
+msgid "Returns the [RID] of the navigation map on the [NavigationServer]."
+msgstr "Restituisce il seno del parametro."
+
+#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"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, "
@@ -36671,16 +36779,31 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation.get_simple_path] path query."
+msgstr ""
+
+#: doc/classes/Navigation.xml
+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/Navigation.xml doc/classes/Navigation2DServer.xml
+#: doc/classes/NavigationServer.xml
+msgid ""
+"Emitted when a navigation map is updated, when a region moves or is modified."
+msgstr ""
+
#: doc/classes/Navigation2D.xml
msgid "2D navigation and pathfinding node."
msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -36700,6 +36823,9 @@ msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -36709,6 +36835,12 @@ msgstr ""
msgid "The XY plane cell size to use for fields."
msgstr ""
+#: doc/classes/Navigation2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation2D.get_simple_path] path query."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml
msgid "Server interface for low-level 2D navigation access."
msgstr ""
@@ -36725,8 +36857,12 @@ msgid ""
"through scripts.\n"
"For two regions to be connected to each other, they must share a similar "
"edge. An edge is considered connected to another if both of its two vertices "
-"are at a distance less than [member Navigation.edge_connection_margin] to "
-"the respective other edge's vertex.\n"
+"are at a distance less than navigation map [code]edge_connection_margin[/"
+"code] to the respective other edge's vertex.\n"
+"You may assign navigation layers to regions with [method Navigation2DServer."
+"region_set_navigation_layers], which then can be checked upon when "
+"requesting a path with [method Navigation2DServer.map_get_path]. This allows "
+"allowing or forbidding some areas to 2D objects.\n"
"To use the collision avoidance system, you may use agents. You can set an "
"agent's target velocity, then the servers will emit a callback with a "
"modified velocity.\n"
@@ -36755,7 +36891,17 @@ msgid "Returns [code]true[/code] if the map got changed the previous frame."
msgstr "Ritorna [code]true[/code] se [Rect2i] contiene un punto."
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Callback called at the end of the RVO process."
+msgid ""
+"Callback called at the end of the RVO process. If a callback is created "
+"manually and the agent is placed on a navigation map it will calculate "
+"avoidance for the agent and dispatch the calculated [code]safe_velocity[/"
+"code] to the [code]receiver[/code] object with a signal to the chosen "
+"[code]method[/code] name.\n"
+"[b]Note:[/b] Created callbacks are always processed independently of the "
+"SceneTree state as long as the agent is on a navigation map and not freed. "
+"To disable the dispatch of a callback from an agent use [method "
+"agent_set_callback] again with a [code]null[/code] object as the "
+"[code]receiver[/code]."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -36816,15 +36962,56 @@ msgid "Destroys the given RID."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns all created navigation map [RID]s on the NavigationServer. This "
+"returns both 2D and 3D created navigation maps as there is technically no "
+"distinction between them."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Create a new map."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"This function immediately forces synchronization of the specified navigation "
+"[code]map[/code] [RID]. By default navigation maps are only synchronized at "
+"the end of each physics frame. This function can be used to immediately "
+"(re)calculate all the navigation meshes and region connections of the "
+"navigation map. This makes it possible to query a navigation path for a "
+"changed map immediately and in the same frame (multiple times if needed).\n"
+"Due to technical restrictions the current NavigationServer command queue "
+"will be flushed. This means all already queued update commands for this "
+"physics frame will be executed, even those intended for other maps, regions "
+"and agents not part of the specified map. The expensive computation of the "
+"navigation meshes and region connections of a map will only be done for the "
+"specified map. Other maps will receive the normal synchronization at the end "
+"of the physics frame. Should the specified map receive changes after the "
+"forced update it will update again as well when the other maps receive their "
+"update.\n"
+"Avoidance processing and dispatch of the [code]safe_velocity[/code] signals "
+"is untouched by this function and continues to happen for all maps and "
+"agents at the end of the physics frame.\n"
+"[b]Note:[/b] With great power comes great responsibility. This function "
+"should only be used by users that really know what they are doing and have a "
+"good reason for it. Forcing an immediate update of a navigation map requires "
+"locking the NavigationServer and flushing the entire NavigationServer "
+"command queue. Not only can this severely impact the performance of a game "
+"but it can also introduce bugs if used inappropriately without much "
+"foresight."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns all navigation agents [RID]s that are currently assigned to the "
"requested navigation [code]map[/code]."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+#, fuzzy
+msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented."
+msgstr "Prende la linea corrente nel file analizzato (non ancora implementato)"
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
#, fuzzy
msgid "Returns the map cell size."
@@ -36849,7 +37036,10 @@ msgid ""
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Returns the navigation path to reach the destination from the origin."
+msgid ""
+"Returns the navigation path to reach the destination from the origin. "
+"[code]navigation_layers[/code] is a bitmask of all region layers that are "
+"allowed to be in the path."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -36868,6 +37058,12 @@ msgstr "Ritorna [code]true[/code] se [Rect2i] è piano o vuoto."
msgid "Sets the map active."
msgstr "Restituisce l'arco-seno del parametro."
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/"
+"b] Currently not implemented."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Set the map cell size used to weld the navigation mesh polygons."
msgstr ""
@@ -36883,15 +37079,78 @@ msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"Returns the ending point of a connection door. [code]connection[/code] is an "
+"index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns the starting point of a connection door. [code]connection[/code] is "
+"an index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns how many connections this [code]region[/code] has with other regions "
+"in the map."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]."
+msgstr "Ritorna [code]true[/code] se [code]s[/code] è zero o quasi zero."
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns the navigation map [RID] the requested [code]region[/code] is "
"currently assigned to."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
#, fuzzy
+msgid "Returns the region's navigation layers."
+msgstr "Restituisce il seno del parametro."
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]."
+msgstr "Ritorna [code]true[/code] se [code]s[/code] è zero o quasi zero."
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns [code]true[/code] if the provided [code]point[/code] in world space "
+"is currently owned by the provided navigation [code]region[/code]. Owned in "
+"this context means that one of the region's navigation mesh polygon faces "
+"has a possible position at the closest distance to this point compared to "
+"all other navigation meshes from other navigation regions that are also "
+"registered on the navigation map of the provided region.\n"
+"If multiple navigation meshes have positions at equal distance the "
+"navigation region whose polygons are processed first wins the ownership. "
+"Polygons are processed in the same order that navigation regions were "
+"registered on the NavigationServer.\n"
+"[b]Note:[/b] If navigation meshes from different navigation regions overlap "
+"(which should be avoided in general) the result might not be what is "
+"expected."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]."
+msgstr "Ritorna [code]true[/code] se [code]s[/code] è zero o quasi zero."
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
msgid "Sets the map for the region."
msgstr "Restituisce il seno del parametro."
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method Navigation2DServer.map_get_path])."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
#, fuzzy
msgid "Sets the navigation mesh for the region."
@@ -36902,6 +37161,11 @@ msgstr "Restituisce il valore opposto del parametro."
msgid "Sets the global transformation for the region."
msgstr "Calcola il prodotto vettoriale di questo vettore e [code]b[/code]."
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]."
+msgstr "Ritorna [code]true[/code] se [code]s[/code] è zero o quasi zero."
+
#: doc/classes/NavigationAgent.xml
msgid "3D agent used in navigation for collision avoidance."
msgstr ""
@@ -36911,9 +37175,16 @@ msgid ""
"3D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationAgent] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World] navigation map. If this node is a child of a [Navigation] "
+"node it will register to the navigation map of the navigation node or the "
+"function [method set_navigation] can be used to set the navigation node "
+"directly. [NavigationAgent] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -36931,7 +37202,15 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-msgid "Returns the path from start to finish in global coordinates."
+msgid ""
+"Returns this agent's current path from start to finish in global "
+"coordinates. The path only updates when the target location is changed or "
+"the agent requires a repath. The path array is not intended to be used in "
+"direct path movement as the agent has its own internal path logic that would "
+"get corrupted by changing the path array manually. Use the intended [method "
+"get_next_location] once every physics frame to receive the next path point "
+"for the agents movement as this function also updates the internal path "
+"logic."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -36947,11 +37226,24 @@ msgid ""
"system."
msgstr ""
-#: doc/classes/NavigationAgent.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
+"Returns the [RID] of the navigation map for this NavigationAgent node. This "
+"function returns always the map set on the NavigationAgent node and not the "
+"map of the abstract agent on the NavigationServer. If the agent map is "
+"changed directly with the NavigationServer API the NavigationAgent node will "
+"not be aware of the map change. Use [method set_navigation_map] to change "
+"the navigation map for the NavigationAgent and also update the agent on the "
+"NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"Returns a [Vector3] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the origin of the agent's parent."
+"Returns the next location in global coordinates that can be moved to, making "
+"sure that there are no static objects in the way. If the agent does not have "
+"a navigation path, it will return the position of the agent's parent. The "
+"use of this function once every physics frame is required to update the "
+"internal path logic of the NavigationAgent."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -36996,6 +37288,12 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"Sets the [RID] of the navigation map this NavigationAgent node should use "
+"and also updates the [code]agent[/code] on the NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"Sets the user desired final location. This will clear the current navigation "
"path."
msgstr ""
@@ -37008,7 +37306,13 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml
-msgid "The agent height offset to match the navigation mesh height."
+msgid ""
+"The NavigationAgent height offset is subtracted from the y-axis value of any "
+"vector path position for this NavigationAgent. The NavigationAgent height "
+"offset does not change or influence the navigation mesh or pathfinding query "
+"result. Additional navigation maps that use regions with navigation meshes "
+"that the developer baked with appropriate agent radius or height values are "
+"required to support different-sized agents."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -37035,26 +37339,53 @@ msgstr ""
msgid "The maximum speed that an agent can move."
msgstr ""
+#: doc/classes/NavigationAgent.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "The distance to search for other agents."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"The distance threshold before a path point is considered to be reached. This "
+"will allow an agent to not have to hit a path point on the path exactly, but "
+"in the area. If this value is set to high the NavigationAgent will skip "
+"points on the path which can lead to leaving the navigation mesh. If this "
+"value is set to low the NavigationAgent will be stuck in a repath loop cause "
+"it will constantly overshoot or undershoot the distance to the next point on "
+"each physics frame update."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"The maximum distance the agent is allowed away from the ideal path to the "
"final location. This can happen due to trying to avoid collisions. When the "
"maximum distance is exceeded, it recalculates the ideal path."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-msgid "The radius of the agent."
+msgid ""
+"The radius of the avoidance agent. This is the \"body\" of the avoidance "
+"agent and not the avoidance maneuver starting radius (which is controlled by "
+"[member neighbor_dist]).\n"
+"Does not affect normal pathfinding. To change an actor's pathfinding radius "
+"bake [NavigationMesh] resources with a different [member NavigationMesh."
+"agent_radius] property and use different navigation maps for each actor size."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"The distance threshold before a target is considered to be reached. This "
-"will allow an agent to not have to hit a point on the path exactly, but in "
-"the area."
+"The distance threshold before the final target point is considered to be "
+"reached. This will allow an agent to not have to hit the point of the final "
+"target exactly, but only the area. If this value is set to low the "
+"NavigationAgent will be stuck in a repath loop cause it will constantly "
+"overshoot or undershoot the distance to the final target point on each "
+"physics frame update."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -37097,9 +37428,16 @@ msgid ""
"2D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationAgent2D] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World2D] navigation map. If this node is a child of a "
+"[Navigation2D] node it will register to the navigation map of the navigation "
+"node or the function [method set_navigation] can be used to set the "
+"navigation node directly. [NavigationAgent2D] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent2D.xml
@@ -37116,13 +37454,6 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent2D.xml
-msgid ""
-"Returns a [Vector2] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the position of the agent's parent."
-msgstr ""
-
-#: doc/classes/NavigationAgent2D.xml
#, fuzzy
msgid "Returns the [RID] of this agent on the [Navigation2DServer]."
msgstr "Restituisce il seno del parametro."
@@ -37143,6 +37474,13 @@ msgid ""
"only be enabled on agents that currently require it."
msgstr ""
+#: doc/classes/NavigationAgent2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent2D] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationMesh.xml
msgid "A mesh to approximate the walkable areas and obstacles."
msgstr ""
@@ -37172,10 +37510,13 @@ msgid ""
msgstr ""
#: doc/classes/NavigationMesh.xml
+#, fuzzy
msgid ""
-"Returns whether the specified [code]bit[/code] of the [member geometry/"
-"collision_mask] is set."
+"Returns whether the specified [code]bit[/code] of the [member "
+"geometry_collision_mask] is set."
msgstr ""
+"Ritorna [code]true[/code] se l'impostazione specificata da [code]name[/code] "
+"esiste, [code]false[/code] altrimenti."
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
msgid ""
@@ -37197,9 +37538,9 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/"
-"code] in the [member geometry/collision_mask].\n"
+"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]."
+"code] in the [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
@@ -37213,14 +37554,14 @@ 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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -37232,7 +37573,7 @@ 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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -37260,13 +37601,17 @@ msgstr ""
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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
-"If [code]true[/code], marks walkable spans as not walkable if the clearance "
-"above the span is less than [member agent/height]."
+"If the baking [AABB] has a volume the navigation mesh baking will be "
+"restricted to its enclosing area."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+msgid "The position offset applied to the [member filter_baking_aabb] [AABB]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -37279,13 +37624,19 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]true[/code], marks non-walkable spans as walkable if their maximum "
-"is within [member agent/max_climb] of a walkable neighbor."
+"is within [member agent_max_climb] of a walkable neighbor."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+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
msgid ""
"The physics layers to scan for static colliders.\n"
-"Only used when [member geometry/parsed_geometry_type] is [constant "
+"Only used when [member geometry_parsed_geometry_type] is [constant "
"PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]."
msgstr ""
@@ -37304,7 +37655,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"The name of the group to scan for geometry.\n"
-"Only used when [member geometry/source_geometry_mode] is [constant "
+"Only used when [member geometry_source_geometry_mode] is [constant "
"SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant "
"SOURCE_GEOMETRY_GROUPS_EXPLICIT]."
msgstr ""
@@ -37367,7 +37718,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Parses [StaticBody] colliders as geometry. The collider should be in any of "
-"the layers specified by [member geometry/collision_mask]."
+"the layers specified by [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -37389,13 +37740,13 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Scans nodes in a group and their child nodes recursively for geometry. The "
-"group is specified by [member geometry/source_group_name]."
+"group is specified by [member geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Uses nodes in a group for geometry. The group is specified by [member "
-"geometry/source_group_name]."
+"geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -37437,7 +37788,15 @@ msgid ""
"geometry for walkable terrain suitable to [NavigationMesh] agent properties "
"by creating a voxel world around the meshes bounding area.\n"
"The finalized navigation mesh is then returned and stored inside the "
-"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes."
+"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] "
+"nodes.\n"
+"[b]Note:[/b] Using meshes to not only define walkable surfaces but also "
+"obstruct navigation baking does not always work. The navigation baking has "
+"no concept of what is a geometry \"inside\" when dealing with mesh source "
+"geometry and this is intentional. Depending on current baking parameters, as "
+"soon as the obstructing mesh is large enough to fit a navigation mesh area "
+"inside, the baking will generate navigation mesh areas that are inside the "
+"obstructing source geometry mesh."
msgstr ""
#: doc/classes/NavigationMeshGenerator.xml
@@ -37445,8 +37804,8 @@ msgid ""
"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child "
"nodes under the provided [code]root_node[/code] or a specific group of nodes "
"for potential source geometry. The parse behavior can be controlled with the "
-"[member NavigationMesh.geometry/parsed_geometry_type] and [member "
-"NavigationMesh.geometry/source_geometry_mode] properties on the "
+"[member NavigationMesh.geometry_parsed_geometry_type] and [member "
+"NavigationMesh.geometry_source_geometry_mode] properties on the "
"[NavigationMesh] resource."
msgstr ""
@@ -37464,8 +37823,21 @@ msgstr ""
#: doc/classes/NavigationMeshInstance.xml
msgid ""
"An instance of a [NavigationMesh]. It tells the [Navigation] node what can "
-"be navigated and what cannot, based on the [NavigationMesh] resource. This "
-"should be a child of a [Navigation] node."
+"be navigated and what cannot, based on the [NavigationMesh] resource.\n"
+"By default this node will register to the default [World] navigation map. If "
+"this node is a child of a [Navigation] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method NavigationServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The cost of entering this region from another region can be controlled with "
+"the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The cost of traveling distances inside this region can be controlled with "
+"the [member travel_cost] multiplier."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
@@ -37494,11 +37866,35 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding enters this region's navmesh from another regions navmesh "
+"the [code]enter_cost[/code] value is added to the path distance for "
+"determining the shortest path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationMesh] "
+"belongs to. On path requests with [method NavigationServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
#, fuzzy
msgid "The [NavigationMesh] resource to use."
msgstr "Il singleton [EditorNavigationMeshGenerator]."
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding moves inside this region's navmesh the traveled distances "
+"are multiplied with [code]travel_cost[/code] for determining the shortest "
+"path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
msgid "Notifies when the navigation mesh bake operation is completed."
msgstr ""
@@ -37515,7 +37911,9 @@ msgid ""
"3D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationObstacle] is physics safe."
+"[NavigationObstacle] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle.xml
@@ -37556,7 +37954,9 @@ msgid ""
"2D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationObstacle2D] is physics safe."
+"[NavigationObstacle2D] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle2D.xml
@@ -37637,6 +38037,14 @@ msgstr ""
#: doc/classes/NavigationPolygon.xml
msgid ""
+"Returns the [NavigationMesh] resulting from this navigation polygon. This "
+"navmesh can be used to update the navmesh of a region with the [method "
+"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server "
+"behind the scene)."
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml
+msgid ""
"Returns a [PoolVector2Array] containing the vertices of an outline that was "
"created in the editor or by script."
msgstr ""
@@ -37673,6 +38081,30 @@ msgid ""
msgstr ""
#: doc/classes/NavigationPolygonInstance.xml
+msgid "A region of the 2D navigation map."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A region of the navigation map. It tells the [Navigation2DServer] what can "
+"be navigated and what cannot, based on its [NavigationPolygon] resource.\n"
+"By default this node will register to the default [World2D] navigation map. "
+"If this node is a child of a [Navigation2D] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The pathfinding cost of entering this region from another region can be "
+"controlled with the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The pathfinding cost of traveling distances inside this region can be "
+"controlled with the [member travel_cost] multiplier."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
msgid ""
"Returns the [RID] of this region on the [Navigation2DServer]. Combined with "
"[method Navigation2DServer.map_get_closest_point_owner] can be used to "
@@ -37680,6 +38112,23 @@ msgid ""
"navigation map."
msgstr ""
+#: doc/classes/NavigationPolygonInstance.xml
+msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationPolygon] "
+"belongs to. On path requests with [method Navigation2DServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+#, fuzzy
+msgid "The [NavigationPolygon] resource to use."
+msgstr "Il singleton [EditorNavigationMeshGenerator]."
+
#: doc/classes/NavigationServer.xml
msgid "Server interface for low-level 3D navigation access."
msgstr ""
@@ -37759,6 +38208,12 @@ msgid "Bakes the navigation mesh."
msgstr ""
#: doc/classes/NavigationServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method NavigationServer.map_get_path])."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
msgid "Control activation of this server."
msgstr ""
@@ -39226,13 +39681,19 @@ msgstr ""
#: doc/classes/Node.xml
msgid ""
"Emitted when a child node enters the scene tree, either because it entered "
-"on its own or because this node entered with it."
+"on its own or because this node entered with it.\n"
+"This signal is emitted [i]after[/i] the child node's own [constant "
+"NOTIFICATION_ENTER_TREE] and [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
msgid ""
-"Emitted when a child node exits the scene tree, either because it exited on "
-"its own or because this node exited."
+"Emitted when a child node is about to exit the scene tree, either because it "
+"is being removed or freed directly, or because this node is exiting the "
+"tree.\n"
+"When this signal is received, the child [code]node[/code] is still in the "
+"tree and valid. This signal is emitted [i]after[/i] the child node's own "
+"[signal tree_exiting] and [constant NOTIFICATION_EXIT_TREE]."
msgstr ""
#: doc/classes/Node.xml
@@ -39244,7 +39705,10 @@ msgid "Emitted when the node is renamed."
msgstr ""
#: doc/classes/Node.xml
-msgid "Emitted when the node enters the tree."
+msgid ""
+"Emitted when the node enters the tree.\n"
+"This signal is emitted [i]after[/i] the related [constant "
+"NOTIFICATION_ENTER_TREE] notification."
msgstr ""
#: doc/classes/Node.xml
@@ -39254,15 +39718,21 @@ msgstr ""
#: doc/classes/Node.xml
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)."
+"the right place for de-initialization (or a \"destructor\", if you will).\n"
+"This signal is emitted [i]before[/i] the related [constant "
+"NOTIFICATION_EXIT_TREE] notification."
msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node enters a [SceneTree]."
+msgid ""
+"Notification received when the node enters a [SceneTree].\n"
+"This notification is emitted [i]before[/i] the related [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node is about to exit a [SceneTree]."
+msgid ""
+"Notification received when the node is about to exit a [SceneTree].\n"
+"This notification is emitted [i]after[/i] the related [signal tree_exiting]."
msgstr ""
#: doc/classes/Node.xml
@@ -39526,7 +39996,13 @@ msgid "Rotation in degrees, relative to the node's parent."
msgstr ""
#: doc/classes/Node2D.xml
-msgid "The node's scale. Unscaled value: [code](1, 1)[/code]."
+msgid ""
+"The node's scale. Unscaled value: [code](1, 1)[/code].\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
#: doc/classes/Node2D.xml
@@ -40976,6 +41452,10 @@ msgid ""
" if argument.find(\"=\") > -1:\n"
" var key_value = argument.split(\"=\")\n"
" arguments[key_value[0].lstrip(\"--\")] = key_value[1]\n"
+" else:\n"
+" # Options without an argument will be present in the dictionary,\n"
+" # with the value set to an empty string.\n"
+" arguments[argument.lstrip(\"--\")] = \"\"\n"
"[/codeblock]"
msgstr ""
@@ -41638,8 +42118,15 @@ msgstr ""
msgid ""
"Moves the file or directory to the system's recycle bin. See also [method "
"Directory.remove].\n"
+"The method takes only global paths, so you may need to use [method "
+"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/"
+"code] as it will not work in exported project.\n"
"[b]Note:[/b] If the user has disabled the recycle bin on their system, the "
-"file will be permanently deleted instead."
+"file will be permanently deleted instead.\n"
+"[codeblock]\n"
+"var file_to_remove = \"user://slot1.sav\"\n"
+"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/OS.xml
@@ -46510,7 +46997,18 @@ msgstr ""
#: doc/classes/PopupMenu.xml
msgid ""
"[PopupMenu] is a [Control] that displays a list of options. They are popular "
-"in toolbars or context menus."
+"in toolbars or context menus.\n"
+"[b]Incremental search:[/b] Like [ItemList] and [Tree], [PopupMenu] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/PopupMenu.xml
@@ -48021,7 +48519,16 @@ msgid ""
msgstr ""
#: doc/classes/ProjectSettings.xml
-msgid "Message to be displayed before the backtrace when the engine crashes."
+msgid ""
+"Message to be displayed before the backtrace when the engine crashes. By "
+"default, this message is only used in exported projects due to the editor-"
+"only override applied to this setting."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Editor-only override for [member debug/settings/crash_handler/message]. Does "
+"not affect exported projects in debug or release mode."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -48266,6 +48773,18 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default naming style for scene files to infer from their root nodes. "
+"Possible options are:\n"
+"- [code]0[/code] (Auto): Uses the scene root name as is without changing its "
+"casing.\n"
+"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase "
+"casing.\n"
+"- [code]2[/code] (snake_case): Converts the scene root name to snake_case "
+"casing."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -48491,6 +49010,198 @@ msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 1."
msgstr ""
@@ -48699,6 +49410,198 @@ msgid "Optional name for the 2D render layer 9."
msgstr ""
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 1."
msgstr ""
@@ -48966,6 +49869,49 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default cell height for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_height].\n"
+"[b]Note:[/b] Currently not implemented."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 2D navigation maps. See [method "
+"Navigation2DServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell height for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_height]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 3D navigation maps. See [method "
+"NavigationServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default map up vector for 3D navigation maps. See [method NavigationServer."
+"map_set_up]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -49639,20 +50585,28 @@ msgid ""
"cause.\n"
"The default value is a conservative one, so you are advised to tweak it "
"according to the hardware you are targeting.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"The default is a very conservative override for [code]rendering/gles3/"
-"shaders/max_concurrent_compiles[/code].\n"
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
"Depending on the specific devices you are targeting, you may want to raise "
"it.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
+"Depending on the specific browsers you are targeting, you may want to raise "
+"it.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -49660,19 +50614,28 @@ msgid ""
"The maximum size, in megabytes, that the ubershader cache can grow up to. On "
"startup, the least recently used entries will be deleted until the total "
"size is within bounds.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/ubershader_cache_size_mb[/"
-"code], so a smaller maximum size can be configured for mobile platforms, "
-"where storage space is more limited.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for mobile platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for web platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] Currently, shader caching is generally unavailable on web "
+"platforms.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -49704,14 +50667,22 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/shader_compilation_mode[/"
-"code], so asynchronous compilation can be disabled for mobile.\n"
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on mobile platforms.\n"
"You may want to do that since mobile GPUs generally won't support "
"ubershaders due to their complexity."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on web platforms.\n"
+"You may want to do that since certain browsers (especially on mobile "
+"platforms) generally won't support ubershaders due to their complexity."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
@@ -50468,7 +51439,6 @@ msgid ""
"- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/"
"code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, "
"small grid radius values may lead to unwanted groupings.\n"
-"[/codeblock]\n"
"[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more "
"effective and faster [VisibilityNotifier] functionality. For most use cases, "
"[method Vector3.distance_to] or [method Vector3.distance_squared_to] are "
@@ -52624,6 +53594,22 @@ msgid "Makes text fill width."
msgstr ""
#: doc/classes/RichTextLabel.xml
+msgid "Aligns top of the inline image to the top of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns center of the inline image to the center of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns bottom of the inline image to the baseline of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns bottom of the inline image to the bottom of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
msgid "Each list item has a number marker."
msgstr ""
@@ -54363,8 +55349,8 @@ msgid ""
" yield(get_tree().create_timer(1.0), \"timeout\")\n"
" print(\"Timer ended.\")\n"
"[/codeblock]\n"
-"The timer will be automatically freed after its time elapses, so be aware "
-"that any reference you might have kept to it will become invalid."
+"The timer will be dereferenced after its time elapses. To preserve the "
+"timer, you can keep a reference to it. See [Reference]."
msgstr ""
#: doc/classes/SceneTreeTimer.xml
@@ -54396,24 +55382,23 @@ msgid ""
"manually (i.e. by using [code]Tween.new()[/code]) are invalid. They can't be "
"used for tweening values, but you can do manual interpolation with [method "
"interpolate_value].\n"
-"A [SceneTreeTween] animation is composed of a sequence of [Tweener]s, which "
-"by default are executed one after another. You can create a sequence by "
-"appending [Tweener]s to the [SceneTreeTween]. Animating something with a "
-"[Tweener] is called tweening. Example tweening sequence looks like this:\n"
+"A tween animation is created by adding [Tweener]s to the [SceneTreeTween] "
+"object, using [method tween_property], [method tween_interval], [method "
+"tween_callback] or [method tween_method]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1)\n"
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"This sequence will make the [code]$Sprite[/code] node turn red, then shrink "
-"and finally the [method Node.queue_free] is called to remove the sprite. See "
-"methods [method tween_property], [method tween_interval], [method "
-"tween_callback] and [method tween_method] for more usage information.\n"
+"This sequence will make the [code]$Sprite[/code] node turn red, then shrink, "
+"before finally calling [method Node.queue_free] to free the sprite. "
+"[Tweener]s are executed one after another by default. This behavior can be "
+"changed using [method parallel] and [method set_parallel].\n"
"When a [Tweener] is created with one of the [code]tween_*[/code] methods, a "
"chained method call can be used to tweak the properties of this [Tweener]. "
-"For example, if you want to set different transition type in the above "
-"example, you can do:\n"
+"For example, if you want to set a different transition type in the above "
+"example, you can use [method set_trans]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1).set_trans(Tween."
@@ -54422,8 +55407,9 @@ msgid ""
"TRANS_BOUNCE)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Most of the [SceneTreeTween] methods can be chained this way too. In this "
-"example the [SceneTreeTween] is bound and have set a default transition:\n"
+"Most of the [SceneTreeTween] methods can be chained this way too. In the "
+"following example the [SceneTreeTween] is bound to the running script's node "
+"and a default transition is set for its [Tweener]s:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween().bind_node(self).set_trans(Tween."
"TRANS_ELASTIC)\n"
@@ -54431,16 +55417,16 @@ msgid ""
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Another interesting use for [SceneTreeTween]s is animating arbitrary set of "
+"Another interesting use for [SceneTreeTween]s is animating arbitrary sets of "
"objects:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"for sprite in get_children():\n"
-" tween.tween_property(sprite, \"position\", Vector2(), 1)\n"
+" tween.tween_property(sprite, \"position\", Vector2(0, 0), 1)\n"
"[/codeblock]\n"
"In the example above, all children of a node are moved one after another to "
"position (0, 0).\n"
-"Some [Tweener]s use transitions and eases. The first accepts an [enum Tween."
+"Some [Tweener]s use transitions and eases. The first accepts a [enum Tween."
"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 Tween.EaseType] constant, and "
@@ -54452,7 +55438,7 @@ msgid ""
"tween_cheatsheet.png]Tween easing and transition types cheatsheet[/url]\n"
"[b]Note:[/b] All [SceneTreeTween]s will automatically start by default. To "
"prevent a [SceneTreeTween] from autostarting, you can call [method stop] "
-"immediately after it was created."
+"immediately after it is created."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -54482,21 +55468,24 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
-"Processes the [SceneTreeTween] by given [code]delta[/code] value, in "
-"seconds. Mostly useful when the [SceneTreeTween] is paused, for controlling "
-"it manually. Can also be used to end the [SceneTreeTween] animation "
-"immediately, by using [code]delta[/code] longer than the whole duration.\n"
+"Processes the [SceneTreeTween] by the given [code]delta[/code] value, in "
+"seconds. This is mostly useful for manual control when the [SceneTreeTween] "
+"is paused. It can also be used to end the [SceneTreeTween] animation "
+"immediately, by setting [code]delta[/code] longer than the whole duration of "
+"the [SceneTreeTween] animation.\n"
"Returns [code]true[/code] if the [SceneTreeTween] still has [Tweener]s that "
"haven't finished.\n"
-"[b]Note:[/b] The [SceneTreeTween] will become invalid after finished, but "
-"you can call [method stop] after the step, to keep it and reset."
+"[b]Note:[/b] The [SceneTreeTween] will become invalid in the next processing "
+"frame after its animation finishes. Calling [method stop] after performing "
+"[method custom_step] instead keeps and resets the [SceneTreeTween]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Returns the total time in seconds the [SceneTreeTween] has been animating (i."
-"e. time since it started, not counting pauses etc.). The time is affected by "
-"[method set_speed_scale] and [method stop] will reset it to [code]0[/code].\n"
+"e. the time since it started, not counting pauses etc.). The time is "
+"affected by [method set_speed_scale], and [method stop] will reset it to "
+"[code]0[/code].\n"
"[b]Note:[/b] As it results from accumulating frame deltas, the time returned "
"after the [SceneTreeTween] has finished animating will be slightly greater "
"than the actual [SceneTreeTween] duration."
@@ -54532,11 +55521,10 @@ msgstr ""
msgid ""
"Returns whether the [SceneTreeTween] is valid. A valid [SceneTreeTween] is a "
"[SceneTreeTween] contained by the scene tree (i.e. the array from [method "
-"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). "
-"[SceneTreeTween] might become invalid when it has finished tweening or was "
-"killed, also when created with [code]Tween.new()[/code]. Invalid "
-"[SceneTreeTween] can't have [Tweener]s appended, because it can't animate "
-"them. You can however still use [method interpolate_value]."
+"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). A "
+"[SceneTreeTween] might become invalid when it has finished tweening, is "
+"killed, or when created with [code]SceneTreeTween.new()[/code]. Invalid "
+"[SceneTreeTween]s can't have [Tweener]s appended."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -54576,16 +55564,15 @@ msgstr ""
msgid ""
"Sets the number of times the tweening sequence will be repeated, i.e. "
"[code]set_loops(2)[/code] will run the animation twice.\n"
-"Calling this method without arguments will make the [SceneTreeTween] run "
-"infinitely, until it is either killed by [method kill] or by freeing bound "
-"node, or all the animated objects have been freed (which makes further "
+"Calling this method without arguments will make the [Tween] run infinitely, "
+"until either it is killed with [method kill], the [Tween]'s bound node is "
+"freed, or all the animated objects have been freed (which makes further "
"animation impossible).\n"
"[b]Warning:[/b] Make sure to always add some duration/delay when using "
-"infinite loops. 0-duration looped animations (e.g. single [CallbackTweener] "
-"with no delay or [PropertyTweener] with invalid node) are equivalent to "
-"infinite [code]while[/code] loops and will freeze your game. If a "
-"[SceneTreeTween]'s lifetime depends on some node, always use [method "
-"bind_node]."
+"infinite loops. To prevent the game freezing, 0-duration looped animations "
+"(e.g. a single [CallbackTweener] with no delay) are stopped after a small "
+"number of loops, which may produce unexpected results. If a [Tween]'s "
+"lifetime depends on some node, always use [method bind_node]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -54647,10 +55634,10 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Creates and appends an [IntervalTweener]. This method can be used to create "
-"delays in the tween animation, as an alternative for using the delay in "
-"other [Tweener]s or when there's no animation (in which case the "
-"[SceneTreeTween] acts as a timer). [code]time[/code] is the length of the "
-"interval, in seconds.\n"
+"delays in the tween animation, as an alternative to using the delay in other "
+"[Tweener]s, or when there's no animation (in which case the [SceneTreeTween] "
+"acts as a timer). [code]time[/code] is the length of the interval, in "
+"seconds.\n"
"Example: creating an interval in code execution.\n"
"[codeblock]\n"
"# ... some code\n"
@@ -54704,8 +55691,8 @@ msgid ""
"Creates and appends a [PropertyTweener]. This method tweens a "
"[code]property[/code] of an [code]object[/code] between an initial value and "
"[code]final_val[/code] in a span of time equal to [code]duration[/code], in "
-"seconds. The initial value by default is a value at the time the tweening of "
-"the [PropertyTweener] start. For example:\n"
+"seconds. The initial value by default is the property's value at the time "
+"the tweening of the [PropertyTweener] starts. For example:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"tween.tween_property($Sprite, \"position\", Vector2(100, 200), 1)\n"
@@ -54736,16 +55723,15 @@ msgid ""
"Emitted when the [SceneTreeTween] has finished all tweening. Never emitted "
"when the [SceneTreeTween] is set to infinite looping (see [method "
"set_loops]).\n"
-"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) after this signal "
-"is emitted, but it doesn't happen immediately, but on the next processing "
-"frame. Calling [method stop] inside the signal callback will preserve the "
-"[SceneTreeTween]."
+"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) in the next "
+"processing frame after this signal is emitted. Calling [method stop] inside "
+"the signal callback will prevent the [SceneTreeTween] from being removed."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Emitted when a full loop is complete (see [method set_loops]), providing the "
-"loop index. This signal is not emitted after final loop, use [signal "
+"loop index. This signal is not emitted after the final loop, use [signal "
"finished] instead for this case."
msgstr ""
@@ -54753,7 +55739,7 @@ msgstr ""
msgid ""
"Emitted when one step of the [SceneTreeTween] is complete, providing the "
"step index. One step is either a single [Tweener] or a group of [Tweener]s "
-"running parallelly."
+"running in parallel."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -56087,7 +57073,12 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-msgid "Scale part of the local transformation."
+msgid ""
+"Scale part of the local transformation.\n"
+"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, the scale values will either be all "
+"positive or all negative."
msgstr ""
#: doc/classes/Spatial.xml
@@ -58728,11 +59719,11 @@ msgstr ""
msgid ""
"Returns [code]true[/code] if this string contains a valid integer.\n"
"[codeblock]\n"
-"print(\"7\".is_valid_int()) # Prints \"True\"\n"
-"print(\"14.6\".is_valid_int()) # Prints \"False\"\n"
-"print(\"L\".is_valid_int()) # Prints \"False\"\n"
-"print(\"+3\".is_valid_int()) # Prints \"True\"\n"
-"print(\"-12\".is_valid_int()) # Prints \"True\"\n"
+"print(\"7\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"14.6\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"L\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"+3\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"-12\".is_valid_integer()) # Prints \"True\"\n"
"[/codeblock]"
msgstr ""
@@ -62241,6 +63232,13 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml
+#, fuzzy
+msgid "If [code]true[/code], this TileMap bakes a navigation region."
+msgstr ""
+"Se [code] vero [/code], i nodi figli sono ordinati, altrimenti l'ordinamento "
+"è disabilitato."
+
+#: doc/classes/TileMap.xml
msgid "If [code]true[/code], the cell's UVs will be clipped."
msgstr ""
@@ -62347,6 +63345,10 @@ msgid "The TileMap orientation mode. See [enum Mode] for possible values."
msgstr ""
#: doc/classes/TileMap.xml
+msgid "The navigation layers the TileMap generates its navigation regions in."
+msgstr ""
+
+#: doc/classes/TileMap.xml
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 "
@@ -63482,7 +64484,12 @@ msgstr ""
#: doc/classes/Transform2D.xml
msgid ""
"Returns a copy of the transform scaled by the given [code]scale[/code] "
-"factor, using matrix multiplication."
+"factor, using matrix multiplication.\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
#: doc/classes/Transform2D.xml
@@ -63638,7 +64645,18 @@ msgid ""
"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]."
+"to remove it from the [Tree].\n"
+"[b]Incremental search:[/b] Like [ItemList] and [PopupMenu], [Tree] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/Tree.xml
@@ -67197,11 +68215,12 @@ msgid "This enabler will stop [Particles2D] nodes."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _process function."
+msgid "This enabler will stop the parent's [method Node._process] function."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _physics_process function."
+msgid ""
+"This enabler will stop the parent's [method Node._physics_process] function."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
@@ -67241,6 +68260,16 @@ msgid "The VisibilityNotifier's bounding box."
msgstr ""
#: doc/classes/VisibilityNotifier.xml
+msgid ""
+"In addition to checking whether a node is on screen or within a [Camera]'s "
+"view, VisibilityNotifier can also optionally check whether a node is within "
+"a specified maximum distance when using a [Camera] with perspective "
+"projection. This is useful for throttling the performance requirements of "
+"nodes that are far away.\n"
+"[b]Note:[/b] This feature will be disabled if set to 0.0."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier.xml
msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view."
msgstr ""
@@ -72025,6 +73054,16 @@ msgid "The amount of shader rebinds in the frame."
msgstr ""
#: doc/classes/VisualServer.xml
+msgid ""
+"The peak amount of shaders that have been under compilation in the frame.\n"
+"This is useful to know when asynchronous shader compilation has finished for "
+"the current shaders on screen.\n"
+"[b]Note:[/b] For complete certainty, only assume there are no outstanding "
+"compilations when this value is zero for at least two frames in a row.\n"
+"Unimplemented in the GLES2 rendering backend, always returns 0."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
msgid "The amount of surface changes in the frame."
msgstr ""
@@ -75231,8 +76270,8 @@ msgstr ""
#: doc/classes/World.xml
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."
+"scenario, a navigation map and a sound space. Spatial nodes register their "
+"resources into the current world."
msgstr ""
#: doc/classes/World.xml
@@ -75247,11 +76286,17 @@ msgstr ""
#: doc/classes/World.xml
msgid ""
-"The World's fallback_environment will be used if the World's [Environment] "
-"fails or is missing."
+"The World's fallback environment will be used if [member environment] fails "
+"or is missing."
msgstr ""
#: doc/classes/World.xml
+#, fuzzy
+msgid ""
+"The [RID] of this world's navigation map. Used by the [NavigationServer]."
+msgstr "Restituisce il seno del parametro."
+
+#: doc/classes/World.xml
msgid "The World's visual scenario."
msgstr ""
@@ -75266,8 +76311,8 @@ msgstr ""
#: doc/classes/World2D.xml
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."
+"visual scenario, a navigation map and a sound space. 2D nodes register their "
+"resources into the current 2D world."
msgstr ""
#: doc/classes/World2D.xml
@@ -75284,6 +76329,12 @@ msgid ""
msgstr ""
#: doc/classes/World2D.xml
+#, fuzzy
+msgid ""
+"The [RID] of this world's navigation map. Used by the [Navigation2DServer]."
+msgstr "Restituisce il seno del parametro."
+
+#: doc/classes/World2D.xml
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."
diff --git a/doc/translations/ja.po b/doc/translations/ja.po
index 2be2d3b27e..75d4179693 100644
--- a/doc/translations/ja.po
+++ b/doc/translations/ja.po
@@ -486,9 +486,10 @@ msgstr ""
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml
+#, fuzzy
msgid ""
"Compares two values by checking their actual contents, recursing into any "
-"`Array` or `Dictionary` up to its deepest level.\n"
+"[Array] or [Dictionary] up to its deepest level.\n"
"This compares to [code]==[/code] in a number of ways:\n"
"- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/"
"code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] "
@@ -560,7 +561,7 @@ msgid ""
"- 1.0: Linear\n"
"- Greater than 1.0 (exclusive): Ease in\n"
"[/codeblock]\n"
-"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.4/img/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/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]."
@@ -1692,7 +1693,7 @@ msgid ""
"[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/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/img/"
"smoothstep_ease_comparison.png]Comparison between smoothstep() and ease(x, "
"-1.6521) return values[/url]"
msgstr ""
@@ -4324,6 +4325,15 @@ msgstr ""
"クã§ã‚ã‚‹ã“ã¨ã®ãƒ’ント。"
#: doc/classes/@GlobalScope.xml
+#, fuzzy
+msgid ""
+"Hints that an integer property is a bitmask using the optionally named 2D "
+"navigation layers."
+msgstr ""
+"整数プロパティãŒã€ã‚ªãƒ—ã‚·ãƒ§ãƒ³ã§æŒ‡å®šã•れ㟠2D レンダー レイヤーを使用ã—ãŸãƒ“ット"
+"マスクã§ã‚ã‚‹ã“ã¨ã®ãƒ’ント。"
+
+#: doc/classes/@GlobalScope.xml
msgid ""
"Hints that an integer property is a bitmask using the optionally named 3D "
"render layers."
@@ -4340,6 +4350,15 @@ msgstr ""
"クã§ã‚ã‚‹ã“ã¨ã®ãƒ’ント。"
#: doc/classes/@GlobalScope.xml
+#, fuzzy
+msgid ""
+"Hints that an integer property is a bitmask using the optionally named 3D "
+"navigation layers."
+msgstr ""
+"整数プロパティãŒã€ã‚ªãƒ—ã‚·ãƒ§ãƒ³ã§æŒ‡å®šã•れ㟠2D レンダー レイヤーを使用ã—ãŸãƒ“ット"
+"マスクã§ã‚ã‚‹ã“ã¨ã®ãƒ’ント。"
+
+#: doc/classes/@GlobalScope.xml
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 "
@@ -10657,7 +10676,7 @@ msgstr ""
"astar.connect_points(1, 2, false)\n"
"[/codeblock]"
-#: doc/classes/AStar.xml
+#: doc/classes/AStar.xml doc/classes/AStar2D.xml
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[/"
@@ -10942,8 +10961,15 @@ msgstr ""
"ケールãŒä¸Žãˆã‚‰ã‚ŒãŸå€¤ã«æ›´æ–°ã•れã¾ã™ã€‚"
#: doc/classes/AStar2D.xml
-msgid "Returns whether there is a connection/segment between the given points."
-msgstr "指定ã—ãŸ2点ã®é–“ã«æŽ¥ç¶š / セグメントãŒã‚ã‚‹ã‹ã©ã†ã‹ã‚’è¿”ã—ã¾ã™ã€‚"
+#, fuzzy
+msgid ""
+"Returns whether there is a connection/segment between the given points. 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 ""
+"与ãˆã‚‰ã‚ŒãŸ2点ãŒã‚»ã‚°ãƒ¡ãƒ³ãƒˆã§ç›´æŽ¥æŽ¥ç¶šã•れã¦ã„ã‚‹ã‹ã©ã†ã‹ã‚’è¿”ã—ã¾ã™ã€‚"
+"[code]bidirectional[/code]ãŒ[code]false[/code]ã®å ´åˆã€[code]id[/code]ã‹ã‚‰"
+"[code]to_id[/code]ã¾ã§ã“ã®ã‚»ã‚°ãƒ¡ãƒ³ãƒˆã‚’通ã£ã¦ç§»å‹•ã§ãã‚‹ã‹ã©ã†ã‹ã‚’è¿”ã—ã¾ã™ã€‚"
#: doc/classes/AStar2D.xml
msgid ""
@@ -10968,10 +10994,6 @@ msgstr ""
"[/codeblock]"
#: doc/classes/AStar2D.xml
-msgid "Deletes the segment between the given points."
-msgstr "指定ã•れãŸ2点ã®é–“ã«ã‚るセグメントを削除ã—ã¾ã™ã€‚"
-
-#: doc/classes/AStar2D.xml
msgid ""
"Returns the closest position to [code]to_position[/code] that resides inside "
"a segment between two connected points.\n"
@@ -11223,7 +11245,9 @@ msgid ""
"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."
+"transmit audio over the network. When capturing audio data from a "
+"microphone, the format of the samples will be stereo 32-bit floating point "
+"PCM."
msgstr ""
#: doc/classes/AudioEffectCapture.xml
@@ -16616,7 +16640,7 @@ msgid ""
msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
-#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/Navigation2D.xml
msgid "Returns the object's [RID]."
msgstr ""
@@ -22211,11 +22235,15 @@ msgid ""
msgstr ""
#: doc/classes/CurveTexture.xml
-msgid "The [code]curve[/code] rendered onto the texture."
-msgstr ""
+#, fuzzy
+msgid "The [Curve] that is rendered onto the texture."
+msgstr "円柱ã®ãƒ¬ãƒ³ãƒ€ãƒªãƒ³ã‚°ã«ä½¿ã†ãƒžãƒ†ãƒªã‚¢ãƒ«ã€‚"
#: doc/classes/CurveTexture.xml
-msgid "The width of the texture."
+msgid ""
+"The width of the texture (in pixels). Higher values make it possible to "
+"represent high-frequency data better (such as sudden direction changes), at "
+"the cost of increased generation time and memory usage."
msgstr ""
#: doc/classes/CylinderMesh.xml
@@ -22502,6 +22530,13 @@ msgid "Returns the list of keys in the [Dictionary]."
msgstr ""
#: doc/classes/Dictionary.xml
+msgid ""
+"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, "
+"duplicate keys will not be copied over, unless [code]overwrite[/code] is "
+"[code]true[/code]."
+msgstr ""
+
+#: doc/classes/Dictionary.xml
#, fuzzy
msgid "Returns the number of keys in the dictionary."
msgstr "é…列ã®è¦ç´ æ•°ã‚’è¿”ã—ã¾ã™ã€‚"
@@ -24452,9 +24487,23 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide a state data you want to be saved, like view "
+"position, grid settings, folding, etc. 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). This data is automatically saved for "
+"each scene in an [code]editstate[/code] file in the editor metadata folder. "
+"If you want to store global (scene-independent) editor data for your plugin, "
+"you can use [method get_window_layout] instead.\n"
+"Use [method set_state] to restore your saved state.\n"
+"[b]Note:[/b] This method should not be used to save important settings that "
+"should persist with the project.\n"
+"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be "
+"stored and restored correctly.\n"
+"[codeblock]\n"
+"func get_state():\n"
+" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n"
+" return state\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -24465,9 +24514,18 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide the GUI layout of the plugin or any other "
+"data you want to be stored. 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). The data is stored in the "
+"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n"
+"Use [method set_window_layout] to restore your saved layout.\n"
+"[codeblock]\n"
+"func get_window_layout(configuration):\n"
+" configuration.set_value(\"MyPlugin\", \"window_position\", $Window."
+"position)\n"
+" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -24580,11 +24638,30 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the state saved by [method get_state]."
+msgid ""
+"Restore the state saved by [method get_state]. This method is called when "
+"the current scene tab is changed in the editor.\n"
+"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise "
+"it will not be recognized and this method will not be called.\n"
+"[codeblock]\n"
+"func set_state(data):\n"
+" zoom = data.get(\"zoom\", 1.0)\n"
+" preferred_color = data.get(\"my_color\", Color.white)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the plugin GUI layout saved by [method get_window_layout]."
+msgid ""
+"Restore the plugin GUI layout and data saved by [method get_window_layout]. "
+"This method is called for every plugin on editor startup. Use the provided "
+"[code]configuration[/code] file to read your saved data.\n"
+"[codeblock]\n"
+"func set_window_layout(configuration):\n"
+" $Window.position = configuration.get_value(\"MyPlugin\", "
+"\"window_position\", Vector2())\n"
+" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", "
+"Color.white)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -29278,7 +29355,8 @@ msgid ""
"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])."
+"at fixed steps (see [member width]). See also [GradientTexture2D] and "
+"[CurveTexture]."
msgstr ""
#: doc/classes/GradientTexture.xml
@@ -29300,7 +29378,8 @@ msgid ""
"repeat] types using colors obtained from the gradient. 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] and [member height])."
+"[member width] and [member height]). See also [GradientTexture] and "
+"[CurveTexture]."
msgstr ""
#: doc/classes/GradientTexture2D.xml
@@ -30132,6 +30211,15 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+#, fuzzy
+msgid ""
+"If [code]true[/code], this GridMap uses cell navmesh resources to create "
+"navigation regions."
+msgstr ""
+"[code]true[/code] ã®å ´åˆã€ãƒ—ロセス関連ã®é€šçŸ¥ã«å¿œã˜ã¦ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ã‚’æ›´æ–°ã—ã¾"
+"ã™ã€‚"
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid "If [code]true[/code], grid items are centered on the X axis."
msgstr ""
@@ -30182,6 +30270,10 @@ msgid "The assigned [MeshLibrary]."
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+msgid "The navigation layers the GridMap generates its navigation regions in."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
"Overrides the default friction and bounce physics properties for the whole "
"[GridMap]."
@@ -31407,7 +31499,7 @@ msgid ""
" # 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 body = to_json({\"name\": \"Godette\"})\n"
" error = http_request.request(\"https://httpbin.org/post\", [], true, "
"HTTPClient.METHOD_POST, body)\n"
" if error != OK:\n"
@@ -32582,7 +32674,7 @@ msgstr ""
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 "
+"([member 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 "
@@ -32731,10 +32823,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Returns the mouse mode. See the constants for more information."
-msgstr ""
-
-#: doc/classes/Input.xml
msgid ""
"Gets an input vector by specifying four actions for the positive and "
"negative X and Y axes.\n"
@@ -32931,24 +33019,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Sets the mouse mode. See the constants for more information."
-msgstr ""
-
-#: doc/classes/Input.xml
-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
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 "
@@ -32984,6 +33054,27 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
+#, fuzzy
+msgid "Controls the mouse mode. See [enum MouseMode] for more information."
+msgstr ""
+"テクスãƒãƒ£ç”¨ã®ãƒ•ィルタフラグ。オプション㯠[enum TextureFilter] ã‚’å‚ç…§ã—ã¦ã"
+"ã ã•ã„。"
+
+#: doc/classes/Input.xml
+msgid ""
+"If [code]true[/code], similar input events sent by the operating system are "
+"accumulated. 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 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
msgid "Emitted when a joypad device has been connected or disconnected."
msgstr ""
@@ -33291,8 +33382,8 @@ msgstr ""
#: doc/classes/InputEventJoypadButton.xml
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]."
+"Represents the pressure the user puts on the button with their finger, if "
+"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]."
msgstr ""
#: doc/classes/InputEventJoypadMotion.xml
@@ -33555,9 +33646,9 @@ 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 "
+"at most. If you need more precise input reporting, set [member Input."
+"use_accumulated_input] to [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."
@@ -34050,7 +34141,18 @@ msgid ""
"[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."
+"fixed_column_width] greater than zero to wrap the text.\n"
+"[b]Incremental search:[/b] Like [PopupMenu] and [Tree], [ItemList] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/ItemList.xml
@@ -37870,12 +37972,18 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Returns the override [Material] for a surface of the [Mesh] resource.\n"
+"[b]Note:[/b] This function only returns [i]override[/i] materials associated "
+"with this [MeshInstance]. Consider using [method get_active_material] or "
+"[method Mesh.surface_get_material] to get materials associated with the "
+"[Mesh] resource."
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the number of surface materials."
-msgstr ""
+#, fuzzy
+msgid "Returns the number of surface override materials."
+msgstr "BitmapFontã®ã‚¢ãƒˆãƒ©ã‚¹ã«å«ã¾ã‚Œã‚‹ãƒ†ã‚¯ã‚¹ãƒãƒ£æ•°ã‚’è¿”ã—ã¾ã™ã€‚"
#: doc/classes/MeshInstance.xml
msgid ""
@@ -37911,7 +38019,10 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Sets the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Sets the override [Material] for the specified surface of the [Mesh] "
+"resource. This material is associated with this [MeshInstance] rather than "
+"with the [Mesh] resource."
msgstr ""
#: doc/classes/MeshInstance.xml
@@ -37942,9 +38053,10 @@ msgstr ""
#: doc/classes/MeshInstance2D.xml
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\"."
+"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be "
+"automatically created from an existing [Sprite] via a tool in the editor "
+"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to "
+"MeshInstance2D[/b] at the top of the 2D editor viewport."
msgstr ""
#: doc/classes/MeshInstance2D.xml
@@ -38717,6 +38829,9 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"Provides navigation and pathfinding within a collection of "
"[NavigationMesh]es. By default, these will be automatically collected from "
"child [NavigationMeshInstance] nodes. In addition to basic pathfinding, this "
@@ -38757,7 +38872,15 @@ msgid ""
msgstr ""
#: doc/classes/Navigation.xml
+#, fuzzy
+msgid "Returns the [RID] of the navigation map on the [NavigationServer]."
+msgstr "アニメーションã®ãƒˆãƒ©ãƒƒã‚¯æ•°ã‚’è¿”ã—ã¾ã™ã€‚"
+
+#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"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, "
@@ -38780,16 +38903,31 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation.get_simple_path] path query."
+msgstr ""
+
+#: doc/classes/Navigation.xml
+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/Navigation.xml doc/classes/Navigation2DServer.xml
+#: doc/classes/NavigationServer.xml
+msgid ""
+"Emitted when a navigation map is updated, when a region moves or is modified."
+msgstr ""
+
#: doc/classes/Navigation2D.xml
msgid "2D navigation and pathfinding node."
msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -38809,6 +38947,9 @@ msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -38819,6 +38960,12 @@ msgstr ""
msgid "The XY plane cell size to use for fields."
msgstr "メソッド呼ã³å‡ºã—トラックã§ä½¿ã†ã€å‘¼ã³å‡ºã—モード。"
+#: doc/classes/Navigation2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation2D.get_simple_path] path query."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml
#, fuzzy
msgid "Server interface for low-level 2D navigation access."
@@ -38836,8 +38983,12 @@ msgid ""
"through scripts.\n"
"For two regions to be connected to each other, they must share a similar "
"edge. An edge is considered connected to another if both of its two vertices "
-"are at a distance less than [member Navigation.edge_connection_margin] to "
-"the respective other edge's vertex.\n"
+"are at a distance less than navigation map [code]edge_connection_margin[/"
+"code] to the respective other edge's vertex.\n"
+"You may assign navigation layers to regions with [method Navigation2DServer."
+"region_set_navigation_layers], which then can be checked upon when "
+"requesting a path with [method Navigation2DServer.map_get_path]. This allows "
+"allowing or forbidding some areas to 2D objects.\n"
"To use the collision avoidance system, you may use agents. You can set an "
"agent's target velocity, then the servers will emit a callback with a "
"modified velocity.\n"
@@ -38870,7 +39021,17 @@ msgid "Returns [code]true[/code] if the map got changed the previous frame."
msgstr "与ãˆã‚‰ã‚ŒãŸãƒŽãƒ¼ãƒ‰ã‚’å«ã‚€ã‚°ãƒ©ãƒ•ã®å ´åˆã€[code]true[/code] ã‚’è¿”ã—ã¾ã™ã€‚"
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Callback called at the end of the RVO process."
+msgid ""
+"Callback called at the end of the RVO process. If a callback is created "
+"manually and the agent is placed on a navigation map it will calculate "
+"avoidance for the agent and dispatch the calculated [code]safe_velocity[/"
+"code] to the [code]receiver[/code] object with a signal to the chosen "
+"[code]method[/code] name.\n"
+"[b]Note:[/b] Created callbacks are always processed independently of the "
+"SceneTree state as long as the agent is on a navigation map and not freed. "
+"To disable the dispatch of a callback from an agent use [method "
+"agent_set_callback] again with a [code]null[/code] object as the "
+"[code]receiver[/code]."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -38932,15 +39093,55 @@ msgid "Destroys the given RID."
msgstr "指定ã•れãŸé·ç§»ã‚’è¿”ã—ã¾ã™ã€‚"
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns all created navigation map [RID]s on the NavigationServer. This "
+"returns both 2D and 3D created navigation maps as there is technically no "
+"distinction between them."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Create a new map."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"This function immediately forces synchronization of the specified navigation "
+"[code]map[/code] [RID]. By default navigation maps are only synchronized at "
+"the end of each physics frame. This function can be used to immediately "
+"(re)calculate all the navigation meshes and region connections of the "
+"navigation map. This makes it possible to query a navigation path for a "
+"changed map immediately and in the same frame (multiple times if needed).\n"
+"Due to technical restrictions the current NavigationServer command queue "
+"will be flushed. This means all already queued update commands for this "
+"physics frame will be executed, even those intended for other maps, regions "
+"and agents not part of the specified map. The expensive computation of the "
+"navigation meshes and region connections of a map will only be done for the "
+"specified map. Other maps will receive the normal synchronization at the end "
+"of the physics frame. Should the specified map receive changes after the "
+"forced update it will update again as well when the other maps receive their "
+"update.\n"
+"Avoidance processing and dispatch of the [code]safe_velocity[/code] signals "
+"is untouched by this function and continues to happen for all maps and "
+"agents at the end of the physics frame.\n"
+"[b]Note:[/b] With great power comes great responsibility. This function "
+"should only be used by users that really know what they are doing and have a "
+"good reason for it. Forcing an immediate update of a navigation map requires "
+"locking the NavigationServer and flushing the entire NavigationServer "
+"command queue. Not only can this severely impact the performance of a game "
+"but it can also introduce bugs if used inappropriately without much "
+"foresight."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns all navigation agents [RID]s that are currently assigned to the "
"requested navigation [code]map[/code]."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
#, fuzzy
msgid "Returns the map cell size."
@@ -38968,7 +39169,10 @@ msgid ""
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Returns the navigation path to reach the destination from the origin."
+msgid ""
+"Returns the navigation path to reach the destination from the origin. "
+"[code]navigation_layers[/code] is a bitmask of all region layers that are "
+"allowed to be in the path."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -38987,6 +39191,12 @@ msgstr "é…列ãŒç©ºã®å ´åˆã¯[code]true[/code]ã‚’è¿”ã—ã¾ã™ã€‚"
msgid "Sets the map active."
msgstr "ã‚ªãƒ¼ãƒ‡ã‚£ã‚ªã‚’åœæ­¢ã—ã¾ã™ã€‚"
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/"
+"b] Currently not implemented."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Set the map cell size used to weld the navigation mesh polygons."
msgstr ""
@@ -39002,15 +39212,81 @@ msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"Returns the ending point of a connection door. [code]connection[/code] is an "
+"index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns the starting point of a connection door. [code]connection[/code] is "
+"an index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid ""
+"Returns how many connections this [code]region[/code] has with other regions "
+"in the map."
+msgstr "点 [code]point[/code] ã‹ã‚‰å¹³é¢ä¸Šã®ç‚¹ã¸ã®ç›´äº¤æŠ•影を返ã—ã¾ã™ã€‚"
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]."
+msgstr ""
+"é…列㫠[code]value[/code] ãŒå«ã¾ã‚Œã¦ã„れ㰠[code]true[/code] ã‚’è¿”ã—ã¾ã™ã€‚"
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns the navigation map [RID] the requested [code]region[/code] is "
"currently assigned to."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
#, fuzzy
+msgid "Returns the region's navigation layers."
+msgstr "ã‚°ãƒ©ãƒ•å†…ã®æŽ¥ç¶šæ•°ã‚’è¿”ã—ã¾ã™ã€‚"
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]."
+msgstr "è«–ç†ORæ¼”ç®—å­ ([code]or[/code] ã¾ãŸã¯ [code]||[/code])。"
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns [code]true[/code] if the provided [code]point[/code] in world space "
+"is currently owned by the provided navigation [code]region[/code]. Owned in "
+"this context means that one of the region's navigation mesh polygon faces "
+"has a possible position at the closest distance to this point compared to "
+"all other navigation meshes from other navigation regions that are also "
+"registered on the navigation map of the provided region.\n"
+"If multiple navigation meshes have positions at equal distance the "
+"navigation region whose polygons are processed first wins the ownership. "
+"Polygons are processed in the same order that navigation regions were "
+"registered on the NavigationServer.\n"
+"[b]Note:[/b] If navigation meshes from different navigation regions overlap "
+"(which should be avoided in general) the result might not be what is "
+"expected."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]."
+msgstr ""
+"与ãˆã‚‰ã‚ŒãŸ[code]id[/code]ã‚’æŒã¤ç‚¹ã®ä½ç½®[code]position[/code]を設定ã—ã¾ã™ã€‚"
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
msgid "Sets the map for the region."
msgstr "行列ã®é€†è¡Œåˆ—ã‚’è¿”ã—ã¾ã™ã€‚"
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method Navigation2DServer.map_get_path])."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
#, fuzzy
msgid "Sets the navigation mesh for the region."
@@ -39021,6 +39297,12 @@ msgstr "指定ã•れãŸåå‰ã®ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ãƒŽãƒ¼ãƒ‰ã‚’è¿”ã—ã¾ã™ã€‚
msgid "Sets the global transformation for the region."
msgstr "行列ã®è»¢ç½®ã•れãŸãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’è¿”ã—ã¾ã™ã€‚"
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]."
+msgstr ""
+"与ãˆã‚‰ã‚ŒãŸ[code]id[/code]ã‚’æŒã¤ç‚¹ã®ä½ç½®[code]position[/code]を設定ã—ã¾ã™ã€‚"
+
#: doc/classes/NavigationAgent.xml
msgid "3D agent used in navigation for collision avoidance."
msgstr ""
@@ -39030,9 +39312,16 @@ msgid ""
"3D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationAgent] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World] navigation map. If this node is a child of a [Navigation] "
+"node it will register to the navigation map of the navigation node or the "
+"function [method set_navigation] can be used to set the navigation node "
+"directly. [NavigationAgent] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -39050,7 +39339,15 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-msgid "Returns the path from start to finish in global coordinates."
+msgid ""
+"Returns this agent's current path from start to finish in global "
+"coordinates. The path only updates when the target location is changed or "
+"the agent requires a repath. The path array is not intended to be used in "
+"direct path movement as the agent has its own internal path logic that would "
+"get corrupted by changing the path array manually. Use the intended [method "
+"get_next_location] once every physics frame to receive the next path point "
+"for the agents movement as this function also updates the internal path "
+"logic."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -39067,11 +39364,24 @@ msgid ""
"system."
msgstr "指定ã•れãŸåå‰ã®ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ãƒŽãƒ¼ãƒ‰ã‚’è¿”ã—ã¾ã™ã€‚"
-#: doc/classes/NavigationAgent.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
+"Returns the [RID] of the navigation map for this NavigationAgent node. This "
+"function returns always the map set on the NavigationAgent node and not the "
+"map of the abstract agent on the NavigationServer. If the agent map is "
+"changed directly with the NavigationServer API the NavigationAgent node will "
+"not be aware of the map change. Use [method set_navigation_map] to change "
+"the navigation map for the NavigationAgent and also update the agent on the "
+"NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"Returns a [Vector3] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the origin of the agent's parent."
+"Returns the next location in global coordinates that can be moved to, making "
+"sure that there are no static objects in the way. If the agent does not have "
+"a navigation path, it will return the position of the agent's parent. The "
+"use of this function once every physics frame is required to update the "
+"internal path logic of the NavigationAgent."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -39118,6 +39428,12 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"Sets the [RID] of the navigation map this NavigationAgent node should use "
+"and also updates the [code]agent[/code] on the NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"Sets the user desired final location. This will clear the current navigation "
"path."
msgstr ""
@@ -39130,7 +39446,13 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml
-msgid "The agent height offset to match the navigation mesh height."
+msgid ""
+"The NavigationAgent height offset is subtracted from the y-axis value of any "
+"vector path position for this NavigationAgent. The NavigationAgent height "
+"offset does not change or influence the navigation mesh or pathfinding query "
+"result. Additional navigation maps that use regions with navigation meshes "
+"that the developer baked with appropriate agent radius or height values are "
+"required to support different-sized agents."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -39157,27 +39479,53 @@ msgstr ""
msgid "The maximum speed that an agent can move."
msgstr ""
+#: doc/classes/NavigationAgent.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "The distance to search for other agents."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"The distance threshold before a path point is considered to be reached. This "
+"will allow an agent to not have to hit a path point on the path exactly, but "
+"in the area. If this value is set to high the NavigationAgent will skip "
+"points on the path which can lead to leaving the navigation mesh. If this "
+"value is set to low the NavigationAgent will be stuck in a repath loop cause "
+"it will constantly overshoot or undershoot the distance to the next point on "
+"each physics frame update."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"The maximum distance the agent is allowed away from the ideal path to the "
"final location. This can happen due to trying to avoid collisions. When the "
"maximum distance is exceeded, it recalculates the ideal path."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-#, fuzzy
-msgid "The radius of the agent."
-msgstr "円柱ã®åŠå¾„。"
+msgid ""
+"The radius of the avoidance agent. This is the \"body\" of the avoidance "
+"agent and not the avoidance maneuver starting radius (which is controlled by "
+"[member neighbor_dist]).\n"
+"Does not affect normal pathfinding. To change an actor's pathfinding radius "
+"bake [NavigationMesh] resources with a different [member NavigationMesh."
+"agent_radius] property and use different navigation maps for each actor size."
+msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"The distance threshold before a target is considered to be reached. This "
-"will allow an agent to not have to hit a point on the path exactly, but in "
-"the area."
+"The distance threshold before the final target point is considered to be "
+"reached. This will allow an agent to not have to hit the point of the final "
+"target exactly, but only the area. If this value is set to low the "
+"NavigationAgent will be stuck in a repath loop cause it will constantly "
+"overshoot or undershoot the distance to the final target point on each "
+"physics frame update."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -39221,9 +39569,16 @@ msgid ""
"2D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationAgent2D] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World2D] navigation map. If this node is a child of a "
+"[Navigation2D] node it will register to the navigation map of the navigation "
+"node or the function [method set_navigation] can be used to set the "
+"navigation node directly. [NavigationAgent2D] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent2D.xml
@@ -39241,13 +39596,6 @@ msgid ""
msgstr "指定ã•れãŸåå‰ã®ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³ãƒŽãƒ¼ãƒ‰ã‚’è¿”ã—ã¾ã™ã€‚"
#: doc/classes/NavigationAgent2D.xml
-msgid ""
-"Returns a [Vector2] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the position of the agent's parent."
-msgstr ""
-
-#: doc/classes/NavigationAgent2D.xml
#, fuzzy
msgid "Returns the [RID] of this agent on the [Navigation2DServer]."
msgstr "アニメーションã®ãƒˆãƒ©ãƒƒã‚¯æ•°ã‚’è¿”ã—ã¾ã™ã€‚"
@@ -39268,6 +39616,13 @@ msgid ""
"only be enabled on agents that currently require it."
msgstr ""
+#: doc/classes/NavigationAgent2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent2D] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationMesh.xml
msgid "A mesh to approximate the walkable areas and obstacles."
msgstr ""
@@ -39297,10 +39652,11 @@ msgid ""
msgstr ""
#: doc/classes/NavigationMesh.xml
+#, fuzzy
msgid ""
-"Returns whether the specified [code]bit[/code] of the [member geometry/"
-"collision_mask] is set."
-msgstr ""
+"Returns whether the specified [code]bit[/code] of the [member "
+"geometry_collision_mask] is set."
+msgstr "録画中ã‹ã©ã†ã‹ã‚’è¿”ã—ã¾ã™ã€‚"
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
msgid ""
@@ -39322,9 +39678,9 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/"
-"code] in the [member geometry/collision_mask].\n"
+"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]."
+"code] in the [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
@@ -39338,14 +39694,14 @@ 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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -39357,7 +39713,7 @@ 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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -39386,13 +39742,17 @@ msgstr ""
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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
-"If [code]true[/code], marks walkable spans as not walkable if the clearance "
-"above the span is less than [member agent/height]."
+"If the baking [AABB] has a volume the navigation mesh baking will be "
+"restricted to its enclosing area."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+msgid "The position offset applied to the [member filter_baking_aabb] [AABB]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -39403,13 +39763,22 @@ msgstr "[code]true[/code]ã®å ´åˆã€æ³•ç·šãƒžãƒƒãƒ”ãƒ³ã‚°ãŒæœ‰åйã«ãªã‚Šã¾ã
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]true[/code], marks non-walkable spans as walkable if their maximum "
-"is within [member agent/max_climb] of a walkable neighbor."
+"is within [member agent_max_climb] of a walkable neighbor."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+#, fuzzy
+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 blend_mode] ã‚‚"
+"å‚ç…§ã—ã¦ãã ã•ã„。"
#: doc/classes/NavigationMesh.xml
msgid ""
"The physics layers to scan for static colliders.\n"
-"Only used when [member geometry/parsed_geometry_type] is [constant "
+"Only used when [member geometry_parsed_geometry_type] is [constant "
"PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]."
msgstr ""
@@ -39428,7 +39797,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"The name of the group to scan for geometry.\n"
-"Only used when [member geometry/source_geometry_mode] is [constant "
+"Only used when [member geometry_source_geometry_mode] is [constant "
"SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant "
"SOURCE_GEOMETRY_GROUPS_EXPLICIT]."
msgstr ""
@@ -39492,7 +39861,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Parses [StaticBody] colliders as geometry. The collider should be in any of "
-"the layers specified by [member geometry/collision_mask]."
+"the layers specified by [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -39514,13 +39883,13 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Scans nodes in a group and their child nodes recursively for geometry. The "
-"group is specified by [member geometry/source_group_name]."
+"group is specified by [member geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Uses nodes in a group for geometry. The group is specified by [member "
-"geometry/source_group_name]."
+"geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -39563,7 +39932,15 @@ msgid ""
"geometry for walkable terrain suitable to [NavigationMesh] agent properties "
"by creating a voxel world around the meshes bounding area.\n"
"The finalized navigation mesh is then returned and stored inside the "
-"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes."
+"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] "
+"nodes.\n"
+"[b]Note:[/b] Using meshes to not only define walkable surfaces but also "
+"obstruct navigation baking does not always work. The navigation baking has "
+"no concept of what is a geometry \"inside\" when dealing with mesh source "
+"geometry and this is intentional. Depending on current baking parameters, as "
+"soon as the obstructing mesh is large enough to fit a navigation mesh area "
+"inside, the baking will generate navigation mesh areas that are inside the "
+"obstructing source geometry mesh."
msgstr ""
#: doc/classes/NavigationMeshGenerator.xml
@@ -39571,8 +39948,8 @@ msgid ""
"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child "
"nodes under the provided [code]root_node[/code] or a specific group of nodes "
"for potential source geometry. The parse behavior can be controlled with the "
-"[member NavigationMesh.geometry/parsed_geometry_type] and [member "
-"NavigationMesh.geometry/source_geometry_mode] properties on the "
+"[member NavigationMesh.geometry_parsed_geometry_type] and [member "
+"NavigationMesh.geometry_source_geometry_mode] properties on the "
"[NavigationMesh] resource."
msgstr ""
@@ -39590,8 +39967,21 @@ msgstr ""
#: doc/classes/NavigationMeshInstance.xml
msgid ""
"An instance of a [NavigationMesh]. It tells the [Navigation] node what can "
-"be navigated and what cannot, based on the [NavigationMesh] resource. This "
-"should be a child of a [Navigation] node."
+"be navigated and what cannot, based on the [NavigationMesh] resource.\n"
+"By default this node will register to the default [World] navigation map. If "
+"this node is a child of a [Navigation] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method NavigationServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The cost of entering this region from another region can be controlled with "
+"the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The cost of traveling distances inside this region can be controlled with "
+"the [member travel_cost] multiplier."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
@@ -39620,11 +40010,35 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding enters this region's navmesh from another regions navmesh "
+"the [code]enter_cost[/code] value is added to the path distance for "
+"determining the shortest path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationMesh] "
+"belongs to. On path requests with [method NavigationServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
#, fuzzy
msgid "The [NavigationMesh] resource to use."
msgstr "[NavigationMeshGenerator] シングルトン。"
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding moves inside this region's navmesh the traveled distances "
+"are multiplied with [code]travel_cost[/code] for determining the shortest "
+"path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
#, fuzzy
msgid "Notifies when the navigation mesh bake operation is completed."
msgstr "アニメーションã®å†ç”ŸãŒé–‹å§‹ã—ãŸã¨ãã«é€šçŸ¥ã—ã¾ã™ã€‚"
@@ -39643,7 +40057,9 @@ msgid ""
"3D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationObstacle] is physics safe."
+"[NavigationObstacle] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle.xml
@@ -39685,7 +40101,9 @@ msgid ""
"2D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationObstacle2D] is physics safe."
+"[NavigationObstacle2D] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle2D.xml
@@ -39766,6 +40184,14 @@ msgstr ""
#: doc/classes/NavigationPolygon.xml
msgid ""
+"Returns the [NavigationMesh] resulting from this navigation polygon. This "
+"navmesh can be used to update the navmesh of a region with the [method "
+"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server "
+"behind the scene)."
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml
+msgid ""
"Returns a [PoolVector2Array] containing the vertices of an outline that was "
"created in the editor or by script."
msgstr ""
@@ -39802,6 +40228,30 @@ msgid ""
msgstr ""
#: doc/classes/NavigationPolygonInstance.xml
+msgid "A region of the 2D navigation map."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A region of the navigation map. It tells the [Navigation2DServer] what can "
+"be navigated and what cannot, based on its [NavigationPolygon] resource.\n"
+"By default this node will register to the default [World2D] navigation map. "
+"If this node is a child of a [Navigation2D] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The pathfinding cost of entering this region from another region can be "
+"controlled with the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The pathfinding cost of traveling distances inside this region can be "
+"controlled with the [member travel_cost] multiplier."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
msgid ""
"Returns the [RID] of this region on the [Navigation2DServer]. Combined with "
"[method Navigation2DServer.map_get_closest_point_owner] can be used to "
@@ -39809,6 +40259,23 @@ msgid ""
"navigation map."
msgstr ""
+#: doc/classes/NavigationPolygonInstance.xml
+msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationPolygon] "
+"belongs to. On path requests with [method Navigation2DServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+#, fuzzy
+msgid "The [NavigationPolygon] resource to use."
+msgstr "[NavigationMeshGenerator] シングルトン。"
+
#: doc/classes/NavigationServer.xml
#, fuzzy
msgid "Server interface for low-level 3D navigation access."
@@ -39890,6 +40357,12 @@ msgid "Bakes the navigation mesh."
msgstr ""
#: doc/classes/NavigationServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method NavigationServer.map_get_path])."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
msgid "Control activation of this server."
msgstr ""
@@ -41359,13 +41832,19 @@ msgstr ""
#: doc/classes/Node.xml
msgid ""
"Emitted when a child node enters the scene tree, either because it entered "
-"on its own or because this node entered with it."
+"on its own or because this node entered with it.\n"
+"This signal is emitted [i]after[/i] the child node's own [constant "
+"NOTIFICATION_ENTER_TREE] and [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
msgid ""
-"Emitted when a child node exits the scene tree, either because it exited on "
-"its own or because this node exited."
+"Emitted when a child node is about to exit the scene tree, either because it "
+"is being removed or freed directly, or because this node is exiting the "
+"tree.\n"
+"When this signal is received, the child [code]node[/code] is still in the "
+"tree and valid. This signal is emitted [i]after[/i] the child node's own "
+"[signal tree_exiting] and [constant NOTIFICATION_EXIT_TREE]."
msgstr ""
#: doc/classes/Node.xml
@@ -41377,7 +41856,10 @@ msgid "Emitted when the node is renamed."
msgstr ""
#: doc/classes/Node.xml
-msgid "Emitted when the node enters the tree."
+msgid ""
+"Emitted when the node enters the tree.\n"
+"This signal is emitted [i]after[/i] the related [constant "
+"NOTIFICATION_ENTER_TREE] notification."
msgstr ""
#: doc/classes/Node.xml
@@ -41387,15 +41869,21 @@ msgstr ""
#: doc/classes/Node.xml
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)."
+"the right place for de-initialization (or a \"destructor\", if you will).\n"
+"This signal is emitted [i]before[/i] the related [constant "
+"NOTIFICATION_EXIT_TREE] notification."
msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node enters a [SceneTree]."
+msgid ""
+"Notification received when the node enters a [SceneTree].\n"
+"This notification is emitted [i]before[/i] the related [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node is about to exit a [SceneTree]."
+msgid ""
+"Notification received when the node is about to exit a [SceneTree].\n"
+"This notification is emitted [i]after[/i] the related [signal tree_exiting]."
msgstr ""
#: doc/classes/Node.xml
@@ -41656,7 +42144,13 @@ msgid "Rotation in degrees, relative to the node's parent."
msgstr ""
#: doc/classes/Node2D.xml
-msgid "The node's scale. Unscaled value: [code](1, 1)[/code]."
+msgid ""
+"The node's scale. Unscaled value: [code](1, 1)[/code].\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
#: doc/classes/Node2D.xml
@@ -43113,6 +43607,10 @@ msgid ""
" if argument.find(\"=\") > -1:\n"
" var key_value = argument.split(\"=\")\n"
" arguments[key_value[0].lstrip(\"--\")] = key_value[1]\n"
+" else:\n"
+" # Options without an argument will be present in the dictionary,\n"
+" # with the value set to an empty string.\n"
+" arguments[argument.lstrip(\"--\")] = \"\"\n"
"[/codeblock]"
msgstr ""
@@ -43784,8 +44282,15 @@ msgstr ""
msgid ""
"Moves the file or directory to the system's recycle bin. See also [method "
"Directory.remove].\n"
+"The method takes only global paths, so you may need to use [method "
+"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/"
+"code] as it will not work in exported project.\n"
"[b]Note:[/b] If the user has disabled the recycle bin on their system, the "
-"file will be permanently deleted instead."
+"file will be permanently deleted instead.\n"
+"[codeblock]\n"
+"var file_to_remove = \"user://slot1.sav\"\n"
+"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/OS.xml
@@ -48677,7 +49182,18 @@ msgstr ""
#: doc/classes/PopupMenu.xml
msgid ""
"[PopupMenu] is a [Control] that displays a list of options. They are popular "
-"in toolbars or context menus."
+"in toolbars or context menus.\n"
+"[b]Incremental search:[/b] Like [ItemList] and [Tree], [PopupMenu] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/PopupMenu.xml
@@ -50212,7 +50728,16 @@ msgid ""
msgstr ""
#: doc/classes/ProjectSettings.xml
-msgid "Message to be displayed before the backtrace when the engine crashes."
+msgid ""
+"Message to be displayed before the backtrace when the engine crashes. By "
+"default, this message is only used in exported projects due to the editor-"
+"only override applied to this setting."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Editor-only override for [member debug/settings/crash_handler/message]. Does "
+"not affect exported projects in debug or release mode."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -50457,6 +50982,18 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default naming style for scene files to infer from their root nodes. "
+"Possible options are:\n"
+"- [code]0[/code] (Auto): Uses the scene root name as is without changing its "
+"casing.\n"
+"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase "
+"casing.\n"
+"- [code]2[/code] (snake_case): Converts the scene root name to snake_case "
+"casing."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -50682,6 +51219,198 @@ msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 1."
msgstr ""
@@ -50890,6 +51619,198 @@ msgid "Optional name for the 2D render layer 9."
msgstr ""
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 1."
msgstr ""
@@ -51157,6 +52078,49 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default cell height for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_height].\n"
+"[b]Note:[/b] Currently not implemented."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 2D navigation maps. See [method "
+"Navigation2DServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell height for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_height]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 3D navigation maps. See [method "
+"NavigationServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default map up vector for 3D navigation maps. See [method NavigationServer."
+"map_set_up]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -51830,20 +52794,28 @@ msgid ""
"cause.\n"
"The default value is a conservative one, so you are advised to tweak it "
"according to the hardware you are targeting.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"The default is a very conservative override for [code]rendering/gles3/"
-"shaders/max_concurrent_compiles[/code].\n"
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
"Depending on the specific devices you are targeting, you may want to raise "
"it.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
+"Depending on the specific browsers you are targeting, you may want to raise "
+"it.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -51851,19 +52823,28 @@ msgid ""
"The maximum size, in megabytes, that the ubershader cache can grow up to. On "
"startup, the least recently used entries will be deleted until the total "
"size is within bounds.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/ubershader_cache_size_mb[/"
-"code], so a smaller maximum size can be configured for mobile platforms, "
-"where storage space is more limited.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for mobile platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for web platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] Currently, shader caching is generally unavailable on web "
+"platforms.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -51895,14 +52876,22 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/shader_compilation_mode[/"
-"code], so asynchronous compilation can be disabled for mobile.\n"
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on mobile platforms.\n"
"You may want to do that since mobile GPUs generally won't support "
"ubershaders due to their complexity."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on web platforms.\n"
+"You may want to do that since certain browsers (especially on mobile "
+"platforms) generally won't support ubershaders due to their complexity."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
@@ -52661,7 +53650,6 @@ msgid ""
"- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/"
"code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, "
"small grid radius values may lead to unwanted groupings.\n"
-"[/codeblock]\n"
"[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more "
"effective and faster [VisibilityNotifier] functionality. For most use cases, "
"[method Vector3.distance_to] or [method Vector3.distance_squared_to] are "
@@ -54837,6 +55825,26 @@ msgid "Makes text fill width."
msgstr ""
#: doc/classes/RichTextLabel.xml
+#, fuzzy
+msgid "Aligns top of the inline image to the top of the text."
+msgstr "ボックスã®ä¸­å¿ƒã‹ã‚‰æ¸¬ã£ãŸãƒœãƒƒã‚¯ã‚¹ã®é«˜ã•。"
+
+#: doc/classes/RichTextLabel.xml
+#, fuzzy
+msgid "Aligns center of the inline image to the center of the text."
+msgstr "å­ã‚’コンテナã®ä¸­å¤®ã«æ•´åˆ—ã•ã›ã¾ã™ã€‚"
+
+#: doc/classes/RichTextLabel.xml
+#, fuzzy
+msgid "Aligns bottom of the inline image to the baseline of the text."
+msgstr "ボックスã®ä¸­å¿ƒã‹ã‚‰æ¸¬ã£ãŸãƒœãƒƒã‚¯ã‚¹ã®é«˜ã•。"
+
+#: doc/classes/RichTextLabel.xml
+#, fuzzy
+msgid "Aligns bottom of the inline image to the bottom of the text."
+msgstr "å­ã‚’ã‚³ãƒ³ãƒ†ãƒŠã®æœ€å¾Œã«æ•´åˆ—ã•ã›ã¾ã™ã€‚"
+
+#: doc/classes/RichTextLabel.xml
msgid "Each list item has a number marker."
msgstr ""
@@ -56590,8 +57598,8 @@ msgid ""
" yield(get_tree().create_timer(1.0), \"timeout\")\n"
" print(\"Timer ended.\")\n"
"[/codeblock]\n"
-"The timer will be automatically freed after its time elapses, so be aware "
-"that any reference you might have kept to it will become invalid."
+"The timer will be dereferenced after its time elapses. To preserve the "
+"timer, you can keep a reference to it. See [Reference]."
msgstr ""
#: doc/classes/SceneTreeTimer.xml
@@ -56623,24 +57631,23 @@ msgid ""
"manually (i.e. by using [code]Tween.new()[/code]) are invalid. They can't be "
"used for tweening values, but you can do manual interpolation with [method "
"interpolate_value].\n"
-"A [SceneTreeTween] animation is composed of a sequence of [Tweener]s, which "
-"by default are executed one after another. You can create a sequence by "
-"appending [Tweener]s to the [SceneTreeTween]. Animating something with a "
-"[Tweener] is called tweening. Example tweening sequence looks like this:\n"
+"A tween animation is created by adding [Tweener]s to the [SceneTreeTween] "
+"object, using [method tween_property], [method tween_interval], [method "
+"tween_callback] or [method tween_method]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1)\n"
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"This sequence will make the [code]$Sprite[/code] node turn red, then shrink "
-"and finally the [method Node.queue_free] is called to remove the sprite. See "
-"methods [method tween_property], [method tween_interval], [method "
-"tween_callback] and [method tween_method] for more usage information.\n"
+"This sequence will make the [code]$Sprite[/code] node turn red, then shrink, "
+"before finally calling [method Node.queue_free] to free the sprite. "
+"[Tweener]s are executed one after another by default. This behavior can be "
+"changed using [method parallel] and [method set_parallel].\n"
"When a [Tweener] is created with one of the [code]tween_*[/code] methods, a "
"chained method call can be used to tweak the properties of this [Tweener]. "
-"For example, if you want to set different transition type in the above "
-"example, you can do:\n"
+"For example, if you want to set a different transition type in the above "
+"example, you can use [method set_trans]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1).set_trans(Tween."
@@ -56649,8 +57656,9 @@ msgid ""
"TRANS_BOUNCE)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Most of the [SceneTreeTween] methods can be chained this way too. In this "
-"example the [SceneTreeTween] is bound and have set a default transition:\n"
+"Most of the [SceneTreeTween] methods can be chained this way too. In the "
+"following example the [SceneTreeTween] is bound to the running script's node "
+"and a default transition is set for its [Tweener]s:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween().bind_node(self).set_trans(Tween."
"TRANS_ELASTIC)\n"
@@ -56658,16 +57666,16 @@ msgid ""
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Another interesting use for [SceneTreeTween]s is animating arbitrary set of "
+"Another interesting use for [SceneTreeTween]s is animating arbitrary sets of "
"objects:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"for sprite in get_children():\n"
-" tween.tween_property(sprite, \"position\", Vector2(), 1)\n"
+" tween.tween_property(sprite, \"position\", Vector2(0, 0), 1)\n"
"[/codeblock]\n"
"In the example above, all children of a node are moved one after another to "
"position (0, 0).\n"
-"Some [Tweener]s use transitions and eases. The first accepts an [enum Tween."
+"Some [Tweener]s use transitions and eases. The first accepts a [enum Tween."
"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 Tween.EaseType] constant, and "
@@ -56679,7 +57687,7 @@ msgid ""
"tween_cheatsheet.png]Tween easing and transition types cheatsheet[/url]\n"
"[b]Note:[/b] All [SceneTreeTween]s will automatically start by default. To "
"prevent a [SceneTreeTween] from autostarting, you can call [method stop] "
-"immediately after it was created."
+"immediately after it is created."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -56709,21 +57717,24 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
-"Processes the [SceneTreeTween] by given [code]delta[/code] value, in "
-"seconds. Mostly useful when the [SceneTreeTween] is paused, for controlling "
-"it manually. Can also be used to end the [SceneTreeTween] animation "
-"immediately, by using [code]delta[/code] longer than the whole duration.\n"
+"Processes the [SceneTreeTween] by the given [code]delta[/code] value, in "
+"seconds. This is mostly useful for manual control when the [SceneTreeTween] "
+"is paused. It can also be used to end the [SceneTreeTween] animation "
+"immediately, by setting [code]delta[/code] longer than the whole duration of "
+"the [SceneTreeTween] animation.\n"
"Returns [code]true[/code] if the [SceneTreeTween] still has [Tweener]s that "
"haven't finished.\n"
-"[b]Note:[/b] The [SceneTreeTween] will become invalid after finished, but "
-"you can call [method stop] after the step, to keep it and reset."
+"[b]Note:[/b] The [SceneTreeTween] will become invalid in the next processing "
+"frame after its animation finishes. Calling [method stop] after performing "
+"[method custom_step] instead keeps and resets the [SceneTreeTween]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Returns the total time in seconds the [SceneTreeTween] has been animating (i."
-"e. time since it started, not counting pauses etc.). The time is affected by "
-"[method set_speed_scale] and [method stop] will reset it to [code]0[/code].\n"
+"e. the time since it started, not counting pauses etc.). The time is "
+"affected by [method set_speed_scale], and [method stop] will reset it to "
+"[code]0[/code].\n"
"[b]Note:[/b] As it results from accumulating frame deltas, the time returned "
"after the [SceneTreeTween] has finished animating will be slightly greater "
"than the actual [SceneTreeTween] duration."
@@ -56759,11 +57770,10 @@ msgstr ""
msgid ""
"Returns whether the [SceneTreeTween] is valid. A valid [SceneTreeTween] is a "
"[SceneTreeTween] contained by the scene tree (i.e. the array from [method "
-"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). "
-"[SceneTreeTween] might become invalid when it has finished tweening or was "
-"killed, also when created with [code]Tween.new()[/code]. Invalid "
-"[SceneTreeTween] can't have [Tweener]s appended, because it can't animate "
-"them. You can however still use [method interpolate_value]."
+"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). A "
+"[SceneTreeTween] might become invalid when it has finished tweening, is "
+"killed, or when created with [code]SceneTreeTween.new()[/code]. Invalid "
+"[SceneTreeTween]s can't have [Tweener]s appended."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -56803,16 +57813,15 @@ msgstr ""
msgid ""
"Sets the number of times the tweening sequence will be repeated, i.e. "
"[code]set_loops(2)[/code] will run the animation twice.\n"
-"Calling this method without arguments will make the [SceneTreeTween] run "
-"infinitely, until it is either killed by [method kill] or by freeing bound "
-"node, or all the animated objects have been freed (which makes further "
+"Calling this method without arguments will make the [Tween] run infinitely, "
+"until either it is killed with [method kill], the [Tween]'s bound node is "
+"freed, or all the animated objects have been freed (which makes further "
"animation impossible).\n"
"[b]Warning:[/b] Make sure to always add some duration/delay when using "
-"infinite loops. 0-duration looped animations (e.g. single [CallbackTweener] "
-"with no delay or [PropertyTweener] with invalid node) are equivalent to "
-"infinite [code]while[/code] loops and will freeze your game. If a "
-"[SceneTreeTween]'s lifetime depends on some node, always use [method "
-"bind_node]."
+"infinite loops. To prevent the game freezing, 0-duration looped animations "
+"(e.g. a single [CallbackTweener] with no delay) are stopped after a small "
+"number of loops, which may produce unexpected results. If a [Tween]'s "
+"lifetime depends on some node, always use [method bind_node]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -56874,10 +57883,10 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Creates and appends an [IntervalTweener]. This method can be used to create "
-"delays in the tween animation, as an alternative for using the delay in "
-"other [Tweener]s or when there's no animation (in which case the "
-"[SceneTreeTween] acts as a timer). [code]time[/code] is the length of the "
-"interval, in seconds.\n"
+"delays in the tween animation, as an alternative to using the delay in other "
+"[Tweener]s, or when there's no animation (in which case the [SceneTreeTween] "
+"acts as a timer). [code]time[/code] is the length of the interval, in "
+"seconds.\n"
"Example: creating an interval in code execution.\n"
"[codeblock]\n"
"# ... some code\n"
@@ -56931,8 +57940,8 @@ msgid ""
"Creates and appends a [PropertyTweener]. This method tweens a "
"[code]property[/code] of an [code]object[/code] between an initial value and "
"[code]final_val[/code] in a span of time equal to [code]duration[/code], in "
-"seconds. The initial value by default is a value at the time the tweening of "
-"the [PropertyTweener] start. For example:\n"
+"seconds. The initial value by default is the property's value at the time "
+"the tweening of the [PropertyTweener] starts. For example:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"tween.tween_property($Sprite, \"position\", Vector2(100, 200), 1)\n"
@@ -56963,16 +57972,15 @@ msgid ""
"Emitted when the [SceneTreeTween] has finished all tweening. Never emitted "
"when the [SceneTreeTween] is set to infinite looping (see [method "
"set_loops]).\n"
-"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) after this signal "
-"is emitted, but it doesn't happen immediately, but on the next processing "
-"frame. Calling [method stop] inside the signal callback will preserve the "
-"[SceneTreeTween]."
+"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) in the next "
+"processing frame after this signal is emitted. Calling [method stop] inside "
+"the signal callback will prevent the [SceneTreeTween] from being removed."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Emitted when a full loop is complete (see [method set_loops]), providing the "
-"loop index. This signal is not emitted after final loop, use [signal "
+"loop index. This signal is not emitted after the final loop, use [signal "
"finished] instead for this case."
msgstr ""
@@ -56980,7 +57988,7 @@ msgstr ""
msgid ""
"Emitted when one step of the [SceneTreeTween] is complete, providing the "
"step index. One step is either a single [Tweener] or a group of [Tweener]s "
-"running parallelly."
+"running in parallel."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -58322,7 +59330,12 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-msgid "Scale part of the local transformation."
+msgid ""
+"Scale part of the local transformation.\n"
+"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, the scale values will either be all "
+"positive or all negative."
msgstr ""
#: doc/classes/Spatial.xml
@@ -61254,11 +62267,11 @@ msgstr ""
msgid ""
"Returns [code]true[/code] if this string contains a valid integer.\n"
"[codeblock]\n"
-"print(\"7\".is_valid_int()) # Prints \"True\"\n"
-"print(\"14.6\".is_valid_int()) # Prints \"False\"\n"
-"print(\"L\".is_valid_int()) # Prints \"False\"\n"
-"print(\"+3\".is_valid_int()) # Prints \"True\"\n"
-"print(\"-12\".is_valid_int()) # Prints \"True\"\n"
+"print(\"7\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"14.6\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"L\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"+3\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"-12\".is_valid_integer()) # Prints \"True\"\n"
"[/codeblock]"
msgstr ""
@@ -64801,6 +65814,11 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml
+#, fuzzy
+msgid "If [code]true[/code], this TileMap bakes a navigation region."
+msgstr "ã‚‚ã— [code]true[/code] ã§ã‚れã°ã€ãƒ•ã‚£ãƒ«ã‚¿ãƒªãƒ³ã‚°ã¯æœ‰åйã«ãªã‚Šã¾ã™ã€‚"
+
+#: doc/classes/TileMap.xml
msgid "If [code]true[/code], the cell's UVs will be clipped."
msgstr ""
@@ -64910,6 +65928,10 @@ msgid "The TileMap orientation mode. See [enum Mode] for possible values."
msgstr ""
#: doc/classes/TileMap.xml
+msgid "The navigation layers the TileMap generates its navigation regions in."
+msgstr ""
+
+#: doc/classes/TileMap.xml
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 "
@@ -66050,7 +67072,12 @@ msgstr ""
#: doc/classes/Transform2D.xml
msgid ""
"Returns a copy of the transform scaled by the given [code]scale[/code] "
-"factor, using matrix multiplication."
+"factor, using matrix multiplication.\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
#: doc/classes/Transform2D.xml
@@ -66206,7 +67233,18 @@ msgid ""
"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]."
+"to remove it from the [Tree].\n"
+"[b]Incremental search:[/b] Like [ItemList] and [PopupMenu], [Tree] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/Tree.xml
@@ -69781,12 +70819,16 @@ msgid "This enabler will stop [Particles2D] nodes."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _process function."
+msgid "This enabler will stop the parent's [method Node._process] function."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _physics_process function."
+#, fuzzy
+msgid ""
+"This enabler will stop the parent's [method Node._physics_process] function."
msgstr ""
+"アニメーションã¯ç‰©ç†ãƒ•レーム中ã«é€²è¡Œã—ã¾ã™ (ã™ãªã‚ã¡ [method Node."
+"_physics_process])。"
#: doc/classes/VisibilityEnabler2D.xml
msgid "This enabler will stop [AnimatedSprite] nodes animations."
@@ -69825,6 +70867,16 @@ msgid "The VisibilityNotifier's bounding box."
msgstr ""
#: doc/classes/VisibilityNotifier.xml
+msgid ""
+"In addition to checking whether a node is on screen or within a [Camera]'s "
+"view, VisibilityNotifier can also optionally check whether a node is within "
+"a specified maximum distance when using a [Camera] with perspective "
+"projection. This is useful for throttling the performance requirements of "
+"nodes that are far away.\n"
+"[b]Note:[/b] This feature will be disabled if set to 0.0."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier.xml
msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view."
msgstr ""
@@ -74669,6 +75721,16 @@ msgid "The amount of shader rebinds in the frame."
msgstr ""
#: doc/classes/VisualServer.xml
+msgid ""
+"The peak amount of shaders that have been under compilation in the frame.\n"
+"This is useful to know when asynchronous shader compilation has finished for "
+"the current shaders on screen.\n"
+"[b]Note:[/b] For complete certainty, only assume there are no outstanding "
+"compilations when this value is zero for at least two frames in a row.\n"
+"Unimplemented in the GLES2 rendering backend, always returns 0."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
msgid "The amount of surface changes in the frame."
msgstr ""
@@ -77880,8 +78942,8 @@ msgstr ""
#: doc/classes/World.xml
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."
+"scenario, a navigation map and a sound space. Spatial nodes register their "
+"resources into the current world."
msgstr ""
#: doc/classes/World.xml
@@ -77896,11 +78958,17 @@ msgstr ""
#: doc/classes/World.xml
msgid ""
-"The World's fallback_environment will be used if the World's [Environment] "
-"fails or is missing."
+"The World's fallback environment will be used if [member environment] fails "
+"or is missing."
msgstr ""
#: doc/classes/World.xml
+#, fuzzy
+msgid ""
+"The [RID] of this world's navigation map. Used by the [NavigationServer]."
+msgstr "アニメーションã®ãƒˆãƒ©ãƒƒã‚¯æ•°ã‚’è¿”ã—ã¾ã™ã€‚"
+
+#: doc/classes/World.xml
msgid "The World's visual scenario."
msgstr ""
@@ -77915,8 +78983,8 @@ msgstr ""
#: doc/classes/World2D.xml
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."
+"visual scenario, a navigation map and a sound space. 2D nodes register their "
+"resources into the current 2D world."
msgstr ""
#: doc/classes/World2D.xml
@@ -77933,6 +79001,12 @@ msgid ""
msgstr ""
#: doc/classes/World2D.xml
+#, fuzzy
+msgid ""
+"The [RID] of this world's navigation map. Used by the [Navigation2DServer]."
+msgstr "アニメーションã®ãƒˆãƒ©ãƒƒã‚¯æ•°ã‚’è¿”ã—ã¾ã™ã€‚"
+
+#: doc/classes/World2D.xml
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."
diff --git a/doc/translations/ko.po b/doc/translations/ko.po
index 5c301f3f22..a30a93f652 100644
--- a/doc/translations/ko.po
+++ b/doc/translations/ko.po
@@ -14,12 +14,13 @@
# ì‹ ë™ê·œ <rlsl0422@gmail.com>, 2021.
# whatthesamuel <alex01763@gmail.com>, 2021.
# 한수현 <shh1473@ajou.ac.kr>, 2022.
+# vrSono <global.sonogong@gmail.com>, 2022.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2022-05-31 22:35+0000\n"
-"Last-Translator: Myeongjin Lee <aranet100@gmail.com>\n"
+"PO-Revision-Date: 2022-06-13 03:39+0000\n"
+"Last-Translator: vrSono <global.sonogong@gmail.com>\n"
"Language-Team: Korean <https://hosted.weblate.org/projects/godot-engine/"
"godot-class-reference/ko/>\n"
"Language: ko\n"
@@ -70,21 +71,20 @@ msgid "Method Descriptions"
msgstr "메서드 설명"
#: doc/tools/make_rst.py
-#, fuzzy
msgid "Theme Property Descriptions"
-msgstr "ì†ì„± 설명"
+msgstr "테마 ì†ì„± 설명"
#: doc/tools/make_rst.py
msgid "Inherits:"
-msgstr ""
+msgstr "ìƒì†:"
#: doc/tools/make_rst.py
msgid "Inherited By:"
-msgstr ""
+msgstr "파ìƒ:"
#: doc/tools/make_rst.py
msgid "(overrides %s)"
-msgstr ""
+msgstr "(%s를 ë®ì–´ì”€)"
#: doc/tools/make_rst.py
msgid "Default"
@@ -105,34 +105,38 @@ msgstr "Getter"
#: doc/tools/make_rst.py
msgid ""
"This method should typically be overridden by the user to have any effect."
-msgstr ""
+msgstr "ì´ ë©”ì„œë“œëŠ” ì¼ë°˜ì ìœ¼ë¡œ 사용ìžê°€ 재정ì˜í•´ì•¼ ì˜í–¥ì„ 미칩니다."
#: doc/tools/make_rst.py
msgid ""
"This method has no side effects. It doesn't modify any of the instance's "
"member variables."
-msgstr ""
+msgstr "ì´ ë©”ì„œë“œëŠ” ì¸ìŠ¤í„´ìŠ¤ì˜ ë©¤ë²„ë³€ìˆ˜ë¥¼ 수정하지 않습니다."
#: doc/tools/make_rst.py
msgid ""
"This method accepts any number of arguments after the ones described here."
msgstr ""
+"ì´ ë©”ì„œë“œëŠ” 여기 ì„¤ëª…ëœ ì¸ìˆ˜ ë’¤ì— ì–¼ë§ˆë“ ì§€ ë§Žì€ ì¸ìˆ˜ë¥¼ ë°›ì„ ìˆ˜ 있습니다."
#: doc/tools/make_rst.py
msgid "This method is used to construct a type."
-msgstr ""
+msgstr "ì´ ë©”ì„œë“œëŠ” íƒ€ìž…ì„ ë§Œë“œëŠ” ë° ì‚¬ìš©ë©ë‹ˆë‹¤."
#: doc/tools/make_rst.py
msgid ""
"This method doesn't need an instance to be called, so it can be called "
"directly using the class name."
msgstr ""
+"ì´ ë©”ì„œë“œì˜ í˜¸ì¶œì—는 ì¸ìŠ¤í„´ìŠ¤ê°€ í•„ìš” 없기 ë•Œë¬¸ì— í´ëž˜ìФ ì´ë¦„ì„ í†µí•´ ì§ì ‘ 호출"
+"ë  ìˆ˜ 있습니다."
#: doc/tools/make_rst.py
msgid ""
"This method describes a valid operator to use with this type as left-hand "
"operand."
msgstr ""
+"ì´ ë©”ì„œë“œëŠ” ì´ íƒ€ìž…ì„ ì™¼ìª½ 피연산ìžë¡œ 사용하는 유효한 ì—°ì‚°ìžë¥¼ 알려ì¤ë‹ˆë‹¤."
#: modules/gdscript/doc_classes/@GDScript.xml
msgid "Built-in GDScript functions."
@@ -187,7 +191,6 @@ msgstr ""
"ì§€ì›í•˜ëŠ” 색 ì´ë¦„ì€ [Color]ì—서 ì •ì˜í•œ ìƒìˆ˜ì™€ 같다."
#: modules/gdscript/doc_classes/@GDScript.xml
-#, fuzzy
msgid ""
"Returns the absolute value of parameter [code]s[/code] (i.e. positive "
"value).\n"
@@ -195,13 +198,12 @@ msgid ""
"a = abs(-1) # a is 1\n"
"[/codeblock]"
msgstr ""
-"[code]s[/code] ë§¤ê°œë³€ìˆ˜ì˜ ì ˆëŒ€ê°’ì„ ë¦¬í„´í•œë‹¤(즉, 양수 ê°’)\n"
+"매개변수 [code]s[/code]ì˜ ì ˆëŒ€ê°’ì„ ë¦¬í„´í•œë‹¤(즉, 양수 ê°’)\n"
"[codeblock]\n"
"a = abs(-1) # a 는 1\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml
-#, 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 "
@@ -212,15 +214,16 @@ msgid ""
"c = acos(0.866025)\n"
"[/codeblock]"
msgstr ""
-"[code]s[/code]ì˜ arc cosine ê°’ì„ ëž˜ë””ì–¸ìœ¼ë¡œ 리턴한다. [code]s[/code]ì˜ ì½”ì‚¬"
-"ì¸ ê°ë„를 얻고 싶으면 다ìŒê³¼ ê°™ì´ ì‚¬ìš©í•œë‹¤.\n"
+"[code]s[/code]ì˜ arc cosine ê°’ì„ ë¼ë””안으로 반환한다. 코사ì¸[code]s[/code]ì˜ "
+"ê°ë„를 얻기 위해 사용한다. [code]s[/code]는 [code]-1.0[/code] ì´ìƒ "
+"[code]1.0[/code] ì´í•˜ì´ì–´ì•¼ 한다. 그렇지 않으면 [method acos]는 [constance "
+"NAN]ì„ ë°˜í™˜í•œë‹¤.\n"
"[codeblock]\n"
"# c 는 0.523599 ë˜ëŠ” rad2deg(s) ì„ ì‚¬ìš©í•˜ì—¬ 변환하면 30 ë„\n"
"c = acos(0.866025)\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml
-#, 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 "
@@ -231,15 +234,16 @@ msgid ""
"s = asin(0.5)\n"
"[/codeblock]"
msgstr ""
-"[code]s[/code]ì˜ arc sine ê°’ì„ ëž˜ë””ì–¸ìœ¼ë¡œ 리턴한다. [code]s[/code]ì˜ ì½”ì‚¬ì¸ "
-"ê°ë„를 얻고 싶으면 다ìŒê³¼ ê°™ì´ ì‚¬ìš©í•œë‹¤.\n"
+"[code]s[/code]ì˜ arc sine ê°’ì„ ë¼ë””안으로 반환한다. 사ì¸[code]s[/code]ì˜ ê°ë„"
+"를 얻기 위해 사용한다. [code]s[/code]는 [code]-1.0[/code]ì´ìƒ [code]1.0[/"
+"code]ì´í•˜ ì´ì–´ì•¼ 한다. 그렇지 않으면 [method asin]ì€ [constant NAN]ì„ ë°˜í™˜í•œ"
+"다.\n"
"[codeblock]\n"
"# s 는 0.523599 ë˜ëŠ” rad2deg(s) ì„ ì‚¬ìš©í•˜ì—¬ 변환하면 30 ë„\n"
"a = acos(0.5)\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml
-#, 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 "
@@ -266,13 +270,17 @@ msgid ""
"[/codeblock]"
msgstr ""
"[code]condition[/code] ì´ [code]true[/code] ì¸ì§€ 확ì¸í•œë‹¤. [code]condition[/"
-"code] ì´ [code]false[/code] ì´ë©´, 오류가 ë°œìƒí•˜ê³  사용ìžê°€ 다시 시작할 때까"
-"ì§€ í”„ë¡œê·¸ëž¨ì´ ì •ì§€ëœë‹¤. 디버그 빌드나 ì—디터ì—서 ê²Œìž„ì´ ì‹¤í–‰ë  ë•Œë§Œ 실행ëœ"
-"다. 디버깅 목ì ìœ¼ë¡œë§Œ 사용하고, 개발 ì¤‘ì— ìƒíƒœê°€ [code]true[/code] ì¸ì§€ 확ì¸"
-"할 수 있게 한다.\n"
-"옵션으로 [code]message[/code] ì¸ìˆ˜ë¥¼ 넣으면 \"Assertion failed\" 메시지를 ë³´"
-"여준다. assertionì´ ì‹¤íŒ¨í•œ ì›ì¸ì— 대한 추가ì ì¸ ìƒì„¸ 정보를 제공하려면 ì´ê²ƒ"
-"ì„ ì‚¬ìš©í•˜ë©´ ëœë‹¤.\n"
+"code] ì´ [code]false[/code] ì´ë©´ 오류가 ë°œìƒí•œë‹¤. ì—디터ì—서 실행한 경우, 실"
+"í–‰ ì¤‘ì¸ í”„ë¡œì íŠ¸ëŠ” 사용ìžê°€ 재개할 때까지 ì •ì§€ëœë‹¤. ì´ê²ƒì€ 프로ì íЏ 개발ìžë‚˜ "
+"애드온 사용ìžì—게 [method push_error]보다 ë” ê°•í•œ ë°©ì‹ìœ¼ë¡œ 오류를 알리는 ë° "
+"ì‚¬ìš©ë  ìˆ˜ 있다. \n"
+"[b]주ì˜:[/b] ì„±ëŠ¥ì„ ìœ„í•´, [method assert]ì˜ ì½”ë“œëŠ” 디버그 빌드나 프로ì íŠ¸ë¥¼ "
+"ì—디터ì—서 실행한 경우ì—ë§Œ 수행ëœë‹¤. [method assert] í˜¸ì¶œì— ë”°ë¼ ìž‘ì—… ë‚´ìš©ì´ "
+"달ë¼ì§€ëŠ” 코드를 작성해서는 안 ëœë‹¤. 그렇지 않으면, 릴리즈 모드로 내보낸 프로"
+"ì íŠ¸ê°€ 다르게 ìž‘ë™í•  것ì´ë‹¤.\n"
+"옵션으로 [code]message[/code] ì¸ìˆ˜ë¥¼ 넣으면, 기본 \"Assertion failed\" 메시지"
+"ì— ì¶”ê°€ë¡œ 표시ëœë‹¤. assertionì´ ì‹¤íŒ¨í•œ ì›ì¸ì— 대한 추가ì ì¸ ìƒì„¸ 정보를 제공"
+"하려면 ì´ê²ƒì„ 사용하면 ëœë‹¤.\n"
"[codeblock]\n"
"# í•­ìƒ ì†ë„ê°€ 0ì—서 20 사ì´ì´ê¸¸ ì›í•œë‹¤ë©´\n"
"speed = -10\n"
@@ -355,6 +363,13 @@ msgid ""
"[/codeblock]\n"
"See also [method floor], [method round], [method stepify], and [int]."
msgstr ""
+"[code]s[/code]를 올림하여, [code]s[/code]보다 작지 ì•Šì€ ê°€ìž¥ ìž‘ì€ ì •ìˆ˜ë¥¼ ë°˜"
+"환.\n"
+"[codeblock]\n"
+"a = ceil(1.45) # a 는 2.0\n"
+"a = ceil(1.001) # a 는 2.0\n"
+"[/codeblock]\n"
+"관련 정보 [method floor], [method round], [method stepify], [int]."
#: modules/gdscript/doc_classes/@GDScript.xml
msgid ""
@@ -367,6 +382,13 @@ msgid ""
"[/codeblock]\n"
"This is the inverse of [method ord]."
msgstr ""
+"유니코드 ê°’(ASCII코드와 호환ë¨)ì— í•´ë‹¹í•˜ëŠ” 문ìžë¥¼ String으로 반환.\n"
+"[codeblock]\n"
+"a = char(65) # a 는 \"A\"\n"
+"a = char(65 + 32) # a 는 \"a\"\n"
+"a = char(8364) # a 는 \"€\"\n"
+"[/codeblock]\n"
+"[method ord]와 ë°˜ëŒ€ì˜ ê¸°ëŠ¥ì„ í•˜ëŠ” 함수ì´ë‹¤."
#: modules/gdscript/doc_classes/@GDScript.xml
msgid ""
@@ -378,6 +400,13 @@ msgid ""
"a = clamp(15, 1, 20) # a is 15\n"
"[/codeblock]"
msgstr ""
+"[code]value[/code]ì˜ ë²”ìœ„ë¥¼ 제한하여 [code]min[/code]보다 작지 않고, "
+"[code]max[/code]보다 í¬ì§€ ì•Šì€ ê°’ì„ ë°˜í™˜.\n"
+"[codeblock]\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
msgid ""
@@ -392,9 +421,18 @@ msgid ""
"print(a.length())\n"
"[/codeblock]"
msgstr ""
+"íƒ€ìž…ì„ ë³€í™˜í•˜ëŠ” 함수. [code]type[/code] 매개변수는 [enum Variant.Type] ì˜ ê°’"
+"ì„ ë°›ìŒ.\n"
+"[codeblock]\n"
+"a = Vector2(1, 0)\n"
+"# 1ì´ ì¶œë ¥ë¨\n"
+"print(a.length())\n"
+"a = convert(a, TYPE_STRING)\n"
+"# \"(1, 0)\"문ìžì—´ì˜ 길ì´ê°€ 6ì´ê¸° ë•Œë¬¸ì— 6ì´ ì¶œë ¥ë¨\n"
+"print(a.length())\n"
+"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml
-#, fuzzy
msgid ""
"Returns the cosine of angle [code]s[/code] in radians.\n"
"[codeblock]\n"
@@ -402,34 +440,31 @@ msgid ""
"a = cos(PI) # a is -1.0\n"
"[/codeblock]"
msgstr ""
-"[code]s[/code] ë§¤ê°œë³€ìˆ˜ì˜ ì ˆëŒ€ê°’ì„ ë¦¬í„´í•œë‹¤(즉, 양수 ê°’)\n"
+"ë¼ë””안 ê°ë„ [code]s[/code] ì˜ ì½”ì‚¬ì¸ì„ 반환.\n"
"[codeblock]\n"
-"# a 는 1\n"
-"a = abs(-1)\n"
+"a = cos(TAU) # a 는 1.0\n"
+"a = cos(PI) # a 는 -1.0\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml
-#, fuzzy
msgid ""
"Returns the hyperbolic cosine of [code]s[/code] in radians.\n"
"[codeblock]\n"
"print(cosh(1)) # Prints 1.543081\n"
"[/codeblock]"
msgstr ""
-"[code]s[/code] ë§¤ê°œë³€ìˆ˜ì˜ ì ˆëŒ€ê°’ì„ ë¦¬í„´í•œë‹¤(즉, 양수 ê°’)\n"
+"ë¼ë””안 ê°ë„ [code]s[/code]ì˜ ìŒê³¡ì½”사ì¸(hyperbolic cosine)ì„ ë°˜í™˜.\n"
"[codeblock]\n"
-"# a 는 1\n"
-"a = abs(-1)\n"
+"print(cosh(1)) # 1.543081ì´ ì¶œë ¥ë¨\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml
-#, fuzzy
msgid "Converts from decibels to linear energy (audio)."
msgstr "ë°ì‹œë²¨ì—서 선형 ì—너지(오디오)로 변환합니다."
#: modules/gdscript/doc_classes/@GDScript.xml
msgid "Deprecated alias for [method step_decimals]."
-msgstr ""
+msgstr "[method step_decimals]ì˜ ë” ì´ìƒ 사용ë˜ì§€ 않는 별칭."
#: modules/gdscript/doc_classes/@GDScript.xml
msgid ""
@@ -441,11 +476,19 @@ msgid ""
"a = dectime(60, 10, 0.1)) # a is 59.0\n"
"[/codeblock]"
msgstr ""
+"[b]주ì˜:[/b] [code]dectime[/code] 는 ë” ì´ìƒ 사용ë˜ì§€ 않으며 Godot 4.0ì—서 ì‚­"
+"ì œë  ê²ƒ 입니다. 대신, [method move_toward]를 사용하세요.\n"
+"\n"
+"[code]value[/code]ì—서 [code]step[/code] * [code]amount[/code]를 뺀 ê°’ì„ ë°˜"
+"환.\n"
+"[codeblock]\n"
+"a = dectime(60, 10, 0.1)) # a 는 59.0\n"
+"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml
msgid ""
"Compares two values by checking their actual contents, recursing into any "
-"`Array` or `Dictionary` up to its deepest level.\n"
+"[Array] or [Dictionary] up to its deepest level.\n"
"This compares to [code]==[/code] in a number of ways:\n"
"- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/"
"code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] "
@@ -492,7 +535,7 @@ msgid ""
"- 1.0: Linear\n"
"- Greater than 1.0 (exclusive): Ease in\n"
"[/codeblock]\n"
-"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.4/img/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/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]."
@@ -1223,7 +1266,7 @@ msgid ""
"[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/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/img/"
"smoothstep_ease_comparison.png]Comparison between smoothstep() and ease(x, "
"-1.6521) return values[/url]"
msgstr ""
@@ -3507,6 +3550,12 @@ msgstr ""
#: doc/classes/@GlobalScope.xml
msgid ""
+"Hints that an integer property is a bitmask using the optionally named 2D "
+"navigation layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml
+msgid ""
"Hints that an integer property is a bitmask using the optionally named 3D "
"render layers."
msgstr ""
@@ -3519,6 +3568,12 @@ msgstr ""
#: doc/classes/@GlobalScope.xml
msgid ""
+"Hints that an integer property is a bitmask using the optionally named 3D "
+"navigation layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml
+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]."
@@ -8497,7 +8552,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/AStar.xml
+#: doc/classes/AStar.xml doc/classes/AStar2D.xml
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[/"
@@ -8696,7 +8751,10 @@ msgid ""
msgstr ""
#: doc/classes/AStar2D.xml
-msgid "Returns whether there is a connection/segment between the given points."
+msgid ""
+"Returns whether there is a connection/segment between the given points. 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/AStar2D.xml
@@ -8713,10 +8771,6 @@ msgid ""
msgstr ""
#: doc/classes/AStar2D.xml
-msgid "Deletes the segment between the given points."
-msgstr ""
-
-#: doc/classes/AStar2D.xml
msgid ""
"Returns the closest position to [code]to_position[/code] that resides inside "
"a segment between two connected points.\n"
@@ -8901,7 +8955,9 @@ msgid ""
"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."
+"transmit audio over the network. When capturing audio data from a "
+"microphone, the format of the samples will be stereo 32-bit floating point "
+"PCM."
msgstr ""
#: doc/classes/AudioEffectCapture.xml
@@ -13751,7 +13807,7 @@ msgid ""
msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
-#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/Navigation2D.xml
msgid "Returns the object's [RID]."
msgstr ""
@@ -19269,11 +19325,15 @@ msgid ""
msgstr ""
#: doc/classes/CurveTexture.xml
-msgid "The [code]curve[/code] rendered onto the texture."
-msgstr ""
+#, fuzzy
+msgid "The [Curve] that is rendered onto the texture."
+msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ì‚¬ì¸ ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤."
#: doc/classes/CurveTexture.xml
-msgid "The width of the texture."
+msgid ""
+"The width of the texture (in pixels). Higher values make it possible to "
+"represent high-frequency data better (such as sudden direction changes), at "
+"the cost of increased generation time and memory usage."
msgstr ""
#: doc/classes/CylinderMesh.xml
@@ -19559,6 +19619,13 @@ msgid "Returns the list of keys in the [Dictionary]."
msgstr ""
#: doc/classes/Dictionary.xml
+msgid ""
+"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, "
+"duplicate keys will not be copied over, unless [code]overwrite[/code] is "
+"[code]true[/code]."
+msgstr ""
+
+#: doc/classes/Dictionary.xml
#, fuzzy
msgid "Returns the number of keys in the dictionary."
msgstr "ë‘ ë²¡í„°ì˜ ë‚˜ë¨¸ì§€ë¥¼ 반환합니다."
@@ -21560,9 +21627,23 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide a state data you want to be saved, like view "
+"position, grid settings, folding, etc. 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). This data is automatically saved for "
+"each scene in an [code]editstate[/code] file in the editor metadata folder. "
+"If you want to store global (scene-independent) editor data for your plugin, "
+"you can use [method get_window_layout] instead.\n"
+"Use [method set_state] to restore your saved state.\n"
+"[b]Note:[/b] This method should not be used to save important settings that "
+"should persist with the project.\n"
+"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be "
+"stored and restored correctly.\n"
+"[codeblock]\n"
+"func get_state():\n"
+" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n"
+" return state\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -21573,9 +21654,18 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide the GUI layout of the plugin or any other "
+"data you want to be stored. 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). The data is stored in the "
+"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n"
+"Use [method set_window_layout] to restore your saved layout.\n"
+"[codeblock]\n"
+"func get_window_layout(configuration):\n"
+" configuration.set_value(\"MyPlugin\", \"window_position\", $Window."
+"position)\n"
+" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -21688,11 +21778,30 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the state saved by [method get_state]."
+msgid ""
+"Restore the state saved by [method get_state]. This method is called when "
+"the current scene tab is changed in the editor.\n"
+"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise "
+"it will not be recognized and this method will not be called.\n"
+"[codeblock]\n"
+"func set_state(data):\n"
+" zoom = data.get(\"zoom\", 1.0)\n"
+" preferred_color = data.get(\"my_color\", Color.white)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the plugin GUI layout saved by [method get_window_layout]."
+msgid ""
+"Restore the plugin GUI layout and data saved by [method get_window_layout]. "
+"This method is called for every plugin on editor startup. Use the provided "
+"[code]configuration[/code] file to read your saved data.\n"
+"[codeblock]\n"
+"func set_window_layout(configuration):\n"
+" $Window.position = configuration.get_value(\"MyPlugin\", "
+"\"window_position\", Vector2())\n"
+" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", "
+"Color.white)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -26339,7 +26448,8 @@ msgid ""
"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])."
+"at fixed steps (see [member width]). See also [GradientTexture2D] and "
+"[CurveTexture]."
msgstr ""
#: doc/classes/GradientTexture.xml
@@ -26361,7 +26471,8 @@ msgid ""
"repeat] types using colors obtained from the gradient. 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] and [member height])."
+"[member width] and [member height]). See also [GradientTexture] and "
+"[CurveTexture]."
msgstr ""
#: doc/classes/GradientTexture2D.xml
@@ -27169,6 +27280,12 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+msgid ""
+"If [code]true[/code], this GridMap uses cell navmesh resources to create "
+"navigation regions."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid "If [code]true[/code], grid items are centered on the X axis."
msgstr ""
@@ -27219,6 +27336,10 @@ msgid "The assigned [MeshLibrary]."
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+msgid "The navigation layers the GridMap generates its navigation regions in."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
"Overrides the default friction and bounce physics properties for the whole "
"[GridMap]."
@@ -28442,7 +28563,7 @@ msgid ""
" # 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 body = to_json({\"name\": \"Godette\"})\n"
" error = http_request.request(\"https://httpbin.org/post\", [], true, "
"HTTPClient.METHOD_POST, body)\n"
" if error != OK:\n"
@@ -29617,7 +29738,7 @@ msgstr ""
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 "
+"([member 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 "
@@ -29766,10 +29887,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Returns the mouse mode. See the constants for more information."
-msgstr ""
-
-#: doc/classes/Input.xml
msgid ""
"Gets an input vector by specifying four actions for the positive and "
"negative X and Y axes.\n"
@@ -29963,24 +30080,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Sets the mouse mode. See the constants for more information."
-msgstr ""
-
-#: doc/classes/Input.xml
-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
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 "
@@ -30016,6 +30115,24 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
+msgid "Controls the mouse mode. See [enum MouseMode] for more information."
+msgstr ""
+
+#: doc/classes/Input.xml
+msgid ""
+"If [code]true[/code], similar input events sent by the operating system are "
+"accumulated. 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 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
msgid "Emitted when a joypad device has been connected or disconnected."
msgstr ""
@@ -30323,8 +30440,8 @@ msgstr ""
#: doc/classes/InputEventJoypadButton.xml
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]."
+"Represents the pressure the user puts on the button with their finger, if "
+"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]."
msgstr ""
#: doc/classes/InputEventJoypadMotion.xml
@@ -30587,9 +30704,9 @@ 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 "
+"at most. If you need more precise input reporting, set [member Input."
+"use_accumulated_input] to [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."
@@ -31077,7 +31194,18 @@ msgid ""
"[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."
+"fixed_column_width] greater than zero to wrap the text.\n"
+"[b]Incremental search:[/b] Like [PopupMenu] and [Tree], [ItemList] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/ItemList.xml
@@ -34829,12 +34957,18 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Returns the override [Material] for a surface of the [Mesh] resource.\n"
+"[b]Note:[/b] This function only returns [i]override[/i] materials associated "
+"with this [MeshInstance]. Consider using [method get_active_material] or "
+"[method Mesh.surface_get_material] to get materials associated with the "
+"[Mesh] resource."
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the number of surface materials."
-msgstr ""
+#, fuzzy
+msgid "Returns the number of surface override materials."
+msgstr "ë‘ ë²¡í„°ì˜ ë‚˜ë¨¸ì§€ë¥¼ 반환합니다."
#: doc/classes/MeshInstance.xml
msgid ""
@@ -34870,7 +35004,10 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Sets the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Sets the override [Material] for the specified surface of the [Mesh] "
+"resource. This material is associated with this [MeshInstance] rather than "
+"with the [Mesh] resource."
msgstr ""
#: doc/classes/MeshInstance.xml
@@ -34901,9 +35038,10 @@ msgstr ""
#: doc/classes/MeshInstance2D.xml
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\"."
+"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be "
+"automatically created from an existing [Sprite] via a tool in the editor "
+"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to "
+"MeshInstance2D[/b] at the top of the 2D editor viewport."
msgstr ""
#: doc/classes/MeshInstance2D.xml
@@ -35668,6 +35806,9 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"Provides navigation and pathfinding within a collection of "
"[NavigationMesh]es. By default, these will be automatically collected from "
"child [NavigationMeshInstance] nodes. In addition to basic pathfinding, this "
@@ -35708,7 +35849,15 @@ msgid ""
msgstr ""
#: doc/classes/Navigation.xml
+#, fuzzy
+msgid "Returns the [RID] of the navigation map on the [NavigationServer]."
+msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ì‚¬ì¸ ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤."
+
+#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"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, "
@@ -35730,16 +35879,31 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation.get_simple_path] path query."
+msgstr ""
+
+#: doc/classes/Navigation.xml
+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/Navigation.xml doc/classes/Navigation2DServer.xml
+#: doc/classes/NavigationServer.xml
+msgid ""
+"Emitted when a navigation map is updated, when a region moves or is modified."
+msgstr ""
+
#: doc/classes/Navigation2D.xml
msgid "2D navigation and pathfinding node."
msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -35759,6 +35923,9 @@ msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -35768,6 +35935,12 @@ msgstr ""
msgid "The XY plane cell size to use for fields."
msgstr ""
+#: doc/classes/Navigation2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation2D.get_simple_path] path query."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml
msgid "Server interface for low-level 2D navigation access."
msgstr ""
@@ -35784,8 +35957,12 @@ msgid ""
"through scripts.\n"
"For two regions to be connected to each other, they must share a similar "
"edge. An edge is considered connected to another if both of its two vertices "
-"are at a distance less than [member Navigation.edge_connection_margin] to "
-"the respective other edge's vertex.\n"
+"are at a distance less than navigation map [code]edge_connection_margin[/"
+"code] to the respective other edge's vertex.\n"
+"You may assign navigation layers to regions with [method Navigation2DServer."
+"region_set_navigation_layers], which then can be checked upon when "
+"requesting a path with [method Navigation2DServer.map_get_path]. This allows "
+"allowing or forbidding some areas to 2D objects.\n"
"To use the collision avoidance system, you may use agents. You can set an "
"agent's target velocity, then the servers will emit a callback with a "
"modified velocity.\n"
@@ -35813,7 +35990,17 @@ msgid "Returns [code]true[/code] if the map got changed the previous frame."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Callback called at the end of the RVO process."
+msgid ""
+"Callback called at the end of the RVO process. If a callback is created "
+"manually and the agent is placed on a navigation map it will calculate "
+"avoidance for the agent and dispatch the calculated [code]safe_velocity[/"
+"code] to the [code]receiver[/code] object with a signal to the chosen "
+"[code]method[/code] name.\n"
+"[b]Note:[/b] Created callbacks are always processed independently of the "
+"SceneTree state as long as the agent is on a navigation map and not freed. "
+"To disable the dispatch of a callback from an agent use [method "
+"agent_set_callback] again with a [code]null[/code] object as the "
+"[code]receiver[/code]."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -35874,15 +36061,55 @@ msgid "Destroys the given RID."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns all created navigation map [RID]s on the NavigationServer. This "
+"returns both 2D and 3D created navigation maps as there is technically no "
+"distinction between them."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Create a new map."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"This function immediately forces synchronization of the specified navigation "
+"[code]map[/code] [RID]. By default navigation maps are only synchronized at "
+"the end of each physics frame. This function can be used to immediately "
+"(re)calculate all the navigation meshes and region connections of the "
+"navigation map. This makes it possible to query a navigation path for a "
+"changed map immediately and in the same frame (multiple times if needed).\n"
+"Due to technical restrictions the current NavigationServer command queue "
+"will be flushed. This means all already queued update commands for this "
+"physics frame will be executed, even those intended for other maps, regions "
+"and agents not part of the specified map. The expensive computation of the "
+"navigation meshes and region connections of a map will only be done for the "
+"specified map. Other maps will receive the normal synchronization at the end "
+"of the physics frame. Should the specified map receive changes after the "
+"forced update it will update again as well when the other maps receive their "
+"update.\n"
+"Avoidance processing and dispatch of the [code]safe_velocity[/code] signals "
+"is untouched by this function and continues to happen for all maps and "
+"agents at the end of the physics frame.\n"
+"[b]Note:[/b] With great power comes great responsibility. This function "
+"should only be used by users that really know what they are doing and have a "
+"good reason for it. Forcing an immediate update of a navigation map requires "
+"locking the NavigationServer and flushing the entire NavigationServer "
+"command queue. Not only can this severely impact the performance of a game "
+"but it can also introduce bugs if used inappropriately without much "
+"foresight."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns all navigation agents [RID]s that are currently assigned to the "
"requested navigation [code]map[/code]."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
#, fuzzy
msgid "Returns the map cell size."
@@ -35907,7 +36134,10 @@ msgid ""
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Returns the navigation path to reach the destination from the origin."
+msgid ""
+"Returns the navigation path to reach the destination from the origin. "
+"[code]navigation_layers[/code] is a bitmask of all region layers that are "
+"allowed to be in the path."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -35926,6 +36156,12 @@ msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ì½”ì‚¬ì¸ ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤."
msgid "Sets the map active."
msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ì•„í¬ì‚¬ì¸ ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤."
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/"
+"b] Currently not implemented."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Set the map cell size used to weld the navigation mesh polygons."
msgstr ""
@@ -35941,15 +36177,78 @@ msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"Returns the ending point of a connection door. [code]connection[/code] is an "
+"index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns the starting point of a connection door. [code]connection[/code] is "
+"an index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns how many connections this [code]region[/code] has with other regions "
+"in the map."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]."
+msgstr "ë‘ ë²¡í„°ì˜ ë‚˜ë¨¸ì§€ë¥¼ 반환합니다."
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns the navigation map [RID] the requested [code]region[/code] is "
"currently assigned to."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
#, fuzzy
+msgid "Returns the region's navigation layers."
+msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ì‚¬ì¸ ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤."
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]."
+msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ì‚¬ì¸ ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤."
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns [code]true[/code] if the provided [code]point[/code] in world space "
+"is currently owned by the provided navigation [code]region[/code]. Owned in "
+"this context means that one of the region's navigation mesh polygon faces "
+"has a possible position at the closest distance to this point compared to "
+"all other navigation meshes from other navigation regions that are also "
+"registered on the navigation map of the provided region.\n"
+"If multiple navigation meshes have positions at equal distance the "
+"navigation region whose polygons are processed first wins the ownership. "
+"Polygons are processed in the same order that navigation regions were "
+"registered on the NavigationServer.\n"
+"[b]Note:[/b] If navigation meshes from different navigation regions overlap "
+"(which should be avoided in general) the result might not be what is "
+"expected."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]."
+msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ì‚¬ì¸ ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤."
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
msgid "Sets the map for the region."
msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ì‚¬ì¸ ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤."
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method Navigation2DServer.map_get_path])."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
#, fuzzy
msgid "Sets the navigation mesh for the region."
@@ -35959,6 +36258,11 @@ msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ë°˜ëŒ€ ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤."
msgid "Sets the global transformation for the region."
msgstr ""
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]."
+msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ì‚¬ì¸ ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤."
+
#: doc/classes/NavigationAgent.xml
msgid "3D agent used in navigation for collision avoidance."
msgstr ""
@@ -35968,9 +36272,16 @@ msgid ""
"3D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationAgent] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World] navigation map. If this node is a child of a [Navigation] "
+"node it will register to the navigation map of the navigation node or the "
+"function [method set_navigation] can be used to set the navigation node "
+"directly. [NavigationAgent] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -35988,7 +36299,15 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-msgid "Returns the path from start to finish in global coordinates."
+msgid ""
+"Returns this agent's current path from start to finish in global "
+"coordinates. The path only updates when the target location is changed or "
+"the agent requires a repath. The path array is not intended to be used in "
+"direct path movement as the agent has its own internal path logic that would "
+"get corrupted by changing the path array manually. Use the intended [method "
+"get_next_location] once every physics frame to receive the next path point "
+"for the agents movement as this function also updates the internal path "
+"logic."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -36004,11 +36323,24 @@ msgid ""
"system."
msgstr ""
-#: doc/classes/NavigationAgent.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"Returns a [Vector3] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the origin of the agent's parent."
+"Returns the [RID] of the navigation map for this NavigationAgent node. This "
+"function returns always the map set on the NavigationAgent node and not the "
+"map of the abstract agent on the NavigationServer. If the agent map is "
+"changed directly with the NavigationServer API the NavigationAgent node will "
+"not be aware of the map change. Use [method set_navigation_map] to change "
+"the navigation map for the NavigationAgent and also update the agent on the "
+"NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
+"Returns the next location in global coordinates that can be moved to, making "
+"sure that there are no static objects in the way. If the agent does not have "
+"a navigation path, it will return the position of the agent's parent. The "
+"use of this function once every physics frame is required to update the "
+"internal path logic of the NavigationAgent."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -36050,6 +36382,12 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"Sets the [RID] of the navigation map this NavigationAgent node should use "
+"and also updates the [code]agent[/code] on the NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"Sets the user desired final location. This will clear the current navigation "
"path."
msgstr ""
@@ -36062,7 +36400,13 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml
-msgid "The agent height offset to match the navigation mesh height."
+msgid ""
+"The NavigationAgent height offset is subtracted from the y-axis value of any "
+"vector path position for this NavigationAgent. The NavigationAgent height "
+"offset does not change or influence the navigation mesh or pathfinding query "
+"result. Additional navigation maps that use regions with navigation meshes "
+"that the developer baked with appropriate agent radius or height values are "
+"required to support different-sized agents."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -36089,26 +36433,53 @@ msgstr ""
msgid "The maximum speed that an agent can move."
msgstr ""
+#: doc/classes/NavigationAgent.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "The distance to search for other agents."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"The distance threshold before a path point is considered to be reached. This "
+"will allow an agent to not have to hit a path point on the path exactly, but "
+"in the area. If this value is set to high the NavigationAgent will skip "
+"points on the path which can lead to leaving the navigation mesh. If this "
+"value is set to low the NavigationAgent will be stuck in a repath loop cause "
+"it will constantly overshoot or undershoot the distance to the next point on "
+"each physics frame update."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"The maximum distance the agent is allowed away from the ideal path to the "
"final location. This can happen due to trying to avoid collisions. When the "
"maximum distance is exceeded, it recalculates the ideal path."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-msgid "The radius of the agent."
+msgid ""
+"The radius of the avoidance agent. This is the \"body\" of the avoidance "
+"agent and not the avoidance maneuver starting radius (which is controlled by "
+"[member neighbor_dist]).\n"
+"Does not affect normal pathfinding. To change an actor's pathfinding radius "
+"bake [NavigationMesh] resources with a different [member NavigationMesh."
+"agent_radius] property and use different navigation maps for each actor size."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"The distance threshold before a target is considered to be reached. This "
-"will allow an agent to not have to hit a point on the path exactly, but in "
-"the area."
+"The distance threshold before the final target point is considered to be "
+"reached. This will allow an agent to not have to hit the point of the final "
+"target exactly, but only the area. If this value is set to low the "
+"NavigationAgent will be stuck in a repath loop cause it will constantly "
+"overshoot or undershoot the distance to the final target point on each "
+"physics frame update."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -36151,9 +36522,16 @@ msgid ""
"2D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationAgent2D] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World2D] navigation map. If this node is a child of a "
+"[Navigation2D] node it will register to the navigation map of the navigation "
+"node or the function [method set_navigation] can be used to set the "
+"navigation node directly. [NavigationAgent2D] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent2D.xml
@@ -36170,13 +36548,6 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent2D.xml
-msgid ""
-"Returns a [Vector2] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the position of the agent's parent."
-msgstr ""
-
-#: doc/classes/NavigationAgent2D.xml
#, fuzzy
msgid "Returns the [RID] of this agent on the [Navigation2DServer]."
msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ì‚¬ì¸ ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤."
@@ -36197,6 +36568,13 @@ msgid ""
"only be enabled on agents that currently require it."
msgstr ""
+#: doc/classes/NavigationAgent2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent2D] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationMesh.xml
msgid "A mesh to approximate the walkable areas and obstacles."
msgstr ""
@@ -36227,8 +36605,8 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
-"Returns whether the specified [code]bit[/code] of the [member geometry/"
-"collision_mask] is set."
+"Returns whether the specified [code]bit[/code] of the [member "
+"geometry_collision_mask] is set."
msgstr ""
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
@@ -36251,9 +36629,9 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/"
-"code] in the [member geometry/collision_mask].\n"
+"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]."
+"code] in the [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
@@ -36267,14 +36645,14 @@ 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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36286,7 +36664,7 @@ 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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36314,13 +36692,17 @@ msgstr ""
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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
-"If [code]true[/code], marks walkable spans as not walkable if the clearance "
-"above the span is less than [member agent/height]."
+"If the baking [AABB] has a volume the navigation mesh baking will be "
+"restricted to its enclosing area."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+msgid "The position offset applied to the [member filter_baking_aabb] [AABB]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36330,13 +36712,19 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]true[/code], marks non-walkable spans as walkable if their maximum "
-"is within [member agent/max_climb] of a walkable neighbor."
+"is within [member agent_max_climb] of a walkable neighbor."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+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
msgid ""
"The physics layers to scan for static colliders.\n"
-"Only used when [member geometry/parsed_geometry_type] is [constant "
+"Only used when [member geometry_parsed_geometry_type] is [constant "
"PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]."
msgstr ""
@@ -36355,7 +36743,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"The name of the group to scan for geometry.\n"
-"Only used when [member geometry/source_geometry_mode] is [constant "
+"Only used when [member geometry_source_geometry_mode] is [constant "
"SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant "
"SOURCE_GEOMETRY_GROUPS_EXPLICIT]."
msgstr ""
@@ -36418,7 +36806,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Parses [StaticBody] colliders as geometry. The collider should be in any of "
-"the layers specified by [member geometry/collision_mask]."
+"the layers specified by [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36440,13 +36828,13 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Scans nodes in a group and their child nodes recursively for geometry. The "
-"group is specified by [member geometry/source_group_name]."
+"group is specified by [member geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Uses nodes in a group for geometry. The group is specified by [member "
-"geometry/source_group_name]."
+"geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36488,7 +36876,15 @@ msgid ""
"geometry for walkable terrain suitable to [NavigationMesh] agent properties "
"by creating a voxel world around the meshes bounding area.\n"
"The finalized navigation mesh is then returned and stored inside the "
-"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes."
+"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] "
+"nodes.\n"
+"[b]Note:[/b] Using meshes to not only define walkable surfaces but also "
+"obstruct navigation baking does not always work. The navigation baking has "
+"no concept of what is a geometry \"inside\" when dealing with mesh source "
+"geometry and this is intentional. Depending on current baking parameters, as "
+"soon as the obstructing mesh is large enough to fit a navigation mesh area "
+"inside, the baking will generate navigation mesh areas that are inside the "
+"obstructing source geometry mesh."
msgstr ""
#: doc/classes/NavigationMeshGenerator.xml
@@ -36496,8 +36892,8 @@ msgid ""
"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child "
"nodes under the provided [code]root_node[/code] or a specific group of nodes "
"for potential source geometry. The parse behavior can be controlled with the "
-"[member NavigationMesh.geometry/parsed_geometry_type] and [member "
-"NavigationMesh.geometry/source_geometry_mode] properties on the "
+"[member NavigationMesh.geometry_parsed_geometry_type] and [member "
+"NavigationMesh.geometry_source_geometry_mode] properties on the "
"[NavigationMesh] resource."
msgstr ""
@@ -36515,8 +36911,21 @@ msgstr ""
#: doc/classes/NavigationMeshInstance.xml
msgid ""
"An instance of a [NavigationMesh]. It tells the [Navigation] node what can "
-"be navigated and what cannot, based on the [NavigationMesh] resource. This "
-"should be a child of a [Navigation] node."
+"be navigated and what cannot, based on the [NavigationMesh] resource.\n"
+"By default this node will register to the default [World] navigation map. If "
+"this node is a child of a [Navigation] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method NavigationServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The cost of entering this region from another region can be controlled with "
+"the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The cost of traveling distances inside this region can be controlled with "
+"the [member travel_cost] multiplier."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
@@ -36545,10 +36954,34 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding enters this region's navmesh from another regions navmesh "
+"the [code]enter_cost[/code] value is added to the path distance for "
+"determining the shortest path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationMesh] "
+"belongs to. On path requests with [method NavigationServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
msgid "The [NavigationMesh] resource to use."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding moves inside this region's navmesh the traveled distances "
+"are multiplied with [code]travel_cost[/code] for determining the shortest "
+"path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
msgid "Notifies when the navigation mesh bake operation is completed."
msgstr ""
@@ -36565,7 +36998,9 @@ msgid ""
"3D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationObstacle] is physics safe."
+"[NavigationObstacle] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle.xml
@@ -36606,7 +37041,9 @@ msgid ""
"2D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationObstacle2D] is physics safe."
+"[NavigationObstacle2D] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle2D.xml
@@ -36687,6 +37124,14 @@ msgstr ""
#: doc/classes/NavigationPolygon.xml
msgid ""
+"Returns the [NavigationMesh] resulting from this navigation polygon. This "
+"navmesh can be used to update the navmesh of a region with the [method "
+"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server "
+"behind the scene)."
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml
+msgid ""
"Returns a [PoolVector2Array] containing the vertices of an outline that was "
"created in the editor or by script."
msgstr ""
@@ -36723,6 +37168,30 @@ msgid ""
msgstr ""
#: doc/classes/NavigationPolygonInstance.xml
+msgid "A region of the 2D navigation map."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A region of the navigation map. It tells the [Navigation2DServer] what can "
+"be navigated and what cannot, based on its [NavigationPolygon] resource.\n"
+"By default this node will register to the default [World2D] navigation map. "
+"If this node is a child of a [Navigation2D] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The pathfinding cost of entering this region from another region can be "
+"controlled with the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The pathfinding cost of traveling distances inside this region can be "
+"controlled with the [member travel_cost] multiplier."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
msgid ""
"Returns the [RID] of this region on the [Navigation2DServer]. Combined with "
"[method Navigation2DServer.map_get_closest_point_owner] can be used to "
@@ -36730,6 +37199,22 @@ msgid ""
"navigation map."
msgstr ""
+#: doc/classes/NavigationPolygonInstance.xml
+msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationPolygon] "
+"belongs to. On path requests with [method Navigation2DServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid "The [NavigationPolygon] resource to use."
+msgstr ""
+
#: doc/classes/NavigationServer.xml
msgid "Server interface for low-level 3D navigation access."
msgstr ""
@@ -36809,6 +37294,12 @@ msgid "Bakes the navigation mesh."
msgstr ""
#: doc/classes/NavigationServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method NavigationServer.map_get_path])."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
msgid "Control activation of this server."
msgstr ""
@@ -38400,13 +38891,19 @@ msgstr ""
#: doc/classes/Node.xml
msgid ""
"Emitted when a child node enters the scene tree, either because it entered "
-"on its own or because this node entered with it."
+"on its own or because this node entered with it.\n"
+"This signal is emitted [i]after[/i] the child node's own [constant "
+"NOTIFICATION_ENTER_TREE] and [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
msgid ""
-"Emitted when a child node exits the scene tree, either because it exited on "
-"its own or because this node exited."
+"Emitted when a child node is about to exit the scene tree, either because it "
+"is being removed or freed directly, or because this node is exiting the "
+"tree.\n"
+"When this signal is received, the child [code]node[/code] is still in the "
+"tree and valid. This signal is emitted [i]after[/i] the child node's own "
+"[signal tree_exiting] and [constant NOTIFICATION_EXIT_TREE]."
msgstr ""
#: doc/classes/Node.xml
@@ -38418,7 +38915,10 @@ msgid "Emitted when the node is renamed."
msgstr ""
#: doc/classes/Node.xml
-msgid "Emitted when the node enters the tree."
+msgid ""
+"Emitted when the node enters the tree.\n"
+"This signal is emitted [i]after[/i] the related [constant "
+"NOTIFICATION_ENTER_TREE] notification."
msgstr ""
#: doc/classes/Node.xml
@@ -38428,15 +38928,21 @@ msgstr ""
#: doc/classes/Node.xml
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)."
+"the right place for de-initialization (or a \"destructor\", if you will).\n"
+"This signal is emitted [i]before[/i] the related [constant "
+"NOTIFICATION_EXIT_TREE] notification."
msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node enters a [SceneTree]."
+msgid ""
+"Notification received when the node enters a [SceneTree].\n"
+"This notification is emitted [i]before[/i] the related [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node is about to exit a [SceneTree]."
+msgid ""
+"Notification received when the node is about to exit a [SceneTree].\n"
+"This notification is emitted [i]after[/i] the related [signal tree_exiting]."
msgstr ""
#: doc/classes/Node.xml
@@ -38697,7 +39203,13 @@ msgid "Rotation in degrees, relative to the node's parent."
msgstr ""
#: doc/classes/Node2D.xml
-msgid "The node's scale. Unscaled value: [code](1, 1)[/code]."
+msgid ""
+"The node's scale. Unscaled value: [code](1, 1)[/code].\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
#: doc/classes/Node2D.xml
@@ -40143,6 +40655,10 @@ msgid ""
" if argument.find(\"=\") > -1:\n"
" var key_value = argument.split(\"=\")\n"
" arguments[key_value[0].lstrip(\"--\")] = key_value[1]\n"
+" else:\n"
+" # Options without an argument will be present in the dictionary,\n"
+" # with the value set to an empty string.\n"
+" arguments[argument.lstrip(\"--\")] = \"\"\n"
"[/codeblock]"
msgstr ""
@@ -40799,8 +41315,15 @@ msgstr ""
msgid ""
"Moves the file or directory to the system's recycle bin. See also [method "
"Directory.remove].\n"
+"The method takes only global paths, so you may need to use [method "
+"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/"
+"code] as it will not work in exported project.\n"
"[b]Note:[/b] If the user has disabled the recycle bin on their system, the "
-"file will be permanently deleted instead."
+"file will be permanently deleted instead.\n"
+"[codeblock]\n"
+"var file_to_remove = \"user://slot1.sav\"\n"
+"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/OS.xml
@@ -45657,7 +46180,18 @@ msgstr ""
#: doc/classes/PopupMenu.xml
msgid ""
"[PopupMenu] is a [Control] that displays a list of options. They are popular "
-"in toolbars or context menus."
+"in toolbars or context menus.\n"
+"[b]Incremental search:[/b] Like [ItemList] and [Tree], [PopupMenu] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/PopupMenu.xml
@@ -47167,7 +47701,16 @@ msgid ""
msgstr ""
#: doc/classes/ProjectSettings.xml
-msgid "Message to be displayed before the backtrace when the engine crashes."
+msgid ""
+"Message to be displayed before the backtrace when the engine crashes. By "
+"default, this message is only used in exported projects due to the editor-"
+"only override applied to this setting."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Editor-only override for [member debug/settings/crash_handler/message]. Does "
+"not affect exported projects in debug or release mode."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -47412,6 +47955,18 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default naming style for scene files to infer from their root nodes. "
+"Possible options are:\n"
+"- [code]0[/code] (Auto): Uses the scene root name as is without changing its "
+"casing.\n"
+"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase "
+"casing.\n"
+"- [code]2[/code] (snake_case): Converts the scene root name to snake_case "
+"casing."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -47637,6 +48192,198 @@ msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 1."
msgstr ""
@@ -47845,6 +48592,198 @@ msgid "Optional name for the 2D render layer 9."
msgstr ""
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 1."
msgstr ""
@@ -48112,6 +49051,49 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default cell height for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_height].\n"
+"[b]Note:[/b] Currently not implemented."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 2D navigation maps. See [method "
+"Navigation2DServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell height for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_height]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 3D navigation maps. See [method "
+"NavigationServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default map up vector for 3D navigation maps. See [method NavigationServer."
+"map_set_up]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -48785,20 +49767,28 @@ msgid ""
"cause.\n"
"The default value is a conservative one, so you are advised to tweak it "
"according to the hardware you are targeting.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"The default is a very conservative override for [code]rendering/gles3/"
-"shaders/max_concurrent_compiles[/code].\n"
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
"Depending on the specific devices you are targeting, you may want to raise "
"it.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
+"Depending on the specific browsers you are targeting, you may want to raise "
+"it.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -48806,19 +49796,28 @@ msgid ""
"The maximum size, in megabytes, that the ubershader cache can grow up to. On "
"startup, the least recently used entries will be deleted until the total "
"size is within bounds.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/ubershader_cache_size_mb[/"
-"code], so a smaller maximum size can be configured for mobile platforms, "
-"where storage space is more limited.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for mobile platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for web platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] Currently, shader caching is generally unavailable on web "
+"platforms.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -48850,14 +49849,22 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/shader_compilation_mode[/"
-"code], so asynchronous compilation can be disabled for mobile.\n"
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on mobile platforms.\n"
"You may want to do that since mobile GPUs generally won't support "
"ubershaders due to their complexity."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on web platforms.\n"
+"You may want to do that since certain browsers (especially on mobile "
+"platforms) generally won't support ubershaders due to their complexity."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
@@ -49614,7 +50621,6 @@ msgid ""
"- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/"
"code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, "
"small grid radius values may lead to unwanted groupings.\n"
-"[/codeblock]\n"
"[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more "
"effective and faster [VisibilityNotifier] functionality. For most use cases, "
"[method Vector3.distance_to] or [method Vector3.distance_squared_to] are "
@@ -51763,6 +52769,22 @@ msgid "Makes text fill width."
msgstr ""
#: doc/classes/RichTextLabel.xml
+msgid "Aligns top of the inline image to the top of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns center of the inline image to the center of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns bottom of the inline image to the baseline of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns bottom of the inline image to the bottom of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
msgid "Each list item has a number marker."
msgstr ""
@@ -53500,8 +54522,8 @@ msgid ""
" yield(get_tree().create_timer(1.0), \"timeout\")\n"
" print(\"Timer ended.\")\n"
"[/codeblock]\n"
-"The timer will be automatically freed after its time elapses, so be aware "
-"that any reference you might have kept to it will become invalid."
+"The timer will be dereferenced after its time elapses. To preserve the "
+"timer, you can keep a reference to it. See [Reference]."
msgstr ""
#: doc/classes/SceneTreeTimer.xml
@@ -53533,24 +54555,23 @@ msgid ""
"manually (i.e. by using [code]Tween.new()[/code]) are invalid. They can't be "
"used for tweening values, but you can do manual interpolation with [method "
"interpolate_value].\n"
-"A [SceneTreeTween] animation is composed of a sequence of [Tweener]s, which "
-"by default are executed one after another. You can create a sequence by "
-"appending [Tweener]s to the [SceneTreeTween]. Animating something with a "
-"[Tweener] is called tweening. Example tweening sequence looks like this:\n"
+"A tween animation is created by adding [Tweener]s to the [SceneTreeTween] "
+"object, using [method tween_property], [method tween_interval], [method "
+"tween_callback] or [method tween_method]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1)\n"
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"This sequence will make the [code]$Sprite[/code] node turn red, then shrink "
-"and finally the [method Node.queue_free] is called to remove the sprite. See "
-"methods [method tween_property], [method tween_interval], [method "
-"tween_callback] and [method tween_method] for more usage information.\n"
+"This sequence will make the [code]$Sprite[/code] node turn red, then shrink, "
+"before finally calling [method Node.queue_free] to free the sprite. "
+"[Tweener]s are executed one after another by default. This behavior can be "
+"changed using [method parallel] and [method set_parallel].\n"
"When a [Tweener] is created with one of the [code]tween_*[/code] methods, a "
"chained method call can be used to tweak the properties of this [Tweener]. "
-"For example, if you want to set different transition type in the above "
-"example, you can do:\n"
+"For example, if you want to set a different transition type in the above "
+"example, you can use [method set_trans]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1).set_trans(Tween."
@@ -53559,8 +54580,9 @@ msgid ""
"TRANS_BOUNCE)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Most of the [SceneTreeTween] methods can be chained this way too. In this "
-"example the [SceneTreeTween] is bound and have set a default transition:\n"
+"Most of the [SceneTreeTween] methods can be chained this way too. In the "
+"following example the [SceneTreeTween] is bound to the running script's node "
+"and a default transition is set for its [Tweener]s:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween().bind_node(self).set_trans(Tween."
"TRANS_ELASTIC)\n"
@@ -53568,16 +54590,16 @@ msgid ""
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Another interesting use for [SceneTreeTween]s is animating arbitrary set of "
+"Another interesting use for [SceneTreeTween]s is animating arbitrary sets of "
"objects:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"for sprite in get_children():\n"
-" tween.tween_property(sprite, \"position\", Vector2(), 1)\n"
+" tween.tween_property(sprite, \"position\", Vector2(0, 0), 1)\n"
"[/codeblock]\n"
"In the example above, all children of a node are moved one after another to "
"position (0, 0).\n"
-"Some [Tweener]s use transitions and eases. The first accepts an [enum Tween."
+"Some [Tweener]s use transitions and eases. The first accepts a [enum Tween."
"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 Tween.EaseType] constant, and "
@@ -53589,7 +54611,7 @@ msgid ""
"tween_cheatsheet.png]Tween easing and transition types cheatsheet[/url]\n"
"[b]Note:[/b] All [SceneTreeTween]s will automatically start by default. To "
"prevent a [SceneTreeTween] from autostarting, you can call [method stop] "
-"immediately after it was created."
+"immediately after it is created."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53619,21 +54641,24 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
-"Processes the [SceneTreeTween] by given [code]delta[/code] value, in "
-"seconds. Mostly useful when the [SceneTreeTween] is paused, for controlling "
-"it manually. Can also be used to end the [SceneTreeTween] animation "
-"immediately, by using [code]delta[/code] longer than the whole duration.\n"
+"Processes the [SceneTreeTween] by the given [code]delta[/code] value, in "
+"seconds. This is mostly useful for manual control when the [SceneTreeTween] "
+"is paused. It can also be used to end the [SceneTreeTween] animation "
+"immediately, by setting [code]delta[/code] longer than the whole duration of "
+"the [SceneTreeTween] animation.\n"
"Returns [code]true[/code] if the [SceneTreeTween] still has [Tweener]s that "
"haven't finished.\n"
-"[b]Note:[/b] The [SceneTreeTween] will become invalid after finished, but "
-"you can call [method stop] after the step, to keep it and reset."
+"[b]Note:[/b] The [SceneTreeTween] will become invalid in the next processing "
+"frame after its animation finishes. Calling [method stop] after performing "
+"[method custom_step] instead keeps and resets the [SceneTreeTween]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Returns the total time in seconds the [SceneTreeTween] has been animating (i."
-"e. time since it started, not counting pauses etc.). The time is affected by "
-"[method set_speed_scale] and [method stop] will reset it to [code]0[/code].\n"
+"e. the time since it started, not counting pauses etc.). The time is "
+"affected by [method set_speed_scale], and [method stop] will reset it to "
+"[code]0[/code].\n"
"[b]Note:[/b] As it results from accumulating frame deltas, the time returned "
"after the [SceneTreeTween] has finished animating will be slightly greater "
"than the actual [SceneTreeTween] duration."
@@ -53669,11 +54694,10 @@ msgstr ""
msgid ""
"Returns whether the [SceneTreeTween] is valid. A valid [SceneTreeTween] is a "
"[SceneTreeTween] contained by the scene tree (i.e. the array from [method "
-"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). "
-"[SceneTreeTween] might become invalid when it has finished tweening or was "
-"killed, also when created with [code]Tween.new()[/code]. Invalid "
-"[SceneTreeTween] can't have [Tweener]s appended, because it can't animate "
-"them. You can however still use [method interpolate_value]."
+"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). A "
+"[SceneTreeTween] might become invalid when it has finished tweening, is "
+"killed, or when created with [code]SceneTreeTween.new()[/code]. Invalid "
+"[SceneTreeTween]s can't have [Tweener]s appended."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53713,16 +54737,15 @@ msgstr ""
msgid ""
"Sets the number of times the tweening sequence will be repeated, i.e. "
"[code]set_loops(2)[/code] will run the animation twice.\n"
-"Calling this method without arguments will make the [SceneTreeTween] run "
-"infinitely, until it is either killed by [method kill] or by freeing bound "
-"node, or all the animated objects have been freed (which makes further "
+"Calling this method without arguments will make the [Tween] run infinitely, "
+"until either it is killed with [method kill], the [Tween]'s bound node is "
+"freed, or all the animated objects have been freed (which makes further "
"animation impossible).\n"
"[b]Warning:[/b] Make sure to always add some duration/delay when using "
-"infinite loops. 0-duration looped animations (e.g. single [CallbackTweener] "
-"with no delay or [PropertyTweener] with invalid node) are equivalent to "
-"infinite [code]while[/code] loops and will freeze your game. If a "
-"[SceneTreeTween]'s lifetime depends on some node, always use [method "
-"bind_node]."
+"infinite loops. To prevent the game freezing, 0-duration looped animations "
+"(e.g. a single [CallbackTweener] with no delay) are stopped after a small "
+"number of loops, which may produce unexpected results. If a [Tween]'s "
+"lifetime depends on some node, always use [method bind_node]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53784,10 +54807,10 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Creates and appends an [IntervalTweener]. This method can be used to create "
-"delays in the tween animation, as an alternative for using the delay in "
-"other [Tweener]s or when there's no animation (in which case the "
-"[SceneTreeTween] acts as a timer). [code]time[/code] is the length of the "
-"interval, in seconds.\n"
+"delays in the tween animation, as an alternative to using the delay in other "
+"[Tweener]s, or when there's no animation (in which case the [SceneTreeTween] "
+"acts as a timer). [code]time[/code] is the length of the interval, in "
+"seconds.\n"
"Example: creating an interval in code execution.\n"
"[codeblock]\n"
"# ... some code\n"
@@ -53841,8 +54864,8 @@ msgid ""
"Creates and appends a [PropertyTweener]. This method tweens a "
"[code]property[/code] of an [code]object[/code] between an initial value and "
"[code]final_val[/code] in a span of time equal to [code]duration[/code], in "
-"seconds. The initial value by default is a value at the time the tweening of "
-"the [PropertyTweener] start. For example:\n"
+"seconds. The initial value by default is the property's value at the time "
+"the tweening of the [PropertyTweener] starts. For example:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"tween.tween_property($Sprite, \"position\", Vector2(100, 200), 1)\n"
@@ -53873,16 +54896,15 @@ msgid ""
"Emitted when the [SceneTreeTween] has finished all tweening. Never emitted "
"when the [SceneTreeTween] is set to infinite looping (see [method "
"set_loops]).\n"
-"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) after this signal "
-"is emitted, but it doesn't happen immediately, but on the next processing "
-"frame. Calling [method stop] inside the signal callback will preserve the "
-"[SceneTreeTween]."
+"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) in the next "
+"processing frame after this signal is emitted. Calling [method stop] inside "
+"the signal callback will prevent the [SceneTreeTween] from being removed."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Emitted when a full loop is complete (see [method set_loops]), providing the "
-"loop index. This signal is not emitted after final loop, use [signal "
+"loop index. This signal is not emitted after the final loop, use [signal "
"finished] instead for this case."
msgstr ""
@@ -53890,7 +54912,7 @@ msgstr ""
msgid ""
"Emitted when one step of the [SceneTreeTween] is complete, providing the "
"step index. One step is either a single [Tweener] or a group of [Tweener]s "
-"running parallelly."
+"running in parallel."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -55222,7 +56244,12 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-msgid "Scale part of the local transformation."
+msgid ""
+"Scale part of the local transformation.\n"
+"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, the scale values will either be all "
+"positive or all negative."
msgstr ""
#: doc/classes/Spatial.xml
@@ -57855,11 +58882,11 @@ msgstr ""
msgid ""
"Returns [code]true[/code] if this string contains a valid integer.\n"
"[codeblock]\n"
-"print(\"7\".is_valid_int()) # Prints \"True\"\n"
-"print(\"14.6\".is_valid_int()) # Prints \"False\"\n"
-"print(\"L\".is_valid_int()) # Prints \"False\"\n"
-"print(\"+3\".is_valid_int()) # Prints \"True\"\n"
-"print(\"-12\".is_valid_int()) # Prints \"True\"\n"
+"print(\"7\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"14.6\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"L\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"+3\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"-12\".is_valid_integer()) # Prints \"True\"\n"
"[/codeblock]"
msgstr ""
@@ -61334,6 +62361,11 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml
+#, fuzzy
+msgid "If [code]true[/code], this TileMap bakes a navigation region."
+msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ì½”ì‚¬ì¸ ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤."
+
+#: doc/classes/TileMap.xml
msgid "If [code]true[/code], the cell's UVs will be clipped."
msgstr ""
@@ -61440,6 +62472,10 @@ msgid "The TileMap orientation mode. See [enum Mode] for possible values."
msgstr ""
#: doc/classes/TileMap.xml
+msgid "The navigation layers the TileMap generates its navigation regions in."
+msgstr ""
+
+#: doc/classes/TileMap.xml
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 "
@@ -62571,7 +63607,12 @@ msgstr ""
#: doc/classes/Transform2D.xml
msgid ""
"Returns a copy of the transform scaled by the given [code]scale[/code] "
-"factor, using matrix multiplication."
+"factor, using matrix multiplication.\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
#: doc/classes/Transform2D.xml
@@ -62727,7 +63768,18 @@ msgid ""
"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]."
+"to remove it from the [Tree].\n"
+"[b]Incremental search:[/b] Like [ItemList] and [PopupMenu], [Tree] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/Tree.xml
@@ -66266,11 +67318,12 @@ msgid "This enabler will stop [Particles2D] nodes."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _process function."
+msgid "This enabler will stop the parent's [method Node._process] function."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _physics_process function."
+msgid ""
+"This enabler will stop the parent's [method Node._physics_process] function."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
@@ -66310,6 +67363,16 @@ msgid "The VisibilityNotifier's bounding box."
msgstr ""
#: doc/classes/VisibilityNotifier.xml
+msgid ""
+"In addition to checking whether a node is on screen or within a [Camera]'s "
+"view, VisibilityNotifier can also optionally check whether a node is within "
+"a specified maximum distance when using a [Camera] with perspective "
+"projection. This is useful for throttling the performance requirements of "
+"nodes that are far away.\n"
+"[b]Note:[/b] This feature will be disabled if set to 0.0."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier.xml
msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view."
msgstr ""
@@ -71072,6 +72135,16 @@ msgid "The amount of shader rebinds in the frame."
msgstr ""
#: doc/classes/VisualServer.xml
+msgid ""
+"The peak amount of shaders that have been under compilation in the frame.\n"
+"This is useful to know when asynchronous shader compilation has finished for "
+"the current shaders on screen.\n"
+"[b]Note:[/b] For complete certainty, only assume there are no outstanding "
+"compilations when this value is zero for at least two frames in a row.\n"
+"Unimplemented in the GLES2 rendering backend, always returns 0."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
msgid "The amount of surface changes in the frame."
msgstr ""
@@ -74272,8 +75345,8 @@ msgstr ""
#: doc/classes/World.xml
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."
+"scenario, a navigation map and a sound space. Spatial nodes register their "
+"resources into the current world."
msgstr ""
#: doc/classes/World.xml
@@ -74288,11 +75361,17 @@ msgstr ""
#: doc/classes/World.xml
msgid ""
-"The World's fallback_environment will be used if the World's [Environment] "
-"fails or is missing."
+"The World's fallback environment will be used if [member environment] fails "
+"or is missing."
msgstr ""
#: doc/classes/World.xml
+#, fuzzy
+msgid ""
+"The [RID] of this world's navigation map. Used by the [NavigationServer]."
+msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ì‚¬ì¸ ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤."
+
+#: doc/classes/World.xml
msgid "The World's visual scenario."
msgstr ""
@@ -74307,8 +75386,8 @@ msgstr ""
#: doc/classes/World2D.xml
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."
+"visual scenario, a navigation map and a sound space. 2D nodes register their "
+"resources into the current 2D world."
msgstr ""
#: doc/classes/World2D.xml
@@ -74325,6 +75404,12 @@ msgid ""
msgstr ""
#: doc/classes/World2D.xml
+#, fuzzy
+msgid ""
+"The [RID] of this world's navigation map. Used by the [Navigation2DServer]."
+msgstr "ë§¤ê°œë³€ìˆ˜ì˜ ì‚¬ì¸ ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤."
+
+#: doc/classes/World2D.xml
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."
@@ -74537,4 +75622,4 @@ msgstr ""
#: doc/classes/YSort.xml
msgid ""
"If [code]true[/code], child nodes are sorted, otherwise sorting is disabled."
-msgstr ""
+msgstr "[code]"
diff --git a/doc/translations/lt.po b/doc/translations/lt.po
index 751cdb6809..1139bf4f82 100644
--- a/doc/translations/lt.po
+++ b/doc/translations/lt.po
@@ -357,7 +357,7 @@ msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
msgid ""
"Compares two values by checking their actual contents, recursing into any "
-"`Array` or `Dictionary` up to its deepest level.\n"
+"[Array] or [Dictionary] up to its deepest level.\n"
"This compares to [code]==[/code] in a number of ways:\n"
"- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/"
"code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] "
@@ -404,7 +404,7 @@ msgid ""
"- 1.0: Linear\n"
"- Greater than 1.0 (exclusive): Ease in\n"
"[/codeblock]\n"
-"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.4/img/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/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]."
@@ -1111,7 +1111,7 @@ msgid ""
"[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/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/img/"
"smoothstep_ease_comparison.png]Comparison between smoothstep() and ease(x, "
"-1.6521) return values[/url]"
msgstr ""
@@ -3389,6 +3389,12 @@ msgstr ""
#: doc/classes/@GlobalScope.xml
msgid ""
+"Hints that an integer property is a bitmask using the optionally named 2D "
+"navigation layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml
+msgid ""
"Hints that an integer property is a bitmask using the optionally named 3D "
"render layers."
msgstr ""
@@ -3401,6 +3407,12 @@ msgstr ""
#: doc/classes/@GlobalScope.xml
msgid ""
+"Hints that an integer property is a bitmask using the optionally named 3D "
+"navigation layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml
+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]."
@@ -8376,7 +8388,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/AStar.xml
+#: doc/classes/AStar.xml doc/classes/AStar2D.xml
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[/"
@@ -8575,7 +8587,10 @@ msgid ""
msgstr ""
#: doc/classes/AStar2D.xml
-msgid "Returns whether there is a connection/segment between the given points."
+msgid ""
+"Returns whether there is a connection/segment between the given points. 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/AStar2D.xml
@@ -8592,10 +8607,6 @@ msgid ""
msgstr ""
#: doc/classes/AStar2D.xml
-msgid "Deletes the segment between the given points."
-msgstr ""
-
-#: doc/classes/AStar2D.xml
msgid ""
"Returns the closest position to [code]to_position[/code] that resides inside "
"a segment between two connected points.\n"
@@ -8780,7 +8791,9 @@ msgid ""
"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."
+"transmit audio over the network. When capturing audio data from a "
+"microphone, the format of the samples will be stereo 32-bit floating point "
+"PCM."
msgstr ""
#: doc/classes/AudioEffectCapture.xml
@@ -13623,7 +13636,7 @@ msgid ""
msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
-#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/Navigation2D.xml
msgid "Returns the object's [RID]."
msgstr ""
@@ -19098,11 +19111,14 @@ msgid ""
msgstr ""
#: doc/classes/CurveTexture.xml
-msgid "The [code]curve[/code] rendered onto the texture."
+msgid "The [Curve] that is rendered onto the texture."
msgstr ""
#: doc/classes/CurveTexture.xml
-msgid "The width of the texture."
+msgid ""
+"The width of the texture (in pixels). Higher values make it possible to "
+"represent high-frequency data better (such as sudden direction changes), at "
+"the cost of increased generation time and memory usage."
msgstr ""
#: doc/classes/CylinderMesh.xml
@@ -19388,6 +19404,13 @@ msgid "Returns the list of keys in the [Dictionary]."
msgstr ""
#: doc/classes/Dictionary.xml
+msgid ""
+"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, "
+"duplicate keys will not be copied over, unless [code]overwrite[/code] is "
+"[code]true[/code]."
+msgstr ""
+
+#: doc/classes/Dictionary.xml
msgid "Returns the number of keys in the dictionary."
msgstr ""
@@ -21326,9 +21349,23 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide a state data you want to be saved, like view "
+"position, grid settings, folding, etc. 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). This data is automatically saved for "
+"each scene in an [code]editstate[/code] file in the editor metadata folder. "
+"If you want to store global (scene-independent) editor data for your plugin, "
+"you can use [method get_window_layout] instead.\n"
+"Use [method set_state] to restore your saved state.\n"
+"[b]Note:[/b] This method should not be used to save important settings that "
+"should persist with the project.\n"
+"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be "
+"stored and restored correctly.\n"
+"[codeblock]\n"
+"func get_state():\n"
+" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n"
+" return state\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -21339,9 +21376,18 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide the GUI layout of the plugin or any other "
+"data you want to be stored. 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). The data is stored in the "
+"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n"
+"Use [method set_window_layout] to restore your saved layout.\n"
+"[codeblock]\n"
+"func get_window_layout(configuration):\n"
+" configuration.set_value(\"MyPlugin\", \"window_position\", $Window."
+"position)\n"
+" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -21454,11 +21500,30 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the state saved by [method get_state]."
+msgid ""
+"Restore the state saved by [method get_state]. This method is called when "
+"the current scene tab is changed in the editor.\n"
+"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise "
+"it will not be recognized and this method will not be called.\n"
+"[codeblock]\n"
+"func set_state(data):\n"
+" zoom = data.get(\"zoom\", 1.0)\n"
+" preferred_color = data.get(\"my_color\", Color.white)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the plugin GUI layout saved by [method get_window_layout]."
+msgid ""
+"Restore the plugin GUI layout and data saved by [method get_window_layout]. "
+"This method is called for every plugin on editor startup. Use the provided "
+"[code]configuration[/code] file to read your saved data.\n"
+"[codeblock]\n"
+"func set_window_layout(configuration):\n"
+" $Window.position = configuration.get_value(\"MyPlugin\", "
+"\"window_position\", Vector2())\n"
+" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", "
+"Color.white)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -26093,7 +26158,8 @@ msgid ""
"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])."
+"at fixed steps (see [member width]). See also [GradientTexture2D] and "
+"[CurveTexture]."
msgstr ""
#: doc/classes/GradientTexture.xml
@@ -26115,7 +26181,8 @@ msgid ""
"repeat] types using colors obtained from the gradient. 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] and [member height])."
+"[member width] and [member height]). See also [GradientTexture] and "
+"[CurveTexture]."
msgstr ""
#: doc/classes/GradientTexture2D.xml
@@ -26921,6 +26988,12 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+msgid ""
+"If [code]true[/code], this GridMap uses cell navmesh resources to create "
+"navigation regions."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid "If [code]true[/code], grid items are centered on the X axis."
msgstr ""
@@ -26971,6 +27044,10 @@ msgid "The assigned [MeshLibrary]."
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+msgid "The navigation layers the GridMap generates its navigation regions in."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
"Overrides the default friction and bounce physics properties for the whole "
"[GridMap]."
@@ -28194,7 +28271,7 @@ msgid ""
" # 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 body = to_json({\"name\": \"Godette\"})\n"
" error = http_request.request(\"https://httpbin.org/post\", [], true, "
"HTTPClient.METHOD_POST, body)\n"
" if error != OK:\n"
@@ -29361,7 +29438,7 @@ msgstr ""
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 "
+"([member 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 "
@@ -29510,10 +29587,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Returns the mouse mode. See the constants for more information."
-msgstr ""
-
-#: doc/classes/Input.xml
msgid ""
"Gets an input vector by specifying four actions for the positive and "
"negative X and Y axes.\n"
@@ -29707,24 +29780,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Sets the mouse mode. See the constants for more information."
-msgstr ""
-
-#: doc/classes/Input.xml
-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
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 "
@@ -29760,6 +29815,24 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
+msgid "Controls the mouse mode. See [enum MouseMode] for more information."
+msgstr ""
+
+#: doc/classes/Input.xml
+msgid ""
+"If [code]true[/code], similar input events sent by the operating system are "
+"accumulated. 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 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
msgid "Emitted when a joypad device has been connected or disconnected."
msgstr ""
@@ -30067,8 +30140,8 @@ msgstr ""
#: doc/classes/InputEventJoypadButton.xml
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]."
+"Represents the pressure the user puts on the button with their finger, if "
+"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]."
msgstr ""
#: doc/classes/InputEventJoypadMotion.xml
@@ -30331,9 +30404,9 @@ 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 "
+"at most. If you need more precise input reporting, set [member Input."
+"use_accumulated_input] to [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."
@@ -30820,7 +30893,18 @@ msgid ""
"[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."
+"fixed_column_width] greater than zero to wrap the text.\n"
+"[b]Incremental search:[/b] Like [PopupMenu] and [Tree], [ItemList] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/ItemList.xml
@@ -34567,11 +34651,16 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Returns the override [Material] for a surface of the [Mesh] resource.\n"
+"[b]Note:[/b] This function only returns [i]override[/i] materials associated "
+"with this [MeshInstance]. Consider using [method get_active_material] or "
+"[method Mesh.surface_get_material] to get materials associated with the "
+"[Mesh] resource."
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the number of surface materials."
+msgid "Returns the number of surface override materials."
msgstr ""
#: doc/classes/MeshInstance.xml
@@ -34608,7 +34697,10 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Sets the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Sets the override [Material] for the specified surface of the [Mesh] "
+"resource. This material is associated with this [MeshInstance] rather than "
+"with the [Mesh] resource."
msgstr ""
#: doc/classes/MeshInstance.xml
@@ -34639,9 +34731,10 @@ msgstr ""
#: doc/classes/MeshInstance2D.xml
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\"."
+"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be "
+"automatically created from an existing [Sprite] via a tool in the editor "
+"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to "
+"MeshInstance2D[/b] at the top of the 2D editor viewport."
msgstr ""
#: doc/classes/MeshInstance2D.xml
@@ -35399,6 +35492,9 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"Provides navigation and pathfinding within a collection of "
"[NavigationMesh]es. By default, these will be automatically collected from "
"child [NavigationMeshInstance] nodes. In addition to basic pathfinding, this "
@@ -35439,7 +35535,14 @@ msgid ""
msgstr ""
#: doc/classes/Navigation.xml
+msgid "Returns the [RID] of the navigation map on the [NavigationServer]."
+msgstr ""
+
+#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"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, "
@@ -35461,16 +35564,31 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation.get_simple_path] path query."
+msgstr ""
+
+#: doc/classes/Navigation.xml
+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/Navigation.xml doc/classes/Navigation2DServer.xml
+#: doc/classes/NavigationServer.xml
+msgid ""
+"Emitted when a navigation map is updated, when a region moves or is modified."
+msgstr ""
+
#: doc/classes/Navigation2D.xml
msgid "2D navigation and pathfinding node."
msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -35490,6 +35608,9 @@ msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -35499,6 +35620,12 @@ msgstr ""
msgid "The XY plane cell size to use for fields."
msgstr ""
+#: doc/classes/Navigation2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation2D.get_simple_path] path query."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml
msgid "Server interface for low-level 2D navigation access."
msgstr ""
@@ -35515,8 +35642,12 @@ msgid ""
"through scripts.\n"
"For two regions to be connected to each other, they must share a similar "
"edge. An edge is considered connected to another if both of its two vertices "
-"are at a distance less than [member Navigation.edge_connection_margin] to "
-"the respective other edge's vertex.\n"
+"are at a distance less than navigation map [code]edge_connection_margin[/"
+"code] to the respective other edge's vertex.\n"
+"You may assign navigation layers to regions with [method Navigation2DServer."
+"region_set_navigation_layers], which then can be checked upon when "
+"requesting a path with [method Navigation2DServer.map_get_path]. This allows "
+"allowing or forbidding some areas to 2D objects.\n"
"To use the collision avoidance system, you may use agents. You can set an "
"agent's target velocity, then the servers will emit a callback with a "
"modified velocity.\n"
@@ -35544,7 +35675,17 @@ msgid "Returns [code]true[/code] if the map got changed the previous frame."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Callback called at the end of the RVO process."
+msgid ""
+"Callback called at the end of the RVO process. If a callback is created "
+"manually and the agent is placed on a navigation map it will calculate "
+"avoidance for the agent and dispatch the calculated [code]safe_velocity[/"
+"code] to the [code]receiver[/code] object with a signal to the chosen "
+"[code]method[/code] name.\n"
+"[b]Note:[/b] Created callbacks are always processed independently of the "
+"SceneTree state as long as the agent is on a navigation map and not freed. "
+"To disable the dispatch of a callback from an agent use [method "
+"agent_set_callback] again with a [code]null[/code] object as the "
+"[code]receiver[/code]."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -35599,15 +35740,55 @@ msgid "Destroys the given RID."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns all created navigation map [RID]s on the NavigationServer. This "
+"returns both 2D and 3D created navigation maps as there is technically no "
+"distinction between them."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Create a new map."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"This function immediately forces synchronization of the specified navigation "
+"[code]map[/code] [RID]. By default navigation maps are only synchronized at "
+"the end of each physics frame. This function can be used to immediately "
+"(re)calculate all the navigation meshes and region connections of the "
+"navigation map. This makes it possible to query a navigation path for a "
+"changed map immediately and in the same frame (multiple times if needed).\n"
+"Due to technical restrictions the current NavigationServer command queue "
+"will be flushed. This means all already queued update commands for this "
+"physics frame will be executed, even those intended for other maps, regions "
+"and agents not part of the specified map. The expensive computation of the "
+"navigation meshes and region connections of a map will only be done for the "
+"specified map. Other maps will receive the normal synchronization at the end "
+"of the physics frame. Should the specified map receive changes after the "
+"forced update it will update again as well when the other maps receive their "
+"update.\n"
+"Avoidance processing and dispatch of the [code]safe_velocity[/code] signals "
+"is untouched by this function and continues to happen for all maps and "
+"agents at the end of the physics frame.\n"
+"[b]Note:[/b] With great power comes great responsibility. This function "
+"should only be used by users that really know what they are doing and have a "
+"good reason for it. Forcing an immediate update of a navigation map requires "
+"locking the NavigationServer and flushing the entire NavigationServer "
+"command queue. Not only can this severely impact the performance of a game "
+"but it can also introduce bugs if used inappropriately without much "
+"foresight."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns all navigation agents [RID]s that are currently assigned to the "
"requested navigation [code]map[/code]."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Returns the map cell size."
msgstr ""
@@ -35631,7 +35812,10 @@ msgid ""
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Returns the navigation path to reach the destination from the origin."
+msgid ""
+"Returns the navigation path to reach the destination from the origin. "
+"[code]navigation_layers[/code] is a bitmask of all region layers that are "
+"allowed to be in the path."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -35648,6 +35832,12 @@ msgstr ""
msgid "Sets the map active."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/"
+"b] Currently not implemented."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Set the map cell size used to weld the navigation mesh polygons."
msgstr ""
@@ -35663,14 +35853,73 @@ msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"Returns the ending point of a connection door. [code]connection[/code] is an "
+"index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns the starting point of a connection door. [code]connection[/code] is "
+"an index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns how many connections this [code]region[/code] has with other regions "
+"in the map."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns the navigation map [RID] the requested [code]region[/code] is "
"currently assigned to."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Returns the region's navigation layers."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns [code]true[/code] if the provided [code]point[/code] in world space "
+"is currently owned by the provided navigation [code]region[/code]. Owned in "
+"this context means that one of the region's navigation mesh polygon faces "
+"has a possible position at the closest distance to this point compared to "
+"all other navigation meshes from other navigation regions that are also "
+"registered on the navigation map of the provided region.\n"
+"If multiple navigation meshes have positions at equal distance the "
+"navigation region whose polygons are processed first wins the ownership. "
+"Polygons are processed in the same order that navigation regions were "
+"registered on the NavigationServer.\n"
+"[b]Note:[/b] If navigation meshes from different navigation regions overlap "
+"(which should be avoided in general) the result might not be what is "
+"expected."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Sets the map for the region."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method Navigation2DServer.map_get_path])."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Sets the navigation mesh for the region."
msgstr ""
@@ -35679,6 +35928,10 @@ msgstr ""
msgid "Sets the global transformation for the region."
msgstr ""
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]."
+msgstr ""
+
#: doc/classes/NavigationAgent.xml
msgid "3D agent used in navigation for collision avoidance."
msgstr ""
@@ -35688,9 +35941,16 @@ msgid ""
"3D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationAgent] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World] navigation map. If this node is a child of a [Navigation] "
+"node it will register to the navigation map of the navigation node or the "
+"function [method set_navigation] can be used to set the navigation node "
+"directly. [NavigationAgent] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -35708,7 +35968,15 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-msgid "Returns the path from start to finish in global coordinates."
+msgid ""
+"Returns this agent's current path from start to finish in global "
+"coordinates. The path only updates when the target location is changed or "
+"the agent requires a repath. The path array is not intended to be used in "
+"direct path movement as the agent has its own internal path logic that would "
+"get corrupted by changing the path array manually. Use the intended [method "
+"get_next_location] once every physics frame to receive the next path point "
+"for the agents movement as this function also updates the internal path "
+"logic."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -35723,11 +35991,24 @@ msgid ""
"system."
msgstr ""
-#: doc/classes/NavigationAgent.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"Returns a [Vector3] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the origin of the agent's parent."
+"Returns the [RID] of the navigation map for this NavigationAgent node. This "
+"function returns always the map set on the NavigationAgent node and not the "
+"map of the abstract agent on the NavigationServer. If the agent map is "
+"changed directly with the NavigationServer API the NavigationAgent node will "
+"not be aware of the map change. Use [method set_navigation_map] to change "
+"the navigation map for the NavigationAgent and also update the agent on the "
+"NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
+"Returns the next location in global coordinates that can be moved to, making "
+"sure that there are no static objects in the way. If the agent does not have "
+"a navigation path, it will return the position of the agent's parent. The "
+"use of this function once every physics frame is required to update the "
+"internal path logic of the NavigationAgent."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -35768,6 +36049,12 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"Sets the [RID] of the navigation map this NavigationAgent node should use "
+"and also updates the [code]agent[/code] on the NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"Sets the user desired final location. This will clear the current navigation "
"path."
msgstr ""
@@ -35780,7 +36067,13 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml
-msgid "The agent height offset to match the navigation mesh height."
+msgid ""
+"The NavigationAgent height offset is subtracted from the y-axis value of any "
+"vector path position for this NavigationAgent. The NavigationAgent height "
+"offset does not change or influence the navigation mesh or pathfinding query "
+"result. Additional navigation maps that use regions with navigation meshes "
+"that the developer baked with appropriate agent radius or height values are "
+"required to support different-sized agents."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -35807,26 +36100,53 @@ msgstr ""
msgid "The maximum speed that an agent can move."
msgstr ""
+#: doc/classes/NavigationAgent.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "The distance to search for other agents."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"The distance threshold before a path point is considered to be reached. This "
+"will allow an agent to not have to hit a path point on the path exactly, but "
+"in the area. If this value is set to high the NavigationAgent will skip "
+"points on the path which can lead to leaving the navigation mesh. If this "
+"value is set to low the NavigationAgent will be stuck in a repath loop cause "
+"it will constantly overshoot or undershoot the distance to the next point on "
+"each physics frame update."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"The maximum distance the agent is allowed away from the ideal path to the "
"final location. This can happen due to trying to avoid collisions. When the "
"maximum distance is exceeded, it recalculates the ideal path."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-msgid "The radius of the agent."
+msgid ""
+"The radius of the avoidance agent. This is the \"body\" of the avoidance "
+"agent and not the avoidance maneuver starting radius (which is controlled by "
+"[member neighbor_dist]).\n"
+"Does not affect normal pathfinding. To change an actor's pathfinding radius "
+"bake [NavigationMesh] resources with a different [member NavigationMesh."
+"agent_radius] property and use different navigation maps for each actor size."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"The distance threshold before a target is considered to be reached. This "
-"will allow an agent to not have to hit a point on the path exactly, but in "
-"the area."
+"The distance threshold before the final target point is considered to be "
+"reached. This will allow an agent to not have to hit the point of the final "
+"target exactly, but only the area. If this value is set to low the "
+"NavigationAgent will be stuck in a repath loop cause it will constantly "
+"overshoot or undershoot the distance to the final target point on each "
+"physics frame update."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -35869,9 +36189,16 @@ msgid ""
"2D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationAgent2D] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World2D] navigation map. If this node is a child of a "
+"[Navigation2D] node it will register to the navigation map of the navigation "
+"node or the function [method set_navigation] can be used to set the "
+"navigation node directly. [NavigationAgent2D] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent2D.xml
@@ -35887,13 +36214,6 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent2D.xml
-msgid ""
-"Returns a [Vector2] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the position of the agent's parent."
-msgstr ""
-
-#: doc/classes/NavigationAgent2D.xml
msgid "Returns the [RID] of this agent on the [Navigation2DServer]."
msgstr ""
@@ -35913,6 +36233,13 @@ msgid ""
"only be enabled on agents that currently require it."
msgstr ""
+#: doc/classes/NavigationAgent2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent2D] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationMesh.xml
msgid "A mesh to approximate the walkable areas and obstacles."
msgstr ""
@@ -35943,8 +36270,8 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
-"Returns whether the specified [code]bit[/code] of the [member geometry/"
-"collision_mask] is set."
+"Returns whether the specified [code]bit[/code] of the [member "
+"geometry_collision_mask] is set."
msgstr ""
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
@@ -35966,9 +36293,9 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/"
-"code] in the [member geometry/collision_mask].\n"
+"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]."
+"code] in the [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
@@ -35982,14 +36309,14 @@ 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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36001,7 +36328,7 @@ 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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36029,13 +36356,17 @@ msgstr ""
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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
-"If [code]true[/code], marks walkable spans as not walkable if the clearance "
-"above the span is less than [member agent/height]."
+"If the baking [AABB] has a volume the navigation mesh baking will be "
+"restricted to its enclosing area."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+msgid "The position offset applied to the [member filter_baking_aabb] [AABB]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36045,13 +36376,19 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]true[/code], marks non-walkable spans as walkable if their maximum "
-"is within [member agent/max_climb] of a walkable neighbor."
+"is within [member agent_max_climb] of a walkable neighbor."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+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
msgid ""
"The physics layers to scan for static colliders.\n"
-"Only used when [member geometry/parsed_geometry_type] is [constant "
+"Only used when [member geometry_parsed_geometry_type] is [constant "
"PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]."
msgstr ""
@@ -36070,7 +36407,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"The name of the group to scan for geometry.\n"
-"Only used when [member geometry/source_geometry_mode] is [constant "
+"Only used when [member geometry_source_geometry_mode] is [constant "
"SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant "
"SOURCE_GEOMETRY_GROUPS_EXPLICIT]."
msgstr ""
@@ -36133,7 +36470,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Parses [StaticBody] colliders as geometry. The collider should be in any of "
-"the layers specified by [member geometry/collision_mask]."
+"the layers specified by [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36154,13 +36491,13 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Scans nodes in a group and their child nodes recursively for geometry. The "
-"group is specified by [member geometry/source_group_name]."
+"group is specified by [member geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Uses nodes in a group for geometry. The group is specified by [member "
-"geometry/source_group_name]."
+"geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36202,7 +36539,15 @@ msgid ""
"geometry for walkable terrain suitable to [NavigationMesh] agent properties "
"by creating a voxel world around the meshes bounding area.\n"
"The finalized navigation mesh is then returned and stored inside the "
-"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes."
+"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] "
+"nodes.\n"
+"[b]Note:[/b] Using meshes to not only define walkable surfaces but also "
+"obstruct navigation baking does not always work. The navigation baking has "
+"no concept of what is a geometry \"inside\" when dealing with mesh source "
+"geometry and this is intentional. Depending on current baking parameters, as "
+"soon as the obstructing mesh is large enough to fit a navigation mesh area "
+"inside, the baking will generate navigation mesh areas that are inside the "
+"obstructing source geometry mesh."
msgstr ""
#: doc/classes/NavigationMeshGenerator.xml
@@ -36210,8 +36555,8 @@ msgid ""
"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child "
"nodes under the provided [code]root_node[/code] or a specific group of nodes "
"for potential source geometry. The parse behavior can be controlled with the "
-"[member NavigationMesh.geometry/parsed_geometry_type] and [member "
-"NavigationMesh.geometry/source_geometry_mode] properties on the "
+"[member NavigationMesh.geometry_parsed_geometry_type] and [member "
+"NavigationMesh.geometry_source_geometry_mode] properties on the "
"[NavigationMesh] resource."
msgstr ""
@@ -36228,8 +36573,21 @@ msgstr ""
#: doc/classes/NavigationMeshInstance.xml
msgid ""
"An instance of a [NavigationMesh]. It tells the [Navigation] node what can "
-"be navigated and what cannot, based on the [NavigationMesh] resource. This "
-"should be a child of a [Navigation] node."
+"be navigated and what cannot, based on the [NavigationMesh] resource.\n"
+"By default this node will register to the default [World] navigation map. If "
+"this node is a child of a [Navigation] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method NavigationServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The cost of entering this region from another region can be controlled with "
+"the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The cost of traveling distances inside this region can be controlled with "
+"the [member travel_cost] multiplier."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
@@ -36258,10 +36616,34 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding enters this region's navmesh from another regions navmesh "
+"the [code]enter_cost[/code] value is added to the path distance for "
+"determining the shortest path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationMesh] "
+"belongs to. On path requests with [method NavigationServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
msgid "The [NavigationMesh] resource to use."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding moves inside this region's navmesh the traveled distances "
+"are multiplied with [code]travel_cost[/code] for determining the shortest "
+"path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
msgid "Notifies when the navigation mesh bake operation is completed."
msgstr ""
@@ -36278,7 +36660,9 @@ msgid ""
"3D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationObstacle] is physics safe."
+"[NavigationObstacle] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle.xml
@@ -36318,7 +36702,9 @@ msgid ""
"2D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationObstacle2D] is physics safe."
+"[NavigationObstacle2D] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle2D.xml
@@ -36398,6 +36784,14 @@ msgstr ""
#: doc/classes/NavigationPolygon.xml
msgid ""
+"Returns the [NavigationMesh] resulting from this navigation polygon. This "
+"navmesh can be used to update the navmesh of a region with the [method "
+"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server "
+"behind the scene)."
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml
+msgid ""
"Returns a [PoolVector2Array] containing the vertices of an outline that was "
"created in the editor or by script."
msgstr ""
@@ -36434,6 +36828,30 @@ msgid ""
msgstr ""
#: doc/classes/NavigationPolygonInstance.xml
+msgid "A region of the 2D navigation map."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A region of the navigation map. It tells the [Navigation2DServer] what can "
+"be navigated and what cannot, based on its [NavigationPolygon] resource.\n"
+"By default this node will register to the default [World2D] navigation map. "
+"If this node is a child of a [Navigation2D] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The pathfinding cost of entering this region from another region can be "
+"controlled with the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The pathfinding cost of traveling distances inside this region can be "
+"controlled with the [member travel_cost] multiplier."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
msgid ""
"Returns the [RID] of this region on the [Navigation2DServer]. Combined with "
"[method Navigation2DServer.map_get_closest_point_owner] can be used to "
@@ -36441,6 +36859,22 @@ msgid ""
"navigation map."
msgstr ""
+#: doc/classes/NavigationPolygonInstance.xml
+msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationPolygon] "
+"belongs to. On path requests with [method Navigation2DServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid "The [NavigationPolygon] resource to use."
+msgstr ""
+
#: doc/classes/NavigationServer.xml
msgid "Server interface for low-level 3D navigation access."
msgstr ""
@@ -36516,6 +36950,12 @@ msgid "Bakes the navigation mesh."
msgstr ""
#: doc/classes/NavigationServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method NavigationServer.map_get_path])."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
msgid "Control activation of this server."
msgstr ""
@@ -37982,13 +38422,19 @@ msgstr ""
#: doc/classes/Node.xml
msgid ""
"Emitted when a child node enters the scene tree, either because it entered "
-"on its own or because this node entered with it."
+"on its own or because this node entered with it.\n"
+"This signal is emitted [i]after[/i] the child node's own [constant "
+"NOTIFICATION_ENTER_TREE] and [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
msgid ""
-"Emitted when a child node exits the scene tree, either because it exited on "
-"its own or because this node exited."
+"Emitted when a child node is about to exit the scene tree, either because it "
+"is being removed or freed directly, or because this node is exiting the "
+"tree.\n"
+"When this signal is received, the child [code]node[/code] is still in the "
+"tree and valid. This signal is emitted [i]after[/i] the child node's own "
+"[signal tree_exiting] and [constant NOTIFICATION_EXIT_TREE]."
msgstr ""
#: doc/classes/Node.xml
@@ -38000,7 +38446,10 @@ msgid "Emitted when the node is renamed."
msgstr ""
#: doc/classes/Node.xml
-msgid "Emitted when the node enters the tree."
+msgid ""
+"Emitted when the node enters the tree.\n"
+"This signal is emitted [i]after[/i] the related [constant "
+"NOTIFICATION_ENTER_TREE] notification."
msgstr ""
#: doc/classes/Node.xml
@@ -38010,15 +38459,21 @@ msgstr ""
#: doc/classes/Node.xml
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)."
+"the right place for de-initialization (or a \"destructor\", if you will).\n"
+"This signal is emitted [i]before[/i] the related [constant "
+"NOTIFICATION_EXIT_TREE] notification."
msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node enters a [SceneTree]."
+msgid ""
+"Notification received when the node enters a [SceneTree].\n"
+"This notification is emitted [i]before[/i] the related [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node is about to exit a [SceneTree]."
+msgid ""
+"Notification received when the node is about to exit a [SceneTree].\n"
+"This notification is emitted [i]after[/i] the related [signal tree_exiting]."
msgstr ""
#: doc/classes/Node.xml
@@ -38279,7 +38734,13 @@ msgid "Rotation in degrees, relative to the node's parent."
msgstr ""
#: doc/classes/Node2D.xml
-msgid "The node's scale. Unscaled value: [code](1, 1)[/code]."
+msgid ""
+"The node's scale. Unscaled value: [code](1, 1)[/code].\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
#: doc/classes/Node2D.xml
@@ -39719,6 +40180,10 @@ msgid ""
" if argument.find(\"=\") > -1:\n"
" var key_value = argument.split(\"=\")\n"
" arguments[key_value[0].lstrip(\"--\")] = key_value[1]\n"
+" else:\n"
+" # Options without an argument will be present in the dictionary,\n"
+" # with the value set to an empty string.\n"
+" arguments[argument.lstrip(\"--\")] = \"\"\n"
"[/codeblock]"
msgstr ""
@@ -40372,8 +40837,15 @@ msgstr ""
msgid ""
"Moves the file or directory to the system's recycle bin. See also [method "
"Directory.remove].\n"
+"The method takes only global paths, so you may need to use [method "
+"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/"
+"code] as it will not work in exported project.\n"
"[b]Note:[/b] If the user has disabled the recycle bin on their system, the "
-"file will be permanently deleted instead."
+"file will be permanently deleted instead.\n"
+"[codeblock]\n"
+"var file_to_remove = \"user://slot1.sav\"\n"
+"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/OS.xml
@@ -45212,7 +45684,18 @@ msgstr ""
#: doc/classes/PopupMenu.xml
msgid ""
"[PopupMenu] is a [Control] that displays a list of options. They are popular "
-"in toolbars or context menus."
+"in toolbars or context menus.\n"
+"[b]Incremental search:[/b] Like [ItemList] and [Tree], [PopupMenu] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/PopupMenu.xml
@@ -46719,7 +47202,16 @@ msgid ""
msgstr ""
#: doc/classes/ProjectSettings.xml
-msgid "Message to be displayed before the backtrace when the engine crashes."
+msgid ""
+"Message to be displayed before the backtrace when the engine crashes. By "
+"default, this message is only used in exported projects due to the editor-"
+"only override applied to this setting."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Editor-only override for [member debug/settings/crash_handler/message]. Does "
+"not affect exported projects in debug or release mode."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -46964,6 +47456,18 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default naming style for scene files to infer from their root nodes. "
+"Possible options are:\n"
+"- [code]0[/code] (Auto): Uses the scene root name as is without changing its "
+"casing.\n"
+"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase "
+"casing.\n"
+"- [code]2[/code] (snake_case): Converts the scene root name to snake_case "
+"casing."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -47189,6 +47693,198 @@ msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 1."
msgstr ""
@@ -47397,6 +48093,198 @@ msgid "Optional name for the 2D render layer 9."
msgstr ""
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 1."
msgstr ""
@@ -47664,6 +48552,49 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default cell height for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_height].\n"
+"[b]Note:[/b] Currently not implemented."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 2D navigation maps. See [method "
+"Navigation2DServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell height for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_height]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 3D navigation maps. See [method "
+"NavigationServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default map up vector for 3D navigation maps. See [method NavigationServer."
+"map_set_up]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -48337,20 +49268,28 @@ msgid ""
"cause.\n"
"The default value is a conservative one, so you are advised to tweak it "
"according to the hardware you are targeting.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"The default is a very conservative override for [code]rendering/gles3/"
-"shaders/max_concurrent_compiles[/code].\n"
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
"Depending on the specific devices you are targeting, you may want to raise "
"it.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
+"Depending on the specific browsers you are targeting, you may want to raise "
+"it.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -48358,19 +49297,28 @@ msgid ""
"The maximum size, in megabytes, that the ubershader cache can grow up to. On "
"startup, the least recently used entries will be deleted until the total "
"size is within bounds.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/ubershader_cache_size_mb[/"
-"code], so a smaller maximum size can be configured for mobile platforms, "
-"where storage space is more limited.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for mobile platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for web platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] Currently, shader caching is generally unavailable on web "
+"platforms.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -48402,14 +49350,22 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/shader_compilation_mode[/"
-"code], so asynchronous compilation can be disabled for mobile.\n"
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on mobile platforms.\n"
"You may want to do that since mobile GPUs generally won't support "
"ubershaders due to their complexity."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on web platforms.\n"
+"You may want to do that since certain browsers (especially on mobile "
+"platforms) generally won't support ubershaders due to their complexity."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
@@ -49166,7 +50122,6 @@ msgid ""
"- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/"
"code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, "
"small grid radius values may lead to unwanted groupings.\n"
-"[/codeblock]\n"
"[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more "
"effective and faster [VisibilityNotifier] functionality. For most use cases, "
"[method Vector3.distance_to] or [method Vector3.distance_squared_to] are "
@@ -51313,6 +52268,22 @@ msgid "Makes text fill width."
msgstr ""
#: doc/classes/RichTextLabel.xml
+msgid "Aligns top of the inline image to the top of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns center of the inline image to the center of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns bottom of the inline image to the baseline of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns bottom of the inline image to the bottom of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
msgid "Each list item has a number marker."
msgstr ""
@@ -53050,8 +54021,8 @@ msgid ""
" yield(get_tree().create_timer(1.0), \"timeout\")\n"
" print(\"Timer ended.\")\n"
"[/codeblock]\n"
-"The timer will be automatically freed after its time elapses, so be aware "
-"that any reference you might have kept to it will become invalid."
+"The timer will be dereferenced after its time elapses. To preserve the "
+"timer, you can keep a reference to it. See [Reference]."
msgstr ""
#: doc/classes/SceneTreeTimer.xml
@@ -53083,24 +54054,23 @@ msgid ""
"manually (i.e. by using [code]Tween.new()[/code]) are invalid. They can't be "
"used for tweening values, but you can do manual interpolation with [method "
"interpolate_value].\n"
-"A [SceneTreeTween] animation is composed of a sequence of [Tweener]s, which "
-"by default are executed one after another. You can create a sequence by "
-"appending [Tweener]s to the [SceneTreeTween]. Animating something with a "
-"[Tweener] is called tweening. Example tweening sequence looks like this:\n"
+"A tween animation is created by adding [Tweener]s to the [SceneTreeTween] "
+"object, using [method tween_property], [method tween_interval], [method "
+"tween_callback] or [method tween_method]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1)\n"
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"This sequence will make the [code]$Sprite[/code] node turn red, then shrink "
-"and finally the [method Node.queue_free] is called to remove the sprite. See "
-"methods [method tween_property], [method tween_interval], [method "
-"tween_callback] and [method tween_method] for more usage information.\n"
+"This sequence will make the [code]$Sprite[/code] node turn red, then shrink, "
+"before finally calling [method Node.queue_free] to free the sprite. "
+"[Tweener]s are executed one after another by default. This behavior can be "
+"changed using [method parallel] and [method set_parallel].\n"
"When a [Tweener] is created with one of the [code]tween_*[/code] methods, a "
"chained method call can be used to tweak the properties of this [Tweener]. "
-"For example, if you want to set different transition type in the above "
-"example, you can do:\n"
+"For example, if you want to set a different transition type in the above "
+"example, you can use [method set_trans]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1).set_trans(Tween."
@@ -53109,8 +54079,9 @@ msgid ""
"TRANS_BOUNCE)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Most of the [SceneTreeTween] methods can be chained this way too. In this "
-"example the [SceneTreeTween] is bound and have set a default transition:\n"
+"Most of the [SceneTreeTween] methods can be chained this way too. In the "
+"following example the [SceneTreeTween] is bound to the running script's node "
+"and a default transition is set for its [Tweener]s:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween().bind_node(self).set_trans(Tween."
"TRANS_ELASTIC)\n"
@@ -53118,16 +54089,16 @@ msgid ""
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Another interesting use for [SceneTreeTween]s is animating arbitrary set of "
+"Another interesting use for [SceneTreeTween]s is animating arbitrary sets of "
"objects:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"for sprite in get_children():\n"
-" tween.tween_property(sprite, \"position\", Vector2(), 1)\n"
+" tween.tween_property(sprite, \"position\", Vector2(0, 0), 1)\n"
"[/codeblock]\n"
"In the example above, all children of a node are moved one after another to "
"position (0, 0).\n"
-"Some [Tweener]s use transitions and eases. The first accepts an [enum Tween."
+"Some [Tweener]s use transitions and eases. The first accepts a [enum Tween."
"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 Tween.EaseType] constant, and "
@@ -53139,7 +54110,7 @@ msgid ""
"tween_cheatsheet.png]Tween easing and transition types cheatsheet[/url]\n"
"[b]Note:[/b] All [SceneTreeTween]s will automatically start by default. To "
"prevent a [SceneTreeTween] from autostarting, you can call [method stop] "
-"immediately after it was created."
+"immediately after it is created."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53169,21 +54140,24 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
-"Processes the [SceneTreeTween] by given [code]delta[/code] value, in "
-"seconds. Mostly useful when the [SceneTreeTween] is paused, for controlling "
-"it manually. Can also be used to end the [SceneTreeTween] animation "
-"immediately, by using [code]delta[/code] longer than the whole duration.\n"
+"Processes the [SceneTreeTween] by the given [code]delta[/code] value, in "
+"seconds. This is mostly useful for manual control when the [SceneTreeTween] "
+"is paused. It can also be used to end the [SceneTreeTween] animation "
+"immediately, by setting [code]delta[/code] longer than the whole duration of "
+"the [SceneTreeTween] animation.\n"
"Returns [code]true[/code] if the [SceneTreeTween] still has [Tweener]s that "
"haven't finished.\n"
-"[b]Note:[/b] The [SceneTreeTween] will become invalid after finished, but "
-"you can call [method stop] after the step, to keep it and reset."
+"[b]Note:[/b] The [SceneTreeTween] will become invalid in the next processing "
+"frame after its animation finishes. Calling [method stop] after performing "
+"[method custom_step] instead keeps and resets the [SceneTreeTween]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Returns the total time in seconds the [SceneTreeTween] has been animating (i."
-"e. time since it started, not counting pauses etc.). The time is affected by "
-"[method set_speed_scale] and [method stop] will reset it to [code]0[/code].\n"
+"e. the time since it started, not counting pauses etc.). The time is "
+"affected by [method set_speed_scale], and [method stop] will reset it to "
+"[code]0[/code].\n"
"[b]Note:[/b] As it results from accumulating frame deltas, the time returned "
"after the [SceneTreeTween] has finished animating will be slightly greater "
"than the actual [SceneTreeTween] duration."
@@ -53219,11 +54193,10 @@ msgstr ""
msgid ""
"Returns whether the [SceneTreeTween] is valid. A valid [SceneTreeTween] is a "
"[SceneTreeTween] contained by the scene tree (i.e. the array from [method "
-"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). "
-"[SceneTreeTween] might become invalid when it has finished tweening or was "
-"killed, also when created with [code]Tween.new()[/code]. Invalid "
-"[SceneTreeTween] can't have [Tweener]s appended, because it can't animate "
-"them. You can however still use [method interpolate_value]."
+"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). A "
+"[SceneTreeTween] might become invalid when it has finished tweening, is "
+"killed, or when created with [code]SceneTreeTween.new()[/code]. Invalid "
+"[SceneTreeTween]s can't have [Tweener]s appended."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53263,16 +54236,15 @@ msgstr ""
msgid ""
"Sets the number of times the tweening sequence will be repeated, i.e. "
"[code]set_loops(2)[/code] will run the animation twice.\n"
-"Calling this method without arguments will make the [SceneTreeTween] run "
-"infinitely, until it is either killed by [method kill] or by freeing bound "
-"node, or all the animated objects have been freed (which makes further "
+"Calling this method without arguments will make the [Tween] run infinitely, "
+"until either it is killed with [method kill], the [Tween]'s bound node is "
+"freed, or all the animated objects have been freed (which makes further "
"animation impossible).\n"
"[b]Warning:[/b] Make sure to always add some duration/delay when using "
-"infinite loops. 0-duration looped animations (e.g. single [CallbackTweener] "
-"with no delay or [PropertyTweener] with invalid node) are equivalent to "
-"infinite [code]while[/code] loops and will freeze your game. If a "
-"[SceneTreeTween]'s lifetime depends on some node, always use [method "
-"bind_node]."
+"infinite loops. To prevent the game freezing, 0-duration looped animations "
+"(e.g. a single [CallbackTweener] with no delay) are stopped after a small "
+"number of loops, which may produce unexpected results. If a [Tween]'s "
+"lifetime depends on some node, always use [method bind_node]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53334,10 +54306,10 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Creates and appends an [IntervalTweener]. This method can be used to create "
-"delays in the tween animation, as an alternative for using the delay in "
-"other [Tweener]s or when there's no animation (in which case the "
-"[SceneTreeTween] acts as a timer). [code]time[/code] is the length of the "
-"interval, in seconds.\n"
+"delays in the tween animation, as an alternative to using the delay in other "
+"[Tweener]s, or when there's no animation (in which case the [SceneTreeTween] "
+"acts as a timer). [code]time[/code] is the length of the interval, in "
+"seconds.\n"
"Example: creating an interval in code execution.\n"
"[codeblock]\n"
"# ... some code\n"
@@ -53391,8 +54363,8 @@ msgid ""
"Creates and appends a [PropertyTweener]. This method tweens a "
"[code]property[/code] of an [code]object[/code] between an initial value and "
"[code]final_val[/code] in a span of time equal to [code]duration[/code], in "
-"seconds. The initial value by default is a value at the time the tweening of "
-"the [PropertyTweener] start. For example:\n"
+"seconds. The initial value by default is the property's value at the time "
+"the tweening of the [PropertyTweener] starts. For example:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"tween.tween_property($Sprite, \"position\", Vector2(100, 200), 1)\n"
@@ -53423,16 +54395,15 @@ msgid ""
"Emitted when the [SceneTreeTween] has finished all tweening. Never emitted "
"when the [SceneTreeTween] is set to infinite looping (see [method "
"set_loops]).\n"
-"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) after this signal "
-"is emitted, but it doesn't happen immediately, but on the next processing "
-"frame. Calling [method stop] inside the signal callback will preserve the "
-"[SceneTreeTween]."
+"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) in the next "
+"processing frame after this signal is emitted. Calling [method stop] inside "
+"the signal callback will prevent the [SceneTreeTween] from being removed."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Emitted when a full loop is complete (see [method set_loops]), providing the "
-"loop index. This signal is not emitted after final loop, use [signal "
+"loop index. This signal is not emitted after the final loop, use [signal "
"finished] instead for this case."
msgstr ""
@@ -53440,7 +54411,7 @@ msgstr ""
msgid ""
"Emitted when one step of the [SceneTreeTween] is complete, providing the "
"step index. One step is either a single [Tweener] or a group of [Tweener]s "
-"running parallelly."
+"running in parallel."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -54772,7 +55743,12 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-msgid "Scale part of the local transformation."
+msgid ""
+"Scale part of the local transformation.\n"
+"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, the scale values will either be all "
+"positive or all negative."
msgstr ""
#: doc/classes/Spatial.xml
@@ -57403,11 +58379,11 @@ msgstr ""
msgid ""
"Returns [code]true[/code] if this string contains a valid integer.\n"
"[codeblock]\n"
-"print(\"7\".is_valid_int()) # Prints \"True\"\n"
-"print(\"14.6\".is_valid_int()) # Prints \"False\"\n"
-"print(\"L\".is_valid_int()) # Prints \"False\"\n"
-"print(\"+3\".is_valid_int()) # Prints \"True\"\n"
-"print(\"-12\".is_valid_int()) # Prints \"True\"\n"
+"print(\"7\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"14.6\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"L\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"+3\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"-12\".is_valid_integer()) # Prints \"True\"\n"
"[/codeblock]"
msgstr ""
@@ -60873,6 +61849,10 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml
+msgid "If [code]true[/code], this TileMap bakes a navigation region."
+msgstr ""
+
+#: doc/classes/TileMap.xml
msgid "If [code]true[/code], the cell's UVs will be clipped."
msgstr ""
@@ -60979,6 +61959,10 @@ msgid "The TileMap orientation mode. See [enum Mode] for possible values."
msgstr ""
#: doc/classes/TileMap.xml
+msgid "The navigation layers the TileMap generates its navigation regions in."
+msgstr ""
+
+#: doc/classes/TileMap.xml
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 "
@@ -62110,7 +63094,12 @@ msgstr ""
#: doc/classes/Transform2D.xml
msgid ""
"Returns a copy of the transform scaled by the given [code]scale[/code] "
-"factor, using matrix multiplication."
+"factor, using matrix multiplication.\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
#: doc/classes/Transform2D.xml
@@ -62265,7 +63254,18 @@ msgid ""
"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]."
+"to remove it from the [Tree].\n"
+"[b]Incremental search:[/b] Like [ItemList] and [PopupMenu], [Tree] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/Tree.xml
@@ -65781,11 +66781,12 @@ msgid "This enabler will stop [Particles2D] nodes."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _process function."
+msgid "This enabler will stop the parent's [method Node._process] function."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _physics_process function."
+msgid ""
+"This enabler will stop the parent's [method Node._physics_process] function."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
@@ -65825,6 +66826,16 @@ msgid "The VisibilityNotifier's bounding box."
msgstr ""
#: doc/classes/VisibilityNotifier.xml
+msgid ""
+"In addition to checking whether a node is on screen or within a [Camera]'s "
+"view, VisibilityNotifier can also optionally check whether a node is within "
+"a specified maximum distance when using a [Camera] with perspective "
+"projection. This is useful for throttling the performance requirements of "
+"nodes that are far away.\n"
+"[b]Note:[/b] This feature will be disabled if set to 0.0."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier.xml
msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view."
msgstr ""
@@ -70570,6 +71581,16 @@ msgid "The amount of shader rebinds in the frame."
msgstr ""
#: doc/classes/VisualServer.xml
+msgid ""
+"The peak amount of shaders that have been under compilation in the frame.\n"
+"This is useful to know when asynchronous shader compilation has finished for "
+"the current shaders on screen.\n"
+"[b]Note:[/b] For complete certainty, only assume there are no outstanding "
+"compilations when this value is zero for at least two frames in a row.\n"
+"Unimplemented in the GLES2 rendering backend, always returns 0."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
msgid "The amount of surface changes in the frame."
msgstr ""
@@ -73766,8 +74787,8 @@ msgstr ""
#: doc/classes/World.xml
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."
+"scenario, a navigation map and a sound space. Spatial nodes register their "
+"resources into the current world."
msgstr ""
#: doc/classes/World.xml
@@ -73782,8 +74803,13 @@ msgstr ""
#: doc/classes/World.xml
msgid ""
-"The World's fallback_environment will be used if the World's [Environment] "
-"fails or is missing."
+"The World's fallback environment will be used if [member environment] fails "
+"or is missing."
+msgstr ""
+
+#: doc/classes/World.xml
+msgid ""
+"The [RID] of this world's navigation map. Used by the [NavigationServer]."
msgstr ""
#: doc/classes/World.xml
@@ -73801,8 +74827,8 @@ msgstr ""
#: doc/classes/World2D.xml
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."
+"visual scenario, a navigation map and a sound space. 2D nodes register their "
+"resources into the current 2D world."
msgstr ""
#: doc/classes/World2D.xml
@@ -73820,6 +74846,11 @@ msgstr ""
#: doc/classes/World2D.xml
msgid ""
+"The [RID] of this world's navigation map. Used by the [Navigation2DServer]."
+msgstr ""
+
+#: doc/classes/World2D.xml
+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 ""
diff --git a/doc/translations/lv.po b/doc/translations/lv.po
index 4d637de366..627035b696 100644
--- a/doc/translations/lv.po
+++ b/doc/translations/lv.po
@@ -362,7 +362,7 @@ msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
msgid ""
"Compares two values by checking their actual contents, recursing into any "
-"`Array` or `Dictionary` up to its deepest level.\n"
+"[Array] or [Dictionary] up to its deepest level.\n"
"This compares to [code]==[/code] in a number of ways:\n"
"- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/"
"code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] "
@@ -409,7 +409,7 @@ msgid ""
"- 1.0: Linear\n"
"- Greater than 1.0 (exclusive): Ease in\n"
"[/codeblock]\n"
-"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.4/img/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/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]."
@@ -1116,7 +1116,7 @@ msgid ""
"[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/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/img/"
"smoothstep_ease_comparison.png]Comparison between smoothstep() and ease(x, "
"-1.6521) return values[/url]"
msgstr ""
@@ -3394,6 +3394,12 @@ msgstr ""
#: doc/classes/@GlobalScope.xml
msgid ""
+"Hints that an integer property is a bitmask using the optionally named 2D "
+"navigation layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml
+msgid ""
"Hints that an integer property is a bitmask using the optionally named 3D "
"render layers."
msgstr ""
@@ -3406,6 +3412,12 @@ msgstr ""
#: doc/classes/@GlobalScope.xml
msgid ""
+"Hints that an integer property is a bitmask using the optionally named 3D "
+"navigation layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml
+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]."
@@ -8381,7 +8393,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/AStar.xml
+#: doc/classes/AStar.xml doc/classes/AStar2D.xml
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[/"
@@ -8580,7 +8592,10 @@ msgid ""
msgstr ""
#: doc/classes/AStar2D.xml
-msgid "Returns whether there is a connection/segment between the given points."
+msgid ""
+"Returns whether there is a connection/segment between the given points. 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/AStar2D.xml
@@ -8597,10 +8612,6 @@ msgid ""
msgstr ""
#: doc/classes/AStar2D.xml
-msgid "Deletes the segment between the given points."
-msgstr ""
-
-#: doc/classes/AStar2D.xml
msgid ""
"Returns the closest position to [code]to_position[/code] that resides inside "
"a segment between two connected points.\n"
@@ -8785,7 +8796,9 @@ msgid ""
"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."
+"transmit audio over the network. When capturing audio data from a "
+"microphone, the format of the samples will be stereo 32-bit floating point "
+"PCM."
msgstr ""
#: doc/classes/AudioEffectCapture.xml
@@ -13628,7 +13641,7 @@ msgid ""
msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
-#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/Navigation2D.xml
msgid "Returns the object's [RID]."
msgstr ""
@@ -19103,11 +19116,14 @@ msgid ""
msgstr ""
#: doc/classes/CurveTexture.xml
-msgid "The [code]curve[/code] rendered onto the texture."
+msgid "The [Curve] that is rendered onto the texture."
msgstr ""
#: doc/classes/CurveTexture.xml
-msgid "The width of the texture."
+msgid ""
+"The width of the texture (in pixels). Higher values make it possible to "
+"represent high-frequency data better (such as sudden direction changes), at "
+"the cost of increased generation time and memory usage."
msgstr ""
#: doc/classes/CylinderMesh.xml
@@ -19393,6 +19409,13 @@ msgid "Returns the list of keys in the [Dictionary]."
msgstr ""
#: doc/classes/Dictionary.xml
+msgid ""
+"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, "
+"duplicate keys will not be copied over, unless [code]overwrite[/code] is "
+"[code]true[/code]."
+msgstr ""
+
+#: doc/classes/Dictionary.xml
msgid "Returns the number of keys in the dictionary."
msgstr ""
@@ -21331,9 +21354,23 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide a state data you want to be saved, like view "
+"position, grid settings, folding, etc. 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). This data is automatically saved for "
+"each scene in an [code]editstate[/code] file in the editor metadata folder. "
+"If you want to store global (scene-independent) editor data for your plugin, "
+"you can use [method get_window_layout] instead.\n"
+"Use [method set_state] to restore your saved state.\n"
+"[b]Note:[/b] This method should not be used to save important settings that "
+"should persist with the project.\n"
+"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be "
+"stored and restored correctly.\n"
+"[codeblock]\n"
+"func get_state():\n"
+" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n"
+" return state\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -21344,9 +21381,18 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide the GUI layout of the plugin or any other "
+"data you want to be stored. 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). The data is stored in the "
+"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n"
+"Use [method set_window_layout] to restore your saved layout.\n"
+"[codeblock]\n"
+"func get_window_layout(configuration):\n"
+" configuration.set_value(\"MyPlugin\", \"window_position\", $Window."
+"position)\n"
+" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -21459,11 +21505,30 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the state saved by [method get_state]."
+msgid ""
+"Restore the state saved by [method get_state]. This method is called when "
+"the current scene tab is changed in the editor.\n"
+"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise "
+"it will not be recognized and this method will not be called.\n"
+"[codeblock]\n"
+"func set_state(data):\n"
+" zoom = data.get(\"zoom\", 1.0)\n"
+" preferred_color = data.get(\"my_color\", Color.white)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the plugin GUI layout saved by [method get_window_layout]."
+msgid ""
+"Restore the plugin GUI layout and data saved by [method get_window_layout]. "
+"This method is called for every plugin on editor startup. Use the provided "
+"[code]configuration[/code] file to read your saved data.\n"
+"[codeblock]\n"
+"func set_window_layout(configuration):\n"
+" $Window.position = configuration.get_value(\"MyPlugin\", "
+"\"window_position\", Vector2())\n"
+" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", "
+"Color.white)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -26101,7 +26166,8 @@ msgid ""
"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])."
+"at fixed steps (see [member width]). See also [GradientTexture2D] and "
+"[CurveTexture]."
msgstr ""
#: doc/classes/GradientTexture.xml
@@ -26123,7 +26189,8 @@ msgid ""
"repeat] types using colors obtained from the gradient. 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] and [member height])."
+"[member width] and [member height]). See also [GradientTexture] and "
+"[CurveTexture]."
msgstr ""
#: doc/classes/GradientTexture2D.xml
@@ -26929,6 +26996,12 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+msgid ""
+"If [code]true[/code], this GridMap uses cell navmesh resources to create "
+"navigation regions."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid "If [code]true[/code], grid items are centered on the X axis."
msgstr ""
@@ -26979,6 +27052,10 @@ msgid "The assigned [MeshLibrary]."
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+msgid "The navigation layers the GridMap generates its navigation regions in."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
"Overrides the default friction and bounce physics properties for the whole "
"[GridMap]."
@@ -28202,7 +28279,7 @@ msgid ""
" # 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 body = to_json({\"name\": \"Godette\"})\n"
" error = http_request.request(\"https://httpbin.org/post\", [], true, "
"HTTPClient.METHOD_POST, body)\n"
" if error != OK:\n"
@@ -29369,7 +29446,7 @@ msgstr ""
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 "
+"([member 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 "
@@ -29518,10 +29595,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Returns the mouse mode. See the constants for more information."
-msgstr ""
-
-#: doc/classes/Input.xml
msgid ""
"Gets an input vector by specifying four actions for the positive and "
"negative X and Y axes.\n"
@@ -29715,24 +29788,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Sets the mouse mode. See the constants for more information."
-msgstr ""
-
-#: doc/classes/Input.xml
-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
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 "
@@ -29768,6 +29823,24 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
+msgid "Controls the mouse mode. See [enum MouseMode] for more information."
+msgstr ""
+
+#: doc/classes/Input.xml
+msgid ""
+"If [code]true[/code], similar input events sent by the operating system are "
+"accumulated. 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 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
msgid "Emitted when a joypad device has been connected or disconnected."
msgstr ""
@@ -30075,8 +30148,8 @@ msgstr ""
#: doc/classes/InputEventJoypadButton.xml
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]."
+"Represents the pressure the user puts on the button with their finger, if "
+"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]."
msgstr ""
#: doc/classes/InputEventJoypadMotion.xml
@@ -30339,9 +30412,9 @@ 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 "
+"at most. If you need more precise input reporting, set [member Input."
+"use_accumulated_input] to [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."
@@ -30828,7 +30901,18 @@ msgid ""
"[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."
+"fixed_column_width] greater than zero to wrap the text.\n"
+"[b]Incremental search:[/b] Like [PopupMenu] and [Tree], [ItemList] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/ItemList.xml
@@ -34575,11 +34659,16 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Returns the override [Material] for a surface of the [Mesh] resource.\n"
+"[b]Note:[/b] This function only returns [i]override[/i] materials associated "
+"with this [MeshInstance]. Consider using [method get_active_material] or "
+"[method Mesh.surface_get_material] to get materials associated with the "
+"[Mesh] resource."
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the number of surface materials."
+msgid "Returns the number of surface override materials."
msgstr ""
#: doc/classes/MeshInstance.xml
@@ -34616,7 +34705,10 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Sets the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Sets the override [Material] for the specified surface of the [Mesh] "
+"resource. This material is associated with this [MeshInstance] rather than "
+"with the [Mesh] resource."
msgstr ""
#: doc/classes/MeshInstance.xml
@@ -34647,9 +34739,10 @@ msgstr ""
#: doc/classes/MeshInstance2D.xml
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\"."
+"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be "
+"automatically created from an existing [Sprite] via a tool in the editor "
+"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to "
+"MeshInstance2D[/b] at the top of the 2D editor viewport."
msgstr ""
#: doc/classes/MeshInstance2D.xml
@@ -35407,6 +35500,9 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"Provides navigation and pathfinding within a collection of "
"[NavigationMesh]es. By default, these will be automatically collected from "
"child [NavigationMeshInstance] nodes. In addition to basic pathfinding, this "
@@ -35447,7 +35543,14 @@ msgid ""
msgstr ""
#: doc/classes/Navigation.xml
+msgid "Returns the [RID] of the navigation map on the [NavigationServer]."
+msgstr ""
+
+#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"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, "
@@ -35469,16 +35572,31 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation.get_simple_path] path query."
+msgstr ""
+
+#: doc/classes/Navigation.xml
+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/Navigation.xml doc/classes/Navigation2DServer.xml
+#: doc/classes/NavigationServer.xml
+msgid ""
+"Emitted when a navigation map is updated, when a region moves or is modified."
+msgstr ""
+
#: doc/classes/Navigation2D.xml
msgid "2D navigation and pathfinding node."
msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -35498,6 +35616,9 @@ msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -35507,6 +35628,12 @@ msgstr ""
msgid "The XY plane cell size to use for fields."
msgstr ""
+#: doc/classes/Navigation2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation2D.get_simple_path] path query."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml
msgid "Server interface for low-level 2D navigation access."
msgstr ""
@@ -35523,8 +35650,12 @@ msgid ""
"through scripts.\n"
"For two regions to be connected to each other, they must share a similar "
"edge. An edge is considered connected to another if both of its two vertices "
-"are at a distance less than [member Navigation.edge_connection_margin] to "
-"the respective other edge's vertex.\n"
+"are at a distance less than navigation map [code]edge_connection_margin[/"
+"code] to the respective other edge's vertex.\n"
+"You may assign navigation layers to regions with [method Navigation2DServer."
+"region_set_navigation_layers], which then can be checked upon when "
+"requesting a path with [method Navigation2DServer.map_get_path]. This allows "
+"allowing or forbidding some areas to 2D objects.\n"
"To use the collision avoidance system, you may use agents. You can set an "
"agent's target velocity, then the servers will emit a callback with a "
"modified velocity.\n"
@@ -35552,7 +35683,17 @@ msgid "Returns [code]true[/code] if the map got changed the previous frame."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Callback called at the end of the RVO process."
+msgid ""
+"Callback called at the end of the RVO process. If a callback is created "
+"manually and the agent is placed on a navigation map it will calculate "
+"avoidance for the agent and dispatch the calculated [code]safe_velocity[/"
+"code] to the [code]receiver[/code] object with a signal to the chosen "
+"[code]method[/code] name.\n"
+"[b]Note:[/b] Created callbacks are always processed independently of the "
+"SceneTree state as long as the agent is on a navigation map and not freed. "
+"To disable the dispatch of a callback from an agent use [method "
+"agent_set_callback] again with a [code]null[/code] object as the "
+"[code]receiver[/code]."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -35607,15 +35748,55 @@ msgid "Destroys the given RID."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns all created navigation map [RID]s on the NavigationServer. This "
+"returns both 2D and 3D created navigation maps as there is technically no "
+"distinction between them."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Create a new map."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"This function immediately forces synchronization of the specified navigation "
+"[code]map[/code] [RID]. By default navigation maps are only synchronized at "
+"the end of each physics frame. This function can be used to immediately "
+"(re)calculate all the navigation meshes and region connections of the "
+"navigation map. This makes it possible to query a navigation path for a "
+"changed map immediately and in the same frame (multiple times if needed).\n"
+"Due to technical restrictions the current NavigationServer command queue "
+"will be flushed. This means all already queued update commands for this "
+"physics frame will be executed, even those intended for other maps, regions "
+"and agents not part of the specified map. The expensive computation of the "
+"navigation meshes and region connections of a map will only be done for the "
+"specified map. Other maps will receive the normal synchronization at the end "
+"of the physics frame. Should the specified map receive changes after the "
+"forced update it will update again as well when the other maps receive their "
+"update.\n"
+"Avoidance processing and dispatch of the [code]safe_velocity[/code] signals "
+"is untouched by this function and continues to happen for all maps and "
+"agents at the end of the physics frame.\n"
+"[b]Note:[/b] With great power comes great responsibility. This function "
+"should only be used by users that really know what they are doing and have a "
+"good reason for it. Forcing an immediate update of a navigation map requires "
+"locking the NavigationServer and flushing the entire NavigationServer "
+"command queue. Not only can this severely impact the performance of a game "
+"but it can also introduce bugs if used inappropriately without much "
+"foresight."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns all navigation agents [RID]s that are currently assigned to the "
"requested navigation [code]map[/code]."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Returns the map cell size."
msgstr ""
@@ -35639,7 +35820,10 @@ msgid ""
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Returns the navigation path to reach the destination from the origin."
+msgid ""
+"Returns the navigation path to reach the destination from the origin. "
+"[code]navigation_layers[/code] is a bitmask of all region layers that are "
+"allowed to be in the path."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -35656,6 +35840,12 @@ msgstr ""
msgid "Sets the map active."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/"
+"b] Currently not implemented."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Set the map cell size used to weld the navigation mesh polygons."
msgstr ""
@@ -35671,14 +35861,73 @@ msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"Returns the ending point of a connection door. [code]connection[/code] is an "
+"index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns the starting point of a connection door. [code]connection[/code] is "
+"an index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns how many connections this [code]region[/code] has with other regions "
+"in the map."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns the navigation map [RID] the requested [code]region[/code] is "
"currently assigned to."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Returns the region's navigation layers."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns [code]true[/code] if the provided [code]point[/code] in world space "
+"is currently owned by the provided navigation [code]region[/code]. Owned in "
+"this context means that one of the region's navigation mesh polygon faces "
+"has a possible position at the closest distance to this point compared to "
+"all other navigation meshes from other navigation regions that are also "
+"registered on the navigation map of the provided region.\n"
+"If multiple navigation meshes have positions at equal distance the "
+"navigation region whose polygons are processed first wins the ownership. "
+"Polygons are processed in the same order that navigation regions were "
+"registered on the NavigationServer.\n"
+"[b]Note:[/b] If navigation meshes from different navigation regions overlap "
+"(which should be avoided in general) the result might not be what is "
+"expected."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Sets the map for the region."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method Navigation2DServer.map_get_path])."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Sets the navigation mesh for the region."
msgstr ""
@@ -35687,6 +35936,10 @@ msgstr ""
msgid "Sets the global transformation for the region."
msgstr ""
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]."
+msgstr ""
+
#: doc/classes/NavigationAgent.xml
msgid "3D agent used in navigation for collision avoidance."
msgstr ""
@@ -35696,9 +35949,16 @@ msgid ""
"3D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationAgent] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World] navigation map. If this node is a child of a [Navigation] "
+"node it will register to the navigation map of the navigation node or the "
+"function [method set_navigation] can be used to set the navigation node "
+"directly. [NavigationAgent] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -35716,7 +35976,15 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-msgid "Returns the path from start to finish in global coordinates."
+msgid ""
+"Returns this agent's current path from start to finish in global "
+"coordinates. The path only updates when the target location is changed or "
+"the agent requires a repath. The path array is not intended to be used in "
+"direct path movement as the agent has its own internal path logic that would "
+"get corrupted by changing the path array manually. Use the intended [method "
+"get_next_location] once every physics frame to receive the next path point "
+"for the agents movement as this function also updates the internal path "
+"logic."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -35731,11 +35999,24 @@ msgid ""
"system."
msgstr ""
-#: doc/classes/NavigationAgent.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"Returns a [Vector3] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the origin of the agent's parent."
+"Returns the [RID] of the navigation map for this NavigationAgent node. This "
+"function returns always the map set on the NavigationAgent node and not the "
+"map of the abstract agent on the NavigationServer. If the agent map is "
+"changed directly with the NavigationServer API the NavigationAgent node will "
+"not be aware of the map change. Use [method set_navigation_map] to change "
+"the navigation map for the NavigationAgent and also update the agent on the "
+"NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
+"Returns the next location in global coordinates that can be moved to, making "
+"sure that there are no static objects in the way. If the agent does not have "
+"a navigation path, it will return the position of the agent's parent. The "
+"use of this function once every physics frame is required to update the "
+"internal path logic of the NavigationAgent."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -35776,6 +36057,12 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"Sets the [RID] of the navigation map this NavigationAgent node should use "
+"and also updates the [code]agent[/code] on the NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"Sets the user desired final location. This will clear the current navigation "
"path."
msgstr ""
@@ -35788,7 +36075,13 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml
-msgid "The agent height offset to match the navigation mesh height."
+msgid ""
+"The NavigationAgent height offset is subtracted from the y-axis value of any "
+"vector path position for this NavigationAgent. The NavigationAgent height "
+"offset does not change or influence the navigation mesh or pathfinding query "
+"result. Additional navigation maps that use regions with navigation meshes "
+"that the developer baked with appropriate agent radius or height values are "
+"required to support different-sized agents."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -35815,26 +36108,53 @@ msgstr ""
msgid "The maximum speed that an agent can move."
msgstr ""
+#: doc/classes/NavigationAgent.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "The distance to search for other agents."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"The distance threshold before a path point is considered to be reached. This "
+"will allow an agent to not have to hit a path point on the path exactly, but "
+"in the area. If this value is set to high the NavigationAgent will skip "
+"points on the path which can lead to leaving the navigation mesh. If this "
+"value is set to low the NavigationAgent will be stuck in a repath loop cause "
+"it will constantly overshoot or undershoot the distance to the next point on "
+"each physics frame update."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"The maximum distance the agent is allowed away from the ideal path to the "
"final location. This can happen due to trying to avoid collisions. When the "
"maximum distance is exceeded, it recalculates the ideal path."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-msgid "The radius of the agent."
+msgid ""
+"The radius of the avoidance agent. This is the \"body\" of the avoidance "
+"agent and not the avoidance maneuver starting radius (which is controlled by "
+"[member neighbor_dist]).\n"
+"Does not affect normal pathfinding. To change an actor's pathfinding radius "
+"bake [NavigationMesh] resources with a different [member NavigationMesh."
+"agent_radius] property and use different navigation maps for each actor size."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"The distance threshold before a target is considered to be reached. This "
-"will allow an agent to not have to hit a point on the path exactly, but in "
-"the area."
+"The distance threshold before the final target point is considered to be "
+"reached. This will allow an agent to not have to hit the point of the final "
+"target exactly, but only the area. If this value is set to low the "
+"NavigationAgent will be stuck in a repath loop cause it will constantly "
+"overshoot or undershoot the distance to the final target point on each "
+"physics frame update."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -35877,9 +36197,16 @@ msgid ""
"2D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationAgent2D] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World2D] navigation map. If this node is a child of a "
+"[Navigation2D] node it will register to the navigation map of the navigation "
+"node or the function [method set_navigation] can be used to set the "
+"navigation node directly. [NavigationAgent2D] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent2D.xml
@@ -35895,13 +36222,6 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent2D.xml
-msgid ""
-"Returns a [Vector2] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the position of the agent's parent."
-msgstr ""
-
-#: doc/classes/NavigationAgent2D.xml
msgid "Returns the [RID] of this agent on the [Navigation2DServer]."
msgstr ""
@@ -35921,6 +36241,13 @@ msgid ""
"only be enabled on agents that currently require it."
msgstr ""
+#: doc/classes/NavigationAgent2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent2D] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationMesh.xml
msgid "A mesh to approximate the walkable areas and obstacles."
msgstr ""
@@ -35951,8 +36278,8 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
-"Returns whether the specified [code]bit[/code] of the [member geometry/"
-"collision_mask] is set."
+"Returns whether the specified [code]bit[/code] of the [member "
+"geometry_collision_mask] is set."
msgstr ""
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
@@ -35974,9 +36301,9 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/"
-"code] in the [member geometry/collision_mask].\n"
+"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]."
+"code] in the [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
@@ -35990,14 +36317,14 @@ 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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36009,7 +36336,7 @@ 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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36037,13 +36364,17 @@ msgstr ""
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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
-"If [code]true[/code], marks walkable spans as not walkable if the clearance "
-"above the span is less than [member agent/height]."
+"If the baking [AABB] has a volume the navigation mesh baking will be "
+"restricted to its enclosing area."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+msgid "The position offset applied to the [member filter_baking_aabb] [AABB]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36053,13 +36384,19 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]true[/code], marks non-walkable spans as walkable if their maximum "
-"is within [member agent/max_climb] of a walkable neighbor."
+"is within [member agent_max_climb] of a walkable neighbor."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+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
msgid ""
"The physics layers to scan for static colliders.\n"
-"Only used when [member geometry/parsed_geometry_type] is [constant "
+"Only used when [member geometry_parsed_geometry_type] is [constant "
"PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]."
msgstr ""
@@ -36078,7 +36415,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"The name of the group to scan for geometry.\n"
-"Only used when [member geometry/source_geometry_mode] is [constant "
+"Only used when [member geometry_source_geometry_mode] is [constant "
"SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant "
"SOURCE_GEOMETRY_GROUPS_EXPLICIT]."
msgstr ""
@@ -36141,7 +36478,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Parses [StaticBody] colliders as geometry. The collider should be in any of "
-"the layers specified by [member geometry/collision_mask]."
+"the layers specified by [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36162,13 +36499,13 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Scans nodes in a group and their child nodes recursively for geometry. The "
-"group is specified by [member geometry/source_group_name]."
+"group is specified by [member geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Uses nodes in a group for geometry. The group is specified by [member "
-"geometry/source_group_name]."
+"geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36210,7 +36547,15 @@ msgid ""
"geometry for walkable terrain suitable to [NavigationMesh] agent properties "
"by creating a voxel world around the meshes bounding area.\n"
"The finalized navigation mesh is then returned and stored inside the "
-"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes."
+"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] "
+"nodes.\n"
+"[b]Note:[/b] Using meshes to not only define walkable surfaces but also "
+"obstruct navigation baking does not always work. The navigation baking has "
+"no concept of what is a geometry \"inside\" when dealing with mesh source "
+"geometry and this is intentional. Depending on current baking parameters, as "
+"soon as the obstructing mesh is large enough to fit a navigation mesh area "
+"inside, the baking will generate navigation mesh areas that are inside the "
+"obstructing source geometry mesh."
msgstr ""
#: doc/classes/NavigationMeshGenerator.xml
@@ -36218,8 +36563,8 @@ msgid ""
"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child "
"nodes under the provided [code]root_node[/code] or a specific group of nodes "
"for potential source geometry. The parse behavior can be controlled with the "
-"[member NavigationMesh.geometry/parsed_geometry_type] and [member "
-"NavigationMesh.geometry/source_geometry_mode] properties on the "
+"[member NavigationMesh.geometry_parsed_geometry_type] and [member "
+"NavigationMesh.geometry_source_geometry_mode] properties on the "
"[NavigationMesh] resource."
msgstr ""
@@ -36236,8 +36581,21 @@ msgstr ""
#: doc/classes/NavigationMeshInstance.xml
msgid ""
"An instance of a [NavigationMesh]. It tells the [Navigation] node what can "
-"be navigated and what cannot, based on the [NavigationMesh] resource. This "
-"should be a child of a [Navigation] node."
+"be navigated and what cannot, based on the [NavigationMesh] resource.\n"
+"By default this node will register to the default [World] navigation map. If "
+"this node is a child of a [Navigation] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method NavigationServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The cost of entering this region from another region can be controlled with "
+"the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The cost of traveling distances inside this region can be controlled with "
+"the [member travel_cost] multiplier."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
@@ -36266,10 +36624,34 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding enters this region's navmesh from another regions navmesh "
+"the [code]enter_cost[/code] value is added to the path distance for "
+"determining the shortest path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationMesh] "
+"belongs to. On path requests with [method NavigationServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
msgid "The [NavigationMesh] resource to use."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding moves inside this region's navmesh the traveled distances "
+"are multiplied with [code]travel_cost[/code] for determining the shortest "
+"path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
msgid "Notifies when the navigation mesh bake operation is completed."
msgstr ""
@@ -36286,7 +36668,9 @@ msgid ""
"3D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationObstacle] is physics safe."
+"[NavigationObstacle] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle.xml
@@ -36326,7 +36710,9 @@ msgid ""
"2D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationObstacle2D] is physics safe."
+"[NavigationObstacle2D] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle2D.xml
@@ -36406,6 +36792,14 @@ msgstr ""
#: doc/classes/NavigationPolygon.xml
msgid ""
+"Returns the [NavigationMesh] resulting from this navigation polygon. This "
+"navmesh can be used to update the navmesh of a region with the [method "
+"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server "
+"behind the scene)."
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml
+msgid ""
"Returns a [PoolVector2Array] containing the vertices of an outline that was "
"created in the editor or by script."
msgstr ""
@@ -36442,6 +36836,30 @@ msgid ""
msgstr ""
#: doc/classes/NavigationPolygonInstance.xml
+msgid "A region of the 2D navigation map."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A region of the navigation map. It tells the [Navigation2DServer] what can "
+"be navigated and what cannot, based on its [NavigationPolygon] resource.\n"
+"By default this node will register to the default [World2D] navigation map. "
+"If this node is a child of a [Navigation2D] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The pathfinding cost of entering this region from another region can be "
+"controlled with the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The pathfinding cost of traveling distances inside this region can be "
+"controlled with the [member travel_cost] multiplier."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
msgid ""
"Returns the [RID] of this region on the [Navigation2DServer]. Combined with "
"[method Navigation2DServer.map_get_closest_point_owner] can be used to "
@@ -36449,6 +36867,22 @@ msgid ""
"navigation map."
msgstr ""
+#: doc/classes/NavigationPolygonInstance.xml
+msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationPolygon] "
+"belongs to. On path requests with [method Navigation2DServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid "The [NavigationPolygon] resource to use."
+msgstr ""
+
#: doc/classes/NavigationServer.xml
msgid "Server interface for low-level 3D navigation access."
msgstr ""
@@ -36524,6 +36958,12 @@ msgid "Bakes the navigation mesh."
msgstr ""
#: doc/classes/NavigationServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method NavigationServer.map_get_path])."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
msgid "Control activation of this server."
msgstr ""
@@ -37990,13 +38430,19 @@ msgstr ""
#: doc/classes/Node.xml
msgid ""
"Emitted when a child node enters the scene tree, either because it entered "
-"on its own or because this node entered with it."
+"on its own or because this node entered with it.\n"
+"This signal is emitted [i]after[/i] the child node's own [constant "
+"NOTIFICATION_ENTER_TREE] and [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
msgid ""
-"Emitted when a child node exits the scene tree, either because it exited on "
-"its own or because this node exited."
+"Emitted when a child node is about to exit the scene tree, either because it "
+"is being removed or freed directly, or because this node is exiting the "
+"tree.\n"
+"When this signal is received, the child [code]node[/code] is still in the "
+"tree and valid. This signal is emitted [i]after[/i] the child node's own "
+"[signal tree_exiting] and [constant NOTIFICATION_EXIT_TREE]."
msgstr ""
#: doc/classes/Node.xml
@@ -38008,7 +38454,10 @@ msgid "Emitted when the node is renamed."
msgstr ""
#: doc/classes/Node.xml
-msgid "Emitted when the node enters the tree."
+msgid ""
+"Emitted when the node enters the tree.\n"
+"This signal is emitted [i]after[/i] the related [constant "
+"NOTIFICATION_ENTER_TREE] notification."
msgstr ""
#: doc/classes/Node.xml
@@ -38018,15 +38467,21 @@ msgstr ""
#: doc/classes/Node.xml
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)."
+"the right place for de-initialization (or a \"destructor\", if you will).\n"
+"This signal is emitted [i]before[/i] the related [constant "
+"NOTIFICATION_EXIT_TREE] notification."
msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node enters a [SceneTree]."
+msgid ""
+"Notification received when the node enters a [SceneTree].\n"
+"This notification is emitted [i]before[/i] the related [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node is about to exit a [SceneTree]."
+msgid ""
+"Notification received when the node is about to exit a [SceneTree].\n"
+"This notification is emitted [i]after[/i] the related [signal tree_exiting]."
msgstr ""
#: doc/classes/Node.xml
@@ -38287,7 +38742,13 @@ msgid "Rotation in degrees, relative to the node's parent."
msgstr ""
#: doc/classes/Node2D.xml
-msgid "The node's scale. Unscaled value: [code](1, 1)[/code]."
+msgid ""
+"The node's scale. Unscaled value: [code](1, 1)[/code].\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
#: doc/classes/Node2D.xml
@@ -39727,6 +40188,10 @@ msgid ""
" if argument.find(\"=\") > -1:\n"
" var key_value = argument.split(\"=\")\n"
" arguments[key_value[0].lstrip(\"--\")] = key_value[1]\n"
+" else:\n"
+" # Options without an argument will be present in the dictionary,\n"
+" # with the value set to an empty string.\n"
+" arguments[argument.lstrip(\"--\")] = \"\"\n"
"[/codeblock]"
msgstr ""
@@ -40380,8 +40845,15 @@ msgstr ""
msgid ""
"Moves the file or directory to the system's recycle bin. See also [method "
"Directory.remove].\n"
+"The method takes only global paths, so you may need to use [method "
+"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/"
+"code] as it will not work in exported project.\n"
"[b]Note:[/b] If the user has disabled the recycle bin on their system, the "
-"file will be permanently deleted instead."
+"file will be permanently deleted instead.\n"
+"[codeblock]\n"
+"var file_to_remove = \"user://slot1.sav\"\n"
+"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/OS.xml
@@ -45220,7 +45692,18 @@ msgstr ""
#: doc/classes/PopupMenu.xml
msgid ""
"[PopupMenu] is a [Control] that displays a list of options. They are popular "
-"in toolbars or context menus."
+"in toolbars or context menus.\n"
+"[b]Incremental search:[/b] Like [ItemList] and [Tree], [PopupMenu] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/PopupMenu.xml
@@ -46727,7 +47210,16 @@ msgid ""
msgstr ""
#: doc/classes/ProjectSettings.xml
-msgid "Message to be displayed before the backtrace when the engine crashes."
+msgid ""
+"Message to be displayed before the backtrace when the engine crashes. By "
+"default, this message is only used in exported projects due to the editor-"
+"only override applied to this setting."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Editor-only override for [member debug/settings/crash_handler/message]. Does "
+"not affect exported projects in debug or release mode."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -46972,6 +47464,18 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default naming style for scene files to infer from their root nodes. "
+"Possible options are:\n"
+"- [code]0[/code] (Auto): Uses the scene root name as is without changing its "
+"casing.\n"
+"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase "
+"casing.\n"
+"- [code]2[/code] (snake_case): Converts the scene root name to snake_case "
+"casing."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -47197,6 +47701,198 @@ msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 1."
msgstr ""
@@ -47405,6 +48101,198 @@ msgid "Optional name for the 2D render layer 9."
msgstr ""
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 1."
msgstr ""
@@ -47672,6 +48560,49 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default cell height for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_height].\n"
+"[b]Note:[/b] Currently not implemented."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 2D navigation maps. See [method "
+"Navigation2DServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell height for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_height]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 3D navigation maps. See [method "
+"NavigationServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default map up vector for 3D navigation maps. See [method NavigationServer."
+"map_set_up]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -48345,20 +49276,28 @@ msgid ""
"cause.\n"
"The default value is a conservative one, so you are advised to tweak it "
"according to the hardware you are targeting.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"The default is a very conservative override for [code]rendering/gles3/"
-"shaders/max_concurrent_compiles[/code].\n"
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
"Depending on the specific devices you are targeting, you may want to raise "
"it.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
+"Depending on the specific browsers you are targeting, you may want to raise "
+"it.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -48366,19 +49305,28 @@ msgid ""
"The maximum size, in megabytes, that the ubershader cache can grow up to. On "
"startup, the least recently used entries will be deleted until the total "
"size is within bounds.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/ubershader_cache_size_mb[/"
-"code], so a smaller maximum size can be configured for mobile platforms, "
-"where storage space is more limited.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for mobile platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for web platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] Currently, shader caching is generally unavailable on web "
+"platforms.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -48410,14 +49358,22 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/shader_compilation_mode[/"
-"code], so asynchronous compilation can be disabled for mobile.\n"
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on mobile platforms.\n"
"You may want to do that since mobile GPUs generally won't support "
"ubershaders due to their complexity."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on web platforms.\n"
+"You may want to do that since certain browsers (especially on mobile "
+"platforms) generally won't support ubershaders due to their complexity."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
@@ -49174,7 +50130,6 @@ msgid ""
"- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/"
"code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, "
"small grid radius values may lead to unwanted groupings.\n"
-"[/codeblock]\n"
"[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more "
"effective and faster [VisibilityNotifier] functionality. For most use cases, "
"[method Vector3.distance_to] or [method Vector3.distance_squared_to] are "
@@ -51321,6 +52276,22 @@ msgid "Makes text fill width."
msgstr ""
#: doc/classes/RichTextLabel.xml
+msgid "Aligns top of the inline image to the top of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns center of the inline image to the center of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns bottom of the inline image to the baseline of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns bottom of the inline image to the bottom of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
msgid "Each list item has a number marker."
msgstr ""
@@ -53058,8 +54029,8 @@ msgid ""
" yield(get_tree().create_timer(1.0), \"timeout\")\n"
" print(\"Timer ended.\")\n"
"[/codeblock]\n"
-"The timer will be automatically freed after its time elapses, so be aware "
-"that any reference you might have kept to it will become invalid."
+"The timer will be dereferenced after its time elapses. To preserve the "
+"timer, you can keep a reference to it. See [Reference]."
msgstr ""
#: doc/classes/SceneTreeTimer.xml
@@ -53091,24 +54062,23 @@ msgid ""
"manually (i.e. by using [code]Tween.new()[/code]) are invalid. They can't be "
"used for tweening values, but you can do manual interpolation with [method "
"interpolate_value].\n"
-"A [SceneTreeTween] animation is composed of a sequence of [Tweener]s, which "
-"by default are executed one after another. You can create a sequence by "
-"appending [Tweener]s to the [SceneTreeTween]. Animating something with a "
-"[Tweener] is called tweening. Example tweening sequence looks like this:\n"
+"A tween animation is created by adding [Tweener]s to the [SceneTreeTween] "
+"object, using [method tween_property], [method tween_interval], [method "
+"tween_callback] or [method tween_method]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1)\n"
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"This sequence will make the [code]$Sprite[/code] node turn red, then shrink "
-"and finally the [method Node.queue_free] is called to remove the sprite. See "
-"methods [method tween_property], [method tween_interval], [method "
-"tween_callback] and [method tween_method] for more usage information.\n"
+"This sequence will make the [code]$Sprite[/code] node turn red, then shrink, "
+"before finally calling [method Node.queue_free] to free the sprite. "
+"[Tweener]s are executed one after another by default. This behavior can be "
+"changed using [method parallel] and [method set_parallel].\n"
"When a [Tweener] is created with one of the [code]tween_*[/code] methods, a "
"chained method call can be used to tweak the properties of this [Tweener]. "
-"For example, if you want to set different transition type in the above "
-"example, you can do:\n"
+"For example, if you want to set a different transition type in the above "
+"example, you can use [method set_trans]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1).set_trans(Tween."
@@ -53117,8 +54087,9 @@ msgid ""
"TRANS_BOUNCE)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Most of the [SceneTreeTween] methods can be chained this way too. In this "
-"example the [SceneTreeTween] is bound and have set a default transition:\n"
+"Most of the [SceneTreeTween] methods can be chained this way too. In the "
+"following example the [SceneTreeTween] is bound to the running script's node "
+"and a default transition is set for its [Tweener]s:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween().bind_node(self).set_trans(Tween."
"TRANS_ELASTIC)\n"
@@ -53126,16 +54097,16 @@ msgid ""
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Another interesting use for [SceneTreeTween]s is animating arbitrary set of "
+"Another interesting use for [SceneTreeTween]s is animating arbitrary sets of "
"objects:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"for sprite in get_children():\n"
-" tween.tween_property(sprite, \"position\", Vector2(), 1)\n"
+" tween.tween_property(sprite, \"position\", Vector2(0, 0), 1)\n"
"[/codeblock]\n"
"In the example above, all children of a node are moved one after another to "
"position (0, 0).\n"
-"Some [Tweener]s use transitions and eases. The first accepts an [enum Tween."
+"Some [Tweener]s use transitions and eases. The first accepts a [enum Tween."
"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 Tween.EaseType] constant, and "
@@ -53147,7 +54118,7 @@ msgid ""
"tween_cheatsheet.png]Tween easing and transition types cheatsheet[/url]\n"
"[b]Note:[/b] All [SceneTreeTween]s will automatically start by default. To "
"prevent a [SceneTreeTween] from autostarting, you can call [method stop] "
-"immediately after it was created."
+"immediately after it is created."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53177,21 +54148,24 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
-"Processes the [SceneTreeTween] by given [code]delta[/code] value, in "
-"seconds. Mostly useful when the [SceneTreeTween] is paused, for controlling "
-"it manually. Can also be used to end the [SceneTreeTween] animation "
-"immediately, by using [code]delta[/code] longer than the whole duration.\n"
+"Processes the [SceneTreeTween] by the given [code]delta[/code] value, in "
+"seconds. This is mostly useful for manual control when the [SceneTreeTween] "
+"is paused. It can also be used to end the [SceneTreeTween] animation "
+"immediately, by setting [code]delta[/code] longer than the whole duration of "
+"the [SceneTreeTween] animation.\n"
"Returns [code]true[/code] if the [SceneTreeTween] still has [Tweener]s that "
"haven't finished.\n"
-"[b]Note:[/b] The [SceneTreeTween] will become invalid after finished, but "
-"you can call [method stop] after the step, to keep it and reset."
+"[b]Note:[/b] The [SceneTreeTween] will become invalid in the next processing "
+"frame after its animation finishes. Calling [method stop] after performing "
+"[method custom_step] instead keeps and resets the [SceneTreeTween]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Returns the total time in seconds the [SceneTreeTween] has been animating (i."
-"e. time since it started, not counting pauses etc.). The time is affected by "
-"[method set_speed_scale] and [method stop] will reset it to [code]0[/code].\n"
+"e. the time since it started, not counting pauses etc.). The time is "
+"affected by [method set_speed_scale], and [method stop] will reset it to "
+"[code]0[/code].\n"
"[b]Note:[/b] As it results from accumulating frame deltas, the time returned "
"after the [SceneTreeTween] has finished animating will be slightly greater "
"than the actual [SceneTreeTween] duration."
@@ -53227,11 +54201,10 @@ msgstr ""
msgid ""
"Returns whether the [SceneTreeTween] is valid. A valid [SceneTreeTween] is a "
"[SceneTreeTween] contained by the scene tree (i.e. the array from [method "
-"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). "
-"[SceneTreeTween] might become invalid when it has finished tweening or was "
-"killed, also when created with [code]Tween.new()[/code]. Invalid "
-"[SceneTreeTween] can't have [Tweener]s appended, because it can't animate "
-"them. You can however still use [method interpolate_value]."
+"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). A "
+"[SceneTreeTween] might become invalid when it has finished tweening, is "
+"killed, or when created with [code]SceneTreeTween.new()[/code]. Invalid "
+"[SceneTreeTween]s can't have [Tweener]s appended."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53271,16 +54244,15 @@ msgstr ""
msgid ""
"Sets the number of times the tweening sequence will be repeated, i.e. "
"[code]set_loops(2)[/code] will run the animation twice.\n"
-"Calling this method without arguments will make the [SceneTreeTween] run "
-"infinitely, until it is either killed by [method kill] or by freeing bound "
-"node, or all the animated objects have been freed (which makes further "
+"Calling this method without arguments will make the [Tween] run infinitely, "
+"until either it is killed with [method kill], the [Tween]'s bound node is "
+"freed, or all the animated objects have been freed (which makes further "
"animation impossible).\n"
"[b]Warning:[/b] Make sure to always add some duration/delay when using "
-"infinite loops. 0-duration looped animations (e.g. single [CallbackTweener] "
-"with no delay or [PropertyTweener] with invalid node) are equivalent to "
-"infinite [code]while[/code] loops and will freeze your game. If a "
-"[SceneTreeTween]'s lifetime depends on some node, always use [method "
-"bind_node]."
+"infinite loops. To prevent the game freezing, 0-duration looped animations "
+"(e.g. a single [CallbackTweener] with no delay) are stopped after a small "
+"number of loops, which may produce unexpected results. If a [Tween]'s "
+"lifetime depends on some node, always use [method bind_node]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53342,10 +54314,10 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Creates and appends an [IntervalTweener]. This method can be used to create "
-"delays in the tween animation, as an alternative for using the delay in "
-"other [Tweener]s or when there's no animation (in which case the "
-"[SceneTreeTween] acts as a timer). [code]time[/code] is the length of the "
-"interval, in seconds.\n"
+"delays in the tween animation, as an alternative to using the delay in other "
+"[Tweener]s, or when there's no animation (in which case the [SceneTreeTween] "
+"acts as a timer). [code]time[/code] is the length of the interval, in "
+"seconds.\n"
"Example: creating an interval in code execution.\n"
"[codeblock]\n"
"# ... some code\n"
@@ -53399,8 +54371,8 @@ msgid ""
"Creates and appends a [PropertyTweener]. This method tweens a "
"[code]property[/code] of an [code]object[/code] between an initial value and "
"[code]final_val[/code] in a span of time equal to [code]duration[/code], in "
-"seconds. The initial value by default is a value at the time the tweening of "
-"the [PropertyTweener] start. For example:\n"
+"seconds. The initial value by default is the property's value at the time "
+"the tweening of the [PropertyTweener] starts. For example:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"tween.tween_property($Sprite, \"position\", Vector2(100, 200), 1)\n"
@@ -53431,16 +54403,15 @@ msgid ""
"Emitted when the [SceneTreeTween] has finished all tweening. Never emitted "
"when the [SceneTreeTween] is set to infinite looping (see [method "
"set_loops]).\n"
-"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) after this signal "
-"is emitted, but it doesn't happen immediately, but on the next processing "
-"frame. Calling [method stop] inside the signal callback will preserve the "
-"[SceneTreeTween]."
+"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) in the next "
+"processing frame after this signal is emitted. Calling [method stop] inside "
+"the signal callback will prevent the [SceneTreeTween] from being removed."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Emitted when a full loop is complete (see [method set_loops]), providing the "
-"loop index. This signal is not emitted after final loop, use [signal "
+"loop index. This signal is not emitted after the final loop, use [signal "
"finished] instead for this case."
msgstr ""
@@ -53448,7 +54419,7 @@ msgstr ""
msgid ""
"Emitted when one step of the [SceneTreeTween] is complete, providing the "
"step index. One step is either a single [Tweener] or a group of [Tweener]s "
-"running parallelly."
+"running in parallel."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -54780,7 +55751,12 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-msgid "Scale part of the local transformation."
+msgid ""
+"Scale part of the local transformation.\n"
+"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, the scale values will either be all "
+"positive or all negative."
msgstr ""
#: doc/classes/Spatial.xml
@@ -57411,11 +58387,11 @@ msgstr ""
msgid ""
"Returns [code]true[/code] if this string contains a valid integer.\n"
"[codeblock]\n"
-"print(\"7\".is_valid_int()) # Prints \"True\"\n"
-"print(\"14.6\".is_valid_int()) # Prints \"False\"\n"
-"print(\"L\".is_valid_int()) # Prints \"False\"\n"
-"print(\"+3\".is_valid_int()) # Prints \"True\"\n"
-"print(\"-12\".is_valid_int()) # Prints \"True\"\n"
+"print(\"7\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"14.6\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"L\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"+3\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"-12\".is_valid_integer()) # Prints \"True\"\n"
"[/codeblock]"
msgstr ""
@@ -60881,6 +61857,10 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml
+msgid "If [code]true[/code], this TileMap bakes a navigation region."
+msgstr ""
+
+#: doc/classes/TileMap.xml
msgid "If [code]true[/code], the cell's UVs will be clipped."
msgstr ""
@@ -60987,6 +61967,10 @@ msgid "The TileMap orientation mode. See [enum Mode] for possible values."
msgstr ""
#: doc/classes/TileMap.xml
+msgid "The navigation layers the TileMap generates its navigation regions in."
+msgstr ""
+
+#: doc/classes/TileMap.xml
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 "
@@ -62118,7 +63102,12 @@ msgstr ""
#: doc/classes/Transform2D.xml
msgid ""
"Returns a copy of the transform scaled by the given [code]scale[/code] "
-"factor, using matrix multiplication."
+"factor, using matrix multiplication.\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
#: doc/classes/Transform2D.xml
@@ -62273,7 +63262,18 @@ msgid ""
"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]."
+"to remove it from the [Tree].\n"
+"[b]Incremental search:[/b] Like [ItemList] and [PopupMenu], [Tree] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/Tree.xml
@@ -65789,11 +66789,12 @@ msgid "This enabler will stop [Particles2D] nodes."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _process function."
+msgid "This enabler will stop the parent's [method Node._process] function."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _physics_process function."
+msgid ""
+"This enabler will stop the parent's [method Node._physics_process] function."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
@@ -65833,6 +66834,16 @@ msgid "The VisibilityNotifier's bounding box."
msgstr ""
#: doc/classes/VisibilityNotifier.xml
+msgid ""
+"In addition to checking whether a node is on screen or within a [Camera]'s "
+"view, VisibilityNotifier can also optionally check whether a node is within "
+"a specified maximum distance when using a [Camera] with perspective "
+"projection. This is useful for throttling the performance requirements of "
+"nodes that are far away.\n"
+"[b]Note:[/b] This feature will be disabled if set to 0.0."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier.xml
msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view."
msgstr ""
@@ -70578,6 +71589,16 @@ msgid "The amount of shader rebinds in the frame."
msgstr ""
#: doc/classes/VisualServer.xml
+msgid ""
+"The peak amount of shaders that have been under compilation in the frame.\n"
+"This is useful to know when asynchronous shader compilation has finished for "
+"the current shaders on screen.\n"
+"[b]Note:[/b] For complete certainty, only assume there are no outstanding "
+"compilations when this value is zero for at least two frames in a row.\n"
+"Unimplemented in the GLES2 rendering backend, always returns 0."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
msgid "The amount of surface changes in the frame."
msgstr ""
@@ -73774,8 +74795,8 @@ msgstr ""
#: doc/classes/World.xml
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."
+"scenario, a navigation map and a sound space. Spatial nodes register their "
+"resources into the current world."
msgstr ""
#: doc/classes/World.xml
@@ -73790,8 +74811,13 @@ msgstr ""
#: doc/classes/World.xml
msgid ""
-"The World's fallback_environment will be used if the World's [Environment] "
-"fails or is missing."
+"The World's fallback environment will be used if [member environment] fails "
+"or is missing."
+msgstr ""
+
+#: doc/classes/World.xml
+msgid ""
+"The [RID] of this world's navigation map. Used by the [NavigationServer]."
msgstr ""
#: doc/classes/World.xml
@@ -73809,8 +74835,8 @@ msgstr ""
#: doc/classes/World2D.xml
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."
+"visual scenario, a navigation map and a sound space. 2D nodes register their "
+"resources into the current 2D world."
msgstr ""
#: doc/classes/World2D.xml
@@ -73828,6 +74854,11 @@ msgstr ""
#: doc/classes/World2D.xml
msgid ""
+"The [RID] of this world's navigation map. Used by the [Navigation2DServer]."
+msgstr ""
+
+#: doc/classes/World2D.xml
+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 ""
diff --git a/doc/translations/mr.po b/doc/translations/mr.po
index 2583c332b6..d4e8907c1d 100644
--- a/doc/translations/mr.po
+++ b/doc/translations/mr.po
@@ -345,7 +345,7 @@ msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
msgid ""
"Compares two values by checking their actual contents, recursing into any "
-"`Array` or `Dictionary` up to its deepest level.\n"
+"[Array] or [Dictionary] up to its deepest level.\n"
"This compares to [code]==[/code] in a number of ways:\n"
"- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/"
"code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] "
@@ -392,7 +392,7 @@ msgid ""
"- 1.0: Linear\n"
"- Greater than 1.0 (exclusive): Ease in\n"
"[/codeblock]\n"
-"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.4/img/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/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]."
@@ -1099,7 +1099,7 @@ msgid ""
"[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/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/img/"
"smoothstep_ease_comparison.png]Comparison between smoothstep() and ease(x, "
"-1.6521) return values[/url]"
msgstr ""
@@ -3377,6 +3377,12 @@ msgstr ""
#: doc/classes/@GlobalScope.xml
msgid ""
+"Hints that an integer property is a bitmask using the optionally named 2D "
+"navigation layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml
+msgid ""
"Hints that an integer property is a bitmask using the optionally named 3D "
"render layers."
msgstr ""
@@ -3389,6 +3395,12 @@ msgstr ""
#: doc/classes/@GlobalScope.xml
msgid ""
+"Hints that an integer property is a bitmask using the optionally named 3D "
+"navigation layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml
+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]."
@@ -8364,7 +8376,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/AStar.xml
+#: doc/classes/AStar.xml doc/classes/AStar2D.xml
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[/"
@@ -8563,7 +8575,10 @@ msgid ""
msgstr ""
#: doc/classes/AStar2D.xml
-msgid "Returns whether there is a connection/segment between the given points."
+msgid ""
+"Returns whether there is a connection/segment between the given points. 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/AStar2D.xml
@@ -8580,10 +8595,6 @@ msgid ""
msgstr ""
#: doc/classes/AStar2D.xml
-msgid "Deletes the segment between the given points."
-msgstr ""
-
-#: doc/classes/AStar2D.xml
msgid ""
"Returns the closest position to [code]to_position[/code] that resides inside "
"a segment between two connected points.\n"
@@ -8768,7 +8779,9 @@ msgid ""
"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."
+"transmit audio over the network. When capturing audio data from a "
+"microphone, the format of the samples will be stereo 32-bit floating point "
+"PCM."
msgstr ""
#: doc/classes/AudioEffectCapture.xml
@@ -13611,7 +13624,7 @@ msgid ""
msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
-#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/Navigation2D.xml
msgid "Returns the object's [RID]."
msgstr ""
@@ -19086,11 +19099,14 @@ msgid ""
msgstr ""
#: doc/classes/CurveTexture.xml
-msgid "The [code]curve[/code] rendered onto the texture."
+msgid "The [Curve] that is rendered onto the texture."
msgstr ""
#: doc/classes/CurveTexture.xml
-msgid "The width of the texture."
+msgid ""
+"The width of the texture (in pixels). Higher values make it possible to "
+"represent high-frequency data better (such as sudden direction changes), at "
+"the cost of increased generation time and memory usage."
msgstr ""
#: doc/classes/CylinderMesh.xml
@@ -19376,6 +19392,13 @@ msgid "Returns the list of keys in the [Dictionary]."
msgstr ""
#: doc/classes/Dictionary.xml
+msgid ""
+"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, "
+"duplicate keys will not be copied over, unless [code]overwrite[/code] is "
+"[code]true[/code]."
+msgstr ""
+
+#: doc/classes/Dictionary.xml
msgid "Returns the number of keys in the dictionary."
msgstr ""
@@ -21314,9 +21337,23 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide a state data you want to be saved, like view "
+"position, grid settings, folding, etc. 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). This data is automatically saved for "
+"each scene in an [code]editstate[/code] file in the editor metadata folder. "
+"If you want to store global (scene-independent) editor data for your plugin, "
+"you can use [method get_window_layout] instead.\n"
+"Use [method set_state] to restore your saved state.\n"
+"[b]Note:[/b] This method should not be used to save important settings that "
+"should persist with the project.\n"
+"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be "
+"stored and restored correctly.\n"
+"[codeblock]\n"
+"func get_state():\n"
+" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n"
+" return state\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -21327,9 +21364,18 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide the GUI layout of the plugin or any other "
+"data you want to be stored. 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). The data is stored in the "
+"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n"
+"Use [method set_window_layout] to restore your saved layout.\n"
+"[codeblock]\n"
+"func get_window_layout(configuration):\n"
+" configuration.set_value(\"MyPlugin\", \"window_position\", $Window."
+"position)\n"
+" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -21442,11 +21488,30 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the state saved by [method get_state]."
+msgid ""
+"Restore the state saved by [method get_state]. This method is called when "
+"the current scene tab is changed in the editor.\n"
+"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise "
+"it will not be recognized and this method will not be called.\n"
+"[codeblock]\n"
+"func set_state(data):\n"
+" zoom = data.get(\"zoom\", 1.0)\n"
+" preferred_color = data.get(\"my_color\", Color.white)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the plugin GUI layout saved by [method get_window_layout]."
+msgid ""
+"Restore the plugin GUI layout and data saved by [method get_window_layout]. "
+"This method is called for every plugin on editor startup. Use the provided "
+"[code]configuration[/code] file to read your saved data.\n"
+"[codeblock]\n"
+"func set_window_layout(configuration):\n"
+" $Window.position = configuration.get_value(\"MyPlugin\", "
+"\"window_position\", Vector2())\n"
+" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", "
+"Color.white)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -26081,7 +26146,8 @@ msgid ""
"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])."
+"at fixed steps (see [member width]). See also [GradientTexture2D] and "
+"[CurveTexture]."
msgstr ""
#: doc/classes/GradientTexture.xml
@@ -26103,7 +26169,8 @@ msgid ""
"repeat] types using colors obtained from the gradient. 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] and [member height])."
+"[member width] and [member height]). See also [GradientTexture] and "
+"[CurveTexture]."
msgstr ""
#: doc/classes/GradientTexture2D.xml
@@ -26909,6 +26976,12 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+msgid ""
+"If [code]true[/code], this GridMap uses cell navmesh resources to create "
+"navigation regions."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid "If [code]true[/code], grid items are centered on the X axis."
msgstr ""
@@ -26959,6 +27032,10 @@ msgid "The assigned [MeshLibrary]."
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+msgid "The navigation layers the GridMap generates its navigation regions in."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
"Overrides the default friction and bounce physics properties for the whole "
"[GridMap]."
@@ -28182,7 +28259,7 @@ msgid ""
" # 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 body = to_json({\"name\": \"Godette\"})\n"
" error = http_request.request(\"https://httpbin.org/post\", [], true, "
"HTTPClient.METHOD_POST, body)\n"
" if error != OK:\n"
@@ -29349,7 +29426,7 @@ msgstr ""
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 "
+"([member 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 "
@@ -29498,10 +29575,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Returns the mouse mode. See the constants for more information."
-msgstr ""
-
-#: doc/classes/Input.xml
msgid ""
"Gets an input vector by specifying four actions for the positive and "
"negative X and Y axes.\n"
@@ -29695,24 +29768,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Sets the mouse mode. See the constants for more information."
-msgstr ""
-
-#: doc/classes/Input.xml
-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
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 "
@@ -29748,6 +29803,24 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
+msgid "Controls the mouse mode. See [enum MouseMode] for more information."
+msgstr ""
+
+#: doc/classes/Input.xml
+msgid ""
+"If [code]true[/code], similar input events sent by the operating system are "
+"accumulated. 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 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
msgid "Emitted when a joypad device has been connected or disconnected."
msgstr ""
@@ -30055,8 +30128,8 @@ msgstr ""
#: doc/classes/InputEventJoypadButton.xml
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]."
+"Represents the pressure the user puts on the button with their finger, if "
+"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]."
msgstr ""
#: doc/classes/InputEventJoypadMotion.xml
@@ -30319,9 +30392,9 @@ 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 "
+"at most. If you need more precise input reporting, set [member Input."
+"use_accumulated_input] to [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."
@@ -30808,7 +30881,18 @@ msgid ""
"[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."
+"fixed_column_width] greater than zero to wrap the text.\n"
+"[b]Incremental search:[/b] Like [PopupMenu] and [Tree], [ItemList] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/ItemList.xml
@@ -34555,11 +34639,16 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Returns the override [Material] for a surface of the [Mesh] resource.\n"
+"[b]Note:[/b] This function only returns [i]override[/i] materials associated "
+"with this [MeshInstance]. Consider using [method get_active_material] or "
+"[method Mesh.surface_get_material] to get materials associated with the "
+"[Mesh] resource."
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the number of surface materials."
+msgid "Returns the number of surface override materials."
msgstr ""
#: doc/classes/MeshInstance.xml
@@ -34596,7 +34685,10 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Sets the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Sets the override [Material] for the specified surface of the [Mesh] "
+"resource. This material is associated with this [MeshInstance] rather than "
+"with the [Mesh] resource."
msgstr ""
#: doc/classes/MeshInstance.xml
@@ -34627,9 +34719,10 @@ msgstr ""
#: doc/classes/MeshInstance2D.xml
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\"."
+"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be "
+"automatically created from an existing [Sprite] via a tool in the editor "
+"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to "
+"MeshInstance2D[/b] at the top of the 2D editor viewport."
msgstr ""
#: doc/classes/MeshInstance2D.xml
@@ -35387,6 +35480,9 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"Provides navigation and pathfinding within a collection of "
"[NavigationMesh]es. By default, these will be automatically collected from "
"child [NavigationMeshInstance] nodes. In addition to basic pathfinding, this "
@@ -35427,7 +35523,14 @@ msgid ""
msgstr ""
#: doc/classes/Navigation.xml
+msgid "Returns the [RID] of the navigation map on the [NavigationServer]."
+msgstr ""
+
+#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"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, "
@@ -35449,16 +35552,31 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation.get_simple_path] path query."
+msgstr ""
+
+#: doc/classes/Navigation.xml
+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/Navigation.xml doc/classes/Navigation2DServer.xml
+#: doc/classes/NavigationServer.xml
+msgid ""
+"Emitted when a navigation map is updated, when a region moves or is modified."
+msgstr ""
+
#: doc/classes/Navigation2D.xml
msgid "2D navigation and pathfinding node."
msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -35478,6 +35596,9 @@ msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -35487,6 +35608,12 @@ msgstr ""
msgid "The XY plane cell size to use for fields."
msgstr ""
+#: doc/classes/Navigation2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation2D.get_simple_path] path query."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml
msgid "Server interface for low-level 2D navigation access."
msgstr ""
@@ -35503,8 +35630,12 @@ msgid ""
"through scripts.\n"
"For two regions to be connected to each other, they must share a similar "
"edge. An edge is considered connected to another if both of its two vertices "
-"are at a distance less than [member Navigation.edge_connection_margin] to "
-"the respective other edge's vertex.\n"
+"are at a distance less than navigation map [code]edge_connection_margin[/"
+"code] to the respective other edge's vertex.\n"
+"You may assign navigation layers to regions with [method Navigation2DServer."
+"region_set_navigation_layers], which then can be checked upon when "
+"requesting a path with [method Navigation2DServer.map_get_path]. This allows "
+"allowing or forbidding some areas to 2D objects.\n"
"To use the collision avoidance system, you may use agents. You can set an "
"agent's target velocity, then the servers will emit a callback with a "
"modified velocity.\n"
@@ -35532,7 +35663,17 @@ msgid "Returns [code]true[/code] if the map got changed the previous frame."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Callback called at the end of the RVO process."
+msgid ""
+"Callback called at the end of the RVO process. If a callback is created "
+"manually and the agent is placed on a navigation map it will calculate "
+"avoidance for the agent and dispatch the calculated [code]safe_velocity[/"
+"code] to the [code]receiver[/code] object with a signal to the chosen "
+"[code]method[/code] name.\n"
+"[b]Note:[/b] Created callbacks are always processed independently of the "
+"SceneTree state as long as the agent is on a navigation map and not freed. "
+"To disable the dispatch of a callback from an agent use [method "
+"agent_set_callback] again with a [code]null[/code] object as the "
+"[code]receiver[/code]."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -35587,15 +35728,55 @@ msgid "Destroys the given RID."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns all created navigation map [RID]s on the NavigationServer. This "
+"returns both 2D and 3D created navigation maps as there is technically no "
+"distinction between them."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Create a new map."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"This function immediately forces synchronization of the specified navigation "
+"[code]map[/code] [RID]. By default navigation maps are only synchronized at "
+"the end of each physics frame. This function can be used to immediately "
+"(re)calculate all the navigation meshes and region connections of the "
+"navigation map. This makes it possible to query a navigation path for a "
+"changed map immediately and in the same frame (multiple times if needed).\n"
+"Due to technical restrictions the current NavigationServer command queue "
+"will be flushed. This means all already queued update commands for this "
+"physics frame will be executed, even those intended for other maps, regions "
+"and agents not part of the specified map. The expensive computation of the "
+"navigation meshes and region connections of a map will only be done for the "
+"specified map. Other maps will receive the normal synchronization at the end "
+"of the physics frame. Should the specified map receive changes after the "
+"forced update it will update again as well when the other maps receive their "
+"update.\n"
+"Avoidance processing and dispatch of the [code]safe_velocity[/code] signals "
+"is untouched by this function and continues to happen for all maps and "
+"agents at the end of the physics frame.\n"
+"[b]Note:[/b] With great power comes great responsibility. This function "
+"should only be used by users that really know what they are doing and have a "
+"good reason for it. Forcing an immediate update of a navigation map requires "
+"locking the NavigationServer and flushing the entire NavigationServer "
+"command queue. Not only can this severely impact the performance of a game "
+"but it can also introduce bugs if used inappropriately without much "
+"foresight."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns all navigation agents [RID]s that are currently assigned to the "
"requested navigation [code]map[/code]."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Returns the map cell size."
msgstr ""
@@ -35619,7 +35800,10 @@ msgid ""
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Returns the navigation path to reach the destination from the origin."
+msgid ""
+"Returns the navigation path to reach the destination from the origin. "
+"[code]navigation_layers[/code] is a bitmask of all region layers that are "
+"allowed to be in the path."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -35636,6 +35820,12 @@ msgstr ""
msgid "Sets the map active."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/"
+"b] Currently not implemented."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Set the map cell size used to weld the navigation mesh polygons."
msgstr ""
@@ -35651,14 +35841,73 @@ msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"Returns the ending point of a connection door. [code]connection[/code] is an "
+"index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns the starting point of a connection door. [code]connection[/code] is "
+"an index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns how many connections this [code]region[/code] has with other regions "
+"in the map."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns the navigation map [RID] the requested [code]region[/code] is "
"currently assigned to."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Returns the region's navigation layers."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns [code]true[/code] if the provided [code]point[/code] in world space "
+"is currently owned by the provided navigation [code]region[/code]. Owned in "
+"this context means that one of the region's navigation mesh polygon faces "
+"has a possible position at the closest distance to this point compared to "
+"all other navigation meshes from other navigation regions that are also "
+"registered on the navigation map of the provided region.\n"
+"If multiple navigation meshes have positions at equal distance the "
+"navigation region whose polygons are processed first wins the ownership. "
+"Polygons are processed in the same order that navigation regions were "
+"registered on the NavigationServer.\n"
+"[b]Note:[/b] If navigation meshes from different navigation regions overlap "
+"(which should be avoided in general) the result might not be what is "
+"expected."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Sets the map for the region."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method Navigation2DServer.map_get_path])."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Sets the navigation mesh for the region."
msgstr ""
@@ -35667,6 +35916,10 @@ msgstr ""
msgid "Sets the global transformation for the region."
msgstr ""
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]."
+msgstr ""
+
#: doc/classes/NavigationAgent.xml
msgid "3D agent used in navigation for collision avoidance."
msgstr ""
@@ -35676,9 +35929,16 @@ msgid ""
"3D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationAgent] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World] navigation map. If this node is a child of a [Navigation] "
+"node it will register to the navigation map of the navigation node or the "
+"function [method set_navigation] can be used to set the navigation node "
+"directly. [NavigationAgent] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -35696,7 +35956,15 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-msgid "Returns the path from start to finish in global coordinates."
+msgid ""
+"Returns this agent's current path from start to finish in global "
+"coordinates. The path only updates when the target location is changed or "
+"the agent requires a repath. The path array is not intended to be used in "
+"direct path movement as the agent has its own internal path logic that would "
+"get corrupted by changing the path array manually. Use the intended [method "
+"get_next_location] once every physics frame to receive the next path point "
+"for the agents movement as this function also updates the internal path "
+"logic."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -35711,11 +35979,24 @@ msgid ""
"system."
msgstr ""
-#: doc/classes/NavigationAgent.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"Returns a [Vector3] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the origin of the agent's parent."
+"Returns the [RID] of the navigation map for this NavigationAgent node. This "
+"function returns always the map set on the NavigationAgent node and not the "
+"map of the abstract agent on the NavigationServer. If the agent map is "
+"changed directly with the NavigationServer API the NavigationAgent node will "
+"not be aware of the map change. Use [method set_navigation_map] to change "
+"the navigation map for the NavigationAgent and also update the agent on the "
+"NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
+"Returns the next location in global coordinates that can be moved to, making "
+"sure that there are no static objects in the way. If the agent does not have "
+"a navigation path, it will return the position of the agent's parent. The "
+"use of this function once every physics frame is required to update the "
+"internal path logic of the NavigationAgent."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -35756,6 +36037,12 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"Sets the [RID] of the navigation map this NavigationAgent node should use "
+"and also updates the [code]agent[/code] on the NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"Sets the user desired final location. This will clear the current navigation "
"path."
msgstr ""
@@ -35768,7 +36055,13 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml
-msgid "The agent height offset to match the navigation mesh height."
+msgid ""
+"The NavigationAgent height offset is subtracted from the y-axis value of any "
+"vector path position for this NavigationAgent. The NavigationAgent height "
+"offset does not change or influence the navigation mesh or pathfinding query "
+"result. Additional navigation maps that use regions with navigation meshes "
+"that the developer baked with appropriate agent radius or height values are "
+"required to support different-sized agents."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -35795,26 +36088,53 @@ msgstr ""
msgid "The maximum speed that an agent can move."
msgstr ""
+#: doc/classes/NavigationAgent.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "The distance to search for other agents."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"The distance threshold before a path point is considered to be reached. This "
+"will allow an agent to not have to hit a path point on the path exactly, but "
+"in the area. If this value is set to high the NavigationAgent will skip "
+"points on the path which can lead to leaving the navigation mesh. If this "
+"value is set to low the NavigationAgent will be stuck in a repath loop cause "
+"it will constantly overshoot or undershoot the distance to the next point on "
+"each physics frame update."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"The maximum distance the agent is allowed away from the ideal path to the "
"final location. This can happen due to trying to avoid collisions. When the "
"maximum distance is exceeded, it recalculates the ideal path."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-msgid "The radius of the agent."
+msgid ""
+"The radius of the avoidance agent. This is the \"body\" of the avoidance "
+"agent and not the avoidance maneuver starting radius (which is controlled by "
+"[member neighbor_dist]).\n"
+"Does not affect normal pathfinding. To change an actor's pathfinding radius "
+"bake [NavigationMesh] resources with a different [member NavigationMesh."
+"agent_radius] property and use different navigation maps for each actor size."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"The distance threshold before a target is considered to be reached. This "
-"will allow an agent to not have to hit a point on the path exactly, but in "
-"the area."
+"The distance threshold before the final target point is considered to be "
+"reached. This will allow an agent to not have to hit the point of the final "
+"target exactly, but only the area. If this value is set to low the "
+"NavigationAgent will be stuck in a repath loop cause it will constantly "
+"overshoot or undershoot the distance to the final target point on each "
+"physics frame update."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -35857,9 +36177,16 @@ msgid ""
"2D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationAgent2D] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World2D] navigation map. If this node is a child of a "
+"[Navigation2D] node it will register to the navigation map of the navigation "
+"node or the function [method set_navigation] can be used to set the "
+"navigation node directly. [NavigationAgent2D] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent2D.xml
@@ -35875,13 +36202,6 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent2D.xml
-msgid ""
-"Returns a [Vector2] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the position of the agent's parent."
-msgstr ""
-
-#: doc/classes/NavigationAgent2D.xml
msgid "Returns the [RID] of this agent on the [Navigation2DServer]."
msgstr ""
@@ -35901,6 +36221,13 @@ msgid ""
"only be enabled on agents that currently require it."
msgstr ""
+#: doc/classes/NavigationAgent2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent2D] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationMesh.xml
msgid "A mesh to approximate the walkable areas and obstacles."
msgstr ""
@@ -35931,8 +36258,8 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
-"Returns whether the specified [code]bit[/code] of the [member geometry/"
-"collision_mask] is set."
+"Returns whether the specified [code]bit[/code] of the [member "
+"geometry_collision_mask] is set."
msgstr ""
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
@@ -35954,9 +36281,9 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/"
-"code] in the [member geometry/collision_mask].\n"
+"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]."
+"code] in the [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
@@ -35970,14 +36297,14 @@ 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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -35989,7 +36316,7 @@ 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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36017,13 +36344,17 @@ msgstr ""
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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
-"If [code]true[/code], marks walkable spans as not walkable if the clearance "
-"above the span is less than [member agent/height]."
+"If the baking [AABB] has a volume the navigation mesh baking will be "
+"restricted to its enclosing area."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+msgid "The position offset applied to the [member filter_baking_aabb] [AABB]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36033,13 +36364,19 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]true[/code], marks non-walkable spans as walkable if their maximum "
-"is within [member agent/max_climb] of a walkable neighbor."
+"is within [member agent_max_climb] of a walkable neighbor."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+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
msgid ""
"The physics layers to scan for static colliders.\n"
-"Only used when [member geometry/parsed_geometry_type] is [constant "
+"Only used when [member geometry_parsed_geometry_type] is [constant "
"PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]."
msgstr ""
@@ -36058,7 +36395,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"The name of the group to scan for geometry.\n"
-"Only used when [member geometry/source_geometry_mode] is [constant "
+"Only used when [member geometry_source_geometry_mode] is [constant "
"SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant "
"SOURCE_GEOMETRY_GROUPS_EXPLICIT]."
msgstr ""
@@ -36121,7 +36458,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Parses [StaticBody] colliders as geometry. The collider should be in any of "
-"the layers specified by [member geometry/collision_mask]."
+"the layers specified by [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36142,13 +36479,13 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Scans nodes in a group and their child nodes recursively for geometry. The "
-"group is specified by [member geometry/source_group_name]."
+"group is specified by [member geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Uses nodes in a group for geometry. The group is specified by [member "
-"geometry/source_group_name]."
+"geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36190,7 +36527,15 @@ msgid ""
"geometry for walkable terrain suitable to [NavigationMesh] agent properties "
"by creating a voxel world around the meshes bounding area.\n"
"The finalized navigation mesh is then returned and stored inside the "
-"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes."
+"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] "
+"nodes.\n"
+"[b]Note:[/b] Using meshes to not only define walkable surfaces but also "
+"obstruct navigation baking does not always work. The navigation baking has "
+"no concept of what is a geometry \"inside\" when dealing with mesh source "
+"geometry and this is intentional. Depending on current baking parameters, as "
+"soon as the obstructing mesh is large enough to fit a navigation mesh area "
+"inside, the baking will generate navigation mesh areas that are inside the "
+"obstructing source geometry mesh."
msgstr ""
#: doc/classes/NavigationMeshGenerator.xml
@@ -36198,8 +36543,8 @@ msgid ""
"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child "
"nodes under the provided [code]root_node[/code] or a specific group of nodes "
"for potential source geometry. The parse behavior can be controlled with the "
-"[member NavigationMesh.geometry/parsed_geometry_type] and [member "
-"NavigationMesh.geometry/source_geometry_mode] properties on the "
+"[member NavigationMesh.geometry_parsed_geometry_type] and [member "
+"NavigationMesh.geometry_source_geometry_mode] properties on the "
"[NavigationMesh] resource."
msgstr ""
@@ -36216,8 +36561,21 @@ msgstr ""
#: doc/classes/NavigationMeshInstance.xml
msgid ""
"An instance of a [NavigationMesh]. It tells the [Navigation] node what can "
-"be navigated and what cannot, based on the [NavigationMesh] resource. This "
-"should be a child of a [Navigation] node."
+"be navigated and what cannot, based on the [NavigationMesh] resource.\n"
+"By default this node will register to the default [World] navigation map. If "
+"this node is a child of a [Navigation] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method NavigationServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The cost of entering this region from another region can be controlled with "
+"the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The cost of traveling distances inside this region can be controlled with "
+"the [member travel_cost] multiplier."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
@@ -36246,10 +36604,34 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding enters this region's navmesh from another regions navmesh "
+"the [code]enter_cost[/code] value is added to the path distance for "
+"determining the shortest path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationMesh] "
+"belongs to. On path requests with [method NavigationServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
msgid "The [NavigationMesh] resource to use."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding moves inside this region's navmesh the traveled distances "
+"are multiplied with [code]travel_cost[/code] for determining the shortest "
+"path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
msgid "Notifies when the navigation mesh bake operation is completed."
msgstr ""
@@ -36266,7 +36648,9 @@ msgid ""
"3D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationObstacle] is physics safe."
+"[NavigationObstacle] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle.xml
@@ -36306,7 +36690,9 @@ msgid ""
"2D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationObstacle2D] is physics safe."
+"[NavigationObstacle2D] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle2D.xml
@@ -36386,6 +36772,14 @@ msgstr ""
#: doc/classes/NavigationPolygon.xml
msgid ""
+"Returns the [NavigationMesh] resulting from this navigation polygon. This "
+"navmesh can be used to update the navmesh of a region with the [method "
+"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server "
+"behind the scene)."
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml
+msgid ""
"Returns a [PoolVector2Array] containing the vertices of an outline that was "
"created in the editor or by script."
msgstr ""
@@ -36422,6 +36816,30 @@ msgid ""
msgstr ""
#: doc/classes/NavigationPolygonInstance.xml
+msgid "A region of the 2D navigation map."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A region of the navigation map. It tells the [Navigation2DServer] what can "
+"be navigated and what cannot, based on its [NavigationPolygon] resource.\n"
+"By default this node will register to the default [World2D] navigation map. "
+"If this node is a child of a [Navigation2D] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The pathfinding cost of entering this region from another region can be "
+"controlled with the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The pathfinding cost of traveling distances inside this region can be "
+"controlled with the [member travel_cost] multiplier."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
msgid ""
"Returns the [RID] of this region on the [Navigation2DServer]. Combined with "
"[method Navigation2DServer.map_get_closest_point_owner] can be used to "
@@ -36429,6 +36847,22 @@ msgid ""
"navigation map."
msgstr ""
+#: doc/classes/NavigationPolygonInstance.xml
+msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationPolygon] "
+"belongs to. On path requests with [method Navigation2DServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid "The [NavigationPolygon] resource to use."
+msgstr ""
+
#: doc/classes/NavigationServer.xml
msgid "Server interface for low-level 3D navigation access."
msgstr ""
@@ -36504,6 +36938,12 @@ msgid "Bakes the navigation mesh."
msgstr ""
#: doc/classes/NavigationServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method NavigationServer.map_get_path])."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
msgid "Control activation of this server."
msgstr ""
@@ -37970,13 +38410,19 @@ msgstr ""
#: doc/classes/Node.xml
msgid ""
"Emitted when a child node enters the scene tree, either because it entered "
-"on its own or because this node entered with it."
+"on its own or because this node entered with it.\n"
+"This signal is emitted [i]after[/i] the child node's own [constant "
+"NOTIFICATION_ENTER_TREE] and [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
msgid ""
-"Emitted when a child node exits the scene tree, either because it exited on "
-"its own or because this node exited."
+"Emitted when a child node is about to exit the scene tree, either because it "
+"is being removed or freed directly, or because this node is exiting the "
+"tree.\n"
+"When this signal is received, the child [code]node[/code] is still in the "
+"tree and valid. This signal is emitted [i]after[/i] the child node's own "
+"[signal tree_exiting] and [constant NOTIFICATION_EXIT_TREE]."
msgstr ""
#: doc/classes/Node.xml
@@ -37988,7 +38434,10 @@ msgid "Emitted when the node is renamed."
msgstr ""
#: doc/classes/Node.xml
-msgid "Emitted when the node enters the tree."
+msgid ""
+"Emitted when the node enters the tree.\n"
+"This signal is emitted [i]after[/i] the related [constant "
+"NOTIFICATION_ENTER_TREE] notification."
msgstr ""
#: doc/classes/Node.xml
@@ -37998,15 +38447,21 @@ msgstr ""
#: doc/classes/Node.xml
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)."
+"the right place for de-initialization (or a \"destructor\", if you will).\n"
+"This signal is emitted [i]before[/i] the related [constant "
+"NOTIFICATION_EXIT_TREE] notification."
msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node enters a [SceneTree]."
+msgid ""
+"Notification received when the node enters a [SceneTree].\n"
+"This notification is emitted [i]before[/i] the related [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node is about to exit a [SceneTree]."
+msgid ""
+"Notification received when the node is about to exit a [SceneTree].\n"
+"This notification is emitted [i]after[/i] the related [signal tree_exiting]."
msgstr ""
#: doc/classes/Node.xml
@@ -38267,7 +38722,13 @@ msgid "Rotation in degrees, relative to the node's parent."
msgstr ""
#: doc/classes/Node2D.xml
-msgid "The node's scale. Unscaled value: [code](1, 1)[/code]."
+msgid ""
+"The node's scale. Unscaled value: [code](1, 1)[/code].\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
#: doc/classes/Node2D.xml
@@ -39707,6 +40168,10 @@ msgid ""
" if argument.find(\"=\") > -1:\n"
" var key_value = argument.split(\"=\")\n"
" arguments[key_value[0].lstrip(\"--\")] = key_value[1]\n"
+" else:\n"
+" # Options without an argument will be present in the dictionary,\n"
+" # with the value set to an empty string.\n"
+" arguments[argument.lstrip(\"--\")] = \"\"\n"
"[/codeblock]"
msgstr ""
@@ -40360,8 +40825,15 @@ msgstr ""
msgid ""
"Moves the file or directory to the system's recycle bin. See also [method "
"Directory.remove].\n"
+"The method takes only global paths, so you may need to use [method "
+"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/"
+"code] as it will not work in exported project.\n"
"[b]Note:[/b] If the user has disabled the recycle bin on their system, the "
-"file will be permanently deleted instead."
+"file will be permanently deleted instead.\n"
+"[codeblock]\n"
+"var file_to_remove = \"user://slot1.sav\"\n"
+"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/OS.xml
@@ -45200,7 +45672,18 @@ msgstr ""
#: doc/classes/PopupMenu.xml
msgid ""
"[PopupMenu] is a [Control] that displays a list of options. They are popular "
-"in toolbars or context menus."
+"in toolbars or context menus.\n"
+"[b]Incremental search:[/b] Like [ItemList] and [Tree], [PopupMenu] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/PopupMenu.xml
@@ -46707,7 +47190,16 @@ msgid ""
msgstr ""
#: doc/classes/ProjectSettings.xml
-msgid "Message to be displayed before the backtrace when the engine crashes."
+msgid ""
+"Message to be displayed before the backtrace when the engine crashes. By "
+"default, this message is only used in exported projects due to the editor-"
+"only override applied to this setting."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Editor-only override for [member debug/settings/crash_handler/message]. Does "
+"not affect exported projects in debug or release mode."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -46952,6 +47444,18 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default naming style for scene files to infer from their root nodes. "
+"Possible options are:\n"
+"- [code]0[/code] (Auto): Uses the scene root name as is without changing its "
+"casing.\n"
+"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase "
+"casing.\n"
+"- [code]2[/code] (snake_case): Converts the scene root name to snake_case "
+"casing."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -47177,6 +47681,198 @@ msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 1."
msgstr ""
@@ -47385,6 +48081,198 @@ msgid "Optional name for the 2D render layer 9."
msgstr ""
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 1."
msgstr ""
@@ -47652,6 +48540,49 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default cell height for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_height].\n"
+"[b]Note:[/b] Currently not implemented."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 2D navigation maps. See [method "
+"Navigation2DServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell height for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_height]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 3D navigation maps. See [method "
+"NavigationServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default map up vector for 3D navigation maps. See [method NavigationServer."
+"map_set_up]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -48325,20 +49256,28 @@ msgid ""
"cause.\n"
"The default value is a conservative one, so you are advised to tweak it "
"according to the hardware you are targeting.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"The default is a very conservative override for [code]rendering/gles3/"
-"shaders/max_concurrent_compiles[/code].\n"
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
"Depending on the specific devices you are targeting, you may want to raise "
"it.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
+"Depending on the specific browsers you are targeting, you may want to raise "
+"it.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -48346,19 +49285,28 @@ msgid ""
"The maximum size, in megabytes, that the ubershader cache can grow up to. On "
"startup, the least recently used entries will be deleted until the total "
"size is within bounds.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/ubershader_cache_size_mb[/"
-"code], so a smaller maximum size can be configured for mobile platforms, "
-"where storage space is more limited.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for mobile platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for web platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] Currently, shader caching is generally unavailable on web "
+"platforms.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -48390,14 +49338,22 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/shader_compilation_mode[/"
-"code], so asynchronous compilation can be disabled for mobile.\n"
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on mobile platforms.\n"
"You may want to do that since mobile GPUs generally won't support "
"ubershaders due to their complexity."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on web platforms.\n"
+"You may want to do that since certain browsers (especially on mobile "
+"platforms) generally won't support ubershaders due to their complexity."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
@@ -49154,7 +50110,6 @@ msgid ""
"- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/"
"code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, "
"small grid radius values may lead to unwanted groupings.\n"
-"[/codeblock]\n"
"[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more "
"effective and faster [VisibilityNotifier] functionality. For most use cases, "
"[method Vector3.distance_to] or [method Vector3.distance_squared_to] are "
@@ -51301,6 +52256,22 @@ msgid "Makes text fill width."
msgstr ""
#: doc/classes/RichTextLabel.xml
+msgid "Aligns top of the inline image to the top of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns center of the inline image to the center of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns bottom of the inline image to the baseline of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns bottom of the inline image to the bottom of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
msgid "Each list item has a number marker."
msgstr ""
@@ -53038,8 +54009,8 @@ msgid ""
" yield(get_tree().create_timer(1.0), \"timeout\")\n"
" print(\"Timer ended.\")\n"
"[/codeblock]\n"
-"The timer will be automatically freed after its time elapses, so be aware "
-"that any reference you might have kept to it will become invalid."
+"The timer will be dereferenced after its time elapses. To preserve the "
+"timer, you can keep a reference to it. See [Reference]."
msgstr ""
#: doc/classes/SceneTreeTimer.xml
@@ -53071,24 +54042,23 @@ msgid ""
"manually (i.e. by using [code]Tween.new()[/code]) are invalid. They can't be "
"used for tweening values, but you can do manual interpolation with [method "
"interpolate_value].\n"
-"A [SceneTreeTween] animation is composed of a sequence of [Tweener]s, which "
-"by default are executed one after another. You can create a sequence by "
-"appending [Tweener]s to the [SceneTreeTween]. Animating something with a "
-"[Tweener] is called tweening. Example tweening sequence looks like this:\n"
+"A tween animation is created by adding [Tweener]s to the [SceneTreeTween] "
+"object, using [method tween_property], [method tween_interval], [method "
+"tween_callback] or [method tween_method]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1)\n"
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"This sequence will make the [code]$Sprite[/code] node turn red, then shrink "
-"and finally the [method Node.queue_free] is called to remove the sprite. See "
-"methods [method tween_property], [method tween_interval], [method "
-"tween_callback] and [method tween_method] for more usage information.\n"
+"This sequence will make the [code]$Sprite[/code] node turn red, then shrink, "
+"before finally calling [method Node.queue_free] to free the sprite. "
+"[Tweener]s are executed one after another by default. This behavior can be "
+"changed using [method parallel] and [method set_parallel].\n"
"When a [Tweener] is created with one of the [code]tween_*[/code] methods, a "
"chained method call can be used to tweak the properties of this [Tweener]. "
-"For example, if you want to set different transition type in the above "
-"example, you can do:\n"
+"For example, if you want to set a different transition type in the above "
+"example, you can use [method set_trans]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1).set_trans(Tween."
@@ -53097,8 +54067,9 @@ msgid ""
"TRANS_BOUNCE)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Most of the [SceneTreeTween] methods can be chained this way too. In this "
-"example the [SceneTreeTween] is bound and have set a default transition:\n"
+"Most of the [SceneTreeTween] methods can be chained this way too. In the "
+"following example the [SceneTreeTween] is bound to the running script's node "
+"and a default transition is set for its [Tweener]s:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween().bind_node(self).set_trans(Tween."
"TRANS_ELASTIC)\n"
@@ -53106,16 +54077,16 @@ msgid ""
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Another interesting use for [SceneTreeTween]s is animating arbitrary set of "
+"Another interesting use for [SceneTreeTween]s is animating arbitrary sets of "
"objects:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"for sprite in get_children():\n"
-" tween.tween_property(sprite, \"position\", Vector2(), 1)\n"
+" tween.tween_property(sprite, \"position\", Vector2(0, 0), 1)\n"
"[/codeblock]\n"
"In the example above, all children of a node are moved one after another to "
"position (0, 0).\n"
-"Some [Tweener]s use transitions and eases. The first accepts an [enum Tween."
+"Some [Tweener]s use transitions and eases. The first accepts a [enum Tween."
"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 Tween.EaseType] constant, and "
@@ -53127,7 +54098,7 @@ msgid ""
"tween_cheatsheet.png]Tween easing and transition types cheatsheet[/url]\n"
"[b]Note:[/b] All [SceneTreeTween]s will automatically start by default. To "
"prevent a [SceneTreeTween] from autostarting, you can call [method stop] "
-"immediately after it was created."
+"immediately after it is created."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53157,21 +54128,24 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
-"Processes the [SceneTreeTween] by given [code]delta[/code] value, in "
-"seconds. Mostly useful when the [SceneTreeTween] is paused, for controlling "
-"it manually. Can also be used to end the [SceneTreeTween] animation "
-"immediately, by using [code]delta[/code] longer than the whole duration.\n"
+"Processes the [SceneTreeTween] by the given [code]delta[/code] value, in "
+"seconds. This is mostly useful for manual control when the [SceneTreeTween] "
+"is paused. It can also be used to end the [SceneTreeTween] animation "
+"immediately, by setting [code]delta[/code] longer than the whole duration of "
+"the [SceneTreeTween] animation.\n"
"Returns [code]true[/code] if the [SceneTreeTween] still has [Tweener]s that "
"haven't finished.\n"
-"[b]Note:[/b] The [SceneTreeTween] will become invalid after finished, but "
-"you can call [method stop] after the step, to keep it and reset."
+"[b]Note:[/b] The [SceneTreeTween] will become invalid in the next processing "
+"frame after its animation finishes. Calling [method stop] after performing "
+"[method custom_step] instead keeps and resets the [SceneTreeTween]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Returns the total time in seconds the [SceneTreeTween] has been animating (i."
-"e. time since it started, not counting pauses etc.). The time is affected by "
-"[method set_speed_scale] and [method stop] will reset it to [code]0[/code].\n"
+"e. the time since it started, not counting pauses etc.). The time is "
+"affected by [method set_speed_scale], and [method stop] will reset it to "
+"[code]0[/code].\n"
"[b]Note:[/b] As it results from accumulating frame deltas, the time returned "
"after the [SceneTreeTween] has finished animating will be slightly greater "
"than the actual [SceneTreeTween] duration."
@@ -53207,11 +54181,10 @@ msgstr ""
msgid ""
"Returns whether the [SceneTreeTween] is valid. A valid [SceneTreeTween] is a "
"[SceneTreeTween] contained by the scene tree (i.e. the array from [method "
-"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). "
-"[SceneTreeTween] might become invalid when it has finished tweening or was "
-"killed, also when created with [code]Tween.new()[/code]. Invalid "
-"[SceneTreeTween] can't have [Tweener]s appended, because it can't animate "
-"them. You can however still use [method interpolate_value]."
+"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). A "
+"[SceneTreeTween] might become invalid when it has finished tweening, is "
+"killed, or when created with [code]SceneTreeTween.new()[/code]. Invalid "
+"[SceneTreeTween]s can't have [Tweener]s appended."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53251,16 +54224,15 @@ msgstr ""
msgid ""
"Sets the number of times the tweening sequence will be repeated, i.e. "
"[code]set_loops(2)[/code] will run the animation twice.\n"
-"Calling this method without arguments will make the [SceneTreeTween] run "
-"infinitely, until it is either killed by [method kill] or by freeing bound "
-"node, or all the animated objects have been freed (which makes further "
+"Calling this method without arguments will make the [Tween] run infinitely, "
+"until either it is killed with [method kill], the [Tween]'s bound node is "
+"freed, or all the animated objects have been freed (which makes further "
"animation impossible).\n"
"[b]Warning:[/b] Make sure to always add some duration/delay when using "
-"infinite loops. 0-duration looped animations (e.g. single [CallbackTweener] "
-"with no delay or [PropertyTweener] with invalid node) are equivalent to "
-"infinite [code]while[/code] loops and will freeze your game. If a "
-"[SceneTreeTween]'s lifetime depends on some node, always use [method "
-"bind_node]."
+"infinite loops. To prevent the game freezing, 0-duration looped animations "
+"(e.g. a single [CallbackTweener] with no delay) are stopped after a small "
+"number of loops, which may produce unexpected results. If a [Tween]'s "
+"lifetime depends on some node, always use [method bind_node]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53322,10 +54294,10 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Creates and appends an [IntervalTweener]. This method can be used to create "
-"delays in the tween animation, as an alternative for using the delay in "
-"other [Tweener]s or when there's no animation (in which case the "
-"[SceneTreeTween] acts as a timer). [code]time[/code] is the length of the "
-"interval, in seconds.\n"
+"delays in the tween animation, as an alternative to using the delay in other "
+"[Tweener]s, or when there's no animation (in which case the [SceneTreeTween] "
+"acts as a timer). [code]time[/code] is the length of the interval, in "
+"seconds.\n"
"Example: creating an interval in code execution.\n"
"[codeblock]\n"
"# ... some code\n"
@@ -53379,8 +54351,8 @@ msgid ""
"Creates and appends a [PropertyTweener]. This method tweens a "
"[code]property[/code] of an [code]object[/code] between an initial value and "
"[code]final_val[/code] in a span of time equal to [code]duration[/code], in "
-"seconds. The initial value by default is a value at the time the tweening of "
-"the [PropertyTweener] start. For example:\n"
+"seconds. The initial value by default is the property's value at the time "
+"the tweening of the [PropertyTweener] starts. For example:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"tween.tween_property($Sprite, \"position\", Vector2(100, 200), 1)\n"
@@ -53411,16 +54383,15 @@ msgid ""
"Emitted when the [SceneTreeTween] has finished all tweening. Never emitted "
"when the [SceneTreeTween] is set to infinite looping (see [method "
"set_loops]).\n"
-"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) after this signal "
-"is emitted, but it doesn't happen immediately, but on the next processing "
-"frame. Calling [method stop] inside the signal callback will preserve the "
-"[SceneTreeTween]."
+"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) in the next "
+"processing frame after this signal is emitted. Calling [method stop] inside "
+"the signal callback will prevent the [SceneTreeTween] from being removed."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Emitted when a full loop is complete (see [method set_loops]), providing the "
-"loop index. This signal is not emitted after final loop, use [signal "
+"loop index. This signal is not emitted after the final loop, use [signal "
"finished] instead for this case."
msgstr ""
@@ -53428,7 +54399,7 @@ msgstr ""
msgid ""
"Emitted when one step of the [SceneTreeTween] is complete, providing the "
"step index. One step is either a single [Tweener] or a group of [Tweener]s "
-"running parallelly."
+"running in parallel."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -54760,7 +55731,12 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-msgid "Scale part of the local transformation."
+msgid ""
+"Scale part of the local transformation.\n"
+"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, the scale values will either be all "
+"positive or all negative."
msgstr ""
#: doc/classes/Spatial.xml
@@ -57391,11 +58367,11 @@ msgstr ""
msgid ""
"Returns [code]true[/code] if this string contains a valid integer.\n"
"[codeblock]\n"
-"print(\"7\".is_valid_int()) # Prints \"True\"\n"
-"print(\"14.6\".is_valid_int()) # Prints \"False\"\n"
-"print(\"L\".is_valid_int()) # Prints \"False\"\n"
-"print(\"+3\".is_valid_int()) # Prints \"True\"\n"
-"print(\"-12\".is_valid_int()) # Prints \"True\"\n"
+"print(\"7\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"14.6\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"L\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"+3\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"-12\".is_valid_integer()) # Prints \"True\"\n"
"[/codeblock]"
msgstr ""
@@ -60861,6 +61837,10 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml
+msgid "If [code]true[/code], this TileMap bakes a navigation region."
+msgstr ""
+
+#: doc/classes/TileMap.xml
msgid "If [code]true[/code], the cell's UVs will be clipped."
msgstr ""
@@ -60967,6 +61947,10 @@ msgid "The TileMap orientation mode. See [enum Mode] for possible values."
msgstr ""
#: doc/classes/TileMap.xml
+msgid "The navigation layers the TileMap generates its navigation regions in."
+msgstr ""
+
+#: doc/classes/TileMap.xml
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 "
@@ -62098,7 +63082,12 @@ msgstr ""
#: doc/classes/Transform2D.xml
msgid ""
"Returns a copy of the transform scaled by the given [code]scale[/code] "
-"factor, using matrix multiplication."
+"factor, using matrix multiplication.\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
#: doc/classes/Transform2D.xml
@@ -62253,7 +63242,18 @@ msgid ""
"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]."
+"to remove it from the [Tree].\n"
+"[b]Incremental search:[/b] Like [ItemList] and [PopupMenu], [Tree] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/Tree.xml
@@ -65769,11 +66769,12 @@ msgid "This enabler will stop [Particles2D] nodes."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _process function."
+msgid "This enabler will stop the parent's [method Node._process] function."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _physics_process function."
+msgid ""
+"This enabler will stop the parent's [method Node._physics_process] function."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
@@ -65813,6 +66814,16 @@ msgid "The VisibilityNotifier's bounding box."
msgstr ""
#: doc/classes/VisibilityNotifier.xml
+msgid ""
+"In addition to checking whether a node is on screen or within a [Camera]'s "
+"view, VisibilityNotifier can also optionally check whether a node is within "
+"a specified maximum distance when using a [Camera] with perspective "
+"projection. This is useful for throttling the performance requirements of "
+"nodes that are far away.\n"
+"[b]Note:[/b] This feature will be disabled if set to 0.0."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier.xml
msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view."
msgstr ""
@@ -70558,6 +71569,16 @@ msgid "The amount of shader rebinds in the frame."
msgstr ""
#: doc/classes/VisualServer.xml
+msgid ""
+"The peak amount of shaders that have been under compilation in the frame.\n"
+"This is useful to know when asynchronous shader compilation has finished for "
+"the current shaders on screen.\n"
+"[b]Note:[/b] For complete certainty, only assume there are no outstanding "
+"compilations when this value is zero for at least two frames in a row.\n"
+"Unimplemented in the GLES2 rendering backend, always returns 0."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
msgid "The amount of surface changes in the frame."
msgstr ""
@@ -73754,8 +74775,8 @@ msgstr ""
#: doc/classes/World.xml
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."
+"scenario, a navigation map and a sound space. Spatial nodes register their "
+"resources into the current world."
msgstr ""
#: doc/classes/World.xml
@@ -73770,8 +74791,13 @@ msgstr ""
#: doc/classes/World.xml
msgid ""
-"The World's fallback_environment will be used if the World's [Environment] "
-"fails or is missing."
+"The World's fallback environment will be used if [member environment] fails "
+"or is missing."
+msgstr ""
+
+#: doc/classes/World.xml
+msgid ""
+"The [RID] of this world's navigation map. Used by the [NavigationServer]."
msgstr ""
#: doc/classes/World.xml
@@ -73789,8 +74815,8 @@ msgstr ""
#: doc/classes/World2D.xml
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."
+"visual scenario, a navigation map and a sound space. 2D nodes register their "
+"resources into the current 2D world."
msgstr ""
#: doc/classes/World2D.xml
@@ -73808,6 +74834,11 @@ msgstr ""
#: doc/classes/World2D.xml
msgid ""
+"The [RID] of this world's navigation map. Used by the [Navigation2DServer]."
+msgstr ""
+
+#: doc/classes/World2D.xml
+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 ""
diff --git a/doc/translations/nb.po b/doc/translations/nb.po
index 8adbf00ffc..9aa8c17200 100644
--- a/doc/translations/nb.po
+++ b/doc/translations/nb.po
@@ -357,7 +357,7 @@ msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
msgid ""
"Compares two values by checking their actual contents, recursing into any "
-"`Array` or `Dictionary` up to its deepest level.\n"
+"[Array] or [Dictionary] up to its deepest level.\n"
"This compares to [code]==[/code] in a number of ways:\n"
"- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/"
"code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] "
@@ -404,7 +404,7 @@ msgid ""
"- 1.0: Linear\n"
"- Greater than 1.0 (exclusive): Ease in\n"
"[/codeblock]\n"
-"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.4/img/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/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]."
@@ -1111,7 +1111,7 @@ msgid ""
"[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/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/img/"
"smoothstep_ease_comparison.png]Comparison between smoothstep() and ease(x, "
"-1.6521) return values[/url]"
msgstr ""
@@ -3389,6 +3389,12 @@ msgstr ""
#: doc/classes/@GlobalScope.xml
msgid ""
+"Hints that an integer property is a bitmask using the optionally named 2D "
+"navigation layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml
+msgid ""
"Hints that an integer property is a bitmask using the optionally named 3D "
"render layers."
msgstr ""
@@ -3401,6 +3407,12 @@ msgstr ""
#: doc/classes/@GlobalScope.xml
msgid ""
+"Hints that an integer property is a bitmask using the optionally named 3D "
+"navigation layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml
+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]."
@@ -8376,7 +8388,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/AStar.xml
+#: doc/classes/AStar.xml doc/classes/AStar2D.xml
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[/"
@@ -8575,7 +8587,10 @@ msgid ""
msgstr ""
#: doc/classes/AStar2D.xml
-msgid "Returns whether there is a connection/segment between the given points."
+msgid ""
+"Returns whether there is a connection/segment between the given points. 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/AStar2D.xml
@@ -8592,10 +8607,6 @@ msgid ""
msgstr ""
#: doc/classes/AStar2D.xml
-msgid "Deletes the segment between the given points."
-msgstr ""
-
-#: doc/classes/AStar2D.xml
msgid ""
"Returns the closest position to [code]to_position[/code] that resides inside "
"a segment between two connected points.\n"
@@ -8780,7 +8791,9 @@ msgid ""
"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."
+"transmit audio over the network. When capturing audio data from a "
+"microphone, the format of the samples will be stereo 32-bit floating point "
+"PCM."
msgstr ""
#: doc/classes/AudioEffectCapture.xml
@@ -13623,7 +13636,7 @@ msgid ""
msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
-#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/Navigation2D.xml
msgid "Returns the object's [RID]."
msgstr ""
@@ -19098,11 +19111,14 @@ msgid ""
msgstr ""
#: doc/classes/CurveTexture.xml
-msgid "The [code]curve[/code] rendered onto the texture."
+msgid "The [Curve] that is rendered onto the texture."
msgstr ""
#: doc/classes/CurveTexture.xml
-msgid "The width of the texture."
+msgid ""
+"The width of the texture (in pixels). Higher values make it possible to "
+"represent high-frequency data better (such as sudden direction changes), at "
+"the cost of increased generation time and memory usage."
msgstr ""
#: doc/classes/CylinderMesh.xml
@@ -19388,6 +19404,13 @@ msgid "Returns the list of keys in the [Dictionary]."
msgstr ""
#: doc/classes/Dictionary.xml
+msgid ""
+"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, "
+"duplicate keys will not be copied over, unless [code]overwrite[/code] is "
+"[code]true[/code]."
+msgstr ""
+
+#: doc/classes/Dictionary.xml
msgid "Returns the number of keys in the dictionary."
msgstr ""
@@ -21326,9 +21349,23 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide a state data you want to be saved, like view "
+"position, grid settings, folding, etc. 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). This data is automatically saved for "
+"each scene in an [code]editstate[/code] file in the editor metadata folder. "
+"If you want to store global (scene-independent) editor data for your plugin, "
+"you can use [method get_window_layout] instead.\n"
+"Use [method set_state] to restore your saved state.\n"
+"[b]Note:[/b] This method should not be used to save important settings that "
+"should persist with the project.\n"
+"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be "
+"stored and restored correctly.\n"
+"[codeblock]\n"
+"func get_state():\n"
+" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n"
+" return state\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -21339,9 +21376,18 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide the GUI layout of the plugin or any other "
+"data you want to be stored. 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). The data is stored in the "
+"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n"
+"Use [method set_window_layout] to restore your saved layout.\n"
+"[codeblock]\n"
+"func get_window_layout(configuration):\n"
+" configuration.set_value(\"MyPlugin\", \"window_position\", $Window."
+"position)\n"
+" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -21454,11 +21500,30 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the state saved by [method get_state]."
+msgid ""
+"Restore the state saved by [method get_state]. This method is called when "
+"the current scene tab is changed in the editor.\n"
+"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise "
+"it will not be recognized and this method will not be called.\n"
+"[codeblock]\n"
+"func set_state(data):\n"
+" zoom = data.get(\"zoom\", 1.0)\n"
+" preferred_color = data.get(\"my_color\", Color.white)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the plugin GUI layout saved by [method get_window_layout]."
+msgid ""
+"Restore the plugin GUI layout and data saved by [method get_window_layout]. "
+"This method is called for every plugin on editor startup. Use the provided "
+"[code]configuration[/code] file to read your saved data.\n"
+"[codeblock]\n"
+"func set_window_layout(configuration):\n"
+" $Window.position = configuration.get_value(\"MyPlugin\", "
+"\"window_position\", Vector2())\n"
+" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", "
+"Color.white)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -26093,7 +26158,8 @@ msgid ""
"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])."
+"at fixed steps (see [member width]). See also [GradientTexture2D] and "
+"[CurveTexture]."
msgstr ""
#: doc/classes/GradientTexture.xml
@@ -26115,7 +26181,8 @@ msgid ""
"repeat] types using colors obtained from the gradient. 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] and [member height])."
+"[member width] and [member height]). See also [GradientTexture] and "
+"[CurveTexture]."
msgstr ""
#: doc/classes/GradientTexture2D.xml
@@ -26921,6 +26988,12 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+msgid ""
+"If [code]true[/code], this GridMap uses cell navmesh resources to create "
+"navigation regions."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid "If [code]true[/code], grid items are centered on the X axis."
msgstr ""
@@ -26971,6 +27044,10 @@ msgid "The assigned [MeshLibrary]."
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+msgid "The navigation layers the GridMap generates its navigation regions in."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
"Overrides the default friction and bounce physics properties for the whole "
"[GridMap]."
@@ -28194,7 +28271,7 @@ msgid ""
" # 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 body = to_json({\"name\": \"Godette\"})\n"
" error = http_request.request(\"https://httpbin.org/post\", [], true, "
"HTTPClient.METHOD_POST, body)\n"
" if error != OK:\n"
@@ -29361,7 +29438,7 @@ msgstr ""
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 "
+"([member 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 "
@@ -29510,10 +29587,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Returns the mouse mode. See the constants for more information."
-msgstr ""
-
-#: doc/classes/Input.xml
msgid ""
"Gets an input vector by specifying four actions for the positive and "
"negative X and Y axes.\n"
@@ -29707,24 +29780,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Sets the mouse mode. See the constants for more information."
-msgstr ""
-
-#: doc/classes/Input.xml
-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
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 "
@@ -29760,6 +29815,24 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
+msgid "Controls the mouse mode. See [enum MouseMode] for more information."
+msgstr ""
+
+#: doc/classes/Input.xml
+msgid ""
+"If [code]true[/code], similar input events sent by the operating system are "
+"accumulated. 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 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
msgid "Emitted when a joypad device has been connected or disconnected."
msgstr ""
@@ -30067,8 +30140,8 @@ msgstr ""
#: doc/classes/InputEventJoypadButton.xml
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]."
+"Represents the pressure the user puts on the button with their finger, if "
+"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]."
msgstr ""
#: doc/classes/InputEventJoypadMotion.xml
@@ -30331,9 +30404,9 @@ 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 "
+"at most. If you need more precise input reporting, set [member Input."
+"use_accumulated_input] to [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."
@@ -30820,7 +30893,18 @@ msgid ""
"[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."
+"fixed_column_width] greater than zero to wrap the text.\n"
+"[b]Incremental search:[/b] Like [PopupMenu] and [Tree], [ItemList] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/ItemList.xml
@@ -34567,11 +34651,16 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Returns the override [Material] for a surface of the [Mesh] resource.\n"
+"[b]Note:[/b] This function only returns [i]override[/i] materials associated "
+"with this [MeshInstance]. Consider using [method get_active_material] or "
+"[method Mesh.surface_get_material] to get materials associated with the "
+"[Mesh] resource."
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the number of surface materials."
+msgid "Returns the number of surface override materials."
msgstr ""
#: doc/classes/MeshInstance.xml
@@ -34608,7 +34697,10 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Sets the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Sets the override [Material] for the specified surface of the [Mesh] "
+"resource. This material is associated with this [MeshInstance] rather than "
+"with the [Mesh] resource."
msgstr ""
#: doc/classes/MeshInstance.xml
@@ -34639,9 +34731,10 @@ msgstr ""
#: doc/classes/MeshInstance2D.xml
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\"."
+"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be "
+"automatically created from an existing [Sprite] via a tool in the editor "
+"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to "
+"MeshInstance2D[/b] at the top of the 2D editor viewport."
msgstr ""
#: doc/classes/MeshInstance2D.xml
@@ -35399,6 +35492,9 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"Provides navigation and pathfinding within a collection of "
"[NavigationMesh]es. By default, these will be automatically collected from "
"child [NavigationMeshInstance] nodes. In addition to basic pathfinding, this "
@@ -35439,7 +35535,14 @@ msgid ""
msgstr ""
#: doc/classes/Navigation.xml
+msgid "Returns the [RID] of the navigation map on the [NavigationServer]."
+msgstr ""
+
+#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"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, "
@@ -35461,16 +35564,31 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation.get_simple_path] path query."
+msgstr ""
+
+#: doc/classes/Navigation.xml
+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/Navigation.xml doc/classes/Navigation2DServer.xml
+#: doc/classes/NavigationServer.xml
+msgid ""
+"Emitted when a navigation map is updated, when a region moves or is modified."
+msgstr ""
+
#: doc/classes/Navigation2D.xml
msgid "2D navigation and pathfinding node."
msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -35490,6 +35608,9 @@ msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -35499,6 +35620,12 @@ msgstr ""
msgid "The XY plane cell size to use for fields."
msgstr ""
+#: doc/classes/Navigation2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation2D.get_simple_path] path query."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml
msgid "Server interface for low-level 2D navigation access."
msgstr ""
@@ -35515,8 +35642,12 @@ msgid ""
"through scripts.\n"
"For two regions to be connected to each other, they must share a similar "
"edge. An edge is considered connected to another if both of its two vertices "
-"are at a distance less than [member Navigation.edge_connection_margin] to "
-"the respective other edge's vertex.\n"
+"are at a distance less than navigation map [code]edge_connection_margin[/"
+"code] to the respective other edge's vertex.\n"
+"You may assign navigation layers to regions with [method Navigation2DServer."
+"region_set_navigation_layers], which then can be checked upon when "
+"requesting a path with [method Navigation2DServer.map_get_path]. This allows "
+"allowing or forbidding some areas to 2D objects.\n"
"To use the collision avoidance system, you may use agents. You can set an "
"agent's target velocity, then the servers will emit a callback with a "
"modified velocity.\n"
@@ -35544,7 +35675,17 @@ msgid "Returns [code]true[/code] if the map got changed the previous frame."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Callback called at the end of the RVO process."
+msgid ""
+"Callback called at the end of the RVO process. If a callback is created "
+"manually and the agent is placed on a navigation map it will calculate "
+"avoidance for the agent and dispatch the calculated [code]safe_velocity[/"
+"code] to the [code]receiver[/code] object with a signal to the chosen "
+"[code]method[/code] name.\n"
+"[b]Note:[/b] Created callbacks are always processed independently of the "
+"SceneTree state as long as the agent is on a navigation map and not freed. "
+"To disable the dispatch of a callback from an agent use [method "
+"agent_set_callback] again with a [code]null[/code] object as the "
+"[code]receiver[/code]."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -35599,15 +35740,55 @@ msgid "Destroys the given RID."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns all created navigation map [RID]s on the NavigationServer. This "
+"returns both 2D and 3D created navigation maps as there is technically no "
+"distinction between them."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Create a new map."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"This function immediately forces synchronization of the specified navigation "
+"[code]map[/code] [RID]. By default navigation maps are only synchronized at "
+"the end of each physics frame. This function can be used to immediately "
+"(re)calculate all the navigation meshes and region connections of the "
+"navigation map. This makes it possible to query a navigation path for a "
+"changed map immediately and in the same frame (multiple times if needed).\n"
+"Due to technical restrictions the current NavigationServer command queue "
+"will be flushed. This means all already queued update commands for this "
+"physics frame will be executed, even those intended for other maps, regions "
+"and agents not part of the specified map. The expensive computation of the "
+"navigation meshes and region connections of a map will only be done for the "
+"specified map. Other maps will receive the normal synchronization at the end "
+"of the physics frame. Should the specified map receive changes after the "
+"forced update it will update again as well when the other maps receive their "
+"update.\n"
+"Avoidance processing and dispatch of the [code]safe_velocity[/code] signals "
+"is untouched by this function and continues to happen for all maps and "
+"agents at the end of the physics frame.\n"
+"[b]Note:[/b] With great power comes great responsibility. This function "
+"should only be used by users that really know what they are doing and have a "
+"good reason for it. Forcing an immediate update of a navigation map requires "
+"locking the NavigationServer and flushing the entire NavigationServer "
+"command queue. Not only can this severely impact the performance of a game "
+"but it can also introduce bugs if used inappropriately without much "
+"foresight."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns all navigation agents [RID]s that are currently assigned to the "
"requested navigation [code]map[/code]."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Returns the map cell size."
msgstr ""
@@ -35631,7 +35812,10 @@ msgid ""
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Returns the navigation path to reach the destination from the origin."
+msgid ""
+"Returns the navigation path to reach the destination from the origin. "
+"[code]navigation_layers[/code] is a bitmask of all region layers that are "
+"allowed to be in the path."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -35648,6 +35832,12 @@ msgstr ""
msgid "Sets the map active."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/"
+"b] Currently not implemented."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Set the map cell size used to weld the navigation mesh polygons."
msgstr ""
@@ -35663,14 +35853,73 @@ msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"Returns the ending point of a connection door. [code]connection[/code] is an "
+"index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns the starting point of a connection door. [code]connection[/code] is "
+"an index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns how many connections this [code]region[/code] has with other regions "
+"in the map."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns the navigation map [RID] the requested [code]region[/code] is "
"currently assigned to."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Returns the region's navigation layers."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns [code]true[/code] if the provided [code]point[/code] in world space "
+"is currently owned by the provided navigation [code]region[/code]. Owned in "
+"this context means that one of the region's navigation mesh polygon faces "
+"has a possible position at the closest distance to this point compared to "
+"all other navigation meshes from other navigation regions that are also "
+"registered on the navigation map of the provided region.\n"
+"If multiple navigation meshes have positions at equal distance the "
+"navigation region whose polygons are processed first wins the ownership. "
+"Polygons are processed in the same order that navigation regions were "
+"registered on the NavigationServer.\n"
+"[b]Note:[/b] If navigation meshes from different navigation regions overlap "
+"(which should be avoided in general) the result might not be what is "
+"expected."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Sets the map for the region."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method Navigation2DServer.map_get_path])."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Sets the navigation mesh for the region."
msgstr ""
@@ -35679,6 +35928,10 @@ msgstr ""
msgid "Sets the global transformation for the region."
msgstr ""
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]."
+msgstr ""
+
#: doc/classes/NavigationAgent.xml
msgid "3D agent used in navigation for collision avoidance."
msgstr ""
@@ -35688,9 +35941,16 @@ msgid ""
"3D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationAgent] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World] navigation map. If this node is a child of a [Navigation] "
+"node it will register to the navigation map of the navigation node or the "
+"function [method set_navigation] can be used to set the navigation node "
+"directly. [NavigationAgent] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -35708,7 +35968,15 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-msgid "Returns the path from start to finish in global coordinates."
+msgid ""
+"Returns this agent's current path from start to finish in global "
+"coordinates. The path only updates when the target location is changed or "
+"the agent requires a repath. The path array is not intended to be used in "
+"direct path movement as the agent has its own internal path logic that would "
+"get corrupted by changing the path array manually. Use the intended [method "
+"get_next_location] once every physics frame to receive the next path point "
+"for the agents movement as this function also updates the internal path "
+"logic."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -35723,11 +35991,24 @@ msgid ""
"system."
msgstr ""
-#: doc/classes/NavigationAgent.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"Returns a [Vector3] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the origin of the agent's parent."
+"Returns the [RID] of the navigation map for this NavigationAgent node. This "
+"function returns always the map set on the NavigationAgent node and not the "
+"map of the abstract agent on the NavigationServer. If the agent map is "
+"changed directly with the NavigationServer API the NavigationAgent node will "
+"not be aware of the map change. Use [method set_navigation_map] to change "
+"the navigation map for the NavigationAgent and also update the agent on the "
+"NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
+"Returns the next location in global coordinates that can be moved to, making "
+"sure that there are no static objects in the way. If the agent does not have "
+"a navigation path, it will return the position of the agent's parent. The "
+"use of this function once every physics frame is required to update the "
+"internal path logic of the NavigationAgent."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -35768,6 +36049,12 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"Sets the [RID] of the navigation map this NavigationAgent node should use "
+"and also updates the [code]agent[/code] on the NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"Sets the user desired final location. This will clear the current navigation "
"path."
msgstr ""
@@ -35780,7 +36067,13 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml
-msgid "The agent height offset to match the navigation mesh height."
+msgid ""
+"The NavigationAgent height offset is subtracted from the y-axis value of any "
+"vector path position for this NavigationAgent. The NavigationAgent height "
+"offset does not change or influence the navigation mesh or pathfinding query "
+"result. Additional navigation maps that use regions with navigation meshes "
+"that the developer baked with appropriate agent radius or height values are "
+"required to support different-sized agents."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -35807,26 +36100,53 @@ msgstr ""
msgid "The maximum speed that an agent can move."
msgstr ""
+#: doc/classes/NavigationAgent.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "The distance to search for other agents."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"The distance threshold before a path point is considered to be reached. This "
+"will allow an agent to not have to hit a path point on the path exactly, but "
+"in the area. If this value is set to high the NavigationAgent will skip "
+"points on the path which can lead to leaving the navigation mesh. If this "
+"value is set to low the NavigationAgent will be stuck in a repath loop cause "
+"it will constantly overshoot or undershoot the distance to the next point on "
+"each physics frame update."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"The maximum distance the agent is allowed away from the ideal path to the "
"final location. This can happen due to trying to avoid collisions. When the "
"maximum distance is exceeded, it recalculates the ideal path."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-msgid "The radius of the agent."
+msgid ""
+"The radius of the avoidance agent. This is the \"body\" of the avoidance "
+"agent and not the avoidance maneuver starting radius (which is controlled by "
+"[member neighbor_dist]).\n"
+"Does not affect normal pathfinding. To change an actor's pathfinding radius "
+"bake [NavigationMesh] resources with a different [member NavigationMesh."
+"agent_radius] property and use different navigation maps for each actor size."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"The distance threshold before a target is considered to be reached. This "
-"will allow an agent to not have to hit a point on the path exactly, but in "
-"the area."
+"The distance threshold before the final target point is considered to be "
+"reached. This will allow an agent to not have to hit the point of the final "
+"target exactly, but only the area. If this value is set to low the "
+"NavigationAgent will be stuck in a repath loop cause it will constantly "
+"overshoot or undershoot the distance to the final target point on each "
+"physics frame update."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -35869,9 +36189,16 @@ msgid ""
"2D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationAgent2D] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World2D] navigation map. If this node is a child of a "
+"[Navigation2D] node it will register to the navigation map of the navigation "
+"node or the function [method set_navigation] can be used to set the "
+"navigation node directly. [NavigationAgent2D] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent2D.xml
@@ -35887,13 +36214,6 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent2D.xml
-msgid ""
-"Returns a [Vector2] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the position of the agent's parent."
-msgstr ""
-
-#: doc/classes/NavigationAgent2D.xml
msgid "Returns the [RID] of this agent on the [Navigation2DServer]."
msgstr ""
@@ -35913,6 +36233,13 @@ msgid ""
"only be enabled on agents that currently require it."
msgstr ""
+#: doc/classes/NavigationAgent2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent2D] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationMesh.xml
msgid "A mesh to approximate the walkable areas and obstacles."
msgstr ""
@@ -35943,8 +36270,8 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
-"Returns whether the specified [code]bit[/code] of the [member geometry/"
-"collision_mask] is set."
+"Returns whether the specified [code]bit[/code] of the [member "
+"geometry_collision_mask] is set."
msgstr ""
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
@@ -35966,9 +36293,9 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/"
-"code] in the [member geometry/collision_mask].\n"
+"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]."
+"code] in the [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
@@ -35982,14 +36309,14 @@ 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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36001,7 +36328,7 @@ 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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36029,13 +36356,17 @@ msgstr ""
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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
-"If [code]true[/code], marks walkable spans as not walkable if the clearance "
-"above the span is less than [member agent/height]."
+"If the baking [AABB] has a volume the navigation mesh baking will be "
+"restricted to its enclosing area."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+msgid "The position offset applied to the [member filter_baking_aabb] [AABB]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36045,13 +36376,19 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]true[/code], marks non-walkable spans as walkable if their maximum "
-"is within [member agent/max_climb] of a walkable neighbor."
+"is within [member agent_max_climb] of a walkable neighbor."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+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
msgid ""
"The physics layers to scan for static colliders.\n"
-"Only used when [member geometry/parsed_geometry_type] is [constant "
+"Only used when [member geometry_parsed_geometry_type] is [constant "
"PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]."
msgstr ""
@@ -36070,7 +36407,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"The name of the group to scan for geometry.\n"
-"Only used when [member geometry/source_geometry_mode] is [constant "
+"Only used when [member geometry_source_geometry_mode] is [constant "
"SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant "
"SOURCE_GEOMETRY_GROUPS_EXPLICIT]."
msgstr ""
@@ -36133,7 +36470,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Parses [StaticBody] colliders as geometry. The collider should be in any of "
-"the layers specified by [member geometry/collision_mask]."
+"the layers specified by [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36154,13 +36491,13 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Scans nodes in a group and their child nodes recursively for geometry. The "
-"group is specified by [member geometry/source_group_name]."
+"group is specified by [member geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Uses nodes in a group for geometry. The group is specified by [member "
-"geometry/source_group_name]."
+"geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36202,7 +36539,15 @@ msgid ""
"geometry for walkable terrain suitable to [NavigationMesh] agent properties "
"by creating a voxel world around the meshes bounding area.\n"
"The finalized navigation mesh is then returned and stored inside the "
-"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes."
+"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] "
+"nodes.\n"
+"[b]Note:[/b] Using meshes to not only define walkable surfaces but also "
+"obstruct navigation baking does not always work. The navigation baking has "
+"no concept of what is a geometry \"inside\" when dealing with mesh source "
+"geometry and this is intentional. Depending on current baking parameters, as "
+"soon as the obstructing mesh is large enough to fit a navigation mesh area "
+"inside, the baking will generate navigation mesh areas that are inside the "
+"obstructing source geometry mesh."
msgstr ""
#: doc/classes/NavigationMeshGenerator.xml
@@ -36210,8 +36555,8 @@ msgid ""
"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child "
"nodes under the provided [code]root_node[/code] or a specific group of nodes "
"for potential source geometry. The parse behavior can be controlled with the "
-"[member NavigationMesh.geometry/parsed_geometry_type] and [member "
-"NavigationMesh.geometry/source_geometry_mode] properties on the "
+"[member NavigationMesh.geometry_parsed_geometry_type] and [member "
+"NavigationMesh.geometry_source_geometry_mode] properties on the "
"[NavigationMesh] resource."
msgstr ""
@@ -36228,8 +36573,21 @@ msgstr ""
#: doc/classes/NavigationMeshInstance.xml
msgid ""
"An instance of a [NavigationMesh]. It tells the [Navigation] node what can "
-"be navigated and what cannot, based on the [NavigationMesh] resource. This "
-"should be a child of a [Navigation] node."
+"be navigated and what cannot, based on the [NavigationMesh] resource.\n"
+"By default this node will register to the default [World] navigation map. If "
+"this node is a child of a [Navigation] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method NavigationServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The cost of entering this region from another region can be controlled with "
+"the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The cost of traveling distances inside this region can be controlled with "
+"the [member travel_cost] multiplier."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
@@ -36258,10 +36616,34 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding enters this region's navmesh from another regions navmesh "
+"the [code]enter_cost[/code] value is added to the path distance for "
+"determining the shortest path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationMesh] "
+"belongs to. On path requests with [method NavigationServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
msgid "The [NavigationMesh] resource to use."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding moves inside this region's navmesh the traveled distances "
+"are multiplied with [code]travel_cost[/code] for determining the shortest "
+"path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
msgid "Notifies when the navigation mesh bake operation is completed."
msgstr ""
@@ -36278,7 +36660,9 @@ msgid ""
"3D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationObstacle] is physics safe."
+"[NavigationObstacle] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle.xml
@@ -36318,7 +36702,9 @@ msgid ""
"2D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationObstacle2D] is physics safe."
+"[NavigationObstacle2D] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle2D.xml
@@ -36398,6 +36784,14 @@ msgstr ""
#: doc/classes/NavigationPolygon.xml
msgid ""
+"Returns the [NavigationMesh] resulting from this navigation polygon. This "
+"navmesh can be used to update the navmesh of a region with the [method "
+"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server "
+"behind the scene)."
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml
+msgid ""
"Returns a [PoolVector2Array] containing the vertices of an outline that was "
"created in the editor or by script."
msgstr ""
@@ -36434,6 +36828,30 @@ msgid ""
msgstr ""
#: doc/classes/NavigationPolygonInstance.xml
+msgid "A region of the 2D navigation map."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A region of the navigation map. It tells the [Navigation2DServer] what can "
+"be navigated and what cannot, based on its [NavigationPolygon] resource.\n"
+"By default this node will register to the default [World2D] navigation map. "
+"If this node is a child of a [Navigation2D] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The pathfinding cost of entering this region from another region can be "
+"controlled with the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The pathfinding cost of traveling distances inside this region can be "
+"controlled with the [member travel_cost] multiplier."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
msgid ""
"Returns the [RID] of this region on the [Navigation2DServer]. Combined with "
"[method Navigation2DServer.map_get_closest_point_owner] can be used to "
@@ -36441,6 +36859,22 @@ msgid ""
"navigation map."
msgstr ""
+#: doc/classes/NavigationPolygonInstance.xml
+msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationPolygon] "
+"belongs to. On path requests with [method Navigation2DServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid "The [NavigationPolygon] resource to use."
+msgstr ""
+
#: doc/classes/NavigationServer.xml
msgid "Server interface for low-level 3D navigation access."
msgstr ""
@@ -36516,6 +36950,12 @@ msgid "Bakes the navigation mesh."
msgstr ""
#: doc/classes/NavigationServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method NavigationServer.map_get_path])."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
msgid "Control activation of this server."
msgstr ""
@@ -37982,13 +38422,19 @@ msgstr ""
#: doc/classes/Node.xml
msgid ""
"Emitted when a child node enters the scene tree, either because it entered "
-"on its own or because this node entered with it."
+"on its own or because this node entered with it.\n"
+"This signal is emitted [i]after[/i] the child node's own [constant "
+"NOTIFICATION_ENTER_TREE] and [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
msgid ""
-"Emitted when a child node exits the scene tree, either because it exited on "
-"its own or because this node exited."
+"Emitted when a child node is about to exit the scene tree, either because it "
+"is being removed or freed directly, or because this node is exiting the "
+"tree.\n"
+"When this signal is received, the child [code]node[/code] is still in the "
+"tree and valid. This signal is emitted [i]after[/i] the child node's own "
+"[signal tree_exiting] and [constant NOTIFICATION_EXIT_TREE]."
msgstr ""
#: doc/classes/Node.xml
@@ -38000,7 +38446,10 @@ msgid "Emitted when the node is renamed."
msgstr ""
#: doc/classes/Node.xml
-msgid "Emitted when the node enters the tree."
+msgid ""
+"Emitted when the node enters the tree.\n"
+"This signal is emitted [i]after[/i] the related [constant "
+"NOTIFICATION_ENTER_TREE] notification."
msgstr ""
#: doc/classes/Node.xml
@@ -38010,15 +38459,21 @@ msgstr ""
#: doc/classes/Node.xml
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)."
+"the right place for de-initialization (or a \"destructor\", if you will).\n"
+"This signal is emitted [i]before[/i] the related [constant "
+"NOTIFICATION_EXIT_TREE] notification."
msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node enters a [SceneTree]."
+msgid ""
+"Notification received when the node enters a [SceneTree].\n"
+"This notification is emitted [i]before[/i] the related [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node is about to exit a [SceneTree]."
+msgid ""
+"Notification received when the node is about to exit a [SceneTree].\n"
+"This notification is emitted [i]after[/i] the related [signal tree_exiting]."
msgstr ""
#: doc/classes/Node.xml
@@ -38279,7 +38734,13 @@ msgid "Rotation in degrees, relative to the node's parent."
msgstr ""
#: doc/classes/Node2D.xml
-msgid "The node's scale. Unscaled value: [code](1, 1)[/code]."
+msgid ""
+"The node's scale. Unscaled value: [code](1, 1)[/code].\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
#: doc/classes/Node2D.xml
@@ -39719,6 +40180,10 @@ msgid ""
" if argument.find(\"=\") > -1:\n"
" var key_value = argument.split(\"=\")\n"
" arguments[key_value[0].lstrip(\"--\")] = key_value[1]\n"
+" else:\n"
+" # Options without an argument will be present in the dictionary,\n"
+" # with the value set to an empty string.\n"
+" arguments[argument.lstrip(\"--\")] = \"\"\n"
"[/codeblock]"
msgstr ""
@@ -40372,8 +40837,15 @@ msgstr ""
msgid ""
"Moves the file or directory to the system's recycle bin. See also [method "
"Directory.remove].\n"
+"The method takes only global paths, so you may need to use [method "
+"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/"
+"code] as it will not work in exported project.\n"
"[b]Note:[/b] If the user has disabled the recycle bin on their system, the "
-"file will be permanently deleted instead."
+"file will be permanently deleted instead.\n"
+"[codeblock]\n"
+"var file_to_remove = \"user://slot1.sav\"\n"
+"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/OS.xml
@@ -45212,7 +45684,18 @@ msgstr ""
#: doc/classes/PopupMenu.xml
msgid ""
"[PopupMenu] is a [Control] that displays a list of options. They are popular "
-"in toolbars or context menus."
+"in toolbars or context menus.\n"
+"[b]Incremental search:[/b] Like [ItemList] and [Tree], [PopupMenu] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/PopupMenu.xml
@@ -46719,7 +47202,16 @@ msgid ""
msgstr ""
#: doc/classes/ProjectSettings.xml
-msgid "Message to be displayed before the backtrace when the engine crashes."
+msgid ""
+"Message to be displayed before the backtrace when the engine crashes. By "
+"default, this message is only used in exported projects due to the editor-"
+"only override applied to this setting."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Editor-only override for [member debug/settings/crash_handler/message]. Does "
+"not affect exported projects in debug or release mode."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -46964,6 +47456,18 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default naming style for scene files to infer from their root nodes. "
+"Possible options are:\n"
+"- [code]0[/code] (Auto): Uses the scene root name as is without changing its "
+"casing.\n"
+"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase "
+"casing.\n"
+"- [code]2[/code] (snake_case): Converts the scene root name to snake_case "
+"casing."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -47189,6 +47693,198 @@ msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 1."
msgstr ""
@@ -47397,6 +48093,198 @@ msgid "Optional name for the 2D render layer 9."
msgstr ""
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 1."
msgstr ""
@@ -47664,6 +48552,49 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default cell height for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_height].\n"
+"[b]Note:[/b] Currently not implemented."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 2D navigation maps. See [method "
+"Navigation2DServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell height for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_height]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 3D navigation maps. See [method "
+"NavigationServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default map up vector for 3D navigation maps. See [method NavigationServer."
+"map_set_up]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -48337,20 +49268,28 @@ msgid ""
"cause.\n"
"The default value is a conservative one, so you are advised to tweak it "
"according to the hardware you are targeting.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"The default is a very conservative override for [code]rendering/gles3/"
-"shaders/max_concurrent_compiles[/code].\n"
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
"Depending on the specific devices you are targeting, you may want to raise "
"it.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
+"Depending on the specific browsers you are targeting, you may want to raise "
+"it.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -48358,19 +49297,28 @@ msgid ""
"The maximum size, in megabytes, that the ubershader cache can grow up to. On "
"startup, the least recently used entries will be deleted until the total "
"size is within bounds.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/ubershader_cache_size_mb[/"
-"code], so a smaller maximum size can be configured for mobile platforms, "
-"where storage space is more limited.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for mobile platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for web platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] Currently, shader caching is generally unavailable on web "
+"platforms.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -48402,14 +49350,22 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/shader_compilation_mode[/"
-"code], so asynchronous compilation can be disabled for mobile.\n"
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on mobile platforms.\n"
"You may want to do that since mobile GPUs generally won't support "
"ubershaders due to their complexity."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on web platforms.\n"
+"You may want to do that since certain browsers (especially on mobile "
+"platforms) generally won't support ubershaders due to their complexity."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
@@ -49166,7 +50122,6 @@ msgid ""
"- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/"
"code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, "
"small grid radius values may lead to unwanted groupings.\n"
-"[/codeblock]\n"
"[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more "
"effective and faster [VisibilityNotifier] functionality. For most use cases, "
"[method Vector3.distance_to] or [method Vector3.distance_squared_to] are "
@@ -51313,6 +52268,22 @@ msgid "Makes text fill width."
msgstr ""
#: doc/classes/RichTextLabel.xml
+msgid "Aligns top of the inline image to the top of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns center of the inline image to the center of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns bottom of the inline image to the baseline of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns bottom of the inline image to the bottom of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
msgid "Each list item has a number marker."
msgstr ""
@@ -53050,8 +54021,8 @@ msgid ""
" yield(get_tree().create_timer(1.0), \"timeout\")\n"
" print(\"Timer ended.\")\n"
"[/codeblock]\n"
-"The timer will be automatically freed after its time elapses, so be aware "
-"that any reference you might have kept to it will become invalid."
+"The timer will be dereferenced after its time elapses. To preserve the "
+"timer, you can keep a reference to it. See [Reference]."
msgstr ""
#: doc/classes/SceneTreeTimer.xml
@@ -53083,24 +54054,23 @@ msgid ""
"manually (i.e. by using [code]Tween.new()[/code]) are invalid. They can't be "
"used for tweening values, but you can do manual interpolation with [method "
"interpolate_value].\n"
-"A [SceneTreeTween] animation is composed of a sequence of [Tweener]s, which "
-"by default are executed one after another. You can create a sequence by "
-"appending [Tweener]s to the [SceneTreeTween]. Animating something with a "
-"[Tweener] is called tweening. Example tweening sequence looks like this:\n"
+"A tween animation is created by adding [Tweener]s to the [SceneTreeTween] "
+"object, using [method tween_property], [method tween_interval], [method "
+"tween_callback] or [method tween_method]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1)\n"
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"This sequence will make the [code]$Sprite[/code] node turn red, then shrink "
-"and finally the [method Node.queue_free] is called to remove the sprite. See "
-"methods [method tween_property], [method tween_interval], [method "
-"tween_callback] and [method tween_method] for more usage information.\n"
+"This sequence will make the [code]$Sprite[/code] node turn red, then shrink, "
+"before finally calling [method Node.queue_free] to free the sprite. "
+"[Tweener]s are executed one after another by default. This behavior can be "
+"changed using [method parallel] and [method set_parallel].\n"
"When a [Tweener] is created with one of the [code]tween_*[/code] methods, a "
"chained method call can be used to tweak the properties of this [Tweener]. "
-"For example, if you want to set different transition type in the above "
-"example, you can do:\n"
+"For example, if you want to set a different transition type in the above "
+"example, you can use [method set_trans]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1).set_trans(Tween."
@@ -53109,8 +54079,9 @@ msgid ""
"TRANS_BOUNCE)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Most of the [SceneTreeTween] methods can be chained this way too. In this "
-"example the [SceneTreeTween] is bound and have set a default transition:\n"
+"Most of the [SceneTreeTween] methods can be chained this way too. In the "
+"following example the [SceneTreeTween] is bound to the running script's node "
+"and a default transition is set for its [Tweener]s:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween().bind_node(self).set_trans(Tween."
"TRANS_ELASTIC)\n"
@@ -53118,16 +54089,16 @@ msgid ""
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Another interesting use for [SceneTreeTween]s is animating arbitrary set of "
+"Another interesting use for [SceneTreeTween]s is animating arbitrary sets of "
"objects:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"for sprite in get_children():\n"
-" tween.tween_property(sprite, \"position\", Vector2(), 1)\n"
+" tween.tween_property(sprite, \"position\", Vector2(0, 0), 1)\n"
"[/codeblock]\n"
"In the example above, all children of a node are moved one after another to "
"position (0, 0).\n"
-"Some [Tweener]s use transitions and eases. The first accepts an [enum Tween."
+"Some [Tweener]s use transitions and eases. The first accepts a [enum Tween."
"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 Tween.EaseType] constant, and "
@@ -53139,7 +54110,7 @@ msgid ""
"tween_cheatsheet.png]Tween easing and transition types cheatsheet[/url]\n"
"[b]Note:[/b] All [SceneTreeTween]s will automatically start by default. To "
"prevent a [SceneTreeTween] from autostarting, you can call [method stop] "
-"immediately after it was created."
+"immediately after it is created."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53169,21 +54140,24 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
-"Processes the [SceneTreeTween] by given [code]delta[/code] value, in "
-"seconds. Mostly useful when the [SceneTreeTween] is paused, for controlling "
-"it manually. Can also be used to end the [SceneTreeTween] animation "
-"immediately, by using [code]delta[/code] longer than the whole duration.\n"
+"Processes the [SceneTreeTween] by the given [code]delta[/code] value, in "
+"seconds. This is mostly useful for manual control when the [SceneTreeTween] "
+"is paused. It can also be used to end the [SceneTreeTween] animation "
+"immediately, by setting [code]delta[/code] longer than the whole duration of "
+"the [SceneTreeTween] animation.\n"
"Returns [code]true[/code] if the [SceneTreeTween] still has [Tweener]s that "
"haven't finished.\n"
-"[b]Note:[/b] The [SceneTreeTween] will become invalid after finished, but "
-"you can call [method stop] after the step, to keep it and reset."
+"[b]Note:[/b] The [SceneTreeTween] will become invalid in the next processing "
+"frame after its animation finishes. Calling [method stop] after performing "
+"[method custom_step] instead keeps and resets the [SceneTreeTween]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Returns the total time in seconds the [SceneTreeTween] has been animating (i."
-"e. time since it started, not counting pauses etc.). The time is affected by "
-"[method set_speed_scale] and [method stop] will reset it to [code]0[/code].\n"
+"e. the time since it started, not counting pauses etc.). The time is "
+"affected by [method set_speed_scale], and [method stop] will reset it to "
+"[code]0[/code].\n"
"[b]Note:[/b] As it results from accumulating frame deltas, the time returned "
"after the [SceneTreeTween] has finished animating will be slightly greater "
"than the actual [SceneTreeTween] duration."
@@ -53219,11 +54193,10 @@ msgstr ""
msgid ""
"Returns whether the [SceneTreeTween] is valid. A valid [SceneTreeTween] is a "
"[SceneTreeTween] contained by the scene tree (i.e. the array from [method "
-"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). "
-"[SceneTreeTween] might become invalid when it has finished tweening or was "
-"killed, also when created with [code]Tween.new()[/code]. Invalid "
-"[SceneTreeTween] can't have [Tweener]s appended, because it can't animate "
-"them. You can however still use [method interpolate_value]."
+"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). A "
+"[SceneTreeTween] might become invalid when it has finished tweening, is "
+"killed, or when created with [code]SceneTreeTween.new()[/code]. Invalid "
+"[SceneTreeTween]s can't have [Tweener]s appended."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53263,16 +54236,15 @@ msgstr ""
msgid ""
"Sets the number of times the tweening sequence will be repeated, i.e. "
"[code]set_loops(2)[/code] will run the animation twice.\n"
-"Calling this method without arguments will make the [SceneTreeTween] run "
-"infinitely, until it is either killed by [method kill] or by freeing bound "
-"node, or all the animated objects have been freed (which makes further "
+"Calling this method without arguments will make the [Tween] run infinitely, "
+"until either it is killed with [method kill], the [Tween]'s bound node is "
+"freed, or all the animated objects have been freed (which makes further "
"animation impossible).\n"
"[b]Warning:[/b] Make sure to always add some duration/delay when using "
-"infinite loops. 0-duration looped animations (e.g. single [CallbackTweener] "
-"with no delay or [PropertyTweener] with invalid node) are equivalent to "
-"infinite [code]while[/code] loops and will freeze your game. If a "
-"[SceneTreeTween]'s lifetime depends on some node, always use [method "
-"bind_node]."
+"infinite loops. To prevent the game freezing, 0-duration looped animations "
+"(e.g. a single [CallbackTweener] with no delay) are stopped after a small "
+"number of loops, which may produce unexpected results. If a [Tween]'s "
+"lifetime depends on some node, always use [method bind_node]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53334,10 +54306,10 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Creates and appends an [IntervalTweener]. This method can be used to create "
-"delays in the tween animation, as an alternative for using the delay in "
-"other [Tweener]s or when there's no animation (in which case the "
-"[SceneTreeTween] acts as a timer). [code]time[/code] is the length of the "
-"interval, in seconds.\n"
+"delays in the tween animation, as an alternative to using the delay in other "
+"[Tweener]s, or when there's no animation (in which case the [SceneTreeTween] "
+"acts as a timer). [code]time[/code] is the length of the interval, in "
+"seconds.\n"
"Example: creating an interval in code execution.\n"
"[codeblock]\n"
"# ... some code\n"
@@ -53391,8 +54363,8 @@ msgid ""
"Creates and appends a [PropertyTweener]. This method tweens a "
"[code]property[/code] of an [code]object[/code] between an initial value and "
"[code]final_val[/code] in a span of time equal to [code]duration[/code], in "
-"seconds. The initial value by default is a value at the time the tweening of "
-"the [PropertyTweener] start. For example:\n"
+"seconds. The initial value by default is the property's value at the time "
+"the tweening of the [PropertyTweener] starts. For example:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"tween.tween_property($Sprite, \"position\", Vector2(100, 200), 1)\n"
@@ -53423,16 +54395,15 @@ msgid ""
"Emitted when the [SceneTreeTween] has finished all tweening. Never emitted "
"when the [SceneTreeTween] is set to infinite looping (see [method "
"set_loops]).\n"
-"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) after this signal "
-"is emitted, but it doesn't happen immediately, but on the next processing "
-"frame. Calling [method stop] inside the signal callback will preserve the "
-"[SceneTreeTween]."
+"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) in the next "
+"processing frame after this signal is emitted. Calling [method stop] inside "
+"the signal callback will prevent the [SceneTreeTween] from being removed."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Emitted when a full loop is complete (see [method set_loops]), providing the "
-"loop index. This signal is not emitted after final loop, use [signal "
+"loop index. This signal is not emitted after the final loop, use [signal "
"finished] instead for this case."
msgstr ""
@@ -53440,7 +54411,7 @@ msgstr ""
msgid ""
"Emitted when one step of the [SceneTreeTween] is complete, providing the "
"step index. One step is either a single [Tweener] or a group of [Tweener]s "
-"running parallelly."
+"running in parallel."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -54772,7 +55743,12 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-msgid "Scale part of the local transformation."
+msgid ""
+"Scale part of the local transformation.\n"
+"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, the scale values will either be all "
+"positive or all negative."
msgstr ""
#: doc/classes/Spatial.xml
@@ -57403,11 +58379,11 @@ msgstr ""
msgid ""
"Returns [code]true[/code] if this string contains a valid integer.\n"
"[codeblock]\n"
-"print(\"7\".is_valid_int()) # Prints \"True\"\n"
-"print(\"14.6\".is_valid_int()) # Prints \"False\"\n"
-"print(\"L\".is_valid_int()) # Prints \"False\"\n"
-"print(\"+3\".is_valid_int()) # Prints \"True\"\n"
-"print(\"-12\".is_valid_int()) # Prints \"True\"\n"
+"print(\"7\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"14.6\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"L\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"+3\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"-12\".is_valid_integer()) # Prints \"True\"\n"
"[/codeblock]"
msgstr ""
@@ -60873,6 +61849,10 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml
+msgid "If [code]true[/code], this TileMap bakes a navigation region."
+msgstr ""
+
+#: doc/classes/TileMap.xml
msgid "If [code]true[/code], the cell's UVs will be clipped."
msgstr ""
@@ -60979,6 +61959,10 @@ msgid "The TileMap orientation mode. See [enum Mode] for possible values."
msgstr ""
#: doc/classes/TileMap.xml
+msgid "The navigation layers the TileMap generates its navigation regions in."
+msgstr ""
+
+#: doc/classes/TileMap.xml
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 "
@@ -62110,7 +63094,12 @@ msgstr ""
#: doc/classes/Transform2D.xml
msgid ""
"Returns a copy of the transform scaled by the given [code]scale[/code] "
-"factor, using matrix multiplication."
+"factor, using matrix multiplication.\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
#: doc/classes/Transform2D.xml
@@ -62265,7 +63254,18 @@ msgid ""
"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]."
+"to remove it from the [Tree].\n"
+"[b]Incremental search:[/b] Like [ItemList] and [PopupMenu], [Tree] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/Tree.xml
@@ -65781,11 +66781,12 @@ msgid "This enabler will stop [Particles2D] nodes."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _process function."
+msgid "This enabler will stop the parent's [method Node._process] function."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _physics_process function."
+msgid ""
+"This enabler will stop the parent's [method Node._physics_process] function."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
@@ -65825,6 +66826,16 @@ msgid "The VisibilityNotifier's bounding box."
msgstr ""
#: doc/classes/VisibilityNotifier.xml
+msgid ""
+"In addition to checking whether a node is on screen or within a [Camera]'s "
+"view, VisibilityNotifier can also optionally check whether a node is within "
+"a specified maximum distance when using a [Camera] with perspective "
+"projection. This is useful for throttling the performance requirements of "
+"nodes that are far away.\n"
+"[b]Note:[/b] This feature will be disabled if set to 0.0."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier.xml
msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view."
msgstr ""
@@ -70570,6 +71581,16 @@ msgid "The amount of shader rebinds in the frame."
msgstr ""
#: doc/classes/VisualServer.xml
+msgid ""
+"The peak amount of shaders that have been under compilation in the frame.\n"
+"This is useful to know when asynchronous shader compilation has finished for "
+"the current shaders on screen.\n"
+"[b]Note:[/b] For complete certainty, only assume there are no outstanding "
+"compilations when this value is zero for at least two frames in a row.\n"
+"Unimplemented in the GLES2 rendering backend, always returns 0."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
msgid "The amount of surface changes in the frame."
msgstr ""
@@ -73766,8 +74787,8 @@ msgstr ""
#: doc/classes/World.xml
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."
+"scenario, a navigation map and a sound space. Spatial nodes register their "
+"resources into the current world."
msgstr ""
#: doc/classes/World.xml
@@ -73782,8 +74803,13 @@ msgstr ""
#: doc/classes/World.xml
msgid ""
-"The World's fallback_environment will be used if the World's [Environment] "
-"fails or is missing."
+"The World's fallback environment will be used if [member environment] fails "
+"or is missing."
+msgstr ""
+
+#: doc/classes/World.xml
+msgid ""
+"The [RID] of this world's navigation map. Used by the [NavigationServer]."
msgstr ""
#: doc/classes/World.xml
@@ -73801,8 +74827,8 @@ msgstr ""
#: doc/classes/World2D.xml
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."
+"visual scenario, a navigation map and a sound space. 2D nodes register their "
+"resources into the current 2D world."
msgstr ""
#: doc/classes/World2D.xml
@@ -73820,6 +74846,11 @@ msgstr ""
#: doc/classes/World2D.xml
msgid ""
+"The [RID] of this world's navigation map. Used by the [Navigation2DServer]."
+msgstr ""
+
+#: doc/classes/World2D.xml
+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 ""
diff --git a/doc/translations/ne.po b/doc/translations/ne.po
index cb95b78393..f129446976 100644
--- a/doc/translations/ne.po
+++ b/doc/translations/ne.po
@@ -345,7 +345,7 @@ msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
msgid ""
"Compares two values by checking their actual contents, recursing into any "
-"`Array` or `Dictionary` up to its deepest level.\n"
+"[Array] or [Dictionary] up to its deepest level.\n"
"This compares to [code]==[/code] in a number of ways:\n"
"- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/"
"code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] "
@@ -392,7 +392,7 @@ msgid ""
"- 1.0: Linear\n"
"- Greater than 1.0 (exclusive): Ease in\n"
"[/codeblock]\n"
-"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.4/img/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/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]."
@@ -1099,7 +1099,7 @@ msgid ""
"[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/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/img/"
"smoothstep_ease_comparison.png]Comparison between smoothstep() and ease(x, "
"-1.6521) return values[/url]"
msgstr ""
@@ -3377,6 +3377,12 @@ msgstr ""
#: doc/classes/@GlobalScope.xml
msgid ""
+"Hints that an integer property is a bitmask using the optionally named 2D "
+"navigation layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml
+msgid ""
"Hints that an integer property is a bitmask using the optionally named 3D "
"render layers."
msgstr ""
@@ -3389,6 +3395,12 @@ msgstr ""
#: doc/classes/@GlobalScope.xml
msgid ""
+"Hints that an integer property is a bitmask using the optionally named 3D "
+"navigation layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml
+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]."
@@ -8364,7 +8376,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/AStar.xml
+#: doc/classes/AStar.xml doc/classes/AStar2D.xml
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[/"
@@ -8563,7 +8575,10 @@ msgid ""
msgstr ""
#: doc/classes/AStar2D.xml
-msgid "Returns whether there is a connection/segment between the given points."
+msgid ""
+"Returns whether there is a connection/segment between the given points. 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/AStar2D.xml
@@ -8580,10 +8595,6 @@ msgid ""
msgstr ""
#: doc/classes/AStar2D.xml
-msgid "Deletes the segment between the given points."
-msgstr ""
-
-#: doc/classes/AStar2D.xml
msgid ""
"Returns the closest position to [code]to_position[/code] that resides inside "
"a segment between two connected points.\n"
@@ -8768,7 +8779,9 @@ msgid ""
"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."
+"transmit audio over the network. When capturing audio data from a "
+"microphone, the format of the samples will be stereo 32-bit floating point "
+"PCM."
msgstr ""
#: doc/classes/AudioEffectCapture.xml
@@ -13611,7 +13624,7 @@ msgid ""
msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
-#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/Navigation2D.xml
msgid "Returns the object's [RID]."
msgstr ""
@@ -19086,11 +19099,14 @@ msgid ""
msgstr ""
#: doc/classes/CurveTexture.xml
-msgid "The [code]curve[/code] rendered onto the texture."
+msgid "The [Curve] that is rendered onto the texture."
msgstr ""
#: doc/classes/CurveTexture.xml
-msgid "The width of the texture."
+msgid ""
+"The width of the texture (in pixels). Higher values make it possible to "
+"represent high-frequency data better (such as sudden direction changes), at "
+"the cost of increased generation time and memory usage."
msgstr ""
#: doc/classes/CylinderMesh.xml
@@ -19376,6 +19392,13 @@ msgid "Returns the list of keys in the [Dictionary]."
msgstr ""
#: doc/classes/Dictionary.xml
+msgid ""
+"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, "
+"duplicate keys will not be copied over, unless [code]overwrite[/code] is "
+"[code]true[/code]."
+msgstr ""
+
+#: doc/classes/Dictionary.xml
msgid "Returns the number of keys in the dictionary."
msgstr ""
@@ -21314,9 +21337,23 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide a state data you want to be saved, like view "
+"position, grid settings, folding, etc. 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). This data is automatically saved for "
+"each scene in an [code]editstate[/code] file in the editor metadata folder. "
+"If you want to store global (scene-independent) editor data for your plugin, "
+"you can use [method get_window_layout] instead.\n"
+"Use [method set_state] to restore your saved state.\n"
+"[b]Note:[/b] This method should not be used to save important settings that "
+"should persist with the project.\n"
+"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be "
+"stored and restored correctly.\n"
+"[codeblock]\n"
+"func get_state():\n"
+" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n"
+" return state\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -21327,9 +21364,18 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide the GUI layout of the plugin or any other "
+"data you want to be stored. 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). The data is stored in the "
+"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n"
+"Use [method set_window_layout] to restore your saved layout.\n"
+"[codeblock]\n"
+"func get_window_layout(configuration):\n"
+" configuration.set_value(\"MyPlugin\", \"window_position\", $Window."
+"position)\n"
+" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -21442,11 +21488,30 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the state saved by [method get_state]."
+msgid ""
+"Restore the state saved by [method get_state]. This method is called when "
+"the current scene tab is changed in the editor.\n"
+"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise "
+"it will not be recognized and this method will not be called.\n"
+"[codeblock]\n"
+"func set_state(data):\n"
+" zoom = data.get(\"zoom\", 1.0)\n"
+" preferred_color = data.get(\"my_color\", Color.white)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the plugin GUI layout saved by [method get_window_layout]."
+msgid ""
+"Restore the plugin GUI layout and data saved by [method get_window_layout]. "
+"This method is called for every plugin on editor startup. Use the provided "
+"[code]configuration[/code] file to read your saved data.\n"
+"[codeblock]\n"
+"func set_window_layout(configuration):\n"
+" $Window.position = configuration.get_value(\"MyPlugin\", "
+"\"window_position\", Vector2())\n"
+" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", "
+"Color.white)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -26081,7 +26146,8 @@ msgid ""
"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])."
+"at fixed steps (see [member width]). See also [GradientTexture2D] and "
+"[CurveTexture]."
msgstr ""
#: doc/classes/GradientTexture.xml
@@ -26103,7 +26169,8 @@ msgid ""
"repeat] types using colors obtained from the gradient. 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] and [member height])."
+"[member width] and [member height]). See also [GradientTexture] and "
+"[CurveTexture]."
msgstr ""
#: doc/classes/GradientTexture2D.xml
@@ -26909,6 +26976,12 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+msgid ""
+"If [code]true[/code], this GridMap uses cell navmesh resources to create "
+"navigation regions."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid "If [code]true[/code], grid items are centered on the X axis."
msgstr ""
@@ -26959,6 +27032,10 @@ msgid "The assigned [MeshLibrary]."
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+msgid "The navigation layers the GridMap generates its navigation regions in."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
"Overrides the default friction and bounce physics properties for the whole "
"[GridMap]."
@@ -28182,7 +28259,7 @@ msgid ""
" # 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 body = to_json({\"name\": \"Godette\"})\n"
" error = http_request.request(\"https://httpbin.org/post\", [], true, "
"HTTPClient.METHOD_POST, body)\n"
" if error != OK:\n"
@@ -29349,7 +29426,7 @@ msgstr ""
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 "
+"([member 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 "
@@ -29498,10 +29575,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Returns the mouse mode. See the constants for more information."
-msgstr ""
-
-#: doc/classes/Input.xml
msgid ""
"Gets an input vector by specifying four actions for the positive and "
"negative X and Y axes.\n"
@@ -29695,24 +29768,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Sets the mouse mode. See the constants for more information."
-msgstr ""
-
-#: doc/classes/Input.xml
-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
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 "
@@ -29748,6 +29803,24 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
+msgid "Controls the mouse mode. See [enum MouseMode] for more information."
+msgstr ""
+
+#: doc/classes/Input.xml
+msgid ""
+"If [code]true[/code], similar input events sent by the operating system are "
+"accumulated. 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 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
msgid "Emitted when a joypad device has been connected or disconnected."
msgstr ""
@@ -30055,8 +30128,8 @@ msgstr ""
#: doc/classes/InputEventJoypadButton.xml
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]."
+"Represents the pressure the user puts on the button with their finger, if "
+"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]."
msgstr ""
#: doc/classes/InputEventJoypadMotion.xml
@@ -30319,9 +30392,9 @@ 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 "
+"at most. If you need more precise input reporting, set [member Input."
+"use_accumulated_input] to [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."
@@ -30808,7 +30881,18 @@ msgid ""
"[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."
+"fixed_column_width] greater than zero to wrap the text.\n"
+"[b]Incremental search:[/b] Like [PopupMenu] and [Tree], [ItemList] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/ItemList.xml
@@ -34555,11 +34639,16 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Returns the override [Material] for a surface of the [Mesh] resource.\n"
+"[b]Note:[/b] This function only returns [i]override[/i] materials associated "
+"with this [MeshInstance]. Consider using [method get_active_material] or "
+"[method Mesh.surface_get_material] to get materials associated with the "
+"[Mesh] resource."
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the number of surface materials."
+msgid "Returns the number of surface override materials."
msgstr ""
#: doc/classes/MeshInstance.xml
@@ -34596,7 +34685,10 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Sets the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Sets the override [Material] for the specified surface of the [Mesh] "
+"resource. This material is associated with this [MeshInstance] rather than "
+"with the [Mesh] resource."
msgstr ""
#: doc/classes/MeshInstance.xml
@@ -34627,9 +34719,10 @@ msgstr ""
#: doc/classes/MeshInstance2D.xml
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\"."
+"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be "
+"automatically created from an existing [Sprite] via a tool in the editor "
+"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to "
+"MeshInstance2D[/b] at the top of the 2D editor viewport."
msgstr ""
#: doc/classes/MeshInstance2D.xml
@@ -35387,6 +35480,9 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"Provides navigation and pathfinding within a collection of "
"[NavigationMesh]es. By default, these will be automatically collected from "
"child [NavigationMeshInstance] nodes. In addition to basic pathfinding, this "
@@ -35427,7 +35523,14 @@ msgid ""
msgstr ""
#: doc/classes/Navigation.xml
+msgid "Returns the [RID] of the navigation map on the [NavigationServer]."
+msgstr ""
+
+#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"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, "
@@ -35449,16 +35552,31 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation.get_simple_path] path query."
+msgstr ""
+
+#: doc/classes/Navigation.xml
+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/Navigation.xml doc/classes/Navigation2DServer.xml
+#: doc/classes/NavigationServer.xml
+msgid ""
+"Emitted when a navigation map is updated, when a region moves or is modified."
+msgstr ""
+
#: doc/classes/Navigation2D.xml
msgid "2D navigation and pathfinding node."
msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -35478,6 +35596,9 @@ msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -35487,6 +35608,12 @@ msgstr ""
msgid "The XY plane cell size to use for fields."
msgstr ""
+#: doc/classes/Navigation2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation2D.get_simple_path] path query."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml
msgid "Server interface for low-level 2D navigation access."
msgstr ""
@@ -35503,8 +35630,12 @@ msgid ""
"through scripts.\n"
"For two regions to be connected to each other, they must share a similar "
"edge. An edge is considered connected to another if both of its two vertices "
-"are at a distance less than [member Navigation.edge_connection_margin] to "
-"the respective other edge's vertex.\n"
+"are at a distance less than navigation map [code]edge_connection_margin[/"
+"code] to the respective other edge's vertex.\n"
+"You may assign navigation layers to regions with [method Navigation2DServer."
+"region_set_navigation_layers], which then can be checked upon when "
+"requesting a path with [method Navigation2DServer.map_get_path]. This allows "
+"allowing or forbidding some areas to 2D objects.\n"
"To use the collision avoidance system, you may use agents. You can set an "
"agent's target velocity, then the servers will emit a callback with a "
"modified velocity.\n"
@@ -35532,7 +35663,17 @@ msgid "Returns [code]true[/code] if the map got changed the previous frame."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Callback called at the end of the RVO process."
+msgid ""
+"Callback called at the end of the RVO process. If a callback is created "
+"manually and the agent is placed on a navigation map it will calculate "
+"avoidance for the agent and dispatch the calculated [code]safe_velocity[/"
+"code] to the [code]receiver[/code] object with a signal to the chosen "
+"[code]method[/code] name.\n"
+"[b]Note:[/b] Created callbacks are always processed independently of the "
+"SceneTree state as long as the agent is on a navigation map and not freed. "
+"To disable the dispatch of a callback from an agent use [method "
+"agent_set_callback] again with a [code]null[/code] object as the "
+"[code]receiver[/code]."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -35587,15 +35728,55 @@ msgid "Destroys the given RID."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns all created navigation map [RID]s on the NavigationServer. This "
+"returns both 2D and 3D created navigation maps as there is technically no "
+"distinction between them."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Create a new map."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"This function immediately forces synchronization of the specified navigation "
+"[code]map[/code] [RID]. By default navigation maps are only synchronized at "
+"the end of each physics frame. This function can be used to immediately "
+"(re)calculate all the navigation meshes and region connections of the "
+"navigation map. This makes it possible to query a navigation path for a "
+"changed map immediately and in the same frame (multiple times if needed).\n"
+"Due to technical restrictions the current NavigationServer command queue "
+"will be flushed. This means all already queued update commands for this "
+"physics frame will be executed, even those intended for other maps, regions "
+"and agents not part of the specified map. The expensive computation of the "
+"navigation meshes and region connections of a map will only be done for the "
+"specified map. Other maps will receive the normal synchronization at the end "
+"of the physics frame. Should the specified map receive changes after the "
+"forced update it will update again as well when the other maps receive their "
+"update.\n"
+"Avoidance processing and dispatch of the [code]safe_velocity[/code] signals "
+"is untouched by this function and continues to happen for all maps and "
+"agents at the end of the physics frame.\n"
+"[b]Note:[/b] With great power comes great responsibility. This function "
+"should only be used by users that really know what they are doing and have a "
+"good reason for it. Forcing an immediate update of a navigation map requires "
+"locking the NavigationServer and flushing the entire NavigationServer "
+"command queue. Not only can this severely impact the performance of a game "
+"but it can also introduce bugs if used inappropriately without much "
+"foresight."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns all navigation agents [RID]s that are currently assigned to the "
"requested navigation [code]map[/code]."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Returns the map cell size."
msgstr ""
@@ -35619,7 +35800,10 @@ msgid ""
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Returns the navigation path to reach the destination from the origin."
+msgid ""
+"Returns the navigation path to reach the destination from the origin. "
+"[code]navigation_layers[/code] is a bitmask of all region layers that are "
+"allowed to be in the path."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -35636,6 +35820,12 @@ msgstr ""
msgid "Sets the map active."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/"
+"b] Currently not implemented."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Set the map cell size used to weld the navigation mesh polygons."
msgstr ""
@@ -35651,14 +35841,73 @@ msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"Returns the ending point of a connection door. [code]connection[/code] is an "
+"index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns the starting point of a connection door. [code]connection[/code] is "
+"an index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns how many connections this [code]region[/code] has with other regions "
+"in the map."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns the navigation map [RID] the requested [code]region[/code] is "
"currently assigned to."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Returns the region's navigation layers."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns [code]true[/code] if the provided [code]point[/code] in world space "
+"is currently owned by the provided navigation [code]region[/code]. Owned in "
+"this context means that one of the region's navigation mesh polygon faces "
+"has a possible position at the closest distance to this point compared to "
+"all other navigation meshes from other navigation regions that are also "
+"registered on the navigation map of the provided region.\n"
+"If multiple navigation meshes have positions at equal distance the "
+"navigation region whose polygons are processed first wins the ownership. "
+"Polygons are processed in the same order that navigation regions were "
+"registered on the NavigationServer.\n"
+"[b]Note:[/b] If navigation meshes from different navigation regions overlap "
+"(which should be avoided in general) the result might not be what is "
+"expected."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Sets the map for the region."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method Navigation2DServer.map_get_path])."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Sets the navigation mesh for the region."
msgstr ""
@@ -35667,6 +35916,10 @@ msgstr ""
msgid "Sets the global transformation for the region."
msgstr ""
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]."
+msgstr ""
+
#: doc/classes/NavigationAgent.xml
msgid "3D agent used in navigation for collision avoidance."
msgstr ""
@@ -35676,9 +35929,16 @@ msgid ""
"3D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationAgent] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World] navigation map. If this node is a child of a [Navigation] "
+"node it will register to the navigation map of the navigation node or the "
+"function [method set_navigation] can be used to set the navigation node "
+"directly. [NavigationAgent] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -35696,7 +35956,15 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-msgid "Returns the path from start to finish in global coordinates."
+msgid ""
+"Returns this agent's current path from start to finish in global "
+"coordinates. The path only updates when the target location is changed or "
+"the agent requires a repath. The path array is not intended to be used in "
+"direct path movement as the agent has its own internal path logic that would "
+"get corrupted by changing the path array manually. Use the intended [method "
+"get_next_location] once every physics frame to receive the next path point "
+"for the agents movement as this function also updates the internal path "
+"logic."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -35711,11 +35979,24 @@ msgid ""
"system."
msgstr ""
-#: doc/classes/NavigationAgent.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"Returns a [Vector3] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the origin of the agent's parent."
+"Returns the [RID] of the navigation map for this NavigationAgent node. This "
+"function returns always the map set on the NavigationAgent node and not the "
+"map of the abstract agent on the NavigationServer. If the agent map is "
+"changed directly with the NavigationServer API the NavigationAgent node will "
+"not be aware of the map change. Use [method set_navigation_map] to change "
+"the navigation map for the NavigationAgent and also update the agent on the "
+"NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
+"Returns the next location in global coordinates that can be moved to, making "
+"sure that there are no static objects in the way. If the agent does not have "
+"a navigation path, it will return the position of the agent's parent. The "
+"use of this function once every physics frame is required to update the "
+"internal path logic of the NavigationAgent."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -35756,6 +36037,12 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"Sets the [RID] of the navigation map this NavigationAgent node should use "
+"and also updates the [code]agent[/code] on the NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"Sets the user desired final location. This will clear the current navigation "
"path."
msgstr ""
@@ -35768,7 +36055,13 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml
-msgid "The agent height offset to match the navigation mesh height."
+msgid ""
+"The NavigationAgent height offset is subtracted from the y-axis value of any "
+"vector path position for this NavigationAgent. The NavigationAgent height "
+"offset does not change or influence the navigation mesh or pathfinding query "
+"result. Additional navigation maps that use regions with navigation meshes "
+"that the developer baked with appropriate agent radius or height values are "
+"required to support different-sized agents."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -35795,26 +36088,53 @@ msgstr ""
msgid "The maximum speed that an agent can move."
msgstr ""
+#: doc/classes/NavigationAgent.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "The distance to search for other agents."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"The distance threshold before a path point is considered to be reached. This "
+"will allow an agent to not have to hit a path point on the path exactly, but "
+"in the area. If this value is set to high the NavigationAgent will skip "
+"points on the path which can lead to leaving the navigation mesh. If this "
+"value is set to low the NavigationAgent will be stuck in a repath loop cause "
+"it will constantly overshoot or undershoot the distance to the next point on "
+"each physics frame update."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"The maximum distance the agent is allowed away from the ideal path to the "
"final location. This can happen due to trying to avoid collisions. When the "
"maximum distance is exceeded, it recalculates the ideal path."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-msgid "The radius of the agent."
+msgid ""
+"The radius of the avoidance agent. This is the \"body\" of the avoidance "
+"agent and not the avoidance maneuver starting radius (which is controlled by "
+"[member neighbor_dist]).\n"
+"Does not affect normal pathfinding. To change an actor's pathfinding radius "
+"bake [NavigationMesh] resources with a different [member NavigationMesh."
+"agent_radius] property and use different navigation maps for each actor size."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"The distance threshold before a target is considered to be reached. This "
-"will allow an agent to not have to hit a point on the path exactly, but in "
-"the area."
+"The distance threshold before the final target point is considered to be "
+"reached. This will allow an agent to not have to hit the point of the final "
+"target exactly, but only the area. If this value is set to low the "
+"NavigationAgent will be stuck in a repath loop cause it will constantly "
+"overshoot or undershoot the distance to the final target point on each "
+"physics frame update."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -35857,9 +36177,16 @@ msgid ""
"2D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationAgent2D] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World2D] navigation map. If this node is a child of a "
+"[Navigation2D] node it will register to the navigation map of the navigation "
+"node or the function [method set_navigation] can be used to set the "
+"navigation node directly. [NavigationAgent2D] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent2D.xml
@@ -35875,13 +36202,6 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent2D.xml
-msgid ""
-"Returns a [Vector2] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the position of the agent's parent."
-msgstr ""
-
-#: doc/classes/NavigationAgent2D.xml
msgid "Returns the [RID] of this agent on the [Navigation2DServer]."
msgstr ""
@@ -35901,6 +36221,13 @@ msgid ""
"only be enabled on agents that currently require it."
msgstr ""
+#: doc/classes/NavigationAgent2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent2D] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationMesh.xml
msgid "A mesh to approximate the walkable areas and obstacles."
msgstr ""
@@ -35931,8 +36258,8 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
-"Returns whether the specified [code]bit[/code] of the [member geometry/"
-"collision_mask] is set."
+"Returns whether the specified [code]bit[/code] of the [member "
+"geometry_collision_mask] is set."
msgstr ""
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
@@ -35954,9 +36281,9 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/"
-"code] in the [member geometry/collision_mask].\n"
+"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]."
+"code] in the [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
@@ -35970,14 +36297,14 @@ 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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -35989,7 +36316,7 @@ 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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36017,13 +36344,17 @@ msgstr ""
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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
-"If [code]true[/code], marks walkable spans as not walkable if the clearance "
-"above the span is less than [member agent/height]."
+"If the baking [AABB] has a volume the navigation mesh baking will be "
+"restricted to its enclosing area."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+msgid "The position offset applied to the [member filter_baking_aabb] [AABB]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36033,13 +36364,19 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]true[/code], marks non-walkable spans as walkable if their maximum "
-"is within [member agent/max_climb] of a walkable neighbor."
+"is within [member agent_max_climb] of a walkable neighbor."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+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
msgid ""
"The physics layers to scan for static colliders.\n"
-"Only used when [member geometry/parsed_geometry_type] is [constant "
+"Only used when [member geometry_parsed_geometry_type] is [constant "
"PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]."
msgstr ""
@@ -36058,7 +36395,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"The name of the group to scan for geometry.\n"
-"Only used when [member geometry/source_geometry_mode] is [constant "
+"Only used when [member geometry_source_geometry_mode] is [constant "
"SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant "
"SOURCE_GEOMETRY_GROUPS_EXPLICIT]."
msgstr ""
@@ -36121,7 +36458,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Parses [StaticBody] colliders as geometry. The collider should be in any of "
-"the layers specified by [member geometry/collision_mask]."
+"the layers specified by [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36142,13 +36479,13 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Scans nodes in a group and their child nodes recursively for geometry. The "
-"group is specified by [member geometry/source_group_name]."
+"group is specified by [member geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Uses nodes in a group for geometry. The group is specified by [member "
-"geometry/source_group_name]."
+"geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36190,7 +36527,15 @@ msgid ""
"geometry for walkable terrain suitable to [NavigationMesh] agent properties "
"by creating a voxel world around the meshes bounding area.\n"
"The finalized navigation mesh is then returned and stored inside the "
-"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes."
+"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] "
+"nodes.\n"
+"[b]Note:[/b] Using meshes to not only define walkable surfaces but also "
+"obstruct navigation baking does not always work. The navigation baking has "
+"no concept of what is a geometry \"inside\" when dealing with mesh source "
+"geometry and this is intentional. Depending on current baking parameters, as "
+"soon as the obstructing mesh is large enough to fit a navigation mesh area "
+"inside, the baking will generate navigation mesh areas that are inside the "
+"obstructing source geometry mesh."
msgstr ""
#: doc/classes/NavigationMeshGenerator.xml
@@ -36198,8 +36543,8 @@ msgid ""
"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child "
"nodes under the provided [code]root_node[/code] or a specific group of nodes "
"for potential source geometry. The parse behavior can be controlled with the "
-"[member NavigationMesh.geometry/parsed_geometry_type] and [member "
-"NavigationMesh.geometry/source_geometry_mode] properties on the "
+"[member NavigationMesh.geometry_parsed_geometry_type] and [member "
+"NavigationMesh.geometry_source_geometry_mode] properties on the "
"[NavigationMesh] resource."
msgstr ""
@@ -36216,8 +36561,21 @@ msgstr ""
#: doc/classes/NavigationMeshInstance.xml
msgid ""
"An instance of a [NavigationMesh]. It tells the [Navigation] node what can "
-"be navigated and what cannot, based on the [NavigationMesh] resource. This "
-"should be a child of a [Navigation] node."
+"be navigated and what cannot, based on the [NavigationMesh] resource.\n"
+"By default this node will register to the default [World] navigation map. If "
+"this node is a child of a [Navigation] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method NavigationServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The cost of entering this region from another region can be controlled with "
+"the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The cost of traveling distances inside this region can be controlled with "
+"the [member travel_cost] multiplier."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
@@ -36246,10 +36604,34 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding enters this region's navmesh from another regions navmesh "
+"the [code]enter_cost[/code] value is added to the path distance for "
+"determining the shortest path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationMesh] "
+"belongs to. On path requests with [method NavigationServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
msgid "The [NavigationMesh] resource to use."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding moves inside this region's navmesh the traveled distances "
+"are multiplied with [code]travel_cost[/code] for determining the shortest "
+"path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
msgid "Notifies when the navigation mesh bake operation is completed."
msgstr ""
@@ -36266,7 +36648,9 @@ msgid ""
"3D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationObstacle] is physics safe."
+"[NavigationObstacle] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle.xml
@@ -36306,7 +36690,9 @@ msgid ""
"2D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationObstacle2D] is physics safe."
+"[NavigationObstacle2D] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle2D.xml
@@ -36386,6 +36772,14 @@ msgstr ""
#: doc/classes/NavigationPolygon.xml
msgid ""
+"Returns the [NavigationMesh] resulting from this navigation polygon. This "
+"navmesh can be used to update the navmesh of a region with the [method "
+"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server "
+"behind the scene)."
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml
+msgid ""
"Returns a [PoolVector2Array] containing the vertices of an outline that was "
"created in the editor or by script."
msgstr ""
@@ -36422,6 +36816,30 @@ msgid ""
msgstr ""
#: doc/classes/NavigationPolygonInstance.xml
+msgid "A region of the 2D navigation map."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A region of the navigation map. It tells the [Navigation2DServer] what can "
+"be navigated and what cannot, based on its [NavigationPolygon] resource.\n"
+"By default this node will register to the default [World2D] navigation map. "
+"If this node is a child of a [Navigation2D] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The pathfinding cost of entering this region from another region can be "
+"controlled with the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The pathfinding cost of traveling distances inside this region can be "
+"controlled with the [member travel_cost] multiplier."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
msgid ""
"Returns the [RID] of this region on the [Navigation2DServer]. Combined with "
"[method Navigation2DServer.map_get_closest_point_owner] can be used to "
@@ -36429,6 +36847,22 @@ msgid ""
"navigation map."
msgstr ""
+#: doc/classes/NavigationPolygonInstance.xml
+msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationPolygon] "
+"belongs to. On path requests with [method Navigation2DServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid "The [NavigationPolygon] resource to use."
+msgstr ""
+
#: doc/classes/NavigationServer.xml
msgid "Server interface for low-level 3D navigation access."
msgstr ""
@@ -36504,6 +36938,12 @@ msgid "Bakes the navigation mesh."
msgstr ""
#: doc/classes/NavigationServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method NavigationServer.map_get_path])."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
msgid "Control activation of this server."
msgstr ""
@@ -37970,13 +38410,19 @@ msgstr ""
#: doc/classes/Node.xml
msgid ""
"Emitted when a child node enters the scene tree, either because it entered "
-"on its own or because this node entered with it."
+"on its own or because this node entered with it.\n"
+"This signal is emitted [i]after[/i] the child node's own [constant "
+"NOTIFICATION_ENTER_TREE] and [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
msgid ""
-"Emitted when a child node exits the scene tree, either because it exited on "
-"its own or because this node exited."
+"Emitted when a child node is about to exit the scene tree, either because it "
+"is being removed or freed directly, or because this node is exiting the "
+"tree.\n"
+"When this signal is received, the child [code]node[/code] is still in the "
+"tree and valid. This signal is emitted [i]after[/i] the child node's own "
+"[signal tree_exiting] and [constant NOTIFICATION_EXIT_TREE]."
msgstr ""
#: doc/classes/Node.xml
@@ -37988,7 +38434,10 @@ msgid "Emitted when the node is renamed."
msgstr ""
#: doc/classes/Node.xml
-msgid "Emitted when the node enters the tree."
+msgid ""
+"Emitted when the node enters the tree.\n"
+"This signal is emitted [i]after[/i] the related [constant "
+"NOTIFICATION_ENTER_TREE] notification."
msgstr ""
#: doc/classes/Node.xml
@@ -37998,15 +38447,21 @@ msgstr ""
#: doc/classes/Node.xml
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)."
+"the right place for de-initialization (or a \"destructor\", if you will).\n"
+"This signal is emitted [i]before[/i] the related [constant "
+"NOTIFICATION_EXIT_TREE] notification."
msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node enters a [SceneTree]."
+msgid ""
+"Notification received when the node enters a [SceneTree].\n"
+"This notification is emitted [i]before[/i] the related [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node is about to exit a [SceneTree]."
+msgid ""
+"Notification received when the node is about to exit a [SceneTree].\n"
+"This notification is emitted [i]after[/i] the related [signal tree_exiting]."
msgstr ""
#: doc/classes/Node.xml
@@ -38267,7 +38722,13 @@ msgid "Rotation in degrees, relative to the node's parent."
msgstr ""
#: doc/classes/Node2D.xml
-msgid "The node's scale. Unscaled value: [code](1, 1)[/code]."
+msgid ""
+"The node's scale. Unscaled value: [code](1, 1)[/code].\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
#: doc/classes/Node2D.xml
@@ -39707,6 +40168,10 @@ msgid ""
" if argument.find(\"=\") > -1:\n"
" var key_value = argument.split(\"=\")\n"
" arguments[key_value[0].lstrip(\"--\")] = key_value[1]\n"
+" else:\n"
+" # Options without an argument will be present in the dictionary,\n"
+" # with the value set to an empty string.\n"
+" arguments[argument.lstrip(\"--\")] = \"\"\n"
"[/codeblock]"
msgstr ""
@@ -40360,8 +40825,15 @@ msgstr ""
msgid ""
"Moves the file or directory to the system's recycle bin. See also [method "
"Directory.remove].\n"
+"The method takes only global paths, so you may need to use [method "
+"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/"
+"code] as it will not work in exported project.\n"
"[b]Note:[/b] If the user has disabled the recycle bin on their system, the "
-"file will be permanently deleted instead."
+"file will be permanently deleted instead.\n"
+"[codeblock]\n"
+"var file_to_remove = \"user://slot1.sav\"\n"
+"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/OS.xml
@@ -45200,7 +45672,18 @@ msgstr ""
#: doc/classes/PopupMenu.xml
msgid ""
"[PopupMenu] is a [Control] that displays a list of options. They are popular "
-"in toolbars or context menus."
+"in toolbars or context menus.\n"
+"[b]Incremental search:[/b] Like [ItemList] and [Tree], [PopupMenu] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/PopupMenu.xml
@@ -46707,7 +47190,16 @@ msgid ""
msgstr ""
#: doc/classes/ProjectSettings.xml
-msgid "Message to be displayed before the backtrace when the engine crashes."
+msgid ""
+"Message to be displayed before the backtrace when the engine crashes. By "
+"default, this message is only used in exported projects due to the editor-"
+"only override applied to this setting."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Editor-only override for [member debug/settings/crash_handler/message]. Does "
+"not affect exported projects in debug or release mode."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -46952,6 +47444,18 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default naming style for scene files to infer from their root nodes. "
+"Possible options are:\n"
+"- [code]0[/code] (Auto): Uses the scene root name as is without changing its "
+"casing.\n"
+"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase "
+"casing.\n"
+"- [code]2[/code] (snake_case): Converts the scene root name to snake_case "
+"casing."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -47177,6 +47681,198 @@ msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 1."
msgstr ""
@@ -47385,6 +48081,198 @@ msgid "Optional name for the 2D render layer 9."
msgstr ""
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 1."
msgstr ""
@@ -47652,6 +48540,49 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default cell height for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_height].\n"
+"[b]Note:[/b] Currently not implemented."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 2D navigation maps. See [method "
+"Navigation2DServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell height for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_height]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 3D navigation maps. See [method "
+"NavigationServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default map up vector for 3D navigation maps. See [method NavigationServer."
+"map_set_up]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -48325,20 +49256,28 @@ msgid ""
"cause.\n"
"The default value is a conservative one, so you are advised to tweak it "
"according to the hardware you are targeting.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"The default is a very conservative override for [code]rendering/gles3/"
-"shaders/max_concurrent_compiles[/code].\n"
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
"Depending on the specific devices you are targeting, you may want to raise "
"it.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
+"Depending on the specific browsers you are targeting, you may want to raise "
+"it.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -48346,19 +49285,28 @@ msgid ""
"The maximum size, in megabytes, that the ubershader cache can grow up to. On "
"startup, the least recently used entries will be deleted until the total "
"size is within bounds.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/ubershader_cache_size_mb[/"
-"code], so a smaller maximum size can be configured for mobile platforms, "
-"where storage space is more limited.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for mobile platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for web platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] Currently, shader caching is generally unavailable on web "
+"platforms.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -48390,14 +49338,22 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/shader_compilation_mode[/"
-"code], so asynchronous compilation can be disabled for mobile.\n"
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on mobile platforms.\n"
"You may want to do that since mobile GPUs generally won't support "
"ubershaders due to their complexity."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on web platforms.\n"
+"You may want to do that since certain browsers (especially on mobile "
+"platforms) generally won't support ubershaders due to their complexity."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
@@ -49154,7 +50110,6 @@ msgid ""
"- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/"
"code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, "
"small grid radius values may lead to unwanted groupings.\n"
-"[/codeblock]\n"
"[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more "
"effective and faster [VisibilityNotifier] functionality. For most use cases, "
"[method Vector3.distance_to] or [method Vector3.distance_squared_to] are "
@@ -51301,6 +52256,22 @@ msgid "Makes text fill width."
msgstr ""
#: doc/classes/RichTextLabel.xml
+msgid "Aligns top of the inline image to the top of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns center of the inline image to the center of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns bottom of the inline image to the baseline of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns bottom of the inline image to the bottom of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
msgid "Each list item has a number marker."
msgstr ""
@@ -53038,8 +54009,8 @@ msgid ""
" yield(get_tree().create_timer(1.0), \"timeout\")\n"
" print(\"Timer ended.\")\n"
"[/codeblock]\n"
-"The timer will be automatically freed after its time elapses, so be aware "
-"that any reference you might have kept to it will become invalid."
+"The timer will be dereferenced after its time elapses. To preserve the "
+"timer, you can keep a reference to it. See [Reference]."
msgstr ""
#: doc/classes/SceneTreeTimer.xml
@@ -53071,24 +54042,23 @@ msgid ""
"manually (i.e. by using [code]Tween.new()[/code]) are invalid. They can't be "
"used for tweening values, but you can do manual interpolation with [method "
"interpolate_value].\n"
-"A [SceneTreeTween] animation is composed of a sequence of [Tweener]s, which "
-"by default are executed one after another. You can create a sequence by "
-"appending [Tweener]s to the [SceneTreeTween]. Animating something with a "
-"[Tweener] is called tweening. Example tweening sequence looks like this:\n"
+"A tween animation is created by adding [Tweener]s to the [SceneTreeTween] "
+"object, using [method tween_property], [method tween_interval], [method "
+"tween_callback] or [method tween_method]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1)\n"
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"This sequence will make the [code]$Sprite[/code] node turn red, then shrink "
-"and finally the [method Node.queue_free] is called to remove the sprite. See "
-"methods [method tween_property], [method tween_interval], [method "
-"tween_callback] and [method tween_method] for more usage information.\n"
+"This sequence will make the [code]$Sprite[/code] node turn red, then shrink, "
+"before finally calling [method Node.queue_free] to free the sprite. "
+"[Tweener]s are executed one after another by default. This behavior can be "
+"changed using [method parallel] and [method set_parallel].\n"
"When a [Tweener] is created with one of the [code]tween_*[/code] methods, a "
"chained method call can be used to tweak the properties of this [Tweener]. "
-"For example, if you want to set different transition type in the above "
-"example, you can do:\n"
+"For example, if you want to set a different transition type in the above "
+"example, you can use [method set_trans]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1).set_trans(Tween."
@@ -53097,8 +54067,9 @@ msgid ""
"TRANS_BOUNCE)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Most of the [SceneTreeTween] methods can be chained this way too. In this "
-"example the [SceneTreeTween] is bound and have set a default transition:\n"
+"Most of the [SceneTreeTween] methods can be chained this way too. In the "
+"following example the [SceneTreeTween] is bound to the running script's node "
+"and a default transition is set for its [Tweener]s:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween().bind_node(self).set_trans(Tween."
"TRANS_ELASTIC)\n"
@@ -53106,16 +54077,16 @@ msgid ""
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Another interesting use for [SceneTreeTween]s is animating arbitrary set of "
+"Another interesting use for [SceneTreeTween]s is animating arbitrary sets of "
"objects:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"for sprite in get_children():\n"
-" tween.tween_property(sprite, \"position\", Vector2(), 1)\n"
+" tween.tween_property(sprite, \"position\", Vector2(0, 0), 1)\n"
"[/codeblock]\n"
"In the example above, all children of a node are moved one after another to "
"position (0, 0).\n"
-"Some [Tweener]s use transitions and eases. The first accepts an [enum Tween."
+"Some [Tweener]s use transitions and eases. The first accepts a [enum Tween."
"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 Tween.EaseType] constant, and "
@@ -53127,7 +54098,7 @@ msgid ""
"tween_cheatsheet.png]Tween easing and transition types cheatsheet[/url]\n"
"[b]Note:[/b] All [SceneTreeTween]s will automatically start by default. To "
"prevent a [SceneTreeTween] from autostarting, you can call [method stop] "
-"immediately after it was created."
+"immediately after it is created."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53157,21 +54128,24 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
-"Processes the [SceneTreeTween] by given [code]delta[/code] value, in "
-"seconds. Mostly useful when the [SceneTreeTween] is paused, for controlling "
-"it manually. Can also be used to end the [SceneTreeTween] animation "
-"immediately, by using [code]delta[/code] longer than the whole duration.\n"
+"Processes the [SceneTreeTween] by the given [code]delta[/code] value, in "
+"seconds. This is mostly useful for manual control when the [SceneTreeTween] "
+"is paused. It can also be used to end the [SceneTreeTween] animation "
+"immediately, by setting [code]delta[/code] longer than the whole duration of "
+"the [SceneTreeTween] animation.\n"
"Returns [code]true[/code] if the [SceneTreeTween] still has [Tweener]s that "
"haven't finished.\n"
-"[b]Note:[/b] The [SceneTreeTween] will become invalid after finished, but "
-"you can call [method stop] after the step, to keep it and reset."
+"[b]Note:[/b] The [SceneTreeTween] will become invalid in the next processing "
+"frame after its animation finishes. Calling [method stop] after performing "
+"[method custom_step] instead keeps and resets the [SceneTreeTween]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Returns the total time in seconds the [SceneTreeTween] has been animating (i."
-"e. time since it started, not counting pauses etc.). The time is affected by "
-"[method set_speed_scale] and [method stop] will reset it to [code]0[/code].\n"
+"e. the time since it started, not counting pauses etc.). The time is "
+"affected by [method set_speed_scale], and [method stop] will reset it to "
+"[code]0[/code].\n"
"[b]Note:[/b] As it results from accumulating frame deltas, the time returned "
"after the [SceneTreeTween] has finished animating will be slightly greater "
"than the actual [SceneTreeTween] duration."
@@ -53207,11 +54181,10 @@ msgstr ""
msgid ""
"Returns whether the [SceneTreeTween] is valid. A valid [SceneTreeTween] is a "
"[SceneTreeTween] contained by the scene tree (i.e. the array from [method "
-"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). "
-"[SceneTreeTween] might become invalid when it has finished tweening or was "
-"killed, also when created with [code]Tween.new()[/code]. Invalid "
-"[SceneTreeTween] can't have [Tweener]s appended, because it can't animate "
-"them. You can however still use [method interpolate_value]."
+"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). A "
+"[SceneTreeTween] might become invalid when it has finished tweening, is "
+"killed, or when created with [code]SceneTreeTween.new()[/code]. Invalid "
+"[SceneTreeTween]s can't have [Tweener]s appended."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53251,16 +54224,15 @@ msgstr ""
msgid ""
"Sets the number of times the tweening sequence will be repeated, i.e. "
"[code]set_loops(2)[/code] will run the animation twice.\n"
-"Calling this method without arguments will make the [SceneTreeTween] run "
-"infinitely, until it is either killed by [method kill] or by freeing bound "
-"node, or all the animated objects have been freed (which makes further "
+"Calling this method without arguments will make the [Tween] run infinitely, "
+"until either it is killed with [method kill], the [Tween]'s bound node is "
+"freed, or all the animated objects have been freed (which makes further "
"animation impossible).\n"
"[b]Warning:[/b] Make sure to always add some duration/delay when using "
-"infinite loops. 0-duration looped animations (e.g. single [CallbackTweener] "
-"with no delay or [PropertyTweener] with invalid node) are equivalent to "
-"infinite [code]while[/code] loops and will freeze your game. If a "
-"[SceneTreeTween]'s lifetime depends on some node, always use [method "
-"bind_node]."
+"infinite loops. To prevent the game freezing, 0-duration looped animations "
+"(e.g. a single [CallbackTweener] with no delay) are stopped after a small "
+"number of loops, which may produce unexpected results. If a [Tween]'s "
+"lifetime depends on some node, always use [method bind_node]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53322,10 +54294,10 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Creates and appends an [IntervalTweener]. This method can be used to create "
-"delays in the tween animation, as an alternative for using the delay in "
-"other [Tweener]s or when there's no animation (in which case the "
-"[SceneTreeTween] acts as a timer). [code]time[/code] is the length of the "
-"interval, in seconds.\n"
+"delays in the tween animation, as an alternative to using the delay in other "
+"[Tweener]s, or when there's no animation (in which case the [SceneTreeTween] "
+"acts as a timer). [code]time[/code] is the length of the interval, in "
+"seconds.\n"
"Example: creating an interval in code execution.\n"
"[codeblock]\n"
"# ... some code\n"
@@ -53379,8 +54351,8 @@ msgid ""
"Creates and appends a [PropertyTweener]. This method tweens a "
"[code]property[/code] of an [code]object[/code] between an initial value and "
"[code]final_val[/code] in a span of time equal to [code]duration[/code], in "
-"seconds. The initial value by default is a value at the time the tweening of "
-"the [PropertyTweener] start. For example:\n"
+"seconds. The initial value by default is the property's value at the time "
+"the tweening of the [PropertyTweener] starts. For example:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"tween.tween_property($Sprite, \"position\", Vector2(100, 200), 1)\n"
@@ -53411,16 +54383,15 @@ msgid ""
"Emitted when the [SceneTreeTween] has finished all tweening. Never emitted "
"when the [SceneTreeTween] is set to infinite looping (see [method "
"set_loops]).\n"
-"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) after this signal "
-"is emitted, but it doesn't happen immediately, but on the next processing "
-"frame. Calling [method stop] inside the signal callback will preserve the "
-"[SceneTreeTween]."
+"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) in the next "
+"processing frame after this signal is emitted. Calling [method stop] inside "
+"the signal callback will prevent the [SceneTreeTween] from being removed."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Emitted when a full loop is complete (see [method set_loops]), providing the "
-"loop index. This signal is not emitted after final loop, use [signal "
+"loop index. This signal is not emitted after the final loop, use [signal "
"finished] instead for this case."
msgstr ""
@@ -53428,7 +54399,7 @@ msgstr ""
msgid ""
"Emitted when one step of the [SceneTreeTween] is complete, providing the "
"step index. One step is either a single [Tweener] or a group of [Tweener]s "
-"running parallelly."
+"running in parallel."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -54760,7 +55731,12 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-msgid "Scale part of the local transformation."
+msgid ""
+"Scale part of the local transformation.\n"
+"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, the scale values will either be all "
+"positive or all negative."
msgstr ""
#: doc/classes/Spatial.xml
@@ -57391,11 +58367,11 @@ msgstr ""
msgid ""
"Returns [code]true[/code] if this string contains a valid integer.\n"
"[codeblock]\n"
-"print(\"7\".is_valid_int()) # Prints \"True\"\n"
-"print(\"14.6\".is_valid_int()) # Prints \"False\"\n"
-"print(\"L\".is_valid_int()) # Prints \"False\"\n"
-"print(\"+3\".is_valid_int()) # Prints \"True\"\n"
-"print(\"-12\".is_valid_int()) # Prints \"True\"\n"
+"print(\"7\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"14.6\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"L\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"+3\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"-12\".is_valid_integer()) # Prints \"True\"\n"
"[/codeblock]"
msgstr ""
@@ -60861,6 +61837,10 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml
+msgid "If [code]true[/code], this TileMap bakes a navigation region."
+msgstr ""
+
+#: doc/classes/TileMap.xml
msgid "If [code]true[/code], the cell's UVs will be clipped."
msgstr ""
@@ -60967,6 +61947,10 @@ msgid "The TileMap orientation mode. See [enum Mode] for possible values."
msgstr ""
#: doc/classes/TileMap.xml
+msgid "The navigation layers the TileMap generates its navigation regions in."
+msgstr ""
+
+#: doc/classes/TileMap.xml
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 "
@@ -62098,7 +63082,12 @@ msgstr ""
#: doc/classes/Transform2D.xml
msgid ""
"Returns a copy of the transform scaled by the given [code]scale[/code] "
-"factor, using matrix multiplication."
+"factor, using matrix multiplication.\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
#: doc/classes/Transform2D.xml
@@ -62253,7 +63242,18 @@ msgid ""
"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]."
+"to remove it from the [Tree].\n"
+"[b]Incremental search:[/b] Like [ItemList] and [PopupMenu], [Tree] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/Tree.xml
@@ -65769,11 +66769,12 @@ msgid "This enabler will stop [Particles2D] nodes."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _process function."
+msgid "This enabler will stop the parent's [method Node._process] function."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _physics_process function."
+msgid ""
+"This enabler will stop the parent's [method Node._physics_process] function."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
@@ -65813,6 +66814,16 @@ msgid "The VisibilityNotifier's bounding box."
msgstr ""
#: doc/classes/VisibilityNotifier.xml
+msgid ""
+"In addition to checking whether a node is on screen or within a [Camera]'s "
+"view, VisibilityNotifier can also optionally check whether a node is within "
+"a specified maximum distance when using a [Camera] with perspective "
+"projection. This is useful for throttling the performance requirements of "
+"nodes that are far away.\n"
+"[b]Note:[/b] This feature will be disabled if set to 0.0."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier.xml
msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view."
msgstr ""
@@ -70558,6 +71569,16 @@ msgid "The amount of shader rebinds in the frame."
msgstr ""
#: doc/classes/VisualServer.xml
+msgid ""
+"The peak amount of shaders that have been under compilation in the frame.\n"
+"This is useful to know when asynchronous shader compilation has finished for "
+"the current shaders on screen.\n"
+"[b]Note:[/b] For complete certainty, only assume there are no outstanding "
+"compilations when this value is zero for at least two frames in a row.\n"
+"Unimplemented in the GLES2 rendering backend, always returns 0."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
msgid "The amount of surface changes in the frame."
msgstr ""
@@ -73754,8 +74775,8 @@ msgstr ""
#: doc/classes/World.xml
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."
+"scenario, a navigation map and a sound space. Spatial nodes register their "
+"resources into the current world."
msgstr ""
#: doc/classes/World.xml
@@ -73770,8 +74791,13 @@ msgstr ""
#: doc/classes/World.xml
msgid ""
-"The World's fallback_environment will be used if the World's [Environment] "
-"fails or is missing."
+"The World's fallback environment will be used if [member environment] fails "
+"or is missing."
+msgstr ""
+
+#: doc/classes/World.xml
+msgid ""
+"The [RID] of this world's navigation map. Used by the [NavigationServer]."
msgstr ""
#: doc/classes/World.xml
@@ -73789,8 +74815,8 @@ msgstr ""
#: doc/classes/World2D.xml
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."
+"visual scenario, a navigation map and a sound space. 2D nodes register their "
+"resources into the current 2D world."
msgstr ""
#: doc/classes/World2D.xml
@@ -73808,6 +74834,11 @@ msgstr ""
#: doc/classes/World2D.xml
msgid ""
+"The [RID] of this world's navigation map. Used by the [Navigation2DServer]."
+msgstr ""
+
+#: doc/classes/World2D.xml
+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 ""
diff --git a/doc/translations/nl.po b/doc/translations/nl.po
index 2e334d337a..7a96e774df 100644
--- a/doc/translations/nl.po
+++ b/doc/translations/nl.po
@@ -406,7 +406,7 @@ msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
msgid ""
"Compares two values by checking their actual contents, recursing into any "
-"`Array` or `Dictionary` up to its deepest level.\n"
+"[Array] or [Dictionary] up to its deepest level.\n"
"This compares to [code]==[/code] in a number of ways:\n"
"- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/"
"code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] "
@@ -453,7 +453,7 @@ msgid ""
"- 1.0: Linear\n"
"- Greater than 1.0 (exclusive): Ease in\n"
"[/codeblock]\n"
-"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.4/img/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/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]."
@@ -1160,7 +1160,7 @@ msgid ""
"[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/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/img/"
"smoothstep_ease_comparison.png]Comparison between smoothstep() and ease(x, "
"-1.6521) return values[/url]"
msgstr ""
@@ -3446,6 +3446,12 @@ msgstr ""
#: doc/classes/@GlobalScope.xml
msgid ""
+"Hints that an integer property is a bitmask using the optionally named 2D "
+"navigation layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml
+msgid ""
"Hints that an integer property is a bitmask using the optionally named 3D "
"render layers."
msgstr ""
@@ -3458,6 +3464,12 @@ msgstr ""
#: doc/classes/@GlobalScope.xml
msgid ""
+"Hints that an integer property is a bitmask using the optionally named 3D "
+"navigation layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml
+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]."
@@ -8433,7 +8445,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/AStar.xml
+#: doc/classes/AStar.xml doc/classes/AStar2D.xml
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[/"
@@ -8632,7 +8644,10 @@ msgid ""
msgstr ""
#: doc/classes/AStar2D.xml
-msgid "Returns whether there is a connection/segment between the given points."
+msgid ""
+"Returns whether there is a connection/segment between the given points. 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/AStar2D.xml
@@ -8649,10 +8664,6 @@ msgid ""
msgstr ""
#: doc/classes/AStar2D.xml
-msgid "Deletes the segment between the given points."
-msgstr ""
-
-#: doc/classes/AStar2D.xml
msgid ""
"Returns the closest position to [code]to_position[/code] that resides inside "
"a segment between two connected points.\n"
@@ -8837,7 +8848,9 @@ msgid ""
"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."
+"transmit audio over the network. When capturing audio data from a "
+"microphone, the format of the samples will be stereo 32-bit floating point "
+"PCM."
msgstr ""
#: doc/classes/AudioEffectCapture.xml
@@ -13680,7 +13693,7 @@ msgid ""
msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
-#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/Navigation2D.xml
msgid "Returns the object's [RID]."
msgstr ""
@@ -19155,11 +19168,14 @@ msgid ""
msgstr ""
#: doc/classes/CurveTexture.xml
-msgid "The [code]curve[/code] rendered onto the texture."
+msgid "The [Curve] that is rendered onto the texture."
msgstr ""
#: doc/classes/CurveTexture.xml
-msgid "The width of the texture."
+msgid ""
+"The width of the texture (in pixels). Higher values make it possible to "
+"represent high-frequency data better (such as sudden direction changes), at "
+"the cost of increased generation time and memory usage."
msgstr ""
#: doc/classes/CylinderMesh.xml
@@ -19445,6 +19461,13 @@ msgid "Returns the list of keys in the [Dictionary]."
msgstr ""
#: doc/classes/Dictionary.xml
+msgid ""
+"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, "
+"duplicate keys will not be copied over, unless [code]overwrite[/code] is "
+"[code]true[/code]."
+msgstr ""
+
+#: doc/classes/Dictionary.xml
msgid "Returns the number of keys in the dictionary."
msgstr ""
@@ -21383,9 +21406,23 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide a state data you want to be saved, like view "
+"position, grid settings, folding, etc. 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). This data is automatically saved for "
+"each scene in an [code]editstate[/code] file in the editor metadata folder. "
+"If you want to store global (scene-independent) editor data for your plugin, "
+"you can use [method get_window_layout] instead.\n"
+"Use [method set_state] to restore your saved state.\n"
+"[b]Note:[/b] This method should not be used to save important settings that "
+"should persist with the project.\n"
+"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be "
+"stored and restored correctly.\n"
+"[codeblock]\n"
+"func get_state():\n"
+" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n"
+" return state\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -21396,9 +21433,18 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide the GUI layout of the plugin or any other "
+"data you want to be stored. 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). The data is stored in the "
+"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n"
+"Use [method set_window_layout] to restore your saved layout.\n"
+"[codeblock]\n"
+"func get_window_layout(configuration):\n"
+" configuration.set_value(\"MyPlugin\", \"window_position\", $Window."
+"position)\n"
+" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -21511,11 +21557,30 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the state saved by [method get_state]."
+msgid ""
+"Restore the state saved by [method get_state]. This method is called when "
+"the current scene tab is changed in the editor.\n"
+"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise "
+"it will not be recognized and this method will not be called.\n"
+"[codeblock]\n"
+"func set_state(data):\n"
+" zoom = data.get(\"zoom\", 1.0)\n"
+" preferred_color = data.get(\"my_color\", Color.white)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the plugin GUI layout saved by [method get_window_layout]."
+msgid ""
+"Restore the plugin GUI layout and data saved by [method get_window_layout]. "
+"This method is called for every plugin on editor startup. Use the provided "
+"[code]configuration[/code] file to read your saved data.\n"
+"[codeblock]\n"
+"func set_window_layout(configuration):\n"
+" $Window.position = configuration.get_value(\"MyPlugin\", "
+"\"window_position\", Vector2())\n"
+" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", "
+"Color.white)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -26153,7 +26218,8 @@ msgid ""
"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])."
+"at fixed steps (see [member width]). See also [GradientTexture2D] and "
+"[CurveTexture]."
msgstr ""
#: doc/classes/GradientTexture.xml
@@ -26175,7 +26241,8 @@ msgid ""
"repeat] types using colors obtained from the gradient. 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] and [member height])."
+"[member width] and [member height]). See also [GradientTexture] and "
+"[CurveTexture]."
msgstr ""
#: doc/classes/GradientTexture2D.xml
@@ -26981,6 +27048,12 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+msgid ""
+"If [code]true[/code], this GridMap uses cell navmesh resources to create "
+"navigation regions."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid "If [code]true[/code], grid items are centered on the X axis."
msgstr ""
@@ -27031,6 +27104,10 @@ msgid "The assigned [MeshLibrary]."
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+msgid "The navigation layers the GridMap generates its navigation regions in."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
"Overrides the default friction and bounce physics properties for the whole "
"[GridMap]."
@@ -28254,7 +28331,7 @@ msgid ""
" # 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 body = to_json({\"name\": \"Godette\"})\n"
" error = http_request.request(\"https://httpbin.org/post\", [], true, "
"HTTPClient.METHOD_POST, body)\n"
" if error != OK:\n"
@@ -29421,7 +29498,7 @@ msgstr ""
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 "
+"([member 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 "
@@ -29570,10 +29647,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Returns the mouse mode. See the constants for more information."
-msgstr ""
-
-#: doc/classes/Input.xml
msgid ""
"Gets an input vector by specifying four actions for the positive and "
"negative X and Y axes.\n"
@@ -29767,24 +29840,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Sets the mouse mode. See the constants for more information."
-msgstr ""
-
-#: doc/classes/Input.xml
-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
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 "
@@ -29820,6 +29875,24 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
+msgid "Controls the mouse mode. See [enum MouseMode] for more information."
+msgstr ""
+
+#: doc/classes/Input.xml
+msgid ""
+"If [code]true[/code], similar input events sent by the operating system are "
+"accumulated. 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 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
msgid "Emitted when a joypad device has been connected or disconnected."
msgstr ""
@@ -30127,8 +30200,8 @@ msgstr ""
#: doc/classes/InputEventJoypadButton.xml
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]."
+"Represents the pressure the user puts on the button with their finger, if "
+"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]."
msgstr ""
#: doc/classes/InputEventJoypadMotion.xml
@@ -30391,9 +30464,9 @@ 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 "
+"at most. If you need more precise input reporting, set [member Input."
+"use_accumulated_input] to [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."
@@ -30880,7 +30953,18 @@ msgid ""
"[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."
+"fixed_column_width] greater than zero to wrap the text.\n"
+"[b]Incremental search:[/b] Like [PopupMenu] and [Tree], [ItemList] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/ItemList.xml
@@ -34627,11 +34711,16 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Returns the override [Material] for a surface of the [Mesh] resource.\n"
+"[b]Note:[/b] This function only returns [i]override[/i] materials associated "
+"with this [MeshInstance]. Consider using [method get_active_material] or "
+"[method Mesh.surface_get_material] to get materials associated with the "
+"[Mesh] resource."
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the number of surface materials."
+msgid "Returns the number of surface override materials."
msgstr ""
#: doc/classes/MeshInstance.xml
@@ -34668,7 +34757,10 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Sets the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Sets the override [Material] for the specified surface of the [Mesh] "
+"resource. This material is associated with this [MeshInstance] rather than "
+"with the [Mesh] resource."
msgstr ""
#: doc/classes/MeshInstance.xml
@@ -34699,9 +34791,10 @@ msgstr ""
#: doc/classes/MeshInstance2D.xml
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\"."
+"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be "
+"automatically created from an existing [Sprite] via a tool in the editor "
+"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to "
+"MeshInstance2D[/b] at the top of the 2D editor viewport."
msgstr ""
#: doc/classes/MeshInstance2D.xml
@@ -35459,6 +35552,9 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"Provides navigation and pathfinding within a collection of "
"[NavigationMesh]es. By default, these will be automatically collected from "
"child [NavigationMeshInstance] nodes. In addition to basic pathfinding, this "
@@ -35499,7 +35595,14 @@ msgid ""
msgstr ""
#: doc/classes/Navigation.xml
+msgid "Returns the [RID] of the navigation map on the [NavigationServer]."
+msgstr ""
+
+#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"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, "
@@ -35521,16 +35624,31 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation.get_simple_path] path query."
+msgstr ""
+
+#: doc/classes/Navigation.xml
+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/Navigation.xml doc/classes/Navigation2DServer.xml
+#: doc/classes/NavigationServer.xml
+msgid ""
+"Emitted when a navigation map is updated, when a region moves or is modified."
+msgstr ""
+
#: doc/classes/Navigation2D.xml
msgid "2D navigation and pathfinding node."
msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -35550,6 +35668,9 @@ msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -35559,6 +35680,12 @@ msgstr ""
msgid "The XY plane cell size to use for fields."
msgstr ""
+#: doc/classes/Navigation2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation2D.get_simple_path] path query."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml
msgid "Server interface for low-level 2D navigation access."
msgstr ""
@@ -35575,8 +35702,12 @@ msgid ""
"through scripts.\n"
"For two regions to be connected to each other, they must share a similar "
"edge. An edge is considered connected to another if both of its two vertices "
-"are at a distance less than [member Navigation.edge_connection_margin] to "
-"the respective other edge's vertex.\n"
+"are at a distance less than navigation map [code]edge_connection_margin[/"
+"code] to the respective other edge's vertex.\n"
+"You may assign navigation layers to regions with [method Navigation2DServer."
+"region_set_navigation_layers], which then can be checked upon when "
+"requesting a path with [method Navigation2DServer.map_get_path]. This allows "
+"allowing or forbidding some areas to 2D objects.\n"
"To use the collision avoidance system, you may use agents. You can set an "
"agent's target velocity, then the servers will emit a callback with a "
"modified velocity.\n"
@@ -35604,7 +35735,17 @@ msgid "Returns [code]true[/code] if the map got changed the previous frame."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Callback called at the end of the RVO process."
+msgid ""
+"Callback called at the end of the RVO process. If a callback is created "
+"manually and the agent is placed on a navigation map it will calculate "
+"avoidance for the agent and dispatch the calculated [code]safe_velocity[/"
+"code] to the [code]receiver[/code] object with a signal to the chosen "
+"[code]method[/code] name.\n"
+"[b]Note:[/b] Created callbacks are always processed independently of the "
+"SceneTree state as long as the agent is on a navigation map and not freed. "
+"To disable the dispatch of a callback from an agent use [method "
+"agent_set_callback] again with a [code]null[/code] object as the "
+"[code]receiver[/code]."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -35659,15 +35800,55 @@ msgid "Destroys the given RID."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns all created navigation map [RID]s on the NavigationServer. This "
+"returns both 2D and 3D created navigation maps as there is technically no "
+"distinction between them."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Create a new map."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"This function immediately forces synchronization of the specified navigation "
+"[code]map[/code] [RID]. By default navigation maps are only synchronized at "
+"the end of each physics frame. This function can be used to immediately "
+"(re)calculate all the navigation meshes and region connections of the "
+"navigation map. This makes it possible to query a navigation path for a "
+"changed map immediately and in the same frame (multiple times if needed).\n"
+"Due to technical restrictions the current NavigationServer command queue "
+"will be flushed. This means all already queued update commands for this "
+"physics frame will be executed, even those intended for other maps, regions "
+"and agents not part of the specified map. The expensive computation of the "
+"navigation meshes and region connections of a map will only be done for the "
+"specified map. Other maps will receive the normal synchronization at the end "
+"of the physics frame. Should the specified map receive changes after the "
+"forced update it will update again as well when the other maps receive their "
+"update.\n"
+"Avoidance processing and dispatch of the [code]safe_velocity[/code] signals "
+"is untouched by this function and continues to happen for all maps and "
+"agents at the end of the physics frame.\n"
+"[b]Note:[/b] With great power comes great responsibility. This function "
+"should only be used by users that really know what they are doing and have a "
+"good reason for it. Forcing an immediate update of a navigation map requires "
+"locking the NavigationServer and flushing the entire NavigationServer "
+"command queue. Not only can this severely impact the performance of a game "
+"but it can also introduce bugs if used inappropriately without much "
+"foresight."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns all navigation agents [RID]s that are currently assigned to the "
"requested navigation [code]map[/code]."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Returns the map cell size."
msgstr ""
@@ -35691,7 +35872,10 @@ msgid ""
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Returns the navigation path to reach the destination from the origin."
+msgid ""
+"Returns the navigation path to reach the destination from the origin. "
+"[code]navigation_layers[/code] is a bitmask of all region layers that are "
+"allowed to be in the path."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -35708,6 +35892,12 @@ msgstr ""
msgid "Sets the map active."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/"
+"b] Currently not implemented."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Set the map cell size used to weld the navigation mesh polygons."
msgstr ""
@@ -35723,14 +35913,73 @@ msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"Returns the ending point of a connection door. [code]connection[/code] is an "
+"index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns the starting point of a connection door. [code]connection[/code] is "
+"an index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns how many connections this [code]region[/code] has with other regions "
+"in the map."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns the navigation map [RID] the requested [code]region[/code] is "
"currently assigned to."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Returns the region's navigation layers."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns [code]true[/code] if the provided [code]point[/code] in world space "
+"is currently owned by the provided navigation [code]region[/code]. Owned in "
+"this context means that one of the region's navigation mesh polygon faces "
+"has a possible position at the closest distance to this point compared to "
+"all other navigation meshes from other navigation regions that are also "
+"registered on the navigation map of the provided region.\n"
+"If multiple navigation meshes have positions at equal distance the "
+"navigation region whose polygons are processed first wins the ownership. "
+"Polygons are processed in the same order that navigation regions were "
+"registered on the NavigationServer.\n"
+"[b]Note:[/b] If navigation meshes from different navigation regions overlap "
+"(which should be avoided in general) the result might not be what is "
+"expected."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Sets the map for the region."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method Navigation2DServer.map_get_path])."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Sets the navigation mesh for the region."
msgstr ""
@@ -35739,6 +35988,10 @@ msgstr ""
msgid "Sets the global transformation for the region."
msgstr ""
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]."
+msgstr ""
+
#: doc/classes/NavigationAgent.xml
msgid "3D agent used in navigation for collision avoidance."
msgstr ""
@@ -35748,9 +36001,16 @@ msgid ""
"3D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationAgent] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World] navigation map. If this node is a child of a [Navigation] "
+"node it will register to the navigation map of the navigation node or the "
+"function [method set_navigation] can be used to set the navigation node "
+"directly. [NavigationAgent] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -35768,7 +36028,15 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-msgid "Returns the path from start to finish in global coordinates."
+msgid ""
+"Returns this agent's current path from start to finish in global "
+"coordinates. The path only updates when the target location is changed or "
+"the agent requires a repath. The path array is not intended to be used in "
+"direct path movement as the agent has its own internal path logic that would "
+"get corrupted by changing the path array manually. Use the intended [method "
+"get_next_location] once every physics frame to receive the next path point "
+"for the agents movement as this function also updates the internal path "
+"logic."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -35783,11 +36051,24 @@ msgid ""
"system."
msgstr ""
-#: doc/classes/NavigationAgent.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"Returns a [Vector3] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the origin of the agent's parent."
+"Returns the [RID] of the navigation map for this NavigationAgent node. This "
+"function returns always the map set on the NavigationAgent node and not the "
+"map of the abstract agent on the NavigationServer. If the agent map is "
+"changed directly with the NavigationServer API the NavigationAgent node will "
+"not be aware of the map change. Use [method set_navigation_map] to change "
+"the navigation map for the NavigationAgent and also update the agent on the "
+"NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
+"Returns the next location in global coordinates that can be moved to, making "
+"sure that there are no static objects in the way. If the agent does not have "
+"a navigation path, it will return the position of the agent's parent. The "
+"use of this function once every physics frame is required to update the "
+"internal path logic of the NavigationAgent."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -35828,6 +36109,12 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"Sets the [RID] of the navigation map this NavigationAgent node should use "
+"and also updates the [code]agent[/code] on the NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"Sets the user desired final location. This will clear the current navigation "
"path."
msgstr ""
@@ -35840,7 +36127,13 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml
-msgid "The agent height offset to match the navigation mesh height."
+msgid ""
+"The NavigationAgent height offset is subtracted from the y-axis value of any "
+"vector path position for this NavigationAgent. The NavigationAgent height "
+"offset does not change or influence the navigation mesh or pathfinding query "
+"result. Additional navigation maps that use regions with navigation meshes "
+"that the developer baked with appropriate agent radius or height values are "
+"required to support different-sized agents."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -35867,26 +36160,53 @@ msgstr ""
msgid "The maximum speed that an agent can move."
msgstr ""
+#: doc/classes/NavigationAgent.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "The distance to search for other agents."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"The distance threshold before a path point is considered to be reached. This "
+"will allow an agent to not have to hit a path point on the path exactly, but "
+"in the area. If this value is set to high the NavigationAgent will skip "
+"points on the path which can lead to leaving the navigation mesh. If this "
+"value is set to low the NavigationAgent will be stuck in a repath loop cause "
+"it will constantly overshoot or undershoot the distance to the next point on "
+"each physics frame update."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"The maximum distance the agent is allowed away from the ideal path to the "
"final location. This can happen due to trying to avoid collisions. When the "
"maximum distance is exceeded, it recalculates the ideal path."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-msgid "The radius of the agent."
+msgid ""
+"The radius of the avoidance agent. This is the \"body\" of the avoidance "
+"agent and not the avoidance maneuver starting radius (which is controlled by "
+"[member neighbor_dist]).\n"
+"Does not affect normal pathfinding. To change an actor's pathfinding radius "
+"bake [NavigationMesh] resources with a different [member NavigationMesh."
+"agent_radius] property and use different navigation maps for each actor size."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"The distance threshold before a target is considered to be reached. This "
-"will allow an agent to not have to hit a point on the path exactly, but in "
-"the area."
+"The distance threshold before the final target point is considered to be "
+"reached. This will allow an agent to not have to hit the point of the final "
+"target exactly, but only the area. If this value is set to low the "
+"NavigationAgent will be stuck in a repath loop cause it will constantly "
+"overshoot or undershoot the distance to the final target point on each "
+"physics frame update."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -35929,9 +36249,16 @@ msgid ""
"2D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationAgent2D] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World2D] navigation map. If this node is a child of a "
+"[Navigation2D] node it will register to the navigation map of the navigation "
+"node or the function [method set_navigation] can be used to set the "
+"navigation node directly. [NavigationAgent2D] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent2D.xml
@@ -35947,13 +36274,6 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent2D.xml
-msgid ""
-"Returns a [Vector2] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the position of the agent's parent."
-msgstr ""
-
-#: doc/classes/NavigationAgent2D.xml
msgid "Returns the [RID] of this agent on the [Navigation2DServer]."
msgstr ""
@@ -35973,6 +36293,13 @@ msgid ""
"only be enabled on agents that currently require it."
msgstr ""
+#: doc/classes/NavigationAgent2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent2D] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationMesh.xml
msgid "A mesh to approximate the walkable areas and obstacles."
msgstr ""
@@ -36003,8 +36330,8 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
-"Returns whether the specified [code]bit[/code] of the [member geometry/"
-"collision_mask] is set."
+"Returns whether the specified [code]bit[/code] of the [member "
+"geometry_collision_mask] is set."
msgstr ""
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
@@ -36026,9 +36353,9 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/"
-"code] in the [member geometry/collision_mask].\n"
+"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]."
+"code] in the [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
@@ -36042,14 +36369,14 @@ 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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36061,7 +36388,7 @@ 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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36089,13 +36416,17 @@ msgstr ""
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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
-"If [code]true[/code], marks walkable spans as not walkable if the clearance "
-"above the span is less than [member agent/height]."
+"If the baking [AABB] has a volume the navigation mesh baking will be "
+"restricted to its enclosing area."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+msgid "The position offset applied to the [member filter_baking_aabb] [AABB]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36105,13 +36436,19 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]true[/code], marks non-walkable spans as walkable if their maximum "
-"is within [member agent/max_climb] of a walkable neighbor."
+"is within [member agent_max_climb] of a walkable neighbor."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+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
msgid ""
"The physics layers to scan for static colliders.\n"
-"Only used when [member geometry/parsed_geometry_type] is [constant "
+"Only used when [member geometry_parsed_geometry_type] is [constant "
"PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]."
msgstr ""
@@ -36130,7 +36467,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"The name of the group to scan for geometry.\n"
-"Only used when [member geometry/source_geometry_mode] is [constant "
+"Only used when [member geometry_source_geometry_mode] is [constant "
"SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant "
"SOURCE_GEOMETRY_GROUPS_EXPLICIT]."
msgstr ""
@@ -36193,7 +36530,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Parses [StaticBody] colliders as geometry. The collider should be in any of "
-"the layers specified by [member geometry/collision_mask]."
+"the layers specified by [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36214,13 +36551,13 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Scans nodes in a group and their child nodes recursively for geometry. The "
-"group is specified by [member geometry/source_group_name]."
+"group is specified by [member geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Uses nodes in a group for geometry. The group is specified by [member "
-"geometry/source_group_name]."
+"geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36262,7 +36599,15 @@ msgid ""
"geometry for walkable terrain suitable to [NavigationMesh] agent properties "
"by creating a voxel world around the meshes bounding area.\n"
"The finalized navigation mesh is then returned and stored inside the "
-"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes."
+"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] "
+"nodes.\n"
+"[b]Note:[/b] Using meshes to not only define walkable surfaces but also "
+"obstruct navigation baking does not always work. The navigation baking has "
+"no concept of what is a geometry \"inside\" when dealing with mesh source "
+"geometry and this is intentional. Depending on current baking parameters, as "
+"soon as the obstructing mesh is large enough to fit a navigation mesh area "
+"inside, the baking will generate navigation mesh areas that are inside the "
+"obstructing source geometry mesh."
msgstr ""
#: doc/classes/NavigationMeshGenerator.xml
@@ -36270,8 +36615,8 @@ msgid ""
"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child "
"nodes under the provided [code]root_node[/code] or a specific group of nodes "
"for potential source geometry. The parse behavior can be controlled with the "
-"[member NavigationMesh.geometry/parsed_geometry_type] and [member "
-"NavigationMesh.geometry/source_geometry_mode] properties on the "
+"[member NavigationMesh.geometry_parsed_geometry_type] and [member "
+"NavigationMesh.geometry_source_geometry_mode] properties on the "
"[NavigationMesh] resource."
msgstr ""
@@ -36288,8 +36633,21 @@ msgstr ""
#: doc/classes/NavigationMeshInstance.xml
msgid ""
"An instance of a [NavigationMesh]. It tells the [Navigation] node what can "
-"be navigated and what cannot, based on the [NavigationMesh] resource. This "
-"should be a child of a [Navigation] node."
+"be navigated and what cannot, based on the [NavigationMesh] resource.\n"
+"By default this node will register to the default [World] navigation map. If "
+"this node is a child of a [Navigation] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method NavigationServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The cost of entering this region from another region can be controlled with "
+"the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The cost of traveling distances inside this region can be controlled with "
+"the [member travel_cost] multiplier."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
@@ -36318,10 +36676,34 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding enters this region's navmesh from another regions navmesh "
+"the [code]enter_cost[/code] value is added to the path distance for "
+"determining the shortest path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationMesh] "
+"belongs to. On path requests with [method NavigationServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
msgid "The [NavigationMesh] resource to use."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding moves inside this region's navmesh the traveled distances "
+"are multiplied with [code]travel_cost[/code] for determining the shortest "
+"path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
msgid "Notifies when the navigation mesh bake operation is completed."
msgstr ""
@@ -36338,7 +36720,9 @@ msgid ""
"3D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationObstacle] is physics safe."
+"[NavigationObstacle] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle.xml
@@ -36378,7 +36762,9 @@ msgid ""
"2D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationObstacle2D] is physics safe."
+"[NavigationObstacle2D] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle2D.xml
@@ -36458,6 +36844,14 @@ msgstr ""
#: doc/classes/NavigationPolygon.xml
msgid ""
+"Returns the [NavigationMesh] resulting from this navigation polygon. This "
+"navmesh can be used to update the navmesh of a region with the [method "
+"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server "
+"behind the scene)."
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml
+msgid ""
"Returns a [PoolVector2Array] containing the vertices of an outline that was "
"created in the editor or by script."
msgstr ""
@@ -36494,6 +36888,30 @@ msgid ""
msgstr ""
#: doc/classes/NavigationPolygonInstance.xml
+msgid "A region of the 2D navigation map."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A region of the navigation map. It tells the [Navigation2DServer] what can "
+"be navigated and what cannot, based on its [NavigationPolygon] resource.\n"
+"By default this node will register to the default [World2D] navigation map. "
+"If this node is a child of a [Navigation2D] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The pathfinding cost of entering this region from another region can be "
+"controlled with the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The pathfinding cost of traveling distances inside this region can be "
+"controlled with the [member travel_cost] multiplier."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
msgid ""
"Returns the [RID] of this region on the [Navigation2DServer]. Combined with "
"[method Navigation2DServer.map_get_closest_point_owner] can be used to "
@@ -36501,6 +36919,22 @@ msgid ""
"navigation map."
msgstr ""
+#: doc/classes/NavigationPolygonInstance.xml
+msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationPolygon] "
+"belongs to. On path requests with [method Navigation2DServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid "The [NavigationPolygon] resource to use."
+msgstr ""
+
#: doc/classes/NavigationServer.xml
msgid "Server interface for low-level 3D navigation access."
msgstr ""
@@ -36576,6 +37010,12 @@ msgid "Bakes the navigation mesh."
msgstr ""
#: doc/classes/NavigationServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method NavigationServer.map_get_path])."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
msgid "Control activation of this server."
msgstr ""
@@ -38042,13 +38482,19 @@ msgstr ""
#: doc/classes/Node.xml
msgid ""
"Emitted when a child node enters the scene tree, either because it entered "
-"on its own or because this node entered with it."
+"on its own or because this node entered with it.\n"
+"This signal is emitted [i]after[/i] the child node's own [constant "
+"NOTIFICATION_ENTER_TREE] and [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
msgid ""
-"Emitted when a child node exits the scene tree, either because it exited on "
-"its own or because this node exited."
+"Emitted when a child node is about to exit the scene tree, either because it "
+"is being removed or freed directly, or because this node is exiting the "
+"tree.\n"
+"When this signal is received, the child [code]node[/code] is still in the "
+"tree and valid. This signal is emitted [i]after[/i] the child node's own "
+"[signal tree_exiting] and [constant NOTIFICATION_EXIT_TREE]."
msgstr ""
#: doc/classes/Node.xml
@@ -38060,7 +38506,10 @@ msgid "Emitted when the node is renamed."
msgstr ""
#: doc/classes/Node.xml
-msgid "Emitted when the node enters the tree."
+msgid ""
+"Emitted when the node enters the tree.\n"
+"This signal is emitted [i]after[/i] the related [constant "
+"NOTIFICATION_ENTER_TREE] notification."
msgstr ""
#: doc/classes/Node.xml
@@ -38070,15 +38519,21 @@ msgstr ""
#: doc/classes/Node.xml
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)."
+"the right place for de-initialization (or a \"destructor\", if you will).\n"
+"This signal is emitted [i]before[/i] the related [constant "
+"NOTIFICATION_EXIT_TREE] notification."
msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node enters a [SceneTree]."
+msgid ""
+"Notification received when the node enters a [SceneTree].\n"
+"This notification is emitted [i]before[/i] the related [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node is about to exit a [SceneTree]."
+msgid ""
+"Notification received when the node is about to exit a [SceneTree].\n"
+"This notification is emitted [i]after[/i] the related [signal tree_exiting]."
msgstr ""
#: doc/classes/Node.xml
@@ -38339,7 +38794,13 @@ msgid "Rotation in degrees, relative to the node's parent."
msgstr ""
#: doc/classes/Node2D.xml
-msgid "The node's scale. Unscaled value: [code](1, 1)[/code]."
+msgid ""
+"The node's scale. Unscaled value: [code](1, 1)[/code].\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
#: doc/classes/Node2D.xml
@@ -39779,6 +40240,10 @@ msgid ""
" if argument.find(\"=\") > -1:\n"
" var key_value = argument.split(\"=\")\n"
" arguments[key_value[0].lstrip(\"--\")] = key_value[1]\n"
+" else:\n"
+" # Options without an argument will be present in the dictionary,\n"
+" # with the value set to an empty string.\n"
+" arguments[argument.lstrip(\"--\")] = \"\"\n"
"[/codeblock]"
msgstr ""
@@ -40432,8 +40897,15 @@ msgstr ""
msgid ""
"Moves the file or directory to the system's recycle bin. See also [method "
"Directory.remove].\n"
+"The method takes only global paths, so you may need to use [method "
+"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/"
+"code] as it will not work in exported project.\n"
"[b]Note:[/b] If the user has disabled the recycle bin on their system, the "
-"file will be permanently deleted instead."
+"file will be permanently deleted instead.\n"
+"[codeblock]\n"
+"var file_to_remove = \"user://slot1.sav\"\n"
+"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/OS.xml
@@ -45272,7 +45744,18 @@ msgstr ""
#: doc/classes/PopupMenu.xml
msgid ""
"[PopupMenu] is a [Control] that displays a list of options. They are popular "
-"in toolbars or context menus."
+"in toolbars or context menus.\n"
+"[b]Incremental search:[/b] Like [ItemList] and [Tree], [PopupMenu] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/PopupMenu.xml
@@ -46779,7 +47262,16 @@ msgid ""
msgstr ""
#: doc/classes/ProjectSettings.xml
-msgid "Message to be displayed before the backtrace when the engine crashes."
+msgid ""
+"Message to be displayed before the backtrace when the engine crashes. By "
+"default, this message is only used in exported projects due to the editor-"
+"only override applied to this setting."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Editor-only override for [member debug/settings/crash_handler/message]. Does "
+"not affect exported projects in debug or release mode."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -47024,6 +47516,18 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default naming style for scene files to infer from their root nodes. "
+"Possible options are:\n"
+"- [code]0[/code] (Auto): Uses the scene root name as is without changing its "
+"casing.\n"
+"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase "
+"casing.\n"
+"- [code]2[/code] (snake_case): Converts the scene root name to snake_case "
+"casing."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -47249,6 +47753,198 @@ msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 1."
msgstr ""
@@ -47457,6 +48153,198 @@ msgid "Optional name for the 2D render layer 9."
msgstr ""
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 1."
msgstr ""
@@ -47724,6 +48612,49 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default cell height for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_height].\n"
+"[b]Note:[/b] Currently not implemented."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 2D navigation maps. See [method "
+"Navigation2DServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell height for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_height]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 3D navigation maps. See [method "
+"NavigationServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default map up vector for 3D navigation maps. See [method NavigationServer."
+"map_set_up]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -48397,20 +49328,28 @@ msgid ""
"cause.\n"
"The default value is a conservative one, so you are advised to tweak it "
"according to the hardware you are targeting.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"The default is a very conservative override for [code]rendering/gles3/"
-"shaders/max_concurrent_compiles[/code].\n"
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
"Depending on the specific devices you are targeting, you may want to raise "
"it.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
+"Depending on the specific browsers you are targeting, you may want to raise "
+"it.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -48418,19 +49357,28 @@ msgid ""
"The maximum size, in megabytes, that the ubershader cache can grow up to. On "
"startup, the least recently used entries will be deleted until the total "
"size is within bounds.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/ubershader_cache_size_mb[/"
-"code], so a smaller maximum size can be configured for mobile platforms, "
-"where storage space is more limited.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for mobile platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for web platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] Currently, shader caching is generally unavailable on web "
+"platforms.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -48462,14 +49410,22 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/shader_compilation_mode[/"
-"code], so asynchronous compilation can be disabled for mobile.\n"
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on mobile platforms.\n"
"You may want to do that since mobile GPUs generally won't support "
"ubershaders due to their complexity."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on web platforms.\n"
+"You may want to do that since certain browsers (especially on mobile "
+"platforms) generally won't support ubershaders due to their complexity."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
@@ -49226,7 +50182,6 @@ msgid ""
"- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/"
"code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, "
"small grid radius values may lead to unwanted groupings.\n"
-"[/codeblock]\n"
"[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more "
"effective and faster [VisibilityNotifier] functionality. For most use cases, "
"[method Vector3.distance_to] or [method Vector3.distance_squared_to] are "
@@ -51374,6 +52329,22 @@ msgid "Makes text fill width."
msgstr ""
#: doc/classes/RichTextLabel.xml
+msgid "Aligns top of the inline image to the top of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns center of the inline image to the center of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns bottom of the inline image to the baseline of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns bottom of the inline image to the bottom of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
msgid "Each list item has a number marker."
msgstr ""
@@ -53111,8 +54082,8 @@ msgid ""
" yield(get_tree().create_timer(1.0), \"timeout\")\n"
" print(\"Timer ended.\")\n"
"[/codeblock]\n"
-"The timer will be automatically freed after its time elapses, so be aware "
-"that any reference you might have kept to it will become invalid."
+"The timer will be dereferenced after its time elapses. To preserve the "
+"timer, you can keep a reference to it. See [Reference]."
msgstr ""
#: doc/classes/SceneTreeTimer.xml
@@ -53144,24 +54115,23 @@ msgid ""
"manually (i.e. by using [code]Tween.new()[/code]) are invalid. They can't be "
"used for tweening values, but you can do manual interpolation with [method "
"interpolate_value].\n"
-"A [SceneTreeTween] animation is composed of a sequence of [Tweener]s, which "
-"by default are executed one after another. You can create a sequence by "
-"appending [Tweener]s to the [SceneTreeTween]. Animating something with a "
-"[Tweener] is called tweening. Example tweening sequence looks like this:\n"
+"A tween animation is created by adding [Tweener]s to the [SceneTreeTween] "
+"object, using [method tween_property], [method tween_interval], [method "
+"tween_callback] or [method tween_method]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1)\n"
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"This sequence will make the [code]$Sprite[/code] node turn red, then shrink "
-"and finally the [method Node.queue_free] is called to remove the sprite. See "
-"methods [method tween_property], [method tween_interval], [method "
-"tween_callback] and [method tween_method] for more usage information.\n"
+"This sequence will make the [code]$Sprite[/code] node turn red, then shrink, "
+"before finally calling [method Node.queue_free] to free the sprite. "
+"[Tweener]s are executed one after another by default. This behavior can be "
+"changed using [method parallel] and [method set_parallel].\n"
"When a [Tweener] is created with one of the [code]tween_*[/code] methods, a "
"chained method call can be used to tweak the properties of this [Tweener]. "
-"For example, if you want to set different transition type in the above "
-"example, you can do:\n"
+"For example, if you want to set a different transition type in the above "
+"example, you can use [method set_trans]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1).set_trans(Tween."
@@ -53170,8 +54140,9 @@ msgid ""
"TRANS_BOUNCE)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Most of the [SceneTreeTween] methods can be chained this way too. In this "
-"example the [SceneTreeTween] is bound and have set a default transition:\n"
+"Most of the [SceneTreeTween] methods can be chained this way too. In the "
+"following example the [SceneTreeTween] is bound to the running script's node "
+"and a default transition is set for its [Tweener]s:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween().bind_node(self).set_trans(Tween."
"TRANS_ELASTIC)\n"
@@ -53179,16 +54150,16 @@ msgid ""
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Another interesting use for [SceneTreeTween]s is animating arbitrary set of "
+"Another interesting use for [SceneTreeTween]s is animating arbitrary sets of "
"objects:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"for sprite in get_children():\n"
-" tween.tween_property(sprite, \"position\", Vector2(), 1)\n"
+" tween.tween_property(sprite, \"position\", Vector2(0, 0), 1)\n"
"[/codeblock]\n"
"In the example above, all children of a node are moved one after another to "
"position (0, 0).\n"
-"Some [Tweener]s use transitions and eases. The first accepts an [enum Tween."
+"Some [Tweener]s use transitions and eases. The first accepts a [enum Tween."
"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 Tween.EaseType] constant, and "
@@ -53200,7 +54171,7 @@ msgid ""
"tween_cheatsheet.png]Tween easing and transition types cheatsheet[/url]\n"
"[b]Note:[/b] All [SceneTreeTween]s will automatically start by default. To "
"prevent a [SceneTreeTween] from autostarting, you can call [method stop] "
-"immediately after it was created."
+"immediately after it is created."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53230,21 +54201,24 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
-"Processes the [SceneTreeTween] by given [code]delta[/code] value, in "
-"seconds. Mostly useful when the [SceneTreeTween] is paused, for controlling "
-"it manually. Can also be used to end the [SceneTreeTween] animation "
-"immediately, by using [code]delta[/code] longer than the whole duration.\n"
+"Processes the [SceneTreeTween] by the given [code]delta[/code] value, in "
+"seconds. This is mostly useful for manual control when the [SceneTreeTween] "
+"is paused. It can also be used to end the [SceneTreeTween] animation "
+"immediately, by setting [code]delta[/code] longer than the whole duration of "
+"the [SceneTreeTween] animation.\n"
"Returns [code]true[/code] if the [SceneTreeTween] still has [Tweener]s that "
"haven't finished.\n"
-"[b]Note:[/b] The [SceneTreeTween] will become invalid after finished, but "
-"you can call [method stop] after the step, to keep it and reset."
+"[b]Note:[/b] The [SceneTreeTween] will become invalid in the next processing "
+"frame after its animation finishes. Calling [method stop] after performing "
+"[method custom_step] instead keeps and resets the [SceneTreeTween]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Returns the total time in seconds the [SceneTreeTween] has been animating (i."
-"e. time since it started, not counting pauses etc.). The time is affected by "
-"[method set_speed_scale] and [method stop] will reset it to [code]0[/code].\n"
+"e. the time since it started, not counting pauses etc.). The time is "
+"affected by [method set_speed_scale], and [method stop] will reset it to "
+"[code]0[/code].\n"
"[b]Note:[/b] As it results from accumulating frame deltas, the time returned "
"after the [SceneTreeTween] has finished animating will be slightly greater "
"than the actual [SceneTreeTween] duration."
@@ -53280,11 +54254,10 @@ msgstr ""
msgid ""
"Returns whether the [SceneTreeTween] is valid. A valid [SceneTreeTween] is a "
"[SceneTreeTween] contained by the scene tree (i.e. the array from [method "
-"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). "
-"[SceneTreeTween] might become invalid when it has finished tweening or was "
-"killed, also when created with [code]Tween.new()[/code]. Invalid "
-"[SceneTreeTween] can't have [Tweener]s appended, because it can't animate "
-"them. You can however still use [method interpolate_value]."
+"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). A "
+"[SceneTreeTween] might become invalid when it has finished tweening, is "
+"killed, or when created with [code]SceneTreeTween.new()[/code]. Invalid "
+"[SceneTreeTween]s can't have [Tweener]s appended."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53324,16 +54297,15 @@ msgstr ""
msgid ""
"Sets the number of times the tweening sequence will be repeated, i.e. "
"[code]set_loops(2)[/code] will run the animation twice.\n"
-"Calling this method without arguments will make the [SceneTreeTween] run "
-"infinitely, until it is either killed by [method kill] or by freeing bound "
-"node, or all the animated objects have been freed (which makes further "
+"Calling this method without arguments will make the [Tween] run infinitely, "
+"until either it is killed with [method kill], the [Tween]'s bound node is "
+"freed, or all the animated objects have been freed (which makes further "
"animation impossible).\n"
"[b]Warning:[/b] Make sure to always add some duration/delay when using "
-"infinite loops. 0-duration looped animations (e.g. single [CallbackTweener] "
-"with no delay or [PropertyTweener] with invalid node) are equivalent to "
-"infinite [code]while[/code] loops and will freeze your game. If a "
-"[SceneTreeTween]'s lifetime depends on some node, always use [method "
-"bind_node]."
+"infinite loops. To prevent the game freezing, 0-duration looped animations "
+"(e.g. a single [CallbackTweener] with no delay) are stopped after a small "
+"number of loops, which may produce unexpected results. If a [Tween]'s "
+"lifetime depends on some node, always use [method bind_node]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53395,10 +54367,10 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Creates and appends an [IntervalTweener]. This method can be used to create "
-"delays in the tween animation, as an alternative for using the delay in "
-"other [Tweener]s or when there's no animation (in which case the "
-"[SceneTreeTween] acts as a timer). [code]time[/code] is the length of the "
-"interval, in seconds.\n"
+"delays in the tween animation, as an alternative to using the delay in other "
+"[Tweener]s, or when there's no animation (in which case the [SceneTreeTween] "
+"acts as a timer). [code]time[/code] is the length of the interval, in "
+"seconds.\n"
"Example: creating an interval in code execution.\n"
"[codeblock]\n"
"# ... some code\n"
@@ -53452,8 +54424,8 @@ msgid ""
"Creates and appends a [PropertyTweener]. This method tweens a "
"[code]property[/code] of an [code]object[/code] between an initial value and "
"[code]final_val[/code] in a span of time equal to [code]duration[/code], in "
-"seconds. The initial value by default is a value at the time the tweening of "
-"the [PropertyTweener] start. For example:\n"
+"seconds. The initial value by default is the property's value at the time "
+"the tweening of the [PropertyTweener] starts. For example:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"tween.tween_property($Sprite, \"position\", Vector2(100, 200), 1)\n"
@@ -53484,16 +54456,15 @@ msgid ""
"Emitted when the [SceneTreeTween] has finished all tweening. Never emitted "
"when the [SceneTreeTween] is set to infinite looping (see [method "
"set_loops]).\n"
-"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) after this signal "
-"is emitted, but it doesn't happen immediately, but on the next processing "
-"frame. Calling [method stop] inside the signal callback will preserve the "
-"[SceneTreeTween]."
+"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) in the next "
+"processing frame after this signal is emitted. Calling [method stop] inside "
+"the signal callback will prevent the [SceneTreeTween] from being removed."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Emitted when a full loop is complete (see [method set_loops]), providing the "
-"loop index. This signal is not emitted after final loop, use [signal "
+"loop index. This signal is not emitted after the final loop, use [signal "
"finished] instead for this case."
msgstr ""
@@ -53501,7 +54472,7 @@ msgstr ""
msgid ""
"Emitted when one step of the [SceneTreeTween] is complete, providing the "
"step index. One step is either a single [Tweener] or a group of [Tweener]s "
-"running parallelly."
+"running in parallel."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -54833,7 +55804,12 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-msgid "Scale part of the local transformation."
+msgid ""
+"Scale part of the local transformation.\n"
+"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, the scale values will either be all "
+"positive or all negative."
msgstr ""
#: doc/classes/Spatial.xml
@@ -57464,11 +58440,11 @@ msgstr ""
msgid ""
"Returns [code]true[/code] if this string contains a valid integer.\n"
"[codeblock]\n"
-"print(\"7\".is_valid_int()) # Prints \"True\"\n"
-"print(\"14.6\".is_valid_int()) # Prints \"False\"\n"
-"print(\"L\".is_valid_int()) # Prints \"False\"\n"
-"print(\"+3\".is_valid_int()) # Prints \"True\"\n"
-"print(\"-12\".is_valid_int()) # Prints \"True\"\n"
+"print(\"7\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"14.6\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"L\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"+3\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"-12\".is_valid_integer()) # Prints \"True\"\n"
"[/codeblock]"
msgstr ""
@@ -60934,6 +61910,10 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml
+msgid "If [code]true[/code], this TileMap bakes a navigation region."
+msgstr ""
+
+#: doc/classes/TileMap.xml
msgid "If [code]true[/code], the cell's UVs will be clipped."
msgstr ""
@@ -61040,6 +62020,10 @@ msgid "The TileMap orientation mode. See [enum Mode] for possible values."
msgstr ""
#: doc/classes/TileMap.xml
+msgid "The navigation layers the TileMap generates its navigation regions in."
+msgstr ""
+
+#: doc/classes/TileMap.xml
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 "
@@ -62171,7 +63155,12 @@ msgstr ""
#: doc/classes/Transform2D.xml
msgid ""
"Returns a copy of the transform scaled by the given [code]scale[/code] "
-"factor, using matrix multiplication."
+"factor, using matrix multiplication.\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
#: doc/classes/Transform2D.xml
@@ -62326,7 +63315,18 @@ msgid ""
"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]."
+"to remove it from the [Tree].\n"
+"[b]Incremental search:[/b] Like [ItemList] and [PopupMenu], [Tree] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/Tree.xml
@@ -65842,11 +66842,12 @@ msgid "This enabler will stop [Particles2D] nodes."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _process function."
+msgid "This enabler will stop the parent's [method Node._process] function."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _physics_process function."
+msgid ""
+"This enabler will stop the parent's [method Node._physics_process] function."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
@@ -65886,6 +66887,16 @@ msgid "The VisibilityNotifier's bounding box."
msgstr ""
#: doc/classes/VisibilityNotifier.xml
+msgid ""
+"In addition to checking whether a node is on screen or within a [Camera]'s "
+"view, VisibilityNotifier can also optionally check whether a node is within "
+"a specified maximum distance when using a [Camera] with perspective "
+"projection. This is useful for throttling the performance requirements of "
+"nodes that are far away.\n"
+"[b]Note:[/b] This feature will be disabled if set to 0.0."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier.xml
msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view."
msgstr ""
@@ -70631,6 +71642,16 @@ msgid "The amount of shader rebinds in the frame."
msgstr ""
#: doc/classes/VisualServer.xml
+msgid ""
+"The peak amount of shaders that have been under compilation in the frame.\n"
+"This is useful to know when asynchronous shader compilation has finished for "
+"the current shaders on screen.\n"
+"[b]Note:[/b] For complete certainty, only assume there are no outstanding "
+"compilations when this value is zero for at least two frames in a row.\n"
+"Unimplemented in the GLES2 rendering backend, always returns 0."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
msgid "The amount of surface changes in the frame."
msgstr ""
@@ -73827,8 +74848,8 @@ msgstr ""
#: doc/classes/World.xml
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."
+"scenario, a navigation map and a sound space. Spatial nodes register their "
+"resources into the current world."
msgstr ""
#: doc/classes/World.xml
@@ -73843,8 +74864,13 @@ msgstr ""
#: doc/classes/World.xml
msgid ""
-"The World's fallback_environment will be used if the World's [Environment] "
-"fails or is missing."
+"The World's fallback environment will be used if [member environment] fails "
+"or is missing."
+msgstr ""
+
+#: doc/classes/World.xml
+msgid ""
+"The [RID] of this world's navigation map. Used by the [NavigationServer]."
msgstr ""
#: doc/classes/World.xml
@@ -73862,8 +74888,8 @@ msgstr ""
#: doc/classes/World2D.xml
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."
+"visual scenario, a navigation map and a sound space. 2D nodes register their "
+"resources into the current 2D world."
msgstr ""
#: doc/classes/World2D.xml
@@ -73881,6 +74907,11 @@ msgstr ""
#: doc/classes/World2D.xml
msgid ""
+"The [RID] of this world's navigation map. Used by the [Navigation2DServer]."
+msgstr ""
+
+#: doc/classes/World2D.xml
+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 ""
diff --git a/doc/translations/pl.po b/doc/translations/pl.po
index 0610d7bdaa..640cfea1c8 100644
--- a/doc/translations/pl.po
+++ b/doc/translations/pl.po
@@ -500,9 +500,10 @@ msgstr ""
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml
+#, fuzzy
msgid ""
"Compares two values by checking their actual contents, recursing into any "
-"`Array` or `Dictionary` up to its deepest level.\n"
+"[Array] or [Dictionary] up to its deepest level.\n"
"This compares to [code]==[/code] in a number of ways:\n"
"- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/"
"code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] "
@@ -573,7 +574,7 @@ msgid ""
"- 1.0: Linear\n"
"- Greater than 1.0 (exclusive): Ease in\n"
"[/codeblock]\n"
-"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.4/img/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/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]."
@@ -1564,7 +1565,7 @@ msgid ""
"[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/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/img/"
"smoothstep_ease_comparison.png]Comparison between smoothstep() and ease(x, "
"-1.6521) return values[/url]"
msgstr ""
@@ -3873,6 +3874,12 @@ msgstr ""
#: doc/classes/@GlobalScope.xml
msgid ""
+"Hints that an integer property is a bitmask using the optionally named 2D "
+"navigation layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml
+msgid ""
"Hints that an integer property is a bitmask using the optionally named 3D "
"render layers."
msgstr ""
@@ -3885,6 +3892,12 @@ msgstr ""
#: doc/classes/@GlobalScope.xml
msgid ""
+"Hints that an integer property is a bitmask using the optionally named 3D "
+"navigation layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml
+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]."
@@ -8870,7 +8883,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/AStar.xml
+#: doc/classes/AStar.xml doc/classes/AStar2D.xml
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[/"
@@ -9069,7 +9082,10 @@ msgid ""
msgstr ""
#: doc/classes/AStar2D.xml
-msgid "Returns whether there is a connection/segment between the given points."
+msgid ""
+"Returns whether there is a connection/segment between the given points. 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/AStar2D.xml
@@ -9086,10 +9102,6 @@ msgid ""
msgstr ""
#: doc/classes/AStar2D.xml
-msgid "Deletes the segment between the given points."
-msgstr ""
-
-#: doc/classes/AStar2D.xml
msgid ""
"Returns the closest position to [code]to_position[/code] that resides inside "
"a segment between two connected points.\n"
@@ -9274,7 +9286,9 @@ msgid ""
"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."
+"transmit audio over the network. When capturing audio data from a "
+"microphone, the format of the samples will be stereo 32-bit floating point "
+"PCM."
msgstr ""
#: doc/classes/AudioEffectCapture.xml
@@ -14132,7 +14146,7 @@ msgid ""
msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
-#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/Navigation2D.xml
msgid "Returns the object's [RID]."
msgstr ""
@@ -19621,11 +19635,15 @@ msgid ""
msgstr ""
#: doc/classes/CurveTexture.xml
-msgid "The [code]curve[/code] rendered onto the texture."
-msgstr ""
+#, fuzzy
+msgid "The [Curve] that is rendered onto the texture."
+msgstr "Zwraca sinus parametru."
#: doc/classes/CurveTexture.xml
-msgid "The width of the texture."
+msgid ""
+"The width of the texture (in pixels). Higher values make it possible to "
+"represent high-frequency data better (such as sudden direction changes), at "
+"the cost of increased generation time and memory usage."
msgstr ""
#: doc/classes/CylinderMesh.xml
@@ -19914,6 +19932,13 @@ msgid "Returns the list of keys in the [Dictionary]."
msgstr ""
#: doc/classes/Dictionary.xml
+msgid ""
+"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, "
+"duplicate keys will not be copied over, unless [code]overwrite[/code] is "
+"[code]true[/code]."
+msgstr ""
+
+#: doc/classes/Dictionary.xml
#, fuzzy
msgid "Returns the number of keys in the dictionary."
msgstr "Zwraca resztę z dwóch wektorów."
@@ -21856,9 +21881,23 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide a state data you want to be saved, like view "
+"position, grid settings, folding, etc. 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). This data is automatically saved for "
+"each scene in an [code]editstate[/code] file in the editor metadata folder. "
+"If you want to store global (scene-independent) editor data for your plugin, "
+"you can use [method get_window_layout] instead.\n"
+"Use [method set_state] to restore your saved state.\n"
+"[b]Note:[/b] This method should not be used to save important settings that "
+"should persist with the project.\n"
+"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be "
+"stored and restored correctly.\n"
+"[codeblock]\n"
+"func get_state():\n"
+" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n"
+" return state\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -21869,9 +21908,18 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide the GUI layout of the plugin or any other "
+"data you want to be stored. 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). The data is stored in the "
+"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n"
+"Use [method set_window_layout] to restore your saved layout.\n"
+"[codeblock]\n"
+"func get_window_layout(configuration):\n"
+" configuration.set_value(\"MyPlugin\", \"window_position\", $Window."
+"position)\n"
+" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -21984,11 +22032,30 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the state saved by [method get_state]."
+msgid ""
+"Restore the state saved by [method get_state]. This method is called when "
+"the current scene tab is changed in the editor.\n"
+"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise "
+"it will not be recognized and this method will not be called.\n"
+"[codeblock]\n"
+"func set_state(data):\n"
+" zoom = data.get(\"zoom\", 1.0)\n"
+" preferred_color = data.get(\"my_color\", Color.white)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the plugin GUI layout saved by [method get_window_layout]."
+msgid ""
+"Restore the plugin GUI layout and data saved by [method get_window_layout]. "
+"This method is called for every plugin on editor startup. Use the provided "
+"[code]configuration[/code] file to read your saved data.\n"
+"[codeblock]\n"
+"func set_window_layout(configuration):\n"
+" $Window.position = configuration.get_value(\"MyPlugin\", "
+"\"window_position\", Vector2())\n"
+" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", "
+"Color.white)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -26643,7 +26710,8 @@ msgid ""
"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])."
+"at fixed steps (see [member width]). See also [GradientTexture2D] and "
+"[CurveTexture]."
msgstr ""
#: doc/classes/GradientTexture.xml
@@ -26665,7 +26733,8 @@ msgid ""
"repeat] types using colors obtained from the gradient. 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] and [member height])."
+"[member width] and [member height]). See also [GradientTexture] and "
+"[CurveTexture]."
msgstr ""
#: doc/classes/GradientTexture2D.xml
@@ -27482,6 +27551,15 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+#, fuzzy
+msgid ""
+"If [code]true[/code], this GridMap uses cell navmesh resources to create "
+"navigation regions."
+msgstr ""
+"Jeśli [code]true[/code], potomne węzły są sortowane. W innym przypadku jest "
+"wyłączone."
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid "If [code]true[/code], grid items are centered on the X axis."
msgstr ""
@@ -27532,6 +27610,10 @@ msgid "The assigned [MeshLibrary]."
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+msgid "The navigation layers the GridMap generates its navigation regions in."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
"Overrides the default friction and bounce physics properties for the whole "
"[GridMap]."
@@ -28755,7 +28837,7 @@ msgid ""
" # 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 body = to_json({\"name\": \"Godette\"})\n"
" error = http_request.request(\"https://httpbin.org/post\", [], true, "
"HTTPClient.METHOD_POST, body)\n"
" if error != OK:\n"
@@ -29925,7 +30007,7 @@ msgstr ""
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 "
+"([member 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 "
@@ -30074,10 +30156,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Returns the mouse mode. See the constants for more information."
-msgstr ""
-
-#: doc/classes/Input.xml
msgid ""
"Gets an input vector by specifying four actions for the positive and "
"negative X and Y axes.\n"
@@ -30271,24 +30349,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Sets the mouse mode. See the constants for more information."
-msgstr ""
-
-#: doc/classes/Input.xml
-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
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 "
@@ -30324,6 +30384,24 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
+msgid "Controls the mouse mode. See [enum MouseMode] for more information."
+msgstr ""
+
+#: doc/classes/Input.xml
+msgid ""
+"If [code]true[/code], similar input events sent by the operating system are "
+"accumulated. 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 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
msgid "Emitted when a joypad device has been connected or disconnected."
msgstr ""
@@ -30631,8 +30709,8 @@ msgstr ""
#: doc/classes/InputEventJoypadButton.xml
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]."
+"Represents the pressure the user puts on the button with their finger, if "
+"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]."
msgstr ""
#: doc/classes/InputEventJoypadMotion.xml
@@ -30895,9 +30973,9 @@ 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 "
+"at most. If you need more precise input reporting, set [member Input."
+"use_accumulated_input] to [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."
@@ -31388,7 +31466,18 @@ msgid ""
"[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."
+"fixed_column_width] greater than zero to wrap the text.\n"
+"[b]Incremental search:[/b] Like [PopupMenu] and [Tree], [ItemList] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/ItemList.xml
@@ -35162,12 +35251,18 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Returns the override [Material] for a surface of the [Mesh] resource.\n"
+"[b]Note:[/b] This function only returns [i]override[/i] materials associated "
+"with this [MeshInstance]. Consider using [method get_active_material] or "
+"[method Mesh.surface_get_material] to get materials associated with the "
+"[Mesh] resource."
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the number of surface materials."
-msgstr ""
+#, fuzzy
+msgid "Returns the number of surface override materials."
+msgstr "Zwraca resztę z dwóch wektorów."
#: doc/classes/MeshInstance.xml
msgid ""
@@ -35203,7 +35298,10 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Sets the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Sets the override [Material] for the specified surface of the [Mesh] "
+"resource. This material is associated with this [MeshInstance] rather than "
+"with the [Mesh] resource."
msgstr ""
#: doc/classes/MeshInstance.xml
@@ -35234,9 +35332,10 @@ msgstr ""
#: doc/classes/MeshInstance2D.xml
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\"."
+"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be "
+"automatically created from an existing [Sprite] via a tool in the editor "
+"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to "
+"MeshInstance2D[/b] at the top of the 2D editor viewport."
msgstr ""
#: doc/classes/MeshInstance2D.xml
@@ -36002,6 +36101,9 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"Provides navigation and pathfinding within a collection of "
"[NavigationMesh]es. By default, these will be automatically collected from "
"child [NavigationMeshInstance] nodes. In addition to basic pathfinding, this "
@@ -36042,7 +36144,15 @@ msgid ""
msgstr ""
#: doc/classes/Navigation.xml
+#, fuzzy
+msgid "Returns the [RID] of the navigation map on the [NavigationServer]."
+msgstr "Zwraca sinus parametru."
+
+#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"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, "
@@ -36064,16 +36174,31 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation.get_simple_path] path query."
+msgstr ""
+
+#: doc/classes/Navigation.xml
+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/Navigation.xml doc/classes/Navigation2DServer.xml
+#: doc/classes/NavigationServer.xml
+msgid ""
+"Emitted when a navigation map is updated, when a region moves or is modified."
+msgstr ""
+
#: doc/classes/Navigation2D.xml
msgid "2D navigation and pathfinding node."
msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -36093,6 +36218,9 @@ msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -36102,6 +36230,12 @@ msgstr ""
msgid "The XY plane cell size to use for fields."
msgstr ""
+#: doc/classes/Navigation2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation2D.get_simple_path] path query."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml
msgid "Server interface for low-level 2D navigation access."
msgstr ""
@@ -36118,8 +36252,12 @@ msgid ""
"through scripts.\n"
"For two regions to be connected to each other, they must share a similar "
"edge. An edge is considered connected to another if both of its two vertices "
-"are at a distance less than [member Navigation.edge_connection_margin] to "
-"the respective other edge's vertex.\n"
+"are at a distance less than navigation map [code]edge_connection_margin[/"
+"code] to the respective other edge's vertex.\n"
+"You may assign navigation layers to regions with [method Navigation2DServer."
+"region_set_navigation_layers], which then can be checked upon when "
+"requesting a path with [method Navigation2DServer.map_get_path]. This allows "
+"allowing or forbidding some areas to 2D objects.\n"
"To use the collision avoidance system, you may use agents. You can set an "
"agent's target velocity, then the servers will emit a callback with a "
"modified velocity.\n"
@@ -36150,7 +36288,17 @@ msgstr ""
"skrypcie ,podczas wywołania [method move_and_slide]."
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Callback called at the end of the RVO process."
+msgid ""
+"Callback called at the end of the RVO process. If a callback is created "
+"manually and the agent is placed on a navigation map it will calculate "
+"avoidance for the agent and dispatch the calculated [code]safe_velocity[/"
+"code] to the [code]receiver[/code] object with a signal to the chosen "
+"[code]method[/code] name.\n"
+"[b]Note:[/b] Created callbacks are always processed independently of the "
+"SceneTree state as long as the agent is on a navigation map and not freed. "
+"To disable the dispatch of a callback from an agent use [method "
+"agent_set_callback] again with a [code]null[/code] object as the "
+"[code]receiver[/code]."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -36211,15 +36359,55 @@ msgid "Destroys the given RID."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns all created navigation map [RID]s on the NavigationServer. This "
+"returns both 2D and 3D created navigation maps as there is technically no "
+"distinction between them."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Create a new map."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"This function immediately forces synchronization of the specified navigation "
+"[code]map[/code] [RID]. By default navigation maps are only synchronized at "
+"the end of each physics frame. This function can be used to immediately "
+"(re)calculate all the navigation meshes and region connections of the "
+"navigation map. This makes it possible to query a navigation path for a "
+"changed map immediately and in the same frame (multiple times if needed).\n"
+"Due to technical restrictions the current NavigationServer command queue "
+"will be flushed. This means all already queued update commands for this "
+"physics frame will be executed, even those intended for other maps, regions "
+"and agents not part of the specified map. The expensive computation of the "
+"navigation meshes and region connections of a map will only be done for the "
+"specified map. Other maps will receive the normal synchronization at the end "
+"of the physics frame. Should the specified map receive changes after the "
+"forced update it will update again as well when the other maps receive their "
+"update.\n"
+"Avoidance processing and dispatch of the [code]safe_velocity[/code] signals "
+"is untouched by this function and continues to happen for all maps and "
+"agents at the end of the physics frame.\n"
+"[b]Note:[/b] With great power comes great responsibility. This function "
+"should only be used by users that really know what they are doing and have a "
+"good reason for it. Forcing an immediate update of a navigation map requires "
+"locking the NavigationServer and flushing the entire NavigationServer "
+"command queue. Not only can this severely impact the performance of a game "
+"but it can also introduce bugs if used inappropriately without much "
+"foresight."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns all navigation agents [RID]s that are currently assigned to the "
"requested navigation [code]map[/code]."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
#, fuzzy
msgid "Returns the map cell size."
@@ -36244,7 +36432,10 @@ msgid ""
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Returns the navigation path to reach the destination from the origin."
+msgid ""
+"Returns the navigation path to reach the destination from the origin. "
+"[code]navigation_layers[/code] is a bitmask of all region layers that are "
+"allowed to be in the path."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -36265,6 +36456,12 @@ msgstr ""
msgid "Sets the map active."
msgstr "Zwraca arcus sinus parametru."
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/"
+"b] Currently not implemented."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Set the map cell size used to weld the navigation mesh polygons."
msgstr ""
@@ -36280,15 +36477,78 @@ msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"Returns the ending point of a connection door. [code]connection[/code] is an "
+"index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns the starting point of a connection door. [code]connection[/code] is "
+"an index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns how many connections this [code]region[/code] has with other regions "
+"in the map."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]."
+msgstr "Liczy iloczyn wektorowy tego wektora oraz [code]with[/code]."
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns the navigation map [RID] the requested [code]region[/code] is "
"currently assigned to."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
#, fuzzy
+msgid "Returns the region's navigation layers."
+msgstr "Zwraca sinus parametru."
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]."
+msgstr "Operator logiczny OR ([code]or[/code] or [code]||[/code])."
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns [code]true[/code] if the provided [code]point[/code] in world space "
+"is currently owned by the provided navigation [code]region[/code]. Owned in "
+"this context means that one of the region's navigation mesh polygon faces "
+"has a possible position at the closest distance to this point compared to "
+"all other navigation meshes from other navigation regions that are also "
+"registered on the navigation map of the provided region.\n"
+"If multiple navigation meshes have positions at equal distance the "
+"navigation region whose polygons are processed first wins the ownership. "
+"Polygons are processed in the same order that navigation regions were "
+"registered on the NavigationServer.\n"
+"[b]Note:[/b] If navigation meshes from different navigation regions overlap "
+"(which should be avoided in general) the result might not be what is "
+"expected."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]."
+msgstr "Operator logiczny OR ([code]or[/code] or [code]||[/code])."
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
msgid "Sets the map for the region."
msgstr "Zwraca sinus parametru."
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method Navigation2DServer.map_get_path])."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
#, fuzzy
msgid "Sets the navigation mesh for the region."
@@ -36299,6 +36559,11 @@ msgstr "Singleton [NavigationMeshGenerator]."
msgid "Sets the global transformation for the region."
msgstr "Liczy iloczyn wektorowy tego wektora oraz [code]b[/code]."
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]."
+msgstr "Operator logiczny OR ([code]or[/code] or [code]||[/code])."
+
#: doc/classes/NavigationAgent.xml
msgid "3D agent used in navigation for collision avoidance."
msgstr ""
@@ -36308,9 +36573,16 @@ msgid ""
"3D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationAgent] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World] navigation map. If this node is a child of a [Navigation] "
+"node it will register to the navigation map of the navigation node or the "
+"function [method set_navigation] can be used to set the navigation node "
+"directly. [NavigationAgent] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -36328,7 +36600,15 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-msgid "Returns the path from start to finish in global coordinates."
+msgid ""
+"Returns this agent's current path from start to finish in global "
+"coordinates. The path only updates when the target location is changed or "
+"the agent requires a repath. The path array is not intended to be used in "
+"direct path movement as the agent has its own internal path logic that would "
+"get corrupted by changing the path array manually. Use the intended [method "
+"get_next_location] once every physics frame to receive the next path point "
+"for the agents movement as this function also updates the internal path "
+"logic."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -36344,11 +36624,24 @@ msgid ""
"system."
msgstr ""
-#: doc/classes/NavigationAgent.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
+"Returns the [RID] of the navigation map for this NavigationAgent node. This "
+"function returns always the map set on the NavigationAgent node and not the "
+"map of the abstract agent on the NavigationServer. If the agent map is "
+"changed directly with the NavigationServer API the NavigationAgent node will "
+"not be aware of the map change. Use [method set_navigation_map] to change "
+"the navigation map for the NavigationAgent and also update the agent on the "
+"NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"Returns a [Vector3] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the origin of the agent's parent."
+"Returns the next location in global coordinates that can be moved to, making "
+"sure that there are no static objects in the way. If the agent does not have "
+"a navigation path, it will return the position of the agent's parent. The "
+"use of this function once every physics frame is required to update the "
+"internal path logic of the NavigationAgent."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -36396,6 +36689,12 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"Sets the [RID] of the navigation map this NavigationAgent node should use "
+"and also updates the [code]agent[/code] on the NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"Sets the user desired final location. This will clear the current navigation "
"path."
msgstr ""
@@ -36408,7 +36707,13 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml
-msgid "The agent height offset to match the navigation mesh height."
+msgid ""
+"The NavigationAgent height offset is subtracted from the y-axis value of any "
+"vector path position for this NavigationAgent. The NavigationAgent height "
+"offset does not change or influence the navigation mesh or pathfinding query "
+"result. Additional navigation maps that use regions with navigation meshes "
+"that the developer baked with appropriate agent radius or height values are "
+"required to support different-sized agents."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -36435,26 +36740,53 @@ msgstr ""
msgid "The maximum speed that an agent can move."
msgstr ""
+#: doc/classes/NavigationAgent.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "The distance to search for other agents."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"The distance threshold before a path point is considered to be reached. This "
+"will allow an agent to not have to hit a path point on the path exactly, but "
+"in the area. If this value is set to high the NavigationAgent will skip "
+"points on the path which can lead to leaving the navigation mesh. If this "
+"value is set to low the NavigationAgent will be stuck in a repath loop cause "
+"it will constantly overshoot or undershoot the distance to the next point on "
+"each physics frame update."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"The maximum distance the agent is allowed away from the ideal path to the "
"final location. This can happen due to trying to avoid collisions. When the "
"maximum distance is exceeded, it recalculates the ideal path."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-msgid "The radius of the agent."
+msgid ""
+"The radius of the avoidance agent. This is the \"body\" of the avoidance "
+"agent and not the avoidance maneuver starting radius (which is controlled by "
+"[member neighbor_dist]).\n"
+"Does not affect normal pathfinding. To change an actor's pathfinding radius "
+"bake [NavigationMesh] resources with a different [member NavigationMesh."
+"agent_radius] property and use different navigation maps for each actor size."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"The distance threshold before a target is considered to be reached. This "
-"will allow an agent to not have to hit a point on the path exactly, but in "
-"the area."
+"The distance threshold before the final target point is considered to be "
+"reached. This will allow an agent to not have to hit the point of the final "
+"target exactly, but only the area. If this value is set to low the "
+"NavigationAgent will be stuck in a repath loop cause it will constantly "
+"overshoot or undershoot the distance to the final target point on each "
+"physics frame update."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -36497,9 +36829,16 @@ msgid ""
"2D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationAgent2D] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World2D] navigation map. If this node is a child of a "
+"[Navigation2D] node it will register to the navigation map of the navigation "
+"node or the function [method set_navigation] can be used to set the "
+"navigation node directly. [NavigationAgent2D] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent2D.xml
@@ -36516,13 +36855,6 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent2D.xml
-msgid ""
-"Returns a [Vector2] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the position of the agent's parent."
-msgstr ""
-
-#: doc/classes/NavigationAgent2D.xml
#, fuzzy
msgid "Returns the [RID] of this agent on the [Navigation2DServer]."
msgstr "Zwraca sinus parametru."
@@ -36543,6 +36875,13 @@ msgid ""
"only be enabled on agents that currently require it."
msgstr ""
+#: doc/classes/NavigationAgent2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent2D] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationMesh.xml
msgid "A mesh to approximate the walkable areas and obstacles."
msgstr ""
@@ -36573,8 +36912,8 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
-"Returns whether the specified [code]bit[/code] of the [member geometry/"
-"collision_mask] is set."
+"Returns whether the specified [code]bit[/code] of the [member "
+"geometry_collision_mask] is set."
msgstr ""
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
@@ -36597,9 +36936,9 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/"
-"code] in the [member geometry/collision_mask].\n"
+"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]."
+"code] in the [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
@@ -36613,14 +36952,14 @@ 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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36632,7 +36971,7 @@ 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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36660,13 +36999,17 @@ msgstr ""
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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
-"If [code]true[/code], marks walkable spans as not walkable if the clearance "
-"above the span is less than [member agent/height]."
+"If the baking [AABB] has a volume the navigation mesh baking will be "
+"restricted to its enclosing area."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+msgid "The position offset applied to the [member filter_baking_aabb] [AABB]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36679,13 +37022,19 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]true[/code], marks non-walkable spans as walkable if their maximum "
-"is within [member agent/max_climb] of a walkable neighbor."
+"is within [member agent_max_climb] of a walkable neighbor."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+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
msgid ""
"The physics layers to scan for static colliders.\n"
-"Only used when [member geometry/parsed_geometry_type] is [constant "
+"Only used when [member geometry_parsed_geometry_type] is [constant "
"PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]."
msgstr ""
@@ -36704,7 +37053,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"The name of the group to scan for geometry.\n"
-"Only used when [member geometry/source_geometry_mode] is [constant "
+"Only used when [member geometry_source_geometry_mode] is [constant "
"SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant "
"SOURCE_GEOMETRY_GROUPS_EXPLICIT]."
msgstr ""
@@ -36767,7 +37116,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Parses [StaticBody] colliders as geometry. The collider should be in any of "
-"the layers specified by [member geometry/collision_mask]."
+"the layers specified by [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36789,13 +37138,13 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Scans nodes in a group and their child nodes recursively for geometry. The "
-"group is specified by [member geometry/source_group_name]."
+"group is specified by [member geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Uses nodes in a group for geometry. The group is specified by [member "
-"geometry/source_group_name]."
+"geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36837,7 +37186,15 @@ msgid ""
"geometry for walkable terrain suitable to [NavigationMesh] agent properties "
"by creating a voxel world around the meshes bounding area.\n"
"The finalized navigation mesh is then returned and stored inside the "
-"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes."
+"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] "
+"nodes.\n"
+"[b]Note:[/b] Using meshes to not only define walkable surfaces but also "
+"obstruct navigation baking does not always work. The navigation baking has "
+"no concept of what is a geometry \"inside\" when dealing with mesh source "
+"geometry and this is intentional. Depending on current baking parameters, as "
+"soon as the obstructing mesh is large enough to fit a navigation mesh area "
+"inside, the baking will generate navigation mesh areas that are inside the "
+"obstructing source geometry mesh."
msgstr ""
#: doc/classes/NavigationMeshGenerator.xml
@@ -36845,8 +37202,8 @@ msgid ""
"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child "
"nodes under the provided [code]root_node[/code] or a specific group of nodes "
"for potential source geometry. The parse behavior can be controlled with the "
-"[member NavigationMesh.geometry/parsed_geometry_type] and [member "
-"NavigationMesh.geometry/source_geometry_mode] properties on the "
+"[member NavigationMesh.geometry_parsed_geometry_type] and [member "
+"NavigationMesh.geometry_source_geometry_mode] properties on the "
"[NavigationMesh] resource."
msgstr ""
@@ -36864,8 +37221,21 @@ msgstr ""
#: doc/classes/NavigationMeshInstance.xml
msgid ""
"An instance of a [NavigationMesh]. It tells the [Navigation] node what can "
-"be navigated and what cannot, based on the [NavigationMesh] resource. This "
-"should be a child of a [Navigation] node."
+"be navigated and what cannot, based on the [NavigationMesh] resource.\n"
+"By default this node will register to the default [World] navigation map. If "
+"this node is a child of a [Navigation] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method NavigationServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The cost of entering this region from another region can be controlled with "
+"the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The cost of traveling distances inside this region can be controlled with "
+"the [member travel_cost] multiplier."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
@@ -36894,11 +37264,35 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding enters this region's navmesh from another regions navmesh "
+"the [code]enter_cost[/code] value is added to the path distance for "
+"determining the shortest path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationMesh] "
+"belongs to. On path requests with [method NavigationServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
#, fuzzy
msgid "The [NavigationMesh] resource to use."
msgstr "Singleton [NavigationMeshGenerator]."
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding moves inside this region's navmesh the traveled distances "
+"are multiplied with [code]travel_cost[/code] for determining the shortest "
+"path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
msgid "Notifies when the navigation mesh bake operation is completed."
msgstr ""
@@ -36915,7 +37309,9 @@ msgid ""
"3D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationObstacle] is physics safe."
+"[NavigationObstacle] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle.xml
@@ -36956,7 +37352,9 @@ msgid ""
"2D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationObstacle2D] is physics safe."
+"[NavigationObstacle2D] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle2D.xml
@@ -37037,6 +37435,14 @@ msgstr ""
#: doc/classes/NavigationPolygon.xml
msgid ""
+"Returns the [NavigationMesh] resulting from this navigation polygon. This "
+"navmesh can be used to update the navmesh of a region with the [method "
+"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server "
+"behind the scene)."
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml
+msgid ""
"Returns a [PoolVector2Array] containing the vertices of an outline that was "
"created in the editor or by script."
msgstr ""
@@ -37073,6 +37479,30 @@ msgid ""
msgstr ""
#: doc/classes/NavigationPolygonInstance.xml
+msgid "A region of the 2D navigation map."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A region of the navigation map. It tells the [Navigation2DServer] what can "
+"be navigated and what cannot, based on its [NavigationPolygon] resource.\n"
+"By default this node will register to the default [World2D] navigation map. "
+"If this node is a child of a [Navigation2D] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The pathfinding cost of entering this region from another region can be "
+"controlled with the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The pathfinding cost of traveling distances inside this region can be "
+"controlled with the [member travel_cost] multiplier."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
msgid ""
"Returns the [RID] of this region on the [Navigation2DServer]. Combined with "
"[method Navigation2DServer.map_get_closest_point_owner] can be used to "
@@ -37080,6 +37510,23 @@ msgid ""
"navigation map."
msgstr ""
+#: doc/classes/NavigationPolygonInstance.xml
+msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationPolygon] "
+"belongs to. On path requests with [method Navigation2DServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+#, fuzzy
+msgid "The [NavigationPolygon] resource to use."
+msgstr "Singleton [NavigationMeshGenerator]."
+
#: doc/classes/NavigationServer.xml
msgid "Server interface for low-level 3D navigation access."
msgstr ""
@@ -37159,6 +37606,12 @@ msgid "Bakes the navigation mesh."
msgstr ""
#: doc/classes/NavigationServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method NavigationServer.map_get_path])."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
msgid "Control activation of this server."
msgstr ""
@@ -38625,13 +39078,19 @@ msgstr ""
#: doc/classes/Node.xml
msgid ""
"Emitted when a child node enters the scene tree, either because it entered "
-"on its own or because this node entered with it."
+"on its own or because this node entered with it.\n"
+"This signal is emitted [i]after[/i] the child node's own [constant "
+"NOTIFICATION_ENTER_TREE] and [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
msgid ""
-"Emitted when a child node exits the scene tree, either because it exited on "
-"its own or because this node exited."
+"Emitted when a child node is about to exit the scene tree, either because it "
+"is being removed or freed directly, or because this node is exiting the "
+"tree.\n"
+"When this signal is received, the child [code]node[/code] is still in the "
+"tree and valid. This signal is emitted [i]after[/i] the child node's own "
+"[signal tree_exiting] and [constant NOTIFICATION_EXIT_TREE]."
msgstr ""
#: doc/classes/Node.xml
@@ -38643,7 +39102,10 @@ msgid "Emitted when the node is renamed."
msgstr ""
#: doc/classes/Node.xml
-msgid "Emitted when the node enters the tree."
+msgid ""
+"Emitted when the node enters the tree.\n"
+"This signal is emitted [i]after[/i] the related [constant "
+"NOTIFICATION_ENTER_TREE] notification."
msgstr ""
#: doc/classes/Node.xml
@@ -38653,15 +39115,21 @@ msgstr ""
#: doc/classes/Node.xml
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)."
+"the right place for de-initialization (or a \"destructor\", if you will).\n"
+"This signal is emitted [i]before[/i] the related [constant "
+"NOTIFICATION_EXIT_TREE] notification."
msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node enters a [SceneTree]."
+msgid ""
+"Notification received when the node enters a [SceneTree].\n"
+"This notification is emitted [i]before[/i] the related [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node is about to exit a [SceneTree]."
+msgid ""
+"Notification received when the node is about to exit a [SceneTree].\n"
+"This notification is emitted [i]after[/i] the related [signal tree_exiting]."
msgstr ""
#: doc/classes/Node.xml
@@ -38922,7 +39390,13 @@ msgid "Rotation in degrees, relative to the node's parent."
msgstr ""
#: doc/classes/Node2D.xml
-msgid "The node's scale. Unscaled value: [code](1, 1)[/code]."
+msgid ""
+"The node's scale. Unscaled value: [code](1, 1)[/code].\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
#: doc/classes/Node2D.xml
@@ -40370,6 +40844,10 @@ msgid ""
" if argument.find(\"=\") > -1:\n"
" var key_value = argument.split(\"=\")\n"
" arguments[key_value[0].lstrip(\"--\")] = key_value[1]\n"
+" else:\n"
+" # Options without an argument will be present in the dictionary,\n"
+" # with the value set to an empty string.\n"
+" arguments[argument.lstrip(\"--\")] = \"\"\n"
"[/codeblock]"
msgstr ""
@@ -41034,8 +41512,15 @@ msgstr ""
msgid ""
"Moves the file or directory to the system's recycle bin. See also [method "
"Directory.remove].\n"
+"The method takes only global paths, so you may need to use [method "
+"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/"
+"code] as it will not work in exported project.\n"
"[b]Note:[/b] If the user has disabled the recycle bin on their system, the "
-"file will be permanently deleted instead."
+"file will be permanently deleted instead.\n"
+"[codeblock]\n"
+"var file_to_remove = \"user://slot1.sav\"\n"
+"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/OS.xml
@@ -45903,7 +46388,18 @@ msgstr ""
#: doc/classes/PopupMenu.xml
msgid ""
"[PopupMenu] is a [Control] that displays a list of options. They are popular "
-"in toolbars or context menus."
+"in toolbars or context menus.\n"
+"[b]Incremental search:[/b] Like [ItemList] and [Tree], [PopupMenu] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/PopupMenu.xml
@@ -47413,7 +47909,16 @@ msgid ""
msgstr ""
#: doc/classes/ProjectSettings.xml
-msgid "Message to be displayed before the backtrace when the engine crashes."
+msgid ""
+"Message to be displayed before the backtrace when the engine crashes. By "
+"default, this message is only used in exported projects due to the editor-"
+"only override applied to this setting."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Editor-only override for [member debug/settings/crash_handler/message]. Does "
+"not affect exported projects in debug or release mode."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -47658,6 +48163,18 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default naming style for scene files to infer from their root nodes. "
+"Possible options are:\n"
+"- [code]0[/code] (Auto): Uses the scene root name as is without changing its "
+"casing.\n"
+"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase "
+"casing.\n"
+"- [code]2[/code] (snake_case): Converts the scene root name to snake_case "
+"casing."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -47883,6 +48400,198 @@ msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 1."
msgstr ""
@@ -48091,6 +48800,198 @@ msgid "Optional name for the 2D render layer 9."
msgstr ""
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 1."
msgstr ""
@@ -48358,6 +49259,49 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default cell height for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_height].\n"
+"[b]Note:[/b] Currently not implemented."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 2D navigation maps. See [method "
+"Navigation2DServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell height for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_height]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 3D navigation maps. See [method "
+"NavigationServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default map up vector for 3D navigation maps. See [method NavigationServer."
+"map_set_up]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -49031,20 +49975,28 @@ msgid ""
"cause.\n"
"The default value is a conservative one, so you are advised to tweak it "
"according to the hardware you are targeting.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"The default is a very conservative override for [code]rendering/gles3/"
-"shaders/max_concurrent_compiles[/code].\n"
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
"Depending on the specific devices you are targeting, you may want to raise "
"it.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
+"Depending on the specific browsers you are targeting, you may want to raise "
+"it.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -49052,19 +50004,28 @@ msgid ""
"The maximum size, in megabytes, that the ubershader cache can grow up to. On "
"startup, the least recently used entries will be deleted until the total "
"size is within bounds.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/ubershader_cache_size_mb[/"
-"code], so a smaller maximum size can be configured for mobile platforms, "
-"where storage space is more limited.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for mobile platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for web platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] Currently, shader caching is generally unavailable on web "
+"platforms.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -49096,14 +50057,22 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/shader_compilation_mode[/"
-"code], so asynchronous compilation can be disabled for mobile.\n"
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on mobile platforms.\n"
"You may want to do that since mobile GPUs generally won't support "
"ubershaders due to their complexity."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on web platforms.\n"
+"You may want to do that since certain browsers (especially on mobile "
+"platforms) generally won't support ubershaders due to their complexity."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
@@ -49860,7 +50829,6 @@ msgid ""
"- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/"
"code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, "
"small grid radius values may lead to unwanted groupings.\n"
-"[/codeblock]\n"
"[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more "
"effective and faster [VisibilityNotifier] functionality. For most use cases, "
"[method Vector3.distance_to] or [method Vector3.distance_squared_to] are "
@@ -52017,6 +52985,22 @@ msgid "Makes text fill width."
msgstr ""
#: doc/classes/RichTextLabel.xml
+msgid "Aligns top of the inline image to the top of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns center of the inline image to the center of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns bottom of the inline image to the baseline of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns bottom of the inline image to the bottom of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
msgid "Each list item has a number marker."
msgstr ""
@@ -53757,8 +54741,8 @@ msgid ""
" yield(get_tree().create_timer(1.0), \"timeout\")\n"
" print(\"Timer ended.\")\n"
"[/codeblock]\n"
-"The timer will be automatically freed after its time elapses, so be aware "
-"that any reference you might have kept to it will become invalid."
+"The timer will be dereferenced after its time elapses. To preserve the "
+"timer, you can keep a reference to it. See [Reference]."
msgstr ""
#: doc/classes/SceneTreeTimer.xml
@@ -53790,24 +54774,23 @@ msgid ""
"manually (i.e. by using [code]Tween.new()[/code]) are invalid. They can't be "
"used for tweening values, but you can do manual interpolation with [method "
"interpolate_value].\n"
-"A [SceneTreeTween] animation is composed of a sequence of [Tweener]s, which "
-"by default are executed one after another. You can create a sequence by "
-"appending [Tweener]s to the [SceneTreeTween]. Animating something with a "
-"[Tweener] is called tweening. Example tweening sequence looks like this:\n"
+"A tween animation is created by adding [Tweener]s to the [SceneTreeTween] "
+"object, using [method tween_property], [method tween_interval], [method "
+"tween_callback] or [method tween_method]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1)\n"
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"This sequence will make the [code]$Sprite[/code] node turn red, then shrink "
-"and finally the [method Node.queue_free] is called to remove the sprite. See "
-"methods [method tween_property], [method tween_interval], [method "
-"tween_callback] and [method tween_method] for more usage information.\n"
+"This sequence will make the [code]$Sprite[/code] node turn red, then shrink, "
+"before finally calling [method Node.queue_free] to free the sprite. "
+"[Tweener]s are executed one after another by default. This behavior can be "
+"changed using [method parallel] and [method set_parallel].\n"
"When a [Tweener] is created with one of the [code]tween_*[/code] methods, a "
"chained method call can be used to tweak the properties of this [Tweener]. "
-"For example, if you want to set different transition type in the above "
-"example, you can do:\n"
+"For example, if you want to set a different transition type in the above "
+"example, you can use [method set_trans]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1).set_trans(Tween."
@@ -53816,8 +54799,9 @@ msgid ""
"TRANS_BOUNCE)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Most of the [SceneTreeTween] methods can be chained this way too. In this "
-"example the [SceneTreeTween] is bound and have set a default transition:\n"
+"Most of the [SceneTreeTween] methods can be chained this way too. In the "
+"following example the [SceneTreeTween] is bound to the running script's node "
+"and a default transition is set for its [Tweener]s:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween().bind_node(self).set_trans(Tween."
"TRANS_ELASTIC)\n"
@@ -53825,16 +54809,16 @@ msgid ""
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Another interesting use for [SceneTreeTween]s is animating arbitrary set of "
+"Another interesting use for [SceneTreeTween]s is animating arbitrary sets of "
"objects:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"for sprite in get_children():\n"
-" tween.tween_property(sprite, \"position\", Vector2(), 1)\n"
+" tween.tween_property(sprite, \"position\", Vector2(0, 0), 1)\n"
"[/codeblock]\n"
"In the example above, all children of a node are moved one after another to "
"position (0, 0).\n"
-"Some [Tweener]s use transitions and eases. The first accepts an [enum Tween."
+"Some [Tweener]s use transitions and eases. The first accepts a [enum Tween."
"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 Tween.EaseType] constant, and "
@@ -53846,7 +54830,7 @@ msgid ""
"tween_cheatsheet.png]Tween easing and transition types cheatsheet[/url]\n"
"[b]Note:[/b] All [SceneTreeTween]s will automatically start by default. To "
"prevent a [SceneTreeTween] from autostarting, you can call [method stop] "
-"immediately after it was created."
+"immediately after it is created."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53876,21 +54860,24 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
-"Processes the [SceneTreeTween] by given [code]delta[/code] value, in "
-"seconds. Mostly useful when the [SceneTreeTween] is paused, for controlling "
-"it manually. Can also be used to end the [SceneTreeTween] animation "
-"immediately, by using [code]delta[/code] longer than the whole duration.\n"
+"Processes the [SceneTreeTween] by the given [code]delta[/code] value, in "
+"seconds. This is mostly useful for manual control when the [SceneTreeTween] "
+"is paused. It can also be used to end the [SceneTreeTween] animation "
+"immediately, by setting [code]delta[/code] longer than the whole duration of "
+"the [SceneTreeTween] animation.\n"
"Returns [code]true[/code] if the [SceneTreeTween] still has [Tweener]s that "
"haven't finished.\n"
-"[b]Note:[/b] The [SceneTreeTween] will become invalid after finished, but "
-"you can call [method stop] after the step, to keep it and reset."
+"[b]Note:[/b] The [SceneTreeTween] will become invalid in the next processing "
+"frame after its animation finishes. Calling [method stop] after performing "
+"[method custom_step] instead keeps and resets the [SceneTreeTween]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Returns the total time in seconds the [SceneTreeTween] has been animating (i."
-"e. time since it started, not counting pauses etc.). The time is affected by "
-"[method set_speed_scale] and [method stop] will reset it to [code]0[/code].\n"
+"e. the time since it started, not counting pauses etc.). The time is "
+"affected by [method set_speed_scale], and [method stop] will reset it to "
+"[code]0[/code].\n"
"[b]Note:[/b] As it results from accumulating frame deltas, the time returned "
"after the [SceneTreeTween] has finished animating will be slightly greater "
"than the actual [SceneTreeTween] duration."
@@ -53926,11 +54913,10 @@ msgstr ""
msgid ""
"Returns whether the [SceneTreeTween] is valid. A valid [SceneTreeTween] is a "
"[SceneTreeTween] contained by the scene tree (i.e. the array from [method "
-"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). "
-"[SceneTreeTween] might become invalid when it has finished tweening or was "
-"killed, also when created with [code]Tween.new()[/code]. Invalid "
-"[SceneTreeTween] can't have [Tweener]s appended, because it can't animate "
-"them. You can however still use [method interpolate_value]."
+"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). A "
+"[SceneTreeTween] might become invalid when it has finished tweening, is "
+"killed, or when created with [code]SceneTreeTween.new()[/code]. Invalid "
+"[SceneTreeTween]s can't have [Tweener]s appended."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53970,16 +54956,15 @@ msgstr ""
msgid ""
"Sets the number of times the tweening sequence will be repeated, i.e. "
"[code]set_loops(2)[/code] will run the animation twice.\n"
-"Calling this method without arguments will make the [SceneTreeTween] run "
-"infinitely, until it is either killed by [method kill] or by freeing bound "
-"node, or all the animated objects have been freed (which makes further "
+"Calling this method without arguments will make the [Tween] run infinitely, "
+"until either it is killed with [method kill], the [Tween]'s bound node is "
+"freed, or all the animated objects have been freed (which makes further "
"animation impossible).\n"
"[b]Warning:[/b] Make sure to always add some duration/delay when using "
-"infinite loops. 0-duration looped animations (e.g. single [CallbackTweener] "
-"with no delay or [PropertyTweener] with invalid node) are equivalent to "
-"infinite [code]while[/code] loops and will freeze your game. If a "
-"[SceneTreeTween]'s lifetime depends on some node, always use [method "
-"bind_node]."
+"infinite loops. To prevent the game freezing, 0-duration looped animations "
+"(e.g. a single [CallbackTweener] with no delay) are stopped after a small "
+"number of loops, which may produce unexpected results. If a [Tween]'s "
+"lifetime depends on some node, always use [method bind_node]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -54041,10 +55026,10 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Creates and appends an [IntervalTweener]. This method can be used to create "
-"delays in the tween animation, as an alternative for using the delay in "
-"other [Tweener]s or when there's no animation (in which case the "
-"[SceneTreeTween] acts as a timer). [code]time[/code] is the length of the "
-"interval, in seconds.\n"
+"delays in the tween animation, as an alternative to using the delay in other "
+"[Tweener]s, or when there's no animation (in which case the [SceneTreeTween] "
+"acts as a timer). [code]time[/code] is the length of the interval, in "
+"seconds.\n"
"Example: creating an interval in code execution.\n"
"[codeblock]\n"
"# ... some code\n"
@@ -54098,8 +55083,8 @@ msgid ""
"Creates and appends a [PropertyTweener]. This method tweens a "
"[code]property[/code] of an [code]object[/code] between an initial value and "
"[code]final_val[/code] in a span of time equal to [code]duration[/code], in "
-"seconds. The initial value by default is a value at the time the tweening of "
-"the [PropertyTweener] start. For example:\n"
+"seconds. The initial value by default is the property's value at the time "
+"the tweening of the [PropertyTweener] starts. For example:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"tween.tween_property($Sprite, \"position\", Vector2(100, 200), 1)\n"
@@ -54130,16 +55115,15 @@ msgid ""
"Emitted when the [SceneTreeTween] has finished all tweening. Never emitted "
"when the [SceneTreeTween] is set to infinite looping (see [method "
"set_loops]).\n"
-"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) after this signal "
-"is emitted, but it doesn't happen immediately, but on the next processing "
-"frame. Calling [method stop] inside the signal callback will preserve the "
-"[SceneTreeTween]."
+"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) in the next "
+"processing frame after this signal is emitted. Calling [method stop] inside "
+"the signal callback will prevent the [SceneTreeTween] from being removed."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Emitted when a full loop is complete (see [method set_loops]), providing the "
-"loop index. This signal is not emitted after final loop, use [signal "
+"loop index. This signal is not emitted after the final loop, use [signal "
"finished] instead for this case."
msgstr ""
@@ -54147,7 +55131,7 @@ msgstr ""
msgid ""
"Emitted when one step of the [SceneTreeTween] is complete, providing the "
"step index. One step is either a single [Tweener] or a group of [Tweener]s "
-"running parallelly."
+"running in parallel."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -55480,7 +56464,12 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-msgid "Scale part of the local transformation."
+msgid ""
+"Scale part of the local transformation.\n"
+"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, the scale values will either be all "
+"positive or all negative."
msgstr ""
#: doc/classes/Spatial.xml
@@ -58116,11 +59105,11 @@ msgstr ""
msgid ""
"Returns [code]true[/code] if this string contains a valid integer.\n"
"[codeblock]\n"
-"print(\"7\".is_valid_int()) # Prints \"True\"\n"
-"print(\"14.6\".is_valid_int()) # Prints \"False\"\n"
-"print(\"L\".is_valid_int()) # Prints \"False\"\n"
-"print(\"+3\".is_valid_int()) # Prints \"True\"\n"
-"print(\"-12\".is_valid_int()) # Prints \"True\"\n"
+"print(\"7\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"14.6\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"L\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"+3\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"-12\".is_valid_integer()) # Prints \"True\"\n"
"[/codeblock]"
msgstr ""
@@ -61606,6 +62595,13 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml
+#, fuzzy
+msgid "If [code]true[/code], this TileMap bakes a navigation region."
+msgstr ""
+"Jeśli [code]true[/code], potomne węzły są sortowane. W innym przypadku jest "
+"wyłączone."
+
+#: doc/classes/TileMap.xml
msgid "If [code]true[/code], the cell's UVs will be clipped."
msgstr ""
@@ -61712,6 +62708,10 @@ msgid "The TileMap orientation mode. See [enum Mode] for possible values."
msgstr ""
#: doc/classes/TileMap.xml
+msgid "The navigation layers the TileMap generates its navigation regions in."
+msgstr ""
+
+#: doc/classes/TileMap.xml
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 "
@@ -62843,7 +63843,12 @@ msgstr ""
#: doc/classes/Transform2D.xml
msgid ""
"Returns a copy of the transform scaled by the given [code]scale[/code] "
-"factor, using matrix multiplication."
+"factor, using matrix multiplication.\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
#: doc/classes/Transform2D.xml
@@ -62999,7 +64004,18 @@ msgid ""
"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]."
+"to remove it from the [Tree].\n"
+"[b]Incremental search:[/b] Like [ItemList] and [PopupMenu], [Tree] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/Tree.xml
@@ -66538,11 +67554,12 @@ msgid "This enabler will stop [Particles2D] nodes."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _process function."
+msgid "This enabler will stop the parent's [method Node._process] function."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _physics_process function."
+msgid ""
+"This enabler will stop the parent's [method Node._physics_process] function."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
@@ -66582,6 +67599,16 @@ msgid "The VisibilityNotifier's bounding box."
msgstr ""
#: doc/classes/VisibilityNotifier.xml
+msgid ""
+"In addition to checking whether a node is on screen or within a [Camera]'s "
+"view, VisibilityNotifier can also optionally check whether a node is within "
+"a specified maximum distance when using a [Camera] with perspective "
+"projection. This is useful for throttling the performance requirements of "
+"nodes that are far away.\n"
+"[b]Note:[/b] This feature will be disabled if set to 0.0."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier.xml
msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view."
msgstr ""
@@ -71357,6 +72384,16 @@ msgid "The amount of shader rebinds in the frame."
msgstr ""
#: doc/classes/VisualServer.xml
+msgid ""
+"The peak amount of shaders that have been under compilation in the frame.\n"
+"This is useful to know when asynchronous shader compilation has finished for "
+"the current shaders on screen.\n"
+"[b]Note:[/b] For complete certainty, only assume there are no outstanding "
+"compilations when this value is zero for at least two frames in a row.\n"
+"Unimplemented in the GLES2 rendering backend, always returns 0."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
msgid "The amount of surface changes in the frame."
msgstr ""
@@ -74559,8 +75596,8 @@ msgstr ""
#: doc/classes/World.xml
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."
+"scenario, a navigation map and a sound space. Spatial nodes register their "
+"resources into the current world."
msgstr ""
#: doc/classes/World.xml
@@ -74575,11 +75612,17 @@ msgstr ""
#: doc/classes/World.xml
msgid ""
-"The World's fallback_environment will be used if the World's [Environment] "
-"fails or is missing."
+"The World's fallback environment will be used if [member environment] fails "
+"or is missing."
msgstr ""
#: doc/classes/World.xml
+#, fuzzy
+msgid ""
+"The [RID] of this world's navigation map. Used by the [NavigationServer]."
+msgstr "Zwraca sinus parametru."
+
+#: doc/classes/World.xml
msgid "The World's visual scenario."
msgstr ""
@@ -74594,8 +75637,8 @@ msgstr ""
#: doc/classes/World2D.xml
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."
+"visual scenario, a navigation map and a sound space. 2D nodes register their "
+"resources into the current 2D world."
msgstr ""
#: doc/classes/World2D.xml
@@ -74612,6 +75655,12 @@ msgid ""
msgstr ""
#: doc/classes/World2D.xml
+#, fuzzy
+msgid ""
+"The [RID] of this world's navigation map. Used by the [Navigation2DServer]."
+msgstr "Zwraca sinus parametru."
+
+#: doc/classes/World2D.xml
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."
diff --git a/doc/translations/pt.po b/doc/translations/pt.po
index b4505ad2b5..54c5f5f2ef 100644
--- a/doc/translations/pt.po
+++ b/doc/translations/pt.po
@@ -8,12 +8,13 @@
# Felipe SiFa <felipe@logus.digital>, 2022.
# Renu <ifpilucas@gmail.com>, 2022.
# Diogo Gomes <dgomes@graphnode.com>, 2022.
+# El_ExpertPlayer <xpertnathan37@gmail.com>, 2022.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2022-04-29 02:54+0000\n"
-"Last-Translator: Diogo Gomes <dgomes@graphnode.com>\n"
+"PO-Revision-Date: 2022-06-13 03:39+0000\n"
+"Last-Translator: El_ExpertPlayer <xpertnathan37@gmail.com>\n"
"Language-Team: Portuguese <https://hosted.weblate.org/projects/godot-engine/"
"godot-class-reference/pt/>\n"
"Language: pt\n"
@@ -21,7 +22,7 @@ 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.12.1-dev\n"
+"X-Generator: Weblate 4.13-dev\n"
#: doc/tools/make_rst.py
msgid "Description"
@@ -64,9 +65,8 @@ msgid "Method Descriptions"
msgstr "Descrições de Métodos"
#: doc/tools/make_rst.py
-#, fuzzy
msgid "Theme Property Descriptions"
-msgstr "Descrições de propriedades"
+msgstr "Descrições de Propriedades do Tema"
#: doc/tools/make_rst.py
msgid "Inherits:"
@@ -82,35 +82,40 @@ msgstr ""
#: doc/tools/make_rst.py
msgid "Default"
-msgstr ""
+msgstr "Padrão"
#: doc/tools/make_rst.py
msgid "Setter"
-msgstr ""
+msgstr "Definidor"
#: doc/tools/make_rst.py
msgid "value"
-msgstr ""
+msgstr "valor"
#: doc/tools/make_rst.py
msgid "Getter"
-msgstr ""
+msgstr "Buscador"
#: doc/tools/make_rst.py
msgid ""
"This method should typically be overridden by the user to have any effect."
msgstr ""
+"Este método normalmente deve ser substituído pelo usuário para ter algum "
+"efeito."
#: doc/tools/make_rst.py
msgid ""
"This method has no side effects. It doesn't modify any of the instance's "
"member variables."
msgstr ""
+"Este método não tem efeito colateral. Não modifica nenhuma variável membro "
+"da instancia."
#: doc/tools/make_rst.py
msgid ""
"This method accepts any number of arguments after the ones described here."
msgstr ""
+"Este método aceita qualquer número de argumentos após os descritos aqui."
#: doc/tools/make_rst.py
msgid "This method is used to construct a type."
@@ -129,6 +134,8 @@ msgid ""
"This method describes a valid operator to use with this type as left-hand "
"operand."
msgstr ""
+"Este método descreve um operador válido para usar com este tipo como "
+"operando à esquerda."
#: modules/gdscript/doc_classes/@GDScript.xml
msgid "Built-in GDScript functions."
@@ -488,7 +495,7 @@ msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
msgid ""
"Compares two values by checking their actual contents, recursing into any "
-"`Array` or `Dictionary` up to its deepest level.\n"
+"[Array] or [Dictionary] up to its deepest level.\n"
"This compares to [code]==[/code] in a number of ways:\n"
"- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/"
"code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] "
@@ -527,6 +534,7 @@ msgstr ""
"inst2dict]), de volta numa instância. Útil para desserialização."
#: modules/gdscript/doc_classes/@GDScript.xml
+#, 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 "
@@ -541,7 +549,7 @@ msgid ""
"- 1.0: Linear\n"
"- Greater than 1.0 (exclusive): Ease in\n"
"[/codeblock]\n"
-"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.4/img/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/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]."
@@ -813,6 +821,22 @@ msgid ""
"[/codeblock]\n"
"See also [method lerp] which performs the reverse of this operation."
msgstr ""
+"Returna um fator de interpolação ou extrapolação considerando o alcance "
+"especifico em [code]from[/code] e [code]to[/code], e o valor interpolado "
+"especificado em [code]weight[/code]. O valor retornado será entre [code]0.0[/"
+"code] e [code]1.0[/code] se [code]weight[/code] é entre [code]from[/code] e "
+"[code]to[/code] (inclusivo). Se [code]weight[/code] é localizado fora desse "
+"alcance, então um fator de extrapolação será retornado (retorna valor menor "
+"que [code]0.0[/code] ou maior que [code]1.0[/code]).\n"
+"[codeblock]\n"
+"# O raio de interpolação na chamada de `lerp()` abaixo é 0.75.\n"
+"var centro = lerp(20, 30, 0.75)\n"
+"# `centro` agora é 27.5.\n"
+"# Agora, pretendemos ter esquecido o raio original e queremos de volta.\n"
+"var raio = inverse_lerp(20, 30, 27.5)\n"
+"# `raio` agora é 0.75.\n"
+"[/codeblock]\n"
+"Veja também [method lerp] que realiza o inverso desta operação."
#: modules/gdscript/doc_classes/@GDScript.xml
msgid ""
@@ -1663,7 +1687,7 @@ msgid ""
"[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/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/img/"
"smoothstep_ease_comparison.png]Comparison between smoothstep() and ease(x, "
"-1.6521) return values[/url]"
msgstr ""
@@ -4147,6 +4171,12 @@ msgstr ""
#: doc/classes/@GlobalScope.xml
msgid ""
+"Hints that an integer property is a bitmask using the optionally named 2D "
+"navigation layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml
+msgid ""
"Hints that an integer property is a bitmask using the optionally named 3D "
"render layers."
msgstr ""
@@ -4159,6 +4189,12 @@ msgstr ""
#: doc/classes/@GlobalScope.xml
msgid ""
+"Hints that an integer property is a bitmask using the optionally named 3D "
+"navigation layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml
+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]."
@@ -9155,7 +9191,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/AStar.xml
+#: doc/classes/AStar.xml doc/classes/AStar2D.xml
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[/"
@@ -9354,7 +9390,10 @@ msgid ""
msgstr ""
#: doc/classes/AStar2D.xml
-msgid "Returns whether there is a connection/segment between the given points."
+msgid ""
+"Returns whether there is a connection/segment between the given points. 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/AStar2D.xml
@@ -9371,10 +9410,6 @@ msgid ""
msgstr ""
#: doc/classes/AStar2D.xml
-msgid "Deletes the segment between the given points."
-msgstr ""
-
-#: doc/classes/AStar2D.xml
msgid ""
"Returns the closest position to [code]to_position[/code] that resides inside "
"a segment between two connected points.\n"
@@ -9559,7 +9594,9 @@ msgid ""
"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."
+"transmit audio over the network. When capturing audio data from a "
+"microphone, the format of the samples will be stereo 32-bit floating point "
+"PCM."
msgstr ""
#: doc/classes/AudioEffectCapture.xml
@@ -14433,7 +14470,7 @@ msgid ""
msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
-#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/Navigation2D.xml
msgid "Returns the object's [RID]."
msgstr "Retorna o [RID] do objeto."
@@ -19931,12 +19968,16 @@ msgid ""
msgstr ""
#: doc/classes/CurveTexture.xml
-msgid "The [code]curve[/code] rendered onto the texture."
-msgstr ""
+#, fuzzy
+msgid "The [Curve] that is rendered onto the texture."
+msgstr "A largura de uma textura."
#: doc/classes/CurveTexture.xml
-msgid "The width of the texture."
-msgstr "A largura de uma textura."
+msgid ""
+"The width of the texture (in pixels). Higher values make it possible to "
+"represent high-frequency data better (such as sudden direction changes), at "
+"the cost of increased generation time and memory usage."
+msgstr ""
#: doc/classes/CylinderMesh.xml
msgid "Class representing a cylindrical [PrimitiveMesh]."
@@ -20221,6 +20262,13 @@ msgid "Returns the list of keys in the [Dictionary]."
msgstr ""
#: doc/classes/Dictionary.xml
+msgid ""
+"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, "
+"duplicate keys will not be copied over, unless [code]overwrite[/code] is "
+"[code]true[/code]."
+msgstr ""
+
+#: doc/classes/Dictionary.xml
msgid "Returns the number of keys in the dictionary."
msgstr ""
@@ -22160,9 +22208,23 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide a state data you want to be saved, like view "
+"position, grid settings, folding, etc. 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). This data is automatically saved for "
+"each scene in an [code]editstate[/code] file in the editor metadata folder. "
+"If you want to store global (scene-independent) editor data for your plugin, "
+"you can use [method get_window_layout] instead.\n"
+"Use [method set_state] to restore your saved state.\n"
+"[b]Note:[/b] This method should not be used to save important settings that "
+"should persist with the project.\n"
+"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be "
+"stored and restored correctly.\n"
+"[codeblock]\n"
+"func get_state():\n"
+" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n"
+" return state\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -22173,9 +22235,18 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide the GUI layout of the plugin or any other "
+"data you want to be stored. 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). The data is stored in the "
+"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n"
+"Use [method set_window_layout] to restore your saved layout.\n"
+"[codeblock]\n"
+"func get_window_layout(configuration):\n"
+" configuration.set_value(\"MyPlugin\", \"window_position\", $Window."
+"position)\n"
+" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -22288,11 +22359,30 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the state saved by [method get_state]."
+msgid ""
+"Restore the state saved by [method get_state]. This method is called when "
+"the current scene tab is changed in the editor.\n"
+"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise "
+"it will not be recognized and this method will not be called.\n"
+"[codeblock]\n"
+"func set_state(data):\n"
+" zoom = data.get(\"zoom\", 1.0)\n"
+" preferred_color = data.get(\"my_color\", Color.white)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the plugin GUI layout saved by [method get_window_layout]."
+msgid ""
+"Restore the plugin GUI layout and data saved by [method get_window_layout]. "
+"This method is called for every plugin on editor startup. Use the provided "
+"[code]configuration[/code] file to read your saved data.\n"
+"[codeblock]\n"
+"func set_window_layout(configuration):\n"
+" $Window.position = configuration.get_value(\"MyPlugin\", "
+"\"window_position\", Vector2())\n"
+" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", "
+"Color.white)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -26942,7 +27032,8 @@ msgid ""
"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])."
+"at fixed steps (see [member width]). See also [GradientTexture2D] and "
+"[CurveTexture]."
msgstr ""
#: doc/classes/GradientTexture.xml
@@ -26964,7 +27055,8 @@ msgid ""
"repeat] types using colors obtained from the gradient. 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] and [member height])."
+"[member width] and [member height]). See also [GradientTexture] and "
+"[CurveTexture]."
msgstr ""
#: doc/classes/GradientTexture2D.xml
@@ -27771,6 +27863,12 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+msgid ""
+"If [code]true[/code], this GridMap uses cell navmesh resources to create "
+"navigation regions."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid "If [code]true[/code], grid items are centered on the X axis."
msgstr ""
@@ -27821,6 +27919,10 @@ msgid "The assigned [MeshLibrary]."
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+msgid "The navigation layers the GridMap generates its navigation regions in."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
"Overrides the default friction and bounce physics properties for the whole "
"[GridMap]."
@@ -29044,7 +29146,7 @@ msgid ""
" # 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 body = to_json({\"name\": \"Godette\"})\n"
" error = http_request.request(\"https://httpbin.org/post\", [], true, "
"HTTPClient.METHOD_POST, body)\n"
" if error != OK:\n"
@@ -30211,7 +30313,7 @@ msgstr ""
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 "
+"([member 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 "
@@ -30360,10 +30462,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Returns the mouse mode. See the constants for more information."
-msgstr ""
-
-#: doc/classes/Input.xml
msgid ""
"Gets an input vector by specifying four actions for the positive and "
"negative X and Y axes.\n"
@@ -30557,24 +30655,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Sets the mouse mode. See the constants for more information."
-msgstr ""
-
-#: doc/classes/Input.xml
-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
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 "
@@ -30610,6 +30690,24 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
+msgid "Controls the mouse mode. See [enum MouseMode] for more information."
+msgstr ""
+
+#: doc/classes/Input.xml
+msgid ""
+"If [code]true[/code], similar input events sent by the operating system are "
+"accumulated. 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 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
msgid "Emitted when a joypad device has been connected or disconnected."
msgstr ""
@@ -30917,8 +31015,8 @@ msgstr ""
#: doc/classes/InputEventJoypadButton.xml
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]."
+"Represents the pressure the user puts on the button with their finger, if "
+"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]."
msgstr ""
#: doc/classes/InputEventJoypadMotion.xml
@@ -31181,9 +31279,9 @@ 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 "
+"at most. If you need more precise input reporting, set [member Input."
+"use_accumulated_input] to [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."
@@ -31674,7 +31772,18 @@ msgid ""
"[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."
+"fixed_column_width] greater than zero to wrap the text.\n"
+"[b]Incremental search:[/b] Like [PopupMenu] and [Tree], [ItemList] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/ItemList.xml
@@ -35435,12 +35544,18 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Returns the override [Material] for a surface of the [Mesh] resource.\n"
+"[b]Note:[/b] This function only returns [i]override[/i] materials associated "
+"with this [MeshInstance]. Consider using [method get_active_material] or "
+"[method Mesh.surface_get_material] to get materials associated with the "
+"[Mesh] resource."
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the number of surface materials."
-msgstr ""
+#, fuzzy
+msgid "Returns the number of surface override materials."
+msgstr "Retorna o seno do parâmetro."
#: doc/classes/MeshInstance.xml
msgid ""
@@ -35476,7 +35591,10 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Sets the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Sets the override [Material] for the specified surface of the [Mesh] "
+"resource. This material is associated with this [MeshInstance] rather than "
+"with the [Mesh] resource."
msgstr ""
#: doc/classes/MeshInstance.xml
@@ -35507,9 +35625,10 @@ msgstr ""
#: doc/classes/MeshInstance2D.xml
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\"."
+"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be "
+"automatically created from an existing [Sprite] via a tool in the editor "
+"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to "
+"MeshInstance2D[/b] at the top of the 2D editor viewport."
msgstr ""
#: doc/classes/MeshInstance2D.xml
@@ -36267,6 +36386,9 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"Provides navigation and pathfinding within a collection of "
"[NavigationMesh]es. By default, these will be automatically collected from "
"child [NavigationMeshInstance] nodes. In addition to basic pathfinding, this "
@@ -36307,7 +36429,15 @@ msgid ""
msgstr ""
#: doc/classes/Navigation.xml
+#, fuzzy
+msgid "Returns the [RID] of the navigation map on the [NavigationServer]."
+msgstr "Retorna o RID do ecrã usada por essa camada."
+
+#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"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, "
@@ -36329,16 +36459,31 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation.get_simple_path] path query."
+msgstr ""
+
+#: doc/classes/Navigation.xml
+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/Navigation.xml doc/classes/Navigation2DServer.xml
+#: doc/classes/NavigationServer.xml
+msgid ""
+"Emitted when a navigation map is updated, when a region moves or is modified."
+msgstr ""
+
#: doc/classes/Navigation2D.xml
msgid "2D navigation and pathfinding node."
msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -36358,6 +36503,9 @@ msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -36367,6 +36515,12 @@ msgstr ""
msgid "The XY plane cell size to use for fields."
msgstr ""
+#: doc/classes/Navigation2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation2D.get_simple_path] path query."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml
msgid "Server interface for low-level 2D navigation access."
msgstr ""
@@ -36383,8 +36537,12 @@ msgid ""
"through scripts.\n"
"For two regions to be connected to each other, they must share a similar "
"edge. An edge is considered connected to another if both of its two vertices "
-"are at a distance less than [member Navigation.edge_connection_margin] to "
-"the respective other edge's vertex.\n"
+"are at a distance less than navigation map [code]edge_connection_margin[/"
+"code] to the respective other edge's vertex.\n"
+"You may assign navigation layers to regions with [method Navigation2DServer."
+"region_set_navigation_layers], which then can be checked upon when "
+"requesting a path with [method Navigation2DServer.map_get_path]. This allows "
+"allowing or forbidding some areas to 2D objects.\n"
"To use the collision avoidance system, you may use agents. You can set an "
"agent's target velocity, then the servers will emit a callback with a "
"modified velocity.\n"
@@ -36414,7 +36572,17 @@ msgid "Returns [code]true[/code] if the map got changed the previous frame."
msgstr "Retorna [code]true[/code] se o script pode ser instanciado."
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Callback called at the end of the RVO process."
+msgid ""
+"Callback called at the end of the RVO process. If a callback is created "
+"manually and the agent is placed on a navigation map it will calculate "
+"avoidance for the agent and dispatch the calculated [code]safe_velocity[/"
+"code] to the [code]receiver[/code] object with a signal to the chosen "
+"[code]method[/code] name.\n"
+"[b]Note:[/b] Created callbacks are always processed independently of the "
+"SceneTree state as long as the agent is on a navigation map and not freed. "
+"To disable the dispatch of a callback from an agent use [method "
+"agent_set_callback] again with a [code]null[/code] object as the "
+"[code]receiver[/code]."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -36475,15 +36643,55 @@ msgid "Destroys the given RID."
msgstr "Retorna o [RID] do objeto."
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns all created navigation map [RID]s on the NavigationServer. This "
+"returns both 2D and 3D created navigation maps as there is technically no "
+"distinction between them."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Create a new map."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"This function immediately forces synchronization of the specified navigation "
+"[code]map[/code] [RID]. By default navigation maps are only synchronized at "
+"the end of each physics frame. This function can be used to immediately "
+"(re)calculate all the navigation meshes and region connections of the "
+"navigation map. This makes it possible to query a navigation path for a "
+"changed map immediately and in the same frame (multiple times if needed).\n"
+"Due to technical restrictions the current NavigationServer command queue "
+"will be flushed. This means all already queued update commands for this "
+"physics frame will be executed, even those intended for other maps, regions "
+"and agents not part of the specified map. The expensive computation of the "
+"navigation meshes and region connections of a map will only be done for the "
+"specified map. Other maps will receive the normal synchronization at the end "
+"of the physics frame. Should the specified map receive changes after the "
+"forced update it will update again as well when the other maps receive their "
+"update.\n"
+"Avoidance processing and dispatch of the [code]safe_velocity[/code] signals "
+"is untouched by this function and continues to happen for all maps and "
+"agents at the end of the physics frame.\n"
+"[b]Note:[/b] With great power comes great responsibility. This function "
+"should only be used by users that really know what they are doing and have a "
+"good reason for it. Forcing an immediate update of a navigation map requires "
+"locking the NavigationServer and flushing the entire NavigationServer "
+"command queue. Not only can this severely impact the performance of a game "
+"but it can also introduce bugs if used inappropriately without much "
+"foresight."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns all navigation agents [RID]s that are currently assigned to the "
"requested navigation [code]map[/code]."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
#, fuzzy
msgid "Returns the map cell size."
@@ -36508,7 +36716,10 @@ msgid ""
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Returns the navigation path to reach the destination from the origin."
+msgid ""
+"Returns the navigation path to reach the destination from the origin. "
+"[code]navigation_layers[/code] is a bitmask of all region layers that are "
+"allowed to be in the path."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -36527,6 +36738,12 @@ msgstr "Retorna [code]true[/code] se o script pode ser instanciado."
msgid "Sets the map active."
msgstr "Retorna a câmara 3D ativa."
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/"
+"b] Currently not implemented."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Set the map cell size used to weld the navigation mesh polygons."
msgstr ""
@@ -36542,15 +36759,79 @@ msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"Returns the ending point of a connection door. [code]connection[/code] is an "
+"index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns the starting point of a connection door. [code]connection[/code] is "
+"an index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns how many connections this [code]region[/code] has with other regions "
+"in the map."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]."
+msgstr "Retorna o produto cruzado deste vetor e [code]b[/code]."
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns the navigation map [RID] the requested [code]region[/code] is "
"currently assigned to."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
#, fuzzy
+msgid "Returns the region's navigation layers."
+msgstr "Retorna a rotação (em radianos)."
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]."
+msgstr "Retorna o produto cruzado deste vetor e [code]b[/code]."
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns [code]true[/code] if the provided [code]point[/code] in world space "
+"is currently owned by the provided navigation [code]region[/code]. Owned in "
+"this context means that one of the region's navigation mesh polygon faces "
+"has a possible position at the closest distance to this point compared to "
+"all other navigation meshes from other navigation regions that are also "
+"registered on the navigation map of the provided region.\n"
+"If multiple navigation meshes have positions at equal distance the "
+"navigation region whose polygons are processed first wins the ownership. "
+"Polygons are processed in the same order that navigation regions were "
+"registered on the NavigationServer.\n"
+"[b]Note:[/b] If navigation meshes from different navigation regions overlap "
+"(which should be avoided in general) the result might not be what is "
+"expected."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]."
+msgstr ""
+"Limpa o ícone em [code]name[/code] se o tema tiver [code]node_type[/code]."
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
msgid "Sets the map for the region."
msgstr "Define a cor da borda."
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method Navigation2DServer.map_get_path])."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Sets the navigation mesh for the region."
msgstr ""
@@ -36560,6 +36841,12 @@ msgstr ""
msgid "Sets the global transformation for the region."
msgstr "Retorna a posição global do mouse."
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]."
+msgstr ""
+"Limpa o ícone em [code]name[/code] se o tema tiver [code]node_type[/code]."
+
#: doc/classes/NavigationAgent.xml
msgid "3D agent used in navigation for collision avoidance."
msgstr ""
@@ -36569,9 +36856,16 @@ msgid ""
"3D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationAgent] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World] navigation map. If this node is a child of a [Navigation] "
+"node it will register to the navigation map of the navigation node or the "
+"function [method set_navigation] can be used to set the navigation node "
+"directly. [NavigationAgent] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -36589,9 +36883,16 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-#, fuzzy
-msgid "Returns the path from start to finish in global coordinates."
-msgstr "Retorna a rotação (em radianos)."
+msgid ""
+"Returns this agent's current path from start to finish in global "
+"coordinates. The path only updates when the target location is changed or "
+"the agent requires a repath. The path array is not intended to be used in "
+"direct path movement as the agent has its own internal path logic that would "
+"get corrupted by changing the path array manually. Use the intended [method "
+"get_next_location] once every physics frame to receive the next path point "
+"for the agents movement as this function also updates the internal path "
+"logic."
+msgstr ""
#: doc/classes/NavigationAgent.xml
msgid ""
@@ -36605,11 +36906,24 @@ msgid ""
"system."
msgstr ""
-#: doc/classes/NavigationAgent.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
+"Returns the [RID] of the navigation map for this NavigationAgent node. This "
+"function returns always the map set on the NavigationAgent node and not the "
+"map of the abstract agent on the NavigationServer. If the agent map is "
+"changed directly with the NavigationServer API the NavigationAgent node will "
+"not be aware of the map change. Use [method set_navigation_map] to change "
+"the navigation map for the NavigationAgent and also update the agent on the "
+"NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"Returns a [Vector3] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the origin of the agent's parent."
+"Returns the next location in global coordinates that can be moved to, making "
+"sure that there are no static objects in the way. If the agent does not have "
+"a navigation path, it will return the position of the agent's parent. The "
+"use of this function once every physics frame is required to update the "
+"internal path logic of the NavigationAgent."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -36652,6 +36966,12 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"Sets the [RID] of the navigation map this NavigationAgent node should use "
+"and also updates the [code]agent[/code] on the NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"Sets the user desired final location. This will clear the current navigation "
"path."
msgstr ""
@@ -36664,7 +36984,13 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml
-msgid "The agent height offset to match the navigation mesh height."
+msgid ""
+"The NavigationAgent height offset is subtracted from the y-axis value of any "
+"vector path position for this NavigationAgent. The NavigationAgent height "
+"offset does not change or influence the navigation mesh or pathfinding query "
+"result. Additional navigation maps that use regions with navigation meshes "
+"that the developer baked with appropriate agent radius or height values are "
+"required to support different-sized agents."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -36691,27 +37017,53 @@ msgstr ""
msgid "The maximum speed that an agent can move."
msgstr ""
+#: doc/classes/NavigationAgent.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "The distance to search for other agents."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"The distance threshold before a path point is considered to be reached. This "
+"will allow an agent to not have to hit a path point on the path exactly, but "
+"in the area. If this value is set to high the NavigationAgent will skip "
+"points on the path which can lead to leaving the navigation mesh. If this "
+"value is set to low the NavigationAgent will be stuck in a repath loop cause "
+"it will constantly overshoot or undershoot the distance to the next point on "
+"each physics frame update."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"The maximum distance the agent is allowed away from the ideal path to the "
"final location. This can happen due to trying to avoid collisions. When the "
"maximum distance is exceeded, it recalculates the ideal path."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-#, fuzzy
-msgid "The radius of the agent."
-msgstr "A cor do texto."
+msgid ""
+"The radius of the avoidance agent. This is the \"body\" of the avoidance "
+"agent and not the avoidance maneuver starting radius (which is controlled by "
+"[member neighbor_dist]).\n"
+"Does not affect normal pathfinding. To change an actor's pathfinding radius "
+"bake [NavigationMesh] resources with a different [member NavigationMesh."
+"agent_radius] property and use different navigation maps for each actor size."
+msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"The distance threshold before a target is considered to be reached. This "
-"will allow an agent to not have to hit a point on the path exactly, but in "
-"the area."
+"The distance threshold before the final target point is considered to be "
+"reached. This will allow an agent to not have to hit the point of the final "
+"target exactly, but only the area. If this value is set to low the "
+"NavigationAgent will be stuck in a repath loop cause it will constantly "
+"overshoot or undershoot the distance to the final target point on each "
+"physics frame update."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -36755,9 +37107,16 @@ msgid ""
"2D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationAgent2D] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World2D] navigation map. If this node is a child of a "
+"[Navigation2D] node it will register to the navigation map of the navigation "
+"node or the function [method set_navigation] can be used to set the "
+"navigation node directly. [NavigationAgent2D] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent2D.xml
@@ -36773,13 +37132,6 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent2D.xml
-msgid ""
-"Returns a [Vector2] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the position of the agent's parent."
-msgstr ""
-
-#: doc/classes/NavigationAgent2D.xml
#, fuzzy
msgid "Returns the [RID] of this agent on the [Navigation2DServer]."
msgstr "Retorna o RID do ecrã usada por essa camada."
@@ -36800,6 +37152,13 @@ msgid ""
"only be enabled on agents that currently require it."
msgstr ""
+#: doc/classes/NavigationAgent2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent2D] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationMesh.xml
msgid "A mesh to approximate the walkable areas and obstacles."
msgstr ""
@@ -36830,8 +37189,8 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
-"Returns whether the specified [code]bit[/code] of the [member geometry/"
-"collision_mask] is set."
+"Returns whether the specified [code]bit[/code] of the [member "
+"geometry_collision_mask] is set."
msgstr ""
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
@@ -36853,9 +37212,9 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/"
-"code] in the [member geometry/collision_mask].\n"
+"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]."
+"code] in the [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
@@ -36869,14 +37228,14 @@ 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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36888,7 +37247,7 @@ 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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36916,13 +37275,17 @@ msgstr ""
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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
-"If [code]true[/code], marks walkable spans as not walkable if the clearance "
-"above the span is less than [member agent/height]."
+"If the baking [AABB] has a volume the navigation mesh baking will be "
+"restricted to its enclosing area."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+msgid "The position offset applied to the [member filter_baking_aabb] [AABB]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36932,13 +37295,19 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]true[/code], marks non-walkable spans as walkable if their maximum "
-"is within [member agent/max_climb] of a walkable neighbor."
+"is within [member agent_max_climb] of a walkable neighbor."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+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
msgid ""
"The physics layers to scan for static colliders.\n"
-"Only used when [member geometry/parsed_geometry_type] is [constant "
+"Only used when [member geometry_parsed_geometry_type] is [constant "
"PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]."
msgstr ""
@@ -36957,7 +37326,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"The name of the group to scan for geometry.\n"
-"Only used when [member geometry/source_geometry_mode] is [constant "
+"Only used when [member geometry_source_geometry_mode] is [constant "
"SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant "
"SOURCE_GEOMETRY_GROUPS_EXPLICIT]."
msgstr ""
@@ -37020,7 +37389,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Parses [StaticBody] colliders as geometry. The collider should be in any of "
-"the layers specified by [member geometry/collision_mask]."
+"the layers specified by [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -37041,13 +37410,13 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Scans nodes in a group and their child nodes recursively for geometry. The "
-"group is specified by [member geometry/source_group_name]."
+"group is specified by [member geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Uses nodes in a group for geometry. The group is specified by [member "
-"geometry/source_group_name]."
+"geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -37089,7 +37458,15 @@ msgid ""
"geometry for walkable terrain suitable to [NavigationMesh] agent properties "
"by creating a voxel world around the meshes bounding area.\n"
"The finalized navigation mesh is then returned and stored inside the "
-"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes."
+"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] "
+"nodes.\n"
+"[b]Note:[/b] Using meshes to not only define walkable surfaces but also "
+"obstruct navigation baking does not always work. The navigation baking has "
+"no concept of what is a geometry \"inside\" when dealing with mesh source "
+"geometry and this is intentional. Depending on current baking parameters, as "
+"soon as the obstructing mesh is large enough to fit a navigation mesh area "
+"inside, the baking will generate navigation mesh areas that are inside the "
+"obstructing source geometry mesh."
msgstr ""
#: doc/classes/NavigationMeshGenerator.xml
@@ -37097,8 +37474,8 @@ msgid ""
"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child "
"nodes under the provided [code]root_node[/code] or a specific group of nodes "
"for potential source geometry. The parse behavior can be controlled with the "
-"[member NavigationMesh.geometry/parsed_geometry_type] and [member "
-"NavigationMesh.geometry/source_geometry_mode] properties on the "
+"[member NavigationMesh.geometry_parsed_geometry_type] and [member "
+"NavigationMesh.geometry_source_geometry_mode] properties on the "
"[NavigationMesh] resource."
msgstr ""
@@ -37116,8 +37493,21 @@ msgstr ""
#: doc/classes/NavigationMeshInstance.xml
msgid ""
"An instance of a [NavigationMesh]. It tells the [Navigation] node what can "
-"be navigated and what cannot, based on the [NavigationMesh] resource. This "
-"should be a child of a [Navigation] node."
+"be navigated and what cannot, based on the [NavigationMesh] resource.\n"
+"By default this node will register to the default [World] navigation map. If "
+"this node is a child of a [Navigation] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method NavigationServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The cost of entering this region from another region can be controlled with "
+"the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The cost of traveling distances inside this region can be controlled with "
+"the [member travel_cost] multiplier."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
@@ -37146,10 +37536,34 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding enters this region's navmesh from another regions navmesh "
+"the [code]enter_cost[/code] value is added to the path distance for "
+"determining the shortest path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationMesh] "
+"belongs to. On path requests with [method NavigationServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
msgid "The [NavigationMesh] resource to use."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding moves inside this region's navmesh the traveled distances "
+"are multiplied with [code]travel_cost[/code] for determining the shortest "
+"path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
#, fuzzy
msgid "Notifies when the navigation mesh bake operation is completed."
msgstr "Notifica quando uma animação começa a reproduzir."
@@ -37168,7 +37582,9 @@ msgid ""
"3D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationObstacle] is physics safe."
+"[NavigationObstacle] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle.xml
@@ -37209,7 +37625,9 @@ msgid ""
"2D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationObstacle2D] is physics safe."
+"[NavigationObstacle2D] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle2D.xml
@@ -37290,6 +37708,14 @@ msgstr ""
#: doc/classes/NavigationPolygon.xml
msgid ""
+"Returns the [NavigationMesh] resulting from this navigation polygon. This "
+"navmesh can be used to update the navmesh of a region with the [method "
+"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server "
+"behind the scene)."
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml
+msgid ""
"Returns a [PoolVector2Array] containing the vertices of an outline that was "
"created in the editor or by script."
msgstr ""
@@ -37326,6 +37752,30 @@ msgid ""
msgstr ""
#: doc/classes/NavigationPolygonInstance.xml
+msgid "A region of the 2D navigation map."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A region of the navigation map. It tells the [Navigation2DServer] what can "
+"be navigated and what cannot, based on its [NavigationPolygon] resource.\n"
+"By default this node will register to the default [World2D] navigation map. "
+"If this node is a child of a [Navigation2D] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The pathfinding cost of entering this region from another region can be "
+"controlled with the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The pathfinding cost of traveling distances inside this region can be "
+"controlled with the [member travel_cost] multiplier."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
msgid ""
"Returns the [RID] of this region on the [Navigation2DServer]. Combined with "
"[method Navigation2DServer.map_get_closest_point_owner] can be used to "
@@ -37333,6 +37783,23 @@ msgid ""
"navigation map."
msgstr ""
+#: doc/classes/NavigationPolygonInstance.xml
+msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationPolygon] "
+"belongs to. On path requests with [method Navigation2DServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+#, fuzzy
+msgid "The [NavigationPolygon] resource to use."
+msgstr "O singleton [TranslationServer]."
+
#: doc/classes/NavigationServer.xml
msgid "Server interface for low-level 3D navigation access."
msgstr ""
@@ -37411,6 +37878,12 @@ msgid "Bakes the navigation mesh."
msgstr ""
#: doc/classes/NavigationServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method NavigationServer.map_get_path])."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
msgid "Control activation of this server."
msgstr ""
@@ -38877,13 +39350,19 @@ msgstr ""
#: doc/classes/Node.xml
msgid ""
"Emitted when a child node enters the scene tree, either because it entered "
-"on its own or because this node entered with it."
+"on its own or because this node entered with it.\n"
+"This signal is emitted [i]after[/i] the child node's own [constant "
+"NOTIFICATION_ENTER_TREE] and [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
msgid ""
-"Emitted when a child node exits the scene tree, either because it exited on "
-"its own or because this node exited."
+"Emitted when a child node is about to exit the scene tree, either because it "
+"is being removed or freed directly, or because this node is exiting the "
+"tree.\n"
+"When this signal is received, the child [code]node[/code] is still in the "
+"tree and valid. This signal is emitted [i]after[/i] the child node's own "
+"[signal tree_exiting] and [constant NOTIFICATION_EXIT_TREE]."
msgstr ""
#: doc/classes/Node.xml
@@ -38895,8 +39374,11 @@ msgid "Emitted when the node is renamed."
msgstr "Emitido quando o nó é renomeado."
#: doc/classes/Node.xml
-msgid "Emitted when the node enters the tree."
-msgstr "Emitido quando o nó entra na árvore."
+msgid ""
+"Emitted when the node enters the tree.\n"
+"This signal is emitted [i]after[/i] the related [constant "
+"NOTIFICATION_ENTER_TREE] notification."
+msgstr ""
#: doc/classes/Node.xml
msgid "Emitted after the node exits the tree and is no longer active."
@@ -38905,15 +39387,21 @@ msgstr ""
#: doc/classes/Node.xml
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)."
+"the right place for de-initialization (or a \"destructor\", if you will).\n"
+"This signal is emitted [i]before[/i] the related [constant "
+"NOTIFICATION_EXIT_TREE] notification."
msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node enters a [SceneTree]."
+msgid ""
+"Notification received when the node enters a [SceneTree].\n"
+"This notification is emitted [i]before[/i] the related [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node is about to exit a [SceneTree]."
+msgid ""
+"Notification received when the node is about to exit a [SceneTree].\n"
+"This notification is emitted [i]after[/i] the related [signal tree_exiting]."
msgstr ""
#: doc/classes/Node.xml
@@ -39174,7 +39662,13 @@ msgid "Rotation in degrees, relative to the node's parent."
msgstr ""
#: doc/classes/Node2D.xml
-msgid "The node's scale. Unscaled value: [code](1, 1)[/code]."
+msgid ""
+"The node's scale. Unscaled value: [code](1, 1)[/code].\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
#: doc/classes/Node2D.xml
@@ -40616,6 +41110,10 @@ msgid ""
" if argument.find(\"=\") > -1:\n"
" var key_value = argument.split(\"=\")\n"
" arguments[key_value[0].lstrip(\"--\")] = key_value[1]\n"
+" else:\n"
+" # Options without an argument will be present in the dictionary,\n"
+" # with the value set to an empty string.\n"
+" arguments[argument.lstrip(\"--\")] = \"\"\n"
"[/codeblock]"
msgstr ""
@@ -41272,8 +41770,15 @@ msgstr ""
msgid ""
"Moves the file or directory to the system's recycle bin. See also [method "
"Directory.remove].\n"
+"The method takes only global paths, so you may need to use [method "
+"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/"
+"code] as it will not work in exported project.\n"
"[b]Note:[/b] If the user has disabled the recycle bin on their system, the "
-"file will be permanently deleted instead."
+"file will be permanently deleted instead.\n"
+"[codeblock]\n"
+"var file_to_remove = \"user://slot1.sav\"\n"
+"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/OS.xml
@@ -46112,7 +46617,18 @@ msgstr ""
#: doc/classes/PopupMenu.xml
msgid ""
"[PopupMenu] is a [Control] that displays a list of options. They are popular "
-"in toolbars or context menus."
+"in toolbars or context menus.\n"
+"[b]Incremental search:[/b] Like [ItemList] and [Tree], [PopupMenu] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/PopupMenu.xml
@@ -47622,7 +48138,16 @@ msgid ""
msgstr ""
#: doc/classes/ProjectSettings.xml
-msgid "Message to be displayed before the backtrace when the engine crashes."
+msgid ""
+"Message to be displayed before the backtrace when the engine crashes. By "
+"default, this message is only used in exported projects due to the editor-"
+"only override applied to this setting."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Editor-only override for [member debug/settings/crash_handler/message]. Does "
+"not affect exported projects in debug or release mode."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -47867,6 +48392,18 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default naming style for scene files to infer from their root nodes. "
+"Possible options are:\n"
+"- [code]0[/code] (Auto): Uses the scene root name as is without changing its "
+"casing.\n"
+"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase "
+"casing.\n"
+"- [code]2[/code] (snake_case): Converts the scene root name to snake_case "
+"casing."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -48092,6 +48629,198 @@ msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 1."
msgstr "Nome opcional para a camada 1 da física 2D."
@@ -48300,6 +49029,198 @@ msgid "Optional name for the 2D render layer 9."
msgstr "Nome opcional para a camada 9 da renderização 2D."
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 1."
msgstr ""
@@ -48568,6 +49489,49 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default cell height for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_height].\n"
+"[b]Note:[/b] Currently not implemented."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 2D navigation maps. See [method "
+"Navigation2DServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell height for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_height]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 3D navigation maps. See [method "
+"NavigationServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default map up vector for 3D navigation maps. See [method NavigationServer."
+"map_set_up]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -49241,20 +50205,28 @@ msgid ""
"cause.\n"
"The default value is a conservative one, so you are advised to tweak it "
"according to the hardware you are targeting.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"The default is a very conservative override for [code]rendering/gles3/"
-"shaders/max_concurrent_compiles[/code].\n"
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
"Depending on the specific devices you are targeting, you may want to raise "
"it.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
+"Depending on the specific browsers you are targeting, you may want to raise "
+"it.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -49262,19 +50234,28 @@ msgid ""
"The maximum size, in megabytes, that the ubershader cache can grow up to. On "
"startup, the least recently used entries will be deleted until the total "
"size is within bounds.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/ubershader_cache_size_mb[/"
-"code], so a smaller maximum size can be configured for mobile platforms, "
-"where storage space is more limited.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for mobile platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for web platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] Currently, shader caching is generally unavailable on web "
+"platforms.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -49306,14 +50287,22 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/shader_compilation_mode[/"
-"code], so asynchronous compilation can be disabled for mobile.\n"
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on mobile platforms.\n"
"You may want to do that since mobile GPUs generally won't support "
"ubershaders due to their complexity."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on web platforms.\n"
+"You may want to do that since certain browsers (especially on mobile "
+"platforms) generally won't support ubershaders due to their complexity."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
@@ -50070,7 +51059,6 @@ msgid ""
"- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/"
"code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, "
"small grid radius values may lead to unwanted groupings.\n"
-"[/codeblock]\n"
"[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more "
"effective and faster [VisibilityNotifier] functionality. For most use cases, "
"[method Vector3.distance_to] or [method Vector3.distance_squared_to] are "
@@ -52218,6 +53206,22 @@ msgid "Makes text fill width."
msgstr ""
#: doc/classes/RichTextLabel.xml
+msgid "Aligns top of the inline image to the top of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns center of the inline image to the center of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns bottom of the inline image to the baseline of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns bottom of the inline image to the bottom of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
msgid "Each list item has a number marker."
msgstr ""
@@ -53957,8 +54961,8 @@ msgid ""
" yield(get_tree().create_timer(1.0), \"timeout\")\n"
" print(\"Timer ended.\")\n"
"[/codeblock]\n"
-"The timer will be automatically freed after its time elapses, so be aware "
-"that any reference you might have kept to it will become invalid."
+"The timer will be dereferenced after its time elapses. To preserve the "
+"timer, you can keep a reference to it. See [Reference]."
msgstr ""
#: doc/classes/SceneTreeTimer.xml
@@ -53990,24 +54994,23 @@ msgid ""
"manually (i.e. by using [code]Tween.new()[/code]) are invalid. They can't be "
"used for tweening values, but you can do manual interpolation with [method "
"interpolate_value].\n"
-"A [SceneTreeTween] animation is composed of a sequence of [Tweener]s, which "
-"by default are executed one after another. You can create a sequence by "
-"appending [Tweener]s to the [SceneTreeTween]. Animating something with a "
-"[Tweener] is called tweening. Example tweening sequence looks like this:\n"
+"A tween animation is created by adding [Tweener]s to the [SceneTreeTween] "
+"object, using [method tween_property], [method tween_interval], [method "
+"tween_callback] or [method tween_method]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1)\n"
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"This sequence will make the [code]$Sprite[/code] node turn red, then shrink "
-"and finally the [method Node.queue_free] is called to remove the sprite. See "
-"methods [method tween_property], [method tween_interval], [method "
-"tween_callback] and [method tween_method] for more usage information.\n"
+"This sequence will make the [code]$Sprite[/code] node turn red, then shrink, "
+"before finally calling [method Node.queue_free] to free the sprite. "
+"[Tweener]s are executed one after another by default. This behavior can be "
+"changed using [method parallel] and [method set_parallel].\n"
"When a [Tweener] is created with one of the [code]tween_*[/code] methods, a "
"chained method call can be used to tweak the properties of this [Tweener]. "
-"For example, if you want to set different transition type in the above "
-"example, you can do:\n"
+"For example, if you want to set a different transition type in the above "
+"example, you can use [method set_trans]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1).set_trans(Tween."
@@ -54016,8 +55019,9 @@ msgid ""
"TRANS_BOUNCE)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Most of the [SceneTreeTween] methods can be chained this way too. In this "
-"example the [SceneTreeTween] is bound and have set a default transition:\n"
+"Most of the [SceneTreeTween] methods can be chained this way too. In the "
+"following example the [SceneTreeTween] is bound to the running script's node "
+"and a default transition is set for its [Tweener]s:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween().bind_node(self).set_trans(Tween."
"TRANS_ELASTIC)\n"
@@ -54025,16 +55029,16 @@ msgid ""
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Another interesting use for [SceneTreeTween]s is animating arbitrary set of "
+"Another interesting use for [SceneTreeTween]s is animating arbitrary sets of "
"objects:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"for sprite in get_children():\n"
-" tween.tween_property(sprite, \"position\", Vector2(), 1)\n"
+" tween.tween_property(sprite, \"position\", Vector2(0, 0), 1)\n"
"[/codeblock]\n"
"In the example above, all children of a node are moved one after another to "
"position (0, 0).\n"
-"Some [Tweener]s use transitions and eases. The first accepts an [enum Tween."
+"Some [Tweener]s use transitions and eases. The first accepts a [enum Tween."
"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 Tween.EaseType] constant, and "
@@ -54046,7 +55050,7 @@ msgid ""
"tween_cheatsheet.png]Tween easing and transition types cheatsheet[/url]\n"
"[b]Note:[/b] All [SceneTreeTween]s will automatically start by default. To "
"prevent a [SceneTreeTween] from autostarting, you can call [method stop] "
-"immediately after it was created."
+"immediately after it is created."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -54076,21 +55080,24 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
-"Processes the [SceneTreeTween] by given [code]delta[/code] value, in "
-"seconds. Mostly useful when the [SceneTreeTween] is paused, for controlling "
-"it manually. Can also be used to end the [SceneTreeTween] animation "
-"immediately, by using [code]delta[/code] longer than the whole duration.\n"
+"Processes the [SceneTreeTween] by the given [code]delta[/code] value, in "
+"seconds. This is mostly useful for manual control when the [SceneTreeTween] "
+"is paused. It can also be used to end the [SceneTreeTween] animation "
+"immediately, by setting [code]delta[/code] longer than the whole duration of "
+"the [SceneTreeTween] animation.\n"
"Returns [code]true[/code] if the [SceneTreeTween] still has [Tweener]s that "
"haven't finished.\n"
-"[b]Note:[/b] The [SceneTreeTween] will become invalid after finished, but "
-"you can call [method stop] after the step, to keep it and reset."
+"[b]Note:[/b] The [SceneTreeTween] will become invalid in the next processing "
+"frame after its animation finishes. Calling [method stop] after performing "
+"[method custom_step] instead keeps and resets the [SceneTreeTween]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Returns the total time in seconds the [SceneTreeTween] has been animating (i."
-"e. time since it started, not counting pauses etc.). The time is affected by "
-"[method set_speed_scale] and [method stop] will reset it to [code]0[/code].\n"
+"e. the time since it started, not counting pauses etc.). The time is "
+"affected by [method set_speed_scale], and [method stop] will reset it to "
+"[code]0[/code].\n"
"[b]Note:[/b] As it results from accumulating frame deltas, the time returned "
"after the [SceneTreeTween] has finished animating will be slightly greater "
"than the actual [SceneTreeTween] duration."
@@ -54126,11 +55133,10 @@ msgstr ""
msgid ""
"Returns whether the [SceneTreeTween] is valid. A valid [SceneTreeTween] is a "
"[SceneTreeTween] contained by the scene tree (i.e. the array from [method "
-"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). "
-"[SceneTreeTween] might become invalid when it has finished tweening or was "
-"killed, also when created with [code]Tween.new()[/code]. Invalid "
-"[SceneTreeTween] can't have [Tweener]s appended, because it can't animate "
-"them. You can however still use [method interpolate_value]."
+"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). A "
+"[SceneTreeTween] might become invalid when it has finished tweening, is "
+"killed, or when created with [code]SceneTreeTween.new()[/code]. Invalid "
+"[SceneTreeTween]s can't have [Tweener]s appended."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -54170,16 +55176,15 @@ msgstr ""
msgid ""
"Sets the number of times the tweening sequence will be repeated, i.e. "
"[code]set_loops(2)[/code] will run the animation twice.\n"
-"Calling this method without arguments will make the [SceneTreeTween] run "
-"infinitely, until it is either killed by [method kill] or by freeing bound "
-"node, or all the animated objects have been freed (which makes further "
+"Calling this method without arguments will make the [Tween] run infinitely, "
+"until either it is killed with [method kill], the [Tween]'s bound node is "
+"freed, or all the animated objects have been freed (which makes further "
"animation impossible).\n"
"[b]Warning:[/b] Make sure to always add some duration/delay when using "
-"infinite loops. 0-duration looped animations (e.g. single [CallbackTweener] "
-"with no delay or [PropertyTweener] with invalid node) are equivalent to "
-"infinite [code]while[/code] loops and will freeze your game. If a "
-"[SceneTreeTween]'s lifetime depends on some node, always use [method "
-"bind_node]."
+"infinite loops. To prevent the game freezing, 0-duration looped animations "
+"(e.g. a single [CallbackTweener] with no delay) are stopped after a small "
+"number of loops, which may produce unexpected results. If a [Tween]'s "
+"lifetime depends on some node, always use [method bind_node]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -54241,10 +55246,10 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Creates and appends an [IntervalTweener]. This method can be used to create "
-"delays in the tween animation, as an alternative for using the delay in "
-"other [Tweener]s or when there's no animation (in which case the "
-"[SceneTreeTween] acts as a timer). [code]time[/code] is the length of the "
-"interval, in seconds.\n"
+"delays in the tween animation, as an alternative to using the delay in other "
+"[Tweener]s, or when there's no animation (in which case the [SceneTreeTween] "
+"acts as a timer). [code]time[/code] is the length of the interval, in "
+"seconds.\n"
"Example: creating an interval in code execution.\n"
"[codeblock]\n"
"# ... some code\n"
@@ -54298,8 +55303,8 @@ msgid ""
"Creates and appends a [PropertyTweener]. This method tweens a "
"[code]property[/code] of an [code]object[/code] between an initial value and "
"[code]final_val[/code] in a span of time equal to [code]duration[/code], in "
-"seconds. The initial value by default is a value at the time the tweening of "
-"the [PropertyTweener] start. For example:\n"
+"seconds. The initial value by default is the property's value at the time "
+"the tweening of the [PropertyTweener] starts. For example:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"tween.tween_property($Sprite, \"position\", Vector2(100, 200), 1)\n"
@@ -54330,16 +55335,15 @@ msgid ""
"Emitted when the [SceneTreeTween] has finished all tweening. Never emitted "
"when the [SceneTreeTween] is set to infinite looping (see [method "
"set_loops]).\n"
-"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) after this signal "
-"is emitted, but it doesn't happen immediately, but on the next processing "
-"frame. Calling [method stop] inside the signal callback will preserve the "
-"[SceneTreeTween]."
+"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) in the next "
+"processing frame after this signal is emitted. Calling [method stop] inside "
+"the signal callback will prevent the [SceneTreeTween] from being removed."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Emitted when a full loop is complete (see [method set_loops]), providing the "
-"loop index. This signal is not emitted after final loop, use [signal "
+"loop index. This signal is not emitted after the final loop, use [signal "
"finished] instead for this case."
msgstr ""
@@ -54347,7 +55351,7 @@ msgstr ""
msgid ""
"Emitted when one step of the [SceneTreeTween] is complete, providing the "
"step index. One step is either a single [Tweener] or a group of [Tweener]s "
-"running parallelly."
+"running in parallel."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -55681,7 +56685,12 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-msgid "Scale part of the local transformation."
+msgid ""
+"Scale part of the local transformation.\n"
+"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, the scale values will either be all "
+"positive or all negative."
msgstr ""
#: doc/classes/Spatial.xml
@@ -58332,11 +59341,11 @@ msgstr ""
msgid ""
"Returns [code]true[/code] if this string contains a valid integer.\n"
"[codeblock]\n"
-"print(\"7\".is_valid_int()) # Prints \"True\"\n"
-"print(\"14.6\".is_valid_int()) # Prints \"False\"\n"
-"print(\"L\".is_valid_int()) # Prints \"False\"\n"
-"print(\"+3\".is_valid_int()) # Prints \"True\"\n"
-"print(\"-12\".is_valid_int()) # Prints \"True\"\n"
+"print(\"7\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"14.6\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"L\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"+3\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"-12\".is_valid_integer()) # Prints \"True\"\n"
"[/codeblock]"
msgstr ""
@@ -61812,6 +62821,11 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml
+#, fuzzy
+msgid "If [code]true[/code], this TileMap bakes a navigation region."
+msgstr "Se [code]true[/code], o objeto é desenhado por trás do pai dele."
+
+#: doc/classes/TileMap.xml
msgid "If [code]true[/code], the cell's UVs will be clipped."
msgstr ""
@@ -61918,6 +62932,10 @@ msgid "The TileMap orientation mode. See [enum Mode] for possible values."
msgstr ""
#: doc/classes/TileMap.xml
+msgid "The navigation layers the TileMap generates its navigation regions in."
+msgstr ""
+
+#: doc/classes/TileMap.xml
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 "
@@ -63049,7 +64067,12 @@ msgstr ""
#: doc/classes/Transform2D.xml
msgid ""
"Returns a copy of the transform scaled by the given [code]scale[/code] "
-"factor, using matrix multiplication."
+"factor, using matrix multiplication.\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
#: doc/classes/Transform2D.xml
@@ -63204,7 +64227,18 @@ msgid ""
"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]."
+"to remove it from the [Tree].\n"
+"[b]Incremental search:[/b] Like [ItemList] and [PopupMenu], [Tree] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/Tree.xml
@@ -66733,11 +67767,12 @@ msgid "This enabler will stop [Particles2D] nodes."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _process function."
+msgid "This enabler will stop the parent's [method Node._process] function."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _physics_process function."
+msgid ""
+"This enabler will stop the parent's [method Node._physics_process] function."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
@@ -66777,6 +67812,16 @@ msgid "The VisibilityNotifier's bounding box."
msgstr ""
#: doc/classes/VisibilityNotifier.xml
+msgid ""
+"In addition to checking whether a node is on screen or within a [Camera]'s "
+"view, VisibilityNotifier can also optionally check whether a node is within "
+"a specified maximum distance when using a [Camera] with perspective "
+"projection. This is useful for throttling the performance requirements of "
+"nodes that are far away.\n"
+"[b]Note:[/b] This feature will be disabled if set to 0.0."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier.xml
msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view."
msgstr ""
@@ -71525,6 +72570,16 @@ msgid "The amount of shader rebinds in the frame."
msgstr ""
#: doc/classes/VisualServer.xml
+msgid ""
+"The peak amount of shaders that have been under compilation in the frame.\n"
+"This is useful to know when asynchronous shader compilation has finished for "
+"the current shaders on screen.\n"
+"[b]Note:[/b] For complete certainty, only assume there are no outstanding "
+"compilations when this value is zero for at least two frames in a row.\n"
+"Unimplemented in the GLES2 rendering backend, always returns 0."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
msgid "The amount of surface changes in the frame."
msgstr ""
@@ -74726,8 +75781,8 @@ msgstr ""
#: doc/classes/World.xml
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."
+"scenario, a navigation map and a sound space. Spatial nodes register their "
+"resources into the current world."
msgstr ""
#: doc/classes/World.xml
@@ -74742,11 +75797,17 @@ msgstr ""
#: doc/classes/World.xml
msgid ""
-"The World's fallback_environment will be used if the World's [Environment] "
-"fails or is missing."
+"The World's fallback environment will be used if [member environment] fails "
+"or is missing."
msgstr ""
#: doc/classes/World.xml
+#, fuzzy
+msgid ""
+"The [RID] of this world's navigation map. Used by the [NavigationServer]."
+msgstr "Retorna o RID do ecrã usada por essa camada."
+
+#: doc/classes/World.xml
msgid "The World's visual scenario."
msgstr ""
@@ -74761,8 +75822,8 @@ msgstr ""
#: doc/classes/World2D.xml
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."
+"visual scenario, a navigation map and a sound space. 2D nodes register their "
+"resources into the current 2D world."
msgstr ""
#: doc/classes/World2D.xml
@@ -74779,6 +75840,12 @@ msgid ""
msgstr ""
#: doc/classes/World2D.xml
+#, fuzzy
+msgid ""
+"The [RID] of this world's navigation map. Used by the [Navigation2DServer]."
+msgstr "Retorna o RID do ecrã usada por essa camada."
+
+#: doc/classes/World2D.xml
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."
diff --git a/doc/translations/pt_BR.po b/doc/translations/pt_BR.po
index 6ce8037a77..b32492887a 100644
--- a/doc/translations/pt_BR.po
+++ b/doc/translations/pt_BR.po
@@ -40,12 +40,13 @@
# Douglas S. Elias <douglassantoselias@gmail.com>, 2022.
# Fabio Moura de Oliveira <ccmaismais@yahoo.com>, 2022.
# Daniel Abrante <danielabrante@protonmail.com>, 2022.
+# lucas rossy brasil coelho <lucasrossy270@gmail.com>, 2022.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2022-04-29 02:54+0000\n"
-"Last-Translator: Daniel Abrante <danielabrante@protonmail.com>\n"
+"PO-Revision-Date: 2022-06-16 18:58+0000\n"
+"Last-Translator: lucas rossy brasil coelho <lucasrossy270@gmail.com>\n"
"Language-Team: Portuguese (Brazil) <https://hosted.weblate.org/projects/"
"godot-engine/godot-class-reference/pt_BR/>\n"
"Language: pt_BR\n"
@@ -53,7 +54,7 @@ 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.12.1-dev\n"
+"X-Generator: Weblate 4.13-dev\n"
#: doc/tools/make_rst.py
msgid "Description"
@@ -101,7 +102,7 @@ msgstr "Descrições da Propriedade do Tema"
#: doc/tools/make_rst.py
msgid "Inherits:"
-msgstr "Herda de:"
+msgstr "Herda:"
#: doc/tools/make_rst.py
msgid "Inherited By:"
@@ -117,7 +118,7 @@ msgstr "Padrão"
#: doc/tools/make_rst.py
msgid "Setter"
-msgstr "setter"
+msgstr "setters"
#: doc/tools/make_rst.py
msgid "value"
@@ -165,8 +166,8 @@ msgid ""
"This method describes a valid operator to use with this type as left-hand "
"operand."
msgstr ""
-"Este método descreve um operador válido pra utilizar com este tipo como "
-"operando do lado esquerdo."
+"Este método descreve um operador válido para usar com este tipo como "
+"operando à esquerda."
#: modules/gdscript/doc_classes/@GDScript.xml
msgid "Built-in GDScript functions."
@@ -503,7 +504,7 @@ msgstr "Converte de decibéis para energia linear (áudio)."
#: modules/gdscript/doc_classes/@GDScript.xml
msgid "Deprecated alias for [method step_decimals]."
-msgstr "Apelido descontinuado para [method step_decimals]."
+msgstr "Apelido em desuso para [method step_decimals]."
#: modules/gdscript/doc_classes/@GDScript.xml
msgid ""
@@ -524,9 +525,10 @@ msgstr ""
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml
+#, fuzzy
msgid ""
"Compares two values by checking their actual contents, recursing into any "
-"`Array` or `Dictionary` up to its deepest level.\n"
+"[Array] or [Dictionary] up to its deepest level.\n"
"This compares to [code]==[/code] in a number of ways:\n"
"- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/"
"code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] "
@@ -547,17 +549,17 @@ msgstr ""
"`Array` ou `Dicionário` até o seu nível mais profundo.\n"
"Isso se compara a [code]==[/code] de várias maneiras:\n"
"- Para [code]null[/code], [code]int[/code], [code]float[/code], "
-"[code]String[/code], [code]Objeto[/code] e [code]RID[/code] tanto "
+"[code]String[/code], [code]Object[/code] e [code]RID[/code] tanto "
"[code]deep_equal[/code] quanto [code]==[/code] funcionam da mesma maneira.\n"
-"- Para [code]Dicionário[/code], [code]==[code] considera igualdade se, e "
-"somente se, ambas as variáveis apontarem para o mesmo [code]Dicionário[/"
+"- Para [code]Dictionary[/code], [code]==[code] considera igualdade se, e "
+"somente se, ambas as variáveis apontarem para o mesmo [code]Dictionary[/"
"code], sem nenhuma recorrência ou consciência do conteúdo.\n"
"- Para [code]Array[/code], [code]==[/code] considera igualdade se, e somente "
"se, cada item no primeiro [code]Array[/code] for igual a sua contraparte no "
"segundo [code]Array[/code], como diz o próprio [code]==[/code]. Isso implica "
-"que [code]==[/code] recursa para [code]Array[/code], mas não para "
-"[code]Dicionário[/code].\n"
-"Em resumo, sempre que um [code]Dicionário[/code] estiver potencialmente "
+"que [code]==[/code] recursiva para [code]Array[/code], mas não para "
+"[code]Dictionary[/code].\n"
+"Em resumo, sempre que um [code]Dictionary[/code] estiver potencialmente "
"envolvido, se você quiser uma verdadeira comparação consciente do conteúdo, "
"você tem que usar [code]deep_equal[/code]."
@@ -582,6 +584,7 @@ msgstr ""
"inst2dict]), de volta em uma instância. Útil para desserialização."
#: modules/gdscript/doc_classes/@GDScript.xml
+#, 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 "
@@ -596,7 +599,7 @@ msgid ""
"- 1.0: Linear\n"
"- Greater than 1.0 (exclusive): Ease in\n"
"[/codeblock]\n"
-"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.4/img/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/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]."
@@ -869,6 +872,8 @@ msgid ""
"[/codeblock]\n"
"See also [method lerp] which performs the reverse of this operation."
msgstr ""
+"Retornar a interpolação ou extrapolação do fator considerando o ranger "
+"específico [code ]para[/code]"
#: modules/gdscript/doc_classes/@GDScript.xml
msgid ""
@@ -939,7 +944,6 @@ msgstr ""
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml
-#, fuzzy
msgid ""
"Linearly interpolates between two values by the factor defined in "
"[code]weight[/code]. To perform interpolation, [code]weight[/code] should be "
@@ -959,17 +963,23 @@ msgid ""
"To perform eased interpolation with [method lerp], combine it with [method "
"ease] or [method smoothstep]."
msgstr ""
-"Interpola linearmente entre dois valores através de um valor normalizado. "
-"Este método é o oposto do método [method inverse_lerp].\n"
+"Interpola linearmente entre dois valores pelo fator definido em "
+"[code]weight[/code]. Para realizar a interpolação, [code]weight[/code] deve "
+"estar entre [code]0.0[/code] e [code]1.0[/code] (inclusive). No entanto, "
+"valores fora desse intervalo são permitidos e podem ser usados para realizar "
+"[i]extrapolação[/i].\n"
"Se os argumentos [code]from[/code] e [code]to[/code] forem do tipo [int] ou "
-"[float], o retorno é um valor do tipo [float].\n"
-"Se ambos são vetores de mesmo tipo ([Vector2], [Vector3] ou [Color]), o "
-"valor retornado será do mesmo tipo ([code]lerp[/code] então chamará o método "
-"[code]lerp[/code] do tipo de vetor em questão).\n"
+"[float], o valor de retorno será um [float].\n"
+"Se ambos forem do mesmo tipo de vetor ([Vector2], [Vector3] ou [Color]), o "
+"valor de retorno será do mesmo tipo([code]lerp[/code] então chama o método "
+"[code]linear_interpolate[/code] do tipo de vetor).\n"
"[codeblock]\n"
-"lerp(0, 4, 0.75) # Retorna 3.0\n"
-"lerp(Vector2(1, 5), Vector2(3, 2), 0.5) # Retorna Vector2(2, 3.5)\n"
-"[/codeblock]"
+"lerp(0, 4, 0,75) # Retorna 3,0\n"
+"lerp(Vetor2(1, 5), Vetor2(3, 2), 0.5) # Retorna Vetor2(2, 3.5)\n"
+"[/codeblock]\n"
+"Veja também [method inverse_lerp] que realiza o inverso desta operação. Para "
+"realizar a interpolação facilitada com [method lerp], combine-o com [method "
+"ease] ou [method smoothstep]."
#: modules/gdscript/doc_classes/@GDScript.xml
#, fuzzy
@@ -1708,6 +1718,7 @@ msgstr ""
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml
+#, fuzzy
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] "
@@ -1728,7 +1739,7 @@ msgid ""
"[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/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/img/"
"smoothstep_ease_comparison.png]Comparison between smoothstep() and ease(x, "
"-1.6521) return values[/url]"
msgstr ""
@@ -1757,7 +1768,6 @@ msgstr ""
"smoothstep() e ease(x, -1.6521)[/url]"
#: modules/gdscript/doc_classes/@GDScript.xml
-#, fuzzy
msgid ""
"Returns the square root of [code]s[/code], where [code]s[/code] is a non-"
"negative number.\n"
@@ -1773,8 +1783,7 @@ msgstr ""
"sqrt(9) # Retorna 3\n"
"[/codeblock]\n"
"[b]Nota:[/b] Valores negativos de [code]s[/code] retornam NaN. Se você "
-"precisar de valores de entrada negativos, use [code]System.Numerics.Complex[/"
-"code] no C#."
+"precisa de valores negativos, use [code]System.Numerics.Complex[/code] em C#."
#: modules/gdscript/doc_classes/@GDScript.xml
msgid ""
@@ -1788,8 +1797,8 @@ msgid ""
"[/codeblock]"
msgstr ""
"Retorna a posição do primeiro dígito não zero, após o ponto decimal. Note "
-"que o valor máximo de retorno é 10, o que foi uma decisão de design feita "
-"durante a implementação.\n"
+"que o valor máximo de retorno é 10, o que é uma decisão de design na "
+"implementação.\n"
"[codeblock]\n"
"n = step_decimals(5) # n é 0\n"
"n = step_decimals(1.0005) # n é 4\n"
@@ -2198,8 +2207,8 @@ 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 que representa quantas vezes o diâmetro de um círculo se encaixa "
-"em torno de seu perímetro. Isto equivale a [code]TAU / 2[/code]."
+"Constante que representa quantas vezes o diâmetro de um círculo cabe em seu "
+"perímetro. É equivalente a [code]TAU / 2[/code]."
#: modules/gdscript/doc_classes/@GDScript.xml
msgid ""
@@ -4046,19 +4055,19 @@ msgid ""
" print(\"Still failing!\")\n"
"[/codeblock]"
msgstr ""
-"Métodos que retornam [enum Error] returnam [constant OK] quando não ocorreu "
-"nenhum erro. Note que muitas funções não retornam um código de erro, mas "
-"imprimem mensagens de erro para a saída padrão.\n"
-"Já que [constant OK] tem valor 0 e todos os outros códigos de falha são "
-"valores inteiros positivos, ele também pode ser usado em verificações "
-"booleanas, por exemplo.:\n"
+"Método que retorna [enum Error] return [constant OK] quando nenhum erro "
+"ocorre. Note que muitas funções não retornan um código de erro mas irá "
+"imprimir uma mensagem de erro para a saída padrão.\n"
+"Já que [constant OK] tem o valor 0, e todas os outros códigos de falha são "
+"positivos inteiros, isso pode ser usado para verificação com booleanos, por "
+"exemplo:\n"
"[codeblock]\n"
-"var err = método_que_retorna_erro()\n"
+"var err = method_that_returns_error()\n"
"if err != OK:\n"
-" print(\"Falha!\")\n"
+" print(\"Erro!\")\n"
"# Ou, equivalente:\n"
"if err:\n"
-" print(\"Ainda falhando!\")\n"
+" print(\"Continua falhando!\")\n"
"[/codeblock]"
#: doc/classes/@GlobalScope.xml
@@ -4107,7 +4116,7 @@ msgstr "Arquivo: Erro arquivo já em uso."
#: doc/classes/@GlobalScope.xml
msgid "File: Can't open error."
-msgstr "Arquivo: não se pode abrir erro."
+msgstr "Arquivo: erro não é possível abrir."
#: doc/classes/@GlobalScope.xml
msgid "File: Can't write error."
@@ -4350,6 +4359,15 @@ msgstr ""
"2D opcionalmente nomeadas."
#: doc/classes/@GlobalScope.xml
+#, fuzzy
+msgid ""
+"Hints that an integer property is a bitmask using the optionally named 2D "
+"navigation layers."
+msgstr ""
+"Indica que uma propriedade integer é uma bitmask usando as camadas de "
+"renderização 2D nomeadas opcionalmente."
+
+#: doc/classes/@GlobalScope.xml
msgid ""
"Hints that an integer property is a bitmask using the optionally named 3D "
"render layers."
@@ -4366,6 +4384,15 @@ msgstr ""
"3D opcionalmente nomeadas."
#: doc/classes/@GlobalScope.xml
+#, fuzzy
+msgid ""
+"Hints that an integer property is a bitmask using the optionally named 3D "
+"navigation layers."
+msgstr ""
+"Indica que uma propriedade integer é uma bitmask usando as camadas de "
+"renderização 2D nomeadas opcionalmente."
+
+#: doc/classes/@GlobalScope.xml
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 "
@@ -4481,11 +4508,11 @@ msgstr "Usado para agrupar propriedade no editor."
#: doc/classes/@GlobalScope.xml
msgid "Used to categorize properties together in the editor."
-msgstr ""
+msgstr "Utilizado para categorizar propriedades juntas ao editor."
#: doc/classes/@GlobalScope.xml
msgid "The property does not save its state in [PackedScene]."
-msgstr ""
+msgstr "A propriedade não salva seu estado em [PackedScene]."
#: doc/classes/@GlobalScope.xml
msgid "Editing the property prompts the user for restarting the editor."
@@ -9409,7 +9436,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/AStar.xml
+#: doc/classes/AStar.xml doc/classes/AStar2D.xml
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[/"
@@ -9608,7 +9635,10 @@ msgid ""
msgstr ""
#: doc/classes/AStar2D.xml
-msgid "Returns whether there is a connection/segment between the given points."
+msgid ""
+"Returns whether there is a connection/segment between the given points. 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/AStar2D.xml
@@ -9625,10 +9655,6 @@ msgid ""
msgstr ""
#: doc/classes/AStar2D.xml
-msgid "Deletes the segment between the given points."
-msgstr ""
-
-#: doc/classes/AStar2D.xml
msgid ""
"Returns the closest position to [code]to_position[/code] that resides inside "
"a segment between two connected points.\n"
@@ -9813,7 +9839,9 @@ msgid ""
"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."
+"transmit audio over the network. When capturing audio data from a "
+"microphone, the format of the samples will be stereo 32-bit floating point "
+"PCM."
msgstr ""
#: doc/classes/AudioEffectCapture.xml
@@ -14697,7 +14725,7 @@ msgid ""
msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
-#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/Navigation2D.xml
msgid "Returns the object's [RID]."
msgstr "Retorna o [RID] do objeto."
@@ -20238,12 +20266,16 @@ msgid ""
msgstr ""
#: doc/classes/CurveTexture.xml
-msgid "The [code]curve[/code] rendered onto the texture."
-msgstr ""
+#, fuzzy
+msgid "The [Curve] that is rendered onto the texture."
+msgstr "A largura de uma textura."
#: doc/classes/CurveTexture.xml
-msgid "The width of the texture."
-msgstr "A largura de uma textura."
+msgid ""
+"The width of the texture (in pixels). Higher values make it possible to "
+"represent high-frequency data better (such as sudden direction changes), at "
+"the cost of increased generation time and memory usage."
+msgstr ""
#: doc/classes/CylinderMesh.xml
msgid "Class representing a cylindrical [PrimitiveMesh]."
@@ -20529,6 +20561,13 @@ msgid "Returns the list of keys in the [Dictionary]."
msgstr ""
#: doc/classes/Dictionary.xml
+msgid ""
+"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, "
+"duplicate keys will not be copied over, unless [code]overwrite[/code] is "
+"[code]true[/code]."
+msgstr ""
+
+#: doc/classes/Dictionary.xml
#, fuzzy
msgid "Returns the number of keys in the dictionary."
msgstr "Retorna o número de nós nesta [SceneTree]."
@@ -22469,9 +22508,23 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide a state data you want to be saved, like view "
+"position, grid settings, folding, etc. 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). This data is automatically saved for "
+"each scene in an [code]editstate[/code] file in the editor metadata folder. "
+"If you want to store global (scene-independent) editor data for your plugin, "
+"you can use [method get_window_layout] instead.\n"
+"Use [method set_state] to restore your saved state.\n"
+"[b]Note:[/b] This method should not be used to save important settings that "
+"should persist with the project.\n"
+"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be "
+"stored and restored correctly.\n"
+"[codeblock]\n"
+"func get_state():\n"
+" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n"
+" return state\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -22482,9 +22535,18 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide the GUI layout of the plugin or any other "
+"data you want to be stored. 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). The data is stored in the "
+"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n"
+"Use [method set_window_layout] to restore your saved layout.\n"
+"[codeblock]\n"
+"func get_window_layout(configuration):\n"
+" configuration.set_value(\"MyPlugin\", \"window_position\", $Window."
+"position)\n"
+" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -22597,11 +22659,30 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the state saved by [method get_state]."
+msgid ""
+"Restore the state saved by [method get_state]. This method is called when "
+"the current scene tab is changed in the editor.\n"
+"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise "
+"it will not be recognized and this method will not be called.\n"
+"[codeblock]\n"
+"func set_state(data):\n"
+" zoom = data.get(\"zoom\", 1.0)\n"
+" preferred_color = data.get(\"my_color\", Color.white)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the plugin GUI layout saved by [method get_window_layout]."
+msgid ""
+"Restore the plugin GUI layout and data saved by [method get_window_layout]. "
+"This method is called for every plugin on editor startup. Use the provided "
+"[code]configuration[/code] file to read your saved data.\n"
+"[codeblock]\n"
+"func set_window_layout(configuration):\n"
+" $Window.position = configuration.get_value(\"MyPlugin\", "
+"\"window_position\", Vector2())\n"
+" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", "
+"Color.white)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -27264,7 +27345,8 @@ msgid ""
"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])."
+"at fixed steps (see [member width]). See also [GradientTexture2D] and "
+"[CurveTexture]."
msgstr ""
#: doc/classes/GradientTexture.xml
@@ -27286,7 +27368,8 @@ msgid ""
"repeat] types using colors obtained from the gradient. 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] and [member height])."
+"[member width] and [member height]). See also [GradientTexture] and "
+"[CurveTexture]."
msgstr ""
#: doc/classes/GradientTexture2D.xml
@@ -28113,6 +28196,13 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+#, fuzzy
+msgid ""
+"If [code]true[/code], this GridMap uses cell navmesh resources to create "
+"navigation regions."
+msgstr "Retorna [code]true[/code] se o script pode ser instanciado."
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid "If [code]true[/code], grid items are centered on the X axis."
msgstr ""
@@ -28163,6 +28253,10 @@ msgid "The assigned [MeshLibrary]."
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+msgid "The navigation layers the GridMap generates its navigation regions in."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
"Overrides the default friction and bounce physics properties for the whole "
"[GridMap]."
@@ -29386,7 +29480,7 @@ msgid ""
" # 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 body = to_json({\"name\": \"Godette\"})\n"
" error = http_request.request(\"https://httpbin.org/post\", [], true, "
"HTTPClient.METHOD_POST, body)\n"
" if error != OK:\n"
@@ -30557,7 +30651,7 @@ msgstr ""
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 "
+"([member 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 "
@@ -30706,10 +30800,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Returns the mouse mode. See the constants for more information."
-msgstr ""
-
-#: doc/classes/Input.xml
msgid ""
"Gets an input vector by specifying four actions for the positive and "
"negative X and Y axes.\n"
@@ -30904,24 +30994,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Sets the mouse mode. See the constants for more information."
-msgstr ""
-
-#: doc/classes/Input.xml
-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
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 "
@@ -30957,6 +31029,24 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
+msgid "Controls the mouse mode. See [enum MouseMode] for more information."
+msgstr ""
+
+#: doc/classes/Input.xml
+msgid ""
+"If [code]true[/code], similar input events sent by the operating system are "
+"accumulated. 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 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
msgid "Emitted when a joypad device has been connected or disconnected."
msgstr ""
@@ -31264,8 +31354,8 @@ msgstr ""
#: doc/classes/InputEventJoypadButton.xml
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]."
+"Represents the pressure the user puts on the button with their finger, if "
+"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]."
msgstr ""
#: doc/classes/InputEventJoypadMotion.xml
@@ -31528,9 +31618,9 @@ 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 "
+"at most. If you need more precise input reporting, set [member Input."
+"use_accumulated_input] to [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."
@@ -32025,7 +32115,18 @@ msgid ""
"[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."
+"fixed_column_width] greater than zero to wrap the text.\n"
+"[b]Incremental search:[/b] Like [PopupMenu] and [Tree], [ItemList] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/ItemList.xml
@@ -35795,12 +35896,18 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Returns the override [Material] for a surface of the [Mesh] resource.\n"
+"[b]Note:[/b] This function only returns [i]override[/i] materials associated "
+"with this [MeshInstance]. Consider using [method get_active_material] or "
+"[method Mesh.surface_get_material] to get materials associated with the "
+"[Mesh] resource."
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the number of surface materials."
-msgstr ""
+#, fuzzy
+msgid "Returns the number of surface override materials."
+msgstr "Retorna o número de nós nesta [SceneTree]."
#: doc/classes/MeshInstance.xml
msgid ""
@@ -35836,7 +35943,10 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Sets the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Sets the override [Material] for the specified surface of the [Mesh] "
+"resource. This material is associated with this [MeshInstance] rather than "
+"with the [Mesh] resource."
msgstr ""
#: doc/classes/MeshInstance.xml
@@ -35867,9 +35977,10 @@ msgstr ""
#: doc/classes/MeshInstance2D.xml
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\"."
+"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be "
+"automatically created from an existing [Sprite] via a tool in the editor "
+"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to "
+"MeshInstance2D[/b] at the top of the 2D editor viewport."
msgstr ""
#: doc/classes/MeshInstance2D.xml
@@ -36635,6 +36746,9 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"Provides navigation and pathfinding within a collection of "
"[NavigationMesh]es. By default, these will be automatically collected from "
"child [NavigationMeshInstance] nodes. In addition to basic pathfinding, this "
@@ -36675,7 +36789,15 @@ msgid ""
msgstr ""
#: doc/classes/Navigation.xml
+#, fuzzy
+msgid "Returns the [RID] of the navigation map on the [NavigationServer]."
+msgstr "Retorna o número de nós nesta [SceneTree]."
+
+#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"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, "
@@ -36697,16 +36819,31 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation.get_simple_path] path query."
+msgstr ""
+
+#: doc/classes/Navigation.xml
+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/Navigation.xml doc/classes/Navigation2DServer.xml
+#: doc/classes/NavigationServer.xml
+msgid ""
+"Emitted when a navigation map is updated, when a region moves or is modified."
+msgstr ""
+
#: doc/classes/Navigation2D.xml
msgid "2D navigation and pathfinding node."
msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -36726,6 +36863,9 @@ msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -36735,6 +36875,12 @@ msgstr ""
msgid "The XY plane cell size to use for fields."
msgstr ""
+#: doc/classes/Navigation2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation2D.get_simple_path] path query."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml
msgid "Server interface for low-level 2D navigation access."
msgstr ""
@@ -36751,8 +36897,12 @@ msgid ""
"through scripts.\n"
"For two regions to be connected to each other, they must share a similar "
"edge. An edge is considered connected to another if both of its two vertices "
-"are at a distance less than [member Navigation.edge_connection_margin] to "
-"the respective other edge's vertex.\n"
+"are at a distance less than navigation map [code]edge_connection_margin[/"
+"code] to the respective other edge's vertex.\n"
+"You may assign navigation layers to regions with [method Navigation2DServer."
+"region_set_navigation_layers], which then can be checked upon when "
+"requesting a path with [method Navigation2DServer.map_get_path]. This allows "
+"allowing or forbidding some areas to 2D objects.\n"
"To use the collision avoidance system, you may use agents. You can set an "
"agent's target velocity, then the servers will emit a callback with a "
"modified velocity.\n"
@@ -36782,7 +36932,17 @@ msgid "Returns [code]true[/code] if the map got changed the previous frame."
msgstr "Retorna [code]true[/code] se o script pode ser instanciado."
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Callback called at the end of the RVO process."
+msgid ""
+"Callback called at the end of the RVO process. If a callback is created "
+"manually and the agent is placed on a navigation map it will calculate "
+"avoidance for the agent and dispatch the calculated [code]safe_velocity[/"
+"code] to the [code]receiver[/code] object with a signal to the chosen "
+"[code]method[/code] name.\n"
+"[b]Note:[/b] Created callbacks are always processed independently of the "
+"SceneTree state as long as the agent is on a navigation map and not freed. "
+"To disable the dispatch of a callback from an agent use [method "
+"agent_set_callback] again with a [code]null[/code] object as the "
+"[code]receiver[/code]."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -36844,15 +37004,55 @@ msgid "Destroys the given RID."
msgstr "Retorna o [RID] do objeto."
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns all created navigation map [RID]s on the NavigationServer. This "
+"returns both 2D and 3D created navigation maps as there is technically no "
+"distinction between them."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Create a new map."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"This function immediately forces synchronization of the specified navigation "
+"[code]map[/code] [RID]. By default navigation maps are only synchronized at "
+"the end of each physics frame. This function can be used to immediately "
+"(re)calculate all the navigation meshes and region connections of the "
+"navigation map. This makes it possible to query a navigation path for a "
+"changed map immediately and in the same frame (multiple times if needed).\n"
+"Due to technical restrictions the current NavigationServer command queue "
+"will be flushed. This means all already queued update commands for this "
+"physics frame will be executed, even those intended for other maps, regions "
+"and agents not part of the specified map. The expensive computation of the "
+"navigation meshes and region connections of a map will only be done for the "
+"specified map. Other maps will receive the normal synchronization at the end "
+"of the physics frame. Should the specified map receive changes after the "
+"forced update it will update again as well when the other maps receive their "
+"update.\n"
+"Avoidance processing and dispatch of the [code]safe_velocity[/code] signals "
+"is untouched by this function and continues to happen for all maps and "
+"agents at the end of the physics frame.\n"
+"[b]Note:[/b] With great power comes great responsibility. This function "
+"should only be used by users that really know what they are doing and have a "
+"good reason for it. Forcing an immediate update of a navigation map requires "
+"locking the NavigationServer and flushing the entire NavigationServer "
+"command queue. Not only can this severely impact the performance of a game "
+"but it can also introduce bugs if used inappropriately without much "
+"foresight."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns all navigation agents [RID]s that are currently assigned to the "
"requested navigation [code]map[/code]."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
#, fuzzy
msgid "Returns the map cell size."
@@ -36877,7 +37077,10 @@ msgid ""
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Returns the navigation path to reach the destination from the origin."
+msgid ""
+"Returns the navigation path to reach the destination from the origin. "
+"[code]navigation_layers[/code] is a bitmask of all region layers that are "
+"allowed to be in the path."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -36896,6 +37099,12 @@ msgstr "Retorna [code]true[/code] se o script pode ser instanciado."
msgid "Sets the map active."
msgstr "Retorna a câmera 3D ativa."
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/"
+"b] Currently not implemented."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Set the map cell size used to weld the navigation mesh polygons."
msgstr ""
@@ -36911,15 +37120,81 @@ msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"Returns the ending point of a connection door. [code]connection[/code] is an "
+"index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns the starting point of a connection door. [code]connection[/code] is "
+"an index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns how many connections this [code]region[/code] has with other regions "
+"in the map."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]."
+msgstr ""
+"Retorna a [Cor] em [code]name[/code] se o tema tiver [code]node_type[/code]."
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns the navigation map [RID] the requested [code]region[/code] is "
"currently assigned to."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
#, fuzzy
+msgid "Returns the region's navigation layers."
+msgstr "Retorna o número de nós nesta [SceneTree]."
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]."
+msgstr ""
+"Retorna a [Cor] em [code]name[/code] se o tema tiver [code]node_type[/code]."
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns [code]true[/code] if the provided [code]point[/code] in world space "
+"is currently owned by the provided navigation [code]region[/code]. Owned in "
+"this context means that one of the region's navigation mesh polygon faces "
+"has a possible position at the closest distance to this point compared to "
+"all other navigation meshes from other navigation regions that are also "
+"registered on the navigation map of the provided region.\n"
+"If multiple navigation meshes have positions at equal distance the "
+"navigation region whose polygons are processed first wins the ownership. "
+"Polygons are processed in the same order that navigation regions were "
+"registered on the NavigationServer.\n"
+"[b]Note:[/b] If navigation meshes from different navigation regions overlap "
+"(which should be avoided in general) the result might not be what is "
+"expected."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]."
+msgstr ""
+"Limpa o ícone em [code]name[/code] se o tema tiver [code]node_type[/code]."
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
msgid "Sets the map for the region."
msgstr "Define a cor da borda."
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method Navigation2DServer.map_get_path])."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
#, fuzzy
msgid "Sets the navigation mesh for the region."
@@ -36930,6 +37205,11 @@ msgstr "O singleton [NavigationMeshGenerator]."
msgid "Sets the global transformation for the region."
msgstr "Retorna a posição global do mouse."
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]."
+msgstr "Retorna o tipo do nó em at [code]idx[/code]."
+
#: doc/classes/NavigationAgent.xml
msgid "3D agent used in navigation for collision avoidance."
msgstr ""
@@ -36939,9 +37219,16 @@ msgid ""
"3D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationAgent] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World] navigation map. If this node is a child of a [Navigation] "
+"node it will register to the navigation map of the navigation node or the "
+"function [method set_navigation] can be used to set the navigation node "
+"directly. [NavigationAgent] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -36959,9 +37246,16 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-#, fuzzy
-msgid "Returns the path from start to finish in global coordinates."
-msgstr "Retorna a rotação (em radianos)."
+msgid ""
+"Returns this agent's current path from start to finish in global "
+"coordinates. The path only updates when the target location is changed or "
+"the agent requires a repath. The path array is not intended to be used in "
+"direct path movement as the agent has its own internal path logic that would "
+"get corrupted by changing the path array manually. Use the intended [method "
+"get_next_location] once every physics frame to receive the next path point "
+"for the agents movement as this function also updates the internal path "
+"logic."
+msgstr ""
#: doc/classes/NavigationAgent.xml
#, fuzzy
@@ -36976,11 +37270,24 @@ msgid ""
"system."
msgstr ""
-#: doc/classes/NavigationAgent.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
+"Returns the [RID] of the navigation map for this NavigationAgent node. This "
+"function returns always the map set on the NavigationAgent node and not the "
+"map of the abstract agent on the NavigationServer. If the agent map is "
+"changed directly with the NavigationServer API the NavigationAgent node will "
+"not be aware of the map change. Use [method set_navigation_map] to change "
+"the navigation map for the NavigationAgent and also update the agent on the "
+"NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"Returns a [Vector3] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the origin of the agent's parent."
+"Returns the next location in global coordinates that can be moved to, making "
+"sure that there are no static objects in the way. If the agent does not have "
+"a navigation path, it will return the position of the agent's parent. The "
+"use of this function once every physics frame is required to update the "
+"internal path logic of the NavigationAgent."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -37024,6 +37331,12 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"Sets the [RID] of the navigation map this NavigationAgent node should use "
+"and also updates the [code]agent[/code] on the NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"Sets the user desired final location. This will clear the current navigation "
"path."
msgstr ""
@@ -37036,7 +37349,13 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml
-msgid "The agent height offset to match the navigation mesh height."
+msgid ""
+"The NavigationAgent height offset is subtracted from the y-axis value of any "
+"vector path position for this NavigationAgent. The NavigationAgent height "
+"offset does not change or influence the navigation mesh or pathfinding query "
+"result. Additional navigation maps that use regions with navigation meshes "
+"that the developer baked with appropriate agent radius or height values are "
+"required to support different-sized agents."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -37063,27 +37382,53 @@ msgstr ""
msgid "The maximum speed that an agent can move."
msgstr ""
+#: doc/classes/NavigationAgent.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "The distance to search for other agents."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"The distance threshold before a path point is considered to be reached. This "
+"will allow an agent to not have to hit a path point on the path exactly, but "
+"in the area. If this value is set to high the NavigationAgent will skip "
+"points on the path which can lead to leaving the navigation mesh. If this "
+"value is set to low the NavigationAgent will be stuck in a repath loop cause "
+"it will constantly overshoot or undershoot the distance to the next point on "
+"each physics frame update."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"The maximum distance the agent is allowed away from the ideal path to the "
"final location. This can happen due to trying to avoid collisions. When the "
"maximum distance is exceeded, it recalculates the ideal path."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-#, fuzzy
-msgid "The radius of the agent."
-msgstr "A cor do texto."
+msgid ""
+"The radius of the avoidance agent. This is the \"body\" of the avoidance "
+"agent and not the avoidance maneuver starting radius (which is controlled by "
+"[member neighbor_dist]).\n"
+"Does not affect normal pathfinding. To change an actor's pathfinding radius "
+"bake [NavigationMesh] resources with a different [member NavigationMesh."
+"agent_radius] property and use different navigation maps for each actor size."
+msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"The distance threshold before a target is considered to be reached. This "
-"will allow an agent to not have to hit a point on the path exactly, but in "
-"the area."
+"The distance threshold before the final target point is considered to be "
+"reached. This will allow an agent to not have to hit the point of the final "
+"target exactly, but only the area. If this value is set to low the "
+"NavigationAgent will be stuck in a repath loop cause it will constantly "
+"overshoot or undershoot the distance to the final target point on each "
+"physics frame update."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -37127,9 +37472,16 @@ msgid ""
"2D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationAgent2D] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World2D] navigation map. If this node is a child of a "
+"[Navigation2D] node it will register to the navigation map of the navigation "
+"node or the function [method set_navigation] can be used to set the "
+"navigation node directly. [NavigationAgent2D] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent2D.xml
@@ -37146,13 +37498,6 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent2D.xml
-msgid ""
-"Returns a [Vector2] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the position of the agent's parent."
-msgstr ""
-
-#: doc/classes/NavigationAgent2D.xml
#, fuzzy
msgid "Returns the [RID] of this agent on the [Navigation2DServer]."
msgstr "Retorna o número de nós nesta [SceneTree]."
@@ -37173,6 +37518,13 @@ msgid ""
"only be enabled on agents that currently require it."
msgstr ""
+#: doc/classes/NavigationAgent2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent2D] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationMesh.xml
msgid "A mesh to approximate the walkable areas and obstacles."
msgstr ""
@@ -37202,10 +37554,11 @@ msgid ""
msgstr ""
#: doc/classes/NavigationMesh.xml
+#, fuzzy
msgid ""
-"Returns whether the specified [code]bit[/code] of the [member geometry/"
-"collision_mask] is set."
-msgstr ""
+"Returns whether the specified [code]bit[/code] of the [member "
+"geometry_collision_mask] is set."
+msgstr "Retorna [code]true[/code] se o script pode ser instanciado."
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
msgid ""
@@ -37227,9 +37580,9 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/"
-"code] in the [member geometry/collision_mask].\n"
+"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]."
+"code] in the [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
@@ -37243,14 +37596,14 @@ 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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -37262,7 +37615,7 @@ 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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -37290,13 +37643,17 @@ msgstr ""
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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
-"If [code]true[/code], marks walkable spans as not walkable if the clearance "
-"above the span is less than [member agent/height]."
+"If the baking [AABB] has a volume the navigation mesh baking will be "
+"restricted to its enclosing area."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+msgid "The position offset applied to the [member filter_baking_aabb] [AABB]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -37309,13 +37666,19 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]true[/code], marks non-walkable spans as walkable if their maximum "
-"is within [member agent/max_climb] of a walkable neighbor."
+"is within [member agent_max_climb] of a walkable neighbor."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+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
msgid ""
"The physics layers to scan for static colliders.\n"
-"Only used when [member geometry/parsed_geometry_type] is [constant "
+"Only used when [member geometry_parsed_geometry_type] is [constant "
"PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]."
msgstr ""
@@ -37334,7 +37697,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"The name of the group to scan for geometry.\n"
-"Only used when [member geometry/source_geometry_mode] is [constant "
+"Only used when [member geometry_source_geometry_mode] is [constant "
"SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant "
"SOURCE_GEOMETRY_GROUPS_EXPLICIT]."
msgstr ""
@@ -37397,7 +37760,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Parses [StaticBody] colliders as geometry. The collider should be in any of "
-"the layers specified by [member geometry/collision_mask]."
+"the layers specified by [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -37419,13 +37782,13 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Scans nodes in a group and their child nodes recursively for geometry. The "
-"group is specified by [member geometry/source_group_name]."
+"group is specified by [member geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Uses nodes in a group for geometry. The group is specified by [member "
-"geometry/source_group_name]."
+"geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -37467,7 +37830,15 @@ msgid ""
"geometry for walkable terrain suitable to [NavigationMesh] agent properties "
"by creating a voxel world around the meshes bounding area.\n"
"The finalized navigation mesh is then returned and stored inside the "
-"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes."
+"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] "
+"nodes.\n"
+"[b]Note:[/b] Using meshes to not only define walkable surfaces but also "
+"obstruct navigation baking does not always work. The navigation baking has "
+"no concept of what is a geometry \"inside\" when dealing with mesh source "
+"geometry and this is intentional. Depending on current baking parameters, as "
+"soon as the obstructing mesh is large enough to fit a navigation mesh area "
+"inside, the baking will generate navigation mesh areas that are inside the "
+"obstructing source geometry mesh."
msgstr ""
#: doc/classes/NavigationMeshGenerator.xml
@@ -37475,8 +37846,8 @@ msgid ""
"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child "
"nodes under the provided [code]root_node[/code] or a specific group of nodes "
"for potential source geometry. The parse behavior can be controlled with the "
-"[member NavigationMesh.geometry/parsed_geometry_type] and [member "
-"NavigationMesh.geometry/source_geometry_mode] properties on the "
+"[member NavigationMesh.geometry_parsed_geometry_type] and [member "
+"NavigationMesh.geometry_source_geometry_mode] properties on the "
"[NavigationMesh] resource."
msgstr ""
@@ -37494,8 +37865,21 @@ msgstr ""
#: doc/classes/NavigationMeshInstance.xml
msgid ""
"An instance of a [NavigationMesh]. It tells the [Navigation] node what can "
-"be navigated and what cannot, based on the [NavigationMesh] resource. This "
-"should be a child of a [Navigation] node."
+"be navigated and what cannot, based on the [NavigationMesh] resource.\n"
+"By default this node will register to the default [World] navigation map. If "
+"this node is a child of a [Navigation] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method NavigationServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The cost of entering this region from another region can be controlled with "
+"the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The cost of traveling distances inside this region can be controlled with "
+"the [member travel_cost] multiplier."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
@@ -37524,11 +37908,35 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding enters this region's navmesh from another regions navmesh "
+"the [code]enter_cost[/code] value is added to the path distance for "
+"determining the shortest path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationMesh] "
+"belongs to. On path requests with [method NavigationServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
#, fuzzy
msgid "The [NavigationMesh] resource to use."
msgstr "O singleton [NavigationMeshGenerator]."
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding moves inside this region's navmesh the traveled distances "
+"are multiplied with [code]travel_cost[/code] for determining the shortest "
+"path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
#, fuzzy
msgid "Notifies when the navigation mesh bake operation is completed."
msgstr "Notifica quando uma animação começa a reproduzir."
@@ -37547,7 +37955,9 @@ msgid ""
"3D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationObstacle] is physics safe."
+"[NavigationObstacle] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle.xml
@@ -37588,7 +37998,9 @@ msgid ""
"2D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationObstacle2D] is physics safe."
+"[NavigationObstacle2D] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle2D.xml
@@ -37669,6 +38081,14 @@ msgstr ""
#: doc/classes/NavigationPolygon.xml
msgid ""
+"Returns the [NavigationMesh] resulting from this navigation polygon. This "
+"navmesh can be used to update the navmesh of a region with the [method "
+"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server "
+"behind the scene)."
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml
+msgid ""
"Returns a [PoolVector2Array] containing the vertices of an outline that was "
"created in the editor or by script."
msgstr ""
@@ -37705,6 +38125,30 @@ msgid ""
msgstr ""
#: doc/classes/NavigationPolygonInstance.xml
+msgid "A region of the 2D navigation map."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A region of the navigation map. It tells the [Navigation2DServer] what can "
+"be navigated and what cannot, based on its [NavigationPolygon] resource.\n"
+"By default this node will register to the default [World2D] navigation map. "
+"If this node is a child of a [Navigation2D] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The pathfinding cost of entering this region from another region can be "
+"controlled with the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The pathfinding cost of traveling distances inside this region can be "
+"controlled with the [member travel_cost] multiplier."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
msgid ""
"Returns the [RID] of this region on the [Navigation2DServer]. Combined with "
"[method Navigation2DServer.map_get_closest_point_owner] can be used to "
@@ -37712,6 +38156,23 @@ msgid ""
"navigation map."
msgstr ""
+#: doc/classes/NavigationPolygonInstance.xml
+msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationPolygon] "
+"belongs to. On path requests with [method Navigation2DServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+#, fuzzy
+msgid "The [NavigationPolygon] resource to use."
+msgstr "O singleton [NavigationMeshGenerator]."
+
#: doc/classes/NavigationServer.xml
msgid "Server interface for low-level 3D navigation access."
msgstr ""
@@ -37791,6 +38252,12 @@ msgid "Bakes the navigation mesh."
msgstr ""
#: doc/classes/NavigationServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method NavigationServer.map_get_path])."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
msgid "Control activation of this server."
msgstr ""
@@ -39257,13 +39724,19 @@ msgstr ""
#: doc/classes/Node.xml
msgid ""
"Emitted when a child node enters the scene tree, either because it entered "
-"on its own or because this node entered with it."
+"on its own or because this node entered with it.\n"
+"This signal is emitted [i]after[/i] the child node's own [constant "
+"NOTIFICATION_ENTER_TREE] and [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
msgid ""
-"Emitted when a child node exits the scene tree, either because it exited on "
-"its own or because this node exited."
+"Emitted when a child node is about to exit the scene tree, either because it "
+"is being removed or freed directly, or because this node is exiting the "
+"tree.\n"
+"When this signal is received, the child [code]node[/code] is still in the "
+"tree and valid. This signal is emitted [i]after[/i] the child node's own "
+"[signal tree_exiting] and [constant NOTIFICATION_EXIT_TREE]."
msgstr ""
#: doc/classes/Node.xml
@@ -39275,8 +39748,11 @@ msgid "Emitted when the node is renamed."
msgstr "Emitido quando o nó é renomeado."
#: doc/classes/Node.xml
-msgid "Emitted when the node enters the tree."
-msgstr "Emitido quando o nó entra na árvore."
+msgid ""
+"Emitted when the node enters the tree.\n"
+"This signal is emitted [i]after[/i] the related [constant "
+"NOTIFICATION_ENTER_TREE] notification."
+msgstr ""
#: doc/classes/Node.xml
msgid "Emitted after the node exits the tree and is no longer active."
@@ -39285,15 +39761,21 @@ msgstr ""
#: doc/classes/Node.xml
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)."
+"the right place for de-initialization (or a \"destructor\", if you will).\n"
+"This signal is emitted [i]before[/i] the related [constant "
+"NOTIFICATION_EXIT_TREE] notification."
msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node enters a [SceneTree]."
+msgid ""
+"Notification received when the node enters a [SceneTree].\n"
+"This notification is emitted [i]before[/i] the related [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node is about to exit a [SceneTree]."
+msgid ""
+"Notification received when the node is about to exit a [SceneTree].\n"
+"This notification is emitted [i]after[/i] the related [signal tree_exiting]."
msgstr ""
#: doc/classes/Node.xml
@@ -39554,7 +40036,13 @@ msgid "Rotation in degrees, relative to the node's parent."
msgstr ""
#: doc/classes/Node2D.xml
-msgid "The node's scale. Unscaled value: [code](1, 1)[/code]."
+msgid ""
+"The node's scale. Unscaled value: [code](1, 1)[/code].\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
#: doc/classes/Node2D.xml
@@ -41000,6 +41488,10 @@ msgid ""
" if argument.find(\"=\") > -1:\n"
" var key_value = argument.split(\"=\")\n"
" arguments[key_value[0].lstrip(\"--\")] = key_value[1]\n"
+" else:\n"
+" # Options without an argument will be present in the dictionary,\n"
+" # with the value set to an empty string.\n"
+" arguments[argument.lstrip(\"--\")] = \"\"\n"
"[/codeblock]"
msgstr ""
@@ -41662,8 +42154,15 @@ msgstr ""
msgid ""
"Moves the file or directory to the system's recycle bin. See also [method "
"Directory.remove].\n"
+"The method takes only global paths, so you may need to use [method "
+"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/"
+"code] as it will not work in exported project.\n"
"[b]Note:[/b] If the user has disabled the recycle bin on their system, the "
-"file will be permanently deleted instead."
+"file will be permanently deleted instead.\n"
+"[codeblock]\n"
+"var file_to_remove = \"user://slot1.sav\"\n"
+"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/OS.xml
@@ -46537,7 +47036,18 @@ msgstr ""
#: doc/classes/PopupMenu.xml
msgid ""
"[PopupMenu] is a [Control] that displays a list of options. They are popular "
-"in toolbars or context menus."
+"in toolbars or context menus.\n"
+"[b]Incremental search:[/b] Like [ItemList] and [Tree], [PopupMenu] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/PopupMenu.xml
@@ -48050,7 +48560,16 @@ msgid ""
msgstr ""
#: doc/classes/ProjectSettings.xml
-msgid "Message to be displayed before the backtrace when the engine crashes."
+msgid ""
+"Message to be displayed before the backtrace when the engine crashes. By "
+"default, this message is only used in exported projects due to the editor-"
+"only override applied to this setting."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Editor-only override for [member debug/settings/crash_handler/message]. Does "
+"not affect exported projects in debug or release mode."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -48295,6 +48814,18 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default naming style for scene files to infer from their root nodes. "
+"Possible options are:\n"
+"- [code]0[/code] (Auto): Uses the scene root name as is without changing its "
+"casing.\n"
+"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase "
+"casing.\n"
+"- [code]2[/code] (snake_case): Converts the scene root name to snake_case "
+"casing."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -48520,6 +49051,198 @@ msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 1."
msgstr "Nome opcional para a camada 1 da física 2D."
@@ -48728,6 +49451,198 @@ msgid "Optional name for the 2D render layer 9."
msgstr "Nome opcional para a camada 9 da renderização 2D."
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 1."
msgstr ""
@@ -48996,6 +49911,49 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default cell height for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_height].\n"
+"[b]Note:[/b] Currently not implemented."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 2D navigation maps. See [method "
+"Navigation2DServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell height for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_height]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 3D navigation maps. See [method "
+"NavigationServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default map up vector for 3D navigation maps. See [method NavigationServer."
+"map_set_up]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -49669,20 +50627,28 @@ msgid ""
"cause.\n"
"The default value is a conservative one, so you are advised to tweak it "
"according to the hardware you are targeting.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"The default is a very conservative override for [code]rendering/gles3/"
-"shaders/max_concurrent_compiles[/code].\n"
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
"Depending on the specific devices you are targeting, you may want to raise "
"it.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
+"Depending on the specific browsers you are targeting, you may want to raise "
+"it.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -49690,19 +50656,28 @@ msgid ""
"The maximum size, in megabytes, that the ubershader cache can grow up to. On "
"startup, the least recently used entries will be deleted until the total "
"size is within bounds.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/ubershader_cache_size_mb[/"
-"code], so a smaller maximum size can be configured for mobile platforms, "
-"where storage space is more limited.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for mobile platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for web platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] Currently, shader caching is generally unavailable on web "
+"platforms.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -49734,14 +50709,22 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/shader_compilation_mode[/"
-"code], so asynchronous compilation can be disabled for mobile.\n"
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on mobile platforms.\n"
"You may want to do that since mobile GPUs generally won't support "
"ubershaders due to their complexity."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on web platforms.\n"
+"You may want to do that since certain browsers (especially on mobile "
+"platforms) generally won't support ubershaders due to their complexity."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
@@ -50498,7 +51481,6 @@ msgid ""
"- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/"
"code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, "
"small grid radius values may lead to unwanted groupings.\n"
-"[/codeblock]\n"
"[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more "
"effective and faster [VisibilityNotifier] functionality. For most use cases, "
"[method Vector3.distance_to] or [method Vector3.distance_squared_to] are "
@@ -52654,6 +53636,22 @@ msgid "Makes text fill width."
msgstr ""
#: doc/classes/RichTextLabel.xml
+msgid "Aligns top of the inline image to the top of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns center of the inline image to the center of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns bottom of the inline image to the baseline of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns bottom of the inline image to the bottom of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
msgid "Each list item has a number marker."
msgstr ""
@@ -54394,8 +55392,8 @@ msgid ""
" yield(get_tree().create_timer(1.0), \"timeout\")\n"
" print(\"Timer ended.\")\n"
"[/codeblock]\n"
-"The timer will be automatically freed after its time elapses, so be aware "
-"that any reference you might have kept to it will become invalid."
+"The timer will be dereferenced after its time elapses. To preserve the "
+"timer, you can keep a reference to it. See [Reference]."
msgstr ""
#: doc/classes/SceneTreeTimer.xml
@@ -54428,24 +55426,23 @@ msgid ""
"manually (i.e. by using [code]Tween.new()[/code]) are invalid. They can't be "
"used for tweening values, but you can do manual interpolation with [method "
"interpolate_value].\n"
-"A [SceneTreeTween] animation is composed of a sequence of [Tweener]s, which "
-"by default are executed one after another. You can create a sequence by "
-"appending [Tweener]s to the [SceneTreeTween]. Animating something with a "
-"[Tweener] is called tweening. Example tweening sequence looks like this:\n"
+"A tween animation is created by adding [Tweener]s to the [SceneTreeTween] "
+"object, using [method tween_property], [method tween_interval], [method "
+"tween_callback] or [method tween_method]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1)\n"
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"This sequence will make the [code]$Sprite[/code] node turn red, then shrink "
-"and finally the [method Node.queue_free] is called to remove the sprite. See "
-"methods [method tween_property], [method tween_interval], [method "
-"tween_callback] and [method tween_method] for more usage information.\n"
+"This sequence will make the [code]$Sprite[/code] node turn red, then shrink, "
+"before finally calling [method Node.queue_free] to free the sprite. "
+"[Tweener]s are executed one after another by default. This behavior can be "
+"changed using [method parallel] and [method set_parallel].\n"
"When a [Tweener] is created with one of the [code]tween_*[/code] methods, a "
"chained method call can be used to tweak the properties of this [Tweener]. "
-"For example, if you want to set different transition type in the above "
-"example, you can do:\n"
+"For example, if you want to set a different transition type in the above "
+"example, you can use [method set_trans]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1).set_trans(Tween."
@@ -54454,8 +55451,9 @@ msgid ""
"TRANS_BOUNCE)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Most of the [SceneTreeTween] methods can be chained this way too. In this "
-"example the [SceneTreeTween] is bound and have set a default transition:\n"
+"Most of the [SceneTreeTween] methods can be chained this way too. In the "
+"following example the [SceneTreeTween] is bound to the running script's node "
+"and a default transition is set for its [Tweener]s:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween().bind_node(self).set_trans(Tween."
"TRANS_ELASTIC)\n"
@@ -54463,16 +55461,16 @@ msgid ""
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Another interesting use for [SceneTreeTween]s is animating arbitrary set of "
+"Another interesting use for [SceneTreeTween]s is animating arbitrary sets of "
"objects:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"for sprite in get_children():\n"
-" tween.tween_property(sprite, \"position\", Vector2(), 1)\n"
+" tween.tween_property(sprite, \"position\", Vector2(0, 0), 1)\n"
"[/codeblock]\n"
"In the example above, all children of a node are moved one after another to "
"position (0, 0).\n"
-"Some [Tweener]s use transitions and eases. The first accepts an [enum Tween."
+"Some [Tweener]s use transitions and eases. The first accepts a [enum Tween."
"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 Tween.EaseType] constant, and "
@@ -54484,7 +55482,7 @@ msgid ""
"tween_cheatsheet.png]Tween easing and transition types cheatsheet[/url]\n"
"[b]Note:[/b] All [SceneTreeTween]s will automatically start by default. To "
"prevent a [SceneTreeTween] from autostarting, you can call [method stop] "
-"immediately after it was created."
+"immediately after it is created."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -54514,21 +55512,24 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
-"Processes the [SceneTreeTween] by given [code]delta[/code] value, in "
-"seconds. Mostly useful when the [SceneTreeTween] is paused, for controlling "
-"it manually. Can also be used to end the [SceneTreeTween] animation "
-"immediately, by using [code]delta[/code] longer than the whole duration.\n"
+"Processes the [SceneTreeTween] by the given [code]delta[/code] value, in "
+"seconds. This is mostly useful for manual control when the [SceneTreeTween] "
+"is paused. It can also be used to end the [SceneTreeTween] animation "
+"immediately, by setting [code]delta[/code] longer than the whole duration of "
+"the [SceneTreeTween] animation.\n"
"Returns [code]true[/code] if the [SceneTreeTween] still has [Tweener]s that "
"haven't finished.\n"
-"[b]Note:[/b] The [SceneTreeTween] will become invalid after finished, but "
-"you can call [method stop] after the step, to keep it and reset."
+"[b]Note:[/b] The [SceneTreeTween] will become invalid in the next processing "
+"frame after its animation finishes. Calling [method stop] after performing "
+"[method custom_step] instead keeps and resets the [SceneTreeTween]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Returns the total time in seconds the [SceneTreeTween] has been animating (i."
-"e. time since it started, not counting pauses etc.). The time is affected by "
-"[method set_speed_scale] and [method stop] will reset it to [code]0[/code].\n"
+"e. the time since it started, not counting pauses etc.). The time is "
+"affected by [method set_speed_scale], and [method stop] will reset it to "
+"[code]0[/code].\n"
"[b]Note:[/b] As it results from accumulating frame deltas, the time returned "
"after the [SceneTreeTween] has finished animating will be slightly greater "
"than the actual [SceneTreeTween] duration."
@@ -54564,11 +55565,10 @@ msgstr ""
msgid ""
"Returns whether the [SceneTreeTween] is valid. A valid [SceneTreeTween] is a "
"[SceneTreeTween] contained by the scene tree (i.e. the array from [method "
-"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). "
-"[SceneTreeTween] might become invalid when it has finished tweening or was "
-"killed, also when created with [code]Tween.new()[/code]. Invalid "
-"[SceneTreeTween] can't have [Tweener]s appended, because it can't animate "
-"them. You can however still use [method interpolate_value]."
+"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). A "
+"[SceneTreeTween] might become invalid when it has finished tweening, is "
+"killed, or when created with [code]SceneTreeTween.new()[/code]. Invalid "
+"[SceneTreeTween]s can't have [Tweener]s appended."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -54608,16 +55608,15 @@ msgstr ""
msgid ""
"Sets the number of times the tweening sequence will be repeated, i.e. "
"[code]set_loops(2)[/code] will run the animation twice.\n"
-"Calling this method without arguments will make the [SceneTreeTween] run "
-"infinitely, until it is either killed by [method kill] or by freeing bound "
-"node, or all the animated objects have been freed (which makes further "
+"Calling this method without arguments will make the [Tween] run infinitely, "
+"until either it is killed with [method kill], the [Tween]'s bound node is "
+"freed, or all the animated objects have been freed (which makes further "
"animation impossible).\n"
"[b]Warning:[/b] Make sure to always add some duration/delay when using "
-"infinite loops. 0-duration looped animations (e.g. single [CallbackTweener] "
-"with no delay or [PropertyTweener] with invalid node) are equivalent to "
-"infinite [code]while[/code] loops and will freeze your game. If a "
-"[SceneTreeTween]'s lifetime depends on some node, always use [method "
-"bind_node]."
+"infinite loops. To prevent the game freezing, 0-duration looped animations "
+"(e.g. a single [CallbackTweener] with no delay) are stopped after a small "
+"number of loops, which may produce unexpected results. If a [Tween]'s "
+"lifetime depends on some node, always use [method bind_node]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -54679,10 +55678,10 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Creates and appends an [IntervalTweener]. This method can be used to create "
-"delays in the tween animation, as an alternative for using the delay in "
-"other [Tweener]s or when there's no animation (in which case the "
-"[SceneTreeTween] acts as a timer). [code]time[/code] is the length of the "
-"interval, in seconds.\n"
+"delays in the tween animation, as an alternative to using the delay in other "
+"[Tweener]s, or when there's no animation (in which case the [SceneTreeTween] "
+"acts as a timer). [code]time[/code] is the length of the interval, in "
+"seconds.\n"
"Example: creating an interval in code execution.\n"
"[codeblock]\n"
"# ... some code\n"
@@ -54736,8 +55735,8 @@ msgid ""
"Creates and appends a [PropertyTweener]. This method tweens a "
"[code]property[/code] of an [code]object[/code] between an initial value and "
"[code]final_val[/code] in a span of time equal to [code]duration[/code], in "
-"seconds. The initial value by default is a value at the time the tweening of "
-"the [PropertyTweener] start. For example:\n"
+"seconds. The initial value by default is the property's value at the time "
+"the tweening of the [PropertyTweener] starts. For example:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"tween.tween_property($Sprite, \"position\", Vector2(100, 200), 1)\n"
@@ -54768,16 +55767,15 @@ msgid ""
"Emitted when the [SceneTreeTween] has finished all tweening. Never emitted "
"when the [SceneTreeTween] is set to infinite looping (see [method "
"set_loops]).\n"
-"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) after this signal "
-"is emitted, but it doesn't happen immediately, but on the next processing "
-"frame. Calling [method stop] inside the signal callback will preserve the "
-"[SceneTreeTween]."
+"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) in the next "
+"processing frame after this signal is emitted. Calling [method stop] inside "
+"the signal callback will prevent the [SceneTreeTween] from being removed."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Emitted when a full loop is complete (see [method set_loops]), providing the "
-"loop index. This signal is not emitted after final loop, use [signal "
+"loop index. This signal is not emitted after the final loop, use [signal "
"finished] instead for this case."
msgstr ""
@@ -54785,7 +55783,7 @@ msgstr ""
msgid ""
"Emitted when one step of the [SceneTreeTween] is complete, providing the "
"step index. One step is either a single [Tweener] or a group of [Tweener]s "
-"running parallelly."
+"running in parallel."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -56121,7 +57119,12 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-msgid "Scale part of the local transformation."
+msgid ""
+"Scale part of the local transformation.\n"
+"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, the scale values will either be all "
+"positive or all negative."
msgstr ""
#: doc/classes/Spatial.xml
@@ -58775,11 +59778,11 @@ msgstr ""
msgid ""
"Returns [code]true[/code] if this string contains a valid integer.\n"
"[codeblock]\n"
-"print(\"7\".is_valid_int()) # Prints \"True\"\n"
-"print(\"14.6\".is_valid_int()) # Prints \"False\"\n"
-"print(\"L\".is_valid_int()) # Prints \"False\"\n"
-"print(\"+3\".is_valid_int()) # Prints \"True\"\n"
-"print(\"-12\".is_valid_int()) # Prints \"True\"\n"
+"print(\"7\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"14.6\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"L\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"+3\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"-12\".is_valid_integer()) # Prints \"True\"\n"
"[/codeblock]"
msgstr ""
@@ -62278,6 +63281,13 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml
+#, fuzzy
+msgid "If [code]true[/code], this TileMap bakes a navigation region."
+msgstr ""
+"Se [code]true[/code], os nós filhos são organizados, do contrário, a "
+"organização é desabilitada."
+
+#: doc/classes/TileMap.xml
msgid "If [code]true[/code], the cell's UVs will be clipped."
msgstr ""
@@ -62384,6 +63394,10 @@ msgid "The TileMap orientation mode. See [enum Mode] for possible values."
msgstr ""
#: doc/classes/TileMap.xml
+msgid "The navigation layers the TileMap generates its navigation regions in."
+msgstr ""
+
+#: doc/classes/TileMap.xml
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 "
@@ -63515,7 +64529,12 @@ msgstr ""
#: doc/classes/Transform2D.xml
msgid ""
"Returns a copy of the transform scaled by the given [code]scale[/code] "
-"factor, using matrix multiplication."
+"factor, using matrix multiplication.\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
#: doc/classes/Transform2D.xml
@@ -63671,7 +64690,18 @@ msgid ""
"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]."
+"to remove it from the [Tree].\n"
+"[b]Incremental search:[/b] Like [ItemList] and [PopupMenu], [Tree] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/Tree.xml
@@ -67216,11 +68246,12 @@ msgid "This enabler will stop [Particles2D] nodes."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _process function."
+msgid "This enabler will stop the parent's [method Node._process] function."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _physics_process function."
+msgid ""
+"This enabler will stop the parent's [method Node._physics_process] function."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
@@ -67260,6 +68291,16 @@ msgid "The VisibilityNotifier's bounding box."
msgstr ""
#: doc/classes/VisibilityNotifier.xml
+msgid ""
+"In addition to checking whether a node is on screen or within a [Camera]'s "
+"view, VisibilityNotifier can also optionally check whether a node is within "
+"a specified maximum distance when using a [Camera] with perspective "
+"projection. This is useful for throttling the performance requirements of "
+"nodes that are far away.\n"
+"[b]Note:[/b] This feature will be disabled if set to 0.0."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier.xml
msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view."
msgstr ""
@@ -72038,6 +73079,16 @@ msgid "The amount of shader rebinds in the frame."
msgstr ""
#: doc/classes/VisualServer.xml
+msgid ""
+"The peak amount of shaders that have been under compilation in the frame.\n"
+"This is useful to know when asynchronous shader compilation has finished for "
+"the current shaders on screen.\n"
+"[b]Note:[/b] For complete certainty, only assume there are no outstanding "
+"compilations when this value is zero for at least two frames in a row.\n"
+"Unimplemented in the GLES2 rendering backend, always returns 0."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
msgid "The amount of surface changes in the frame."
msgstr ""
@@ -75242,8 +76293,8 @@ msgstr ""
#: doc/classes/World.xml
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."
+"scenario, a navigation map and a sound space. Spatial nodes register their "
+"resources into the current world."
msgstr ""
#: doc/classes/World.xml
@@ -75258,11 +76309,17 @@ msgstr ""
#: doc/classes/World.xml
msgid ""
-"The World's fallback_environment will be used if the World's [Environment] "
-"fails or is missing."
+"The World's fallback environment will be used if [member environment] fails "
+"or is missing."
msgstr ""
#: doc/classes/World.xml
+#, fuzzy
+msgid ""
+"The [RID] of this world's navigation map. Used by the [NavigationServer]."
+msgstr "Retorna o número de nós nesta [SceneTree]."
+
+#: doc/classes/World.xml
msgid "The World's visual scenario."
msgstr ""
@@ -75277,8 +76334,8 @@ msgstr ""
#: doc/classes/World2D.xml
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."
+"visual scenario, a navigation map and a sound space. 2D nodes register their "
+"resources into the current 2D world."
msgstr ""
#: doc/classes/World2D.xml
@@ -75295,6 +76352,12 @@ msgid ""
msgstr ""
#: doc/classes/World2D.xml
+#, fuzzy
+msgid ""
+"The [RID] of this world's navigation map. Used by the [Navigation2DServer]."
+msgstr "Retorna o número de nós nesta [SceneTree]."
+
+#: doc/classes/World2D.xml
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."
diff --git a/doc/translations/ro.po b/doc/translations/ro.po
index af828f619b..260a63446f 100644
--- a/doc/translations/ro.po
+++ b/doc/translations/ro.po
@@ -373,7 +373,7 @@ msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
msgid ""
"Compares two values by checking their actual contents, recursing into any "
-"`Array` or `Dictionary` up to its deepest level.\n"
+"[Array] or [Dictionary] up to its deepest level.\n"
"This compares to [code]==[/code] in a number of ways:\n"
"- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/"
"code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] "
@@ -420,7 +420,7 @@ msgid ""
"- 1.0: Linear\n"
"- Greater than 1.0 (exclusive): Ease in\n"
"[/codeblock]\n"
-"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.4/img/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/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]."
@@ -1127,7 +1127,7 @@ msgid ""
"[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/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/img/"
"smoothstep_ease_comparison.png]Comparison between smoothstep() and ease(x, "
"-1.6521) return values[/url]"
msgstr ""
@@ -3409,6 +3409,12 @@ msgstr ""
#: doc/classes/@GlobalScope.xml
msgid ""
+"Hints that an integer property is a bitmask using the optionally named 2D "
+"navigation layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml
+msgid ""
"Hints that an integer property is a bitmask using the optionally named 3D "
"render layers."
msgstr ""
@@ -3421,6 +3427,12 @@ msgstr ""
#: doc/classes/@GlobalScope.xml
msgid ""
+"Hints that an integer property is a bitmask using the optionally named 3D "
+"navigation layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml
+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]."
@@ -8396,7 +8408,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/AStar.xml
+#: doc/classes/AStar.xml doc/classes/AStar2D.xml
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[/"
@@ -8595,7 +8607,10 @@ msgid ""
msgstr ""
#: doc/classes/AStar2D.xml
-msgid "Returns whether there is a connection/segment between the given points."
+msgid ""
+"Returns whether there is a connection/segment between the given points. 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/AStar2D.xml
@@ -8612,10 +8627,6 @@ msgid ""
msgstr ""
#: doc/classes/AStar2D.xml
-msgid "Deletes the segment between the given points."
-msgstr ""
-
-#: doc/classes/AStar2D.xml
msgid ""
"Returns the closest position to [code]to_position[/code] that resides inside "
"a segment between two connected points.\n"
@@ -8800,7 +8811,9 @@ msgid ""
"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."
+"transmit audio over the network. When capturing audio data from a "
+"microphone, the format of the samples will be stereo 32-bit floating point "
+"PCM."
msgstr ""
#: doc/classes/AudioEffectCapture.xml
@@ -13643,7 +13656,7 @@ msgid ""
msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
-#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/Navigation2D.xml
msgid "Returns the object's [RID]."
msgstr ""
@@ -19118,11 +19131,14 @@ msgid ""
msgstr ""
#: doc/classes/CurveTexture.xml
-msgid "The [code]curve[/code] rendered onto the texture."
+msgid "The [Curve] that is rendered onto the texture."
msgstr ""
#: doc/classes/CurveTexture.xml
-msgid "The width of the texture."
+msgid ""
+"The width of the texture (in pixels). Higher values make it possible to "
+"represent high-frequency data better (such as sudden direction changes), at "
+"the cost of increased generation time and memory usage."
msgstr ""
#: doc/classes/CylinderMesh.xml
@@ -19408,6 +19424,13 @@ msgid "Returns the list of keys in the [Dictionary]."
msgstr ""
#: doc/classes/Dictionary.xml
+msgid ""
+"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, "
+"duplicate keys will not be copied over, unless [code]overwrite[/code] is "
+"[code]true[/code]."
+msgstr ""
+
+#: doc/classes/Dictionary.xml
msgid "Returns the number of keys in the dictionary."
msgstr ""
@@ -21346,9 +21369,23 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide a state data you want to be saved, like view "
+"position, grid settings, folding, etc. 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). This data is automatically saved for "
+"each scene in an [code]editstate[/code] file in the editor metadata folder. "
+"If you want to store global (scene-independent) editor data for your plugin, "
+"you can use [method get_window_layout] instead.\n"
+"Use [method set_state] to restore your saved state.\n"
+"[b]Note:[/b] This method should not be used to save important settings that "
+"should persist with the project.\n"
+"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be "
+"stored and restored correctly.\n"
+"[codeblock]\n"
+"func get_state():\n"
+" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n"
+" return state\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -21359,9 +21396,18 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide the GUI layout of the plugin or any other "
+"data you want to be stored. 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). The data is stored in the "
+"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n"
+"Use [method set_window_layout] to restore your saved layout.\n"
+"[codeblock]\n"
+"func get_window_layout(configuration):\n"
+" configuration.set_value(\"MyPlugin\", \"window_position\", $Window."
+"position)\n"
+" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -21474,11 +21520,30 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the state saved by [method get_state]."
+msgid ""
+"Restore the state saved by [method get_state]. This method is called when "
+"the current scene tab is changed in the editor.\n"
+"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise "
+"it will not be recognized and this method will not be called.\n"
+"[codeblock]\n"
+"func set_state(data):\n"
+" zoom = data.get(\"zoom\", 1.0)\n"
+" preferred_color = data.get(\"my_color\", Color.white)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the plugin GUI layout saved by [method get_window_layout]."
+msgid ""
+"Restore the plugin GUI layout and data saved by [method get_window_layout]. "
+"This method is called for every plugin on editor startup. Use the provided "
+"[code]configuration[/code] file to read your saved data.\n"
+"[codeblock]\n"
+"func set_window_layout(configuration):\n"
+" $Window.position = configuration.get_value(\"MyPlugin\", "
+"\"window_position\", Vector2())\n"
+" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", "
+"Color.white)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -26116,7 +26181,8 @@ msgid ""
"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])."
+"at fixed steps (see [member width]). See also [GradientTexture2D] and "
+"[CurveTexture]."
msgstr ""
#: doc/classes/GradientTexture.xml
@@ -26138,7 +26204,8 @@ msgid ""
"repeat] types using colors obtained from the gradient. 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] and [member height])."
+"[member width] and [member height]). See also [GradientTexture] and "
+"[CurveTexture]."
msgstr ""
#: doc/classes/GradientTexture2D.xml
@@ -26944,6 +27011,12 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+msgid ""
+"If [code]true[/code], this GridMap uses cell navmesh resources to create "
+"navigation regions."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid "If [code]true[/code], grid items are centered on the X axis."
msgstr ""
@@ -26994,6 +27067,10 @@ msgid "The assigned [MeshLibrary]."
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+msgid "The navigation layers the GridMap generates its navigation regions in."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
"Overrides the default friction and bounce physics properties for the whole "
"[GridMap]."
@@ -28217,7 +28294,7 @@ msgid ""
" # 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 body = to_json({\"name\": \"Godette\"})\n"
" error = http_request.request(\"https://httpbin.org/post\", [], true, "
"HTTPClient.METHOD_POST, body)\n"
" if error != OK:\n"
@@ -29384,7 +29461,7 @@ msgstr ""
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 "
+"([member 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 "
@@ -29533,10 +29610,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Returns the mouse mode. See the constants for more information."
-msgstr ""
-
-#: doc/classes/Input.xml
msgid ""
"Gets an input vector by specifying four actions for the positive and "
"negative X and Y axes.\n"
@@ -29730,24 +29803,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Sets the mouse mode. See the constants for more information."
-msgstr ""
-
-#: doc/classes/Input.xml
-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
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 "
@@ -29783,6 +29838,24 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
+msgid "Controls the mouse mode. See [enum MouseMode] for more information."
+msgstr ""
+
+#: doc/classes/Input.xml
+msgid ""
+"If [code]true[/code], similar input events sent by the operating system are "
+"accumulated. 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 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
msgid "Emitted when a joypad device has been connected or disconnected."
msgstr ""
@@ -30090,8 +30163,8 @@ msgstr ""
#: doc/classes/InputEventJoypadButton.xml
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]."
+"Represents the pressure the user puts on the button with their finger, if "
+"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]."
msgstr ""
#: doc/classes/InputEventJoypadMotion.xml
@@ -30354,9 +30427,9 @@ 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 "
+"at most. If you need more precise input reporting, set [member Input."
+"use_accumulated_input] to [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."
@@ -30843,7 +30916,18 @@ msgid ""
"[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."
+"fixed_column_width] greater than zero to wrap the text.\n"
+"[b]Incremental search:[/b] Like [PopupMenu] and [Tree], [ItemList] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/ItemList.xml
@@ -34590,11 +34674,16 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Returns the override [Material] for a surface of the [Mesh] resource.\n"
+"[b]Note:[/b] This function only returns [i]override[/i] materials associated "
+"with this [MeshInstance]. Consider using [method get_active_material] or "
+"[method Mesh.surface_get_material] to get materials associated with the "
+"[Mesh] resource."
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the number of surface materials."
+msgid "Returns the number of surface override materials."
msgstr ""
#: doc/classes/MeshInstance.xml
@@ -34631,7 +34720,10 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Sets the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Sets the override [Material] for the specified surface of the [Mesh] "
+"resource. This material is associated with this [MeshInstance] rather than "
+"with the [Mesh] resource."
msgstr ""
#: doc/classes/MeshInstance.xml
@@ -34662,9 +34754,10 @@ msgstr ""
#: doc/classes/MeshInstance2D.xml
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\"."
+"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be "
+"automatically created from an existing [Sprite] via a tool in the editor "
+"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to "
+"MeshInstance2D[/b] at the top of the 2D editor viewport."
msgstr ""
#: doc/classes/MeshInstance2D.xml
@@ -35422,6 +35515,9 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"Provides navigation and pathfinding within a collection of "
"[NavigationMesh]es. By default, these will be automatically collected from "
"child [NavigationMeshInstance] nodes. In addition to basic pathfinding, this "
@@ -35462,7 +35558,14 @@ msgid ""
msgstr ""
#: doc/classes/Navigation.xml
+msgid "Returns the [RID] of the navigation map on the [NavigationServer]."
+msgstr ""
+
+#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"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, "
@@ -35484,16 +35587,31 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation.get_simple_path] path query."
+msgstr ""
+
+#: doc/classes/Navigation.xml
+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/Navigation.xml doc/classes/Navigation2DServer.xml
+#: doc/classes/NavigationServer.xml
+msgid ""
+"Emitted when a navigation map is updated, when a region moves or is modified."
+msgstr ""
+
#: doc/classes/Navigation2D.xml
msgid "2D navigation and pathfinding node."
msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -35513,6 +35631,9 @@ msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -35522,6 +35643,12 @@ msgstr ""
msgid "The XY plane cell size to use for fields."
msgstr ""
+#: doc/classes/Navigation2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation2D.get_simple_path] path query."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml
msgid "Server interface for low-level 2D navigation access."
msgstr ""
@@ -35538,8 +35665,12 @@ msgid ""
"through scripts.\n"
"For two regions to be connected to each other, they must share a similar "
"edge. An edge is considered connected to another if both of its two vertices "
-"are at a distance less than [member Navigation.edge_connection_margin] to "
-"the respective other edge's vertex.\n"
+"are at a distance less than navigation map [code]edge_connection_margin[/"
+"code] to the respective other edge's vertex.\n"
+"You may assign navigation layers to regions with [method Navigation2DServer."
+"region_set_navigation_layers], which then can be checked upon when "
+"requesting a path with [method Navigation2DServer.map_get_path]. This allows "
+"allowing or forbidding some areas to 2D objects.\n"
"To use the collision avoidance system, you may use agents. You can set an "
"agent's target velocity, then the servers will emit a callback with a "
"modified velocity.\n"
@@ -35567,7 +35698,17 @@ msgid "Returns [code]true[/code] if the map got changed the previous frame."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Callback called at the end of the RVO process."
+msgid ""
+"Callback called at the end of the RVO process. If a callback is created "
+"manually and the agent is placed on a navigation map it will calculate "
+"avoidance for the agent and dispatch the calculated [code]safe_velocity[/"
+"code] to the [code]receiver[/code] object with a signal to the chosen "
+"[code]method[/code] name.\n"
+"[b]Note:[/b] Created callbacks are always processed independently of the "
+"SceneTree state as long as the agent is on a navigation map and not freed. "
+"To disable the dispatch of a callback from an agent use [method "
+"agent_set_callback] again with a [code]null[/code] object as the "
+"[code]receiver[/code]."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -35622,15 +35763,55 @@ msgid "Destroys the given RID."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns all created navigation map [RID]s on the NavigationServer. This "
+"returns both 2D and 3D created navigation maps as there is technically no "
+"distinction between them."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Create a new map."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"This function immediately forces synchronization of the specified navigation "
+"[code]map[/code] [RID]. By default navigation maps are only synchronized at "
+"the end of each physics frame. This function can be used to immediately "
+"(re)calculate all the navigation meshes and region connections of the "
+"navigation map. This makes it possible to query a navigation path for a "
+"changed map immediately and in the same frame (multiple times if needed).\n"
+"Due to technical restrictions the current NavigationServer command queue "
+"will be flushed. This means all already queued update commands for this "
+"physics frame will be executed, even those intended for other maps, regions "
+"and agents not part of the specified map. The expensive computation of the "
+"navigation meshes and region connections of a map will only be done for the "
+"specified map. Other maps will receive the normal synchronization at the end "
+"of the physics frame. Should the specified map receive changes after the "
+"forced update it will update again as well when the other maps receive their "
+"update.\n"
+"Avoidance processing and dispatch of the [code]safe_velocity[/code] signals "
+"is untouched by this function and continues to happen for all maps and "
+"agents at the end of the physics frame.\n"
+"[b]Note:[/b] With great power comes great responsibility. This function "
+"should only be used by users that really know what they are doing and have a "
+"good reason for it. Forcing an immediate update of a navigation map requires "
+"locking the NavigationServer and flushing the entire NavigationServer "
+"command queue. Not only can this severely impact the performance of a game "
+"but it can also introduce bugs if used inappropriately without much "
+"foresight."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns all navigation agents [RID]s that are currently assigned to the "
"requested navigation [code]map[/code]."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Returns the map cell size."
msgstr ""
@@ -35654,7 +35835,10 @@ msgid ""
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Returns the navigation path to reach the destination from the origin."
+msgid ""
+"Returns the navigation path to reach the destination from the origin. "
+"[code]navigation_layers[/code] is a bitmask of all region layers that are "
+"allowed to be in the path."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -35671,6 +35855,12 @@ msgstr ""
msgid "Sets the map active."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/"
+"b] Currently not implemented."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Set the map cell size used to weld the navigation mesh polygons."
msgstr ""
@@ -35686,14 +35876,73 @@ msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"Returns the ending point of a connection door. [code]connection[/code] is an "
+"index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns the starting point of a connection door. [code]connection[/code] is "
+"an index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns how many connections this [code]region[/code] has with other regions "
+"in the map."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns the navigation map [RID] the requested [code]region[/code] is "
"currently assigned to."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Returns the region's navigation layers."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns [code]true[/code] if the provided [code]point[/code] in world space "
+"is currently owned by the provided navigation [code]region[/code]. Owned in "
+"this context means that one of the region's navigation mesh polygon faces "
+"has a possible position at the closest distance to this point compared to "
+"all other navigation meshes from other navigation regions that are also "
+"registered on the navigation map of the provided region.\n"
+"If multiple navigation meshes have positions at equal distance the "
+"navigation region whose polygons are processed first wins the ownership. "
+"Polygons are processed in the same order that navigation regions were "
+"registered on the NavigationServer.\n"
+"[b]Note:[/b] If navigation meshes from different navigation regions overlap "
+"(which should be avoided in general) the result might not be what is "
+"expected."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Sets the map for the region."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method Navigation2DServer.map_get_path])."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Sets the navigation mesh for the region."
msgstr ""
@@ -35702,6 +35951,10 @@ msgstr ""
msgid "Sets the global transformation for the region."
msgstr ""
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]."
+msgstr ""
+
#: doc/classes/NavigationAgent.xml
msgid "3D agent used in navigation for collision avoidance."
msgstr ""
@@ -35711,9 +35964,16 @@ msgid ""
"3D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationAgent] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World] navigation map. If this node is a child of a [Navigation] "
+"node it will register to the navigation map of the navigation node or the "
+"function [method set_navigation] can be used to set the navigation node "
+"directly. [NavigationAgent] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -35731,7 +35991,15 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-msgid "Returns the path from start to finish in global coordinates."
+msgid ""
+"Returns this agent's current path from start to finish in global "
+"coordinates. The path only updates when the target location is changed or "
+"the agent requires a repath. The path array is not intended to be used in "
+"direct path movement as the agent has its own internal path logic that would "
+"get corrupted by changing the path array manually. Use the intended [method "
+"get_next_location] once every physics frame to receive the next path point "
+"for the agents movement as this function also updates the internal path "
+"logic."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -35746,11 +36014,24 @@ msgid ""
"system."
msgstr ""
-#: doc/classes/NavigationAgent.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"Returns a [Vector3] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the origin of the agent's parent."
+"Returns the [RID] of the navigation map for this NavigationAgent node. This "
+"function returns always the map set on the NavigationAgent node and not the "
+"map of the abstract agent on the NavigationServer. If the agent map is "
+"changed directly with the NavigationServer API the NavigationAgent node will "
+"not be aware of the map change. Use [method set_navigation_map] to change "
+"the navigation map for the NavigationAgent and also update the agent on the "
+"NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
+"Returns the next location in global coordinates that can be moved to, making "
+"sure that there are no static objects in the way. If the agent does not have "
+"a navigation path, it will return the position of the agent's parent. The "
+"use of this function once every physics frame is required to update the "
+"internal path logic of the NavigationAgent."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -35791,6 +36072,12 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"Sets the [RID] of the navigation map this NavigationAgent node should use "
+"and also updates the [code]agent[/code] on the NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"Sets the user desired final location. This will clear the current navigation "
"path."
msgstr ""
@@ -35803,7 +36090,13 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml
-msgid "The agent height offset to match the navigation mesh height."
+msgid ""
+"The NavigationAgent height offset is subtracted from the y-axis value of any "
+"vector path position for this NavigationAgent. The NavigationAgent height "
+"offset does not change or influence the navigation mesh or pathfinding query "
+"result. Additional navigation maps that use regions with navigation meshes "
+"that the developer baked with appropriate agent radius or height values are "
+"required to support different-sized agents."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -35830,26 +36123,53 @@ msgstr ""
msgid "The maximum speed that an agent can move."
msgstr ""
+#: doc/classes/NavigationAgent.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "The distance to search for other agents."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"The distance threshold before a path point is considered to be reached. This "
+"will allow an agent to not have to hit a path point on the path exactly, but "
+"in the area. If this value is set to high the NavigationAgent will skip "
+"points on the path which can lead to leaving the navigation mesh. If this "
+"value is set to low the NavigationAgent will be stuck in a repath loop cause "
+"it will constantly overshoot or undershoot the distance to the next point on "
+"each physics frame update."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"The maximum distance the agent is allowed away from the ideal path to the "
"final location. This can happen due to trying to avoid collisions. When the "
"maximum distance is exceeded, it recalculates the ideal path."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-msgid "The radius of the agent."
+msgid ""
+"The radius of the avoidance agent. This is the \"body\" of the avoidance "
+"agent and not the avoidance maneuver starting radius (which is controlled by "
+"[member neighbor_dist]).\n"
+"Does not affect normal pathfinding. To change an actor's pathfinding radius "
+"bake [NavigationMesh] resources with a different [member NavigationMesh."
+"agent_radius] property and use different navigation maps for each actor size."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"The distance threshold before a target is considered to be reached. This "
-"will allow an agent to not have to hit a point on the path exactly, but in "
-"the area."
+"The distance threshold before the final target point is considered to be "
+"reached. This will allow an agent to not have to hit the point of the final "
+"target exactly, but only the area. If this value is set to low the "
+"NavigationAgent will be stuck in a repath loop cause it will constantly "
+"overshoot or undershoot the distance to the final target point on each "
+"physics frame update."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -35892,9 +36212,16 @@ msgid ""
"2D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationAgent2D] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World2D] navigation map. If this node is a child of a "
+"[Navigation2D] node it will register to the navigation map of the navigation "
+"node or the function [method set_navigation] can be used to set the "
+"navigation node directly. [NavigationAgent2D] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent2D.xml
@@ -35910,13 +36237,6 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent2D.xml
-msgid ""
-"Returns a [Vector2] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the position of the agent's parent."
-msgstr ""
-
-#: doc/classes/NavigationAgent2D.xml
msgid "Returns the [RID] of this agent on the [Navigation2DServer]."
msgstr ""
@@ -35936,6 +36256,13 @@ msgid ""
"only be enabled on agents that currently require it."
msgstr ""
+#: doc/classes/NavigationAgent2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent2D] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationMesh.xml
msgid "A mesh to approximate the walkable areas and obstacles."
msgstr ""
@@ -35966,8 +36293,8 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
-"Returns whether the specified [code]bit[/code] of the [member geometry/"
-"collision_mask] is set."
+"Returns whether the specified [code]bit[/code] of the [member "
+"geometry_collision_mask] is set."
msgstr ""
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
@@ -35989,9 +36316,9 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/"
-"code] in the [member geometry/collision_mask].\n"
+"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]."
+"code] in the [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
@@ -36005,14 +36332,14 @@ 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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36024,7 +36351,7 @@ 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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36052,13 +36379,17 @@ msgstr ""
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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
-"If [code]true[/code], marks walkable spans as not walkable if the clearance "
-"above the span is less than [member agent/height]."
+"If the baking [AABB] has a volume the navigation mesh baking will be "
+"restricted to its enclosing area."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+msgid "The position offset applied to the [member filter_baking_aabb] [AABB]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36068,13 +36399,19 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]true[/code], marks non-walkable spans as walkable if their maximum "
-"is within [member agent/max_climb] of a walkable neighbor."
+"is within [member agent_max_climb] of a walkable neighbor."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+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
msgid ""
"The physics layers to scan for static colliders.\n"
-"Only used when [member geometry/parsed_geometry_type] is [constant "
+"Only used when [member geometry_parsed_geometry_type] is [constant "
"PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]."
msgstr ""
@@ -36093,7 +36430,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"The name of the group to scan for geometry.\n"
-"Only used when [member geometry/source_geometry_mode] is [constant "
+"Only used when [member geometry_source_geometry_mode] is [constant "
"SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant "
"SOURCE_GEOMETRY_GROUPS_EXPLICIT]."
msgstr ""
@@ -36156,7 +36493,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Parses [StaticBody] colliders as geometry. The collider should be in any of "
-"the layers specified by [member geometry/collision_mask]."
+"the layers specified by [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36177,13 +36514,13 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Scans nodes in a group and their child nodes recursively for geometry. The "
-"group is specified by [member geometry/source_group_name]."
+"group is specified by [member geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Uses nodes in a group for geometry. The group is specified by [member "
-"geometry/source_group_name]."
+"geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36225,7 +36562,15 @@ msgid ""
"geometry for walkable terrain suitable to [NavigationMesh] agent properties "
"by creating a voxel world around the meshes bounding area.\n"
"The finalized navigation mesh is then returned and stored inside the "
-"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes."
+"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] "
+"nodes.\n"
+"[b]Note:[/b] Using meshes to not only define walkable surfaces but also "
+"obstruct navigation baking does not always work. The navigation baking has "
+"no concept of what is a geometry \"inside\" when dealing with mesh source "
+"geometry and this is intentional. Depending on current baking parameters, as "
+"soon as the obstructing mesh is large enough to fit a navigation mesh area "
+"inside, the baking will generate navigation mesh areas that are inside the "
+"obstructing source geometry mesh."
msgstr ""
#: doc/classes/NavigationMeshGenerator.xml
@@ -36233,8 +36578,8 @@ msgid ""
"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child "
"nodes under the provided [code]root_node[/code] or a specific group of nodes "
"for potential source geometry. The parse behavior can be controlled with the "
-"[member NavigationMesh.geometry/parsed_geometry_type] and [member "
-"NavigationMesh.geometry/source_geometry_mode] properties on the "
+"[member NavigationMesh.geometry_parsed_geometry_type] and [member "
+"NavigationMesh.geometry_source_geometry_mode] properties on the "
"[NavigationMesh] resource."
msgstr ""
@@ -36251,8 +36596,21 @@ msgstr ""
#: doc/classes/NavigationMeshInstance.xml
msgid ""
"An instance of a [NavigationMesh]. It tells the [Navigation] node what can "
-"be navigated and what cannot, based on the [NavigationMesh] resource. This "
-"should be a child of a [Navigation] node."
+"be navigated and what cannot, based on the [NavigationMesh] resource.\n"
+"By default this node will register to the default [World] navigation map. If "
+"this node is a child of a [Navigation] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method NavigationServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The cost of entering this region from another region can be controlled with "
+"the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The cost of traveling distances inside this region can be controlled with "
+"the [member travel_cost] multiplier."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
@@ -36281,10 +36639,34 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding enters this region's navmesh from another regions navmesh "
+"the [code]enter_cost[/code] value is added to the path distance for "
+"determining the shortest path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationMesh] "
+"belongs to. On path requests with [method NavigationServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
msgid "The [NavigationMesh] resource to use."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding moves inside this region's navmesh the traveled distances "
+"are multiplied with [code]travel_cost[/code] for determining the shortest "
+"path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
msgid "Notifies when the navigation mesh bake operation is completed."
msgstr ""
@@ -36301,7 +36683,9 @@ msgid ""
"3D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationObstacle] is physics safe."
+"[NavigationObstacle] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle.xml
@@ -36341,7 +36725,9 @@ msgid ""
"2D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationObstacle2D] is physics safe."
+"[NavigationObstacle2D] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle2D.xml
@@ -36421,6 +36807,14 @@ msgstr ""
#: doc/classes/NavigationPolygon.xml
msgid ""
+"Returns the [NavigationMesh] resulting from this navigation polygon. This "
+"navmesh can be used to update the navmesh of a region with the [method "
+"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server "
+"behind the scene)."
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml
+msgid ""
"Returns a [PoolVector2Array] containing the vertices of an outline that was "
"created in the editor or by script."
msgstr ""
@@ -36457,6 +36851,30 @@ msgid ""
msgstr ""
#: doc/classes/NavigationPolygonInstance.xml
+msgid "A region of the 2D navigation map."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A region of the navigation map. It tells the [Navigation2DServer] what can "
+"be navigated and what cannot, based on its [NavigationPolygon] resource.\n"
+"By default this node will register to the default [World2D] navigation map. "
+"If this node is a child of a [Navigation2D] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The pathfinding cost of entering this region from another region can be "
+"controlled with the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The pathfinding cost of traveling distances inside this region can be "
+"controlled with the [member travel_cost] multiplier."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
msgid ""
"Returns the [RID] of this region on the [Navigation2DServer]. Combined with "
"[method Navigation2DServer.map_get_closest_point_owner] can be used to "
@@ -36464,6 +36882,23 @@ msgid ""
"navigation map."
msgstr ""
+#: doc/classes/NavigationPolygonInstance.xml
+msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationPolygon] "
+"belongs to. On path requests with [method Navigation2DServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+#, fuzzy
+msgid "The [NavigationPolygon] resource to use."
+msgstr "Singletonul [AudioServer]."
+
#: doc/classes/NavigationServer.xml
msgid "Server interface for low-level 3D navigation access."
msgstr ""
@@ -36539,6 +36974,12 @@ msgid "Bakes the navigation mesh."
msgstr ""
#: doc/classes/NavigationServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method NavigationServer.map_get_path])."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
msgid "Control activation of this server."
msgstr ""
@@ -38005,13 +38446,19 @@ msgstr ""
#: doc/classes/Node.xml
msgid ""
"Emitted when a child node enters the scene tree, either because it entered "
-"on its own or because this node entered with it."
+"on its own or because this node entered with it.\n"
+"This signal is emitted [i]after[/i] the child node's own [constant "
+"NOTIFICATION_ENTER_TREE] and [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
msgid ""
-"Emitted when a child node exits the scene tree, either because it exited on "
-"its own or because this node exited."
+"Emitted when a child node is about to exit the scene tree, either because it "
+"is being removed or freed directly, or because this node is exiting the "
+"tree.\n"
+"When this signal is received, the child [code]node[/code] is still in the "
+"tree and valid. This signal is emitted [i]after[/i] the child node's own "
+"[signal tree_exiting] and [constant NOTIFICATION_EXIT_TREE]."
msgstr ""
#: doc/classes/Node.xml
@@ -38023,7 +38470,10 @@ msgid "Emitted when the node is renamed."
msgstr ""
#: doc/classes/Node.xml
-msgid "Emitted when the node enters the tree."
+msgid ""
+"Emitted when the node enters the tree.\n"
+"This signal is emitted [i]after[/i] the related [constant "
+"NOTIFICATION_ENTER_TREE] notification."
msgstr ""
#: doc/classes/Node.xml
@@ -38033,15 +38483,21 @@ msgstr ""
#: doc/classes/Node.xml
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)."
+"the right place for de-initialization (or a \"destructor\", if you will).\n"
+"This signal is emitted [i]before[/i] the related [constant "
+"NOTIFICATION_EXIT_TREE] notification."
msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node enters a [SceneTree]."
+msgid ""
+"Notification received when the node enters a [SceneTree].\n"
+"This notification is emitted [i]before[/i] the related [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node is about to exit a [SceneTree]."
+msgid ""
+"Notification received when the node is about to exit a [SceneTree].\n"
+"This notification is emitted [i]after[/i] the related [signal tree_exiting]."
msgstr ""
#: doc/classes/Node.xml
@@ -38302,7 +38758,13 @@ msgid "Rotation in degrees, relative to the node's parent."
msgstr ""
#: doc/classes/Node2D.xml
-msgid "The node's scale. Unscaled value: [code](1, 1)[/code]."
+msgid ""
+"The node's scale. Unscaled value: [code](1, 1)[/code].\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
#: doc/classes/Node2D.xml
@@ -39742,6 +40204,10 @@ msgid ""
" if argument.find(\"=\") > -1:\n"
" var key_value = argument.split(\"=\")\n"
" arguments[key_value[0].lstrip(\"--\")] = key_value[1]\n"
+" else:\n"
+" # Options without an argument will be present in the dictionary,\n"
+" # with the value set to an empty string.\n"
+" arguments[argument.lstrip(\"--\")] = \"\"\n"
"[/codeblock]"
msgstr ""
@@ -40395,8 +40861,15 @@ msgstr ""
msgid ""
"Moves the file or directory to the system's recycle bin. See also [method "
"Directory.remove].\n"
+"The method takes only global paths, so you may need to use [method "
+"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/"
+"code] as it will not work in exported project.\n"
"[b]Note:[/b] If the user has disabled the recycle bin on their system, the "
-"file will be permanently deleted instead."
+"file will be permanently deleted instead.\n"
+"[codeblock]\n"
+"var file_to_remove = \"user://slot1.sav\"\n"
+"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/OS.xml
@@ -45235,7 +45708,18 @@ msgstr ""
#: doc/classes/PopupMenu.xml
msgid ""
"[PopupMenu] is a [Control] that displays a list of options. They are popular "
-"in toolbars or context menus."
+"in toolbars or context menus.\n"
+"[b]Incremental search:[/b] Like [ItemList] and [Tree], [PopupMenu] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/PopupMenu.xml
@@ -46742,7 +47226,16 @@ msgid ""
msgstr ""
#: doc/classes/ProjectSettings.xml
-msgid "Message to be displayed before the backtrace when the engine crashes."
+msgid ""
+"Message to be displayed before the backtrace when the engine crashes. By "
+"default, this message is only used in exported projects due to the editor-"
+"only override applied to this setting."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Editor-only override for [member debug/settings/crash_handler/message]. Does "
+"not affect exported projects in debug or release mode."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -46987,6 +47480,18 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default naming style for scene files to infer from their root nodes. "
+"Possible options are:\n"
+"- [code]0[/code] (Auto): Uses the scene root name as is without changing its "
+"casing.\n"
+"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase "
+"casing.\n"
+"- [code]2[/code] (snake_case): Converts the scene root name to snake_case "
+"casing."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -47212,6 +47717,198 @@ msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 1."
msgstr ""
@@ -47420,6 +48117,198 @@ msgid "Optional name for the 2D render layer 9."
msgstr ""
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 1."
msgstr ""
@@ -47687,6 +48576,49 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default cell height for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_height].\n"
+"[b]Note:[/b] Currently not implemented."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 2D navigation maps. See [method "
+"Navigation2DServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell height for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_height]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 3D navigation maps. See [method "
+"NavigationServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default map up vector for 3D navigation maps. See [method NavigationServer."
+"map_set_up]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -48360,20 +49292,28 @@ msgid ""
"cause.\n"
"The default value is a conservative one, so you are advised to tweak it "
"according to the hardware you are targeting.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"The default is a very conservative override for [code]rendering/gles3/"
-"shaders/max_concurrent_compiles[/code].\n"
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
"Depending on the specific devices you are targeting, you may want to raise "
"it.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
+"Depending on the specific browsers you are targeting, you may want to raise "
+"it.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -48381,19 +49321,28 @@ msgid ""
"The maximum size, in megabytes, that the ubershader cache can grow up to. On "
"startup, the least recently used entries will be deleted until the total "
"size is within bounds.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/ubershader_cache_size_mb[/"
-"code], so a smaller maximum size can be configured for mobile platforms, "
-"where storage space is more limited.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for mobile platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for web platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] Currently, shader caching is generally unavailable on web "
+"platforms.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -48425,14 +49374,22 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/shader_compilation_mode[/"
-"code], so asynchronous compilation can be disabled for mobile.\n"
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on mobile platforms.\n"
"You may want to do that since mobile GPUs generally won't support "
"ubershaders due to their complexity."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on web platforms.\n"
+"You may want to do that since certain browsers (especially on mobile "
+"platforms) generally won't support ubershaders due to their complexity."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
@@ -49189,7 +50146,6 @@ msgid ""
"- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/"
"code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, "
"small grid radius values may lead to unwanted groupings.\n"
-"[/codeblock]\n"
"[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more "
"effective and faster [VisibilityNotifier] functionality. For most use cases, "
"[method Vector3.distance_to] or [method Vector3.distance_squared_to] are "
@@ -51336,6 +52292,22 @@ msgid "Makes text fill width."
msgstr ""
#: doc/classes/RichTextLabel.xml
+msgid "Aligns top of the inline image to the top of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns center of the inline image to the center of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns bottom of the inline image to the baseline of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns bottom of the inline image to the bottom of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
msgid "Each list item has a number marker."
msgstr ""
@@ -53073,8 +54045,8 @@ msgid ""
" yield(get_tree().create_timer(1.0), \"timeout\")\n"
" print(\"Timer ended.\")\n"
"[/codeblock]\n"
-"The timer will be automatically freed after its time elapses, so be aware "
-"that any reference you might have kept to it will become invalid."
+"The timer will be dereferenced after its time elapses. To preserve the "
+"timer, you can keep a reference to it. See [Reference]."
msgstr ""
#: doc/classes/SceneTreeTimer.xml
@@ -53106,24 +54078,23 @@ msgid ""
"manually (i.e. by using [code]Tween.new()[/code]) are invalid. They can't be "
"used for tweening values, but you can do manual interpolation with [method "
"interpolate_value].\n"
-"A [SceneTreeTween] animation is composed of a sequence of [Tweener]s, which "
-"by default are executed one after another. You can create a sequence by "
-"appending [Tweener]s to the [SceneTreeTween]. Animating something with a "
-"[Tweener] is called tweening. Example tweening sequence looks like this:\n"
+"A tween animation is created by adding [Tweener]s to the [SceneTreeTween] "
+"object, using [method tween_property], [method tween_interval], [method "
+"tween_callback] or [method tween_method]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1)\n"
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"This sequence will make the [code]$Sprite[/code] node turn red, then shrink "
-"and finally the [method Node.queue_free] is called to remove the sprite. See "
-"methods [method tween_property], [method tween_interval], [method "
-"tween_callback] and [method tween_method] for more usage information.\n"
+"This sequence will make the [code]$Sprite[/code] node turn red, then shrink, "
+"before finally calling [method Node.queue_free] to free the sprite. "
+"[Tweener]s are executed one after another by default. This behavior can be "
+"changed using [method parallel] and [method set_parallel].\n"
"When a [Tweener] is created with one of the [code]tween_*[/code] methods, a "
"chained method call can be used to tweak the properties of this [Tweener]. "
-"For example, if you want to set different transition type in the above "
-"example, you can do:\n"
+"For example, if you want to set a different transition type in the above "
+"example, you can use [method set_trans]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1).set_trans(Tween."
@@ -53132,8 +54103,9 @@ msgid ""
"TRANS_BOUNCE)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Most of the [SceneTreeTween] methods can be chained this way too. In this "
-"example the [SceneTreeTween] is bound and have set a default transition:\n"
+"Most of the [SceneTreeTween] methods can be chained this way too. In the "
+"following example the [SceneTreeTween] is bound to the running script's node "
+"and a default transition is set for its [Tweener]s:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween().bind_node(self).set_trans(Tween."
"TRANS_ELASTIC)\n"
@@ -53141,16 +54113,16 @@ msgid ""
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Another interesting use for [SceneTreeTween]s is animating arbitrary set of "
+"Another interesting use for [SceneTreeTween]s is animating arbitrary sets of "
"objects:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"for sprite in get_children():\n"
-" tween.tween_property(sprite, \"position\", Vector2(), 1)\n"
+" tween.tween_property(sprite, \"position\", Vector2(0, 0), 1)\n"
"[/codeblock]\n"
"In the example above, all children of a node are moved one after another to "
"position (0, 0).\n"
-"Some [Tweener]s use transitions and eases. The first accepts an [enum Tween."
+"Some [Tweener]s use transitions and eases. The first accepts a [enum Tween."
"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 Tween.EaseType] constant, and "
@@ -53162,7 +54134,7 @@ msgid ""
"tween_cheatsheet.png]Tween easing and transition types cheatsheet[/url]\n"
"[b]Note:[/b] All [SceneTreeTween]s will automatically start by default. To "
"prevent a [SceneTreeTween] from autostarting, you can call [method stop] "
-"immediately after it was created."
+"immediately after it is created."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53192,21 +54164,24 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
-"Processes the [SceneTreeTween] by given [code]delta[/code] value, in "
-"seconds. Mostly useful when the [SceneTreeTween] is paused, for controlling "
-"it manually. Can also be used to end the [SceneTreeTween] animation "
-"immediately, by using [code]delta[/code] longer than the whole duration.\n"
+"Processes the [SceneTreeTween] by the given [code]delta[/code] value, in "
+"seconds. This is mostly useful for manual control when the [SceneTreeTween] "
+"is paused. It can also be used to end the [SceneTreeTween] animation "
+"immediately, by setting [code]delta[/code] longer than the whole duration of "
+"the [SceneTreeTween] animation.\n"
"Returns [code]true[/code] if the [SceneTreeTween] still has [Tweener]s that "
"haven't finished.\n"
-"[b]Note:[/b] The [SceneTreeTween] will become invalid after finished, but "
-"you can call [method stop] after the step, to keep it and reset."
+"[b]Note:[/b] The [SceneTreeTween] will become invalid in the next processing "
+"frame after its animation finishes. Calling [method stop] after performing "
+"[method custom_step] instead keeps and resets the [SceneTreeTween]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Returns the total time in seconds the [SceneTreeTween] has been animating (i."
-"e. time since it started, not counting pauses etc.). The time is affected by "
-"[method set_speed_scale] and [method stop] will reset it to [code]0[/code].\n"
+"e. the time since it started, not counting pauses etc.). The time is "
+"affected by [method set_speed_scale], and [method stop] will reset it to "
+"[code]0[/code].\n"
"[b]Note:[/b] As it results from accumulating frame deltas, the time returned "
"after the [SceneTreeTween] has finished animating will be slightly greater "
"than the actual [SceneTreeTween] duration."
@@ -53242,11 +54217,10 @@ msgstr ""
msgid ""
"Returns whether the [SceneTreeTween] is valid. A valid [SceneTreeTween] is a "
"[SceneTreeTween] contained by the scene tree (i.e. the array from [method "
-"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). "
-"[SceneTreeTween] might become invalid when it has finished tweening or was "
-"killed, also when created with [code]Tween.new()[/code]. Invalid "
-"[SceneTreeTween] can't have [Tweener]s appended, because it can't animate "
-"them. You can however still use [method interpolate_value]."
+"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). A "
+"[SceneTreeTween] might become invalid when it has finished tweening, is "
+"killed, or when created with [code]SceneTreeTween.new()[/code]. Invalid "
+"[SceneTreeTween]s can't have [Tweener]s appended."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53286,16 +54260,15 @@ msgstr ""
msgid ""
"Sets the number of times the tweening sequence will be repeated, i.e. "
"[code]set_loops(2)[/code] will run the animation twice.\n"
-"Calling this method without arguments will make the [SceneTreeTween] run "
-"infinitely, until it is either killed by [method kill] or by freeing bound "
-"node, or all the animated objects have been freed (which makes further "
+"Calling this method without arguments will make the [Tween] run infinitely, "
+"until either it is killed with [method kill], the [Tween]'s bound node is "
+"freed, or all the animated objects have been freed (which makes further "
"animation impossible).\n"
"[b]Warning:[/b] Make sure to always add some duration/delay when using "
-"infinite loops. 0-duration looped animations (e.g. single [CallbackTweener] "
-"with no delay or [PropertyTweener] with invalid node) are equivalent to "
-"infinite [code]while[/code] loops and will freeze your game. If a "
-"[SceneTreeTween]'s lifetime depends on some node, always use [method "
-"bind_node]."
+"infinite loops. To prevent the game freezing, 0-duration looped animations "
+"(e.g. a single [CallbackTweener] with no delay) are stopped after a small "
+"number of loops, which may produce unexpected results. If a [Tween]'s "
+"lifetime depends on some node, always use [method bind_node]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53357,10 +54330,10 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Creates and appends an [IntervalTweener]. This method can be used to create "
-"delays in the tween animation, as an alternative for using the delay in "
-"other [Tweener]s or when there's no animation (in which case the "
-"[SceneTreeTween] acts as a timer). [code]time[/code] is the length of the "
-"interval, in seconds.\n"
+"delays in the tween animation, as an alternative to using the delay in other "
+"[Tweener]s, or when there's no animation (in which case the [SceneTreeTween] "
+"acts as a timer). [code]time[/code] is the length of the interval, in "
+"seconds.\n"
"Example: creating an interval in code execution.\n"
"[codeblock]\n"
"# ... some code\n"
@@ -53414,8 +54387,8 @@ msgid ""
"Creates and appends a [PropertyTweener]. This method tweens a "
"[code]property[/code] of an [code]object[/code] between an initial value and "
"[code]final_val[/code] in a span of time equal to [code]duration[/code], in "
-"seconds. The initial value by default is a value at the time the tweening of "
-"the [PropertyTweener] start. For example:\n"
+"seconds. The initial value by default is the property's value at the time "
+"the tweening of the [PropertyTweener] starts. For example:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"tween.tween_property($Sprite, \"position\", Vector2(100, 200), 1)\n"
@@ -53446,16 +54419,15 @@ msgid ""
"Emitted when the [SceneTreeTween] has finished all tweening. Never emitted "
"when the [SceneTreeTween] is set to infinite looping (see [method "
"set_loops]).\n"
-"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) after this signal "
-"is emitted, but it doesn't happen immediately, but on the next processing "
-"frame. Calling [method stop] inside the signal callback will preserve the "
-"[SceneTreeTween]."
+"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) in the next "
+"processing frame after this signal is emitted. Calling [method stop] inside "
+"the signal callback will prevent the [SceneTreeTween] from being removed."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Emitted when a full loop is complete (see [method set_loops]), providing the "
-"loop index. This signal is not emitted after final loop, use [signal "
+"loop index. This signal is not emitted after the final loop, use [signal "
"finished] instead for this case."
msgstr ""
@@ -53463,7 +54435,7 @@ msgstr ""
msgid ""
"Emitted when one step of the [SceneTreeTween] is complete, providing the "
"step index. One step is either a single [Tweener] or a group of [Tweener]s "
-"running parallelly."
+"running in parallel."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -54795,7 +55767,12 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-msgid "Scale part of the local transformation."
+msgid ""
+"Scale part of the local transformation.\n"
+"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, the scale values will either be all "
+"positive or all negative."
msgstr ""
#: doc/classes/Spatial.xml
@@ -57426,11 +58403,11 @@ msgstr ""
msgid ""
"Returns [code]true[/code] if this string contains a valid integer.\n"
"[codeblock]\n"
-"print(\"7\".is_valid_int()) # Prints \"True\"\n"
-"print(\"14.6\".is_valid_int()) # Prints \"False\"\n"
-"print(\"L\".is_valid_int()) # Prints \"False\"\n"
-"print(\"+3\".is_valid_int()) # Prints \"True\"\n"
-"print(\"-12\".is_valid_int()) # Prints \"True\"\n"
+"print(\"7\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"14.6\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"L\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"+3\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"-12\".is_valid_integer()) # Prints \"True\"\n"
"[/codeblock]"
msgstr ""
@@ -60896,6 +61873,10 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml
+msgid "If [code]true[/code], this TileMap bakes a navigation region."
+msgstr ""
+
+#: doc/classes/TileMap.xml
msgid "If [code]true[/code], the cell's UVs will be clipped."
msgstr ""
@@ -61002,6 +61983,10 @@ msgid "The TileMap orientation mode. See [enum Mode] for possible values."
msgstr ""
#: doc/classes/TileMap.xml
+msgid "The navigation layers the TileMap generates its navigation regions in."
+msgstr ""
+
+#: doc/classes/TileMap.xml
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 "
@@ -62133,7 +63118,12 @@ msgstr ""
#: doc/classes/Transform2D.xml
msgid ""
"Returns a copy of the transform scaled by the given [code]scale[/code] "
-"factor, using matrix multiplication."
+"factor, using matrix multiplication.\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
#: doc/classes/Transform2D.xml
@@ -62288,7 +63278,18 @@ msgid ""
"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]."
+"to remove it from the [Tree].\n"
+"[b]Incremental search:[/b] Like [ItemList] and [PopupMenu], [Tree] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/Tree.xml
@@ -65804,11 +66805,12 @@ msgid "This enabler will stop [Particles2D] nodes."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _process function."
+msgid "This enabler will stop the parent's [method Node._process] function."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _physics_process function."
+msgid ""
+"This enabler will stop the parent's [method Node._physics_process] function."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
@@ -65848,6 +66850,16 @@ msgid "The VisibilityNotifier's bounding box."
msgstr ""
#: doc/classes/VisibilityNotifier.xml
+msgid ""
+"In addition to checking whether a node is on screen or within a [Camera]'s "
+"view, VisibilityNotifier can also optionally check whether a node is within "
+"a specified maximum distance when using a [Camera] with perspective "
+"projection. This is useful for throttling the performance requirements of "
+"nodes that are far away.\n"
+"[b]Note:[/b] This feature will be disabled if set to 0.0."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier.xml
msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view."
msgstr ""
@@ -70593,6 +71605,16 @@ msgid "The amount of shader rebinds in the frame."
msgstr ""
#: doc/classes/VisualServer.xml
+msgid ""
+"The peak amount of shaders that have been under compilation in the frame.\n"
+"This is useful to know when asynchronous shader compilation has finished for "
+"the current shaders on screen.\n"
+"[b]Note:[/b] For complete certainty, only assume there are no outstanding "
+"compilations when this value is zero for at least two frames in a row.\n"
+"Unimplemented in the GLES2 rendering backend, always returns 0."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
msgid "The amount of surface changes in the frame."
msgstr ""
@@ -73789,8 +74811,8 @@ msgstr ""
#: doc/classes/World.xml
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."
+"scenario, a navigation map and a sound space. Spatial nodes register their "
+"resources into the current world."
msgstr ""
#: doc/classes/World.xml
@@ -73805,8 +74827,13 @@ msgstr ""
#: doc/classes/World.xml
msgid ""
-"The World's fallback_environment will be used if the World's [Environment] "
-"fails or is missing."
+"The World's fallback environment will be used if [member environment] fails "
+"or is missing."
+msgstr ""
+
+#: doc/classes/World.xml
+msgid ""
+"The [RID] of this world's navigation map. Used by the [NavigationServer]."
msgstr ""
#: doc/classes/World.xml
@@ -73824,8 +74851,8 @@ msgstr ""
#: doc/classes/World2D.xml
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."
+"visual scenario, a navigation map and a sound space. 2D nodes register their "
+"resources into the current 2D world."
msgstr ""
#: doc/classes/World2D.xml
@@ -73843,6 +74870,11 @@ msgstr ""
#: doc/classes/World2D.xml
msgid ""
+"The [RID] of this world's navigation map. Used by the [Navigation2DServer]."
+msgstr ""
+
+#: doc/classes/World2D.xml
+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 ""
diff --git a/doc/translations/ru.po b/doc/translations/ru.po
index afb3693b6a..36dbb7d50d 100644
--- a/doc/translations/ru.po
+++ b/doc/translations/ru.po
@@ -533,9 +533,10 @@ msgstr ""
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml
+#, fuzzy
msgid ""
"Compares two values by checking their actual contents, recursing into any "
-"`Array` or `Dictionary` up to its deepest level.\n"
+"[Array] or [Dictionary] up to its deepest level.\n"
"This compares to [code]==[/code] in a number of ways:\n"
"- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/"
"code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] "
@@ -591,6 +592,7 @@ msgstr ""
"ÑкземплÑÑ€ объекта. Полезно Ð´Ð»Ñ Ð´ÐµÑериализации."
#: modules/gdscript/doc_classes/@GDScript.xml
+#, 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 "
@@ -605,7 +607,7 @@ msgid ""
"- 1.0: Linear\n"
"- Greater than 1.0 (exclusive): Ease in\n"
"[/codeblock]\n"
-"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.4/img/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/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]."
@@ -1771,7 +1773,7 @@ msgid ""
"[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/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/img/"
"smoothstep_ease_comparison.png]Comparison between smoothstep() and ease(x, "
"-1.6521) return values[/url]"
msgstr ""
@@ -4461,6 +4463,15 @@ msgstr ""
"иÑпользованием (опционально) именованных 2D-Ñлоев физики."
#: doc/classes/@GlobalScope.xml
+#, fuzzy
+msgid ""
+"Hints that an integer property is a bitmask using the optionally named 2D "
+"navigation layers."
+msgstr ""
+"Указывает, что целочиÑленное ÑвойÑтво ÑвлÑетÑÑ Ð±Ð¸Ñ‚Ð¾Ð²Ð¾Ð¹ маÑкой Ñ "
+"иÑпользованием (опционально) именованных 2D-Ñлоев рендеринга."
+
+#: doc/classes/@GlobalScope.xml
msgid ""
"Hints that an integer property is a bitmask using the optionally named 3D "
"render layers."
@@ -4477,6 +4488,15 @@ msgstr ""
"иÑпользованием (опционально) именованных 3D-Ñлоев физики."
#: doc/classes/@GlobalScope.xml
+#, fuzzy
+msgid ""
+"Hints that an integer property is a bitmask using the optionally named 3D "
+"navigation layers."
+msgstr ""
+"Указывает, что целочиÑленное ÑвойÑтво ÑвлÑетÑÑ Ð±Ð¸Ñ‚Ð¾Ð²Ð¾Ð¹ маÑкой Ñ "
+"иÑпользованием (опционально) именованных 2D-Ñлоев рендеринга."
+
+#: doc/classes/@GlobalScope.xml
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 "
@@ -9989,7 +10009,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/AStar.xml
+#: doc/classes/AStar.xml doc/classes/AStar2D.xml
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[/"
@@ -10188,7 +10208,10 @@ msgid ""
msgstr ""
#: doc/classes/AStar2D.xml
-msgid "Returns whether there is a connection/segment between the given points."
+msgid ""
+"Returns whether there is a connection/segment between the given points. 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/AStar2D.xml
@@ -10205,10 +10228,6 @@ msgid ""
msgstr ""
#: doc/classes/AStar2D.xml
-msgid "Deletes the segment between the given points."
-msgstr ""
-
-#: doc/classes/AStar2D.xml
msgid ""
"Returns the closest position to [code]to_position[/code] that resides inside "
"a segment between two connected points.\n"
@@ -10393,7 +10412,9 @@ msgid ""
"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."
+"transmit audio over the network. When capturing audio data from a "
+"microphone, the format of the samples will be stereo 32-bit floating point "
+"PCM."
msgstr ""
#: doc/classes/AudioEffectCapture.xml
@@ -15288,7 +15309,7 @@ msgid ""
msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
-#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/Navigation2D.xml
msgid "Returns the object's [RID]."
msgstr ""
@@ -20880,11 +20901,15 @@ msgid ""
msgstr ""
#: doc/classes/CurveTexture.xml
-msgid "The [code]curve[/code] rendered onto the texture."
-msgstr ""
+#, fuzzy
+msgid "The [Curve] that is rendered onto the texture."
+msgstr "Цвет Ñффекта отражениÑ."
#: doc/classes/CurveTexture.xml
-msgid "The width of the texture."
+msgid ""
+"The width of the texture (in pixels). Higher values make it possible to "
+"represent high-frequency data better (such as sudden direction changes), at "
+"the cost of increased generation time and memory usage."
msgstr ""
#: doc/classes/CylinderMesh.xml
@@ -21175,6 +21200,13 @@ msgid "Returns the list of keys in the [Dictionary]."
msgstr ""
#: doc/classes/Dictionary.xml
+msgid ""
+"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, "
+"duplicate keys will not be copied over, unless [code]overwrite[/code] is "
+"[code]true[/code]."
+msgstr ""
+
+#: doc/classes/Dictionary.xml
#, fuzzy
msgid "Returns the number of keys in the dictionary."
msgstr "Возвращает чиÑло Ñлементов в маÑÑиве."
@@ -23121,9 +23153,23 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide a state data you want to be saved, like view "
+"position, grid settings, folding, etc. 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). This data is automatically saved for "
+"each scene in an [code]editstate[/code] file in the editor metadata folder. "
+"If you want to store global (scene-independent) editor data for your plugin, "
+"you can use [method get_window_layout] instead.\n"
+"Use [method set_state] to restore your saved state.\n"
+"[b]Note:[/b] This method should not be used to save important settings that "
+"should persist with the project.\n"
+"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be "
+"stored and restored correctly.\n"
+"[codeblock]\n"
+"func get_state():\n"
+" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n"
+" return state\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -23134,9 +23180,18 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide the GUI layout of the plugin or any other "
+"data you want to be stored. 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). The data is stored in the "
+"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n"
+"Use [method set_window_layout] to restore your saved layout.\n"
+"[codeblock]\n"
+"func get_window_layout(configuration):\n"
+" configuration.set_value(\"MyPlugin\", \"window_position\", $Window."
+"position)\n"
+" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -23249,11 +23304,30 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the state saved by [method get_state]."
+msgid ""
+"Restore the state saved by [method get_state]. This method is called when "
+"the current scene tab is changed in the editor.\n"
+"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise "
+"it will not be recognized and this method will not be called.\n"
+"[codeblock]\n"
+"func set_state(data):\n"
+" zoom = data.get(\"zoom\", 1.0)\n"
+" preferred_color = data.get(\"my_color\", Color.white)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the plugin GUI layout saved by [method get_window_layout]."
+msgid ""
+"Restore the plugin GUI layout and data saved by [method get_window_layout]. "
+"This method is called for every plugin on editor startup. Use the provided "
+"[code]configuration[/code] file to read your saved data.\n"
+"[codeblock]\n"
+"func set_window_layout(configuration):\n"
+" $Window.position = configuration.get_value(\"MyPlugin\", "
+"\"window_position\", Vector2())\n"
+" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", "
+"Color.white)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -27919,7 +27993,8 @@ msgid ""
"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])."
+"at fixed steps (see [member width]). See also [GradientTexture2D] and "
+"[CurveTexture]."
msgstr ""
#: doc/classes/GradientTexture.xml
@@ -27941,7 +28016,8 @@ msgid ""
"repeat] types using colors obtained from the gradient. 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] and [member height])."
+"[member width] and [member height]). See also [GradientTexture] and "
+"[CurveTexture]."
msgstr ""
#: doc/classes/GradientTexture2D.xml
@@ -28758,6 +28834,15 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+#, fuzzy
+msgid ""
+"If [code]true[/code], this GridMap uses cell navmesh resources to create "
+"navigation regions."
+msgstr ""
+"ЕÑли [code]true[/code], Ð°Ð½Ð¸Ð¼Ð°Ñ†Ð¸Ñ [member animation] воÑпроизводитÑÑ Ð² данный "
+"момент."
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid "If [code]true[/code], grid items are centered on the X axis."
msgstr ""
@@ -28808,6 +28893,10 @@ msgid "The assigned [MeshLibrary]."
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+msgid "The navigation layers the GridMap generates its navigation regions in."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
"Overrides the default friction and bounce physics properties for the whole "
"[GridMap]."
@@ -30033,7 +30122,7 @@ msgid ""
" # 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 body = to_json({\"name\": \"Godette\"})\n"
" error = http_request.request(\"https://httpbin.org/post\", [], true, "
"HTTPClient.METHOD_POST, body)\n"
" if error != OK:\n"
@@ -31204,7 +31293,7 @@ msgstr ""
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 "
+"([member 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 "
@@ -31353,10 +31442,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Returns the mouse mode. See the constants for more information."
-msgstr ""
-
-#: doc/classes/Input.xml
msgid ""
"Gets an input vector by specifying four actions for the positive and "
"negative X and Y axes.\n"
@@ -31550,24 +31635,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Sets the mouse mode. See the constants for more information."
-msgstr ""
-
-#: doc/classes/Input.xml
-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
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 "
@@ -31603,6 +31670,24 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
+msgid "Controls the mouse mode. See [enum MouseMode] for more information."
+msgstr ""
+
+#: doc/classes/Input.xml
+msgid ""
+"If [code]true[/code], similar input events sent by the operating system are "
+"accumulated. 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 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
msgid "Emitted when a joypad device has been connected or disconnected."
msgstr ""
@@ -31910,8 +31995,8 @@ msgstr ""
#: doc/classes/InputEventJoypadButton.xml
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]."
+"Represents the pressure the user puts on the button with their finger, if "
+"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]."
msgstr ""
#: doc/classes/InputEventJoypadMotion.xml
@@ -32174,9 +32259,9 @@ 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 "
+"at most. If you need more precise input reporting, set [member Input."
+"use_accumulated_input] to [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."
@@ -32665,7 +32750,18 @@ msgid ""
"[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."
+"fixed_column_width] greater than zero to wrap the text.\n"
+"[b]Incremental search:[/b] Like [PopupMenu] and [Tree], [ItemList] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/ItemList.xml
@@ -36456,12 +36552,18 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Returns the override [Material] for a surface of the [Mesh] resource.\n"
+"[b]Note:[/b] This function only returns [i]override[/i] materials associated "
+"with this [MeshInstance]. Consider using [method get_active_material] or "
+"[method Mesh.surface_get_material] to get materials associated with the "
+"[Mesh] resource."
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the number of surface materials."
-msgstr ""
+#, fuzzy
+msgid "Returns the number of surface override materials."
+msgstr "Возвращает чиÑло Ñлементов в маÑÑиве."
#: doc/classes/MeshInstance.xml
msgid ""
@@ -36497,7 +36599,10 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Sets the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Sets the override [Material] for the specified surface of the [Mesh] "
+"resource. This material is associated with this [MeshInstance] rather than "
+"with the [Mesh] resource."
msgstr ""
#: doc/classes/MeshInstance.xml
@@ -36528,9 +36633,10 @@ msgstr ""
#: doc/classes/MeshInstance2D.xml
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\"."
+"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be "
+"automatically created from an existing [Sprite] via a tool in the editor "
+"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to "
+"MeshInstance2D[/b] at the top of the 2D editor viewport."
msgstr ""
#: doc/classes/MeshInstance2D.xml
@@ -37296,6 +37402,9 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"Provides navigation and pathfinding within a collection of "
"[NavigationMesh]es. By default, these will be automatically collected from "
"child [NavigationMeshInstance] nodes. In addition to basic pathfinding, this "
@@ -37336,7 +37445,15 @@ msgid ""
msgstr ""
#: doc/classes/Navigation.xml
+#, fuzzy
+msgid "Returns the [RID] of the navigation map on the [NavigationServer]."
+msgstr "Возвращает количеÑтво дорожек в анимации."
+
+#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"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, "
@@ -37358,16 +37475,31 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation.get_simple_path] path query."
+msgstr ""
+
+#: doc/classes/Navigation.xml
+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/Navigation.xml doc/classes/Navigation2DServer.xml
+#: doc/classes/NavigationServer.xml
+msgid ""
+"Emitted when a navigation map is updated, when a region moves or is modified."
+msgstr ""
+
#: doc/classes/Navigation2D.xml
msgid "2D navigation and pathfinding node."
msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -37387,6 +37519,9 @@ msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -37396,6 +37531,12 @@ msgstr ""
msgid "The XY plane cell size to use for fields."
msgstr ""
+#: doc/classes/Navigation2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation2D.get_simple_path] path query."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml
#, fuzzy
msgid "Server interface for low-level 2D navigation access."
@@ -37413,8 +37554,12 @@ msgid ""
"through scripts.\n"
"For two regions to be connected to each other, they must share a similar "
"edge. An edge is considered connected to another if both of its two vertices "
-"are at a distance less than [member Navigation.edge_connection_margin] to "
-"the respective other edge's vertex.\n"
+"are at a distance less than navigation map [code]edge_connection_margin[/"
+"code] to the respective other edge's vertex.\n"
+"You may assign navigation layers to regions with [method Navigation2DServer."
+"region_set_navigation_layers], which then can be checked upon when "
+"requesting a path with [method Navigation2DServer.map_get_path]. This allows "
+"allowing or forbidding some areas to 2D objects.\n"
"To use the collision avoidance system, you may use agents. You can set an "
"agent's target velocity, then the servers will emit a callback with a "
"modified velocity.\n"
@@ -37443,7 +37588,17 @@ msgid "Returns [code]true[/code] if the map got changed the previous frame."
msgstr "Возвращает [code]true[/code] еÑли маÑÑив пуÑтой."
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Callback called at the end of the RVO process."
+msgid ""
+"Callback called at the end of the RVO process. If a callback is created "
+"manually and the agent is placed on a navigation map it will calculate "
+"avoidance for the agent and dispatch the calculated [code]safe_velocity[/"
+"code] to the [code]receiver[/code] object with a signal to the chosen "
+"[code]method[/code] name.\n"
+"[b]Note:[/b] Created callbacks are always processed independently of the "
+"SceneTree state as long as the agent is on a navigation map and not freed. "
+"To disable the dispatch of a callback from an agent use [method "
+"agent_set_callback] again with a [code]null[/code] object as the "
+"[code]receiver[/code]."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -37504,15 +37659,58 @@ msgid "Destroys the given RID."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns all created navigation map [RID]s on the NavigationServer. This "
+"returns both 2D and 3D created navigation maps as there is technically no "
+"distinction between them."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Create a new map."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"This function immediately forces synchronization of the specified navigation "
+"[code]map[/code] [RID]. By default navigation maps are only synchronized at "
+"the end of each physics frame. This function can be used to immediately "
+"(re)calculate all the navigation meshes and region connections of the "
+"navigation map. This makes it possible to query a navigation path for a "
+"changed map immediately and in the same frame (multiple times if needed).\n"
+"Due to technical restrictions the current NavigationServer command queue "
+"will be flushed. This means all already queued update commands for this "
+"physics frame will be executed, even those intended for other maps, regions "
+"and agents not part of the specified map. The expensive computation of the "
+"navigation meshes and region connections of a map will only be done for the "
+"specified map. Other maps will receive the normal synchronization at the end "
+"of the physics frame. Should the specified map receive changes after the "
+"forced update it will update again as well when the other maps receive their "
+"update.\n"
+"Avoidance processing and dispatch of the [code]safe_velocity[/code] signals "
+"is untouched by this function and continues to happen for all maps and "
+"agents at the end of the physics frame.\n"
+"[b]Note:[/b] With great power comes great responsibility. This function "
+"should only be used by users that really know what they are doing and have a "
+"good reason for it. Forcing an immediate update of a navigation map requires "
+"locking the NavigationServer and flushing the entire NavigationServer "
+"command queue. Not only can this severely impact the performance of a game "
+"but it can also introduce bugs if used inappropriately without much "
+"foresight."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns all navigation agents [RID]s that are currently assigned to the "
"requested navigation [code]map[/code]."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+#, fuzzy
+msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented."
+msgstr ""
+"Получает текущую Ñтроку в проанализированном файле (в наÑтоÑщее Ð²Ñ€ÐµÐ¼Ñ Ð½Ðµ "
+"реализовано)."
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
#, fuzzy
msgid "Returns the map cell size."
@@ -37540,7 +37738,10 @@ msgid ""
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Returns the navigation path to reach the destination from the origin."
+msgid ""
+"Returns the navigation path to reach the destination from the origin. "
+"[code]navigation_layers[/code] is a bitmask of all region layers that are "
+"allowed to be in the path."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -37559,6 +37760,12 @@ msgstr "Возвращает [code]true[/code] еÑли маÑÑив пуÑтоÐ
msgid "Sets the map active."
msgstr "Возвращает значение задержки данного кадра."
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/"
+"b] Currently not implemented."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Set the map cell size used to weld the navigation mesh polygons."
msgstr ""
@@ -37574,15 +37781,78 @@ msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"Returns the ending point of a connection door. [code]connection[/code] is an "
+"index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns the starting point of a connection door. [code]connection[/code] is "
+"an index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns how many connections this [code]region[/code] has with other regions "
+"in the map."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]."
+msgstr "Возвращает [code]true[/code] еÑли маÑÑив Ñодержит [code]value[/code]."
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns the navigation map [RID] the requested [code]region[/code] is "
"currently assigned to."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
#, fuzzy
+msgid "Returns the region's navigation layers."
+msgstr "Возвращает чиÑло Ñлементов в маÑÑиве."
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]."
+msgstr "ЛогичеÑкий оператор ИЛИ ([code]or[/code] или [code]||[/code])."
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns [code]true[/code] if the provided [code]point[/code] in world space "
+"is currently owned by the provided navigation [code]region[/code]. Owned in "
+"this context means that one of the region's navigation mesh polygon faces "
+"has a possible position at the closest distance to this point compared to "
+"all other navigation meshes from other navigation regions that are also "
+"registered on the navigation map of the provided region.\n"
+"If multiple navigation meshes have positions at equal distance the "
+"navigation region whose polygons are processed first wins the ownership. "
+"Polygons are processed in the same order that navigation regions were "
+"registered on the NavigationServer.\n"
+"[b]Note:[/b] If navigation meshes from different navigation regions overlap "
+"(which should be avoided in general) the result might not be what is "
+"expected."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]."
+msgstr "ЛогичеÑкий оператор ИЛИ ([code]or[/code] или [code]||[/code])."
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
msgid "Sets the map for the region."
msgstr "Возвращает ÑÐ¸Ð½ÑƒÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°."
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method Navigation2DServer.map_get_path])."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
#, fuzzy
msgid "Sets the navigation mesh for the region."
@@ -37593,6 +37863,11 @@ msgstr "ОÑтанавливает текущую анимацию (не ÑбрÐ
msgid "Sets the global transformation for the region."
msgstr "Возвращает раÑÑтоÑние до [code]b[/code]."
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]."
+msgstr "ЛогичеÑкий оператор ИЛИ ([code]or[/code] или [code]||[/code])."
+
#: doc/classes/NavigationAgent.xml
msgid "3D agent used in navigation for collision avoidance."
msgstr ""
@@ -37602,9 +37877,16 @@ msgid ""
"3D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationAgent] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World] navigation map. If this node is a child of a [Navigation] "
+"node it will register to the navigation map of the navigation node or the "
+"function [method set_navigation] can be used to set the navigation node "
+"directly. [NavigationAgent] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -37622,7 +37904,15 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-msgid "Returns the path from start to finish in global coordinates."
+msgid ""
+"Returns this agent's current path from start to finish in global "
+"coordinates. The path only updates when the target location is changed or "
+"the agent requires a repath. The path array is not intended to be used in "
+"direct path movement as the agent has its own internal path logic that would "
+"get corrupted by changing the path array manually. Use the intended [method "
+"get_next_location] once every physics frame to receive the next path point "
+"for the agents movement as this function also updates the internal path "
+"logic."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -37638,11 +37928,24 @@ msgid ""
"system."
msgstr ""
-#: doc/classes/NavigationAgent.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
+"Returns the [RID] of the navigation map for this NavigationAgent node. This "
+"function returns always the map set on the NavigationAgent node and not the "
+"map of the abstract agent on the NavigationServer. If the agent map is "
+"changed directly with the NavigationServer API the NavigationAgent node will "
+"not be aware of the map change. Use [method set_navigation_map] to change "
+"the navigation map for the NavigationAgent and also update the agent on the "
+"NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"Returns a [Vector3] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the origin of the agent's parent."
+"Returns the next location in global coordinates that can be moved to, making "
+"sure that there are no static objects in the way. If the agent does not have "
+"a navigation path, it will return the position of the agent's parent. The "
+"use of this function once every physics frame is required to update the "
+"internal path logic of the NavigationAgent."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -37687,6 +37990,12 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"Sets the [RID] of the navigation map this NavigationAgent node should use "
+"and also updates the [code]agent[/code] on the NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"Sets the user desired final location. This will clear the current navigation "
"path."
msgstr ""
@@ -37699,7 +38008,13 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml
-msgid "The agent height offset to match the navigation mesh height."
+msgid ""
+"The NavigationAgent height offset is subtracted from the y-axis value of any "
+"vector path position for this NavigationAgent. The NavigationAgent height "
+"offset does not change or influence the navigation mesh or pathfinding query "
+"result. Additional navigation maps that use regions with navigation meshes "
+"that the developer baked with appropriate agent radius or height values are "
+"required to support different-sized agents."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -37726,27 +38041,53 @@ msgstr ""
msgid "The maximum speed that an agent can move."
msgstr ""
+#: doc/classes/NavigationAgent.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "The distance to search for other agents."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"The distance threshold before a path point is considered to be reached. This "
+"will allow an agent to not have to hit a path point on the path exactly, but "
+"in the area. If this value is set to high the NavigationAgent will skip "
+"points on the path which can lead to leaving the navigation mesh. If this "
+"value is set to low the NavigationAgent will be stuck in a repath loop cause "
+"it will constantly overshoot or undershoot the distance to the next point on "
+"each physics frame update."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"The maximum distance the agent is allowed away from the ideal path to the "
"final location. This can happen due to trying to avoid collisions. When the "
"maximum distance is exceeded, it recalculates the ideal path."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-#, fuzzy
-msgid "The radius of the agent."
-msgstr "Цвет Ñффекта отражениÑ."
+msgid ""
+"The radius of the avoidance agent. This is the \"body\" of the avoidance "
+"agent and not the avoidance maneuver starting radius (which is controlled by "
+"[member neighbor_dist]).\n"
+"Does not affect normal pathfinding. To change an actor's pathfinding radius "
+"bake [NavigationMesh] resources with a different [member NavigationMesh."
+"agent_radius] property and use different navigation maps for each actor size."
+msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"The distance threshold before a target is considered to be reached. This "
-"will allow an agent to not have to hit a point on the path exactly, but in "
-"the area."
+"The distance threshold before the final target point is considered to be "
+"reached. This will allow an agent to not have to hit the point of the final "
+"target exactly, but only the area. If this value is set to low the "
+"NavigationAgent will be stuck in a repath loop cause it will constantly "
+"overshoot or undershoot the distance to the final target point on each "
+"physics frame update."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -37789,9 +38130,16 @@ msgid ""
"2D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationAgent2D] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World2D] navigation map. If this node is a child of a "
+"[Navigation2D] node it will register to the navigation map of the navigation "
+"node or the function [method set_navigation] can be used to set the "
+"navigation node directly. [NavigationAgent2D] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent2D.xml
@@ -37808,13 +38156,6 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent2D.xml
-msgid ""
-"Returns a [Vector2] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the position of the agent's parent."
-msgstr ""
-
-#: doc/classes/NavigationAgent2D.xml
#, fuzzy
msgid "Returns the [RID] of this agent on the [Navigation2DServer]."
msgstr "Возвращает количеÑтво дорожек в анимации."
@@ -37835,6 +38176,13 @@ msgid ""
"only be enabled on agents that currently require it."
msgstr ""
+#: doc/classes/NavigationAgent2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent2D] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationMesh.xml
msgid "A mesh to approximate the walkable areas and obstacles."
msgstr ""
@@ -37864,10 +38212,13 @@ msgid ""
msgstr ""
#: doc/classes/NavigationMesh.xml
+#, fuzzy
msgid ""
-"Returns whether the specified [code]bit[/code] of the [member geometry/"
-"collision_mask] is set."
+"Returns whether the specified [code]bit[/code] of the [member "
+"geometry_collision_mask] is set."
msgstr ""
+"Возвращает [code]true[/code] еÑли [code]a[/code] и [code]b[/code] "
+"приблизительно равны друг другу."
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
msgid ""
@@ -37889,9 +38240,9 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/"
-"code] in the [member geometry/collision_mask].\n"
+"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]."
+"code] in the [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
@@ -37905,14 +38256,14 @@ 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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -37924,7 +38275,7 @@ 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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -37952,13 +38303,17 @@ msgstr ""
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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
-"If [code]true[/code], marks walkable spans as not walkable if the clearance "
-"above the span is less than [member agent/height]."
+"If the baking [AABB] has a volume the navigation mesh baking will be "
+"restricted to its enclosing area."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+msgid "The position offset applied to the [member filter_baking_aabb] [AABB]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -37969,13 +38324,19 @@ msgstr "ЕÑли [code]true[/code], текÑтура отражена по гоÑ
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]true[/code], marks non-walkable spans as walkable if their maximum "
-"is within [member agent/max_climb] of a walkable neighbor."
+"is within [member agent_max_climb] of a walkable neighbor."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+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
msgid ""
"The physics layers to scan for static colliders.\n"
-"Only used when [member geometry/parsed_geometry_type] is [constant "
+"Only used when [member geometry_parsed_geometry_type] is [constant "
"PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]."
msgstr ""
@@ -37994,7 +38355,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"The name of the group to scan for geometry.\n"
-"Only used when [member geometry/source_geometry_mode] is [constant "
+"Only used when [member geometry_source_geometry_mode] is [constant "
"SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant "
"SOURCE_GEOMETRY_GROUPS_EXPLICIT]."
msgstr ""
@@ -38058,7 +38419,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Parses [StaticBody] colliders as geometry. The collider should be in any of "
-"the layers specified by [member geometry/collision_mask]."
+"the layers specified by [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -38080,13 +38441,13 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Scans nodes in a group and their child nodes recursively for geometry. The "
-"group is specified by [member geometry/source_group_name]."
+"group is specified by [member geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Uses nodes in a group for geometry. The group is specified by [member "
-"geometry/source_group_name]."
+"geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -38129,7 +38490,15 @@ msgid ""
"geometry for walkable terrain suitable to [NavigationMesh] agent properties "
"by creating a voxel world around the meshes bounding area.\n"
"The finalized navigation mesh is then returned and stored inside the "
-"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes."
+"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] "
+"nodes.\n"
+"[b]Note:[/b] Using meshes to not only define walkable surfaces but also "
+"obstruct navigation baking does not always work. The navigation baking has "
+"no concept of what is a geometry \"inside\" when dealing with mesh source "
+"geometry and this is intentional. Depending on current baking parameters, as "
+"soon as the obstructing mesh is large enough to fit a navigation mesh area "
+"inside, the baking will generate navigation mesh areas that are inside the "
+"obstructing source geometry mesh."
msgstr ""
#: doc/classes/NavigationMeshGenerator.xml
@@ -38137,8 +38506,8 @@ msgid ""
"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child "
"nodes under the provided [code]root_node[/code] or a specific group of nodes "
"for potential source geometry. The parse behavior can be controlled with the "
-"[member NavigationMesh.geometry/parsed_geometry_type] and [member "
-"NavigationMesh.geometry/source_geometry_mode] properties on the "
+"[member NavigationMesh.geometry_parsed_geometry_type] and [member "
+"NavigationMesh.geometry_source_geometry_mode] properties on the "
"[NavigationMesh] resource."
msgstr ""
@@ -38156,8 +38525,21 @@ msgstr ""
#: doc/classes/NavigationMeshInstance.xml
msgid ""
"An instance of a [NavigationMesh]. It tells the [Navigation] node what can "
-"be navigated and what cannot, based on the [NavigationMesh] resource. This "
-"should be a child of a [Navigation] node."
+"be navigated and what cannot, based on the [NavigationMesh] resource.\n"
+"By default this node will register to the default [World] navigation map. If "
+"this node is a child of a [Navigation] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method NavigationServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The cost of entering this region from another region can be controlled with "
+"the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The cost of traveling distances inside this region can be controlled with "
+"the [member travel_cost] multiplier."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
@@ -38186,11 +38568,35 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding enters this region's navmesh from another regions navmesh "
+"the [code]enter_cost[/code] value is added to the path distance for "
+"determining the shortest path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationMesh] "
+"belongs to. On path requests with [method NavigationServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
#, fuzzy
msgid "The [NavigationMesh] resource to use."
msgstr "Синглтон [NavigationMeshGenerator]."
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding moves inside this region's navmesh the traveled distances "
+"are multiplied with [code]travel_cost[/code] for determining the shortest "
+"path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
msgid "Notifies when the navigation mesh bake operation is completed."
msgstr ""
@@ -38207,7 +38613,9 @@ msgid ""
"3D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationObstacle] is physics safe."
+"[NavigationObstacle] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle.xml
@@ -38248,7 +38656,9 @@ msgid ""
"2D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationObstacle2D] is physics safe."
+"[NavigationObstacle2D] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle2D.xml
@@ -38329,6 +38739,14 @@ msgstr ""
#: doc/classes/NavigationPolygon.xml
msgid ""
+"Returns the [NavigationMesh] resulting from this navigation polygon. This "
+"navmesh can be used to update the navmesh of a region with the [method "
+"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server "
+"behind the scene)."
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml
+msgid ""
"Returns a [PoolVector2Array] containing the vertices of an outline that was "
"created in the editor or by script."
msgstr ""
@@ -38365,6 +38783,31 @@ msgid ""
msgstr ""
#: doc/classes/NavigationPolygonInstance.xml
+#, fuzzy
+msgid "A region of the 2D navigation map."
+msgstr "Выпекает навигационную Ñетку."
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A region of the navigation map. It tells the [Navigation2DServer] what can "
+"be navigated and what cannot, based on its [NavigationPolygon] resource.\n"
+"By default this node will register to the default [World2D] navigation map. "
+"If this node is a child of a [Navigation2D] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The pathfinding cost of entering this region from another region can be "
+"controlled with the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The pathfinding cost of traveling distances inside this region can be "
+"controlled with the [member travel_cost] multiplier."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
msgid ""
"Returns the [RID] of this region on the [Navigation2DServer]. Combined with "
"[method Navigation2DServer.map_get_closest_point_owner] can be used to "
@@ -38372,6 +38815,23 @@ msgid ""
"navigation map."
msgstr ""
+#: doc/classes/NavigationPolygonInstance.xml
+msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationPolygon] "
+"belongs to. On path requests with [method Navigation2DServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+#, fuzzy
+msgid "The [NavigationPolygon] resource to use."
+msgstr "Синглтон [NavigationMeshGenerator]."
+
#: doc/classes/NavigationServer.xml
#, fuzzy
msgid "Server interface for low-level 3D navigation access."
@@ -38463,6 +38923,12 @@ msgid "Bakes the navigation mesh."
msgstr "Выпекает навигационную Ñетку."
#: doc/classes/NavigationServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method NavigationServer.map_get_path])."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
#, fuzzy
msgid "Control activation of this server."
msgstr "Управление активацией данного Ñервера."
@@ -40000,13 +40466,19 @@ msgstr ""
#: doc/classes/Node.xml
msgid ""
"Emitted when a child node enters the scene tree, either because it entered "
-"on its own or because this node entered with it."
+"on its own or because this node entered with it.\n"
+"This signal is emitted [i]after[/i] the child node's own [constant "
+"NOTIFICATION_ENTER_TREE] and [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
msgid ""
-"Emitted when a child node exits the scene tree, either because it exited on "
-"its own or because this node exited."
+"Emitted when a child node is about to exit the scene tree, either because it "
+"is being removed or freed directly, or because this node is exiting the "
+"tree.\n"
+"When this signal is received, the child [code]node[/code] is still in the "
+"tree and valid. This signal is emitted [i]after[/i] the child node's own "
+"[signal tree_exiting] and [constant NOTIFICATION_EXIT_TREE]."
msgstr ""
#: doc/classes/Node.xml
@@ -40018,7 +40490,10 @@ msgid "Emitted when the node is renamed."
msgstr ""
#: doc/classes/Node.xml
-msgid "Emitted when the node enters the tree."
+msgid ""
+"Emitted when the node enters the tree.\n"
+"This signal is emitted [i]after[/i] the related [constant "
+"NOTIFICATION_ENTER_TREE] notification."
msgstr ""
#: doc/classes/Node.xml
@@ -40028,15 +40503,21 @@ msgstr ""
#: doc/classes/Node.xml
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)."
+"the right place for de-initialization (or a \"destructor\", if you will).\n"
+"This signal is emitted [i]before[/i] the related [constant "
+"NOTIFICATION_EXIT_TREE] notification."
msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node enters a [SceneTree]."
+msgid ""
+"Notification received when the node enters a [SceneTree].\n"
+"This notification is emitted [i]before[/i] the related [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node is about to exit a [SceneTree]."
+msgid ""
+"Notification received when the node is about to exit a [SceneTree].\n"
+"This notification is emitted [i]after[/i] the related [signal tree_exiting]."
msgstr ""
#: doc/classes/Node.xml
@@ -40299,7 +40780,13 @@ msgid "Rotation in degrees, relative to the node's parent."
msgstr ""
#: doc/classes/Node2D.xml
-msgid "The node's scale. Unscaled value: [code](1, 1)[/code]."
+msgid ""
+"The node's scale. Unscaled value: [code](1, 1)[/code].\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
#: doc/classes/Node2D.xml
@@ -41755,6 +42242,10 @@ msgid ""
" if argument.find(\"=\") > -1:\n"
" var key_value = argument.split(\"=\")\n"
" arguments[key_value[0].lstrip(\"--\")] = key_value[1]\n"
+" else:\n"
+" # Options without an argument will be present in the dictionary,\n"
+" # with the value set to an empty string.\n"
+" arguments[argument.lstrip(\"--\")] = \"\"\n"
"[/codeblock]"
msgstr ""
@@ -42417,8 +42908,15 @@ msgstr ""
msgid ""
"Moves the file or directory to the system's recycle bin. See also [method "
"Directory.remove].\n"
+"The method takes only global paths, so you may need to use [method "
+"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/"
+"code] as it will not work in exported project.\n"
"[b]Note:[/b] If the user has disabled the recycle bin on their system, the "
-"file will be permanently deleted instead."
+"file will be permanently deleted instead.\n"
+"[codeblock]\n"
+"var file_to_remove = \"user://slot1.sav\"\n"
+"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/OS.xml
@@ -47311,7 +47809,18 @@ msgstr ""
#: doc/classes/PopupMenu.xml
msgid ""
"[PopupMenu] is a [Control] that displays a list of options. They are popular "
-"in toolbars or context menus."
+"in toolbars or context menus.\n"
+"[b]Incremental search:[/b] Like [ItemList] and [Tree], [PopupMenu] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/PopupMenu.xml
@@ -48843,7 +49352,16 @@ msgid ""
msgstr ""
#: doc/classes/ProjectSettings.xml
-msgid "Message to be displayed before the backtrace when the engine crashes."
+msgid ""
+"Message to be displayed before the backtrace when the engine crashes. By "
+"default, this message is only used in exported projects due to the editor-"
+"only override applied to this setting."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Editor-only override for [member debug/settings/crash_handler/message]. Does "
+"not affect exported projects in debug or release mode."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -49088,6 +49606,18 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default naming style for scene files to infer from their root nodes. "
+"Possible options are:\n"
+"- [code]0[/code] (Auto): Uses the scene root name as is without changing its "
+"casing.\n"
+"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase "
+"casing.\n"
+"- [code]2[/code] (snake_case): Converts the scene root name to snake_case "
+"casing."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -49313,6 +49843,198 @@ msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 1."
msgstr ""
@@ -49521,6 +50243,198 @@ msgid "Optional name for the 2D render layer 9."
msgstr ""
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 1."
msgstr ""
@@ -49788,6 +50702,49 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default cell height for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_height].\n"
+"[b]Note:[/b] Currently not implemented."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 2D navigation maps. See [method "
+"Navigation2DServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell height for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_height]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 3D navigation maps. See [method "
+"NavigationServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default map up vector for 3D navigation maps. See [method NavigationServer."
+"map_set_up]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -50461,20 +51418,28 @@ msgid ""
"cause.\n"
"The default value is a conservative one, so you are advised to tweak it "
"according to the hardware you are targeting.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"The default is a very conservative override for [code]rendering/gles3/"
-"shaders/max_concurrent_compiles[/code].\n"
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
"Depending on the specific devices you are targeting, you may want to raise "
"it.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
+"Depending on the specific browsers you are targeting, you may want to raise "
+"it.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -50482,19 +51447,28 @@ msgid ""
"The maximum size, in megabytes, that the ubershader cache can grow up to. On "
"startup, the least recently used entries will be deleted until the total "
"size is within bounds.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/ubershader_cache_size_mb[/"
-"code], so a smaller maximum size can be configured for mobile platforms, "
-"where storage space is more limited.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for mobile platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for web platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] Currently, shader caching is generally unavailable on web "
+"platforms.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -50526,14 +51500,22 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/shader_compilation_mode[/"
-"code], so asynchronous compilation can be disabled for mobile.\n"
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on mobile platforms.\n"
"You may want to do that since mobile GPUs generally won't support "
"ubershaders due to their complexity."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on web platforms.\n"
+"You may want to do that since certain browsers (especially on mobile "
+"platforms) generally won't support ubershaders due to their complexity."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
@@ -51290,7 +52272,6 @@ msgid ""
"- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/"
"code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, "
"small grid radius values may lead to unwanted groupings.\n"
-"[/codeblock]\n"
"[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more "
"effective and faster [VisibilityNotifier] functionality. For most use cases, "
"[method Vector3.distance_to] or [method Vector3.distance_squared_to] are "
@@ -53496,6 +54477,22 @@ msgid "Makes text fill width."
msgstr ""
#: doc/classes/RichTextLabel.xml
+msgid "Aligns top of the inline image to the top of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns center of the inline image to the center of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns bottom of the inline image to the baseline of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns bottom of the inline image to the bottom of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
msgid "Each list item has a number marker."
msgstr ""
@@ -55234,8 +56231,8 @@ msgid ""
" yield(get_tree().create_timer(1.0), \"timeout\")\n"
" print(\"Timer ended.\")\n"
"[/codeblock]\n"
-"The timer will be automatically freed after its time elapses, so be aware "
-"that any reference you might have kept to it will become invalid."
+"The timer will be dereferenced after its time elapses. To preserve the "
+"timer, you can keep a reference to it. See [Reference]."
msgstr ""
#: doc/classes/SceneTreeTimer.xml
@@ -55267,24 +56264,23 @@ msgid ""
"manually (i.e. by using [code]Tween.new()[/code]) are invalid. They can't be "
"used for tweening values, but you can do manual interpolation with [method "
"interpolate_value].\n"
-"A [SceneTreeTween] animation is composed of a sequence of [Tweener]s, which "
-"by default are executed one after another. You can create a sequence by "
-"appending [Tweener]s to the [SceneTreeTween]. Animating something with a "
-"[Tweener] is called tweening. Example tweening sequence looks like this:\n"
+"A tween animation is created by adding [Tweener]s to the [SceneTreeTween] "
+"object, using [method tween_property], [method tween_interval], [method "
+"tween_callback] or [method tween_method]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1)\n"
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"This sequence will make the [code]$Sprite[/code] node turn red, then shrink "
-"and finally the [method Node.queue_free] is called to remove the sprite. See "
-"methods [method tween_property], [method tween_interval], [method "
-"tween_callback] and [method tween_method] for more usage information.\n"
+"This sequence will make the [code]$Sprite[/code] node turn red, then shrink, "
+"before finally calling [method Node.queue_free] to free the sprite. "
+"[Tweener]s are executed one after another by default. This behavior can be "
+"changed using [method parallel] and [method set_parallel].\n"
"When a [Tweener] is created with one of the [code]tween_*[/code] methods, a "
"chained method call can be used to tweak the properties of this [Tweener]. "
-"For example, if you want to set different transition type in the above "
-"example, you can do:\n"
+"For example, if you want to set a different transition type in the above "
+"example, you can use [method set_trans]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1).set_trans(Tween."
@@ -55293,8 +56289,9 @@ msgid ""
"TRANS_BOUNCE)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Most of the [SceneTreeTween] methods can be chained this way too. In this "
-"example the [SceneTreeTween] is bound and have set a default transition:\n"
+"Most of the [SceneTreeTween] methods can be chained this way too. In the "
+"following example the [SceneTreeTween] is bound to the running script's node "
+"and a default transition is set for its [Tweener]s:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween().bind_node(self).set_trans(Tween."
"TRANS_ELASTIC)\n"
@@ -55302,16 +56299,16 @@ msgid ""
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Another interesting use for [SceneTreeTween]s is animating arbitrary set of "
+"Another interesting use for [SceneTreeTween]s is animating arbitrary sets of "
"objects:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"for sprite in get_children():\n"
-" tween.tween_property(sprite, \"position\", Vector2(), 1)\n"
+" tween.tween_property(sprite, \"position\", Vector2(0, 0), 1)\n"
"[/codeblock]\n"
"In the example above, all children of a node are moved one after another to "
"position (0, 0).\n"
-"Some [Tweener]s use transitions and eases. The first accepts an [enum Tween."
+"Some [Tweener]s use transitions and eases. The first accepts a [enum Tween."
"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 Tween.EaseType] constant, and "
@@ -55323,7 +56320,7 @@ msgid ""
"tween_cheatsheet.png]Tween easing and transition types cheatsheet[/url]\n"
"[b]Note:[/b] All [SceneTreeTween]s will automatically start by default. To "
"prevent a [SceneTreeTween] from autostarting, you can call [method stop] "
-"immediately after it was created."
+"immediately after it is created."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -55353,21 +56350,24 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
-"Processes the [SceneTreeTween] by given [code]delta[/code] value, in "
-"seconds. Mostly useful when the [SceneTreeTween] is paused, for controlling "
-"it manually. Can also be used to end the [SceneTreeTween] animation "
-"immediately, by using [code]delta[/code] longer than the whole duration.\n"
+"Processes the [SceneTreeTween] by the given [code]delta[/code] value, in "
+"seconds. This is mostly useful for manual control when the [SceneTreeTween] "
+"is paused. It can also be used to end the [SceneTreeTween] animation "
+"immediately, by setting [code]delta[/code] longer than the whole duration of "
+"the [SceneTreeTween] animation.\n"
"Returns [code]true[/code] if the [SceneTreeTween] still has [Tweener]s that "
"haven't finished.\n"
-"[b]Note:[/b] The [SceneTreeTween] will become invalid after finished, but "
-"you can call [method stop] after the step, to keep it and reset."
+"[b]Note:[/b] The [SceneTreeTween] will become invalid in the next processing "
+"frame after its animation finishes. Calling [method stop] after performing "
+"[method custom_step] instead keeps and resets the [SceneTreeTween]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Returns the total time in seconds the [SceneTreeTween] has been animating (i."
-"e. time since it started, not counting pauses etc.). The time is affected by "
-"[method set_speed_scale] and [method stop] will reset it to [code]0[/code].\n"
+"e. the time since it started, not counting pauses etc.). The time is "
+"affected by [method set_speed_scale], and [method stop] will reset it to "
+"[code]0[/code].\n"
"[b]Note:[/b] As it results from accumulating frame deltas, the time returned "
"after the [SceneTreeTween] has finished animating will be slightly greater "
"than the actual [SceneTreeTween] duration."
@@ -55403,11 +56403,10 @@ msgstr ""
msgid ""
"Returns whether the [SceneTreeTween] is valid. A valid [SceneTreeTween] is a "
"[SceneTreeTween] contained by the scene tree (i.e. the array from [method "
-"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). "
-"[SceneTreeTween] might become invalid when it has finished tweening or was "
-"killed, also when created with [code]Tween.new()[/code]. Invalid "
-"[SceneTreeTween] can't have [Tweener]s appended, because it can't animate "
-"them. You can however still use [method interpolate_value]."
+"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). A "
+"[SceneTreeTween] might become invalid when it has finished tweening, is "
+"killed, or when created with [code]SceneTreeTween.new()[/code]. Invalid "
+"[SceneTreeTween]s can't have [Tweener]s appended."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -55447,16 +56446,15 @@ msgstr ""
msgid ""
"Sets the number of times the tweening sequence will be repeated, i.e. "
"[code]set_loops(2)[/code] will run the animation twice.\n"
-"Calling this method without arguments will make the [SceneTreeTween] run "
-"infinitely, until it is either killed by [method kill] or by freeing bound "
-"node, or all the animated objects have been freed (which makes further "
+"Calling this method without arguments will make the [Tween] run infinitely, "
+"until either it is killed with [method kill], the [Tween]'s bound node is "
+"freed, or all the animated objects have been freed (which makes further "
"animation impossible).\n"
"[b]Warning:[/b] Make sure to always add some duration/delay when using "
-"infinite loops. 0-duration looped animations (e.g. single [CallbackTweener] "
-"with no delay or [PropertyTweener] with invalid node) are equivalent to "
-"infinite [code]while[/code] loops and will freeze your game. If a "
-"[SceneTreeTween]'s lifetime depends on some node, always use [method "
-"bind_node]."
+"infinite loops. To prevent the game freezing, 0-duration looped animations "
+"(e.g. a single [CallbackTweener] with no delay) are stopped after a small "
+"number of loops, which may produce unexpected results. If a [Tween]'s "
+"lifetime depends on some node, always use [method bind_node]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -55518,10 +56516,10 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Creates and appends an [IntervalTweener]. This method can be used to create "
-"delays in the tween animation, as an alternative for using the delay in "
-"other [Tweener]s or when there's no animation (in which case the "
-"[SceneTreeTween] acts as a timer). [code]time[/code] is the length of the "
-"interval, in seconds.\n"
+"delays in the tween animation, as an alternative to using the delay in other "
+"[Tweener]s, or when there's no animation (in which case the [SceneTreeTween] "
+"acts as a timer). [code]time[/code] is the length of the interval, in "
+"seconds.\n"
"Example: creating an interval in code execution.\n"
"[codeblock]\n"
"# ... some code\n"
@@ -55575,8 +56573,8 @@ msgid ""
"Creates and appends a [PropertyTweener]. This method tweens a "
"[code]property[/code] of an [code]object[/code] between an initial value and "
"[code]final_val[/code] in a span of time equal to [code]duration[/code], in "
-"seconds. The initial value by default is a value at the time the tweening of "
-"the [PropertyTweener] start. For example:\n"
+"seconds. The initial value by default is the property's value at the time "
+"the tweening of the [PropertyTweener] starts. For example:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"tween.tween_property($Sprite, \"position\", Vector2(100, 200), 1)\n"
@@ -55607,16 +56605,15 @@ msgid ""
"Emitted when the [SceneTreeTween] has finished all tweening. Never emitted "
"when the [SceneTreeTween] is set to infinite looping (see [method "
"set_loops]).\n"
-"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) after this signal "
-"is emitted, but it doesn't happen immediately, but on the next processing "
-"frame. Calling [method stop] inside the signal callback will preserve the "
-"[SceneTreeTween]."
+"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) in the next "
+"processing frame after this signal is emitted. Calling [method stop] inside "
+"the signal callback will prevent the [SceneTreeTween] from being removed."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Emitted when a full loop is complete (see [method set_loops]), providing the "
-"loop index. This signal is not emitted after final loop, use [signal "
+"loop index. This signal is not emitted after the final loop, use [signal "
"finished] instead for this case."
msgstr ""
@@ -55624,7 +56621,7 @@ msgstr ""
msgid ""
"Emitted when one step of the [SceneTreeTween] is complete, providing the "
"step index. One step is either a single [Tweener] or a group of [Tweener]s "
-"running parallelly."
+"running in parallel."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -56963,7 +57960,12 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-msgid "Scale part of the local transformation."
+msgid ""
+"Scale part of the local transformation.\n"
+"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, the scale values will either be all "
+"positive or all negative."
msgstr ""
#: doc/classes/Spatial.xml
@@ -59629,11 +60631,11 @@ msgstr ""
msgid ""
"Returns [code]true[/code] if this string contains a valid integer.\n"
"[codeblock]\n"
-"print(\"7\".is_valid_int()) # Prints \"True\"\n"
-"print(\"14.6\".is_valid_int()) # Prints \"False\"\n"
-"print(\"L\".is_valid_int()) # Prints \"False\"\n"
-"print(\"+3\".is_valid_int()) # Prints \"True\"\n"
-"print(\"-12\".is_valid_int()) # Prints \"True\"\n"
+"print(\"7\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"14.6\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"L\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"+3\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"-12\".is_valid_integer()) # Prints \"True\"\n"
"[/codeblock]"
msgstr ""
@@ -63150,6 +64152,11 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml
+#, fuzzy
+msgid "If [code]true[/code], this TileMap bakes a navigation region."
+msgstr "ЕÑли [code]true[/code], текÑтура отражена по вертикали."
+
+#: doc/classes/TileMap.xml
msgid "If [code]true[/code], the cell's UVs will be clipped."
msgstr ""
@@ -63256,6 +64263,10 @@ msgid "The TileMap orientation mode. See [enum Mode] for possible values."
msgstr ""
#: doc/classes/TileMap.xml
+msgid "The navigation layers the TileMap generates its navigation regions in."
+msgstr ""
+
+#: doc/classes/TileMap.xml
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 "
@@ -64396,7 +65407,12 @@ msgstr ""
#: doc/classes/Transform2D.xml
msgid ""
"Returns a copy of the transform scaled by the given [code]scale[/code] "
-"factor, using matrix multiplication."
+"factor, using matrix multiplication.\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
#: doc/classes/Transform2D.xml
@@ -64552,7 +65568,18 @@ msgid ""
"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]."
+"to remove it from the [Tree].\n"
+"[b]Incremental search:[/b] Like [ItemList] and [PopupMenu], [Tree] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/Tree.xml
@@ -68226,11 +69253,12 @@ msgid "This enabler will stop [Particles2D] nodes."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _process function."
+msgid "This enabler will stop the parent's [method Node._process] function."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _physics_process function."
+msgid ""
+"This enabler will stop the parent's [method Node._physics_process] function."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
@@ -68270,6 +69298,16 @@ msgid "The VisibilityNotifier's bounding box."
msgstr ""
#: doc/classes/VisibilityNotifier.xml
+msgid ""
+"In addition to checking whether a node is on screen or within a [Camera]'s "
+"view, VisibilityNotifier can also optionally check whether a node is within "
+"a specified maximum distance when using a [Camera] with perspective "
+"projection. This is useful for throttling the performance requirements of "
+"nodes that are far away.\n"
+"[b]Note:[/b] This feature will be disabled if set to 0.0."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier.xml
msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view."
msgstr ""
@@ -73061,6 +74099,16 @@ msgid "The amount of shader rebinds in the frame."
msgstr ""
#: doc/classes/VisualServer.xml
+msgid ""
+"The peak amount of shaders that have been under compilation in the frame.\n"
+"This is useful to know when asynchronous shader compilation has finished for "
+"the current shaders on screen.\n"
+"[b]Note:[/b] For complete certainty, only assume there are no outstanding "
+"compilations when this value is zero for at least two frames in a row.\n"
+"Unimplemented in the GLES2 rendering backend, always returns 0."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
msgid "The amount of surface changes in the frame."
msgstr ""
@@ -76270,8 +77318,8 @@ msgstr ""
#: doc/classes/World.xml
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."
+"scenario, a navigation map and a sound space. Spatial nodes register their "
+"resources into the current world."
msgstr ""
#: doc/classes/World.xml
@@ -76286,11 +77334,17 @@ msgstr "[Environment] мира."
#: doc/classes/World.xml
msgid ""
-"The World's fallback_environment will be used if the World's [Environment] "
-"fails or is missing."
+"The World's fallback environment will be used if [member environment] fails "
+"or is missing."
msgstr ""
#: doc/classes/World.xml
+#, fuzzy
+msgid ""
+"The [RID] of this world's navigation map. Used by the [NavigationServer]."
+msgstr "Возвращает количеÑтво дорожек в анимации."
+
+#: doc/classes/World.xml
msgid "The World's visual scenario."
msgstr ""
@@ -76305,8 +77359,8 @@ msgstr ""
#: doc/classes/World2D.xml
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."
+"visual scenario, a navigation map and a sound space. 2D nodes register their "
+"resources into the current 2D world."
msgstr ""
#: doc/classes/World2D.xml
@@ -76323,6 +77377,12 @@ msgid ""
msgstr ""
#: doc/classes/World2D.xml
+#, fuzzy
+msgid ""
+"The [RID] of this world's navigation map. Used by the [Navigation2DServer]."
+msgstr "Возвращает количеÑтво дорожек в анимации."
+
+#: doc/classes/World2D.xml
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."
diff --git a/doc/translations/sk.po b/doc/translations/sk.po
index 8229fd93a9..9fb9613f0d 100644
--- a/doc/translations/sk.po
+++ b/doc/translations/sk.po
@@ -348,7 +348,7 @@ msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
msgid ""
"Compares two values by checking their actual contents, recursing into any "
-"`Array` or `Dictionary` up to its deepest level.\n"
+"[Array] or [Dictionary] up to its deepest level.\n"
"This compares to [code]==[/code] in a number of ways:\n"
"- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/"
"code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] "
@@ -395,7 +395,7 @@ msgid ""
"- 1.0: Linear\n"
"- Greater than 1.0 (exclusive): Ease in\n"
"[/codeblock]\n"
-"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.4/img/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/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]."
@@ -1102,7 +1102,7 @@ msgid ""
"[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/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/img/"
"smoothstep_ease_comparison.png]Comparison between smoothstep() and ease(x, "
"-1.6521) return values[/url]"
msgstr ""
@@ -3380,6 +3380,12 @@ msgstr ""
#: doc/classes/@GlobalScope.xml
msgid ""
+"Hints that an integer property is a bitmask using the optionally named 2D "
+"navigation layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml
+msgid ""
"Hints that an integer property is a bitmask using the optionally named 3D "
"render layers."
msgstr ""
@@ -3392,6 +3398,12 @@ msgstr ""
#: doc/classes/@GlobalScope.xml
msgid ""
+"Hints that an integer property is a bitmask using the optionally named 3D "
+"navigation layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml
+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]."
@@ -8367,7 +8379,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/AStar.xml
+#: doc/classes/AStar.xml doc/classes/AStar2D.xml
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[/"
@@ -8566,7 +8578,10 @@ msgid ""
msgstr ""
#: doc/classes/AStar2D.xml
-msgid "Returns whether there is a connection/segment between the given points."
+msgid ""
+"Returns whether there is a connection/segment between the given points. 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/AStar2D.xml
@@ -8583,10 +8598,6 @@ msgid ""
msgstr ""
#: doc/classes/AStar2D.xml
-msgid "Deletes the segment between the given points."
-msgstr ""
-
-#: doc/classes/AStar2D.xml
msgid ""
"Returns the closest position to [code]to_position[/code] that resides inside "
"a segment between two connected points.\n"
@@ -8771,7 +8782,9 @@ msgid ""
"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."
+"transmit audio over the network. When capturing audio data from a "
+"microphone, the format of the samples will be stereo 32-bit floating point "
+"PCM."
msgstr ""
#: doc/classes/AudioEffectCapture.xml
@@ -13614,7 +13627,7 @@ msgid ""
msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
-#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/Navigation2D.xml
msgid "Returns the object's [RID]."
msgstr ""
@@ -19089,11 +19102,14 @@ msgid ""
msgstr ""
#: doc/classes/CurveTexture.xml
-msgid "The [code]curve[/code] rendered onto the texture."
+msgid "The [Curve] that is rendered onto the texture."
msgstr ""
#: doc/classes/CurveTexture.xml
-msgid "The width of the texture."
+msgid ""
+"The width of the texture (in pixels). Higher values make it possible to "
+"represent high-frequency data better (such as sudden direction changes), at "
+"the cost of increased generation time and memory usage."
msgstr ""
#: doc/classes/CylinderMesh.xml
@@ -19379,6 +19395,13 @@ msgid "Returns the list of keys in the [Dictionary]."
msgstr ""
#: doc/classes/Dictionary.xml
+msgid ""
+"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, "
+"duplicate keys will not be copied over, unless [code]overwrite[/code] is "
+"[code]true[/code]."
+msgstr ""
+
+#: doc/classes/Dictionary.xml
msgid "Returns the number of keys in the dictionary."
msgstr ""
@@ -21317,9 +21340,23 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide a state data you want to be saved, like view "
+"position, grid settings, folding, etc. 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). This data is automatically saved for "
+"each scene in an [code]editstate[/code] file in the editor metadata folder. "
+"If you want to store global (scene-independent) editor data for your plugin, "
+"you can use [method get_window_layout] instead.\n"
+"Use [method set_state] to restore your saved state.\n"
+"[b]Note:[/b] This method should not be used to save important settings that "
+"should persist with the project.\n"
+"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be "
+"stored and restored correctly.\n"
+"[codeblock]\n"
+"func get_state():\n"
+" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n"
+" return state\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -21330,9 +21367,18 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide the GUI layout of the plugin or any other "
+"data you want to be stored. 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). The data is stored in the "
+"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n"
+"Use [method set_window_layout] to restore your saved layout.\n"
+"[codeblock]\n"
+"func get_window_layout(configuration):\n"
+" configuration.set_value(\"MyPlugin\", \"window_position\", $Window."
+"position)\n"
+" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -21445,11 +21491,30 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the state saved by [method get_state]."
+msgid ""
+"Restore the state saved by [method get_state]. This method is called when "
+"the current scene tab is changed in the editor.\n"
+"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise "
+"it will not be recognized and this method will not be called.\n"
+"[codeblock]\n"
+"func set_state(data):\n"
+" zoom = data.get(\"zoom\", 1.0)\n"
+" preferred_color = data.get(\"my_color\", Color.white)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the plugin GUI layout saved by [method get_window_layout]."
+msgid ""
+"Restore the plugin GUI layout and data saved by [method get_window_layout]. "
+"This method is called for every plugin on editor startup. Use the provided "
+"[code]configuration[/code] file to read your saved data.\n"
+"[codeblock]\n"
+"func set_window_layout(configuration):\n"
+" $Window.position = configuration.get_value(\"MyPlugin\", "
+"\"window_position\", Vector2())\n"
+" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", "
+"Color.white)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -26087,7 +26152,8 @@ msgid ""
"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])."
+"at fixed steps (see [member width]). See also [GradientTexture2D] and "
+"[CurveTexture]."
msgstr ""
#: doc/classes/GradientTexture.xml
@@ -26109,7 +26175,8 @@ msgid ""
"repeat] types using colors obtained from the gradient. 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] and [member height])."
+"[member width] and [member height]). See also [GradientTexture] and "
+"[CurveTexture]."
msgstr ""
#: doc/classes/GradientTexture2D.xml
@@ -26915,6 +26982,12 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+msgid ""
+"If [code]true[/code], this GridMap uses cell navmesh resources to create "
+"navigation regions."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid "If [code]true[/code], grid items are centered on the X axis."
msgstr ""
@@ -26965,6 +27038,10 @@ msgid "The assigned [MeshLibrary]."
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+msgid "The navigation layers the GridMap generates its navigation regions in."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
"Overrides the default friction and bounce physics properties for the whole "
"[GridMap]."
@@ -28188,7 +28265,7 @@ msgid ""
" # 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 body = to_json({\"name\": \"Godette\"})\n"
" error = http_request.request(\"https://httpbin.org/post\", [], true, "
"HTTPClient.METHOD_POST, body)\n"
" if error != OK:\n"
@@ -29355,7 +29432,7 @@ msgstr ""
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 "
+"([member 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 "
@@ -29504,10 +29581,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Returns the mouse mode. See the constants for more information."
-msgstr ""
-
-#: doc/classes/Input.xml
msgid ""
"Gets an input vector by specifying four actions for the positive and "
"negative X and Y axes.\n"
@@ -29701,24 +29774,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Sets the mouse mode. See the constants for more information."
-msgstr ""
-
-#: doc/classes/Input.xml
-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
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 "
@@ -29754,6 +29809,24 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
+msgid "Controls the mouse mode. See [enum MouseMode] for more information."
+msgstr ""
+
+#: doc/classes/Input.xml
+msgid ""
+"If [code]true[/code], similar input events sent by the operating system are "
+"accumulated. 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 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
msgid "Emitted when a joypad device has been connected or disconnected."
msgstr ""
@@ -30061,8 +30134,8 @@ msgstr ""
#: doc/classes/InputEventJoypadButton.xml
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]."
+"Represents the pressure the user puts on the button with their finger, if "
+"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]."
msgstr ""
#: doc/classes/InputEventJoypadMotion.xml
@@ -30325,9 +30398,9 @@ 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 "
+"at most. If you need more precise input reporting, set [member Input."
+"use_accumulated_input] to [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."
@@ -30814,7 +30887,18 @@ msgid ""
"[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."
+"fixed_column_width] greater than zero to wrap the text.\n"
+"[b]Incremental search:[/b] Like [PopupMenu] and [Tree], [ItemList] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/ItemList.xml
@@ -34561,11 +34645,16 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Returns the override [Material] for a surface of the [Mesh] resource.\n"
+"[b]Note:[/b] This function only returns [i]override[/i] materials associated "
+"with this [MeshInstance]. Consider using [method get_active_material] or "
+"[method Mesh.surface_get_material] to get materials associated with the "
+"[Mesh] resource."
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the number of surface materials."
+msgid "Returns the number of surface override materials."
msgstr ""
#: doc/classes/MeshInstance.xml
@@ -34602,7 +34691,10 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Sets the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Sets the override [Material] for the specified surface of the [Mesh] "
+"resource. This material is associated with this [MeshInstance] rather than "
+"with the [Mesh] resource."
msgstr ""
#: doc/classes/MeshInstance.xml
@@ -34633,9 +34725,10 @@ msgstr ""
#: doc/classes/MeshInstance2D.xml
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\"."
+"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be "
+"automatically created from an existing [Sprite] via a tool in the editor "
+"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to "
+"MeshInstance2D[/b] at the top of the 2D editor viewport."
msgstr ""
#: doc/classes/MeshInstance2D.xml
@@ -35393,6 +35486,9 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"Provides navigation and pathfinding within a collection of "
"[NavigationMesh]es. By default, these will be automatically collected from "
"child [NavigationMeshInstance] nodes. In addition to basic pathfinding, this "
@@ -35433,7 +35529,14 @@ msgid ""
msgstr ""
#: doc/classes/Navigation.xml
+msgid "Returns the [RID] of the navigation map on the [NavigationServer]."
+msgstr ""
+
+#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"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, "
@@ -35455,16 +35558,31 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation.get_simple_path] path query."
+msgstr ""
+
+#: doc/classes/Navigation.xml
+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/Navigation.xml doc/classes/Navigation2DServer.xml
+#: doc/classes/NavigationServer.xml
+msgid ""
+"Emitted when a navigation map is updated, when a region moves or is modified."
+msgstr ""
+
#: doc/classes/Navigation2D.xml
msgid "2D navigation and pathfinding node."
msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -35484,6 +35602,9 @@ msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -35493,6 +35614,12 @@ msgstr ""
msgid "The XY plane cell size to use for fields."
msgstr ""
+#: doc/classes/Navigation2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation2D.get_simple_path] path query."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml
msgid "Server interface for low-level 2D navigation access."
msgstr ""
@@ -35509,8 +35636,12 @@ msgid ""
"through scripts.\n"
"For two regions to be connected to each other, they must share a similar "
"edge. An edge is considered connected to another if both of its two vertices "
-"are at a distance less than [member Navigation.edge_connection_margin] to "
-"the respective other edge's vertex.\n"
+"are at a distance less than navigation map [code]edge_connection_margin[/"
+"code] to the respective other edge's vertex.\n"
+"You may assign navigation layers to regions with [method Navigation2DServer."
+"region_set_navigation_layers], which then can be checked upon when "
+"requesting a path with [method Navigation2DServer.map_get_path]. This allows "
+"allowing or forbidding some areas to 2D objects.\n"
"To use the collision avoidance system, you may use agents. You can set an "
"agent's target velocity, then the servers will emit a callback with a "
"modified velocity.\n"
@@ -35538,7 +35669,17 @@ msgid "Returns [code]true[/code] if the map got changed the previous frame."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Callback called at the end of the RVO process."
+msgid ""
+"Callback called at the end of the RVO process. If a callback is created "
+"manually and the agent is placed on a navigation map it will calculate "
+"avoidance for the agent and dispatch the calculated [code]safe_velocity[/"
+"code] to the [code]receiver[/code] object with a signal to the chosen "
+"[code]method[/code] name.\n"
+"[b]Note:[/b] Created callbacks are always processed independently of the "
+"SceneTree state as long as the agent is on a navigation map and not freed. "
+"To disable the dispatch of a callback from an agent use [method "
+"agent_set_callback] again with a [code]null[/code] object as the "
+"[code]receiver[/code]."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -35593,15 +35734,55 @@ msgid "Destroys the given RID."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns all created navigation map [RID]s on the NavigationServer. This "
+"returns both 2D and 3D created navigation maps as there is technically no "
+"distinction between them."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Create a new map."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"This function immediately forces synchronization of the specified navigation "
+"[code]map[/code] [RID]. By default navigation maps are only synchronized at "
+"the end of each physics frame. This function can be used to immediately "
+"(re)calculate all the navigation meshes and region connections of the "
+"navigation map. This makes it possible to query a navigation path for a "
+"changed map immediately and in the same frame (multiple times if needed).\n"
+"Due to technical restrictions the current NavigationServer command queue "
+"will be flushed. This means all already queued update commands for this "
+"physics frame will be executed, even those intended for other maps, regions "
+"and agents not part of the specified map. The expensive computation of the "
+"navigation meshes and region connections of a map will only be done for the "
+"specified map. Other maps will receive the normal synchronization at the end "
+"of the physics frame. Should the specified map receive changes after the "
+"forced update it will update again as well when the other maps receive their "
+"update.\n"
+"Avoidance processing and dispatch of the [code]safe_velocity[/code] signals "
+"is untouched by this function and continues to happen for all maps and "
+"agents at the end of the physics frame.\n"
+"[b]Note:[/b] With great power comes great responsibility. This function "
+"should only be used by users that really know what they are doing and have a "
+"good reason for it. Forcing an immediate update of a navigation map requires "
+"locking the NavigationServer and flushing the entire NavigationServer "
+"command queue. Not only can this severely impact the performance of a game "
+"but it can also introduce bugs if used inappropriately without much "
+"foresight."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns all navigation agents [RID]s that are currently assigned to the "
"requested navigation [code]map[/code]."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Returns the map cell size."
msgstr ""
@@ -35625,7 +35806,10 @@ msgid ""
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Returns the navigation path to reach the destination from the origin."
+msgid ""
+"Returns the navigation path to reach the destination from the origin. "
+"[code]navigation_layers[/code] is a bitmask of all region layers that are "
+"allowed to be in the path."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -35642,6 +35826,12 @@ msgstr ""
msgid "Sets the map active."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/"
+"b] Currently not implemented."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Set the map cell size used to weld the navigation mesh polygons."
msgstr ""
@@ -35657,14 +35847,73 @@ msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"Returns the ending point of a connection door. [code]connection[/code] is an "
+"index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns the starting point of a connection door. [code]connection[/code] is "
+"an index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns how many connections this [code]region[/code] has with other regions "
+"in the map."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns the navigation map [RID] the requested [code]region[/code] is "
"currently assigned to."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Returns the region's navigation layers."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns [code]true[/code] if the provided [code]point[/code] in world space "
+"is currently owned by the provided navigation [code]region[/code]. Owned in "
+"this context means that one of the region's navigation mesh polygon faces "
+"has a possible position at the closest distance to this point compared to "
+"all other navigation meshes from other navigation regions that are also "
+"registered on the navigation map of the provided region.\n"
+"If multiple navigation meshes have positions at equal distance the "
+"navigation region whose polygons are processed first wins the ownership. "
+"Polygons are processed in the same order that navigation regions were "
+"registered on the NavigationServer.\n"
+"[b]Note:[/b] If navigation meshes from different navigation regions overlap "
+"(which should be avoided in general) the result might not be what is "
+"expected."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Sets the map for the region."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method Navigation2DServer.map_get_path])."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Sets the navigation mesh for the region."
msgstr ""
@@ -35673,6 +35922,10 @@ msgstr ""
msgid "Sets the global transformation for the region."
msgstr ""
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]."
+msgstr ""
+
#: doc/classes/NavigationAgent.xml
msgid "3D agent used in navigation for collision avoidance."
msgstr ""
@@ -35682,9 +35935,16 @@ msgid ""
"3D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationAgent] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World] navigation map. If this node is a child of a [Navigation] "
+"node it will register to the navigation map of the navigation node or the "
+"function [method set_navigation] can be used to set the navigation node "
+"directly. [NavigationAgent] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -35702,7 +35962,15 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-msgid "Returns the path from start to finish in global coordinates."
+msgid ""
+"Returns this agent's current path from start to finish in global "
+"coordinates. The path only updates when the target location is changed or "
+"the agent requires a repath. The path array is not intended to be used in "
+"direct path movement as the agent has its own internal path logic that would "
+"get corrupted by changing the path array manually. Use the intended [method "
+"get_next_location] once every physics frame to receive the next path point "
+"for the agents movement as this function also updates the internal path "
+"logic."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -35717,11 +35985,24 @@ msgid ""
"system."
msgstr ""
-#: doc/classes/NavigationAgent.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"Returns a [Vector3] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the origin of the agent's parent."
+"Returns the [RID] of the navigation map for this NavigationAgent node. This "
+"function returns always the map set on the NavigationAgent node and not the "
+"map of the abstract agent on the NavigationServer. If the agent map is "
+"changed directly with the NavigationServer API the NavigationAgent node will "
+"not be aware of the map change. Use [method set_navigation_map] to change "
+"the navigation map for the NavigationAgent and also update the agent on the "
+"NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
+"Returns the next location in global coordinates that can be moved to, making "
+"sure that there are no static objects in the way. If the agent does not have "
+"a navigation path, it will return the position of the agent's parent. The "
+"use of this function once every physics frame is required to update the "
+"internal path logic of the NavigationAgent."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -35762,6 +36043,12 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"Sets the [RID] of the navigation map this NavigationAgent node should use "
+"and also updates the [code]agent[/code] on the NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"Sets the user desired final location. This will clear the current navigation "
"path."
msgstr ""
@@ -35774,7 +36061,13 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml
-msgid "The agent height offset to match the navigation mesh height."
+msgid ""
+"The NavigationAgent height offset is subtracted from the y-axis value of any "
+"vector path position for this NavigationAgent. The NavigationAgent height "
+"offset does not change or influence the navigation mesh or pathfinding query "
+"result. Additional navigation maps that use regions with navigation meshes "
+"that the developer baked with appropriate agent radius or height values are "
+"required to support different-sized agents."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -35801,26 +36094,53 @@ msgstr ""
msgid "The maximum speed that an agent can move."
msgstr ""
+#: doc/classes/NavigationAgent.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "The distance to search for other agents."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"The distance threshold before a path point is considered to be reached. This "
+"will allow an agent to not have to hit a path point on the path exactly, but "
+"in the area. If this value is set to high the NavigationAgent will skip "
+"points on the path which can lead to leaving the navigation mesh. If this "
+"value is set to low the NavigationAgent will be stuck in a repath loop cause "
+"it will constantly overshoot or undershoot the distance to the next point on "
+"each physics frame update."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"The maximum distance the agent is allowed away from the ideal path to the "
"final location. This can happen due to trying to avoid collisions. When the "
"maximum distance is exceeded, it recalculates the ideal path."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-msgid "The radius of the agent."
+msgid ""
+"The radius of the avoidance agent. This is the \"body\" of the avoidance "
+"agent and not the avoidance maneuver starting radius (which is controlled by "
+"[member neighbor_dist]).\n"
+"Does not affect normal pathfinding. To change an actor's pathfinding radius "
+"bake [NavigationMesh] resources with a different [member NavigationMesh."
+"agent_radius] property and use different navigation maps for each actor size."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"The distance threshold before a target is considered to be reached. This "
-"will allow an agent to not have to hit a point on the path exactly, but in "
-"the area."
+"The distance threshold before the final target point is considered to be "
+"reached. This will allow an agent to not have to hit the point of the final "
+"target exactly, but only the area. If this value is set to low the "
+"NavigationAgent will be stuck in a repath loop cause it will constantly "
+"overshoot or undershoot the distance to the final target point on each "
+"physics frame update."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -35863,9 +36183,16 @@ msgid ""
"2D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationAgent2D] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World2D] navigation map. If this node is a child of a "
+"[Navigation2D] node it will register to the navigation map of the navigation "
+"node or the function [method set_navigation] can be used to set the "
+"navigation node directly. [NavigationAgent2D] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent2D.xml
@@ -35881,13 +36208,6 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent2D.xml
-msgid ""
-"Returns a [Vector2] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the position of the agent's parent."
-msgstr ""
-
-#: doc/classes/NavigationAgent2D.xml
msgid "Returns the [RID] of this agent on the [Navigation2DServer]."
msgstr ""
@@ -35907,6 +36227,13 @@ msgid ""
"only be enabled on agents that currently require it."
msgstr ""
+#: doc/classes/NavigationAgent2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent2D] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationMesh.xml
msgid "A mesh to approximate the walkable areas and obstacles."
msgstr ""
@@ -35937,8 +36264,8 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
-"Returns whether the specified [code]bit[/code] of the [member geometry/"
-"collision_mask] is set."
+"Returns whether the specified [code]bit[/code] of the [member "
+"geometry_collision_mask] is set."
msgstr ""
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
@@ -35960,9 +36287,9 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/"
-"code] in the [member geometry/collision_mask].\n"
+"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]."
+"code] in the [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
@@ -35976,14 +36303,14 @@ 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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -35995,7 +36322,7 @@ 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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36023,13 +36350,17 @@ msgstr ""
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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
-"If [code]true[/code], marks walkable spans as not walkable if the clearance "
-"above the span is less than [member agent/height]."
+"If the baking [AABB] has a volume the navigation mesh baking will be "
+"restricted to its enclosing area."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+msgid "The position offset applied to the [member filter_baking_aabb] [AABB]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36039,13 +36370,19 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]true[/code], marks non-walkable spans as walkable if their maximum "
-"is within [member agent/max_climb] of a walkable neighbor."
+"is within [member agent_max_climb] of a walkable neighbor."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+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
msgid ""
"The physics layers to scan for static colliders.\n"
-"Only used when [member geometry/parsed_geometry_type] is [constant "
+"Only used when [member geometry_parsed_geometry_type] is [constant "
"PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]."
msgstr ""
@@ -36064,7 +36401,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"The name of the group to scan for geometry.\n"
-"Only used when [member geometry/source_geometry_mode] is [constant "
+"Only used when [member geometry_source_geometry_mode] is [constant "
"SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant "
"SOURCE_GEOMETRY_GROUPS_EXPLICIT]."
msgstr ""
@@ -36127,7 +36464,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Parses [StaticBody] colliders as geometry. The collider should be in any of "
-"the layers specified by [member geometry/collision_mask]."
+"the layers specified by [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36148,13 +36485,13 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Scans nodes in a group and their child nodes recursively for geometry. The "
-"group is specified by [member geometry/source_group_name]."
+"group is specified by [member geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Uses nodes in a group for geometry. The group is specified by [member "
-"geometry/source_group_name]."
+"geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36196,7 +36533,15 @@ msgid ""
"geometry for walkable terrain suitable to [NavigationMesh] agent properties "
"by creating a voxel world around the meshes bounding area.\n"
"The finalized navigation mesh is then returned and stored inside the "
-"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes."
+"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] "
+"nodes.\n"
+"[b]Note:[/b] Using meshes to not only define walkable surfaces but also "
+"obstruct navigation baking does not always work. The navigation baking has "
+"no concept of what is a geometry \"inside\" when dealing with mesh source "
+"geometry and this is intentional. Depending on current baking parameters, as "
+"soon as the obstructing mesh is large enough to fit a navigation mesh area "
+"inside, the baking will generate navigation mesh areas that are inside the "
+"obstructing source geometry mesh."
msgstr ""
#: doc/classes/NavigationMeshGenerator.xml
@@ -36204,8 +36549,8 @@ msgid ""
"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child "
"nodes under the provided [code]root_node[/code] or a specific group of nodes "
"for potential source geometry. The parse behavior can be controlled with the "
-"[member NavigationMesh.geometry/parsed_geometry_type] and [member "
-"NavigationMesh.geometry/source_geometry_mode] properties on the "
+"[member NavigationMesh.geometry_parsed_geometry_type] and [member "
+"NavigationMesh.geometry_source_geometry_mode] properties on the "
"[NavigationMesh] resource."
msgstr ""
@@ -36222,8 +36567,21 @@ msgstr ""
#: doc/classes/NavigationMeshInstance.xml
msgid ""
"An instance of a [NavigationMesh]. It tells the [Navigation] node what can "
-"be navigated and what cannot, based on the [NavigationMesh] resource. This "
-"should be a child of a [Navigation] node."
+"be navigated and what cannot, based on the [NavigationMesh] resource.\n"
+"By default this node will register to the default [World] navigation map. If "
+"this node is a child of a [Navigation] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method NavigationServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The cost of entering this region from another region can be controlled with "
+"the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The cost of traveling distances inside this region can be controlled with "
+"the [member travel_cost] multiplier."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
@@ -36252,10 +36610,34 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding enters this region's navmesh from another regions navmesh "
+"the [code]enter_cost[/code] value is added to the path distance for "
+"determining the shortest path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationMesh] "
+"belongs to. On path requests with [method NavigationServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
msgid "The [NavigationMesh] resource to use."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding moves inside this region's navmesh the traveled distances "
+"are multiplied with [code]travel_cost[/code] for determining the shortest "
+"path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
msgid "Notifies when the navigation mesh bake operation is completed."
msgstr ""
@@ -36272,7 +36654,9 @@ msgid ""
"3D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationObstacle] is physics safe."
+"[NavigationObstacle] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle.xml
@@ -36312,7 +36696,9 @@ msgid ""
"2D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationObstacle2D] is physics safe."
+"[NavigationObstacle2D] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle2D.xml
@@ -36392,6 +36778,14 @@ msgstr ""
#: doc/classes/NavigationPolygon.xml
msgid ""
+"Returns the [NavigationMesh] resulting from this navigation polygon. This "
+"navmesh can be used to update the navmesh of a region with the [method "
+"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server "
+"behind the scene)."
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml
+msgid ""
"Returns a [PoolVector2Array] containing the vertices of an outline that was "
"created in the editor or by script."
msgstr ""
@@ -36428,6 +36822,30 @@ msgid ""
msgstr ""
#: doc/classes/NavigationPolygonInstance.xml
+msgid "A region of the 2D navigation map."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A region of the navigation map. It tells the [Navigation2DServer] what can "
+"be navigated and what cannot, based on its [NavigationPolygon] resource.\n"
+"By default this node will register to the default [World2D] navigation map. "
+"If this node is a child of a [Navigation2D] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The pathfinding cost of entering this region from another region can be "
+"controlled with the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The pathfinding cost of traveling distances inside this region can be "
+"controlled with the [member travel_cost] multiplier."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
msgid ""
"Returns the [RID] of this region on the [Navigation2DServer]. Combined with "
"[method Navigation2DServer.map_get_closest_point_owner] can be used to "
@@ -36435,6 +36853,22 @@ msgid ""
"navigation map."
msgstr ""
+#: doc/classes/NavigationPolygonInstance.xml
+msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationPolygon] "
+"belongs to. On path requests with [method Navigation2DServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid "The [NavigationPolygon] resource to use."
+msgstr ""
+
#: doc/classes/NavigationServer.xml
msgid "Server interface for low-level 3D navigation access."
msgstr ""
@@ -36510,6 +36944,12 @@ msgid "Bakes the navigation mesh."
msgstr ""
#: doc/classes/NavigationServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method NavigationServer.map_get_path])."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
msgid "Control activation of this server."
msgstr ""
@@ -37976,13 +38416,19 @@ msgstr ""
#: doc/classes/Node.xml
msgid ""
"Emitted when a child node enters the scene tree, either because it entered "
-"on its own or because this node entered with it."
+"on its own or because this node entered with it.\n"
+"This signal is emitted [i]after[/i] the child node's own [constant "
+"NOTIFICATION_ENTER_TREE] and [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
msgid ""
-"Emitted when a child node exits the scene tree, either because it exited on "
-"its own or because this node exited."
+"Emitted when a child node is about to exit the scene tree, either because it "
+"is being removed or freed directly, or because this node is exiting the "
+"tree.\n"
+"When this signal is received, the child [code]node[/code] is still in the "
+"tree and valid. This signal is emitted [i]after[/i] the child node's own "
+"[signal tree_exiting] and [constant NOTIFICATION_EXIT_TREE]."
msgstr ""
#: doc/classes/Node.xml
@@ -37994,7 +38440,10 @@ msgid "Emitted when the node is renamed."
msgstr ""
#: doc/classes/Node.xml
-msgid "Emitted when the node enters the tree."
+msgid ""
+"Emitted when the node enters the tree.\n"
+"This signal is emitted [i]after[/i] the related [constant "
+"NOTIFICATION_ENTER_TREE] notification."
msgstr ""
#: doc/classes/Node.xml
@@ -38004,15 +38453,21 @@ msgstr ""
#: doc/classes/Node.xml
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)."
+"the right place for de-initialization (or a \"destructor\", if you will).\n"
+"This signal is emitted [i]before[/i] the related [constant "
+"NOTIFICATION_EXIT_TREE] notification."
msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node enters a [SceneTree]."
+msgid ""
+"Notification received when the node enters a [SceneTree].\n"
+"This notification is emitted [i]before[/i] the related [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node is about to exit a [SceneTree]."
+msgid ""
+"Notification received when the node is about to exit a [SceneTree].\n"
+"This notification is emitted [i]after[/i] the related [signal tree_exiting]."
msgstr ""
#: doc/classes/Node.xml
@@ -38273,7 +38728,13 @@ msgid "Rotation in degrees, relative to the node's parent."
msgstr ""
#: doc/classes/Node2D.xml
-msgid "The node's scale. Unscaled value: [code](1, 1)[/code]."
+msgid ""
+"The node's scale. Unscaled value: [code](1, 1)[/code].\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
#: doc/classes/Node2D.xml
@@ -39713,6 +40174,10 @@ msgid ""
" if argument.find(\"=\") > -1:\n"
" var key_value = argument.split(\"=\")\n"
" arguments[key_value[0].lstrip(\"--\")] = key_value[1]\n"
+" else:\n"
+" # Options without an argument will be present in the dictionary,\n"
+" # with the value set to an empty string.\n"
+" arguments[argument.lstrip(\"--\")] = \"\"\n"
"[/codeblock]"
msgstr ""
@@ -40366,8 +40831,15 @@ msgstr ""
msgid ""
"Moves the file or directory to the system's recycle bin. See also [method "
"Directory.remove].\n"
+"The method takes only global paths, so you may need to use [method "
+"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/"
+"code] as it will not work in exported project.\n"
"[b]Note:[/b] If the user has disabled the recycle bin on their system, the "
-"file will be permanently deleted instead."
+"file will be permanently deleted instead.\n"
+"[codeblock]\n"
+"var file_to_remove = \"user://slot1.sav\"\n"
+"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/OS.xml
@@ -45206,7 +45678,18 @@ msgstr ""
#: doc/classes/PopupMenu.xml
msgid ""
"[PopupMenu] is a [Control] that displays a list of options. They are popular "
-"in toolbars or context menus."
+"in toolbars or context menus.\n"
+"[b]Incremental search:[/b] Like [ItemList] and [Tree], [PopupMenu] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/PopupMenu.xml
@@ -46713,7 +47196,16 @@ msgid ""
msgstr ""
#: doc/classes/ProjectSettings.xml
-msgid "Message to be displayed before the backtrace when the engine crashes."
+msgid ""
+"Message to be displayed before the backtrace when the engine crashes. By "
+"default, this message is only used in exported projects due to the editor-"
+"only override applied to this setting."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Editor-only override for [member debug/settings/crash_handler/message]. Does "
+"not affect exported projects in debug or release mode."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -46958,6 +47450,18 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default naming style for scene files to infer from their root nodes. "
+"Possible options are:\n"
+"- [code]0[/code] (Auto): Uses the scene root name as is without changing its "
+"casing.\n"
+"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase "
+"casing.\n"
+"- [code]2[/code] (snake_case): Converts the scene root name to snake_case "
+"casing."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -47183,6 +47687,198 @@ msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 1."
msgstr ""
@@ -47391,6 +48087,198 @@ msgid "Optional name for the 2D render layer 9."
msgstr ""
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 1."
msgstr ""
@@ -47658,6 +48546,49 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default cell height for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_height].\n"
+"[b]Note:[/b] Currently not implemented."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 2D navigation maps. See [method "
+"Navigation2DServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell height for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_height]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 3D navigation maps. See [method "
+"NavigationServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default map up vector for 3D navigation maps. See [method NavigationServer."
+"map_set_up]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -48331,20 +49262,28 @@ msgid ""
"cause.\n"
"The default value is a conservative one, so you are advised to tweak it "
"according to the hardware you are targeting.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"The default is a very conservative override for [code]rendering/gles3/"
-"shaders/max_concurrent_compiles[/code].\n"
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
"Depending on the specific devices you are targeting, you may want to raise "
"it.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
+"Depending on the specific browsers you are targeting, you may want to raise "
+"it.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -48352,19 +49291,28 @@ msgid ""
"The maximum size, in megabytes, that the ubershader cache can grow up to. On "
"startup, the least recently used entries will be deleted until the total "
"size is within bounds.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/ubershader_cache_size_mb[/"
-"code], so a smaller maximum size can be configured for mobile platforms, "
-"where storage space is more limited.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for mobile platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for web platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] Currently, shader caching is generally unavailable on web "
+"platforms.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -48396,14 +49344,22 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/shader_compilation_mode[/"
-"code], so asynchronous compilation can be disabled for mobile.\n"
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on mobile platforms.\n"
"You may want to do that since mobile GPUs generally won't support "
"ubershaders due to their complexity."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on web platforms.\n"
+"You may want to do that since certain browsers (especially on mobile "
+"platforms) generally won't support ubershaders due to their complexity."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
@@ -49160,7 +50116,6 @@ msgid ""
"- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/"
"code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, "
"small grid radius values may lead to unwanted groupings.\n"
-"[/codeblock]\n"
"[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more "
"effective and faster [VisibilityNotifier] functionality. For most use cases, "
"[method Vector3.distance_to] or [method Vector3.distance_squared_to] are "
@@ -51307,6 +52262,22 @@ msgid "Makes text fill width."
msgstr ""
#: doc/classes/RichTextLabel.xml
+msgid "Aligns top of the inline image to the top of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns center of the inline image to the center of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns bottom of the inline image to the baseline of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns bottom of the inline image to the bottom of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
msgid "Each list item has a number marker."
msgstr ""
@@ -53044,8 +54015,8 @@ msgid ""
" yield(get_tree().create_timer(1.0), \"timeout\")\n"
" print(\"Timer ended.\")\n"
"[/codeblock]\n"
-"The timer will be automatically freed after its time elapses, so be aware "
-"that any reference you might have kept to it will become invalid."
+"The timer will be dereferenced after its time elapses. To preserve the "
+"timer, you can keep a reference to it. See [Reference]."
msgstr ""
#: doc/classes/SceneTreeTimer.xml
@@ -53077,24 +54048,23 @@ msgid ""
"manually (i.e. by using [code]Tween.new()[/code]) are invalid. They can't be "
"used for tweening values, but you can do manual interpolation with [method "
"interpolate_value].\n"
-"A [SceneTreeTween] animation is composed of a sequence of [Tweener]s, which "
-"by default are executed one after another. You can create a sequence by "
-"appending [Tweener]s to the [SceneTreeTween]. Animating something with a "
-"[Tweener] is called tweening. Example tweening sequence looks like this:\n"
+"A tween animation is created by adding [Tweener]s to the [SceneTreeTween] "
+"object, using [method tween_property], [method tween_interval], [method "
+"tween_callback] or [method tween_method]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1)\n"
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"This sequence will make the [code]$Sprite[/code] node turn red, then shrink "
-"and finally the [method Node.queue_free] is called to remove the sprite. See "
-"methods [method tween_property], [method tween_interval], [method "
-"tween_callback] and [method tween_method] for more usage information.\n"
+"This sequence will make the [code]$Sprite[/code] node turn red, then shrink, "
+"before finally calling [method Node.queue_free] to free the sprite. "
+"[Tweener]s are executed one after another by default. This behavior can be "
+"changed using [method parallel] and [method set_parallel].\n"
"When a [Tweener] is created with one of the [code]tween_*[/code] methods, a "
"chained method call can be used to tweak the properties of this [Tweener]. "
-"For example, if you want to set different transition type in the above "
-"example, you can do:\n"
+"For example, if you want to set a different transition type in the above "
+"example, you can use [method set_trans]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1).set_trans(Tween."
@@ -53103,8 +54073,9 @@ msgid ""
"TRANS_BOUNCE)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Most of the [SceneTreeTween] methods can be chained this way too. In this "
-"example the [SceneTreeTween] is bound and have set a default transition:\n"
+"Most of the [SceneTreeTween] methods can be chained this way too. In the "
+"following example the [SceneTreeTween] is bound to the running script's node "
+"and a default transition is set for its [Tweener]s:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween().bind_node(self).set_trans(Tween."
"TRANS_ELASTIC)\n"
@@ -53112,16 +54083,16 @@ msgid ""
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Another interesting use for [SceneTreeTween]s is animating arbitrary set of "
+"Another interesting use for [SceneTreeTween]s is animating arbitrary sets of "
"objects:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"for sprite in get_children():\n"
-" tween.tween_property(sprite, \"position\", Vector2(), 1)\n"
+" tween.tween_property(sprite, \"position\", Vector2(0, 0), 1)\n"
"[/codeblock]\n"
"In the example above, all children of a node are moved one after another to "
"position (0, 0).\n"
-"Some [Tweener]s use transitions and eases. The first accepts an [enum Tween."
+"Some [Tweener]s use transitions and eases. The first accepts a [enum Tween."
"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 Tween.EaseType] constant, and "
@@ -53133,7 +54104,7 @@ msgid ""
"tween_cheatsheet.png]Tween easing and transition types cheatsheet[/url]\n"
"[b]Note:[/b] All [SceneTreeTween]s will automatically start by default. To "
"prevent a [SceneTreeTween] from autostarting, you can call [method stop] "
-"immediately after it was created."
+"immediately after it is created."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53163,21 +54134,24 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
-"Processes the [SceneTreeTween] by given [code]delta[/code] value, in "
-"seconds. Mostly useful when the [SceneTreeTween] is paused, for controlling "
-"it manually. Can also be used to end the [SceneTreeTween] animation "
-"immediately, by using [code]delta[/code] longer than the whole duration.\n"
+"Processes the [SceneTreeTween] by the given [code]delta[/code] value, in "
+"seconds. This is mostly useful for manual control when the [SceneTreeTween] "
+"is paused. It can also be used to end the [SceneTreeTween] animation "
+"immediately, by setting [code]delta[/code] longer than the whole duration of "
+"the [SceneTreeTween] animation.\n"
"Returns [code]true[/code] if the [SceneTreeTween] still has [Tweener]s that "
"haven't finished.\n"
-"[b]Note:[/b] The [SceneTreeTween] will become invalid after finished, but "
-"you can call [method stop] after the step, to keep it and reset."
+"[b]Note:[/b] The [SceneTreeTween] will become invalid in the next processing "
+"frame after its animation finishes. Calling [method stop] after performing "
+"[method custom_step] instead keeps and resets the [SceneTreeTween]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Returns the total time in seconds the [SceneTreeTween] has been animating (i."
-"e. time since it started, not counting pauses etc.). The time is affected by "
-"[method set_speed_scale] and [method stop] will reset it to [code]0[/code].\n"
+"e. the time since it started, not counting pauses etc.). The time is "
+"affected by [method set_speed_scale], and [method stop] will reset it to "
+"[code]0[/code].\n"
"[b]Note:[/b] As it results from accumulating frame deltas, the time returned "
"after the [SceneTreeTween] has finished animating will be slightly greater "
"than the actual [SceneTreeTween] duration."
@@ -53213,11 +54187,10 @@ msgstr ""
msgid ""
"Returns whether the [SceneTreeTween] is valid. A valid [SceneTreeTween] is a "
"[SceneTreeTween] contained by the scene tree (i.e. the array from [method "
-"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). "
-"[SceneTreeTween] might become invalid when it has finished tweening or was "
-"killed, also when created with [code]Tween.new()[/code]. Invalid "
-"[SceneTreeTween] can't have [Tweener]s appended, because it can't animate "
-"them. You can however still use [method interpolate_value]."
+"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). A "
+"[SceneTreeTween] might become invalid when it has finished tweening, is "
+"killed, or when created with [code]SceneTreeTween.new()[/code]. Invalid "
+"[SceneTreeTween]s can't have [Tweener]s appended."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53257,16 +54230,15 @@ msgstr ""
msgid ""
"Sets the number of times the tweening sequence will be repeated, i.e. "
"[code]set_loops(2)[/code] will run the animation twice.\n"
-"Calling this method without arguments will make the [SceneTreeTween] run "
-"infinitely, until it is either killed by [method kill] or by freeing bound "
-"node, or all the animated objects have been freed (which makes further "
+"Calling this method without arguments will make the [Tween] run infinitely, "
+"until either it is killed with [method kill], the [Tween]'s bound node is "
+"freed, or all the animated objects have been freed (which makes further "
"animation impossible).\n"
"[b]Warning:[/b] Make sure to always add some duration/delay when using "
-"infinite loops. 0-duration looped animations (e.g. single [CallbackTweener] "
-"with no delay or [PropertyTweener] with invalid node) are equivalent to "
-"infinite [code]while[/code] loops and will freeze your game. If a "
-"[SceneTreeTween]'s lifetime depends on some node, always use [method "
-"bind_node]."
+"infinite loops. To prevent the game freezing, 0-duration looped animations "
+"(e.g. a single [CallbackTweener] with no delay) are stopped after a small "
+"number of loops, which may produce unexpected results. If a [Tween]'s "
+"lifetime depends on some node, always use [method bind_node]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53328,10 +54300,10 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Creates and appends an [IntervalTweener]. This method can be used to create "
-"delays in the tween animation, as an alternative for using the delay in "
-"other [Tweener]s or when there's no animation (in which case the "
-"[SceneTreeTween] acts as a timer). [code]time[/code] is the length of the "
-"interval, in seconds.\n"
+"delays in the tween animation, as an alternative to using the delay in other "
+"[Tweener]s, or when there's no animation (in which case the [SceneTreeTween] "
+"acts as a timer). [code]time[/code] is the length of the interval, in "
+"seconds.\n"
"Example: creating an interval in code execution.\n"
"[codeblock]\n"
"# ... some code\n"
@@ -53385,8 +54357,8 @@ msgid ""
"Creates and appends a [PropertyTweener]. This method tweens a "
"[code]property[/code] of an [code]object[/code] between an initial value and "
"[code]final_val[/code] in a span of time equal to [code]duration[/code], in "
-"seconds. The initial value by default is a value at the time the tweening of "
-"the [PropertyTweener] start. For example:\n"
+"seconds. The initial value by default is the property's value at the time "
+"the tweening of the [PropertyTweener] starts. For example:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"tween.tween_property($Sprite, \"position\", Vector2(100, 200), 1)\n"
@@ -53417,16 +54389,15 @@ msgid ""
"Emitted when the [SceneTreeTween] has finished all tweening. Never emitted "
"when the [SceneTreeTween] is set to infinite looping (see [method "
"set_loops]).\n"
-"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) after this signal "
-"is emitted, but it doesn't happen immediately, but on the next processing "
-"frame. Calling [method stop] inside the signal callback will preserve the "
-"[SceneTreeTween]."
+"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) in the next "
+"processing frame after this signal is emitted. Calling [method stop] inside "
+"the signal callback will prevent the [SceneTreeTween] from being removed."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Emitted when a full loop is complete (see [method set_loops]), providing the "
-"loop index. This signal is not emitted after final loop, use [signal "
+"loop index. This signal is not emitted after the final loop, use [signal "
"finished] instead for this case."
msgstr ""
@@ -53434,7 +54405,7 @@ msgstr ""
msgid ""
"Emitted when one step of the [SceneTreeTween] is complete, providing the "
"step index. One step is either a single [Tweener] or a group of [Tweener]s "
-"running parallelly."
+"running in parallel."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -54766,7 +55737,12 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-msgid "Scale part of the local transformation."
+msgid ""
+"Scale part of the local transformation.\n"
+"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, the scale values will either be all "
+"positive or all negative."
msgstr ""
#: doc/classes/Spatial.xml
@@ -57397,11 +58373,11 @@ msgstr ""
msgid ""
"Returns [code]true[/code] if this string contains a valid integer.\n"
"[codeblock]\n"
-"print(\"7\".is_valid_int()) # Prints \"True\"\n"
-"print(\"14.6\".is_valid_int()) # Prints \"False\"\n"
-"print(\"L\".is_valid_int()) # Prints \"False\"\n"
-"print(\"+3\".is_valid_int()) # Prints \"True\"\n"
-"print(\"-12\".is_valid_int()) # Prints \"True\"\n"
+"print(\"7\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"14.6\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"L\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"+3\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"-12\".is_valid_integer()) # Prints \"True\"\n"
"[/codeblock]"
msgstr ""
@@ -60867,6 +61843,10 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml
+msgid "If [code]true[/code], this TileMap bakes a navigation region."
+msgstr ""
+
+#: doc/classes/TileMap.xml
msgid "If [code]true[/code], the cell's UVs will be clipped."
msgstr ""
@@ -60973,6 +61953,10 @@ msgid "The TileMap orientation mode. See [enum Mode] for possible values."
msgstr ""
#: doc/classes/TileMap.xml
+msgid "The navigation layers the TileMap generates its navigation regions in."
+msgstr ""
+
+#: doc/classes/TileMap.xml
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 "
@@ -62104,7 +63088,12 @@ msgstr ""
#: doc/classes/Transform2D.xml
msgid ""
"Returns a copy of the transform scaled by the given [code]scale[/code] "
-"factor, using matrix multiplication."
+"factor, using matrix multiplication.\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
#: doc/classes/Transform2D.xml
@@ -62259,7 +63248,18 @@ msgid ""
"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]."
+"to remove it from the [Tree].\n"
+"[b]Incremental search:[/b] Like [ItemList] and [PopupMenu], [Tree] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/Tree.xml
@@ -65775,11 +66775,12 @@ msgid "This enabler will stop [Particles2D] nodes."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _process function."
+msgid "This enabler will stop the parent's [method Node._process] function."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _physics_process function."
+msgid ""
+"This enabler will stop the parent's [method Node._physics_process] function."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
@@ -65819,6 +66820,16 @@ msgid "The VisibilityNotifier's bounding box."
msgstr ""
#: doc/classes/VisibilityNotifier.xml
+msgid ""
+"In addition to checking whether a node is on screen or within a [Camera]'s "
+"view, VisibilityNotifier can also optionally check whether a node is within "
+"a specified maximum distance when using a [Camera] with perspective "
+"projection. This is useful for throttling the performance requirements of "
+"nodes that are far away.\n"
+"[b]Note:[/b] This feature will be disabled if set to 0.0."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier.xml
msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view."
msgstr ""
@@ -70564,6 +71575,16 @@ msgid "The amount of shader rebinds in the frame."
msgstr ""
#: doc/classes/VisualServer.xml
+msgid ""
+"The peak amount of shaders that have been under compilation in the frame.\n"
+"This is useful to know when asynchronous shader compilation has finished for "
+"the current shaders on screen.\n"
+"[b]Note:[/b] For complete certainty, only assume there are no outstanding "
+"compilations when this value is zero for at least two frames in a row.\n"
+"Unimplemented in the GLES2 rendering backend, always returns 0."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
msgid "The amount of surface changes in the frame."
msgstr ""
@@ -73760,8 +74781,8 @@ msgstr ""
#: doc/classes/World.xml
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."
+"scenario, a navigation map and a sound space. Spatial nodes register their "
+"resources into the current world."
msgstr ""
#: doc/classes/World.xml
@@ -73776,8 +74797,13 @@ msgstr ""
#: doc/classes/World.xml
msgid ""
-"The World's fallback_environment will be used if the World's [Environment] "
-"fails or is missing."
+"The World's fallback environment will be used if [member environment] fails "
+"or is missing."
+msgstr ""
+
+#: doc/classes/World.xml
+msgid ""
+"The [RID] of this world's navigation map. Used by the [NavigationServer]."
msgstr ""
#: doc/classes/World.xml
@@ -73795,8 +74821,8 @@ msgstr ""
#: doc/classes/World2D.xml
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."
+"visual scenario, a navigation map and a sound space. 2D nodes register their "
+"resources into the current 2D world."
msgstr ""
#: doc/classes/World2D.xml
@@ -73814,6 +74840,11 @@ msgstr ""
#: doc/classes/World2D.xml
msgid ""
+"The [RID] of this world's navigation map. Used by the [Navigation2DServer]."
+msgstr ""
+
+#: doc/classes/World2D.xml
+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 ""
diff --git a/doc/translations/sr_Cyrl.po b/doc/translations/sr_Cyrl.po
index 1dd374ba2b..765c89be10 100644
--- a/doc/translations/sr_Cyrl.po
+++ b/doc/translations/sr_Cyrl.po
@@ -359,7 +359,7 @@ msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
msgid ""
"Compares two values by checking their actual contents, recursing into any "
-"`Array` or `Dictionary` up to its deepest level.\n"
+"[Array] or [Dictionary] up to its deepest level.\n"
"This compares to [code]==[/code] in a number of ways:\n"
"- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/"
"code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] "
@@ -406,7 +406,7 @@ msgid ""
"- 1.0: Linear\n"
"- Greater than 1.0 (exclusive): Ease in\n"
"[/codeblock]\n"
-"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.4/img/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/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]."
@@ -1113,7 +1113,7 @@ msgid ""
"[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/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/img/"
"smoothstep_ease_comparison.png]Comparison between smoothstep() and ease(x, "
"-1.6521) return values[/url]"
msgstr ""
@@ -3391,6 +3391,12 @@ msgstr ""
#: doc/classes/@GlobalScope.xml
msgid ""
+"Hints that an integer property is a bitmask using the optionally named 2D "
+"navigation layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml
+msgid ""
"Hints that an integer property is a bitmask using the optionally named 3D "
"render layers."
msgstr ""
@@ -3403,6 +3409,12 @@ msgstr ""
#: doc/classes/@GlobalScope.xml
msgid ""
+"Hints that an integer property is a bitmask using the optionally named 3D "
+"navigation layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml
+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]."
@@ -8378,7 +8390,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/AStar.xml
+#: doc/classes/AStar.xml doc/classes/AStar2D.xml
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[/"
@@ -8577,7 +8589,10 @@ msgid ""
msgstr ""
#: doc/classes/AStar2D.xml
-msgid "Returns whether there is a connection/segment between the given points."
+msgid ""
+"Returns whether there is a connection/segment between the given points. 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/AStar2D.xml
@@ -8594,10 +8609,6 @@ msgid ""
msgstr ""
#: doc/classes/AStar2D.xml
-msgid "Deletes the segment between the given points."
-msgstr ""
-
-#: doc/classes/AStar2D.xml
msgid ""
"Returns the closest position to [code]to_position[/code] that resides inside "
"a segment between two connected points.\n"
@@ -8782,7 +8793,9 @@ msgid ""
"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."
+"transmit audio over the network. When capturing audio data from a "
+"microphone, the format of the samples will be stereo 32-bit floating point "
+"PCM."
msgstr ""
#: doc/classes/AudioEffectCapture.xml
@@ -13625,7 +13638,7 @@ msgid ""
msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
-#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/Navigation2D.xml
msgid "Returns the object's [RID]."
msgstr ""
@@ -19100,11 +19113,14 @@ msgid ""
msgstr ""
#: doc/classes/CurveTexture.xml
-msgid "The [code]curve[/code] rendered onto the texture."
+msgid "The [Curve] that is rendered onto the texture."
msgstr ""
#: doc/classes/CurveTexture.xml
-msgid "The width of the texture."
+msgid ""
+"The width of the texture (in pixels). Higher values make it possible to "
+"represent high-frequency data better (such as sudden direction changes), at "
+"the cost of increased generation time and memory usage."
msgstr ""
#: doc/classes/CylinderMesh.xml
@@ -19390,6 +19406,13 @@ msgid "Returns the list of keys in the [Dictionary]."
msgstr ""
#: doc/classes/Dictionary.xml
+msgid ""
+"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, "
+"duplicate keys will not be copied over, unless [code]overwrite[/code] is "
+"[code]true[/code]."
+msgstr ""
+
+#: doc/classes/Dictionary.xml
msgid "Returns the number of keys in the dictionary."
msgstr ""
@@ -21328,9 +21351,23 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide a state data you want to be saved, like view "
+"position, grid settings, folding, etc. 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). This data is automatically saved for "
+"each scene in an [code]editstate[/code] file in the editor metadata folder. "
+"If you want to store global (scene-independent) editor data for your plugin, "
+"you can use [method get_window_layout] instead.\n"
+"Use [method set_state] to restore your saved state.\n"
+"[b]Note:[/b] This method should not be used to save important settings that "
+"should persist with the project.\n"
+"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be "
+"stored and restored correctly.\n"
+"[codeblock]\n"
+"func get_state():\n"
+" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n"
+" return state\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -21341,9 +21378,18 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide the GUI layout of the plugin or any other "
+"data you want to be stored. 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). The data is stored in the "
+"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n"
+"Use [method set_window_layout] to restore your saved layout.\n"
+"[codeblock]\n"
+"func get_window_layout(configuration):\n"
+" configuration.set_value(\"MyPlugin\", \"window_position\", $Window."
+"position)\n"
+" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -21456,11 +21502,30 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the state saved by [method get_state]."
+msgid ""
+"Restore the state saved by [method get_state]. This method is called when "
+"the current scene tab is changed in the editor.\n"
+"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise "
+"it will not be recognized and this method will not be called.\n"
+"[codeblock]\n"
+"func set_state(data):\n"
+" zoom = data.get(\"zoom\", 1.0)\n"
+" preferred_color = data.get(\"my_color\", Color.white)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the plugin GUI layout saved by [method get_window_layout]."
+msgid ""
+"Restore the plugin GUI layout and data saved by [method get_window_layout]. "
+"This method is called for every plugin on editor startup. Use the provided "
+"[code]configuration[/code] file to read your saved data.\n"
+"[codeblock]\n"
+"func set_window_layout(configuration):\n"
+" $Window.position = configuration.get_value(\"MyPlugin\", "
+"\"window_position\", Vector2())\n"
+" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", "
+"Color.white)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -26098,7 +26163,8 @@ msgid ""
"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])."
+"at fixed steps (see [member width]). See also [GradientTexture2D] and "
+"[CurveTexture]."
msgstr ""
#: doc/classes/GradientTexture.xml
@@ -26120,7 +26186,8 @@ msgid ""
"repeat] types using colors obtained from the gradient. 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] and [member height])."
+"[member width] and [member height]). See also [GradientTexture] and "
+"[CurveTexture]."
msgstr ""
#: doc/classes/GradientTexture2D.xml
@@ -26926,6 +26993,12 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+msgid ""
+"If [code]true[/code], this GridMap uses cell navmesh resources to create "
+"navigation regions."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid "If [code]true[/code], grid items are centered on the X axis."
msgstr ""
@@ -26976,6 +27049,10 @@ msgid "The assigned [MeshLibrary]."
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+msgid "The navigation layers the GridMap generates its navigation regions in."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
"Overrides the default friction and bounce physics properties for the whole "
"[GridMap]."
@@ -28199,7 +28276,7 @@ msgid ""
" # 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 body = to_json({\"name\": \"Godette\"})\n"
" error = http_request.request(\"https://httpbin.org/post\", [], true, "
"HTTPClient.METHOD_POST, body)\n"
" if error != OK:\n"
@@ -29366,7 +29443,7 @@ msgstr ""
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 "
+"([member 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 "
@@ -29515,10 +29592,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Returns the mouse mode. See the constants for more information."
-msgstr ""
-
-#: doc/classes/Input.xml
msgid ""
"Gets an input vector by specifying four actions for the positive and "
"negative X and Y axes.\n"
@@ -29712,24 +29785,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Sets the mouse mode. See the constants for more information."
-msgstr ""
-
-#: doc/classes/Input.xml
-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
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 "
@@ -29765,6 +29820,24 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
+msgid "Controls the mouse mode. See [enum MouseMode] for more information."
+msgstr ""
+
+#: doc/classes/Input.xml
+msgid ""
+"If [code]true[/code], similar input events sent by the operating system are "
+"accumulated. 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 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
msgid "Emitted when a joypad device has been connected or disconnected."
msgstr ""
@@ -30072,8 +30145,8 @@ msgstr ""
#: doc/classes/InputEventJoypadButton.xml
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]."
+"Represents the pressure the user puts on the button with their finger, if "
+"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]."
msgstr ""
#: doc/classes/InputEventJoypadMotion.xml
@@ -30336,9 +30409,9 @@ 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 "
+"at most. If you need more precise input reporting, set [member Input."
+"use_accumulated_input] to [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."
@@ -30825,7 +30898,18 @@ msgid ""
"[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."
+"fixed_column_width] greater than zero to wrap the text.\n"
+"[b]Incremental search:[/b] Like [PopupMenu] and [Tree], [ItemList] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/ItemList.xml
@@ -34572,11 +34656,16 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Returns the override [Material] for a surface of the [Mesh] resource.\n"
+"[b]Note:[/b] This function only returns [i]override[/i] materials associated "
+"with this [MeshInstance]. Consider using [method get_active_material] or "
+"[method Mesh.surface_get_material] to get materials associated with the "
+"[Mesh] resource."
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the number of surface materials."
+msgid "Returns the number of surface override materials."
msgstr ""
#: doc/classes/MeshInstance.xml
@@ -34613,7 +34702,10 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Sets the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Sets the override [Material] for the specified surface of the [Mesh] "
+"resource. This material is associated with this [MeshInstance] rather than "
+"with the [Mesh] resource."
msgstr ""
#: doc/classes/MeshInstance.xml
@@ -34644,9 +34736,10 @@ msgstr ""
#: doc/classes/MeshInstance2D.xml
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\"."
+"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be "
+"automatically created from an existing [Sprite] via a tool in the editor "
+"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to "
+"MeshInstance2D[/b] at the top of the 2D editor viewport."
msgstr ""
#: doc/classes/MeshInstance2D.xml
@@ -35404,6 +35497,9 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"Provides navigation and pathfinding within a collection of "
"[NavigationMesh]es. By default, these will be automatically collected from "
"child [NavigationMeshInstance] nodes. In addition to basic pathfinding, this "
@@ -35444,7 +35540,14 @@ msgid ""
msgstr ""
#: doc/classes/Navigation.xml
+msgid "Returns the [RID] of the navigation map on the [NavigationServer]."
+msgstr ""
+
+#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"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, "
@@ -35466,16 +35569,31 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation.get_simple_path] path query."
+msgstr ""
+
+#: doc/classes/Navigation.xml
+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/Navigation.xml doc/classes/Navigation2DServer.xml
+#: doc/classes/NavigationServer.xml
+msgid ""
+"Emitted when a navigation map is updated, when a region moves or is modified."
+msgstr ""
+
#: doc/classes/Navigation2D.xml
msgid "2D navigation and pathfinding node."
msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -35495,6 +35613,9 @@ msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -35504,6 +35625,12 @@ msgstr ""
msgid "The XY plane cell size to use for fields."
msgstr ""
+#: doc/classes/Navigation2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation2D.get_simple_path] path query."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml
msgid "Server interface for low-level 2D navigation access."
msgstr ""
@@ -35520,8 +35647,12 @@ msgid ""
"through scripts.\n"
"For two regions to be connected to each other, they must share a similar "
"edge. An edge is considered connected to another if both of its two vertices "
-"are at a distance less than [member Navigation.edge_connection_margin] to "
-"the respective other edge's vertex.\n"
+"are at a distance less than navigation map [code]edge_connection_margin[/"
+"code] to the respective other edge's vertex.\n"
+"You may assign navigation layers to regions with [method Navigation2DServer."
+"region_set_navigation_layers], which then can be checked upon when "
+"requesting a path with [method Navigation2DServer.map_get_path]. This allows "
+"allowing or forbidding some areas to 2D objects.\n"
"To use the collision avoidance system, you may use agents. You can set an "
"agent's target velocity, then the servers will emit a callback with a "
"modified velocity.\n"
@@ -35549,7 +35680,17 @@ msgid "Returns [code]true[/code] if the map got changed the previous frame."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Callback called at the end of the RVO process."
+msgid ""
+"Callback called at the end of the RVO process. If a callback is created "
+"manually and the agent is placed on a navigation map it will calculate "
+"avoidance for the agent and dispatch the calculated [code]safe_velocity[/"
+"code] to the [code]receiver[/code] object with a signal to the chosen "
+"[code]method[/code] name.\n"
+"[b]Note:[/b] Created callbacks are always processed independently of the "
+"SceneTree state as long as the agent is on a navigation map and not freed. "
+"To disable the dispatch of a callback from an agent use [method "
+"agent_set_callback] again with a [code]null[/code] object as the "
+"[code]receiver[/code]."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -35604,15 +35745,55 @@ msgid "Destroys the given RID."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns all created navigation map [RID]s on the NavigationServer. This "
+"returns both 2D and 3D created navigation maps as there is technically no "
+"distinction between them."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Create a new map."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"This function immediately forces synchronization of the specified navigation "
+"[code]map[/code] [RID]. By default navigation maps are only synchronized at "
+"the end of each physics frame. This function can be used to immediately "
+"(re)calculate all the navigation meshes and region connections of the "
+"navigation map. This makes it possible to query a navigation path for a "
+"changed map immediately and in the same frame (multiple times if needed).\n"
+"Due to technical restrictions the current NavigationServer command queue "
+"will be flushed. This means all already queued update commands for this "
+"physics frame will be executed, even those intended for other maps, regions "
+"and agents not part of the specified map. The expensive computation of the "
+"navigation meshes and region connections of a map will only be done for the "
+"specified map. Other maps will receive the normal synchronization at the end "
+"of the physics frame. Should the specified map receive changes after the "
+"forced update it will update again as well when the other maps receive their "
+"update.\n"
+"Avoidance processing and dispatch of the [code]safe_velocity[/code] signals "
+"is untouched by this function and continues to happen for all maps and "
+"agents at the end of the physics frame.\n"
+"[b]Note:[/b] With great power comes great responsibility. This function "
+"should only be used by users that really know what they are doing and have a "
+"good reason for it. Forcing an immediate update of a navigation map requires "
+"locking the NavigationServer and flushing the entire NavigationServer "
+"command queue. Not only can this severely impact the performance of a game "
+"but it can also introduce bugs if used inappropriately without much "
+"foresight."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns all navigation agents [RID]s that are currently assigned to the "
"requested navigation [code]map[/code]."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Returns the map cell size."
msgstr ""
@@ -35636,7 +35817,10 @@ msgid ""
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Returns the navigation path to reach the destination from the origin."
+msgid ""
+"Returns the navigation path to reach the destination from the origin. "
+"[code]navigation_layers[/code] is a bitmask of all region layers that are "
+"allowed to be in the path."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -35653,6 +35837,12 @@ msgstr ""
msgid "Sets the map active."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/"
+"b] Currently not implemented."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Set the map cell size used to weld the navigation mesh polygons."
msgstr ""
@@ -35668,14 +35858,73 @@ msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"Returns the ending point of a connection door. [code]connection[/code] is an "
+"index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns the starting point of a connection door. [code]connection[/code] is "
+"an index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns how many connections this [code]region[/code] has with other regions "
+"in the map."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns the navigation map [RID] the requested [code]region[/code] is "
"currently assigned to."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Returns the region's navigation layers."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns [code]true[/code] if the provided [code]point[/code] in world space "
+"is currently owned by the provided navigation [code]region[/code]. Owned in "
+"this context means that one of the region's navigation mesh polygon faces "
+"has a possible position at the closest distance to this point compared to "
+"all other navigation meshes from other navigation regions that are also "
+"registered on the navigation map of the provided region.\n"
+"If multiple navigation meshes have positions at equal distance the "
+"navigation region whose polygons are processed first wins the ownership. "
+"Polygons are processed in the same order that navigation regions were "
+"registered on the NavigationServer.\n"
+"[b]Note:[/b] If navigation meshes from different navigation regions overlap "
+"(which should be avoided in general) the result might not be what is "
+"expected."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Sets the map for the region."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method Navigation2DServer.map_get_path])."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Sets the navigation mesh for the region."
msgstr ""
@@ -35684,6 +35933,10 @@ msgstr ""
msgid "Sets the global transformation for the region."
msgstr ""
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]."
+msgstr ""
+
#: doc/classes/NavigationAgent.xml
msgid "3D agent used in navigation for collision avoidance."
msgstr ""
@@ -35693,9 +35946,16 @@ msgid ""
"3D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationAgent] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World] navigation map. If this node is a child of a [Navigation] "
+"node it will register to the navigation map of the navigation node or the "
+"function [method set_navigation] can be used to set the navigation node "
+"directly. [NavigationAgent] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -35713,7 +35973,15 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-msgid "Returns the path from start to finish in global coordinates."
+msgid ""
+"Returns this agent's current path from start to finish in global "
+"coordinates. The path only updates when the target location is changed or "
+"the agent requires a repath. The path array is not intended to be used in "
+"direct path movement as the agent has its own internal path logic that would "
+"get corrupted by changing the path array manually. Use the intended [method "
+"get_next_location] once every physics frame to receive the next path point "
+"for the agents movement as this function also updates the internal path "
+"logic."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -35728,11 +35996,24 @@ msgid ""
"system."
msgstr ""
-#: doc/classes/NavigationAgent.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"Returns a [Vector3] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the origin of the agent's parent."
+"Returns the [RID] of the navigation map for this NavigationAgent node. This "
+"function returns always the map set on the NavigationAgent node and not the "
+"map of the abstract agent on the NavigationServer. If the agent map is "
+"changed directly with the NavigationServer API the NavigationAgent node will "
+"not be aware of the map change. Use [method set_navigation_map] to change "
+"the navigation map for the NavigationAgent and also update the agent on the "
+"NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
+"Returns the next location in global coordinates that can be moved to, making "
+"sure that there are no static objects in the way. If the agent does not have "
+"a navigation path, it will return the position of the agent's parent. The "
+"use of this function once every physics frame is required to update the "
+"internal path logic of the NavigationAgent."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -35773,6 +36054,12 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"Sets the [RID] of the navigation map this NavigationAgent node should use "
+"and also updates the [code]agent[/code] on the NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"Sets the user desired final location. This will clear the current navigation "
"path."
msgstr ""
@@ -35785,7 +36072,13 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml
-msgid "The agent height offset to match the navigation mesh height."
+msgid ""
+"The NavigationAgent height offset is subtracted from the y-axis value of any "
+"vector path position for this NavigationAgent. The NavigationAgent height "
+"offset does not change or influence the navigation mesh or pathfinding query "
+"result. Additional navigation maps that use regions with navigation meshes "
+"that the developer baked with appropriate agent radius or height values are "
+"required to support different-sized agents."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -35812,26 +36105,53 @@ msgstr ""
msgid "The maximum speed that an agent can move."
msgstr ""
+#: doc/classes/NavigationAgent.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "The distance to search for other agents."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"The distance threshold before a path point is considered to be reached. This "
+"will allow an agent to not have to hit a path point on the path exactly, but "
+"in the area. If this value is set to high the NavigationAgent will skip "
+"points on the path which can lead to leaving the navigation mesh. If this "
+"value is set to low the NavigationAgent will be stuck in a repath loop cause "
+"it will constantly overshoot or undershoot the distance to the next point on "
+"each physics frame update."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"The maximum distance the agent is allowed away from the ideal path to the "
"final location. This can happen due to trying to avoid collisions. When the "
"maximum distance is exceeded, it recalculates the ideal path."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-msgid "The radius of the agent."
+msgid ""
+"The radius of the avoidance agent. This is the \"body\" of the avoidance "
+"agent and not the avoidance maneuver starting radius (which is controlled by "
+"[member neighbor_dist]).\n"
+"Does not affect normal pathfinding. To change an actor's pathfinding radius "
+"bake [NavigationMesh] resources with a different [member NavigationMesh."
+"agent_radius] property and use different navigation maps for each actor size."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"The distance threshold before a target is considered to be reached. This "
-"will allow an agent to not have to hit a point on the path exactly, but in "
-"the area."
+"The distance threshold before the final target point is considered to be "
+"reached. This will allow an agent to not have to hit the point of the final "
+"target exactly, but only the area. If this value is set to low the "
+"NavigationAgent will be stuck in a repath loop cause it will constantly "
+"overshoot or undershoot the distance to the final target point on each "
+"physics frame update."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -35874,9 +36194,16 @@ msgid ""
"2D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationAgent2D] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World2D] navigation map. If this node is a child of a "
+"[Navigation2D] node it will register to the navigation map of the navigation "
+"node or the function [method set_navigation] can be used to set the "
+"navigation node directly. [NavigationAgent2D] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent2D.xml
@@ -35892,13 +36219,6 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent2D.xml
-msgid ""
-"Returns a [Vector2] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the position of the agent's parent."
-msgstr ""
-
-#: doc/classes/NavigationAgent2D.xml
msgid "Returns the [RID] of this agent on the [Navigation2DServer]."
msgstr ""
@@ -35918,6 +36238,13 @@ msgid ""
"only be enabled on agents that currently require it."
msgstr ""
+#: doc/classes/NavigationAgent2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent2D] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationMesh.xml
msgid "A mesh to approximate the walkable areas and obstacles."
msgstr ""
@@ -35948,8 +36275,8 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
-"Returns whether the specified [code]bit[/code] of the [member geometry/"
-"collision_mask] is set."
+"Returns whether the specified [code]bit[/code] of the [member "
+"geometry_collision_mask] is set."
msgstr ""
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
@@ -35971,9 +36298,9 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/"
-"code] in the [member geometry/collision_mask].\n"
+"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]."
+"code] in the [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
@@ -35987,14 +36314,14 @@ 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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36006,7 +36333,7 @@ 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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36034,13 +36361,17 @@ msgstr ""
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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
-"If [code]true[/code], marks walkable spans as not walkable if the clearance "
-"above the span is less than [member agent/height]."
+"If the baking [AABB] has a volume the navigation mesh baking will be "
+"restricted to its enclosing area."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+msgid "The position offset applied to the [member filter_baking_aabb] [AABB]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36050,13 +36381,19 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]true[/code], marks non-walkable spans as walkable if their maximum "
-"is within [member agent/max_climb] of a walkable neighbor."
+"is within [member agent_max_climb] of a walkable neighbor."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+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
msgid ""
"The physics layers to scan for static colliders.\n"
-"Only used when [member geometry/parsed_geometry_type] is [constant "
+"Only used when [member geometry_parsed_geometry_type] is [constant "
"PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]."
msgstr ""
@@ -36075,7 +36412,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"The name of the group to scan for geometry.\n"
-"Only used when [member geometry/source_geometry_mode] is [constant "
+"Only used when [member geometry_source_geometry_mode] is [constant "
"SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant "
"SOURCE_GEOMETRY_GROUPS_EXPLICIT]."
msgstr ""
@@ -36138,7 +36475,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Parses [StaticBody] colliders as geometry. The collider should be in any of "
-"the layers specified by [member geometry/collision_mask]."
+"the layers specified by [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36159,13 +36496,13 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Scans nodes in a group and their child nodes recursively for geometry. The "
-"group is specified by [member geometry/source_group_name]."
+"group is specified by [member geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Uses nodes in a group for geometry. The group is specified by [member "
-"geometry/source_group_name]."
+"geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36207,7 +36544,15 @@ msgid ""
"geometry for walkable terrain suitable to [NavigationMesh] agent properties "
"by creating a voxel world around the meshes bounding area.\n"
"The finalized navigation mesh is then returned and stored inside the "
-"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes."
+"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] "
+"nodes.\n"
+"[b]Note:[/b] Using meshes to not only define walkable surfaces but also "
+"obstruct navigation baking does not always work. The navigation baking has "
+"no concept of what is a geometry \"inside\" when dealing with mesh source "
+"geometry and this is intentional. Depending on current baking parameters, as "
+"soon as the obstructing mesh is large enough to fit a navigation mesh area "
+"inside, the baking will generate navigation mesh areas that are inside the "
+"obstructing source geometry mesh."
msgstr ""
#: doc/classes/NavigationMeshGenerator.xml
@@ -36215,8 +36560,8 @@ msgid ""
"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child "
"nodes under the provided [code]root_node[/code] or a specific group of nodes "
"for potential source geometry. The parse behavior can be controlled with the "
-"[member NavigationMesh.geometry/parsed_geometry_type] and [member "
-"NavigationMesh.geometry/source_geometry_mode] properties on the "
+"[member NavigationMesh.geometry_parsed_geometry_type] and [member "
+"NavigationMesh.geometry_source_geometry_mode] properties on the "
"[NavigationMesh] resource."
msgstr ""
@@ -36233,8 +36578,21 @@ msgstr ""
#: doc/classes/NavigationMeshInstance.xml
msgid ""
"An instance of a [NavigationMesh]. It tells the [Navigation] node what can "
-"be navigated and what cannot, based on the [NavigationMesh] resource. This "
-"should be a child of a [Navigation] node."
+"be navigated and what cannot, based on the [NavigationMesh] resource.\n"
+"By default this node will register to the default [World] navigation map. If "
+"this node is a child of a [Navigation] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method NavigationServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The cost of entering this region from another region can be controlled with "
+"the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The cost of traveling distances inside this region can be controlled with "
+"the [member travel_cost] multiplier."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
@@ -36263,10 +36621,34 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding enters this region's navmesh from another regions navmesh "
+"the [code]enter_cost[/code] value is added to the path distance for "
+"determining the shortest path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationMesh] "
+"belongs to. On path requests with [method NavigationServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
msgid "The [NavigationMesh] resource to use."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding moves inside this region's navmesh the traveled distances "
+"are multiplied with [code]travel_cost[/code] for determining the shortest "
+"path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
msgid "Notifies when the navigation mesh bake operation is completed."
msgstr ""
@@ -36283,7 +36665,9 @@ msgid ""
"3D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationObstacle] is physics safe."
+"[NavigationObstacle] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle.xml
@@ -36323,7 +36707,9 @@ msgid ""
"2D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationObstacle2D] is physics safe."
+"[NavigationObstacle2D] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle2D.xml
@@ -36403,6 +36789,14 @@ msgstr ""
#: doc/classes/NavigationPolygon.xml
msgid ""
+"Returns the [NavigationMesh] resulting from this navigation polygon. This "
+"navmesh can be used to update the navmesh of a region with the [method "
+"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server "
+"behind the scene)."
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml
+msgid ""
"Returns a [PoolVector2Array] containing the vertices of an outline that was "
"created in the editor or by script."
msgstr ""
@@ -36439,6 +36833,30 @@ msgid ""
msgstr ""
#: doc/classes/NavigationPolygonInstance.xml
+msgid "A region of the 2D navigation map."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A region of the navigation map. It tells the [Navigation2DServer] what can "
+"be navigated and what cannot, based on its [NavigationPolygon] resource.\n"
+"By default this node will register to the default [World2D] navigation map. "
+"If this node is a child of a [Navigation2D] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The pathfinding cost of entering this region from another region can be "
+"controlled with the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The pathfinding cost of traveling distances inside this region can be "
+"controlled with the [member travel_cost] multiplier."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
msgid ""
"Returns the [RID] of this region on the [Navigation2DServer]. Combined with "
"[method Navigation2DServer.map_get_closest_point_owner] can be used to "
@@ -36446,6 +36864,22 @@ msgid ""
"navigation map."
msgstr ""
+#: doc/classes/NavigationPolygonInstance.xml
+msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationPolygon] "
+"belongs to. On path requests with [method Navigation2DServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid "The [NavigationPolygon] resource to use."
+msgstr ""
+
#: doc/classes/NavigationServer.xml
msgid "Server interface for low-level 3D navigation access."
msgstr ""
@@ -36521,6 +36955,12 @@ msgid "Bakes the navigation mesh."
msgstr ""
#: doc/classes/NavigationServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method NavigationServer.map_get_path])."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
msgid "Control activation of this server."
msgstr ""
@@ -37987,13 +38427,19 @@ msgstr ""
#: doc/classes/Node.xml
msgid ""
"Emitted when a child node enters the scene tree, either because it entered "
-"on its own or because this node entered with it."
+"on its own or because this node entered with it.\n"
+"This signal is emitted [i]after[/i] the child node's own [constant "
+"NOTIFICATION_ENTER_TREE] and [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
msgid ""
-"Emitted when a child node exits the scene tree, either because it exited on "
-"its own or because this node exited."
+"Emitted when a child node is about to exit the scene tree, either because it "
+"is being removed or freed directly, or because this node is exiting the "
+"tree.\n"
+"When this signal is received, the child [code]node[/code] is still in the "
+"tree and valid. This signal is emitted [i]after[/i] the child node's own "
+"[signal tree_exiting] and [constant NOTIFICATION_EXIT_TREE]."
msgstr ""
#: doc/classes/Node.xml
@@ -38005,7 +38451,10 @@ msgid "Emitted when the node is renamed."
msgstr ""
#: doc/classes/Node.xml
-msgid "Emitted when the node enters the tree."
+msgid ""
+"Emitted when the node enters the tree.\n"
+"This signal is emitted [i]after[/i] the related [constant "
+"NOTIFICATION_ENTER_TREE] notification."
msgstr ""
#: doc/classes/Node.xml
@@ -38015,15 +38464,21 @@ msgstr ""
#: doc/classes/Node.xml
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)."
+"the right place for de-initialization (or a \"destructor\", if you will).\n"
+"This signal is emitted [i]before[/i] the related [constant "
+"NOTIFICATION_EXIT_TREE] notification."
msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node enters a [SceneTree]."
+msgid ""
+"Notification received when the node enters a [SceneTree].\n"
+"This notification is emitted [i]before[/i] the related [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node is about to exit a [SceneTree]."
+msgid ""
+"Notification received when the node is about to exit a [SceneTree].\n"
+"This notification is emitted [i]after[/i] the related [signal tree_exiting]."
msgstr ""
#: doc/classes/Node.xml
@@ -38284,7 +38739,13 @@ msgid "Rotation in degrees, relative to the node's parent."
msgstr ""
#: doc/classes/Node2D.xml
-msgid "The node's scale. Unscaled value: [code](1, 1)[/code]."
+msgid ""
+"The node's scale. Unscaled value: [code](1, 1)[/code].\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
#: doc/classes/Node2D.xml
@@ -39724,6 +40185,10 @@ msgid ""
" if argument.find(\"=\") > -1:\n"
" var key_value = argument.split(\"=\")\n"
" arguments[key_value[0].lstrip(\"--\")] = key_value[1]\n"
+" else:\n"
+" # Options without an argument will be present in the dictionary,\n"
+" # with the value set to an empty string.\n"
+" arguments[argument.lstrip(\"--\")] = \"\"\n"
"[/codeblock]"
msgstr ""
@@ -40377,8 +40842,15 @@ msgstr ""
msgid ""
"Moves the file or directory to the system's recycle bin. See also [method "
"Directory.remove].\n"
+"The method takes only global paths, so you may need to use [method "
+"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/"
+"code] as it will not work in exported project.\n"
"[b]Note:[/b] If the user has disabled the recycle bin on their system, the "
-"file will be permanently deleted instead."
+"file will be permanently deleted instead.\n"
+"[codeblock]\n"
+"var file_to_remove = \"user://slot1.sav\"\n"
+"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/OS.xml
@@ -45217,7 +45689,18 @@ msgstr ""
#: doc/classes/PopupMenu.xml
msgid ""
"[PopupMenu] is a [Control] that displays a list of options. They are popular "
-"in toolbars or context menus."
+"in toolbars or context menus.\n"
+"[b]Incremental search:[/b] Like [ItemList] and [Tree], [PopupMenu] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/PopupMenu.xml
@@ -46724,7 +47207,16 @@ msgid ""
msgstr ""
#: doc/classes/ProjectSettings.xml
-msgid "Message to be displayed before the backtrace when the engine crashes."
+msgid ""
+"Message to be displayed before the backtrace when the engine crashes. By "
+"default, this message is only used in exported projects due to the editor-"
+"only override applied to this setting."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Editor-only override for [member debug/settings/crash_handler/message]. Does "
+"not affect exported projects in debug or release mode."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -46969,6 +47461,18 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default naming style for scene files to infer from their root nodes. "
+"Possible options are:\n"
+"- [code]0[/code] (Auto): Uses the scene root name as is without changing its "
+"casing.\n"
+"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase "
+"casing.\n"
+"- [code]2[/code] (snake_case): Converts the scene root name to snake_case "
+"casing."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -47194,6 +47698,198 @@ msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 1."
msgstr ""
@@ -47402,6 +48098,198 @@ msgid "Optional name for the 2D render layer 9."
msgstr ""
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 1."
msgstr ""
@@ -47669,6 +48557,49 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default cell height for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_height].\n"
+"[b]Note:[/b] Currently not implemented."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 2D navigation maps. See [method "
+"Navigation2DServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell height for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_height]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 3D navigation maps. See [method "
+"NavigationServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default map up vector for 3D navigation maps. See [method NavigationServer."
+"map_set_up]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -48342,20 +49273,28 @@ msgid ""
"cause.\n"
"The default value is a conservative one, so you are advised to tweak it "
"according to the hardware you are targeting.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"The default is a very conservative override for [code]rendering/gles3/"
-"shaders/max_concurrent_compiles[/code].\n"
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
"Depending on the specific devices you are targeting, you may want to raise "
"it.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
+"Depending on the specific browsers you are targeting, you may want to raise "
+"it.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -48363,19 +49302,28 @@ msgid ""
"The maximum size, in megabytes, that the ubershader cache can grow up to. On "
"startup, the least recently used entries will be deleted until the total "
"size is within bounds.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/ubershader_cache_size_mb[/"
-"code], so a smaller maximum size can be configured for mobile platforms, "
-"where storage space is more limited.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for mobile platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for web platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] Currently, shader caching is generally unavailable on web "
+"platforms.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -48407,14 +49355,22 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/shader_compilation_mode[/"
-"code], so asynchronous compilation can be disabled for mobile.\n"
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on mobile platforms.\n"
"You may want to do that since mobile GPUs generally won't support "
"ubershaders due to their complexity."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on web platforms.\n"
+"You may want to do that since certain browsers (especially on mobile "
+"platforms) generally won't support ubershaders due to their complexity."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
@@ -49171,7 +50127,6 @@ msgid ""
"- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/"
"code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, "
"small grid radius values may lead to unwanted groupings.\n"
-"[/codeblock]\n"
"[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more "
"effective and faster [VisibilityNotifier] functionality. For most use cases, "
"[method Vector3.distance_to] or [method Vector3.distance_squared_to] are "
@@ -51318,6 +52273,22 @@ msgid "Makes text fill width."
msgstr ""
#: doc/classes/RichTextLabel.xml
+msgid "Aligns top of the inline image to the top of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns center of the inline image to the center of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns bottom of the inline image to the baseline of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns bottom of the inline image to the bottom of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
msgid "Each list item has a number marker."
msgstr ""
@@ -53055,8 +54026,8 @@ msgid ""
" yield(get_tree().create_timer(1.0), \"timeout\")\n"
" print(\"Timer ended.\")\n"
"[/codeblock]\n"
-"The timer will be automatically freed after its time elapses, so be aware "
-"that any reference you might have kept to it will become invalid."
+"The timer will be dereferenced after its time elapses. To preserve the "
+"timer, you can keep a reference to it. See [Reference]."
msgstr ""
#: doc/classes/SceneTreeTimer.xml
@@ -53088,24 +54059,23 @@ msgid ""
"manually (i.e. by using [code]Tween.new()[/code]) are invalid. They can't be "
"used for tweening values, but you can do manual interpolation with [method "
"interpolate_value].\n"
-"A [SceneTreeTween] animation is composed of a sequence of [Tweener]s, which "
-"by default are executed one after another. You can create a sequence by "
-"appending [Tweener]s to the [SceneTreeTween]. Animating something with a "
-"[Tweener] is called tweening. Example tweening sequence looks like this:\n"
+"A tween animation is created by adding [Tweener]s to the [SceneTreeTween] "
+"object, using [method tween_property], [method tween_interval], [method "
+"tween_callback] or [method tween_method]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1)\n"
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"This sequence will make the [code]$Sprite[/code] node turn red, then shrink "
-"and finally the [method Node.queue_free] is called to remove the sprite. See "
-"methods [method tween_property], [method tween_interval], [method "
-"tween_callback] and [method tween_method] for more usage information.\n"
+"This sequence will make the [code]$Sprite[/code] node turn red, then shrink, "
+"before finally calling [method Node.queue_free] to free the sprite. "
+"[Tweener]s are executed one after another by default. This behavior can be "
+"changed using [method parallel] and [method set_parallel].\n"
"When a [Tweener] is created with one of the [code]tween_*[/code] methods, a "
"chained method call can be used to tweak the properties of this [Tweener]. "
-"For example, if you want to set different transition type in the above "
-"example, you can do:\n"
+"For example, if you want to set a different transition type in the above "
+"example, you can use [method set_trans]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1).set_trans(Tween."
@@ -53114,8 +54084,9 @@ msgid ""
"TRANS_BOUNCE)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Most of the [SceneTreeTween] methods can be chained this way too. In this "
-"example the [SceneTreeTween] is bound and have set a default transition:\n"
+"Most of the [SceneTreeTween] methods can be chained this way too. In the "
+"following example the [SceneTreeTween] is bound to the running script's node "
+"and a default transition is set for its [Tweener]s:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween().bind_node(self).set_trans(Tween."
"TRANS_ELASTIC)\n"
@@ -53123,16 +54094,16 @@ msgid ""
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Another interesting use for [SceneTreeTween]s is animating arbitrary set of "
+"Another interesting use for [SceneTreeTween]s is animating arbitrary sets of "
"objects:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"for sprite in get_children():\n"
-" tween.tween_property(sprite, \"position\", Vector2(), 1)\n"
+" tween.tween_property(sprite, \"position\", Vector2(0, 0), 1)\n"
"[/codeblock]\n"
"In the example above, all children of a node are moved one after another to "
"position (0, 0).\n"
-"Some [Tweener]s use transitions and eases. The first accepts an [enum Tween."
+"Some [Tweener]s use transitions and eases. The first accepts a [enum Tween."
"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 Tween.EaseType] constant, and "
@@ -53144,7 +54115,7 @@ msgid ""
"tween_cheatsheet.png]Tween easing and transition types cheatsheet[/url]\n"
"[b]Note:[/b] All [SceneTreeTween]s will automatically start by default. To "
"prevent a [SceneTreeTween] from autostarting, you can call [method stop] "
-"immediately after it was created."
+"immediately after it is created."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53174,21 +54145,24 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
-"Processes the [SceneTreeTween] by given [code]delta[/code] value, in "
-"seconds. Mostly useful when the [SceneTreeTween] is paused, for controlling "
-"it manually. Can also be used to end the [SceneTreeTween] animation "
-"immediately, by using [code]delta[/code] longer than the whole duration.\n"
+"Processes the [SceneTreeTween] by the given [code]delta[/code] value, in "
+"seconds. This is mostly useful for manual control when the [SceneTreeTween] "
+"is paused. It can also be used to end the [SceneTreeTween] animation "
+"immediately, by setting [code]delta[/code] longer than the whole duration of "
+"the [SceneTreeTween] animation.\n"
"Returns [code]true[/code] if the [SceneTreeTween] still has [Tweener]s that "
"haven't finished.\n"
-"[b]Note:[/b] The [SceneTreeTween] will become invalid after finished, but "
-"you can call [method stop] after the step, to keep it and reset."
+"[b]Note:[/b] The [SceneTreeTween] will become invalid in the next processing "
+"frame after its animation finishes. Calling [method stop] after performing "
+"[method custom_step] instead keeps and resets the [SceneTreeTween]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Returns the total time in seconds the [SceneTreeTween] has been animating (i."
-"e. time since it started, not counting pauses etc.). The time is affected by "
-"[method set_speed_scale] and [method stop] will reset it to [code]0[/code].\n"
+"e. the time since it started, not counting pauses etc.). The time is "
+"affected by [method set_speed_scale], and [method stop] will reset it to "
+"[code]0[/code].\n"
"[b]Note:[/b] As it results from accumulating frame deltas, the time returned "
"after the [SceneTreeTween] has finished animating will be slightly greater "
"than the actual [SceneTreeTween] duration."
@@ -53224,11 +54198,10 @@ msgstr ""
msgid ""
"Returns whether the [SceneTreeTween] is valid. A valid [SceneTreeTween] is a "
"[SceneTreeTween] contained by the scene tree (i.e. the array from [method "
-"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). "
-"[SceneTreeTween] might become invalid when it has finished tweening or was "
-"killed, also when created with [code]Tween.new()[/code]. Invalid "
-"[SceneTreeTween] can't have [Tweener]s appended, because it can't animate "
-"them. You can however still use [method interpolate_value]."
+"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). A "
+"[SceneTreeTween] might become invalid when it has finished tweening, is "
+"killed, or when created with [code]SceneTreeTween.new()[/code]. Invalid "
+"[SceneTreeTween]s can't have [Tweener]s appended."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53268,16 +54241,15 @@ msgstr ""
msgid ""
"Sets the number of times the tweening sequence will be repeated, i.e. "
"[code]set_loops(2)[/code] will run the animation twice.\n"
-"Calling this method without arguments will make the [SceneTreeTween] run "
-"infinitely, until it is either killed by [method kill] or by freeing bound "
-"node, or all the animated objects have been freed (which makes further "
+"Calling this method without arguments will make the [Tween] run infinitely, "
+"until either it is killed with [method kill], the [Tween]'s bound node is "
+"freed, or all the animated objects have been freed (which makes further "
"animation impossible).\n"
"[b]Warning:[/b] Make sure to always add some duration/delay when using "
-"infinite loops. 0-duration looped animations (e.g. single [CallbackTweener] "
-"with no delay or [PropertyTweener] with invalid node) are equivalent to "
-"infinite [code]while[/code] loops and will freeze your game. If a "
-"[SceneTreeTween]'s lifetime depends on some node, always use [method "
-"bind_node]."
+"infinite loops. To prevent the game freezing, 0-duration looped animations "
+"(e.g. a single [CallbackTweener] with no delay) are stopped after a small "
+"number of loops, which may produce unexpected results. If a [Tween]'s "
+"lifetime depends on some node, always use [method bind_node]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53339,10 +54311,10 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Creates and appends an [IntervalTweener]. This method can be used to create "
-"delays in the tween animation, as an alternative for using the delay in "
-"other [Tweener]s or when there's no animation (in which case the "
-"[SceneTreeTween] acts as a timer). [code]time[/code] is the length of the "
-"interval, in seconds.\n"
+"delays in the tween animation, as an alternative to using the delay in other "
+"[Tweener]s, or when there's no animation (in which case the [SceneTreeTween] "
+"acts as a timer). [code]time[/code] is the length of the interval, in "
+"seconds.\n"
"Example: creating an interval in code execution.\n"
"[codeblock]\n"
"# ... some code\n"
@@ -53396,8 +54368,8 @@ msgid ""
"Creates and appends a [PropertyTweener]. This method tweens a "
"[code]property[/code] of an [code]object[/code] between an initial value and "
"[code]final_val[/code] in a span of time equal to [code]duration[/code], in "
-"seconds. The initial value by default is a value at the time the tweening of "
-"the [PropertyTweener] start. For example:\n"
+"seconds. The initial value by default is the property's value at the time "
+"the tweening of the [PropertyTweener] starts. For example:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"tween.tween_property($Sprite, \"position\", Vector2(100, 200), 1)\n"
@@ -53428,16 +54400,15 @@ msgid ""
"Emitted when the [SceneTreeTween] has finished all tweening. Never emitted "
"when the [SceneTreeTween] is set to infinite looping (see [method "
"set_loops]).\n"
-"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) after this signal "
-"is emitted, but it doesn't happen immediately, but on the next processing "
-"frame. Calling [method stop] inside the signal callback will preserve the "
-"[SceneTreeTween]."
+"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) in the next "
+"processing frame after this signal is emitted. Calling [method stop] inside "
+"the signal callback will prevent the [SceneTreeTween] from being removed."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Emitted when a full loop is complete (see [method set_loops]), providing the "
-"loop index. This signal is not emitted after final loop, use [signal "
+"loop index. This signal is not emitted after the final loop, use [signal "
"finished] instead for this case."
msgstr ""
@@ -53445,7 +54416,7 @@ msgstr ""
msgid ""
"Emitted when one step of the [SceneTreeTween] is complete, providing the "
"step index. One step is either a single [Tweener] or a group of [Tweener]s "
-"running parallelly."
+"running in parallel."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -54777,7 +55748,12 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-msgid "Scale part of the local transformation."
+msgid ""
+"Scale part of the local transformation.\n"
+"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, the scale values will either be all "
+"positive or all negative."
msgstr ""
#: doc/classes/Spatial.xml
@@ -57408,11 +58384,11 @@ msgstr ""
msgid ""
"Returns [code]true[/code] if this string contains a valid integer.\n"
"[codeblock]\n"
-"print(\"7\".is_valid_int()) # Prints \"True\"\n"
-"print(\"14.6\".is_valid_int()) # Prints \"False\"\n"
-"print(\"L\".is_valid_int()) # Prints \"False\"\n"
-"print(\"+3\".is_valid_int()) # Prints \"True\"\n"
-"print(\"-12\".is_valid_int()) # Prints \"True\"\n"
+"print(\"7\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"14.6\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"L\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"+3\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"-12\".is_valid_integer()) # Prints \"True\"\n"
"[/codeblock]"
msgstr ""
@@ -60878,6 +61854,10 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml
+msgid "If [code]true[/code], this TileMap bakes a navigation region."
+msgstr ""
+
+#: doc/classes/TileMap.xml
msgid "If [code]true[/code], the cell's UVs will be clipped."
msgstr ""
@@ -60984,6 +61964,10 @@ msgid "The TileMap orientation mode. See [enum Mode] for possible values."
msgstr ""
#: doc/classes/TileMap.xml
+msgid "The navigation layers the TileMap generates its navigation regions in."
+msgstr ""
+
+#: doc/classes/TileMap.xml
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 "
@@ -62115,7 +63099,12 @@ msgstr ""
#: doc/classes/Transform2D.xml
msgid ""
"Returns a copy of the transform scaled by the given [code]scale[/code] "
-"factor, using matrix multiplication."
+"factor, using matrix multiplication.\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
#: doc/classes/Transform2D.xml
@@ -62270,7 +63259,18 @@ msgid ""
"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]."
+"to remove it from the [Tree].\n"
+"[b]Incremental search:[/b] Like [ItemList] and [PopupMenu], [Tree] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/Tree.xml
@@ -65786,11 +66786,12 @@ msgid "This enabler will stop [Particles2D] nodes."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _process function."
+msgid "This enabler will stop the parent's [method Node._process] function."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _physics_process function."
+msgid ""
+"This enabler will stop the parent's [method Node._physics_process] function."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
@@ -65830,6 +66831,16 @@ msgid "The VisibilityNotifier's bounding box."
msgstr ""
#: doc/classes/VisibilityNotifier.xml
+msgid ""
+"In addition to checking whether a node is on screen or within a [Camera]'s "
+"view, VisibilityNotifier can also optionally check whether a node is within "
+"a specified maximum distance when using a [Camera] with perspective "
+"projection. This is useful for throttling the performance requirements of "
+"nodes that are far away.\n"
+"[b]Note:[/b] This feature will be disabled if set to 0.0."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier.xml
msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view."
msgstr ""
@@ -70575,6 +71586,16 @@ msgid "The amount of shader rebinds in the frame."
msgstr ""
#: doc/classes/VisualServer.xml
+msgid ""
+"The peak amount of shaders that have been under compilation in the frame.\n"
+"This is useful to know when asynchronous shader compilation has finished for "
+"the current shaders on screen.\n"
+"[b]Note:[/b] For complete certainty, only assume there are no outstanding "
+"compilations when this value is zero for at least two frames in a row.\n"
+"Unimplemented in the GLES2 rendering backend, always returns 0."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
msgid "The amount of surface changes in the frame."
msgstr ""
@@ -73771,8 +74792,8 @@ msgstr ""
#: doc/classes/World.xml
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."
+"scenario, a navigation map and a sound space. Spatial nodes register their "
+"resources into the current world."
msgstr ""
#: doc/classes/World.xml
@@ -73787,8 +74808,13 @@ msgstr ""
#: doc/classes/World.xml
msgid ""
-"The World's fallback_environment will be used if the World's [Environment] "
-"fails or is missing."
+"The World's fallback environment will be used if [member environment] fails "
+"or is missing."
+msgstr ""
+
+#: doc/classes/World.xml
+msgid ""
+"The [RID] of this world's navigation map. Used by the [NavigationServer]."
msgstr ""
#: doc/classes/World.xml
@@ -73806,8 +74832,8 @@ msgstr ""
#: doc/classes/World2D.xml
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."
+"visual scenario, a navigation map and a sound space. 2D nodes register their "
+"resources into the current 2D world."
msgstr ""
#: doc/classes/World2D.xml
@@ -73825,6 +74851,11 @@ msgstr ""
#: doc/classes/World2D.xml
msgid ""
+"The [RID] of this world's navigation map. Used by the [Navigation2DServer]."
+msgstr ""
+
+#: doc/classes/World2D.xml
+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 ""
diff --git a/doc/translations/sv.po b/doc/translations/sv.po
index afe8cf34ae..706b410d30 100644
--- a/doc/translations/sv.po
+++ b/doc/translations/sv.po
@@ -348,7 +348,7 @@ msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
msgid ""
"Compares two values by checking their actual contents, recursing into any "
-"`Array` or `Dictionary` up to its deepest level.\n"
+"[Array] or [Dictionary] up to its deepest level.\n"
"This compares to [code]==[/code] in a number of ways:\n"
"- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/"
"code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] "
@@ -395,7 +395,7 @@ msgid ""
"- 1.0: Linear\n"
"- Greater than 1.0 (exclusive): Ease in\n"
"[/codeblock]\n"
-"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.4/img/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/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]."
@@ -1102,7 +1102,7 @@ msgid ""
"[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/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/img/"
"smoothstep_ease_comparison.png]Comparison between smoothstep() and ease(x, "
"-1.6521) return values[/url]"
msgstr ""
@@ -3380,6 +3380,12 @@ msgstr ""
#: doc/classes/@GlobalScope.xml
msgid ""
+"Hints that an integer property is a bitmask using the optionally named 2D "
+"navigation layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml
+msgid ""
"Hints that an integer property is a bitmask using the optionally named 3D "
"render layers."
msgstr ""
@@ -3392,6 +3398,12 @@ msgstr ""
#: doc/classes/@GlobalScope.xml
msgid ""
+"Hints that an integer property is a bitmask using the optionally named 3D "
+"navigation layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml
+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]."
@@ -8367,7 +8379,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/AStar.xml
+#: doc/classes/AStar.xml doc/classes/AStar2D.xml
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[/"
@@ -8566,7 +8578,10 @@ msgid ""
msgstr ""
#: doc/classes/AStar2D.xml
-msgid "Returns whether there is a connection/segment between the given points."
+msgid ""
+"Returns whether there is a connection/segment between the given points. 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/AStar2D.xml
@@ -8583,10 +8598,6 @@ msgid ""
msgstr ""
#: doc/classes/AStar2D.xml
-msgid "Deletes the segment between the given points."
-msgstr ""
-
-#: doc/classes/AStar2D.xml
msgid ""
"Returns the closest position to [code]to_position[/code] that resides inside "
"a segment between two connected points.\n"
@@ -8771,7 +8782,9 @@ msgid ""
"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."
+"transmit audio over the network. When capturing audio data from a "
+"microphone, the format of the samples will be stereo 32-bit floating point "
+"PCM."
msgstr ""
#: doc/classes/AudioEffectCapture.xml
@@ -13614,7 +13627,7 @@ msgid ""
msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
-#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/Navigation2D.xml
msgid "Returns the object's [RID]."
msgstr ""
@@ -19089,11 +19102,14 @@ msgid ""
msgstr ""
#: doc/classes/CurveTexture.xml
-msgid "The [code]curve[/code] rendered onto the texture."
+msgid "The [Curve] that is rendered onto the texture."
msgstr ""
#: doc/classes/CurveTexture.xml
-msgid "The width of the texture."
+msgid ""
+"The width of the texture (in pixels). Higher values make it possible to "
+"represent high-frequency data better (such as sudden direction changes), at "
+"the cost of increased generation time and memory usage."
msgstr ""
#: doc/classes/CylinderMesh.xml
@@ -19379,6 +19395,13 @@ msgid "Returns the list of keys in the [Dictionary]."
msgstr ""
#: doc/classes/Dictionary.xml
+msgid ""
+"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, "
+"duplicate keys will not be copied over, unless [code]overwrite[/code] is "
+"[code]true[/code]."
+msgstr ""
+
+#: doc/classes/Dictionary.xml
msgid "Returns the number of keys in the dictionary."
msgstr ""
@@ -21317,9 +21340,23 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide a state data you want to be saved, like view "
+"position, grid settings, folding, etc. 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). This data is automatically saved for "
+"each scene in an [code]editstate[/code] file in the editor metadata folder. "
+"If you want to store global (scene-independent) editor data for your plugin, "
+"you can use [method get_window_layout] instead.\n"
+"Use [method set_state] to restore your saved state.\n"
+"[b]Note:[/b] This method should not be used to save important settings that "
+"should persist with the project.\n"
+"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be "
+"stored and restored correctly.\n"
+"[codeblock]\n"
+"func get_state():\n"
+" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n"
+" return state\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -21330,9 +21367,18 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide the GUI layout of the plugin or any other "
+"data you want to be stored. 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). The data is stored in the "
+"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n"
+"Use [method set_window_layout] to restore your saved layout.\n"
+"[codeblock]\n"
+"func get_window_layout(configuration):\n"
+" configuration.set_value(\"MyPlugin\", \"window_position\", $Window."
+"position)\n"
+" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -21445,11 +21491,30 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the state saved by [method get_state]."
+msgid ""
+"Restore the state saved by [method get_state]. This method is called when "
+"the current scene tab is changed in the editor.\n"
+"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise "
+"it will not be recognized and this method will not be called.\n"
+"[codeblock]\n"
+"func set_state(data):\n"
+" zoom = data.get(\"zoom\", 1.0)\n"
+" preferred_color = data.get(\"my_color\", Color.white)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the plugin GUI layout saved by [method get_window_layout]."
+msgid ""
+"Restore the plugin GUI layout and data saved by [method get_window_layout]. "
+"This method is called for every plugin on editor startup. Use the provided "
+"[code]configuration[/code] file to read your saved data.\n"
+"[codeblock]\n"
+"func set_window_layout(configuration):\n"
+" $Window.position = configuration.get_value(\"MyPlugin\", "
+"\"window_position\", Vector2())\n"
+" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", "
+"Color.white)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -26084,7 +26149,8 @@ msgid ""
"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])."
+"at fixed steps (see [member width]). See also [GradientTexture2D] and "
+"[CurveTexture]."
msgstr ""
#: doc/classes/GradientTexture.xml
@@ -26106,7 +26172,8 @@ msgid ""
"repeat] types using colors obtained from the gradient. 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] and [member height])."
+"[member width] and [member height]). See also [GradientTexture] and "
+"[CurveTexture]."
msgstr ""
#: doc/classes/GradientTexture2D.xml
@@ -26912,6 +26979,12 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+msgid ""
+"If [code]true[/code], this GridMap uses cell navmesh resources to create "
+"navigation regions."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid "If [code]true[/code], grid items are centered on the X axis."
msgstr ""
@@ -26962,6 +27035,10 @@ msgid "The assigned [MeshLibrary]."
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+msgid "The navigation layers the GridMap generates its navigation regions in."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
"Overrides the default friction and bounce physics properties for the whole "
"[GridMap]."
@@ -28185,7 +28262,7 @@ msgid ""
" # 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 body = to_json({\"name\": \"Godette\"})\n"
" error = http_request.request(\"https://httpbin.org/post\", [], true, "
"HTTPClient.METHOD_POST, body)\n"
" if error != OK:\n"
@@ -29352,7 +29429,7 @@ msgstr ""
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 "
+"([member 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 "
@@ -29501,10 +29578,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Returns the mouse mode. See the constants for more information."
-msgstr ""
-
-#: doc/classes/Input.xml
msgid ""
"Gets an input vector by specifying four actions for the positive and "
"negative X and Y axes.\n"
@@ -29698,24 +29771,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Sets the mouse mode. See the constants for more information."
-msgstr ""
-
-#: doc/classes/Input.xml
-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
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 "
@@ -29751,6 +29806,24 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
+msgid "Controls the mouse mode. See [enum MouseMode] for more information."
+msgstr ""
+
+#: doc/classes/Input.xml
+msgid ""
+"If [code]true[/code], similar input events sent by the operating system are "
+"accumulated. 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 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
msgid "Emitted when a joypad device has been connected or disconnected."
msgstr ""
@@ -30058,8 +30131,8 @@ msgstr ""
#: doc/classes/InputEventJoypadButton.xml
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]."
+"Represents the pressure the user puts on the button with their finger, if "
+"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]."
msgstr ""
#: doc/classes/InputEventJoypadMotion.xml
@@ -30322,9 +30395,9 @@ 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 "
+"at most. If you need more precise input reporting, set [member Input."
+"use_accumulated_input] to [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."
@@ -30811,7 +30884,18 @@ msgid ""
"[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."
+"fixed_column_width] greater than zero to wrap the text.\n"
+"[b]Incremental search:[/b] Like [PopupMenu] and [Tree], [ItemList] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/ItemList.xml
@@ -34558,11 +34642,16 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Returns the override [Material] for a surface of the [Mesh] resource.\n"
+"[b]Note:[/b] This function only returns [i]override[/i] materials associated "
+"with this [MeshInstance]. Consider using [method get_active_material] or "
+"[method Mesh.surface_get_material] to get materials associated with the "
+"[Mesh] resource."
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the number of surface materials."
+msgid "Returns the number of surface override materials."
msgstr ""
#: doc/classes/MeshInstance.xml
@@ -34599,7 +34688,10 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Sets the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Sets the override [Material] for the specified surface of the [Mesh] "
+"resource. This material is associated with this [MeshInstance] rather than "
+"with the [Mesh] resource."
msgstr ""
#: doc/classes/MeshInstance.xml
@@ -34630,9 +34722,10 @@ msgstr ""
#: doc/classes/MeshInstance2D.xml
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\"."
+"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be "
+"automatically created from an existing [Sprite] via a tool in the editor "
+"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to "
+"MeshInstance2D[/b] at the top of the 2D editor viewport."
msgstr ""
#: doc/classes/MeshInstance2D.xml
@@ -35390,6 +35483,9 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"Provides navigation and pathfinding within a collection of "
"[NavigationMesh]es. By default, these will be automatically collected from "
"child [NavigationMeshInstance] nodes. In addition to basic pathfinding, this "
@@ -35430,7 +35526,14 @@ msgid ""
msgstr ""
#: doc/classes/Navigation.xml
+msgid "Returns the [RID] of the navigation map on the [NavigationServer]."
+msgstr ""
+
+#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"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, "
@@ -35452,16 +35555,31 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation.get_simple_path] path query."
+msgstr ""
+
+#: doc/classes/Navigation.xml
+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/Navigation.xml doc/classes/Navigation2DServer.xml
+#: doc/classes/NavigationServer.xml
+msgid ""
+"Emitted when a navigation map is updated, when a region moves or is modified."
+msgstr ""
+
#: doc/classes/Navigation2D.xml
msgid "2D navigation and pathfinding node."
msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -35481,6 +35599,9 @@ msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -35490,6 +35611,12 @@ msgstr ""
msgid "The XY plane cell size to use for fields."
msgstr ""
+#: doc/classes/Navigation2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation2D.get_simple_path] path query."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml
msgid "Server interface for low-level 2D navigation access."
msgstr ""
@@ -35506,8 +35633,12 @@ msgid ""
"through scripts.\n"
"For two regions to be connected to each other, they must share a similar "
"edge. An edge is considered connected to another if both of its two vertices "
-"are at a distance less than [member Navigation.edge_connection_margin] to "
-"the respective other edge's vertex.\n"
+"are at a distance less than navigation map [code]edge_connection_margin[/"
+"code] to the respective other edge's vertex.\n"
+"You may assign navigation layers to regions with [method Navigation2DServer."
+"region_set_navigation_layers], which then can be checked upon when "
+"requesting a path with [method Navigation2DServer.map_get_path]. This allows "
+"allowing or forbidding some areas to 2D objects.\n"
"To use the collision avoidance system, you may use agents. You can set an "
"agent's target velocity, then the servers will emit a callback with a "
"modified velocity.\n"
@@ -35535,7 +35666,17 @@ msgid "Returns [code]true[/code] if the map got changed the previous frame."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Callback called at the end of the RVO process."
+msgid ""
+"Callback called at the end of the RVO process. If a callback is created "
+"manually and the agent is placed on a navigation map it will calculate "
+"avoidance for the agent and dispatch the calculated [code]safe_velocity[/"
+"code] to the [code]receiver[/code] object with a signal to the chosen "
+"[code]method[/code] name.\n"
+"[b]Note:[/b] Created callbacks are always processed independently of the "
+"SceneTree state as long as the agent is on a navigation map and not freed. "
+"To disable the dispatch of a callback from an agent use [method "
+"agent_set_callback] again with a [code]null[/code] object as the "
+"[code]receiver[/code]."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -35590,15 +35731,55 @@ msgid "Destroys the given RID."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns all created navigation map [RID]s on the NavigationServer. This "
+"returns both 2D and 3D created navigation maps as there is technically no "
+"distinction between them."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Create a new map."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"This function immediately forces synchronization of the specified navigation "
+"[code]map[/code] [RID]. By default navigation maps are only synchronized at "
+"the end of each physics frame. This function can be used to immediately "
+"(re)calculate all the navigation meshes and region connections of the "
+"navigation map. This makes it possible to query a navigation path for a "
+"changed map immediately and in the same frame (multiple times if needed).\n"
+"Due to technical restrictions the current NavigationServer command queue "
+"will be flushed. This means all already queued update commands for this "
+"physics frame will be executed, even those intended for other maps, regions "
+"and agents not part of the specified map. The expensive computation of the "
+"navigation meshes and region connections of a map will only be done for the "
+"specified map. Other maps will receive the normal synchronization at the end "
+"of the physics frame. Should the specified map receive changes after the "
+"forced update it will update again as well when the other maps receive their "
+"update.\n"
+"Avoidance processing and dispatch of the [code]safe_velocity[/code] signals "
+"is untouched by this function and continues to happen for all maps and "
+"agents at the end of the physics frame.\n"
+"[b]Note:[/b] With great power comes great responsibility. This function "
+"should only be used by users that really know what they are doing and have a "
+"good reason for it. Forcing an immediate update of a navigation map requires "
+"locking the NavigationServer and flushing the entire NavigationServer "
+"command queue. Not only can this severely impact the performance of a game "
+"but it can also introduce bugs if used inappropriately without much "
+"foresight."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns all navigation agents [RID]s that are currently assigned to the "
"requested navigation [code]map[/code]."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Returns the map cell size."
msgstr ""
@@ -35622,7 +35803,10 @@ msgid ""
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Returns the navigation path to reach the destination from the origin."
+msgid ""
+"Returns the navigation path to reach the destination from the origin. "
+"[code]navigation_layers[/code] is a bitmask of all region layers that are "
+"allowed to be in the path."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -35639,6 +35823,12 @@ msgstr ""
msgid "Sets the map active."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/"
+"b] Currently not implemented."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Set the map cell size used to weld the navigation mesh polygons."
msgstr ""
@@ -35654,14 +35844,73 @@ msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"Returns the ending point of a connection door. [code]connection[/code] is an "
+"index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns the starting point of a connection door. [code]connection[/code] is "
+"an index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns how many connections this [code]region[/code] has with other regions "
+"in the map."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns the navigation map [RID] the requested [code]region[/code] is "
"currently assigned to."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Returns the region's navigation layers."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns [code]true[/code] if the provided [code]point[/code] in world space "
+"is currently owned by the provided navigation [code]region[/code]. Owned in "
+"this context means that one of the region's navigation mesh polygon faces "
+"has a possible position at the closest distance to this point compared to "
+"all other navigation meshes from other navigation regions that are also "
+"registered on the navigation map of the provided region.\n"
+"If multiple navigation meshes have positions at equal distance the "
+"navigation region whose polygons are processed first wins the ownership. "
+"Polygons are processed in the same order that navigation regions were "
+"registered on the NavigationServer.\n"
+"[b]Note:[/b] If navigation meshes from different navigation regions overlap "
+"(which should be avoided in general) the result might not be what is "
+"expected."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Sets the map for the region."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method Navigation2DServer.map_get_path])."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Sets the navigation mesh for the region."
msgstr ""
@@ -35670,6 +35919,10 @@ msgstr ""
msgid "Sets the global transformation for the region."
msgstr ""
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]."
+msgstr ""
+
#: doc/classes/NavigationAgent.xml
msgid "3D agent used in navigation for collision avoidance."
msgstr ""
@@ -35679,9 +35932,16 @@ msgid ""
"3D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationAgent] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World] navigation map. If this node is a child of a [Navigation] "
+"node it will register to the navigation map of the navigation node or the "
+"function [method set_navigation] can be used to set the navigation node "
+"directly. [NavigationAgent] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -35699,7 +35959,15 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-msgid "Returns the path from start to finish in global coordinates."
+msgid ""
+"Returns this agent's current path from start to finish in global "
+"coordinates. The path only updates when the target location is changed or "
+"the agent requires a repath. The path array is not intended to be used in "
+"direct path movement as the agent has its own internal path logic that would "
+"get corrupted by changing the path array manually. Use the intended [method "
+"get_next_location] once every physics frame to receive the next path point "
+"for the agents movement as this function also updates the internal path "
+"logic."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -35714,11 +35982,24 @@ msgid ""
"system."
msgstr ""
-#: doc/classes/NavigationAgent.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"Returns a [Vector3] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the origin of the agent's parent."
+"Returns the [RID] of the navigation map for this NavigationAgent node. This "
+"function returns always the map set on the NavigationAgent node and not the "
+"map of the abstract agent on the NavigationServer. If the agent map is "
+"changed directly with the NavigationServer API the NavigationAgent node will "
+"not be aware of the map change. Use [method set_navigation_map] to change "
+"the navigation map for the NavigationAgent and also update the agent on the "
+"NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
+"Returns the next location in global coordinates that can be moved to, making "
+"sure that there are no static objects in the way. If the agent does not have "
+"a navigation path, it will return the position of the agent's parent. The "
+"use of this function once every physics frame is required to update the "
+"internal path logic of the NavigationAgent."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -35759,6 +36040,12 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"Sets the [RID] of the navigation map this NavigationAgent node should use "
+"and also updates the [code]agent[/code] on the NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"Sets the user desired final location. This will clear the current navigation "
"path."
msgstr ""
@@ -35771,7 +36058,13 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml
-msgid "The agent height offset to match the navigation mesh height."
+msgid ""
+"The NavigationAgent height offset is subtracted from the y-axis value of any "
+"vector path position for this NavigationAgent. The NavigationAgent height "
+"offset does not change or influence the navigation mesh or pathfinding query "
+"result. Additional navigation maps that use regions with navigation meshes "
+"that the developer baked with appropriate agent radius or height values are "
+"required to support different-sized agents."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -35798,26 +36091,53 @@ msgstr ""
msgid "The maximum speed that an agent can move."
msgstr ""
+#: doc/classes/NavigationAgent.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "The distance to search for other agents."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"The distance threshold before a path point is considered to be reached. This "
+"will allow an agent to not have to hit a path point on the path exactly, but "
+"in the area. If this value is set to high the NavigationAgent will skip "
+"points on the path which can lead to leaving the navigation mesh. If this "
+"value is set to low the NavigationAgent will be stuck in a repath loop cause "
+"it will constantly overshoot or undershoot the distance to the next point on "
+"each physics frame update."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"The maximum distance the agent is allowed away from the ideal path to the "
"final location. This can happen due to trying to avoid collisions. When the "
"maximum distance is exceeded, it recalculates the ideal path."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-msgid "The radius of the agent."
+msgid ""
+"The radius of the avoidance agent. This is the \"body\" of the avoidance "
+"agent and not the avoidance maneuver starting radius (which is controlled by "
+"[member neighbor_dist]).\n"
+"Does not affect normal pathfinding. To change an actor's pathfinding radius "
+"bake [NavigationMesh] resources with a different [member NavigationMesh."
+"agent_radius] property and use different navigation maps for each actor size."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"The distance threshold before a target is considered to be reached. This "
-"will allow an agent to not have to hit a point on the path exactly, but in "
-"the area."
+"The distance threshold before the final target point is considered to be "
+"reached. This will allow an agent to not have to hit the point of the final "
+"target exactly, but only the area. If this value is set to low the "
+"NavigationAgent will be stuck in a repath loop cause it will constantly "
+"overshoot or undershoot the distance to the final target point on each "
+"physics frame update."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -35860,9 +36180,16 @@ msgid ""
"2D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationAgent2D] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World2D] navigation map. If this node is a child of a "
+"[Navigation2D] node it will register to the navigation map of the navigation "
+"node or the function [method set_navigation] can be used to set the "
+"navigation node directly. [NavigationAgent2D] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent2D.xml
@@ -35878,13 +36205,6 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent2D.xml
-msgid ""
-"Returns a [Vector2] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the position of the agent's parent."
-msgstr ""
-
-#: doc/classes/NavigationAgent2D.xml
msgid "Returns the [RID] of this agent on the [Navigation2DServer]."
msgstr ""
@@ -35904,6 +36224,13 @@ msgid ""
"only be enabled on agents that currently require it."
msgstr ""
+#: doc/classes/NavigationAgent2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent2D] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationMesh.xml
msgid "A mesh to approximate the walkable areas and obstacles."
msgstr ""
@@ -35934,8 +36261,8 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
-"Returns whether the specified [code]bit[/code] of the [member geometry/"
-"collision_mask] is set."
+"Returns whether the specified [code]bit[/code] of the [member "
+"geometry_collision_mask] is set."
msgstr ""
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
@@ -35957,9 +36284,9 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/"
-"code] in the [member geometry/collision_mask].\n"
+"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]."
+"code] in the [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
@@ -35973,14 +36300,14 @@ 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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -35992,7 +36319,7 @@ 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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36020,13 +36347,17 @@ msgstr ""
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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
-"If [code]true[/code], marks walkable spans as not walkable if the clearance "
-"above the span is less than [member agent/height]."
+"If the baking [AABB] has a volume the navigation mesh baking will be "
+"restricted to its enclosing area."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+msgid "The position offset applied to the [member filter_baking_aabb] [AABB]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36036,13 +36367,19 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]true[/code], marks non-walkable spans as walkable if their maximum "
-"is within [member agent/max_climb] of a walkable neighbor."
+"is within [member agent_max_climb] of a walkable neighbor."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+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
msgid ""
"The physics layers to scan for static colliders.\n"
-"Only used when [member geometry/parsed_geometry_type] is [constant "
+"Only used when [member geometry_parsed_geometry_type] is [constant "
"PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]."
msgstr ""
@@ -36061,7 +36398,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"The name of the group to scan for geometry.\n"
-"Only used when [member geometry/source_geometry_mode] is [constant "
+"Only used when [member geometry_source_geometry_mode] is [constant "
"SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant "
"SOURCE_GEOMETRY_GROUPS_EXPLICIT]."
msgstr ""
@@ -36124,7 +36461,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Parses [StaticBody] colliders as geometry. The collider should be in any of "
-"the layers specified by [member geometry/collision_mask]."
+"the layers specified by [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36145,13 +36482,13 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Scans nodes in a group and their child nodes recursively for geometry. The "
-"group is specified by [member geometry/source_group_name]."
+"group is specified by [member geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Uses nodes in a group for geometry. The group is specified by [member "
-"geometry/source_group_name]."
+"geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36193,7 +36530,15 @@ msgid ""
"geometry for walkable terrain suitable to [NavigationMesh] agent properties "
"by creating a voxel world around the meshes bounding area.\n"
"The finalized navigation mesh is then returned and stored inside the "
-"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes."
+"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] "
+"nodes.\n"
+"[b]Note:[/b] Using meshes to not only define walkable surfaces but also "
+"obstruct navigation baking does not always work. The navigation baking has "
+"no concept of what is a geometry \"inside\" when dealing with mesh source "
+"geometry and this is intentional. Depending on current baking parameters, as "
+"soon as the obstructing mesh is large enough to fit a navigation mesh area "
+"inside, the baking will generate navigation mesh areas that are inside the "
+"obstructing source geometry mesh."
msgstr ""
#: doc/classes/NavigationMeshGenerator.xml
@@ -36201,8 +36546,8 @@ msgid ""
"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child "
"nodes under the provided [code]root_node[/code] or a specific group of nodes "
"for potential source geometry. The parse behavior can be controlled with the "
-"[member NavigationMesh.geometry/parsed_geometry_type] and [member "
-"NavigationMesh.geometry/source_geometry_mode] properties on the "
+"[member NavigationMesh.geometry_parsed_geometry_type] and [member "
+"NavigationMesh.geometry_source_geometry_mode] properties on the "
"[NavigationMesh] resource."
msgstr ""
@@ -36219,8 +36564,21 @@ msgstr ""
#: doc/classes/NavigationMeshInstance.xml
msgid ""
"An instance of a [NavigationMesh]. It tells the [Navigation] node what can "
-"be navigated and what cannot, based on the [NavigationMesh] resource. This "
-"should be a child of a [Navigation] node."
+"be navigated and what cannot, based on the [NavigationMesh] resource.\n"
+"By default this node will register to the default [World] navigation map. If "
+"this node is a child of a [Navigation] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method NavigationServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The cost of entering this region from another region can be controlled with "
+"the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The cost of traveling distances inside this region can be controlled with "
+"the [member travel_cost] multiplier."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
@@ -36249,10 +36607,34 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding enters this region's navmesh from another regions navmesh "
+"the [code]enter_cost[/code] value is added to the path distance for "
+"determining the shortest path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationMesh] "
+"belongs to. On path requests with [method NavigationServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
msgid "The [NavigationMesh] resource to use."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding moves inside this region's navmesh the traveled distances "
+"are multiplied with [code]travel_cost[/code] for determining the shortest "
+"path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
msgid "Notifies when the navigation mesh bake operation is completed."
msgstr ""
@@ -36269,7 +36651,9 @@ msgid ""
"3D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationObstacle] is physics safe."
+"[NavigationObstacle] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle.xml
@@ -36309,7 +36693,9 @@ msgid ""
"2D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationObstacle2D] is physics safe."
+"[NavigationObstacle2D] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle2D.xml
@@ -36389,6 +36775,14 @@ msgstr ""
#: doc/classes/NavigationPolygon.xml
msgid ""
+"Returns the [NavigationMesh] resulting from this navigation polygon. This "
+"navmesh can be used to update the navmesh of a region with the [method "
+"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server "
+"behind the scene)."
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml
+msgid ""
"Returns a [PoolVector2Array] containing the vertices of an outline that was "
"created in the editor or by script."
msgstr ""
@@ -36425,6 +36819,30 @@ msgid ""
msgstr ""
#: doc/classes/NavigationPolygonInstance.xml
+msgid "A region of the 2D navigation map."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A region of the navigation map. It tells the [Navigation2DServer] what can "
+"be navigated and what cannot, based on its [NavigationPolygon] resource.\n"
+"By default this node will register to the default [World2D] navigation map. "
+"If this node is a child of a [Navigation2D] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The pathfinding cost of entering this region from another region can be "
+"controlled with the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The pathfinding cost of traveling distances inside this region can be "
+"controlled with the [member travel_cost] multiplier."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
msgid ""
"Returns the [RID] of this region on the [Navigation2DServer]. Combined with "
"[method Navigation2DServer.map_get_closest_point_owner] can be used to "
@@ -36432,6 +36850,22 @@ msgid ""
"navigation map."
msgstr ""
+#: doc/classes/NavigationPolygonInstance.xml
+msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationPolygon] "
+"belongs to. On path requests with [method Navigation2DServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid "The [NavigationPolygon] resource to use."
+msgstr ""
+
#: doc/classes/NavigationServer.xml
msgid "Server interface for low-level 3D navigation access."
msgstr ""
@@ -36507,6 +36941,12 @@ msgid "Bakes the navigation mesh."
msgstr ""
#: doc/classes/NavigationServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method NavigationServer.map_get_path])."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
msgid "Control activation of this server."
msgstr ""
@@ -37973,13 +38413,19 @@ msgstr ""
#: doc/classes/Node.xml
msgid ""
"Emitted when a child node enters the scene tree, either because it entered "
-"on its own or because this node entered with it."
+"on its own or because this node entered with it.\n"
+"This signal is emitted [i]after[/i] the child node's own [constant "
+"NOTIFICATION_ENTER_TREE] and [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
msgid ""
-"Emitted when a child node exits the scene tree, either because it exited on "
-"its own or because this node exited."
+"Emitted when a child node is about to exit the scene tree, either because it "
+"is being removed or freed directly, or because this node is exiting the "
+"tree.\n"
+"When this signal is received, the child [code]node[/code] is still in the "
+"tree and valid. This signal is emitted [i]after[/i] the child node's own "
+"[signal tree_exiting] and [constant NOTIFICATION_EXIT_TREE]."
msgstr ""
#: doc/classes/Node.xml
@@ -37991,7 +38437,10 @@ msgid "Emitted when the node is renamed."
msgstr ""
#: doc/classes/Node.xml
-msgid "Emitted when the node enters the tree."
+msgid ""
+"Emitted when the node enters the tree.\n"
+"This signal is emitted [i]after[/i] the related [constant "
+"NOTIFICATION_ENTER_TREE] notification."
msgstr ""
#: doc/classes/Node.xml
@@ -38001,15 +38450,21 @@ msgstr ""
#: doc/classes/Node.xml
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)."
+"the right place for de-initialization (or a \"destructor\", if you will).\n"
+"This signal is emitted [i]before[/i] the related [constant "
+"NOTIFICATION_EXIT_TREE] notification."
msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node enters a [SceneTree]."
+msgid ""
+"Notification received when the node enters a [SceneTree].\n"
+"This notification is emitted [i]before[/i] the related [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node is about to exit a [SceneTree]."
+msgid ""
+"Notification received when the node is about to exit a [SceneTree].\n"
+"This notification is emitted [i]after[/i] the related [signal tree_exiting]."
msgstr ""
#: doc/classes/Node.xml
@@ -38270,7 +38725,13 @@ msgid "Rotation in degrees, relative to the node's parent."
msgstr ""
#: doc/classes/Node2D.xml
-msgid "The node's scale. Unscaled value: [code](1, 1)[/code]."
+msgid ""
+"The node's scale. Unscaled value: [code](1, 1)[/code].\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
#: doc/classes/Node2D.xml
@@ -39710,6 +40171,10 @@ msgid ""
" if argument.find(\"=\") > -1:\n"
" var key_value = argument.split(\"=\")\n"
" arguments[key_value[0].lstrip(\"--\")] = key_value[1]\n"
+" else:\n"
+" # Options without an argument will be present in the dictionary,\n"
+" # with the value set to an empty string.\n"
+" arguments[argument.lstrip(\"--\")] = \"\"\n"
"[/codeblock]"
msgstr ""
@@ -40363,8 +40828,15 @@ msgstr ""
msgid ""
"Moves the file or directory to the system's recycle bin. See also [method "
"Directory.remove].\n"
+"The method takes only global paths, so you may need to use [method "
+"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/"
+"code] as it will not work in exported project.\n"
"[b]Note:[/b] If the user has disabled the recycle bin on their system, the "
-"file will be permanently deleted instead."
+"file will be permanently deleted instead.\n"
+"[codeblock]\n"
+"var file_to_remove = \"user://slot1.sav\"\n"
+"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/OS.xml
@@ -45203,7 +45675,18 @@ msgstr ""
#: doc/classes/PopupMenu.xml
msgid ""
"[PopupMenu] is a [Control] that displays a list of options. They are popular "
-"in toolbars or context menus."
+"in toolbars or context menus.\n"
+"[b]Incremental search:[/b] Like [ItemList] and [Tree], [PopupMenu] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/PopupMenu.xml
@@ -46710,7 +47193,16 @@ msgid ""
msgstr ""
#: doc/classes/ProjectSettings.xml
-msgid "Message to be displayed before the backtrace when the engine crashes."
+msgid ""
+"Message to be displayed before the backtrace when the engine crashes. By "
+"default, this message is only used in exported projects due to the editor-"
+"only override applied to this setting."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Editor-only override for [member debug/settings/crash_handler/message]. Does "
+"not affect exported projects in debug or release mode."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -46955,6 +47447,18 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default naming style for scene files to infer from their root nodes. "
+"Possible options are:\n"
+"- [code]0[/code] (Auto): Uses the scene root name as is without changing its "
+"casing.\n"
+"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase "
+"casing.\n"
+"- [code]2[/code] (snake_case): Converts the scene root name to snake_case "
+"casing."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -47180,6 +47684,198 @@ msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 1."
msgstr ""
@@ -47388,6 +48084,198 @@ msgid "Optional name for the 2D render layer 9."
msgstr ""
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 1."
msgstr ""
@@ -47655,6 +48543,49 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default cell height for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_height].\n"
+"[b]Note:[/b] Currently not implemented."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 2D navigation maps. See [method "
+"Navigation2DServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell height for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_height]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 3D navigation maps. See [method "
+"NavigationServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default map up vector for 3D navigation maps. See [method NavigationServer."
+"map_set_up]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -48328,20 +49259,28 @@ msgid ""
"cause.\n"
"The default value is a conservative one, so you are advised to tweak it "
"according to the hardware you are targeting.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"The default is a very conservative override for [code]rendering/gles3/"
-"shaders/max_concurrent_compiles[/code].\n"
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
"Depending on the specific devices you are targeting, you may want to raise "
"it.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
+"Depending on the specific browsers you are targeting, you may want to raise "
+"it.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -48349,19 +49288,28 @@ msgid ""
"The maximum size, in megabytes, that the ubershader cache can grow up to. On "
"startup, the least recently used entries will be deleted until the total "
"size is within bounds.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/ubershader_cache_size_mb[/"
-"code], so a smaller maximum size can be configured for mobile platforms, "
-"where storage space is more limited.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for mobile platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for web platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] Currently, shader caching is generally unavailable on web "
+"platforms.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -48393,14 +49341,22 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/shader_compilation_mode[/"
-"code], so asynchronous compilation can be disabled for mobile.\n"
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on mobile platforms.\n"
"You may want to do that since mobile GPUs generally won't support "
"ubershaders due to their complexity."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on web platforms.\n"
+"You may want to do that since certain browsers (especially on mobile "
+"platforms) generally won't support ubershaders due to their complexity."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
@@ -49157,7 +50113,6 @@ msgid ""
"- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/"
"code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, "
"small grid radius values may lead to unwanted groupings.\n"
-"[/codeblock]\n"
"[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more "
"effective and faster [VisibilityNotifier] functionality. For most use cases, "
"[method Vector3.distance_to] or [method Vector3.distance_squared_to] are "
@@ -51304,6 +52259,22 @@ msgid "Makes text fill width."
msgstr ""
#: doc/classes/RichTextLabel.xml
+msgid "Aligns top of the inline image to the top of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns center of the inline image to the center of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns bottom of the inline image to the baseline of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns bottom of the inline image to the bottom of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
msgid "Each list item has a number marker."
msgstr ""
@@ -53041,8 +54012,8 @@ msgid ""
" yield(get_tree().create_timer(1.0), \"timeout\")\n"
" print(\"Timer ended.\")\n"
"[/codeblock]\n"
-"The timer will be automatically freed after its time elapses, so be aware "
-"that any reference you might have kept to it will become invalid."
+"The timer will be dereferenced after its time elapses. To preserve the "
+"timer, you can keep a reference to it. See [Reference]."
msgstr ""
#: doc/classes/SceneTreeTimer.xml
@@ -53074,24 +54045,23 @@ msgid ""
"manually (i.e. by using [code]Tween.new()[/code]) are invalid. They can't be "
"used for tweening values, but you can do manual interpolation with [method "
"interpolate_value].\n"
-"A [SceneTreeTween] animation is composed of a sequence of [Tweener]s, which "
-"by default are executed one after another. You can create a sequence by "
-"appending [Tweener]s to the [SceneTreeTween]. Animating something with a "
-"[Tweener] is called tweening. Example tweening sequence looks like this:\n"
+"A tween animation is created by adding [Tweener]s to the [SceneTreeTween] "
+"object, using [method tween_property], [method tween_interval], [method "
+"tween_callback] or [method tween_method]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1)\n"
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"This sequence will make the [code]$Sprite[/code] node turn red, then shrink "
-"and finally the [method Node.queue_free] is called to remove the sprite. See "
-"methods [method tween_property], [method tween_interval], [method "
-"tween_callback] and [method tween_method] for more usage information.\n"
+"This sequence will make the [code]$Sprite[/code] node turn red, then shrink, "
+"before finally calling [method Node.queue_free] to free the sprite. "
+"[Tweener]s are executed one after another by default. This behavior can be "
+"changed using [method parallel] and [method set_parallel].\n"
"When a [Tweener] is created with one of the [code]tween_*[/code] methods, a "
"chained method call can be used to tweak the properties of this [Tweener]. "
-"For example, if you want to set different transition type in the above "
-"example, you can do:\n"
+"For example, if you want to set a different transition type in the above "
+"example, you can use [method set_trans]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1).set_trans(Tween."
@@ -53100,8 +54070,9 @@ msgid ""
"TRANS_BOUNCE)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Most of the [SceneTreeTween] methods can be chained this way too. In this "
-"example the [SceneTreeTween] is bound and have set a default transition:\n"
+"Most of the [SceneTreeTween] methods can be chained this way too. In the "
+"following example the [SceneTreeTween] is bound to the running script's node "
+"and a default transition is set for its [Tweener]s:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween().bind_node(self).set_trans(Tween."
"TRANS_ELASTIC)\n"
@@ -53109,16 +54080,16 @@ msgid ""
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Another interesting use for [SceneTreeTween]s is animating arbitrary set of "
+"Another interesting use for [SceneTreeTween]s is animating arbitrary sets of "
"objects:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"for sprite in get_children():\n"
-" tween.tween_property(sprite, \"position\", Vector2(), 1)\n"
+" tween.tween_property(sprite, \"position\", Vector2(0, 0), 1)\n"
"[/codeblock]\n"
"In the example above, all children of a node are moved one after another to "
"position (0, 0).\n"
-"Some [Tweener]s use transitions and eases. The first accepts an [enum Tween."
+"Some [Tweener]s use transitions and eases. The first accepts a [enum Tween."
"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 Tween.EaseType] constant, and "
@@ -53130,7 +54101,7 @@ msgid ""
"tween_cheatsheet.png]Tween easing and transition types cheatsheet[/url]\n"
"[b]Note:[/b] All [SceneTreeTween]s will automatically start by default. To "
"prevent a [SceneTreeTween] from autostarting, you can call [method stop] "
-"immediately after it was created."
+"immediately after it is created."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53160,21 +54131,24 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
-"Processes the [SceneTreeTween] by given [code]delta[/code] value, in "
-"seconds. Mostly useful when the [SceneTreeTween] is paused, for controlling "
-"it manually. Can also be used to end the [SceneTreeTween] animation "
-"immediately, by using [code]delta[/code] longer than the whole duration.\n"
+"Processes the [SceneTreeTween] by the given [code]delta[/code] value, in "
+"seconds. This is mostly useful for manual control when the [SceneTreeTween] "
+"is paused. It can also be used to end the [SceneTreeTween] animation "
+"immediately, by setting [code]delta[/code] longer than the whole duration of "
+"the [SceneTreeTween] animation.\n"
"Returns [code]true[/code] if the [SceneTreeTween] still has [Tweener]s that "
"haven't finished.\n"
-"[b]Note:[/b] The [SceneTreeTween] will become invalid after finished, but "
-"you can call [method stop] after the step, to keep it and reset."
+"[b]Note:[/b] The [SceneTreeTween] will become invalid in the next processing "
+"frame after its animation finishes. Calling [method stop] after performing "
+"[method custom_step] instead keeps and resets the [SceneTreeTween]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Returns the total time in seconds the [SceneTreeTween] has been animating (i."
-"e. time since it started, not counting pauses etc.). The time is affected by "
-"[method set_speed_scale] and [method stop] will reset it to [code]0[/code].\n"
+"e. the time since it started, not counting pauses etc.). The time is "
+"affected by [method set_speed_scale], and [method stop] will reset it to "
+"[code]0[/code].\n"
"[b]Note:[/b] As it results from accumulating frame deltas, the time returned "
"after the [SceneTreeTween] has finished animating will be slightly greater "
"than the actual [SceneTreeTween] duration."
@@ -53210,11 +54184,10 @@ msgstr ""
msgid ""
"Returns whether the [SceneTreeTween] is valid. A valid [SceneTreeTween] is a "
"[SceneTreeTween] contained by the scene tree (i.e. the array from [method "
-"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). "
-"[SceneTreeTween] might become invalid when it has finished tweening or was "
-"killed, also when created with [code]Tween.new()[/code]. Invalid "
-"[SceneTreeTween] can't have [Tweener]s appended, because it can't animate "
-"them. You can however still use [method interpolate_value]."
+"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). A "
+"[SceneTreeTween] might become invalid when it has finished tweening, is "
+"killed, or when created with [code]SceneTreeTween.new()[/code]. Invalid "
+"[SceneTreeTween]s can't have [Tweener]s appended."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53254,16 +54227,15 @@ msgstr ""
msgid ""
"Sets the number of times the tweening sequence will be repeated, i.e. "
"[code]set_loops(2)[/code] will run the animation twice.\n"
-"Calling this method without arguments will make the [SceneTreeTween] run "
-"infinitely, until it is either killed by [method kill] or by freeing bound "
-"node, or all the animated objects have been freed (which makes further "
+"Calling this method without arguments will make the [Tween] run infinitely, "
+"until either it is killed with [method kill], the [Tween]'s bound node is "
+"freed, or all the animated objects have been freed (which makes further "
"animation impossible).\n"
"[b]Warning:[/b] Make sure to always add some duration/delay when using "
-"infinite loops. 0-duration looped animations (e.g. single [CallbackTweener] "
-"with no delay or [PropertyTweener] with invalid node) are equivalent to "
-"infinite [code]while[/code] loops and will freeze your game. If a "
-"[SceneTreeTween]'s lifetime depends on some node, always use [method "
-"bind_node]."
+"infinite loops. To prevent the game freezing, 0-duration looped animations "
+"(e.g. a single [CallbackTweener] with no delay) are stopped after a small "
+"number of loops, which may produce unexpected results. If a [Tween]'s "
+"lifetime depends on some node, always use [method bind_node]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53325,10 +54297,10 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Creates and appends an [IntervalTweener]. This method can be used to create "
-"delays in the tween animation, as an alternative for using the delay in "
-"other [Tweener]s or when there's no animation (in which case the "
-"[SceneTreeTween] acts as a timer). [code]time[/code] is the length of the "
-"interval, in seconds.\n"
+"delays in the tween animation, as an alternative to using the delay in other "
+"[Tweener]s, or when there's no animation (in which case the [SceneTreeTween] "
+"acts as a timer). [code]time[/code] is the length of the interval, in "
+"seconds.\n"
"Example: creating an interval in code execution.\n"
"[codeblock]\n"
"# ... some code\n"
@@ -53382,8 +54354,8 @@ msgid ""
"Creates and appends a [PropertyTweener]. This method tweens a "
"[code]property[/code] of an [code]object[/code] between an initial value and "
"[code]final_val[/code] in a span of time equal to [code]duration[/code], in "
-"seconds. The initial value by default is a value at the time the tweening of "
-"the [PropertyTweener] start. For example:\n"
+"seconds. The initial value by default is the property's value at the time "
+"the tweening of the [PropertyTweener] starts. For example:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"tween.tween_property($Sprite, \"position\", Vector2(100, 200), 1)\n"
@@ -53414,16 +54386,15 @@ msgid ""
"Emitted when the [SceneTreeTween] has finished all tweening. Never emitted "
"when the [SceneTreeTween] is set to infinite looping (see [method "
"set_loops]).\n"
-"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) after this signal "
-"is emitted, but it doesn't happen immediately, but on the next processing "
-"frame. Calling [method stop] inside the signal callback will preserve the "
-"[SceneTreeTween]."
+"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) in the next "
+"processing frame after this signal is emitted. Calling [method stop] inside "
+"the signal callback will prevent the [SceneTreeTween] from being removed."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Emitted when a full loop is complete (see [method set_loops]), providing the "
-"loop index. This signal is not emitted after final loop, use [signal "
+"loop index. This signal is not emitted after the final loop, use [signal "
"finished] instead for this case."
msgstr ""
@@ -53431,7 +54402,7 @@ msgstr ""
msgid ""
"Emitted when one step of the [SceneTreeTween] is complete, providing the "
"step index. One step is either a single [Tweener] or a group of [Tweener]s "
-"running parallelly."
+"running in parallel."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -54763,7 +55734,12 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-msgid "Scale part of the local transformation."
+msgid ""
+"Scale part of the local transformation.\n"
+"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, the scale values will either be all "
+"positive or all negative."
msgstr ""
#: doc/classes/Spatial.xml
@@ -57394,11 +58370,11 @@ msgstr ""
msgid ""
"Returns [code]true[/code] if this string contains a valid integer.\n"
"[codeblock]\n"
-"print(\"7\".is_valid_int()) # Prints \"True\"\n"
-"print(\"14.6\".is_valid_int()) # Prints \"False\"\n"
-"print(\"L\".is_valid_int()) # Prints \"False\"\n"
-"print(\"+3\".is_valid_int()) # Prints \"True\"\n"
-"print(\"-12\".is_valid_int()) # Prints \"True\"\n"
+"print(\"7\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"14.6\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"L\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"+3\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"-12\".is_valid_integer()) # Prints \"True\"\n"
"[/codeblock]"
msgstr ""
@@ -60864,6 +61840,10 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml
+msgid "If [code]true[/code], this TileMap bakes a navigation region."
+msgstr ""
+
+#: doc/classes/TileMap.xml
msgid "If [code]true[/code], the cell's UVs will be clipped."
msgstr ""
@@ -60970,6 +61950,10 @@ msgid "The TileMap orientation mode. See [enum Mode] for possible values."
msgstr ""
#: doc/classes/TileMap.xml
+msgid "The navigation layers the TileMap generates its navigation regions in."
+msgstr ""
+
+#: doc/classes/TileMap.xml
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 "
@@ -62101,7 +63085,12 @@ msgstr ""
#: doc/classes/Transform2D.xml
msgid ""
"Returns a copy of the transform scaled by the given [code]scale[/code] "
-"factor, using matrix multiplication."
+"factor, using matrix multiplication.\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
#: doc/classes/Transform2D.xml
@@ -62256,7 +63245,18 @@ msgid ""
"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]."
+"to remove it from the [Tree].\n"
+"[b]Incremental search:[/b] Like [ItemList] and [PopupMenu], [Tree] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/Tree.xml
@@ -65772,11 +66772,12 @@ msgid "This enabler will stop [Particles2D] nodes."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _process function."
+msgid "This enabler will stop the parent's [method Node._process] function."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _physics_process function."
+msgid ""
+"This enabler will stop the parent's [method Node._physics_process] function."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
@@ -65816,6 +66817,16 @@ msgid "The VisibilityNotifier's bounding box."
msgstr ""
#: doc/classes/VisibilityNotifier.xml
+msgid ""
+"In addition to checking whether a node is on screen or within a [Camera]'s "
+"view, VisibilityNotifier can also optionally check whether a node is within "
+"a specified maximum distance when using a [Camera] with perspective "
+"projection. This is useful for throttling the performance requirements of "
+"nodes that are far away.\n"
+"[b]Note:[/b] This feature will be disabled if set to 0.0."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier.xml
msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view."
msgstr ""
@@ -70561,6 +71572,16 @@ msgid "The amount of shader rebinds in the frame."
msgstr ""
#: doc/classes/VisualServer.xml
+msgid ""
+"The peak amount of shaders that have been under compilation in the frame.\n"
+"This is useful to know when asynchronous shader compilation has finished for "
+"the current shaders on screen.\n"
+"[b]Note:[/b] For complete certainty, only assume there are no outstanding "
+"compilations when this value is zero for at least two frames in a row.\n"
+"Unimplemented in the GLES2 rendering backend, always returns 0."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
msgid "The amount of surface changes in the frame."
msgstr ""
@@ -73757,8 +74778,8 @@ msgstr ""
#: doc/classes/World.xml
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."
+"scenario, a navigation map and a sound space. Spatial nodes register their "
+"resources into the current world."
msgstr ""
#: doc/classes/World.xml
@@ -73773,8 +74794,13 @@ msgstr ""
#: doc/classes/World.xml
msgid ""
-"The World's fallback_environment will be used if the World's [Environment] "
-"fails or is missing."
+"The World's fallback environment will be used if [member environment] fails "
+"or is missing."
+msgstr ""
+
+#: doc/classes/World.xml
+msgid ""
+"The [RID] of this world's navigation map. Used by the [NavigationServer]."
msgstr ""
#: doc/classes/World.xml
@@ -73792,8 +74818,8 @@ msgstr ""
#: doc/classes/World2D.xml
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."
+"visual scenario, a navigation map and a sound space. 2D nodes register their "
+"resources into the current 2D world."
msgstr ""
#: doc/classes/World2D.xml
@@ -73811,6 +74837,11 @@ msgstr ""
#: doc/classes/World2D.xml
msgid ""
+"The [RID] of this world's navigation map. Used by the [Navigation2DServer]."
+msgstr ""
+
+#: doc/classes/World2D.xml
+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 ""
diff --git a/doc/translations/th.po b/doc/translations/th.po
index 919ed35041..68c0dd503a 100644
--- a/doc/translations/th.po
+++ b/doc/translations/th.po
@@ -426,7 +426,7 @@ msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
msgid ""
"Compares two values by checking their actual contents, recursing into any "
-"`Array` or `Dictionary` up to its deepest level.\n"
+"[Array] or [Dictionary] up to its deepest level.\n"
"This compares to [code]==[/code] in a number of ways:\n"
"- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/"
"code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] "
@@ -473,7 +473,7 @@ msgid ""
"- 1.0: Linear\n"
"- Greater than 1.0 (exclusive): Ease in\n"
"[/codeblock]\n"
-"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.4/img/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/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]."
@@ -1187,7 +1187,7 @@ msgid ""
"[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/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/img/"
"smoothstep_ease_comparison.png]Comparison between smoothstep() and ease(x, "
"-1.6521) return values[/url]"
msgstr ""
@@ -3474,6 +3474,12 @@ msgstr ""
#: doc/classes/@GlobalScope.xml
msgid ""
+"Hints that an integer property is a bitmask using the optionally named 2D "
+"navigation layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml
+msgid ""
"Hints that an integer property is a bitmask using the optionally named 3D "
"render layers."
msgstr ""
@@ -3486,6 +3492,12 @@ msgstr ""
#: doc/classes/@GlobalScope.xml
msgid ""
+"Hints that an integer property is a bitmask using the optionally named 3D "
+"navigation layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml
+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]."
@@ -8472,7 +8484,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/AStar.xml
+#: doc/classes/AStar.xml doc/classes/AStar2D.xml
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[/"
@@ -8671,7 +8683,10 @@ msgid ""
msgstr ""
#: doc/classes/AStar2D.xml
-msgid "Returns whether there is a connection/segment between the given points."
+msgid ""
+"Returns whether there is a connection/segment between the given points. 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/AStar2D.xml
@@ -8688,10 +8703,6 @@ msgid ""
msgstr ""
#: doc/classes/AStar2D.xml
-msgid "Deletes the segment between the given points."
-msgstr ""
-
-#: doc/classes/AStar2D.xml
msgid ""
"Returns the closest position to [code]to_position[/code] that resides inside "
"a segment between two connected points.\n"
@@ -8876,7 +8887,9 @@ msgid ""
"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."
+"transmit audio over the network. When capturing audio data from a "
+"microphone, the format of the samples will be stereo 32-bit floating point "
+"PCM."
msgstr ""
#: doc/classes/AudioEffectCapture.xml
@@ -13722,7 +13735,7 @@ msgid ""
msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
-#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/Navigation2D.xml
msgid "Returns the object's [RID]."
msgstr ""
@@ -19198,11 +19211,15 @@ msgid ""
msgstr ""
#: doc/classes/CurveTexture.xml
-msgid "The [code]curve[/code] rendered onto the texture."
-msgstr ""
+#, fuzzy
+msgid "The [Curve] that is rendered onto the texture."
+msgstr "คืนค่า arc tanh ของพารามิเตอร์"
#: doc/classes/CurveTexture.xml
-msgid "The width of the texture."
+msgid ""
+"The width of the texture (in pixels). Higher values make it possible to "
+"represent high-frequency data better (such as sudden direction changes), at "
+"the cost of increased generation time and memory usage."
msgstr ""
#: doc/classes/CylinderMesh.xml
@@ -19488,6 +19505,13 @@ msgid "Returns the list of keys in the [Dictionary]."
msgstr ""
#: doc/classes/Dictionary.xml
+msgid ""
+"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, "
+"duplicate keys will not be copied over, unless [code]overwrite[/code] is "
+"[code]true[/code]."
+msgstr ""
+
+#: doc/classes/Dictionary.xml
msgid "Returns the number of keys in the dictionary."
msgstr ""
@@ -21426,9 +21450,23 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide a state data you want to be saved, like view "
+"position, grid settings, folding, etc. 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). This data is automatically saved for "
+"each scene in an [code]editstate[/code] file in the editor metadata folder. "
+"If you want to store global (scene-independent) editor data for your plugin, "
+"you can use [method get_window_layout] instead.\n"
+"Use [method set_state] to restore your saved state.\n"
+"[b]Note:[/b] This method should not be used to save important settings that "
+"should persist with the project.\n"
+"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be "
+"stored and restored correctly.\n"
+"[codeblock]\n"
+"func get_state():\n"
+" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n"
+" return state\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -21439,9 +21477,18 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide the GUI layout of the plugin or any other "
+"data you want to be stored. 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). The data is stored in the "
+"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n"
+"Use [method set_window_layout] to restore your saved layout.\n"
+"[codeblock]\n"
+"func get_window_layout(configuration):\n"
+" configuration.set_value(\"MyPlugin\", \"window_position\", $Window."
+"position)\n"
+" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -21554,11 +21601,30 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the state saved by [method get_state]."
+msgid ""
+"Restore the state saved by [method get_state]. This method is called when "
+"the current scene tab is changed in the editor.\n"
+"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise "
+"it will not be recognized and this method will not be called.\n"
+"[codeblock]\n"
+"func set_state(data):\n"
+" zoom = data.get(\"zoom\", 1.0)\n"
+" preferred_color = data.get(\"my_color\", Color.white)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the plugin GUI layout saved by [method get_window_layout]."
+msgid ""
+"Restore the plugin GUI layout and data saved by [method get_window_layout]. "
+"This method is called for every plugin on editor startup. Use the provided "
+"[code]configuration[/code] file to read your saved data.\n"
+"[codeblock]\n"
+"func set_window_layout(configuration):\n"
+" $Window.position = configuration.get_value(\"MyPlugin\", "
+"\"window_position\", Vector2())\n"
+" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", "
+"Color.white)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -26201,7 +26267,8 @@ msgid ""
"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])."
+"at fixed steps (see [member width]). See also [GradientTexture2D] and "
+"[CurveTexture]."
msgstr ""
#: doc/classes/GradientTexture.xml
@@ -26223,7 +26290,8 @@ msgid ""
"repeat] types using colors obtained from the gradient. 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] and [member height])."
+"[member width] and [member height]). See also [GradientTexture] and "
+"[CurveTexture]."
msgstr ""
#: doc/classes/GradientTexture2D.xml
@@ -27030,6 +27098,12 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+msgid ""
+"If [code]true[/code], this GridMap uses cell navmesh resources to create "
+"navigation regions."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid "If [code]true[/code], grid items are centered on the X axis."
msgstr ""
@@ -27080,6 +27154,10 @@ msgid "The assigned [MeshLibrary]."
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+msgid "The navigation layers the GridMap generates its navigation regions in."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
"Overrides the default friction and bounce physics properties for the whole "
"[GridMap]."
@@ -28303,7 +28381,7 @@ msgid ""
" # 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 body = to_json({\"name\": \"Godette\"})\n"
" error = http_request.request(\"https://httpbin.org/post\", [], true, "
"HTTPClient.METHOD_POST, body)\n"
" if error != OK:\n"
@@ -29472,7 +29550,7 @@ msgstr ""
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 "
+"([member 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 "
@@ -29629,10 +29707,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Returns the mouse mode. See the constants for more information."
-msgstr ""
-
-#: doc/classes/Input.xml
msgid ""
"Gets an input vector by specifying four actions for the positive and "
"negative X and Y axes.\n"
@@ -29838,24 +29912,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Sets the mouse mode. See the constants for more information."
-msgstr ""
-
-#: doc/classes/Input.xml
-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
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 "
@@ -29891,6 +29947,24 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
+msgid "Controls the mouse mode. See [enum MouseMode] for more information."
+msgstr ""
+
+#: doc/classes/Input.xml
+msgid ""
+"If [code]true[/code], similar input events sent by the operating system are "
+"accumulated. 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 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
msgid "Emitted when a joypad device has been connected or disconnected."
msgstr ""
@@ -30214,8 +30288,8 @@ msgstr ""
#: doc/classes/InputEventJoypadButton.xml
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]."
+"Represents the pressure the user puts on the button with their finger, if "
+"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]."
msgstr ""
#: doc/classes/InputEventJoypadMotion.xml
@@ -30478,9 +30552,9 @@ 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 "
+"at most. If you need more precise input reporting, set [member Input."
+"use_accumulated_input] to [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."
@@ -30971,7 +31045,18 @@ msgid ""
"[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."
+"fixed_column_width] greater than zero to wrap the text.\n"
+"[b]Incremental search:[/b] Like [PopupMenu] and [Tree], [ItemList] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/ItemList.xml
@@ -34730,12 +34815,18 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Returns the override [Material] for a surface of the [Mesh] resource.\n"
+"[b]Note:[/b] This function only returns [i]override[/i] materials associated "
+"with this [MeshInstance]. Consider using [method get_active_material] or "
+"[method Mesh.surface_get_material] to get materials associated with the "
+"[Mesh] resource."
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the number of surface materials."
-msgstr ""
+#, fuzzy
+msgid "Returns the number of surface override materials."
+msgstr "คืนค่าชื่อของอุปà¸à¸£à¸“์เสียงทั้งหมดที่ตรวจพบในระบบ"
#: doc/classes/MeshInstance.xml
msgid ""
@@ -34771,7 +34862,10 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Sets the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Sets the override [Material] for the specified surface of the [Mesh] "
+"resource. This material is associated with this [MeshInstance] rather than "
+"with the [Mesh] resource."
msgstr ""
#: doc/classes/MeshInstance.xml
@@ -34802,9 +34896,10 @@ msgstr ""
#: doc/classes/MeshInstance2D.xml
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\"."
+"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be "
+"automatically created from an existing [Sprite] via a tool in the editor "
+"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to "
+"MeshInstance2D[/b] at the top of the 2D editor viewport."
msgstr ""
#: doc/classes/MeshInstance2D.xml
@@ -35562,6 +35657,9 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"Provides navigation and pathfinding within a collection of "
"[NavigationMesh]es. By default, these will be automatically collected from "
"child [NavigationMeshInstance] nodes. In addition to basic pathfinding, this "
@@ -35602,7 +35700,15 @@ msgid ""
msgstr ""
#: doc/classes/Navigation.xml
+#, fuzzy
+msgid "Returns the [RID] of the navigation map on the [NavigationServer]."
+msgstr "คืนค่าผà¸à¸œà¸±à¸™à¸£à¸¹à¸—สองของพารามิเตอร์"
+
+#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"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, "
@@ -35624,16 +35730,31 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation.get_simple_path] path query."
+msgstr ""
+
+#: doc/classes/Navigation.xml
+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/Navigation.xml doc/classes/Navigation2DServer.xml
+#: doc/classes/NavigationServer.xml
+msgid ""
+"Emitted when a navigation map is updated, when a region moves or is modified."
+msgstr ""
+
#: doc/classes/Navigation2D.xml
msgid "2D navigation and pathfinding node."
msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -35653,6 +35774,9 @@ msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -35662,6 +35786,12 @@ msgstr ""
msgid "The XY plane cell size to use for fields."
msgstr ""
+#: doc/classes/Navigation2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation2D.get_simple_path] path query."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml
msgid "Server interface for low-level 2D navigation access."
msgstr ""
@@ -35678,8 +35808,12 @@ msgid ""
"through scripts.\n"
"For two regions to be connected to each other, they must share a similar "
"edge. An edge is considered connected to another if both of its two vertices "
-"are at a distance less than [member Navigation.edge_connection_margin] to "
-"the respective other edge's vertex.\n"
+"are at a distance less than navigation map [code]edge_connection_margin[/"
+"code] to the respective other edge's vertex.\n"
+"You may assign navigation layers to regions with [method Navigation2DServer."
+"region_set_navigation_layers], which then can be checked upon when "
+"requesting a path with [method Navigation2DServer.map_get_path]. This allows "
+"allowing or forbidding some areas to 2D objects.\n"
"To use the collision avoidance system, you may use agents. You can set an "
"agent's target velocity, then the servers will emit a callback with a "
"modified velocity.\n"
@@ -35707,7 +35841,17 @@ msgid "Returns [code]true[/code] if the map got changed the previous frame."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Callback called at the end of the RVO process."
+msgid ""
+"Callback called at the end of the RVO process. If a callback is created "
+"manually and the agent is placed on a navigation map it will calculate "
+"avoidance for the agent and dispatch the calculated [code]safe_velocity[/"
+"code] to the [code]receiver[/code] object with a signal to the chosen "
+"[code]method[/code] name.\n"
+"[b]Note:[/b] Created callbacks are always processed independently of the "
+"SceneTree state as long as the agent is on a navigation map and not freed. "
+"To disable the dispatch of a callback from an agent use [method "
+"agent_set_callback] again with a [code]null[/code] object as the "
+"[code]receiver[/code]."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -35765,15 +35909,55 @@ msgid "Destroys the given RID."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns all created navigation map [RID]s on the NavigationServer. This "
+"returns both 2D and 3D created navigation maps as there is technically no "
+"distinction between them."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Create a new map."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"This function immediately forces synchronization of the specified navigation "
+"[code]map[/code] [RID]. By default navigation maps are only synchronized at "
+"the end of each physics frame. This function can be used to immediately "
+"(re)calculate all the navigation meshes and region connections of the "
+"navigation map. This makes it possible to query a navigation path for a "
+"changed map immediately and in the same frame (multiple times if needed).\n"
+"Due to technical restrictions the current NavigationServer command queue "
+"will be flushed. This means all already queued update commands for this "
+"physics frame will be executed, even those intended for other maps, regions "
+"and agents not part of the specified map. The expensive computation of the "
+"navigation meshes and region connections of a map will only be done for the "
+"specified map. Other maps will receive the normal synchronization at the end "
+"of the physics frame. Should the specified map receive changes after the "
+"forced update it will update again as well when the other maps receive their "
+"update.\n"
+"Avoidance processing and dispatch of the [code]safe_velocity[/code] signals "
+"is untouched by this function and continues to happen for all maps and "
+"agents at the end of the physics frame.\n"
+"[b]Note:[/b] With great power comes great responsibility. This function "
+"should only be used by users that really know what they are doing and have a "
+"good reason for it. Forcing an immediate update of a navigation map requires "
+"locking the NavigationServer and flushing the entire NavigationServer "
+"command queue. Not only can this severely impact the performance of a game "
+"but it can also introduce bugs if used inappropriately without much "
+"foresight."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns all navigation agents [RID]s that are currently assigned to the "
"requested navigation [code]map[/code]."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
#, fuzzy
msgid "Returns the map cell size."
@@ -35798,7 +35982,10 @@ msgid ""
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Returns the navigation path to reach the destination from the origin."
+msgid ""
+"Returns the navigation path to reach the destination from the origin. "
+"[code]navigation_layers[/code] is a bitmask of all region layers that are "
+"allowed to be in the path."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -35816,6 +36003,12 @@ msgstr ""
msgid "Sets the map active."
msgstr "คืนค่าà¸à¸²à¸£à¸à¸³à¸«à¸™à¸”ค่าของลำโพง"
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/"
+"b] Currently not implemented."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Set the map cell size used to weld the navigation mesh polygons."
msgstr ""
@@ -35831,15 +36024,78 @@ msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"Returns the ending point of a connection door. [code]connection[/code] is an "
+"index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns the starting point of a connection door. [code]connection[/code] is "
+"an index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns how many connections this [code]region[/code] has with other regions "
+"in the map."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]."
+msgstr "คืนค่าà¸à¸²à¸£à¸à¸³à¸«à¸™à¸”ค่าของลำโพง"
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns the navigation map [RID] the requested [code]region[/code] is "
"currently assigned to."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
#, fuzzy
+msgid "Returns the region's navigation layers."
+msgstr "คืนค่าà¸à¸²à¸£à¸à¸³à¸«à¸™à¸”ค่าของลำโพง"
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]."
+msgstr "คืนค่าà¸à¸²à¸£à¸à¸³à¸«à¸™à¸”ค่าของลำโพง"
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns [code]true[/code] if the provided [code]point[/code] in world space "
+"is currently owned by the provided navigation [code]region[/code]. Owned in "
+"this context means that one of the region's navigation mesh polygon faces "
+"has a possible position at the closest distance to this point compared to "
+"all other navigation meshes from other navigation regions that are also "
+"registered on the navigation map of the provided region.\n"
+"If multiple navigation meshes have positions at equal distance the "
+"navigation region whose polygons are processed first wins the ownership. "
+"Polygons are processed in the same order that navigation regions were "
+"registered on the NavigationServer.\n"
+"[b]Note:[/b] If navigation meshes from different navigation regions overlap "
+"(which should be avoided in general) the result might not be what is "
+"expected."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]."
+msgstr "คืนค่าà¸à¸²à¸£à¸à¸³à¸«à¸™à¸”ค่าของลำโพง"
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
msgid "Sets the map for the region."
msgstr "คืนค่าà¸à¸²à¸£à¸à¸³à¸«à¸™à¸”ค่าของลำโพง"
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method Navigation2DServer.map_get_path])."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
#, fuzzy
msgid "Sets the navigation mesh for the region."
@@ -35849,6 +36105,11 @@ msgstr "คืนค่าผà¸à¸œà¸±à¸™à¸£à¸¹à¸—สองของพารา
msgid "Sets the global transformation for the region."
msgstr ""
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]."
+msgstr "คืนค่าà¸à¸²à¸£à¸à¸³à¸«à¸™à¸”ค่าของลำโพง"
+
#: doc/classes/NavigationAgent.xml
msgid "3D agent used in navigation for collision avoidance."
msgstr ""
@@ -35858,9 +36119,16 @@ msgid ""
"3D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationAgent] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World] navigation map. If this node is a child of a [Navigation] "
+"node it will register to the navigation map of the navigation node or the "
+"function [method set_navigation] can be used to set the navigation node "
+"directly. [NavigationAgent] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -35878,7 +36146,15 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-msgid "Returns the path from start to finish in global coordinates."
+msgid ""
+"Returns this agent's current path from start to finish in global "
+"coordinates. The path only updates when the target location is changed or "
+"the agent requires a repath. The path array is not intended to be used in "
+"direct path movement as the agent has its own internal path logic that would "
+"get corrupted by changing the path array manually. Use the intended [method "
+"get_next_location] once every physics frame to receive the next path point "
+"for the agents movement as this function also updates the internal path "
+"logic."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -35893,11 +36169,24 @@ msgid ""
"system."
msgstr ""
-#: doc/classes/NavigationAgent.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"Returns a [Vector3] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the origin of the agent's parent."
+"Returns the [RID] of the navigation map for this NavigationAgent node. This "
+"function returns always the map set on the NavigationAgent node and not the "
+"map of the abstract agent on the NavigationServer. If the agent map is "
+"changed directly with the NavigationServer API the NavigationAgent node will "
+"not be aware of the map change. Use [method set_navigation_map] to change "
+"the navigation map for the NavigationAgent and also update the agent on the "
+"NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
+"Returns the next location in global coordinates that can be moved to, making "
+"sure that there are no static objects in the way. If the agent does not have "
+"a navigation path, it will return the position of the agent's parent. The "
+"use of this function once every physics frame is required to update the "
+"internal path logic of the NavigationAgent."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -35939,6 +36228,12 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"Sets the [RID] of the navigation map this NavigationAgent node should use "
+"and also updates the [code]agent[/code] on the NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"Sets the user desired final location. This will clear the current navigation "
"path."
msgstr ""
@@ -35951,7 +36246,13 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml
-msgid "The agent height offset to match the navigation mesh height."
+msgid ""
+"The NavigationAgent height offset is subtracted from the y-axis value of any "
+"vector path position for this NavigationAgent. The NavigationAgent height "
+"offset does not change or influence the navigation mesh or pathfinding query "
+"result. Additional navigation maps that use regions with navigation meshes "
+"that the developer baked with appropriate agent radius or height values are "
+"required to support different-sized agents."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -35978,26 +36279,53 @@ msgstr ""
msgid "The maximum speed that an agent can move."
msgstr ""
+#: doc/classes/NavigationAgent.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "The distance to search for other agents."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"The distance threshold before a path point is considered to be reached. This "
+"will allow an agent to not have to hit a path point on the path exactly, but "
+"in the area. If this value is set to high the NavigationAgent will skip "
+"points on the path which can lead to leaving the navigation mesh. If this "
+"value is set to low the NavigationAgent will be stuck in a repath loop cause "
+"it will constantly overshoot or undershoot the distance to the next point on "
+"each physics frame update."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"The maximum distance the agent is allowed away from the ideal path to the "
"final location. This can happen due to trying to avoid collisions. When the "
"maximum distance is exceeded, it recalculates the ideal path."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-msgid "The radius of the agent."
+msgid ""
+"The radius of the avoidance agent. This is the \"body\" of the avoidance "
+"agent and not the avoidance maneuver starting radius (which is controlled by "
+"[member neighbor_dist]).\n"
+"Does not affect normal pathfinding. To change an actor's pathfinding radius "
+"bake [NavigationMesh] resources with a different [member NavigationMesh."
+"agent_radius] property and use different navigation maps for each actor size."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"The distance threshold before a target is considered to be reached. This "
-"will allow an agent to not have to hit a point on the path exactly, but in "
-"the area."
+"The distance threshold before the final target point is considered to be "
+"reached. This will allow an agent to not have to hit the point of the final "
+"target exactly, but only the area. If this value is set to low the "
+"NavigationAgent will be stuck in a repath loop cause it will constantly "
+"overshoot or undershoot the distance to the final target point on each "
+"physics frame update."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -36040,9 +36368,16 @@ msgid ""
"2D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationAgent2D] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World2D] navigation map. If this node is a child of a "
+"[Navigation2D] node it will register to the navigation map of the navigation "
+"node or the function [method set_navigation] can be used to set the "
+"navigation node directly. [NavigationAgent2D] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent2D.xml
@@ -36058,13 +36393,6 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent2D.xml
-msgid ""
-"Returns a [Vector2] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the position of the agent's parent."
-msgstr ""
-
-#: doc/classes/NavigationAgent2D.xml
#, fuzzy
msgid "Returns the [RID] of this agent on the [Navigation2DServer]."
msgstr "คืนค่าผà¸à¸œà¸±à¸™à¸£à¸¹à¸—สองของพารามิเตอร์"
@@ -36085,6 +36413,13 @@ msgid ""
"only be enabled on agents that currently require it."
msgstr ""
+#: doc/classes/NavigationAgent2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent2D] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationMesh.xml
msgid "A mesh to approximate the walkable areas and obstacles."
msgstr ""
@@ -36115,8 +36450,8 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
-"Returns whether the specified [code]bit[/code] of the [member geometry/"
-"collision_mask] is set."
+"Returns whether the specified [code]bit[/code] of the [member "
+"geometry_collision_mask] is set."
msgstr ""
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
@@ -36138,9 +36473,9 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/"
-"code] in the [member geometry/collision_mask].\n"
+"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]."
+"code] in the [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
@@ -36154,14 +36489,14 @@ 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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36173,7 +36508,7 @@ 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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36201,13 +36536,17 @@ msgstr ""
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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
-"If [code]true[/code], marks walkable spans as not walkable if the clearance "
-"above the span is less than [member agent/height]."
+"If the baking [AABB] has a volume the navigation mesh baking will be "
+"restricted to its enclosing area."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+msgid "The position offset applied to the [member filter_baking_aabb] [AABB]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36217,13 +36556,19 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]true[/code], marks non-walkable spans as walkable if their maximum "
-"is within [member agent/max_climb] of a walkable neighbor."
+"is within [member agent_max_climb] of a walkable neighbor."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+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
msgid ""
"The physics layers to scan for static colliders.\n"
-"Only used when [member geometry/parsed_geometry_type] is [constant "
+"Only used when [member geometry_parsed_geometry_type] is [constant "
"PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]."
msgstr ""
@@ -36242,7 +36587,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"The name of the group to scan for geometry.\n"
-"Only used when [member geometry/source_geometry_mode] is [constant "
+"Only used when [member geometry_source_geometry_mode] is [constant "
"SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant "
"SOURCE_GEOMETRY_GROUPS_EXPLICIT]."
msgstr ""
@@ -36305,7 +36650,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Parses [StaticBody] colliders as geometry. The collider should be in any of "
-"the layers specified by [member geometry/collision_mask]."
+"the layers specified by [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36326,13 +36671,13 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Scans nodes in a group and their child nodes recursively for geometry. The "
-"group is specified by [member geometry/source_group_name]."
+"group is specified by [member geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Uses nodes in a group for geometry. The group is specified by [member "
-"geometry/source_group_name]."
+"geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36374,7 +36719,15 @@ msgid ""
"geometry for walkable terrain suitable to [NavigationMesh] agent properties "
"by creating a voxel world around the meshes bounding area.\n"
"The finalized navigation mesh is then returned and stored inside the "
-"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes."
+"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] "
+"nodes.\n"
+"[b]Note:[/b] Using meshes to not only define walkable surfaces but also "
+"obstruct navigation baking does not always work. The navigation baking has "
+"no concept of what is a geometry \"inside\" when dealing with mesh source "
+"geometry and this is intentional. Depending on current baking parameters, as "
+"soon as the obstructing mesh is large enough to fit a navigation mesh area "
+"inside, the baking will generate navigation mesh areas that are inside the "
+"obstructing source geometry mesh."
msgstr ""
#: doc/classes/NavigationMeshGenerator.xml
@@ -36382,8 +36735,8 @@ msgid ""
"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child "
"nodes under the provided [code]root_node[/code] or a specific group of nodes "
"for potential source geometry. The parse behavior can be controlled with the "
-"[member NavigationMesh.geometry/parsed_geometry_type] and [member "
-"NavigationMesh.geometry/source_geometry_mode] properties on the "
+"[member NavigationMesh.geometry_parsed_geometry_type] and [member "
+"NavigationMesh.geometry_source_geometry_mode] properties on the "
"[NavigationMesh] resource."
msgstr ""
@@ -36400,8 +36753,21 @@ msgstr ""
#: doc/classes/NavigationMeshInstance.xml
msgid ""
"An instance of a [NavigationMesh]. It tells the [Navigation] node what can "
-"be navigated and what cannot, based on the [NavigationMesh] resource. This "
-"should be a child of a [Navigation] node."
+"be navigated and what cannot, based on the [NavigationMesh] resource.\n"
+"By default this node will register to the default [World] navigation map. If "
+"this node is a child of a [Navigation] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method NavigationServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The cost of entering this region from another region can be controlled with "
+"the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The cost of traveling distances inside this region can be controlled with "
+"the [member travel_cost] multiplier."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
@@ -36430,10 +36796,34 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding enters this region's navmesh from another regions navmesh "
+"the [code]enter_cost[/code] value is added to the path distance for "
+"determining the shortest path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationMesh] "
+"belongs to. On path requests with [method NavigationServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
msgid "The [NavigationMesh] resource to use."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding moves inside this region's navmesh the traveled distances "
+"are multiplied with [code]travel_cost[/code] for determining the shortest "
+"path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
msgid "Notifies when the navigation mesh bake operation is completed."
msgstr ""
@@ -36450,7 +36840,9 @@ msgid ""
"3D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationObstacle] is physics safe."
+"[NavigationObstacle] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle.xml
@@ -36490,7 +36882,9 @@ msgid ""
"2D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationObstacle2D] is physics safe."
+"[NavigationObstacle2D] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle2D.xml
@@ -36570,6 +36964,14 @@ msgstr ""
#: doc/classes/NavigationPolygon.xml
msgid ""
+"Returns the [NavigationMesh] resulting from this navigation polygon. This "
+"navmesh can be used to update the navmesh of a region with the [method "
+"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server "
+"behind the scene)."
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml
+msgid ""
"Returns a [PoolVector2Array] containing the vertices of an outline that was "
"created in the editor or by script."
msgstr ""
@@ -36606,6 +37008,30 @@ msgid ""
msgstr ""
#: doc/classes/NavigationPolygonInstance.xml
+msgid "A region of the 2D navigation map."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A region of the navigation map. It tells the [Navigation2DServer] what can "
+"be navigated and what cannot, based on its [NavigationPolygon] resource.\n"
+"By default this node will register to the default [World2D] navigation map. "
+"If this node is a child of a [Navigation2D] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The pathfinding cost of entering this region from another region can be "
+"controlled with the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The pathfinding cost of traveling distances inside this region can be "
+"controlled with the [member travel_cost] multiplier."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
msgid ""
"Returns the [RID] of this region on the [Navigation2DServer]. Combined with "
"[method Navigation2DServer.map_get_closest_point_owner] can be used to "
@@ -36613,6 +37039,22 @@ msgid ""
"navigation map."
msgstr ""
+#: doc/classes/NavigationPolygonInstance.xml
+msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationPolygon] "
+"belongs to. On path requests with [method Navigation2DServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid "The [NavigationPolygon] resource to use."
+msgstr ""
+
#: doc/classes/NavigationServer.xml
msgid "Server interface for low-level 3D navigation access."
msgstr ""
@@ -36691,6 +37133,12 @@ msgid "Bakes the navigation mesh."
msgstr ""
#: doc/classes/NavigationServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method NavigationServer.map_get_path])."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
msgid "Control activation of this server."
msgstr ""
@@ -38207,13 +38655,19 @@ msgstr ""
#: doc/classes/Node.xml
msgid ""
"Emitted when a child node enters the scene tree, either because it entered "
-"on its own or because this node entered with it."
+"on its own or because this node entered with it.\n"
+"This signal is emitted [i]after[/i] the child node's own [constant "
+"NOTIFICATION_ENTER_TREE] and [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
msgid ""
-"Emitted when a child node exits the scene tree, either because it exited on "
-"its own or because this node exited."
+"Emitted when a child node is about to exit the scene tree, either because it "
+"is being removed or freed directly, or because this node is exiting the "
+"tree.\n"
+"When this signal is received, the child [code]node[/code] is still in the "
+"tree and valid. This signal is emitted [i]after[/i] the child node's own "
+"[signal tree_exiting] and [constant NOTIFICATION_EXIT_TREE]."
msgstr ""
#: doc/classes/Node.xml
@@ -38225,7 +38679,10 @@ msgid "Emitted when the node is renamed."
msgstr ""
#: doc/classes/Node.xml
-msgid "Emitted when the node enters the tree."
+msgid ""
+"Emitted when the node enters the tree.\n"
+"This signal is emitted [i]after[/i] the related [constant "
+"NOTIFICATION_ENTER_TREE] notification."
msgstr ""
#: doc/classes/Node.xml
@@ -38235,15 +38692,21 @@ msgstr ""
#: doc/classes/Node.xml
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)."
+"the right place for de-initialization (or a \"destructor\", if you will).\n"
+"This signal is emitted [i]before[/i] the related [constant "
+"NOTIFICATION_EXIT_TREE] notification."
msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node enters a [SceneTree]."
+msgid ""
+"Notification received when the node enters a [SceneTree].\n"
+"This notification is emitted [i]before[/i] the related [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node is about to exit a [SceneTree]."
+msgid ""
+"Notification received when the node is about to exit a [SceneTree].\n"
+"This notification is emitted [i]after[/i] the related [signal tree_exiting]."
msgstr ""
#: doc/classes/Node.xml
@@ -38504,7 +38967,13 @@ msgid "Rotation in degrees, relative to the node's parent."
msgstr ""
#: doc/classes/Node2D.xml
-msgid "The node's scale. Unscaled value: [code](1, 1)[/code]."
+msgid ""
+"The node's scale. Unscaled value: [code](1, 1)[/code].\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
#: doc/classes/Node2D.xml
@@ -39946,6 +40415,10 @@ msgid ""
" if argument.find(\"=\") > -1:\n"
" var key_value = argument.split(\"=\")\n"
" arguments[key_value[0].lstrip(\"--\")] = key_value[1]\n"
+" else:\n"
+" # Options without an argument will be present in the dictionary,\n"
+" # with the value set to an empty string.\n"
+" arguments[argument.lstrip(\"--\")] = \"\"\n"
"[/codeblock]"
msgstr ""
@@ -40601,8 +41074,15 @@ msgstr ""
msgid ""
"Moves the file or directory to the system's recycle bin. See also [method "
"Directory.remove].\n"
+"The method takes only global paths, so you may need to use [method "
+"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/"
+"code] as it will not work in exported project.\n"
"[b]Note:[/b] If the user has disabled the recycle bin on their system, the "
-"file will be permanently deleted instead."
+"file will be permanently deleted instead.\n"
+"[codeblock]\n"
+"var file_to_remove = \"user://slot1.sav\"\n"
+"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/OS.xml
@@ -45446,7 +45926,18 @@ msgstr ""
#: doc/classes/PopupMenu.xml
msgid ""
"[PopupMenu] is a [Control] that displays a list of options. They are popular "
-"in toolbars or context menus."
+"in toolbars or context menus.\n"
+"[b]Incremental search:[/b] Like [ItemList] and [Tree], [PopupMenu] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/PopupMenu.xml
@@ -46955,7 +47446,16 @@ msgid ""
msgstr ""
#: doc/classes/ProjectSettings.xml
-msgid "Message to be displayed before the backtrace when the engine crashes."
+msgid ""
+"Message to be displayed before the backtrace when the engine crashes. By "
+"default, this message is only used in exported projects due to the editor-"
+"only override applied to this setting."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Editor-only override for [member debug/settings/crash_handler/message]. Does "
+"not affect exported projects in debug or release mode."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -47200,6 +47700,18 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default naming style for scene files to infer from their root nodes. "
+"Possible options are:\n"
+"- [code]0[/code] (Auto): Uses the scene root name as is without changing its "
+"casing.\n"
+"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase "
+"casing.\n"
+"- [code]2[/code] (snake_case): Converts the scene root name to snake_case "
+"casing."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -47430,6 +47942,198 @@ msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 1."
msgstr ""
@@ -47638,6 +48342,198 @@ msgid "Optional name for the 2D render layer 9."
msgstr ""
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 1."
msgstr ""
@@ -47905,6 +48801,49 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default cell height for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_height].\n"
+"[b]Note:[/b] Currently not implemented."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 2D navigation maps. See [method "
+"Navigation2DServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell height for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_height]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 3D navigation maps. See [method "
+"NavigationServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default map up vector for 3D navigation maps. See [method NavigationServer."
+"map_set_up]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -48578,20 +49517,28 @@ msgid ""
"cause.\n"
"The default value is a conservative one, so you are advised to tweak it "
"according to the hardware you are targeting.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"The default is a very conservative override for [code]rendering/gles3/"
-"shaders/max_concurrent_compiles[/code].\n"
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
"Depending on the specific devices you are targeting, you may want to raise "
"it.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
+"Depending on the specific browsers you are targeting, you may want to raise "
+"it.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -48599,19 +49546,28 @@ msgid ""
"The maximum size, in megabytes, that the ubershader cache can grow up to. On "
"startup, the least recently used entries will be deleted until the total "
"size is within bounds.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/ubershader_cache_size_mb[/"
-"code], so a smaller maximum size can be configured for mobile platforms, "
-"where storage space is more limited.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for mobile platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for web platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] Currently, shader caching is generally unavailable on web "
+"platforms.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -48643,14 +49599,22 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/shader_compilation_mode[/"
-"code], so asynchronous compilation can be disabled for mobile.\n"
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on mobile platforms.\n"
"You may want to do that since mobile GPUs generally won't support "
"ubershaders due to their complexity."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on web platforms.\n"
+"You may want to do that since certain browsers (especially on mobile "
+"platforms) generally won't support ubershaders due to their complexity."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
@@ -49408,7 +50372,6 @@ msgid ""
"- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/"
"code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, "
"small grid radius values may lead to unwanted groupings.\n"
-"[/codeblock]\n"
"[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more "
"effective and faster [VisibilityNotifier] functionality. For most use cases, "
"[method Vector3.distance_to] or [method Vector3.distance_squared_to] are "
@@ -51557,6 +52520,22 @@ msgid "Makes text fill width."
msgstr ""
#: doc/classes/RichTextLabel.xml
+msgid "Aligns top of the inline image to the top of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns center of the inline image to the center of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns bottom of the inline image to the baseline of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns bottom of the inline image to the bottom of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
msgid "Each list item has a number marker."
msgstr ""
@@ -53294,8 +54273,8 @@ msgid ""
" yield(get_tree().create_timer(1.0), \"timeout\")\n"
" print(\"Timer ended.\")\n"
"[/codeblock]\n"
-"The timer will be automatically freed after its time elapses, so be aware "
-"that any reference you might have kept to it will become invalid."
+"The timer will be dereferenced after its time elapses. To preserve the "
+"timer, you can keep a reference to it. See [Reference]."
msgstr ""
#: doc/classes/SceneTreeTimer.xml
@@ -53327,24 +54306,23 @@ msgid ""
"manually (i.e. by using [code]Tween.new()[/code]) are invalid. They can't be "
"used for tweening values, but you can do manual interpolation with [method "
"interpolate_value].\n"
-"A [SceneTreeTween] animation is composed of a sequence of [Tweener]s, which "
-"by default are executed one after another. You can create a sequence by "
-"appending [Tweener]s to the [SceneTreeTween]. Animating something with a "
-"[Tweener] is called tweening. Example tweening sequence looks like this:\n"
+"A tween animation is created by adding [Tweener]s to the [SceneTreeTween] "
+"object, using [method tween_property], [method tween_interval], [method "
+"tween_callback] or [method tween_method]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1)\n"
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"This sequence will make the [code]$Sprite[/code] node turn red, then shrink "
-"and finally the [method Node.queue_free] is called to remove the sprite. See "
-"methods [method tween_property], [method tween_interval], [method "
-"tween_callback] and [method tween_method] for more usage information.\n"
+"This sequence will make the [code]$Sprite[/code] node turn red, then shrink, "
+"before finally calling [method Node.queue_free] to free the sprite. "
+"[Tweener]s are executed one after another by default. This behavior can be "
+"changed using [method parallel] and [method set_parallel].\n"
"When a [Tweener] is created with one of the [code]tween_*[/code] methods, a "
"chained method call can be used to tweak the properties of this [Tweener]. "
-"For example, if you want to set different transition type in the above "
-"example, you can do:\n"
+"For example, if you want to set a different transition type in the above "
+"example, you can use [method set_trans]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1).set_trans(Tween."
@@ -53353,8 +54331,9 @@ msgid ""
"TRANS_BOUNCE)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Most of the [SceneTreeTween] methods can be chained this way too. In this "
-"example the [SceneTreeTween] is bound and have set a default transition:\n"
+"Most of the [SceneTreeTween] methods can be chained this way too. In the "
+"following example the [SceneTreeTween] is bound to the running script's node "
+"and a default transition is set for its [Tweener]s:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween().bind_node(self).set_trans(Tween."
"TRANS_ELASTIC)\n"
@@ -53362,16 +54341,16 @@ msgid ""
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Another interesting use for [SceneTreeTween]s is animating arbitrary set of "
+"Another interesting use for [SceneTreeTween]s is animating arbitrary sets of "
"objects:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"for sprite in get_children():\n"
-" tween.tween_property(sprite, \"position\", Vector2(), 1)\n"
+" tween.tween_property(sprite, \"position\", Vector2(0, 0), 1)\n"
"[/codeblock]\n"
"In the example above, all children of a node are moved one after another to "
"position (0, 0).\n"
-"Some [Tweener]s use transitions and eases. The first accepts an [enum Tween."
+"Some [Tweener]s use transitions and eases. The first accepts a [enum Tween."
"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 Tween.EaseType] constant, and "
@@ -53383,7 +54362,7 @@ msgid ""
"tween_cheatsheet.png]Tween easing and transition types cheatsheet[/url]\n"
"[b]Note:[/b] All [SceneTreeTween]s will automatically start by default. To "
"prevent a [SceneTreeTween] from autostarting, you can call [method stop] "
-"immediately after it was created."
+"immediately after it is created."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53413,21 +54392,24 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
-"Processes the [SceneTreeTween] by given [code]delta[/code] value, in "
-"seconds. Mostly useful when the [SceneTreeTween] is paused, for controlling "
-"it manually. Can also be used to end the [SceneTreeTween] animation "
-"immediately, by using [code]delta[/code] longer than the whole duration.\n"
+"Processes the [SceneTreeTween] by the given [code]delta[/code] value, in "
+"seconds. This is mostly useful for manual control when the [SceneTreeTween] "
+"is paused. It can also be used to end the [SceneTreeTween] animation "
+"immediately, by setting [code]delta[/code] longer than the whole duration of "
+"the [SceneTreeTween] animation.\n"
"Returns [code]true[/code] if the [SceneTreeTween] still has [Tweener]s that "
"haven't finished.\n"
-"[b]Note:[/b] The [SceneTreeTween] will become invalid after finished, but "
-"you can call [method stop] after the step, to keep it and reset."
+"[b]Note:[/b] The [SceneTreeTween] will become invalid in the next processing "
+"frame after its animation finishes. Calling [method stop] after performing "
+"[method custom_step] instead keeps and resets the [SceneTreeTween]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Returns the total time in seconds the [SceneTreeTween] has been animating (i."
-"e. time since it started, not counting pauses etc.). The time is affected by "
-"[method set_speed_scale] and [method stop] will reset it to [code]0[/code].\n"
+"e. the time since it started, not counting pauses etc.). The time is "
+"affected by [method set_speed_scale], and [method stop] will reset it to "
+"[code]0[/code].\n"
"[b]Note:[/b] As it results from accumulating frame deltas, the time returned "
"after the [SceneTreeTween] has finished animating will be slightly greater "
"than the actual [SceneTreeTween] duration."
@@ -53463,11 +54445,10 @@ msgstr ""
msgid ""
"Returns whether the [SceneTreeTween] is valid. A valid [SceneTreeTween] is a "
"[SceneTreeTween] contained by the scene tree (i.e. the array from [method "
-"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). "
-"[SceneTreeTween] might become invalid when it has finished tweening or was "
-"killed, also when created with [code]Tween.new()[/code]. Invalid "
-"[SceneTreeTween] can't have [Tweener]s appended, because it can't animate "
-"them. You can however still use [method interpolate_value]."
+"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). A "
+"[SceneTreeTween] might become invalid when it has finished tweening, is "
+"killed, or when created with [code]SceneTreeTween.new()[/code]. Invalid "
+"[SceneTreeTween]s can't have [Tweener]s appended."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53507,16 +54488,15 @@ msgstr ""
msgid ""
"Sets the number of times the tweening sequence will be repeated, i.e. "
"[code]set_loops(2)[/code] will run the animation twice.\n"
-"Calling this method without arguments will make the [SceneTreeTween] run "
-"infinitely, until it is either killed by [method kill] or by freeing bound "
-"node, or all the animated objects have been freed (which makes further "
+"Calling this method without arguments will make the [Tween] run infinitely, "
+"until either it is killed with [method kill], the [Tween]'s bound node is "
+"freed, or all the animated objects have been freed (which makes further "
"animation impossible).\n"
"[b]Warning:[/b] Make sure to always add some duration/delay when using "
-"infinite loops. 0-duration looped animations (e.g. single [CallbackTweener] "
-"with no delay or [PropertyTweener] with invalid node) are equivalent to "
-"infinite [code]while[/code] loops and will freeze your game. If a "
-"[SceneTreeTween]'s lifetime depends on some node, always use [method "
-"bind_node]."
+"infinite loops. To prevent the game freezing, 0-duration looped animations "
+"(e.g. a single [CallbackTweener] with no delay) are stopped after a small "
+"number of loops, which may produce unexpected results. If a [Tween]'s "
+"lifetime depends on some node, always use [method bind_node]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53578,10 +54558,10 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Creates and appends an [IntervalTweener]. This method can be used to create "
-"delays in the tween animation, as an alternative for using the delay in "
-"other [Tweener]s or when there's no animation (in which case the "
-"[SceneTreeTween] acts as a timer). [code]time[/code] is the length of the "
-"interval, in seconds.\n"
+"delays in the tween animation, as an alternative to using the delay in other "
+"[Tweener]s, or when there's no animation (in which case the [SceneTreeTween] "
+"acts as a timer). [code]time[/code] is the length of the interval, in "
+"seconds.\n"
"Example: creating an interval in code execution.\n"
"[codeblock]\n"
"# ... some code\n"
@@ -53635,8 +54615,8 @@ msgid ""
"Creates and appends a [PropertyTweener]. This method tweens a "
"[code]property[/code] of an [code]object[/code] between an initial value and "
"[code]final_val[/code] in a span of time equal to [code]duration[/code], in "
-"seconds. The initial value by default is a value at the time the tweening of "
-"the [PropertyTweener] start. For example:\n"
+"seconds. The initial value by default is the property's value at the time "
+"the tweening of the [PropertyTweener] starts. For example:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"tween.tween_property($Sprite, \"position\", Vector2(100, 200), 1)\n"
@@ -53667,16 +54647,15 @@ msgid ""
"Emitted when the [SceneTreeTween] has finished all tweening. Never emitted "
"when the [SceneTreeTween] is set to infinite looping (see [method "
"set_loops]).\n"
-"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) after this signal "
-"is emitted, but it doesn't happen immediately, but on the next processing "
-"frame. Calling [method stop] inside the signal callback will preserve the "
-"[SceneTreeTween]."
+"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) in the next "
+"processing frame after this signal is emitted. Calling [method stop] inside "
+"the signal callback will prevent the [SceneTreeTween] from being removed."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Emitted when a full loop is complete (see [method set_loops]), providing the "
-"loop index. This signal is not emitted after final loop, use [signal "
+"loop index. This signal is not emitted after the final loop, use [signal "
"finished] instead for this case."
msgstr ""
@@ -53684,7 +54663,7 @@ msgstr ""
msgid ""
"Emitted when one step of the [SceneTreeTween] is complete, providing the "
"step index. One step is either a single [Tweener] or a group of [Tweener]s "
-"running parallelly."
+"running in parallel."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -55016,7 +55995,12 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-msgid "Scale part of the local transformation."
+msgid ""
+"Scale part of the local transformation.\n"
+"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, the scale values will either be all "
+"positive or all negative."
msgstr ""
#: doc/classes/Spatial.xml
@@ -57650,11 +58634,11 @@ msgstr ""
msgid ""
"Returns [code]true[/code] if this string contains a valid integer.\n"
"[codeblock]\n"
-"print(\"7\".is_valid_int()) # Prints \"True\"\n"
-"print(\"14.6\".is_valid_int()) # Prints \"False\"\n"
-"print(\"L\".is_valid_int()) # Prints \"False\"\n"
-"print(\"+3\".is_valid_int()) # Prints \"True\"\n"
-"print(\"-12\".is_valid_int()) # Prints \"True\"\n"
+"print(\"7\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"14.6\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"L\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"+3\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"-12\".is_valid_integer()) # Prints \"True\"\n"
"[/codeblock]"
msgstr ""
@@ -61124,6 +62108,10 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml
+msgid "If [code]true[/code], this TileMap bakes a navigation region."
+msgstr ""
+
+#: doc/classes/TileMap.xml
msgid "If [code]true[/code], the cell's UVs will be clipped."
msgstr ""
@@ -61230,6 +62218,10 @@ msgid "The TileMap orientation mode. See [enum Mode] for possible values."
msgstr ""
#: doc/classes/TileMap.xml
+msgid "The navigation layers the TileMap generates its navigation regions in."
+msgstr ""
+
+#: doc/classes/TileMap.xml
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 "
@@ -62361,7 +63353,12 @@ msgstr ""
#: doc/classes/Transform2D.xml
msgid ""
"Returns a copy of the transform scaled by the given [code]scale[/code] "
-"factor, using matrix multiplication."
+"factor, using matrix multiplication.\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
#: doc/classes/Transform2D.xml
@@ -62516,7 +63513,18 @@ msgid ""
"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]."
+"to remove it from the [Tree].\n"
+"[b]Incremental search:[/b] Like [ItemList] and [PopupMenu], [Tree] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/Tree.xml
@@ -66045,11 +67053,12 @@ msgid "This enabler will stop [Particles2D] nodes."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _process function."
+msgid "This enabler will stop the parent's [method Node._process] function."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _physics_process function."
+msgid ""
+"This enabler will stop the parent's [method Node._physics_process] function."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
@@ -66089,6 +67098,16 @@ msgid "The VisibilityNotifier's bounding box."
msgstr ""
#: doc/classes/VisibilityNotifier.xml
+msgid ""
+"In addition to checking whether a node is on screen or within a [Camera]'s "
+"view, VisibilityNotifier can also optionally check whether a node is within "
+"a specified maximum distance when using a [Camera] with perspective "
+"projection. This is useful for throttling the performance requirements of "
+"nodes that are far away.\n"
+"[b]Note:[/b] This feature will be disabled if set to 0.0."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier.xml
msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view."
msgstr ""
@@ -70838,6 +71857,16 @@ msgid "The amount of shader rebinds in the frame."
msgstr ""
#: doc/classes/VisualServer.xml
+msgid ""
+"The peak amount of shaders that have been under compilation in the frame.\n"
+"This is useful to know when asynchronous shader compilation has finished for "
+"the current shaders on screen.\n"
+"[b]Note:[/b] For complete certainty, only assume there are no outstanding "
+"compilations when this value is zero for at least two frames in a row.\n"
+"Unimplemented in the GLES2 rendering backend, always returns 0."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
msgid "The amount of surface changes in the frame."
msgstr ""
@@ -74037,8 +75066,8 @@ msgstr ""
#: doc/classes/World.xml
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."
+"scenario, a navigation map and a sound space. Spatial nodes register their "
+"resources into the current world."
msgstr ""
#: doc/classes/World.xml
@@ -74053,11 +75082,17 @@ msgstr ""
#: doc/classes/World.xml
msgid ""
-"The World's fallback_environment will be used if the World's [Environment] "
-"fails or is missing."
+"The World's fallback environment will be used if [member environment] fails "
+"or is missing."
msgstr ""
#: doc/classes/World.xml
+#, fuzzy
+msgid ""
+"The [RID] of this world's navigation map. Used by the [NavigationServer]."
+msgstr "คืนค่าผà¸à¸œà¸±à¸™à¸£à¸¹à¸—สองของพารามิเตอร์"
+
+#: doc/classes/World.xml
msgid "The World's visual scenario."
msgstr ""
@@ -74072,8 +75107,8 @@ msgstr ""
#: doc/classes/World2D.xml
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."
+"visual scenario, a navigation map and a sound space. 2D nodes register their "
+"resources into the current 2D world."
msgstr ""
#: doc/classes/World2D.xml
@@ -74090,6 +75125,12 @@ msgid ""
msgstr ""
#: doc/classes/World2D.xml
+#, fuzzy
+msgid ""
+"The [RID] of this world's navigation map. Used by the [Navigation2DServer]."
+msgstr "คืนค่าผà¸à¸œà¸±à¸™à¸£à¸¹à¸—สองของพารามิเตอร์"
+
+#: doc/classes/World2D.xml
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."
diff --git a/doc/translations/tl.po b/doc/translations/tl.po
index 7a862413b9..4361ff7318 100644
--- a/doc/translations/tl.po
+++ b/doc/translations/tl.po
@@ -387,7 +387,7 @@ msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
msgid ""
"Compares two values by checking their actual contents, recursing into any "
-"`Array` or `Dictionary` up to its deepest level.\n"
+"[Array] or [Dictionary] up to its deepest level.\n"
"This compares to [code]==[/code] in a number of ways:\n"
"- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/"
"code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] "
@@ -441,7 +441,7 @@ msgid ""
"- 1.0: Linear\n"
"- Greater than 1.0 (exclusive): Ease in\n"
"[/codeblock]\n"
-"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.4/img/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/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]."
@@ -1178,7 +1178,7 @@ msgid ""
"[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/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/img/"
"smoothstep_ease_comparison.png]Comparison between smoothstep() and ease(x, "
"-1.6521) return values[/url]"
msgstr ""
@@ -3456,6 +3456,12 @@ msgstr ""
#: doc/classes/@GlobalScope.xml
msgid ""
+"Hints that an integer property is a bitmask using the optionally named 2D "
+"navigation layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml
+msgid ""
"Hints that an integer property is a bitmask using the optionally named 3D "
"render layers."
msgstr ""
@@ -3468,6 +3474,12 @@ msgstr ""
#: doc/classes/@GlobalScope.xml
msgid ""
+"Hints that an integer property is a bitmask using the optionally named 3D "
+"navigation layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml
+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]."
@@ -8443,7 +8455,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/AStar.xml
+#: doc/classes/AStar.xml doc/classes/AStar2D.xml
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[/"
@@ -8642,7 +8654,10 @@ msgid ""
msgstr ""
#: doc/classes/AStar2D.xml
-msgid "Returns whether there is a connection/segment between the given points."
+msgid ""
+"Returns whether there is a connection/segment between the given points. 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/AStar2D.xml
@@ -8659,10 +8674,6 @@ msgid ""
msgstr ""
#: doc/classes/AStar2D.xml
-msgid "Deletes the segment between the given points."
-msgstr ""
-
-#: doc/classes/AStar2D.xml
msgid ""
"Returns the closest position to [code]to_position[/code] that resides inside "
"a segment between two connected points.\n"
@@ -8847,7 +8858,9 @@ msgid ""
"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."
+"transmit audio over the network. When capturing audio data from a "
+"microphone, the format of the samples will be stereo 32-bit floating point "
+"PCM."
msgstr ""
#: doc/classes/AudioEffectCapture.xml
@@ -13697,7 +13710,7 @@ msgid ""
msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
-#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/Navigation2D.xml
msgid "Returns the object's [RID]."
msgstr ""
@@ -19172,11 +19185,14 @@ msgid ""
msgstr ""
#: doc/classes/CurveTexture.xml
-msgid "The [code]curve[/code] rendered onto the texture."
+msgid "The [Curve] that is rendered onto the texture."
msgstr ""
#: doc/classes/CurveTexture.xml
-msgid "The width of the texture."
+msgid ""
+"The width of the texture (in pixels). Higher values make it possible to "
+"represent high-frequency data better (such as sudden direction changes), at "
+"the cost of increased generation time and memory usage."
msgstr ""
#: doc/classes/CylinderMesh.xml
@@ -19462,6 +19478,13 @@ msgid "Returns the list of keys in the [Dictionary]."
msgstr ""
#: doc/classes/Dictionary.xml
+msgid ""
+"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, "
+"duplicate keys will not be copied over, unless [code]overwrite[/code] is "
+"[code]true[/code]."
+msgstr ""
+
+#: doc/classes/Dictionary.xml
msgid "Returns the number of keys in the dictionary."
msgstr ""
@@ -21403,9 +21426,23 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide a state data you want to be saved, like view "
+"position, grid settings, folding, etc. 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). This data is automatically saved for "
+"each scene in an [code]editstate[/code] file in the editor metadata folder. "
+"If you want to store global (scene-independent) editor data for your plugin, "
+"you can use [method get_window_layout] instead.\n"
+"Use [method set_state] to restore your saved state.\n"
+"[b]Note:[/b] This method should not be used to save important settings that "
+"should persist with the project.\n"
+"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be "
+"stored and restored correctly.\n"
+"[codeblock]\n"
+"func get_state():\n"
+" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n"
+" return state\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -21416,9 +21453,18 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide the GUI layout of the plugin or any other "
+"data you want to be stored. 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). The data is stored in the "
+"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n"
+"Use [method set_window_layout] to restore your saved layout.\n"
+"[codeblock]\n"
+"func get_window_layout(configuration):\n"
+" configuration.set_value(\"MyPlugin\", \"window_position\", $Window."
+"position)\n"
+" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -21531,11 +21577,30 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the state saved by [method get_state]."
+msgid ""
+"Restore the state saved by [method get_state]. This method is called when "
+"the current scene tab is changed in the editor.\n"
+"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise "
+"it will not be recognized and this method will not be called.\n"
+"[codeblock]\n"
+"func set_state(data):\n"
+" zoom = data.get(\"zoom\", 1.0)\n"
+" preferred_color = data.get(\"my_color\", Color.white)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the plugin GUI layout saved by [method get_window_layout]."
+msgid ""
+"Restore the plugin GUI layout and data saved by [method get_window_layout]. "
+"This method is called for every plugin on editor startup. Use the provided "
+"[code]configuration[/code] file to read your saved data.\n"
+"[codeblock]\n"
+"func set_window_layout(configuration):\n"
+" $Window.position = configuration.get_value(\"MyPlugin\", "
+"\"window_position\", Vector2())\n"
+" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", "
+"Color.white)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -26173,7 +26238,8 @@ msgid ""
"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])."
+"at fixed steps (see [member width]). See also [GradientTexture2D] and "
+"[CurveTexture]."
msgstr ""
#: doc/classes/GradientTexture.xml
@@ -26195,7 +26261,8 @@ msgid ""
"repeat] types using colors obtained from the gradient. 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] and [member height])."
+"[member width] and [member height]). See also [GradientTexture] and "
+"[CurveTexture]."
msgstr ""
#: doc/classes/GradientTexture2D.xml
@@ -27001,6 +27068,12 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+msgid ""
+"If [code]true[/code], this GridMap uses cell navmesh resources to create "
+"navigation regions."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid "If [code]true[/code], grid items are centered on the X axis."
msgstr ""
@@ -27051,6 +27124,10 @@ msgid "The assigned [MeshLibrary]."
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+msgid "The navigation layers the GridMap generates its navigation regions in."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
"Overrides the default friction and bounce physics properties for the whole "
"[GridMap]."
@@ -28274,7 +28351,7 @@ msgid ""
" # 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 body = to_json({\"name\": \"Godette\"})\n"
" error = http_request.request(\"https://httpbin.org/post\", [], true, "
"HTTPClient.METHOD_POST, body)\n"
" if error != OK:\n"
@@ -29441,7 +29518,7 @@ msgstr ""
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 "
+"([member 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 "
@@ -29590,10 +29667,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Returns the mouse mode. See the constants for more information."
-msgstr ""
-
-#: doc/classes/Input.xml
msgid ""
"Gets an input vector by specifying four actions for the positive and "
"negative X and Y axes.\n"
@@ -29787,24 +29860,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Sets the mouse mode. See the constants for more information."
-msgstr ""
-
-#: doc/classes/Input.xml
-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
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 "
@@ -29840,6 +29895,24 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
+msgid "Controls the mouse mode. See [enum MouseMode] for more information."
+msgstr ""
+
+#: doc/classes/Input.xml
+msgid ""
+"If [code]true[/code], similar input events sent by the operating system are "
+"accumulated. 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 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
msgid "Emitted when a joypad device has been connected or disconnected."
msgstr ""
@@ -30147,8 +30220,8 @@ msgstr ""
#: doc/classes/InputEventJoypadButton.xml
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]."
+"Represents the pressure the user puts on the button with their finger, if "
+"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]."
msgstr ""
#: doc/classes/InputEventJoypadMotion.xml
@@ -30411,9 +30484,9 @@ 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 "
+"at most. If you need more precise input reporting, set [member Input."
+"use_accumulated_input] to [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."
@@ -30900,7 +30973,18 @@ msgid ""
"[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."
+"fixed_column_width] greater than zero to wrap the text.\n"
+"[b]Incremental search:[/b] Like [PopupMenu] and [Tree], [ItemList] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/ItemList.xml
@@ -34659,11 +34743,16 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Returns the override [Material] for a surface of the [Mesh] resource.\n"
+"[b]Note:[/b] This function only returns [i]override[/i] materials associated "
+"with this [MeshInstance]. Consider using [method get_active_material] or "
+"[method Mesh.surface_get_material] to get materials associated with the "
+"[Mesh] resource."
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the number of surface materials."
+msgid "Returns the number of surface override materials."
msgstr ""
#: doc/classes/MeshInstance.xml
@@ -34700,7 +34789,10 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Sets the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Sets the override [Material] for the specified surface of the [Mesh] "
+"resource. This material is associated with this [MeshInstance] rather than "
+"with the [Mesh] resource."
msgstr ""
#: doc/classes/MeshInstance.xml
@@ -34731,9 +34823,10 @@ msgstr ""
#: doc/classes/MeshInstance2D.xml
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\"."
+"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be "
+"automatically created from an existing [Sprite] via a tool in the editor "
+"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to "
+"MeshInstance2D[/b] at the top of the 2D editor viewport."
msgstr ""
#: doc/classes/MeshInstance2D.xml
@@ -35491,6 +35584,9 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"Provides navigation and pathfinding within a collection of "
"[NavigationMesh]es. By default, these will be automatically collected from "
"child [NavigationMeshInstance] nodes. In addition to basic pathfinding, this "
@@ -35531,7 +35627,14 @@ msgid ""
msgstr ""
#: doc/classes/Navigation.xml
+msgid "Returns the [RID] of the navigation map on the [NavigationServer]."
+msgstr ""
+
+#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"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, "
@@ -35553,16 +35656,31 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation.get_simple_path] path query."
+msgstr ""
+
+#: doc/classes/Navigation.xml
+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/Navigation.xml doc/classes/Navigation2DServer.xml
+#: doc/classes/NavigationServer.xml
+msgid ""
+"Emitted when a navigation map is updated, when a region moves or is modified."
+msgstr ""
+
#: doc/classes/Navigation2D.xml
msgid "2D navigation and pathfinding node."
msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -35582,6 +35700,9 @@ msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -35591,6 +35712,12 @@ msgstr ""
msgid "The XY plane cell size to use for fields."
msgstr ""
+#: doc/classes/Navigation2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation2D.get_simple_path] path query."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml
msgid "Server interface for low-level 2D navigation access."
msgstr ""
@@ -35607,8 +35734,12 @@ msgid ""
"through scripts.\n"
"For two regions to be connected to each other, they must share a similar "
"edge. An edge is considered connected to another if both of its two vertices "
-"are at a distance less than [member Navigation.edge_connection_margin] to "
-"the respective other edge's vertex.\n"
+"are at a distance less than navigation map [code]edge_connection_margin[/"
+"code] to the respective other edge's vertex.\n"
+"You may assign navigation layers to regions with [method Navigation2DServer."
+"region_set_navigation_layers], which then can be checked upon when "
+"requesting a path with [method Navigation2DServer.map_get_path]. This allows "
+"allowing or forbidding some areas to 2D objects.\n"
"To use the collision avoidance system, you may use agents. You can set an "
"agent's target velocity, then the servers will emit a callback with a "
"modified velocity.\n"
@@ -35639,7 +35770,17 @@ msgstr ""
"so-sort ay hindi pinapagana."
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Callback called at the end of the RVO process."
+msgid ""
+"Callback called at the end of the RVO process. If a callback is created "
+"manually and the agent is placed on a navigation map it will calculate "
+"avoidance for the agent and dispatch the calculated [code]safe_velocity[/"
+"code] to the [code]receiver[/code] object with a signal to the chosen "
+"[code]method[/code] name.\n"
+"[b]Note:[/b] Created callbacks are always processed independently of the "
+"SceneTree state as long as the agent is on a navigation map and not freed. "
+"To disable the dispatch of a callback from an agent use [method "
+"agent_set_callback] again with a [code]null[/code] object as the "
+"[code]receiver[/code]."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -35694,15 +35835,55 @@ msgid "Destroys the given RID."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns all created navigation map [RID]s on the NavigationServer. This "
+"returns both 2D and 3D created navigation maps as there is technically no "
+"distinction between them."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Create a new map."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"This function immediately forces synchronization of the specified navigation "
+"[code]map[/code] [RID]. By default navigation maps are only synchronized at "
+"the end of each physics frame. This function can be used to immediately "
+"(re)calculate all the navigation meshes and region connections of the "
+"navigation map. This makes it possible to query a navigation path for a "
+"changed map immediately and in the same frame (multiple times if needed).\n"
+"Due to technical restrictions the current NavigationServer command queue "
+"will be flushed. This means all already queued update commands for this "
+"physics frame will be executed, even those intended for other maps, regions "
+"and agents not part of the specified map. The expensive computation of the "
+"navigation meshes and region connections of a map will only be done for the "
+"specified map. Other maps will receive the normal synchronization at the end "
+"of the physics frame. Should the specified map receive changes after the "
+"forced update it will update again as well when the other maps receive their "
+"update.\n"
+"Avoidance processing and dispatch of the [code]safe_velocity[/code] signals "
+"is untouched by this function and continues to happen for all maps and "
+"agents at the end of the physics frame.\n"
+"[b]Note:[/b] With great power comes great responsibility. This function "
+"should only be used by users that really know what they are doing and have a "
+"good reason for it. Forcing an immediate update of a navigation map requires "
+"locking the NavigationServer and flushing the entire NavigationServer "
+"command queue. Not only can this severely impact the performance of a game "
+"but it can also introduce bugs if used inappropriately without much "
+"foresight."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns all navigation agents [RID]s that are currently assigned to the "
"requested navigation [code]map[/code]."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Returns the map cell size."
msgstr ""
@@ -35726,7 +35907,10 @@ msgid ""
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Returns the navigation path to reach the destination from the origin."
+msgid ""
+"Returns the navigation path to reach the destination from the origin. "
+"[code]navigation_layers[/code] is a bitmask of all region layers that are "
+"allowed to be in the path."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -35746,6 +35930,12 @@ msgstr ""
msgid "Sets the map active."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/"
+"b] Currently not implemented."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Set the map cell size used to weld the navigation mesh polygons."
msgstr ""
@@ -35761,14 +35951,79 @@ msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"Returns the ending point of a connection door. [code]connection[/code] is an "
+"index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns the starting point of a connection door. [code]connection[/code] is "
+"an index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns how many connections this [code]region[/code] has with other regions "
+"in the map."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]."
+msgstr ""
+"Kung [code]true[/code], ang mga child nodes ay inaayos, kung hindi ang pag-"
+"so-sort ay hindi pinapagana."
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns the navigation map [RID] the requested [code]region[/code] is "
"currently assigned to."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Returns the region's navigation layers."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]."
+msgstr ""
+"Kung [code]true[/code], ang mga child nodes ay inaayos, kung hindi ang pag-"
+"so-sort ay hindi pinapagana."
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns [code]true[/code] if the provided [code]point[/code] in world space "
+"is currently owned by the provided navigation [code]region[/code]. Owned in "
+"this context means that one of the region's navigation mesh polygon faces "
+"has a possible position at the closest distance to this point compared to "
+"all other navigation meshes from other navigation regions that are also "
+"registered on the navigation map of the provided region.\n"
+"If multiple navigation meshes have positions at equal distance the "
+"navigation region whose polygons are processed first wins the ownership. "
+"Polygons are processed in the same order that navigation regions were "
+"registered on the NavigationServer.\n"
+"[b]Note:[/b] If navigation meshes from different navigation regions overlap "
+"(which should be avoided in general) the result might not be what is "
+"expected."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Sets the map for the region."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method Navigation2DServer.map_get_path])."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Sets the navigation mesh for the region."
msgstr ""
@@ -35777,6 +36032,10 @@ msgstr ""
msgid "Sets the global transformation for the region."
msgstr ""
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]."
+msgstr ""
+
#: doc/classes/NavigationAgent.xml
msgid "3D agent used in navigation for collision avoidance."
msgstr ""
@@ -35786,9 +36045,16 @@ msgid ""
"3D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationAgent] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World] navigation map. If this node is a child of a [Navigation] "
+"node it will register to the navigation map of the navigation node or the "
+"function [method set_navigation] can be used to set the navigation node "
+"directly. [NavigationAgent] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -35806,7 +36072,15 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-msgid "Returns the path from start to finish in global coordinates."
+msgid ""
+"Returns this agent's current path from start to finish in global "
+"coordinates. The path only updates when the target location is changed or "
+"the agent requires a repath. The path array is not intended to be used in "
+"direct path movement as the agent has its own internal path logic that would "
+"get corrupted by changing the path array manually. Use the intended [method "
+"get_next_location] once every physics frame to receive the next path point "
+"for the agents movement as this function also updates the internal path "
+"logic."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -35821,11 +36095,24 @@ msgid ""
"system."
msgstr ""
-#: doc/classes/NavigationAgent.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"Returns a [Vector3] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the origin of the agent's parent."
+"Returns the [RID] of the navigation map for this NavigationAgent node. This "
+"function returns always the map set on the NavigationAgent node and not the "
+"map of the abstract agent on the NavigationServer. If the agent map is "
+"changed directly with the NavigationServer API the NavigationAgent node will "
+"not be aware of the map change. Use [method set_navigation_map] to change "
+"the navigation map for the NavigationAgent and also update the agent on the "
+"NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
+"Returns the next location in global coordinates that can be moved to, making "
+"sure that there are no static objects in the way. If the agent does not have "
+"a navigation path, it will return the position of the agent's parent. The "
+"use of this function once every physics frame is required to update the "
+"internal path logic of the NavigationAgent."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -35866,6 +36153,12 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"Sets the [RID] of the navigation map this NavigationAgent node should use "
+"and also updates the [code]agent[/code] on the NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"Sets the user desired final location. This will clear the current navigation "
"path."
msgstr ""
@@ -35878,7 +36171,13 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml
-msgid "The agent height offset to match the navigation mesh height."
+msgid ""
+"The NavigationAgent height offset is subtracted from the y-axis value of any "
+"vector path position for this NavigationAgent. The NavigationAgent height "
+"offset does not change or influence the navigation mesh or pathfinding query "
+"result. Additional navigation maps that use regions with navigation meshes "
+"that the developer baked with appropriate agent radius or height values are "
+"required to support different-sized agents."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -35905,26 +36204,53 @@ msgstr ""
msgid "The maximum speed that an agent can move."
msgstr ""
+#: doc/classes/NavigationAgent.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "The distance to search for other agents."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"The distance threshold before a path point is considered to be reached. This "
+"will allow an agent to not have to hit a path point on the path exactly, but "
+"in the area. If this value is set to high the NavigationAgent will skip "
+"points on the path which can lead to leaving the navigation mesh. If this "
+"value is set to low the NavigationAgent will be stuck in a repath loop cause "
+"it will constantly overshoot or undershoot the distance to the next point on "
+"each physics frame update."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"The maximum distance the agent is allowed away from the ideal path to the "
"final location. This can happen due to trying to avoid collisions. When the "
"maximum distance is exceeded, it recalculates the ideal path."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-msgid "The radius of the agent."
+msgid ""
+"The radius of the avoidance agent. This is the \"body\" of the avoidance "
+"agent and not the avoidance maneuver starting radius (which is controlled by "
+"[member neighbor_dist]).\n"
+"Does not affect normal pathfinding. To change an actor's pathfinding radius "
+"bake [NavigationMesh] resources with a different [member NavigationMesh."
+"agent_radius] property and use different navigation maps for each actor size."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"The distance threshold before a target is considered to be reached. This "
-"will allow an agent to not have to hit a point on the path exactly, but in "
-"the area."
+"The distance threshold before the final target point is considered to be "
+"reached. This will allow an agent to not have to hit the point of the final "
+"target exactly, but only the area. If this value is set to low the "
+"NavigationAgent will be stuck in a repath loop cause it will constantly "
+"overshoot or undershoot the distance to the final target point on each "
+"physics frame update."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -35967,9 +36293,16 @@ msgid ""
"2D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationAgent2D] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World2D] navigation map. If this node is a child of a "
+"[Navigation2D] node it will register to the navigation map of the navigation "
+"node or the function [method set_navigation] can be used to set the "
+"navigation node directly. [NavigationAgent2D] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent2D.xml
@@ -35985,13 +36318,6 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent2D.xml
-msgid ""
-"Returns a [Vector2] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the position of the agent's parent."
-msgstr ""
-
-#: doc/classes/NavigationAgent2D.xml
msgid "Returns the [RID] of this agent on the [Navigation2DServer]."
msgstr ""
@@ -36011,6 +36337,13 @@ msgid ""
"only be enabled on agents that currently require it."
msgstr ""
+#: doc/classes/NavigationAgent2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent2D] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationMesh.xml
msgid "A mesh to approximate the walkable areas and obstacles."
msgstr ""
@@ -36041,8 +36374,8 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
-"Returns whether the specified [code]bit[/code] of the [member geometry/"
-"collision_mask] is set."
+"Returns whether the specified [code]bit[/code] of the [member "
+"geometry_collision_mask] is set."
msgstr ""
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
@@ -36064,9 +36397,9 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/"
-"code] in the [member geometry/collision_mask].\n"
+"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]."
+"code] in the [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
@@ -36080,14 +36413,14 @@ 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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36099,7 +36432,7 @@ 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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36127,13 +36460,17 @@ msgstr ""
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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
-"If [code]true[/code], marks walkable spans as not walkable if the clearance "
-"above the span is less than [member agent/height]."
+"If the baking [AABB] has a volume the navigation mesh baking will be "
+"restricted to its enclosing area."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+msgid "The position offset applied to the [member filter_baking_aabb] [AABB]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36143,13 +36480,19 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]true[/code], marks non-walkable spans as walkable if their maximum "
-"is within [member agent/max_climb] of a walkable neighbor."
+"is within [member agent_max_climb] of a walkable neighbor."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+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
msgid ""
"The physics layers to scan for static colliders.\n"
-"Only used when [member geometry/parsed_geometry_type] is [constant "
+"Only used when [member geometry_parsed_geometry_type] is [constant "
"PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]."
msgstr ""
@@ -36168,7 +36511,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"The name of the group to scan for geometry.\n"
-"Only used when [member geometry/source_geometry_mode] is [constant "
+"Only used when [member geometry_source_geometry_mode] is [constant "
"SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant "
"SOURCE_GEOMETRY_GROUPS_EXPLICIT]."
msgstr ""
@@ -36231,7 +36574,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Parses [StaticBody] colliders as geometry. The collider should be in any of "
-"the layers specified by [member geometry/collision_mask]."
+"the layers specified by [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36252,13 +36595,13 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Scans nodes in a group and their child nodes recursively for geometry. The "
-"group is specified by [member geometry/source_group_name]."
+"group is specified by [member geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Uses nodes in a group for geometry. The group is specified by [member "
-"geometry/source_group_name]."
+"geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36300,7 +36643,15 @@ msgid ""
"geometry for walkable terrain suitable to [NavigationMesh] agent properties "
"by creating a voxel world around the meshes bounding area.\n"
"The finalized navigation mesh is then returned and stored inside the "
-"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes."
+"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] "
+"nodes.\n"
+"[b]Note:[/b] Using meshes to not only define walkable surfaces but also "
+"obstruct navigation baking does not always work. The navigation baking has "
+"no concept of what is a geometry \"inside\" when dealing with mesh source "
+"geometry and this is intentional. Depending on current baking parameters, as "
+"soon as the obstructing mesh is large enough to fit a navigation mesh area "
+"inside, the baking will generate navigation mesh areas that are inside the "
+"obstructing source geometry mesh."
msgstr ""
#: doc/classes/NavigationMeshGenerator.xml
@@ -36308,8 +36659,8 @@ msgid ""
"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child "
"nodes under the provided [code]root_node[/code] or a specific group of nodes "
"for potential source geometry. The parse behavior can be controlled with the "
-"[member NavigationMesh.geometry/parsed_geometry_type] and [member "
-"NavigationMesh.geometry/source_geometry_mode] properties on the "
+"[member NavigationMesh.geometry_parsed_geometry_type] and [member "
+"NavigationMesh.geometry_source_geometry_mode] properties on the "
"[NavigationMesh] resource."
msgstr ""
@@ -36326,8 +36677,21 @@ msgstr ""
#: doc/classes/NavigationMeshInstance.xml
msgid ""
"An instance of a [NavigationMesh]. It tells the [Navigation] node what can "
-"be navigated and what cannot, based on the [NavigationMesh] resource. This "
-"should be a child of a [Navigation] node."
+"be navigated and what cannot, based on the [NavigationMesh] resource.\n"
+"By default this node will register to the default [World] navigation map. If "
+"this node is a child of a [Navigation] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method NavigationServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The cost of entering this region from another region can be controlled with "
+"the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The cost of traveling distances inside this region can be controlled with "
+"the [member travel_cost] multiplier."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
@@ -36356,10 +36720,34 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding enters this region's navmesh from another regions navmesh "
+"the [code]enter_cost[/code] value is added to the path distance for "
+"determining the shortest path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationMesh] "
+"belongs to. On path requests with [method NavigationServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
msgid "The [NavigationMesh] resource to use."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding moves inside this region's navmesh the traveled distances "
+"are multiplied with [code]travel_cost[/code] for determining the shortest "
+"path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
msgid "Notifies when the navigation mesh bake operation is completed."
msgstr ""
@@ -36376,7 +36764,9 @@ msgid ""
"3D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationObstacle] is physics safe."
+"[NavigationObstacle] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle.xml
@@ -36416,7 +36806,9 @@ msgid ""
"2D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationObstacle2D] is physics safe."
+"[NavigationObstacle2D] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle2D.xml
@@ -36496,6 +36888,14 @@ msgstr ""
#: doc/classes/NavigationPolygon.xml
msgid ""
+"Returns the [NavigationMesh] resulting from this navigation polygon. This "
+"navmesh can be used to update the navmesh of a region with the [method "
+"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server "
+"behind the scene)."
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml
+msgid ""
"Returns a [PoolVector2Array] containing the vertices of an outline that was "
"created in the editor or by script."
msgstr ""
@@ -36532,6 +36932,30 @@ msgid ""
msgstr ""
#: doc/classes/NavigationPolygonInstance.xml
+msgid "A region of the 2D navigation map."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A region of the navigation map. It tells the [Navigation2DServer] what can "
+"be navigated and what cannot, based on its [NavigationPolygon] resource.\n"
+"By default this node will register to the default [World2D] navigation map. "
+"If this node is a child of a [Navigation2D] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The pathfinding cost of entering this region from another region can be "
+"controlled with the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The pathfinding cost of traveling distances inside this region can be "
+"controlled with the [member travel_cost] multiplier."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
msgid ""
"Returns the [RID] of this region on the [Navigation2DServer]. Combined with "
"[method Navigation2DServer.map_get_closest_point_owner] can be used to "
@@ -36539,6 +36963,22 @@ msgid ""
"navigation map."
msgstr ""
+#: doc/classes/NavigationPolygonInstance.xml
+msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationPolygon] "
+"belongs to. On path requests with [method Navigation2DServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid "The [NavigationPolygon] resource to use."
+msgstr ""
+
#: doc/classes/NavigationServer.xml
msgid "Server interface for low-level 3D navigation access."
msgstr ""
@@ -36614,6 +37054,12 @@ msgid "Bakes the navigation mesh."
msgstr ""
#: doc/classes/NavigationServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method NavigationServer.map_get_path])."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
msgid "Control activation of this server."
msgstr ""
@@ -38080,13 +38526,19 @@ msgstr ""
#: doc/classes/Node.xml
msgid ""
"Emitted when a child node enters the scene tree, either because it entered "
-"on its own or because this node entered with it."
+"on its own or because this node entered with it.\n"
+"This signal is emitted [i]after[/i] the child node's own [constant "
+"NOTIFICATION_ENTER_TREE] and [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
msgid ""
-"Emitted when a child node exits the scene tree, either because it exited on "
-"its own or because this node exited."
+"Emitted when a child node is about to exit the scene tree, either because it "
+"is being removed or freed directly, or because this node is exiting the "
+"tree.\n"
+"When this signal is received, the child [code]node[/code] is still in the "
+"tree and valid. This signal is emitted [i]after[/i] the child node's own "
+"[signal tree_exiting] and [constant NOTIFICATION_EXIT_TREE]."
msgstr ""
#: doc/classes/Node.xml
@@ -38098,7 +38550,10 @@ msgid "Emitted when the node is renamed."
msgstr ""
#: doc/classes/Node.xml
-msgid "Emitted when the node enters the tree."
+msgid ""
+"Emitted when the node enters the tree.\n"
+"This signal is emitted [i]after[/i] the related [constant "
+"NOTIFICATION_ENTER_TREE] notification."
msgstr ""
#: doc/classes/Node.xml
@@ -38108,15 +38563,21 @@ msgstr ""
#: doc/classes/Node.xml
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)."
+"the right place for de-initialization (or a \"destructor\", if you will).\n"
+"This signal is emitted [i]before[/i] the related [constant "
+"NOTIFICATION_EXIT_TREE] notification."
msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node enters a [SceneTree]."
+msgid ""
+"Notification received when the node enters a [SceneTree].\n"
+"This notification is emitted [i]before[/i] the related [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node is about to exit a [SceneTree]."
+msgid ""
+"Notification received when the node is about to exit a [SceneTree].\n"
+"This notification is emitted [i]after[/i] the related [signal tree_exiting]."
msgstr ""
#: doc/classes/Node.xml
@@ -38377,7 +38838,13 @@ msgid "Rotation in degrees, relative to the node's parent."
msgstr ""
#: doc/classes/Node2D.xml
-msgid "The node's scale. Unscaled value: [code](1, 1)[/code]."
+msgid ""
+"The node's scale. Unscaled value: [code](1, 1)[/code].\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
#: doc/classes/Node2D.xml
@@ -39817,6 +40284,10 @@ msgid ""
" if argument.find(\"=\") > -1:\n"
" var key_value = argument.split(\"=\")\n"
" arguments[key_value[0].lstrip(\"--\")] = key_value[1]\n"
+" else:\n"
+" # Options without an argument will be present in the dictionary,\n"
+" # with the value set to an empty string.\n"
+" arguments[argument.lstrip(\"--\")] = \"\"\n"
"[/codeblock]"
msgstr ""
@@ -40473,8 +40944,15 @@ msgstr ""
msgid ""
"Moves the file or directory to the system's recycle bin. See also [method "
"Directory.remove].\n"
+"The method takes only global paths, so you may need to use [method "
+"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/"
+"code] as it will not work in exported project.\n"
"[b]Note:[/b] If the user has disabled the recycle bin on their system, the "
-"file will be permanently deleted instead."
+"file will be permanently deleted instead.\n"
+"[codeblock]\n"
+"var file_to_remove = \"user://slot1.sav\"\n"
+"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/OS.xml
@@ -45313,7 +45791,18 @@ msgstr ""
#: doc/classes/PopupMenu.xml
msgid ""
"[PopupMenu] is a [Control] that displays a list of options. They are popular "
-"in toolbars or context menus."
+"in toolbars or context menus.\n"
+"[b]Incremental search:[/b] Like [ItemList] and [Tree], [PopupMenu] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/PopupMenu.xml
@@ -46820,7 +47309,16 @@ msgid ""
msgstr ""
#: doc/classes/ProjectSettings.xml
-msgid "Message to be displayed before the backtrace when the engine crashes."
+msgid ""
+"Message to be displayed before the backtrace when the engine crashes. By "
+"default, this message is only used in exported projects due to the editor-"
+"only override applied to this setting."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Editor-only override for [member debug/settings/crash_handler/message]. Does "
+"not affect exported projects in debug or release mode."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -47065,6 +47563,18 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default naming style for scene files to infer from their root nodes. "
+"Possible options are:\n"
+"- [code]0[/code] (Auto): Uses the scene root name as is without changing its "
+"casing.\n"
+"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase "
+"casing.\n"
+"- [code]2[/code] (snake_case): Converts the scene root name to snake_case "
+"casing."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -47290,6 +47800,198 @@ msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 1."
msgstr ""
@@ -47498,6 +48200,198 @@ msgid "Optional name for the 2D render layer 9."
msgstr ""
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 1."
msgstr ""
@@ -47765,6 +48659,49 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default cell height for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_height].\n"
+"[b]Note:[/b] Currently not implemented."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 2D navigation maps. See [method "
+"Navigation2DServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell height for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_height]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 3D navigation maps. See [method "
+"NavigationServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default map up vector for 3D navigation maps. See [method NavigationServer."
+"map_set_up]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -48438,20 +49375,28 @@ msgid ""
"cause.\n"
"The default value is a conservative one, so you are advised to tweak it "
"according to the hardware you are targeting.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"The default is a very conservative override for [code]rendering/gles3/"
-"shaders/max_concurrent_compiles[/code].\n"
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
"Depending on the specific devices you are targeting, you may want to raise "
"it.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
+"Depending on the specific browsers you are targeting, you may want to raise "
+"it.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -48459,19 +49404,28 @@ msgid ""
"The maximum size, in megabytes, that the ubershader cache can grow up to. On "
"startup, the least recently used entries will be deleted until the total "
"size is within bounds.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/ubershader_cache_size_mb[/"
-"code], so a smaller maximum size can be configured for mobile platforms, "
-"where storage space is more limited.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for mobile platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for web platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] Currently, shader caching is generally unavailable on web "
+"platforms.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -48503,14 +49457,22 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/shader_compilation_mode[/"
-"code], so asynchronous compilation can be disabled for mobile.\n"
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on mobile platforms.\n"
"You may want to do that since mobile GPUs generally won't support "
"ubershaders due to their complexity."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on web platforms.\n"
+"You may want to do that since certain browsers (especially on mobile "
+"platforms) generally won't support ubershaders due to their complexity."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
@@ -49267,7 +50229,6 @@ msgid ""
"- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/"
"code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, "
"small grid radius values may lead to unwanted groupings.\n"
-"[/codeblock]\n"
"[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more "
"effective and faster [VisibilityNotifier] functionality. For most use cases, "
"[method Vector3.distance_to] or [method Vector3.distance_squared_to] are "
@@ -51414,6 +52375,22 @@ msgid "Makes text fill width."
msgstr ""
#: doc/classes/RichTextLabel.xml
+msgid "Aligns top of the inline image to the top of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns center of the inline image to the center of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns bottom of the inline image to the baseline of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns bottom of the inline image to the bottom of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
msgid "Each list item has a number marker."
msgstr ""
@@ -53151,8 +54128,8 @@ msgid ""
" yield(get_tree().create_timer(1.0), \"timeout\")\n"
" print(\"Timer ended.\")\n"
"[/codeblock]\n"
-"The timer will be automatically freed after its time elapses, so be aware "
-"that any reference you might have kept to it will become invalid."
+"The timer will be dereferenced after its time elapses. To preserve the "
+"timer, you can keep a reference to it. See [Reference]."
msgstr ""
#: doc/classes/SceneTreeTimer.xml
@@ -53184,24 +54161,23 @@ msgid ""
"manually (i.e. by using [code]Tween.new()[/code]) are invalid. They can't be "
"used for tweening values, but you can do manual interpolation with [method "
"interpolate_value].\n"
-"A [SceneTreeTween] animation is composed of a sequence of [Tweener]s, which "
-"by default are executed one after another. You can create a sequence by "
-"appending [Tweener]s to the [SceneTreeTween]. Animating something with a "
-"[Tweener] is called tweening. Example tweening sequence looks like this:\n"
+"A tween animation is created by adding [Tweener]s to the [SceneTreeTween] "
+"object, using [method tween_property], [method tween_interval], [method "
+"tween_callback] or [method tween_method]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1)\n"
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"This sequence will make the [code]$Sprite[/code] node turn red, then shrink "
-"and finally the [method Node.queue_free] is called to remove the sprite. See "
-"methods [method tween_property], [method tween_interval], [method "
-"tween_callback] and [method tween_method] for more usage information.\n"
+"This sequence will make the [code]$Sprite[/code] node turn red, then shrink, "
+"before finally calling [method Node.queue_free] to free the sprite. "
+"[Tweener]s are executed one after another by default. This behavior can be "
+"changed using [method parallel] and [method set_parallel].\n"
"When a [Tweener] is created with one of the [code]tween_*[/code] methods, a "
"chained method call can be used to tweak the properties of this [Tweener]. "
-"For example, if you want to set different transition type in the above "
-"example, you can do:\n"
+"For example, if you want to set a different transition type in the above "
+"example, you can use [method set_trans]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1).set_trans(Tween."
@@ -53210,8 +54186,9 @@ msgid ""
"TRANS_BOUNCE)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Most of the [SceneTreeTween] methods can be chained this way too. In this "
-"example the [SceneTreeTween] is bound and have set a default transition:\n"
+"Most of the [SceneTreeTween] methods can be chained this way too. In the "
+"following example the [SceneTreeTween] is bound to the running script's node "
+"and a default transition is set for its [Tweener]s:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween().bind_node(self).set_trans(Tween."
"TRANS_ELASTIC)\n"
@@ -53219,16 +54196,16 @@ msgid ""
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Another interesting use for [SceneTreeTween]s is animating arbitrary set of "
+"Another interesting use for [SceneTreeTween]s is animating arbitrary sets of "
"objects:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"for sprite in get_children():\n"
-" tween.tween_property(sprite, \"position\", Vector2(), 1)\n"
+" tween.tween_property(sprite, \"position\", Vector2(0, 0), 1)\n"
"[/codeblock]\n"
"In the example above, all children of a node are moved one after another to "
"position (0, 0).\n"
-"Some [Tweener]s use transitions and eases. The first accepts an [enum Tween."
+"Some [Tweener]s use transitions and eases. The first accepts a [enum Tween."
"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 Tween.EaseType] constant, and "
@@ -53240,7 +54217,7 @@ msgid ""
"tween_cheatsheet.png]Tween easing and transition types cheatsheet[/url]\n"
"[b]Note:[/b] All [SceneTreeTween]s will automatically start by default. To "
"prevent a [SceneTreeTween] from autostarting, you can call [method stop] "
-"immediately after it was created."
+"immediately after it is created."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53270,21 +54247,24 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
-"Processes the [SceneTreeTween] by given [code]delta[/code] value, in "
-"seconds. Mostly useful when the [SceneTreeTween] is paused, for controlling "
-"it manually. Can also be used to end the [SceneTreeTween] animation "
-"immediately, by using [code]delta[/code] longer than the whole duration.\n"
+"Processes the [SceneTreeTween] by the given [code]delta[/code] value, in "
+"seconds. This is mostly useful for manual control when the [SceneTreeTween] "
+"is paused. It can also be used to end the [SceneTreeTween] animation "
+"immediately, by setting [code]delta[/code] longer than the whole duration of "
+"the [SceneTreeTween] animation.\n"
"Returns [code]true[/code] if the [SceneTreeTween] still has [Tweener]s that "
"haven't finished.\n"
-"[b]Note:[/b] The [SceneTreeTween] will become invalid after finished, but "
-"you can call [method stop] after the step, to keep it and reset."
+"[b]Note:[/b] The [SceneTreeTween] will become invalid in the next processing "
+"frame after its animation finishes. Calling [method stop] after performing "
+"[method custom_step] instead keeps and resets the [SceneTreeTween]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Returns the total time in seconds the [SceneTreeTween] has been animating (i."
-"e. time since it started, not counting pauses etc.). The time is affected by "
-"[method set_speed_scale] and [method stop] will reset it to [code]0[/code].\n"
+"e. the time since it started, not counting pauses etc.). The time is "
+"affected by [method set_speed_scale], and [method stop] will reset it to "
+"[code]0[/code].\n"
"[b]Note:[/b] As it results from accumulating frame deltas, the time returned "
"after the [SceneTreeTween] has finished animating will be slightly greater "
"than the actual [SceneTreeTween] duration."
@@ -53320,11 +54300,10 @@ msgstr ""
msgid ""
"Returns whether the [SceneTreeTween] is valid. A valid [SceneTreeTween] is a "
"[SceneTreeTween] contained by the scene tree (i.e. the array from [method "
-"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). "
-"[SceneTreeTween] might become invalid when it has finished tweening or was "
-"killed, also when created with [code]Tween.new()[/code]. Invalid "
-"[SceneTreeTween] can't have [Tweener]s appended, because it can't animate "
-"them. You can however still use [method interpolate_value]."
+"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). A "
+"[SceneTreeTween] might become invalid when it has finished tweening, is "
+"killed, or when created with [code]SceneTreeTween.new()[/code]. Invalid "
+"[SceneTreeTween]s can't have [Tweener]s appended."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53364,16 +54343,15 @@ msgstr ""
msgid ""
"Sets the number of times the tweening sequence will be repeated, i.e. "
"[code]set_loops(2)[/code] will run the animation twice.\n"
-"Calling this method without arguments will make the [SceneTreeTween] run "
-"infinitely, until it is either killed by [method kill] or by freeing bound "
-"node, or all the animated objects have been freed (which makes further "
+"Calling this method without arguments will make the [Tween] run infinitely, "
+"until either it is killed with [method kill], the [Tween]'s bound node is "
+"freed, or all the animated objects have been freed (which makes further "
"animation impossible).\n"
"[b]Warning:[/b] Make sure to always add some duration/delay when using "
-"infinite loops. 0-duration looped animations (e.g. single [CallbackTweener] "
-"with no delay or [PropertyTweener] with invalid node) are equivalent to "
-"infinite [code]while[/code] loops and will freeze your game. If a "
-"[SceneTreeTween]'s lifetime depends on some node, always use [method "
-"bind_node]."
+"infinite loops. To prevent the game freezing, 0-duration looped animations "
+"(e.g. a single [CallbackTweener] with no delay) are stopped after a small "
+"number of loops, which may produce unexpected results. If a [Tween]'s "
+"lifetime depends on some node, always use [method bind_node]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53435,10 +54413,10 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Creates and appends an [IntervalTweener]. This method can be used to create "
-"delays in the tween animation, as an alternative for using the delay in "
-"other [Tweener]s or when there's no animation (in which case the "
-"[SceneTreeTween] acts as a timer). [code]time[/code] is the length of the "
-"interval, in seconds.\n"
+"delays in the tween animation, as an alternative to using the delay in other "
+"[Tweener]s, or when there's no animation (in which case the [SceneTreeTween] "
+"acts as a timer). [code]time[/code] is the length of the interval, in "
+"seconds.\n"
"Example: creating an interval in code execution.\n"
"[codeblock]\n"
"# ... some code\n"
@@ -53492,8 +54470,8 @@ msgid ""
"Creates and appends a [PropertyTweener]. This method tweens a "
"[code]property[/code] of an [code]object[/code] between an initial value and "
"[code]final_val[/code] in a span of time equal to [code]duration[/code], in "
-"seconds. The initial value by default is a value at the time the tweening of "
-"the [PropertyTweener] start. For example:\n"
+"seconds. The initial value by default is the property's value at the time "
+"the tweening of the [PropertyTweener] starts. For example:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"tween.tween_property($Sprite, \"position\", Vector2(100, 200), 1)\n"
@@ -53524,16 +54502,15 @@ msgid ""
"Emitted when the [SceneTreeTween] has finished all tweening. Never emitted "
"when the [SceneTreeTween] is set to infinite looping (see [method "
"set_loops]).\n"
-"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) after this signal "
-"is emitted, but it doesn't happen immediately, but on the next processing "
-"frame. Calling [method stop] inside the signal callback will preserve the "
-"[SceneTreeTween]."
+"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) in the next "
+"processing frame after this signal is emitted. Calling [method stop] inside "
+"the signal callback will prevent the [SceneTreeTween] from being removed."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Emitted when a full loop is complete (see [method set_loops]), providing the "
-"loop index. This signal is not emitted after final loop, use [signal "
+"loop index. This signal is not emitted after the final loop, use [signal "
"finished] instead for this case."
msgstr ""
@@ -53541,7 +54518,7 @@ msgstr ""
msgid ""
"Emitted when one step of the [SceneTreeTween] is complete, providing the "
"step index. One step is either a single [Tweener] or a group of [Tweener]s "
-"running parallelly."
+"running in parallel."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -54873,7 +55850,12 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-msgid "Scale part of the local transformation."
+msgid ""
+"Scale part of the local transformation.\n"
+"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, the scale values will either be all "
+"positive or all negative."
msgstr ""
#: doc/classes/Spatial.xml
@@ -57504,11 +58486,11 @@ msgstr ""
msgid ""
"Returns [code]true[/code] if this string contains a valid integer.\n"
"[codeblock]\n"
-"print(\"7\".is_valid_int()) # Prints \"True\"\n"
-"print(\"14.6\".is_valid_int()) # Prints \"False\"\n"
-"print(\"L\".is_valid_int()) # Prints \"False\"\n"
-"print(\"+3\".is_valid_int()) # Prints \"True\"\n"
-"print(\"-12\".is_valid_int()) # Prints \"True\"\n"
+"print(\"7\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"14.6\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"L\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"+3\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"-12\".is_valid_integer()) # Prints \"True\"\n"
"[/codeblock]"
msgstr ""
@@ -60977,6 +61959,13 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml
+#, fuzzy
+msgid "If [code]true[/code], this TileMap bakes a navigation region."
+msgstr ""
+"Kung [code]true[/code], ang mga child nodes ay inaayos, kung hindi ang pag-"
+"so-sort ay hindi pinapagana."
+
+#: doc/classes/TileMap.xml
msgid "If [code]true[/code], the cell's UVs will be clipped."
msgstr ""
@@ -61083,6 +62072,10 @@ msgid "The TileMap orientation mode. See [enum Mode] for possible values."
msgstr ""
#: doc/classes/TileMap.xml
+msgid "The navigation layers the TileMap generates its navigation regions in."
+msgstr ""
+
+#: doc/classes/TileMap.xml
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 "
@@ -62214,7 +63207,12 @@ msgstr ""
#: doc/classes/Transform2D.xml
msgid ""
"Returns a copy of the transform scaled by the given [code]scale[/code] "
-"factor, using matrix multiplication."
+"factor, using matrix multiplication.\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
#: doc/classes/Transform2D.xml
@@ -62369,7 +63367,18 @@ msgid ""
"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]."
+"to remove it from the [Tree].\n"
+"[b]Incremental search:[/b] Like [ItemList] and [PopupMenu], [Tree] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/Tree.xml
@@ -65888,11 +66897,12 @@ msgid "This enabler will stop [Particles2D] nodes."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _process function."
+msgid "This enabler will stop the parent's [method Node._process] function."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _physics_process function."
+msgid ""
+"This enabler will stop the parent's [method Node._physics_process] function."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
@@ -65932,6 +66942,16 @@ msgid "The VisibilityNotifier's bounding box."
msgstr ""
#: doc/classes/VisibilityNotifier.xml
+msgid ""
+"In addition to checking whether a node is on screen or within a [Camera]'s "
+"view, VisibilityNotifier can also optionally check whether a node is within "
+"a specified maximum distance when using a [Camera] with perspective "
+"projection. This is useful for throttling the performance requirements of "
+"nodes that are far away.\n"
+"[b]Note:[/b] This feature will be disabled if set to 0.0."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier.xml
msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view."
msgstr ""
@@ -70677,6 +71697,16 @@ msgid "The amount of shader rebinds in the frame."
msgstr ""
#: doc/classes/VisualServer.xml
+msgid ""
+"The peak amount of shaders that have been under compilation in the frame.\n"
+"This is useful to know when asynchronous shader compilation has finished for "
+"the current shaders on screen.\n"
+"[b]Note:[/b] For complete certainty, only assume there are no outstanding "
+"compilations when this value is zero for at least two frames in a row.\n"
+"Unimplemented in the GLES2 rendering backend, always returns 0."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
msgid "The amount of surface changes in the frame."
msgstr ""
@@ -73873,8 +74903,8 @@ msgstr ""
#: doc/classes/World.xml
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."
+"scenario, a navigation map and a sound space. Spatial nodes register their "
+"resources into the current world."
msgstr ""
#: doc/classes/World.xml
@@ -73889,8 +74919,13 @@ msgstr ""
#: doc/classes/World.xml
msgid ""
-"The World's fallback_environment will be used if the World's [Environment] "
-"fails or is missing."
+"The World's fallback environment will be used if [member environment] fails "
+"or is missing."
+msgstr ""
+
+#: doc/classes/World.xml
+msgid ""
+"The [RID] of this world's navigation map. Used by the [NavigationServer]."
msgstr ""
#: doc/classes/World.xml
@@ -73908,8 +74943,8 @@ msgstr ""
#: doc/classes/World2D.xml
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."
+"visual scenario, a navigation map and a sound space. 2D nodes register their "
+"resources into the current 2D world."
msgstr ""
#: doc/classes/World2D.xml
@@ -73927,6 +74962,11 @@ msgstr ""
#: doc/classes/World2D.xml
msgid ""
+"The [RID] of this world's navigation map. Used by the [Navigation2DServer]."
+msgstr ""
+
+#: doc/classes/World2D.xml
+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 ""
diff --git a/doc/translations/tr.po b/doc/translations/tr.po
index 47aadf8b43..01b71d7673 100644
--- a/doc/translations/tr.po
+++ b/doc/translations/tr.po
@@ -17,12 +17,13 @@
# ali aydın <alimxaydin@gmail.com>, 2021.
# yigithan <yigithanermet38@gmail.com>, 2021.
# Yusuf Yavuzyigit <yusufyavuzyigit25@gmail.com>, 2021, 2022.
+# Ramazan Aslan <legendraslan@gmail.com>, 2022.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2022-04-03 08:10+0000\n"
-"Last-Translator: Yusuf Yavuzyigit <yusufyavuzyigit25@gmail.com>\n"
+"PO-Revision-Date: 2022-06-13 03:39+0000\n"
+"Last-Translator: Ramazan Aslan <legendraslan@gmail.com>\n"
"Language-Team: Turkish <https://hosted.weblate.org/projects/godot-engine/"
"godot-class-reference/tr/>\n"
"Language: tr\n"
@@ -30,7 +31,7 @@ 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.12-dev\n"
+"X-Generator: Weblate 4.13-dev\n"
#: doc/tools/make_rst.py
msgid "Description"
@@ -73,13 +74,12 @@ msgid "Method Descriptions"
msgstr "Yöntem Açıklamaları"
#: doc/tools/make_rst.py
-#, fuzzy
msgid "Theme Property Descriptions"
-msgstr "Özellik Açıklamaları"
+msgstr "Tema Özellik Açıklamaları"
#: doc/tools/make_rst.py
msgid "Inherits:"
-msgstr ""
+msgstr "Miras:"
#: doc/tools/make_rst.py
msgid "Inherited By:"
@@ -99,7 +99,7 @@ msgstr ""
#: doc/tools/make_rst.py
msgid "value"
-msgstr ""
+msgstr "deÄŸer"
#: doc/tools/make_rst.py
msgid "Getter"
@@ -109,17 +109,23 @@ msgstr ""
msgid ""
"This method should typically be overridden by the user to have any effect."
msgstr ""
+"Bu yöntemin herhangi bir etkiye sahip olması için genellikle kullanıcı "
+"tarafından geçersiz kılınması gerekir."
#: doc/tools/make_rst.py
msgid ""
"This method has no side effects. It doesn't modify any of the instance's "
"member variables."
msgstr ""
+"Bu yöntemin hiçbir yan etkisi yoktur. Örneğin üye değişkenlerinden hiçbirini "
+"deÄŸiÅŸtirmez."
#: doc/tools/make_rst.py
msgid ""
"This method accepts any number of arguments after the ones described here."
msgstr ""
+"Bu yöntem, burada açıklananlardan sonra herhangi bir sayıda argüman kabul "
+"edebilir."
#: doc/tools/make_rst.py
msgid "This method is used to construct a type."
@@ -492,7 +498,7 @@ msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
msgid ""
"Compares two values by checking their actual contents, recursing into any "
-"`Array` or `Dictionary` up to its deepest level.\n"
+"[Array] or [Dictionary] up to its deepest level.\n"
"This compares to [code]==[/code] in a number of ways:\n"
"- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/"
"code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] "
@@ -548,7 +554,7 @@ msgid ""
"- 1.0: Linear\n"
"- Greater than 1.0 (exclusive): Ease in\n"
"[/codeblock]\n"
-"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.4/img/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/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]."
@@ -1678,7 +1684,7 @@ msgid ""
"[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/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/img/"
"smoothstep_ease_comparison.png]Comparison between smoothstep() and ease(x, "
"-1.6521) return values[/url]"
msgstr ""
@@ -4152,6 +4158,12 @@ msgstr ""
#: doc/classes/@GlobalScope.xml
msgid ""
+"Hints that an integer property is a bitmask using the optionally named 2D "
+"navigation layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml
+msgid ""
"Hints that an integer property is a bitmask using the optionally named 3D "
"render layers."
msgstr ""
@@ -4164,6 +4176,12 @@ msgstr ""
#: doc/classes/@GlobalScope.xml
msgid ""
+"Hints that an integer property is a bitmask using the optionally named 3D "
+"navigation layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml
+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]."
@@ -9141,7 +9159,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/AStar.xml
+#: doc/classes/AStar.xml doc/classes/AStar2D.xml
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[/"
@@ -9340,7 +9358,10 @@ msgid ""
msgstr ""
#: doc/classes/AStar2D.xml
-msgid "Returns whether there is a connection/segment between the given points."
+msgid ""
+"Returns whether there is a connection/segment between the given points. 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/AStar2D.xml
@@ -9357,10 +9378,6 @@ msgid ""
msgstr ""
#: doc/classes/AStar2D.xml
-msgid "Deletes the segment between the given points."
-msgstr ""
-
-#: doc/classes/AStar2D.xml
msgid ""
"Returns the closest position to [code]to_position[/code] that resides inside "
"a segment between two connected points.\n"
@@ -9545,7 +9562,9 @@ msgid ""
"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."
+"transmit audio over the network. When capturing audio data from a "
+"microphone, the format of the samples will be stereo 32-bit floating point "
+"PCM."
msgstr ""
#: doc/classes/AudioEffectCapture.xml
@@ -14402,7 +14421,7 @@ msgid ""
msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
-#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/Navigation2D.xml
msgid "Returns the object's [RID]."
msgstr ""
@@ -19888,11 +19907,15 @@ msgid ""
msgstr ""
#: doc/classes/CurveTexture.xml
-msgid "The [code]curve[/code] rendered onto the texture."
-msgstr ""
+#, fuzzy
+msgid "The [Curve] that is rendered onto the texture."
+msgstr "Verilen değerin sinüsünü döndürür."
#: doc/classes/CurveTexture.xml
-msgid "The width of the texture."
+msgid ""
+"The width of the texture (in pixels). Higher values make it possible to "
+"represent high-frequency data better (such as sudden direction changes), at "
+"the cost of increased generation time and memory usage."
msgstr ""
#: doc/classes/CylinderMesh.xml
@@ -20178,6 +20201,13 @@ msgid "Returns the list of keys in the [Dictionary]."
msgstr ""
#: doc/classes/Dictionary.xml
+msgid ""
+"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, "
+"duplicate keys will not be copied over, unless [code]overwrite[/code] is "
+"[code]true[/code]."
+msgstr ""
+
+#: doc/classes/Dictionary.xml
#, fuzzy
msgid "Returns the number of keys in the dictionary."
msgstr "İki vektörün kalanını döndürür."
@@ -22119,9 +22149,23 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide a state data you want to be saved, like view "
+"position, grid settings, folding, etc. 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). This data is automatically saved for "
+"each scene in an [code]editstate[/code] file in the editor metadata folder. "
+"If you want to store global (scene-independent) editor data for your plugin, "
+"you can use [method get_window_layout] instead.\n"
+"Use [method set_state] to restore your saved state.\n"
+"[b]Note:[/b] This method should not be used to save important settings that "
+"should persist with the project.\n"
+"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be "
+"stored and restored correctly.\n"
+"[codeblock]\n"
+"func get_state():\n"
+" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n"
+" return state\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -22132,9 +22176,18 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide the GUI layout of the plugin or any other "
+"data you want to be stored. 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). The data is stored in the "
+"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n"
+"Use [method set_window_layout] to restore your saved layout.\n"
+"[codeblock]\n"
+"func get_window_layout(configuration):\n"
+" configuration.set_value(\"MyPlugin\", \"window_position\", $Window."
+"position)\n"
+" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -22247,11 +22300,30 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the state saved by [method get_state]."
+msgid ""
+"Restore the state saved by [method get_state]. This method is called when "
+"the current scene tab is changed in the editor.\n"
+"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise "
+"it will not be recognized and this method will not be called.\n"
+"[codeblock]\n"
+"func set_state(data):\n"
+" zoom = data.get(\"zoom\", 1.0)\n"
+" preferred_color = data.get(\"my_color\", Color.white)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the plugin GUI layout saved by [method get_window_layout]."
+msgid ""
+"Restore the plugin GUI layout and data saved by [method get_window_layout]. "
+"This method is called for every plugin on editor startup. Use the provided "
+"[code]configuration[/code] file to read your saved data.\n"
+"[codeblock]\n"
+"func set_window_layout(configuration):\n"
+" $Window.position = configuration.get_value(\"MyPlugin\", "
+"\"window_position\", Vector2())\n"
+" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", "
+"Color.white)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -26906,7 +26978,8 @@ msgid ""
"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])."
+"at fixed steps (see [member width]). See also [GradientTexture2D] and "
+"[CurveTexture]."
msgstr ""
#: doc/classes/GradientTexture.xml
@@ -26928,7 +27001,8 @@ msgid ""
"repeat] types using colors obtained from the gradient. 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] and [member height])."
+"[member width] and [member height]). See also [GradientTexture] and "
+"[CurveTexture]."
msgstr ""
#: doc/classes/GradientTexture2D.xml
@@ -27738,6 +27812,14 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+#, fuzzy
+msgid ""
+"If [code]true[/code], this GridMap uses cell navmesh resources to create "
+"navigation regions."
+msgstr ""
+"Eğer [code]true[/code] ise düğümler sıraya sokulur, yoksa sıraya sokulmaz."
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid "If [code]true[/code], grid items are centered on the X axis."
msgstr ""
@@ -27788,6 +27870,10 @@ msgid "The assigned [MeshLibrary]."
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+msgid "The navigation layers the GridMap generates its navigation regions in."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
"Overrides the default friction and bounce physics properties for the whole "
"[GridMap]."
@@ -29011,7 +29097,7 @@ msgid ""
" # 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 body = to_json({\"name\": \"Godette\"})\n"
" error = http_request.request(\"https://httpbin.org/post\", [], true, "
"HTTPClient.METHOD_POST, body)\n"
" if error != OK:\n"
@@ -30180,7 +30266,7 @@ msgstr ""
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 "
+"([member 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 "
@@ -30329,10 +30415,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Returns the mouse mode. See the constants for more information."
-msgstr ""
-
-#: doc/classes/Input.xml
msgid ""
"Gets an input vector by specifying four actions for the positive and "
"negative X and Y axes.\n"
@@ -30526,24 +30608,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Sets the mouse mode. See the constants for more information."
-msgstr ""
-
-#: doc/classes/Input.xml
-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
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 "
@@ -30579,6 +30643,24 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
+msgid "Controls the mouse mode. See [enum MouseMode] for more information."
+msgstr ""
+
+#: doc/classes/Input.xml
+msgid ""
+"If [code]true[/code], similar input events sent by the operating system are "
+"accumulated. 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 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
msgid "Emitted when a joypad device has been connected or disconnected."
msgstr ""
@@ -30886,8 +30968,8 @@ msgstr ""
#: doc/classes/InputEventJoypadButton.xml
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]."
+"Represents the pressure the user puts on the button with their finger, if "
+"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]."
msgstr ""
#: doc/classes/InputEventJoypadMotion.xml
@@ -31150,9 +31232,9 @@ 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 "
+"at most. If you need more precise input reporting, set [member Input."
+"use_accumulated_input] to [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."
@@ -31642,7 +31724,18 @@ msgid ""
"[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."
+"fixed_column_width] greater than zero to wrap the text.\n"
+"[b]Incremental search:[/b] Like [PopupMenu] and [Tree], [ItemList] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/ItemList.xml
@@ -35402,12 +35495,18 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Returns the override [Material] for a surface of the [Mesh] resource.\n"
+"[b]Note:[/b] This function only returns [i]override[/i] materials associated "
+"with this [MeshInstance]. Consider using [method get_active_material] or "
+"[method Mesh.surface_get_material] to get materials associated with the "
+"[Mesh] resource."
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the number of surface materials."
-msgstr ""
+#, fuzzy
+msgid "Returns the number of surface override materials."
+msgstr "İki vektörün kalanını döndürür."
#: doc/classes/MeshInstance.xml
msgid ""
@@ -35443,7 +35542,10 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Sets the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Sets the override [Material] for the specified surface of the [Mesh] "
+"resource. This material is associated with this [MeshInstance] rather than "
+"with the [Mesh] resource."
msgstr ""
#: doc/classes/MeshInstance.xml
@@ -35474,9 +35576,10 @@ msgstr ""
#: doc/classes/MeshInstance2D.xml
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\"."
+"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be "
+"automatically created from an existing [Sprite] via a tool in the editor "
+"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to "
+"MeshInstance2D[/b] at the top of the 2D editor viewport."
msgstr ""
#: doc/classes/MeshInstance2D.xml
@@ -36241,6 +36344,9 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"Provides navigation and pathfinding within a collection of "
"[NavigationMesh]es. By default, these will be automatically collected from "
"child [NavigationMeshInstance] nodes. In addition to basic pathfinding, this "
@@ -36281,7 +36387,15 @@ msgid ""
msgstr ""
#: doc/classes/Navigation.xml
+#, fuzzy
+msgid "Returns the [RID] of the navigation map on the [NavigationServer]."
+msgstr "Verilen değerin sinüsünü döndürür."
+
+#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"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, "
@@ -36303,16 +36417,31 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation.get_simple_path] path query."
+msgstr ""
+
+#: doc/classes/Navigation.xml
+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/Navigation.xml doc/classes/Navigation2DServer.xml
+#: doc/classes/NavigationServer.xml
+msgid ""
+"Emitted when a navigation map is updated, when a region moves or is modified."
+msgstr ""
+
#: doc/classes/Navigation2D.xml
msgid "2D navigation and pathfinding node."
msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -36332,6 +36461,9 @@ msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -36341,6 +36473,12 @@ msgstr ""
msgid "The XY plane cell size to use for fields."
msgstr ""
+#: doc/classes/Navigation2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation2D.get_simple_path] path query."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml
msgid "Server interface for low-level 2D navigation access."
msgstr ""
@@ -36357,8 +36495,12 @@ msgid ""
"through scripts.\n"
"For two regions to be connected to each other, they must share a similar "
"edge. An edge is considered connected to another if both of its two vertices "
-"are at a distance less than [member Navigation.edge_connection_margin] to "
-"the respective other edge's vertex.\n"
+"are at a distance less than navigation map [code]edge_connection_margin[/"
+"code] to the respective other edge's vertex.\n"
+"You may assign navigation layers to regions with [method Navigation2DServer."
+"region_set_navigation_layers], which then can be checked upon when "
+"requesting a path with [method Navigation2DServer.map_get_path]. This allows "
+"allowing or forbidding some areas to 2D objects.\n"
"To use the collision avoidance system, you may use agents. You can set an "
"agent's target velocity, then the servers will emit a callback with a "
"modified velocity.\n"
@@ -36388,7 +36530,17 @@ msgstr ""
"Eğer [code]true[/code] ise düğümler sıraya sokulur, yoksa sıraya sokulmaz."
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Callback called at the end of the RVO process."
+msgid ""
+"Callback called at the end of the RVO process. If a callback is created "
+"manually and the agent is placed on a navigation map it will calculate "
+"avoidance for the agent and dispatch the calculated [code]safe_velocity[/"
+"code] to the [code]receiver[/code] object with a signal to the chosen "
+"[code]method[/code] name.\n"
+"[b]Note:[/b] Created callbacks are always processed independently of the "
+"SceneTree state as long as the agent is on a navigation map and not freed. "
+"To disable the dispatch of a callback from an agent use [method "
+"agent_set_callback] again with a [code]null[/code] object as the "
+"[code]receiver[/code]."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -36449,15 +36601,55 @@ msgid "Destroys the given RID."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns all created navigation map [RID]s on the NavigationServer. This "
+"returns both 2D and 3D created navigation maps as there is technically no "
+"distinction between them."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Create a new map."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"This function immediately forces synchronization of the specified navigation "
+"[code]map[/code] [RID]. By default navigation maps are only synchronized at "
+"the end of each physics frame. This function can be used to immediately "
+"(re)calculate all the navigation meshes and region connections of the "
+"navigation map. This makes it possible to query a navigation path for a "
+"changed map immediately and in the same frame (multiple times if needed).\n"
+"Due to technical restrictions the current NavigationServer command queue "
+"will be flushed. This means all already queued update commands for this "
+"physics frame will be executed, even those intended for other maps, regions "
+"and agents not part of the specified map. The expensive computation of the "
+"navigation meshes and region connections of a map will only be done for the "
+"specified map. Other maps will receive the normal synchronization at the end "
+"of the physics frame. Should the specified map receive changes after the "
+"forced update it will update again as well when the other maps receive their "
+"update.\n"
+"Avoidance processing and dispatch of the [code]safe_velocity[/code] signals "
+"is untouched by this function and continues to happen for all maps and "
+"agents at the end of the physics frame.\n"
+"[b]Note:[/b] With great power comes great responsibility. This function "
+"should only be used by users that really know what they are doing and have a "
+"good reason for it. Forcing an immediate update of a navigation map requires "
+"locking the NavigationServer and flushing the entire NavigationServer "
+"command queue. Not only can this severely impact the performance of a game "
+"but it can also introduce bugs if used inappropriately without much "
+"foresight."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns all navigation agents [RID]s that are currently assigned to the "
"requested navigation [code]map[/code]."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
#, fuzzy
msgid "Returns the map cell size."
@@ -36482,7 +36674,10 @@ msgid ""
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Returns the navigation path to reach the destination from the origin."
+msgid ""
+"Returns the navigation path to reach the destination from the origin. "
+"[code]navigation_layers[/code] is a bitmask of all region layers that are "
+"allowed to be in the path."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -36502,6 +36697,12 @@ msgstr ""
msgid "Sets the map active."
msgstr "Verilen bir değerin ark-sinüsünü döndürür."
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/"
+"b] Currently not implemented."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Set the map cell size used to weld the navigation mesh polygons."
msgstr ""
@@ -36517,15 +36718,78 @@ msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"Returns the ending point of a connection door. [code]connection[/code] is an "
+"index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns the starting point of a connection door. [code]connection[/code] is "
+"an index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns how many connections this [code]region[/code] has with other regions "
+"in the map."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]."
+msgstr "İki vektörün kalanını döndürür."
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns the navigation map [RID] the requested [code]region[/code] is "
"currently assigned to."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
#, fuzzy
+msgid "Returns the region's navigation layers."
+msgstr "Verilen değerin sinüsünü döndürür."
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]."
+msgstr "Verilen değerin sinüsünü döndürür."
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns [code]true[/code] if the provided [code]point[/code] in world space "
+"is currently owned by the provided navigation [code]region[/code]. Owned in "
+"this context means that one of the region's navigation mesh polygon faces "
+"has a possible position at the closest distance to this point compared to "
+"all other navigation meshes from other navigation regions that are also "
+"registered on the navigation map of the provided region.\n"
+"If multiple navigation meshes have positions at equal distance the "
+"navigation region whose polygons are processed first wins the ownership. "
+"Polygons are processed in the same order that navigation regions were "
+"registered on the NavigationServer.\n"
+"[b]Note:[/b] If navigation meshes from different navigation regions overlap "
+"(which should be avoided in general) the result might not be what is "
+"expected."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]."
+msgstr "Verilen değerin sinüsünü döndürür."
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
msgid "Sets the map for the region."
msgstr "Verilen değerin sinüsünü döndürür."
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method Navigation2DServer.map_get_path])."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
#, fuzzy
msgid "Sets the navigation mesh for the region."
@@ -36535,6 +36799,11 @@ msgstr "[NavigationMeshGenerator] tekil nesnesi."
msgid "Sets the global transformation for the region."
msgstr ""
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]."
+msgstr "Verilen değerin sinüsünü döndürür."
+
#: doc/classes/NavigationAgent.xml
msgid "3D agent used in navigation for collision avoidance."
msgstr ""
@@ -36544,9 +36813,16 @@ msgid ""
"3D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationAgent] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World] navigation map. If this node is a child of a [Navigation] "
+"node it will register to the navigation map of the navigation node or the "
+"function [method set_navigation] can be used to set the navigation node "
+"directly. [NavigationAgent] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -36564,7 +36840,15 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-msgid "Returns the path from start to finish in global coordinates."
+msgid ""
+"Returns this agent's current path from start to finish in global "
+"coordinates. The path only updates when the target location is changed or "
+"the agent requires a repath. The path array is not intended to be used in "
+"direct path movement as the agent has its own internal path logic that would "
+"get corrupted by changing the path array manually. Use the intended [method "
+"get_next_location] once every physics frame to receive the next path point "
+"for the agents movement as this function also updates the internal path "
+"logic."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -36580,11 +36864,24 @@ msgid ""
"system."
msgstr ""
-#: doc/classes/NavigationAgent.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
+"Returns the [RID] of the navigation map for this NavigationAgent node. This "
+"function returns always the map set on the NavigationAgent node and not the "
+"map of the abstract agent on the NavigationServer. If the agent map is "
+"changed directly with the NavigationServer API the NavigationAgent node will "
+"not be aware of the map change. Use [method set_navigation_map] to change "
+"the navigation map for the NavigationAgent and also update the agent on the "
+"NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"Returns a [Vector3] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the origin of the agent's parent."
+"Returns the next location in global coordinates that can be moved to, making "
+"sure that there are no static objects in the way. If the agent does not have "
+"a navigation path, it will return the position of the agent's parent. The "
+"use of this function once every physics frame is required to update the "
+"internal path logic of the NavigationAgent."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -36626,6 +36923,12 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"Sets the [RID] of the navigation map this NavigationAgent node should use "
+"and also updates the [code]agent[/code] on the NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"Sets the user desired final location. This will clear the current navigation "
"path."
msgstr ""
@@ -36638,7 +36941,13 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml
-msgid "The agent height offset to match the navigation mesh height."
+msgid ""
+"The NavigationAgent height offset is subtracted from the y-axis value of any "
+"vector path position for this NavigationAgent. The NavigationAgent height "
+"offset does not change or influence the navigation mesh or pathfinding query "
+"result. Additional navigation maps that use regions with navigation meshes "
+"that the developer baked with appropriate agent radius or height values are "
+"required to support different-sized agents."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -36665,26 +36974,53 @@ msgstr ""
msgid "The maximum speed that an agent can move."
msgstr ""
+#: doc/classes/NavigationAgent.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "The distance to search for other agents."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"The distance threshold before a path point is considered to be reached. This "
+"will allow an agent to not have to hit a path point on the path exactly, but "
+"in the area. If this value is set to high the NavigationAgent will skip "
+"points on the path which can lead to leaving the navigation mesh. If this "
+"value is set to low the NavigationAgent will be stuck in a repath loop cause "
+"it will constantly overshoot or undershoot the distance to the next point on "
+"each physics frame update."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"The maximum distance the agent is allowed away from the ideal path to the "
"final location. This can happen due to trying to avoid collisions. When the "
"maximum distance is exceeded, it recalculates the ideal path."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-msgid "The radius of the agent."
+msgid ""
+"The radius of the avoidance agent. This is the \"body\" of the avoidance "
+"agent and not the avoidance maneuver starting radius (which is controlled by "
+"[member neighbor_dist]).\n"
+"Does not affect normal pathfinding. To change an actor's pathfinding radius "
+"bake [NavigationMesh] resources with a different [member NavigationMesh."
+"agent_radius] property and use different navigation maps for each actor size."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"The distance threshold before a target is considered to be reached. This "
-"will allow an agent to not have to hit a point on the path exactly, but in "
-"the area."
+"The distance threshold before the final target point is considered to be "
+"reached. This will allow an agent to not have to hit the point of the final "
+"target exactly, but only the area. If this value is set to low the "
+"NavigationAgent will be stuck in a repath loop cause it will constantly "
+"overshoot or undershoot the distance to the final target point on each "
+"physics frame update."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -36727,9 +37063,16 @@ msgid ""
"2D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationAgent2D] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World2D] navigation map. If this node is a child of a "
+"[Navigation2D] node it will register to the navigation map of the navigation "
+"node or the function [method set_navigation] can be used to set the "
+"navigation node directly. [NavigationAgent2D] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent2D.xml
@@ -36746,13 +37089,6 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent2D.xml
-msgid ""
-"Returns a [Vector2] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the position of the agent's parent."
-msgstr ""
-
-#: doc/classes/NavigationAgent2D.xml
#, fuzzy
msgid "Returns the [RID] of this agent on the [Navigation2DServer]."
msgstr "Verilen değerin sinüsünü döndürür."
@@ -36773,6 +37109,13 @@ msgid ""
"only be enabled on agents that currently require it."
msgstr ""
+#: doc/classes/NavigationAgent2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent2D] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationMesh.xml
msgid "A mesh to approximate the walkable areas and obstacles."
msgstr ""
@@ -36803,8 +37146,8 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
-"Returns whether the specified [code]bit[/code] of the [member geometry/"
-"collision_mask] is set."
+"Returns whether the specified [code]bit[/code] of the [member "
+"geometry_collision_mask] is set."
msgstr ""
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
@@ -36827,9 +37170,9 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/"
-"code] in the [member geometry/collision_mask].\n"
+"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]."
+"code] in the [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
@@ -36843,14 +37186,14 @@ 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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36862,7 +37205,7 @@ 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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36890,13 +37233,17 @@ msgstr ""
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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
-"If [code]true[/code], marks walkable spans as not walkable if the clearance "
-"above the span is less than [member agent/height]."
+"If the baking [AABB] has a volume the navigation mesh baking will be "
+"restricted to its enclosing area."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+msgid "The position offset applied to the [member filter_baking_aabb] [AABB]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36908,13 +37255,19 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]true[/code], marks non-walkable spans as walkable if their maximum "
-"is within [member agent/max_climb] of a walkable neighbor."
+"is within [member agent_max_climb] of a walkable neighbor."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+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
msgid ""
"The physics layers to scan for static colliders.\n"
-"Only used when [member geometry/parsed_geometry_type] is [constant "
+"Only used when [member geometry_parsed_geometry_type] is [constant "
"PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]."
msgstr ""
@@ -36933,7 +37286,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"The name of the group to scan for geometry.\n"
-"Only used when [member geometry/source_geometry_mode] is [constant "
+"Only used when [member geometry_source_geometry_mode] is [constant "
"SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant "
"SOURCE_GEOMETRY_GROUPS_EXPLICIT]."
msgstr ""
@@ -36996,7 +37349,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Parses [StaticBody] colliders as geometry. The collider should be in any of "
-"the layers specified by [member geometry/collision_mask]."
+"the layers specified by [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -37018,13 +37371,13 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Scans nodes in a group and their child nodes recursively for geometry. The "
-"group is specified by [member geometry/source_group_name]."
+"group is specified by [member geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Uses nodes in a group for geometry. The group is specified by [member "
-"geometry/source_group_name]."
+"geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -37066,7 +37419,15 @@ msgid ""
"geometry for walkable terrain suitable to [NavigationMesh] agent properties "
"by creating a voxel world around the meshes bounding area.\n"
"The finalized navigation mesh is then returned and stored inside the "
-"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes."
+"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] "
+"nodes.\n"
+"[b]Note:[/b] Using meshes to not only define walkable surfaces but also "
+"obstruct navigation baking does not always work. The navigation baking has "
+"no concept of what is a geometry \"inside\" when dealing with mesh source "
+"geometry and this is intentional. Depending on current baking parameters, as "
+"soon as the obstructing mesh is large enough to fit a navigation mesh area "
+"inside, the baking will generate navigation mesh areas that are inside the "
+"obstructing source geometry mesh."
msgstr ""
#: doc/classes/NavigationMeshGenerator.xml
@@ -37074,8 +37435,8 @@ msgid ""
"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child "
"nodes under the provided [code]root_node[/code] or a specific group of nodes "
"for potential source geometry. The parse behavior can be controlled with the "
-"[member NavigationMesh.geometry/parsed_geometry_type] and [member "
-"NavigationMesh.geometry/source_geometry_mode] properties on the "
+"[member NavigationMesh.geometry_parsed_geometry_type] and [member "
+"NavigationMesh.geometry_source_geometry_mode] properties on the "
"[NavigationMesh] resource."
msgstr ""
@@ -37093,8 +37454,21 @@ msgstr ""
#: doc/classes/NavigationMeshInstance.xml
msgid ""
"An instance of a [NavigationMesh]. It tells the [Navigation] node what can "
-"be navigated and what cannot, based on the [NavigationMesh] resource. This "
-"should be a child of a [Navigation] node."
+"be navigated and what cannot, based on the [NavigationMesh] resource.\n"
+"By default this node will register to the default [World] navigation map. If "
+"this node is a child of a [Navigation] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method NavigationServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The cost of entering this region from another region can be controlled with "
+"the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The cost of traveling distances inside this region can be controlled with "
+"the [member travel_cost] multiplier."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
@@ -37123,11 +37497,35 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding enters this region's navmesh from another regions navmesh "
+"the [code]enter_cost[/code] value is added to the path distance for "
+"determining the shortest path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationMesh] "
+"belongs to. On path requests with [method NavigationServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
#, fuzzy
msgid "The [NavigationMesh] resource to use."
msgstr "[NavigationMeshGenerator] tekil nesnesi."
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding moves inside this region's navmesh the traveled distances "
+"are multiplied with [code]travel_cost[/code] for determining the shortest "
+"path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
msgid "Notifies when the navigation mesh bake operation is completed."
msgstr ""
@@ -37144,7 +37542,9 @@ msgid ""
"3D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationObstacle] is physics safe."
+"[NavigationObstacle] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle.xml
@@ -37185,7 +37585,9 @@ msgid ""
"2D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationObstacle2D] is physics safe."
+"[NavigationObstacle2D] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle2D.xml
@@ -37266,6 +37668,14 @@ msgstr ""
#: doc/classes/NavigationPolygon.xml
msgid ""
+"Returns the [NavigationMesh] resulting from this navigation polygon. This "
+"navmesh can be used to update the navmesh of a region with the [method "
+"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server "
+"behind the scene)."
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml
+msgid ""
"Returns a [PoolVector2Array] containing the vertices of an outline that was "
"created in the editor or by script."
msgstr ""
@@ -37302,6 +37712,30 @@ msgid ""
msgstr ""
#: doc/classes/NavigationPolygonInstance.xml
+msgid "A region of the 2D navigation map."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A region of the navigation map. It tells the [Navigation2DServer] what can "
+"be navigated and what cannot, based on its [NavigationPolygon] resource.\n"
+"By default this node will register to the default [World2D] navigation map. "
+"If this node is a child of a [Navigation2D] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The pathfinding cost of entering this region from another region can be "
+"controlled with the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The pathfinding cost of traveling distances inside this region can be "
+"controlled with the [member travel_cost] multiplier."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
msgid ""
"Returns the [RID] of this region on the [Navigation2DServer]. Combined with "
"[method Navigation2DServer.map_get_closest_point_owner] can be used to "
@@ -37309,6 +37743,23 @@ msgid ""
"navigation map."
msgstr ""
+#: doc/classes/NavigationPolygonInstance.xml
+msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationPolygon] "
+"belongs to. On path requests with [method Navigation2DServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+#, fuzzy
+msgid "The [NavigationPolygon] resource to use."
+msgstr "[NavigationMeshGenerator] tekil nesnesi."
+
#: doc/classes/NavigationServer.xml
msgid "Server interface for low-level 3D navigation access."
msgstr ""
@@ -37388,6 +37839,12 @@ msgid "Bakes the navigation mesh."
msgstr ""
#: doc/classes/NavigationServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method NavigationServer.map_get_path])."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
msgid "Control activation of this server."
msgstr ""
@@ -38854,13 +39311,19 @@ msgstr ""
#: doc/classes/Node.xml
msgid ""
"Emitted when a child node enters the scene tree, either because it entered "
-"on its own or because this node entered with it."
+"on its own or because this node entered with it.\n"
+"This signal is emitted [i]after[/i] the child node's own [constant "
+"NOTIFICATION_ENTER_TREE] and [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
msgid ""
-"Emitted when a child node exits the scene tree, either because it exited on "
-"its own or because this node exited."
+"Emitted when a child node is about to exit the scene tree, either because it "
+"is being removed or freed directly, or because this node is exiting the "
+"tree.\n"
+"When this signal is received, the child [code]node[/code] is still in the "
+"tree and valid. This signal is emitted [i]after[/i] the child node's own "
+"[signal tree_exiting] and [constant NOTIFICATION_EXIT_TREE]."
msgstr ""
#: doc/classes/Node.xml
@@ -38872,7 +39335,10 @@ msgid "Emitted when the node is renamed."
msgstr ""
#: doc/classes/Node.xml
-msgid "Emitted when the node enters the tree."
+msgid ""
+"Emitted when the node enters the tree.\n"
+"This signal is emitted [i]after[/i] the related [constant "
+"NOTIFICATION_ENTER_TREE] notification."
msgstr ""
#: doc/classes/Node.xml
@@ -38882,15 +39348,21 @@ msgstr ""
#: doc/classes/Node.xml
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)."
+"the right place for de-initialization (or a \"destructor\", if you will).\n"
+"This signal is emitted [i]before[/i] the related [constant "
+"NOTIFICATION_EXIT_TREE] notification."
msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node enters a [SceneTree]."
+msgid ""
+"Notification received when the node enters a [SceneTree].\n"
+"This notification is emitted [i]before[/i] the related [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node is about to exit a [SceneTree]."
+msgid ""
+"Notification received when the node is about to exit a [SceneTree].\n"
+"This notification is emitted [i]after[/i] the related [signal tree_exiting]."
msgstr ""
#: doc/classes/Node.xml
@@ -39151,7 +39623,13 @@ msgid "Rotation in degrees, relative to the node's parent."
msgstr ""
#: doc/classes/Node2D.xml
-msgid "The node's scale. Unscaled value: [code](1, 1)[/code]."
+msgid ""
+"The node's scale. Unscaled value: [code](1, 1)[/code].\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
#: doc/classes/Node2D.xml
@@ -40596,6 +41074,10 @@ msgid ""
" if argument.find(\"=\") > -1:\n"
" var key_value = argument.split(\"=\")\n"
" arguments[key_value[0].lstrip(\"--\")] = key_value[1]\n"
+" else:\n"
+" # Options without an argument will be present in the dictionary,\n"
+" # with the value set to an empty string.\n"
+" arguments[argument.lstrip(\"--\")] = \"\"\n"
"[/codeblock]"
msgstr ""
@@ -41253,8 +41735,15 @@ msgstr ""
msgid ""
"Moves the file or directory to the system's recycle bin. See also [method "
"Directory.remove].\n"
+"The method takes only global paths, so you may need to use [method "
+"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/"
+"code] as it will not work in exported project.\n"
"[b]Note:[/b] If the user has disabled the recycle bin on their system, the "
-"file will be permanently deleted instead."
+"file will be permanently deleted instead.\n"
+"[codeblock]\n"
+"var file_to_remove = \"user://slot1.sav\"\n"
+"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/OS.xml
@@ -46121,7 +46610,18 @@ msgstr ""
#: doc/classes/PopupMenu.xml
msgid ""
"[PopupMenu] is a [Control] that displays a list of options. They are popular "
-"in toolbars or context menus."
+"in toolbars or context menus.\n"
+"[b]Incremental search:[/b] Like [ItemList] and [Tree], [PopupMenu] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/PopupMenu.xml
@@ -47631,7 +48131,16 @@ msgid ""
msgstr ""
#: doc/classes/ProjectSettings.xml
-msgid "Message to be displayed before the backtrace when the engine crashes."
+msgid ""
+"Message to be displayed before the backtrace when the engine crashes. By "
+"default, this message is only used in exported projects due to the editor-"
+"only override applied to this setting."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Editor-only override for [member debug/settings/crash_handler/message]. Does "
+"not affect exported projects in debug or release mode."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -47876,6 +48385,18 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default naming style for scene files to infer from their root nodes. "
+"Possible options are:\n"
+"- [code]0[/code] (Auto): Uses the scene root name as is without changing its "
+"casing.\n"
+"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase "
+"casing.\n"
+"- [code]2[/code] (snake_case): Converts the scene root name to snake_case "
+"casing."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -48101,6 +48622,198 @@ msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 1."
msgstr ""
@@ -48309,6 +49022,198 @@ msgid "Optional name for the 2D render layer 9."
msgstr ""
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 1."
msgstr ""
@@ -48576,6 +49481,49 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default cell height for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_height].\n"
+"[b]Note:[/b] Currently not implemented."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 2D navigation maps. See [method "
+"Navigation2DServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell height for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_height]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 3D navigation maps. See [method "
+"NavigationServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default map up vector for 3D navigation maps. See [method NavigationServer."
+"map_set_up]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -49249,20 +50197,28 @@ msgid ""
"cause.\n"
"The default value is a conservative one, so you are advised to tweak it "
"according to the hardware you are targeting.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"The default is a very conservative override for [code]rendering/gles3/"
-"shaders/max_concurrent_compiles[/code].\n"
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
"Depending on the specific devices you are targeting, you may want to raise "
"it.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
+"Depending on the specific browsers you are targeting, you may want to raise "
+"it.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -49270,19 +50226,28 @@ msgid ""
"The maximum size, in megabytes, that the ubershader cache can grow up to. On "
"startup, the least recently used entries will be deleted until the total "
"size is within bounds.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/ubershader_cache_size_mb[/"
-"code], so a smaller maximum size can be configured for mobile platforms, "
-"where storage space is more limited.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for mobile platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for web platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] Currently, shader caching is generally unavailable on web "
+"platforms.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -49314,14 +50279,22 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/shader_compilation_mode[/"
-"code], so asynchronous compilation can be disabled for mobile.\n"
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on mobile platforms.\n"
"You may want to do that since mobile GPUs generally won't support "
"ubershaders due to their complexity."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on web platforms.\n"
+"You may want to do that since certain browsers (especially on mobile "
+"platforms) generally won't support ubershaders due to their complexity."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
@@ -50078,7 +51051,6 @@ msgid ""
"- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/"
"code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, "
"small grid radius values may lead to unwanted groupings.\n"
-"[/codeblock]\n"
"[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more "
"effective and faster [VisibilityNotifier] functionality. For most use cases, "
"[method Vector3.distance_to] or [method Vector3.distance_squared_to] are "
@@ -52234,6 +53206,22 @@ msgid "Makes text fill width."
msgstr ""
#: doc/classes/RichTextLabel.xml
+msgid "Aligns top of the inline image to the top of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns center of the inline image to the center of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns bottom of the inline image to the baseline of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns bottom of the inline image to the bottom of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
msgid "Each list item has a number marker."
msgstr ""
@@ -53971,8 +54959,8 @@ msgid ""
" yield(get_tree().create_timer(1.0), \"timeout\")\n"
" print(\"Timer ended.\")\n"
"[/codeblock]\n"
-"The timer will be automatically freed after its time elapses, so be aware "
-"that any reference you might have kept to it will become invalid."
+"The timer will be dereferenced after its time elapses. To preserve the "
+"timer, you can keep a reference to it. See [Reference]."
msgstr ""
#: doc/classes/SceneTreeTimer.xml
@@ -54004,24 +54992,23 @@ msgid ""
"manually (i.e. by using [code]Tween.new()[/code]) are invalid. They can't be "
"used for tweening values, but you can do manual interpolation with [method "
"interpolate_value].\n"
-"A [SceneTreeTween] animation is composed of a sequence of [Tweener]s, which "
-"by default are executed one after another. You can create a sequence by "
-"appending [Tweener]s to the [SceneTreeTween]. Animating something with a "
-"[Tweener] is called tweening. Example tweening sequence looks like this:\n"
+"A tween animation is created by adding [Tweener]s to the [SceneTreeTween] "
+"object, using [method tween_property], [method tween_interval], [method "
+"tween_callback] or [method tween_method]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1)\n"
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"This sequence will make the [code]$Sprite[/code] node turn red, then shrink "
-"and finally the [method Node.queue_free] is called to remove the sprite. See "
-"methods [method tween_property], [method tween_interval], [method "
-"tween_callback] and [method tween_method] for more usage information.\n"
+"This sequence will make the [code]$Sprite[/code] node turn red, then shrink, "
+"before finally calling [method Node.queue_free] to free the sprite. "
+"[Tweener]s are executed one after another by default. This behavior can be "
+"changed using [method parallel] and [method set_parallel].\n"
"When a [Tweener] is created with one of the [code]tween_*[/code] methods, a "
"chained method call can be used to tweak the properties of this [Tweener]. "
-"For example, if you want to set different transition type in the above "
-"example, you can do:\n"
+"For example, if you want to set a different transition type in the above "
+"example, you can use [method set_trans]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1).set_trans(Tween."
@@ -54030,8 +55017,9 @@ msgid ""
"TRANS_BOUNCE)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Most of the [SceneTreeTween] methods can be chained this way too. In this "
-"example the [SceneTreeTween] is bound and have set a default transition:\n"
+"Most of the [SceneTreeTween] methods can be chained this way too. In the "
+"following example the [SceneTreeTween] is bound to the running script's node "
+"and a default transition is set for its [Tweener]s:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween().bind_node(self).set_trans(Tween."
"TRANS_ELASTIC)\n"
@@ -54039,16 +55027,16 @@ msgid ""
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Another interesting use for [SceneTreeTween]s is animating arbitrary set of "
+"Another interesting use for [SceneTreeTween]s is animating arbitrary sets of "
"objects:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"for sprite in get_children():\n"
-" tween.tween_property(sprite, \"position\", Vector2(), 1)\n"
+" tween.tween_property(sprite, \"position\", Vector2(0, 0), 1)\n"
"[/codeblock]\n"
"In the example above, all children of a node are moved one after another to "
"position (0, 0).\n"
-"Some [Tweener]s use transitions and eases. The first accepts an [enum Tween."
+"Some [Tweener]s use transitions and eases. The first accepts a [enum Tween."
"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 Tween.EaseType] constant, and "
@@ -54060,7 +55048,7 @@ msgid ""
"tween_cheatsheet.png]Tween easing and transition types cheatsheet[/url]\n"
"[b]Note:[/b] All [SceneTreeTween]s will automatically start by default. To "
"prevent a [SceneTreeTween] from autostarting, you can call [method stop] "
-"immediately after it was created."
+"immediately after it is created."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -54090,21 +55078,24 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
-"Processes the [SceneTreeTween] by given [code]delta[/code] value, in "
-"seconds. Mostly useful when the [SceneTreeTween] is paused, for controlling "
-"it manually. Can also be used to end the [SceneTreeTween] animation "
-"immediately, by using [code]delta[/code] longer than the whole duration.\n"
+"Processes the [SceneTreeTween] by the given [code]delta[/code] value, in "
+"seconds. This is mostly useful for manual control when the [SceneTreeTween] "
+"is paused. It can also be used to end the [SceneTreeTween] animation "
+"immediately, by setting [code]delta[/code] longer than the whole duration of "
+"the [SceneTreeTween] animation.\n"
"Returns [code]true[/code] if the [SceneTreeTween] still has [Tweener]s that "
"haven't finished.\n"
-"[b]Note:[/b] The [SceneTreeTween] will become invalid after finished, but "
-"you can call [method stop] after the step, to keep it and reset."
+"[b]Note:[/b] The [SceneTreeTween] will become invalid in the next processing "
+"frame after its animation finishes. Calling [method stop] after performing "
+"[method custom_step] instead keeps and resets the [SceneTreeTween]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Returns the total time in seconds the [SceneTreeTween] has been animating (i."
-"e. time since it started, not counting pauses etc.). The time is affected by "
-"[method set_speed_scale] and [method stop] will reset it to [code]0[/code].\n"
+"e. the time since it started, not counting pauses etc.). The time is "
+"affected by [method set_speed_scale], and [method stop] will reset it to "
+"[code]0[/code].\n"
"[b]Note:[/b] As it results from accumulating frame deltas, the time returned "
"after the [SceneTreeTween] has finished animating will be slightly greater "
"than the actual [SceneTreeTween] duration."
@@ -54140,11 +55131,10 @@ msgstr ""
msgid ""
"Returns whether the [SceneTreeTween] is valid. A valid [SceneTreeTween] is a "
"[SceneTreeTween] contained by the scene tree (i.e. the array from [method "
-"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). "
-"[SceneTreeTween] might become invalid when it has finished tweening or was "
-"killed, also when created with [code]Tween.new()[/code]. Invalid "
-"[SceneTreeTween] can't have [Tweener]s appended, because it can't animate "
-"them. You can however still use [method interpolate_value]."
+"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). A "
+"[SceneTreeTween] might become invalid when it has finished tweening, is "
+"killed, or when created with [code]SceneTreeTween.new()[/code]. Invalid "
+"[SceneTreeTween]s can't have [Tweener]s appended."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -54184,16 +55174,15 @@ msgstr ""
msgid ""
"Sets the number of times the tweening sequence will be repeated, i.e. "
"[code]set_loops(2)[/code] will run the animation twice.\n"
-"Calling this method without arguments will make the [SceneTreeTween] run "
-"infinitely, until it is either killed by [method kill] or by freeing bound "
-"node, or all the animated objects have been freed (which makes further "
+"Calling this method without arguments will make the [Tween] run infinitely, "
+"until either it is killed with [method kill], the [Tween]'s bound node is "
+"freed, or all the animated objects have been freed (which makes further "
"animation impossible).\n"
"[b]Warning:[/b] Make sure to always add some duration/delay when using "
-"infinite loops. 0-duration looped animations (e.g. single [CallbackTweener] "
-"with no delay or [PropertyTweener] with invalid node) are equivalent to "
-"infinite [code]while[/code] loops and will freeze your game. If a "
-"[SceneTreeTween]'s lifetime depends on some node, always use [method "
-"bind_node]."
+"infinite loops. To prevent the game freezing, 0-duration looped animations "
+"(e.g. a single [CallbackTweener] with no delay) are stopped after a small "
+"number of loops, which may produce unexpected results. If a [Tween]'s "
+"lifetime depends on some node, always use [method bind_node]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -54255,10 +55244,10 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Creates and appends an [IntervalTweener]. This method can be used to create "
-"delays in the tween animation, as an alternative for using the delay in "
-"other [Tweener]s or when there's no animation (in which case the "
-"[SceneTreeTween] acts as a timer). [code]time[/code] is the length of the "
-"interval, in seconds.\n"
+"delays in the tween animation, as an alternative to using the delay in other "
+"[Tweener]s, or when there's no animation (in which case the [SceneTreeTween] "
+"acts as a timer). [code]time[/code] is the length of the interval, in "
+"seconds.\n"
"Example: creating an interval in code execution.\n"
"[codeblock]\n"
"# ... some code\n"
@@ -54312,8 +55301,8 @@ msgid ""
"Creates and appends a [PropertyTweener]. This method tweens a "
"[code]property[/code] of an [code]object[/code] between an initial value and "
"[code]final_val[/code] in a span of time equal to [code]duration[/code], in "
-"seconds. The initial value by default is a value at the time the tweening of "
-"the [PropertyTweener] start. For example:\n"
+"seconds. The initial value by default is the property's value at the time "
+"the tweening of the [PropertyTweener] starts. For example:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"tween.tween_property($Sprite, \"position\", Vector2(100, 200), 1)\n"
@@ -54344,16 +55333,15 @@ msgid ""
"Emitted when the [SceneTreeTween] has finished all tweening. Never emitted "
"when the [SceneTreeTween] is set to infinite looping (see [method "
"set_loops]).\n"
-"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) after this signal "
-"is emitted, but it doesn't happen immediately, but on the next processing "
-"frame. Calling [method stop] inside the signal callback will preserve the "
-"[SceneTreeTween]."
+"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) in the next "
+"processing frame after this signal is emitted. Calling [method stop] inside "
+"the signal callback will prevent the [SceneTreeTween] from being removed."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Emitted when a full loop is complete (see [method set_loops]), providing the "
-"loop index. This signal is not emitted after final loop, use [signal "
+"loop index. This signal is not emitted after the final loop, use [signal "
"finished] instead for this case."
msgstr ""
@@ -54361,7 +55349,7 @@ msgstr ""
msgid ""
"Emitted when one step of the [SceneTreeTween] is complete, providing the "
"step index. One step is either a single [Tweener] or a group of [Tweener]s "
-"running parallelly."
+"running in parallel."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -55693,7 +56681,12 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-msgid "Scale part of the local transformation."
+msgid ""
+"Scale part of the local transformation.\n"
+"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, the scale values will either be all "
+"positive or all negative."
msgstr ""
#: doc/classes/Spatial.xml
@@ -58328,11 +59321,11 @@ msgstr ""
msgid ""
"Returns [code]true[/code] if this string contains a valid integer.\n"
"[codeblock]\n"
-"print(\"7\".is_valid_int()) # Prints \"True\"\n"
-"print(\"14.6\".is_valid_int()) # Prints \"False\"\n"
-"print(\"L\".is_valid_int()) # Prints \"False\"\n"
-"print(\"+3\".is_valid_int()) # Prints \"True\"\n"
-"print(\"-12\".is_valid_int()) # Prints \"True\"\n"
+"print(\"7\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"14.6\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"L\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"+3\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"-12\".is_valid_integer()) # Prints \"True\"\n"
"[/codeblock]"
msgstr ""
@@ -61809,6 +62802,12 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml
+#, fuzzy
+msgid "If [code]true[/code], this TileMap bakes a navigation region."
+msgstr ""
+"Eğer [code]true[/code] ise düğümler sıraya sokulur, yoksa sıraya sokulmaz."
+
+#: doc/classes/TileMap.xml
msgid "If [code]true[/code], the cell's UVs will be clipped."
msgstr ""
@@ -61915,6 +62914,10 @@ msgid "The TileMap orientation mode. See [enum Mode] for possible values."
msgstr ""
#: doc/classes/TileMap.xml
+msgid "The navigation layers the TileMap generates its navigation regions in."
+msgstr ""
+
+#: doc/classes/TileMap.xml
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 "
@@ -63046,7 +64049,12 @@ msgstr ""
#: doc/classes/Transform2D.xml
msgid ""
"Returns a copy of the transform scaled by the given [code]scale[/code] "
-"factor, using matrix multiplication."
+"factor, using matrix multiplication.\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
#: doc/classes/Transform2D.xml
@@ -63202,7 +64210,18 @@ msgid ""
"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]."
+"to remove it from the [Tree].\n"
+"[b]Incremental search:[/b] Like [ItemList] and [PopupMenu], [Tree] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/Tree.xml
@@ -66734,11 +67753,12 @@ msgid "This enabler will stop [Particles2D] nodes."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _process function."
+msgid "This enabler will stop the parent's [method Node._process] function."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _physics_process function."
+msgid ""
+"This enabler will stop the parent's [method Node._physics_process] function."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
@@ -66778,6 +67798,16 @@ msgid "The VisibilityNotifier's bounding box."
msgstr ""
#: doc/classes/VisibilityNotifier.xml
+msgid ""
+"In addition to checking whether a node is on screen or within a [Camera]'s "
+"view, VisibilityNotifier can also optionally check whether a node is within "
+"a specified maximum distance when using a [Camera] with perspective "
+"projection. This is useful for throttling the performance requirements of "
+"nodes that are far away.\n"
+"[b]Note:[/b] This feature will be disabled if set to 0.0."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier.xml
msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view."
msgstr ""
@@ -71546,6 +72576,16 @@ msgid "The amount of shader rebinds in the frame."
msgstr ""
#: doc/classes/VisualServer.xml
+msgid ""
+"The peak amount of shaders that have been under compilation in the frame.\n"
+"This is useful to know when asynchronous shader compilation has finished for "
+"the current shaders on screen.\n"
+"[b]Note:[/b] For complete certainty, only assume there are no outstanding "
+"compilations when this value is zero for at least two frames in a row.\n"
+"Unimplemented in the GLES2 rendering backend, always returns 0."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
msgid "The amount of surface changes in the frame."
msgstr ""
@@ -74747,8 +75787,8 @@ msgstr ""
#: doc/classes/World.xml
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."
+"scenario, a navigation map and a sound space. Spatial nodes register their "
+"resources into the current world."
msgstr ""
#: doc/classes/World.xml
@@ -74763,11 +75803,17 @@ msgstr ""
#: doc/classes/World.xml
msgid ""
-"The World's fallback_environment will be used if the World's [Environment] "
-"fails or is missing."
+"The World's fallback environment will be used if [member environment] fails "
+"or is missing."
msgstr ""
#: doc/classes/World.xml
+#, fuzzy
+msgid ""
+"The [RID] of this world's navigation map. Used by the [NavigationServer]."
+msgstr "Verilen değerin sinüsünü döndürür."
+
+#: doc/classes/World.xml
msgid "The World's visual scenario."
msgstr ""
@@ -74782,8 +75828,8 @@ msgstr ""
#: doc/classes/World2D.xml
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."
+"visual scenario, a navigation map and a sound space. 2D nodes register their "
+"resources into the current 2D world."
msgstr ""
#: doc/classes/World2D.xml
@@ -74800,6 +75846,12 @@ msgid ""
msgstr ""
#: doc/classes/World2D.xml
+#, fuzzy
+msgid ""
+"The [RID] of this world's navigation map. Used by the [Navigation2DServer]."
+msgstr "Verilen değerin sinüsünü döndürür."
+
+#: doc/classes/World2D.xml
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."
diff --git a/doc/translations/uk.po b/doc/translations/uk.po
index fff6590fd7..e943465bca 100644
--- a/doc/translations/uk.po
+++ b/doc/translations/uk.po
@@ -17,7 +17,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2022-06-05 10:12+0000\n"
+"PO-Revision-Date: 2022-06-14 15:48+0000\n"
"Last-Translator: МироÑлав <hlopukmyroslav@gmail.com>\n"
"Language-Team: Ukrainian <https://hosted.weblate.org/projects/godot-engine/"
"godot-class-reference/uk/>\n"
@@ -477,7 +477,7 @@ msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
msgid ""
"Compares two values by checking their actual contents, recursing into any "
-"`Array` or `Dictionary` up to its deepest level.\n"
+"[Array] or [Dictionary] up to its deepest level.\n"
"This compares to [code]==[/code] in a number of ways:\n"
"- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/"
"code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] "
@@ -530,7 +530,7 @@ msgid ""
"- 1.0: Linear\n"
"- Greater than 1.0 (exclusive): Ease in\n"
"[/codeblock]\n"
-"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.4/img/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/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]."
@@ -1245,7 +1245,7 @@ msgid ""
"[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/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/img/"
"smoothstep_ease_comparison.png]Comparison between smoothstep() and ease(x, "
"-1.6521) return values[/url]"
msgstr ""
@@ -3530,6 +3530,12 @@ msgstr ""
#: doc/classes/@GlobalScope.xml
msgid ""
+"Hints that an integer property is a bitmask using the optionally named 2D "
+"navigation layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml
+msgid ""
"Hints that an integer property is a bitmask using the optionally named 3D "
"render layers."
msgstr ""
@@ -3542,6 +3548,12 @@ msgstr ""
#: doc/classes/@GlobalScope.xml
msgid ""
+"Hints that an integer property is a bitmask using the optionally named 3D "
+"navigation layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml
+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]."
@@ -8525,7 +8537,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/AStar.xml
+#: doc/classes/AStar.xml doc/classes/AStar2D.xml
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[/"
@@ -8724,7 +8736,10 @@ msgid ""
msgstr ""
#: doc/classes/AStar2D.xml
-msgid "Returns whether there is a connection/segment between the given points."
+msgid ""
+"Returns whether there is a connection/segment between the given points. 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/AStar2D.xml
@@ -8741,10 +8756,6 @@ msgid ""
msgstr ""
#: doc/classes/AStar2D.xml
-msgid "Deletes the segment between the given points."
-msgstr ""
-
-#: doc/classes/AStar2D.xml
msgid ""
"Returns the closest position to [code]to_position[/code] that resides inside "
"a segment between two connected points.\n"
@@ -8929,7 +8940,9 @@ msgid ""
"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."
+"transmit audio over the network. When capturing audio data from a "
+"microphone, the format of the samples will be stereo 32-bit floating point "
+"PCM."
msgstr ""
#: doc/classes/AudioEffectCapture.xml
@@ -13781,7 +13794,7 @@ msgid ""
msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
-#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/Navigation2D.xml
msgid "Returns the object's [RID]."
msgstr ""
@@ -19266,11 +19279,15 @@ msgid ""
msgstr ""
#: doc/classes/CurveTexture.xml
-msgid "The [code]curve[/code] rendered onto the texture."
-msgstr ""
+#, fuzzy
+msgid "The [Curve] that is rendered onto the texture."
+msgstr "Повертає ÑÐ¸Ð½ÑƒÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°."
#: doc/classes/CurveTexture.xml
-msgid "The width of the texture."
+msgid ""
+"The width of the texture (in pixels). Higher values make it possible to "
+"represent high-frequency data better (such as sudden direction changes), at "
+"the cost of increased generation time and memory usage."
msgstr ""
#: doc/classes/CylinderMesh.xml
@@ -19556,6 +19573,13 @@ msgid "Returns the list of keys in the [Dictionary]."
msgstr ""
#: doc/classes/Dictionary.xml
+msgid ""
+"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, "
+"duplicate keys will not be copied over, unless [code]overwrite[/code] is "
+"[code]true[/code]."
+msgstr ""
+
+#: doc/classes/Dictionary.xml
#, fuzzy
msgid "Returns the number of keys in the dictionary."
msgstr "Повертає лишок за двома векторами."
@@ -21496,9 +21520,23 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide a state data you want to be saved, like view "
+"position, grid settings, folding, etc. 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). This data is automatically saved for "
+"each scene in an [code]editstate[/code] file in the editor metadata folder. "
+"If you want to store global (scene-independent) editor data for your plugin, "
+"you can use [method get_window_layout] instead.\n"
+"Use [method set_state] to restore your saved state.\n"
+"[b]Note:[/b] This method should not be used to save important settings that "
+"should persist with the project.\n"
+"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be "
+"stored and restored correctly.\n"
+"[codeblock]\n"
+"func get_state():\n"
+" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n"
+" return state\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -21509,9 +21547,18 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide the GUI layout of the plugin or any other "
+"data you want to be stored. 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). The data is stored in the "
+"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n"
+"Use [method set_window_layout] to restore your saved layout.\n"
+"[codeblock]\n"
+"func get_window_layout(configuration):\n"
+" configuration.set_value(\"MyPlugin\", \"window_position\", $Window."
+"position)\n"
+" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -21624,11 +21671,30 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the state saved by [method get_state]."
+msgid ""
+"Restore the state saved by [method get_state]. This method is called when "
+"the current scene tab is changed in the editor.\n"
+"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise "
+"it will not be recognized and this method will not be called.\n"
+"[codeblock]\n"
+"func set_state(data):\n"
+" zoom = data.get(\"zoom\", 1.0)\n"
+" preferred_color = data.get(\"my_color\", Color.white)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the plugin GUI layout saved by [method get_window_layout]."
+msgid ""
+"Restore the plugin GUI layout and data saved by [method get_window_layout]. "
+"This method is called for every plugin on editor startup. Use the provided "
+"[code]configuration[/code] file to read your saved data.\n"
+"[codeblock]\n"
+"func set_window_layout(configuration):\n"
+" $Window.position = configuration.get_value(\"MyPlugin\", "
+"\"window_position\", Vector2())\n"
+" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", "
+"Color.white)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -26272,7 +26338,8 @@ msgid ""
"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])."
+"at fixed steps (see [member width]). See also [GradientTexture2D] and "
+"[CurveTexture]."
msgstr ""
#: doc/classes/GradientTexture.xml
@@ -26294,7 +26361,8 @@ msgid ""
"repeat] types using colors obtained from the gradient. 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] and [member height])."
+"[member width] and [member height]). See also [GradientTexture] and "
+"[CurveTexture]."
msgstr ""
#: doc/classes/GradientTexture2D.xml
@@ -27108,6 +27176,12 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+msgid ""
+"If [code]true[/code], this GridMap uses cell navmesh resources to create "
+"navigation regions."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid "If [code]true[/code], grid items are centered on the X axis."
msgstr ""
@@ -27158,6 +27232,10 @@ msgid "The assigned [MeshLibrary]."
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+msgid "The navigation layers the GridMap generates its navigation regions in."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
"Overrides the default friction and bounce physics properties for the whole "
"[GridMap]."
@@ -28381,7 +28459,7 @@ msgid ""
" # 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 body = to_json({\"name\": \"Godette\"})\n"
" error = http_request.request(\"https://httpbin.org/post\", [], true, "
"HTTPClient.METHOD_POST, body)\n"
" if error != OK:\n"
@@ -29550,7 +29628,7 @@ msgstr ""
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 "
+"([member 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 "
@@ -29699,10 +29777,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Returns the mouse mode. See the constants for more information."
-msgstr ""
-
-#: doc/classes/Input.xml
msgid ""
"Gets an input vector by specifying four actions for the positive and "
"negative X and Y axes.\n"
@@ -29896,24 +29970,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Sets the mouse mode. See the constants for more information."
-msgstr ""
-
-#: doc/classes/Input.xml
-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
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 "
@@ -29949,6 +30005,24 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
+msgid "Controls the mouse mode. See [enum MouseMode] for more information."
+msgstr ""
+
+#: doc/classes/Input.xml
+msgid ""
+"If [code]true[/code], similar input events sent by the operating system are "
+"accumulated. 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 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
msgid "Emitted when a joypad device has been connected or disconnected."
msgstr ""
@@ -30256,8 +30330,8 @@ msgstr ""
#: doc/classes/InputEventJoypadButton.xml
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]."
+"Represents the pressure the user puts on the button with their finger, if "
+"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]."
msgstr ""
#: doc/classes/InputEventJoypadMotion.xml
@@ -30520,9 +30594,9 @@ 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 "
+"at most. If you need more precise input reporting, set [member Input."
+"use_accumulated_input] to [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."
@@ -31010,7 +31084,18 @@ msgid ""
"[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."
+"fixed_column_width] greater than zero to wrap the text.\n"
+"[b]Incremental search:[/b] Like [PopupMenu] and [Tree], [ItemList] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/ItemList.xml
@@ -34762,12 +34847,18 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Returns the override [Material] for a surface of the [Mesh] resource.\n"
+"[b]Note:[/b] This function only returns [i]override[/i] materials associated "
+"with this [MeshInstance]. Consider using [method get_active_material] or "
+"[method Mesh.surface_get_material] to get materials associated with the "
+"[Mesh] resource."
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the number of surface materials."
-msgstr ""
+#, fuzzy
+msgid "Returns the number of surface override materials."
+msgstr "Повертає лишок за двома векторами."
#: doc/classes/MeshInstance.xml
msgid ""
@@ -34803,7 +34894,10 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Sets the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Sets the override [Material] for the specified surface of the [Mesh] "
+"resource. This material is associated with this [MeshInstance] rather than "
+"with the [Mesh] resource."
msgstr ""
#: doc/classes/MeshInstance.xml
@@ -34834,9 +34928,10 @@ msgstr ""
#: doc/classes/MeshInstance2D.xml
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\"."
+"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be "
+"automatically created from an existing [Sprite] via a tool in the editor "
+"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to "
+"MeshInstance2D[/b] at the top of the 2D editor viewport."
msgstr ""
#: doc/classes/MeshInstance2D.xml
@@ -35602,6 +35697,9 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"Provides navigation and pathfinding within a collection of "
"[NavigationMesh]es. By default, these will be automatically collected from "
"child [NavigationMeshInstance] nodes. In addition to basic pathfinding, this "
@@ -35642,7 +35740,15 @@ msgid ""
msgstr ""
#: doc/classes/Navigation.xml
+#, fuzzy
+msgid "Returns the [RID] of the navigation map on the [NavigationServer]."
+msgstr "Повертає ÑÐ¸Ð½ÑƒÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°."
+
+#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"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, "
@@ -35664,16 +35770,31 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation.get_simple_path] path query."
+msgstr ""
+
+#: doc/classes/Navigation.xml
+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/Navigation.xml doc/classes/Navigation2DServer.xml
+#: doc/classes/NavigationServer.xml
+msgid ""
+"Emitted when a navigation map is updated, when a region moves or is modified."
+msgstr ""
+
#: doc/classes/Navigation2D.xml
msgid "2D navigation and pathfinding node."
msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -35693,6 +35814,9 @@ msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -35702,6 +35826,12 @@ msgstr ""
msgid "The XY plane cell size to use for fields."
msgstr ""
+#: doc/classes/Navigation2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation2D.get_simple_path] path query."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml
msgid "Server interface for low-level 2D navigation access."
msgstr ""
@@ -35718,8 +35848,12 @@ msgid ""
"through scripts.\n"
"For two regions to be connected to each other, they must share a similar "
"edge. An edge is considered connected to another if both of its two vertices "
-"are at a distance less than [member Navigation.edge_connection_margin] to "
-"the respective other edge's vertex.\n"
+"are at a distance less than navigation map [code]edge_connection_margin[/"
+"code] to the respective other edge's vertex.\n"
+"You may assign navigation layers to regions with [method Navigation2DServer."
+"region_set_navigation_layers], which then can be checked upon when "
+"requesting a path with [method Navigation2DServer.map_get_path]. This allows "
+"allowing or forbidding some areas to 2D objects.\n"
"To use the collision avoidance system, you may use agents. You can set an "
"agent's target velocity, then the servers will emit a callback with a "
"modified velocity.\n"
@@ -35747,7 +35881,17 @@ msgid "Returns [code]true[/code] if the map got changed the previous frame."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Callback called at the end of the RVO process."
+msgid ""
+"Callback called at the end of the RVO process. If a callback is created "
+"manually and the agent is placed on a navigation map it will calculate "
+"avoidance for the agent and dispatch the calculated [code]safe_velocity[/"
+"code] to the [code]receiver[/code] object with a signal to the chosen "
+"[code]method[/code] name.\n"
+"[b]Note:[/b] Created callbacks are always processed independently of the "
+"SceneTree state as long as the agent is on a navigation map and not freed. "
+"To disable the dispatch of a callback from an agent use [method "
+"agent_set_callback] again with a [code]null[/code] object as the "
+"[code]receiver[/code]."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -35808,15 +35952,55 @@ msgid "Destroys the given RID."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns all created navigation map [RID]s on the NavigationServer. This "
+"returns both 2D and 3D created navigation maps as there is technically no "
+"distinction between them."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Create a new map."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"This function immediately forces synchronization of the specified navigation "
+"[code]map[/code] [RID]. By default navigation maps are only synchronized at "
+"the end of each physics frame. This function can be used to immediately "
+"(re)calculate all the navigation meshes and region connections of the "
+"navigation map. This makes it possible to query a navigation path for a "
+"changed map immediately and in the same frame (multiple times if needed).\n"
+"Due to technical restrictions the current NavigationServer command queue "
+"will be flushed. This means all already queued update commands for this "
+"physics frame will be executed, even those intended for other maps, regions "
+"and agents not part of the specified map. The expensive computation of the "
+"navigation meshes and region connections of a map will only be done for the "
+"specified map. Other maps will receive the normal synchronization at the end "
+"of the physics frame. Should the specified map receive changes after the "
+"forced update it will update again as well when the other maps receive their "
+"update.\n"
+"Avoidance processing and dispatch of the [code]safe_velocity[/code] signals "
+"is untouched by this function and continues to happen for all maps and "
+"agents at the end of the physics frame.\n"
+"[b]Note:[/b] With great power comes great responsibility. This function "
+"should only be used by users that really know what they are doing and have a "
+"good reason for it. Forcing an immediate update of a navigation map requires "
+"locking the NavigationServer and flushing the entire NavigationServer "
+"command queue. Not only can this severely impact the performance of a game "
+"but it can also introduce bugs if used inappropriately without much "
+"foresight."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns all navigation agents [RID]s that are currently assigned to the "
"requested navigation [code]map[/code]."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
#, fuzzy
msgid "Returns the map cell size."
@@ -35841,7 +36025,10 @@ msgid ""
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Returns the navigation path to reach the destination from the origin."
+msgid ""
+"Returns the navigation path to reach the destination from the origin. "
+"[code]navigation_layers[/code] is a bitmask of all region layers that are "
+"allowed to be in the path."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -35860,6 +36047,12 @@ msgstr "Повертає коÑÐ¸Ð½ÑƒÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°."
msgid "Sets the map active."
msgstr "Повертає аркÑÐ¸Ð½ÑƒÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°."
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/"
+"b] Currently not implemented."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Set the map cell size used to weld the navigation mesh polygons."
msgstr ""
@@ -35875,15 +36068,78 @@ msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"Returns the ending point of a connection door. [code]connection[/code] is an "
+"index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns the starting point of a connection door. [code]connection[/code] is "
+"an index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns how many connections this [code]region[/code] has with other regions "
+"in the map."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]."
+msgstr "ОбчиÑлює векторний добуток двох векторів та [code]with[/code]."
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns the navigation map [RID] the requested [code]region[/code] is "
"currently assigned to."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
#, fuzzy
+msgid "Returns the region's navigation layers."
+msgstr "Повертає ÑÐ¸Ð½ÑƒÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°."
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]."
+msgstr "ОбчиÑлює векторний добуток двох векторів та [code]with[/code]."
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns [code]true[/code] if the provided [code]point[/code] in world space "
+"is currently owned by the provided navigation [code]region[/code]. Owned in "
+"this context means that one of the region's navigation mesh polygon faces "
+"has a possible position at the closest distance to this point compared to "
+"all other navigation meshes from other navigation regions that are also "
+"registered on the navigation map of the provided region.\n"
+"If multiple navigation meshes have positions at equal distance the "
+"navigation region whose polygons are processed first wins the ownership. "
+"Polygons are processed in the same order that navigation regions were "
+"registered on the NavigationServer.\n"
+"[b]Note:[/b] If navigation meshes from different navigation regions overlap "
+"(which should be avoided in general) the result might not be what is "
+"expected."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]."
+msgstr "ОбчиÑлює векторний добуток цього вектора Ñ– [code]b[/code]."
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
msgid "Sets the map for the region."
msgstr "Повертає ÑÐ¸Ð½ÑƒÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°."
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method Navigation2DServer.map_get_path])."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
#, fuzzy
msgid "Sets the navigation mesh for the region."
@@ -35894,6 +36150,11 @@ msgstr "Повертає значеннÑ, Ñке Ñ” протилежним до
msgid "Sets the global transformation for the region."
msgstr "ОбчиÑлює векторний добуток цього вектора Ñ– [code]b[/code]."
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]."
+msgstr "ОбчиÑлює векторний добуток цього вектора Ñ– [code]b[/code]."
+
#: doc/classes/NavigationAgent.xml
msgid "3D agent used in navigation for collision avoidance."
msgstr ""
@@ -35903,9 +36164,16 @@ msgid ""
"3D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationAgent] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World] navigation map. If this node is a child of a [Navigation] "
+"node it will register to the navigation map of the navigation node or the "
+"function [method set_navigation] can be used to set the navigation node "
+"directly. [NavigationAgent] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -35923,7 +36191,15 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-msgid "Returns the path from start to finish in global coordinates."
+msgid ""
+"Returns this agent's current path from start to finish in global "
+"coordinates. The path only updates when the target location is changed or "
+"the agent requires a repath. The path array is not intended to be used in "
+"direct path movement as the agent has its own internal path logic that would "
+"get corrupted by changing the path array manually. Use the intended [method "
+"get_next_location] once every physics frame to receive the next path point "
+"for the agents movement as this function also updates the internal path "
+"logic."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -35939,11 +36215,24 @@ msgid ""
"system."
msgstr ""
-#: doc/classes/NavigationAgent.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
+"Returns the [RID] of the navigation map for this NavigationAgent node. This "
+"function returns always the map set on the NavigationAgent node and not the "
+"map of the abstract agent on the NavigationServer. If the agent map is "
+"changed directly with the NavigationServer API the NavigationAgent node will "
+"not be aware of the map change. Use [method set_navigation_map] to change "
+"the navigation map for the NavigationAgent and also update the agent on the "
+"NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"Returns a [Vector3] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the origin of the agent's parent."
+"Returns the next location in global coordinates that can be moved to, making "
+"sure that there are no static objects in the way. If the agent does not have "
+"a navigation path, it will return the position of the agent's parent. The "
+"use of this function once every physics frame is required to update the "
+"internal path logic of the NavigationAgent."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -35985,6 +36274,12 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"Sets the [RID] of the navigation map this NavigationAgent node should use "
+"and also updates the [code]agent[/code] on the NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"Sets the user desired final location. This will clear the current navigation "
"path."
msgstr ""
@@ -35997,7 +36292,13 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml
-msgid "The agent height offset to match the navigation mesh height."
+msgid ""
+"The NavigationAgent height offset is subtracted from the y-axis value of any "
+"vector path position for this NavigationAgent. The NavigationAgent height "
+"offset does not change or influence the navigation mesh or pathfinding query "
+"result. Additional navigation maps that use regions with navigation meshes "
+"that the developer baked with appropriate agent radius or height values are "
+"required to support different-sized agents."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -36024,26 +36325,53 @@ msgstr ""
msgid "The maximum speed that an agent can move."
msgstr ""
+#: doc/classes/NavigationAgent.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "The distance to search for other agents."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"The distance threshold before a path point is considered to be reached. This "
+"will allow an agent to not have to hit a path point on the path exactly, but "
+"in the area. If this value is set to high the NavigationAgent will skip "
+"points on the path which can lead to leaving the navigation mesh. If this "
+"value is set to low the NavigationAgent will be stuck in a repath loop cause "
+"it will constantly overshoot or undershoot the distance to the next point on "
+"each physics frame update."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"The maximum distance the agent is allowed away from the ideal path to the "
"final location. This can happen due to trying to avoid collisions. When the "
"maximum distance is exceeded, it recalculates the ideal path."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-msgid "The radius of the agent."
+msgid ""
+"The radius of the avoidance agent. This is the \"body\" of the avoidance "
+"agent and not the avoidance maneuver starting radius (which is controlled by "
+"[member neighbor_dist]).\n"
+"Does not affect normal pathfinding. To change an actor's pathfinding radius "
+"bake [NavigationMesh] resources with a different [member NavigationMesh."
+"agent_radius] property and use different navigation maps for each actor size."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"The distance threshold before a target is considered to be reached. This "
-"will allow an agent to not have to hit a point on the path exactly, but in "
-"the area."
+"The distance threshold before the final target point is considered to be "
+"reached. This will allow an agent to not have to hit the point of the final "
+"target exactly, but only the area. If this value is set to low the "
+"NavigationAgent will be stuck in a repath loop cause it will constantly "
+"overshoot or undershoot the distance to the final target point on each "
+"physics frame update."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -36086,9 +36414,16 @@ msgid ""
"2D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationAgent2D] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World2D] navigation map. If this node is a child of a "
+"[Navigation2D] node it will register to the navigation map of the navigation "
+"node or the function [method set_navigation] can be used to set the "
+"navigation node directly. [NavigationAgent2D] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent2D.xml
@@ -36105,13 +36440,6 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent2D.xml
-msgid ""
-"Returns a [Vector2] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the position of the agent's parent."
-msgstr ""
-
-#: doc/classes/NavigationAgent2D.xml
#, fuzzy
msgid "Returns the [RID] of this agent on the [Navigation2DServer]."
msgstr "Повертає ÑÐ¸Ð½ÑƒÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°."
@@ -36132,6 +36460,13 @@ msgid ""
"only be enabled on agents that currently require it."
msgstr ""
+#: doc/classes/NavigationAgent2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent2D] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationMesh.xml
msgid "A mesh to approximate the walkable areas and obstacles."
msgstr ""
@@ -36162,8 +36497,8 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
-"Returns whether the specified [code]bit[/code] of the [member geometry/"
-"collision_mask] is set."
+"Returns whether the specified [code]bit[/code] of the [member "
+"geometry_collision_mask] is set."
msgstr ""
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
@@ -36186,9 +36521,9 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/"
-"code] in the [member geometry/collision_mask].\n"
+"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]."
+"code] in the [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
@@ -36202,14 +36537,14 @@ 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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36221,7 +36556,7 @@ 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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36249,13 +36584,17 @@ msgstr ""
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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
-"If [code]true[/code], marks walkable spans as not walkable if the clearance "
-"above the span is less than [member agent/height]."
+"If the baking [AABB] has a volume the navigation mesh baking will be "
+"restricted to its enclosing area."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+msgid "The position offset applied to the [member filter_baking_aabb] [AABB]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36265,13 +36604,19 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]true[/code], marks non-walkable spans as walkable if their maximum "
-"is within [member agent/max_climb] of a walkable neighbor."
+"is within [member agent_max_climb] of a walkable neighbor."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+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
msgid ""
"The physics layers to scan for static colliders.\n"
-"Only used when [member geometry/parsed_geometry_type] is [constant "
+"Only used when [member geometry_parsed_geometry_type] is [constant "
"PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]."
msgstr ""
@@ -36290,7 +36635,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"The name of the group to scan for geometry.\n"
-"Only used when [member geometry/source_geometry_mode] is [constant "
+"Only used when [member geometry_source_geometry_mode] is [constant "
"SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant "
"SOURCE_GEOMETRY_GROUPS_EXPLICIT]."
msgstr ""
@@ -36353,7 +36698,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Parses [StaticBody] colliders as geometry. The collider should be in any of "
-"the layers specified by [member geometry/collision_mask]."
+"the layers specified by [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36375,13 +36720,13 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Scans nodes in a group and their child nodes recursively for geometry. The "
-"group is specified by [member geometry/source_group_name]."
+"group is specified by [member geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Uses nodes in a group for geometry. The group is specified by [member "
-"geometry/source_group_name]."
+"geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36423,7 +36768,15 @@ msgid ""
"geometry for walkable terrain suitable to [NavigationMesh] agent properties "
"by creating a voxel world around the meshes bounding area.\n"
"The finalized navigation mesh is then returned and stored inside the "
-"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes."
+"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] "
+"nodes.\n"
+"[b]Note:[/b] Using meshes to not only define walkable surfaces but also "
+"obstruct navigation baking does not always work. The navigation baking has "
+"no concept of what is a geometry \"inside\" when dealing with mesh source "
+"geometry and this is intentional. Depending on current baking parameters, as "
+"soon as the obstructing mesh is large enough to fit a navigation mesh area "
+"inside, the baking will generate navigation mesh areas that are inside the "
+"obstructing source geometry mesh."
msgstr ""
#: doc/classes/NavigationMeshGenerator.xml
@@ -36431,8 +36784,8 @@ msgid ""
"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child "
"nodes under the provided [code]root_node[/code] or a specific group of nodes "
"for potential source geometry. The parse behavior can be controlled with the "
-"[member NavigationMesh.geometry/parsed_geometry_type] and [member "
-"NavigationMesh.geometry/source_geometry_mode] properties on the "
+"[member NavigationMesh.geometry_parsed_geometry_type] and [member "
+"NavigationMesh.geometry_source_geometry_mode] properties on the "
"[NavigationMesh] resource."
msgstr ""
@@ -36450,8 +36803,21 @@ msgstr ""
#: doc/classes/NavigationMeshInstance.xml
msgid ""
"An instance of a [NavigationMesh]. It tells the [Navigation] node what can "
-"be navigated and what cannot, based on the [NavigationMesh] resource. This "
-"should be a child of a [Navigation] node."
+"be navigated and what cannot, based on the [NavigationMesh] resource.\n"
+"By default this node will register to the default [World] navigation map. If "
+"this node is a child of a [Navigation] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method NavigationServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The cost of entering this region from another region can be controlled with "
+"the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The cost of traveling distances inside this region can be controlled with "
+"the [member travel_cost] multiplier."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
@@ -36480,10 +36846,34 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding enters this region's navmesh from another regions navmesh "
+"the [code]enter_cost[/code] value is added to the path distance for "
+"determining the shortest path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationMesh] "
+"belongs to. On path requests with [method NavigationServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
msgid "The [NavigationMesh] resource to use."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding moves inside this region's navmesh the traveled distances "
+"are multiplied with [code]travel_cost[/code] for determining the shortest "
+"path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
msgid "Notifies when the navigation mesh bake operation is completed."
msgstr ""
@@ -36500,7 +36890,9 @@ msgid ""
"3D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationObstacle] is physics safe."
+"[NavigationObstacle] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle.xml
@@ -36541,7 +36933,9 @@ msgid ""
"2D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationObstacle2D] is physics safe."
+"[NavigationObstacle2D] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle2D.xml
@@ -36622,6 +37016,14 @@ msgstr ""
#: doc/classes/NavigationPolygon.xml
msgid ""
+"Returns the [NavigationMesh] resulting from this navigation polygon. This "
+"navmesh can be used to update the navmesh of a region with the [method "
+"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server "
+"behind the scene)."
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml
+msgid ""
"Returns a [PoolVector2Array] containing the vertices of an outline that was "
"created in the editor or by script."
msgstr ""
@@ -36658,6 +37060,30 @@ msgid ""
msgstr ""
#: doc/classes/NavigationPolygonInstance.xml
+msgid "A region of the 2D navigation map."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A region of the navigation map. It tells the [Navigation2DServer] what can "
+"be navigated and what cannot, based on its [NavigationPolygon] resource.\n"
+"By default this node will register to the default [World2D] navigation map. "
+"If this node is a child of a [Navigation2D] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The pathfinding cost of entering this region from another region can be "
+"controlled with the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The pathfinding cost of traveling distances inside this region can be "
+"controlled with the [member travel_cost] multiplier."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
msgid ""
"Returns the [RID] of this region on the [Navigation2DServer]. Combined with "
"[method Navigation2DServer.map_get_closest_point_owner] can be used to "
@@ -36665,6 +37091,22 @@ msgid ""
"navigation map."
msgstr ""
+#: doc/classes/NavigationPolygonInstance.xml
+msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationPolygon] "
+"belongs to. On path requests with [method Navigation2DServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid "The [NavigationPolygon] resource to use."
+msgstr ""
+
#: doc/classes/NavigationServer.xml
msgid "Server interface for low-level 3D navigation access."
msgstr ""
@@ -36744,6 +37186,12 @@ msgid "Bakes the navigation mesh."
msgstr ""
#: doc/classes/NavigationServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method NavigationServer.map_get_path])."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
msgid "Control activation of this server."
msgstr ""
@@ -37006,7 +37454,7 @@ msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml
msgid "High-level multiplayer"
-msgstr ""
+msgstr "Мультиплеєр виÑокого рівнÑ"
#: doc/classes/NetworkedMultiplayerPeer.xml
msgid "WebRTC Signaling Demo"
@@ -38210,13 +38658,19 @@ msgstr ""
#: doc/classes/Node.xml
msgid ""
"Emitted when a child node enters the scene tree, either because it entered "
-"on its own or because this node entered with it."
+"on its own or because this node entered with it.\n"
+"This signal is emitted [i]after[/i] the child node's own [constant "
+"NOTIFICATION_ENTER_TREE] and [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
msgid ""
-"Emitted when a child node exits the scene tree, either because it exited on "
-"its own or because this node exited."
+"Emitted when a child node is about to exit the scene tree, either because it "
+"is being removed or freed directly, or because this node is exiting the "
+"tree.\n"
+"When this signal is received, the child [code]node[/code] is still in the "
+"tree and valid. This signal is emitted [i]after[/i] the child node's own "
+"[signal tree_exiting] and [constant NOTIFICATION_EXIT_TREE]."
msgstr ""
#: doc/classes/Node.xml
@@ -38228,7 +38682,10 @@ msgid "Emitted when the node is renamed."
msgstr ""
#: doc/classes/Node.xml
-msgid "Emitted when the node enters the tree."
+msgid ""
+"Emitted when the node enters the tree.\n"
+"This signal is emitted [i]after[/i] the related [constant "
+"NOTIFICATION_ENTER_TREE] notification."
msgstr ""
#: doc/classes/Node.xml
@@ -38238,15 +38695,21 @@ msgstr ""
#: doc/classes/Node.xml
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)."
+"the right place for de-initialization (or a \"destructor\", if you will).\n"
+"This signal is emitted [i]before[/i] the related [constant "
+"NOTIFICATION_EXIT_TREE] notification."
msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node enters a [SceneTree]."
+msgid ""
+"Notification received when the node enters a [SceneTree].\n"
+"This notification is emitted [i]before[/i] the related [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node is about to exit a [SceneTree]."
+msgid ""
+"Notification received when the node is about to exit a [SceneTree].\n"
+"This notification is emitted [i]after[/i] the related [signal tree_exiting]."
msgstr ""
#: doc/classes/Node.xml
@@ -38507,7 +38970,13 @@ msgid "Rotation in degrees, relative to the node's parent."
msgstr ""
#: doc/classes/Node2D.xml
-msgid "The node's scale. Unscaled value: [code](1, 1)[/code]."
+msgid ""
+"The node's scale. Unscaled value: [code](1, 1)[/code].\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
#: doc/classes/Node2D.xml
@@ -39952,6 +40421,10 @@ msgid ""
" if argument.find(\"=\") > -1:\n"
" var key_value = argument.split(\"=\")\n"
" arguments[key_value[0].lstrip(\"--\")] = key_value[1]\n"
+" else:\n"
+" # Options without an argument will be present in the dictionary,\n"
+" # with the value set to an empty string.\n"
+" arguments[argument.lstrip(\"--\")] = \"\"\n"
"[/codeblock]"
msgstr ""
@@ -40608,8 +41081,15 @@ msgstr ""
msgid ""
"Moves the file or directory to the system's recycle bin. See also [method "
"Directory.remove].\n"
+"The method takes only global paths, so you may need to use [method "
+"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/"
+"code] as it will not work in exported project.\n"
"[b]Note:[/b] If the user has disabled the recycle bin on their system, the "
-"file will be permanently deleted instead."
+"file will be permanently deleted instead.\n"
+"[codeblock]\n"
+"var file_to_remove = \"user://slot1.sav\"\n"
+"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/OS.xml
@@ -45468,7 +45948,18 @@ msgstr ""
#: doc/classes/PopupMenu.xml
msgid ""
"[PopupMenu] is a [Control] that displays a list of options. They are popular "
-"in toolbars or context menus."
+"in toolbars or context menus.\n"
+"[b]Incremental search:[/b] Like [ItemList] and [Tree], [PopupMenu] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/PopupMenu.xml
@@ -46978,7 +47469,16 @@ msgid ""
msgstr ""
#: doc/classes/ProjectSettings.xml
-msgid "Message to be displayed before the backtrace when the engine crashes."
+msgid ""
+"Message to be displayed before the backtrace when the engine crashes. By "
+"default, this message is only used in exported projects due to the editor-"
+"only override applied to this setting."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Editor-only override for [member debug/settings/crash_handler/message]. Does "
+"not affect exported projects in debug or release mode."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -47223,6 +47723,18 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default naming style for scene files to infer from their root nodes. "
+"Possible options are:\n"
+"- [code]0[/code] (Auto): Uses the scene root name as is without changing its "
+"casing.\n"
+"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase "
+"casing.\n"
+"- [code]2[/code] (snake_case): Converts the scene root name to snake_case "
+"casing."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -47448,6 +47960,198 @@ msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 1."
msgstr ""
@@ -47656,6 +48360,198 @@ msgid "Optional name for the 2D render layer 9."
msgstr ""
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 1."
msgstr ""
@@ -47923,6 +48819,49 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default cell height for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_height].\n"
+"[b]Note:[/b] Currently not implemented."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 2D navigation maps. See [method "
+"Navigation2DServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell height for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_height]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 3D navigation maps. See [method "
+"NavigationServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default map up vector for 3D navigation maps. See [method NavigationServer."
+"map_set_up]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -48596,20 +49535,28 @@ msgid ""
"cause.\n"
"The default value is a conservative one, so you are advised to tweak it "
"according to the hardware you are targeting.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"The default is a very conservative override for [code]rendering/gles3/"
-"shaders/max_concurrent_compiles[/code].\n"
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
"Depending on the specific devices you are targeting, you may want to raise "
"it.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
+"Depending on the specific browsers you are targeting, you may want to raise "
+"it.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -48617,19 +49564,28 @@ msgid ""
"The maximum size, in megabytes, that the ubershader cache can grow up to. On "
"startup, the least recently used entries will be deleted until the total "
"size is within bounds.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/ubershader_cache_size_mb[/"
-"code], so a smaller maximum size can be configured for mobile platforms, "
-"where storage space is more limited.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for mobile platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for web platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] Currently, shader caching is generally unavailable on web "
+"platforms.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -48661,14 +49617,22 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/shader_compilation_mode[/"
-"code], so asynchronous compilation can be disabled for mobile.\n"
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on mobile platforms.\n"
"You may want to do that since mobile GPUs generally won't support "
"ubershaders due to their complexity."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on web platforms.\n"
+"You may want to do that since certain browsers (especially on mobile "
+"platforms) generally won't support ubershaders due to their complexity."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
@@ -49425,7 +50389,6 @@ msgid ""
"- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/"
"code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, "
"small grid radius values may lead to unwanted groupings.\n"
-"[/codeblock]\n"
"[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more "
"effective and faster [VisibilityNotifier] functionality. For most use cases, "
"[method Vector3.distance_to] or [method Vector3.distance_squared_to] are "
@@ -49693,7 +50656,7 @@ msgstr ""
#: doc/classes/RandomNumberGenerator.xml
msgid "Random number generation"
-msgstr ""
+msgstr "Ð“ÐµÐ½ÐµÑ€Ð°Ñ†Ñ–Ñ Ð²Ð¸Ð¿Ð°Ð´ÐºÐ¾Ð²Ð¸Ñ… чиÑел"
#: doc/classes/RandomNumberGenerator.xml
msgid ""
@@ -51574,6 +52537,22 @@ msgid "Makes text fill width."
msgstr ""
#: doc/classes/RichTextLabel.xml
+msgid "Aligns top of the inline image to the top of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns center of the inline image to the center of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns bottom of the inline image to the baseline of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns bottom of the inline image to the bottom of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
msgid "Each list item has a number marker."
msgstr ""
@@ -53311,8 +54290,8 @@ msgid ""
" yield(get_tree().create_timer(1.0), \"timeout\")\n"
" print(\"Timer ended.\")\n"
"[/codeblock]\n"
-"The timer will be automatically freed after its time elapses, so be aware "
-"that any reference you might have kept to it will become invalid."
+"The timer will be dereferenced after its time elapses. To preserve the "
+"timer, you can keep a reference to it. See [Reference]."
msgstr ""
#: doc/classes/SceneTreeTimer.xml
@@ -53344,24 +54323,23 @@ msgid ""
"manually (i.e. by using [code]Tween.new()[/code]) are invalid. They can't be "
"used for tweening values, but you can do manual interpolation with [method "
"interpolate_value].\n"
-"A [SceneTreeTween] animation is composed of a sequence of [Tweener]s, which "
-"by default are executed one after another. You can create a sequence by "
-"appending [Tweener]s to the [SceneTreeTween]. Animating something with a "
-"[Tweener] is called tweening. Example tweening sequence looks like this:\n"
+"A tween animation is created by adding [Tweener]s to the [SceneTreeTween] "
+"object, using [method tween_property], [method tween_interval], [method "
+"tween_callback] or [method tween_method]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1)\n"
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"This sequence will make the [code]$Sprite[/code] node turn red, then shrink "
-"and finally the [method Node.queue_free] is called to remove the sprite. See "
-"methods [method tween_property], [method tween_interval], [method "
-"tween_callback] and [method tween_method] for more usage information.\n"
+"This sequence will make the [code]$Sprite[/code] node turn red, then shrink, "
+"before finally calling [method Node.queue_free] to free the sprite. "
+"[Tweener]s are executed one after another by default. This behavior can be "
+"changed using [method parallel] and [method set_parallel].\n"
"When a [Tweener] is created with one of the [code]tween_*[/code] methods, a "
"chained method call can be used to tweak the properties of this [Tweener]. "
-"For example, if you want to set different transition type in the above "
-"example, you can do:\n"
+"For example, if you want to set a different transition type in the above "
+"example, you can use [method set_trans]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1).set_trans(Tween."
@@ -53370,8 +54348,9 @@ msgid ""
"TRANS_BOUNCE)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Most of the [SceneTreeTween] methods can be chained this way too. In this "
-"example the [SceneTreeTween] is bound and have set a default transition:\n"
+"Most of the [SceneTreeTween] methods can be chained this way too. In the "
+"following example the [SceneTreeTween] is bound to the running script's node "
+"and a default transition is set for its [Tweener]s:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween().bind_node(self).set_trans(Tween."
"TRANS_ELASTIC)\n"
@@ -53379,16 +54358,16 @@ msgid ""
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Another interesting use for [SceneTreeTween]s is animating arbitrary set of "
+"Another interesting use for [SceneTreeTween]s is animating arbitrary sets of "
"objects:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"for sprite in get_children():\n"
-" tween.tween_property(sprite, \"position\", Vector2(), 1)\n"
+" tween.tween_property(sprite, \"position\", Vector2(0, 0), 1)\n"
"[/codeblock]\n"
"In the example above, all children of a node are moved one after another to "
"position (0, 0).\n"
-"Some [Tweener]s use transitions and eases. The first accepts an [enum Tween."
+"Some [Tweener]s use transitions and eases. The first accepts a [enum Tween."
"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 Tween.EaseType] constant, and "
@@ -53400,7 +54379,7 @@ msgid ""
"tween_cheatsheet.png]Tween easing and transition types cheatsheet[/url]\n"
"[b]Note:[/b] All [SceneTreeTween]s will automatically start by default. To "
"prevent a [SceneTreeTween] from autostarting, you can call [method stop] "
-"immediately after it was created."
+"immediately after it is created."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53430,21 +54409,24 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
-"Processes the [SceneTreeTween] by given [code]delta[/code] value, in "
-"seconds. Mostly useful when the [SceneTreeTween] is paused, for controlling "
-"it manually. Can also be used to end the [SceneTreeTween] animation "
-"immediately, by using [code]delta[/code] longer than the whole duration.\n"
+"Processes the [SceneTreeTween] by the given [code]delta[/code] value, in "
+"seconds. This is mostly useful for manual control when the [SceneTreeTween] "
+"is paused. It can also be used to end the [SceneTreeTween] animation "
+"immediately, by setting [code]delta[/code] longer than the whole duration of "
+"the [SceneTreeTween] animation.\n"
"Returns [code]true[/code] if the [SceneTreeTween] still has [Tweener]s that "
"haven't finished.\n"
-"[b]Note:[/b] The [SceneTreeTween] will become invalid after finished, but "
-"you can call [method stop] after the step, to keep it and reset."
+"[b]Note:[/b] The [SceneTreeTween] will become invalid in the next processing "
+"frame after its animation finishes. Calling [method stop] after performing "
+"[method custom_step] instead keeps and resets the [SceneTreeTween]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Returns the total time in seconds the [SceneTreeTween] has been animating (i."
-"e. time since it started, not counting pauses etc.). The time is affected by "
-"[method set_speed_scale] and [method stop] will reset it to [code]0[/code].\n"
+"e. the time since it started, not counting pauses etc.). The time is "
+"affected by [method set_speed_scale], and [method stop] will reset it to "
+"[code]0[/code].\n"
"[b]Note:[/b] As it results from accumulating frame deltas, the time returned "
"after the [SceneTreeTween] has finished animating will be slightly greater "
"than the actual [SceneTreeTween] duration."
@@ -53480,11 +54462,10 @@ msgstr ""
msgid ""
"Returns whether the [SceneTreeTween] is valid. A valid [SceneTreeTween] is a "
"[SceneTreeTween] contained by the scene tree (i.e. the array from [method "
-"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). "
-"[SceneTreeTween] might become invalid when it has finished tweening or was "
-"killed, also when created with [code]Tween.new()[/code]. Invalid "
-"[SceneTreeTween] can't have [Tweener]s appended, because it can't animate "
-"them. You can however still use [method interpolate_value]."
+"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). A "
+"[SceneTreeTween] might become invalid when it has finished tweening, is "
+"killed, or when created with [code]SceneTreeTween.new()[/code]. Invalid "
+"[SceneTreeTween]s can't have [Tweener]s appended."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53524,16 +54505,15 @@ msgstr ""
msgid ""
"Sets the number of times the tweening sequence will be repeated, i.e. "
"[code]set_loops(2)[/code] will run the animation twice.\n"
-"Calling this method without arguments will make the [SceneTreeTween] run "
-"infinitely, until it is either killed by [method kill] or by freeing bound "
-"node, or all the animated objects have been freed (which makes further "
+"Calling this method without arguments will make the [Tween] run infinitely, "
+"until either it is killed with [method kill], the [Tween]'s bound node is "
+"freed, or all the animated objects have been freed (which makes further "
"animation impossible).\n"
"[b]Warning:[/b] Make sure to always add some duration/delay when using "
-"infinite loops. 0-duration looped animations (e.g. single [CallbackTweener] "
-"with no delay or [PropertyTweener] with invalid node) are equivalent to "
-"infinite [code]while[/code] loops and will freeze your game. If a "
-"[SceneTreeTween]'s lifetime depends on some node, always use [method "
-"bind_node]."
+"infinite loops. To prevent the game freezing, 0-duration looped animations "
+"(e.g. a single [CallbackTweener] with no delay) are stopped after a small "
+"number of loops, which may produce unexpected results. If a [Tween]'s "
+"lifetime depends on some node, always use [method bind_node]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53595,10 +54575,10 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Creates and appends an [IntervalTweener]. This method can be used to create "
-"delays in the tween animation, as an alternative for using the delay in "
-"other [Tweener]s or when there's no animation (in which case the "
-"[SceneTreeTween] acts as a timer). [code]time[/code] is the length of the "
-"interval, in seconds.\n"
+"delays in the tween animation, as an alternative to using the delay in other "
+"[Tweener]s, or when there's no animation (in which case the [SceneTreeTween] "
+"acts as a timer). [code]time[/code] is the length of the interval, in "
+"seconds.\n"
"Example: creating an interval in code execution.\n"
"[codeblock]\n"
"# ... some code\n"
@@ -53652,8 +54632,8 @@ msgid ""
"Creates and appends a [PropertyTweener]. This method tweens a "
"[code]property[/code] of an [code]object[/code] between an initial value and "
"[code]final_val[/code] in a span of time equal to [code]duration[/code], in "
-"seconds. The initial value by default is a value at the time the tweening of "
-"the [PropertyTweener] start. For example:\n"
+"seconds. The initial value by default is the property's value at the time "
+"the tweening of the [PropertyTweener] starts. For example:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"tween.tween_property($Sprite, \"position\", Vector2(100, 200), 1)\n"
@@ -53684,16 +54664,15 @@ msgid ""
"Emitted when the [SceneTreeTween] has finished all tweening. Never emitted "
"when the [SceneTreeTween] is set to infinite looping (see [method "
"set_loops]).\n"
-"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) after this signal "
-"is emitted, but it doesn't happen immediately, but on the next processing "
-"frame. Calling [method stop] inside the signal callback will preserve the "
-"[SceneTreeTween]."
+"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) in the next "
+"processing frame after this signal is emitted. Calling [method stop] inside "
+"the signal callback will prevent the [SceneTreeTween] from being removed."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Emitted when a full loop is complete (see [method set_loops]), providing the "
-"loop index. This signal is not emitted after final loop, use [signal "
+"loop index. This signal is not emitted after the final loop, use [signal "
"finished] instead for this case."
msgstr ""
@@ -53701,7 +54680,7 @@ msgstr ""
msgid ""
"Emitted when one step of the [SceneTreeTween] is complete, providing the "
"step index. One step is either a single [Tweener] or a group of [Tweener]s "
-"running parallelly."
+"running in parallel."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -55034,7 +56013,12 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-msgid "Scale part of the local transformation."
+msgid ""
+"Scale part of the local transformation.\n"
+"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, the scale values will either be all "
+"positive or all negative."
msgstr ""
#: doc/classes/Spatial.xml
@@ -57668,11 +58652,11 @@ msgstr ""
msgid ""
"Returns [code]true[/code] if this string contains a valid integer.\n"
"[codeblock]\n"
-"print(\"7\".is_valid_int()) # Prints \"True\"\n"
-"print(\"14.6\".is_valid_int()) # Prints \"False\"\n"
-"print(\"L\".is_valid_int()) # Prints \"False\"\n"
-"print(\"+3\".is_valid_int()) # Prints \"True\"\n"
-"print(\"-12\".is_valid_int()) # Prints \"True\"\n"
+"print(\"7\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"14.6\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"L\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"+3\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"-12\".is_valid_integer()) # Prints \"True\"\n"
"[/codeblock]"
msgstr ""
@@ -61150,6 +62134,11 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml
+#, fuzzy
+msgid "If [code]true[/code], this TileMap bakes a navigation region."
+msgstr "Повертає коÑÐ¸Ð½ÑƒÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°."
+
+#: doc/classes/TileMap.xml
msgid "If [code]true[/code], the cell's UVs will be clipped."
msgstr ""
@@ -61256,6 +62245,10 @@ msgid "The TileMap orientation mode. See [enum Mode] for possible values."
msgstr ""
#: doc/classes/TileMap.xml
+msgid "The navigation layers the TileMap generates its navigation regions in."
+msgstr ""
+
+#: doc/classes/TileMap.xml
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 "
@@ -62387,7 +63380,12 @@ msgstr ""
#: doc/classes/Transform2D.xml
msgid ""
"Returns a copy of the transform scaled by the given [code]scale[/code] "
-"factor, using matrix multiplication."
+"factor, using matrix multiplication.\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
#: doc/classes/Transform2D.xml
@@ -62543,7 +63541,18 @@ msgid ""
"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]."
+"to remove it from the [Tree].\n"
+"[b]Incremental search:[/b] Like [ItemList] and [PopupMenu], [Tree] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/Tree.xml
@@ -66071,11 +67080,12 @@ msgid "This enabler will stop [Particles2D] nodes."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _process function."
+msgid "This enabler will stop the parent's [method Node._process] function."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _physics_process function."
+msgid ""
+"This enabler will stop the parent's [method Node._physics_process] function."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
@@ -66115,6 +67125,16 @@ msgid "The VisibilityNotifier's bounding box."
msgstr ""
#: doc/classes/VisibilityNotifier.xml
+msgid ""
+"In addition to checking whether a node is on screen or within a [Camera]'s "
+"view, VisibilityNotifier can also optionally check whether a node is within "
+"a specified maximum distance when using a [Camera] with perspective "
+"projection. This is useful for throttling the performance requirements of "
+"nodes that are far away.\n"
+"[b]Note:[/b] This feature will be disabled if set to 0.0."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier.xml
msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view."
msgstr ""
@@ -70879,6 +71899,16 @@ msgid "The amount of shader rebinds in the frame."
msgstr ""
#: doc/classes/VisualServer.xml
+msgid ""
+"The peak amount of shaders that have been under compilation in the frame.\n"
+"This is useful to know when asynchronous shader compilation has finished for "
+"the current shaders on screen.\n"
+"[b]Note:[/b] For complete certainty, only assume there are no outstanding "
+"compilations when this value is zero for at least two frames in a row.\n"
+"Unimplemented in the GLES2 rendering backend, always returns 0."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
msgid "The amount of surface changes in the frame."
msgstr ""
@@ -74082,8 +75112,8 @@ msgstr ""
#: doc/classes/World.xml
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."
+"scenario, a navigation map and a sound space. Spatial nodes register their "
+"resources into the current world."
msgstr ""
#: doc/classes/World.xml
@@ -74098,11 +75128,17 @@ msgstr ""
#: doc/classes/World.xml
msgid ""
-"The World's fallback_environment will be used if the World's [Environment] "
-"fails or is missing."
+"The World's fallback environment will be used if [member environment] fails "
+"or is missing."
msgstr ""
#: doc/classes/World.xml
+#, fuzzy
+msgid ""
+"The [RID] of this world's navigation map. Used by the [NavigationServer]."
+msgstr "Повертає ÑÐ¸Ð½ÑƒÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°."
+
+#: doc/classes/World.xml
msgid "The World's visual scenario."
msgstr ""
@@ -74117,8 +75153,8 @@ msgstr ""
#: doc/classes/World2D.xml
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."
+"visual scenario, a navigation map and a sound space. 2D nodes register their "
+"resources into the current 2D world."
msgstr ""
#: doc/classes/World2D.xml
@@ -74135,6 +75171,12 @@ msgid ""
msgstr ""
#: doc/classes/World2D.xml
+#, fuzzy
+msgid ""
+"The [RID] of this world's navigation map. Used by the [Navigation2DServer]."
+msgstr "Повертає ÑÐ¸Ð½ÑƒÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°."
+
+#: doc/classes/World2D.xml
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."
diff --git a/doc/translations/vi.po b/doc/translations/vi.po
index 0cda534d16..81411cebb9 100644
--- a/doc/translations/vi.po
+++ b/doc/translations/vi.po
@@ -477,7 +477,7 @@ msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
msgid ""
"Compares two values by checking their actual contents, recursing into any "
-"`Array` or `Dictionary` up to its deepest level.\n"
+"[Array] or [Dictionary] up to its deepest level.\n"
"This compares to [code]==[/code] in a number of ways:\n"
"- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/"
"code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] "
@@ -532,7 +532,7 @@ msgid ""
"- 1.0: Linear\n"
"- Greater than 1.0 (exclusive): Ease in\n"
"[/codeblock]\n"
-"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.4/img/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/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]."
@@ -1462,7 +1462,7 @@ msgid ""
"[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/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/img/"
"smoothstep_ease_comparison.png]Comparison between smoothstep() and ease(x, "
"-1.6521) return values[/url]"
msgstr ""
@@ -3807,6 +3807,12 @@ msgstr ""
#: doc/classes/@GlobalScope.xml
msgid ""
+"Hints that an integer property is a bitmask using the optionally named 2D "
+"navigation layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml
+msgid ""
"Hints that an integer property is a bitmask using the optionally named 3D "
"render layers."
msgstr ""
@@ -3819,6 +3825,12 @@ msgstr ""
#: doc/classes/@GlobalScope.xml
msgid ""
+"Hints that an integer property is a bitmask using the optionally named 3D "
+"navigation layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml
+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]."
@@ -8820,7 +8832,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/AStar.xml
+#: doc/classes/AStar.xml doc/classes/AStar2D.xml
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[/"
@@ -9019,7 +9031,10 @@ msgid ""
msgstr ""
#: doc/classes/AStar2D.xml
-msgid "Returns whether there is a connection/segment between the given points."
+msgid ""
+"Returns whether there is a connection/segment between the given points. 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/AStar2D.xml
@@ -9036,10 +9051,6 @@ msgid ""
msgstr ""
#: doc/classes/AStar2D.xml
-msgid "Deletes the segment between the given points."
-msgstr ""
-
-#: doc/classes/AStar2D.xml
msgid ""
"Returns the closest position to [code]to_position[/code] that resides inside "
"a segment between two connected points.\n"
@@ -9224,7 +9235,9 @@ msgid ""
"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."
+"transmit audio over the network. When capturing audio data from a "
+"microphone, the format of the samples will be stereo 32-bit floating point "
+"PCM."
msgstr ""
#: doc/classes/AudioEffectCapture.xml
@@ -14078,7 +14091,7 @@ msgid ""
msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
-#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/Navigation2D.xml
msgid "Returns the object's [RID]."
msgstr ""
@@ -19565,11 +19578,15 @@ msgid ""
msgstr ""
#: doc/classes/CurveTexture.xml
-msgid "The [code]curve[/code] rendered onto the texture."
-msgstr ""
+#, fuzzy
+msgid "The [Curve] that is rendered onto the texture."
+msgstr "Trả vỠsin của tham số."
#: doc/classes/CurveTexture.xml
-msgid "The width of the texture."
+msgid ""
+"The width of the texture (in pixels). Higher values make it possible to "
+"represent high-frequency data better (such as sudden direction changes), at "
+"the cost of increased generation time and memory usage."
msgstr ""
#: doc/classes/CylinderMesh.xml
@@ -19855,6 +19872,13 @@ msgid "Returns the list of keys in the [Dictionary]."
msgstr ""
#: doc/classes/Dictionary.xml
+msgid ""
+"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, "
+"duplicate keys will not be copied over, unless [code]overwrite[/code] is "
+"[code]true[/code]."
+msgstr ""
+
+#: doc/classes/Dictionary.xml
#, fuzzy
msgid "Returns the number of keys in the dictionary."
msgstr "Trả vỠphần dư của hai vector."
@@ -21795,9 +21819,23 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide a state data you want to be saved, like view "
+"position, grid settings, folding, etc. 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). This data is automatically saved for "
+"each scene in an [code]editstate[/code] file in the editor metadata folder. "
+"If you want to store global (scene-independent) editor data for your plugin, "
+"you can use [method get_window_layout] instead.\n"
+"Use [method set_state] to restore your saved state.\n"
+"[b]Note:[/b] This method should not be used to save important settings that "
+"should persist with the project.\n"
+"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be "
+"stored and restored correctly.\n"
+"[codeblock]\n"
+"func get_state():\n"
+" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n"
+" return state\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -21808,9 +21846,18 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide the GUI layout of the plugin or any other "
+"data you want to be stored. 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). The data is stored in the "
+"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n"
+"Use [method set_window_layout] to restore your saved layout.\n"
+"[codeblock]\n"
+"func get_window_layout(configuration):\n"
+" configuration.set_value(\"MyPlugin\", \"window_position\", $Window."
+"position)\n"
+" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -21923,11 +21970,30 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the state saved by [method get_state]."
+msgid ""
+"Restore the state saved by [method get_state]. This method is called when "
+"the current scene tab is changed in the editor.\n"
+"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise "
+"it will not be recognized and this method will not be called.\n"
+"[codeblock]\n"
+"func set_state(data):\n"
+" zoom = data.get(\"zoom\", 1.0)\n"
+" preferred_color = data.get(\"my_color\", Color.white)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the plugin GUI layout saved by [method get_window_layout]."
+msgid ""
+"Restore the plugin GUI layout and data saved by [method get_window_layout]. "
+"This method is called for every plugin on editor startup. Use the provided "
+"[code]configuration[/code] file to read your saved data.\n"
+"[codeblock]\n"
+"func set_window_layout(configuration):\n"
+" $Window.position = configuration.get_value(\"MyPlugin\", "
+"\"window_position\", Vector2())\n"
+" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", "
+"Color.white)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -26573,7 +26639,8 @@ msgid ""
"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])."
+"at fixed steps (see [member width]). See also [GradientTexture2D] and "
+"[CurveTexture]."
msgstr ""
#: doc/classes/GradientTexture.xml
@@ -26595,7 +26662,8 @@ msgid ""
"repeat] types using colors obtained from the gradient. 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] and [member height])."
+"[member width] and [member height]). See also [GradientTexture] and "
+"[CurveTexture]."
msgstr ""
#: doc/classes/GradientTexture2D.xml
@@ -27404,6 +27472,13 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+#, fuzzy
+msgid ""
+"If [code]true[/code], this GridMap uses cell navmesh resources to create "
+"navigation regions."
+msgstr "Nếu [code]true[/code], há»a tiết sẽ được căn ở trung tâm."
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid "If [code]true[/code], grid items are centered on the X axis."
msgstr ""
@@ -27454,6 +27529,10 @@ msgid "The assigned [MeshLibrary]."
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+msgid "The navigation layers the GridMap generates its navigation regions in."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
"Overrides the default friction and bounce physics properties for the whole "
"[GridMap]."
@@ -28677,7 +28756,7 @@ msgid ""
" # 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 body = to_json({\"name\": \"Godette\"})\n"
" error = http_request.request(\"https://httpbin.org/post\", [], true, "
"HTTPClient.METHOD_POST, body)\n"
" if error != OK:\n"
@@ -29847,7 +29926,7 @@ msgstr ""
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 "
+"([member 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 "
@@ -29996,10 +30075,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Returns the mouse mode. See the constants for more information."
-msgstr ""
-
-#: doc/classes/Input.xml
msgid ""
"Gets an input vector by specifying four actions for the positive and "
"negative X and Y axes.\n"
@@ -30193,24 +30268,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Sets the mouse mode. See the constants for more information."
-msgstr ""
-
-#: doc/classes/Input.xml
-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
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 "
@@ -30246,6 +30303,24 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
+msgid "Controls the mouse mode. See [enum MouseMode] for more information."
+msgstr ""
+
+#: doc/classes/Input.xml
+msgid ""
+"If [code]true[/code], similar input events sent by the operating system are "
+"accumulated. 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 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
msgid "Emitted when a joypad device has been connected or disconnected."
msgstr ""
@@ -30553,8 +30628,8 @@ msgstr ""
#: doc/classes/InputEventJoypadButton.xml
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]."
+"Represents the pressure the user puts on the button with their finger, if "
+"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]."
msgstr ""
#: doc/classes/InputEventJoypadMotion.xml
@@ -30817,9 +30892,9 @@ 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 "
+"at most. If you need more precise input reporting, set [member Input."
+"use_accumulated_input] to [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."
@@ -31308,7 +31383,18 @@ msgid ""
"[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."
+"fixed_column_width] greater than zero to wrap the text.\n"
+"[b]Incremental search:[/b] Like [PopupMenu] and [Tree], [ItemList] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/ItemList.xml
@@ -35062,12 +35148,18 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Returns the override [Material] for a surface of the [Mesh] resource.\n"
+"[b]Note:[/b] This function only returns [i]override[/i] materials associated "
+"with this [MeshInstance]. Consider using [method get_active_material] or "
+"[method Mesh.surface_get_material] to get materials associated with the "
+"[Mesh] resource."
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the number of surface materials."
-msgstr ""
+#, fuzzy
+msgid "Returns the number of surface override materials."
+msgstr "Trả vỠphần dư của hai vector."
#: doc/classes/MeshInstance.xml
msgid ""
@@ -35103,7 +35195,10 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Sets the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Sets the override [Material] for the specified surface of the [Mesh] "
+"resource. This material is associated with this [MeshInstance] rather than "
+"with the [Mesh] resource."
msgstr ""
#: doc/classes/MeshInstance.xml
@@ -35134,9 +35229,10 @@ msgstr ""
#: doc/classes/MeshInstance2D.xml
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\"."
+"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be "
+"automatically created from an existing [Sprite] via a tool in the editor "
+"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to "
+"MeshInstance2D[/b] at the top of the 2D editor viewport."
msgstr ""
#: doc/classes/MeshInstance2D.xml
@@ -35901,6 +35997,9 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"Provides navigation and pathfinding within a collection of "
"[NavigationMesh]es. By default, these will be automatically collected from "
"child [NavigationMeshInstance] nodes. In addition to basic pathfinding, this "
@@ -35941,7 +36040,15 @@ msgid ""
msgstr ""
#: doc/classes/Navigation.xml
+#, fuzzy
+msgid "Returns the [RID] of the navigation map on the [NavigationServer]."
+msgstr "Trả vỠsin của tham số."
+
+#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"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, "
@@ -35963,16 +36070,31 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation.get_simple_path] path query."
+msgstr ""
+
+#: doc/classes/Navigation.xml
+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/Navigation.xml doc/classes/Navigation2DServer.xml
+#: doc/classes/NavigationServer.xml
+msgid ""
+"Emitted when a navigation map is updated, when a region moves or is modified."
+msgstr ""
+
#: doc/classes/Navigation2D.xml
msgid "2D navigation and pathfinding node."
msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -35992,6 +36114,9 @@ msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -36001,6 +36126,12 @@ msgstr ""
msgid "The XY plane cell size to use for fields."
msgstr ""
+#: doc/classes/Navigation2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation2D.get_simple_path] path query."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml
msgid "Server interface for low-level 2D navigation access."
msgstr ""
@@ -36017,8 +36148,12 @@ msgid ""
"through scripts.\n"
"For two regions to be connected to each other, they must share a similar "
"edge. An edge is considered connected to another if both of its two vertices "
-"are at a distance less than [member Navigation.edge_connection_margin] to "
-"the respective other edge's vertex.\n"
+"are at a distance less than navigation map [code]edge_connection_margin[/"
+"code] to the respective other edge's vertex.\n"
+"You may assign navigation layers to regions with [method Navigation2DServer."
+"region_set_navigation_layers], which then can be checked upon when "
+"requesting a path with [method Navigation2DServer.map_get_path]. This allows "
+"allowing or forbidding some areas to 2D objects.\n"
"To use the collision avoidance system, you may use agents. You can set an "
"agent's target velocity, then the servers will emit a callback with a "
"modified velocity.\n"
@@ -36047,7 +36182,17 @@ msgid "Returns [code]true[/code] if the map got changed the previous frame."
msgstr "Nếu [code]true[/code], há»a tiết sẽ được căn ở trung tâm."
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Callback called at the end of the RVO process."
+msgid ""
+"Callback called at the end of the RVO process. If a callback is created "
+"manually and the agent is placed on a navigation map it will calculate "
+"avoidance for the agent and dispatch the calculated [code]safe_velocity[/"
+"code] to the [code]receiver[/code] object with a signal to the chosen "
+"[code]method[/code] name.\n"
+"[b]Note:[/b] Created callbacks are always processed independently of the "
+"SceneTree state as long as the agent is on a navigation map and not freed. "
+"To disable the dispatch of a callback from an agent use [method "
+"agent_set_callback] again with a [code]null[/code] object as the "
+"[code]receiver[/code]."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -36108,15 +36253,55 @@ msgid "Destroys the given RID."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns all created navigation map [RID]s on the NavigationServer. This "
+"returns both 2D and 3D created navigation maps as there is technically no "
+"distinction between them."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Create a new map."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"This function immediately forces synchronization of the specified navigation "
+"[code]map[/code] [RID]. By default navigation maps are only synchronized at "
+"the end of each physics frame. This function can be used to immediately "
+"(re)calculate all the navigation meshes and region connections of the "
+"navigation map. This makes it possible to query a navigation path for a "
+"changed map immediately and in the same frame (multiple times if needed).\n"
+"Due to technical restrictions the current NavigationServer command queue "
+"will be flushed. This means all already queued update commands for this "
+"physics frame will be executed, even those intended for other maps, regions "
+"and agents not part of the specified map. The expensive computation of the "
+"navigation meshes and region connections of a map will only be done for the "
+"specified map. Other maps will receive the normal synchronization at the end "
+"of the physics frame. Should the specified map receive changes after the "
+"forced update it will update again as well when the other maps receive their "
+"update.\n"
+"Avoidance processing and dispatch of the [code]safe_velocity[/code] signals "
+"is untouched by this function and continues to happen for all maps and "
+"agents at the end of the physics frame.\n"
+"[b]Note:[/b] With great power comes great responsibility. This function "
+"should only be used by users that really know what they are doing and have a "
+"good reason for it. Forcing an immediate update of a navigation map requires "
+"locking the NavigationServer and flushing the entire NavigationServer "
+"command queue. Not only can this severely impact the performance of a game "
+"but it can also introduce bugs if used inappropriately without much "
+"foresight."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns all navigation agents [RID]s that are currently assigned to the "
"requested navigation [code]map[/code]."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
#, fuzzy
msgid "Returns the map cell size."
@@ -36141,7 +36326,10 @@ msgid ""
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Returns the navigation path to reach the destination from the origin."
+msgid ""
+"Returns the navigation path to reach the destination from the origin. "
+"[code]navigation_layers[/code] is a bitmask of all region layers that are "
+"allowed to be in the path."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -36160,6 +36348,12 @@ msgstr "Nếu [code]true[/code], há»a tiết sẽ được căn ở trung tâm.
msgid "Sets the map active."
msgstr "Trả vỠ[Texture2D] của khung hình được cho."
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/"
+"b] Currently not implemented."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Set the map cell size used to weld the navigation mesh polygons."
msgstr ""
@@ -36175,15 +36369,78 @@ msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"Returns the ending point of a connection door. [code]connection[/code] is an "
+"index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns the starting point of a connection door. [code]connection[/code] is "
+"an index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns how many connections this [code]region[/code] has with other regions "
+"in the map."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]."
+msgstr "Trả vỠphần dư của hai vector."
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns the navigation map [RID] the requested [code]region[/code] is "
"currently assigned to."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
#, fuzzy
+msgid "Returns the region's navigation layers."
+msgstr "Trả vỠsin của tham số."
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]."
+msgstr "Trả vỠsin của tham số."
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns [code]true[/code] if the provided [code]point[/code] in world space "
+"is currently owned by the provided navigation [code]region[/code]. Owned in "
+"this context means that one of the region's navigation mesh polygon faces "
+"has a possible position at the closest distance to this point compared to "
+"all other navigation meshes from other navigation regions that are also "
+"registered on the navigation map of the provided region.\n"
+"If multiple navigation meshes have positions at equal distance the "
+"navigation region whose polygons are processed first wins the ownership. "
+"Polygons are processed in the same order that navigation regions were "
+"registered on the NavigationServer.\n"
+"[b]Note:[/b] If navigation meshes from different navigation regions overlap "
+"(which should be avoided in general) the result might not be what is "
+"expected."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]."
+msgstr "Trả vỠsin của tham số."
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
msgid "Sets the map for the region."
msgstr "Trả vỠsin của tham số."
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method Navigation2DServer.map_get_path])."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
#, fuzzy
msgid "Sets the navigation mesh for the region."
@@ -36193,6 +36450,11 @@ msgstr "ÄÆ¡n Nhất [NavigationMeshGenerator]."
msgid "Sets the global transformation for the region."
msgstr ""
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]."
+msgstr "Trả vỠsin của tham số."
+
#: doc/classes/NavigationAgent.xml
msgid "3D agent used in navigation for collision avoidance."
msgstr ""
@@ -36202,9 +36464,16 @@ msgid ""
"3D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationAgent] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World] navigation map. If this node is a child of a [Navigation] "
+"node it will register to the navigation map of the navigation node or the "
+"function [method set_navigation] can be used to set the navigation node "
+"directly. [NavigationAgent] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -36222,7 +36491,15 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-msgid "Returns the path from start to finish in global coordinates."
+msgid ""
+"Returns this agent's current path from start to finish in global "
+"coordinates. The path only updates when the target location is changed or "
+"the agent requires a repath. The path array is not intended to be used in "
+"direct path movement as the agent has its own internal path logic that would "
+"get corrupted by changing the path array manually. Use the intended [method "
+"get_next_location] once every physics frame to receive the next path point "
+"for the agents movement as this function also updates the internal path "
+"logic."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -36238,11 +36515,24 @@ msgid ""
"system."
msgstr ""
-#: doc/classes/NavigationAgent.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
+"Returns the [RID] of the navigation map for this NavigationAgent node. This "
+"function returns always the map set on the NavigationAgent node and not the "
+"map of the abstract agent on the NavigationServer. If the agent map is "
+"changed directly with the NavigationServer API the NavigationAgent node will "
+"not be aware of the map change. Use [method set_navigation_map] to change "
+"the navigation map for the NavigationAgent and also update the agent on the "
+"NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"Returns a [Vector3] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the origin of the agent's parent."
+"Returns the next location in global coordinates that can be moved to, making "
+"sure that there are no static objects in the way. If the agent does not have "
+"a navigation path, it will return the position of the agent's parent. The "
+"use of this function once every physics frame is required to update the "
+"internal path logic of the NavigationAgent."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -36285,6 +36575,12 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"Sets the [RID] of the navigation map this NavigationAgent node should use "
+"and also updates the [code]agent[/code] on the NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"Sets the user desired final location. This will clear the current navigation "
"path."
msgstr ""
@@ -36297,7 +36593,13 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml
-msgid "The agent height offset to match the navigation mesh height."
+msgid ""
+"The NavigationAgent height offset is subtracted from the y-axis value of any "
+"vector path position for this NavigationAgent. The NavigationAgent height "
+"offset does not change or influence the navigation mesh or pathfinding query "
+"result. Additional navigation maps that use regions with navigation meshes "
+"that the developer baked with appropriate agent radius or height values are "
+"required to support different-sized agents."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -36324,26 +36626,53 @@ msgstr ""
msgid "The maximum speed that an agent can move."
msgstr ""
+#: doc/classes/NavigationAgent.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "The distance to search for other agents."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"The distance threshold before a path point is considered to be reached. This "
+"will allow an agent to not have to hit a path point on the path exactly, but "
+"in the area. If this value is set to high the NavigationAgent will skip "
+"points on the path which can lead to leaving the navigation mesh. If this "
+"value is set to low the NavigationAgent will be stuck in a repath loop cause "
+"it will constantly overshoot or undershoot the distance to the next point on "
+"each physics frame update."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"The maximum distance the agent is allowed away from the ideal path to the "
"final location. This can happen due to trying to avoid collisions. When the "
"maximum distance is exceeded, it recalculates the ideal path."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-msgid "The radius of the agent."
+msgid ""
+"The radius of the avoidance agent. This is the \"body\" of the avoidance "
+"agent and not the avoidance maneuver starting radius (which is controlled by "
+"[member neighbor_dist]).\n"
+"Does not affect normal pathfinding. To change an actor's pathfinding radius "
+"bake [NavigationMesh] resources with a different [member NavigationMesh."
+"agent_radius] property and use different navigation maps for each actor size."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"The distance threshold before a target is considered to be reached. This "
-"will allow an agent to not have to hit a point on the path exactly, but in "
-"the area."
+"The distance threshold before the final target point is considered to be "
+"reached. This will allow an agent to not have to hit the point of the final "
+"target exactly, but only the area. If this value is set to low the "
+"NavigationAgent will be stuck in a repath loop cause it will constantly "
+"overshoot or undershoot the distance to the final target point on each "
+"physics frame update."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -36386,9 +36715,16 @@ msgid ""
"2D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationAgent2D] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World2D] navigation map. If this node is a child of a "
+"[Navigation2D] node it will register to the navigation map of the navigation "
+"node or the function [method set_navigation] can be used to set the "
+"navigation node directly. [NavigationAgent2D] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent2D.xml
@@ -36405,13 +36741,6 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent2D.xml
-msgid ""
-"Returns a [Vector2] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the position of the agent's parent."
-msgstr ""
-
-#: doc/classes/NavigationAgent2D.xml
#, fuzzy
msgid "Returns the [RID] of this agent on the [Navigation2DServer]."
msgstr "Trả vỠsin của tham số."
@@ -36432,6 +36761,13 @@ msgid ""
"only be enabled on agents that currently require it."
msgstr ""
+#: doc/classes/NavigationAgent2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent2D] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationMesh.xml
msgid "A mesh to approximate the walkable areas and obstacles."
msgstr ""
@@ -36462,8 +36798,8 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
-"Returns whether the specified [code]bit[/code] of the [member geometry/"
-"collision_mask] is set."
+"Returns whether the specified [code]bit[/code] of the [member "
+"geometry_collision_mask] is set."
msgstr ""
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
@@ -36486,9 +36822,9 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/"
-"code] in the [member geometry/collision_mask].\n"
+"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]."
+"code] in the [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
@@ -36502,14 +36838,14 @@ 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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36521,7 +36857,7 @@ 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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36549,13 +36885,17 @@ msgstr ""
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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
-"If [code]true[/code], marks walkable spans as not walkable if the clearance "
-"above the span is less than [member agent/height]."
+"If the baking [AABB] has a volume the navigation mesh baking will be "
+"restricted to its enclosing area."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+msgid "The position offset applied to the [member filter_baking_aabb] [AABB]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36566,13 +36906,19 @@ msgstr "Nếu [code]true[/code] thì lật ngang há»a tiết."
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]true[/code], marks non-walkable spans as walkable if their maximum "
-"is within [member agent/max_climb] of a walkable neighbor."
+"is within [member agent_max_climb] of a walkable neighbor."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+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
msgid ""
"The physics layers to scan for static colliders.\n"
-"Only used when [member geometry/parsed_geometry_type] is [constant "
+"Only used when [member geometry_parsed_geometry_type] is [constant "
"PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]."
msgstr ""
@@ -36591,7 +36937,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"The name of the group to scan for geometry.\n"
-"Only used when [member geometry/source_geometry_mode] is [constant "
+"Only used when [member geometry_source_geometry_mode] is [constant "
"SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant "
"SOURCE_GEOMETRY_GROUPS_EXPLICIT]."
msgstr ""
@@ -36654,7 +37000,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Parses [StaticBody] colliders as geometry. The collider should be in any of "
-"the layers specified by [member geometry/collision_mask]."
+"the layers specified by [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36676,13 +37022,13 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Scans nodes in a group and their child nodes recursively for geometry. The "
-"group is specified by [member geometry/source_group_name]."
+"group is specified by [member geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Uses nodes in a group for geometry. The group is specified by [member "
-"geometry/source_group_name]."
+"geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36724,7 +37070,15 @@ msgid ""
"geometry for walkable terrain suitable to [NavigationMesh] agent properties "
"by creating a voxel world around the meshes bounding area.\n"
"The finalized navigation mesh is then returned and stored inside the "
-"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes."
+"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] "
+"nodes.\n"
+"[b]Note:[/b] Using meshes to not only define walkable surfaces but also "
+"obstruct navigation baking does not always work. The navigation baking has "
+"no concept of what is a geometry \"inside\" when dealing with mesh source "
+"geometry and this is intentional. Depending on current baking parameters, as "
+"soon as the obstructing mesh is large enough to fit a navigation mesh area "
+"inside, the baking will generate navigation mesh areas that are inside the "
+"obstructing source geometry mesh."
msgstr ""
#: doc/classes/NavigationMeshGenerator.xml
@@ -36732,8 +37086,8 @@ msgid ""
"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child "
"nodes under the provided [code]root_node[/code] or a specific group of nodes "
"for potential source geometry. The parse behavior can be controlled with the "
-"[member NavigationMesh.geometry/parsed_geometry_type] and [member "
-"NavigationMesh.geometry/source_geometry_mode] properties on the "
+"[member NavigationMesh.geometry_parsed_geometry_type] and [member "
+"NavigationMesh.geometry_source_geometry_mode] properties on the "
"[NavigationMesh] resource."
msgstr ""
@@ -36751,8 +37105,21 @@ msgstr ""
#: doc/classes/NavigationMeshInstance.xml
msgid ""
"An instance of a [NavigationMesh]. It tells the [Navigation] node what can "
-"be navigated and what cannot, based on the [NavigationMesh] resource. This "
-"should be a child of a [Navigation] node."
+"be navigated and what cannot, based on the [NavigationMesh] resource.\n"
+"By default this node will register to the default [World] navigation map. If "
+"this node is a child of a [Navigation] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method NavigationServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The cost of entering this region from another region can be controlled with "
+"the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The cost of traveling distances inside this region can be controlled with "
+"the [member travel_cost] multiplier."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
@@ -36781,11 +37148,35 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding enters this region's navmesh from another regions navmesh "
+"the [code]enter_cost[/code] value is added to the path distance for "
+"determining the shortest path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationMesh] "
+"belongs to. On path requests with [method NavigationServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
#, fuzzy
msgid "The [NavigationMesh] resource to use."
msgstr "ÄÆ¡n Nhất [NavigationMeshGenerator]."
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding moves inside this region's navmesh the traveled distances "
+"are multiplied with [code]travel_cost[/code] for determining the shortest "
+"path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
msgid "Notifies when the navigation mesh bake operation is completed."
msgstr ""
@@ -36802,7 +37193,9 @@ msgid ""
"3D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationObstacle] is physics safe."
+"[NavigationObstacle] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle.xml
@@ -36843,7 +37236,9 @@ msgid ""
"2D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationObstacle2D] is physics safe."
+"[NavigationObstacle2D] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle2D.xml
@@ -36924,6 +37319,14 @@ msgstr ""
#: doc/classes/NavigationPolygon.xml
msgid ""
+"Returns the [NavigationMesh] resulting from this navigation polygon. This "
+"navmesh can be used to update the navmesh of a region with the [method "
+"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server "
+"behind the scene)."
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml
+msgid ""
"Returns a [PoolVector2Array] containing the vertices of an outline that was "
"created in the editor or by script."
msgstr ""
@@ -36960,6 +37363,30 @@ msgid ""
msgstr ""
#: doc/classes/NavigationPolygonInstance.xml
+msgid "A region of the 2D navigation map."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A region of the navigation map. It tells the [Navigation2DServer] what can "
+"be navigated and what cannot, based on its [NavigationPolygon] resource.\n"
+"By default this node will register to the default [World2D] navigation map. "
+"If this node is a child of a [Navigation2D] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The pathfinding cost of entering this region from another region can be "
+"controlled with the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The pathfinding cost of traveling distances inside this region can be "
+"controlled with the [member travel_cost] multiplier."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
msgid ""
"Returns the [RID] of this region on the [Navigation2DServer]. Combined with "
"[method Navigation2DServer.map_get_closest_point_owner] can be used to "
@@ -36967,6 +37394,23 @@ msgid ""
"navigation map."
msgstr ""
+#: doc/classes/NavigationPolygonInstance.xml
+msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationPolygon] "
+"belongs to. On path requests with [method Navigation2DServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+#, fuzzy
+msgid "The [NavigationPolygon] resource to use."
+msgstr "ÄÆ¡n Nhất [NavigationMeshGenerator]."
+
#: doc/classes/NavigationServer.xml
msgid "Server interface for low-level 3D navigation access."
msgstr ""
@@ -37046,6 +37490,12 @@ msgid "Bakes the navigation mesh."
msgstr ""
#: doc/classes/NavigationServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method NavigationServer.map_get_path])."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
msgid "Control activation of this server."
msgstr ""
@@ -38512,13 +38962,19 @@ msgstr ""
#: doc/classes/Node.xml
msgid ""
"Emitted when a child node enters the scene tree, either because it entered "
-"on its own or because this node entered with it."
+"on its own or because this node entered with it.\n"
+"This signal is emitted [i]after[/i] the child node's own [constant "
+"NOTIFICATION_ENTER_TREE] and [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
msgid ""
-"Emitted when a child node exits the scene tree, either because it exited on "
-"its own or because this node exited."
+"Emitted when a child node is about to exit the scene tree, either because it "
+"is being removed or freed directly, or because this node is exiting the "
+"tree.\n"
+"When this signal is received, the child [code]node[/code] is still in the "
+"tree and valid. This signal is emitted [i]after[/i] the child node's own "
+"[signal tree_exiting] and [constant NOTIFICATION_EXIT_TREE]."
msgstr ""
#: doc/classes/Node.xml
@@ -38530,7 +38986,10 @@ msgid "Emitted when the node is renamed."
msgstr ""
#: doc/classes/Node.xml
-msgid "Emitted when the node enters the tree."
+msgid ""
+"Emitted when the node enters the tree.\n"
+"This signal is emitted [i]after[/i] the related [constant "
+"NOTIFICATION_ENTER_TREE] notification."
msgstr ""
#: doc/classes/Node.xml
@@ -38540,15 +38999,21 @@ msgstr ""
#: doc/classes/Node.xml
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)."
+"the right place for de-initialization (or a \"destructor\", if you will).\n"
+"This signal is emitted [i]before[/i] the related [constant "
+"NOTIFICATION_EXIT_TREE] notification."
msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node enters a [SceneTree]."
+msgid ""
+"Notification received when the node enters a [SceneTree].\n"
+"This notification is emitted [i]before[/i] the related [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node is about to exit a [SceneTree]."
+msgid ""
+"Notification received when the node is about to exit a [SceneTree].\n"
+"This notification is emitted [i]after[/i] the related [signal tree_exiting]."
msgstr ""
#: doc/classes/Node.xml
@@ -38809,7 +39274,13 @@ msgid "Rotation in degrees, relative to the node's parent."
msgstr ""
#: doc/classes/Node2D.xml
-msgid "The node's scale. Unscaled value: [code](1, 1)[/code]."
+msgid ""
+"The node's scale. Unscaled value: [code](1, 1)[/code].\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
#: doc/classes/Node2D.xml
@@ -40254,6 +40725,10 @@ msgid ""
" if argument.find(\"=\") > -1:\n"
" var key_value = argument.split(\"=\")\n"
" arguments[key_value[0].lstrip(\"--\")] = key_value[1]\n"
+" else:\n"
+" # Options without an argument will be present in the dictionary,\n"
+" # with the value set to an empty string.\n"
+" arguments[argument.lstrip(\"--\")] = \"\"\n"
"[/codeblock]"
msgstr ""
@@ -40910,8 +41385,15 @@ msgstr ""
msgid ""
"Moves the file or directory to the system's recycle bin. See also [method "
"Directory.remove].\n"
+"The method takes only global paths, so you may need to use [method "
+"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/"
+"code] as it will not work in exported project.\n"
"[b]Note:[/b] If the user has disabled the recycle bin on their system, the "
-"file will be permanently deleted instead."
+"file will be permanently deleted instead.\n"
+"[codeblock]\n"
+"var file_to_remove = \"user://slot1.sav\"\n"
+"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/OS.xml
@@ -45778,7 +46260,18 @@ msgstr ""
#: doc/classes/PopupMenu.xml
msgid ""
"[PopupMenu] is a [Control] that displays a list of options. They are popular "
-"in toolbars or context menus."
+"in toolbars or context menus.\n"
+"[b]Incremental search:[/b] Like [ItemList] and [Tree], [PopupMenu] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/PopupMenu.xml
@@ -47292,7 +47785,16 @@ msgid ""
msgstr ""
#: doc/classes/ProjectSettings.xml
-msgid "Message to be displayed before the backtrace when the engine crashes."
+msgid ""
+"Message to be displayed before the backtrace when the engine crashes. By "
+"default, this message is only used in exported projects due to the editor-"
+"only override applied to this setting."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Editor-only override for [member debug/settings/crash_handler/message]. Does "
+"not affect exported projects in debug or release mode."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -47537,6 +48039,18 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default naming style for scene files to infer from their root nodes. "
+"Possible options are:\n"
+"- [code]0[/code] (Auto): Uses the scene root name as is without changing its "
+"casing.\n"
+"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase "
+"casing.\n"
+"- [code]2[/code] (snake_case): Converts the scene root name to snake_case "
+"casing."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -47762,6 +48276,198 @@ msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 1."
msgstr ""
@@ -47970,6 +48676,198 @@ msgid "Optional name for the 2D render layer 9."
msgstr ""
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 1."
msgstr ""
@@ -48237,6 +49135,49 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default cell height for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_height].\n"
+"[b]Note:[/b] Currently not implemented."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 2D navigation maps. See [method "
+"Navigation2DServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell height for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_height]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 3D navigation maps. See [method "
+"NavigationServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default map up vector for 3D navigation maps. See [method NavigationServer."
+"map_set_up]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -48910,20 +49851,28 @@ msgid ""
"cause.\n"
"The default value is a conservative one, so you are advised to tweak it "
"according to the hardware you are targeting.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"The default is a very conservative override for [code]rendering/gles3/"
-"shaders/max_concurrent_compiles[/code].\n"
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
"Depending on the specific devices you are targeting, you may want to raise "
"it.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
+"Depending on the specific browsers you are targeting, you may want to raise "
+"it.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -48931,19 +49880,28 @@ msgid ""
"The maximum size, in megabytes, that the ubershader cache can grow up to. On "
"startup, the least recently used entries will be deleted until the total "
"size is within bounds.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/ubershader_cache_size_mb[/"
-"code], so a smaller maximum size can be configured for mobile platforms, "
-"where storage space is more limited.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for mobile platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for web platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] Currently, shader caching is generally unavailable on web "
+"platforms.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -48975,14 +49933,22 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/shader_compilation_mode[/"
-"code], so asynchronous compilation can be disabled for mobile.\n"
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on mobile platforms.\n"
"You may want to do that since mobile GPUs generally won't support "
"ubershaders due to their complexity."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on web platforms.\n"
+"You may want to do that since certain browsers (especially on mobile "
+"platforms) generally won't support ubershaders due to their complexity."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
@@ -49739,7 +50705,6 @@ msgid ""
"- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/"
"code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, "
"small grid radius values may lead to unwanted groupings.\n"
-"[/codeblock]\n"
"[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more "
"effective and faster [VisibilityNotifier] functionality. For most use cases, "
"[method Vector3.distance_to] or [method Vector3.distance_squared_to] are "
@@ -51893,6 +52858,22 @@ msgid "Makes text fill width."
msgstr ""
#: doc/classes/RichTextLabel.xml
+msgid "Aligns top of the inline image to the top of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns center of the inline image to the center of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns bottom of the inline image to the baseline of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns bottom of the inline image to the bottom of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
msgid "Each list item has a number marker."
msgstr ""
@@ -53630,8 +54611,8 @@ msgid ""
" yield(get_tree().create_timer(1.0), \"timeout\")\n"
" print(\"Timer ended.\")\n"
"[/codeblock]\n"
-"The timer will be automatically freed after its time elapses, so be aware "
-"that any reference you might have kept to it will become invalid."
+"The timer will be dereferenced after its time elapses. To preserve the "
+"timer, you can keep a reference to it. See [Reference]."
msgstr ""
#: doc/classes/SceneTreeTimer.xml
@@ -53663,24 +54644,23 @@ msgid ""
"manually (i.e. by using [code]Tween.new()[/code]) are invalid. They can't be "
"used for tweening values, but you can do manual interpolation with [method "
"interpolate_value].\n"
-"A [SceneTreeTween] animation is composed of a sequence of [Tweener]s, which "
-"by default are executed one after another. You can create a sequence by "
-"appending [Tweener]s to the [SceneTreeTween]. Animating something with a "
-"[Tweener] is called tweening. Example tweening sequence looks like this:\n"
+"A tween animation is created by adding [Tweener]s to the [SceneTreeTween] "
+"object, using [method tween_property], [method tween_interval], [method "
+"tween_callback] or [method tween_method]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1)\n"
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"This sequence will make the [code]$Sprite[/code] node turn red, then shrink "
-"and finally the [method Node.queue_free] is called to remove the sprite. See "
-"methods [method tween_property], [method tween_interval], [method "
-"tween_callback] and [method tween_method] for more usage information.\n"
+"This sequence will make the [code]$Sprite[/code] node turn red, then shrink, "
+"before finally calling [method Node.queue_free] to free the sprite. "
+"[Tweener]s are executed one after another by default. This behavior can be "
+"changed using [method parallel] and [method set_parallel].\n"
"When a [Tweener] is created with one of the [code]tween_*[/code] methods, a "
"chained method call can be used to tweak the properties of this [Tweener]. "
-"For example, if you want to set different transition type in the above "
-"example, you can do:\n"
+"For example, if you want to set a different transition type in the above "
+"example, you can use [method set_trans]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1).set_trans(Tween."
@@ -53689,8 +54669,9 @@ msgid ""
"TRANS_BOUNCE)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Most of the [SceneTreeTween] methods can be chained this way too. In this "
-"example the [SceneTreeTween] is bound and have set a default transition:\n"
+"Most of the [SceneTreeTween] methods can be chained this way too. In the "
+"following example the [SceneTreeTween] is bound to the running script's node "
+"and a default transition is set for its [Tweener]s:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween().bind_node(self).set_trans(Tween."
"TRANS_ELASTIC)\n"
@@ -53698,16 +54679,16 @@ msgid ""
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Another interesting use for [SceneTreeTween]s is animating arbitrary set of "
+"Another interesting use for [SceneTreeTween]s is animating arbitrary sets of "
"objects:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"for sprite in get_children():\n"
-" tween.tween_property(sprite, \"position\", Vector2(), 1)\n"
+" tween.tween_property(sprite, \"position\", Vector2(0, 0), 1)\n"
"[/codeblock]\n"
"In the example above, all children of a node are moved one after another to "
"position (0, 0).\n"
-"Some [Tweener]s use transitions and eases. The first accepts an [enum Tween."
+"Some [Tweener]s use transitions and eases. The first accepts a [enum Tween."
"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 Tween.EaseType] constant, and "
@@ -53719,7 +54700,7 @@ msgid ""
"tween_cheatsheet.png]Tween easing and transition types cheatsheet[/url]\n"
"[b]Note:[/b] All [SceneTreeTween]s will automatically start by default. To "
"prevent a [SceneTreeTween] from autostarting, you can call [method stop] "
-"immediately after it was created."
+"immediately after it is created."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53749,21 +54730,24 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
-"Processes the [SceneTreeTween] by given [code]delta[/code] value, in "
-"seconds. Mostly useful when the [SceneTreeTween] is paused, for controlling "
-"it manually. Can also be used to end the [SceneTreeTween] animation "
-"immediately, by using [code]delta[/code] longer than the whole duration.\n"
+"Processes the [SceneTreeTween] by the given [code]delta[/code] value, in "
+"seconds. This is mostly useful for manual control when the [SceneTreeTween] "
+"is paused. It can also be used to end the [SceneTreeTween] animation "
+"immediately, by setting [code]delta[/code] longer than the whole duration of "
+"the [SceneTreeTween] animation.\n"
"Returns [code]true[/code] if the [SceneTreeTween] still has [Tweener]s that "
"haven't finished.\n"
-"[b]Note:[/b] The [SceneTreeTween] will become invalid after finished, but "
-"you can call [method stop] after the step, to keep it and reset."
+"[b]Note:[/b] The [SceneTreeTween] will become invalid in the next processing "
+"frame after its animation finishes. Calling [method stop] after performing "
+"[method custom_step] instead keeps and resets the [SceneTreeTween]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Returns the total time in seconds the [SceneTreeTween] has been animating (i."
-"e. time since it started, not counting pauses etc.). The time is affected by "
-"[method set_speed_scale] and [method stop] will reset it to [code]0[/code].\n"
+"e. the time since it started, not counting pauses etc.). The time is "
+"affected by [method set_speed_scale], and [method stop] will reset it to "
+"[code]0[/code].\n"
"[b]Note:[/b] As it results from accumulating frame deltas, the time returned "
"after the [SceneTreeTween] has finished animating will be slightly greater "
"than the actual [SceneTreeTween] duration."
@@ -53799,11 +54783,10 @@ msgstr ""
msgid ""
"Returns whether the [SceneTreeTween] is valid. A valid [SceneTreeTween] is a "
"[SceneTreeTween] contained by the scene tree (i.e. the array from [method "
-"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). "
-"[SceneTreeTween] might become invalid when it has finished tweening or was "
-"killed, also when created with [code]Tween.new()[/code]. Invalid "
-"[SceneTreeTween] can't have [Tweener]s appended, because it can't animate "
-"them. You can however still use [method interpolate_value]."
+"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). A "
+"[SceneTreeTween] might become invalid when it has finished tweening, is "
+"killed, or when created with [code]SceneTreeTween.new()[/code]. Invalid "
+"[SceneTreeTween]s can't have [Tweener]s appended."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53843,16 +54826,15 @@ msgstr ""
msgid ""
"Sets the number of times the tweening sequence will be repeated, i.e. "
"[code]set_loops(2)[/code] will run the animation twice.\n"
-"Calling this method without arguments will make the [SceneTreeTween] run "
-"infinitely, until it is either killed by [method kill] or by freeing bound "
-"node, or all the animated objects have been freed (which makes further "
+"Calling this method without arguments will make the [Tween] run infinitely, "
+"until either it is killed with [method kill], the [Tween]'s bound node is "
+"freed, or all the animated objects have been freed (which makes further "
"animation impossible).\n"
"[b]Warning:[/b] Make sure to always add some duration/delay when using "
-"infinite loops. 0-duration looped animations (e.g. single [CallbackTweener] "
-"with no delay or [PropertyTweener] with invalid node) are equivalent to "
-"infinite [code]while[/code] loops and will freeze your game. If a "
-"[SceneTreeTween]'s lifetime depends on some node, always use [method "
-"bind_node]."
+"infinite loops. To prevent the game freezing, 0-duration looped animations "
+"(e.g. a single [CallbackTweener] with no delay) are stopped after a small "
+"number of loops, which may produce unexpected results. If a [Tween]'s "
+"lifetime depends on some node, always use [method bind_node]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53914,10 +54896,10 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Creates and appends an [IntervalTweener]. This method can be used to create "
-"delays in the tween animation, as an alternative for using the delay in "
-"other [Tweener]s or when there's no animation (in which case the "
-"[SceneTreeTween] acts as a timer). [code]time[/code] is the length of the "
-"interval, in seconds.\n"
+"delays in the tween animation, as an alternative to using the delay in other "
+"[Tweener]s, or when there's no animation (in which case the [SceneTreeTween] "
+"acts as a timer). [code]time[/code] is the length of the interval, in "
+"seconds.\n"
"Example: creating an interval in code execution.\n"
"[codeblock]\n"
"# ... some code\n"
@@ -53971,8 +54953,8 @@ msgid ""
"Creates and appends a [PropertyTweener]. This method tweens a "
"[code]property[/code] of an [code]object[/code] between an initial value and "
"[code]final_val[/code] in a span of time equal to [code]duration[/code], in "
-"seconds. The initial value by default is a value at the time the tweening of "
-"the [PropertyTweener] start. For example:\n"
+"seconds. The initial value by default is the property's value at the time "
+"the tweening of the [PropertyTweener] starts. For example:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"tween.tween_property($Sprite, \"position\", Vector2(100, 200), 1)\n"
@@ -54003,16 +54985,15 @@ msgid ""
"Emitted when the [SceneTreeTween] has finished all tweening. Never emitted "
"when the [SceneTreeTween] is set to infinite looping (see [method "
"set_loops]).\n"
-"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) after this signal "
-"is emitted, but it doesn't happen immediately, but on the next processing "
-"frame. Calling [method stop] inside the signal callback will preserve the "
-"[SceneTreeTween]."
+"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) in the next "
+"processing frame after this signal is emitted. Calling [method stop] inside "
+"the signal callback will prevent the [SceneTreeTween] from being removed."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Emitted when a full loop is complete (see [method set_loops]), providing the "
-"loop index. This signal is not emitted after final loop, use [signal "
+"loop index. This signal is not emitted after the final loop, use [signal "
"finished] instead for this case."
msgstr ""
@@ -54020,7 +55001,7 @@ msgstr ""
msgid ""
"Emitted when one step of the [SceneTreeTween] is complete, providing the "
"step index. One step is either a single [Tweener] or a group of [Tweener]s "
-"running parallelly."
+"running in parallel."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -55354,7 +56335,12 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-msgid "Scale part of the local transformation."
+msgid ""
+"Scale part of the local transformation.\n"
+"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, the scale values will either be all "
+"positive or all negative."
msgstr ""
#: doc/classes/Spatial.xml
@@ -57989,11 +58975,11 @@ msgstr ""
msgid ""
"Returns [code]true[/code] if this string contains a valid integer.\n"
"[codeblock]\n"
-"print(\"7\".is_valid_int()) # Prints \"True\"\n"
-"print(\"14.6\".is_valid_int()) # Prints \"False\"\n"
-"print(\"L\".is_valid_int()) # Prints \"False\"\n"
-"print(\"+3\".is_valid_int()) # Prints \"True\"\n"
-"print(\"-12\".is_valid_int()) # Prints \"True\"\n"
+"print(\"7\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"14.6\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"L\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"+3\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"-12\".is_valid_integer()) # Prints \"True\"\n"
"[/codeblock]"
msgstr ""
@@ -61470,6 +62456,11 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml
+#, fuzzy
+msgid "If [code]true[/code], this TileMap bakes a navigation region."
+msgstr "Nếu [code]true[/code] thì lật dá»c há»a tiết."
+
+#: doc/classes/TileMap.xml
msgid "If [code]true[/code], the cell's UVs will be clipped."
msgstr ""
@@ -61576,6 +62567,10 @@ msgid "The TileMap orientation mode. See [enum Mode] for possible values."
msgstr ""
#: doc/classes/TileMap.xml
+msgid "The navigation layers the TileMap generates its navigation regions in."
+msgstr ""
+
+#: doc/classes/TileMap.xml
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 "
@@ -62707,7 +63702,12 @@ msgstr ""
#: doc/classes/Transform2D.xml
msgid ""
"Returns a copy of the transform scaled by the given [code]scale[/code] "
-"factor, using matrix multiplication."
+"factor, using matrix multiplication.\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
#: doc/classes/Transform2D.xml
@@ -62863,7 +63863,18 @@ msgid ""
"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]."
+"to remove it from the [Tree].\n"
+"[b]Incremental search:[/b] Like [ItemList] and [PopupMenu], [Tree] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/Tree.xml
@@ -66402,11 +67413,12 @@ msgid "This enabler will stop [Particles2D] nodes."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _process function."
+msgid "This enabler will stop the parent's [method Node._process] function."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _physics_process function."
+msgid ""
+"This enabler will stop the parent's [method Node._physics_process] function."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
@@ -66446,6 +67458,16 @@ msgid "The VisibilityNotifier's bounding box."
msgstr ""
#: doc/classes/VisibilityNotifier.xml
+msgid ""
+"In addition to checking whether a node is on screen or within a [Camera]'s "
+"view, VisibilityNotifier can also optionally check whether a node is within "
+"a specified maximum distance when using a [Camera] with perspective "
+"projection. This is useful for throttling the performance requirements of "
+"nodes that are far away.\n"
+"[b]Note:[/b] This feature will be disabled if set to 0.0."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier.xml
msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view."
msgstr ""
@@ -71214,6 +72236,16 @@ msgid "The amount of shader rebinds in the frame."
msgstr ""
#: doc/classes/VisualServer.xml
+msgid ""
+"The peak amount of shaders that have been under compilation in the frame.\n"
+"This is useful to know when asynchronous shader compilation has finished for "
+"the current shaders on screen.\n"
+"[b]Note:[/b] For complete certainty, only assume there are no outstanding "
+"compilations when this value is zero for at least two frames in a row.\n"
+"Unimplemented in the GLES2 rendering backend, always returns 0."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
msgid "The amount of surface changes in the frame."
msgstr ""
@@ -74421,8 +75453,8 @@ msgstr ""
#: doc/classes/World.xml
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."
+"scenario, a navigation map and a sound space. Spatial nodes register their "
+"resources into the current world."
msgstr ""
#: doc/classes/World.xml
@@ -74437,11 +75469,17 @@ msgstr ""
#: doc/classes/World.xml
msgid ""
-"The World's fallback_environment will be used if the World's [Environment] "
-"fails or is missing."
+"The World's fallback environment will be used if [member environment] fails "
+"or is missing."
msgstr ""
#: doc/classes/World.xml
+#, fuzzy
+msgid ""
+"The [RID] of this world's navigation map. Used by the [NavigationServer]."
+msgstr "Trả vỠsin của tham số."
+
+#: doc/classes/World.xml
msgid "The World's visual scenario."
msgstr ""
@@ -74456,8 +75494,8 @@ msgstr ""
#: doc/classes/World2D.xml
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."
+"visual scenario, a navigation map and a sound space. 2D nodes register their "
+"resources into the current 2D world."
msgstr ""
#: doc/classes/World2D.xml
@@ -74474,6 +75512,12 @@ msgid ""
msgstr ""
#: doc/classes/World2D.xml
+#, fuzzy
+msgid ""
+"The [RID] of this world's navigation map. Used by the [Navigation2DServer]."
+msgstr "Trả vỠsin của tham số."
+
+#: doc/classes/World2D.xml
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."
diff --git a/doc/translations/zh_CN.po b/doc/translations/zh_CN.po
index d037281462..e39b32f496 100644
--- a/doc/translations/zh_CN.po
+++ b/doc/translations/zh_CN.po
@@ -38,7 +38,7 @@
# SimonChang <simon_chang@foxmail.com>, 2021.
# zeng haochen <m18621006730@163.com>, 2021.
# suplife <2634557184@qq.com>, 2021.
-# Magian <magian1127@gmail.com>, 2021.
+# Magian <magian1127@gmail.com>, 2021, 2022.
# ji233 <27987772@qq.com>, 2021.
# 沈士超 <shenshichao920@hotmail.com>, 2021.
# MisakaRua <1150235785@qq.com>, 2021.
@@ -62,7 +62,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2022-06-08 06:47+0000\n"
+"PO-Revision-Date: 2022-06-23 04:30+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"
@@ -71,7 +71,7 @@ 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.13-dev\n"
+"X-Generator: Weblate 4.13.1-dev\n"
#: doc/tools/make_rst.py
msgid "Description"
@@ -518,7 +518,7 @@ msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
msgid ""
"Compares two values by checking their actual contents, recursing into any "
-"`Array` or `Dictionary` up to its deepest level.\n"
+"[Array] or [Dictionary] up to its deepest level.\n"
"This compares to [code]==[/code] in a number of ways:\n"
"- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/"
"code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] "
@@ -535,7 +535,7 @@ msgid ""
"want a true content-aware comparison, you have to use [code]deep_equal[/"
"code]."
msgstr ""
-"æ ¹æ®å®žé™…的内容对两个值进行比较,对于 `Array` 或 `Dictionary` 会递归至最深一"
+"æ ¹æ®å®žé™…的内容对两个值进行比较,对于 [Array] 或 [Dictionary] 会递归至最深一"
"层。\n"
"与 [code]==[/code] çš„å¼‚åŒæœ‰ï¼š\n"
"- 对于 [code]null[/code]ã€[code]int[/code]ã€[code]float[/code]ã€"
@@ -570,6 +570,7 @@ msgstr ""
"将(之å‰ä½¿ç”¨ [method inst2dict] 创建的)字典转æ¢å›žå®žä¾‹ã€‚适用于ååºåˆ—化。"
#: modules/gdscript/doc_classes/@GDScript.xml
+#, 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 "
@@ -584,7 +585,7 @@ msgid ""
"- 1.0: Linear\n"
"- Greater than 1.0 (exclusive): Ease in\n"
"[/codeblock]\n"
-"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.4/img/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/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]."
@@ -658,7 +659,7 @@ msgid ""
"[/codeblock]\n"
"For the integer remainder operation, use the % operator."
msgstr ""
-"返回 [code]a/b[/code] 的浮点型余数, 符å·ä¸Ž [code]a[/code]一致。\n"
+"返回 [code]a/b[/code] 的浮点型余数,符å·ä¸Ž [code]a[/code]一致。\n"
"[codeblock]\n"
"r = fmod(7, 5.5) # r = 1.5\n"
"[/codeblock]\n"
@@ -874,7 +875,7 @@ msgstr ""
"如果 [code]a[/code] 和 [code]b[/code] 彼此近似相等,则返回 [code]true[/"
"code]。\n"
"这里,近似相等æ„å‘³ç€ [code]a[/code] å’Œ [code]b[/code] 相互之间在一个å°çš„内部 "
-"ε 里,这个内部 ε éšç€æ•°å­—的大å°è€Œå˜åŒ–。 \n"
+"ε 里,这个内部 ε éšç€æ•°å­—的大å°è€Œå˜åŒ–。\n"
"相åŒç¬¦å·çš„æ— ç©·å¤§å€¼è¢«è®¤ä¸ºæ˜¯ç›¸ç­‰çš„。"
#: modules/gdscript/doc_classes/@GDScript.xml
@@ -1202,7 +1203,7 @@ msgid ""
msgstr ""
"å°† JSON 文本解æžä¸º Variant。(使用 [method typeof] 检查 Variant 的类型是å¦ç¬¦"
"åˆæ‚¨çš„æœŸæœ›ã€‚)\n"
-"[b]注æ„:[/b]JSON 规范未定义整数或浮点类型,仅定义了 [i]number[/i] 类型。 å› "
+"[b]注æ„:[/b]JSON 规范未定义整数或浮点类型,仅定义了 [i]number[/i] 类型。因"
"æ­¤ï¼Œè§£æž JSON 文本会将所有数值转æ¢ä¸º [float] 类型。\n"
"[b]注æ„:[/b]JSON 对象ä¸ä¼šåƒ Godot 字典那样ä¿ç•™é”®é¡ºåºï¼Œå› æ­¤ï¼Œå¦‚果字典是由 "
"JSON 构造的,则ä¸åº”ä¾èµ–于特定顺åºçš„键。相å,JSON 数组ä¿ç•™å…¶å…ƒç´ çš„顺åºï¼š\n"
@@ -1461,7 +1462,7 @@ msgstr ""
"[codeblock]\n"
"prints(rand_range(0, 1), rand_range(0, 1)) # 输出举例 0.135591 0.405263\n"
"[/codeblock]\n"
-"[b]注æ„:[/b]与 [code]randf() * (to - from) + from[/code] 等价。"
+"[b]注æ„:[/b]相当于 [code]randf() * (to - from) + from[/code]。"
#: modules/gdscript/doc_classes/@GDScript.xml
msgid ""
@@ -1687,6 +1688,7 @@ msgstr ""
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml
+#, fuzzy
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] "
@@ -1707,7 +1709,7 @@ msgid ""
"[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/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/img/"
"smoothstep_ease_comparison.png]Comparison between smoothstep() and ease(x, "
"-1.6521) return values[/url]"
msgstr ""
@@ -1724,7 +1726,7 @@ msgstr ""
"smoothstep(0, 2, -5.0) # 返回 0.0\n"
"smoothstep(0, 2, 0.5) # 返回 0.15625\n"
"smoothstep(0, 2, 1.0) # 返回 0.5\n"
-"smoothstep(0, 2, 2.0) # 返回1.0\n"
+"smoothstep(0, 2, 2.0) # 返回 1.0\n"
"[/codeblock]\n"
"与曲线值为 [code]-1.6521[/code] 的 [method ease] 相比,[method smoothstep] 返"
"回最平滑的曲线,导数没有çªç„¶å˜åŒ–ã€‚å¦‚æžœä½ éœ€è¦æ‰§è¡Œæ›´é«˜çº§çš„过渡,请使用 [Tween] "
@@ -2028,7 +2030,7 @@ msgstr ""
"# æ— é™æ—‹è½¬ï¼ˆå¼§åº¦ï¼‰\n"
"angle = wrapf(angle + 0.1, -PI, PI)\n"
"[/codeblock]\n"
-"[b]注æ„:[/b]如果 [code]min[/code] 为 [code]0[/code],则等价于 [method "
+"[b]注æ„:[/b]如果 [code]min[/code] 为 [code]0[/code],则相当于 [method "
"fposmod],因此请改用它。\n"
"通过让用户控制最å°å€¼ï¼Œ[code]wrapf[/code] 比使用 [method fposmod] æ–¹æ³•æ›´çµæ´»ã€‚"
@@ -2060,7 +2062,7 @@ msgstr ""
"# result 是 -2\n"
"var result = wrapi(-6, -5, -1)\n"
"[/codeblock]\n"
-"[b]注æ„:[/b]如果 [code]min[/code] 为 [code]0[/code],则等价于 [method "
+"[b]注æ„:[/b]如果 [code]min[/code] 为 [code]0[/code],则相当于 [method "
"posmod],因此建议改用它。\n"
"通过让用户控制最å°å€¼ï¼Œ[code]wrapi[/code] 比使用 [method posmod] æ–¹æ³•æ›´çµæ´»ã€‚"
@@ -2149,14 +2151,14 @@ msgstr ""
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 "常é‡ï¼Œè¡¨ç¤ºåœ†çš„周长是直径的多少å€ã€‚等价于 [code]TAU / 2[/code]。"
+msgstr "常é‡ï¼Œè¡¨ç¤ºåœ†çš„周长是直径的多少å€ã€‚相当于 [code]TAU / 2[/code]。"
#: modules/gdscript/doc_classes/@GDScript.xml
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 ""
-"圆常é‡ï¼Œå•ä½åœ†çš„周长,å•ä½ä¸ºå¼§åº¦ã€‚等价于 [code]PI * 2[/code]ï¼Œå³ 360 度的旋转"
+"圆常é‡ï¼Œå•ä½åœ†çš„周长,å•ä½ä¸ºå¼§åº¦ã€‚相当于 [code]PI * 2[/code]ï¼Œå³ 360 度的旋转"
"值。"
#: modules/gdscript/doc_classes/@GDScript.xml
@@ -2637,11 +2639,11 @@ msgstr "å°é”®ç›˜çš„æ•°å­— 9。"
#: doc/classes/@GlobalScope.xml
msgid "Left Super key (Windows key)."
-msgstr "左 Super 键( Windows 键 )。"
+msgstr "左 Super 键(Windows 键)。"
#: doc/classes/@GlobalScope.xml
msgid "Right Super key (Windows key)."
-msgstr "å³ Super 键( Windows é”® )。"
+msgstr "å³ Super 键(Windows 键)。"
#: doc/classes/@GlobalScope.xml
msgid "Context menu key."
@@ -2762,31 +2764,31 @@ msgstr "å¯åŠ¨å¤šåª’ä½“é”®ã€‚"
#: doc/classes/@GlobalScope.xml
msgid "Launch Shortcut 0 key."
-msgstr "å¿«æ·å¯åЍ键0。"
+msgstr "å¿«æ·å¯åЍ键 0。"
#: doc/classes/@GlobalScope.xml
msgid "Launch Shortcut 1 key."
-msgstr "å¿«æ·å¯åЍ键1。"
+msgstr "å¿«æ·å¯åЍ键 1。"
#: doc/classes/@GlobalScope.xml
msgid "Launch Shortcut 2 key."
-msgstr "å¿«æ·å¯åЍ键2。"
+msgstr "å¿«æ·å¯åЍ键 2。"
#: doc/classes/@GlobalScope.xml
msgid "Launch Shortcut 3 key."
-msgstr "å¿«æ·å¯åЍ键3。"
+msgstr "å¿«æ·å¯åЍ键 3。"
#: doc/classes/@GlobalScope.xml
msgid "Launch Shortcut 4 key."
-msgstr "å¿«æ·å¯åЍ键4。"
+msgstr "å¿«æ·å¯åЍ键 4。"
#: doc/classes/@GlobalScope.xml
msgid "Launch Shortcut 5 key."
-msgstr "å¿«æ·å¯åЍ键5。"
+msgstr "å¿«æ·å¯åЍ键 5。"
#: doc/classes/@GlobalScope.xml
msgid "Launch Shortcut 6 key."
-msgstr "å¿«æ·å¯åЍ键6。"
+msgstr "å¿«æ·å¯åЍ键 6。"
#: doc/classes/@GlobalScope.xml
msgid "Launch Shortcut 7 key."
@@ -2798,35 +2800,35 @@ msgstr "å¿«æ·å¯åЍ键 8。"
#: doc/classes/@GlobalScope.xml
msgid "Launch Shortcut 9 key."
-msgstr "å¿«æ·å¯åЍ键9。"
+msgstr "å¿«æ·å¯åЍ键 9。"
#: doc/classes/@GlobalScope.xml
msgid "Launch Shortcut A key."
-msgstr "å¿«æ·å¯åЍ键 A 。"
+msgstr "å¿«æ·å¯åЍ键 A。"
#: doc/classes/@GlobalScope.xml
msgid "Launch Shortcut B key."
-msgstr "å¿«æ·å¯åЍ键 B 。"
+msgstr "å¿«æ·å¯åЍ键 B。"
#: doc/classes/@GlobalScope.xml
msgid "Launch Shortcut C key."
-msgstr "å¿«æ·å¯åЍ键 C 。"
+msgstr "å¿«æ·å¯åЍ键 C。"
#: doc/classes/@GlobalScope.xml
msgid "Launch Shortcut D key."
-msgstr "å¿«æ·å¯åЍ键 D 。"
+msgstr "å¿«æ·å¯åЍ键 D。"
#: doc/classes/@GlobalScope.xml
msgid "Launch Shortcut E key."
-msgstr "å¿«æ·å¯åЍ键 E 。"
+msgstr "å¿«æ·å¯åЍ键 E。"
#: doc/classes/@GlobalScope.xml
msgid "Launch Shortcut F key."
-msgstr "å¿«æ·å¯åЍ键 F 。"
+msgstr "å¿«æ·å¯åЍ键 F。"
#: doc/classes/@GlobalScope.xml
msgid "Unknown key."
-msgstr "未知 键。"
+msgstr "未知键。"
#: doc/classes/@GlobalScope.xml
msgid "Space key."
@@ -3399,8 +3401,8 @@ msgid ""
"mask should be preferred to [constant KEY_MASK_META] or [constant "
"KEY_MASK_CTRL] for system shortcuts as it handles all platforms correctly."
msgstr ""
-"Command 键掩ç ã€‚在 macOS,这等åŒäºŽ [constant KEY_MASK_META]。而在其他平å°ï¼Œè¿™"
-"ç­‰åŒäºŽ [constant KEY_MASK_CTRL]。相对使用 [constant KEY_MASK_META] 或 "
+"Command 键掩ç ã€‚在 macOS 上相当于 [constant KEY_MASK_META]。而在其他平å°åˆ™ç›¸"
+"当于 [constant KEY_MASK_CTRL]。相对使用 [constant KEY_MASK_META] 或 "
"[constant KEY_MASK_CTRL] æ¥ä½œä¸ºç³»ç»Ÿå¿«æ·é”®ï¼Œåº”优先使用此掩ç ï¼Œä»¥ä¾¿èƒ½è®©æ‰€æœ‰å¹³å°"
"正确处ç†ã€‚"
@@ -3426,11 +3428,11 @@ msgstr "鼠标中键。"
#: doc/classes/@GlobalScope.xml
msgid "Extra mouse button 1 (only present on some mice)."
-msgstr "é¼ æ ‡é¢å¤–é”®1(仅在æŸäº›é¼ æ ‡ä¸Šæœ‰å®žçŽ°ï¼‰ã€‚"
+msgstr "é¼ æ ‡é¢å¤–é”® 1(仅在æŸäº›é¼ æ ‡ä¸Šæœ‰å®žçŽ°ï¼‰ã€‚"
#: doc/classes/@GlobalScope.xml
msgid "Extra mouse button 2 (only present on some mice)."
-msgstr "é¼ æ ‡é¢å¤–é”®2(仅在æŸäº›é¼ æ ‡ä¸Šæœ‰å®žçŽ°ï¼‰ã€‚"
+msgstr "é¼ æ ‡é¢å¤–é”® 2(仅在æŸäº›é¼ æ ‡ä¸Šæœ‰å®žçŽ°ï¼‰ã€‚"
#: doc/classes/@GlobalScope.xml
msgid "Mouse wheel up."
@@ -3462,11 +3464,11 @@ msgstr "鼠标中键掩ç ã€‚"
#: doc/classes/@GlobalScope.xml
msgid "Extra mouse button 1 mask."
-msgstr "é¼ æ ‡é¢å¤–é”®1掩ç ã€‚"
+msgstr "é¼ æ ‡é¢å¤–é”® 1 掩ç ã€‚"
#: doc/classes/@GlobalScope.xml
msgid "Extra mouse button 2 mask."
-msgstr "é¼ æ ‡é¢å¤–é”®2掩ç ã€‚"
+msgstr "é¼ æ ‡é¢å¤–é”® 2 掩ç ã€‚"
#: doc/classes/@GlobalScope.xml
msgid "Invalid button or axis."
@@ -3474,27 +3476,27 @@ msgstr "无效按钮或轴。"
#: doc/classes/@GlobalScope.xml
msgid "Gamepad button 0."
-msgstr "æ¸¸æˆæ‰‹æŸ„按钮0。"
+msgstr "æ¸¸æˆæ‰‹æŸ„按钮 0。"
#: doc/classes/@GlobalScope.xml
msgid "Gamepad button 1."
-msgstr "æ¸¸æˆæ‰‹æŸ„按钮1。"
+msgstr "æ¸¸æˆæ‰‹æŸ„按钮 1。"
#: doc/classes/@GlobalScope.xml
msgid "Gamepad button 2."
-msgstr "æ¸¸æˆæ‰‹æŸ„按钮2。"
+msgstr "æ¸¸æˆæ‰‹æŸ„按钮 2。"
#: doc/classes/@GlobalScope.xml
msgid "Gamepad button 3."
-msgstr "æ¸¸æˆæ‰‹æŸ„按钮3。"
+msgstr "æ¸¸æˆæ‰‹æŸ„按钮 3。"
#: doc/classes/@GlobalScope.xml
msgid "Gamepad button 4."
-msgstr "æ¸¸æˆæ‰‹æŸ„按钮4。"
+msgstr "æ¸¸æˆæ‰‹æŸ„按钮 4。"
#: doc/classes/@GlobalScope.xml
msgid "Gamepad button 5."
-msgstr "æ¸¸æˆæ‰‹æŸ„按钮5。"
+msgstr "æ¸¸æˆæ‰‹æŸ„按钮 5。"
#: doc/classes/@GlobalScope.xml
msgid "Gamepad button 6."
@@ -3514,55 +3516,55 @@ msgstr "æ¸¸æˆæ‰‹æŸ„按钮 9。"
#: doc/classes/@GlobalScope.xml
msgid "Gamepad button 10."
-msgstr "æ¸¸æˆæ‰‹æŸ„按钮10。"
+msgstr "æ¸¸æˆæ‰‹æŸ„按钮 10。"
#: doc/classes/@GlobalScope.xml
msgid "Gamepad button 11."
-msgstr "æ¸¸æˆæ‰‹æŸ„按钮11。"
+msgstr "æ¸¸æˆæ‰‹æŸ„按钮 11。"
#: doc/classes/@GlobalScope.xml
msgid "Gamepad button 12."
-msgstr "æ¸¸æˆæ‰‹æŸ„按钮12。"
+msgstr "æ¸¸æˆæ‰‹æŸ„按钮 12。"
#: doc/classes/@GlobalScope.xml
msgid "Gamepad button 13."
-msgstr "æ¸¸æˆæ‰‹æŸ„按钮13。"
+msgstr "æ¸¸æˆæ‰‹æŸ„按钮 13。"
#: doc/classes/@GlobalScope.xml
msgid "Gamepad button 14."
-msgstr "æ¸¸æˆæ‰‹æŸ„按钮14。"
+msgstr "æ¸¸æˆæ‰‹æŸ„按钮 14。"
#: doc/classes/@GlobalScope.xml
msgid "Gamepad button 15."
-msgstr "æ¸¸æˆæ‰‹æŸ„按钮15。"
+msgstr "æ¸¸æˆæ‰‹æŸ„按钮 15。"
#: doc/classes/@GlobalScope.xml
msgid "Gamepad button 16."
-msgstr "æ¸¸æˆæ‰‹æŸ„按钮16。"
+msgstr "æ¸¸æˆæ‰‹æŸ„按钮 16。"
#: doc/classes/@GlobalScope.xml
msgid "Gamepad button 17."
-msgstr "æ¸¸æˆæ‰‹æŸ„按钮17。"
+msgstr "æ¸¸æˆæ‰‹æŸ„按钮 17。"
#: doc/classes/@GlobalScope.xml
msgid "Gamepad button 18."
-msgstr "æ¸¸æˆæ‰‹æŸ„按钮18。"
+msgstr "æ¸¸æˆæ‰‹æŸ„按钮 18。"
#: doc/classes/@GlobalScope.xml
msgid "Gamepad button 19."
-msgstr "æ¸¸æˆæ‰‹æŸ„按钮19。"
+msgstr "æ¸¸æˆæ‰‹æŸ„按钮 19。"
#: doc/classes/@GlobalScope.xml
msgid "Gamepad button 20."
-msgstr "æ¸¸æˆæ‰‹æŸ„按钮20。"
+msgstr "æ¸¸æˆæ‰‹æŸ„按钮 20。"
#: doc/classes/@GlobalScope.xml
msgid "Gamepad button 21."
-msgstr "æ¸¸æˆæ‰‹æŸ„按钮21。"
+msgstr "æ¸¸æˆæ‰‹æŸ„按钮 21。"
#: doc/classes/@GlobalScope.xml
msgid "Gamepad button 22."
-msgstr "æ¸¸æˆæ‰‹æŸ„按钮22。"
+msgstr "æ¸¸æˆæ‰‹æŸ„按钮 22。"
#: doc/classes/@GlobalScope.xml
msgid ""
@@ -3627,35 +3629,37 @@ msgstr "任天堂控制器 Y 键。"
#: doc/classes/@GlobalScope.xml
msgid "Grip (side) buttons on a VR controller."
-msgstr "VRæŽ§åˆ¶å™¨ä¸Šçš„æ¡æŠŠï¼ˆä¾§é¢ï¼‰æŒ‰é’®ã€‚"
+msgstr "VR æŽ§åˆ¶å™¨ä¸Šçš„æ¡æŠŠï¼ˆä¾§é¢ï¼‰æŒ‰é’®ã€‚"
#: doc/classes/@GlobalScope.xml
msgid "Push down on the touchpad or main joystick on a VR controller."
-msgstr "VR控制器上的触摸æ¿/主摇æ†çš„å‘下键。"
+msgstr "VR 控制器上的触摸æ¿/主摇æ†çš„å‘下键。"
#: doc/classes/@GlobalScope.xml
msgid "Trigger on a VR controller."
-msgstr "VR控制器上的扳机键。"
+msgstr "VR 控制器上的扳机键。"
#: doc/classes/@GlobalScope.xml
msgid ""
"A button on the right Oculus Touch controller, X button on the left "
"controller (also when used in OpenVR)."
-msgstr "å³ä¾§Oculus Touch控制器的A按钮,左控制器的X按钮(需当使用OpenVR时)。"
+msgstr ""
+"Oculus Touch å³æŽ§åˆ¶å™¨çš„ A 按钮,左控制器的 X 按钮(需当使用 OpenVR 时)。"
#: doc/classes/@GlobalScope.xml
msgid ""
"B button on the right Oculus Touch controller, Y button on the left "
"controller (also when used in OpenVR)."
-msgstr "å³ä¾§Oculus Touch控制器的B按钮,左控制器的Y按钮(需当使用OpenVR时)。"
+msgstr ""
+"Oculus Touch å³æŽ§åˆ¶å™¨çš„ B 按钮,左控制器的 Y 按钮(需当使用 OpenVR 时)。"
#: doc/classes/@GlobalScope.xml
msgid "Menu button on either Oculus Touch controller."
-msgstr "ä»»æ„Oculus Touch控制器上的èœå•按钮。"
+msgstr "ä»»æ„ Oculus Touch 控制器上的èœå•按钮。"
#: doc/classes/@GlobalScope.xml
msgid "Menu button in OpenVR (Except when Oculus Touch controllers are used)."
-msgstr "OpenVR中的èœå•按钮(使用 Oculus Touch 控制器时除外)。"
+msgstr "OpenVR 中的èœå•按钮(使用 Oculus Touch 控制器时除外)。"
#: doc/classes/@GlobalScope.xml
msgid "Gamepad button Select."
@@ -3751,11 +3755,11 @@ msgstr "æ¸¸æˆæ‰‹æŸ„峿‘‡æ†åž‚直轴。"
#: doc/classes/@GlobalScope.xml
msgid "Generic gamepad axis 4."
-msgstr "é€šç”¨çš„æ¸¸æˆæ‰‹æŸ„è½´4。"
+msgstr "é€šç”¨çš„æ¸¸æˆæ‰‹æŸ„è½´ 4。"
#: doc/classes/@GlobalScope.xml
msgid "Generic gamepad axis 5."
-msgstr "é€šç”¨çš„æ¸¸æˆæ‰‹æŸ„è½´5。"
+msgstr "é€šç”¨çš„æ¸¸æˆæ‰‹æŸ„è½´ 5。"
#: doc/classes/@GlobalScope.xml
msgid "Gamepad left trigger analog axis."
@@ -3767,11 +3771,11 @@ msgstr "æ¸¸æˆæ‰‹æŸ„å³è§¦å‘模拟轴。"
#: doc/classes/@GlobalScope.xml
msgid "Generic gamepad axis 8."
-msgstr "é€šç”¨çš„æ¸¸æˆæ‰‹æŸ„è½´8。"
+msgstr "é€šç”¨çš„æ¸¸æˆæ‰‹æŸ„è½´ 8。"
#: doc/classes/@GlobalScope.xml
msgid "Generic gamepad axis 9."
-msgstr "é€šç”¨çš„æ¸¸æˆæ‰‹æŸ„è½´9。"
+msgstr "é€šç”¨çš„æ¸¸æˆæ‰‹æŸ„è½´ 9。"
#: doc/classes/@GlobalScope.xml
msgid "Represents the maximum number of joystick axes supported."
@@ -3787,23 +3791,23 @@ msgstr "æ¸¸æˆæ‰‹æŸ„å³ä¾§æ¨¡æ‹Ÿè§¦å‘器。"
#: doc/classes/@GlobalScope.xml
msgid "VR Controller analog trigger."
-msgstr "VR控制器模拟触å‘器。"
+msgstr "VR 控制器模拟触å‘器。"
#: doc/classes/@GlobalScope.xml
msgid "VR Controller analog grip (side buttons)."
-msgstr "VRæŽ§åˆ¶å™¨çš„æ¨¡æ‹Ÿæ¡æŠŠï¼ˆä¾§é¢æŒ‰é’®ï¼‰ã€‚"
+msgstr "VR æŽ§åˆ¶å™¨çš„æ¨¡æ‹Ÿæ¡æŠŠï¼ˆä¾§é¢æŒ‰é’®ï¼‰ã€‚"
#: doc/classes/@GlobalScope.xml
msgid ""
"OpenVR touchpad X axis (Joystick axis on Oculus Touch and Windows MR "
"controllers)."
-msgstr "OpenVR触摸æ¿X轴(Oculus Touchå’ŒWindows MR控制器的æ“纵æ†è½´ï¼‰ã€‚"
+msgstr "OpenVR è§¦æ‘¸æ¿ X 轴(Oculus Touch å’Œ Windows MR 控制器的æ“纵æ†è½´ï¼‰ã€‚"
#: doc/classes/@GlobalScope.xml
msgid ""
"OpenVR touchpad Y axis (Joystick axis on Oculus Touch and Windows MR "
"controllers)."
-msgstr "OpenVR触摸æ¿Y轴(Oculus Touchå’ŒWindows MR控制器的æ“纵æ†è½´ï¼‰ã€‚"
+msgstr "OpenVR è§¦æ‘¸æ¿ Y 轴(Oculus Touch å’Œ Windows MR 控制器的æ“纵æ†è½´ï¼‰ã€‚"
#: doc/classes/@GlobalScope.xml
msgid ""
@@ -4163,7 +4167,7 @@ msgstr ""
"通过æç¤ºä¸²[code]\"min,max\"[/code] 或[code]\"min,max,step\"[/code]æ¥æç¤ºä¸€ä¸ª"
"整数或浮点数属性应当è½åœ¨æŒ‡å®šèŒƒå›´å†…。æç¤ºä¸²å¯ä»¥é€‰æ‹©æ€§åœ°åŒ…å« "
"[code]\"or_greater\"[/code] 与/或 [code]\"or_lesser\"[/code] æ¥å…许手动输入的"
-"值超过或低于最大最å°å€¼ã€‚例如: [code]\"-360,360,1,or_greater,or_lesser\"[/"
+"值超过或低于最大最å°å€¼ã€‚例如:[code]\"-360,360,1,or_greater,or_lesser\"[/"
"code]。"
#: doc/classes/@GlobalScope.xml
@@ -4178,7 +4182,7 @@ msgstr ""
"æç¤ºä¸€ä¸ªæ•´æ•°æˆ–浮点数属性应当è½åœ¨é€šè¿‡æç¤ºå­—符串[code]\"min,max\"[/code] 或"
"[code]\"min,max,step\"[/code]æ¥æŒ‡å®šçš„范围内。æç¤ºå­—符串å¯ä»¥é€‰æ‹©æ€§åœ°åŒ…å« "
"[code]\"or_greater\"[/code] 与/或 [code]\"or_lesser\"[/code] æ¥å…许手动输入的"
-"值超过最大值或低于最å°å€¼ã€‚例如: [code]\"0.01,100,0.01,or_greater\"[/code]。"
+"值超过最大值或低于最å°å€¼ã€‚例如:[code]\"0.01,100,0.01,or_greater\"[/code]。"
#: doc/classes/@GlobalScope.xml
msgid ""
@@ -4237,25 +4241,37 @@ msgstr ""
msgid ""
"Hints that an integer property is a bitmask using the optionally named 2D "
"render layers."
-msgstr "æç¤ºä¸€ä¸ªæ•´æ•°å±žæ€§æ˜¯ä¸€ä¸ªæŽ©ç ï¼Œä½¿ç”¨ç€å…·å¤‡æˆ–ä¸å…·å¤‡å‘½åçš„2D渲染层。"
+msgstr "æç¤ºä¸€ä¸ªæ•´æ•°å±žæ€§æ˜¯ä¸€ä¸ªæŽ©ç ï¼Œä½¿ç”¨ç€å…·å或ä¸å…·åçš„ 2D 渲染层。"
#: doc/classes/@GlobalScope.xml
msgid ""
"Hints that an integer property is a bitmask using the optionally named 2D "
"physics layers."
-msgstr "æç¤ºä¸€ä¸ªæ•´æ•°å±žæ€§æ˜¯ä¸€ä¸ªæŽ©ç ï¼Œä½¿ç”¨ç€å…·å¤‡æˆ–ä¸å…·å¤‡å‘½åçš„2D物ç†å±‚。"
+msgstr "æç¤ºä¸€ä¸ªæ•´æ•°å±žæ€§æ˜¯ä¸€ä¸ªæŽ©ç ï¼Œä½¿ç”¨ç€å…·å或ä¸å…·åçš„ 2D 物ç†å±‚。"
+
+#: doc/classes/@GlobalScope.xml
+msgid ""
+"Hints that an integer property is a bitmask using the optionally named 2D "
+"navigation layers."
+msgstr "æç¤ºä¸€ä¸ªæ•´æ•°å±žæ€§æ˜¯ä¸€ä¸ªæŽ©ç ï¼Œä½¿ç”¨ç€å…·å或ä¸å…·åçš„ 2D 导航层。"
#: doc/classes/@GlobalScope.xml
msgid ""
"Hints that an integer property is a bitmask using the optionally named 3D "
"render layers."
-msgstr "æç¤ºä¸€ä¸ªæ•´æ•°å±žæ€§æ˜¯ä¸€ä¸ªæŽ©ç ï¼Œä½¿ç”¨ç€å…·å¤‡æˆ–ä¸å…·å¤‡å‘½åçš„3D渲染层。"
+msgstr "æç¤ºä¸€ä¸ªæ•´æ•°å±žæ€§æ˜¯ä¸€ä¸ªæŽ©ç ï¼Œä½¿ç”¨ç€å…·å或ä¸å…·åçš„ 3D 渲染层。"
#: doc/classes/@GlobalScope.xml
msgid ""
"Hints that an integer property is a bitmask using the optionally named 3D "
"physics layers."
-msgstr "æç¤ºä¸€ä¸ªæ•´æ•°å±žæ€§æ˜¯ä¸€ä¸ªæŽ©ç ï¼Œä½¿ç”¨ç€å…·å¤‡æˆ–ä¸å…·å¤‡å‘½åçš„3D物ç†å±‚。"
+msgstr "æç¤ºä¸€ä¸ªæ•´æ•°å±žæ€§æ˜¯ä¸€ä¸ªæŽ©ç ï¼Œä½¿ç”¨ç€å…·å或ä¸å…·åçš„ 3D 物ç†å±‚。"
+
+#: doc/classes/@GlobalScope.xml
+msgid ""
+"Hints that an integer property is a bitmask using the optionally named 3D "
+"navigation layers."
+msgstr "æç¤ºä¸€ä¸ªæ•´æ•°å±žæ€§æ˜¯ä¸€ä¸ªæŽ©ç ï¼Œä½¿ç”¨ç€å…·å或ä¸å…·åçš„ 3D 导航层。"
#: doc/classes/@GlobalScope.xml
msgid ""
@@ -4899,7 +4915,7 @@ msgstr ""
msgid ""
"Registers a [LineEdit] in the dialog. When the enter key is pressed, the "
"dialog will be accepted."
-msgstr "åœ¨å¯¹è¯æ¡†ä¸­æ³¨å†Œ [LineEdit]。 å½“æŒ‰ä¸‹å›žè½¦é”®æ—¶ï¼Œå¯¹è¯æ¡†å°†è¢«æŽ¥å—。"
+msgstr "åœ¨å¯¹è¯æ¡†ä¸­æ³¨å†Œ [LineEdit]ã€‚å½“æŒ‰ä¸‹å›žè½¦é”®æ—¶ï¼Œå¯¹è¯æ¡†å°†è¢«æŽ¥å—。"
#: doc/classes/AcceptDialog.xml
msgid ""
@@ -4931,13 +4947,13 @@ msgid ""
"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 ""
-"如果为 [code]true[/code],按下OKæŒ‰é’®æ—¶å¯¹è¯æ¡†å°†éšè—。如果è¦åœ¨æ”¶åˆ° [signal "
+"如果为 [code]true[/code]ï¼ŒæŒ‰ä¸‹ç¡®å®šæŒ‰é’®æ—¶å¯¹è¯æ¡†å°†éšè—。如果è¦åœ¨æ”¶åˆ° [signal "
"confirmed] ä¿¡å·æ—¶æ‰§è¡Œç±»ä¼¼è¾“入验è¯çš„æ“ä½œï¼Œåˆ™å¯ä»¥å°†å…¶è®¾ç½®ä¸º [code]false[/"
"code],然åŽåœ¨è‡ªå·±çš„逻辑中处ç†å¯¹è¯æ¡†çš„éšè—。\n"
"[b]注æ„:[/b]从此类派生的æŸäº›èŠ‚ç‚¹å¯ä»¥å…·æœ‰ä¸åŒçš„默认值,并且å¯èƒ½æœ‰è‡ªå·±çš„内置逻"
-"辑会覆盖此设置。 例如,[FileDialog] 默认其为 [code]false[/code],并在按下OK时"
-"实现了自己的输入验è¯ä»£ç ï¼Œå¦‚果输入有效,最终将éšè—å¯¹è¯æ¡†ã€‚因此,ä¸èƒ½åœ¨ "
-"[FileDialog] 中使用此属性æ¥ç¦æ­¢åœ¨æŒ‰OKæ—¶éšè—å¯¹è¯æ¡†ã€‚"
+"辑会覆盖此设置。例如,[FileDialog] 默认其为 [code]false[/code],并在按下确定"
+"时实现了自己的输入验è¯ä»£ç ï¼Œå¦‚果输入有效,最终将éšè—å¯¹è¯æ¡†ã€‚因此,ä¸èƒ½åœ¨ "
+"[FileDialog] 中使用此属性æ¥ç¦æ­¢åœ¨æŒ‰ç¡®å®šæ—¶éšè—å¯¹è¯æ¡†ã€‚"
#: doc/classes/AcceptDialog.xml
msgid "The text displayed by the dialog."
@@ -4945,15 +4961,15 @@ msgstr "å¯¹è¯æ¡†æ˜¾ç¤ºçš„æ–‡æœ¬ã€‚"
#: doc/classes/AcceptDialog.xml
msgid "Emitted when the dialog is accepted, i.e. the OK button is pressed."
-msgstr "接å—å¯¹è¯æ¡†æ—¶ï¼Œå³æŒ‰ä¸‹OK按钮时å‘出。"
+msgstr "接å—å¯¹è¯æ¡†æ—¶ï¼Œå³æŒ‰ä¸‹ç¡®å®šæŒ‰é’®æ—¶å‘出。"
#: doc/classes/AcceptDialog.xml
msgid "Emitted when a custom button is pressed. See [method add_button]."
-msgstr "按下自定义按钮时å‘出。 å‚阅[method add_button]。"
+msgstr "按下自定义按钮时å‘å‡ºã€‚è§ [method add_button]。"
#: doc/classes/AESContext.xml
msgid "Interface to low level AES encryption features."
-msgstr "低级AES加密功能接å£ã€‚"
+msgstr "底层 AES 加密功能接å£ã€‚"
#: doc/classes/AESContext.xml
msgid ""
@@ -5000,9 +5016,9 @@ msgstr ""
"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"
+" var key = \"My secret key!!!\" # 密钥必须是 16 或 32 字节。\n"
+" var data = \"My secret text!!\" # æ•°æ®å¤§å°å¿…须是 16 å­—èŠ‚çš„å€æ•°ï¼Œéœ€è¦æ—¶æ·»"
+"加补白。\n"
" # ECB 加密\n"
" aes.start(AESContext.MODE_ECB_ENCRYPT, key.to_utf8())\n"
" var encrypted = aes.update(data.to_utf8())\n"
@@ -5014,7 +5030,7 @@ msgstr ""
" # ECB 校验\n"
" assert(decrypted == data.to_utf8())\n"
"\n"
-" var iv = \"My secret iv!!!!\" # IV must be of exactly 16 bytes.\n"
+" var iv = \"My secret iv!!!!\" # IV 必须是 16 字节。\n"
" # CBC 加密\n"
" aes.start(AESContext.MODE_CBC_ENCRYPT, key.to_utf8(), iv.to_utf8())\n"
" encrypted = aes.update(data.to_utf8())\n"
@@ -5029,7 +5045,7 @@ msgstr ""
#: doc/classes/AESContext.xml
msgid "Close this AES context so it can be started again. See [method start]."
-msgstr "关闭此AES上下文,以便å¯ä»¥å†æ¬¡å¯åŠ¨å®ƒã€‚ å‚阅[method start]。"
+msgstr "关闭此 AES 上下文,以便å¯ä»¥å†æ¬¡å¯åŠ¨å®ƒã€‚è§ [method start]。"
#: doc/classes/AESContext.xml
msgid ""
@@ -5050,9 +5066,9 @@ msgid ""
"(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 ""
-"以给定的[code]模å¼[/code]å¯åЍAES上下文。必须始终æä¾›16或32字节的[code]key[/"
-"code],而仅当[code]mode[/code]ä¸ºä»¥ä¸‹ä¸¤ç§æƒ…况时æ‰éœ€è¦æ­£å¥½ä¸º16字节的[code]iv[/"
-"code](åˆå§‹åŒ–å‘é‡ï¼‰ [constant MODE_CBC_ENCRYPT]或[constant "
+"以给定的 [code]mode[/code] å¯åЍ AES 上下文。必须始终æä¾› 16 或 32 字节的 "
+"[code]key[/code],而仅当 [code]mode[/code] ä¸ºä»¥ä¸‹ä¸¤ç§æƒ…况时æ‰éœ€è¦æ­£å¥½ä¸º 16 å­—"
+"节的 [code]iv[/code](åˆå§‹åŒ–å‘é‡ï¼‰[constant MODE_CBC_ENCRYPT] 或 [constant "
"MODE_CBC_DECRYPT]。"
#: doc/classes/AESContext.xml
@@ -5064,24 +5080,25 @@ msgid ""
"some padding if needed."
msgstr ""
"è¿è¡Œæ­¤ AES 上下文所需的æ“作。将返回包å«åŠ å¯†ï¼ˆæˆ–è§£å¯†ï¼‰ç»™å®š [code]src[/code] 结"
-"果的[PoolByteArray] 。有关æ“作模å¼ï¼Œè¯·å‚阅[method start]。\n"
-"[b]注æ„:[/b][code]src[/code]的大å°å¿…须是16å€çš„倿•°ã€‚如果需è¦ï¼Œåº”用一些填充。"
+"果的 [PoolByteArray] 。有关æ“作模å¼ï¼Œè¯·å‚阅 [method start]。\n"
+"[b]注æ„:[/b][code]src[/code] 的大å°å¿…须是 16 å€çš„倿•°ã€‚如果需è¦ï¼Œåº”用一些填"
+"充。"
#: doc/classes/AESContext.xml
msgid "AES electronic codebook encryption mode."
-msgstr "AES电å­å¯†ç ç°¿åŠ å¯†æ¨¡å¼ã€‚"
+msgstr "AES 电å­å¯†ç ç°¿åŠ å¯†æ¨¡å¼ã€‚"
#: doc/classes/AESContext.xml
msgid "AES electronic codebook decryption mode."
-msgstr "AES电å­å¯†ç ç°¿è§£å¯†æ¨¡å¼ã€‚"
+msgstr "AES 电å­å¯†ç ç°¿è§£å¯†æ¨¡å¼ã€‚"
#: doc/classes/AESContext.xml
msgid "AES cipher blocker chaining encryption mode."
-msgstr "AES密ç å°é”器链å¼åŠ å¯†æ¨¡å¼ã€‚"
+msgstr "AES 密ç å°é”器链å¼åŠ å¯†æ¨¡å¼ã€‚"
#: doc/classes/AESContext.xml
msgid "AES cipher blocker chaining decryption mode."
-msgstr "AES密ç å°é”器链å¼è§£å¯†æ¨¡å¼ã€‚"
+msgstr "AES 密ç å°é”器链å¼è§£å¯†æ¨¡å¼ã€‚"
#: doc/classes/AESContext.xml
msgid "Maximum value for the mode enum."
@@ -5137,8 +5154,8 @@ msgid ""
"[code]true[/code], the animation will be played in reverse."
msgstr ""
"播放由 [code]anim[/code] 指定的播放。如果没有指定 [code]anim[/code] 傿•°ï¼Œåˆ™"
-"播放当å‰åŠ¨ç”»ã€‚ 如果 [code]backwards[/code] 为 [code]true[/code] ï¼Œåˆ™å€’åºæ’­æ”¾"
-"动画。"
+"播放当å‰åŠ¨ç”»ã€‚å¦‚æžœ [code]backwards[/code] 为 [code]true[/code] ï¼Œåˆ™å€’åºæ’­æ”¾åЍ"
+"画。"
#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml
msgid "Stops the current animation (does not reset the frame counter)."
@@ -5188,7 +5205,7 @@ msgstr "纹ç†çš„绘图åç§»é‡ã€‚"
#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml
msgid "If [code]true[/code], the [member animation] is currently playing."
-msgstr "如果 [code]true[/code]ï¼Œåˆ™è¡¨ç¤ºå½“å‰æ­£åœ¨æ’­æ”¾ [member animation]。"
+msgstr "如果为 [code]true[/code]ï¼Œåˆ™è¡¨ç¤ºå½“å‰æ­£åœ¨æ’­æ”¾ [member animation]。"
#: doc/classes/AnimatedSprite.xml
msgid "The animation speed is multiplied by this value."
@@ -5205,7 +5222,7 @@ msgstr ""
#: doc/classes/AnimatedSprite.xml doc/classes/AnimatedSprite3D.xml
msgid "Emitted when [member frame] changed."
-msgstr "当[member frame]更改时å‘出。"
+msgstr "当 [member frame] 更改时å‘出。"
#: doc/classes/AnimatedSprite3D.xml
msgid ""
@@ -5267,17 +5284,17 @@ msgid ""
"[b]Note:[/b] AnimatedTexture doesn't support using [AtlasTexture]s. Each "
"frame needs to be a separate [Texture]."
msgstr ""
-"[AnimatedTexture]是一ç§èµ„æºæ ¼å¼ï¼Œç”¨äºŽåŸºäºŽå¸§çš„动画,其中多个纹ç†è‡ªåŠ¨é“¾æŽ¥èµ·æ¥ï¼Œ"
-"æ¯å¸§æœ‰é¢„定义延迟。与[AnimationPlayer]或[AnimatedSprite]ä¸åŒï¼Œå®ƒä¸æ˜¯ä¸€ä¸ª"
-"[Node],其优点是å¯åœ¨ä»»ä½•å¯ä»¥ä½¿ç”¨[Texture]资æºçš„地方使用,例如在[TileSet]"
-"中。\n"
-"动画的播放由[member fps]å±žæ€§ä»¥åŠæ¯ä¸€å¸§çš„å¯é€‰å»¶è¿ŸæŽ§åˆ¶ï¼Œå‚阅[method "
-"set_frame_delay]。动画是循环播放的,也就是说,在播放完最åŽä¸€å¸§åŽï¼Œå®ƒå°†è‡ªåŠ¨ä»Ž"
-"第0叧釿–°å¼€å§‹ã€‚\n"
-"[AnimatedTexture]ç›®å‰è¦æ±‚所有帧的纹ç†å…·æœ‰ç›¸åŒçš„尺寸,å¦åˆ™è¾ƒå¤§çš„纹ç†ä¼šè¢«è£å‰ªï¼Œ"
-"与最å°çš„纹ç†ç›¸åŒ¹é…。\n"
-"[b]注æ„:[/b]AnimatedTexture䏿”¯æŒä½¿ç”¨[AtlasTexture]。æ¯ä¸€å¸§éƒ½éœ€è¦æ˜¯ä¸€ä¸ªå•独"
-"的[Texture]。"
+"[AnimatedTexture] 是一ç§èµ„æºæ ¼å¼ï¼Œç”¨äºŽåŸºäºŽå¸§çš„动画,其中多个纹ç†è‡ªåŠ¨é“¾æŽ¥èµ·"
+"æ¥ï¼Œæ¯å¸§æœ‰é¢„定义延迟。与 [AnimationPlayer] 或 [AnimatedSprite] ä¸åŒï¼Œå®ƒä¸æ˜¯ä¸€"
+"个 [Node],其优点是å¯åœ¨ä»»ä½•å¯ä»¥ä½¿ç”¨ [Texture] 资æºçš„地方使用,例如在 "
+"[TileSet] 中。\n"
+"动画的播放由 [member fps] å±žæ€§ä»¥åŠæ¯ä¸€å¸§çš„å¯é€‰å»¶è¿ŸæŽ§åˆ¶ï¼ˆè§ [method "
+"set_frame_delay])。动画是循环播放的,也就是说,在播放完最åŽä¸€å¸§åŽï¼Œå®ƒå°†è‡ªåЍ"
+"从第 0 叧釿–°å¼€å§‹ã€‚\n"
+"[AnimatedTexture] ç›®å‰è¦æ±‚所有帧的纹ç†å…·æœ‰ç›¸åŒçš„尺寸,å¦åˆ™è¾ƒå¤§çš„纹ç†ä¼šè¢«è£"
+"剪,与最å°çš„纹ç†ç›¸åŒ¹é…。\n"
+"[b]注æ„:[/b]AnimatedTexture 䏿”¯æŒä½¿ç”¨ [AtlasTexture]。æ¯ä¸€å¸§éƒ½éœ€è¦æ˜¯ä¸€ä¸ªå•"
+"独的 [Texture]。"
#: doc/classes/AnimatedTexture.xml
msgid "Returns the given frame's delay value."
@@ -5285,7 +5302,7 @@ msgstr "返回给定帧的延迟值。"
#: doc/classes/AnimatedTexture.xml
msgid "Returns the given frame's [Texture]."
-msgstr "返回给定帧的[Texture]。"
+msgstr "返回给定帧的 [Texture]。"
#: doc/classes/AnimatedTexture.xml
msgid ""
@@ -5303,16 +5320,16 @@ msgid ""
"Total duration: 2.7 s\n"
"[/codeblock]"
msgstr ""
-"在此帧和下一帧之间设置é¢å¤–的延迟(以秒为内),该延迟将添加到 [member fps] 定"
-"义的时间间隔中。默认情况下,框架没有延迟定义。如果定义了延迟值,则此帧和下一"
-"帧之间的最终时间间隔将是 [code]1.0 / fps + delay[/code] 。\n"
-"例如,对于具有 3 帧ã€2 个 FPS å’Œ 1.2 第二帧上的帧延迟的动画,由此产生的回放将"
+"设置这一帧和下一帧之间的é¢å¤–延迟(å•ä½ä¸ºç§’),该延迟将添加到 [member fps] 定"
+"义的时间间隔中。默认情况下所有帧都没有定义延迟。如果定义了延迟值,则这一帧和"
+"下一帧之间的最终时间间隔将是 [code]1.0 / fps + delay[/code] 。\n"
+"例如,å‡è®¾æŸä¸ªåŠ¨ç”»ä¸€å…± 3 帧,FPS 为 2,第二帧上的延迟为 1.2,那么播放结果就会"
"是:\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"
+"第 0 帧:0.5 秒(1 / fps)\n"
+"第 1 帧:1.7 秒(1 / fps + 1.2)\n"
+"第 2 帧:0.5 秒(1 / fps)\n"
+"总时长:2.7 秒\n"
"[/codeblock]"
#: doc/classes/AnimatedTexture.xml
@@ -5343,11 +5360,12 @@ msgid ""
"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 ""
-"动画速度,以æ¯ç§’帧数为å•ä½ã€‚此值定义动画两个帧之间的默认时间间隔,并因此基于 "
-"[member frames] 属性定义动画循环的总体æŒç»­æ—¶é—´ã€‚值为 0 表示æ¯ç§’没有预定义的帧"
-"æ•°ï¼ŒåŠ¨ç”»å°†æ ¹æ®æ¯ä¸ªå¸§çš„帧延迟播放(请å‚阅 [method set_frame_delay])。\n"
-"例如,具有 8 帧,无帧延迟且 [code]fps[/code] 值为 2 的动画将è¿è¡Œ 4 秒,æ¯å¸§æŒ"
-"续 0.5 秒。"
+"动画速度,以æ¯ç§’帧数为å•ä½ã€‚这个值定义的是该动画中两个帧之间的默认时间间隔,"
+"å› æ­¤å¯ä»¥æ ¹æ® [member frames] 属性得到动画循环的总体æŒç»­æ—¶é—´ã€‚值为 0 表示没有"
+"定义æ¯ç§’帧数,该动画将根æ®å„ä¸ªå¸§çš„å¸§å»¶è¿Ÿè¿›è¡Œæ’­æ”¾ï¼ˆè§ [method "
+"set_frame_delay])。\n"
+"例如,å‡è®¾æŸä¸ªåŠ¨ç”»ä¸€å…± 8 帧,无帧延迟,则 [code]fps[/code] 值为 2 时动画将è¿"
+"行 4 秒,æ¯å¸§æŒç»­ 0.5 秒。"
#: doc/classes/AnimatedTexture.xml
msgid ""
@@ -5356,8 +5374,8 @@ msgid ""
"for the animation to take new frames into account. The maximum number of "
"frames is [constant MAX_FRAMES]."
msgstr ""
-"动画中è¦ä½¿ç”¨çš„帧数。虽然您å¯ä»¥ä½¿ç”¨[method set_frame_texture]独立创建帧,但是"
-"您需è¦ä¸ºåŠ¨ç”»è®¾ç½®æ­¤å€¼ä»¥è€ƒè™‘æ–°å¸§ã€‚æœ€å¤§å¸§æ•°ä¸º[constant MAX_FRAMES]。"
+"动画中è¦ä½¿ç”¨çš„帧数。虽然您å¯ä»¥ä½¿ç”¨ [method set_frame_texture] 独立创建帧,但"
+"是您需è¦ä¸ºåŠ¨ç”»è®¾ç½®æ­¤å€¼ä»¥è€ƒè™‘æ–°å¸§ã€‚æœ€å¤§å¸§æ•°ä¸º [constant MAX_FRAMES]。"
#: doc/classes/AnimatedTexture.xml
msgid ""
@@ -5365,8 +5383,8 @@ msgid ""
"back to the first frame after reaching the end. Note that reaching the end "
"will not set [member pause] to [code]true[/code]."
msgstr ""
-"如果 [code]true[/code]ï¼Œåˆ™åŠ¨ç”»å°†åªæ’­æ”¾ä¸€æ¬¡ï¼Œå¹¶ä¸”在到达结尾åŽå°†ä¸ä¼šå¾ªçŽ¯å›žåˆ°ç¬¬"
-"一帧。请注æ„,到达终点ä¸ä¼šå°† [member pause] 设置为 [code]true[/code]。"
+"如果为 [code]true[/code]ï¼Œåˆ™åŠ¨ç”»å°†åªæ’­æ”¾ä¸€æ¬¡ï¼Œå¹¶ä¸”在到达结尾åŽå°†ä¸ä¼šå¾ªçŽ¯å›žåˆ°"
+"第一帧。请注æ„,到达终点ä¸ä¼šå°† [member pause] 设置为 [code]true[/code]。"
#: doc/classes/AnimatedTexture.xml
msgid ""
@@ -5374,16 +5392,17 @@ msgid ""
"at [member current_frame]). The animation will continue from where it was "
"paused when changing this property to [code]false[/code]."
msgstr ""
-"如果[code]true[/code],则动画将暂åœåœ¨å½“å‰ä½ç½®ï¼ˆå³[member current_frame])。将"
-"此属性更改为 [code]false[/code] 时,动画将从暂åœå¤„继续播放。"
+"如果为 [code]true[/code],则动画将暂åœåœ¨å½“å‰ä½ç½®ï¼ˆå³ [member "
+"current_frame])。将此属性更改为 [code]false[/code] 时,动画将从暂åœå¤„ç»§ç»­æ’­"
+"放。"
#: doc/classes/AnimatedTexture.xml
msgid ""
"The maximum number of frames supported by [AnimatedTexture]. If you need "
"more frames in your animation, use [AnimationPlayer] or [AnimatedSprite]."
msgstr ""
-"[AnimatedTexture]支æŒçš„æœ€å¤§å¸§æ•°ã€‚å¦‚æžœåŠ¨ç”»ä¸­éœ€è¦æ›´å¤šå¸§ï¼Œè¯·ä½¿ç”¨"
-"[AnimationPlayer]或[AnimatedSprite]。"
+"[AnimatedTexture] 支æŒçš„æœ€å¤§å¸§æ•°ã€‚å¦‚æžœåŠ¨ç”»ä¸­éœ€è¦æ›´å¤šå¸§ï¼Œè¯·ä½¿ç”¨ "
+"[AnimationPlayer] 或 [AnimatedSprite]。"
#: doc/classes/Animation.xml
msgid "Contains data used to animate everything in the engine."
@@ -5522,32 +5541,32 @@ msgid ""
"[code]stream[/code]. The [code]track_idx[/code] must be the index of an "
"Audio Track."
msgstr ""
-"å°† [code]key_idx[/code] 所标识的键æµè®¾ç½®ä¸º[code]stream[/code]值。"
-"[code]track_idx[/code]必须是一个音频轨é“的索引。"
+"å°† [code]key_idx[/code] 所标识的键æµè®¾ç½®ä¸º [code]stream[/code] 值。"
+"[code]track_idx[/code] 必须是音频轨é“的索引。"
#: doc/classes/Animation.xml
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 ""
-"返回由 [code]key_idx[/code] è¯†åˆ«çš„é”®çš„è¾“å…¥å¥æŸ„, [code]track_idx[/code] å¿…é¡»"
-"是è´å¡žå°”轨é“的索引。"
+"返回由 [code]key_idx[/code] è¯†åˆ«çš„é”®çš„è¾“å…¥å¥æŸ„,[code]track_idx[/code] 必须是"
+"è´å¡žå°”轨é“的索引。"
#: doc/classes/Animation.xml
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 ""
-"返回由 [code]key_idx[/code] è¯†åˆ«çš„é”®çš„è¾“å‡ºå¥æŸ„, [code]track_idx[/code] å¿…é¡»"
-"是è´å¡žå°”轨é“的索引。"
+"返回由 [code]key_idx[/code] è¯†åˆ«çš„é”®çš„è¾“å‡ºå¥æŸ„,[code]track_idx[/code] 必须是"
+"è´å¡žå°”轨é“的索引。"
#: doc/classes/Animation.xml
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 ""
-"返回由 [code]key_idx[/code] 识别的键的值, [code]track_idx[/code] 必须是è´å¡ž"
-"尔轨é“的索引。"
+"返回由 [code]key_idx[/code] 识别的键的值,[code]track_idx[/code] 必须是è´å¡žå°”"
+"轨é“的索引。"
#: doc/classes/Animation.xml
msgid ""
@@ -5567,7 +5586,7 @@ 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 ""
-"返回给定 [code]time[/code] 处的æ’值(以秒为å•ä½ï¼‰ã€‚ [code]track_idx[/code] å¿…"
+"返回给定 [code]time[/code] 处的æ’值(以秒为å•ä½ï¼‰ã€‚[code]track_idx[/code] å¿…"
"须是è´å¡žå°”轨é“的索引。"
#: doc/classes/Animation.xml
@@ -5604,13 +5623,13 @@ msgstr "清除动画(清除所有轨é“å¹¶é‡ç½®æ‰€æœ‰ï¼‰ã€‚"
msgid ""
"Adds a new track that is a copy of the given track from [code]to_animation[/"
"code]."
-msgstr "从[code]to_animation[/code]中添加一个新的轨é“,它是给定轨é“的副本。"
+msgstr "从 [code]to_animation[/code] 中添加一个新的轨é“,它是给定轨é“的副本。"
#: doc/classes/Animation.xml
msgid ""
"Returns the index of the specified track. If the track is not found, return "
"-1."
-msgstr "返回指定轨迹的索引。如果没有找到,返回-1。"
+msgstr "返回指定轨迹的索引。如果没有找到,返回 -1。"
#: doc/classes/Animation.xml
msgid "Returns the amount of tracks in the animation."
@@ -5620,7 +5639,7 @@ msgstr "返回动画中的曲目é‡ã€‚"
msgid ""
"Returns all the key indices of a method track, given a position and delta "
"time."
-msgstr "返回给定ä½ç½®å’Œdelta时间的方法轨迹的所有关键指数。"
+msgstr "返回给定ä½ç½®å’Œ delta 时间的方法轨迹的所有关键指数。"
#: doc/classes/Animation.xml
msgid "Returns the method name of a method track."
@@ -5769,11 +5788,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] 或[code]\"character/mesh:"
-"transform/local\"[/code] 。"
+"设置轨é“的路径。路径必须是指å‘场景树节点的有效路径,必须从将è¦å®žçŽ°åŠ¨ç”»çš„èŠ‚ç‚¹"
+"的父节点开始指定。控制属性或骨骼的轨é“必须在路径åŽé¢åŠ ä¸Šå®ƒä»¬çš„å字,用 "
+"[code]\":\"[/code] 分隔。\n"
+"例如,[code]\"character/skeleton:ankle\"[/code] 或 [code]\"character/mesh:"
+"transform/local\"[/code]。"
#: doc/classes/Animation.xml
msgid ""
@@ -6084,9 +6103,9 @@ msgid ""
"[AnimationNodeBlendSpace1D], [AnimationNodeBlendSpace2D], "
"[AnimationNodeStateMachine], and [AnimationNodeBlendTree]."
msgstr ""
-"由继承自该类且内部有树的节点å‘出,当其一个节点å‘生å˜åŒ–时。å‘出此信å·çš„节点有"
+"由继承自该类且内部有树的节点å‘出,当其一个节点å‘生å˜åŒ–时。å‘出此信å·çš„节点有 "
"[AnimationNodeBlendSpace1D]ã€[AnimationNodeBlendSpace2D]ã€"
-"[AnimationNodeStateMachine]和[AnimationNodeBlendTree]。"
+"[AnimationNodeStateMachine] 和 [AnimationNodeBlendTree]。"
#: doc/classes/AnimationNode.xml
msgid "Do not use filtering."
@@ -6113,8 +6132,8 @@ 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 ""
-"添加到 [AnimationNodeBlendTree] 的资æºã€‚æ ¹æ®[code][0.0,1.0][/code]范围内的é‡"
-"值加法混åˆä¸¤ä¸ªåŠ¨ç”»ã€‚"
+"添加到 [AnimationNodeBlendTree] 的资æºã€‚æ ¹æ® [code][0.0,1.0][/code] 范围内的"
+"é‡å€¼åŠ æ³•æ··åˆä¸¤ä¸ªåŠ¨ç”»ã€‚"
#: doc/classes/AnimationNodeAdd2.xml doc/classes/AnimationNodeAdd3.xml
#: doc/classes/AnimationNodeBlend2.xml doc/classes/AnimationNodeBlend3.xml
@@ -6123,8 +6142,9 @@ msgid ""
"code] when calling [method AnimationNode.blend_input], forcing the blended "
"animations to update every frame."
msgstr ""
-"如果[code]true[/code],在调用[method AnimationNode.blend_input]时,将"
-"[code]optimization[/code] to[code]false[/code],强制混åˆåŽçš„动画æ¯ä¸€å¸§æ›´æ–°ã€‚"
+"如果为 [code]true[/code],在调用 [method AnimationNode.blend_input] 时,将 "
+"[code]optimization[/code] 设置为 [code]false[/code],强制混åˆåŽçš„动画æ¯ä¸€å¸§æ›´"
+"新。"
#: doc/classes/AnimationNodeAdd3.xml
msgid ""
@@ -6205,7 +6225,7 @@ msgid ""
"Animation to use as an output. It is one of the animations provided by "
"[member AnimationTree.anim_player]."
msgstr ""
-"作为输出使用的动画。它是[member AnimationTree.anim_player]æä¾›çš„动画之一。"
+"作为输出使用的动画。它是 [member AnimationTree.anim_player] æä¾›çš„动画之一。"
#: doc/classes/AnimationNodeBlend2.xml
msgid "Blends two animations linearly inside of an [AnimationNodeBlendTree]."
@@ -6249,8 +6269,8 @@ msgid ""
"Blends linearly between two of any number of [AnimationNode] of any type "
"placed on a virtual axis."
msgstr ""
-"åœ¨è™šæ‹Ÿè½´ä¸Šæ”¾ç½®çš„ä»»æ„æ•°é‡çš„[AnimationNode]的任æ„类型的两个[AnimationNode]之间"
-"线性混åˆã€‚"
+"åœ¨è™šæ‹Ÿè½´ä¸Šæ”¾ç½®çš„ä»»æ„æ•°é‡çš„ [AnimationNode] 的任æ„类型的两个 [AnimationNode] "
+"之间线性混åˆã€‚"
#: doc/classes/AnimationNodeBlendSpace1D.xml
msgid ""
@@ -6288,42 +6308,42 @@ msgstr "返回混åˆè½´ä¸Šçš„点的数é‡ã€‚"
msgid ""
"Returns the [AnimationNode] referenced by the point at index [code]point[/"
"code]."
-msgstr "返回索引[code]point[/code]处的点所引用的[AnimationNode]。"
+msgstr "返回索引 [code]point[/code] 处的点所引用的 [AnimationNode]。"
#: doc/classes/AnimationNodeBlendSpace1D.xml
#: doc/classes/AnimationNodeBlendSpace2D.xml
msgid "Returns the position of the point at index [code]point[/code]."
-msgstr "返回索引[code]point[/code]处的点的ä½ç½®ã€‚"
+msgstr "返回索引 [code]point[/code] 处的点的ä½ç½®ã€‚"
#: doc/classes/AnimationNodeBlendSpace1D.xml
msgid "Removes the point at index [code]point[/code] from the blend axis."
-msgstr "将索引[code]point[/code]处的点从混åˆè½´ä¸Šåˆ é™¤ã€‚"
+msgstr "将索引 [code]point[/code] 处的点从混åˆè½´ä¸Šåˆ é™¤ã€‚"
#: doc/classes/AnimationNodeBlendSpace1D.xml
#: doc/classes/AnimationNodeBlendSpace2D.xml
msgid ""
"Changes the [AnimationNode] referenced by the point at index [code]point[/"
"code]."
-msgstr "改å˜ç´¢å¼•[code]point[/code]处的点所引用的[AnimationNode]。"
+msgstr "改å˜ç´¢å¼• [code]point[/code] 处的点所引用的 [AnimationNode]。"
#: doc/classes/AnimationNodeBlendSpace1D.xml
#: doc/classes/AnimationNodeBlendSpace2D.xml
msgid ""
"Updates the position of the point at index [code]point[/code] on the blend "
"axis."
-msgstr "æ›´æ–°æ··åˆè½´ä¸Šç´¢å¼•[code]point[/code]处的点的ä½ç½®ã€‚"
+msgstr "æ›´æ–°æ··åˆè½´ä¸Šç´¢å¼• [code]point[/code] 处的点的ä½ç½®ã€‚"
#: doc/classes/AnimationNodeBlendSpace1D.xml
msgid ""
"The blend space's axis's upper limit for the points' position. See [method "
"add_blend_point]."
-msgstr "æ··åˆç©ºé—´çš„轴的点的ä½ç½®ä¸Šé™ã€‚请å‚阅 [method add_blend_point]。"
+msgstr "æ··åˆç©ºé—´çš„轴的点的ä½ç½®ä¸Šé™ã€‚è§ [method add_blend_point]。"
#: doc/classes/AnimationNodeBlendSpace1D.xml
msgid ""
"The blend space's axis's lower limit for the points' position. See [method "
"add_blend_point]."
-msgstr "æ··åˆç©ºé—´çš„轴的点的ä½ç½®ä¸‹é™ã€‚请å‚阅 [method add_blend_point]。"
+msgstr "æ··åˆç©ºé—´çš„轴的点的ä½ç½®ä¸‹é™ã€‚è§ [method add_blend_point]。"
#: doc/classes/AnimationNodeBlendSpace1D.xml
msgid "Position increment to snap to when moving a point on the axis."
@@ -6337,7 +6357,7 @@ msgstr "æ··åˆç©ºé—´è™šæ‹Ÿè½´çš„æ ‡ç­¾ã€‚"
msgid ""
"Blends linearly between three [AnimationNode] of any type placed in a 2D "
"space."
-msgstr "在二维空间中放置的三个任æ„类型的[AnimationNode]之间线性èžåˆã€‚"
+msgstr "在 2D 空间中放置的三个任æ„类型的 [AnimationNode] 之间线性èžåˆã€‚"
#: doc/classes/AnimationNodeBlendSpace2D.xml
msgid ""
@@ -6388,7 +6408,7 @@ msgstr "返回混åˆç©ºé—´ä¸­çš„点的数é‡ã€‚"
msgid ""
"Returns the [AnimationRootNode] referenced by the point at index "
"[code]point[/code]."
-msgstr "返回索引[code]point[/code]处的点所引用的[AnimationRootNode]。"
+msgstr "返回索引 [code]point[/code] 处的点所引用的 [AnimationRootNode]。"
#: doc/classes/AnimationNodeBlendSpace2D.xml
msgid "Returns the number of triangles in the blend space."
@@ -6399,16 +6419,17 @@ msgid ""
"Returns the position of the point at index [code]point[/code] in the "
"triangle of index [code]triangle[/code]."
msgstr ""
-"返回索引[code]point[/code]处的点在索引[code]triangle[/code]的三角形中的ä½ç½®ã€‚"
+"返回索引 [code]point[/code] 处的点在索引 [code]triangle[/code] 的三角形中的ä½"
+"置。"
#: doc/classes/AnimationNodeBlendSpace2D.xml
msgid "Removes the point at index [code]point[/code] from the blend space."
-msgstr "从混åˆç©ºé—´ä¸­åˆ é™¤ç´¢å¼•[code]point[/code]处的点。"
+msgstr "从混åˆç©ºé—´ä¸­åˆ é™¤ç´¢å¼• [code]point[/code] 处的点。"
#: doc/classes/AnimationNodeBlendSpace2D.xml
msgid ""
"Removes the triangle at index [code]triangle[/code] from the blend space."
-msgstr "从混åˆç©ºé—´ä¸­åˆ é™¤ç´¢å¼•[code]triangle[/code]处的三角形。"
+msgstr "从混åˆç©ºé—´ä¸­åˆ é™¤ç´¢å¼• [code]triangle[/code] 处的三角形。"
#: doc/classes/AnimationNodeBlendSpace2D.xml
msgid ""
@@ -6416,7 +6437,7 @@ msgid ""
"mesh updates every time you add or remove points with [method "
"add_blend_point] and [method remove_blend_point]."
msgstr ""
-"如果 [code]true[/code],混åˆç©ºé—´ä¼šè‡ªåŠ¨è¿›è¡Œä¸‰è§’æµ‹é‡ã€‚æ¯æ¬¡ä½¿ç”¨ [method "
+"如果为 [code]true[/code],混åˆç©ºé—´ä¼šè‡ªåŠ¨è¿›è¡Œä¸‰è§’æµ‹é‡ã€‚æ¯æ¬¡ä½¿ç”¨ [method "
"add_blend_point] 和 [method remove_blend_point] 添加或移除点时,网格都会更"
"新。"
@@ -6424,21 +6445,19 @@ msgstr ""
msgid ""
"Controls the interpolation between animations. See [enum BlendMode] "
"constants."
-msgstr "控制动画之间的æ’值。å‚阅 [enum BlendMode] 常é‡ã€‚"
+msgstr "控制动画之间的æ’å€¼ã€‚è§ [enum BlendMode] 常é‡ã€‚"
#: doc/classes/AnimationNodeBlendSpace2D.xml
msgid ""
"The blend space's X and Y axes' upper limit for the points' position. See "
"[method add_blend_point]."
-msgstr ""
-"æ··åˆç©ºé—´çš„ X è½´å’Œ Y 轴的点的ä½ç½®ä¸Šé™ã€‚请å‚阅 [method add_blend_point]。"
+msgstr "æ··åˆç©ºé—´çš„ X è½´å’Œ Y 轴的点的ä½ç½®ä¸Šé™ã€‚è§ [method add_blend_point]。"
#: doc/classes/AnimationNodeBlendSpace2D.xml
msgid ""
"The blend space's X and Y axes' lower limit for the points' position. See "
"[method add_blend_point]."
-msgstr ""
-"æ··åˆç©ºé—´çš„ X è½´å’Œ Y 轴的点的ä½ç½®ä¸‹é™ã€‚请å‚阅 [method add_blend_point]。"
+msgstr "æ··åˆç©ºé—´çš„ X è½´å’Œ Y 轴的点的ä½ç½®ä¸‹é™ã€‚è§ [method add_blend_point]。"
#: doc/classes/AnimationNodeBlendSpace2D.xml
msgid "Position increment to snap to when moving a point."
@@ -6446,11 +6465,11 @@ msgstr "移动点时è¦å¯¹é½çš„ä½ç½®å¢žé‡ã€‚"
#: doc/classes/AnimationNodeBlendSpace2D.xml
msgid "Name of the blend space's X axis."
-msgstr "æ··åˆç©ºé—´Xè½´çš„å称。"
+msgstr "æ··åˆç©ºé—´ X è½´çš„å称。"
#: doc/classes/AnimationNodeBlendSpace2D.xml
msgid "Name of the blend space's Y axis."
-msgstr "æ··åˆç©ºé—´Yè½´çš„å称。"
+msgstr "æ··åˆç©ºé—´ Y è½´çš„å称。"
#: doc/classes/AnimationNodeBlendSpace2D.xml
msgid ""
@@ -6473,7 +6492,7 @@ msgid ""
"Similar to [constant BLEND_MODE_DISCRETE], but starts the new animation at "
"the last animation's playback position."
msgstr ""
-"类似于[constant BLEND_MODE_DISCRETE],但在最åŽä¸€ä¸ªåŠ¨ç”»çš„æ’­æ”¾ä½ç½®å¼€å§‹æ–°çš„动"
+"类似于 [constant BLEND_MODE_DISCRETE],但在最åŽä¸€ä¸ªåŠ¨ç”»çš„æ’­æ”¾ä½ç½®å¼€å§‹æ–°çš„动"
"画。"
#: doc/classes/AnimationNodeBlendTree.xml
@@ -6597,8 +6616,8 @@ msgid ""
"seconds) between 0 and this value will be added to [member "
"autorestart_delay]."
msgstr ""
-"如果[member autorestart]为 [code]true[/code],则介于0å’Œæ­¤å€¼ä¹‹é—´çš„éšæœºé™„加延迟"
-"(以秒为å•ä½ï¼‰å°†æ·»åŠ åˆ°[member autorestart_delay]。"
+"如果 [member autorestart] 为 [code]true[/code],则介于0å’Œæ­¤å€¼ä¹‹é—´çš„éšæœºé™„加延"
+"迟(以秒为å•ä½ï¼‰å°†æ·»åŠ åˆ° [member autorestart_delay]。"
#: doc/classes/AnimationNodeOutput.xml
msgid "Generic output node to be added to [AnimationNodeBlendTree]."
@@ -6622,8 +6641,8 @@ msgid ""
"[/codeblock]"
msgstr ""
"包å«ä»£è¡¨åŠ¨ç”»çŠ¶æ€çš„多个节点,以图的形å¼è¿žæŽ¥ã€‚节点转æ¢å¯ä»¥é…置为自动å‘生或通过"
-"代ç ï¼Œä½¿ç”¨æœ€çŸ­è·¯å¾„算法。从[AnimationTree]节点中检索"
-"[AnimationNodeStateMachinePlayback]对象,对其进行编程控制。\n"
+"代ç ï¼Œä½¿ç”¨æœ€çŸ­è·¯å¾„算法。从 [AnimationTree] 节点中检索 "
+"[AnimationNodeStateMachinePlayback] 对象,对其进行编程控制。\n"
"[b]示例:[/b]\n"
"[codeblock]\n"
"var state_machine = $AnimationTree.get(\"parameters/playback\")\n"
@@ -6634,7 +6653,7 @@ msgstr ""
msgid ""
"Adds a new node to the graph. The [code]position[/code] is used for display "
"in the editor."
-msgstr "å‘图中添加一个新节点。 [code]position[/code]用于在编辑器中显示。"
+msgstr "å‘图中添加一个新节点。[code]position[/code] 用于在编辑器中显示。"
#: doc/classes/AnimationNodeStateMachine.xml
msgid "Adds a transition between the given nodes."
@@ -6723,7 +6742,7 @@ msgstr "将给定的节点设置为图形的起始点。"
#: doc/classes/AnimationNodeStateMachinePlayback.xml
msgid "Playback control for [AnimationNodeStateMachine]."
-msgstr "[AnimationNodeStateMachine]的播放控件。"
+msgstr "[AnimationNodeStateMachine] 的播放控件。"
#: doc/classes/AnimationNodeStateMachinePlayback.xml
msgid ""
@@ -6736,8 +6755,8 @@ msgid ""
"state_machine.travel(\"some_state\")\n"
"[/codeblock]"
msgstr ""
-"å…许控制用[AnimationNodeStateMachine]创建的[AnimationTree]çŠ¶æ€æœºã€‚用"
-"[code]$AnimationTree.get(\"parameters/playback\")[/code]检索。\n"
+"å…许控制用 [AnimationNodeStateMachine] 创建的 [AnimationTree] çŠ¶æ€æœºã€‚用 "
+"[code]$AnimationTree.get(\"parameters/playback\")[/code] 获å–。\n"
"[b]示例:[/b]\n"
"[codeblock]\n"
"var state_machine = $AnimationTree.get(\"parameters/playback\")\n"
@@ -6755,7 +6774,7 @@ msgstr "返回当å‰åŠ¨ç”»çŠ¶æ€å†…的播放ä½ç½®ã€‚"
#: doc/classes/AnimationNodeStateMachinePlayback.xml
msgid ""
"Returns the current travel path as computed internally by the A* algorithm."
-msgstr "返回A*算法内部计算的当å‰è¡Œè¿›è·¯å¾„。"
+msgstr "返回 A* 算法内部计算的当å‰è¡Œè¿›è·¯å¾„。"
#: doc/classes/AnimationNodeStateMachinePlayback.xml
msgid "Returns [code]true[/code] if an animation is playing."
@@ -6811,8 +6830,8 @@ msgid ""
"Don't use this transition during [method AnimationNodeStateMachinePlayback."
"travel] or [member auto_advance]."
msgstr ""
-"ä¸è¦åœ¨[method AnimationNodeStateMachinePlayback.travel]或[member "
-"auto_advance]期间使用这个过渡。"
+"ä¸è¦åœ¨ [method AnimationNodeStateMachinePlayback.travel] 或 [member "
+"auto_advance] 期间使用这个过渡。"
#: doc/classes/AnimationNodeStateMachineTransition.xml
msgid ""
@@ -6820,8 +6839,8 @@ msgid ""
"via [method AnimationNodeStateMachinePlayback.travel] or [member "
"auto_advance]."
msgstr ""
-"当通过[method AnimationNodeStateMachinePlayback.travel]或[member "
-"auto_advance]在树中旅行时,优先级较低的转场。"
+"当通过 [method AnimationNodeStateMachinePlayback.travel] 或 [member "
+"auto_advance] 在树中旅行时,优先级较低的转场。"
#: doc/classes/AnimationNodeStateMachineTransition.xml
msgid "The transition type."
@@ -6833,7 +6852,7 @@ msgstr "这个状æ€å’Œä¸‹ä¸€ä¸ªçжæ€ä¹‹é—´çš„äº¤å‰æ¸å˜æ—¶é—´ã€‚"
#: doc/classes/AnimationNodeStateMachineTransition.xml
msgid "Emitted when [member advance_condition] is changed."
-msgstr "å˜æ›´[member advance_condition]æ—¶å‘出。"
+msgstr "å˜æ›´ [member advance_condition] æ—¶å‘出。"
#: doc/classes/AnimationNodeStateMachineTransition.xml
msgid ""
@@ -6855,17 +6874,17 @@ msgstr "等待当å‰çŠ¶æ€æ’­æ”¾ç»“æŸï¼Œç„¶åŽåˆ‡æ¢åˆ°ä¸‹ä¸€ä¸ªçжæ€åŠ¨ç”»çš„
#: doc/classes/AnimationNodeTimeScale.xml
msgid "A time-scaling animation node to be used with [AnimationTree]."
-msgstr "与[AnimationTree]一起使用的时间缩放动画节点。"
+msgstr "与 [AnimationTree] 一起使用的时间缩放动画节点。"
#: doc/classes/AnimationNodeTimeScale.xml
msgid ""
"Allows scaling the speed of the animation (or reversing it) in any children "
"nodes. Setting it to 0 will pause the animation."
-msgstr "å…许缩放任何å­èŠ‚ç‚¹ä¸­åŠ¨ç”»çš„é€Ÿåº¦ï¼ˆæˆ–å转)。将其设置为0将暂åœåŠ¨ç”»ã€‚"
+msgstr "å…许缩放任何å­èŠ‚ç‚¹ä¸­åŠ¨ç”»çš„é€Ÿåº¦ï¼ˆæˆ–å转)。将其设置为 0 将暂åœåŠ¨ç”»ã€‚"
#: doc/classes/AnimationNodeTimeSeek.xml
msgid "A time-seeking animation node to be used with [AnimationTree]."
-msgstr "与[AnimationTree]é…åˆä½¿ç”¨çš„寻时动画节点。"
+msgstr "与 [AnimationTree] é…åˆä½¿ç”¨çš„寻时动画节点。"
#: doc/classes/AnimationNodeTimeSeek.xml
msgid ""
@@ -6905,7 +6924,7 @@ msgstr ""
#: doc/classes/AnimationNodeTransition.xml
msgid "A generic animation transition node for [AnimationTree]."
-msgstr "[AnimationTree]的通用动画过渡节点。"
+msgstr "[AnimationTree] 的通用动画过渡节点。"
#: doc/classes/AnimationNodeTransition.xml
msgid ""
@@ -7101,7 +7120,7 @@ msgstr "移除键å为 [code]name[/code] 的动画。"
msgid ""
"Renames an existing animation with key [code]name[/code] to [code]newname[/"
"code]."
-msgstr "将键值为[code]name[/code]的现有动画é‡å‘½å为[code]newname[/code]。"
+msgstr "将键å为 [code]name[/code] 的现有动画é‡å‘½å为 [code]newname[/code]。"
#: doc/classes/AnimationPlayer.xml
msgid ""
@@ -7169,8 +7188,8 @@ msgstr ""
"当剿’­æ”¾çš„动画的å称。如果没有动画正在播放,该属性的值是一个空字符串。改å˜è¿™"
"个值ä¸ä¼šé‡æ–°å¯åŠ¨åŠ¨ç”»ã€‚å…³äºŽæ’­æ”¾åŠ¨ç”»çš„æ›´å¤šä¿¡æ¯è¯·å‚阅 [method play]。\n"
"[b]注æ„:[/b]è™½ç„¶è¿™ä¸ªå±žæ€§ä¼šå‡ºçŽ°åœ¨æ£€æŸ¥å™¨ä¸­ï¼Œä½†å®ƒä¸æ˜¯ç”¨æ¥ç¼–辑的,也ä¸ä¼šä¿å­˜åœ¨åœº"
-"景中。该属性主è¦ç”¨äºŽèŽ·å–当剿’­æ”¾çš„动画,内部用于动画播放轨é“。有关详细信æ¯ï¼Œ"
-"请å‚阅动画 [Animation]。"
+"景中。该属性主è¦ç”¨äºŽèŽ·å–当剿’­æ”¾çš„动画,内部用于动画播放轨é“。详情请å‚阅 "
+"[Animation]。"
#: doc/classes/AnimationPlayer.xml
msgid "The length (in seconds) of the currently being played animation."
@@ -7188,7 +7207,7 @@ msgstr "æ–¹æ³•è°ƒç”¨è½¨é“æ‰€ä½¿ç”¨çš„调用模å¼ã€‚"
msgid ""
"If [code]true[/code], updates animations in response to process-related "
"notifications."
-msgstr "如果[code]true[/code]ï¼Œæ ¹æ®æµç¨‹ç›¸å…³é€šçŸ¥æ›´æ–°åŠ¨ç”»ã€‚"
+msgstr "如果为 [code]true[/code]ï¼Œæ ¹æ®æµç¨‹ç›¸å…³é€šçŸ¥æ›´æ–°åŠ¨ç”»ã€‚"
#: doc/classes/AnimationPlayer.xml
msgid ""
@@ -7407,7 +7426,7 @@ msgstr ""
#: doc/classes/AnimationTreePlayer.xml
msgid "Adds a [code]type[/code] node to the graph with name [code]id[/code]."
-msgstr "添加[code]type[/code]节点到图示中,å称为[code]id[/code]。"
+msgstr "添加 [code]type[/code] 节点到图示中,å称为 [code]id[/code]。"
#: doc/classes/AnimationTreePlayer.xml
msgid ""
@@ -7415,35 +7434,35 @@ msgid ""
"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
msgid ""
"Returns the [AnimationPlayer]'s [Animation] bound to the "
"[AnimationTreePlayer]'s animation node with name [code]id[/code]."
msgstr ""
-"返回与[AnimationTreePlayer]的动画节点绑定的[Animation],å称为[code]id[/"
+"返回与 [AnimationTreePlayer] 的动画节点绑定的 [Animation],å称为 [code]id[/"
"code]。"
#: doc/classes/AnimationTreePlayer.xml
msgid ""
"Returns the name of the [member master_player]'s [Animation] bound to this "
"animation node."
-msgstr "返回与此动画节点绑定的[member master_player]çš„[Animation]å称。"
+msgstr "返回与此动画节点绑定的 [member master_player] çš„ [Animation] å称。"
#: doc/classes/AnimationTreePlayer.xml
msgid ""
"Returns the absolute playback timestamp of the animation node with name "
"[code]id[/code]."
-msgstr "返回å称为[code]id[/code]的动画节点的ç»å¯¹æ’­æ”¾æ—¶é—´æˆ³ã€‚"
+msgstr "返回å称为 [code]id[/code] 的动画节点的ç»å¯¹æ’­æ”¾æ—¶é—´æˆ³ã€‚"
#: doc/classes/AnimationTreePlayer.xml
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]绑定到"
+"å°†å称为 [code]id[/code] 的新[Animation]从[member master_player]绑定到"
"[AnimationTreePlayer]的动画节点。"
#: doc/classes/AnimationTreePlayer.xml
@@ -7452,8 +7471,8 @@ 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]属性的轨é“。修改åŽçš„节点的å­ä»£ç»§ç»­è¿›è¡ŒåŠ¨ç”»å¤„ç†ã€‚"
+"如果[code]enable[/code]为 [code]true[/code],则ID为 [code]id[/code] 的动画节"
+"点将关闭修改[code]path[/code]属性的轨é“。修改åŽçš„节点的å­ä»£ç»§ç»­è¿›è¡ŒåŠ¨ç”»å¤„ç†ã€‚"
#: doc/classes/AnimationTreePlayer.xml
msgid ""
@@ -7482,7 +7501,7 @@ msgid ""
"influence of B gets raised. At 1, output is input B."
msgstr ""
"设置Blend2节点的混åˆé‡ï¼Œç»™å®šå…¶å称和值。\n"
-"一个Blend2节点混åˆä¸¤ä¸ªåŠ¨ç”»ï¼ˆAå’ŒB),混åˆé‡åœ¨0到1之间。\n"
+"一个Blend2节点混åˆä¸¤ä¸ªåŠ¨ç”»ï¼ˆAå’ŒB),混åˆé‡åœ¨0 到 1之间。\n"
"在0的时候,输出是输入A。接近1的时候,A的影å“å˜å°ï¼ŒB的影å“å˜å¤§ã€‚在1时,输出是"
"输入B。"
@@ -7492,8 +7511,8 @@ 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]处属性的轨é“。被修改的节点的å­èŠ‚ç‚¹ç»§ç»­å¤„ç†åŠ¨ç”»ã€‚"
+"如果[code]enable[/code]是[code]true[/code],å称为 [code]id[/code] çš„Blend2节"
+"点会关闭修改[code]path[/code]处属性的轨é“。被修改的节点的å­èŠ‚ç‚¹ç»§ç»­å¤„ç†åŠ¨ç”»ã€‚"
#: doc/classes/AnimationTreePlayer.xml
msgid "Returns the blend amount of a Blend3 node given its name."
@@ -7512,8 +7531,8 @@ msgstr ""
"设置一个Blend3节点的混åˆå€¼ï¼Œä¼ å…¥èŠ‚ç‚¹å和混åˆå€¼ã€‚\n"
"Blend3节点使用-1~1ä¹‹é—´çš„ä¸€ä¸ªå€¼æ¥æ··åˆ3个动画 (A, B-, B+).\n"
"值为-1时,输出动画为B-;值从-1到0时,B-的影å“å‡å¼±ï¼ŒA的影å“å˜å¼ºï¼ŒB+的影å“为0ï¼›"
-"值为0时,输出为动画A;值从0到1时,A的影å“å‡å¼±ï¼ŒB+的影å“å˜å¼ºï¼ŒB-的影å“为0;值"
-"为1时,输出为动画B+。"
+"值为0时,输出为动画A;值从0 到 1时,A的影å“å‡å¼±ï¼ŒB+的影å“å˜å¼ºï¼ŒB-的影å“为0ï¼›"
+"值为1时,输出为动画B+。"
#: doc/classes/AnimationTreePlayer.xml
msgid "Returns the blend amount of a Blend4 node given its name."
@@ -7533,16 +7552,16 @@ msgstr ""
msgid ""
"Connects node [code]id[/code] to [code]dst_id[/code] at the specified input "
"slot."
-msgstr "将节点[code]id[/code]è¿žæŽ¥åˆ°æŒ‡å®šè¾“å…¥æ’æ§½çš„[code]dst_id[/code]。"
+msgstr "将节点 [code]id[/code] è¿žæŽ¥åˆ°æŒ‡å®šè¾“å…¥æ’æ§½çš„ [code]dst_id[/code]。"
#: doc/classes/AnimationTreePlayer.xml
msgid ""
"Disconnects nodes connected to [code]id[/code] at the specified input slot."
-msgstr "æ–­å¼€åœ¨æŒ‡å®šè¾“å…¥æ’æ§½è¿žæŽ¥åˆ°[code]id[/code]的节点。"
+msgstr "æ–­å¼€åœ¨æŒ‡å®šè¾“å…¥æ’æ§½è¿žæŽ¥åˆ° [code]id[/code] 的节点。"
#: doc/classes/AnimationTreePlayer.xml
msgid "Returns a [PoolStringArray] containing the name of all nodes."
-msgstr "è¿”å›žåŒ…å«æ‰€æœ‰èŠ‚ç‚¹åç§°çš„[PoolStringArray]。"
+msgstr "è¿”å›žåŒ…å«æ‰€æœ‰èŠ‚ç‚¹åç§°çš„ [PoolStringArray]。"
#: doc/classes/AnimationTreePlayer.xml
msgid "Returns the mix amount of a Mix node given its name."
@@ -7576,7 +7595,7 @@ msgstr "返回给定其å称节点在图示中的ä½ç½®ã€‚"
#: doc/classes/AnimationTreePlayer.xml
msgid "Gets the node type, will return from [enum NodeType] enum."
-msgstr "获å–节点类型,将从[enum NodeType]枚举中返回。"
+msgstr "获å–节点类型,将从 [enum NodeType] 枚举中返回。"
#: doc/classes/AnimationTreePlayer.xml
msgid "Renames a node in the graph."
@@ -7588,19 +7607,19 @@ msgstr "设置节点在图示中的ä½ç½®ï¼Œç»™å®šå…¶åç§°å’Œä½ç½®ã€‚"
#: doc/classes/AnimationTreePlayer.xml
msgid "Returns the autostart delay of a OneShot node given its name."
-msgstr "返回给定åç§°çš„OneShot节点的自动å¯åŠ¨å»¶è¿Ÿã€‚"
+msgstr "返回给定åç§°çš„ OneShot 节点的自动å¯åŠ¨å»¶è¿Ÿã€‚"
#: doc/classes/AnimationTreePlayer.xml
msgid "Returns the autostart random delay of a OneShot node given its name."
-msgstr "返回给定åç§°çš„OneShot节点的自动å¯åŠ¨éšæœºå»¶è¿Ÿã€‚"
+msgstr "返回给定åç§°çš„ OneShot 节点的自动å¯åŠ¨éšæœºå»¶è¿Ÿã€‚"
#: doc/classes/AnimationTreePlayer.xml
msgid "Returns the fade in time of a OneShot node given its name."
-msgstr "返回给定åç§°çš„OneShot节点的淡入时间。"
+msgstr "返回给定åç§°çš„ OneShot 节点的淡入时间。"
#: doc/classes/AnimationTreePlayer.xml
msgid "Returns the fade out time of a OneShot node given its name."
-msgstr "返回给定其åç§°çš„OneShot节点的淡出时间。"
+msgstr "返回给定其åç§°çš„ OneShot 节点的淡出时间。"
#: doc/classes/AnimationTreePlayer.xml
msgid "Returns whether a OneShot node will auto restart given its name."
@@ -7608,34 +7627,34 @@ msgstr "返回OneShot节点是å¦ä¼šæ ¹æ®å…¶åç§°è‡ªåŠ¨é‡æ–°å¯åŠ¨ã€‚"
#: doc/classes/AnimationTreePlayer.xml
msgid "Returns whether a OneShot node is active given its name."
-msgstr "返回指定åç§°çš„OneShot节点是å¦å¤„于活动状æ€ã€‚"
+msgstr "返回指定åç§°çš„ OneShot 节点是å¦å¤„于活动状æ€ã€‚"
#: doc/classes/AnimationTreePlayer.xml
msgid ""
"Sets the autorestart property of a OneShot node given its name and value."
-msgstr "设置OneShot节点的自动å¯åŠ¨å±žæ€§ï¼Œç»™å®šå…¶å称和值。"
+msgstr "设置 OneShot 节点的自动å¯åŠ¨å±žæ€§ï¼Œç»™å®šå…¶å称和值。"
#: doc/classes/AnimationTreePlayer.xml
msgid ""
"Sets the autorestart delay of a OneShot node given its name and value in "
"seconds."
-msgstr "设置OneShot节点的自动å¯åŠ¨å»¶è¿Ÿï¼Œç»™å®šå…¶å称和值,å•ä½ç§’。"
+msgstr "设置 OneShot 节点的自动å¯åŠ¨å»¶è¿Ÿï¼Œç»™å®šå…¶å称和值,å•ä½ç§’。"
#: doc/classes/AnimationTreePlayer.xml
msgid ""
"Sets the autorestart random delay of a OneShot node given its name and value "
"in seconds."
-msgstr "设置OneShot节点的自动é‡å¯éšæœºå»¶è¿Ÿï¼Œç»™å®šå…¶å称和数值,å•ä½ç§’。"
+msgstr "设置 OneShot 节点的自动é‡å¯éšæœºå»¶è¿Ÿï¼Œç»™å®šå…¶å称和数值,å•ä½ç§’。"
#: doc/classes/AnimationTreePlayer.xml
msgid ""
"Sets the fade in time of a OneShot node given its name and value in seconds."
-msgstr "设置OneShot节点的淡入时间,给定其å称和数值,å•ä½ç§’。"
+msgstr "设置 OneShot 节点的淡入时间,给定其å称和数值,å•ä½ç§’。"
#: doc/classes/AnimationTreePlayer.xml
msgid ""
"Sets the fade out time of a OneShot node given its name and value in seconds."
-msgstr "设置OneShot节点的淡出时间,给定其å称和数值,å•ä½ç§’。"
+msgstr "设置 OneShot 节点的淡出时间,给定其å称和数值,å•ä½ç§’。"
#: doc/classes/AnimationTreePlayer.xml
msgid ""
@@ -7643,16 +7662,17 @@ 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]处属性的轨é“。被修改的节点的å­èŠ‚ç‚¹ç»§ç»­è¿›è¡ŒåŠ¨ç”»ã€‚"
+"如果[code]enable[/code]是[code]true[/code],ID为 [code]id[/code] 的 OneShot "
+"节点会关闭修改[code]path[/code]处属性的轨é“。被修改的节点的å­èŠ‚ç‚¹ç»§ç»­è¿›è¡ŒåŠ¨"
+"画。"
#: doc/classes/AnimationTreePlayer.xml
msgid "Starts a OneShot node given its name."
-msgstr "å¯åŠ¨æŒ‡å®šåç§°çš„OneShot节点。"
+msgstr "å¯åŠ¨æŒ‡å®šåç§°çš„ OneShot 节点。"
#: doc/classes/AnimationTreePlayer.xml
msgid "Stops the OneShot node with name [code]id[/code]."
-msgstr "åœæ­¢å称为[code]id[/code]çš„OneShot节点。"
+msgstr "åœæ­¢å称为 [code]id[/code] çš„ OneShot 节点。"
#: doc/classes/AnimationTreePlayer.xml
msgid ""
@@ -7665,7 +7685,7 @@ msgstr ""
#: doc/classes/AnimationTreePlayer.xml
msgid "Removes the animation node with name [code]id[/code]."
-msgstr "移除å称为[code]id[/code]的动画节点。"
+msgstr "移除å称为 [code]id[/code] 的动画节点。"
#: doc/classes/AnimationTreePlayer.xml
msgid "Resets this [AnimationTreePlayer]."
@@ -7674,7 +7694,7 @@ msgstr "é‡ç½®æ­¤ [AnimationTreePlayer]。"
#: doc/classes/AnimationTreePlayer.xml
msgid ""
"Returns the time scale value of the TimeScale node with name [code]id[/code]."
-msgstr "返回å称为[code]id[/code]çš„TimeScale节点的时间缩放值。"
+msgstr "返回å称为 [code]id[/code] çš„TimeScale节点的时间缩放值。"
#: doc/classes/AnimationTreePlayer.xml
msgid ""
@@ -7685,7 +7705,7 @@ 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"
+"设置å称为 [code]id[/code] çš„TimeScale节点的时间缩放为[code]scale[/code]。\n"
"时间缩放节点用æ¥åŠ å¿«[Animation]的速度,如果缩放高于1ï¼Œå°±ä¼šå‡æ…¢å®ƒä»¬ã€‚\n"
"如果在混åˆåŽåº”用,会影å“到该混åˆçš„æ‰€æœ‰è¾“入动画。"
@@ -7696,34 +7716,35 @@ 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"
+"设置å称为 [code]id[/code] çš„TimeSeek节点的时间查寻值为[code]seconds[/"
+"code]。\n"
"这在[Animation]或输入的[Animation]的混åˆä¸­èµ·åˆ°æŸ¥å¯»çš„作用。"
#: doc/classes/AnimationTreePlayer.xml
msgid ""
"Deletes the input at [code]input_idx[/code] for the transition node with "
"name [code]id[/code]."
-msgstr "删除å称为[code]id[/code]的过渡节点的[code]input_idx[/code]的输入。"
+msgstr "删除å称为 [code]id[/code] 的过渡节点的[code]input_idx[/code]的输入。"
#: doc/classes/AnimationTreePlayer.xml
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
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]的过渡节点的输入数。你å¯ä»¥é€šè¿‡å³é”®ç‚¹å‡»è¿‡æ¸¡èŠ‚ç‚¹æ¥å¢žåŠ "
-"输入。"
+"返回å称为 [code]id[/code] 的过渡节点的输入数。你å¯ä»¥é€šè¿‡å³é”®ç‚¹å‡»è¿‡æ¸¡èŠ‚ç‚¹æ¥å¢ž"
+"加输入。"
#: doc/classes/AnimationTreePlayer.xml
msgid ""
"Returns the cross fade time for the transition node with name [code]id[/"
"code]."
-msgstr "返回å称为[code]id[/code]çš„è¿‡æ¸¡èŠ‚ç‚¹çš„äº¤å‰æ·¡åŒ–时间。"
+msgstr "返回å称为 [code]id[/code] çš„è¿‡æ¸¡èŠ‚ç‚¹çš„äº¤å‰æ·¡åŒ–时间。"
#: doc/classes/AnimationTreePlayer.xml
msgid ""
@@ -7731,8 +7752,8 @@ 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]。"
+"如果过渡节点上å称为 [code]id[/code] çš„[code]input_idx[/code]的输入被设置为在"
+"完æˆåŽè‡ªåЍå‰è¿›åˆ°ä¸‹ä¸€ä¸ªè¾“入,则返回 [code]true[/code]。"
#: doc/classes/AnimationTreePlayer.xml
msgid ""
@@ -7746,26 +7767,27 @@ 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]的过渡节点自动进"
-"行到下一个输入。"
+"当[code]input_idx[/code]处的输入完æˆåŽï¼Œå称为 [code]id[/code] 的过渡节点自动"
+"进行到下一个输入。"
#: doc/classes/AnimationTreePlayer.xml
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
msgid ""
"The transition node with name [code]id[/code] sets its cross fade time to "
"[code]time_sec[/code]."
msgstr ""
-"å称为[code]id[/code]çš„è¿‡æ¸¡èŠ‚ç‚¹å°†å…¶äº¤å‰æ·¡åŒ–时间设置为[code]time_sec[/code]。"
+"å称为 [code]id[/code] çš„è¿‡æ¸¡èŠ‚ç‚¹å°†å…¶äº¤å‰æ·¡åŒ–时间设置为[code]time_sec[/"
+"code]。"
#: doc/classes/AnimationTreePlayer.xml
msgid ""
"If [code]true[/code], the [AnimationTreePlayer] is able to play animations."
-msgstr "如果[code]true[/code],[AnimationTreePlayer]就能够播放动画。"
+msgstr "如果为 [code]true[/code],[AnimationTreePlayer]就能够播放动画。"
#: doc/classes/AnimationTreePlayer.xml
msgid ""
@@ -7796,11 +7818,11 @@ msgstr "输出节点。"
#: doc/classes/AnimationTreePlayer.xml
msgid "Animation node."
-msgstr "Animation节点。"
+msgstr "Animation 节点。"
#: doc/classes/AnimationTreePlayer.xml
msgid "OneShot node."
-msgstr "OneShot节点。"
+msgstr "OneShot 节点。"
#: doc/classes/AnimationTreePlayer.xml
msgid "Mix node."
@@ -7808,31 +7830,31 @@ msgstr "Mix 节点。"
#: doc/classes/AnimationTreePlayer.xml
msgid "Blend2 node."
-msgstr "Blend2节点。"
+msgstr "Blend2 节点。"
#: doc/classes/AnimationTreePlayer.xml
msgid "Blend3 node."
-msgstr "Blend3节点。"
+msgstr "Blend3 节点。"
#: doc/classes/AnimationTreePlayer.xml
msgid "Blend4 node."
-msgstr "Blend4节点。"
+msgstr "Blend4 节点。"
#: doc/classes/AnimationTreePlayer.xml
msgid "TimeScale node."
-msgstr "TimeScale节点。"
+msgstr "TimeScale 节点。"
#: doc/classes/AnimationTreePlayer.xml
msgid "TimeSeek node."
-msgstr "TimeSeek节点。"
+msgstr "TimeSeek 节点。"
#: doc/classes/AnimationTreePlayer.xml
msgid "Transition node."
-msgstr "Transition节点。"
+msgstr "Transition 节点。"
#: doc/classes/Area.xml
msgid "3D area for detection and physics and audio influence."
-msgstr "用于检测和物ç†åŠéŸ³é¢‘å½±å“çš„3D区域。"
+msgstr "用于检测和物ç†åŠéŸ³é¢‘å½±å“çš„ 3D 区域。"
#: doc/classes/Area.xml
msgid ""
@@ -7840,8 +7862,8 @@ msgid ""
"exiting. Can also alter or override local physics parameters (gravity, "
"damping) and route audio to custom audio buses."
msgstr ""
-"检测[CollisionObject]节点é‡å ã€è¿›å…¥æˆ–退出的3D区域。还å¯ä»¥æ”¹å˜æˆ–覆盖局部物ç†å‚"
-"数(é‡åŠ›ã€é˜»å°¼ï¼‰ï¼Œå¹¶å°†éŸ³é¢‘路由到自定义音频总线。"
+"检测 [CollisionObject] 节点é‡å ã€è¿›å…¥æˆ–退出的 3D 区域。还å¯ä»¥æ”¹å˜æˆ–覆盖局部物"
+"ç†å‚数(é‡åŠ›ã€é˜»å°¼ï¼‰ï¼Œå¹¶å°†éŸ³é¢‘路由到自定义音频总线。"
#: doc/classes/Area.xml doc/classes/QuadMesh.xml doc/classes/Viewport.xml
#: doc/classes/ViewportTexture.xml
@@ -7885,7 +7907,7 @@ msgid ""
"For performance, list of overlaps is updated once per frame and before the "
"physics step. Consider using signals instead."
msgstr ""
-"如果 [code]true[/code],则给定区域与该区域é‡å .\n"
+"如果为 [code]true[/code],则给定区域与该区域é‡å .\n"
"[b]注æ„:[/b]在移动物体åŽï¼Œè¿™ä¸ªæµ‹è¯•çš„ç»“æžœä¸æ˜¯å³æ—¶çš„。为了性能,é‡å åˆ—表在æ¯ä¸€"
"å¸§å’Œç‰©ç†æ­¥éª¤ä¹‹å‰æ›´æ–°ä¸€æ¬¡ã€‚å¯ä»¥è€ƒè™‘用信å·ä»£æ›¿ã€‚"
@@ -7902,8 +7924,8 @@ msgstr ""
"如果为 [code]true[/code],则给定的物ç†ä½“与该区域é‡å .\n"
"[b]注æ„:[/b]在移动物体åŽï¼Œè¿™ä¸ªæµ‹è¯•çš„ç»“æžœä¸æ˜¯å³æ—¶çš„。为了æé«˜æ€§èƒ½ï¼Œé‡å åˆ—表在"
"æ¯ä¸€å¸§å’Œç‰©ç†æ­¥éª¤ä¹‹å‰æ›´æ–°ä¸€æ¬¡ã€‚å¯ä»¥è€ƒè™‘ä½¿ç”¨ä¿¡å·æ¥ä»£æ›¿ã€‚\n"
-"[code]body[/code]傿•°å¯ä»¥æ˜¯ä¸€ä¸ª[PhysicsBody]或一个[GridMap]实例(虽然GridMaps"
-"æœ¬èº«ä¸æ˜¯ç‰©ç†ä½“,但它们用碰撞形状注册它们的瓦片(tiles)作为一个虚拟物ç†ä½“)。"
+"[code]body[/code] 傿•°å¯ä»¥æ˜¯ [PhysicsBody] 或 [GridMap] 实例(虽然 GridMap 本"
+"èº«ä¸æ˜¯ç‰©ç†ä½“,但它们用碰撞形状注册它们的图å—作为一个虚拟物ç†ä½“)。"
#: doc/classes/Area.xml
msgid ""
@@ -7945,7 +7967,7 @@ msgid ""
"If [code]true[/code], gravity is calculated from a point (set via [member "
"gravity_vec]). See also [member space_override]."
msgstr ""
-"如果 [code]true[/code],则从一个点计算é‡åŠ›ï¼ˆé€šè¿‡ [member gravity_vec] 设"
+"如果为 [code]true[/code],则从一个点计算é‡åŠ›ï¼ˆé€šè¿‡ [member gravity_vec] 设"
"置)。å‚阅 [member space_override]。"
#: doc/classes/Area.xml doc/classes/Area2D.xml
@@ -8009,7 +8031,7 @@ msgstr ""
msgid ""
"Override mode for gravity and damping calculations within this area. See "
"[enum SpaceOverride] for possible values."
-msgstr "该区域内é‡åŠ›å’Œé˜»å°¼è®¡ç®—çš„è¦†ç›–æ¨¡å¼ã€‚å¯èƒ½çš„值è§[enum SpaceOverride]。"
+msgstr "该区域内é‡åŠ›å’Œé˜»å°¼è®¡ç®—çš„è¦†ç›–æ¨¡å¼ã€‚å¯èƒ½çš„å–å€¼è§ [enum SpaceOverride]。"
#: doc/classes/Area.xml
msgid ""
@@ -8065,11 +8087,11 @@ msgid ""
"[code]body[/code] the [Node], if it exists in the tree, of the other "
"[PhysicsBody] or [GridMap]."
msgstr ""
-"当[PhysicsBody]或[GridMap]进入这个区域时å‘出的。需è¦å°†ç›‘控[member monitoring]"
-"设置为 [code]true[/code]。如果[MeshLibrary]有碰撞形状[Shape],就会检测到"
-"[GridMap]。\n"
-"[code]body[/code], 如果它存在于场景树中, 是å¦ä¸€ä¸ª[PhysicsBody]或[GridMap]节点"
-"[Node]。"
+"当 [PhysicsBody] 或 [GridMap] 进入这个区域时å‘出的。需è¦å°† [member "
+"monitoring] 设置为 [code]true[/code]。如果 [MeshLibrary] 有碰撞形状 [Shape],"
+"就会检测到 [GridMap]。\n"
+"[code]body[/code], 如果它存在于场景树中, 是å¦ä¸€ä¸ª [PhysicsBody] 或 [GridMap] "
+"节点 [Node]。"
#: doc/classes/Area.xml
msgid ""
@@ -8079,11 +8101,11 @@ msgid ""
"[code]body[/code] the [Node], if it exists in the tree, of the other "
"[PhysicsBody] or [GridMap]."
msgstr ""
-"当[PhysicsBody]或[GridMap]离开这个Areaæ—¶å‘出的。需è¦å°†ç›‘控[member monitoring]"
-"设置为 [code]true[/code]。如果[MeshLibrary]有碰撞形状[Shape],就会检测到"
-"[GridMap]。\n"
-"[code]body[/code], 如果它存在于场景树中, 是其他[PhysicsBody]或[GridMap]的"
-"[Node]。"
+"当 [PhysicsBody] 或 [GridMap] 离开这个 Area æ—¶å‘出的。需è¦å°† [member "
+"monitoring] 设置为 [code]true[/code]。如果 [MeshLibrary] 有碰撞形状 [Shape],"
+"就会检测到 [GridMap]。\n"
+"[code]body[/code], 如果它存在于场景树中, 是其他 [PhysicsBody] 或 [GridMap] "
+"的 [Node]。"
#: doc/classes/Area.xml
msgid ""
@@ -8101,18 +8123,19 @@ 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_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]节点。"
+"当 [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 doc/classes/Area2D.xml
msgid "This area does not affect gravity/damping."
@@ -8158,8 +8181,8 @@ msgid ""
"exiting. Can also alter or override local physics parameters (gravity, "
"damping) and route audio to a custom audio bus."
msgstr ""
-"检测[CollisionObject2D]节点é‡å ã€è¿›å…¥æˆ–退出的2D区域。还å¯ä»¥æ”¹å˜æˆ–覆盖局部物ç†"
-"傿•°ï¼ˆé‡åŠ›ã€é˜»å°¼ï¼‰ï¼Œå¹¶å°†éŸ³é¢‘路由到一个自定义的音频总线。"
+"检测 [CollisionObject2D] 节点é‡å ã€è¿›å…¥æˆ–退出的2D区域。还å¯ä»¥æ”¹å˜æˆ–覆盖局部物"
+"ç†å‚数(é‡åŠ›ã€é˜»å°¼ï¼‰ï¼Œå¹¶å°†éŸ³é¢‘路由到一个自定义的音频总线。"
#: doc/classes/Area2D.xml
msgid "Using Area2D"
@@ -8213,7 +8236,7 @@ msgid ""
"For performance, the list of overlaps is updated once per frame and before "
"the physics step. Consider using signals instead."
msgstr ""
-"如果 [code]true[/code],则给定区域与该区域é‡å ã€‚\n"
+"如果为 [code]true[/code],则给定区域与该区域é‡å ã€‚\n"
"[b]注æ„:[/b]在移动物体åŽï¼Œè¿™ä¸ªæµ‹è¯•çš„ç»“æžœä¸æ˜¯å³æ—¶çš„。为了性能,é‡å åˆ—表在æ¯ä¸€"
"å¸§å’Œç‰©ç†æ­¥éª¤ä¹‹å‰æ›´æ–°ä¸€æ¬¡ã€‚å¯ä»¥è€ƒè™‘用信å·ä»£æ›¿ã€‚"
@@ -8227,11 +8250,11 @@ msgid ""
"[TileMap] instance (while TileMaps are not physics bodies themselves, they "
"register their tiles with collision shapes as a virtual physics body)."
msgstr ""
-"如果[code]true[/code],给定的物ç†ä½“就与Area2Då‘生é‡å ã€‚\n"
+"如果为 [code]true[/code],给定的物ç†ä½“就与 Area2D å‘生é‡å ã€‚\n"
"[b]注æ„:[/b]在移动物体åŽï¼Œè¿™ä¸ªæµ‹è¯•çš„ç»“æžœä¸æ˜¯å³æ—¶çš„。为了性能,é‡å åˆ—表在æ¯ä¸€"
"å¸§å’Œç‰©ç†æ­¥éª¤ä¹‹å‰æ›´æ–°ä¸€æ¬¡ã€‚å¯ä»¥è€ƒè™‘ä½¿ç”¨ä¿¡å·æ¥ä»£æ›¿ã€‚\n"
-"[code]body[/code]傿•°å¯ä»¥æ˜¯ä¸€ä¸ª[PhysicsBody2D]或一个[TileMap]实例(虽然"
-"TileMapsæœ¬èº«ä¸æ˜¯ç‰©ç†ä½“,但它们用碰撞形状注册它们的瓦片作为一个虚拟物ç†ä½“)。"
+"[code]body[/code] 傿•°å¯ä»¥æ˜¯ [PhysicsBody2D] 或 [TileMap] 实例(虽然 TileMap "
+"æœ¬èº«ä¸æ˜¯ç‰©ç†ä½“,但它们用碰撞形状注册它们的图å—作为一个虚拟物ç†ä½“)。"
#: doc/classes/Area2D.xml
msgid ""
@@ -8270,9 +8293,9 @@ msgid ""
"to be set to [code]true[/code].\n"
"[code]area[/code] the other Area2D."
msgstr ""
-"当å¦ä¸€ä¸ªArea2D进入这个Area2Dæ—¶å‘出的。需è¦å°†ç›‘控[member monitoring]设置为 "
+"当å¦ä¸€ä¸ª Area2D 进入这个 Area2D æ—¶å‘出的。需è¦å°† [member monitoring] 设置为 "
"[code]true[/code]。\n"
-"[code]area[/code]傿•°æ˜¯å…¶ä»–Area2D。"
+"[code]area[/code] 傿•°æ˜¯å¯¹æ–¹ Area2D。"
#: doc/classes/Area2D.xml
msgid ""
@@ -8280,9 +8303,9 @@ msgid ""
"to be set to [code]true[/code].\n"
"[code]area[/code] the other Area2D."
msgstr ""
-"当å¦ä¸€ä¸ªArea2D离开这个Area2Dæ—¶å‘å‡ºçš„ã€‚è¦æ±‚监控[member monitoring]被设置为 "
+"当å¦ä¸€ä¸ª Area2D 离开这个 Area2D æ—¶å‘å‡ºçš„ã€‚è¦æ±‚ [member monitoring] 被设置为 "
"[code]true[/code]。\n"
-"[code]area[/code]傿•°æ˜¯å…¶ä»–Area2D。"
+"[code]area[/code] 傿•°æ˜¯å¯¹æ–¹ Area2D。"
#: doc/classes/Area2D.xml
msgid ""
@@ -8298,17 +8321,18 @@ msgid ""
"used by the [Physics2DServer]. Get the [CollisionShape2D] node with "
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-"当å¦ä¸€ä¸ª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_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]节点。"
+"当å¦ä¸€ä¸ª 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_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
msgid ""
@@ -8324,17 +8348,18 @@ msgid ""
"used by the [Physics2DServer]. Get the [CollisionShape2D] node with "
"[code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-"当å¦ä¸€ä¸ª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_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]节点。"
+"当å¦ä¸€ä¸ª 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_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
msgid ""
@@ -8344,11 +8369,11 @@ msgid ""
"[code]body[/code] the [Node], if it exists in the tree, of the other "
"[PhysicsBody2D] or [TileMap]."
msgstr ""
-"当一个[PhysicsBody2D]或[TileMap]进入这个Area2Dæ—¶å‘出的。需è¦å°†ç›‘控[member "
-"monitoring]设置为 [code]true[/code]。如果[TileSet]有碰撞形状[Shape2D],则检测"
-"到[TileMap]。\n"
-"[code]body[/code]傿•°æ˜¯å…¶ä»–[PhysicsBody2D]或[TileMap]çš„[Node],如果它存在于树"
-"中。"
+"当一个 [PhysicsBody2D] 或 [TileMap] 进入这个 Area2D æ—¶å‘出的。需è¦å°† [member "
+"monitoring] 设置为 [code]true[/code]。如果 [TileSet] 有碰撞形状 [Shape2D],则"
+"检测到 [TileMap]。\n"
+"[code]body[/code] 傿•°æ˜¯å…¶ä»– [PhysicsBody2D] 或 [TileMap] çš„ [Node],如果它存"
+"在于树中。"
#: doc/classes/Area2D.xml
msgid ""
@@ -8382,19 +8407,20 @@ 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]有"
-"Collision[Shape2D],就会检测到[TileMap]。\n"
-"[code]body_rid[/code] [Physics2DServer]使用的[PhysicsBody2D]或[TileSet]的"
-"[CollisionObject2D]的[RID]。\n"
-"[code]body[/code] [PhysicsBody2D]或[TileMap]的[Node],如果它在树上存在的"
+"当 [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]节点。"
+"[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
msgid ""
@@ -8414,19 +8440,20 @@ 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],就会检测到[TileMap]。\n"
-"[code]body_rid[/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_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]节点。"
+"[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
msgid "A generic array datatype."
@@ -8645,7 +8672,7 @@ msgstr ""
msgid ""
"Clears the array. This is equivalent to using [method resize] with a size of "
"[code]0[/code]."
-msgstr "清空数组。与调用 [method resize] 时指定大å°ä¸º [code]0[/code] 等价。"
+msgstr "清空数组。相当于调用 [method resize] 时指定大å°ä¸º [code]0[/code]。"
#: doc/classes/Array.xml doc/classes/PoolByteArray.xml
#: doc/classes/PoolColorArray.xml doc/classes/PoolIntArray.xml
@@ -8767,7 +8794,7 @@ msgstr ""
"[\"inside\", 7].has(7) # True\n"
"[\"inside\", 7].has(\"7\") # False\n"
"[/codeblock]\n"
-"[b]注æ„:[/b]这等åŒäºŽä½¿ç”¨ [code]in[/code] æ“作符,如下所示。\n"
+"[b]注æ„:[/b]相当于使用 [code]in[/code] æ“作符,如下所示。\n"
"[codeblock]\n"
"# 将评估为 `true`。\n"
"if 2 in [2, 4, 6, 8]:\n"
@@ -8840,13 +8867,13 @@ 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]的速度就越慢。"
+"移除并返回索引 [code]position[/code] 处的数组元素。如果是负数,会认为 "
+"[code]position[/code] 是相对于数组的末端。如果数组是空的或者被越界访问,则ä¿"
+"留数组ä¸åŠ¨ï¼Œå¹¶è¿”å›ž [code]null[/code]。当数组被越界访问时,会打å°å‡ºä¸€æ¡é”™è¯¯ä¿¡"
+"æ¯ï¼Œä½†å½“数组为空时,则ä¸ä¼šã€‚\n"
+"[b]注æ„:[/b]在大的数组上,这个方法å¯èƒ½æ¯” [method pop_back] æ…¢ï¼Œå› ä¸ºå®ƒå°†é‡æ–°"
+"索引ä½äºŽè¢«ç§»é™¤å…ƒç´ ä¹‹åŽçš„æ•°ç»„元素。数组越大,被移除元素的索引越低,[method "
+"pop_at] 的速度就越慢。"
#: doc/classes/Array.xml
msgid ""
@@ -9132,25 +9159,25 @@ msgstr "返回此索引处的混åˆå½¢çŠ¶çš„å称。"
msgid ""
"Will perform a UV unwrap on the [ArrayMesh] to prepare the mesh for "
"lightmapping."
-msgstr "将在[ArrayMesh]上执行UV展开,以准备用于光照贴图的网格。"
+msgstr "将在 [ArrayMesh] 上执行 UV 展开,以准备用于光照贴图的网格。"
#: doc/classes/ArrayMesh.xml
msgid "Will regenerate normal maps for the [ArrayMesh]."
-msgstr "将为[ArrayMesh]釿–°ç”Ÿæˆæ³•线图。"
+msgstr "将为 [ArrayMesh] 釿–°ç”Ÿæˆæ³•线图。"
#: doc/classes/ArrayMesh.xml
msgid ""
"Returns the index of the first surface with this name held within this "
"[ArrayMesh]. If none are found, -1 is returned."
msgstr ""
-"返回此[ArrayMesh]中带有此å称的第一个曲é¢çš„索引。如果没有找到,则返回-1。"
+"返回此 [ArrayMesh] 中带有此å称的第一个曲é¢çš„索引。如果没有找到,则返回 -1。"
#: doc/classes/ArrayMesh.xml
msgid ""
"Returns the length in indices of the index array in the requested surface "
"(see [method add_surface_from_arrays])."
msgstr ""
-"返回请求的曲é¢çš„索引数组的长度,以指数为å•ä½ï¼ˆè¯·å‚阅 [method "
+"返回请求的曲é¢çš„索引数组的长度,以指数为å•ä½ï¼ˆè§ [method "
"add_surface_from_arrays])。"
#: doc/classes/ArrayMesh.xml
@@ -9158,14 +9185,13 @@ msgid ""
"Returns the length in vertices of the vertex array in the requested surface "
"(see [method add_surface_from_arrays])."
msgstr ""
-"返回所请求曲é¢ä¸­é¡¶ç‚¹æ•°ç»„的顶点长度(请å‚阅[method "
-"add_surface_from_arrays])。"
+"返回所请求曲é¢ä¸­é¡¶ç‚¹æ•°ç»„çš„é¡¶ç‚¹é•¿åº¦ï¼ˆè§ [method add_surface_from_arrays])。"
#: doc/classes/ArrayMesh.xml
msgid ""
"Returns the format mask of the requested surface (see [method "
"add_surface_from_arrays])."
-msgstr "返回所请求表é¢çš„æ ¼å¼æŽ©ç ï¼ˆè¯·å‚阅[method add_surface_from_arrays])。"
+msgstr "返回所请求表é¢çš„æ ¼å¼æŽ©ç ï¼ˆè§ [method add_surface_from_arrays])。"
#: doc/classes/ArrayMesh.xml
msgid "Gets the name assigned to this surface."
@@ -9175,15 +9201,15 @@ msgstr "获å–分é…给此表é¢çš„å称。"
msgid ""
"Returns the primitive type of the requested surface (see [method "
"add_surface_from_arrays])."
-msgstr "返回所请求曲é¢çš„图元类型(请å‚阅 [method add_surface_from_arrays])。"
+msgstr "返回所请求曲é¢çš„å›¾å…ƒç±»åž‹ï¼ˆè§ [method add_surface_from_arrays])。"
#: doc/classes/ArrayMesh.xml
msgid ""
"Removes a surface at position [code]surf_idx[/code], shifting greater "
"surfaces one [code]surf_idx[/code] slot down."
msgstr ""
-"移除ä½ç½®[code]surf_idx[/code]的一个é¢ï¼Œå°†è¾ƒå¤§çš„é¢å‘下移动一个[code]surf_idx[/"
-"code]槽。"
+"移除ä½ç½® [code]surf_idx[/code] 的一个é¢ï¼Œå°†è¾ƒå¤§çš„é¢å‘下移动一个 "
+"[code]surf_idx[/code] 槽。"
#: doc/classes/ArrayMesh.xml
msgid "Sets a name for a given surface."
@@ -9209,7 +9235,7 @@ msgid ""
"Especially useful to avoid unexpected culling when using a shader to offset "
"vertices."
msgstr ""
-"ç”¨ç”¨æˆ·å®šä¹‰çš„ç”¨äºŽä½¿ç”¨è§†é”¥å‰”é™¤çš„ä¸€ç§æ›¿ä»£[AABB]。在使用ç€è‰²å™¨å移顶点时,é¿å…éž"
+"ç”¨ç”¨æˆ·å®šä¹‰çš„ç”¨äºŽä½¿ç”¨è§†é”¥å‰”é™¤çš„ä¸€ç§æ›¿ä»£ [AABB]。在使用ç€è‰²å™¨å移顶点时,é¿å…éž"
"预期的剔除特别有用。"
#: doc/classes/ArrayMesh.xml
@@ -9222,7 +9248,7 @@ msgstr "æ¯ä¸ªé¡¶ç‚¹çš„æƒé‡/骨指数é‡ï¼ˆå§‹ç»ˆä¸º 4)。"
#: doc/classes/ArrayMesh.xml
msgid "[PoolVector3Array], [PoolVector2Array], or [Array] of vertex positions."
-msgstr "[PoolVector3Array], [PoolVector2Array], 或[Array]的顶点ä½ç½®ã€‚"
+msgstr "[PoolVector3Array]ã€[PoolVector2Array] 或 [Array] 的顶点ä½ç½®ã€‚"
#: doc/classes/ArrayMesh.xml
msgid "[PoolVector3Array] of vertex normals."
@@ -9234,8 +9260,8 @@ msgid ""
"first 3 floats determine the tangent, and the last the binormal direction as "
"-1 or 1."
msgstr ""
-"顶点切线的[PoolRealArray]。æ¯ä¸ªå…ƒç´ ä»¥4个浮点数为一组,å‰3个浮点数决定切线,最"
-"åŽä¸€ä¸ªæ˜¯-1或1çš„åŒæ³•线方å‘。"
+"顶点切线的 [PoolRealArray]。æ¯ä¸ªå…ƒç´ ä»¥ 4 ä¸ªæµ®ç‚¹æ•°ä¸ºä¸€ç»„ï¼Œå‰ 3 个浮点数决定切"
+"线,最åŽä¸€ä¸ªæ˜¯ -1 或 1 çš„åŒæ³•线方å‘。"
#: doc/classes/ArrayMesh.xml
msgid "[PoolColorArray] of vertex colors."
@@ -9243,21 +9269,22 @@ msgstr "[PoolColorArray] 顶点颜色。"
#: doc/classes/ArrayMesh.xml
msgid "[PoolVector2Array] for UV coordinates."
-msgstr "[PoolVector2Array] 用于UVåæ ‡ã€‚"
+msgstr "[PoolVector2Array] 用于 UV åæ ‡ã€‚"
#: doc/classes/ArrayMesh.xml
msgid "[PoolVector2Array] for second UV coordinates."
-msgstr "[PoolVector2Array]用于第二UVåæ ‡ã€‚"
+msgstr "[PoolVector2Array] 用于第二 UV åæ ‡ã€‚"
#: doc/classes/ArrayMesh.xml
msgid ""
"[PoolRealArray] or [PoolIntArray] of bone indices. Each element in groups of "
"4 floats."
-msgstr "[PoolRealArray]或[PoolIntArray]的骨骼索引。æ¯ä¸ªå…ƒç´ ä»¥4个浮点数为一组。"
+msgstr ""
+"[PoolRealArray] 或 [PoolIntArray] 的骨骼索引。æ¯ä¸ªå…ƒç´ ä»¥ 4 个浮点数为一组。"
#: doc/classes/ArrayMesh.xml
msgid "[PoolRealArray] of bone weights. Each element in groups of 4 floats."
-msgstr "骨骼æƒé‡çš„[PoolRealArray]。æ¯ä¸ªå…ƒç´ ä»¥4个浮点数为一组。"
+msgstr "骨骼æƒé‡çš„ [PoolRealArray]。æ¯ä¸ªå…ƒç´ ä»¥ 4 个浮点数为一组。"
#: doc/classes/ArrayMesh.xml
msgid ""
@@ -9281,7 +9308,7 @@ msgstr ""
#: doc/classes/ArrayMesh.xml doc/classes/Mesh.xml doc/classes/VisualServer.xml
msgid "Represents the size of the [enum ArrayType] enum."
-msgstr "表示[enum ArrayType]枚举的大å°ã€‚"
+msgstr "表示 [enum ArrayType] 枚举的大å°ã€‚"
#: doc/classes/ArrayMesh.xml
msgid "Array format will include vertices (mandatory)."
@@ -9301,7 +9328,7 @@ msgstr "数组格å¼å°†åŒ…括一个颜色数组。"
#: doc/classes/ArrayMesh.xml
msgid "Array format will include UVs."
-msgstr "数组格å¼å°†åŒ…括UV。"
+msgstr "数组格å¼å°†åŒ…括 UV。"
#: doc/classes/ArrayMesh.xml
msgid "Array format will include another set of UVs."
@@ -9321,7 +9348,7 @@ msgstr "将使用索引数组。"
#: doc/classes/ARVRAnchor.xml
msgid "An anchor point in AR space."
-msgstr "AR空间中的锚点。"
+msgstr "AR 空间中的锚点。"
#: doc/classes/ARVRAnchor.xml
msgid ""
@@ -9339,12 +9366,12 @@ msgid ""
"more about the real world out there especially if only part of the surface "
"is in view."
msgstr ""
-"[ARVRAnchor]点是空间节点,它将ARå¹³å°è¯†åˆ«çš„现实世界的ä½ç½®æ˜ å°„到游æˆä¸–界中相应"
-"ä½ç½®ã€‚例如,åªè¦ARKitä¸­çš„å¹³é¢æ£€æµ‹å¼€å¯ï¼ŒARKit就会识别并更新平é¢ï¼ˆæ¡Œå­ã€åœ°æ¿"
-"等)的ä½ç½®ï¼Œå¹¶ä¸ºå…¶åˆ›å»ºé”šç‚¹ã€‚\n"
-"此节点通过其特有ID映射到其中一个锚点。当你收到一个新锚点å¯ç”¨çš„ä¿¡å·æ—¶ï¼Œåœ¨ä½ çš„"
-"场景中,应该为该锚点添加这个节点。你å¯ä»¥é¢„先定义节点并设置ID;节点将简å•地ä¿"
-"æŒåœ¨0,0,0,直到一个平é¢è¢«è¯†åˆ«ã€‚\n"
+"[ARVRAnchor] 点是空间节点,它将 AR å¹³å°è¯†åˆ«çš„现实世界的ä½ç½®æ˜ å°„到游æˆä¸–界中相"
+"应ä½ç½®ã€‚例如,åªè¦ ARKit ä¸­çš„å¹³é¢æ£€æµ‹å¼€å¯ï¼ŒARKit 就会识别并更新平é¢ï¼ˆæ¡Œå­ã€åœ°"
+"æ¿ç­‰ï¼‰çš„ä½ç½®ï¼Œå¹¶ä¸ºå…¶åˆ›å»ºé”šç‚¹ã€‚\n"
+"此节点通过其特有 ID 映射到其中一个锚点。当你收到一个新锚点å¯ç”¨çš„ä¿¡å·æ—¶ï¼Œåœ¨ä½ "
+"的场景中,应该为该锚点添加这个节点。你å¯ä»¥é¢„先定义节点并设置ID;节点将简å•地"
+"ä¿æŒåœ¨ 0,0,0,直到一个平é¢è¢«è¯†åˆ«ã€‚\n"
"请记ä½ï¼Œåªè¦å¯ç”¨äº†å¹³é¢æ£€æµ‹ï¼Œé”šçš„大å°ã€ä½ç½®å’Œæ–¹å‘就会éšç€æ£€æµ‹é€»è¾‘对外é¢çœŸå®žä¸–"
"界的信æ¯è€Œæ›´æ–°ï¼Œç‰¹åˆ«æ˜¯åœ¨åªæœ‰éƒ¨åˆ†è¡¨é¢åœ¨è§†é‡Žä¸­çš„æƒ…况下。"
@@ -9467,14 +9494,14 @@ msgstr ""
msgid ""
"If active, returns the name of the associated controller if provided by the "
"AR/VR SDK used."
-msgstr "如果激活,如果由使用的AR/VR SDKæä¾›ï¼Œåˆ™è¿”回相关控制器的å称。"
+msgstr "如果激活,如果由使用的 AR/VR SDK æä¾›ï¼Œåˆ™è¿”回相关控制器的å称。"
#: doc/classes/ARVRController.xml
msgid ""
"Returns the hand holding this controller, if known. See [enum "
"ARVRPositionalTracker.TrackerHand]."
msgstr ""
-"è¿”å›žæŒæœ‰æ­¤æŽ§åˆ¶å™¨çš„æ‰‹ï¼Œå¦‚果知é“çš„è¯ã€‚å‚阅[enum ARVRPositionalTracker."
+"è¿”å›žæŒæœ‰æ­¤æŽ§åˆ¶å™¨çš„æ‰‹ï¼Œå¦‚果知é“çš„è¯ã€‚è§ [enum ARVRPositionalTracker."
"TrackerHand]。"
#: doc/classes/ARVRController.xml
@@ -9500,10 +9527,10 @@ 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。由[ARVRServer]跟踪的æ¯ä¸ªæŽ§åˆ¶å™¨ï¼Œå¦‚果有按钮和轴,"
-"也将被注册为Godot中的摇æ†ã€‚è¿™æ„å‘³ç€æ‰€æœ‰æ­£å¸¸çš„æ‘‡æ†è·Ÿè¸ªå’Œè¾“入映射将对AR/VR控制"
-"器上的按钮和轴起作用。这个IDçº¯ç²¹æ˜¯ä½œä¸ºä¿¡æ¯æä¾›çš„ï¼Œè¿™æ ·ä½ å°±å¯ä»¥æŠŠæŽ§åˆ¶å™¨å’Œå®ƒçš„"
-"æ‘‡æ†æ¡ç›®å…³è”èµ·æ¥ã€‚"
+"返回与此绑定的摇æ†å¯¹è±¡çš„ ID。由 [ARVRServer] 跟踪的æ¯ä¸ªæŽ§åˆ¶å™¨ï¼Œå¦‚果有按钮和"
+"轴,也将被注册为 Godot 中的摇æ†ã€‚è¿™æ„å‘³ç€æ‰€æœ‰æ­£å¸¸çš„æ‘‡æ†è·Ÿè¸ªå’Œè¾“入映射将对 AR/"
+"VR 控制器上的按钮和轴起作用。这个 ID çº¯ç²¹æ˜¯ä½œä¸ºä¿¡æ¯æä¾›çš„ï¼Œè¿™æ ·ä½ å°±å¯ä»¥æŠŠæŽ§åˆ¶"
+"å™¨å’Œå®ƒçš„æ‘‡æ†æ¡ç›®å…³è”èµ·æ¥ã€‚"
#: doc/classes/ARVRController.xml
msgid ""
@@ -9518,8 +9545,8 @@ msgid ""
"pressed. See [enum JoystickList], in particular the [code]JOY_VR_*[/code] "
"constants."
msgstr ""
-"如果索引 [code]button[/code] 处的按钮被按下,则返回 [code]true[/code]。请å‚"
-"阅 [enum JoystickList] 中的 [code]JOY_VR_*[/code] 常é‡ã€‚"
+"如果索引 [code]button[/code] 处的按钮被按下,则返回 [code]true[/code]ã€‚è§ "
+"[enum JoystickList] 中的 [code]JOY_VR_*[/code] 常é‡ã€‚"
#: doc/classes/ARVRController.xml
msgid ""
@@ -9549,8 +9576,9 @@ msgid ""
"This is a useful property to animate if you want the controller to vibrate "
"for a limited duration."
msgstr ""
-"控制器振动的程度。范围从[code]0.0[/code]到[code]1.0[/code],精度[code].01[/"
-"code]。如果更改,会相应地更新[member ARVRPositionalTracker.rumble]。\n"
+"控制器振动的程度。范围从 [code]0.0[/code] 到 [code]1.0[/code],精度 "
+"[code].01[/code]。如果更改,会相应地更新 [member ARVRPositionalTracker."
+"rumble]。\n"
"如果你想让控制器在é™å®šæ—¶é—´å†…振动,这是一个有用的属性,å¯ä»¥å°†å…¶åŠ¨ç”»åŒ–ã€‚"
#: doc/classes/ARVRController.xml
@@ -9567,12 +9595,12 @@ msgid ""
"becomes available. Generally speaking this will be a static mesh after "
"becoming available."
msgstr ""
-"当与控制器相关的Meshå‘生å˜åŒ–或å˜å¾—å¯ç”¨æ—¶è§¦å‘。一般æ¥è¯´ï¼Œè¿™å°†æ˜¯ä¸€ä¸ªå˜å¾—å¯ç”¨åŽ"
-"çš„é™æ€ç½‘格。"
+"当与控制器相关的 Mesh å‘生å˜åŒ–或å˜å¾—å¯ç”¨æ—¶è§¦å‘。一般æ¥è¯´ï¼Œè¿™å°†æ˜¯ä¸€ä¸ªå˜å¾—å¯ç”¨"
+"åŽçš„陿€ç½‘格。"
#: doc/classes/ARVRInterface.xml
msgid "Base class for an AR/VR interface implementation."
-msgstr "AR/VR接å£å®žçŽ°çš„åŸºç±»ã€‚"
+msgstr "AR/VR 接å£å®žçŽ°çš„åŸºç±»ã€‚"
#: doc/classes/ARVRInterface.xml
msgid ""
@@ -9597,18 +9625,18 @@ msgid ""
"background, this method returns the feed ID in the [CameraServer] for this "
"interface."
msgstr ""
-"å¦‚æžœè¿™æ˜¯ä¸€ä¸ªéœ€è¦æ˜¾ç¤ºç›¸æœºç”»é¢ä½œä¸ºèƒŒæ™¯çš„AR界é¢ï¼Œæ­¤æ–¹æ³•返回该界é¢çš„"
-"[CameraServer]中的画é¢ID。"
+"å¦‚æžœè¿™æ˜¯ä¸€ä¸ªéœ€è¦æ˜¾ç¤ºç›¸æœºç”»é¢ä½œä¸ºèƒŒæ™¯çš„ AR 界é¢ï¼Œæ­¤æ–¹æ³•返回该界é¢çš„ "
+"[CameraServer] ä¸­çš„ç”»é¢ ID。"
#: doc/classes/ARVRInterface.xml
msgid ""
"Returns a combination of [enum Capabilities] flags providing information "
"about the capabilities of this interface."
-msgstr "返回[enum Capabilities]标签的组åˆï¼Œæä¾›å…³äºŽè¿™ä¸ªæŽ¥å£åŠŸèƒ½çš„ä¿¡æ¯ã€‚"
+msgstr "返回 [enum Capabilities] 标签的组åˆï¼Œæä¾›å…³äºŽè¿™ä¸ªæŽ¥å£åŠŸèƒ½çš„ä¿¡æ¯ã€‚"
#: doc/classes/ARVRInterface.xml
msgid "Returns the name of this interface (OpenVR, OpenHMD, ARKit, etc)."
-msgstr "返回该接å£çš„å称,如OpenVRã€OpenHMDã€ARKit等。"
+msgstr "返回该接å£çš„å称,如 OpenVRã€OpenHMDã€ARKit 等。"
#: doc/classes/ARVRInterface.xml
msgid ""
@@ -9679,12 +9707,12 @@ msgstr "[code]true[/code] 如果这是个主接å£ã€‚"
#: doc/classes/ARVRInterface.xml
msgid "No ARVR capabilities."
-msgstr "没有ARVR功能。"
+msgstr "没有 ARVR 功能。"
#: doc/classes/ARVRInterface.xml
msgid ""
"This interface can work with normal rendering output (non-HMD based AR)."
-msgstr "此接å£å¯ä»¥ä¸Žæ­£å¸¸çš„æ¸²æŸ“输出一起工作,éžåŸºäºŽHMDçš„AR。"
+msgstr "此接å£å¯ä»¥ä¸Žæ­£å¸¸çš„æ¸²æŸ“输出一起工作,éžåŸºäºŽ HMD çš„ AR。"
#: doc/classes/ARVRInterface.xml
msgid "This interface supports stereoscopic rendering."
@@ -9712,7 +9740,7 @@ msgid ""
"information for our camera node or when stereo scopic rendering is not "
"supported."
msgstr ""
-"Monoè¾“å‡ºï¼Œè¿™ä¸»è¦æ˜¯åœ¨ç›¸æœºèŠ‚ç‚¹æ£€ç´¢å®šä½ä¿¡æ¯æ—¶ï¼Œæˆ–è€…åœ¨ä¸æ”¯æŒç«‹ä½“视景渲染时,内部"
+"Mono è¾“å‡ºï¼Œè¿™ä¸»è¦æ˜¯åœ¨ç›¸æœºèŠ‚ç‚¹æ£€ç´¢å®šä½ä¿¡æ¯æ—¶ï¼Œæˆ–è€…åœ¨ä¸æ”¯æŒç«‹ä½“视景渲染时,内部"
"使用。"
#: doc/classes/ARVRInterface.xml
@@ -9757,7 +9785,7 @@ msgstr "追踪功能失效,å³ç›¸æœºæœªæ’ç”µæˆ–è¢«é®æŒ¡ï¼Œç¯å¡”关闭,等
#: modules/gdnative/doc_classes/ARVRInterfaceGDNative.xml
msgid "GDNative wrapper for an ARVR interface."
-msgstr "ARVR接å£çš„GDNative包装器。"
+msgstr "ARVR 接å£çš„ GDNative 包装器。"
#: modules/gdnative/doc_classes/ARVRInterfaceGDNative.xml
msgid ""
@@ -9770,7 +9798,7 @@ msgstr ""
#: doc/classes/ARVROrigin.xml
msgid "The origin point in AR/VR."
-msgstr "AR/VR的原点。"
+msgstr "AR/VR 的原点。"
#: doc/classes/ARVROrigin.xml
msgid ""
@@ -9802,9 +9830,9 @@ msgid ""
"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]è¿™ç§æ–¹æ³•是通过[ARVRServer]本身的。"
+"å…许你根æ®ä½ çš„æ¸¸æˆçš„å•使¥è°ƒæ•´æ¯”例。大多数 AR/VR å¹³å°å‡å®š 1 个游æˆä¸–界的å•ä½ "
+"= 1 个现实世界的米的比例。\n"
+"[b]注æ„:[/b]è¿™ç§æ–¹æ³•是通过 [ARVRServer] 本身的。"
#: doc/classes/ARVRPositionalTracker.xml
msgid "A tracked object."
@@ -9835,14 +9863,14 @@ msgstr ""
msgid ""
"Returns the hand holding this tracker, if known. See [enum TrackerHand] "
"constants."
-msgstr "è¿”å›žæŒæœ‰æ­¤è¿½è¸ªå™¨çš„æ‰‹ï¼Œå¦‚果知é“。å‚阅[enum TrackerHand]常é‡ã€‚"
+msgstr "è¿”å›žæŒæœ‰æ­¤è¿½è¸ªå™¨çš„æ‰‹ï¼Œå¦‚果知é“ã€‚è§ [enum TrackerHand] 常é‡ã€‚"
#: doc/classes/ARVRPositionalTracker.xml
msgid ""
"If this is a controller that is being tracked, the controller will also be "
"represented by a joystick entry with this ID."
msgstr ""
-"如果这是一个正在被追踪的控制器,该控制器将由一个具有此IDçš„æ“çºµæ†æ¡ç›®è¡¨ç¤ºã€‚"
+"如果这是一个正在被追踪的控制器,该控制器将由一个具有此 ID çš„æ“çºµæ†æ¡ç›®è¡¨ç¤ºã€‚"
#: doc/classes/ARVRPositionalTracker.xml
msgid ""
@@ -9948,7 +9976,7 @@ msgid ""
"button on a controller for a short period of time, or when implementing a "
"teleport mechanism."
msgstr ""
-"这是正确ç†è§£çš„é‡è¦åŠŸèƒ½ã€‚ AR å’Œ VR å¹³å°å¤„ç†å®šä½çš„æ–¹å¼ç•¥æœ‰ä¸åŒã€‚\n"
+"这是正确ç†è§£çš„é‡è¦åŠŸèƒ½ã€‚AR å’Œ VR å¹³å°å¤„ç†å®šä½çš„æ–¹å¼ç•¥æœ‰ä¸åŒã€‚\n"
"å¯¹äºŽä¸æä¾›ç©ºé—´è·Ÿè¸ªçš„å¹³å°ï¼Œæˆ‘们的原点 (0,0,0) 是 HMD çš„ä½ç½®ï¼Œä½†æ‚¨å‡ ä¹Žæ— æ³•控制"
"玩家在现实世界中é¢å¯¹çš„æ–¹å‘。\n"
"对于æä¾›ç©ºé—´è·Ÿè¸ªçš„å¹³å°ï¼Œæˆ‘们的原点在很大程度上å–决于系统。对于 OpenVR,原点通"
@@ -10059,8 +10087,8 @@ 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 ""
-"å…许你根æ®ä½ çš„æ¸¸æˆçš„å•使¥è°ƒæ•´ç¼©æ”¾ã€‚大多数AR/VRå¹³å°å‡å®š1个游æˆä¸–界å•ä½=1个现"
-"实世界的米。"
+"å…许你根æ®ä½ çš„æ¸¸æˆçš„å•使¥è°ƒæ•´ç¼©æ”¾ã€‚大多数 AR/VR å¹³å°å‡å®š 1 个游æˆä¸–界å•ä½ = "
+"1 个现实世界的米。"
#: doc/classes/ARVRServer.xml
msgid "Emitted when a new interface has been added."
@@ -10077,9 +10105,9 @@ msgid ""
"important to react to this signal to add the appropriate [ARVRController] or "
"[ARVRAnchor] nodes related to this new tracker."
msgstr ""
-"当新的追踪器被添加时触å‘。如果你ä¸ä½¿ç”¨å›ºå®šæ•°é‡çš„æŽ§åˆ¶å™¨ï¼Œæˆ–者你在AR解决方案中"
-"使用[ARVRAnchor],那么对这个信å·åšå‡ºå应,以添加与这个新追踪器相关的适当的"
-"[ARVRController]或[ARVRAnchor]节点,将会很é‡è¦ã€‚"
+"当新的追踪器被添加时触å‘。如果你ä¸ä½¿ç”¨å›ºå®šæ•°é‡çš„æŽ§åˆ¶å™¨ï¼Œæˆ–者你在 AR 解决方案"
+"中使用 [ARVRAnchor],那么对这个信å·åšå‡ºå应,以添加与这个新追踪器相关的适当"
+"çš„ [ARVRController] 或 [ARVRAnchor] 节点,将会很é‡è¦ã€‚"
#: doc/classes/ARVRServer.xml
msgid ""
@@ -10123,7 +10151,8 @@ msgid ""
"user is looking to in the real world. The user will look dead ahead in the "
"virtual world."
msgstr ""
-"完全é‡ç½®HMD的方å‘。无论用户在现实世界中看å‘哪个方å‘。将在虚拟世界中é”定视角。"
+"完全é‡ç½® HMD 的方å‘。无论用户在现实世界中看å‘哪个方å‘。将在虚拟世界中é”定视"
+"角。"
#: doc/classes/ARVRServer.xml
msgid ""
@@ -10137,7 +10166,7 @@ msgstr ""
msgid ""
"Does not reset the orientation of the HMD, only the position of the player "
"gets centered."
-msgstr "ä¸é‡ç½®HMD的方å‘,åªè®©çŽ©å®¶çš„ä½ç½®å±…中。"
+msgstr "ä¸é‡ç½® HMD 的方å‘,åªè®©çŽ©å®¶çš„ä½ç½®å±…中。"
#: doc/classes/AspectRatioContainer.xml
msgid "Container that preserves its child controls' aspect ratio."
@@ -10176,7 +10205,7 @@ 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 ""
-"å¯¹å­æŽ§ä»¶å¼ºåˆ¶å®žæ–½çš„é•¿å®½æ¯”ã€‚è¿™æ˜¯å®½åº¦é™¤ä»¥é«˜åº¦ã€‚è¿™ä¸ªæ¯”ä¾‹å–决于[member "
+"å¯¹å­æŽ§ä»¶å¼ºåˆ¶å®žæ–½çš„é•¿å®½æ¯”ã€‚è¿™æ˜¯å®½åº¦é™¤ä»¥é«˜åº¦ã€‚è¿™ä¸ªæ¯”ä¾‹å–决于 [member "
"stretch_mode]。"
#: doc/classes/AspectRatioContainer.xml
@@ -10392,7 +10421,7 @@ msgstr ""
"astar.connect_points(1, 2, false)\n"
"[/codeblock]"
-#: doc/classes/AStar.xml
+#: doc/classes/AStar.xml doc/classes/AStar2D.xml
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[/"
@@ -10546,13 +10575,13 @@ msgstr ""
#: doc/classes/AStar.xml doc/classes/AStar2D.xml
msgid ""
"Returns the position of the point associated with the given [code]id[/code]."
-msgstr "返回与给定[code]id[/code]相关è”的点的ä½ç½®ã€‚"
+msgstr "返回与给定 [code]id[/code] 相关è”的点的ä½ç½®ã€‚"
#: doc/classes/AStar.xml doc/classes/AStar2D.xml
msgid ""
"Returns the weight scale of the point associated with the given [code]id[/"
"code]."
-msgstr "返回与给定[code]id[/code]å…³è”的点的æƒé‡æ¯”例。"
+msgstr "返回与给定 [code]id[/code] å…³è”的点的æƒé‡æ¯”例。"
#: doc/classes/AStar.xml doc/classes/AStar2D.xml
msgid "Returns an array of all points."
@@ -10561,7 +10590,7 @@ msgstr "返回所有点的数组。"
#: doc/classes/AStar.xml doc/classes/AStar2D.xml
msgid ""
"Returns whether a point associated with the given [code]id[/code] exists."
-msgstr "返回与给定[code]id[/code]相关è”的点是å¦å­˜åœ¨ã€‚"
+msgstr "返回与给定 [code]id[/code] 相关è”的点是å¦å­˜åœ¨ã€‚"
#: doc/classes/AStar.xml doc/classes/AStar2D.xml
msgid ""
@@ -10573,7 +10602,7 @@ msgstr "返回是å¦ç¦ç”¨ç‚¹ä»¥è¿›è¡Œå¯»è·¯ã€‚默认情况下,所有点å‡å¤„
msgid ""
"Removes the point associated with the given [code]id[/code] from the points "
"pool."
-msgstr "从积分池中删除与给定[code]id[/code]å…³è”的积分。"
+msgstr "从点池中删除与给定 [code]id[/code] å…³è”的点。"
#: doc/classes/AStar.xml doc/classes/AStar2D.xml
msgid ""
@@ -10581,8 +10610,8 @@ msgid ""
"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 ""
-"在内部为[code]num_nodes[/code]个点ä¿ç•™ç©ºé—´ï¼Œå¦‚æžœæ‚¨ä¸€æ¬¡è¦æ·»åŠ ä¸€ä¸ªå·²çŸ¥çš„å¤§é‡ç‚¹"
-"(例如对于一个网格),则很有用。新容é‡å¿…须大于或等于旧容é‡ã€‚"
+"在内部为 [code]num_nodes[/code] 个点ä¿ç•™ç©ºé—´ï¼Œå¦‚果你想è¦ä¸€æ¬¡æ€§æ·»åР大é‡çš„点且"
+"æ•°é‡å·²çŸ¥ï¼ˆä¾‹å¦‚网格),那么就会很有用。新容é‡å¿…须大于或等于旧容é‡ã€‚"
#: doc/classes/AStar.xml doc/classes/AStar2D.xml
msgid ""
@@ -10593,7 +10622,7 @@ msgstr "ç¦ç”¨æˆ–å¯ç”¨æŒ‡å®šç‚¹çš„寻路功能。用于制作临时障ç¢ç‰©ã€‚
#: doc/classes/AStar.xml doc/classes/AStar2D.xml
msgid ""
"Sets the [code]position[/code] for the point with the given [code]id[/code]."
-msgstr "为具有给定[code]id[/code]的点设置[code]position[/code]。"
+msgstr "为具有给定 [code]id[/code] 的点设置ä½ç½® [code]position[/code]。"
#: doc/classes/AStar.xml doc/classes/AStar2D.xml
msgid ""
@@ -10602,13 +10631,13 @@ 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]的结果。"
+"为给定的 [code]id[/code] 的点设置 [code]weight_scale[/code]。在确定从邻接点到"
+"è¿™ä¸ªç‚¹çš„ä¸€æ®µè·¯ç¨‹çš„æ€»æˆæœ¬æ—¶ï¼Œ[code]weight_scale[/code] è¦ä¹˜ä»¥ [method "
+"_compute_cost] 的结果。"
#: doc/classes/AStar2D.xml
msgid "AStar class representation that uses 2D vectors as edges."
-msgstr "使用二维å‘é‡ä½œä¸ºè¾¹ç¼˜çš„AStar类表示。"
+msgstr "使用 2D å‘é‡ä½œä¸ºè¾¹ç¼˜çš„ AStar 类表示。"
#: doc/classes/AStar2D.xml
msgid ""
@@ -10663,8 +10692,14 @@ msgstr ""
"如果已ç»å­˜åœ¨ä¸€ä¸ªç»™å®š [code]id[/code] 的点,它的ä½ç½®å’Œæƒé‡å°†è¢«æ›´æ–°ä¸ºç»™å®šå€¼ã€‚"
#: doc/classes/AStar2D.xml
-msgid "Returns whether there is a connection/segment between the given points."
-msgstr "è¿”å›žç»™å®šç‚¹ä¹‹é—´æ˜¯å¦æœ‰è¿žæŽ¥/分割。"
+msgid ""
+"Returns whether there is a connection/segment between the given points. 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 ""
+"返回两个给定点之间是å¦å­˜åœ¨è¿žæŽ¥/线段。如果 [code]bidirectional[/code] 为 "
+"[code]false[/code],则返回是å¦å¯ä»¥é€šè¿‡æ­¤æ®µä»Ž [code]id[/code] 到 [code]to_id[/"
+"code] 进行移动。"
#: doc/classes/AStar2D.xml
msgid ""
@@ -10681,7 +10716,7 @@ msgstr ""
"在给定的点之间创建一个分段。如果 [code]bidirectional[/code] 为 [code]false[/"
"code],则åªå…许从 [code]id[/code] 到 [code]to_id[/code] 之间的移动,ä¸å…许å"
"æ–¹å‘移动。\n"
-"(codeblock)\n"
+"[codeblock]\n"
"var astar = AStar2D.new()\n"
"astar.add_point(1, Vector2(1, 1))\n"
"astar.add_point(2, Vector2(0, 5))\n"
@@ -10689,10 +10724,6 @@ msgstr ""
"[/codeblock]"
#: doc/classes/AStar2D.xml
-msgid "Deletes the segment between the given points."
-msgstr "删除给定点之间的线段。"
-
-#: doc/classes/AStar2D.xml
msgid ""
"Returns the closest position to [code]to_position[/code] that resides inside "
"a segment between two connected points.\n"
@@ -10827,16 +10858,16 @@ 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]标志被忽略。"
+"[Texture] 资æºï¼Œç”± [member region] 定义,è£å‰ªå‡º [member atlas] 纹ç†çš„一个部"
+"分。主è¦çš„用例是从纹ç†å›¾é›†ä¸­è£å‰ªå‡ºçº¹ç†ï¼Œä¸€ä¸ªå¤§çš„çº¹ç†æ–‡ä»¶ï¼ŒåŒ…å«äº†å¤šä¸ªè¾ƒå°çš„纹"
+"ç†ã€‚ç”± [member atlas] çš„ [Texture]ã€å®šä¹‰ä½¿ç”¨ [member atlas] 区域的 [member "
+"region] 和定义边界宽度的 [member margin] 组æˆã€‚\n"
+"[AtlasTexture] ä¸èƒ½åœ¨ [AnimatedTexture] 中使用,ä¸èƒ½åœ¨ [TextureRect] 等节点中"
+"平铺,如果在其他 [AtlasTexture] 资æºå†…部使用,将ä¸èƒ½æ­£å¸¸å·¥ä½œã€‚多个"
+"[AtlasTexture] 资æºå¯ä»¥ç”¨æ¥è£å‰ªå›¾é›†ä¸­çš„多个纹ç†ã€‚ä¸Žä½¿ç”¨å¤šä¸ªå°æ–‡ä»¶ç›¸æ¯”,使用一"
+"个纹ç†å›¾é›†æœ‰åŠ©äºŽä¼˜åŒ–è§†é¢‘å†…å­˜æ¶ˆè€—å’Œæ¸²æŸ“è°ƒç”¨ã€‚\n"
+"[b]注æ„:[/b]AtlasTexture 䏿”¯æŒé‡å¤ã€‚当使用 AtlasTexture 时,[constant "
+"Texture.FLAG_REPEAT] 和 [constant Texture.FLAG_MIRRORED_REPEAT] 标志被忽略。"
#: doc/classes/AtlasTexture.xml
msgid "The texture that contains the atlas. Can be any [Texture] subtype."
@@ -10907,7 +10938,8 @@ 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 ""
-"以分è´ä¸ºå•ä½çš„æ”¾å¤§é‡ã€‚正值使声音更å“亮,负值使声音更安é™ã€‚数值范围从-80到24。"
+"以分è´ä¸ºå•ä½çš„æ”¾å¤§é‡ã€‚正值使声音更å“亮,负值使声音更安é™ã€‚数值范围从 -80 到 "
+"24。"
#: doc/classes/AudioEffectBandLimitFilter.xml
msgid "Adds a band limit filter to the audio bus."
@@ -10918,8 +10950,8 @@ msgid ""
"Limits the frequencies in a range around the [member AudioEffectFilter."
"cutoff_hz] and allows frequencies outside of this range to pass."
msgstr ""
-"é™åˆ¶[member AudioEffectFilter.cutoff_hz]周围范围内的频率,å…许这个范围外的频"
-"率通过。"
+"é™åˆ¶ [member AudioEffectFilter.cutoff_hz] 周围范围内的频率,å…许这个范围外的"
+"频率通过。"
#: doc/classes/AudioEffectBandPassFilter.xml
msgid "Adds a band pass filter to the audio bus."
@@ -10930,8 +10962,8 @@ msgid ""
"Attenuates the frequencies inside of a range around the [member "
"AudioEffectFilter.cutoff_hz] and cuts frequencies outside of this band."
msgstr ""
-"è¡°å‡[member AudioEffectFilter.cutoff_hz]周围范围内的频率,并切断这个频段之外"
-"的频率。"
+"è¡°å‡ [member AudioEffectFilter.cutoff_hz] 周围范围内的频率,并切断这个频段之"
+"外的频率。"
#: doc/classes/AudioEffectCapture.xml
msgid "Captures audio from an audio bus in real-time."
@@ -10944,12 +10976,15 @@ msgid ""
"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."
+"transmit audio over the network. When capturing audio data from a "
+"microphone, the format of the samples will be stereo 32-bit floating point "
+"PCM."
msgstr ""
-"音频效果æ•获是一ç§éŸ³é¢‘效果,å¯å°†æ‰€é™„音频效果总线的所有音频帧å¤åˆ¶åˆ°å…¶å†…部环缓"
-"冲器中。\n"
-"应用程åºä»£ç åº”使用 [method get_buffer]从该环缓冲器中消耗这些音频帧,并根æ®éœ€"
-"è¦è¿›è¡Œå¤„ç†ï¼Œä¾‹å¦‚从麦克风æ•获数æ®ã€å®žçŽ°åº”ç”¨ç¨‹åºå®šä¹‰çš„æ•ˆæžœæˆ–通过网络传输音频。"
+"AudioEffectCapture æ˜¯ä¸€ç§ AudioEffect,å¯å°†æ‰€é™„音频效果总线的所有音频帧å¤åˆ¶åˆ°"
+"其内部的环形缓冲器中。\n"
+"应用程åºä»£ç åº”使用 [method get_buffer] 从该环形缓冲器中消耗这些音频帧,并根æ®"
+"需è¦è¿›è¡Œå¤„ç†ï¼Œä¾‹å¦‚从麦克风æ•获数æ®ã€å®žçŽ°åº”ç”¨ç¨‹åºå®šä¹‰çš„æ•ˆæžœæˆ–通过网络传输音"
+"频。从麦克风æ•èŽ·éŸ³é¢‘æ•°æ®æ—¶ï¼Œæ ·æœ¬çš„æ ¼å¼ä¸ºç«‹ä½“声 32 使µ®ç‚¹æ•° PCM。"
#: doc/classes/AudioEffectCapture.xml
msgid ""
@@ -11073,9 +11108,9 @@ msgid ""
"punchy."
msgstr ""
"动æ€èŒƒå›´åŽ‹ç¼©å™¨åœ¨æŒ¯å¹…è¶…è¿‡ä¸€å®šçš„é˜ˆå€¼ï¼ˆä»¥åˆ†è´ä¸ºå•ä½ï¼‰æ—¶ï¼Œé™ä½Žå£°éŸ³çš„电平。压缩器"
-"的主è¦ç”¨é€”之一是通过尽å¯èƒ½å°‘的削波(当声音超过0dB时)æ¥å¢žåŠ åŠ¨æ€èŒƒå›´ã€‚\n"
+"的主è¦ç”¨é€”之一是通过尽å¯èƒ½å°‘的削波(当声音超过 0dB 时)æ¥å¢žåŠ åŠ¨æ€èŒƒå›´ã€‚\n"
"压缩器在混音中的用途很多。\n"
-"- 在主总线上压缩整个输出(虽然[AudioEffectLimiter]å¯èƒ½æ›´å¥½äº›ï¼‰ã€‚\n"
+"- 在主总线上压缩整个输出(虽然 [AudioEffectLimiter] å¯èƒ½æ›´å¥½äº›ï¼‰ã€‚\n"
"- 在声音通é“中,以确ä¿å®ƒä»¬å¬èµ·æ¥å°½å¯èƒ½çš„平衡。\n"
"- 侧链。这å¯ä»¥é™ä½Žä¸Žå¦ä¸€æ¡éŸ³é¢‘æ€»çº¿ä¾§é“¾çš„å£°éŸ³çº§åˆ«ï¼Œä»¥è¿›è¡Œé˜ˆå€¼æ£€æµ‹ã€‚è¿™ç§æŠ€æœ¯åœ¨"
"è§†é¢‘æ¸¸æˆæ··éŸ³ä¸­å¾ˆå¸¸è§ï¼Œä»¥éŸ³ä¹å’ŒSFX的级别,从而声音被å¬åˆ°ã€‚\n"
@@ -11085,7 +11120,8 @@ msgstr ""
msgid ""
"Compressor's reaction time when the signal exceeds the threshold, in "
"microseconds. Value can range from 20 to 2000."
-msgstr "当信å·è¶…过阈值时,压缩器的å应时间,以微秒为å•ä½ã€‚数值范围从20到2000。"
+msgstr ""
+"当信å·è¶…过阈值时,压缩器的å应时间,以微秒为å•ä½ã€‚数值范围从 20 到 2000。"
#: doc/classes/AudioEffectCompressor.xml
msgid "Gain applied to the output signal."
@@ -11095,7 +11131,8 @@ msgstr "应用于输出信å·çš„增益。"
msgid ""
"Balance between original signal and effect signal. Value can range from 0 "
"(totally dry) to 1 (totally wet)."
-msgstr "原始信å·å’Œæ•ˆæžœä¿¡å·ä¹‹é—´çš„平衡。数值范围从0(完全干燥)到1(完全浸润)。"
+msgstr ""
+"原始信å·å’Œæ•ˆæžœä¿¡å·ä¹‹é—´çš„平衡。数值范围从 0(完全干燥)到 1(完全浸润)。"
#: doc/classes/AudioEffectCompressor.xml
msgid ""
@@ -11104,7 +11141,7 @@ msgid ""
"compressed. Value can range from 1 to 48."
msgstr ""
"音频通过阈值级别åŽï¼Œåº”用于音频的压缩é‡ã€‚比率越高,音频的大声部分将被压缩。数"
-"值范围从1到48。"
+"值范围从 1 到 48。"
#: doc/classes/AudioEffectCompressor.xml
msgid ""
@@ -11122,7 +11159,7 @@ msgstr "使用å¦ä¸€æ¡éŸ³é¢‘总线进行阈值检测,é™ä½Žå£°éŸ³çº§åˆ«ã€‚"
msgid ""
"The level above which compression is applied to the audio. Value can range "
"from -60 to 0."
-msgstr "对音频进行压缩的级别。数值范围从-60到0。"
+msgstr "对音频进行压缩的级别。数值范围从 -60 到 0。"
#: doc/classes/AudioEffectDelay.xml
msgid ""
@@ -11151,7 +11188,7 @@ msgstr "原始声音的输出百分比。为 0 时,åªè¾“出延迟的声音。
#: doc/classes/AudioEffectDelay.xml
msgid "If [code]true[/code], feedback is enabled."
-msgstr "如果[code]true[/code],则å¯ç”¨å馈。"
+msgstr "如果为 [code]true[/code],则å¯ç”¨å馈。"
#: doc/classes/AudioEffectDelay.xml
msgid "Feedback delay time in milliseconds."
@@ -11184,7 +11221,7 @@ msgstr ""
#: doc/classes/AudioEffectDelay.xml
msgid "If [code]true[/code], [code]tap2[/code] will be enabled."
-msgstr "如果[code]true[/code],将å¯ç”¨[code]tap2[/code]。"
+msgstr "如果为 [code]true[/code],将å¯ç”¨[code]tap2[/code]。"
#: doc/classes/AudioEffectDelay.xml
msgid "[b]Tap2[/b] delay time in milliseconds."
@@ -11237,7 +11274,7 @@ 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 ""
-"高通滤波器,å•ä½ä¸ºHz。高于此值的频率ä¸ä¼šå—到失真的影å“。该值的范围为1至"
+"高通滤波器,å•ä½ä¸º Hz。高于此值的频率ä¸ä¼šå—到失真的影å“。该值的范围为 1 至 "
"20000。"
#: doc/classes/AudioEffectDistortion.xml
@@ -11248,13 +11285,13 @@ msgstr "失真类型."
msgid ""
"Increases or decreases the volume after the effect. Value can range from -80 "
"to 24."
-msgstr "增加或å‡å°‘效果åŽçš„音é‡ã€‚数值范围从-80到24。"
+msgstr "增加或å‡å°‘效果åŽçš„音é‡ã€‚数值范围从 -80 到 24。"
#: doc/classes/AudioEffectDistortion.xml
msgid ""
"Increases or decreases the volume before the effect. Value can range from "
"-60 to 60."
-msgstr "增加或å‡å°‘效果å‰çš„音é‡ã€‚值的范围为-60至60。"
+msgstr "增加或å‡å°‘效果å‰çš„音é‡ã€‚值的范围为 -60 至 60。"
#: doc/classes/AudioEffectDistortion.xml
msgid ""
@@ -11287,7 +11324,7 @@ msgid ""
"or [AudioEffectEQ21] don't fit your needs."
msgstr ""
"音频å‡è¡¡å™¨çš„基础类。让你å¯ä»¥æŽ§åˆ¶é¢‘率。\n"
-"如果 [AudioEffectEQ6], [AudioEffectEQ10] 或 [AudioEffectEQ21]ä¸ç¬¦åˆæ‚¨çš„需求,"
+"如果 [AudioEffectEQ6]ã€[AudioEffectEQ10] 或 [AudioEffectEQ21]ä¸ç¬¦åˆæ‚¨çš„需求,"
"请使用它æ¥åˆ›å»ºä¸€ä¸ªè‡ªå®šä¹‰å‡è¡¡å™¨ã€‚"
#: doc/classes/AudioEffectEQ.xml
@@ -11309,11 +11346,11 @@ msgstr "返回å‡è¡¡å™¨çš„频段数。"
#: doc/classes/AudioEffectEQ.xml
msgid "Returns the band's gain at the specified index, in dB."
-msgstr "返回指定索引处的波段增益,å•ä½ä¸ºdB。"
+msgstr "返回指定索引处的波段增益,å•ä½ä¸º dB。"
#: doc/classes/AudioEffectEQ.xml
msgid "Sets band's gain at the specified index, in dB."
-msgstr "设置指定索引处的波段增益,å•ä½ä¸ºdB。"
+msgstr "设置指定索引处的波段增益,å•ä½ä¸º dB。"
#: doc/classes/AudioEffectEQ10.xml
msgid ""
@@ -11446,11 +11483,11 @@ msgstr "为音频总线添加一个滤波器。"
#: doc/classes/AudioEffectFilter.xml
msgid "Allows frequencies other than the [member cutoff_hz] to pass."
-msgstr "å…许通过[member cutoff_hz]以外的频率。"
+msgstr "å…许通过 [member cutoff_hz] 以外的频率。"
#: doc/classes/AudioEffectFilter.xml
msgid "Threshold frequency for the filter, in Hz."
-msgstr "滤波器的阈值频率,å•ä½ä¸ºHz。"
+msgstr "滤波器的阈值频率,å•ä½ä¸º Hz。"
#: doc/classes/AudioEffectFilter.xml
msgid "Gain amount of the frequencies after the filter."
@@ -11469,11 +11506,11 @@ msgid ""
"Cuts frequencies lower than the [member AudioEffectFilter.cutoff_hz] and "
"allows higher frequencies to pass."
msgstr ""
-"å‰Šå‡æ¯”[member AudioEffectFilter.cutoff_hz]更低的频率,å…许更高的频率通过。"
+"å‰Šå‡æ¯” [member AudioEffectFilter.cutoff_hz] 更低的频率,å…许更高的频率通过。"
#: doc/classes/AudioEffectHighShelfFilter.xml
msgid "Reduces all frequencies above the [member AudioEffectFilter.cutoff_hz]."
-msgstr "é™ä½Žæ‰€æœ‰é«˜äºŽ[member AudioEffectFilter.cutoff_hz]的频率。"
+msgstr "é™ä½Žæ‰€æœ‰é«˜äºŽ [member AudioEffectFilter.cutoff_hz] 的频率。"
#: doc/classes/AudioEffectLimiter.xml
msgid "Adds a soft-clip limiter audio effect to an Audio bus."
@@ -11488,8 +11525,8 @@ msgid ""
"and progressively increases its effect as the input level increases such "
"that the threshold is never exceeded."
msgstr ""
-"é™åˆ¶å™¨ç±»ä¼¼äºŽåŽ‹ç¼©å™¨ï¼Œä½†çµæ´»æ€§è¾ƒå·®ï¼Œå¹¶ä¸”设计为ä¸å…许声音超过给定的dB阈值。始终"
-"建议在主总线中添加一个以å‡å°‘削波的影å“。\n"
+"é™åˆ¶å™¨ç±»ä¼¼äºŽåŽ‹ç¼©å™¨ï¼Œä½†çµæ´»æ€§è¾ƒå·®ï¼Œå¹¶ä¸”设计为ä¸å…许声音超过给定的 dB 阈值。始"
+"终建议在主总线中添加一个以å‡å°‘削波的影å“。\n"
"软削波开始将峰值é™ä½Žåˆ°ç•¥ä½ŽäºŽé˜ˆå€¼æ°´å¹³ï¼Œå¹¶éšç€è¾“å…¥æ°´å¹³çš„å¢žåŠ è€Œé€æ¸å¢žå¼ºå…¶æ•ˆæžœï¼Œ"
"从而永ä¸è¶…过阈值。"
@@ -11497,19 +11534,19 @@ msgstr ""
msgid ""
"The waveform's maximum allowed value, in decibels. Value can range from -20 "
"to -0.1."
-msgstr "波形的最大å…许值,å•使˜¯åˆ†è´ã€‚数值范围从-20到-0.1。"
+msgstr "波形的最大å…许值,å•使˜¯åˆ†è´ã€‚数值范围从 -20 到 -0.1。"
#: doc/classes/AudioEffectLimiter.xml
msgid ""
"Applies a gain to the limited waves, in decibels. Value can range from 0 to "
"6."
-msgstr "将增益应用于有é™çš„æ³¢ï¼Œä»¥åˆ†è´ä¸ºå•ä½ã€‚å–值范围是0到6。"
+msgstr "将增益应用于有é™çš„æ³¢ï¼Œä»¥åˆ†è´ä¸ºå•ä½ã€‚å–值范围是 0 到 6。"
#: doc/classes/AudioEffectLimiter.xml
msgid ""
"Threshold from which the limiter begins to be active, in decibels. Value can "
"range from -30 to 0."
-msgstr "é™åˆ¶å™¨å¼€å§‹ç”Ÿæ•ˆçš„阈值,以分è´ä¸ºå•ä½ã€‚值的范围å¯ä»¥ä»Ž-30到0。"
+msgstr "é™åˆ¶å™¨å¼€å§‹ç”Ÿæ•ˆçš„阈值,以分è´ä¸ºå•ä½ã€‚值的范围å¯ä»¥ä»Ž -30 到 0。"
#: doc/classes/AudioEffectLowPassFilter.xml
msgid "Adds a low-pass filter to the Audio bus."
@@ -11520,11 +11557,11 @@ msgid ""
"Cuts frequencies higher than the [member AudioEffectFilter.cutoff_hz] and "
"allows lower frequencies to pass."
msgstr ""
-"å‰Šå‡æ¯”[member AudioEffectFilter.cutoff_hz]更低的频率,å…许更高的频率通过。"
+"å‰Šå‡æ¯” [member AudioEffectFilter.cutoff_hz] 更低的频率,å…许更高的频率通过。"
#: doc/classes/AudioEffectLowShelfFilter.xml
msgid "Reduces all frequencies below the [member AudioEffectFilter.cutoff_hz]."
-msgstr "é™ä½Ž[member AudioEffectFilter.cutoff_hz]以下的所有频率。"
+msgstr "é™ä½Ž [member AudioEffectFilter.cutoff_hz] 以下的所有频率。"
#: doc/classes/AudioEffectNotchFilter.xml
msgid "Adds a notch filter to the Audio bus."
@@ -11535,8 +11572,8 @@ msgid ""
"Attenuates frequencies in a narrow band around the [member AudioEffectFilter."
"cutoff_hz] and cuts frequencies outside of this range."
msgstr ""
-"è¡°å‡[member AudioEffectFilter.cutoff_hz]周围窄带的频率,并切断这个范围以外的"
-"频率。"
+"è¡°å‡ [member AudioEffectFilter.cutoff_hz] 周围窄带的频率,并切断这个范围以外"
+"的频率。"
#: doc/classes/AudioEffectPanner.xml
msgid "Adds a panner audio effect to an Audio bus. Pans sound left or right."
@@ -11549,7 +11586,7 @@ msgstr "决定å‘左峿€»çº¿å‘é€çš„音频信å·é‡ã€‚"
#: doc/classes/AudioEffectPanner.xml
msgid "Pan position. Value can range from -1 (fully left) to 1 (fully right)."
-msgstr "平移ä½ç½®ã€‚值的范围å¯ä»¥ä»Ž-1(完全左)到1(完全å³ï¼‰ã€‚"
+msgstr "平移ä½ç½®ã€‚值的范围å¯ä»¥ä»Ž -1(完全左)到1(完全å³ï¼‰ã€‚"
#: doc/classes/AudioEffectPhaser.xml
msgid ""
@@ -11573,29 +11610,29 @@ msgid ""
"can range from 0.1 to 4."
msgstr ""
"控制滤波器频率扫æçš„频率。较低的值将主è¦å½±å“低音频率。高值å¯ä»¥æŽ¨é«˜é«˜éŸ³ã€‚值的"
-"范围å¯ä»¥ä»Ž0.1到4。"
+"范围å¯ä»¥ä»Ž 0.1 到 4。"
#: doc/classes/AudioEffectPhaser.xml
msgid "Output percent of modified sound. Value can range from 0.1 to 0.9."
-msgstr "修改åŽå£°éŸ³çš„输出百分比。数值范围从0.1到0.9。"
+msgstr "修改åŽå£°éŸ³çš„输出百分比。数值范围从 0.1 到 0.9。"
#: doc/classes/AudioEffectPhaser.xml
msgid ""
"Determines the maximum frequency affected by the LFO modulations, in Hz. "
"Value can range from 10 to 10000."
-msgstr "å†³å®šå— LFO 调制影å“的最大频率,å•ä½ä¸º Hz。数值范围为10-10000。"
+msgstr "å†³å®šå— LFO 调制影å“的最大频率,å•ä½ä¸º Hz。数值范围为 10-10000。"
#: doc/classes/AudioEffectPhaser.xml
msgid ""
"Determines the minimum frequency affected by the LFO modulations, in Hz. "
"Value can range from 10 to 10000."
-msgstr "å†³å®šå— LFO 调制影å“的最å°é¢‘率,å•ä½ä¸º Hz。数值范围为10-10000。"
+msgstr "å†³å®šå— LFO 调制影å“的最å°é¢‘率,å•ä½ä¸º Hz。数值范围为 10-10000。"
#: doc/classes/AudioEffectPhaser.xml
msgid ""
"Adjusts the rate in Hz at which the effect sweeps up and down across the "
"frequency range."
-msgstr "以Hz为å•ä½è°ƒæ•´æ•ˆæžœåœ¨æ•´ä¸ªé¢‘率范围内上下扫æçš„速度。"
+msgstr "以 Hz 为å•ä½è°ƒæ•´æ•ˆæžœåœ¨æ•´ä¸ªé¢‘率范围内上下扫æçš„速度。"
#: doc/classes/AudioEffectPitchShift.xml
msgid ""
@@ -11629,8 +11666,8 @@ msgid ""
"are more demanding on the CPU and may cause audio cracking if the CPU can't "
"keep up."
msgstr ""
-"è¦ä½¿ç”¨çš„è¿‡é‡‡æ ·ç³»æ•°ã€‚æ›´é«˜çš„å€¼ä¼šå¸¦æ¥æ›´å¥½çš„è´¨é‡ï¼Œä½†å¯¹CPUçš„è¦æ±‚更高,如果CPUè·Ÿä¸"
-"上,å¯èƒ½ä¼šå¯¼è‡´éŸ³é¢‘破裂。"
+"è¦ä½¿ç”¨çš„è¿‡é‡‡æ ·ç³»æ•°ã€‚æ›´é«˜çš„å€¼ä¼šå¸¦æ¥æ›´å¥½çš„è´¨é‡ï¼Œä½†å¯¹ CPU çš„è¦æ±‚更高,如果 CPU "
+"è·Ÿä¸ä¸Šï¼Œå¯èƒ½ä¼šå¯¼è‡´éŸ³é¢‘破裂。"
#: doc/classes/AudioEffectPitchShift.xml
msgid ""
@@ -11689,7 +11726,7 @@ msgstr ""
#: doc/classes/AudioEffectPitchShift.xml
#: doc/classes/AudioEffectSpectrumAnalyzer.xml
msgid "Represents the size of the [enum FFT_Size] enum."
-msgstr "表示[enum FFT_Size]枚举的大å°ã€‚"
+msgstr "表示 [enum FFT_Size] 枚举的大å°ã€‚"
#: doc/classes/AudioEffectRecord.xml
msgid "Audio effect used for recording the sound from an audio bus."
@@ -11727,14 +11764,15 @@ msgid ""
"If [code]true[/code], the sound will be recorded. Note that restarting the "
"recording will remove the previously recorded sample."
msgstr ""
-"如果[code]true[/code],将录制声音。请注æ„ï¼Œé‡æ–°å¼€å§‹å½•音将删除先å‰å½•音的样本。"
+"如果为 [code]true[/code],将录制声音。请注æ„ï¼Œé‡æ–°å¼€å§‹å½•音将删除先å‰å½•音的样"
+"本。"
#: doc/classes/AudioEffectRecord.xml
msgid ""
"Specifies the format in which the sample will be recorded. See [enum "
"AudioStreamSample.Format] for available formats."
msgstr ""
-"指定录音样本的格å¼ã€‚请å‚阅[enum AudioStreamSample.Format]了解å¯ç”¨çš„æ ¼å¼ã€‚"
+"指定录音样本的格å¼ã€‚请å‚阅 [enum AudioStreamSample.Format] 了解å¯ç”¨çš„æ ¼å¼ã€‚"
#: doc/classes/AudioEffectReverb.xml
msgid ""
@@ -11755,7 +11793,7 @@ msgstr "模拟ä¸åŒå¤§å°çš„æˆ¿é—´ã€‚其傿•°å¯ä»¥è°ƒæ•´ï¼Œä»¥æ¨¡æ‹Ÿç‰¹å®šæˆ¿
msgid ""
"Defines how reflective the imaginary room's walls are. Value can range from "
"0 to 1."
-msgstr "定义虚拟房间墙å£çš„å射程度。值的范围是0到1。"
+msgstr "定义虚拟房间墙å£çš„å射程度。值的范围是 0 到 1。"
#: doc/classes/AudioEffectReverb.xml
msgid ""
@@ -11770,11 +11808,11 @@ msgid ""
"cutoff frequency. Value can range from 0 to 1."
msgstr ""
"高通滤波器通过频率高于æŸä¸€æˆªæ­¢é¢‘率的信å·ï¼Œè¡°å‡é¢‘率低于截止频率的信å·ã€‚数值范"
-"围为0~1。"
+"围为 0 到 1。"
#: doc/classes/AudioEffectReverb.xml
msgid "Output percent of predelay. Value can range from 0 to 1."
-msgstr "预延迟的输出百分比。数值范围为0~1。"
+msgstr "预延迟的输出百分比。数值范围为 0 到 1。"
#: doc/classes/AudioEffectReverb.xml
msgid ""
@@ -11786,13 +11824,13 @@ msgstr "原始信å·ä¸Žæ··å“ä¿¡å·æ—©æœŸå射之间的时间,以毫秒为å•
msgid ""
"Dimensions of simulated room. Bigger means more echoes. Value can range from "
"0 to 1."
-msgstr "模拟房间的尺寸。越大表示回声越多。值的范围å¯ä»¥ä»Ž0到1。"
+msgstr "模拟房间的尺寸。越大表示回声越多。值的范围å¯ä»¥ä»Ž 0 到 1。"
#: doc/classes/AudioEffectReverb.xml
msgid ""
"Widens or narrows the stereo image of the reverb tail. 1 means fully widens. "
"Value can range from 0 to 1."
-msgstr "æ‰©å¤§æˆ–ç¼©å°æ··å“尾音的立体声图åƒã€‚1表示完全扩大。值的范围是0到1。"
+msgstr "æ‰©å¤§æˆ–ç¼©å°æ··å“尾音的立体声图åƒã€‚1 表示完全扩大。值的范围是 0 到 1。"
#: doc/classes/AudioEffectReverb.xml
msgid ""
@@ -11823,7 +11861,7 @@ msgstr "音频频谱演示"
#: doc/classes/AudioStreamGenerator.xml
#: doc/classes/AudioStreamGeneratorPlayback.xml
msgid "Godot 3.2 will get new audio features"
-msgstr "Godot 3.2将获得新的音频功能"
+msgstr "Godot 3.2 将获得新的音频功能"
#: doc/classes/AudioEffectSpectrumAnalyzer.xml
msgid ""
@@ -11863,7 +11901,7 @@ msgid ""
"charge of creating sample data (playable audio) as well as its playback via "
"a voice interface."
msgstr ""
-"[AudioServer]是一个音频访问的低级æœåŠ¡å™¨æŽ¥å£ã€‚它负责创建样本数æ®ï¼ˆå¯æ’­æ”¾çš„音"
+"[AudioServer] 是用于音频访问的底层æœåŠ¡å™¨æŽ¥å£ã€‚它负责创建样本数æ®ï¼ˆå¯æ’­æ”¾çš„音"
"频)以åŠé€šè¿‡è¯­éŸ³æŽ¥å£è¿›è¡Œæ’­æ”¾ã€‚"
#: doc/classes/AudioServer.xml doc/classes/AudioStreamPlayer.xml
@@ -11888,19 +11926,19 @@ msgstr "返回系统上检测到的所有音频输入设备的å称。"
#: doc/classes/AudioServer.xml
msgid "Generates an [AudioBusLayout] using the available buses and effects."
-msgstr "使用å¯ç”¨çš„æ€»çº¿å’Œæ•ˆæžœç”Ÿæˆ[AudioBusLayout]。"
+msgstr "使用å¯ç”¨çš„æ€»çº¿å’Œæ•ˆæžœæ¥ç”Ÿæˆ [AudioBusLayout]。"
#: doc/classes/AudioServer.xml
msgid ""
"Returns the amount of channels of the bus at index [code]bus_idx[/code]."
-msgstr "返回索引为[code]bus_idx[/code]çš„æ€»çº¿é€šé“æ•°ã€‚"
+msgstr "返回索引为 [code]bus_idx[/code] çš„æ€»çº¿çš„é€šé“æ•°ã€‚"
#: doc/classes/AudioServer.xml
msgid ""
"Returns the [AudioEffect] at position [code]effect_idx[/code] in bus "
"[code]bus_idx[/code]."
msgstr ""
-"返回总线 [code]bus_idx[/code] in [code]effect_idx[/code] ä½ç½®çš„ "
+"返回总线 [code]bus_idx[/code] 中ä½äºŽ [code]effect_idx[/code] çš„ "
"[AudioEffect]。"
#: doc/classes/AudioServer.xml
@@ -11912,41 +11950,41 @@ msgid ""
"Returns the [AudioEffectInstance] assigned to the given bus and effect "
"indices (and optionally channel)."
msgstr ""
-"返回分é…给给定总线和效果指数(以åŠå¯é€‰çš„通é“)的[AudioEffectInstance]。"
+"返回分é…给给定总线和效果指数(以åŠå¯é€‰çš„通é“)的 [AudioEffectInstance]。"
#: doc/classes/AudioServer.xml
msgid "Returns the index of the bus with the name [code]bus_name[/code]."
-msgstr "返回å称为[code]bus_name[/code]的总线的索引。"
+msgstr "返回å称为 [code]bus_name[/code] 的总线的索引。"
#: doc/classes/AudioServer.xml
msgid "Returns the name of the bus with the index [code]bus_idx[/code]."
-msgstr "返回索引为 [code]bus_idx[/code] 的总线å称。"
+msgstr "返回索引为 [code]bus_idx[/code] 的总线的å称。"
#: doc/classes/AudioServer.xml
msgid ""
"Returns the peak volume of the left speaker at bus index [code]bus_idx[/"
"code] and channel index [code]channel[/code]."
msgstr ""
-"返回总线索引[code]bus_idx[/code]和通é“索引[code]channel[/code]处左扬声器的峰"
-"值音é‡ã€‚"
+"返回总线索引 [code]bus_idx[/code] 和通é“索引 [code]channel[/code] 处左扬声器"
+"的峰值音é‡ã€‚"
#: doc/classes/AudioServer.xml
msgid ""
"Returns the peak volume of the right speaker at bus index [code]bus_idx[/"
"code] and channel index [code]channel[/code]."
msgstr ""
-"返回总线索引[code]bus_idx[/code]和通é“索引[code]channel[/code]处峿‰¬å£°å™¨çš„å³°"
-"值音é‡ã€‚"
+"返回总线索引 [code]bus_idx[/code] 和通é“索引 [code]channel[/code] 处峿‰¬å£°å™¨"
+"的峰值音é‡ã€‚"
#: doc/classes/AudioServer.xml
msgid ""
"Returns the name of the bus that the bus at index [code]bus_idx[/code] sends "
"to."
-msgstr "返回ä½äºŽç´¢å¼•[code]bus_idx[/code]处的总线所å‘é€çš„æ€»çº¿å称。"
+msgstr "返回ä½äºŽç´¢å¼• [code]bus_idx[/code] 处的总线所å‘é€çš„æ€»çº¿å称。"
#: doc/classes/AudioServer.xml
msgid "Returns the volume of the bus at index [code]bus_idx[/code] in dB."
-msgstr "返回索引[code]bus_idx[/code]处总线的音é‡ï¼Œå•ä½ä¸ºdB。"
+msgstr "返回索引 [code]bus_idx[/code] 处总线的音é‡ï¼Œå•ä½ä¸º dB。"
#: doc/classes/AudioServer.xml
msgid "Returns the names of all audio devices detected on the system."
@@ -11989,13 +12027,13 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid "If [code]true[/code], the bus at index [code]bus_idx[/code] is muted."
-msgstr "如果为 [code]true[/code],则索引[code]bus_idx[/code]处的总线被é™éŸ³ã€‚"
+msgstr "如果为 [code]true[/code],则索引 [code]bus_idx[/code] 处的总线被é™éŸ³ã€‚"
#: doc/classes/AudioServer.xml
msgid ""
"If [code]true[/code], the bus at index [code]bus_idx[/code] is in solo mode."
msgstr ""
-"如果为 [code]true[/code],则索引[code]bus_idx[/code]处的总线处于solo模å¼ã€‚"
+"如果为 [code]true[/code],则索引 [code]bus_idx[/code] å¤„çš„æ€»çº¿å¤„äºŽç‹¬å¥æ¨¡å¼ã€‚"
#: doc/classes/AudioServer.xml
msgid ""
@@ -12008,11 +12046,11 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid ""
"Moves the bus from index [code]index[/code] to index [code]to_index[/code]."
-msgstr "将总线从索引[code]index[/code]移动到索引[code]to_index[/code]。"
+msgstr "将总线从索引 [code]index[/code] 移动到索引 [code]to_index[/code]。"
#: doc/classes/AudioServer.xml
msgid "Removes the bus at index [code]index[/code]."
-msgstr "移除索引[code]index[/code]处的总线。"
+msgstr "移除索引 [code]index[/code] 处的总线。"
#: doc/classes/AudioServer.xml
msgid ""
@@ -12024,12 +12062,12 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid "Overwrites the currently used [AudioBusLayout]."
-msgstr "覆盖当å‰ä½¿ç”¨çš„[AudioBusLayout]。"
+msgstr "覆盖当å‰ä½¿ç”¨çš„ [AudioBusLayout]。"
#: doc/classes/AudioServer.xml
msgid ""
"Sets the name of the bus at index [code]bus_idx[/code] to [code]name[/code]."
-msgstr "将索引[code]bus_idx[/code]处的总线å称设置为[code]name[/code]。"
+msgstr "将索引 [code]bus_idx[/code] 处的总线å称设置为 [code]name[/code]。"
#: doc/classes/AudioServer.xml
msgid ""
@@ -12047,7 +12085,7 @@ msgstr ""
#: doc/classes/AudioServer.xml
msgid "Swaps the position of two effects in bus [code]bus_idx[/code]."
-msgstr "在[code]bus_idx[/code]中交æ¢ä¸¤ä¸ªæ•ˆæžœçš„ä½ç½®ã€‚"
+msgstr "在 [code]bus_idx[/code] 中交æ¢ä¸¤ä¸ªæ•ˆæžœçš„ä½ç½®ã€‚"
#: doc/classes/AudioServer.xml
msgid ""
@@ -12092,11 +12130,12 @@ 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 ""
-"缩放播放音频的速率(å³å°†å…¶è®¾ç½®ä¸º[code]0.5[/code]将使音频播放速度æé«˜ä¸€å€ï¼‰ã€‚"
+"缩放播放音频的速率(å³å°†å…¶è®¾ç½®ä¸º [code]0.5[/code] 将使音频播放速度æé«˜ä¸€"
+"å€ï¼‰ã€‚"
#: doc/classes/AudioServer.xml
msgid "Emitted when the [AudioBusLayout] changes."
-msgstr "当[AudioBusLayout]æ”¹å˜æ—¶å‘出。"
+msgstr "当 [AudioBusLayout] æ”¹å˜æ—¶å‘出。"
#: doc/classes/AudioServer.xml
msgid "Two or fewer speakers were detected."
@@ -12104,15 +12143,15 @@ msgstr "检测到两个或更少的扬声器。"
#: doc/classes/AudioServer.xml
msgid "A 3.1 channel surround setup was detected."
-msgstr "检测到3.1声é“环绕声设置。"
+msgstr "检测到 3.1 声é“环绕声设置。"
#: doc/classes/AudioServer.xml
msgid "A 5.1 channel surround setup was detected."
-msgstr "检测到5.1声é“环绕声设置。"
+msgstr "检测到 5.1 声é“环绕声设置。"
#: doc/classes/AudioServer.xml
msgid "A 7.1 channel surround setup was detected."
-msgstr "检测到7.1声é“环绕声设置。"
+msgstr "检测到 7.1 声é“环绕声设置。"
#: doc/classes/AudioStream.xml
msgid "Base class for audio streams."
@@ -12124,8 +12163,8 @@ msgid ""
"music playback, and support WAV (via [AudioStreamSample]) and OGG (via "
"[AudioStreamOGGVorbis]) file formats."
msgstr ""
-"音频æµçš„基类。音频æµç”¨äºŽå£°éŸ³æ•ˆæžœå’ŒéŸ³ä¹æ’­æ”¾ï¼Œæ”¯æŒ WAV(通过"
-"[AudioStreamSample])和 OGG(通过[AudioStreamOGGVorbis])文件格å¼ã€‚"
+"音频æµçš„基类。音频æµç”¨äºŽå£°éŸ³æ•ˆæžœå’ŒéŸ³ä¹æ’­æ”¾ï¼Œæ”¯æŒ WAV(通过 "
+"[AudioStreamSample])和 OGG(通过 [AudioStreamOGGVorbis])文件格å¼ã€‚"
#: doc/classes/AudioStream.xml doc/classes/AudioStreamPlayer.xml
msgid "Audio streams"
@@ -12157,7 +12196,7 @@ 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 编译的语言中使用此类。如"
@@ -12202,7 +12241,7 @@ msgstr ""
#: doc/classes/AudioStreamGeneratorPlayback.xml
msgid "Plays back audio generated using [AudioStreamGenerator]."
-msgstr "播放使用[AudioStreamGenerator]生æˆçš„音频。"
+msgstr "播放使用 [AudioStreamGenerator] 生æˆçš„音频。"
#: doc/classes/AudioStreamGeneratorPlayback.xml
msgid ""
@@ -12268,7 +12307,7 @@ msgstr "包å«ä»¥å­—节为å•ä½çš„音频数æ®ã€‚"
msgid ""
"If [code]true[/code], the stream will automatically loop when it reaches the "
"end."
-msgstr "如果[code]true[/code],当æµåˆ°è¾¾æœ«å°¾æ—¶å°†è‡ªåŠ¨å¾ªçŽ¯ã€‚"
+msgstr "如果为 [code]true[/code],当æµåˆ°è¾¾æœ«å°¾æ—¶å°†è‡ªåŠ¨å¾ªçŽ¯ã€‚"
#: modules/minimp3/doc_classes/AudioStreamMP3.xml
#: modules/stb_vorbis/doc_classes/AudioStreamOGGVorbis.xml
@@ -12302,8 +12341,8 @@ msgid ""
"[AudioStreamPlayer3D] instead of [AudioStreamPlayer]."
msgstr ""
"以éžä½ç½®æ–¹å¼æ”¯æŒæ’­æ”¾éŸ³é¢‘æµã€‚\n"
-"è¦åœ¨ä½ç½®ä¸Šæ’­æ”¾éŸ³é¢‘,请使用[AudioStreamPlayer2D]或[AudioStreamPlayer3D]è€Œä¸æ˜¯"
-"[AudioStreamPlayer]。"
+"è¦åœ¨ä½ç½®ä¸Šæ’­æ”¾éŸ³é¢‘,请使用 [AudioStreamPlayer2D] 或 [AudioStreamPlayer3D] 而"
+"䏿˜¯ [AudioStreamPlayer]。"
#: doc/classes/AudioStreamPlayer.xml
msgid "Returns the position in the [AudioStream] in seconds."
@@ -12342,7 +12381,7 @@ msgid ""
"If the audio configuration has more than two speakers, this sets the target "
"channels. See [enum MixTarget] constants."
msgstr ""
-"如果音频é…置有两个以上的扬声器,则设置目标通é“。请å‚阅[enum MixTarget]常é‡ã€‚"
+"如果音频é…置有两个以上的扬声器,则设置目标通é“ã€‚è§ [enum MixTarget] 常é‡ã€‚"
#: doc/classes/AudioStreamPlayer.xml doc/classes/AudioStreamPlayer2D.xml
#: doc/classes/AudioStreamPlayer3D.xml
@@ -12354,19 +12393,19 @@ msgstr "音频的音高和节å¥ï¼Œä½œä¸ºéŸ³é¢‘æ ·æœ¬çš„é‡‡æ ·çŽ‡çš„å€æ•°ã€‚"
#: doc/classes/AudioStreamPlayer.xml doc/classes/AudioStreamPlayer2D.xml
#: doc/classes/AudioStreamPlayer3D.xml
msgid "If [code]true[/code], audio is playing."
-msgstr "如果[code]true[/code],则播放音频。"
+msgstr "如果为 [code]true[/code],则播放音频。"
#: doc/classes/AudioStreamPlayer.xml doc/classes/AudioStreamPlayer2D.xml
msgid "The [AudioStream] object to be played."
-msgstr "è¦æ’­æ”¾çš„[AudioStream]对象。"
+msgstr "è¦æ’­æ”¾çš„ [AudioStream] 对象。"
#: doc/classes/AudioStreamPlayer.xml doc/classes/AudioStreamPlayer2D.xml
msgid ""
"If [code]true[/code], the playback is paused. You can resume it by setting "
"[code]stream_paused[/code] to [code]false[/code]."
msgstr ""
-"如果 [code]true[/code]ï¼Œåˆ™æš‚åœæ’­æ”¾ã€‚您å¯ä»¥é€šè¿‡å°† [code]stream_paused[/code] "
-"设置为 [code]false[/code] æ¥æ¢å¤æ’­æ”¾ã€‚"
+"如果为 [code]true[/code]ï¼Œåˆ™æš‚åœæ’­æ”¾ã€‚您å¯ä»¥é€šè¿‡å°† [code]stream_paused[/"
+"code] 设置为 [code]false[/code] æ¥æ¢å¤æ’­æ”¾ã€‚"
#: doc/classes/AudioStreamPlayer.xml
msgid "Volume of sound, in dB."
@@ -12404,10 +12443,10 @@ msgid ""
"audible to human hearing)."
msgstr ""
"播放音频,éšç€ä¸Žå±å¹•中心的è·ç¦»è€Œå‡å¼±ã€‚\n"
-"å‚阅[AudioStreamPlayer]æ¥æ’­æ”¾éžä½ç½®æ€§çš„声音。\n"
-"[b]注æ„:[/b]éšè—一个[AudioStreamPlayer2D]节点并ä¸èƒ½ç¦ç”¨å…¶éŸ³é¢‘è¾“å‡ºã€‚è¦æš‚æ—¶ç¦"
-"用[AudioStreamPlayer2D]的音频输出,请将[member volume_db]设置为一个éžå¸¸ä½Žçš„"
-"值,如[code]-100[/code](人的å¬è§‰å¬ä¸åˆ°ï¼‰ã€‚"
+"å‚阅 [AudioStreamPlayer] æ¥æ’­æ”¾éžä½ç½®æ€§çš„声音。\n"
+"[b]注æ„:[/b]éšè—一个 [AudioStreamPlayer2D] 节点并ä¸èƒ½ç¦ç”¨å…¶éŸ³é¢‘è¾“å‡ºã€‚è¦æš‚æ—¶"
+"ç¦ç”¨ [AudioStreamPlayer2D] 的音频输出,请将 [member volume_db] 设置为一个éžå¸¸"
+"低的值,如[code]-100[/code](人的å¬è§‰å¬ä¸åˆ°ï¼‰ã€‚"
#: doc/classes/AudioStreamPlayer2D.xml doc/classes/AudioStreamPlayer3D.xml
msgid "Returns the position in the [AudioStream]."
@@ -12483,7 +12522,7 @@ msgstr ""
msgid ""
"Returns the [AudioStreamPlayback] object associated with this "
"[AudioStreamPlayer3D]."
-msgstr "返回与该[AudioStreamPlayer3D]相关è”çš„[AudioStreamPlayback]对象。"
+msgstr "返回与这个 [AudioStreamPlayer3D] 相关è”çš„ [AudioStreamPlayback] 对象。"
#: doc/classes/AudioStreamPlayer3D.xml
msgid ""
@@ -12524,7 +12563,7 @@ msgid ""
"If [code]true[/code], audio plays when the AudioStreamPlayer3D node is added "
"to scene tree."
msgstr ""
-"如果 [code]true[/code],则在将 AudioStreamPlayer3D 节点添加到场景树时播放音"
+"如果为 [code]true[/code],则在将 AudioStreamPlayer3D 节点添加到场景树时播放音"
"频。"
#: doc/classes/AudioStreamPlayer3D.xml
@@ -12552,7 +12591,7 @@ msgstr "音频到达相机的角度,ä¸å—è¡°å‡ã€‚"
msgid ""
"If [code]true[/code], the audio should be dampened according to the "
"direction of the sound."
-msgstr "如果[code]true[/code],则应根æ®å£°éŸ³çš„æ–¹å‘对音频进行衰å‡ã€‚"
+msgstr "如果为 [code]true[/code],则应根æ®å£°éŸ³çš„æ–¹å‘对音频进行衰å‡ã€‚"
#: doc/classes/AudioStreamPlayer3D.xml
msgid ""
@@ -12580,15 +12619,15 @@ msgstr "决定当音æºè¶…出 [member max_distance] 范围时,是å¦åº”该暂å
#: doc/classes/AudioStreamPlayer3D.xml
msgid "The [AudioStream] resource to be played."
-msgstr "è¦æ’­æ”¾çš„[AudioStream]资æºã€‚"
+msgstr "è¦æ’­æ”¾çš„ [AudioStream] 资æºã€‚"
#: doc/classes/AudioStreamPlayer3D.xml
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],则播放会暂åœã€‚ä½ å¯ä»¥é€šè¿‡è®¾ç½®[member stream_paused]为 "
-"[code]false[/code]æ¥æ¢å¤å®ƒã€‚"
+"如果为 [code]true[/code],则播放会暂åœã€‚ä½ å¯ä»¥é€šè¿‡å°† [member stream_paused] "
+"设置为 [code]false[/code]æ¥æ¢å¤å®ƒã€‚"
#: doc/classes/AudioStreamPlayer3D.xml
msgid "The base sound level unaffected by dampening, in decibels."
@@ -12620,7 +12659,7 @@ msgid ""
"greater than [code]0.0[/code] to achieve linear attenuation clamped to a "
"sphere of a defined size."
msgstr ""
-"ä¸ä¼šæ ¹æ®è·ç¦»è¡°å‡å“度。与 [AudioStreamPlayer] ä¸åŒï¼Œå£°éŸ³ä»ä¼šåœ¨ä½ç½®ä¸Šè¢«å¬åˆ°ã€‚ "
+"ä¸ä¼šæ ¹æ®è·ç¦»è¡°å‡å“度。与 [AudioStreamPlayer] ä¸åŒï¼Œå£°éŸ³ä»ä¼šåœ¨ä½ç½®ä¸Šè¢«å¬åˆ°ã€‚"
"[constant ATTENUATION_DISABLED] å¯ä»¥ä¸Žå¤§äºŽ [code]0.0[/code] çš„ [member "
"max_distance] 值结åˆä½¿ç”¨ï¼Œä»¥å®žçŽ°çº¿æ€§è¡°å‡ï¼Œé™åˆ¶åœ¨å®šä¹‰çš„çƒä½“大å°ã€‚"
@@ -12666,7 +12705,7 @@ msgstr "æ¯æ¬¡å¼€å§‹æ—¶éšæœºå˜æ¢éŸ³é«˜ã€‚"
#: doc/classes/AudioStreamRandomPitch.xml
msgid "The current [AudioStream]."
-msgstr "当å‰çš„[AudioStream]。"
+msgstr "当å‰çš„ [AudioStream]。"
#: doc/classes/AudioStreamRandomPitch.xml
msgid "The intensity of random pitch variation."
@@ -12674,7 +12713,7 @@ msgstr "éšæœºéŸ³é«˜å˜åŒ–的强度。"
#: doc/classes/AudioStreamSample.xml
msgid "Stores audio data loaded from WAV files."
-msgstr "存储从WAV文件加载的音频数æ®ã€‚"
+msgstr "存储从 WAV 文件加载的音频数æ®ã€‚"
#: doc/classes/AudioStreamSample.xml
msgid ""
@@ -12698,10 +12737,10 @@ msgid ""
"[b]Note:[/b] A [code].wav[/code] extension is automatically appended to "
"[code]path[/code] if it is missing."
msgstr ""
-"å°†AudioStreamSample作为WAV文件ä¿å­˜åˆ°[code]path[/code]。无法ä¿å­˜IMA ADPCMæ ¼å¼"
-"的样本。\n"
-"[b]注æ„:[/b]如果缺少[code].wav[/code]扩展å,则会自动将其附加到[code]path[/"
-"code]。"
+"å°† AudioStreamSample 作为 WAV 文件ä¿å­˜åˆ° [code]path[/code]。无法ä¿å­˜ IMA "
+"ADPCM æ ¼å¼çš„æ ·æœ¬ã€‚\n"
+"[b]注æ„:[/b]如果缺少 [code].wav[/code] 扩展å,则会自动将其附加到 "
+"[code]path[/code]。"
#: doc/classes/AudioStreamSample.xml
msgid ""
@@ -12715,7 +12754,7 @@ msgstr ""
#: doc/classes/AudioStreamSample.xml
msgid "Audio format. See [enum Format] constants for values."
-msgstr "音频格å¼ã€‚å‚阅[enum Format]常é‡çš„值。"
+msgstr "音频格å¼ã€‚å‚阅 [enum Format] 常é‡çš„值。"
#: doc/classes/AudioStreamSample.xml
msgid ""
@@ -12831,9 +12870,9 @@ 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"
+"用于对当å‰å±å¹•显示进行åŽå°ç¼“冲的节点。BackBufferCopy 节点中定义的区域与其覆盖"
+"å±å¹•çš„å†…å®¹ä¸€èµ·ç¼“å†²ï¼Œæˆ–è€…æ ¹æ®æ‹·è´æ¨¡å¼è®¾ç½®çš„æ•´ä¸ªå±å¹•进行缓冲。在ç€è‰²å™¨è„šæœ¬ä¸­ä½¿"
+"用 [code]texture(SCREEN_TEXTURE, ...)[/code] 函数æ¥è®¿é—®ç¼“冲区。\n"
"[b]注æ„:[/b]由于该节点继承自 [Node2D] è€Œéž [Control],锚点和边è·å°†ä¸ä¼šåº”用于"
"从 [Control] 派生的å­èŠ‚ç‚¹ã€‚è¿™åœ¨è°ƒæ•´çª—å£å¤§å°æ—¶å¯èƒ½ä¼šå‡ºçŽ°é—®é¢˜ã€‚ä¸ºé¿å…è¿™ç§æƒ…况,"
"请将 [Control] 派生节点添加为 BackBufferCopy 节点的[i]åŒçº§[/i],ä¸è¦å°†å®ƒä»¬æ·»"
@@ -12841,7 +12880,7 @@ msgstr ""
#: doc/classes/BackBufferCopy.xml
msgid "Buffer mode. See [enum CopyMode] constants."
-msgstr "缓冲区模å¼ã€‚å‚阅 [enum CopyMode] 常é‡ã€‚"
+msgstr "缓冲区模å¼ã€‚è§ [enum CopyMode] 常é‡ã€‚"
#: doc/classes/BackBufferCopy.xml
msgid ""
@@ -12900,10 +12939,10 @@ msgid ""
"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]的路径。"
+"烘焙光照贴图,从给定的 [code]from_node[/code] 根节点扫æï¼Œå¹¶å°†äº§ç”Ÿçš„ "
+"[BakedLightmapData] ä¿å­˜åœ¨ [code]data_save_path[/code] 中。如果没有æä¾›æ ¹èŠ‚"
+"点,此节点的父节点将作为根节点。如果没有æä¾›ä¿å­˜è·¯å¾„,将å°è¯•匹é…å½“å‰ [member "
+"light_data] 的路径。"
#: doc/classes/BakedLightmap.xml
msgid ""
@@ -12950,11 +12989,11 @@ 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"
+"æ¯æ¬¡å弹的能é‡ä¹˜æ•°ã€‚较高的值将使间接照明更亮。[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] 的值时有效。"
@@ -12962,7 +13001,8 @@ msgstr ""
msgid ""
"Number of light bounces that are taken into account during baking. See also "
"[member bounce_indirect_energy]."
-msgstr "烘焙过程中考虑的光线å射次数。å‚阅 [member bounce_indirect_energy]。"
+msgstr ""
+"烘焙过程中考虑的光线å射次数。å¦è¯·å‚阅 [member bounce_indirect_energy]。"
#: doc/classes/BakedLightmap.xml
msgid "Grid size used for real-time capture information on dynamic objects."
@@ -13209,7 +13249,7 @@ msgid ""
"directly (it doesn't display anything). Other types of buttons inherit from "
"it."
msgstr ""
-"BaseButton是按钮的抽象基类,所以ä¸åº”è¯¥ç›´æŽ¥ä½¿ç”¨å®ƒï¼ˆå®ƒä¸æ˜¾ç¤ºä»»ä½•东西)。其他类"
+"BaseButton 是按钮的抽象基类,所以ä¸åº”è¯¥ç›´æŽ¥ä½¿ç”¨å®ƒï¼ˆå®ƒä¸æ˜¾ç¤ºä»»ä½•东西)。其他类"
"型的按钮都继承自它。"
#: doc/classes/BaseButton.xml
@@ -13223,7 +13263,7 @@ msgstr ""
#: doc/classes/BaseButton.xml
msgid ""
"Called when the button is toggled (only if [member toggle_mode] is active)."
-msgstr "å½“æŒ‰é’®è¢«åˆ‡æ¢æ—¶è°ƒç”¨(仅当 [member toggle_mode] å¤„äºŽæ´»åŠ¨çŠ¶æ€æ—¶)。"
+msgstr "å½“æŒ‰é’®è¢«åˆ‡æ¢æ—¶è°ƒç”¨ï¼ˆä»…当 [member toggle_mode] å¤„äºŽæ´»åŠ¨çŠ¶æ€æ—¶ï¼‰ã€‚"
#: doc/classes/BaseButton.xml
msgid ""
@@ -13250,10 +13290,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] 中的其他按钮。"
+"æ”¹å˜æŒ‰é’®çš„ [member pressed] 状æ€ï¼Œä¸è§¦å‘ [signal toggled]ã€‚å½“ä½ åªæƒ³æ”¹å˜æŒ‰é’®çš„"
+"状æ€è€Œä¸å‘逿Œ‰ä¸‹äº‹ä»¶æ—¶ä½¿ç”¨ï¼ˆä¾‹å¦‚,在åˆå§‹åŒ–åœºæ™¯æ—¶ï¼‰ã€‚åªæœ‰å½“ [member "
+"toggle_mode] 是 [code]true[/code] æ—¶æ‰æœ‰æ•ˆã€‚\n"
+"[b]注æ„:[/b]这个方法ä¸ä¼šé‡Šæ”¾å…¶æŒ‰é’® [member group] 中的其他按钮。"
#: doc/classes/BaseButton.xml
msgid ""
@@ -13275,7 +13315,7 @@ msgstr ""
msgid ""
"If [code]true[/code], the button is in disabled state and can't be clicked "
"or toggled."
-msgstr "如果[code]true[/code],则该按钮处于ç¦ç”¨çжæ€ï¼Œæ— æ³•点击或切æ¢ã€‚"
+msgstr "如果为 [code]true[/code],则该按钮处于ç¦ç”¨çжæ€ï¼Œæ— æ³•点击或切æ¢ã€‚"
#: doc/classes/BaseButton.xml
msgid ""
@@ -13283,12 +13323,12 @@ 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 中删除。此属性在设置åŽ"
+"[i]已弃用。[/i]由于冗余,此属性已弃用,将在 Godot 4.0 中删除。此属性在设置åŽ"
"ä¸ä¼šæœ‰ä»»ä½•å½±å“。请改用 [member Control.focus_mode]。"
#: doc/classes/BaseButton.xml
msgid "[ButtonGroup] associated to the button."
-msgstr "与按钮相关è”çš„[ButtonGroup]。"
+msgstr "与按钮相关è”çš„ [ButtonGroup]。"
#: doc/classes/BaseButton.xml
msgid ""
@@ -13298,7 +13338,8 @@ msgid ""
"Signals will be emitted at the same moment regardless of this property's "
"value."
msgstr ""
-"如果[code]true[/code]ï¼Œå½“æŒ‰ä¸‹æŒ‰é’®æ—¶å°†å…‰æ ‡ç§»åˆ°æŒ‰é’®å¤–æ—¶ï¼ŒæŒ‰é’®ä¼šä¿æŒæŒ‰ä¸‹çжæ€ã€‚\n"
+"如果为 [code]true[/code]ï¼Œå½“æŒ‰ä¸‹æŒ‰é’®æ—¶å°†å…‰æ ‡ç§»åˆ°æŒ‰é’®å¤–æ—¶ï¼ŒæŒ‰é’®ä¼šä¿æŒæŒ‰ä¸‹çж"
+"æ€ã€‚\n"
"[b]注æ„:[/b]该属性åªå½±å“按钮的视觉表现。无论该属性的值是多少,信å·éƒ½ä¼šåœ¨åŒä¸€"
"时刻å‘出。"
@@ -13311,7 +13352,7 @@ 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 "
+"如果为 [code]true[/code],按钮为按下状æ€ã€‚表示按钮被按下或切æ¢ï¼ˆå¦‚æžœ [member "
"toggle_mode] 处于激活状æ€ï¼‰ã€‚仅当 [member toggle_mode] 为 [code]true[/code] "
"æ—¶æ‰æœ‰æ•ˆã€‚\n"
"[b]注æ„:[/b]设置 [member pressed] 将导致 [signal toggled] 触å‘。如果你想在ä¸"
@@ -13319,21 +13360,21 @@ msgstr ""
#: doc/classes/BaseButton.xml
msgid "[ShortCut] associated to the button."
-msgstr "与按钮相关è”çš„[ShortCut]。"
+msgstr "与按钮相关è”çš„ [ShortCut]。"
#: doc/classes/BaseButton.xml
msgid ""
"If [code]true[/code], the button will add information about its shortcut in "
"the tooltip."
-msgstr "如果[code]true[/code],按钮将在工具æç¤ºä¸­æ·»åŠ å…¶å¿«æ·æ–¹å¼çš„ä¿¡æ¯ã€‚"
+msgstr "如果为 [code]true[/code],按钮将在工具æç¤ºä¸­æ·»åŠ å…¶å¿«æ·æ–¹å¼çš„ä¿¡æ¯ã€‚"
#: doc/classes/BaseButton.xml
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 ""
-"如果[code]true[/code]ï¼Œåˆ™æŒ‰é’®å¤„äºŽåˆ‡æ¢æ¨¡å¼ã€‚ä½¿æŒ‰é’®åœ¨æ¯æ¬¡ç‚¹å‡»å…¶åŒºåŸŸæ—¶ï¼Œåœ¨æŒ‰ä¸‹å’Œ"
-"未按下之间转æ¢çжæ€ã€‚"
+"如果为 [code]true[/code]ï¼Œåˆ™æŒ‰é’®å¤„äºŽåˆ‡æ¢æ¨¡å¼ã€‚ä½¿æŒ‰é’®åœ¨æ¯æ¬¡ç‚¹å‡»å…¶åŒºåŸŸæ—¶ï¼Œåœ¨æŒ‰"
+"下和未按下之间转æ¢çжæ€ã€‚"
#: doc/classes/BaseButton.xml
msgid "Emitted when the button starts being held down."
@@ -13363,14 +13404,14 @@ msgid ""
"(only if [member toggle_mode] is active). The new state is contained in the "
"[code]button_pressed[/code] argument."
msgstr ""
-"当按钮刚刚在按下和正常状æ€ä¹‹é—´åˆ‡æ¢æ—¶å‘出(仅当[member toggle_mode]处于活动状æ€"
-"æ—¶)。新状æ€åŒ…å«åœ¨[code]button_pressed[/code]傿•°ä¸­ã€‚"
+"当按钮刚刚在按下和正常状æ€ä¹‹é—´åˆ‡æ¢æ—¶å‘出(仅当 [member toggle_mode] 处于活动"
+"çŠ¶æ€æ—¶ï¼‰ã€‚新状æ€åŒ…å«åœ¨ [code]button_pressed[/code] 傿•°ä¸­ã€‚"
#: doc/classes/BaseButton.xml
msgid ""
"The normal state (i.e. not pressed, not hovered, not toggled and enabled) of "
"buttons."
-msgstr "按钮的正常状æ€(峿²¡æœ‰æŒ‰ä¸‹ã€æ²¡æœ‰æ‚¬åœã€æ²¡æœ‰åˆ‡æ¢å’Œå¯ç”¨)。"
+msgstr "按钮的正常状æ€ï¼ˆå³æœªæŒ‰ä¸‹ã€æœªæ‚¬åœã€æœªåˆ‡æ¢å’Œå¯ç”¨ï¼‰ã€‚"
#: doc/classes/BaseButton.xml
msgid "The state of buttons are pressed."
@@ -13400,7 +13441,7 @@ msgstr "è¦æ±‚按下åŽå†é‡Šæ”¾ï¼Œæ‰ç®—点击了按钮。"
#: doc/classes/Basis.xml
msgid "3×3 matrix datatype."
-msgstr "3×3矩阵数æ®ç±»åž‹ã€‚"
+msgstr "3×3 矩阵数æ®ç±»åž‹ã€‚"
#: doc/classes/Basis.xml
msgid ""
@@ -13417,7 +13458,7 @@ msgid ""
msgstr ""
"用于 3D 旋转和缩放的 3×3 çŸ©é˜µã€‚å‡ ä¹Žæ€»æ˜¯ç”¨ä½œå˜æ¢çš„æ­£äº¤åŸºã€‚\n"
"åŒ…å« 3 个å‘é‡å­—段 Xã€Y å’Œ Z ä½œä¸ºå…¶åˆ—ï¼Œé€šå¸¸è¢«è§£é‡Šä¸ºå˜æ¢çš„局部基å‘é‡ã€‚对于这ç§"
-"用途,它由一个缩放矩阵和一个旋转矩阵组æˆï¼Œä¾æ¬¡ä¸º (M=R.S)。\n"
+"ç”¨é€”ï¼Œå®ƒä¾æ¬¡ç”±ä¸€ä¸ªç¼©æ”¾çŸ©é˜µå’Œä¸€ä¸ªæ—‹è½¬çŸ©é˜µç»„æˆï¼ˆM=R.S)。\n"
"也å¯ä»¥ä½œä¸ºä¸‰ç»´å‘é‡çš„æ•°ç»„æ¥è®¿é—®ã€‚这些å‘é‡é€šå¸¸æ˜¯ç›¸äº’正交的,但ä¸ä¸€å®šæ˜¯å½’一化的"
"(由于缩放)。\n"
"更多信æ¯è¯·é˜…è¯»æ–‡æ¡£ä¸­çš„ã€ŠçŸ©é˜µå’Œå˜æ¢ã€‹ä¸€æ–‡ã€‚"
@@ -13569,14 +13610,14 @@ msgstr ""
#: doc/classes/Basis.xml
msgid ""
"Introduce an additional scaling specified by the given 3D scaling factor."
-msgstr "引入一个由给定的3Dç¼©æ”¾å› å­æŒ‡å®šçš„附加缩放。"
+msgstr "引入一个由给定的 3D ç¼©æ”¾å› å­æŒ‡å®šçš„附加缩放。"
#: doc/classes/Basis.xml
msgid ""
"Assuming that the matrix is a proper rotation matrix, slerp performs a "
"spherical-linear interpolation with another rotation matrix."
msgstr ""
-"å‡è®¾è¯¥çŸ©é˜µæ˜¯ä¸€ä¸ªåˆé€‚的旋转矩阵,slerp与å¦ä¸€ä¸ªæ—‹è½¬çŸ©é˜µè¿›è¡Œçƒé¢ç›´çº¿æ’值。"
+"å‡è®¾è¯¥çŸ©é˜µæ˜¯ä¸€ä¸ªåˆé€‚的旋转矩阵,slerp 与å¦ä¸€ä¸ªæ—‹è½¬çŸ©é˜µè¿›è¡Œçƒé¢ç›´çº¿æ’值。"
#: doc/classes/Basis.xml
msgid "Transposed dot product with the X axis of the matrix."
@@ -13611,7 +13652,7 @@ msgstr ""
msgid ""
"The basis matrix's X vector (column 0). Equivalent to array index [code]0[/"
"code]."
-msgstr "基矩阵的 X å‘é‡ï¼ˆç¬¬ 0 列)。等效于数组索引 [code]0[/code]。"
+msgstr "基矩阵的 X å‘é‡ï¼ˆç¬¬ 0 列)。相当于数组索引 [code]0[/code]。"
#: doc/classes/Basis.xml doc/classes/Transform2D.xml
msgid ""
@@ -13760,10 +13801,10 @@ msgid ""
"alignment for the character and [code]advance[/code] is the (optional) "
"advance."
msgstr ""
-"添加一个字符到字体中,其中[code]character[/code]是Unicode值,[code]texture[/"
-"code]是纹ç†ç´¢å¼•,[code]rect[/code]是纹ç†ä¸­çš„区域(以åƒç´ ä¸ºå•ä½ï¼ï¼‰ï¼Œ"
-"[code]align[/code]æ˜¯å­—ç¬¦çš„å¯¹é½æ–¹å¼ï¼ˆå¯é€‰ï¼‰ï¼Œ[code]advance[/code]是å‰è¿›æ–¹å¼"
-"(å¯é€‰ï¼‰ã€‚"
+"添加一个字符到字体中,其中 [code]character[/code] 是 Unicode值,"
+"[code]texture[/code] 是纹ç†ç´¢å¼•,[code]rect[/code] 是纹ç†ä¸­çš„区域(以åƒç´ ä¸ºå•"
+"ä½ï¼ï¼‰ï¼Œ[code]align[/code] æ˜¯å­—ç¬¦çš„å¯¹é½æ–¹å¼ï¼ˆå¯é€‰ï¼‰ï¼Œ[code]advance[/code] 是"
+"步进长度(å¯é€‰ï¼‰ã€‚"
#: doc/classes/BitmapFont.xml
msgid ""
@@ -13775,7 +13816,7 @@ msgstr ""
#: doc/classes/BitmapFont.xml
msgid "Adds a texture to the [BitmapFont]."
-msgstr "为[BitmapFont]添加一个纹ç†ã€‚"
+msgstr "为 [BitmapFont] 添加一个纹ç†ã€‚"
#: doc/classes/BitmapFont.xml
msgid "Clears all the font data and settings."
@@ -13792,11 +13833,11 @@ msgstr "返回字å¶çš„差值。"
#: doc/classes/BitmapFont.xml
msgid "Returns the font atlas texture at index [code]idx[/code]."
-msgstr "返回ä½äºŽç´¢å¼•[code]idx[/code]处的字体Atlas纹ç†ã€‚"
+msgstr "返回ä½äºŽç´¢å¼• [code]idx[/code] 处的字体 Atlas 纹ç†ã€‚"
#: doc/classes/BitmapFont.xml
msgid "Returns the number of textures in the BitmapFont atlas."
-msgstr "返回BitmapFont图谱中纹ç†çš„æ•°é‡ã€‚"
+msgstr "返回 BitmapFont 图谱中纹ç†çš„æ•°é‡ã€‚"
#: doc/classes/BitmapFont.xml
msgid "Ascent (number of pixels above the baseline)."
@@ -13804,7 +13845,7 @@ msgstr "上å‡ï¼ˆåŸºçº¿ä»¥ä¸Šçš„åƒç´ æ•°ï¼‰ã€‚"
#: doc/classes/BitmapFont.xml
msgid "If [code]true[/code], distance field hint is enabled."
-msgstr "如果[code]true[/code],则å¯ç”¨è·ç¦»åœºæç¤ºã€‚"
+msgstr "如果为 [code]true[/code],则å¯ç”¨è·ç¦»åœºæç¤ºã€‚"
#: doc/classes/BitmapFont.xml
msgid "The fallback font."
@@ -13841,12 +13882,12 @@ msgstr ""
#: doc/classes/Bone2D.xml
msgid "Stores the node's current transforms in [member rest]."
-msgstr "将节点当å‰çš„å˜æ¢å­˜å‚¨åœ¨[member rest]中。"
+msgstr "将节点当å‰çš„å˜æ¢å­˜å‚¨åœ¨ [member rest] 中。"
#: doc/classes/Bone2D.xml
msgid ""
"Returns the node's index as part of the entire skeleton. See [Skeleton2D]."
-msgstr "返回节点的索引,作为整个骨架的一部分。请å‚阅 [Skeleton2D]。"
+msgstr "返回节点在整个骨架中的索引å·ã€‚è§ [Skeleton2D]。"
#: doc/classes/Bone2D.xml
msgid ""
@@ -13866,11 +13907,11 @@ msgid ""
"Rest transform of the bone. You can reset the node's transforms to this "
"value using [method apply_rest]."
msgstr ""
-"éª¨éª¼çš„é™æ­¢å˜æ¢ã€‚您å¯ä»¥ä½¿ç”¨[method apply_rest]å°†èŠ‚ç‚¹çš„å˜æ¢é‡ç½®ä¸ºè¿™ä¸ªå€¼ã€‚"
+"骨骼的放æ¾å˜æ¢ã€‚您å¯ä»¥ä½¿ç”¨ [method apply_rest] å°†èŠ‚ç‚¹çš„å˜æ¢é‡ç½®ä¸ºè¿™ä¸ªå€¼ã€‚"
#: doc/classes/BoneAttachment.xml
msgid "A node that will attach to a bone."
-msgstr "一个会附ç€åœ¨éª¨éª¼ä¸Šçš„节点。"
+msgstr "会附ç€åœ¨éª¨éª¼ä¸Šçš„节点。"
#: doc/classes/BoneAttachment.xml
msgid ""
@@ -13878,7 +13919,7 @@ msgid ""
"for this node to attach to. The BoneAttachment node will copy the transform "
"of the selected bone."
msgstr ""
-"此节点必须是 [Skeleton] 节点的å­èŠ‚ç‚¹ã€‚ç„¶åŽï¼Œä½ å¯ä»¥ä¸ºæ­¤èŠ‚ç‚¹é€‰æ‹©è¦é™„加的骨骼。 "
+"此节点必须是 [Skeleton] 节点的å­èŠ‚ç‚¹ã€‚ç„¶åŽï¼Œä½ å¯ä»¥ä¸ºæ­¤èŠ‚ç‚¹é€‰æ‹©è¦é™„加的骨骼。"
"BoneAttachment èŠ‚ç‚¹å°†æ‹·è´æ‰€é€‰éª¨éª¼çš„å˜æ¢ã€‚"
#: doc/classes/BoneAttachment.xml
@@ -13938,13 +13979,13 @@ 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]== "
-"false[/code]。\n"
+"布尔是内置类型。布尔值有两个:[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"
"\n"
@@ -13953,8 +13994,8 @@ msgstr ""
" pass # 在此执行射击。\n"
"[/codeblock]\n"
"下é¢çš„代ç åªæœ‰åœ¨ä¸¤ä¸ªæ¡ä»¶éƒ½æ»¡è¶³çš„æƒ…况下æ‰ä¼šäº§ç”Ÿå­å¼¹ï¼šåŠ¨ä½œâ€œshootâ€è¢«æŒ‰ä¸‹ï¼Œå¹¶ä¸”如"
-"果[code]can_shoot[/code]是[code]true[/code]。\n"
-"[b]注æ„:[/b][code]Input.is_action_pressed(\"shoot\")[/code]也是一个布尔值,"
+"果 [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"
@@ -13964,8 +14005,8 @@ msgstr ""
" if can_shoot and Input.is_action_pressed(\"shoot\"):\n"
" create_bullet()\n"
"[/codeblock]\n"
-"下é¢çš„代ç å°†æŠŠ[code]can_shoot[/code]设置为 [code]false[/code]å¹¶å¯åŠ¨ä¸€ä¸ªå®šæ—¶"
-"器。这将阻止玩家射击,直到定时器用完。然åŽ[code]can_shoot[/code]设置为 "
+"下é¢çš„代ç å°†æŠŠ [code]can_shoot[/code] 设置为 [code]false[/code] å¹¶å¯åŠ¨ä¸€ä¸ªå®š"
+"时器。这将阻止玩家射击,直到定时器用完。然åŽå°† [code]can_shoot[/code] 设置为 "
"[code]true[/code]ï¼Œå†æ¬¡å…许玩家进行射击。\n"
"[codeblock]\n"
"var can_shoot = true\n"
@@ -14198,11 +14239,11 @@ msgstr "将文本å‘å³å¯¹é½ã€‚"
#: doc/classes/Button.xml
msgid "Default text [Color] of the [Button]."
-msgstr "[Button]的默认文本[Color]。"
+msgstr "[Button] 的默认文本 [Color]。"
#: doc/classes/Button.xml
msgid "Text [Color] used when the [Button] is disabled."
-msgstr "ç¦ç”¨[Button]时使用的文本[Color]。"
+msgstr "ç¦ç”¨ [Button] 时使用的文本 [Color]。"
#: doc/classes/Button.xml
msgid ""
@@ -14210,12 +14251,12 @@ msgid ""
"text color of the button. Disabled, hovered, and pressed states take "
"precedence over this color."
msgstr ""
-"当[Button]获得焦点时使用的文本[Color]。åªå–代按钮的正常文本颜色。ç¦ç”¨ã€æ‚¬åœå’Œ"
-"按下状æ€ä¼˜å…ˆäºŽè¿™ä¸ªé¢œè‰²ã€‚"
+"当 [Button] 获得焦点时使用的文本 [Color]。åªå–代按钮的正常文本颜色。ç¦ç”¨ã€æ‚¬"
+"åœå’ŒæŒ‰ä¸‹çжæ€ä¼˜å…ˆäºŽè¿™ä¸ªé¢œè‰²ã€‚"
#: doc/classes/Button.xml
msgid "Text [Color] used when the [Button] is being hovered."
-msgstr "悬åœ[Button]时使用的文本[Color]。"
+msgstr "æ‚¬åœ [Button] 时使用的文本 [Color]。"
#: doc/classes/Button.xml
msgid "Text [Color] used when the [Button] is being pressed."
@@ -14223,11 +14264,11 @@ msgstr "正在按下 [Button] 时使用的文本 [Color] 。"
#: doc/classes/Button.xml
msgid "The horizontal space between [Button]'s icon and text."
-msgstr "[Button]的图标和文本之间的水平间è·ã€‚"
+msgstr "[Button] 的图标和文本之间的水平间è·ã€‚"
#: doc/classes/Button.xml
msgid "[Font] of the [Button]'s text."
-msgstr "[Button]文本的[Font]。"
+msgstr "[Button] 文本的 [Font]。"
#: doc/classes/Button.xml
msgid "[StyleBox] used when the [Button] is disabled."
@@ -14239,20 +14280,20 @@ msgid ""
"current [StyleBox], so using [StyleBoxEmpty] will just disable the focus "
"visual effect."
msgstr ""
-"当[Button]获得焦点时使用的[StyleBox]。它显示在当å‰çš„[StyleBox]之上,所以使用"
-"[StyleBoxEmpty]åªæ˜¯ç¦ç”¨ç„¦ç‚¹è§†è§‰æ•ˆæžœã€‚"
+"当 [Button] 获得焦点时使用的 [StyleBox]。它显示在当å‰çš„ [StyleBox] 之上,所以"
+"使用 [StyleBoxEmpty] åªæ˜¯ç¦ç”¨ç„¦ç‚¹è§†è§‰æ•ˆæžœã€‚"
#: doc/classes/Button.xml
msgid "[StyleBox] used when the [Button] is being hovered."
-msgstr "悬åœ[Button]时使用的[StyleBox]。"
+msgstr "æ‚¬åœ [Button] 时使用的 [StyleBox]。"
#: doc/classes/Button.xml
msgid "Default [StyleBox] for the [Button]."
-msgstr "[Button]的默认[StyleBox]。"
+msgstr "[Button] 的默认 [StyleBox]。"
#: doc/classes/Button.xml
msgid "[StyleBox] used when the [Button] is being pressed."
-msgstr "按下[Button]时使用的[StyleBox]。"
+msgstr "按下 [Button] 时使用的 [StyleBox]。"
#: doc/classes/ButtonGroup.xml
msgid "Group of Buttons."
@@ -14272,8 +14313,8 @@ msgid ""
"Returns an [Array] of [Button]s who have this as their [ButtonGroup] (see "
"[member BaseButton.group])."
msgstr ""
-"返回一个[Button]çš„[Array],这些[Button]çš„[ButtonGroup]都有这个功能(å‚阅"
-"[member BaseButton.group])。"
+"返回一个 [Button] 的 [Array],这些 [Button] 的 [ButtonGroup] 都有这个功能"
+"ï¼ˆè§ [member BaseButton.group])。"
#: doc/classes/ButtonGroup.xml
msgid "Returns the current pressed button."
@@ -14458,7 +14499,7 @@ msgid ""
msgstr ""
"通过在世界空间å•ä½ä¸­æŒ‡å®š [code]size[/code] å’Œ [code]z_near[/code] å’Œ "
"[code]z_far[/code] 剪è£å¹³é¢ï¼Œå°†ç›¸æœºæŠ•影设置为正交模å¼ï¼Œè¯·å‚阅 [constant "
-"PROJECTION_ORTHOGONAL]。 (æç¤ºï¼š2D 游æˆç»å¸¸ä½¿ç”¨è¿™ç§æŠ•影,以åƒç´ ä¸ºå•使Œ‡å®š"
+"PROJECTION_ORTHOGONAL]。(æç¤ºï¼š2D 游æˆç»å¸¸ä½¿ç”¨è¿™ç§æŠ•影,以åƒç´ ä¸ºå•使Œ‡å®š"
"值。)"
#: doc/classes/Camera.xml
@@ -14509,7 +14550,8 @@ msgstr "æè¿°æ­¤ç›¸æœºæ¸²æŸ“哪些 3D 渲染层的剔除掩ç ã€‚"
#: doc/classes/Camera.xml
msgid ""
"If [code]true[/code], the ancestor [Viewport] is currently using this camera."
-msgstr "如果[code]true[/code],则说明祖级的[Viewport]当剿­£åœ¨ä½¿ç”¨è¿™ä¸ªæ‘„åƒå¤´ã€‚"
+msgstr ""
+"如果为 [code]true[/code],则说明祖级的 [Viewport] 当剿­£åœ¨ä½¿ç”¨è¿™ä¸ªæ‘„åƒå¤´ã€‚"
#: doc/classes/Camera.xml
msgid ""
@@ -14533,7 +14575,7 @@ msgstr ""
#: doc/classes/Camera.xml
msgid "The [Environment] to use for this camera."
-msgstr "此相机è¦ä½¿ç”¨çš„[Environment]。"
+msgstr "此相机è¦ä½¿ç”¨çš„ [Environment]。"
#: doc/classes/Camera.xml
msgid ""
@@ -14555,7 +14597,7 @@ msgid ""
msgstr ""
"相机的视野角度,以度为å•ä½ã€‚仅适用于é€è§†æ¨¡å¼ã€‚由于 [member keep_aspect] é”定"
"一个轴,因此 [code]fov[/code] 设置å¦ä¸€ä¸ªè½´çš„视角。\n"
-"作为å‚考,默认的垂直视野值([code]70.0[/code])等效于以下水平 FOV:\n"
+"作为å‚考,默认的垂直视野值([code]70.0[/code])相当于以下水平 FOV:\n"
"- 在 4:3 视窗中约86.07 度\n"
"- 在 16:10 视窗中约 96.50 度\n"
"- 在 16:9 视窗中约102.45 度\n"
@@ -14579,8 +14621,8 @@ msgid ""
"The axis to lock during [member fov]/[member size] adjustments. Can be "
"either [constant KEEP_WIDTH] or [constant KEEP_HEIGHT]."
msgstr ""
-"在[member fov]/[member size]调整时è¦é”定的轴。å¯ä»¥æ˜¯[constant KEEP_WIDTH]或"
-"[constant KEEP_HEIGHT]。"
+"在 [member fov]/[member size] 调整时è¦é”定的轴。å¯ä»¥æ˜¯ [constant KEEP_WIDTH] "
+"或 [constant KEEP_HEIGHT]。"
#: doc/classes/Camera.xml
msgid ""
@@ -14594,8 +14636,8 @@ msgid ""
"objects' Z distance from the camera's local space scales their perceived "
"size."
msgstr ""
-"相机的投影模å¼ã€‚在[constant PROJECTION_PERSPECTIVE]模å¼ä¸‹ï¼Œç‰©ä½“与相机局部空间"
-"çš„Zè·ç¦»ä¼šå½±å“其感知的大å°ã€‚"
+"相机的投影模å¼ã€‚在 [constant PROJECTION_PERSPECTIVE] 模å¼ä¸‹ï¼Œç‰©ä½“与相机局部空"
+"é—´çš„Zè·ç¦»ä¼šå½±å“其感知的大å°ã€‚"
#: doc/classes/Camera.xml
msgid ""
@@ -14627,8 +14669,8 @@ msgid ""
"Frustum projection. This mode allows adjusting [member frustum_offset] to "
"create \"tilted frustum\" effects."
msgstr ""
-"Frustum投影。通过该模å¼å¯ä»¥è°ƒæ•´[member frustum_offset]æ¥åˆ›å»º \"tilted "
-"frustum \"效果。"
+"Frustum 投影。通过该模å¼å¯ä»¥è°ƒæ•´ [member frustum_offset] æ¥åˆ›å»ºâ€œtilted "
+"frustumâ€æ•ˆæžœã€‚"
#: doc/classes/Camera.xml
msgid ""
@@ -14636,8 +14678,8 @@ msgid ""
"usually the best option for projects running in portrait mode, as taller "
"aspect ratios will benefit from a wider vertical FOV."
msgstr ""
-"ä¿ç•™æ°´å¹³é•¿å®½æ¯”,也称为Vert-ç¼©æ”¾ã€‚è¿™é€šå¸¸æ˜¯åœ¨çºµå‘æ¨¡å¼ä¸‹è¿è¡Œçš„项目的最佳选择,因"
-"为较高的纵横比将从更宽的垂直视场中å—益。"
+"ä¿ç•™æ°´å¹³é•¿å®½æ¯”,也称为 Vert- ç¼©æ”¾ã€‚è¿™é€šå¸¸æ˜¯åœ¨çºµå‘æ¨¡å¼ä¸‹è¿è¡Œçš„项目的最佳选择,"
+"因为较高的纵横比将从更宽的垂直视场中å—益。"
#: doc/classes/Camera.xml
msgid ""
@@ -14764,16 +14806,16 @@ 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 ""
-"返回指定的边è·ã€‚å¦è¯·å‚阅[member drag_margin_bottom],[member "
-"drag_margin_top],[member drag_margin_left]和[member drag_margin_right]。"
+"返回指定的边è·ã€‚å¦è¯·å‚阅 [member drag_margin_bottom]ã€[member "
+"drag_margin_top]ã€[member drag_margin_left] å’Œ [member drag_margin_right]。"
#: doc/classes/Camera2D.xml
msgid ""
"Returns the specified camera limit. See also [member limit_bottom], [member "
"limit_top], [member limit_left], and [member limit_right]."
msgstr ""
-"返回指定的相机é™åˆ¶ã€‚请å‚阅 [member limit_bottom]ã€[member limit_top]ã€"
-"[member limit_left]和[member limit_right]。"
+"返回指定的相机é™åˆ¶ã€‚å¦è¯·å‚阅 [member limit_bottom]ã€[member limit_top]ã€"
+"[member limit_left] 和 [member limit_right]。"
#: doc/classes/Camera2D.xml
msgid ""
@@ -14797,7 +14839,7 @@ msgid ""
"drag_margin_top], [member drag_margin_left], and [member drag_margin_right]."
msgstr ""
"设置指定的边è·ã€‚å¦è¯·å‚阅 [member drag_margin_bottom]ã€[member "
-"drag_margin_top]ã€[member drag_margin_left]å’Œ [member drag_margin_right]。"
+"drag_margin_top]ã€[member drag_margin_left] å’Œ [member drag_margin_right]。"
#: doc/classes/Camera2D.xml
msgid ""
@@ -14805,11 +14847,11 @@ msgid ""
"limit_top], [member limit_left], and [member limit_right]."
msgstr ""
"设置指定的相机é™åˆ¶ã€‚å¦è¯·å‚阅 [member limit_bottom]ã€[member limit_top]ã€"
-"[member limit_left]和[member limit_right]。"
+"[member limit_left] 和 [member limit_right]。"
#: doc/classes/Camera2D.xml
msgid "The Camera2D's anchor point. See [enum AnchorMode] constants."
-msgstr "Camera2D的锚点。å‚阅[enum AnchorMode]常é‡ã€‚"
+msgstr "Camera2D çš„é”šç‚¹ã€‚è§ [enum AnchorMode] 常é‡ã€‚"
#: doc/classes/Camera2D.xml
msgid ""
@@ -14817,8 +14859,8 @@ msgid ""
"Only one camera can be current, so setting a different camera [code]current[/"
"code] will disable this one."
msgstr ""
-"如果 [code]true[/code],相机是当å‰åœºæ™¯çš„æ´»åŠ¨ç›¸æœºã€‚å½“å‰åªèƒ½æœ‰ä¸€å°ç›¸æœºï¼Œæ‰€ä»¥è®¾"
-"ç½®ä¸åŒçš„相机[code]current[/code]å°†ç¦ç”¨è¿™å°ç›¸æœºã€‚"
+"如果为 [code]true[/code],相机是当å‰åœºæ™¯çš„æ´»åŠ¨ç›¸æœºã€‚å½“å‰åªèƒ½æœ‰ä¸€å°ç›¸æœºï¼Œæ‰€ä»¥"
+"设置ä¸åŒçš„相机[code]current[/code]å°†ç¦ç”¨è¿™å°ç›¸æœºã€‚"
#: doc/classes/Camera2D.xml
msgid ""
@@ -14833,7 +14875,8 @@ 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 ""
-"拖动相机所需的底边è·ã€‚值为[code]1[/code]时,相机仅在到达å±å¹•边缘时æ‰ä¼šç§»åŠ¨ã€‚"
+"拖动相机所需的底边è·ã€‚值为 [code]1[/code] 时,相机仅在到达å±å¹•边缘时æ‰ä¼šç§»"
+"动。"
#: doc/classes/Camera2D.xml
msgid ""
@@ -14841,29 +14884,32 @@ msgid ""
"drag margins. If [code]false[/code], the camera moves horizontally "
"regardless of margins."
msgstr ""
-"如果 [code]true[/code]ï¼Œç›¸æœºä»…åœ¨è¾¾åˆ°æ°´å¹³æ‹–åŠ¨è¾¹è·æ—¶æ‰ç§»åŠ¨ã€‚å¦‚æžœ[code]false[/"
-"code],相机会水平移动而ä¸ç®¡è¾¹è·ã€‚"
+"如果为 [code]true[/code]ï¼Œç›¸æœºä»…åœ¨è¾¾åˆ°æ°´å¹³æ‹–åŠ¨è¾¹è·æ—¶æ‰ç§»åŠ¨ã€‚å¦‚æžœä¸º "
+"[code]false[/code],相机会水平移动而ä¸ç®¡è¾¹è·ã€‚"
#: doc/classes/Camera2D.xml
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 ""
-"拖动相机所需的左边缘。值为[code]1[/code]时,相机仅在到达å±å¹•边缘时æ‰ä¼šç§»åŠ¨ã€‚"
+"拖动相机所需的左边缘。值为 [code]1[/code] 时,相机仅在到达å±å¹•边缘时æ‰ä¼šç§»"
+"动。"
#: doc/classes/Camera2D.xml
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 ""
-"拖动相机所需的å³è¾¹ç¼˜ã€‚值为[code]1[/code]时,相机仅在到达å±å¹•边缘时æ‰ä¼šç§»åŠ¨ã€‚"
+"拖动相机所需的å³è¾¹ç¼˜ã€‚值为 [code]1[/code] 时,相机仅在到达å±å¹•边缘时æ‰ä¼šç§»"
+"动。"
#: doc/classes/Camera2D.xml
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 ""
-"拖动相机所需的上边è·ã€‚值为[code]1[/code]时,相机仅在到达å±å¹•边缘时æ‰ä¼šç§»åŠ¨ã€‚"
+"拖动相机所需的上边è·ã€‚值为 [code]1[/code] 时,相机仅在到达å±å¹•边缘时æ‰ä¼šç§»"
+"动。"
#: doc/classes/Camera2D.xml
msgid ""
@@ -14871,23 +14917,23 @@ msgid ""
"margins. If [code]false[/code], the camera moves vertically regardless of "
"margins."
msgstr ""
-"如果 [code]true[/code]ï¼Œç›¸æœºä»…åœ¨è¾¾åˆ°åž‚ç›´æ‹–åŠ¨è¾¹è·æ—¶æ‰ç§»åŠ¨ã€‚å¦‚æžœ[code]false[/"
-"code],相机会垂直移动而ä¸ç®¡è¾¹è·ã€‚"
+"如果为 [code]true[/code]ï¼Œç›¸æœºä»…åœ¨è¾¾åˆ°åž‚ç›´æ‹–åŠ¨è¾¹è·æ—¶æ‰ç§»åŠ¨ã€‚å¦‚æžœä¸º "
+"[code]false[/code],相机会垂直移动而ä¸ç®¡è¾¹è·ã€‚"
#: doc/classes/Camera2D.xml
msgid ""
"If [code]true[/code], draws the camera's drag margin rectangle in the editor."
-msgstr "如果[code]true[/code],在编辑器中绘制相机的拖动边è·çŸ©å½¢ã€‚"
+msgstr "如果为 [code]true[/code],在编辑器中绘制相机的拖动边è·çŸ©å½¢ã€‚"
#: doc/classes/Camera2D.xml
msgid ""
"If [code]true[/code], draws the camera's limits rectangle in the editor."
-msgstr "如果[code]true[/code],在编辑器中绘制相机的æžé™çŸ©å½¢ã€‚"
+msgstr "如果为 [code]true[/code],在编辑器中绘制相机的æžé™çŸ©å½¢ã€‚"
#: doc/classes/Camera2D.xml
msgid ""
"If [code]true[/code], draws the camera's screen rectangle in the editor."
-msgstr "如果[code]true[/code],在编辑器中绘制相机的画é¢çŸ©å½¢ã€‚"
+msgstr "如果为 [code]true[/code],在编辑器中绘制相机的画é¢çŸ©å½¢ã€‚"
#: doc/classes/Camera2D.xml
msgid ""
@@ -14972,8 +15018,8 @@ msgid ""
"Speed in pixels per second of the camera's smoothing effect when [member "
"smoothing_enabled] is [code]true[/code]."
msgstr ""
-"当[member smoothing_enabled]为 [code]true[/code] 时,相机平滑效果的速度,以æ¯"
-"ç§’åƒç´ ä¸ºå•ä½ã€‚"
+"当 [member smoothing_enabled] 为 [code]true[/code] 时,相机平滑效果的速度,以"
+"æ¯ç§’åƒç´ ä¸ºå•ä½ã€‚"
#: doc/classes/Camera2D.xml
msgid ""
@@ -15041,7 +15087,7 @@ msgstr "返回设备上的相机ä½ç½®ã€‚"
#: doc/classes/CameraFeed.xml
msgid "If [code]true[/code], the feed is active."
-msgstr "如果[code]true[/code]ï¼Œåˆ™æºæ˜¯æ¿€æ´»çš„。"
+msgstr "如果为 [code]true[/code]ï¼Œåˆ™æºæ˜¯æ¿€æ´»çš„。"
#: doc/classes/CameraFeed.xml
msgid "The transform applied to the camera's image."
@@ -15152,7 +15198,7 @@ msgid ""
"a shader."
msgstr ""
"该纹ç†å¯ä»¥è®¿é—® [CameraFeed] æä¾›çš„相机纹ç†ã€‚\n"
-"[b]注æ„:[/b]许多相机æä¾›éœ€è¦åœ¨ç€è‰²å™¨ä¸­è½¬æ¢çš„ YCbCr 图åƒã€‚"
+"[b]注æ„:[/b]许多相机æä¾›çš„都是 YCbCr 图åƒï¼Œéœ€è¦åœ¨ç€è‰²å™¨ä¸­è¿›è¡Œè½¬æ¢ã€‚"
#: doc/classes/CameraTexture.xml
msgid "The ID of the [CameraFeed] for which we want to display the image."
@@ -15269,7 +15315,6 @@ msgstr ""
"与å¯é€‰çš„下一个字符的字å¶è·ã€‚"
#: doc/classes/CanvasItem.xml
-#, fuzzy
msgid ""
"Draws a colored, filled circle. See also [method draw_arc], [method "
"draw_polyline] and [method draw_polygon].\n"
@@ -15279,7 +15324,7 @@ msgid ""
"create an AntialiasedRegularPolygon2D node. That node relies on a texture "
"with custom mipmaps to perform antialiasing."
msgstr ""
-"绘制未填充的彩色圆形。å¦è¯·å‚阅 [method draw_arc]ã€[method draw_polyline]ã€"
+"绘制填充的彩色圆形。å¦è¯·å‚阅 [method draw_arc]ã€[method draw_polyline]ã€"
"[method draw_polygon]。\n"
"[b]注æ„:[/b]ç”±äºŽå®žçŽ°çš„åŽŸå› ï¼Œå†…ç½®çš„æŠ—é”¯é½¿æ— æ³•åœ¨é€æ˜Žå¤šè¾¹å½¢ä¸Šå¾—到正确的效果,并"
"且å¯èƒ½æ— æ³•在æŸäº›å¹³å°ä¸Šæ­£å¸¸å·¥ä½œã€‚作为替代方案,请安装[url=https://github.com/"
@@ -15642,7 +15687,7 @@ msgid ""
"Hide the [CanvasItem] if it's currently visible. This is equivalent to "
"setting [member visible] to [code]false[/code]."
msgstr ""
-"如果该 [CanvasItem] ç›®å‰æ˜¯å¯è§çš„,则将其éšè—。等价于将 [member visible] 设为 "
+"如果该 [CanvasItem] ç›®å‰æ˜¯å¯è§çš„,则将其éšè—。相当于将 [member visible] 设为 "
"[code]false[/code]。"
#: doc/classes/CanvasItem.xml
@@ -15722,7 +15767,7 @@ msgid ""
"[Popup], the correct way to make them visible is to call one of the multiple "
"[code]popup*()[/code] functions instead."
msgstr ""
-"如果该 [CanvasItem] ç›®å‰æ˜¯éšè—的,则将其显示。等价于将 [member visible] 设为 "
+"如果该 [CanvasItem] ç›®å‰æ˜¯éšè—的,则将其显示。相当于将 [member visible] 设为 "
"[code]true[/code]。对于继承自 [Popup] 的控件,让它们å¯è§çš„æ­£ç¡®åšæ³•æ˜¯æ¢æˆè°ƒç”¨"
"å„ç§ [code]popup*()[/code] 函数的其中之一。"
@@ -15731,17 +15776,17 @@ msgid ""
"Queue the [CanvasItem] for update. [constant NOTIFICATION_DRAW] will be "
"called on idle time to request redraw."
msgstr ""
-"将[CanvasItem]排队等待更新。在空闲时间将调用[constant NOTIFICATION_DRAW]以请"
-"求é‡ç»˜ã€‚"
+"将 [CanvasItem] 排队等待更新。在空闲时间将调用 [constant NOTIFICATION_DRAW] "
+"以请求é‡ç»˜ã€‚"
#: doc/classes/CanvasItem.xml
msgid ""
"The rendering layers in which this [CanvasItem] responds to [Light2D] nodes."
-msgstr "æ­¤[CanvasItem]在其中å“应[Light2D]节点的渲染层。"
+msgstr "æ­¤ [CanvasItem] 在其中å“应 [Light2D] 节点的渲染层。"
#: doc/classes/CanvasItem.xml
msgid "The material applied to textures on this [CanvasItem]."
-msgstr "在此[CanvasItem]上应用于纹ç†çš„æè´¨ã€‚"
+msgstr "在此 [CanvasItem] 上应用于纹ç†çš„æè´¨ã€‚"
#: doc/classes/CanvasItem.xml
msgid "The color applied to textures on this [CanvasItem]."
@@ -15756,19 +15801,19 @@ msgstr ""
#: doc/classes/CanvasItem.xml
msgid "If [code]true[/code], the object draws behind its parent."
-msgstr "如果[code]true[/code],则对象在其父对象åŽé¢ç»˜åˆ¶ã€‚"
+msgstr "如果为 [code]true[/code],则对象在其父对象åŽé¢ç»˜åˆ¶ã€‚"
#: doc/classes/CanvasItem.xml
msgid "If [code]true[/code], the object draws on top of its parent."
-msgstr "如果[code]true[/code],则对象在其父对象的顶部绘制。"
+msgstr "如果为 [code]true[/code],则对象在其父对象的顶部绘制。"
#: doc/classes/CanvasItem.xml
msgid ""
"If [code]true[/code], the parent [CanvasItem]'s [member material] property "
"is used as this one's material."
msgstr ""
-"如果[code]true[/code],则将父级[CanvasItem]的[member material]属性用作此项的"
-"æè´¨ã€‚"
+"如果为 [code]true[/code],则将父级[CanvasItem]的[member material]属性用作此项"
+"çš„æè´¨ã€‚"
#: doc/classes/CanvasItem.xml
msgid ""
@@ -15779,9 +15824,9 @@ msgid ""
"visible is to call one of the multiple [code]popup*()[/code] functions "
"instead."
msgstr ""
-"如果[code]true[/code],这个[CanvasItem]è¢«ç»˜åˆ¶ã€‚åªæœ‰å½“它的所有父节点也å¯è§æ—¶ï¼Œ"
-"è¯¥èŠ‚ç‚¹æ‰æ˜¯å¯è§çš„(æ¢å¥è¯è¯´ï¼Œ[method is_visible_in_tree]必须返回 [code]true[/"
-"code])。\n"
+"如果为 [code]true[/code],这个[CanvasItem]è¢«ç»˜åˆ¶ã€‚åªæœ‰å½“它的所有父节点也å¯è§"
+"æ—¶ï¼Œè¯¥èŠ‚ç‚¹æ‰æ˜¯å¯è§çš„(æ¢å¥è¯è¯´ï¼Œ[method is_visible_in_tree]必须返回 "
+"[code]true[/code])。\n"
"[b]注æ„:[/b]对于继承了[Popup]的控件,使其å¯è§çš„æ­£ç¡®æ–¹æ³•是调用多个"
"[code]popup*()[/code]函数之一。"
@@ -15802,8 +15847,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])时触å‘。"
+"在物体 [Rect2] 边缘(ä½ç½®æˆ–大å°ï¼‰æ”¹å˜ï¼Œæˆ–有影å“到边缘的æ“作(比如修改 "
+"[member Sprite.texture])时触å‘。"
#: doc/classes/CanvasItem.xml
msgid "Emitted when the visibility (hidden/visible) changes."
@@ -15915,7 +15960,7 @@ msgid ""
"[b]Note:[/b] This property is only used and visible in the editor if [member "
"particles_animation] is [code]true[/code]."
msgstr ""
-"如果 [code]true[/code],粒å­åŠ¨ç”»å°†å¾ªçŽ¯æ’­æ”¾ã€‚\n"
+"如果为 [code]true[/code],粒å­åŠ¨ç”»å°†å¾ªçŽ¯æ’­æ”¾ã€‚\n"
"[b]注æ„:[/b]åªæœ‰å½“ [member particles_animation] 为 [code]true[/code] 时,该"
"属性æ‰ä¼šåœ¨ç¼–辑器中使用并å¯è§ã€‚"
@@ -15990,7 +16035,7 @@ msgid ""
"Hides any [CanvasItem] under this [CanvasLayer]. This is equivalent to "
"setting [member visible] to [code]false[/code]."
msgstr ""
-"éšè—该 [CanvasLayer] 下的所有 [CanvasItem]。等价于将 [member visible] 设为 "
+"éšè—该 [CanvasLayer] 下的所有 [CanvasItem]。相当于将 [member visible] 设为 "
"[code]false[/code]。"
#: doc/classes/CanvasLayer.xml
@@ -15998,7 +16043,7 @@ msgid ""
"Shows any [CanvasItem] under this [CanvasLayer]. This is equivalent to "
"setting [member visible] to [code]true[/code]."
msgstr ""
-"显示该 [CanvasLayer] 下的所有 [CanvasItem]。等价于将 [member visible] 设为 "
+"显示该 [CanvasLayer] 下的所有 [CanvasItem]。相当于将 [member visible] 设为 "
"[code]true[/code]。"
#: doc/classes/CanvasLayer.xml
@@ -16238,8 +16283,8 @@ msgid ""
"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 ""
-"如果[code]true[/code],将绘制字符。如果[code]false[/code],则éšè—字符。éšè—å­—"
-"符周围的字符将回æµä»¥å ç”¨éšè—字符的空间。如果ä¸å¸Œæœ›è¿™æ ·åšï¼Œå¯ä»¥å°†å®ƒä»¬çš„"
+"如果为 [code]true[/code],将绘制字符。如果为 [code]false[/code],则éšè—字符。"
+"éšè—字符周围的字符将回æµä»¥å ç”¨éšè—字符的空间。如果ä¸å¸Œæœ›è¿™æ ·åšï¼Œå¯ä»¥å°†å®ƒä»¬çš„"
"[member color]设置为[code]Color(1, 1, 1, 0)[/code]。"
#: doc/classes/CheckBox.xml
@@ -16587,7 +16632,7 @@ msgid ""
"usage)[/code]."
msgstr ""
"返回 [code]class[/code] 或其父级的[code]ä¿¡å·[/code]æ•°æ®ã€‚返回 [Dictionary] å¹¶"
-"带有以下键: [code]args[/code], [code]default_args[/code], [code]flags[/"
+"带有以下键:[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]。"
@@ -16773,7 +16818,7 @@ msgid ""
"surface at that point. Connect to the [signal input_event] signal to easily "
"pick up these events."
msgstr ""
-"接收未处ç†çš„事件 [InputEvent]。 [code]position[/code] 是鼠标指针在具有索引 "
+"接收未处ç†çš„事件 [InputEvent]。[code]position[/code] 是鼠标指针在具有索引 "
"[code]shape_idx[/code] 的形状表é¢åœ¨ä¸–界空间中的ä½ç½®ï¼Œ[code]normal[/code] 是该"
"点表é¢çš„æ³•å‘é‡ã€‚连接到 [signal input_event] ä¿¡å·ä»¥è½»æ¾èŽ·å–这些事件。"
@@ -16800,7 +16845,7 @@ msgstr ""
"返回是å¦è®¾ç½®äº†ç¢°æ’žæŽ©ç  [member collision_mask] 的指定ä½[code]bit[/code]。"
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
-#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/Navigation2D.xml
msgid "Returns the object's [RID]."
msgstr "返回对象的 [RID]。"
@@ -16814,7 +16859,7 @@ msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
msgid "If [code]true[/code], the shape owner and its shapes are disabled."
-msgstr "如果[code]true[/code],则ç¦ç”¨å½¢çŠ¶æ‰€æœ‰è€…åŠå…¶å½¢çŠ¶ã€‚"
+msgstr "如果为 [code]true[/code],则ç¦ç”¨å½¢çŠ¶æ‰€æœ‰è€…åŠå…¶å½¢çŠ¶ã€‚"
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
msgid "Removes the given shape owner."
@@ -16884,7 +16929,7 @@ msgstr "从给定的形状所有者中删除一个形状。"
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
msgid "If [code]true[/code], disables the given shape owner."
-msgstr "如果[code]true[/code],则ç¦ç”¨ç»™å®šçš„形状所有者。"
+msgstr "如果为 [code]true[/code],则ç¦ç”¨ç»™å®šçš„形状所有者。"
#: doc/classes/CollisionObject.xml
msgid "Sets the [Transform] of the given shape owner."
@@ -16927,8 +16972,8 @@ 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],[CollisionObject] 将在鼠标拖过其形状时继续接收输入事"
-"件。"
+"如果为 [code]true[/code],[CollisionObject] 将在鼠标拖过其形状时继续接收输入"
+"事件。"
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
msgid ""
@@ -16947,7 +16992,7 @@ msgid ""
"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]position[/code] 是鼠标指针在具"
+"当对象收到未处ç†çš„ [InputEvent] æ—¶å‘出。[code]position[/code] 是鼠标指针在具"
"有索引 [code]shape_idx[/code] 的形状表é¢åœ¨ä¸–界空间中的ä½ç½®ï¼Œ[code]normal[/"
"code] 是该点表é¢çš„æ³•å‘é‡ã€‚"
@@ -16988,9 +17033,9 @@ msgid ""
"[Shape2D]. Connect to the [code]input_event[/code] signal to easily pick up "
"these events."
msgstr ""
-"æŽ¥å—æœªå¤„ç†çš„[InputEvent]ã€‚è¦æ±‚[member input_pickable]为 [code]true[/code]。 "
-"[code]shape_idx[/code]被点击的[Shape2D]çš„å­ç´¢å¼•。连接到[code]input_event[/"
-"code]ä¿¡å·å³å¯è½»æ¾æŽ¥æ”¶è¿™äº›äº‹ä»¶ã€‚"
+"æŽ¥å—æœªå¤„ç†çš„ [InputEvent]ã€‚è¦æ±‚ [member input_pickable] 为 [code]true[/"
+"code]。[code]shape_idx[/code] 是被点击的 [Shape2D] çš„å­ç´¢å¼•。连接到 "
+"[code]input_event[/code] ä¿¡å·å³å¯è½»æ¾æŽ¥æ”¶è¿™äº›äº‹ä»¶ã€‚"
#: doc/classes/CollisionObject2D.xml
msgid ""
@@ -17096,8 +17141,8 @@ msgid ""
"[member input_pickable] to be [code]true[/code] and at least one "
"[code]collision_layer[/code] bit to be set."
msgstr ""
-"当鼠标指针进入此对象的任何形状时触å‘ã€‚è¦æ±‚[member input_pickable]为 "
-"[code]true[/code],并且至少è¦è®¾ç½®ä¸€ä¸ª[code]collision_layer[/code]ä½ã€‚"
+"当鼠标指针进入此对象的任何形状时触å‘ã€‚è¦æ±‚ [member input_pickable] 为 "
+"[code]true[/code],并且至少è¦è®¾ç½®ä¸€ä¸ª [code]collision_layer[/code] ä½ã€‚"
#: doc/classes/CollisionObject2D.xml
msgid ""
@@ -17105,12 +17150,12 @@ msgid ""
"[member input_pickable] to be [code]true[/code] and at least one "
"[code]collision_layer[/code] bit to be set."
msgstr ""
-"当鼠标指针退出此对象的所有形状时å‘å‡ºã€‚è¦æ±‚[member input_pickable]为 "
-"[code]true[/code],并且至少è¦è®¾ç½®ä¸€ä¸ª[code]collision_layer[/code]ä½ã€‚"
+"当鼠标指针退出此对象的所有形状时å‘å‡ºã€‚è¦æ±‚ [member input_pickable] 为 "
+"[code]true[/code],并且至少è¦è®¾ç½®ä¸€ä¸ª [code]collision_layer[/code] ä½ã€‚"
#: doc/classes/CollisionPolygon.xml
msgid "Editor-only class for defining a collision polygon in 3D space."
-msgstr "ä»…é™ç¼–辑器的类,用于在3D空间中定义碰撞多边形。"
+msgstr "ä»…é™ç¼–辑器的类,用于在 3D 空间中定义碰撞多边形。"
#: doc/classes/CollisionPolygon.xml
msgid ""
@@ -17131,13 +17176,13 @@ msgstr "产生的碰撞在垂直于其多边形的任一方å‘上延伸的长度
#: doc/classes/CollisionPolygon.xml
msgid "If [code]true[/code], no collision will be produced."
-msgstr "如果[code]true[/code],将ä¸ä¼šäº§ç”Ÿç¢°æ’žã€‚"
+msgstr "如果为 [code]true[/code],将ä¸ä¼šäº§ç”Ÿç¢°æ’žã€‚"
#: doc/classes/CollisionPolygon.xml
msgid ""
"The collision margin for the generated [Shape]. See [member Shape.margin] "
"for more details."
-msgstr "生æˆçš„[Shape]的碰撞边。å‚阅[member Shape.margin]èŽ·å–æ›´å¤šç»†èŠ‚ã€‚"
+msgstr "生æˆçš„ [Shape] 的碰撞边。详情请å‚阅 [member Shape.margin]。"
#: doc/classes/CollisionPolygon.xml
msgid ""
@@ -17155,19 +17200,19 @@ msgstr ""
#: doc/classes/CollisionPolygon2D.xml
msgid "Defines a 2D collision polygon."
-msgstr "定义2D碰撞多边形。"
+msgstr "定义 2D 碰撞多边形。"
#: doc/classes/CollisionPolygon2D.xml
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 ""
-"为[CollisionObject2D]父级æä¾›2D碰撞多边形。多边形å¯ä»¥åœ¨ç¼–辑器中绘制,也å¯ä»¥ç”±"
-"顶点列表指定。"
+"为 [CollisionObject2D] 父级æä¾› 2D 碰撞多边形。多边形å¯ä»¥åœ¨ç¼–辑器中绘制,也å¯"
+"以由顶点列表指定。"
#: doc/classes/CollisionPolygon2D.xml
msgid "Collision build mode. Use one of the [enum BuildMode] constants."
-msgstr "碰撞构建模å¼ã€‚使用[enum BuildMode]常é‡ä¹‹ä¸€ã€‚"
+msgstr "碰撞构建模å¼ã€‚使用 [enum BuildMode] 常é‡ä¹‹ä¸€ã€‚"
#: doc/classes/CollisionPolygon2D.xml
msgid "If [code]true[/code], no collisions will be detected."
@@ -17213,7 +17258,7 @@ msgstr "碰撞将仅包括多边形边缘。"
#: doc/classes/CollisionShape.xml
msgid "Node that represents collision shape data in 3D space."
-msgstr "表示3D空间中的碰撞形状数æ®çš„节点。"
+msgstr "表示 3D 空间中的碰撞形状数æ®çš„节点。"
#: doc/classes/CollisionShape.xml
msgid ""
@@ -17271,9 +17316,9 @@ msgid ""
"shape_owner_get_shape] to get the actual shape."
msgstr ""
"编辑器功能,用于在2D空间中创建和编辑碰撞形状。您å¯ä»¥ä½¿ç”¨æ­¤èŠ‚ç‚¹è¡¨ç¤ºå„ç§ç¢°æ’žå½¢"
-"状,例如,将其添加到[Area2D]以æä¾›æ£€æµ‹å½¢çŠ¶ï¼Œæˆ–å°†å…¶æ·»åŠ åˆ°[PhysicsBody2D]以创建"
-"实体。 [b]é‡è¦äº‹é¡¹[/b]:这是创建形状的仅编辑器助手,请使用[method "
-"CollisionObject2D.shape_owner_get_shape]获å–实际形状。"
+"状,例如,将其添加到 [Area2D] 以æä¾›æ£€æµ‹å½¢çŠ¶ï¼Œæˆ–å°†å…¶æ·»åŠ åˆ° [PhysicsBody2D] 以"
+"创建实体。[b]é‡è¦äº‹é¡¹[/b]:这是创建形状的仅编辑器助手,请使用 [method "
+"CollisionObject2D.shape_owner_get_shape] 获å–实际形状。"
#: doc/classes/CollisionShape2D.xml doc/classes/KinematicBody2D.xml
#: doc/classes/RectangleShape2D.xml doc/classes/TileMap.xml
@@ -17379,7 +17424,6 @@ msgstr ""
"[/codeblock]"
#: doc/classes/Color.xml
-#, fuzzy
msgid ""
"Constructs a color from a 32-bit integer in RGBA format (each byte "
"represents a color channel).\n"
@@ -17389,7 +17433,7 @@ msgid ""
msgstr ""
"从 RGBA æ ¼å¼çš„ 32 使•´æ•°æž„造颜色,æ¯ä¸ªå­—节代表一个颜色通é“。\n"
"[codeblock]\n"
-"var c = Color(274) # Similar to Color(0.0, 0.0, 0.004, 0.07)\n"
+"var color = Color(274) # 类似 Color(0.0, 0.0, 0.004, 0.07)\n"
"[/codeblock]"
#: doc/classes/Color.xml
@@ -17415,8 +17459,7 @@ msgid ""
msgstr ""
"æ ¹æ® RGBA 值构造颜色,通常介于 0 å’Œ 1 之间。\n"
"[codeblock]\n"
-"var color = Color(0.2, 1.0, 0.7, 0.8) # Similar to Color8(51, 255, 178, "
-"204)\n"
+"var color = Color(0.2, 1.0, 0.7, 0.8) # 类似于 Color8(51, 255, 178, 204)\n"
"[/codeblock]"
#: doc/classes/Color.xml
@@ -17439,7 +17482,6 @@ msgstr ""
"[/codeblock]"
#: doc/classes/Color.xml
-#, fuzzy
msgid ""
"Returns the most contrasting color.\n"
"[codeblock]\n"
@@ -17450,9 +17492,8 @@ msgid ""
msgstr ""
"返回对比度最高的颜色。\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"
+"var color = Color(0.3, 0.4, 0.9)\n"
+"var contrasted_color = color.contrasted() # 相当于 RGBA(204, 229, 102, 255)\n"
"[/codeblock]"
#: doc/classes/Color.xml
@@ -17464,14 +17505,13 @@ msgid ""
"var darkgreen = green.darkened(0.2) # 20% darker than regular green\n"
"[/codeblock]"
msgstr ""
-"返回一个新的颜色,这个颜色按指定的百分比(比例从0到1ï¼‰å˜æš—。\n"
+"返回一个新的颜色,这个颜色按指定的百分比(比例从0 到 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]"
#: doc/classes/Color.xml
-#, fuzzy
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"
@@ -17480,11 +17520,11 @@ msgid ""
"50, 79, 0.8) or Color8(100, 151, 201, 0.8)\n"
"[/codeblock]"
msgstr ""
-"从 HSV é…置文件中构建一个颜色。[code]h[/code]ã€[code]s[/code]å’Œ[code]v[/code]"
-"是0和1之间的值。\n"
+"从 HSV é…置文件中构建一个颜色。[code]h[/code]ã€[code]s[/code] å’Œ [code]v[/"
+"code] 是 0 和 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"
+"var color = Color.from_hsv(0.58, 0.5, 0.79, 0.8) # 相当于 HSV(210, 50, 79, "
+"0.8) 或 Color8(100, 151, 201, 0.8)\n"
"[/codeblock]"
#: doc/classes/Color.xml
@@ -17497,7 +17537,6 @@ msgstr ""
"å¯ä»¥ç”¨æ¥ç¡®å®šé¢œè‰²æ˜¯äº®è‰²è¿˜æ˜¯æš—色。一般认为亮度å°äºŽ 0.5 的颜色是暗色。"
#: doc/classes/Color.xml
-#, fuzzy
msgid ""
"Returns the color's grayscale representation.\n"
"The gray value is calculated as [code](r + g + b) / 3[/code].\n"
@@ -17509,8 +17548,8 @@ msgstr ""
"返回颜色的ç°åº¦è¡¨ç¤ºã€‚\n"
"ç°åº¦å€¼è®¡ç®—为 [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"
+"var color = Color(0.2, 0.45, 0.82)\n"
+"var gray = color.gray() # 值为 0.466667\n"
"[/codeblock]"
#: doc/classes/Color.xml
@@ -17524,7 +17563,7 @@ msgstr ""
"返回å色 [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() # 等价于 Color(0.7, 0.6, 0.1)\n"
+"var inverted_color = color.inverted() # 相当于 Color(0.7, 0.6, 0.1)\n"
"[/codeblock]"
#: doc/classes/Color.xml
@@ -17545,10 +17584,10 @@ msgid ""
"var lightgreen = green.lightened(0.2) # 20% lighter than regular green\n"
"[/codeblock]"
msgstr ""
-"返回将此颜色按指定百分比(比例从0到1ï¼‰å˜æµ…åŽäº§ç”Ÿçš„æ–°é¢œè‰²ã€‚\n"
+"返回将此颜色按指定百分比(比例从 0 到 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"
+"var lightgreen = green.lightened(0.2) # æ¯”æ™®é€šçš„ç»¿è‰²è¦æ·¡ 20%\n"
"[/codeblock]"
#: doc/classes/Color.xml
@@ -17566,8 +17605,7 @@ msgstr ""
"[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"
+"var li_c = c1.linear_interpolate(c2, 0.5) # 相当于 Color(0.5, 0.5, 0.0)\n"
"[/codeblock]"
#: doc/classes/Color.xml
@@ -17580,11 +17618,11 @@ msgid ""
"print(color.to_abgr32()) # Prints 4281565439\n"
"[/codeblock]"
msgstr ""
-"返回转æ¢ä¸º ABGR æ ¼å¼çš„ 32 使•´æ•°çš„颜色,æ¯ä¸ªå­—节代表一个颜色通é“。 ABGR 是默"
-"认格å¼çš„转置版本。\n"
+"返回转æ¢ä¸º ABGR æ ¼å¼çš„ 32 使•´æ•°çš„颜色,æ¯ä¸ªå­—节代表一个颜色通é“。ABGR 是默认"
+"æ ¼å¼çš„转置版本。\n"
"[codeblock]\n"
"var color = Color(1, 0.5, 0.2)\n"
-"print(color.to_abgr32()) # Prints 4281565439\n"
+"print(color.to_abgr32()) # 输出 4281565439\n"
"[/codeblock]"
#: doc/classes/Color.xml
@@ -17597,11 +17635,11 @@ msgid ""
"print(color.to_abgr64()) # Prints -225178692812801\n"
"[/codeblock]"
msgstr ""
-"返回转æ¢ä¸º ABGR æ ¼å¼çš„ 64 使•´æ•°çš„颜色,æ¯ä¸ªå­—代表一个颜色通é“。 ABGR 是默认"
-"æ ¼å¼çš„转置版本。\n"
+"返回转æ¢ä¸º ABGR æ ¼å¼çš„ 64 使•´æ•°çš„颜色,æ¯ä¸ªå­—代表一个颜色通é“。ABGR 是默认格"
+"å¼çš„转置版本。\n"
"[codeblock]\n"
"var color = Color(1, 0.5, 0.2)\n"
-"print(color.to_abgr64()) # Prints -225178692812801\n"
+"print(color.to_abgr64()) # 输出 -225178692812801\n"
"[/codeblock]"
#: doc/classes/Color.xml
@@ -17613,11 +17651,11 @@ msgid ""
"print(color.to_argb32()) # Prints 4294934323\n"
"[/codeblock]"
msgstr ""
-"返回转æ¢ä¸º ARGB æ ¼å¼çš„ 32 使•´æ•°çš„颜色,æ¯ä¸ªå­—节代表一个颜色通é“。 ARGB 与 "
+"返回转æ¢ä¸º ARGB æ ¼å¼çš„ 32 使•´æ•°çš„颜色,æ¯ä¸ªå­—节代表一个颜色通é“。ARGB 与 "
"DirectX 更加兼容。\n"
"[codeblock]\n"
"var color = Color(1, 0.5, 0.2)\n"
-"print(color.to_argb32()) # Prints 4294934323\n"
+"print(color.to_argb32()) # 输出 4294934323\n"
"[/codeblock]"
#: doc/classes/Color.xml
@@ -17629,15 +17667,14 @@ msgid ""
"print(color.to_argb64()) # Prints -2147470541\n"
"[/codeblock]"
msgstr ""
-"返回转æ¢ä¸º ARGB æ ¼å¼çš„ 64 使•´æ•°çš„颜色,æ¯ä¸ªå­—代表一个颜色通é“。 ARGB 与 "
+"返回转æ¢ä¸º ARGB æ ¼å¼çš„ 64 使•´æ•°çš„颜色,æ¯ä¸ªå­—代表一个颜色通é“。ARGB 与 "
"DirectX 更加兼容。\n"
"[codeblock]\n"
"var color = Color(1, 0.5, 0.2)\n"
-"print(color.to_argb64()) # Prints -2147470541\n"
+"print(color.to_argb64()) # 输出 -2147470541\n"
"[/codeblock]"
#: doc/classes/Color.xml
-#, fuzzy
msgid ""
"Returns the color's HTML hexadecimal color string in ARGB format (ex: "
"[code]ff34f822[/code]).\n"
@@ -17653,9 +17690,9 @@ msgstr ""
"å°† [code]with_alpha[/code] 设置为 [code]false[/code] å°†å六进制字符串中的 "
"Alpha 排除在外。\n"
"[codeblock]\n"
-"var c = Color(1, 1, 1, 0.5)\n"
-"var s1 = c.to_html() # 返回 \"7fffffff\"\n"
-"var s2 = c.to_html(false) # 返回 \"ffffff\"\n"
+"var color = Color(1, 1, 1, 0.5)\n"
+"var s1 = color.to_html() # 返回 \"7fffffff\"\n"
+"var s2 = color.to_html(false) # 返回 \"ffffff\"\n"
"[/codeblock]"
#: doc/classes/Color.xml
@@ -17667,11 +17704,11 @@ msgid ""
"print(color.to_rgba32()) # Prints 4286526463\n"
"[/codeblock]"
msgstr ""
-"返回转æ¢ä¸º RGBA æ ¼å¼çš„ 32 使•´æ•°çš„颜色,æ¯ä¸ªå­—节代表一个颜色通é“。 RGBA 是 "
+"返回转æ¢ä¸º RGBA æ ¼å¼çš„ 32 使•´æ•°çš„颜色,æ¯ä¸ªå­—节代表一个颜色通é“。RGBA 是 "
"Godot 的默认格å¼ã€‚\n"
"[codeblock]\n"
"var color = Color(1, 0.5, 0.2)\n"
-"print(color.to_rgba32()) # Prints 4286526463\n"
+"print(color.to_rgba32()) # 输出 4286526463\n"
"[/codeblock]"
#: doc/classes/Color.xml
@@ -17683,11 +17720,11 @@ msgid ""
"print(color.to_rgba64()) # Prints -140736629309441\n"
"[/codeblock]"
msgstr ""
-"返回转æ¢ä¸º RGBA æ ¼å¼çš„ 64 使•´æ•°çš„颜色,æ¯ä¸ªå­—代表一个颜色通é“。 RGBA 是 "
+"返回转æ¢ä¸º RGBA æ ¼å¼çš„ 64 使•´æ•°çš„颜色,æ¯ä¸ªå­—代表一个颜色通é“。RGBA 是 "
"Godot 的默认格å¼ã€‚\n"
"[codeblock]\n"
"var color = Color(1, 0.5, 0.2)\n"
-"print(color.to_rgba64()) # Prints -140736629309441\n"
+"print(color.to_rgba64()) # 输出 -140736629309441\n"
"[/codeblock]"
#: doc/classes/Color.xml
@@ -17701,7 +17738,7 @@ msgstr ""
#: doc/classes/Color.xml
msgid "Wrapper for [member a] that uses the range 0 to 255 instead of 0 to 1."
-msgstr "[member a]的包装程åºï¼Œä½¿ç”¨çš„范围是0到255ï¼Œè€Œä¸æ˜¯0到1。"
+msgstr "[member a] çš„å°è£…器,使用的范围是 0 到 255ï¼Œè€Œä¸æ˜¯ 0 到 1。"
#: doc/classes/Color.xml
msgid "The color's blue component, typically on the range of 0 to 1."
@@ -17709,7 +17746,7 @@ msgstr "颜色的è“色分é‡ï¼Œä¸€èˆ¬åœ¨ 0 到 1 的范围内。"
#: doc/classes/Color.xml
msgid "Wrapper for [member b] that uses the range 0 to 255 instead of 0 to 1."
-msgstr "[member b]çš„å°è£…器,使用0到255çš„èŒƒå›´ï¼Œè€Œä¸æ˜¯0到1。"
+msgstr "[member b] çš„å°è£…器,使用 0 到 255 çš„èŒƒå›´ï¼Œè€Œä¸æ˜¯ 0 到 1。"
#: doc/classes/Color.xml
msgid "The color's green component, typically on the range of 0 to 1."
@@ -17717,27 +17754,27 @@ msgstr "颜色的绿色分é‡ï¼Œä¸€èˆ¬åœ¨ 0 到 1 的范围内。"
#: doc/classes/Color.xml
msgid "Wrapper for [member g] that uses the range 0 to 255 instead of 0 to 1."
-msgstr "[member g]çš„å°è£…器,使用范围0到255è€Œä¸æ˜¯0到1。"
+msgstr "[member g] çš„å°è£…器,使用范围 0 到 255 è€Œä¸æ˜¯ 0 到 1。"
#: doc/classes/Color.xml
msgid "The HSV hue of this color, on the range 0 to 1."
-msgstr "这个颜色的HSV色相,范围是0到1。"
+msgstr "这个颜色的 HSV 色相,范围是 0 到 1。"
#: doc/classes/Color.xml
msgid "The color's red component, typically on the range of 0 to 1."
-msgstr "颜色的红色分é‡ï¼Œé€šå¸¸åœ¨0到1的范围内。"
+msgstr "颜色的红色分é‡ï¼Œé€šå¸¸åœ¨ 0 到 1 的范围内。"
#: doc/classes/Color.xml
msgid "Wrapper for [member r] that uses the range 0 to 255 instead of 0 to 1."
-msgstr "[member r]çš„å°è£…器,使用0到255çš„èŒƒå›´è€Œä¸æ˜¯0到1。"
+msgstr "[member r] çš„å°è£…器,使用 0 到 255 çš„èŒƒå›´è€Œä¸æ˜¯ 0 到 1。"
#: doc/classes/Color.xml
msgid "The HSV saturation of this color, on the range 0 to 1."
-msgstr "该颜色的HSV饱和度,范围为0到1。"
+msgstr "这个颜色的 HSV 饱和度,范围为 0 到 1。"
#: doc/classes/Color.xml
msgid "The HSV value (brightness) of this color, on the range 0 to 1."
-msgstr "该颜色的HSV值(亮度),范围为0至1。"
+msgstr "这个颜色的 HSV 值(亮度),范围为 0 至 1。"
#: doc/classes/Color.xml
msgid "Alice blue color."
@@ -17749,27 +17786,27 @@ msgstr "å¤è‘£ç™½ã€‚"
#: doc/classes/Color.xml
msgid "Aqua color."
-msgstr "水色."
+msgstr "水色。"
#: doc/classes/Color.xml
msgid "Aquamarine color."
-msgstr "æµ·è“色."
+msgstr "æµ·è“色。"
#: doc/classes/Color.xml
msgid "Azure color."
-msgstr "天è“色."
+msgstr "天è“色。"
#: doc/classes/Color.xml
msgid "Beige color."
-msgstr "米黄色."
+msgstr "米黄色。"
#: doc/classes/Color.xml
msgid "Bisque color."
-msgstr "橘黄色."
+msgstr "橘黄色。"
#: doc/classes/Color.xml
msgid "Black color."
-msgstr "黑色."
+msgstr "黑色。"
#: doc/classes/Color.xml
msgid "Blanche almond color."
@@ -17777,7 +17814,7 @@ msgstr "布兰奇æä»è‰²ã€‚"
#: doc/classes/Color.xml
msgid "Blue color."
-msgstr "è“色."
+msgstr "è“色。"
#: doc/classes/Color.xml
msgid "Blue violet color."
@@ -17785,7 +17822,7 @@ msgstr "è“紫色的颜色。"
#: doc/classes/Color.xml
msgid "Brown color."
-msgstr "棕色."
+msgstr "棕色。"
#: doc/classes/Color.xml
msgid "Burly wood color."
@@ -17797,15 +17834,15 @@ msgstr "军æœè“。"
#: doc/classes/Color.xml
msgid "Chartreuse color."
-msgstr "黄è¤è‰²."
+msgstr "黄è¤è‰²ã€‚"
#: doc/classes/Color.xml
msgid "Chocolate color."
-msgstr "巧克力色."
+msgstr "巧克力色。"
#: doc/classes/Color.xml
msgid "Coral color."
-msgstr "çŠç‘šè‰²."
+msgstr "çŠç‘šè‰²ã€‚"
#: doc/classes/Color.xml
msgid "Cornflower color."
@@ -18367,8 +18404,8 @@ msgid ""
"mouse button, otherwise it will apply immediately even in mouse motion event "
"(which can cause performance issues)."
msgstr ""
-"如果[code]true[/code]ï¼Œåªæœ‰åœ¨ç”¨æˆ·æ¾å¼€é¼ æ ‡æŒ‰é’®åŽæ‰ä¼šåº”用颜色,å¦åˆ™å³ä½¿åœ¨é¼ æ ‡ç§»"
-"动事件中也会立å³åº”用(ä¼šé€ æˆæ€§èƒ½é—®é¢˜)。"
+"如果为 [code]true[/code]ï¼Œåªæœ‰åœ¨ç”¨æˆ·æ¾å¼€é¼ æ ‡æŒ‰é’®åŽæ‰ä¼šåº”用颜色,å¦åˆ™å³ä½¿åœ¨é¼ "
+"标移动事件中也会立å³åº”ç”¨ï¼ˆä¼šé€ æˆæ€§èƒ½é—®é¢˜ï¼‰ã€‚"
#: doc/classes/ColorPicker.xml
msgid "If [code]true[/code], shows an alpha channel slider (opacity)."
@@ -18497,7 +18534,8 @@ msgstr ""
msgid ""
"If [code]true[/code], the alpha channel in the displayed [ColorPicker] will "
"be visible."
-msgstr "如果 [code]true[/code],则显示的 [ColorPicker] 中的 Alpha 通é“å°†å¯è§ã€‚"
+msgstr ""
+"如果为 [code]true[/code],则显示的 [ColorPicker] 中的 Alpha 通é“å°†å¯è§ã€‚"
#: doc/classes/ColorPickerButton.xml
msgid "Emitted when the color changes."
@@ -18596,7 +18634,7 @@ msgid ""
msgstr ""
"填充颜色。\n"
"[codeblock]\n"
-"$ColorRect.color = Color(1, 0, 0, 1) # Set ColorRect's color to red.\n"
+"$ColorRect.color = Color(1, 0, 0, 1) # 将 ColorRect 设为红色。\n"
"[/codeblock]"
#: doc/classes/ConcavePolygonShape.xml
@@ -18652,7 +18690,7 @@ msgstr ""
#: doc/classes/ConcavePolygonShape2D.xml
msgid ""
"The array of points that make up the [ConcavePolygonShape2D]'s line segments."
-msgstr "组æˆ[ConcavePolygonShape2D]线段的点的数组。"
+msgstr "ç»„æˆ [ConcavePolygonShape2D] 线段的点的数组。"
#: doc/classes/ConeTwistJoint.xml
msgid "A twist joint between two 3D PhysicsBodies."
@@ -18713,7 +18751,7 @@ msgid ""
"Twist is locked if below 0.05."
msgstr ""
"扭曲是绕扭曲轴的旋转,此值定义了关节å¯ä»¥æ‰­æ›²å¤šè¿œã€‚\n"
-"如果低于0.05,则扭曲被é”定。"
+"如果低于 0.05,则扭曲被é”定。"
#: doc/classes/ConeTwistJoint.xml doc/classes/Generic6DOFJoint.xml
#: doc/classes/HingeJoint.xml doc/classes/Light.xml doc/classes/SliderJoint.xml
@@ -18883,9 +18921,9 @@ msgid ""
"[code]default[/code] value. If [code]default[/code] is not specified or set "
"to [code]null[/code], an error is also raised."
msgstr ""
-"返回指定部分和键的当å‰å€¼ã€‚如果节或键ä¸å­˜åœ¨ï¼Œæœ¬æ–¹æ³•返回åŽå¤‡å€¼[code]default[/"
-"code]。如果没有指定[code]default[/code]或者设置为[code]null[/code],也会引å‘"
-"一个错误。"
+"返回指定部分和键的当å‰å€¼ã€‚如果节或键ä¸å­˜åœ¨ï¼Œæœ¬æ–¹æ³•返回åŽå¤‡å€¼ [code]default[/"
+"code]。如果没有指定 [code]default[/code] 或者设置为 [code]null[/code],也会引"
+"å‘一个错误。"
#: doc/classes/ConfigFile.xml
msgid "Returns [code]true[/code] if the specified section exists."
@@ -18902,9 +18940,9 @@ msgid ""
"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
msgid ""
@@ -18913,9 +18951,9 @@ msgid ""
"the [ConfigFile] object which the method was called on.\n"
"Returns one of the [enum Error] code constants ([code]OK[/code] on success)."
msgstr ""
-"åŠ è½½æŒ‡å®šä¸ºå‚æ•°çš„加密é…置文件,使用æä¾›çš„[code]key[/code]å¯¹å…¶è§£å¯†ã€‚è§£æžæ–‡ä»¶çš„"
-"内容并将其加载到调用该方法的[ConfigFile]对象中。\n"
-"返回[enum Error]代ç å¸¸é‡ä¹‹ä¸€ï¼ˆæˆåŠŸæ—¶è¿”å›ž [code]OK[/code])。"
+"åŠ è½½æŒ‡å®šä¸ºå‚æ•°çš„加密é…置文件,使用æä¾›çš„ [code]key[/code] å¯¹å…¶è§£å¯†ã€‚è§£æžæ–‡ä»¶"
+"的内容并将其加载到调用该方法的 [ConfigFile] 对象中。\n"
+"返回 [enum Error] 代ç å¸¸é‡ä¹‹ä¸€ï¼ˆæˆåŠŸæ—¶è¿”å›ž [code]OK[/code])。"
#: doc/classes/ConfigFile.xml
msgid ""
@@ -18924,9 +18962,9 @@ msgid ""
"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 ""
-"åŠ è½½ä½œä¸ºå‚æ•°çš„加密é…置文件,使用æä¾›çš„[code]password[/code]解密。该文件的内容"
-"被解æžå¹¶åŠ è½½åˆ°è°ƒç”¨è¯¥æ–¹æ³•çš„ [ConfigFile] 对象中。\n"
-"返回[enum Error]代ç å¸¸é‡ä¹‹ä¸€ï¼ˆæˆåŠŸæ—¶è¿”å›ž [code]OK[/code])。"
+"åŠ è½½ä½œä¸ºå‚æ•°çš„加密é…置文件,使用æä¾›çš„ [code]password[/code] 解密。该文件的内"
+"容被解æžå¹¶åŠ è½½åˆ°è°ƒç”¨è¯¥æ–¹æ³•çš„ [ConfigFile] 对象中。\n"
+"返回 [enum Error] 代ç å¸¸é‡ä¹‹ä¸€ï¼ˆæˆåŠŸæ—¶è¿”å›ž [code]OK[/code])。"
#: doc/classes/ConfigFile.xml
msgid ""
@@ -18944,9 +18982,9 @@ msgid ""
"parameter. The output file uses an INI-style structure.\n"
"Returns one of the [enum Error] code constants ([code]OK[/code] on success)."
msgstr ""
-"å°†[ConfigFile]对象的内容ä¿å­˜åˆ°æŒ‡å®šä¸ºå‚数的文件中。输出文件使用INIæ ·å¼çš„结"
+"å°† [ConfigFile] 对象的内容ä¿å­˜åˆ°æŒ‡å®šä¸ºå‚数的文件中。输出文件使用 INI æ ·å¼çš„结"
"构。\n"
-"返回[enum Error]代ç å¸¸é‡ä¹‹ä¸€ï¼ˆæˆåŠŸæ—¶è¿”å›ž [code]OK[/code])。"
+"返回 [enum Error] 代ç å¸¸é‡ä¹‹ä¸€ï¼ˆæˆåŠŸæ—¶è¿”å›ž [code]OK[/code])。"
#: doc/classes/ConfigFile.xml
msgid ""
@@ -18955,9 +18993,9 @@ msgid ""
"The output file uses an INI-style structure.\n"
"Returns one of the [enum Error] code constants ([code]OK[/code] on success)."
msgstr ""
-"使用æä¾›çš„[code]key[/code]å°†[ConfigFile]对象的内容ä¿å­˜åˆ°ä½œä¸ºå‚数指定的AES-256"
-"加密文件中。输出文件使用INIæ ·å¼çš„结构。\n"
-"返回[enum Error]代ç å¸¸é‡ä¹‹ä¸€ï¼ˆæˆåŠŸæ—¶è¿”å›ž [code]OK[/code])。"
+"使用æä¾›çš„ [code]key[/code] å°† [ConfigFile] 对象的内容ä¿å­˜åˆ°ä½œä¸ºå‚数指定的 "
+"AES-256 加密文件中。输出文件使用 INI æ ·å¼çš„结构。\n"
+"返回 [enum Error] 代ç å¸¸é‡ä¹‹ä¸€ï¼ˆæˆåŠŸæ—¶è¿”å›ž [code]OK[/code])。"
#: doc/classes/ConfigFile.xml
msgid ""
@@ -18966,9 +19004,9 @@ msgid ""
"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 ""
-"å°†[ConfigFile]对象的内容ä¿å­˜åˆ°ä½œä¸ºå‚数指定的AES-256加密文件中,使用æä¾›çš„"
-"[code]password[/code]进行加密。输出文件使用 INI 风格的结构。\n"
-"返回 [enum Error] 代ç å¸¸é‡ä¹‹ä¸€ (æˆåŠŸæ—¶è¿”å›ž [code]OK[/code])。"
+"å°† [ConfigFile] 对象的内容ä¿å­˜åˆ°ä½œä¸ºå‚数指定的 AES-256 加密文件中,使用æä¾›"
+"的 [code]password[/code]进行加密。输出文件使用 INI 风格的结构。\n"
+"返回 [enum Error] 代ç å¸¸é‡ä¹‹ä¸€ï¼ˆæˆåŠŸæ—¶è¿”å›ž [code]OK[/code])。"
#: doc/classes/ConfigFile.xml
msgid ""
@@ -18977,9 +19015,9 @@ msgid ""
"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 ""
-"为指定章节的指定键赋值。如果节或键ä¸å­˜åœ¨ï¼Œåˆ™åˆ›å»ºå®ƒä»¬ã€‚如果指定的键存在,传递"
-"一个[code]null[/code]的值就会删除指定的键,如果键被删除åŽï¼Œé”®æœ€ç»ˆæ˜¯ç©ºçš„,就会"
-"删除节。"
+"为指定章节的指定键赋值。如果节或键ä¸å­˜åœ¨ï¼Œåˆ™åˆ›å»ºå®ƒä»¬ã€‚如果指定的键存在,传递 "
+"[code]null[/code] 值就会删除指定的键,如果键被删除åŽï¼Œé”®æœ€ç»ˆæ˜¯ç©ºçš„,就会删除"
+"节。"
#: doc/classes/ConfirmationDialog.xml
msgid "Dialog for confirmation of actions."
@@ -18995,7 +19033,7 @@ msgid ""
"get_cancel().connect(\"pressed\", self, \"cancelled\")\n"
"[/codeblock]."
msgstr ""
-"用于确认æ“ä½œçš„å¯¹è¯æ¡†ã€‚è¿™ä¸ªå¯¹è¯æ¡†ç»§æ‰¿è‡ª[AcceptDialog]ï¼Œä½†é»˜è®¤æœ‰ä¸€ä¸ªç¡®å®šå’Œå–æ¶ˆ"
+"用于确认æ“ä½œçš„å¯¹è¯æ¡†ã€‚è¿™ä¸ªå¯¹è¯æ¡†ç»§æ‰¿è‡ª [AcceptDialog]ï¼Œä½†é»˜è®¤æœ‰ä¸€ä¸ªç¡®å®šå’Œå–æ¶ˆ"
"按钮(按主机æ“作系统顺åºï¼‰ã€‚\n"
"è¦èŽ·å¾—å–æ¶ˆæ“作,你å¯ä»¥ä½¿ç”¨\n"
"[codeblock]\n"
@@ -19091,26 +19129,26 @@ msgid ""
"code] methods provided by this class."
msgstr ""
"所有 UI 相关节点的基类。[Control] 具有定义其范围的边界矩形ã€ç›¸å¯¹äºŽå…¶çˆ¶æŽ§ä»¶æˆ–"
-"当å‰è§†çª—的锚点ä½ç½®ä»¥åŠè¡¨ç¤ºé”šç‚¹å移的边è·ã€‚ 当节点ã€å…¶ä»»ä½•父节点或å±å¹•尺寸å‘生"
+"当å‰è§†çª—的锚点ä½ç½®ä»¥åŠè¡¨ç¤ºé”šç‚¹å移的边è·ã€‚当节点ã€å…¶ä»»ä½•父节点或å±å¹•尺寸å‘生"
"å˜åŒ–时,边è·ä¼šè‡ªåŠ¨æ›´æ–°ã€‚\n"
-"更多关于 Godot çš„ UI 系统ã€é”šç‚¹ã€è¾¹è·å’Œå®¹å™¨çš„ä¿¡æ¯ï¼Œè¯·å‚阅手册中的相关教程。 "
-"è¦æž„å»ºçµæ´»çš„ UIï¼Œæ‚¨éœ€è¦æ··åˆä½¿ç”¨ä»Ž [Control] å’Œ [Container] 节点继承的 UI å…ƒ"
+"更多关于 Godot çš„ UI 系统ã€é”šç‚¹ã€è¾¹è·å’Œå®¹å™¨çš„ä¿¡æ¯ï¼Œè¯·å‚阅手册中的相关教程。è¦"
+"æž„å»ºçµæ´»çš„ UIï¼Œæ‚¨éœ€è¦æ··åˆä½¿ç”¨ä»Ž [Control] å’Œ [Container] 节点继承的 UI å…ƒ"
"素。\n"
"[b]用户界é¢èŠ‚ç‚¹å’Œè¾“å…¥[/b]\n"
-"Godot 首先通过调用 [method Node._input] 将输入事件å‘é€åˆ°åœºæ™¯çš„æ ¹èŠ‚ç‚¹ã€‚ "
-"[method Node._input] 将事件沿节点树å‘下转å‘到鼠标光标下或键盘焦点上的节点。 "
-"为此,它调用 [method MainLoop._input_event]。 调用 [method accept_event] 以便"
-"没有其他节点收到该事件。 一旦你接å—一个输入,它就会被处ç†ï¼Œæ‰€ä»¥ [method Node."
+"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"
+"åªæœ‰ä¸€ä¸ª [Control] 节点å¯ä»¥å¤„äºŽé”®ç›˜ç„¦ç‚¹ã€‚åªæœ‰å¤„于焦点的节点æ‰ä¼šæŽ¥æ”¶é”®ç›˜äº‹ä»¶ã€‚"
+"è¦èŽ·å¾—ç„¦ç‚¹ï¼Œè¯·è°ƒç”¨ [method grab_focus]。在å¦ä¸€ä¸ªèŠ‚ç‚¹èŽ·å¾—èšç„¦æ—¶ [Control] 节点"
+"会失去焦点,或者您éšè—焦点中的节点。\n"
"将 [member mouse_filter] 设置为 [constant MOUSE_FILTER_IGNORE] 以告诉 "
-"[Control] 节点忽略鼠标或触摸事件。 如果您在按钮顶部放置一个图标,您将需è¦"
+"[Control] 节点忽略鼠标或触摸事件。如果您在按钮顶部放置一个图标,您将需è¦"
"它。\n"
-"[Theme] èµ„æºæ›´æ”¹æŽ§ä»¶çš„外观。 如果您更改 [Control] 节点上的 [Theme],则会影å“"
-"其所有å­èŠ‚ç‚¹ã€‚ è¦è¦†ç›–æŸäº›ä¸»é¢˜çš„傿•°ï¼Œè¯·è°ƒç”¨ [code]add_*_override[/code] 方法"
-"之一,例如 [method add_font_override]。 您å¯ä»¥ä½¿ç”¨æ£€æŸ¥å™¨è¦†ç›–主题。\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 "
@@ -19237,7 +19275,7 @@ msgid ""
"[/codeblock]"
msgstr ""
"由用户实现的虚方法。返回一个 [Control] 节点,该节点应用作工具æç¤ºè€Œä¸æ˜¯é»˜è®¤èŠ‚"
-"点。 [code]for_text[/code] åŒ…å« [member hint_tooltip] 属性的内容。\n"
+"点。[code]for_text[/code] åŒ…å« [member hint_tooltip] 属性的内容。\n"
"返回的节点必须是 [Control] 或 Control-derived 类型。它å¯ä»¥æœ‰ä»»ä½•类型的å­èŠ‚"
"点。当工具æç¤ºæ¶ˆå¤±æ—¶å®ƒä¼šè¢«é‡Šæ”¾ï¼Œå› æ­¤è¯·ç¡®ä¿ä½ å§‹ç»ˆæä¾›ä¸€ä¸ªæ–°å®žä¾‹ï¼ˆå¦‚果你想使用"
"场景树中预先存在的节点,å¯ä»¥å¤åˆ¶å®ƒå¹¶ä¼ é€’å¤åˆ¶çš„实例)。当返回 [code]null[/"
@@ -19436,10 +19474,10 @@ msgid ""
" color = data[\"color\"]\n"
"[/codeblock]"
msgstr ""
-"Godot调用此方法以将控件的[method get_drag_data]结果中的[code]data[/code]传递"
-"给您。 Godot首先调用[method can_drop_data]æ¥æµ‹è¯•是å¦å…许[code]data[/code]在"
-"[code]position[/code]处删除,其中[code]position[/code]对于此控件而言是本地"
-"的。\n"
+"Godot 调用此方法以将控件的 [method get_drag_data] 结果中的 [code]data[/code] "
+"传递给您。Godot 首先调用 [method can_drop_data] æ¥æµ‹è¯•是å¦å…许 [code]data[/"
+"code] 在 [code]position[/code] 处删除,其中 [code]position[/code] 对于此控件"
+"而言是本地的。\n"
"[codeblock]\n"
"func can_drop_data(position, data):\n"
" return typeof(data) == TYPE_DICTIONARY and data.has(\"color\")\n"
@@ -19451,12 +19489,12 @@ msgstr ""
#: doc/classes/Control.xml
msgid ""
"Finds the next (below in the tree) [Control] that can receive the focus."
-msgstr "找到下一个å¯ä»¥æŽ¥å—焦点的[Control],在树的下方。"
+msgstr "找到下一个å¯ä»¥æŽ¥å—焦点的 [Control],在树的下方。"
#: doc/classes/Control.xml
msgid ""
"Finds the previous (above in the tree) [Control] that can receive the focus."
-msgstr "找到å¯ä»¥æŽ¥æ”¶ç„¦ç‚¹çš„上一个[Control],在树的上方。"
+msgstr "找到å¯ä»¥æŽ¥æ”¶ç„¦ç‚¹çš„上一个 [Control],在树的上方。"
#: doc/classes/Control.xml
msgid ""
@@ -19467,11 +19505,11 @@ msgid ""
"The methods [method can_drop_data] and [method drop_data] must be "
"implemented on controls that want to receive drop data."
msgstr ""
-"通过传递[code]data[/code]和[code]preview[/code]强制拖动并绕过[method "
-"get_drag_data]å’Œ[method set_drag_preview]。å³ä½¿é¼ æ ‡æ—¢ä¸åœ¨è¯¥æŽ§ä»¶ä¸Šï¼Œä¹Ÿæœªåœ¨è¯¥æŽ§"
-"件上按下,都将开始拖动。\n"
-"方法[method can_drop_data]å’Œ[method drop_data]å¿…é¡»åœ¨è¦æŽ¥æ”¶æ”¾ç½®æ•°æ®çš„æŽ§ä»¶ä¸Šå®ž"
-"现。"
+"通过传递 [code]data[/code] 和 [code]preview[/code] 强制拖动并绕过 [method "
+"get_drag_data] å’Œ [method set_drag_preview]。å³ä½¿é¼ æ ‡æ—¢ä¸åœ¨è¯¥æŽ§ä»¶ä¸Šï¼Œä¹Ÿæœªåœ¨è¯¥"
+"控件上按下,都将开始拖动。\n"
+"[method can_drop_data] å’Œ [method drop_data] æ–¹æ³•å¿…é¡»åœ¨è¦æŽ¥æ”¶æ”¾ç½®æ•°æ®çš„æŽ§ä»¶ä¸Š"
+"实现。"
#: doc/classes/Control.xml
msgid ""
@@ -19536,7 +19574,8 @@ msgstr ""
msgid ""
"Returns combined minimum size from [member rect_min_size] and [method "
"get_minimum_size]."
-msgstr "返回[member rect_min_size]å’Œ[method get_minimum_size]çš„ç»„åˆæœ€å°å¤§å°ã€‚"
+msgstr ""
+"返回 [member rect_min_size] å’Œ [method get_minimum_size] çš„ç»„åˆæœ€å°å¤§å°ã€‚"
#: doc/classes/Control.xml
msgid ""
@@ -19572,12 +19611,12 @@ msgid ""
" return mydata\n"
"[/codeblock]"
msgstr ""
-"Godot调用此方法æ¥èŽ·å–å¯ä»¥æ‹–放到期望放置数æ®çš„æŽ§ä»¶ä¸Šçš„æ•°æ®ã€‚å¦‚æžœæ²¡æœ‰è¦æ‹–动的数"
-"æ®ï¼Œåˆ™è¿”回 [code]null[/code]ã€‚æƒ³è¦æŽ¥æ”¶æ”¾ç½®æ•°æ®çš„æŽ§ä»¶åº”实现[method "
-"can_drop_data]和[method drop_data]。 [code]position[/code]在此控件中是本地"
-"的。å¯ä»¥ä½¿ç”¨[method force_drag]强制拖动。\n"
-"å¯ä»¥ä½¿ç”¨[method set_drag_preview]设置跟éšé¼ æ ‡çš„预览,该预览将代表数æ®ã€‚设置预"
-"è§ˆçš„å¥½æ—¶æœºå°±æ˜¯è¿™ç§æ–¹æ³•。\n"
+"Godot 调用此方法æ¥èŽ·å–å¯ä»¥æ‹–放到期望放置数æ®çš„æŽ§ä»¶ä¸Šçš„æ•°æ®ã€‚å¦‚æžœæ²¡æœ‰è¦æ‹–动的"
+"æ•°æ®ï¼Œåˆ™è¿”回 [code]null[/code]ã€‚æƒ³è¦æŽ¥æ”¶æ”¾ç½®æ•°æ®çš„æŽ§ä»¶åº”实现 [method "
+"can_drop_data] 和 [method drop_data]。[code]position[/code] 在此控件中是本地"
+"的。å¯ä»¥ä½¿ç”¨ [method force_drag] 强制拖动。\n"
+"å¯ä»¥ä½¿ç”¨ [method set_drag_preview] 设置跟éšé¼ æ ‡çš„预览,该预览将代表数æ®ã€‚设置"
+"é¢„è§ˆçš„å¥½æ—¶æœºå°±æ˜¯è¿™ç§æ–¹æ³•。\n"
"[codeblock]\n"
"func get_drag_data(position):\n"
" var mydata = make_data()\n"
@@ -19587,7 +19626,7 @@ msgstr ""
#: doc/classes/Control.xml
msgid "Returns [member margin_right] and [member margin_bottom]."
-msgstr "返回[member margin_right]和[member margin_bottom]。"
+msgstr "返回 [member margin_right] 和 [member margin_bottom]。"
#: doc/classes/Control.xml
msgid ""
@@ -19596,9 +19635,9 @@ msgid ""
"[member focus_neighbour_left], [member focus_neighbour_right] and [member "
"focus_neighbour_top]."
msgstr ""
-"返回由[enum Margin]枚举的[code]margin[/code]叏釿 ‡è¯†çš„焦点邻居。 [member "
-"focus_neighbour_bottom],[member focus_neighbour_left],[member "
-"focus_neighbour_right]å’Œ[member focus_neighbour_top]çš„èŽ·å–æ–¹æ³•。"
+"返回由 [enum Margin] 枚举的 [code]margin[/code] 叏釿 ‡è¯†çš„焦点邻居。[member "
+"focus_neighbour_bottom]ã€[member focus_neighbour_left]ã€[member "
+"focus_neighbour_right]ã€[member focus_neighbour_top] çš„èŽ·å–æ–¹æ³•。"
#: doc/classes/Control.xml
msgid ""
@@ -19621,7 +19660,7 @@ 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 ""
-"返回控件相对于å±å¹•左上角的ä½ç½®å’Œå¤§å°ã€‚请å‚阅[member rect_position]å’Œ[member "
+"返回控件相对于å±å¹•左上角的ä½ç½®å’Œå¤§å°ã€‚è§ [member rect_position] å’Œ [member "
"rect_size]。"
#: doc/classes/Control.xml
@@ -19647,7 +19686,7 @@ msgstr ""
#: doc/classes/Control.xml
msgid "Returns the minimum size for this control. See [member rect_min_size]."
-msgstr "返回此控件的最å°å°ºå¯¸ã€‚å‚阅[member rect_min_size]。"
+msgstr "返回此控件的最å°å°ºå¯¸ã€‚è§ [member rect_min_size]。"
#: doc/classes/Control.xml
msgid "Returns the width/height occupied in the parent control."
@@ -19662,7 +19701,7 @@ 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 ""
-"返回相对于父控件左上角的控件的ä½ç½®å’Œå¤§å°ã€‚请å‚阅[member rect_position]å’Œ"
+"返回相对于父控件左上角的控件的ä½ç½®å’Œå¤§å°ã€‚è§ [member rect_position] å’Œ "
"[member rect_size]。"
#: doc/classes/Control.xml
@@ -19963,7 +20002,7 @@ msgid ""
"also be updated."
msgstr ""
"将锚点设置为预设 [code]preset[/code],å–值范围为 [enum Control.LayoutPreset] "
-"枚举。等效于在 2D 编辑器中使用布局èœå•。\n"
+"枚举。相当于在 2D 编辑器中使用布局èœå•。\n"
"如果 [code]keep_margins[/code] 是 [code]true[/code],控件的ä½ç½®ä¹Ÿä¼šæ›´æ–°ã€‚"
#: doc/classes/Control.xml
@@ -20094,9 +20133,9 @@ msgid ""
"margin_bottom], [member margin_left], [member margin_right] and [member "
"margin_top]."
msgstr ""
-"设置由[enum Margin]枚举到[code]offset[/code]çš„[code]margin[/code]叏釿‰€æ ‡è¯†çš„"
-"è¾¹è·ã€‚用于[member margin_bottom],[member margin_left],[member margin_right]"
-"和[member margin_top]的设置方法。"
+"设置由 [enum Margin] 枚举到 [code]offset[/code] çš„ [code]margin[/code] 叏釿‰€"
+"标识的边è·ã€‚用于 [member margin_bottom]ã€[member margin_left]ã€[member "
+"margin_right]ã€[member margin_top] 的设置方法。"
#: doc/classes/Control.xml
msgid ""
@@ -20110,8 +20149,8 @@ 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"
+"从 [enum Control.LayoutPreset] 枚举将边è·è®¾ç½®ä¸º [code]preset[/code]。相当于"
+"在 2D 编辑器中使用布局èœå•的编ç ã€‚\n"
"ä½¿ç”¨å‚æ•° [code]resize_mode[/code] å’Œ [enum Control.LayoutPresetMode] 中的常é‡"
"æ¥æ›´å¥½åœ°ç¡®å®š [Control] 的最终大å°ã€‚如果与更改大å°çš„预设一起使用,则常规大å°å°†"
"被忽略,例如[code]PRESET_LEFT_WIDE[/code]。\n"
@@ -20137,8 +20176,8 @@ msgid ""
"If [code]keep_margins[/code] is [code]true[/code], control's anchors will be "
"updated instead of margins."
msgstr ""
-"设置控件的大å°(å‚阅[member rect_size])。\n"
-"如果[code]keep_margins[/code]是[code]true[/code]ï¼Œåˆ™ä¼šæ›´æ–°æŽ§ä»¶çš„é”šç‚¹è€Œä¸æ˜¯é¡µ"
+"设置控件的大å°ï¼ˆè§ [member rect_size])。\n"
+"如果 [code]keep_margins[/code] 为 [code]true[/code]ï¼Œåˆ™ä¼šæ›´æ–°æŽ§ä»¶çš„é”šç‚¹è€Œä¸æ˜¯"
"è¾¹è·ã€‚"
#: doc/classes/Control.xml
@@ -20172,8 +20211,8 @@ msgid ""
"moves or changes size. You can use one of the [enum Anchor] constants for "
"convenience."
msgstr ""
-"å°†èŠ‚ç‚¹çš„åº•éƒ¨è¾¹ç¼˜é”šå®šåˆ°å…¶çˆ¶æŽ§ä»¶çš„åŽŸç‚¹ï¼Œä¸­å¿ƒæˆ–æœ«ç«¯ã€‚å½“èŠ‚ç‚¹ç§»åŠ¨æˆ–æ›´æ”¹å¤§å°æ—¶ï¼Œå®ƒ"
-"会更改底部边è·çš„æ›´æ–°æ–¹å¼ã€‚为了方便起è§ï¼Œå¯ä»¥ä½¿ç”¨ [enum Anchor] 常é‡ä¹‹ä¸€ã€‚"
+"å°†èŠ‚ç‚¹çš„åº•è¾¹ç¼˜é”šå®šåˆ°å…¶çˆ¶æŽ§ä»¶çš„åŽŸç‚¹ï¼Œä¸­å¿ƒæˆ–æœ«ç«¯ã€‚å½“èŠ‚ç‚¹ç§»åŠ¨æˆ–æ›´æ”¹å¤§å°æ—¶ï¼Œå®ƒä¼š"
+"更改底部边è·çš„æ›´æ–°æ–¹å¼ã€‚为了方便起è§ï¼Œå¯ä»¥ä½¿ç”¨ [enum Anchor] 常é‡ä¹‹ä¸€ã€‚"
#: doc/classes/Control.xml
msgid ""
@@ -20364,7 +20403,7 @@ msgid ""
"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 ""
-"节点底边与其父控件之间的è·ç¦»ï¼ŒåŸºäºŽ [member anchor_bottom]。\n"
+"节点的底边缘与其父控件之间的è·ç¦»ï¼ŒåŸºäºŽ [member anchor_bottom]。\n"
"è¾¹è·é€šå¸¸ç”±ä¸€ä¸ªæˆ–多个父 [Container] 节点控制,因此,如果您的节点是 "
"[Container] 的直接å­çº§ï¼Œåˆ™ä¸åº”æ‰‹åŠ¨ä¿®æ”¹å®ƒä»¬ã€‚å½“æ‚¨ç§»åŠ¨æˆ–è°ƒæ•´èŠ‚ç‚¹å¤§å°æ—¶ï¼Œè¾¹è·ä¼š"
"自动更新。"
@@ -20403,7 +20442,7 @@ msgid ""
"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 ""
-"节点的顶边与其父控件之间的è·ç¦»ï¼ŒåŸºäºŽ [member anchor_top]。\n"
+"节点的顶边缘与其父控件之间的è·ç¦»ï¼ŒåŸºäºŽ [member anchor_top]。\n"
"è¾¹è·é€šå¸¸ç”±ä¸€ä¸ªæˆ–多个父 [Container] 节点控制,所以如果您的节点是 [Container] "
"的直接å­èŠ‚ç‚¹ï¼Œæ‚¨ä¸åº”è¯¥æ‰‹åŠ¨ä¿®æ”¹å®ƒä»¬ã€‚å½“æ‚¨ç§»åŠ¨æˆ–è°ƒæ•´èŠ‚ç‚¹å¤§å°æ—¶ï¼Œè¾¹è·ä¼šè‡ªåŠ¨æ›´"
"新。"
@@ -20415,9 +20454,9 @@ msgid ""
"[b]Note:[/b] On Linux, shapes may vary depending on the cursor theme of the "
"system."
msgstr ""
-"此控件的默认光标形状。对于Godotæ’ä»¶å’Œä½¿ç”¨ç³»ç»Ÿé¼ æ ‡å…‰æ ‡çš„åº”ç”¨ç¨‹åºæˆ–游æˆå¾ˆæœ‰"
+"此控件的默认光标形状。对于 Godot æ’ä»¶å’Œä½¿ç”¨ç³»ç»Ÿé¼ æ ‡å…‰æ ‡çš„åº”ç”¨ç¨‹åºæˆ–游æˆå¾ˆæœ‰"
"用。\n"
-"[b]注æ„:[/b]在Linux上,形状å¯èƒ½ä¼šæœ‰æ‰€ä¸åŒï¼Œå…·ä½“å–决于系统的光标主题。"
+"[b]注æ„:[/b]在 Linux 上,形状å¯èƒ½ä¼šæœ‰æ‰€ä¸åŒï¼Œå…·ä½“å–决于系统的光标主题。"
#: doc/classes/Control.xml
msgid ""
@@ -20426,9 +20465,9 @@ msgid ""
"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 ""
-"控制控件是å¦èƒ½å¤Ÿé€šè¿‡[method _gui_input]接收鼠标按钮输入事件,以åŠå¦‚何处ç†è¿™äº›"
-"事件。还控制控件是å¦èƒ½æŽ¥æ”¶[signal mouse_entered]å’Œ[signal mouse_exited]ä¿¡å·ã€‚"
-"å‚é˜…å¸¸é‡æ¥äº†è§£æ¯ä¸ªå¸¸é‡çš„作用。"
+"控制控件是å¦èƒ½å¤Ÿé€šè¿‡ [method _gui_input] 接收鼠标按钮输入事件,以åŠå¦‚何处ç†è¿™"
+"些事件。还控制控件是å¦èƒ½æŽ¥æ”¶ [signal mouse_entered] å’Œ [signal mouse_exited] "
+"ä¿¡å·ã€‚å‚é˜…å¸¸é‡æ¥äº†è§£æ¯ä¸ªå¸¸é‡çš„作用。"
#: doc/classes/Control.xml
msgid ""
@@ -20436,8 +20475,8 @@ msgid ""
"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 ""
-"å¯ç”¨æ˜¯å¦åº”将基于[CanvasItem]çš„å­æŽ§ä»¶æ¸²æŸ“åˆ°è¯¥æŽ§ä»¶çš„çŸ©å½¢ä¸Šã€‚å¦‚æžœ[code]true[/"
-"code],则ä¸ä¼šæ¸²æŸ“å­æŽ§ä»¶ä¸­æ˜Žæ˜¾åœ¨çŸ©å½¢ä¹‹å¤–çš„éƒ¨åˆ†ã€‚"
+"å¯ç”¨æ˜¯å¦åº”将基于 [CanvasItem] çš„å­æŽ§ä»¶æ¸²æŸ“åˆ°è¯¥æŽ§ä»¶çš„çŸ©å½¢ä¸Šã€‚å¦‚æžœä¸º "
+"[code]true[/code],则ä¸ä¼šæ¸²æŸ“å­æŽ§ä»¶ä¸­æ˜Žæ˜¾åœ¨çŸ©å½¢ä¹‹å¤–çš„éƒ¨åˆ†ã€‚"
#: doc/classes/Control.xml
msgid ""
@@ -20452,9 +20491,9 @@ msgid ""
"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 ""
-"节点的边界矩形的最å°å°ºå¯¸ã€‚如果你将它设置为大于(0,0)的值,节点的边界矩形将始"
-"终至少有这个大å°ï¼Œå³ä½¿å®ƒçš„内容更å°ã€‚如果设置为(0,0),节点的大å°ä¼šè‡ªåŠ¨é€‚åº”å…¶"
-"内容,无论是纹ç†è¿˜æ˜¯å­èŠ‚ç‚¹ã€‚"
+"节点的边界矩形的最å°å°ºå¯¸ã€‚如果你将它设置为大于 (0,0) 的值,节点的边界矩形将"
+"始终至少有这个大å°ï¼Œå³ä½¿å®ƒçš„内容更å°ã€‚如果设置为 (0,0),节点的大å°ä¼šè‡ªåŠ¨é€‚åº”"
+"其内容,无论是纹ç†è¿˜æ˜¯å­èŠ‚ç‚¹ã€‚"
#: doc/classes/Control.xml
msgid ""
@@ -20517,7 +20556,7 @@ msgstr ""
msgid ""
"The size of the node's bounding rectangle, in pixels. [Container] nodes "
"update this property automatically."
-msgstr "节点边界矩形的大å°ï¼Œä»¥åƒç´ ä¸ºå•ä½ã€‚ [Container]节点会自动更新此属性。"
+msgstr "节点边界矩形的大å°ï¼Œä»¥åƒç´ ä¸ºå•ä½ã€‚[Container]节点会自动更新此属性。"
#: doc/classes/Control.xml
msgid ""
@@ -20525,8 +20564,8 @@ msgid ""
"on the X axis. Use one of the [enum SizeFlags] constants to change the "
"flags. See the constants to learn what each does."
msgstr ""
-"告诉父[Container]节点应如何调整尺寸并将其放置在X轴上。使用[enum SizeFlags]常"
-"é‡ä¹‹ä¸€æ›´æ”¹æ ‡å¿—。查看常é‡ä»¥äº†è§£æ¯ä¸ªå¸¸é‡çš„作用。"
+"告诉父 [Container] 节点应如何调整尺寸并将其放置在 X 轴上。使用 [enum "
+"SizeFlags] 常é‡ä¹‹ä¸€æ›´æ”¹æ ‡å¿—。查看常é‡ä»¥äº†è§£æ¯ä¸ªå¸¸é‡çš„作用。"
#: doc/classes/Control.xml
msgid ""
@@ -20546,14 +20585,14 @@ msgid ""
"on the Y axis. Use one of the [enum SizeFlags] constants to change the "
"flags. See the constants to learn what each does."
msgstr ""
-"告诉父[Container]节点应如何调整尺寸并将其放置在X轴上。使用[enum SizeFlags]常"
-"é‡ä¹‹ä¸€æ›´æ”¹æ ‡å¿—。查看常é‡ä»¥äº†è§£æ¯ä¸ªå¸¸é‡çš„作用。"
+"告诉父 [Container] 节点应如何调整尺寸并将其放置在 X 轴上。使用 [enum "
+"SizeFlags] 常é‡ä¹‹ä¸€æ›´æ”¹æ ‡å¿—。查看常é‡ä»¥äº†è§£æ¯ä¸ªå¸¸é‡çš„作用。"
#: doc/classes/Control.xml
msgid ""
"Changing this property replaces the current [Theme] resource this node and "
"all its [Control] children use."
-msgstr "更改此属性将替æ¢è¯¥èŠ‚ç‚¹åŠå…¶æ‰€æœ‰[Control]å­çº§ä½¿ç”¨çš„当å‰[Theme]资æºã€‚"
+msgstr "更改此属性将替æ¢è¯¥èŠ‚ç‚¹åŠå…¶æ‰€æœ‰ [Control] å­çº§ä½¿ç”¨çš„å½“å‰ [Theme] 资æºã€‚"
#: doc/classes/Control.xml
msgid ""
@@ -20603,7 +20642,7 @@ msgstr "当节点的最å°å¤§å°æ›´æ”¹æ—¶å‘出。"
#: doc/classes/Control.xml
msgid "Emitted when a modal [Control] is closed. See [method show_modal]."
-msgstr "å½“æ¨¡æ€æŽ§ä»¶[Control]被关闭时触å‘。å‚阅[method show_modal]。"
+msgstr "å½“æ¨¡æ€æŽ§ä»¶ [Control] 被关闭时触å‘ã€‚è§ [method show_modal]。"
#: doc/classes/Control.xml
msgid ""
@@ -20657,7 +20696,7 @@ msgid ""
"Emitted when one of the size flags changes. See [member "
"size_flags_horizontal] and [member size_flags_vertical]."
msgstr ""
-"当大尿 ‡å¿—之一更改时å‘出。请å‚阅[member size_flags_horizontal]å’Œ[member "
+"当大尿 ‡å¿—之一更改时å‘å‡ºã€‚è§ [member size_flags_horizontal] å’Œ [member "
"size_flags_vertical]。"
#: doc/classes/Control.xml
@@ -20680,7 +20719,7 @@ msgstr ""
#: doc/classes/Control.xml
msgid ""
"Sent when the node changes size. Use [member rect_size] to get the new size."
-msgstr "å½“èŠ‚ç‚¹æ›´æ”¹å¤§å°æ—¶å‘é€ã€‚使用[member rect_size]èŽ·å–æ–°å¤§å°ã€‚"
+msgstr "å½“èŠ‚ç‚¹æ›´æ”¹å¤§å°æ—¶å‘é€ã€‚使用 [member rect_size] èŽ·å–æ–°å¤§å°ã€‚"
#: doc/classes/Control.xml
msgid "Sent when the mouse pointer enters the node."
@@ -20709,27 +20748,27 @@ msgstr ""
#: doc/classes/Control.xml
msgid "Sent when an open modal dialog closes. See [method show_modal]."
-msgstr "当一个打开的模æ€å¯¹è¯æ¡†å…³é—­æ—¶å‘é€ã€‚å‚阅[method show_modal]。"
+msgstr "当一个打开的模æ€å¯¹è¯æ¡†å…³é—­æ—¶å‘é€ã€‚è§ [method show_modal]。"
#: doc/classes/Control.xml
msgid ""
"Sent when this node is inside a [ScrollContainer] which has begun being "
"scrolled."
-msgstr "当此节点在已开始滚动的[ScrollContainer]内部时å‘é€ã€‚"
+msgstr "当此节点在已开始滚动的 [ScrollContainer] 内部时å‘é€ã€‚"
#: doc/classes/Control.xml
msgid ""
"Sent when this node is inside a [ScrollContainer] which has stopped being "
"scrolled."
-msgstr "å½“æ­¤èŠ‚ç‚¹åœ¨å·²åœæ­¢æ»šåŠ¨çš„[ScrollContainer]内部时å‘é€ã€‚"
+msgstr "å½“æ­¤èŠ‚ç‚¹åœ¨å·²åœæ­¢æ»šåŠ¨çš„ [ScrollContainer] 内部时å‘é€ã€‚"
#: doc/classes/Control.xml
msgid ""
"Show the system's arrow mouse cursor when the user hovers the node. Use with "
"[member mouse_default_cursor_shape]."
msgstr ""
-"å½“ç”¨æˆ·å°†èŠ‚ç‚¹æ‚¬åœæ—¶ï¼Œæ˜¾ç¤ºç³»ç»Ÿçš„箭头鼠标光标。与[member "
-"mouse_default_cursor_shape]æˆå‘˜ä¸€èµ·ä½¿ç”¨ã€‚"
+"å½“ç”¨æˆ·å°†èŠ‚ç‚¹æ‚¬åœæ—¶ï¼Œæ˜¾ç¤ºç³»ç»Ÿçš„箭头鼠标光标。与 [member "
+"mouse_default_cursor_shape] æˆå‘˜ä¸€èµ·ä½¿ç”¨ã€‚"
#: doc/classes/Control.xml
msgid ""
@@ -20737,7 +20776,7 @@ msgid ""
"beam pointer has a shape similar to \"I\". It tells the user they can "
"highlight or insert text."
msgstr ""
-"å½“ç”¨æˆ·å°†èŠ‚ç‚¹æ‚¬åœæ—¶ï¼Œæ˜¾ç¤ºç³»ç»Ÿçš„I型光æŸé¼ æ ‡å…‰æ ‡ã€‚å·¥å­—æ¢æŒ‡é’ˆçš„形状类似于“ Iâ€ã€‚它"
+"å½“ç”¨æˆ·å°†èŠ‚ç‚¹æ‚¬åœæ—¶ï¼Œæ˜¾ç¤ºç³»ç»Ÿçš„I型光æŸé¼ æ ‡å…‰æ ‡ã€‚å·¥å­—æ¢æŒ‡é’ˆçš„形状类似于“Iâ€ã€‚它"
"告诉用户他们å¯ä»¥çªå‡ºæ˜¾ç¤ºæˆ–æ’入文本。"
#: doc/classes/Control.xml
@@ -20821,8 +20860,8 @@ msgid ""
"they can resize the window or the panel both horizontally and vertically."
msgstr ""
"å½“ç”¨æˆ·å°†èŠ‚ç‚¹æ‚¬åœæ—¶ï¼Œæ˜¾ç¤ºç³»ç»Ÿçª—å£è°ƒæ•´å¤§å°çš„鼠标光标。光标是一个åŒå‘箭头,从左"
-"上角到å³ä¸‹è§’,与[constant CURSOR_BDIAGSIZE]相å。它告诉用户å¯ä»¥æ°´å¹³å’Œåž‚直调整"
-"çª—å£æˆ–颿¿çš„大å°ã€‚"
+"上角到å³ä¸‹è§’,与 [constant CURSOR_BDIAGSIZE] 相å。它告诉用户å¯ä»¥æ°´å¹³å’Œåž‚ç›´è°ƒ"
+"æ•´çª—å£æˆ–颿¿çš„大å°ã€‚"
#: doc/classes/Control.xml
msgid ""
@@ -20831,23 +20870,23 @@ msgid ""
"a UI element freely."
msgstr ""
"å½“ç”¨æˆ·å°†èŠ‚ç‚¹æ‚¬åœæ—¶ï¼Œæ˜¾ç¤ºç³»ç»Ÿçš„移动鼠标光标。它以90度角显示2个åŒå‘箭头。它告诉"
-"用户他们å¯ä»¥è‡ªç”±ç§»åЍUI元素。"
+"用户他们å¯ä»¥è‡ªç”±ç§»åЍ UI 元素。"
#: doc/classes/Control.xml
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 ""
-"å½“ç”¨æˆ·å°†èŠ‚ç‚¹æ‚¬åœæ—¶ï¼Œæ˜¾ç¤ºç³»ç»Ÿçš„垂直拆分鼠标光标。在 Windows 上,它与 "
-"[constant CURSOR_VSIZE] 相åŒã€‚"
+"å½“ç”¨æˆ·å°†èŠ‚ç‚¹æ‚¬åœæ—¶ï¼Œæ˜¾ç¤ºç³»ç»Ÿçš„垂直拆分鼠标光标。在 Windows 上与 [constant "
+"CURSOR_VSIZE] 相åŒã€‚"
#: doc/classes/Control.xml
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 ""
-"å½“ç”¨æˆ·å°†èŠ‚ç‚¹æ‚¬åœæ—¶ï¼Œæ˜¾ç¤ºç³»ç»Ÿçš„æ°´å¹³æ‹†åˆ†é¼ æ ‡å…‰æ ‡ã€‚在Windows上,它与[constant "
-"CURSOR_HSIZE]相åŒã€‚"
+"å½“ç”¨æˆ·å°†èŠ‚ç‚¹æ‚¬åœæ—¶ï¼Œæ˜¾ç¤ºç³»ç»Ÿçš„æ°´å¹³æ‹†åˆ†é¼ æ ‡å…‰æ ‡ã€‚在 Windows 上与 [constant "
+"CURSOR_HSIZE] 相åŒã€‚"
#: doc/classes/Control.xml
msgid ""
@@ -20992,7 +21031,7 @@ msgid ""
"editor. Use with [method set_anchors_preset]."
msgstr ""
"将所有 4 个锚点对é½åˆ°çˆ¶æŽ§ä»¶çš„å„个角。应用此预设åŽï¼Œå°†æ‰€æœ‰ 4 个页边è·è®¾ç½®ä¸º "
-"0,[Control] 将适åˆå…¶ä¸Šçº§æŽ§ä»¶ã€‚这等效于编辑器中的“整个矩形â€å¸ƒå±€é€‰é¡¹ã€‚与 "
+"0,[Control] 将适åˆå…¶ä¸Šçº§æŽ§ä»¶ã€‚相当于编辑器中的“整个矩形â€å¸ƒå±€é€‰é¡¹ã€‚与 "
"[method set_anchors_preset] 一起使用。"
#: doc/classes/Control.xml
@@ -21058,9 +21097,9 @@ msgid ""
"flags. Use with [member size_flags_horizontal] and [member "
"size_flags_vertical]."
msgstr ""
-"告诉父级[Container]将节点与其末端(底部或å³ä¾§ï¼‰å¯¹é½ã€‚它ä¸é€‚用于fill或expand "
-"size标志。与[member size_flags_horizontal]和[member size_flags_vertical]一起"
-"使用。"
+"告诉父级 [Container] 将节点与其末端(底部或å³ä¾§ï¼‰å¯¹é½ã€‚它ä¸é€‚用于 fill 或 "
+"expand size 标志。与 [member size_flags_horizontal] 和 [member "
+"size_flags_vertical] 一起使用。"
#: doc/classes/Control.xml
msgid ""
@@ -21151,20 +21190,20 @@ msgstr ""
#: doc/classes/ConvexPolygonShape.xml
msgid "Convex polygon shape for 3D physics."
-msgstr "用于3D物ç†çš„凸多边形形状。"
+msgstr "用于 3D 物ç†çš„凸多边形形状。"
#: doc/classes/ConvexPolygonShape.xml
msgid ""
"Convex polygon shape resource, which can be added to a [PhysicsBody] or area."
-msgstr "凸多边形形状资æºï¼Œå¯ä»¥æ·»åŠ åˆ°[PhysicsBody]或area区域。"
+msgstr "凸多边形形状资æºï¼Œå¯ä»¥æ·»åŠ åˆ° [PhysicsBody] 或区域。"
#: doc/classes/ConvexPolygonShape.xml
msgid "The list of 3D points forming the convex polygon shape."
-msgstr "å½¢æˆå‡¸å¤šè¾¹å½¢çš„3D点列表。"
+msgstr "å½¢æˆå‡¸å¤šè¾¹å½¢çš„ 3D 点列表。"
#: doc/classes/ConvexPolygonShape2D.xml
msgid "Convex polygon shape for 2D physics."
-msgstr "用于2D物ç†çš„凸多边形形状。"
+msgstr "用于 2D 物ç†çš„凸多边形形状。"
#: doc/classes/ConvexPolygonShape2D.xml
msgid ""
@@ -21177,12 +21216,12 @@ msgid ""
"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 ""
-"用于2D物ç†çš„凸多边形形状。凸多边形,无论其形状如何,都å¯ä»¥åœ¨å†…部分解为所需数"
-"é‡çš„凸多边形,以确ä¿å§‹ç»ˆå¯¹å‡¸å¤šè¾¹å½¢æ‰§è¡Œæ‰€æœ‰é’ˆå¯¹å®ƒçš„碰撞检查(检查速度更"
+"用于 2D 物ç†çš„凸多边形形状。凸多边形,无论其形状如何,都å¯ä»¥åœ¨å†…部分解为所需"
+"æ•°é‡çš„凸多边形,以确ä¿å§‹ç»ˆå¯¹å‡¸å¤šè¾¹å½¢æ‰§è¡Œæ‰€æœ‰é’ˆå¯¹å®ƒçš„碰撞检查(检查速度更"
"快)。\n"
-"[ConvexPolygonShape2D]å’Œ[ConcavePolygonShape2D]之间的主è¦åŒºåˆ«åœ¨äºŽï¼Œå‡¹é¢å¤šè¾¹å½¢"
-"å‡å®šå…¶ä¸ºå‡¹é¢ï¼Œå¹¶ä½¿ç”¨æ›´å¤æ‚的碰撞检测方法,而凸é¢å¤šè¾¹å½¢åˆ™å°†è‡ªèº«å¼ºåˆ¶å˜ä¸ºå‡¸é¢ï¼Œ"
-"以加快碰撞检测的速度。"
+"[ConvexPolygonShape2D] å’Œ [ConcavePolygonShape2D] 之间的主è¦åŒºåˆ«åœ¨äºŽï¼Œå‡¹é¢å¤š"
+"边形å‡å®šå…¶ä¸ºå‡¹é¢ï¼Œå¹¶ä½¿ç”¨æ›´å¤æ‚的碰撞检测方法,而凸é¢å¤šè¾¹å½¢åˆ™å°†è‡ªèº«å¼ºåˆ¶å˜ä¸ºå‡¸"
+"é¢ï¼Œä»¥åŠ å¿«ç¢°æ’žæ£€æµ‹çš„é€Ÿåº¦ã€‚"
#: doc/classes/ConvexPolygonShape2D.xml
msgid ""
@@ -21191,7 +21230,7 @@ msgid ""
"points. See [method Geometry.convex_hull_2d] for details."
msgstr ""
"基于所æä¾›ç‚¹çš„集åˆï¼Œä½¿ç”¨å‡¸åŒ…ç®—æ³•åˆ›å»ºå’Œåˆ†é… [member points]属性。删除所有ä¸éœ€"
-"è¦çš„点。å‚阅[method Geometry.convex_hull_2d]。"
+"è¦çš„点。详情请å‚阅 [method Geometry.convex_hull_2d]。"
#: doc/classes/ConvexPolygonShape2D.xml
msgid ""
@@ -21230,21 +21269,21 @@ msgstr ""
#: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml
msgid "Returns the base value of the parameter specified by [enum Parameter]."
-msgstr "返回由[enum Parameter]æŒ‡å®šçš„å‚æ•°çš„基值。"
+msgstr "返回由 [enum Parameter] æŒ‡å®šçš„å‚æ•°çš„基值。"
#: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml
msgid "Returns the [Curve] of the parameter specified by [enum Parameter]."
-msgstr "返回由[enum Parameter]æŒ‡å®šçš„å‚æ•°çš„[Curve]。"
+msgstr "返回由 [enum Parameter] æŒ‡å®šçš„å‚æ•°çš„ [Curve]。"
#: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml
msgid ""
"Returns the randomness factor of the parameter specified by [enum Parameter]."
-msgstr "返回[enum Parameter]æŒ‡å®šçš„å‚æ•°çš„éšæœºæ€§ç³»æ•°ã€‚"
+msgstr "返回由 [enum Parameter] æŒ‡å®šçš„å‚æ•°çš„éšæœºæ€§ç³»æ•°ã€‚"
#: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml
msgid ""
"Returns the enabled state of the given flag (see [enum Flags] for options)."
-msgstr "返回给定标志的å¯ç”¨çжæ€ï¼ˆæœ‰å…³é€‰é¡¹ï¼Œè¯·å‚阅[enum Flags])。"
+msgstr "返回给定标志的å¯ç”¨çжæ€ï¼ˆæœ‰å…³é€‰é¡¹ï¼Œè¯·å‚阅 [enum Flags])。"
#: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml
msgid "Restarts the particle emitter."
@@ -21252,20 +21291,20 @@ msgstr "釿–°å¯åŠ¨ç²’å­å‘射器。"
#: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml
msgid "Sets the base value of the parameter specified by [enum Parameter]."
-msgstr "设置[enum Parameter]æŒ‡å®šçš„å‚æ•°çš„基值。"
+msgstr "设置 [enum Parameter] æŒ‡å®šçš„å‚æ•°çš„基值。"
#: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml
msgid "Sets the [Curve] of the parameter specified by [enum Parameter]."
-msgstr "设置[enum Parameter]æŒ‡å®šçš„å‚æ•°çš„[Curve]。"
+msgstr "设置 [enum Parameter] æŒ‡å®šçš„å‚æ•°çš„ [Curve]。"
#: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml
msgid ""
"Sets the randomness factor of the parameter specified by [enum Parameter]."
-msgstr "设置[enum Parameter]æŒ‡å®šçš„å‚æ•°çš„éšæœºæ€§å› å­ã€‚"
+msgstr "设置 [enum Parameter] æŒ‡å®šçš„å‚æ•°çš„éšæœºæ€§å› å­ã€‚"
#: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml
msgid "Enables or disables the given flag (see [enum Flags] for options)."
-msgstr "å¯ç”¨æˆ–ç¦ç”¨ç»™å®šæ ‡å¿—(有关选项,请å‚阅[enum Flags])。"
+msgstr "å¯ç”¨æˆ–ç¦ç”¨ç»™å®šæ ‡å¿—(有关选项,请å‚阅 [enum Flags])。"
#: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml
#: doc/classes/Particles.xml doc/classes/Particles2D.xml
@@ -21276,9 +21315,9 @@ msgid ""
"therefore removing all particles that were already emitted before changing "
"[member amount]."
msgstr ""
-"在一个å‘å°„å‘¨æœŸå†…æŽ’æ”¾çš„ç²’å­æ•°ï¼ˆå¯¹åº”于[member lifetime])。\n"
-"[b]注æ„:[/b]改å˜[member amount]å°†é‡ç½®ç²’å­å‘射,因此,在改å˜[member amount]之"
-"å‰å·²ç»æŽ’放的所有粒å­å°†è¢«ç§»é™¤ã€‚"
+"在一个å‘å°„å‘¨æœŸå†…æŽ’æ”¾çš„ç²’å­æ•°ï¼ˆå¯¹åº”于 [member lifetime])。\n"
+"[b]注æ„:[/b]æ”¹å˜ [member amount] å°†é‡ç½®ç²’å­å‘å°„ï¼Œå› æ­¤ï¼Œåœ¨æ”¹å˜ [member "
+"amount] 之å‰å·²ç»æŽ’放的所有粒å­å°†è¢«ç§»é™¤ã€‚"
#: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml
msgid "Initial rotation applied to each particle, in degrees."
@@ -21286,7 +21325,7 @@ msgstr "应用于æ¯ä¸ªç²’å­çš„åˆå§‹æ—‹è½¬ï¼ˆä»¥åº¦ä¸ºå•ä½ï¼‰ã€‚"
#: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml
msgid "Each particle's rotation will be animated along this [Curve]."
-msgstr "æ¯ä¸ªç²’å­çš„æ—‹è½¬å°†æ²¿æ­¤[Curve]进行动画处ç†ã€‚"
+msgstr "æ¯ä¸ªç²’å­çš„æ—‹è½¬å°†æ²¿æ­¤ [Curve] 进行动画处ç†ã€‚"
#: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml
#: doc/classes/ParticlesMaterial.xml
@@ -21301,7 +21340,7 @@ msgstr "应用于æ¯ä¸ªç²’å­çš„åˆå§‹è§’速度,å•ä½ä¸º[i]度[/i]æ¯ç§’。è®
#: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml
msgid "Each particle's angular velocity will vary along this [Curve]."
-msgstr "æ¯ä¸ªç²’å­çš„角速度将沿此[Curve]å˜åŒ–。"
+msgstr "æ¯ä¸ªç²’å­çš„角速度将沿此 [Curve] å˜åŒ–。"
#: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml
#: doc/classes/ParticlesMaterial.xml
@@ -21315,7 +21354,7 @@ msgstr "ç²’å­åŠ¨ç”»åç§»é‡ã€‚"
#: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml
msgid "Each particle's animation offset will vary along this [Curve]."
-msgstr "æ¯ä¸ªç²’å­çš„动画å移将沿此[Curve]å˜åŒ–。"
+msgstr "æ¯ä¸ªç²’å­çš„动画å移将沿此 [Curve] å˜åŒ–。"
#: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml
#: doc/classes/ParticlesMaterial.xml
@@ -21329,7 +21368,7 @@ msgstr "ç²’å­åŠ¨ç”»é€Ÿåº¦ã€‚"
#: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml
msgid "Each particle's animation speed will vary along this [Curve]."
-msgstr "æ¯ä¸ªç²’å­çš„动画速度将沿此[Curve]å˜åŒ–。"
+msgstr "æ¯ä¸ªç²’å­çš„动画速度将沿此 [Curve] å˜åŒ–。"
#: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml
#: doc/classes/ParticlesMaterial.xml
@@ -21368,7 +21407,7 @@ msgstr "ç²’å­å¤±åŽ»é€Ÿåº¦çš„é€ŸçŽ‡ã€‚"
#: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml
msgid "Damping will vary along this [Curve]."
-msgstr "阻尼将沿ç€è¿™æ¡[Gradient]å˜åŒ–。"
+msgstr "阻尼将沿ç€è¿™æ¡ [Gradient] å˜åŒ–。"
#: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml
#: doc/classes/ParticlesMaterial.xml
@@ -21383,7 +21422,7 @@ msgstr "指定粒å­å‘å°„æ–¹å‘çš„å•ä½å‘é‡ã€‚"
#: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml
#: doc/classes/Particles.xml doc/classes/Particles2D.xml
msgid "Particle draw order. Uses [enum DrawOrder] values."
-msgstr "ç²’å­ç»˜åˆ¶é¡ºåºã€‚使用[enum DrawOrder]值。"
+msgstr "ç²’å­ç»˜åˆ¶é¡ºåºã€‚使用 [enum DrawOrder] 值。"
#: doc/classes/CPUParticles.xml
msgid ""
@@ -21398,65 +21437,65 @@ msgid ""
"Sets the [Color]s to modulate particles by when using [constant "
"EMISSION_SHAPE_POINTS] or [constant EMISSION_SHAPE_DIRECTED_POINTS]."
msgstr ""
-"设置[Color]以使用[constant EMISSION_SHAPE_POINTS]或[constant "
-"EMISSION_SHAPE_DIRECTED_POINTS]æ¥è°ƒåˆ¶ç²’å­ã€‚"
+"设置 [Color] 以使用 [constant EMISSION_SHAPE_POINTS] 或 [constant "
+"EMISSION_SHAPE_DIRECTED_POINTS] æ¥è°ƒåˆ¶ç²’å­ã€‚"
#: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml
msgid ""
"Sets the direction the particles will be emitted in when using [constant "
"EMISSION_SHAPE_DIRECTED_POINTS]."
-msgstr "设置使用[constant EMISSION_SHAPE_DIRECTED_POINTS]æ—¶ç²’å­å‘射的方å‘。"
+msgstr "设置使用 [constant EMISSION_SHAPE_DIRECTED_POINTS] æ—¶ç²’å­å‘射的方å‘。"
#: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml
msgid ""
"Sets the initial positions to spawn particles when using [constant "
"EMISSION_SHAPE_POINTS] or [constant EMISSION_SHAPE_DIRECTED_POINTS]."
msgstr ""
-"设置使用[constant EMISSION_SHAPE_POINTS]或[constant "
-"EMISSION_SHAPE_DIRECTED_POINTS]时产生粒å­çš„åˆå§‹ä½ç½®ã€‚"
+"设置使用 [constant EMISSION_SHAPE_POINTS] 或 [constant "
+"EMISSION_SHAPE_DIRECTED_POINTS] 时产生粒å­çš„åˆå§‹ä½ç½®ã€‚"
#: doc/classes/CPUParticles.xml
msgid ""
"The axis for the ring shaped emitter when using [constant "
"EMISSION_SHAPE_RING]."
-msgstr "使用[constant EMISSION_SHAPE_RING]时,环形å‘射器的轴。"
+msgstr "使用 [constant EMISSION_SHAPE_RING] 时,环形å‘射器的轴。"
#: doc/classes/CPUParticles.xml
msgid ""
"The height for the ring shaped emitter when using [constant "
"EMISSION_SHAPE_RING]."
-msgstr "使用[constant EMISSION_SHAPE_RING]时,环形å‘射器的高度。"
+msgstr "使用 [constant EMISSION_SHAPE_RING] 时,环形å‘射器的高度。"
#: doc/classes/CPUParticles.xml
msgid ""
"The inner radius for the ring shaped emitter when using [constant "
"EMISSION_SHAPE_RING]."
-msgstr "使用[constant EMISSION_SHAPE_RING]时,环形å‘射器的内åŠå¾„。"
+msgstr "使用 [constant EMISSION_SHAPE_RING] 时,环形å‘射器的内åŠå¾„。"
#: doc/classes/CPUParticles.xml
msgid ""
"The radius for the ring shaped emitter when using [constant "
"EMISSION_SHAPE_RING]."
-msgstr "使用[constant EMISSION_SHAPE_RING]时,环形å‘射器的åŠå¾„。"
+msgstr "使用 [constant EMISSION_SHAPE_RING] 时,环形å‘射器的åŠå¾„。"
#: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml
msgid ""
"Particles will be emitted inside this region. See [enum EmissionShape] for "
"possible values."
-msgstr "ç²’å­å°†åœ¨æ­¤åŒºåŸŸå†…å‘射。有关å¯èƒ½çš„值,请å‚阅[enum EmissionShape]。"
+msgstr "ç²’å­å°†åœ¨æ­¤åŒºåŸŸå†…å‘射。å¯èƒ½çš„å–å€¼è§ [enum EmissionShape]。"
#: doc/classes/CPUParticles.xml
msgid ""
"The sphere's radius if [enum EmissionShape] is set to [constant "
"EMISSION_SHAPE_SPHERE]."
msgstr ""
-"如果[enum EmissionShape]设置为[constant EMISSION_SHAPE_SPHERE],则çƒä½“çš„åŠ"
+"如果 [enum EmissionShape] 设置为 [constant EMISSION_SHAPE_SPHERE],则çƒä½“çš„åŠ"
"径。"
#: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml
#: doc/classes/Particles.xml doc/classes/Particles2D.xml
msgid "If [code]true[/code], particles are being emitted."
-msgstr "如果[code]true[/code],则正在å‘å°„ç²’å­ã€‚"
+msgstr "如果为 [code]true[/code],则正在å‘å°„ç²’å­ã€‚"
#: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml
#: doc/classes/Particles2D.xml
@@ -21474,8 +21513,8 @@ msgid ""
"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 ""
-"ç²’å­ç³»ç»Ÿçš„帧速率固定为一个值。例如,将值更改为2将使粒å­ä»¥æ¯ç§’2帧的速度渲染。"
-"请注æ„,这ä¸ä¼šå‡æ…¢ç²’å­ç³»ç»Ÿæœ¬èº«çš„速度。"
+"ç²’å­ç³»ç»Ÿçš„帧速率固定为一个值。例如,将值更改为 2 将使粒å­ä»¥æ¯ç§’ 2 帧的速度渲"
+"染。请注æ„,这ä¸ä¼šå‡æ…¢ç²’å­ç³»ç»Ÿæœ¬èº«çš„速度。"
#: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml
#: doc/classes/ParticlesMaterial.xml
@@ -21504,7 +21543,8 @@ msgid ""
"If [code]true[/code], results in fractional delta calculation which has a "
"smoother particles display effect."
msgstr ""
-"如果[code]true[/code],将导致分数增é‡è®¡ç®—ï¼Œè¯¥æ˜¾ç¤ºå…·æœ‰æ›´å¹³æ»‘çš„ç²’å­æ˜¾ç¤ºæ•ˆæžœã€‚"
+"如果为 [code]true[/code],将导致分数增é‡è®¡ç®—ï¼Œè¯¥æ˜¾ç¤ºå…·æœ‰æ›´å¹³æ»‘çš„ç²’å­æ˜¾ç¤ºæ•ˆ"
+"果。"
#: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml
#: doc/classes/ParticlesMaterial.xml
@@ -21555,7 +21595,7 @@ msgstr "沿è¿åŠ¨æ–¹å‘æ–½åŠ åˆ°æ¯ä¸ªç²’å­çš„线性加速度。"
#: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml
msgid "Each particle's linear acceleration will vary along this [Curve]."
-msgstr "æ¯ä¸ªç²’å­çš„线性加速度将沿此[Curve]å˜åŒ–。"
+msgstr "æ¯ä¸ªç²’å­çš„线性加速度将沿此 [Curve] å˜åŒ–。"
#: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml
#: doc/classes/ParticlesMaterial.xml
@@ -21568,14 +21608,14 @@ msgid ""
"If [code]true[/code], particles use the parent node's coordinate space. If "
"[code]false[/code], they use global coordinates."
msgstr ""
-"如果[code]true[/code],则粒å­å°†ä½¿ç”¨çˆ¶èŠ‚ç‚¹çš„åæ ‡ç©ºé—´ã€‚如果[code]false[/code],"
-"åˆ™ä½¿ç”¨å…¨å±€åæ ‡ã€‚"
+"如果为 [code]true[/code],则粒å­å°†ä½¿ç”¨çˆ¶èŠ‚ç‚¹çš„åæ ‡ç©ºé—´ã€‚如果为 [code]false[/"
+"code]ï¼Œåˆ™ä½¿ç”¨å…¨å±€åæ ‡ã€‚"
#: doc/classes/CPUParticles.xml
msgid ""
"The [Mesh] used for each particle. If [code]null[/code], particles will be "
"spheres."
-msgstr "æ¯ä¸ªç²’å­ä½¿ç”¨çš„[Mesh]。如果[code]null[/code],则粒å­å°†æ˜¯çƒå½¢ã€‚"
+msgstr "æ¯ä¸ªç²’å­ä½¿ç”¨çš„ [Mesh]。如果[code]null[/code],则粒å­å°†æ˜¯çƒå½¢ã€‚"
#: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml
#: doc/classes/Particles2D.xml
@@ -21583,7 +21623,7 @@ 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 ""
-"如果 [code]true[/code],则åªå‘生一个排放周期。如果在周期内设置 [code]true[/"
+"如果为 [code]true[/code],则åªå‘生一个排放周期。如果在周期内设置 [code]true[/"
"code]ï¼Œåˆ™æŽ’æ”¾å°†åœ¨å‘¨æœŸç»“æŸæ—¶åœæ­¢ã€‚"
#: doc/classes/CPUParticles.xml
@@ -21600,7 +21640,7 @@ msgstr ""
#: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml
msgid "Each particle's orbital velocity will vary along this [Curve]."
-msgstr "æ¯ä¸ªç²’å­çš„轨é“速度将沿此[Curve]å˜åŒ–。"
+msgstr "æ¯ä¸ªç²’å­çš„轨é“速度将沿此 [Curve] å˜åŒ–。"
#: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml
#: doc/classes/ParticlesMaterial.xml
@@ -21621,7 +21661,7 @@ msgstr "径å‘加速度应用于æ¯ä¸ªç²’å­ã€‚使粒å­åŠ é€Ÿè¿œç¦»åŽŸç‚¹ã€‚"
#: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml
msgid "Each particle's radial acceleration will vary along this [Curve]."
-msgstr "æ¯ä¸ªç²’å­çš„径å‘加速度将沿此[Curve]å˜åŒ–。"
+msgstr "æ¯ä¸ªç²’å­çš„径å‘加速度将沿此 [Curve] å˜åŒ–。"
#: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml
#: doc/classes/ParticlesMaterial.xml
@@ -21640,7 +21680,7 @@ msgstr "åˆå§‹æ¯”例应用于æ¯ä¸ªç²’å­ã€‚"
#: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml
msgid "Each particle's scale will vary along this [Curve]."
-msgstr "æ¯ä¸ªç²’å­çš„æ¯”例将éšç€[Curve]çš„å˜åŒ–而å˜åŒ–。"
+msgstr "æ¯ä¸ªç²’å­çš„æ¯”例将éšç€ [Curve] çš„å˜åŒ–而å˜åŒ–。"
#: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml
#: doc/classes/ParticlesMaterial.xml
@@ -21673,7 +21713,7 @@ msgstr ""
#: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml
msgid "Each particle's tangential acceleration will vary along this [Curve]."
-msgstr "æ¯ä¸ªç²’å­çš„切å‘加速度将沿此[Curve]å˜åŒ–。"
+msgstr "æ¯ä¸ªç²’å­çš„切å‘加速度将沿此 [Curve] å˜åŒ–。"
#: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml
#: doc/classes/ParticlesMaterial.xml
@@ -21793,7 +21833,7 @@ msgstr ""
#: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml
#: doc/classes/ParticlesMaterial.xml
msgid "Represents the size of the [enum Parameter] enum."
-msgstr "表示[enum Parameter]枚举的大å°ã€‚"
+msgstr "表示 [enum Parameter] 枚举的大å°ã€‚"
#: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml
msgid "Use with [method set_particle_flag] to set [member flag_align_y]."
@@ -21811,7 +21851,7 @@ msgstr "用于在 [method set_particle_flag] 中设置 [member flag_disable_z]ã€
#: doc/classes/GeometryInstance.xml doc/classes/ParticlesMaterial.xml
#: doc/classes/SpatialMaterial.xml
msgid "Represents the size of the [enum Flags] enum."
-msgstr "表示[enum Flags]枚举的大å°ã€‚"
+msgstr "表示 [enum Flags] 枚举的大å°ã€‚"
#: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml
#: doc/classes/ParticlesMaterial.xml
@@ -21832,8 +21872,8 @@ msgid ""
"emission_points]. Particle color will be modulated by [member "
"emission_colors]."
msgstr ""
-"ç²’å­å°†åœ¨[member emission_points]ä¸­éšæœºé€‰æ‹©çš„ä½ç½®å‘射。粒å­é¢œè‰²å°†é€šè¿‡[member "
-"emission_colors]进行调制。"
+"ç²’å­å°†åœ¨ [member emission_points] ä¸­éšæœºé€‰æ‹©çš„ä½ç½®å‘射。粒å­é¢œè‰²å°†é€šè¿‡ "
+"[member emission_colors] 进行调制。"
#: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml
msgid ""
@@ -21842,9 +21882,9 @@ msgid ""
"[member emission_normals]. Particle color will be modulated by [member "
"emission_colors]."
msgstr ""
-"ç²’å­å°†åœ¨[member emission_points]ä¸­éšæœºé€‰æ‹©çš„ä½ç½®å‘射。粒å­çš„速度和旋转将基于"
-"[member emission_normals]进行设置。粒å­é¢œè‰²å°†é€šè¿‡[member emission_colors]进行"
-"调制。"
+"ç²’å­å°†åœ¨ [member emission_points] ä¸­éšæœºé€‰æ‹©çš„ä½ç½®å‘射。粒å­çš„速度和旋转将基"
+"于 [member emission_normals] 进行设置。粒å­é¢œè‰²å°†é€šè¿‡ [member "
+"emission_colors] 进行调制。"
#: doc/classes/CPUParticles.xml doc/classes/ParticlesMaterial.xml
msgid "Particles will be emitted in a ring or cylinder."
@@ -21853,7 +21893,7 @@ msgstr "ç²’å­å°†ä»¥çŽ¯å½¢æˆ–åœ†æŸ±çš„å½¢å¼å‘射出æ¥ã€‚"
#: doc/classes/CPUParticles.xml doc/classes/CPUParticles2D.xml
#: doc/classes/ParticlesMaterial.xml
msgid "Represents the size of the [enum EmissionShape] enum."
-msgstr "表示[enum EmissionShape]枚举的大å°ã€‚"
+msgstr "表示 [enum EmissionShape] 枚举的大å°ã€‚"
#: doc/classes/CPUParticles2D.xml
msgid "CPU-based 2D particle emitter."
@@ -21869,7 +21909,7 @@ msgid ""
"fly and doesn't need to be configured by the user."
msgstr ""
"基于 CPU çš„ 2D ç²’å­èŠ‚ç‚¹ï¼Œç”¨äºŽåˆ›å»ºå„ç§ç²’å­ç³»ç»Ÿå’Œæ•ˆæžœã€‚\n"
-"å‚阅 [Particles2D],它通过硬件加速æä¾›ç›¸åŒçš„功能,但å¯èƒ½æ— æ³•在旧设备上è¿"
+"å¦è¯·å‚阅 [Particles2D],它通过硬件加速æä¾›ç›¸åŒçš„功能,但å¯èƒ½æ— æ³•在旧设备上è¿"
"行。\n"
"[b]注æ„:[/b]其与 [Particles2D] ä¸åŒï¼Œå¯è§æ€§çŸ©å½¢æ˜¯å³æ—¶ç”Ÿæˆçš„,ä¸éœ€è¦ç”¨æˆ·é…"
"置。"
@@ -21892,7 +21932,7 @@ msgstr "æ¯ä¸ªç²’å­çš„åˆå§‹é¢œè‰²ã€‚如果定义了 [member texture],它将ä
msgid ""
"Each particle's color will vary along this [Gradient] (multiplied with "
"[member color])."
-msgstr "æ¯ä¸ªç²’å­çš„颜色将éšç€è¿™ä¸ª[Gradient]å˜åŒ–,å³ä¸Ž[member color]相乘。"
+msgstr "æ¯ä¸ªç²’å­çš„颜色将éšç€è¿™ä¸ª [Gradient] å˜åŒ–,å³ä¸Ž [member color] 相乘。"
#: doc/classes/CPUParticles2D.xml
msgid ""
@@ -21946,15 +21986,15 @@ msgid ""
"Each particle's initial direction range from [code]+spread[/code] to [code]-"
"spread[/code] degrees."
msgstr ""
-"æ¯ä¸ªç²’å­çš„åˆå§‹æ–¹å‘范围为[code]+spread[/code] 到 [code]-spread[/code]度。"
+"æ¯ä¸ªç²’å­çš„åˆå§‹æ–¹å‘范围为 [code]+spread[/code] 到 [code]-spread[/code] 度。"
#: doc/classes/CPUParticles2D.xml doc/classes/Particles2D.xml
msgid "Particle texture. If [code]null[/code], particles will be squares."
-msgstr "ç²’å­çº¹ç†ã€‚如果[code]null[/code],则粒å­å°†ä¸ºæ­£æ–¹å½¢ã€‚"
+msgstr "ç²’å­çº¹ç†ã€‚如果为 [code]null[/code],则粒å­å°†ä¸ºæ­£æ–¹å½¢ã€‚"
#: doc/classes/CPUParticles2D.xml
msgid "Present for consistency with 3D particle nodes, not used in 2D."
-msgstr "为了与3Dç²’å­èŠ‚ç‚¹ä¿æŒä¸€è‡´è€Œå­˜åœ¨ï¼Œåœ¨2D中ä¸ä½¿ç”¨ã€‚"
+msgstr "为了与 3D ç²’å­èŠ‚ç‚¹ä¿æŒä¸€è‡´è€Œå­˜åœ¨ï¼Œåœ¨ 2D 中ä¸ä½¿ç”¨ã€‚"
#: doc/classes/CPUParticles2D.xml
msgid ""
@@ -22010,9 +22050,9 @@ msgid ""
"[/codeblock]\n"
"[b]Note:[/b] Not available in HTML5 exports."
msgstr ""
-"Cryptoç±»å…许您访问Godot中的一些更高级的加密功能。\n"
-"ç›®å‰ï¼Œè¿™åŒ…括生æˆåŠ å¯†å®‰å…¨çš„éšæœºå­—节,RSA密钥和自签åX509è¯ä¹¦ç”Ÿæˆï¼Œéžå¯¹ç§°å¯†é’¥åŠ "
-"密/解密以åŠç­¾å/验è¯ã€‚\n"
+"Crypto ç±»å…许您访问 Godot 中的一些更高级的加密功能。\n"
+"ç›®å‰ï¼Œè¿™åŒ…括生æˆåŠ å¯†å®‰å…¨çš„éšæœºå­—节,RSA 密钥和自签å X509 è¯ä¹¦ç”Ÿæˆï¼Œéžå¯¹ç§°å¯†"
+"钥加密/解密以åŠç­¾å/验è¯ã€‚\n"
"[codeblock]\n"
"extends Node\n"
"\n"
@@ -22021,30 +22061,30 @@ msgstr ""
"var cert = X509Certificate.new()\n"
"\n"
"func _ready():\n"
-" # Generate new RSA key.\n"
+" # ç”Ÿæˆæ–°çš„ RSA 密钥。\n"
" key = crypto.generate_rsa(4096)\n"
-" # Generate new self-signed certificate with the given key.\n"
+" # ä½¿ç”¨ç»™å®šçš„å¯†é’¥ç”Ÿæˆæ–°çš„自签åè¯ä¹¦ã€‚\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"
+" # 将密钥和è¯ä¹¦ä¿å­˜åˆ°ç”¨æˆ·æ–‡ä»¶å¤¹ä¸­ã€‚\n"
" key.save(\"user://generated.key\")\n"
" cert.save(\"user://generated.crt\")\n"
-" # Encryption\n"
+" # 加密\n"
" var data = \"Some data\"\n"
" var encrypted = crypto.encrypt(key, data.to_utf8())\n"
-" # Decryption\n"
+" # 解密\n"
" var decrypted = crypto.decrypt(key, encrypted)\n"
-" # Signing\n"
+" # ç­¾å\n"
" var signature = crypto.sign(HashingContext.HASH_SHA256, data."
"sha256_buffer(), key)\n"
-" # Verifying\n"
+" # 验è¯\n"
" var verified = crypto.verify(HashingContext.HASH_SHA256, data."
"sha256_buffer(), signature, key)\n"
-" # Checks\n"
+" # 检查\n"
" assert(verified)\n"
" assert(data.to_utf8() == decrypted)\n"
"[/codeblock]\n"
-"[b]注æ„:[/b]在HTML5导出中ä¸å¯ç”¨ã€‚"
+"[b]注æ„:[/b]在 HTML5 导出中ä¸å¯ç”¨ã€‚"
#: doc/classes/Crypto.xml
msgid ""
@@ -22054,7 +22094,7 @@ msgid ""
"string-comparison-with-double-hmac-strategy]this blog post[/url] for more "
"information."
msgstr ""
-"比较两个[PoolByteArray]是å¦ç›¸ç­‰ï¼Œè€Œä¸æ³„露时间信æ¯ï¼Œä»¥é˜²æ­¢è®¡æ—¶æ”»å‡»ã€‚\n"
+"比较两个 [PoolByteArray] 是å¦ç›¸ç­‰ï¼Œè€Œä¸æ³„露时间信æ¯ï¼Œä»¥é˜²æ­¢è®¡æ—¶æ”»å‡»ã€‚\n"
"更多信æ¯å‚阅[url=https://paragonie.com/blog/2015/11/preventing-timing-"
"attacks-on-string-comparison-with-double-hmac-strategy]è¿™ç¯‡åšæ–‡[/url]。"
@@ -22089,7 +22129,7 @@ msgid ""
"Generates an RSA [CryptoKey] that can be used for creating self-signed "
"certificates and passed to [method StreamPeerSSL.accept_stream]."
msgstr ""
-"生æˆå¯ç”¨äºŽåˆ›å»ºè‡ªç­¾åè¯ä¹¦å¹¶ä¼ é€’ç»™[method StreamPeerSSL.accept_stream]çš„RSA "
+"生æˆå¯ç”¨äºŽåˆ›å»ºè‡ªç­¾åè¯ä¹¦å¹¶ä¼ é€’ç»™ [method StreamPeerSSL.accept_stream] çš„ RSA "
"[CryptoKey]。"
#: doc/classes/Crypto.xml
@@ -22111,17 +22151,18 @@ msgid ""
"Game Company,C=IT\")\n"
"[/codeblock]"
msgstr ""
-"æ ¹æ®ç»™å®šçš„[CryptoKey]å’Œ[code]issuer_name[/code]生æˆè‡ªç­¾åçš„"
-"[X509Certificate]。è¯ä¹¦çš„æœ‰æ•ˆæ€§å°†ç”±[code]not_before[/code]å’Œ[code]not_after[/"
-"code](第一个有效日期和最åŽä¸€ä¸ªæœ‰æ•ˆæ—¥æœŸï¼‰å®šä¹‰ã€‚ [code]issuer_name[/code]å¿…é¡»"
-"至少包å«â€œ CN =“(通用å称,å³åŸŸå),“ O =â€ï¼ˆç»„ç»‡ï¼Œå³æ‚¨çš„å…¬å¸å称),“ C "
-"=“(国家,å³2个字æ¯çš„ISO) -3166组织所在国家/地区的代ç ï¼‰ã€‚\n"
-"一个生æˆRSA密钥和X509自签åè¯ä¹¦çš„å°ç¤ºä¾‹ã€‚\n"
+"æ ¹æ®ç»™å®šçš„ [CryptoKey] å’Œ [code]issuer_name[/code] 生æˆè‡ªç­¾åçš„ "
+"[X509Certificate]。è¯ä¹¦çš„æœ‰æ•ˆæ€§å°†ç”± [code]not_before[/code] å’Œ "
+"[code]not_after[/code](第一个有效日期和最åŽä¸€ä¸ªæœ‰æ•ˆæ—¥æœŸï¼‰å®šä¹‰ã€‚"
+"[code]issuer_name[/code] 必须至少包å«â€œCN=â€ï¼ˆé€šç”¨å称,å³åŸŸå),“O=â€ï¼ˆç»„织,"
+"峿‚¨çš„å…¬å¸å称),“C=â€ï¼ˆå›½å®¶ï¼Œå³ 2 个字æ¯çš„ ISO-3166 组织所在国家/地区的代"
+"ç ï¼‰ã€‚\n"
+"ç”Ÿæˆ RSA 密钥和 X509 自签åè¯ä¹¦çš„å°ç¤ºä¾‹ã€‚\n"
"[codeblock]\n"
"var crypto = Crypto.new()\n"
-"# Generate 4096 bits RSA key.\n"
+"# ç”Ÿæˆ 4096 比特 RSA 密钥。\n"
"var key = crypto.generate_rsa(4096)\n"
-"# Generate self-signed certificate using the given key.\n"
+"# 使用给定的密钥生æˆè‡ªç­¾åè¯ä¹¦ã€‚\n"
"var cert = crypto.generate_self_signed_certificate(key, \"CN=example.com,O=A "
"Game Company,C=IT\")\n"
"[/codeblock]"
@@ -22136,7 +22177,7 @@ msgid ""
"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] 傿•°æ˜¯ç”¨äºŽå†…部和外部哈希的"
+"wiki/HMAC]HMAC[/url] 摘è¦ã€‚[code]hash_type[/code] 傿•°æ˜¯ç”¨äºŽå†…部和外部哈希的"
"哈希算法。\n"
"ç›®å‰ä»…æ”¯æŒ [constant HashingContext.HASH_SHA256] å’Œ [constant HashingContext."
"HASH_SHA1]。"
@@ -22146,16 +22187,16 @@ msgid ""
"Sign a given [code]hash[/code] of type [code]hash_type[/code] with the "
"provided private [code]key[/code]."
msgstr ""
-"使用æä¾›çš„ç§æœ‰[code]key[/code]对类型为[code]hash_type[/code]的给定的"
-"[code]hash[/code]进行签å。"
+"使用æä¾›çš„ç§é’¥ [code]key[/code] 对类型为 [code]hash_type[/code] 的给定的 "
+"[code]hash[/code] 进行签å。"
#: doc/classes/Crypto.xml
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 ""
-"对照æä¾›çš„公共[code]key[/code]验è¯ç±»åž‹ä¸º[code]hash_type[/code]çš„"
-"[code]hash_type[/code]的给定[code]ç­¾å[/code]。"
+"使用æä¾›çš„公钥 [code]key[/code] 验è¯ç±»åž‹ä¸º [code]hash_type[/code] çš„ "
+"[code]hash_type[/code] 的给定签å [code]signature[/code]。"
#: doc/classes/CryptoKey.xml
msgid "A cryptographic key (RSA)."
@@ -22180,7 +22221,7 @@ msgid ""
"Return [code]true[/code] if this CryptoKey only has the public part, and not "
"the private one."
msgstr ""
-"如果此CryptoKeyä»…å…·æœ‰å…¬å…±éƒ¨åˆ†ï¼Œè€Œæ²¡æœ‰ç§æœ‰éƒ¨åˆ†ï¼Œåˆ™è¿”回 [code]true[/code]。"
+"如果此 CryptoKey ä»…å…·æœ‰å…¬å…±éƒ¨åˆ†ï¼Œè€Œæ²¡æœ‰ç§æœ‰éƒ¨åˆ†ï¼Œåˆ™è¿”回 [code]true[/code]。"
#: doc/classes/CryptoKey.xml
msgid ""
@@ -22189,8 +22230,8 @@ msgid ""
"[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"
+"从 [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â€æ–‡ä»¶ã€‚"
@@ -22199,8 +22240,8 @@ 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 ""
-"从给定的[code]string[/code]加载密钥。如果[code]public_only[/code]为 "
-"[code]true[/code],则仅会加载公共密钥。"
+"从给定的 [code]string[/code] 加载密钥。如果 [code]public_only[/code] 为 "
+"[code]true[/code],则仅会加载公钥。"
#: doc/classes/CryptoKey.xml
msgid ""
@@ -22211,16 +22252,16 @@ msgid ""
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\"文件。"
+"[b]注æ„:[/b]如果 [code]public_only[/code] 是 [code]true[/code],则 "
+"[code]path[/code] 应该是一个“*.pubâ€æ–‡ä»¶ï¼Œå¦åˆ™æ˜¯â€œ*.keyâ€æ–‡ä»¶ã€‚"
#: doc/classes/CryptoKey.xml
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 ""
-"返回包å«PEMæ ¼å¼çš„密钥的字符串。如果[code]public_only[/code]为 [code]true[/"
-"code],则仅包å«å…¬å…±å¯†é’¥ã€‚"
+"è¿”å›žåŒ…å« PEM æ ¼å¼çš„密钥的字符串。如果 [code]public_only[/code] 为 "
+"[code]true[/code],则仅包å«å…¬é’¥ã€‚"
#: modules/csg/doc_classes/CSGBox.xml
msgid "A CSG Box shape."
@@ -22320,7 +22361,7 @@ msgstr ""
msgid ""
"If [code]true[/code] a cone is created, the [member radius] will only apply "
"to one side."
-msgstr "如果创建了[code]true[/code]圆锥,则[member radius]将仅应用于一侧。"
+msgstr "如果为 [code]true[/code],则创建圆锥,仅在一侧应用 [member radius]。"
#: modules/csg/doc_classes/CSGCylinder.xml
msgid "The height of the cylinder."
@@ -22346,12 +22387,12 @@ msgid ""
"effect making the cylinder seem rounded. If [code]false[/code] the cylinder "
"will have a flat shaded look."
msgstr ""
-"如果[code]true[/code]ï¼Œåˆ™å°†åœ†æŸ±ä½“çš„æ³•çº¿è®¾ç½®ä¸ºå…·æœ‰å¹³æ»‘æ•ˆæžœï¼Œä½¿åœ†æŸ±ä½“çœ‹èµ·æ¥æ˜¯åœ†"
-"形的。如果[code]false[/code],则圆柱体将具有平å¦çš„阴影表现。"
+"如果为 [code]true[/code],则将圆柱体的法线设置为具有平滑效果,使圆柱体看起æ¥"
+"是圆形的。如果为 [code]false[/code],则圆柱体将具有平å¦çš„阴影表现。"
#: modules/csg/doc_classes/CSGMesh.xml
msgid "A CSG Mesh shape that uses a mesh resource."
-msgstr "使用网格资æºçš„CSG网格形状。"
+msgstr "使用网格资æºçš„ CSG 网格形状。"
#: modules/csg/doc_classes/CSGMesh.xml
msgid ""
@@ -22386,14 +22427,14 @@ msgid ""
"If a flat shader is required, ensure that all faces' vertex normals are "
"parallel."
msgstr ""
-"用æ¥ä½œä¸ºCSG形状的[Mesh]资æºã€‚\n"
-"[b]注æ„:[/b]当使用[ArrayMesh]时,除éžéœ€è¦ä¸€ä¸ªå¹³é¢ç€è‰²å™¨ï¼Œå¦åˆ™è¦é¿å…使用顶点"
-"法线的网格。默认情况下,CSGMesh会忽略网格的顶点法线,并使用é¢çš„æ³•线计算平整的"
-"ç€è‰²å™¨ã€‚如果需è¦ä½¿ç”¨å¹³é¢ç€è‰²å™¨ï¼Œè¯·ç¡®ä¿æ‰€æœ‰é¢çš„顶点法线是平行的。"
+"用æ¥ä½œä¸º CSG 形状的 [Mesh] 资æºã€‚\n"
+"[b]注æ„:[/b]当使用 [ArrayMesh] 时,除éžéœ€è¦ä¸€ä¸ªå¹³é¢ç€è‰²å™¨ï¼Œå¦åˆ™è¦é¿å…使用顶"
+"点法线的网格。默认情况下,CSGMesh 会忽略网格的顶点法线,并使用é¢çš„æ³•线计算平"
+"æ•´çš„ç€è‰²å™¨ã€‚如果需è¦ä½¿ç”¨å¹³é¢ç€è‰²å™¨ï¼Œè¯·ç¡®ä¿æ‰€æœ‰é¢çš„顶点法线是平行的。"
#: modules/csg/doc_classes/CSGPolygon.xml
msgid "Extrudes a 2D polygon shape to create a 3D mesh."
-msgstr "拉伸2D多边形形状以创建3D网格。"
+msgstr "拉伸 2D 多边形形状以创建 3D 网格。"
#: modules/csg/doc_classes/CSGPolygon.xml
msgid ""
@@ -22415,7 +22456,7 @@ msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
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
msgid ""
@@ -22424,9 +22465,9 @@ 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]的轮廓,左下角的四分之一映射到å‰ç«¯é¢ï¼Œå³ä¸‹è§’的四分之一"
-"映射到åŽç«¯é¢ã€‚"
+"用于生æˆçš„网格的æè´¨ã€‚UV å°†æè´¨çš„上åŠéƒ¨åˆ†æ˜ å°„到挤出的形状,å³U沿挤出物的长"
+"度,V 围绕 [member polygon]的轮廓,左下角的四分之一映射到å‰ç«¯é¢ï¼Œå³ä¸‹è§’的四分"
+"之一映射到åŽç«¯é¢ã€‚"
#: modules/csg/doc_classes/CSGPolygon.xml
msgid "The [member mode] used to extrude the [member polygon]."
@@ -22439,15 +22480,16 @@ 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],挤出的æ¯ä¸€æ­¥éƒ½"
-"会é‡å¤æè´¨çš„上åŠéƒ¨åˆ†ã€‚"
+"当 [member mode] 为[constant MODE_PATH] 时,默认情况下,[member material] 的"
+"上åŠéƒ¨åˆ†ä¼šæ²¿ç€æŒ¤å‡ºå½¢çŠ¶çš„æ•´ä¸ªé•¿åº¦è¢«æ‹‰ä¼¸ã€‚å¦‚æžœä¸º [code]false[/code],挤出的æ¯ä¸€"
+"步都会é‡å¤æè´¨çš„上åŠéƒ¨åˆ†ã€‚"
#: modules/csg/doc_classes/CSGPolygon.xml
msgid ""
"When [member mode] is [constant MODE_PATH], the path interval or ratio of "
"path points to extrusions."
-msgstr "当[member mode] 为[constant MODE_PATH]时,路径间隔或路径点比例挤出。"
+msgstr ""
+"当 [member mode] 为 [constant MODE_PATH] 时,路径间隔或路径点比例挤出。"
#: modules/csg/doc_classes/CSGPolygon.xml
msgid ""
@@ -22473,8 +22515,8 @@ 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]çš„"
+"当 [member mode] 为 [constant MODE_PATH] 时,如果为 [code]true[/code],则使"
+"用 [CSGPolygon] çš„ [Transform] ä½œä¸ºæŒ¤å‡ºçš„èµ·ç‚¹ï¼Œè€Œä¸æ˜¯ [member path_node] çš„ "
"[Transform]。"
#: modules/csg/doc_classes/CSGPolygon.xml
@@ -22482,8 +22524,8 @@ 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] "
-"å¯¹è±¡çš„åæ ‡ã€‚"
+"当 [member mode] 为 [constant MODE_PATH] 时,用于挤出 [member polygon] 的 "
+"[Path] å¯¹è±¡çš„åæ ‡ã€‚"
#: modules/csg/doc_classes/CSGPolygon.xml
msgid ""
@@ -22507,8 +22549,8 @@ 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时,纹ç†å标将与几何图形完全匹é…,没有平铺。"
+"当 [member mode] 为 [constant MODE_PATH] 时,这是纹ç†å标沿ç€è·¯å¾„çš„è·ç¦»ï¼Œä»¥ç±³"
+"为å•ä½ï¼Œå°†è¿›è¡Œå¹³é“ºã€‚当设置为0时,纹ç†å标将与几何图形完全匹é…,没有平铺。"
#: modules/csg/doc_classes/CSGPolygon.xml
msgid ""
@@ -22527,14 +22569,15 @@ msgstr ""
#: modules/csg/doc_classes/CSGPolygon.xml
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
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]在挤出时旋转的总度数。"
+"当 [member mode] 为 [constant MODE_SPIN],[member polygon] 在挤出时旋转的总度"
+"数。"
#: modules/csg/doc_classes/CSGPolygon.xml
msgid ""
@@ -22548,7 +22591,7 @@ msgstr "[member polygon] 形状沿负 Z 轴挤出。"
#: modules/csg/doc_classes/CSGPolygon.xml
msgid ""
"The [member polygon] shape is extruded by rotating it around the Y axis."
-msgstr "[member polygon]形状通过围绕Yè½´æ—‹è½¬æ¥æŒ¤å‡ºã€‚"
+msgstr "[member polygon] 形状通过围绕 Y è½´æ—‹è½¬æ¥æŒ¤å‡ºã€‚"
#: modules/csg/doc_classes/CSGPolygon.xml
msgid ""
@@ -22626,7 +22669,7 @@ msgstr "å转网格的é¢ã€‚"
#: modules/csg/doc_classes/CSGShape.xml
msgid "The CSG base class."
-msgstr "CSG基类。"
+msgstr "CSG 基类。"
#: modules/csg/doc_classes/CSGShape.xml
msgid ""
@@ -22655,7 +22698,7 @@ msgid ""
"node and the second is the root [Mesh] of this node. Only works when this "
"node is the root shape."
msgstr ""
-"返回带有两个元素的[Array],第一个是此节点的[Transform],第二个是此节点的根"
+"返回带有两个元素的 [Array],第一个是此节点的 [Transform],第二个是此节点的根 "
"[Mesh]ã€‚ä»…å½“æ­¤èŠ‚ç‚¹ä¸ºæ ¹å½¢æ—¶æ‰æœ‰æ•ˆã€‚"
#: modules/csg/doc_classes/CSGShape.xml
@@ -22681,8 +22724,8 @@ 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 ""
-"计算å…许使用法线贴图的CSG形状的切线。这仅适用于根部形状,此设置将在所有å­çº§ä¸Š"
-"å‡è¢«å¿½ç•¥ã€‚"
+"计算å…许使用法线贴图的 CSG 形状的切线。这仅适用于根部形状,此设置将在所有å­çº§"
+"上å‡è¢«å¿½ç•¥ã€‚"
#: modules/csg/doc_classes/CSGShape.xml
msgid ""
@@ -22740,7 +22783,7 @@ msgid ""
"always act like a static body. Note that the collision shape is still active "
"even if the CSG shape itself is hidden."
msgstr ""
-"为我们的CSG形状å‘物ç†å¼•擎添加碰撞形状。这将始终åƒä¸€ä¸ªé™æ€ç‰©ä½“。请注æ„,å³ä½¿"
+"为我们的 CSG 形状å‘物ç†å¼•擎添加碰撞形状。这将始终åƒä¸€ä¸ªé™æ€ç‰©ä½“。请注æ„,å³ä½¿"
"CSG形状本身被éšè—,碰撞形状ä»å¤„于活动状æ€ã€‚"
#: modules/csg/doc_classes/CSGShape.xml
@@ -22759,7 +22802,7 @@ msgstr "从第一个形状å‡åŽ»ç¬¬äºŒä¸ªå½¢çŠ¶ï¼Œç•™ä¸‹ä¸€ä¸ªå¸¦æœ‰å…¶å½¢çŠ¶çš„
#: modules/csg/doc_classes/CSGSphere.xml
msgid "A CSG Sphere shape."
-msgstr "CSGçƒå½¢å½¢çŠ¶ã€‚"
+msgstr "CSG çƒå½¢å½¢çŠ¶ã€‚"
#: modules/csg/doc_classes/CSGSphere.xml
msgid ""
@@ -22798,12 +22841,12 @@ msgid ""
"effect making the sphere seem rounded. If [code]false[/code] the sphere will "
"have a flat shaded look."
msgstr ""
-"如果[code]true[/code]ï¼Œåˆ™å°†åœ†æŸ±ä½“çš„æ³•çº¿è®¾ç½®ä¸ºå…·æœ‰å¹³æ»‘æ•ˆæžœï¼Œä½¿åœ†æŸ±ä½“çœ‹èµ·æ¥æ˜¯åœ†"
-"形的。如果[code]false[/code],则圆柱体将具有平å¦çš„阴影表现。"
+"如果为 [code]true[/code],则将圆柱体的法线设置为具有平滑效果,使圆柱体看起æ¥"
+"是圆形的。如果为 [code]false[/code],则圆柱体将具有平å¦çš„阴影表现。"
#: modules/csg/doc_classes/CSGTorus.xml
msgid "A CSG Torus shape."
-msgstr "CSG圆环形状。"
+msgstr "CSG 圆环形状。"
#: modules/csg/doc_classes/CSGTorus.xml
msgid ""
@@ -22847,7 +22890,7 @@ msgid ""
"have a flat shaded look."
msgstr ""
"如果[code]true[/code]设置圆环的法线以æä¾›å¹³æ»‘æ•ˆæžœï¼Œåˆ™ä½¿åœ†çŽ¯çœ‹èµ·æ¥æ˜¯åœ†å½¢çš„。如"
-"æžœ[code]false[/code],则圆环将具有平å¦çš„阴影表现。"
+"果为 [code]false[/code],则圆环将具有平å¦çš„阴影表现。"
#: modules/mono/doc_classes/CSharpScript.xml
msgid ""
@@ -22909,7 +22952,7 @@ msgstr ""
msgid ""
"The render flags for the [CubeMap]. See the [enum Flags] constants for "
"details."
-msgstr "[CubeMap] 的渲染标志。有关详细信æ¯ï¼Œè¯·å‚阅 [enum Flags] 常é‡ã€‚"
+msgstr "[CubeMap] 的渲染标志。有关详细信æ¯ï¼Œè¯¦æƒ…请å‚阅 [enum Flags] 常é‡ã€‚"
#: doc/classes/CubeMap.xml
msgid ""
@@ -22921,11 +22964,11 @@ msgstr ""
#: doc/classes/CubeMap.xml
msgid "The [CubeMap]'s storage mode. See [enum Storage] constants."
-msgstr "[CubeMap] 的存储模å¼ã€‚å‚阅 [enum Storage] 常é‡ã€‚"
+msgstr "[CubeMap] 的存储模å¼ã€‚è§ [enum Storage] 常é‡ã€‚"
#: doc/classes/CubeMap.xml
msgid "Store the [CubeMap] without any compression."
-msgstr "存储[CubeMap]而ä¸è¿›è¡Œä»»ä½•压缩。"
+msgstr "存储 [CubeMap] 而ä¸è¿›è¡Œä»»ä½•压缩。"
#: doc/classes/CubeMap.xml
msgid "Store the [CubeMap] with strong compression that reduces image quality."
@@ -23074,11 +23117,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]的自动放置。"
+"当设置为 [code]0[/code] 时,[CullInstance] 将被自动放置在具有最高优先级的 "
+"[Room] 中。\n"
+"当设置为 [code]0[/code] 以外的值时,系统将å°è¯•在具有 "
+"[code]autoplace_priority[/code] çš„ [Room] 中自动放置,如果它存在的è¯ã€‚\n"
+"è¿™å¯ä»¥ç”¨æ¥æŽ§åˆ¶å»ºç­‘外é¢çš„在外部 [RoomGroup] 的自动放置。"
#: doc/classes/CullInstance.xml
msgid ""
@@ -23141,7 +23184,7 @@ msgstr "用于在 [Room] [b]之间[/b]移动的实例——例如玩家。"
msgid ""
"Use for instances that will be frustum culled only - e.g. first person "
"weapon, debug."
-msgstr "用于åªä¼šè¢«è§†é”¥å‰”除的实例——例如第一人称武器,调试。"
+msgstr "用于åªä¼šè¢«è§†é”¥å‰”除的实例——例如第一人称武器ã€è°ƒè¯•。"
#: doc/classes/CullInstance.xml
msgid ""
@@ -23153,7 +23196,7 @@ msgstr ""
#: doc/classes/Curve.xml
msgid "A mathematic curve."
-msgstr "ä¸€æ¡æ•°å­¦æ›²çº¿ã€‚"
+msgstr "数学曲线。"
#: doc/classes/Curve.xml
msgid ""
@@ -23161,8 +23204,8 @@ msgid ""
"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 ""
-"å¯ä»¥ä¿å­˜å¹¶é‡æ–°ç”¨äºŽå…¶ä»–对象的曲线。默认情况下,它在Y轴上的范围在 [code]0[/"
-"code] 到 [code]1[/code]之间,并且ä½ç½®ç‚¹ç›¸å¯¹äºŽ [code]0.5[/code] Y ä½ç½®ã€‚"
+"å¯ä»¥ä¿å­˜å¹¶é‡æ–°ç”¨äºŽå…¶ä»–对象的曲线。默认情况下,它在 Y 轴上的范围在 [code]0[/"
+"code] 到 [code]1[/code] 之间,并且ä½ç½®ç‚¹ç›¸å¯¹äºŽ [code]0.5[/code] Y ä½ç½®ã€‚"
#: doc/classes/Curve.xml
msgid ""
@@ -23172,10 +23215,10 @@ msgid ""
"assignments to the [code]*_tangent[/code] angle if [code]*_mode[/code] is "
"set to [constant TANGENT_FREE]."
msgstr ""
-"在曲线上添加一个点。对于æ¯ä¸€ä¾§ï¼Œå¦‚æžœ[code]*_mode[/code]为[constant "
-"TANGENT_LINEAR],则[code]*_tangent[/code]角度(以度为å•ä½ï¼‰å°†ä½¿ç”¨æ›²çº¿åˆ°é‚»è¿‘点"
-"的一åŠçš„æ–œçŽ‡ã€‚å¦‚æžœ[code]*_mode[/code]设置为[constant TANGENT_FREE],则å…许自"
-"定义分é…ç»™[code]*_tangent[/code]角度。"
+"在曲线上添加一个点。对于æ¯ä¸€ä¾§ï¼Œå¦‚æžœ [code]*_mode[/code] 为 [constant "
+"TANGENT_LINEAR],则 [code]*_tangent[/code] 角度(以度为å•ä½ï¼‰å°†ä½¿ç”¨æ›²çº¿åˆ°é‚»è¿‘"
+"点的一åŠçš„æ–œçŽ‡ã€‚å¦‚æžœ [code]*_mode[/code] 设置为 [constant TANGENT_FREE],则å…"
+"许自定义分é…ç»™ [code]*_tangent[/code] 的角度。"
#: doc/classes/Curve.xml
msgid "Recomputes the baked cache of points for the curve."
@@ -23225,7 +23268,7 @@ msgstr "返回 [code]index[/code]处的点的左切线角(以度为å•ä½ï¼‰ã€
msgid ""
"Returns the Y value for the point that would exist at the X position "
"[code]offset[/code] along the curve."
-msgstr "返回沿曲线的Xä½ç½®[code]offset[/code]处将存在的点的Y值。"
+msgstr "返回沿曲线的 X ä½ç½® [code]offset[/code] 处将存在的点的 Y 值。"
#: doc/classes/Curve.xml
msgid ""
@@ -23233,19 +23276,20 @@ msgid ""
"[code]offset[/code] along the curve using the baked cache. Bakes the curve's "
"points if not already baked."
msgstr ""
-"使用烘焙的缓存返回沿曲线的Xä½ç½®[code]offset[/code]处将存在的点的Y值。如果尚未"
-"烘焙曲线的点,则将其烘焙。"
+"使用烘焙的缓存返回沿曲线的 X ä½ç½® [code]offset[/code] 处将存在的点的 Y 值。如"
+"果尚未烘焙曲线的点,则将其烘焙。"
#: doc/classes/Curve.xml
msgid "Removes the point at [code]index[/code] from the curve."
-msgstr "从曲线中删除[code]index[/code]处的点。"
+msgstr "从曲线中删除 [code]index[/code] 处的点。"
#: doc/classes/Curve.xml
msgid ""
"Sets the left [enum TangentMode] for the point at [code]index[/code] to "
"[code]mode[/code]."
msgstr ""
-"将[code]index[/code]处的点的左侧[enum TangentMode]设置为[code]mode[/code]。"
+"将 [code]index[/code] 处的点的左侧 [enum TangentMode] 设置为 [code]mode[/"
+"code]。"
#: doc/classes/Curve.xml
msgid ""
@@ -23255,26 +23299,27 @@ msgstr "将点的左切线角度设置为 [code]index[/code] 至 [code]tangent[/
#: doc/classes/Curve.xml
msgid "Sets the offset from [code]0.5[/code]."
-msgstr "设置相对于[code]0.5[/code]çš„åç§»é‡ã€‚"
+msgstr "设置相对于 [code]0.5[/code] çš„åç§»é‡ã€‚"
#: doc/classes/Curve.xml
msgid ""
"Sets the right [enum TangentMode] for the point at [code]index[/code] to "
"[code]mode[/code]."
msgstr ""
-"å°†[code]index[/code]上的点的å³ä¾§[enum TangentMode]设置为[code]mode[/code]。"
+"å°† [code]index[/code] 上的点的å³ä¾§ [enum TangentMode] 设置为 [code]mode[/"
+"code]。"
#: doc/classes/Curve.xml
msgid ""
"Sets the right tangent angle for the point at [code]index[/code] to "
"[code]tangent[/code]."
-msgstr "设置[code]index[/code]至[code]tangent[/code]处的点的å³åˆ‡çº¿è§’。"
+msgstr "设置 [code]index[/code] 至 [code]tangent[/code] 处的点的å³åˆ‡çº¿è§’。"
#: doc/classes/Curve.xml
msgid ""
"Assigns the vertical position [code]y[/code] to the point at [code]index[/"
"code]."
-msgstr "将垂直ä½ç½®[code]y[/code]分é…ç»™[code]index[/code]处的点。"
+msgstr "将垂直ä½ç½® [code]y[/code] 分é…ç»™ [code]index[/code] 处的点。"
#: doc/classes/Curve.xml
msgid "The number of points to include in the baked (i.e. cached) curve data."
@@ -23345,12 +23390,12 @@ 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 ""
-"æ ¹æ®ç¼“存的点,返回曲线的总长度。给予足够的密度(å‚阅[member bake_interval]),"
+"æ ¹æ®ç¼“å­˜çš„ç‚¹ï¼Œè¿”å›žæ›²çº¿çš„æ€»é•¿åº¦ã€‚ç»™äºˆè¶³å¤Ÿçš„å¯†åº¦ï¼ˆè§ [member bake_interval]),"
"它应该是足够近似的。"
#: doc/classes/Curve2D.xml
msgid "Returns the cache of points as a [PoolVector2Array]."
-msgstr "以[PoolVector2Array]的形å¼è¿”回缓存的点。"
+msgstr "以 [PoolVector2Array] 的形å¼è¿”回缓存的点。"
#: doc/classes/Curve2D.xml
msgid ""
@@ -23471,16 +23516,16 @@ msgid ""
"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 doc/classes/Curve3D.xml
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 ""
-"设置顶点[code]idx[/code]çš„ä½ç½®ã€‚å¦‚æžœç´¢å¼•è¶…å‡ºèŒƒå›´ï¼Œå‡½æ•°ä¼šå‘æŽ§åˆ¶å°å‘é€ä¸€ä¸ªé”™è¯¯"
-"ä¿¡æ¯ã€‚"
+"设置顶点 [code]idx[/code] çš„ä½ç½®ã€‚å¦‚æžœç´¢å¼•è¶…å‡ºèŒƒå›´ï¼Œå‡½æ•°ä¼šå‘æŽ§åˆ¶å°å‘é€ä¸€ä¸ªé”™"
+"误信æ¯ã€‚"
#: doc/classes/Curve2D.xml doc/classes/Curve3D.xml
msgid ""
@@ -23515,9 +23560,9 @@ msgid ""
"smaller the distance, the more points in the cache and the more memory it "
"will consume, so use with care."
msgstr ""
-"相邻两个缓存点之间的è·ç¦»ï¼Œä»¥åƒç´ ä¸ºå•ä½ã€‚改å˜å®ƒå°†è¿«ä½¿ç¼“存在下次调用[method "
-"get_baked_points]或[method get_baked_length]å‡½æ•°æ—¶é‡æ–°è®¡ç®—。è·ç¦»è¶Šå°ï¼Œç¼“存中"
-"的点越多,å ç”¨çš„å†…å­˜ä¹Ÿè¶Šå¤šï¼Œæ‰€ä»¥ä½¿ç”¨æ—¶è¦æ³¨æ„。"
+"相邻两个缓存点之间的è·ç¦»ï¼Œä»¥åƒç´ ä¸ºå•ä½ã€‚改å˜å®ƒå°†è¿«ä½¿ç¼“存在下次调用 [method "
+"get_baked_points] 或 [method get_baked_length] å‡½æ•°æ—¶é‡æ–°è®¡ç®—。è·ç¦»è¶Šå°ï¼Œç¼“å­˜"
+"中的点越多,å ç”¨çš„å†…å­˜ä¹Ÿè¶Šå¤šï¼Œæ‰€ä»¥ä½¿ç”¨æ—¶è¦æ³¨æ„。"
#: doc/classes/Curve3D.xml
msgid "Describes a Bézier curve in 3D space."
@@ -23697,9 +23742,9 @@ msgid ""
"smaller the distance, the more points in the cache and the more memory it "
"will consume, so use with care."
msgstr ""
-"相邻两个缓存点之间的è·ç¦»ï¼Œå•ä½ä¸ºç±³ã€‚改å˜å®ƒå°†è¿«ä½¿ç¼“存在下次调用[method "
-"get_baked_points]或[method get_baked_length]å‡½æ•°æ—¶é‡æ–°è®¡ç®—。è·ç¦»è¶Šå°ï¼Œç¼“存中"
-"的点越多,å ç”¨çš„å†…å­˜ä¹Ÿè¶Šå¤šï¼Œæ‰€ä»¥ä½¿ç”¨æ—¶è¦æ³¨æ„。"
+"相邻两个缓存点之间的è·ç¦»ï¼Œå•ä½ä¸ºç±³ã€‚改å˜å®ƒå°†è¿«ä½¿ç¼“存在下次调用 [method "
+"get_baked_points] 或 [method get_baked_length] å‡½æ•°æ—¶é‡æ–°è®¡ç®—。è·ç¦»è¶Šå°ï¼Œç¼“å­˜"
+"中的点越多,å ç”¨çš„å†…å­˜ä¹Ÿè¶Šå¤šï¼Œæ‰€ä»¥ä½¿ç”¨æ—¶è¦æ³¨æ„。"
#: doc/classes/Curve3D.xml
msgid ""
@@ -23707,7 +23752,7 @@ msgid ""
"This is used when [member PathFollow.rotation_mode] is set to [constant "
"PathFollow.ROTATION_ORIENTED]. Changing it forces the cache to be recomputed."
msgstr ""
-"如果[code]true[/code],曲线将烘焙出用于定å‘çš„å‘é‡ã€‚当[member PathFollow."
+"如果为 [code]true[/code],曲线将烘焙出用于定å‘çš„å‘é‡ã€‚当[member PathFollow."
"rotation_mode]被设置为[constant PathFollow.ROTATION_ORIENTED]时,就会使用这个"
"功能。改å˜å®ƒå°†å¼ºåˆ¶é‡æ–°è®¡ç®—缓存。"
@@ -23719,15 +23764,20 @@ msgstr "显示曲线的纹ç†ã€‚"
msgid ""
"Renders a given [Curve] provided to it. Simplifies the task of drawing "
"curves and/or saving them as image files."
-msgstr "渲染æä¾›ç»™å®ƒçš„[Curve]。简化了绘制曲线和/或ä¿å­˜ä¸ºå›¾åƒæ–‡ä»¶çš„任务。"
+msgstr "渲染æä¾›ç»™å®ƒçš„ [Curve]。简化了绘制曲线和/或ä¿å­˜ä¸ºå›¾åƒæ–‡ä»¶çš„任务。"
#: doc/classes/CurveTexture.xml
-msgid "The [code]curve[/code] rendered onto the texture."
-msgstr "渲染到纹ç†ä¸Šçš„[code]curve[/code]。"
+msgid "The [Curve] that is rendered onto the texture."
+msgstr "渲染到纹ç†ä¸Šçš„ [Curve]。"
#: doc/classes/CurveTexture.xml
-msgid "The width of the texture."
-msgstr "纹ç†çš„宽度。"
+msgid ""
+"The width of the texture (in pixels). Higher values make it possible to "
+"represent high-frequency data better (such as sudden direction changes), at "
+"the cost of increased generation time and memory usage."
+msgstr ""
+"纹ç†å®½åº¦ï¼ˆå•ä½ä¸ºåƒç´ ï¼‰ã€‚较大的值能够更好地表示高频数æ®ï¼ˆä¾‹å¦‚æ–¹å‘çš„çªå˜ï¼‰ï¼Œä½†"
+"ä¼šå¢žåŠ ç”Ÿæˆæ—¶é—´å’Œå†…å­˜å ç”¨ã€‚"
#: doc/classes/CylinderMesh.xml
msgid "Class representing a cylindrical [PrimitiveMesh]."
@@ -23747,7 +23797,7 @@ 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],而ä¸ä¼šç”Ÿæˆåº•é¢ï¼Œä»Žè€Œå½¢æˆåœ†é”¥"
+"圆柱体的底部åŠå¾„。如果设置为 [code]0.0[/code],而ä¸ä¼šç”Ÿæˆåº•é¢ï¼Œä»Žè€Œå½¢æˆåœ†é”¥"
"体。"
#: doc/classes/CylinderMesh.xml
@@ -23990,7 +24040,7 @@ msgstr ""
" # 这里我们ä¸èƒ½ä½¿ç”¨ç‚¹ï¼Œå› ä¸ºâ€˜my_color’是个å˜é‡ã€‚\n"
" var points = points_dir[my_color]\n"
"[/codeblock]\n"
-"在上方的代ç ä¸­ï¼Œ[code]points[/code] 会被赋值为 [code]my_color[/code]中选å–çš„"
+"在上é¢çš„代ç ä¸­ï¼Œ[code]points[/code] 会被赋值为 [code]my_color[/code] 中选å–çš„"
"颜色。\n"
"å­—å…¸å¯ä»¥å®¹çº³æ›´åР夿‚的数æ®ï¼š\n"
"[codeblock]\n"
@@ -23999,13 +24049,13 @@ msgstr ""
"如果想è¦ç»™å­—典添加一个键,å¯ä»¥åƒè®¿é—®å·²æœ‰çš„键一样:\n"
"[codeblock]\n"
"var points_dir = {\"White\": 50, \"Yellow\": 75, \"Orange\": 100}\n"
-"points_dir[\"Blue\"] = 150 # 添加键\"Blue\",并将其数值设定为150\n"
+"points_dir[\"Blue\"] = 150 # 添加键 \"Blue\",并将其数值设定为 150\n"
"[/codeblock]\n"
"最终,åŒä¸€ä¸ªå­—典内å¯ä»¥å®¹çº³ä¸åŒç±»åž‹çš„键和值:\n"
"[codeblock]\n"
"# è¿™æ˜¯ä¸€ä¸ªåˆæ³•的字典。\n"
-"# 使用`my_dir.sub_dir.sub_key`或`my_dir[\"sub_dir\"][\"sub_key\"]`æ¥è®¿é—®ä¸‹æ–¹"
-"的字符串\"Nested value\"。\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"
@@ -24020,13 +24070,13 @@ msgstr ""
"array2 = [1, 2, 3]\n"
"\n"
"func compare_arrays():\n"
-" print(array1 == array2) # 会输出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) # ä¸ä¼šè¾“出true。\n"
+" print(dir1 == dir2) # ä¸ä¼šè¾“出 true。\n"
"[/codeblock]\n"
"想è¦å¯¹æ¯”字典,首先需è¦ç”¨ [method hash] 计算字典哈希。\n"
"[codeblock]\n"
@@ -24034,11 +24084,11 @@ msgstr ""
"dir2 = {\"a\": 1, \"b\": 2, \"c\": 3}\n"
"\n"
"func compare_dictionaries():\n"
-" print(dir1.hash() == dir2.hash()) # 会输出true。\n"
+" print(dir1.hash() == dir2.hash()) # 会输出 true。\n"
"[/codeblock]\n"
"[b]注æ„:[/b]当使用 [code]const[/code] æ¥å£°æ˜Žå­—典时,字典本身ä¾ç„¶å¯ä»¥é€šè¿‡å®šä¹‰"
-"键的数值æ¥è¿›è¡Œä¿®æ”¹ã€‚使用 [code]const[/code] åªèƒ½é˜²æ­¢åœ¨å®ƒåˆå§‹åŒ–完æˆåŽè¢«ç»™äºˆå¦"
-"一个数值。"
+"键的数值æ¥è¿›è¡Œä¿®æ”¹ã€‚使用 [code]const[/code] åªèƒ½é˜²æ­¢åœ¨å¸¸é‡åœ¨åˆå§‹åŒ–完æˆåŽè¢«èµ‹"
+"为其他值。"
#: doc/classes/Dictionary.xml
msgid "GDScript basics: Dictionary"
@@ -24096,7 +24146,7 @@ msgid ""
"code]."
msgstr ""
"如果字典有一个给定的键,返回 [code]true[/code]。\n"
-"[b]注æ„:[/b]这相当于使用 [code]in[/code] è¿ç®—符,如下所示:\n"
+"[b]注æ„:[/b]相当于使用 [code]in[/code] è¿ç®—符,如下所示:\n"
"[codeblock]\n"
"# 估值为 `true`。\n"
"if \"godot\" in {\"godot\": \"engine\"}:\n"
@@ -24143,7 +24193,16 @@ msgstr ""
#: doc/classes/Dictionary.xml
msgid "Returns the list of keys in the [Dictionary]."
-msgstr "返回[Dictionary]中的键列表。"
+msgstr "返回 [Dictionary] 中的键列表。"
+
+#: doc/classes/Dictionary.xml
+msgid ""
+"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, "
+"duplicate keys will not be copied over, unless [code]overwrite[/code] is "
+"[code]true[/code]."
+msgstr ""
+"å°† [code]dictionary[/code] 中的元素添加到这个 [Dictionary] 中。默认情况下,ä¸"
+"会å¤åˆ¶é‡å¤çš„é”®ï¼Œé™¤éž [code]overwrite[/code] 为 [code]true[/code]。"
#: doc/classes/Dictionary.xml
msgid "Returns the number of keys in the dictionary."
@@ -24151,7 +24210,7 @@ msgstr "返回字典中键的数é‡ã€‚"
#: doc/classes/Dictionary.xml
msgid "Returns the list of values in the [Dictionary]."
-msgstr "返回[Dictionary]中的值列表。"
+msgstr "返回 [Dictionary] 中的值列表。"
#: doc/classes/DirectionalLight.xml
msgid "Directional light from a distance, as from the Sun."
@@ -24182,13 +24241,13 @@ msgid ""
"If [code]true[/code], shadow detail is sacrificed in exchange for smoother "
"transitions between splits."
msgstr ""
-"如果[code]true[/code],则会牺牲阴影细节,以æ¢å–更平滑的分割之间的过渡。"
+"如果为 [code]true[/code],则会牺牲阴影细节,以æ¢å–更平滑的分割之间的过渡。"
#: doc/classes/DirectionalLight.xml
msgid ""
"Optimizes shadow rendering for detail versus movement. See [enum "
"ShadowDepthRange]."
-msgstr "优化阴影渲染的细节与è¿åŠ¨ã€‚å‚阅[enum ShadowDepthRange]。"
+msgstr "优化阴影渲染的细节与è¿åŠ¨ã€‚è§ [enum ShadowDepthRange]。"
#: doc/classes/DirectionalLight.xml
msgid "The maximum distance for shadow splits."
@@ -24196,7 +24255,7 @@ msgstr "阴影分割的最大è·ç¦»ã€‚"
#: doc/classes/DirectionalLight.xml
msgid "The light's shadow rendering algorithm. See [enum ShadowMode]."
-msgstr "ç¯å…‰çš„阴影渲染算法。å‚阅[enum ShadowMode]。"
+msgstr "ç¯å…‰çš„é˜´å½±æ¸²æŸ“ç®—æ³•ã€‚è§ [enum ShadowMode]。"
#: doc/classes/DirectionalLight.xml
msgid ""
@@ -24342,10 +24401,10 @@ msgid ""
"code] or [code]res://somedir/newdir[/code]).\n"
"Returns one of the [enum Error] code constants ([code]OK[/code] on success)."
msgstr ""
-"将当剿‰“å¼€çš„ç›®å½•æ”¹ä¸ºå‚æ•°ä¼ é€’çš„ç›®å½•ã€‚å‚æ•°å¯ä»¥æ˜¯ç›¸å¯¹äºŽå½“å‰ç›®å½•çš„(例如 "
-"[code]newdir[/code] 或 [code].../newdir[/code]),也å¯ä»¥æ˜¯ç»å¯¹è·¯å¾„(例如 "
-"[code]/tmp/newdir[/code] 或 [code]res://somedir/newdir[/code])。\n"
-"返回 [enum Error] 代ç å¸¸é‡ä¹‹ä¸€ ([code]OK[/code] æˆåŠŸæ—¶)。"
+"将当剿‰“å¼€çš„ç›®å½•æ”¹ä¸ºå‚æ•°ä¼ é€’çš„ç›®å½•ã€‚å‚æ•°å¯ä»¥æ˜¯ç›¸å¯¹äºŽå½“å‰ç›®å½•的(例如 "
+"[code]newdir[/code] 或 [code].../newdir[/code]),也å¯ä»¥æ˜¯ç»å¯¹è·¯å¾„(例如 "
+"[code]/tmp/newdir[/code] 或 [code]res://somedir/newdir[/code])。\n"
+"返回 [enum Error] 代ç å¸¸é‡ä¹‹ä¸€ï¼ˆ[code]OK[/code] æˆåŠŸæ—¶ï¼‰ã€‚"
#: doc/classes/Directory.xml
msgid ""
@@ -24357,7 +24416,7 @@ msgid ""
msgstr ""
"å°† [code]from[/code] 文件å¤åˆ¶åˆ° [code]to[/code] 目标ä½ç½®ã€‚ä¸¤ä¸ªå‚æ•°éƒ½åº”该是相"
"对或ç»å¯¹æ–‡ä»¶çš„è·¯å¾„ã€‚å¦‚æžœç›®æ ‡æ–‡ä»¶å­˜åœ¨ä¸”æ²¡æœ‰è®¿é—®ä¿æŠ¤ï¼Œåˆ™ä¼šè¢«è¦†ç›–ã€‚\n"
-"返回[enum Error]代ç å¸¸é‡ä¹‹ä¸€(æˆåŠŸæ—¶è¿”å›ž [code]OK[/code])。"
+"返回 [enum Error] 代ç å¸¸é‡ä¹‹ä¸€ï¼ˆæˆåŠŸæ—¶è¿”å›ž [code]OK[/code])。"
#: doc/classes/Directory.xml
msgid ""
@@ -24474,8 +24533,8 @@ 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
msgid ""
@@ -24499,7 +24558,7 @@ msgid ""
msgstr ""
"通过递归调用 [method make_dir]方法,创建一个目标目录和其路径中所有必è¦çš„中间"
"ç›®å½•ã€‚å‚æ•°å¯ä»¥æ˜¯ç›¸å¯¹äºŽå½“å‰ç›®å½•的,也å¯ä»¥æ˜¯ç»å¯¹è·¯å¾„。\n"
-"返回[enum Error]代ç å¸¸é‡ä¹‹ä¸€(æˆåŠŸæ—¶è¿”å›ž [code]OK[/code])。"
+"返回 [enum Error] 代ç å¸¸é‡ä¹‹ä¸€ï¼ˆæˆåŠŸæ—¶è¿”å›ž [code]OK[/code])。"
#: doc/classes/Directory.xml
msgid ""
@@ -24509,11 +24568,11 @@ msgid ""
"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 ""
-"打开文件系统的现有目录。 [code]path[/code]傿•°å¯ä»¥ä½äºŽé¡¹ç›®æ ‘([code]res:// "
-"folder[/code]),用户目录([code]user:// folder[/code])或以下ä½ç½®çš„ç»å¯¹è·¯å¾„"
-"内:用户文件系统(例如[code]/ tmp / folder[/code]或[code]C:\\ tmp \\ "
-"folder[/code])。\n"
-"返回[enum Error]代ç å¸¸é‡ä¹‹ä¸€ï¼ˆæˆåŠŸæ—¶è¿”å›ž [code]OK[/code])。"
+"打开文件系统的现有目录。[code]path[/code] 傿•°å¯ä»¥ä½äºŽé¡¹ç›®æ ‘([code]res:// "
+"folder[/code]),用户目录([code]user:// folder[/code])或以下ä½ç½®çš„ç»å¯¹è·¯å¾„"
+"内:用户文件系统(例如 [code]/tmp/folder[/code] 或 [code]C:\\tmp\\folder[/"
+"code])。\n"
+"返回 [enum Error] 代ç å¸¸é‡ä¹‹ä¸€ï¼ˆæˆåŠŸæ—¶è¿”å›ž [code]OK[/code])。"
#: doc/classes/Directory.xml
msgid ""
@@ -24544,7 +24603,7 @@ msgstr ""
#: doc/classes/DTLSServer.xml
msgid "Helper class to implement a DTLS server."
-msgstr "实现DTLSæœåŠ¡å™¨çš„è¾…åŠ©ç±»ã€‚"
+msgstr "实现 DTLS æœåŠ¡å™¨çš„è¾…åŠ©ç±»ã€‚"
#: doc/classes/DTLSServer.xml
msgid ""
@@ -24760,7 +24819,7 @@ msgstr ""
#: doc/classes/DynamicFont.xml
msgid "Returns the fallback font at index [code]idx[/code]."
-msgstr "返回ä½äºŽç´¢å¼•[code]idx[/code]处的åŽå¤‡å­—体。"
+msgstr "返回ä½äºŽç´¢å¼• [code]idx[/code] 处的åŽå¤‡å­—体。"
#: doc/classes/DynamicFont.xml
msgid "Returns the number of fallback fonts."
@@ -24769,7 +24828,7 @@ msgstr "返回åŽå¤‡å­—体的数é‡ã€‚"
#: doc/classes/DynamicFont.xml
msgid ""
"Returns the spacing for the given [code]type[/code] (see [enum SpacingType])."
-msgstr "返回给定[code]type[/code]的间è·(å‚阅[enum SpacingType])。"
+msgstr "返回给定 [code]type[/code] 的间è·ï¼ˆè§ [enum SpacingType])。"
#: doc/classes/DynamicFont.xml
msgid "Removes the fallback font at index [code]idx[/code]."
@@ -24784,8 +24843,8 @@ msgid ""
"Sets the spacing for [code]type[/code] (see [enum SpacingType]) to "
"[code]value[/code] in pixels (not relative to the font size)."
msgstr ""
-"ç»™[code]type[/code]设置间è·(å‚阅[enum SpacingType])为[code]value[/code],å•ä½"
-"为åƒç´ (ä¸Žå­—ä½“å¤§å°æ— å…³)。"
+"ç»™ [code]type[/code] 设置间è·ï¼ˆè§ [enum SpacingType])为 [code]value[/code],"
+"å•ä½ä¸ºåƒç´ ï¼ˆä¸Žå­—体大尿— å…³ï¼‰ã€‚"
#: doc/classes/DynamicFont.xml
msgid "Extra spacing at the bottom in pixels."
@@ -24806,7 +24865,7 @@ 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"
+"空格字符(在 [member extra_spacing_char] 之外)的é¢å¤–é—´è·ï¼Œå•ä½ä¸ºåƒç´ ã€‚\n"
"è¿™å¯ä»¥æ˜¯è´Ÿæ•°ï¼Œä½¿å­—符之间的è·ç¦»æ›´å°ã€‚"
#: doc/classes/DynamicFont.xml
@@ -25241,7 +25300,7 @@ msgstr "å¯¼å…¥æ‰©å±•é¢æ¿ã€‚如果ç¦ç”¨æ­¤åŠŸèƒ½ï¼Œåˆ™å¯¼å…¥æ‰©å±•é¢æ¿å°†ä¸
#: doc/classes/EditorFeatureProfile.xml doc/classes/SpatialMaterial.xml
msgid "Represents the size of the [enum Feature] enum."
-msgstr "表示[enum Feature]枚举的大å°ã€‚"
+msgstr "表示 [enum Feature] 枚举的大å°ã€‚"
#: doc/classes/EditorFileDialog.xml
msgid "A modified version of [FileDialog] used by the editor."
@@ -25279,15 +25338,15 @@ msgid ""
"Notify the [EditorFileDialog] that its view of the data is no longer "
"accurate. Updates the view contents on next view update."
msgstr ""
-"通知[EditorFileDialog]它的数æ®è§†å›¾ä¸å†å‡†ç¡®ã€‚在下次视图更新时更新视图内容。"
+"通知 [EditorFileDialog] 它的数æ®è§†å›¾ä¸å†å‡†ç¡®ã€‚在下次视图更新时更新视图内容。"
#: doc/classes/EditorFileDialog.xml
msgid ""
"The location from which the user may select a file, including [code]res://[/"
"code], [code]user://[/code], and the local file system."
msgstr ""
-"用户å¯ä»¥é€‰æ‹©æ–‡ä»¶çš„ä½ç½®ï¼ŒåŒ…括[code]res://[/code]ã€[code]user://[/code]和本地文"
-"件系统。"
+"用户å¯ä»¥é€‰æ‹©æ–‡ä»¶çš„ä½ç½®ï¼ŒåŒ…括 [code]res://[/code]ã€[code]user://[/code] 和本地"
+"文件系统。"
#: doc/classes/EditorFileDialog.xml
msgid "The currently occupied directory."
@@ -25306,13 +25365,13 @@ msgid ""
"If [code]true[/code], the [EditorFileDialog] will not warn the user before "
"overwriting files."
msgstr ""
-"如果[code]true[/code],[EditorFileDialog]å°†ä¸ä¼šåœ¨è¦†ç›–文件之å‰è­¦å‘Šç”¨æˆ·ã€‚"
+"如果为 [code]true[/code],[EditorFileDialog] å°†ä¸ä¼šåœ¨è¦†ç›–文件之å‰è­¦å‘Šç”¨æˆ·ã€‚"
#: doc/classes/EditorFileDialog.xml
msgid ""
"The view format in which the [EditorFileDialog] displays resources to the "
"user."
-msgstr "[EditorFileDialog]å‘用户显示资æºçš„视图格å¼ã€‚"
+msgstr "[EditorFileDialog] å‘用户显示资æºçš„视图格å¼ã€‚"
#: doc/classes/EditorFileDialog.xml
msgid ""
@@ -25323,7 +25382,8 @@ msgstr "[EditorFileDialog] 的用途,它定义了å…许的行为。"
msgid ""
"If [code]true[/code], hidden files and directories will be visible in the "
"[EditorFileDialog]."
-msgstr "如果[code]true[/code],éšè—的文件和目录将在[EditorFileDialog]中å¯è§ã€‚"
+msgstr ""
+"如果为 [code]true[/code],éšè—的文件和目录将在 [EditorFileDialog] 中å¯è§ã€‚"
#: doc/classes/EditorFileDialog.xml
msgid "Emitted when a directory is selected."
@@ -25413,8 +25473,9 @@ 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]。"
+"返回文件的资æºç±»åž‹ï¼Œç»™å®šå®Œæ•´è·¯å¾„。这将返回字符串,如 [code]\"Resource\"[/"
+"code] 或 [code]\"GDScript\"[/code],[i]䏿˜¯[/i]文件扩展å,如 [code]\".gd\"[/"
+"code]。"
#: doc/classes/EditorFileSystem.xml
msgid "Gets the root directory object."
@@ -25426,7 +25487,7 @@ msgstr "返回在 [code]path[/code] 文件系统的视图。"
#: doc/classes/EditorFileSystem.xml
msgid "Returns the scan progress for 0 to 1 if the FS is being scanned."
-msgstr "如果文件系统正在被扫æï¼Œè¿”回扫æçš„进度,值为0-1。"
+msgstr "如果文件系统正在被扫æï¼Œè¿”回扫æçš„进度,值为 0-1。"
#: doc/classes/EditorFileSystem.xml
msgid "Returns [code]true[/code] if the filesystem is being scanned."
@@ -25444,7 +25505,7 @@ msgstr "æ£€æŸ¥æ˜¯å¦æ›´æ”¹äº†å·²å¯¼å…¥èµ„æºçš„æ¥æºã€‚"
msgid ""
"Update a file information. Call this if an external program (not Godot) "
"modified the file."
-msgstr "更新文件信æ¯ã€‚如果外部程åº(䏿˜¯Godot)修改了该文件,则调用此函数。"
+msgstr "更新文件信æ¯ã€‚如果外部程åºï¼ˆä¸æ˜¯ Godot)修改了该文件,则调用此函数。"
#: doc/classes/EditorFileSystem.xml
msgid "Scans the script files and updates the list of custom class names."
@@ -25508,7 +25569,7 @@ msgstr ""
#: doc/classes/EditorFileSystemDirectory.xml
msgid "Returns the path to the file at index [code]idx[/code]."
-msgstr "返回索引为[code]idx[/code] 文件的路径。"
+msgstr "返回索引为 [code]idx[/code] 文件的路径。"
#: doc/classes/EditorFileSystemDirectory.xml
msgid ""
@@ -25516,9 +25577,8 @@ msgid ""
"[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 ""
-"返回这个文件中脚本类(script class)在索引处[code]idx[/code]定义的基类(base "
-"class)。如果这个文件没有使用 [code]class_name[/code] 关键字定义脚本类,将返回"
-"一个空字符串。"
+"返回这个文件中脚本类在索引 [code]idx[/code] 处定义的基类。如果这个文件没有使"
+"用 [code]class_name[/code] 关键字定义脚本类,将返回一个空字符串。"
#: doc/classes/EditorFileSystemDirectory.xml
msgid ""
@@ -25535,9 +25595,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]。"
+"返回索引 [code]idx[/code] 处文件的资æºç±»åž‹ã€‚这将返回字符串,如 "
+"[code]\"Resource\"[/code] 或 [code]\"GDScript\"[/code],[i]䏿˜¯[/i]文件扩展"
+"å,如 [code]\".gd\"[/code]。"
#: doc/classes/EditorFileSystemDirectory.xml
msgid "Returns the name of this directory."
@@ -25729,8 +25789,7 @@ msgstr ""
"其他选项的选项,如果其中一个选项被ç¦ç”¨ã€‚例如:\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"
+" # åªæœ‰åœ¨åŽ‹ç¼©æ¨¡å¼ä¸ºâ€œLossyâ€æ—¶æ˜¾ç¤º Lossy Quality 设置。\n"
" if option == \"compress/lossy_quality\" and options.has(\"compress/"
"mode\"):\n"
" return int(options[\"compress/mode\"]) == COMPRESS_LOSSY\n"
@@ -25745,8 +25804,8 @@ msgid ""
"get_import_options] to get the default options for the preset and [method "
"get_preset_name] to get the name of the preset."
msgstr ""
-"èŽ·å–æ’件定义的åˆå§‹é¢„置数é‡ã€‚使用[method get_import_options]获å–预设的默认选"
-"项,使用[method get_preset_name]获å–预设的å称。"
+"èŽ·å–æ’件定义的åˆå§‹é¢„置数é‡ã€‚使用 [method get_import_options] 获å–预设的默认选"
+"项,使用 [method get_preset_name] 获å–预设的å称。"
#: doc/classes/EditorImportPlugin.xml
msgid "Gets the name of the options preset at this index."
@@ -25757,7 +25816,7 @@ 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 ""
-"获å–该æ’件对识别的扩展的优先级。优先级越高的æ’件会被优先选择。默认的优先级是"
+"获å–该æ’件对识别的扩展的优先级。优先级越高的æ’件会被优先选择。默认的优先级是 "
"[code]1.0[/code]。"
#: doc/classes/EditorImportPlugin.xml
@@ -25773,7 +25832,7 @@ msgid ""
"Gets the Godot resource type associated with this loader. e.g. "
"[code]\"Mesh\"[/code] or [code]\"Animation\"[/code]."
msgstr ""
-"获å–与此加载程åºå…³è”çš„Godot资æºç±»åž‹ï¼Œä¾‹å¦‚ [code]\"Mesh\"[/code] 或 "
+"获å–与此加载程åºå…³è”çš„ Godot 资æºç±»åž‹ï¼Œä¾‹å¦‚ [code]\"Mesh\"[/code] 或 "
"[code]\"Animation\"[/code]。"
#: doc/classes/EditorImportPlugin.xml
@@ -25782,8 +25841,8 @@ msgid ""
"directory (see [member ProjectSettings.application/config/"
"use_hidden_project_data_directory])."
msgstr ""
-"获å–用于在[code].import[/code]目录中ä¿å­˜æ­¤èµ„æºçš„æ‰©å±•å,å‚阅[member "
-"ProjectSettings.application/config/use_hidden_project_data_directory]。"
+"获å–用于在 [code].import[/code] 目录中ä¿å­˜æ­¤èµ„æºçš„æ‰©å±•åï¼ˆè§ [member "
+"ProjectSettings.application/config/use_hidden_project_data_directory])。"
#: doc/classes/EditorImportPlugin.xml
msgid ""
@@ -25902,8 +25961,9 @@ msgid ""
"inspector, this signal is never emitted by the editor itself."
msgstr ""
"在检查器中切æ¢å¸ƒå°”属性时å‘出。\n"
-"[b]注æ„:[/b]如果å¯ç”¨äº†å†…部[code]autoclear[/code]å±žæ€§ï¼Œåˆ™è¯¥ä¿¡å·æ°¸è¿œä¸ä¼šè§¦å‘。"
-"由于该属性在编辑器检查器中始终处于å¯ç”¨çжæ€ï¼Œå› æ­¤ç¼–辑器本身ç»ä¸ä¼šå‘出该信å·ã€‚"
+"[b]注æ„:[/b]如果å¯ç”¨äº†å†…部 [code]autoclear[/code] å±žæ€§ï¼Œåˆ™è¯¥ä¿¡å·æ°¸è¿œä¸ä¼šè§¦"
+"å‘。由于该属性在编辑器检查器中始终处于å¯ç”¨çжæ€ï¼Œå› æ­¤ç¼–辑器本身ç»ä¸ä¼šå‘出该信"
+"å·ã€‚"
#: doc/classes/EditorInspector.xml
msgid "Emitted when a resource is selected in the inspector."
@@ -25961,14 +26021,15 @@ msgid ""
"Adds a property editor for an individual property. The [code]editor[/code] "
"control must extend [EditorProperty]."
msgstr ""
-"为å•独的属性添加属性编辑器。[code]editor[/code]控件必须扩展[EditorProperty]。"
+"为å•独的属性添加属性编辑器。[code]editor[/code] 控件必须扩展 "
+"[EditorProperty]。"
#: doc/classes/EditorInspectorPlugin.xml
msgid ""
"Adds an editor that allows modifying multiple properties. The [code]editor[/"
"code] control must extend [EditorProperty]."
msgstr ""
-"添加一个编辑器,å…许修改多个属性。[code]editor[/code]控件必须扩展"
+"添加一个编辑器,å…许修改多个属性。[code]editor[/code] 控件必须扩展 "
"[EditorProperty]。"
#: doc/classes/EditorInspectorPlugin.xml
@@ -26115,7 +26176,7 @@ msgstr ""
#: doc/classes/EditorInterface.xml
msgid "Returns an [Array] with the file paths of the currently opened scenes."
-msgstr "返回包å«å½“剿‰“开的场景的文件路径的数组[Array]。"
+msgstr "返回包å«å½“剿‰“开的场景的文件路径的数组 [Array]。"
#: doc/classes/EditorInterface.xml
msgid ""
@@ -26125,11 +26186,11 @@ msgstr "返回正在播放的场景åç§°ã€‚å¦‚æžœå½“å‰æ²¡æœ‰åœºæ™¯æ­£åœ¨æ’­æ”¾
#: doc/classes/EditorInterface.xml
msgid "Returns the editor's [EditorFileSystem] instance."
-msgstr "返回编辑器的[EditorFileSystem]实例。"
+msgstr "返回编辑器的 [EditorFileSystem] 实例。"
#: doc/classes/EditorInterface.xml
msgid "Returns the editor's [EditorResourcePreview] instance."
-msgstr "返回编辑器的[EditorResourcePreview]实例。"
+msgstr "返回编辑器的 [EditorResourcePreview] 实例。"
#: doc/classes/EditorInterface.xml
msgid ""
@@ -26146,13 +26207,13 @@ msgid ""
"[FileSystemDock]. If a file is selected, its base directory will be returned "
"using [method String.get_base_dir] instead."
msgstr ""
-"返回当å‰åœ¨[FileSystemDock]中选择的目录的路径,如果选择了一个文件,将使用"
-"[method String.get_base_dir]返回其基本目录。如果选择了一个文件,将使用"
-"[method String.get_base_dir]返回它的基本目录。"
+"返回当å‰åœ¨ [FileSystemDock] 中选择的目录的路径,如果选择了一个文件,将使用 "
+"[method String.get_base_dir] 返回其基本目录。如果选择了一个文件,将使用 "
+"[method String.get_base_dir] 返回它的基本目录。"
#: doc/classes/EditorInterface.xml
msgid "Returns the editor's [EditorSelection] instance."
-msgstr "返回编辑器的[EditorSelection]实例。"
+msgstr "返回编辑器的 [EditorSelection] 实例。"
#: doc/classes/EditorInterface.xml
msgid ""
@@ -26183,7 +26244,7 @@ msgstr ""
#: doc/classes/EditorInterface.xml
msgid ""
"Returns mesh previews rendered at the given size as an [Array] of [Texture]s."
-msgstr "返回 [Array] 数组包å«ç»™å®šå°ºå¯¸æ¸²æŸ“的网格预览图[Texture]。"
+msgstr "返回 [Array] 数组包å«ç»™å®šå°ºå¯¸æ¸²æŸ“的网格预览图 [Texture]。"
#: doc/classes/EditorInterface.xml
msgid "Opens the scene at the given path."
@@ -26210,12 +26271,12 @@ msgid ""
"Saves the scene. Returns either [code]OK[/code] or [code]ERR_CANT_CREATE[/"
"code] (see [@GlobalScope] constants)."
msgstr ""
-"ä¿å­˜åœºæ™¯ã€‚返回 [code]OK[/code] 或 [code]ERR_CANT_CREATE[/code] (å‚阅 "
-"[@GlobalScope] 常é‡)。"
+"ä¿å­˜åœºæ™¯ã€‚返回 [code]OK[/code] 或 [code]ERR_CANT_CREATE[/code]ï¼ˆè§ "
+"[@GlobalScope] 常é‡ï¼‰ã€‚"
#: doc/classes/EditorInterface.xml
msgid "Saves the scene as a file at [code]path[/code]."
-msgstr "将场景ä¿å­˜ä¸º[code]path[/code]处的文件。"
+msgstr "将场景ä¿å­˜ä¸º [code]path[/code] 处的文件。"
#: doc/classes/EditorInterface.xml
msgid ""
@@ -26230,9 +26291,9 @@ msgid ""
"([code]2D[/code], [code]3D[/code], [code]Script[/code], [code]AssetLib[/"
"code])."
msgstr ""
-"将编辑器的当å‰ä¸»ç•Œé¢è®¾ç½®ä¸º [code]name[/code] 中指定的界é¢ã€‚[code]name[/code]"
-"必须与相关选项å¡çš„æ–‡æœ¬å®Œå…¨åŒ¹é…([code]2D[/code], [code]3D[/code], "
-"[code]Script[/code], [code]AssetLib[/code])。"
+"将编辑器的当å‰ä¸»ç•Œé¢è®¾ç½®ä¸º [code]name[/code] 中指定的界é¢ã€‚[code]name[/code] "
+"必须与相关选项å¡çš„æ–‡æœ¬å®Œå…¨åŒ¹é…([code]2D[/code]ã€[code]3D[/code]ã€"
+"[code]Script[/code]ã€[code]AssetLib[/code])。"
#: doc/classes/EditorInterface.xml
msgid ""
@@ -26381,7 +26442,7 @@ msgid ""
" remove_inspector_plugin(inspector_plugin)\n"
"[/codeblock]"
msgstr ""
-"注册一个新的编辑器属性检查器æ’ä»¶[EditorInspectorPlugin]。检查器æ’件用于扩展 "
+"注册一个新的编辑器属性检查器æ’ä»¶ [EditorInspectorPlugin]。检查器æ’件用于扩展 "
"[EditorInspector] 并为你的对象属性æä¾›è‡ªå®šä¹‰é…置工具。\n"
"[b]注æ„:[/b]当你的 [EditorPlugin] 被ç¦ç”¨æ—¶ï¼Œä¸€å®šè¦ä½¿ç”¨ [method "
"remove_inspector_plugin] æ¥åˆ é™¤æ³¨å†Œçš„ [EditorInspectorPlugin],以防止泄æ¼å’Œå‡º"
@@ -26432,7 +26493,7 @@ msgid ""
"[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 ""
-"在[b]项目 > 工具[/b]下添加å为 [code]name[/code] 的自定义å­èœå•。 "
+"在[b]项目 > 工具[/b]下添加å为 [code]name[/code] 的自定义å­èœå•。"
"[code]submenu[/code] 应该是 [PopupMenu] 类的对象。此å­èœå•应使用 "
"[code]remove_tool_menu_item(name)[/code] 进行清ç†ã€‚"
@@ -26681,14 +26742,14 @@ msgid ""
"[code]res://path_to_script.gd:25[/code]."
msgstr ""
"这是为编辑基于脚本的对象的编辑器。您å¯ä»¥è¿”回格å¼ä¸­çš„æ–­ç‚¹åˆ—表([code]script:"
-"line[/code]),例如:[code]res://path_to_script.gd:25[/code]。"
+"line[/code]),例如:[code]res://path_to_script.gd:25[/code]。"
#: doc/classes/EditorPlugin.xml
msgid ""
"Returns the [EditorInterface] object that gives you control over Godot "
"editor's window and its functionalities."
msgstr ""
-"返回[EditorInterface]对象,该对象使您å¯ä»¥æŽ§åˆ¶Godot编辑器的窗å£åŠå…¶åŠŸèƒ½ã€‚"
+"返回 [EditorInterface] 对象,该对象使您å¯ä»¥æŽ§åˆ¶ Godot 编辑器的窗å£åŠå…¶åŠŸèƒ½ã€‚"
#: doc/classes/EditorPlugin.xml
msgid ""
@@ -26708,9 +26769,9 @@ msgid ""
"[/codeblock]"
msgstr ""
"在你的æ’ä»¶ä¸­è¦†ç›–è¿™ä¸ªæ–¹æ³•ï¼Œè¿”å›žä¸€ä¸ªçº¹ç† [Texture],以便给它一个图标。\n"
-"对于主界é¢çš„æ’ä»¶ï¼Œå®ƒå‡ºçŽ°åœ¨å±å¹•的顶部,在 \"2D\"ã€\"3D\"ã€\"Script \"å’Œ "
-"\"AssetLib \"按钮的å³è¾¹ã€‚\n"
-"ç†æƒ³æƒ…况下,æ’ä»¶çš„å›¾æ ‡åº”è¯¥æ˜¯é€æ˜ŽèƒŒæ™¯çš„白色,尺寸为16x16åƒç´ ã€‚\n"
+"对于主界é¢çš„æ’ä»¶ï¼Œå®ƒå‡ºçŽ°åœ¨å±å¹•的顶部,在“2Dâ€â€œ3Dâ€â€œScriptâ€â€œAssetLibâ€æŒ‰é’®çš„å³"
+"边。\n"
+"ç†æƒ³æƒ…况下,æ’ä»¶çš„å›¾æ ‡åº”è¯¥æ˜¯é€æ˜ŽèƒŒæ™¯çš„白色,尺寸为 16x16 åƒç´ ã€‚\n"
"[codeblock]\n"
"func get_plugin_icon():\n"
" # ä½ å¯ä»¥ä½¿ç”¨ä¸€ä¸ªè‡ªå®šä¹‰çš„图标。\n"
@@ -26727,12 +26788,10 @@ msgid ""
"For main screen plugins, this appears at the top of the screen, to the right "
"of the \"2D\", \"3D\", \"Script\", and \"AssetLib\" buttons."
msgstr ""
-"在Godot编辑器中显示时,请在æ’件中覆盖此方法以æä¾›æ’ä»¶çš„å称。\n"
-"对于主å±å¹•æ’件,它显示在å±å¹•顶部,在“ 2Dâ€ï¼Œâ€œ 3Dâ€ï¼Œâ€œè„šæœ¬â€å’Œâ€œ AssetLibâ€æŒ‰é’®çš„å³"
-"侧。"
+"在 Godot 编辑器中显示时,请在æ’件中覆盖此方法以æä¾›æ’ä»¶çš„å称。\n"
+"对于主å±å¹•æ’件,它显示在å±å¹•顶部,在“2Dâ€â€œ3Dâ€â€œè„šæœ¬â€â€œAssetLibâ€æŒ‰é’®çš„å³ä¾§ã€‚"
#: doc/classes/EditorPlugin.xml
-#, fuzzy
msgid ""
"Gets the Editor's dialog used for making scripts.\n"
"[b]Note:[/b] Users can configure it before use.\n"
@@ -26745,12 +26804,38 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide a state data you want to be saved, like view "
+"position, grid settings, folding, etc. 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). This data is automatically saved for "
+"each scene in an [code]editstate[/code] file in the editor metadata folder. "
+"If you want to store global (scene-independent) editor data for your plugin, "
+"you can use [method get_window_layout] instead.\n"
+"Use [method set_state] to restore your saved state.\n"
+"[b]Note:[/b] This method should not be used to save important settings that "
+"should persist with the project.\n"
+"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be "
+"stored and restored correctly.\n"
+"[codeblock]\n"
+"func get_state():\n"
+" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n"
+" return state\n"
+"[/codeblock]"
msgstr ""
-"èŽ·å–æ’件编辑器的状æ€ã€‚这用于ä¿å­˜åœºæ™¯æ—¶ï¼ˆä»Žè€Œå†æ¬¡æ‰“开时,它的状æ€è¢«ä¿æŒï¼‰å’Œåˆ‡"
-"æ¢æ ‡ç­¾ï¼ˆä»Žè€Œçжæ€èƒ½å¤Ÿå½“拉片返回æ¢å¤ï¼‰æ—¶ä½¿ç”¨ã€‚"
+"覆盖这个方法å¯ç”¨äºŽæä¾›æƒ³è¦ä¿å­˜çš„çŠ¶æ€æ•°æ®ï¼Œç±»ä¼¼è§†å›¾ä½ç½®ã€ç½‘æ ¼è®¾ç½®ã€æŠ˜å æƒ…况"
+"等。会在ä¿å­˜åœºæ™¯ï¼ˆå†æ¬¡æ‰“开时ä¿ç•™çжæ€ï¼‰å’Œåˆ‡æ¢æ ‡ç­¾é¡µï¼ˆåˆ‡å›žæ ‡ç­¾é¡µæ—¶æ¢å¤çжæ€ï¼‰æ—¶"
+"用到。这些数æ®ä¼šè‡ªåЍä¿å­˜åˆ°ç¼–è¾‘å™¨å…ƒæ•°æ®æ–‡ä»¶å¤¹ä¸­å„个场景的 [code]editstate[/"
+"code] 文件中。如果你想è¦ä¸ºæ’ä»¶ä¿å­˜å…¨å±€ï¼ˆä¸Žåœºæ™¯æ— å…³ï¼‰çš„编辑器数æ®ï¼Œä½ å¯ä»¥æ¢æˆ "
+"[method get_window_layout]。\n"
+"请使用 [method set_state] æ¢å¤ä¿å­˜çš„状æ€ã€‚\n"
+"[b]注æ„:[/b]é‡è¦çš„设置应该和项目一起进行æŒä¹…化,ä¸åº”该用这个方法æ¥ä¿å­˜ã€‚\n"
+"[b]注æ„:[/b]ä½ åªæœ‰å…ˆå®žçް [method get_plugin_name]ï¼ŒçŠ¶æ€æ‰èƒ½å¤Ÿè¿›è¡Œæ­£ç¡®çš„ä¿å­˜"
+"å’Œæ¢å¤ã€‚\n"
+"[codeblock]\n"
+"func get_state():\n"
+" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n"
+" return state\n"
+"[/codeblock]"
#: doc/classes/EditorPlugin.xml
msgid ""
@@ -26762,12 +26847,30 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide the GUI layout of the plugin or any other "
+"data you want to be stored. 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). The data is stored in the "
+"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n"
+"Use [method set_window_layout] to restore your saved layout.\n"
+"[codeblock]\n"
+"func get_window_layout(configuration):\n"
+" configuration.set_value(\"MyPlugin\", \"window_position\", $Window."
+"position)\n"
+" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n"
+"[/codeblock]"
msgstr ""
-"èŽ·å–æ’ä»¶çš„GUI布局。当调用[method queue_save_layout]更改了编辑器布局(例如,更"
-"改åœé ç‚¹çš„ä½ç½®ï¼‰æ—¶æˆ–ä¿å­˜é¡¹ç›®çš„编辑器布局。"
+"覆盖这个方法å¯ç”¨äºŽæä¾›è¯¥æ’ä»¶çš„ GUI 布局或者任何其他你想è¦ä¿å­˜çš„æ•°æ®ã€‚会在调"
+"用 [method queue_save_layout] ä¿å­˜é¡¹ç›®çš„编辑器布局或者编辑器布局å‘生改å˜ï¼ˆä¾‹"
+"如修改åœé é¢æ¿çš„ä½ç½®ï¼‰æ—¶ç”¨åˆ°ã€‚æ•°æ®ä¼šä¿å­˜åˆ°ç¼–辑器元数æ®ç›®å½•çš„ "
+"[code]editor_layout.cfg[/code] 文件中。\n"
+"请使用 [method set_window_layout] æ¢å¤ä¿å­˜çš„布局。\n"
+"[codeblock]\n"
+"func get_window_layout(configuration):\n"
+" configuration.set_value(\"MyPlugin\", \"window_position\", $Window."
+"position)\n"
+" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n"
+"[/codeblock]"
#: doc/classes/EditorPlugin.xml
msgid ""
@@ -26789,8 +26892,8 @@ msgid ""
"the workspace selector together with [b]2D[/b], [b]3D[/b], [b]Script[/b] and "
"[b]AssetLib[/b])."
msgstr ""
-"如果这是一个主å±å¹•编辑æ’件,返回 [code]true[/code](它与[b]2D[/b]ã€[b]3D[/b]ã€"
-"[b]Script[/b]和[b]AssetLib[/b]一起放在工作区选择器中)。"
+"如果这是一个主å±å¹•编辑æ’件,返回 [code]true[/code](它与 [b]2D[/b]ã€[b]3D[/"
+"b]ã€[b]Script[/b]ã€[b]AssetLib[/b] 一起放在工作区选择器中)。"
#: doc/classes/EditorPlugin.xml
msgid "Minimizes the bottom panel."
@@ -26816,25 +26919,25 @@ msgstr "排队ä¿å­˜é¡¹ç›®çš„编辑器布局。"
#: doc/classes/EditorPlugin.xml
msgid "Removes an Autoload [code]name[/code] from the list."
-msgstr "从列表中删除自动加载[code]name[/code]。"
+msgstr "从列表中删除自动加载 [code]name[/code]。"
#: doc/classes/EditorPlugin.xml
msgid ""
"Removes the control from the bottom panel. You have to manually [method Node."
"queue_free] the control."
-msgstr "ä»Žåº•éƒ¨é¢æ¿ä¸Šåˆ é™¤æŽ§ä»¶ã€‚您必须手动[method Node.queue_free]释放控件。"
+msgstr "ä»Žåº•éƒ¨é¢æ¿ä¸Šåˆ é™¤æŽ§ä»¶ã€‚您必须手动 [method Node.queue_free] 释放控件。"
#: doc/classes/EditorPlugin.xml
msgid ""
"Removes the control from the specified container. You have to manually "
"[method Node.queue_free] the control."
-msgstr "从指定的容器中删除控件。您必须手动[method Node.queue_free]释放控件。"
+msgstr "从指定的容器中删除控件。您必须手动 [method Node.queue_free] 释放控件。"
#: doc/classes/EditorPlugin.xml
msgid ""
"Removes the control from the dock. You have to manually [method Node."
"queue_free] the control."
-msgstr "ä»Žæ‰©å±•é¢æ¿ä¸­åˆ é™¤æŽ§ä»¶ã€‚您必须手动[method Node.queue_free]释放控件。"
+msgstr "ä»Žæ‰©å±•é¢æ¿ä¸­åˆ é™¤æŽ§ä»¶ã€‚您必须手动 [method Node.queue_free] 释放控件。"
#: doc/classes/EditorPlugin.xml
msgid "Removes a custom type added by [method add_custom_type]."
@@ -26863,7 +26966,7 @@ msgstr "删除由 [method add_spatial_gizmo_plugin] 注册的控制器æ’件。"
#: doc/classes/EditorPlugin.xml
msgid "Removes a menu [code]name[/code] from [b]Project > Tools[/b]."
-msgstr "从[b]项目 > 工具[/b]中删除èœå•[code]name[/code]。"
+msgstr "从[b]项目 > 工具[/b]中删除èœå• [code]name[/code]。"
#: doc/classes/EditorPlugin.xml
msgid ""
@@ -26880,9 +26983,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] 在其视窗更新时的调用。你åª"
-"需è¦è°ƒç”¨è¿™ä¸ªæ–¹æ³•一次,它就会对这个æ’件永久起作用。"
+"å¯ç”¨ 2D 编辑器的 [method forward_canvas_force_draw_over_viewport] å’Œ 3D 编辑"
+"器的 [method forward_spatial_force_draw_over_viewport] 在其视窗更新时的调用。"
+"ä½ åªéœ€è¦è°ƒç”¨è¿™ä¸ªæ–¹æ³•一次,它就会对这个æ’件永久起作用。"
#: doc/classes/EditorPlugin.xml
msgid ""
@@ -26895,12 +26998,50 @@ msgstr ""
"用。"
#: doc/classes/EditorPlugin.xml
-msgid "Restore the state saved by [method get_state]."
-msgstr "æ¢å¤[method get_state]ä¿å­˜çš„状æ€ã€‚"
+msgid ""
+"Restore the state saved by [method get_state]. This method is called when "
+"the current scene tab is changed in the editor.\n"
+"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise "
+"it will not be recognized and this method will not be called.\n"
+"[codeblock]\n"
+"func set_state(data):\n"
+" zoom = data.get(\"zoom\", 1.0)\n"
+" preferred_color = data.get(\"my_color\", Color.white)\n"
+"[/codeblock]"
+msgstr ""
+"æ¢å¤ç”¨ [method get_state] ä¿å­˜çš„状æ€ã€‚这个方法会在编辑器的当å‰åœºæ™¯æ ‡ç­¾é¡µå‘生"
+"æ”¹å˜æ—¶è°ƒç”¨ã€‚\n"
+"[b]注æ„:[/b]ä½ çš„æ’件必须实现 [method get_plugin_name],å¦åˆ™æ— æ³•被识别,这个"
+"方法也ä¸ä¼šè¢«è°ƒç”¨ã€‚\n"
+"[codeblock]\n"
+"func set_state(data):\n"
+" zoom = data.get(\"zoom\", 1.0)\n"
+" preferred_color = data.get(\"my_color\", Color.white)\n"
+"[/codeblock]"
#: doc/classes/EditorPlugin.xml
-msgid "Restore the plugin GUI layout saved by [method get_window_layout]."
-msgstr "æ¢å¤[method get_window_layout]ä¿å­˜çš„æ’ä»¶GUI布局。"
+msgid ""
+"Restore the plugin GUI layout and data saved by [method get_window_layout]. "
+"This method is called for every plugin on editor startup. Use the provided "
+"[code]configuration[/code] file to read your saved data.\n"
+"[codeblock]\n"
+"func set_window_layout(configuration):\n"
+" $Window.position = configuration.get_value(\"MyPlugin\", "
+"\"window_position\", Vector2())\n"
+" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", "
+"Color.white)\n"
+"[/codeblock]"
+msgstr ""
+"æ¢å¤ç”¨ [method get_window_layout] ä¿å­˜çš„æ’ä»¶ GUI 布局和数æ®ã€‚编辑器å¯åŠ¨æ—¶ä¼šè°ƒ"
+"用æ¯ä¸€ä¸ªæ’件的这个方法。请使用æä¾›çš„ [code]configuration[/code] 文件读å–ä½ ä¿"
+"存的数æ®ã€‚\n"
+"[codeblock]\n"
+"func set_window_layout(configuration):\n"
+" $Window.position = configuration.get_value(\"MyPlugin\", "
+"\"window_position\", Vector2())\n"
+" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", "
+"Color.white)\n"
+"[/codeblock]"
#: doc/classes/EditorPlugin.xml
msgid ""
@@ -26921,8 +27062,8 @@ 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 ""
-"当用户改å˜å·¥ä½œç©ºé—´([b]2D[/b], [b]3D[/b], [b]Script[/b], [b]AssetLib[/b])时触"
-"å‘。也适用于由æ’件定义的自定义å±å¹•。"
+"当用户改å˜å·¥ä½œç©ºé—´ï¼ˆ[b]2D[/b]ã€[b]3D[/b]ã€[b]Script[/b]ã€[b]AssetLib[/b])时"
+"触å‘。也适用于由æ’件定义的自定义å±å¹•。"
#: doc/classes/EditorPlugin.xml
msgid ""
@@ -26941,7 +27082,7 @@ msgstr "当用户关闭场景时触å‘ã€‚å‚æ•°æ˜¯å…³é—­åœºæ™¯çš„æ–‡ä»¶è·¯å¾„。
#: doc/classes/EditorPlugin.xml
msgid "Represents the size of the [enum DockSlot] enum."
-msgstr "表示[enum DockSlot]枚举的大å°ã€‚"
+msgstr "表示 [enum DockSlot] 枚举的大å°ã€‚"
#: doc/classes/EditorProperty.xml
msgid "Custom control to edit properties for adding into the inspector."
@@ -26971,9 +27112,10 @@ msgid ""
"requesting this property to be refreshed (leave as [code]false[/code] if "
"unsure)."
msgstr ""
-"如果一个或几个属性å‘生了å˜åŒ–,必然会调用这个函数。[code]field[/code]是在你的"
-"编辑器å¯ä»¥å•独修改字段的情况下使用的(比如Vector3.x)。[code]changing[/code]"
-"傿•°å¯ä»¥é¿å…ç¼–è¾‘å™¨è¦æ±‚刷新这个属性(如果ä¸ç¡®å®šçš„è¯ï¼Œå°±ç”¨[code]false[/code])。"
+"如果一个或几个属性å‘生了å˜åŒ–,必然会调用这个函数。[code]field[/code] 是在你的"
+"编辑器å¯ä»¥å•独修改字段的情况下使用的(比如 Vector3.x)。[code]changing[/"
+"code] 傿•°å¯ä»¥é¿å…ç¼–è¾‘å™¨è¦æ±‚刷新这个属性(如果ä¸ç¡®å®šçš„è¯ï¼Œè¯·ä¿æŒ "
+"[code]false[/code])。"
#: doc/classes/EditorProperty.xml
msgid "Gets the edited object."
@@ -27126,7 +27268,7 @@ msgid ""
"This virtual method can be implemented to handle context menu items not "
"handled by default. See [method set_create_options]."
msgstr ""
-"此虚拟法å¯ä»¥å®žçް处ç†é»˜è®¤æœªå¤„ç†çš„上下文èœå•项目。å‚è§ [method "
+"此虚拟法å¯ä»¥å®žçް处ç†é»˜è®¤æœªå¤„ç†çš„上下文èœå•é¡¹ç›®ã€‚è§ [method "
"set_create_options]。"
#: doc/classes/EditorResourcePicker.xml
@@ -27159,7 +27301,7 @@ msgstr "å…许资æºç±»åž‹çš„基本类型。å¯ä»¥æ˜¯å‡ ä¸ªé€‰é¡¹çš„逗å·åˆ†ç¦»
#: doc/classes/EditorResourcePicker.xml
msgid "If [code]true[/code], the value can be selected and edited."
-msgstr "如果 [code]true[/code],则å¯ä»¥é€‰æ‹©å’Œç¼–辑该值。"
+msgstr "如果为 [code]true[/code],则å¯ä»¥é€‰æ‹©å’Œç¼–辑该值。"
#: doc/classes/EditorResourcePicker.xml
msgid "The edited resource value."
@@ -27170,7 +27312,7 @@ 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 "
+"如果为 [code]true[/code],带有资æºé¢„è§ˆçš„ä¸»æŒ‰é’®åœ¨åˆ‡æ¢æ¨¡å¼ä¸‹å·¥ä½œã€‚使用 [method "
"set_toggle_pressed] æ¥æ‰‹åŠ¨è®¾ç½®çŠ¶æ€ã€‚"
#: doc/classes/EditorResourcePicker.xml
@@ -27260,7 +27402,7 @@ msgstr "移除自定义预览生æˆå™¨ã€‚"
msgid ""
"Emitted if a preview was invalidated (changed). [code]path[/code] "
"corresponds to the path of the preview."
-msgstr "预览无效(更改)时触å‘。[code]path[/code]对应的预览路径。"
+msgstr "预览无效(更改)时触å‘。[code]path[/code] 对应的预览路径。"
#: doc/classes/EditorResourcePreviewGenerator.xml
msgid "Custom generator of previews."
@@ -27272,7 +27414,7 @@ msgid ""
"thumbnail_size[/code] in [EditorSettings] to find out the right size to do "
"previews at."
msgstr ""
-"è‡ªå®šä¹‰ä»£ç æ¥ç”Ÿæˆé¢„览。请查看[EditorSettings]中的[code]file_dialog/"
+"è‡ªå®šä¹‰ä»£ç æ¥ç”Ÿæˆé¢„览。请查看 [EditorSettings] 中的 [code]file_dialog/"
"thumbnail_size[/code],找出适åˆåšé¢„览的尺寸。"
#: doc/classes/EditorResourcePreviewGenerator.xml
@@ -27281,8 +27423,8 @@ msgid ""
"generate] or [method generate_from_path] for small previews as well.\n"
"By default, it returns [code]false[/code]."
msgstr ""
-"如果该函数返回 [code]true[/code],生æˆå™¨å°†è°ƒç”¨[method generate]或[method "
-"generate_from_path]æ¥è¿›è¡Œå°åž‹é¢„览。\n"
+"如果该函数返回 [code]true[/code],生æˆå™¨å°†è°ƒç”¨ [method generate] 或 [method "
+"generate_from_path] æ¥è¿›è¡Œå°åž‹é¢„览。\n"
"默认情况下,它会返回 [code]false[/code]。"
#: doc/classes/EditorResourcePreviewGenerator.xml
@@ -27333,7 +27475,7 @@ msgstr ""
#: doc/classes/EditorSceneImporter.xml
msgid "Imports scenes from third-parties' 3D files."
-msgstr "从第三方的3D文件中导入场景。"
+msgstr "从第三方的 3D 文件中导入场景。"
#: doc/classes/EditorSceneImporter.xml
msgid ""
@@ -27448,16 +27590,16 @@ msgstr ""
"[method post_import]回调接收导入场景的根节点,并返回场景的修改版本。使用示"
"例。\n"
"[codeblock]\n"
-"tool # Needed so it runs in editor\n"
+"tool # 因为需è¦åœ¨ç¼–辑器中è¿è¡Œ\n"
"extends EditorScenePostImport\n"
"\n"
-"# This sample changes all node names\n"
+"# 这个实例会修改所有节点的åç§°\n"
"\n"
-"# Called right after the scene is imported and gets the root node\n"
+"# 会在场景导入åŽç«‹å³è°ƒç”¨ï¼ŒèŽ·å–到的是根节点\n"
"func post_import(scene):\n"
-" # Change all node names to \"modified_[oldnodename]\"\n"
+" # 将所有节点的å称都改æˆâ€œmodified_[节点原å]â€\n"
" iterate(scene)\n"
-" return scene # Remember to return the imported scene\n"
+" return scene # è®°å¾—è¦è¿”回导入的场景\n"
"\n"
"func iterate(node):\n"
" if node != null:\n"
@@ -27470,7 +27612,7 @@ msgstr ""
msgid ""
"Returns the source file path which got imported (e.g. [code]res://scene.dae[/"
"code])."
-msgstr "è¿”å›žå¯¼å…¥çš„æºæ–‡ä»¶è·¯å¾„(如[code]res://scene.dae[/code])。"
+msgstr "è¿”å›žå¯¼å…¥çš„æºæ–‡ä»¶è·¯å¾„(如[code]res://scene.dae[/code])。"
#: doc/classes/EditorScenePostImport.xml
msgid "Returns the resource folder the imported scene file is located in."
@@ -27506,9 +27648,9 @@ msgid ""
"is visible in the console window started with the Editor (stdout) instead of "
"the usual Godot [b]Output[/b] dock."
msgstr ""
-"扩展该类并实现其 [method _run] 方法的脚本å¯ä»¥åœ¨ç¼–辑器è¿è¡Œæ—¶é€šè¿‡è„šæœ¬ç¼–è¾‘å™¨çš„ "
-"[b]File > Run[/b] èœå•选项(或按 [code]Ctrl+Shift+X[/code]ï¼‰æ‰§è¡Œã€‚è¿™å¯¹äºŽå‘ "
-"Godotæ·»åŠ è‡ªå®šä¹‰çš„ç¼–è¾‘å†…åŠŸèƒ½å¾ˆæœ‰ç”¨ã€‚å¯¹äºŽæ›´å¤æ‚的添加,å¯ä»¥è€ƒè™‘使用 "
+"扩展该类并实现其 [method _run] 方法的脚本å¯ä»¥åœ¨ç¼–辑器è¿è¡Œæ—¶é€šè¿‡è„šæœ¬ç¼–è¾‘å™¨çš„"
+"[b]文件 > è¿è¡Œ[/b]èœå•选项(或按 [code]Ctrl+Shift+X[/code]ï¼‰æ‰§è¡Œã€‚è¿™å¯¹äºŽå‘ "
+"Godot æ·»åŠ è‡ªå®šä¹‰çš„ç¼–è¾‘å†…åŠŸèƒ½å¾ˆæœ‰ç”¨ã€‚å¯¹äºŽæ›´å¤æ‚的添加,å¯ä»¥è€ƒè™‘使用 "
"[EditorPlugin] 代替。\n"
"[b]注æ„:[/b]扩展脚本需è¦å¯ç”¨ [code]tool[/code] 工具模å¼ã€‚\n"
"[b]示例脚本:[/b]\n"
@@ -27531,12 +27673,12 @@ 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 ""
-"å°†[code]node[/code]添加为编辑器上下文中根节点的å­çº§ã€‚\n"
+"å°† [code]node[/code] 添加为编辑器上下文中根节点的å­çº§ã€‚\n"
"[b]警告:[/b]此方法的实现å‰å¤„于ç¦ç”¨çжæ€ã€‚"
#: doc/classes/EditorScript.xml
msgid "Returns the [EditorInterface] singleton instance."
-msgstr "返回[EditorInterface]å•例的实例。"
+msgstr "返回 [EditorInterface] å•例的实例。"
#: doc/classes/EditorScript.xml
msgid "Returns the Editor's currently active scene."
@@ -27573,7 +27715,7 @@ msgstr "æŒæœ‰è¢«ç¼–辑资æºçš„脚本属性的所有者 [Node]。"
#: doc/classes/EditorSelection.xml
msgid "Manages the SceneTree selection in the editor."
-msgstr "管ç†ç¼–辑器中的SceneTree选择。"
+msgstr "管ç†ç¼–辑器中的 SceneTree 选择。"
#: doc/classes/EditorSelection.xml
msgid ""
@@ -27581,7 +27723,7 @@ msgid ""
"[b]Note:[/b] This class shouldn't be instantiated directly. Instead, access "
"the singleton using [method EditorInterface.get_selection]."
msgstr ""
-"这个对象管ç†ç¼–辑器中的SceneTree选择。\n"
+"这个对象管ç†ç¼–辑器中的 SceneTree 选择。\n"
"[b]注æ„:[/b]这个类ä¸åº”该直接实例化。相å,使用[method EditorInterface."
"get_selection]访问å•例。"
@@ -27687,10 +27829,10 @@ msgid ""
"editor_settings.add_property_info(property_info)\n"
"[/codeblock]"
msgstr ""
-"å°†è‡ªå®šä¹‰å±žæ€§ä¿¡æ¯æ·»åŠ åˆ°å±žæ€§ã€‚è¯¥è¯å…¸å¿…须包å«ï¼š\n"
-"-[code]åç§°[/code]:[String](属性å称)\n"
-"-[code]类型[/code]:[int](请å‚阅[enum Variant.Type])\n"
-"-(å¯é€‰ï¼‰[code]æç¤º[/code]:[int](请å‚阅[enum PropertyHint])和"
+"å°†è‡ªå®šä¹‰å±žæ€§ä¿¡æ¯æ·»åŠ åˆ°å±žæ€§ã€‚è¯¥å­—å…¸å¿…é¡»åŒ…å«ï¼š\n"
+"-[code]name[/code]:[String](该属性的å称)\n"
+"-[code]type[/code]:[int]ï¼ˆè§ [enum Variant.Type])\n"
+"-(å¯é€‰ï¼‰[code]hint[/code]:[int]ï¼ˆè§ [enum PropertyHint])和 "
"[code]hint_string[/code]:[String]\n"
"[b]示例:[/b]\n"
"[codeblock]\n"
@@ -27708,7 +27850,7 @@ msgstr ""
#: doc/classes/EditorSettings.xml
msgid "Erases the setting whose name is specified by [code]property[/code]."
-msgstr "删除å称为指定[code]property[/code]的设置。"
+msgstr "删除å称为指定 [code]property[/code] 的设置。"
#: doc/classes/EditorSettings.xml
msgid "Returns the list of favorite files and directories for this project."
@@ -27720,8 +27862,9 @@ msgid ""
"[code]key[/code] specified. If the metadata doesn't exist, [code]default[/"
"code] will be returned instead. See also [method set_project_metadata]."
msgstr ""
-"返回指定的[code]section[/code]å’Œ[code]key[/code]的特定项目元数æ®ã€‚如果元数æ®"
-"ä¸å­˜åœ¨ï¼Œå°†è¿”回 [code]default[/code]。å¦è¯·å‚阅 [method set_project_metadata]。"
+"返回指定的 [code]section[/code] å’Œ [code]key[/code] 的特定项目元数æ®ã€‚如果元"
+"æ•°æ®ä¸å­˜åœ¨ï¼Œå°†è¿”回 [code]default[/code]。å¦è¯·å‚阅 [method "
+"set_project_metadata]。"
#: doc/classes/EditorSettings.xml
msgid ""
@@ -27743,7 +27886,7 @@ 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 ""
-"返回 [code]name[/code] 指定的设置的值。这相当于在EditorSettings实例上使用"
+"返回 [code]name[/code] 指定的设置的值。相当于在 EditorSettings 实例上使用 "
"[method Object.get]。"
#: doc/classes/EditorSettings.xml
@@ -27754,8 +27897,8 @@ msgid ""
"[code]settings/templates[/code] - Where export templates are located"
msgstr ""
"获å–引擎的全局设置路径。在此路径内,您å¯ä»¥æ‰¾åˆ°ä¸€äº›æ ‡å‡†è·¯å¾„,例如:\n"
-"[code]settings / tmp[/code]-用于文件的临时存储\n"
-"[code]settings/templates[/code]-å¯¼å‡ºæ¨¡æ¿æ‰€åœ¨çš„ä½ç½®"
+"[code]settings/tmp[/code] - 用于文件的临时存储\n"
+"[code]settings/templates[/code] - å¯¼å‡ºæ¨¡æ¿æ‰€åœ¨çš„ä½ç½®"
#: doc/classes/EditorSettings.xml
msgid ""
@@ -27772,7 +27915,7 @@ msgid ""
"When this method returns [code]true[/code], a Revert button will display "
"next to the setting in the Editor Settings."
msgstr ""
-"如果[code]name[/code]指定的设置å¯ä»¥å°†å…¶å€¼è¿˜åŽŸä¸ºé»˜è®¤å€¼ï¼Œåˆ™è¿”å›ž [code]true[/"
+"如果 [code]name[/code] 指定的设置å¯ä»¥å°†å…¶å€¼è¿˜åŽŸä¸ºé»˜è®¤å€¼ï¼Œåˆ™è¿”å›ž [code]true[/"
"code],å¦åˆ™è¿”回 [code]false[/code]。当此方法返回 [code]true[/code] 时,编辑器"
"设置中的设置æ—边会显示一个还原按钮。"
@@ -27782,8 +27925,8 @@ msgid ""
"This is the value that would be applied when clicking the Revert button in "
"the Editor Settings."
msgstr ""
-"返回 [code]name[/code] 指定的设置的默认值。当点击编辑器设置中的 \"还原 \"按钮"
-"时,该值将被应用。"
+"返回 [code]name[/code] æŒ‡å®šçš„è®¾ç½®çš„é»˜è®¤å€¼ã€‚å½“ç‚¹å‡»ç¼–è¾‘å™¨è®¾ç½®ä¸­çš„â€œè¿˜åŽŸâ€æŒ‰é’®æ—¶ï¼Œ"
+"该值将被应用。"
#: doc/classes/EditorSettings.xml
msgid "Sets the list of favorite files and directories for this project."
@@ -27823,8 +27966,8 @@ msgid ""
"This is equivalent to using [method Object.set] on the EditorSettings "
"instance."
msgstr ""
-"设置 [code]name[/code] 指定的设置的 [code]value[/code]。这相当于在"
-"EditorSettings实例上使用[method Object.set]。"
+"将 [code]name[/code] 指定的设置项设置为 [code]value[/code]。相当于在 "
+"EditorSettings 实例上使用 [method Object.set]。"
#: doc/classes/EditorSettings.xml
msgid "Emitted after any editor setting has changed."
@@ -27857,8 +28000,8 @@ msgid ""
"Adds the specified [code]segments[/code] to the gizmo's collision shape for "
"picking. Call this function during [method redraw]."
msgstr ""
-"将指定的[code]segments[/code]添加到gizmo的碰撞形状中,以便挑选。在[method "
-"redraw]时调用此函数。"
+"将指定的 [code]segments[/code] 添加到 gizmo 的碰撞形状中,以便挑选。在 "
+"[method redraw] 时调用此函数。"
#: doc/classes/EditorSpatialGizmo.xml
msgid ""
@@ -27866,8 +28009,8 @@ msgid ""
"generated from a regular [Mesh] too. Call this function during [method "
"redraw]."
msgstr ""
-"将碰撞三角形添加到å°å·¥å…·ä¸­ï¼Œä¾›æŒ‘选。也å¯ä»¥ä»Žæ™®é€šçš„[Mesh]生æˆ[TriangleMesh]。"
-"在[method redraw]时调用此函数。"
+"将碰撞三角形添加到å°å·¥å…·ä¸­ï¼Œä¾›æŒ‘选。也å¯ä»¥ä»Žæ™®é€šçš„ [Mesh] ç”Ÿæˆ "
+"[TriangleMesh]。在 [method redraw] 时调用此函数。"
#: doc/classes/EditorSpatialGizmo.xml
msgid ""
@@ -27885,8 +28028,8 @@ msgid ""
"lines are used for visualizing the gizmo. Call this function during [method "
"redraw]."
msgstr ""
-"用给定的æè´¨åœ¨å°å·¥å…·ä¸Šæ·»åŠ çº¿æ¡åˆ°gizmo (作为2个点的集åˆï¼‰ã€‚线æ¡ç”¨äºŽå¯è§†åŒ–"
-"gizmo。在[method redraw]时调用此函数。"
+"用给定的æè´¨åœ¨å°å·¥å…·ä¸Šæ·»åŠ çº¿æ¡åˆ° gizmo(作为 2 个点的集åˆï¼‰ã€‚线æ¡ç”¨äºŽå¯è§†åŒ– "
+"gizmo。在 [method redraw] 时调用此函数。"
#: doc/classes/EditorSpatialGizmo.xml
msgid ""
@@ -27904,7 +28047,7 @@ msgstr ""
msgid ""
"Adds an unscaled billboard for visualization. Call this function during "
"[method redraw]."
-msgstr "添加一个未缩放的广告牌以实现å¯è§†åŒ–。在[method redraw]时调用此函数。"
+msgstr "添加一个未缩放的广告牌以实现å¯è§†åŒ–。在 [method redraw] 时调用此函数。"
#: doc/classes/EditorSpatialGizmo.xml
msgid ""
@@ -27983,15 +28126,14 @@ 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 ""
-"设置工具的éšè—状æ€ã€‚如果[code]true[/code]ï¼Œåˆ™å°æŽ§ä»¶å°†è¢«éšè—。如果"
+"设置工具的éšè—状æ€ã€‚如果为 [code]true[/code]ï¼Œåˆ™å°æŽ§ä»¶å°†è¢«éšè—。如果为 "
"[code]false[/code],将显示它。"
#: doc/classes/EditorSpatialGizmo.xml
msgid ""
"Sets the reference [Spatial] node for the gizmo. [code]node[/code] must "
"inherit from [Spatial]."
-msgstr ""
-"设置工具的å‚考 [Spatial] 节点。 [code]node[/code]必须继承自 [Spatial]。"
+msgstr "设置工具的å‚考 [Spatial] 节点。[code]node[/code]必须继承自 [Spatial]。"
#: doc/classes/EditorSpatialGizmoPlugin.xml
msgid "Used by the editor to define Spatial gizmo types."
@@ -28025,13 +28167,13 @@ msgid ""
"Override this method to define whether the gizmo can be hidden or not. "
"Returns [code]true[/code] if not overridden."
msgstr ""
-"é‡å†™æ­¤æ–¹æ³•以定义是å¦å¯ä»¥éšè—Gizmo。如果未覆盖,则返回 [code]true[/code]。"
+"é‡å†™æ­¤æ–¹æ³•以定义是å¦å¯ä»¥éšè— Gizmo。如果未覆盖,则返回 [code]true[/code]。"
#: doc/classes/EditorSpatialGizmoPlugin.xml
msgid ""
"Override this method to commit gizmo handles. Called for this plugin's "
"active gizmos."
-msgstr "é‡å†™æ­¤æ–¹æ³•以æäº¤Gizmo奿Ÿ„。调用此æ’件的活动辅助工具。"
+msgstr "é‡å†™æ­¤æ–¹æ³•以æäº¤ Gizmo 奿Ÿ„。调用此æ’件的活动辅助工具。"
#: doc/classes/EditorSpatialGizmoPlugin.xml
msgid ""
@@ -28082,13 +28224,13 @@ msgstr ""
msgid ""
"Override this method to provide gizmo's handle names. Called for this "
"plugin's active gizmos."
-msgstr "é‡å†™æ­¤æ–¹æ³•以æä¾›Gizmoçš„å¥æŸ„å称。调用此æ’件的活动工具。"
+msgstr "é‡å†™æ­¤æ–¹æ³•以æä¾› Gizmo çš„å¥æŸ„å称。调用此æ’件的活动工具。"
#: doc/classes/EditorSpatialGizmoPlugin.xml
msgid ""
"Gets actual value of a handle from gizmo. Called for this plugin's active "
"gizmos."
-msgstr "从Gizmo获å–奿Ÿ„的实际值。调用此æ’件的活动工具。"
+msgstr "从 Gizmo 获å–奿Ÿ„的实际值。调用此æ’件的活动工具。"
#: doc/classes/EditorSpatialGizmoPlugin.xml
msgid ""
@@ -28157,7 +28299,7 @@ msgstr "æ›´æ–°å¥æŸ„åŽæ›´æ–°å…¶å€¼ã€‚调用此æ’件的活动工具。"
#: doc/classes/EditorSpinSlider.xml
msgid "Godot editor's control for editing numeric values."
-msgstr "Godot编辑器用于编辑数值的控件。"
+msgstr "Godot 编辑器用于编辑数值的控件。"
#: doc/classes/EditorSpinSlider.xml
msgid ""
@@ -28229,8 +28371,8 @@ msgid ""
"Fetches new changes from the remote, but doesn't write changes to the "
"current working directory. Equivalent to [code]git fetch[/code]."
msgstr ""
-"ä»Žè¿œç¨‹ä»“åº“ä¸­æŠ“å–æ–°ä¿®æ”¹ï¼Œä½†ä¸å°†ä¿®æ”¹å†™å…¥å½“å‰å·¥ä½œç›®å½•。与 [code]git fetch[/"
-"code] 等效。"
+"ä»Žè¿œç¨‹ä»“åº“ä¸­æŠ“å–æ–°ä¿®æ”¹ï¼Œä½†ä¸å°†ä¿®æ”¹å†™å…¥å½“å‰å·¥ä½œç›®å½•。相当于 [code]git fetch[/"
+"code]。"
#: doc/classes/EditorVCSInterface.xml
msgid ""
@@ -28251,7 +28393,7 @@ msgid ""
"file path, returns a file diff, and if it is a commit identifier, then "
"returns a commit diff."
msgstr ""
-"返回 [Dictionary] 字典项的 [Array] 数组(请å‚阅 [method create_diff_file]ã€"
+"返回 [Dictionary] 字典项的 [Array] æ•°ç»„ï¼ˆè§ [method create_diff_file]ã€"
"[method create_diff_hunk]ã€[method create_diff_line]ã€[method "
"add_line_diffs_into_diff_hunk]ã€[method add_diff_hunks_into_diff_file]),æ¯"
"一项都包å«ä¸€ä¸ªå·®å¼‚的信æ¯ã€‚如果 [code]identifier[/code] 是文件路径,则返回文件"
@@ -28263,25 +28405,25 @@ msgid ""
"each containing a line diff between a file at [code]file_path[/code] and the "
"[code]text[/code] which is passed in."
msgstr ""
-"返回 [Dictionary] 字典项的 [Array] 数组(请å‚阅 [method create_diff_hunk]),"
-"æ¯ä¸€é¡¹éƒ½åŒ…å«ä½äºŽ [code]file_path[/code] 的文件与传入的 [code]text[/code] 之间"
-"çš„å•行差异。"
+"返回 [Dictionary] 字典项的 [Array] æ•°ç»„ï¼ˆè§ [method create_diff_hunk]),æ¯ä¸€"
+"项都包å«ä½äºŽ [code]file_path[/code] 的文件与传入的 [code]text[/code] 之间的å•"
+"行差异。"
#: doc/classes/EditorVCSInterface.xml
msgid ""
"Returns an [Array] of [Dictionary] items (see [method create_status_file]), "
"each containing the status data of every modified file in the project folder."
msgstr ""
-"返回 [Dictionary] 字典项的 [Array] 数组(请å‚阅 [method "
-"create_status_file]),æ¯ä¸€é¡¹éƒ½åŒ…å«é¡¹ç›®æ–‡ä»¶å¤¹ä¸­æ¯ä¸ªå·²ä¿®æ”¹çš„æ–‡ä»¶çš„çŠ¶æ€æ•°æ®ã€‚"
+"返回 [Dictionary] 字典项的 [Array] æ•°ç»„ï¼ˆè§ [method create_status_file]),æ¯"
+"一项都包å«é¡¹ç›®æ–‡ä»¶å¤¹ä¸­æ¯ä¸ªå·²ä¿®æ”¹çš„æ–‡ä»¶çš„çŠ¶æ€æ•°æ®ã€‚"
#: doc/classes/EditorVCSInterface.xml
msgid ""
"Returns an [Array] of [Dictionary] items (see [method create_commit]), each "
"containing the data for a past commit."
msgstr ""
-"返回 [Dictionary] 字典项的 [Array] 数组(请å‚阅 [method create_commit]),æ¯"
-"一项都包å«ä¸€ä¸ªè¿‡åŽ»æäº¤çš„æ•°æ®ã€‚"
+"返回 [Dictionary] 字典项的 [Array] æ•°ç»„ï¼ˆè§ [method create_commit]),æ¯ä¸€é¡¹"
+"都包å«ä¸€ä¸ªè¿‡åŽ»æäº¤çš„æ•°æ®ã€‚"
#: doc/classes/EditorVCSInterface.xml
msgid ""
@@ -28483,19 +28625,19 @@ msgid ""
"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 ""
-"实用类,它拥有对[Object]实例的内部标识符的引用,该标识符由[method Object."
-"get_instance_id]给出。这个IDå¯ä»¥é€šè¿‡[method @GDScript.instance_from_id]æ¥æ£€ç´¢"
-"对象实例。\n"
+"实用类,它拥有对 [Object] 实例的内部标识符的引用,该标识符由 [method Object."
+"get_instance_id] 给出。这个 ID å¯ä»¥é€šè¿‡ [method @GDScript.instance_from_id] "
+"æ¥æ£€ç´¢å¯¹è±¡å®žä¾‹ã€‚\n"
"这个类在内部被编辑器检查器和脚本调试器使用,但也å¯ä»¥åœ¨æ’件中使用,以传递和显"
-"示对象作为它们的ID。"
+"示对象作为它们的 ID。"
#: doc/classes/EncodedObjectAsID.xml
msgid ""
"The [Object] identifier stored in this [EncodedObjectAsID] instance. The "
"object instance can be retrieved with [method @GDScript.instance_from_id]."
msgstr ""
-"存储在这个[EncodedObjectAsID]实例中的[Object]标识符。对象实例å¯ä»¥ç”¨[method "
-"@GDScript.instance_from_id]检索。"
+"存储在这个 [EncodedObjectAsID] 实例中的 [Object] 标识符。对象实例å¯ä»¥ç”¨ "
+"[method @GDScript.instance_from_id] 检索。"
#: doc/classes/Engine.xml
msgid "Access to engine properties."
@@ -28506,7 +28648,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 ""
-"[Engine]å•例使您å¯ä»¥æŸ¥è¯¢å’Œä¿®æ”¹é¡¹ç›®çš„è¿è¡Œæ—¶å‚数,例如æ¯ç§’帧数,时间范围等。"
+"[Engine] å•例使您å¯ä»¥æŸ¥è¯¢å’Œä¿®æ”¹é¡¹ç›®çš„è¿è¡Œæ—¶å‚数,例如æ¯ç§’帧数,时间范围等。"
#: doc/classes/Engine.xml
msgid ""
@@ -28702,7 +28844,8 @@ msgid ""
"Returns [code]true[/code] if a singleton with given [code]name[/code] exists "
"in global scope."
msgstr ""
-"如果全局范围内存在具有给定[code]name[/code]çš„å•例,则返回 [code]true[/code]。"
+"如果全局范围内存在具有给定 [code]name[/code] çš„å•例,则返回 [code]true[/"
+"code]。"
#: doc/classes/Engine.xml
msgid ""
@@ -28813,12 +28956,12 @@ msgid ""
"running a project from the editor."
msgstr ""
"如果为 [code]false[/code]ï¼Œåˆ™åœæ­¢æ‰“å°é”™è¯¯å’Œè­¦å‘Šä¿¡æ¯åˆ°æŽ§åˆ¶å°å’Œç¼–辑器输出日志。"
-"è¿™å¯ä»¥ç”¨æ¥åœ¨å•元测试套件è¿è¡ŒæœŸé—´éšè—错误和警告信æ¯ã€‚这个属性等åŒäºŽ [member "
+"è¿™å¯ä»¥ç”¨æ¥åœ¨å•元测试套件è¿è¡ŒæœŸé—´éšè—错误和警告信æ¯ã€‚这个属性相当于 [member "
"ProjectSettings.application/run/disable_stderr] 项目设置。\n"
"[b]警告:[/b]如果你在项目的任æ„ä½ç½®å°†å…¶è®¾ç½®ä¸º [code]false[/code],é‡è¦çš„错误"
"ä¿¡æ¯å¯èƒ½ä¼šè¢«éšè—,å³ä½¿å®ƒä»¬æ˜¯ç”±å…¶ä»–脚本触å‘。如果在 [code]tool[/code] 脚本中把"
"这个设置为 [code]false[/code],这也会影å“到编辑器本身。在确ä¿é”™è¯¯ä¿¡æ¯è¢«å¯ç”¨ä¹‹"
-"å‰ï¼Œ[i]ä¸[/i]报告错误(默认情况下)。\n"
+"å‰ï¼Œ[i]请勿[/i]报告错误(因为默认情况下是会的)。\n"
"[b]注æ„:[/b]当从编辑器è¿è¡Œä¸€ä¸ªé¡¹ç›®æ—¶ï¼Œè¿™ä¸ªå±žæ€§ä¸å½±å“编辑器的错误选项å¡ã€‚"
#: doc/classes/Engine.xml
@@ -28948,17 +29091,17 @@ msgid ""
"[code]adjustment_*[/code] properties will have no effect on the rendered "
"scene."
msgstr ""
-"如果 [code]true[/code],则å¯ç”¨æ­¤èµ„æºæä¾›çš„ [code]adjusting_*[/code] 属性。如"
-"æžœ[code]false[/code],对[code]adjustment_*[/code]属性的修改将ä¸ä¼šå¯¹æ¸²æŸ“的场景"
-"产生影å“。"
+"如果为 [code]true[/code],则å¯ç”¨æ­¤èµ„æºæä¾›çš„ [code]adjusting_*[/code] 属性。"
+"如果为 [code]false[/code],对[code]adjustment_*[/code]属性的修改将ä¸ä¼šå¯¹æ¸²æŸ“"
+"的场景产生影å“。"
#: doc/classes/Environment.xml
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 ""
-"渲染场景的全局色彩饱和度值,默认值为1ã€‚åªæœ‰åœ¨[code]adjustment_enabled[/code]"
-"为 [code]true[/code] æ—¶æ‰æœ‰æ•ˆã€‚"
+"渲染场景的全局色彩饱和度值,默认值为1ã€‚åªæœ‰åœ¨ [code]adjustment_enabled[/"
+"code] 为 [code]true[/code] æ—¶æ‰æœ‰æ•ˆã€‚"
#: doc/classes/Environment.xml
msgid "The ambient light's [Color]."
@@ -28993,8 +29136,8 @@ msgid ""
"determine the exposure setting to adapt to the scene's illumination and the "
"observed light."
msgstr ""
-"如果[code]true[/code],å¯ç”¨åœºæ™¯æ¸²æŸ“器的色调映射自动æ›å…‰æ¨¡å¼ã€‚如果[code]true[/"
-"code],渲染器将自动确定æ›å…‰è®¾ç½®ï¼Œä»¥é€‚应场景的照明和观察到的光线。"
+"如果为 [code]true[/code],å¯ç”¨åœºæ™¯æ¸²æŸ“器的色调映射自动æ›å…‰æ¨¡å¼ã€‚如果为 "
+"[code]true[/code],渲染器将自动确定æ›å…‰è®¾ç½®ï¼Œä»¥é€‚应场景的照明和观察到的光线。"
#: doc/classes/Environment.xml
msgid "The maximum luminance value for the auto exposure."
@@ -29018,21 +29161,21 @@ msgstr "自动æ›å…‰æ•ˆæžœçš„速度。影å“相机执行自动æ›å…‰æ‰€éœ€çš„æ—¶
#: doc/classes/Environment.xml
msgid "The ID of the camera feed to show in the background."
-msgstr "在背景中显示的相机æºçš„ID。"
+msgstr "在背景中显示的相机æºçš„ ID。"
#: doc/classes/Environment.xml
msgid ""
"The maximum layer ID to display. Only effective when using the [constant "
"BG_CANVAS] background mode."
-msgstr "è¦æ˜¾ç¤ºçš„æœ€å¤§å›¾å±‚IDã€‚åªæœ‰åœ¨ä½¿ç”¨ [constant BG_CANVAS] èƒŒæ™¯æ¨¡å¼æ—¶æœ‰æ•ˆã€‚"
+msgstr "è¦æ˜¾ç¤ºçš„æœ€å¤§å›¾å±‚ IDã€‚åªæœ‰åœ¨ä½¿ç”¨ [constant BG_CANVAS] èƒŒæ™¯æ¨¡å¼æ—¶æœ‰æ•ˆã€‚"
#: doc/classes/Environment.xml
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]或[constant "
-"BG_COLOR_SKY]èƒŒæ™¯æ¨¡å¼æ—¶æœ‰æ•ˆã€‚"
+"场景中清除区域显示的 [Color]。仅在使用 [constant BG_COLOR] 或 [constant "
+"BG_COLOR_SKY] èƒŒæ™¯æ¨¡å¼æ—¶æœ‰æ•ˆã€‚"
#: doc/classes/Environment.xml
msgid "The power of the light emitted by the background."
@@ -29040,7 +29183,7 @@ msgstr "背景å‘出的光的功率。"
#: doc/classes/Environment.xml
msgid "The background mode. See [enum BGMode] for possible values."
-msgstr "背景模å¼ã€‚请å‚阅[enum BGMode]了解å¯èƒ½çš„值。"
+msgstr "背景模å¼ã€‚å¯èƒ½çš„å–å€¼è§ [enum BGMode]。"
#: doc/classes/Environment.xml
msgid "The [Sky] resource defined as background."
@@ -29073,7 +29216,7 @@ msgstr "è¿œæ™¯æ¨¡ç³Šæ•ˆæžœå½±å“æ¸²æŸ“çš„è·ç¦»ã€‚"
#: doc/classes/Environment.xml
msgid "If [code]true[/code], enables the depth-of-field far blur effect."
-msgstr "如果[code]true[/code],å¯ç”¨æ™¯æ·±è¿œæ™¯æ¨¡ç³Šæ•ˆæžœã€‚"
+msgstr "如果为 [code]true[/code],å¯ç”¨æ™¯æ·±è¿œæ™¯æ¨¡ç³Šæ•ˆæžœã€‚"
#: doc/classes/Environment.xml
msgid ""
@@ -29098,7 +29241,7 @@ msgstr "è¿‘ä¼¼æ¨¡ç³Šæ•ˆæžœå½±å“æ¸²æŸ“的地方与相机的è·ç¦»ã€‚"
#: doc/classes/Environment.xml
msgid "If [code]true[/code], enables the depth-of-field near blur effect."
-msgstr "如果[code]true[/code],å¯ç”¨æ™¯æ·±è¿‘模糊效果。"
+msgstr "如果为 [code]true[/code],å¯ç”¨æ™¯æ·±è¿‘模糊效果。"
#: doc/classes/Environment.xml
msgid ""
@@ -29114,7 +29257,7 @@ msgstr "近模糊和无模糊区域之间的过渡长度。"
#: doc/classes/Environment.xml
msgid "The fog's [Color]."
-msgstr "雾的[Color]。"
+msgstr "雾的 [Color]。"
#: doc/classes/Environment.xml
msgid "The fog's depth starting distance from the camera."
@@ -29140,8 +29283,8 @@ 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 "
-"Camera.far]值。"
+"é›¾çš„æ·±åº¦ç»ˆç‚¹ä¸Žæ‘„åƒæœºçš„è·ç¦»ã€‚如果此值被设置为0ï¼Œåˆ™ç­‰äºŽå½“å‰æ‘„åƒæœºçš„ [member "
+"Camera.far] 值。"
#: doc/classes/Environment.xml
msgid ""
@@ -29149,8 +29292,8 @@ msgid ""
"and/or [member fog_depth_enabled] must be set to [code]true[/code] to "
"actually display fog."
msgstr ""
-"如果[code]true[/code],则å¯ç”¨é›¾åŒ–效果。必须将[member fog_height_enabled]å’Œ/或"
-"[member fog_depth_enabled]设置为 [code]true[/code],æ‰èƒ½å®žé™…显示雾气。"
+"如果为 [code]true[/code],则å¯ç”¨é›¾åŒ–效果。必须将 [member fog_height_enabled] "
+"å’Œ/或 [member fog_depth_enabled] 设置为 [code]true[/code],æ‰èƒ½å®žé™…显示雾气。"
#: doc/classes/Environment.xml
msgid ""
@@ -29166,8 +29309,8 @@ msgid ""
"performance cost compared to a dedicated shader."
msgstr ""
"如果为 [code]true[/code],则å¯ç”¨é«˜åº¦é›¾åŒ–效果。å¯ç”¨åŽï¼Œæ— è®ºä¸Žç›¸æœºçš„è·ç¦»æœ‰å¤š"
-"远,雾气都会出现在规定的高度范围内。这å¯ä»¥ç”¨æ¥æ¨¡æ‹Ÿ \"深水 \"效果,与专用ç€è‰²"
-"å™¨ç›¸æ¯”ï¼Œæ€§èƒ½æˆæœ¬æ›´ä½Žã€‚"
+"远,雾气都会出现在规定的高度范围内。这å¯ä»¥ç”¨æ¥æ¨¡æ‹Ÿâ€œæ·±æ°´â€æ•ˆæžœï¼Œä¸Žä¸“用ç€è‰²å™¨ç›¸"
+"æ¯”ï¼Œæ€§èƒ½æˆæœ¬æ›´ä½Žã€‚"
#: doc/classes/Environment.xml
msgid ""
@@ -29175,8 +29318,8 @@ msgid ""
"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 ""
-"雾气高度最强的Yåæ ‡ã€‚如果这个值大于[member fog_height_min],雾气将从下往上显"
-"示。å¦åˆ™ï¼Œå°†ä»Žä¸Šåˆ°ä¸‹æ˜¾ç¤ºã€‚"
+"雾气高度最强的 Y åæ ‡ã€‚如果这个值大于 [member fog_height_min],雾气将从下往上"
+"显示。å¦åˆ™ï¼Œå°†ä»Žä¸Šåˆ°ä¸‹æ˜¾ç¤ºã€‚"
#: doc/classes/Environment.xml
msgid ""
@@ -29184,8 +29327,8 @@ msgid ""
"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 ""
-"雾气高度最弱的Yåæ ‡ã€‚如果这个值大于[member fog_height_max],雾气将从上到下显"
-"示。å¦åˆ™ï¼Œå°†ä»Žä¸‹å¾€ä¸Šæ˜¾ç¤ºã€‚"
+"雾气高度最弱的 Y åæ ‡ã€‚如果这个值大于 [member fog_height_max],雾气将从上到下"
+"显示。å¦åˆ™ï¼Œå°†ä»Žä¸‹å¾€ä¸Šæ˜¾ç¤ºã€‚"
#: doc/classes/Environment.xml
msgid ""
@@ -29198,7 +29341,7 @@ msgstr ""
#: doc/classes/Environment.xml
msgid "The depth fog's [Color] when looking towards the sun."
-msgstr "æœå¤ªé˜³çœ‹æ—¶ï¼Œæ·±é›¾çš„[Color]。"
+msgstr "æœå¤ªé˜³çœ‹æ—¶ï¼Œæ·±é›¾çš„ [Color]。"
#: doc/classes/Environment.xml
msgid ""
@@ -29211,8 +29354,8 @@ 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 ""
-"å¯ç”¨é›¾çš„é€å…‰æ•ˆæžœã€‚如果[code]true[/code],光线在雾中会更加明显,以模拟现实生活"
-"中的光散射。"
+"å¯ç”¨é›¾çš„é€å…‰æ•ˆæžœã€‚如果为 [code]true[/code],光线在雾中会更加明显,以模拟现实"
+"生活中的光散射。"
#: doc/classes/Environment.xml
msgid ""
@@ -29222,8 +29365,8 @@ msgid ""
"GPU supports the [code]GL_EXT_gpu_shader4[/code] extension."
msgstr ""
"以牺牲性能为代价,消除由更高级别采样产生的å—状效应。\n"
-"[b]注æ„:[/b]使用 GLES2æ¸²æŸ“å™¨æ—¶ï¼Œåªæœ‰GPUæ”¯æŒ [code]GL_EXT_gpu_shader4[/code] "
-"扩展时æ‰å¯ç”¨ã€‚"
+"[b]注æ„:[/b]使用 GLES2 æ¸²æŸ“å™¨æ—¶ï¼Œåªæœ‰ GPU æ”¯æŒ [code]GL_EXT_gpu_shader4[/"
+"code] 扩展时æ‰å¯ç”¨ã€‚"
#: doc/classes/Environment.xml
msgid "The glow blending mode."
@@ -29384,7 +29527,7 @@ msgstr "å±å¹•空间å射的最大步数。数值越高,速度越慢。"
msgid ""
"If [code]true[/code], screen-space reflections will take the material "
"roughness into account."
-msgstr "如果 [code]true[/code],å±å¹•空间å射将考虑æè´¨ç²—糙度。"
+msgstr "如果为 [code]true[/code],å±å¹•空间å射将考虑æè´¨ç²—糙度。"
#: doc/classes/Environment.xml
msgid ""
@@ -29407,7 +29550,7 @@ msgstr ""
msgid ""
"The screen-space ambient occlusion blur quality. See [enum SSAOBlur] for "
"possible values."
-msgstr "å±å¹•空间环境光é®è”½è´¨é‡ã€‚å¯èƒ½çš„值请å‚阅 [enum SSAOBlur]。"
+msgstr "å±å¹•空间环境光é®è”½è´¨é‡ã€‚å¯èƒ½çš„å–å€¼è§ [enum SSAOBlur]。"
#: doc/classes/Environment.xml
msgid "The screen-space ambient occlusion color."
@@ -29427,8 +29570,8 @@ msgid ""
"a costly effect and should be disabled first when running into performance "
"issues."
msgstr ""
-"如果[code]true[/code],å¯ç”¨å±å¹•空间环境光é®è”½æ•ˆæžœã€‚这将使物体的角è½å’Œç©ºæ´žå˜"
-"暗,以模拟现实生活中环境光无法到达整个物体。这对于å°åž‹çš„动æ€ç‰©ä½“æ¥è¯´æ•ˆæžœå¾ˆ"
+"如果为 [code]true[/code],å¯ç”¨å±å¹•空间环境光é®è”½æ•ˆæžœã€‚这将使物体的角è½å’Œç©ºæ´ž"
+"å˜æš—,以模拟现实生活中环境光无法到达整个物体。这对于å°åž‹çš„动æ€ç‰©ä½“æ¥è¯´æ•ˆæžœå¾ˆ"
"å¥½ï¼Œä½†åœ¨å¤§åž‹é™æ€ç‰©ä½“上,烘焙的照明或环境光é®è”½çº¹ç†ä¼šæ›´å¥½åœ°æ˜¾ç¤ºçŽ¯å¢ƒå…‰é®è”½ã€‚è¿™"
"是一个昂贵的效果,当é‡åˆ°æ€§èƒ½é—®é¢˜æ—¶ï¼Œåº”该首先ç¦ç”¨ã€‚"
@@ -29519,8 +29662,8 @@ msgid ""
"Clears the background using the clear color defined in [member "
"ProjectSettings.rendering/environment/default_clear_color]."
msgstr ""
-"使用[member ProjectSettings.rendering/environment/default_clear_color]中定义"
-"的底色清除背景。"
+"使用 [member ProjectSettings.rendering/environment/default_clear_color] 中定"
+"义的底色清除背景。"
#: doc/classes/Environment.xml
msgid "Clears the background using a custom clear color."
@@ -29537,13 +29680,13 @@ 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]ç¨å¿«ï¼Œåº”是在å¯ä»¥çœ‹åˆ°å射,但天空本身ä¸å¯è§çš„场景中的首选,例"
-"如,自上而下的相机。"
+"ä½¿ç”¨è‡ªå®šä¹‰çš„é€æ˜Žé¢œè‰²æ¸…除背景,并å…许定义天空的阴影和åå°„ã€‚è¿™ç§æ¨¡å¼æ¯” "
+"[constant BG_SKY] ç¨å¿«ï¼Œåº”是在å¯ä»¥çœ‹åˆ°å射,但天空本身ä¸å¯è§çš„场景中的首选"
+"(例如,自上而下的相机)。"
#: doc/classes/Environment.xml
msgid "Displays a [CanvasLayer] in the background."
-msgstr "在背景中显示[CanvasLayer]。"
+msgstr "在背景中显示 [CanvasLayer]。"
#: doc/classes/Environment.xml
msgid "Displays a camera feed in the background."
@@ -29551,7 +29694,7 @@ msgstr "在背景中显示相机æºã€‚"
#: doc/classes/Environment.xml
msgid "Represents the size of the [enum BGMode] enum."
-msgstr "表示[enum BGMode]枚举的大å°ã€‚"
+msgstr "表示 [enum BGMode] 枚举的大å°ã€‚"
#: doc/classes/Environment.xml
msgid ""
@@ -29656,33 +29799,31 @@ msgstr "å±å¹•ç©ºé—´çŽ¯å¢ƒé®æŒ¡æ•ˆæžœä¸æ¨¡ç³Šï¼ˆæœ€å¿«ï¼‰ã€‚"
#: doc/classes/Environment.xml
msgid "1×1 blur for the screen-space ambient occlusion effect."
-msgstr "1×1模糊的å±å¹•ç©ºé—´çŽ¯å¢ƒé®æŒ¡æ•ˆæžœã€‚"
+msgstr "1×1 模糊的å±å¹•ç©ºé—´çŽ¯å¢ƒé®æŒ¡æ•ˆæžœã€‚"
#: doc/classes/Environment.xml
msgid "2×2 blur for the screen-space ambient occlusion effect."
-msgstr "2×2模糊的å±å¹•ç©ºé—´çŽ¯å¢ƒé®æŒ¡æ•ˆæžœã€‚"
+msgstr "2×2 模糊的å±å¹•ç©ºé—´çŽ¯å¢ƒé®æŒ¡æ•ˆæžœã€‚"
#: doc/classes/Environment.xml
msgid "3×3 blur for the screen-space ambient occlusion effect (slowest)."
-msgstr "3×3模糊的å±å¹•ç©ºé—´çŽ¯å¢ƒé®æŒ¡æ•ˆæžœï¼ˆæœ€æ…¢ï¼‰ã€‚"
+msgstr "3×3 模糊的å±å¹•ç©ºé—´çŽ¯å¢ƒé®æŒ¡æ•ˆæžœï¼ˆæœ€æ…¢ï¼‰ã€‚"
#: doc/classes/Environment.xml
msgid "Low quality for the screen-space ambient occlusion effect (fastest)."
msgstr "低质é‡çš„å±å¹•ç©ºé—´çŽ¯å¢ƒé®æŒ¡æ•ˆæžœï¼ˆæœ€å¿«ï¼‰ã€‚"
#: doc/classes/Environment.xml
-#, fuzzy
msgid "Medium quality for the screen-space ambient occlusion effect."
-msgstr "低质é‡çš„å±å¹•ç©ºé—´çŽ¯å¢ƒé®æŒ¡æ•ˆæžœã€‚"
+msgstr "中等质é‡çš„å±å¹•ç©ºé—´çŽ¯å¢ƒé®æŒ¡æ•ˆæžœã€‚"
#: doc/classes/Environment.xml
-#, fuzzy
msgid "High quality for the screen-space ambient occlusion effect (slowest)."
-msgstr "低质é‡çš„å±å¹•ç©ºé—´çŽ¯å¢ƒé®æŒ¡æ•ˆæžœï¼ˆæœ€æ…¢ï¼‰ã€‚"
+msgstr "高质é‡çš„å±å¹•ç©ºé—´çŽ¯å¢ƒé®æŒ¡æ•ˆæžœï¼ˆæœ€æ…¢ï¼‰ã€‚"
#: doc/classes/Expression.xml
msgid "A class that stores an expression you can execute."
-msgstr "一个存储你å¯ä»¥æ‰§è¡Œçš„表达å¼çš„类。"
+msgstr "存储你å¯ä»¥æ‰§è¡Œçš„表达å¼çš„类。"
#: doc/classes/Expression.xml
msgid ""
@@ -29711,9 +29852,9 @@ msgid ""
msgstr ""
"表达å¼å¯ä»¥ç”±ä»»ä½•算术è¿ç®—ã€å†…置数学函数调用ã€ä¼ é€’实例的方法调用或内置类型构造"
"调用组æˆã€‚\n"
-"ä¸€ä¸ªä½¿ç”¨å†…ç½®æ•°å­¦å‡½æ•°çš„è¡¨è¾¾å¼æ–‡æœ¬ç¤ºä¾‹å¯ä»¥æ˜¯[code]sqrt(pow(3,2)+pow(4,2))[/"
+"ä¸€ä¸ªä½¿ç”¨å†…ç½®æ•°å­¦å‡½æ•°çš„è¡¨è¾¾å¼æ–‡æœ¬ç¤ºä¾‹å¯ä»¥æ˜¯ [code]sqrt(pow(3,2)+pow(4,2))[/"
"code]。\n"
-"在下é¢çš„例å­ä¸­ï¼Œæˆ‘们使用一个[LineEdit]节点æ¥å†™æˆ‘们的表达å¼å¹¶æ˜¾ç¤ºç»“果。\n"
+"在下é¢çš„例å­ä¸­ï¼Œæˆ‘们使用 [LineEdit] 节点æ¥å†™æˆ‘们的表达å¼å¹¶æ˜¾ç¤ºç»“果。\n"
"[codeblock]\n"
"onready var expression = Expression.new()\n"
"\n"
@@ -29738,18 +29879,18 @@ msgid ""
"If you defined input variables in [method parse], you can specify their "
"values in the inputs array, in the same order."
msgstr ""
-"执行之å‰ç”±[method parse]è§£æžçš„表达å¼ï¼Œå¹¶è¿”回结果。在使用返回的对象之å‰ï¼Œåº”该"
-"通过调用 [method has_execute_failed] æ¥æ£€æŸ¥æ–¹æ³•是å¦å¤±è´¥ã€‚\n"
+"执行之å‰ç”± [method parse] è§£æžçš„表达å¼ï¼Œå¹¶è¿”回结果。在使用返回的对象之å‰ï¼Œåº”"
+"该通过调用 [method has_execute_failed] æ¥æ£€æŸ¥æ–¹æ³•是å¦å¤±è´¥ã€‚\n"
"如果你在 [method parse] 中定义了输入å˜é‡ï¼Œä½ å¯ä»¥åœ¨è¾“å…¥æ•°ç»„ä¸­ä»¥åŒæ ·çš„é¡ºåºæŒ‡å®š"
"它们的值。"
#: doc/classes/Expression.xml
msgid "Returns the error text if [method parse] has failed."
-msgstr "如果[method parse]失败了,返回错误文本。"
+msgstr "如果 [method parse] 失败了,返回错误文本。"
#: doc/classes/Expression.xml
msgid "Returns [code]true[/code] if [method execute] has failed."
-msgstr "如果[method execute]失败,返回 [code]true[/code]。"
+msgstr "如果 [method execute] 失败,返回 [code]true[/code]。"
#: doc/classes/Expression.xml
msgid ""
@@ -29758,13 +29899,13 @@ msgid ""
"expression with [code]input_names[/code], so that you can bind them when it "
"gets executed."
msgstr ""
-"è§£æžè¡¨è¾¾å¼å¹¶è¿”回一个[enum Error]代ç ã€‚\n"
-"ä½ å¯ä»¥é€‰æ‹©ç”¨[code]input_names[/code]指定å¯èƒ½å‡ºçŽ°åœ¨è¡¨è¾¾å¼ä¸­çš„å˜é‡å称,这样你"
-"å°±å¯ä»¥åœ¨è¡¨è¾¾å¼è¢«æ‰§è¡Œæ—¶ç»‘定它们。"
+"è§£æžè¡¨è¾¾å¼å¹¶è¿”回一个 [enum Error] 代ç ã€‚\n"
+"ä½ å¯ä»¥é€‰æ‹©ç”¨ [code]input_names[/code] 指定å¯èƒ½å‡ºçŽ°åœ¨è¡¨è¾¾å¼ä¸­çš„å˜é‡å称,这样"
+"ä½ å°±å¯ä»¥åœ¨è¡¨è¾¾å¼è¢«æ‰§è¡Œæ—¶ç»‘定它们。"
#: doc/classes/ExternalTexture.xml
msgid "Enable OpenGL ES external texture extension."
-msgstr "å¯ç”¨OpenGL ESå¤–éƒ¨çº¹ç†æ‰©å±•。"
+msgstr "å¯ç”¨ OpenGL ES å¤–éƒ¨çº¹ç†æ‰©å±•。"
#: doc/classes/ExternalTexture.xml
msgid ""
@@ -29773,10 +29914,10 @@ 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å¹³å°ã€‚"
+"å¯ç”¨å¯¹ 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
msgid "Returns the external texture name."
@@ -30026,7 +30167,7 @@ msgstr ""
msgid ""
"Returns an MD5 String representing the file at the given path or an empty "
"[String] on failure."
-msgstr "返回一个给定路径文件的MD5字符串,如果失败则返回一个空的[String]。"
+msgstr "返回一个给定路径文件的 MD5 字符串,如果失败则返回一个空的 [String]。"
#: doc/classes/File.xml
msgid ""
@@ -30035,9 +30176,9 @@ msgid ""
"timestamp can be converted to datetime by using [method OS."
"get_datetime_from_unix_time]."
msgstr ""
-"返回unixæ ¼å¼çš„æ—¶é—´æˆ³[code]file[/code]为文件的最åŽä¿®æ”¹æ—¶é—´ï¼Œæˆ–者返回一个"
-"[String]\"ERROR IN [code]file[/code]\"。这个unix时间戳å¯ä»¥é€šè¿‡ä½¿ç”¨[method OS."
-"get_datetime_from_unix_time]转æ¢ä¸ºæ•°æ®æ—¶é—´ã€‚"
+"返回文件 [code]file[/code] 的最åŽä¿®æ”¹æ—¶é—´çš„ unix æ ¼å¼çš„æ—¶é—´æˆ³ï¼Œæˆ–者返回一个 "
+"[String] \"ERROR IN [code]file[/code]\"。这个 unix 时间戳å¯ä»¥é€šè¿‡ä½¿ç”¨ "
+"[method OS.get_datetime_from_unix_time] 转æ¢ä¸ºæ•°æ®æ—¶é—´ã€‚"
#: doc/classes/File.xml
msgid ""
@@ -30263,8 +30404,8 @@ msgid ""
"store the length of the string).\n"
"Text will be encoded as UTF-8."
msgstr ""
-"将给定的[String]以Pascalæ ¼å¼å­˜å‚¨åœ¨æ–‡ä»¶ä¸­ï¼ˆä¾‹å¦‚,也将字符串长度存储)。\n"
-"文本将被编ç ä¸ºUTF-8。"
+"将给定的 [String] 以 Pascal æ ¼å¼å­˜å‚¨åœ¨æ–‡ä»¶ä¸­ï¼ˆå³åŒæ—¶å­˜å‚¨å­—符串的长度)。\n"
+"将使用 UTF-8 ç¼–ç æ–‡æœ¬ã€‚"
#: doc/classes/File.xml
msgid "Stores a floating-point number in the file."
@@ -30327,8 +30468,8 @@ msgstr ""
"%E5%AD%97%E8%8A%82%E5%BA%8F]字节åº[/url]读å–。为 [code]false[/code] 时文件以"
"å°ç«¯å­—节åºè¯»å–。如果ä¸ç¡®å®šï¼Œè¯·å°†å…¶ä¿ç•™ä¸º [code]false[/code],因为大多数文件都"
"是以å°ç«¯å­—节åºç¼–写的。\n"
-"[b]注æ„:[/b][member endian_swap] åªæ˜¯æ–‡ä»¶æ ¼å¼ï¼Œä¸Ž CPU 类型无关。 CPU 字节åº"
-"ä¸ä¼šå½±å“写入文件的默认字节åºã€‚\n"
+"[b]注æ„:[/b][member endian_swap] åªæ˜¯æ–‡ä»¶æ ¼å¼ï¼Œä¸Ž CPU 类型无关。CPU 字节åºä¸"
+"会影å“写入文件的默认字节åºã€‚\n"
"[b]注æ„:[/b]æ¯å½“您打开文件时,它总是é‡ç½®ä¸º [code]false[/code]。因此,必须在"
"[i]打开文件之åŽ[/i]设置 [member endian_swap]ï¼Œè€Œä¸æ˜¯ä¹‹å‰ã€‚"
@@ -30483,7 +30624,7 @@ msgid ""
"Supported Images\"[/code] will show both PNG and JPEG files when selected."
msgstr ""
"å¯ç”¨çš„æ–‡ä»¶ç±»åž‹è¿‡æ»¤å™¨ã€‚例如,这仅显示 [code].png[/code] å’Œ [code].gd[/code] æ–‡"
-"件: [code]set_filters(PoolStringArray([\"*.png ; PNG Images\", \"*.gd ; "
+"件:[code]set_filters(PoolStringArray([\"*.png ; PNG Images\", \"*.gd ; "
"GDScript Files\" ]))[/code]。å•个过滤器中也å¯ä»¥æŒ‡å®šå¤šä¸ªæ–‡ä»¶ç±»åž‹ã€‚选中 "
"[code]\"*.png, *.jpg, *.jpeg ; Supported Images\"[/code] åŽä¼š PNG å’Œ JPEG æ–‡"
"件都会显示。"
@@ -30501,12 +30642,12 @@ msgid ""
"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] å±žæ€§å°†ç›¸åº”åœ°è®¾ç½®çª—å£æ ‡é¢˜ï¼ˆä¾‹"
+"如果为 [code]true[/code],更改 [code]Mode[/code] å±žæ€§å°†ç›¸åº”åœ°è®¾ç½®çª—å£æ ‡é¢˜ï¼ˆä¾‹"
"如,将模å¼è®¾ç½®ä¸º [constant MODE_OPEN_FILE] ä¼šå°†çª—å£æ ‡é¢˜æ›´æ”¹ä¸ºâ€œæ‰“开文件â€ï¼‰ã€‚"
#: doc/classes/FileDialog.xml
msgid "If [code]true[/code], the dialog will show hidden files."
-msgstr "如果[code]true[/code]ï¼Œå¯¹è¯æ¡†å°†æ˜¾ç¤ºå‡ºéšè—文件。"
+msgstr "如果为 [code]true[/code]ï¼Œå¯¹è¯æ¡†å°†æ˜¾ç¤ºå‡ºéšè—文件。"
#: doc/classes/FileDialog.xml
msgid "Emitted when the user selects a directory."
@@ -30548,7 +30689,7 @@ msgstr "å½“æ–‡ä»¶å­˜åœ¨æ—¶ï¼Œå¯¹è¯æ¡†ä¼šå‘出警告。"
msgid ""
"The dialog only allows accessing files under the [Resource] path "
"([code]res://[/code])."
-msgstr "è¯¥å¯¹è¯æ¡†åªå…许访问[Resource]路径下的文件([code]res://[/code])。"
+msgstr "è¯¥å¯¹è¯æ¡†åªå…许访问 [Resource] 路径下的文件([code]res://[/code])。"
#: doc/classes/FileDialog.xml
msgid ""
@@ -30568,7 +30709,7 @@ msgstr "应用于文件图标的颜色调制。"
msgid ""
"The color tint for disabled files (when the [FileDialog] is used in open "
"folder mode)."
-msgstr "ç¦ç”¨æ–‡ä»¶çš„色调(当[FileDialog]在打开文件夹模å¼ä¸‹ä½¿ç”¨æ—¶ï¼‰ã€‚"
+msgstr "ç¦ç”¨æ–‡ä»¶çš„色调(当 [FileDialog] 在打开文件夹模å¼ä¸‹ä½¿ç”¨æ—¶ï¼‰ã€‚"
#: doc/classes/FileDialog.xml
msgid "The color modulation applied to the folder icon."
@@ -30727,8 +30868,8 @@ msgid ""
"from the top, [i]ascent[/i] must be added to the Y axis.\n"
"See also [method CanvasItem.draw_string]."
msgstr ""
-"在给定ä½ç½®ä½¿ç”¨å­—体将[code]string[/code]绘制到画布项目中,并使用"
-"[code]modulate[/code]颜色,并å¯ä»¥é€‰æ‹©è£å‰ªå®½åº¦ã€‚ [code]position[/code]指定基"
+"在给定ä½ç½®ä½¿ç”¨å­—体将 [code]string[/code] 绘制到画布项目中,并使用 "
+"[code]modulate[/code] 颜色,并å¯ä»¥é€‰æ‹©è£å‰ªå®½åº¦ã€‚[code]position[/code] 指定基"
"çº¿ï¼Œè€Œä¸æ˜¯é¡¶éƒ¨ã€‚è¦ä»Žé¡¶éƒ¨ç»˜åˆ¶ï¼Œå¿…须在 Y 轴上添加[i]å‡éƒ¨[/i]。\n"
"å¦è¯·å‚阅 [method CanvasItem.draw_string]。"
@@ -30864,10 +31005,10 @@ msgid ""
"function, a reference to a function in a given object can be created, passed "
"around and called."
msgstr ""
-"在GDScriptä¸­ï¼Œå‡½æ•°ä¸æ˜¯[i]第一类对象[/i]。这æ„味ç€ä¸å¯èƒ½å°†å®ƒä»¬ç›´æŽ¥ä½œä¸ºå˜é‡å­˜"
+"在 GDScript ä¸­ï¼Œå‡½æ•°ä¸æ˜¯[i]第一类对象[/i]。这æ„味ç€ä¸å¯èƒ½å°†å®ƒä»¬ç›´æŽ¥ä½œä¸ºå˜é‡å­˜"
"储,从å¦ä¸€ä¸ªå‡½æ•°ä¸­è¿”å›žï¼Œæˆ–å°†å®ƒä»¬ä½œä¸ºå‚æ•°ä¼ é€’。\n"
-"然而,通过使用[method @GDScript.funcref]函数创建一个[FuncRef],å¯ä»¥åˆ›å»ºã€ä¼ é€’"
-"和调用给定对象中的一个函数的引用。"
+"然而,通过使用 [method @GDScript.funcref] 函数创建一个 [FuncRef],å¯ä»¥åˆ›å»ºã€"
+"传递和调用给定对象中的一个函数的引用。"
#: doc/classes/FuncRef.xml
msgid ""
@@ -30897,8 +31038,8 @@ msgid ""
"actually inheriting from [Object], not a built-in type such as [int], "
"[Vector2] or [Dictionary]."
msgstr ""
-"包å«è¢«å¼•用函数的对象。这个对象必须是实际继承自[Object]çš„ç±»åž‹ï¼Œè€Œä¸æ˜¯åƒ[int]ã€"
-"[Vector2]或[Dictionary]这样的内置类型。"
+"包å«è¢«å¼•用函数的对象。这个对象必须是实际继承自 [Object] çš„ç±»åž‹ï¼Œè€Œä¸æ˜¯åƒ "
+"[int]ã€[Vector2]ã€[Dictionary] 这样的内置类型。"
#: doc/classes/FuncRef.xml
msgid "The name of the referenced function."
@@ -30907,7 +31048,7 @@ msgstr "被引用函数的å称。"
#: modules/gdnative/doc_classes/GDNativeLibrary.xml
msgid ""
"An external library containing functions or script classes to use in Godot."
-msgstr "一个包å«å‡½æ•°æˆ–脚本类的外部库,å¯ä»¥åœ¨Godot中使用。"
+msgstr "包å«å‡½æ•°æˆ–脚本类的外部库,å¯ä»¥åœ¨ Godot 中使用。"
#: modules/gdnative/doc_classes/GDNativeLibrary.xml
msgid ""
@@ -30961,8 +31102,8 @@ msgid ""
"[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 ""
-"如果[code]true[/code],æ¯å½“ç”¨æˆ·ç¦»å¼€ç¼–è¾‘å™¨çª—å£æ—¶ï¼Œç¼–辑器会暂时å¸è½½åº“,å…许用户"
-"釿–°ç¼–译库,而ä¸éœ€è¦é‡æ–°å¯åЍGodot。\n"
+"如果为 [code]true[/code],æ¯å½“ç”¨æˆ·ç¦»å¼€ç¼–è¾‘å™¨çª—å£æ—¶ï¼Œç¼–辑器会暂时å¸è½½åº“,å…许"
+"ç”¨æˆ·é‡æ–°ç¼–译库,而ä¸éœ€è¦é‡æ–°å¯åЍGodot。\n"
"[b]注æ„:[/b]如果库定义了在编辑器内è¿è¡Œçš„工具脚本,[code]reloadable[/code]å¿…"
"须是[code]false[/code]。å¦åˆ™ï¼Œç¼–辑器会在工具脚本正在使用的时候å°è¯•å¸è½½å®ƒä»¬æ—¶"
"而崩溃。"
@@ -30976,8 +31117,8 @@ msgid ""
"loaded as long as Godot is running.\n"
"[b]Note:[/b] A singleton library cannot be [member reloadable]."
msgstr ""
-"如果[code]true[/code],Godot会在å¯åŠ¨æ—¶åŠ è½½åº“ï¼Œè€Œä¸æ˜¯åœ¨è„šæœ¬ç¬¬ä¸€æ¬¡ä½¿ç”¨åº“æ—¶ï¼Œåœ¨"
-"åˆå§‹åŒ–库åŽè°ƒç”¨[code]{prefix}gdnative_singleton[/code](其中[code]{prefix}[/"
+"如果为 [code]true[/code],Godot会在å¯åŠ¨æ—¶åŠ è½½åº“ï¼Œè€Œä¸æ˜¯åœ¨è„šæœ¬ç¬¬ä¸€æ¬¡ä½¿ç”¨åº“æ—¶ï¼Œ"
+"在åˆå§‹åŒ–库åŽè°ƒç”¨[code]{prefix}gdnative_singleton[/code](其中[code]{prefix}[/"
"code]是[member symbol_prefix]的值)。åªè¦Godot在è¿è¡Œï¼Œè¯¥åº“就一直被加载。\n"
"[b]注æ„:[/b]å•例库ä¸èƒ½æ˜¯[member reloadable]。"
@@ -30996,7 +31137,7 @@ msgstr ""
#: modules/gdscript/doc_classes/GDScript.xml
msgid "A script implemented in the GDScript programming language."
-msgstr "一个用 GDScript 编程语言实现的脚本。"
+msgstr "用 GDScript 编程语言实现的脚本。"
#: modules/gdscript/doc_classes/GDScript.xml
msgid ""
@@ -31006,13 +31147,14 @@ msgid ""
"set_script] extends an existing object, if that object's class matches one "
"of the script's base classes."
msgstr ""
-"用GDScript编程语言实现的脚本。该脚本扩展了实例化该对象åŽå…¶æ‰€æœ‰å¯¹è±¡çš„功能。\n"
+"用 GDScript 编程语言实现的脚本。该脚本扩展了实例化该对象åŽå…¶æ‰€æœ‰å¯¹è±¡çš„功"
+"能。\n"
"[method new] 创建脚本的新实例。如果一个对象的类与脚本的基类之一匹é…,则 "
"[method Object.set_script] 会扩展该对象。"
#: modules/gdscript/doc_classes/GDScript.xml
msgid "Returns byte code for the script source code."
-msgstr "返回脚本æºä»£ç çš„字节(byte)ç ã€‚"
+msgstr "返回脚本æºä»£ç çš„字节ç ã€‚"
#: modules/gdscript/doc_classes/GDScript.xml
msgid ""
@@ -31034,7 +31176,7 @@ msgstr ""
#: modules/gdscript/doc_classes/GDScriptFunctionState.xml
msgid "State of a function call after yielding."
-msgstr "一个函数在调用åŽå¤±æ•ˆçš„状æ€ã€‚"
+msgstr "函数调用在 yield åŽæ‰€å¤„的状æ€ã€‚"
#: modules/gdscript/doc_classes/GDScriptFunctionState.xml
msgid ""
@@ -31058,10 +31200,10 @@ msgid ""
"script have survived up to that point."
msgstr ""
"检查函数调用是å¦å¯ä»¥è¢«æ¢å¤ã€‚如果函数状æ€å·²ç»è¢«æ¢å¤ï¼Œåˆ™ä¸å­˜åœ¨è¿™ç§æƒ…况。\n"
-"如果[code]extended_check[/code]被å¯ç”¨ï¼Œå®ƒè¿˜ä¼šæ£€æŸ¥ç›¸å…³çš„脚本和对象是å¦ä»ç„¶å­˜"
-"在。扩展检查是在调试模å¼ä¸‹ä½œä¸º[method GDScriptFunctionState.resume]的一部分进"
-"行的,但是如果你知é“ä½ å¯èƒ½åœ¨ä¸ç¡®å®šå¯¹è±¡å’Œ/或脚本已ç»å­˜æ´»åˆ°é‚£ä¸ªç‚¹çš„æƒ…况下å°è¯•æ¢"
-"å¤ï¼Œä½ å¯ä»¥ä½¿ç”¨è¿™ä¸ªã€‚"
+"如果 [code]extended_check[/code] 被å¯ç”¨ï¼Œå®ƒè¿˜ä¼šæ£€æŸ¥ç›¸å…³çš„脚本和对象是å¦ä»ç„¶å­˜"
+"在。扩展检查是在调试模å¼ä¸‹ä½œä¸º [method GDScriptFunctionState.resume] 的一部分"
+"进行的,但是如果你知é“ä½ å¯èƒ½åœ¨ä¸ç¡®å®šå¯¹è±¡å’Œ/或脚本已ç»å­˜æ´»åˆ°é‚£ä¸ªç‚¹çš„æƒ…况下å°è¯•"
+"æ¢å¤ï¼Œä½ å¯ä»¥ä½¿ç”¨è¿™ä¸ªã€‚"
#: modules/gdscript/doc_classes/GDScriptFunctionState.xml
msgid ""
@@ -31074,7 +31216,7 @@ msgid ""
msgstr ""
"继续执行让步的函数调用。\n"
"å¦‚æžœä¼ é€’äº†ä¸€ä¸ªå‚æ•°ï¼Œåˆ™ä»Žäº§ç”Ÿçš„函数调用中的 [method @GDScript.yield] 调用返回"
-"傿•°ã€‚ä½ å¯ä»¥é€šè¿‡ä¾‹å¦‚一个 [Array] æ¥å¤„ç†å¤šä¸ªå‚数。 \n"
+"傿•°ã€‚ä½ å¯ä»¥é€šè¿‡ä¾‹å¦‚一个 [Array] æ¥å¤„ç†å¤šä¸ªå‚数。\n"
"此函数返回接续的函数调用åŽè¿”å›žçš„å†…å®¹ï¼Œå¦‚æžœå†æ¬¡æ¢å¤è°ƒç”¨ï¼Œå¯èƒ½æ˜¯å¦ä¸€ä¸ªå‡½æ•°çж"
"æ€ã€‚"
@@ -31082,7 +31224,8 @@ msgstr ""
msgid ""
"The generic 6-degrees-of-freedom joint can implement a variety of joint "
"types by locking certain axes' rotation or translation."
-msgstr "通用的6度自由度关节å¯ä»¥é€šè¿‡é”定æŸäº›è½´çš„æ—‹è½¬æˆ–平移æ¥å®žçްå„ç§å…³èŠ‚ç±»åž‹ã€‚"
+msgstr ""
+"通用的 6 度自由度关节å¯ä»¥é€šè¿‡é”定æŸäº›è½´çš„æ—‹è½¬æˆ–平移æ¥å®žçްå„ç§å…³èŠ‚ç±»åž‹ã€‚"
#: doc/classes/Generic6DOFJoint.xml
msgid ""
@@ -31090,8 +31233,8 @@ msgid ""
"and the latter 3 DOF axes represent the angular motion. Each axis can be "
"either locked, or limited."
msgstr ""
-"å‰3个DOF轴是线性轴,代表物体的平移,åŽ3个DOF轴代表角è¿åŠ¨ã€‚æ¯ä¸ªè½´å¯ä»¥è¢«é”定,"
-"也å¯ä»¥è¢«é™åˆ¶ã€‚"
+"å‰ 3 个 DOF è½´æ˜¯çº¿æ€§è½´ï¼Œä»£è¡¨ç‰©ä½“çš„å¹³ç§»ï¼ŒåŽ 3 个 DOF 轴代表角è¿åŠ¨ã€‚æ¯ä¸ªè½´å¯ä»¥"
+"被é”定,也å¯ä»¥è¢«é™åˆ¶ã€‚"
#: doc/classes/Generic6DOFJoint.xml
msgid ""
@@ -31099,7 +31242,7 @@ msgid ""
"The lower, the longer an impulse from one side takes to travel to the other "
"side."
msgstr ""
-"X轴上的旋转阻尼é‡ã€‚\n"
+"X 轴上的旋转阻尼é‡ã€‚\n"
"越低,æ¥è‡ªä¸€ä¾§çš„冲力到达å¦ä¸€ä¾§çš„æ—¶é—´è¶Šé•¿ã€‚"
#: doc/classes/Generic6DOFJoint.xml
@@ -31117,35 +31260,35 @@ msgstr ""
#: doc/classes/Generic6DOFJoint.xml
msgid ""
"The maximum amount of force that can occur, when rotating around the X axis."
-msgstr "绕X轴旋转时所能产生的最大力。"
+msgstr "绕 X 轴旋转时所能产生的最大力。"
#: doc/classes/Generic6DOFJoint.xml
msgid ""
"The minimum rotation in negative direction to break loose and rotate around "
"the X axis."
-msgstr "è´Ÿæ–¹å‘çš„æœ€å°æ—‹è½¬ï¼Œä»¥æŒ£è„±å¹¶å›´ç»•X轴旋转。"
+msgstr "è´Ÿæ–¹å‘çš„æœ€å°æ—‹è½¬ï¼Œä»¥æŒ£è„±å¹¶å›´ç»• X 轴旋转。"
#: doc/classes/Generic6DOFJoint.xml
msgid ""
"The amount of rotational restitution across the X axis. The lower, the more "
"restitution occurs."
-msgstr "X轴上的旋转æ¢å¤é‡ã€‚值越低,æ¢å¤é‡è¶Šå¤§ã€‚"
+msgstr "X 轴上的旋转æ¢å¤é‡ã€‚值越低,æ¢å¤é‡è¶Šå¤§ã€‚"
#: doc/classes/Generic6DOFJoint.xml
msgid "The speed of all rotations across the X axis."
-msgstr "跨越X轴的所有旋转的速度。"
+msgstr "跨越 X 轴的所有旋转的速度。"
#: doc/classes/Generic6DOFJoint.xml
msgid ""
"The minimum rotation in positive direction to break loose and rotate around "
"the X axis."
-msgstr "正方å‘çš„æœ€å°æ—‹è½¬ï¼Œä»¥æŒ£è„±å¹¶ç»•X轴旋转。"
+msgstr "正方å‘çš„æœ€å°æ—‹è½¬ï¼Œä»¥æŒ£è„±å¹¶ç»• X 轴旋转。"
#: doc/classes/Generic6DOFJoint.xml
msgid ""
"The amount of rotational damping across the Y axis. The lower, the more "
"dampening occurs."
-msgstr "Y轴上的旋转阻尼é‡ã€‚值越低,旋转的阻尼就越大。"
+msgstr "Y 轴上的旋转阻尼é‡ã€‚值越低,旋转的阻尼就越大。"
#: doc/classes/Generic6DOFJoint.xml
msgid "If [code]true[/code], rotation across the Y axis is limited."
@@ -31156,41 +31299,41 @@ msgid ""
"When rotating across the Y axis, this error tolerance factor defines how "
"much the correction gets slowed down. The lower, the slower."
msgstr ""
-"当在Y轴上旋转时,这个误差容é™ç³»æ•°å®šä¹‰äº†ä¿®æ­£çš„é€Ÿåº¦è¢«å‡æ…¢çš„程度。值越低,旋转越"
-"慢。"
+"当在 Y 轴上旋转时,这个误差容é™ç³»æ•°å®šä¹‰äº†ä¿®æ­£çš„é€Ÿåº¦è¢«å‡æ…¢çš„程度。值越低,旋转"
+"越慢。"
#: doc/classes/Generic6DOFJoint.xml
msgid ""
"The maximum amount of force that can occur, when rotating around the Y axis."
-msgstr "围绕Y轴旋转时,å¯èƒ½å‘生的最大力。"
+msgstr "围绕 Y 轴旋转时,å¯èƒ½å‘生的最大力。"
#: doc/classes/Generic6DOFJoint.xml
msgid ""
"The minimum rotation in negative direction to break loose and rotate around "
"the Y axis."
-msgstr "è´Ÿæ–¹å‘çš„æœ€å°æ—‹è½¬ï¼Œä»¥æŒ£è„±å¹¶å›´ç»•Y轴旋转。"
+msgstr "è´Ÿæ–¹å‘çš„æœ€å°æ—‹è½¬ï¼Œä»¥æŒ£è„±å¹¶å›´ç»• Y 轴旋转。"
#: doc/classes/Generic6DOFJoint.xml
msgid ""
"The amount of rotational restitution across the Y axis. The lower, the more "
"restitution occurs."
-msgstr "跨越Y轴的旋转æ¢å¤é‡ã€‚越低,å‘生的æ¢å¤é‡è¶Šå¤§ã€‚"
+msgstr "跨越 Y 轴的旋转æ¢å¤é‡ã€‚越低,å‘生的æ¢å¤é‡è¶Šå¤§ã€‚"
#: doc/classes/Generic6DOFJoint.xml
msgid "The speed of all rotations across the Y axis."
-msgstr "跨越Y轴的所有旋转的速度。"
+msgstr "跨越 Y 轴的所有旋转的速度。"
#: doc/classes/Generic6DOFJoint.xml
msgid ""
"The minimum rotation in positive direction to break loose and rotate around "
"the Y axis."
-msgstr "正方å‘çš„æœ€å°æ—‹è½¬ï¼Œä»¥æŒ£è„±å¹¶ç»•Y轴旋转。"
+msgstr "正方å‘çš„æœ€å°æ—‹è½¬ï¼Œä»¥æŒ£è„±å¹¶ç»• Y 轴旋转。"
#: doc/classes/Generic6DOFJoint.xml
msgid ""
"The amount of rotational damping across the Z axis. The lower, the more "
"dampening occurs."
-msgstr "跨越Z轴的旋转阻尼é‡ã€‚值越低,阻尼就越多。"
+msgstr "跨越 Z 轴的旋转阻尼é‡ã€‚值越低,阻尼就越多。"
#: doc/classes/Generic6DOFJoint.xml
msgid "If [code]true[/code], rotation across the Z axis is limited."
@@ -31201,35 +31344,35 @@ msgid ""
"When rotating across the Z axis, this error tolerance factor defines how "
"much the correction gets slowed down. The lower, the slower."
msgstr ""
-"当在Z轴上旋转时,这个误差容é™ç³»æ•°å®šä¹‰äº†ä¿®æ­£çš„é€Ÿåº¦è¢«å‡æ…¢çš„程度。值越低,旋转越"
-"慢。"
+"当在 Z 轴上旋转时,这个误差容é™ç³»æ•°å®šä¹‰äº†ä¿®æ­£çš„é€Ÿåº¦è¢«å‡æ…¢çš„程度。值越低,旋转"
+"越慢。"
#: doc/classes/Generic6DOFJoint.xml
msgid ""
"The maximum amount of force that can occur, when rotating around the Z axis."
-msgstr "围绕Z轴旋转时,å¯èƒ½å‘生的最角度。"
+msgstr "围绕 Z 轴旋转时,å¯èƒ½å‘生的最角度。"
#: doc/classes/Generic6DOFJoint.xml
msgid ""
"The minimum rotation in negative direction to break loose and rotate around "
"the Z axis."
-msgstr "è´Ÿæ–¹å‘çš„æœ€å°æ—‹è½¬ï¼Œä»¥æŒ£è„±å¹¶å›´ç»•Z轴旋转。"
+msgstr "è´Ÿæ–¹å‘çš„æœ€å°æ—‹è½¬ï¼Œä»¥æŒ£è„±å¹¶å›´ç»• Z 轴旋转。"
#: doc/classes/Generic6DOFJoint.xml
msgid ""
"The amount of rotational restitution across the Z axis. The lower, the more "
"restitution occurs."
-msgstr "跨越Z轴的旋转æ¢å¤é‡ã€‚越低,å‘生的æ¢å¤é‡è¶Šå¤§ã€‚"
+msgstr "跨越 Z 轴的旋转æ¢å¤é‡ã€‚越低,å‘生的æ¢å¤é‡è¶Šå¤§ã€‚"
#: doc/classes/Generic6DOFJoint.xml
msgid "The speed of all rotations across the Z axis."
-msgstr "跨越Z轴的所有旋转的速度。"
+msgstr "跨越 Z 轴的所有旋转的速度。"
#: doc/classes/Generic6DOFJoint.xml
msgid ""
"The minimum rotation in positive direction to break loose and rotate around "
"the Z axis."
-msgstr "正方å‘çš„æœ€å°æ—‹è½¬ï¼Œå¹¶ç»•Z轴旋转。"
+msgstr "正方å‘çš„æœ€å°æ—‹è½¬ï¼Œå¹¶ç»• Z 轴旋转。"
#: doc/classes/Generic6DOFJoint.xml
msgid "If [code]true[/code], a rotating motor at the X axis is enabled."
@@ -31237,11 +31380,11 @@ msgstr "如果为 [code]true[/code],则å¯ç”¨ X 轴的旋转马达。"
#: doc/classes/Generic6DOFJoint.xml
msgid "Maximum acceleration for the motor at the X axis."
-msgstr "在X轴旋转的最大加速度。"
+msgstr "在 X 轴旋转的最大加速度。"
#: doc/classes/Generic6DOFJoint.xml
msgid "Target speed for the motor at the X axis."
-msgstr "X轴上电机的目标速度。"
+msgstr "X 轴上电机的目标速度。"
#: doc/classes/Generic6DOFJoint.xml
msgid "If [code]true[/code], a rotating motor at the Y axis is enabled."
@@ -31249,11 +31392,11 @@ msgstr "如果为 [code]true[/code],则å¯ç”¨ Y 轴的旋转马达。"
#: doc/classes/Generic6DOFJoint.xml
msgid "Maximum acceleration for the motor at the Y axis."
-msgstr "电机在X轴的最大加速度。"
+msgstr "电机在 X 轴的最大加速度。"
#: doc/classes/Generic6DOFJoint.xml
msgid "Target speed for the motor at the Y axis."
-msgstr "电机在Y轴的目标速度。"
+msgstr "电机在 Y 轴的目标速度。"
#: doc/classes/Generic6DOFJoint.xml
msgid "If [code]true[/code], a rotating motor at the Z axis is enabled."
@@ -31261,15 +31404,15 @@ msgstr "如果为 [code]true[/code],则å¯ç”¨ Z 轴的旋转马达。"
#: doc/classes/Generic6DOFJoint.xml
msgid "Maximum acceleration for the motor at the Z axis."
-msgstr "电机在Z轴的最大加速度。"
+msgstr "电机在 Z 轴的最大加速度。"
#: doc/classes/Generic6DOFJoint.xml
msgid "Target speed for the motor at the Z axis."
-msgstr "Z轴上电机的目标速度。"
+msgstr "Z 轴上电机的目标速度。"
#: doc/classes/Generic6DOFJoint.xml
msgid "The amount of damping that happens at the X motion."
-msgstr "å‘生在Xè¿åŠ¨çš„é˜»å°¼é‡ã€‚"
+msgstr "å‘生在 X è¿åŠ¨çš„é˜»å°¼é‡ã€‚"
#: doc/classes/Generic6DOFJoint.xml
msgid "If [code]true[/code], the linear motion across the X axis is limited."
@@ -31283,13 +31426,13 @@ msgstr "轴心点的 X 轴之间的最å°å·®å¼‚。"
msgid ""
"The amount of restitution on the X axis movement. The lower, the more "
"momentum gets lost."
-msgstr "Xè½´è¿åŠ¨çš„æ¢å¤é‡ã€‚è¶Šä½Žï¼ŒåŠ¨é‡æŸå¤±è¶Šå¤§ã€‚"
+msgstr "X è½´è¿åŠ¨çš„æ¢å¤é‡ã€‚è¶Šä½Žï¼ŒåŠ¨é‡æŸå¤±è¶Šå¤§ã€‚"
#: doc/classes/Generic6DOFJoint.xml
msgid ""
"A factor applied to the movement across the X axis. The lower, the slower "
"the movement."
-msgstr "应用于X轴上移动的一个系数。值越低,移动的就越慢。"
+msgstr "应用于 X 轴上移动的一个系数。值越低,移动的就越慢。"
#: doc/classes/Generic6DOFJoint.xml
msgid "The maximum difference between the pivot points' X axis."
@@ -31297,7 +31440,7 @@ msgstr "轴心点的 X 轴之间的最大差异。"
#: doc/classes/Generic6DOFJoint.xml
msgid "The amount of damping that happens at the Y motion."
-msgstr "å‘生在Yè¿åŠ¨çš„é˜»å°¼é‡ã€‚"
+msgstr "å‘生在 Y è¿åŠ¨çš„é˜»å°¼é‡ã€‚"
#: doc/classes/Generic6DOFJoint.xml
msgid "If [code]true[/code], the linear motion across the Y axis is limited."
@@ -31311,13 +31454,13 @@ msgstr "轴心点的 Y 轴之间的最å°å·®å¼‚。"
msgid ""
"The amount of restitution on the Y axis movement. The lower, the more "
"momentum gets lost."
-msgstr "Yè½´è¿åŠ¨çš„æ¢å¤é‡ã€‚å€¼è¶Šä½Žï¼ŒåŠ¨é‡æŸå¤±è¶Šå¤§ã€‚"
+msgstr "Y è½´è¿åŠ¨çš„æ¢å¤é‡ã€‚å€¼è¶Šä½Žï¼ŒåŠ¨é‡æŸå¤±è¶Šå¤§ã€‚"
#: doc/classes/Generic6DOFJoint.xml
msgid ""
"A factor applied to the movement across the Y axis. The lower, the slower "
"the movement."
-msgstr "应用于Y轴上移动的一个系数。值越低,移动的就越慢。"
+msgstr "应用于 Y 轴上移动的一个系数。值越低,移动的就越慢。"
#: doc/classes/Generic6DOFJoint.xml
msgid "The maximum difference between the pivot points' Y axis."
@@ -31325,7 +31468,7 @@ msgstr "轴心点的 Y 轴之间的最大差异。"
#: doc/classes/Generic6DOFJoint.xml
msgid "The amount of damping that happens at the Z motion."
-msgstr "å‘生在Zè¿åŠ¨çš„é˜»å°¼é‡ã€‚"
+msgstr "å‘生在 Z è¿åŠ¨çš„é˜»å°¼é‡ã€‚"
#: doc/classes/Generic6DOFJoint.xml
msgid "If [code]true[/code], the linear motion across the Z axis is limited."
@@ -31339,13 +31482,13 @@ msgstr "轴心点的 Z 轴之间的最å°å·®å¼‚。"
msgid ""
"The amount of restitution on the Z axis movement. The lower, the more "
"momentum gets lost."
-msgstr "Yè½´è¿åŠ¨çš„æ¢å¤é‡ã€‚è¶Šä½Žï¼ŒåŠ¨é‡æŸå¤±è¶Šå¤§ã€‚"
+msgstr "Y è½´è¿åŠ¨çš„æ¢å¤é‡ã€‚è¶Šä½Žï¼ŒåŠ¨é‡æŸå¤±è¶Šå¤§ã€‚"
#: doc/classes/Generic6DOFJoint.xml
msgid ""
"A factor applied to the movement across the Z axis. The lower, the slower "
"the movement."
-msgstr "适用于跨Z轴移动的一个系数。值越低,移动的就越慢。"
+msgstr "适用于跨 Z 轴移动的一个系数。值越低,移动的就越慢。"
#: doc/classes/Generic6DOFJoint.xml
msgid "The maximum difference between the pivot points' Z axis."
@@ -31363,11 +31506,11 @@ msgstr ""
msgid ""
"The maximum force the linear motor can apply on the X axis while trying to "
"reach the target velocity."
-msgstr "当å°è¯•达到目标速度时,线性马达å¯ä»¥åœ¨X轴上应用的最大力。"
+msgstr "当å°è¯•达到目标速度时,线性马达å¯ä»¥åœ¨ X 轴上应用的最大力。"
#: doc/classes/Generic6DOFJoint.xml
msgid "The speed that the linear motor will attempt to reach on the X axis."
-msgstr "线性马达在X轴上å°è¯•达到的速度。"
+msgstr "线性马达在 X 轴上å°è¯•达到的速度。"
#: doc/classes/Generic6DOFJoint.xml
msgid ""
@@ -31381,11 +31524,11 @@ msgstr ""
msgid ""
"The maximum force the linear motor can apply on the Y axis while trying to "
"reach the target velocity."
-msgstr "ç›´çº¿ç”µæœºåœ¨è¯•å›¾è¾¾åˆ°ç›®æ ‡é€Ÿåº¦æ—¶å¯æ–½åŠ åœ¨Y轴上的最大力。"
+msgstr "ç›´çº¿ç”µæœºåœ¨è¯•å›¾è¾¾åˆ°ç›®æ ‡é€Ÿåº¦æ—¶å¯æ–½åŠ åœ¨ Y 轴上的最大力。"
#: doc/classes/Generic6DOFJoint.xml
msgid "The speed that the linear motor will attempt to reach on the Y axis."
-msgstr "线性马达在Y轴上将会达到的速度。"
+msgstr "线性马达在 Y 轴上将会达到的速度。"
#: doc/classes/Generic6DOFJoint.xml
msgid ""
@@ -31399,11 +31542,11 @@ msgstr ""
msgid ""
"The maximum force the linear motor can apply on the Z axis while trying to "
"reach the target velocity."
-msgstr "当试图达到目标速度时,线性马达å¯ä»¥åœ¨X轴上应用的最大力。"
+msgstr "当试图达到目标速度时,线性马达å¯ä»¥åœ¨ X 轴上应用的最大力。"
#: doc/classes/Generic6DOFJoint.xml
msgid "The speed that the linear motor will attempt to reach on the Z axis."
-msgstr "线性马达在Z轴上试图达到的速度。"
+msgstr "线性马达在 Z 轴上试图达到的速度。"
#: doc/classes/Generic6DOFJoint.xml doc/classes/PhysicsServer.xml
msgid "The minimum difference between the pivot points' axes."
@@ -31460,7 +31603,7 @@ msgstr "所有跨轴旋转的速度。"
msgid ""
"The amount of rotational damping across the axes. The lower, the more "
"dampening occurs."
-msgstr "跨越Z轴的旋转阻尼é‡ã€‚值越低,å‘生的阻尼就越多。"
+msgstr "跨越 Z 轴的旋转阻尼é‡ã€‚值越低,å‘生的阻尼就越多。"
#: doc/classes/Generic6DOFJoint.xml doc/classes/PhysicsServer.xml
msgid ""
@@ -31471,7 +31614,7 @@ msgstr "在å„轴上的旋转æ¢å¤é‡ã€‚值越低,å‘生的æ¢å¤é‡è¶Šå¤§ã€‚
#: doc/classes/Generic6DOFJoint.xml doc/classes/PhysicsServer.xml
msgid ""
"The maximum amount of force that can occur, when rotating around the axes."
-msgstr "围绕Z轴旋转时,å¯èƒ½å‘生的最大力。"
+msgstr "围绕 Z 轴旋转时,å¯èƒ½å‘生的最大力。"
#: doc/classes/Generic6DOFJoint.xml
msgid ""
@@ -31507,7 +31650,7 @@ msgstr "如果å¯ç”¨ï¼Œåˆ™å­˜åœ¨è·¨è¿™äº›è½´çš„线性马达。"
#: doc/classes/Generic6DOFJoint.xml doc/classes/HingeJoint.xml
msgid "Represents the size of the [enum Flag] enum."
-msgstr "表示[enum Flag]枚举的大å°ã€‚"
+msgstr "表示 [enum Flag] 枚举的大å°ã€‚"
#: doc/classes/Geometry.xml
msgid "Helper node to calculate generic geometry operations."
@@ -31528,8 +31671,8 @@ msgid ""
"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 ""
-"返回一个包å«6个[Plane]的数组,æè¿°ä»¥åŽŸç‚¹ä¸ºä¸­å¿ƒçš„ç›’å­çš„边。盒å­çš„大å°ç”±"
-"[code]extents[/code]定义,它代表盒å­çš„一个(正)角(å³å…¶å®žé™…大å°çš„一åŠï¼‰ã€‚"
+"è¿”å›žä¸€ä¸ªåŒ…å« 6 个 [Plane] 的数组,æè¿°ä»¥åŽŸç‚¹ä¸ºä¸­å¿ƒçš„ç›’å­çš„边。盒å­çš„大å°ç”± "
+"[code]extents[/code] 定义,它代表盒å­çš„一个(正)角(å³å…¶å®žé™…大å°çš„一åŠï¼‰ã€‚"
#: doc/classes/Geometry.xml
msgid ""
@@ -31541,10 +31684,11 @@ msgid ""
"[code]axis[/code] describes the axis along which the capsule is oriented (0 "
"for X, 1 for Y, 2 for Z)."
msgstr ""
-"返回一个[Plane]数组,该数组紧密地绑定ç€ä¸€ä¸ªä»¥åŽŸç‚¹ä¸ºä¸­å¿ƒï¼ŒåŠå¾„为[code]radius[/"
-"code],高度为[code]height[/code]çš„é¢çŠ¶èƒ¶å›Šã€‚å‚æ•°[code]side[/code]定义了将为胶"
-"囊的侧é¢éƒ¨åˆ†ç”Ÿæˆå¤šå°‘个平é¢ï¼Œè€Œ[code]lats[/code]则给出了胶囊底部和顶部的纬å‘阶"
-"æ¢¯æ•°ã€‚å‚æ•°[code]axis[/code]æè¿°äº†èƒ¶å›Šçš„æ–¹å‘轴(0为X,1为Y,2为Z)。"
+"返回一个 [Plane] 数组,该数组紧密地绑定ç€ä¸€ä¸ªä»¥åŽŸç‚¹ä¸ºä¸­å¿ƒï¼ŒåŠå¾„为 "
+"[code]radius[/code],高度为 [code]height[/code] çš„é¢çŠ¶èƒ¶å›Šã€‚å‚æ•° [code]side[/"
+"code] 定义了将为胶囊的侧é¢éƒ¨åˆ†ç”Ÿæˆå¤šå°‘个平é¢ï¼Œè€Œ [code]lats[/code] 则给出了胶"
+"囊底部和顶部的纬å‘é˜¶æ¢¯æ•°ã€‚å‚æ•° [code]axis[/code] æè¿°äº†èƒ¶å›Šçš„æ–¹å‘轴(0 代表 "
+"Xã€1 代表 Yã€2 代表 Z)。"
#: doc/classes/Geometry.xml
msgid ""
@@ -31555,18 +31699,18 @@ msgid ""
"describes the axis along which the cylinder is oriented (0 for X, 1 for Y, 2 "
"for Z)."
msgstr ""
-"返回一个[Plane]数组,该数组紧密绑定以原点为中心的切é¢åœ†æŸ±ä½“,其åŠå¾„为"
-"[code]radius[/code],高度为[code]height[/code]ã€‚å‚æ•°[code]side[/code]定义了将"
-"为圆柱体的圆形部分生æˆå¤šå°‘个平é¢ã€‚傿•°[code]axis[/code]æè¿°äº†åœ†æŸ±ä½“的方å‘è½´"
-"(0代表X,1代表Y,2代表Z)。"
+"返回一个 [Plane] 数组,该数组紧密绑定以原点为中心的切é¢åœ†æŸ±ä½“,其åŠå¾„为 "
+"[code]radius[/code],高度为 [code]height[/code]ã€‚å‚æ•° [code]side[/code] 定义"
+"了将为圆柱体的圆形部分生æˆå¤šå°‘个平é¢ã€‚傿•° [code]axis[/code] æè¿°äº†åœ†æŸ±ä½“的方"
+"å‘轴(0 代表 Xã€1 代表 Yã€2 代表 Z)。"
#: doc/classes/Geometry.xml
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 ""
-"将[code]point[/code]中的点所定义的多边形与[code]plane[/code]进行对比,并返回"
-"被剪切的多边形的点。"
+"将 [code]point[/code] 中的点所定义的多边形与 [code]plane[/code] 进行对比,并"
+"返回被剪切的多边形的点。"
#: doc/classes/Geometry.xml
msgid ""
@@ -31578,11 +31722,13 @@ msgid ""
"outer polygon (boundary) and inner polygon (hole) which could be "
"distinguished by calling [method is_polygon_clockwise]."
msgstr ""
-"将[code]polygon_a[/code]与[code]polygon_b[/code]进行对比,并返回一个被剪切的"
-"多边形数组。这在多边形之间执行[constant OPERATION_DIFFERENCE]。如果"
-"[code]polygon_b[/code]与[code]polygon_a[/code]完全é‡åˆï¼Œåˆ™è¿”回一个空数组。\n"
-"如果[code]polygon_b[/code]被[code]polygon_a[/code]包围,返回一个外部多边形"
-"(边界)和内部多边形(孔),å¯ä»¥é€šè¿‡è°ƒç”¨[method is_polygon_clockwise]æ¥åŒºåˆ†ã€‚"
+"将 [code]polygon_a[/code] 与 [code]polygon_b[/code] 进行对比,并返回一个被剪"
+"切的多边形数组。这在多边形之间执行 [constant OPERATION_DIFFERENCE]。如果 "
+"[code]polygon_b[/code] 与 [code]polygon_a[/code] 完全é‡åˆï¼Œåˆ™è¿”回一个空数"
+"组。\n"
+"如果 [code]polygon_b[/code] 被 [code]polygon_a[/code] 包围,返回一个外部多边"
+"形(边界)和内部多边形(孔),å¯ä»¥é€šè¿‡è°ƒç”¨ [method is_polygon_clockwise] æ¥åŒº"
+"分。"
#: doc/classes/Geometry.xml
msgid ""
@@ -31591,16 +31737,16 @@ msgid ""
"between the polyline and the polygon. This operation can be thought of as "
"cutting a line with a closed shape."
msgstr ""
-"将[code]polyline[/code]与[code]polygon[/code]相对应,并返回一个折线数组。在折"
-"线和多边形之间执行[constant OPERATION_DIFFERENCE]。这个æ“作å¯ä»¥è¢«è®¤ä¸ºæ˜¯ç”¨ä¸€ä¸ª"
-"å°é—­çš„形状切割一æ¡çº¿ã€‚"
+"将 [code]polyline[/code] 与 [code]polygon[/code] 相对应,并返回一个折线数组。"
+"在折线和多边形之间执行 [constant OPERATION_DIFFERENCE]。这个æ“作å¯ä»¥è¢«è®¤ä¸ºæ˜¯"
+"用一个å°é—­çš„形状切割一æ¡çº¿ã€‚"
#: doc/classes/Geometry.xml
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 ""
-"给出一个[Vector2]s的数组,以逆时针的顺åºè¿”回凸é¢çš„点的列表。最åŽä¸€ä¸ªç‚¹ä¸Žç¬¬ä¸€"
+"给出一个 [Vector2] 的数组,以逆时针的顺åºè¿”回凸é¢çš„点的列表。最åŽä¸€ä¸ªç‚¹ä¸Žç¬¬ä¸€"
"个点相åŒã€‚"
#: doc/classes/Geometry.xml
@@ -31627,8 +31773,8 @@ msgid ""
"that is closest to [code]point[/code]. The returned point will always be "
"inside the specified segment."
msgstr ""
-"返回3D部份([code]s1[/code], [code]s2[/code])上离[code]point[/code]最近的3D"
-"点。返回的点将总是在指定的部份内。"
+"返回 3D 线段([code]s1[/code], [code]s2[/code])上离 [code]point[/code] 最近"
+"的 3D 点。返回的点将总是在指定的部份内。"
#: doc/classes/Geometry.xml
msgid ""
@@ -31636,8 +31782,8 @@ msgid ""
"that is closest to [code]point[/code]. The returned point will always be "
"inside the specified segment."
msgstr ""
-"返回2D段([code]s1[/code], [code]s2[/code])上最接近[code]point[/code]的2D"
-"点。返回的点将总是在指定的线段内。"
+"返回 2D 线段 ([code]s1[/code], [code]s2[/code]) 上离 [code]point[/code] 最近"
+"的 2D 点。返回的点将总是在指定的线段内。"
#: doc/classes/Geometry.xml
msgid ""
@@ -31882,8 +32028,8 @@ msgid ""
msgstr ""
"给出2D线段([code]segment_from[/code],[code]segment_to[/code]),返回线段上"
"与圆心为 [code]circle_position[/code] ã€åŠå¾„为 [code]circle_radius[/code] 圆"
-"的相交ä½ç½®ï¼ˆä»¥0到1之间的数字)。如果线段没有与圆相交,则返回-1(如果延伸线段"
-"çš„çº¿æ®µä¸Žåœ†ç›¸äº¤ï¼Œä½†çº¿æ®µæ²¡æœ‰ç›¸äº¤ï¼Œä¹Ÿæ˜¯è¿™ç§æƒ…况)。"
+"的相交ä½ç½®ï¼ˆä»¥0 到 1之间的数字)。如果线段没有与圆相交,则返回-1(如果延伸线"
+"æ®µçš„çº¿æ®µä¸Žåœ†ç›¸äº¤ï¼Œä½†çº¿æ®µæ²¡æœ‰ç›¸äº¤ï¼Œä¹Ÿæ˜¯è¿™ç§æƒ…况)。"
#: doc/classes/Geometry.xml
msgid ""
@@ -32003,7 +32149,7 @@ msgstr "åˆ›å»ºä¸»ä½“æˆ–å‰ªè¾‘å¤šè¾¹å½¢è¢«å¡«å……çš„åŒºåŸŸï¼Œä½†ä¸æ˜¯ä¸¤è€…都被
msgid ""
"Squaring is applied uniformally at all convex edge joins at [code]1 * delta[/"
"code]."
-msgstr "在[code]1 * delta[/code]的所有凸边连接处å‡åŒ€åœ°åº”用平方。"
+msgstr "在 [code]1 * delta[/code] 的所有凸边连接处å‡åŒ€åœ°åº”用平方。"
#: doc/classes/Geometry.xml
msgid ""
@@ -32027,13 +32173,13 @@ msgstr ""
msgid ""
"Endpoints are joined using the [enum PolyJoinType] value and the path filled "
"as a polygon."
-msgstr "端点使用[enum PolyJoinType]值连接,路径被填充为多边形。"
+msgstr "端点使用 [enum PolyJoinType] 值连接,路径被填充为多边形。"
#: doc/classes/Geometry.xml
msgid ""
"Endpoints are joined using the [enum PolyJoinType] value and the path filled "
"as a polyline."
-msgstr "端点使用[enum PolyJoinType]值连接,路径被填充为多边形线。"
+msgstr "端点使用 [enum PolyJoinType] 值连接,路径被填充为多边形线。"
#: doc/classes/Geometry.xml
msgid "Endpoints are squared off with no extension."
@@ -32041,11 +32187,11 @@ msgstr "端点是方形的,没有延伸。"
#: doc/classes/Geometry.xml
msgid "Endpoints are squared off and extended by [code]delta[/code] units."
-msgstr "端点被平方化并扩展了[code]delta[/code]å•ä½ã€‚"
+msgstr "端点被平方化并扩展了 [code]delta[/code] å•ä½ã€‚"
#: doc/classes/Geometry.xml
msgid "Endpoints are rounded off and extended by [code]delta[/code] units."
-msgstr "端点被四èˆäº”入,并以[code]delta[/code]为å•ä½è¿›è¡Œæ‰©å±•。"
+msgstr "端点被四èˆäº”入,并以 [code]delta[/code] 为å•ä½è¿›è¡Œæ‰©å±•。"
#: doc/classes/GeometryInstance.xml
msgid "Base node for geometry-based visual instances."
@@ -32061,7 +32207,7 @@ msgstr ""
#: doc/classes/GeometryInstance.xml
msgid ""
"Returns the [enum GeometryInstance.Flags] that have been set for this object."
-msgstr "返回为此对象设置的[enum GeometryInstance.Flags] 。"
+msgstr "返回为此对象设置的 [enum GeometryInstance.Flags] 。"
#: doc/classes/GeometryInstance.xml
msgid ""
@@ -32083,8 +32229,7 @@ msgstr ""
msgid ""
"The selected shadow casting flag. See [enum ShadowCastingSetting] for "
"possible values."
-msgstr ""
-"选择的阴影投射标志。转到 [enum ShadowCastingSetting] æ¥æŸ¥çœ‹è¯¥å±žæ€§å¯èƒ½çš„值。"
+msgstr "选择的阴影投射标志。å¯èƒ½çš„å–å€¼è§ [enum ShadowCastingSetting]。"
#: doc/classes/GeometryInstance.xml
msgid ""
@@ -32163,8 +32308,8 @@ 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。"
+"如果为 [code]true[/code],则在使用 [GIProbe] 或 [BakedLightmap] 烘焙ç¯å…‰æ—¶å°†"
+"使用此 GeometryInstance。"
#: doc/classes/GeometryInstance.xml
msgid "The generated lightmap texture will have the original size."
@@ -32218,8 +32363,8 @@ msgid ""
"Will allow the GeometryInstance to be used when baking lights using a "
"[GIProbe] or [BakedLightmap]."
msgstr ""
-"å°†å…许在使用[GIProbe]或[BakedLightmap]进行ç¯å…‰çƒ˜ç„™æ—¶ä½¿ç”¨GeometryInstance几何"
-"实例。"
+"å°†å…许在使用 [GIProbe] 或 [BakedLightmap] 进行ç¯å…‰çƒ˜ç„™æ—¶ä½¿ç”¨ "
+"GeometryInstance 几何实例。"
#: doc/classes/GeometryInstance.xml
msgid ""
@@ -32397,16 +32542,16 @@ 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 ""
-"使用64分区,这是最低的质é‡è®¾ç½®ï¼Œä½†ä¹Ÿæ˜¯æœ€å¿«çš„。如果你能使用它,特别是在低端硬"
-"件上使用它。"
+"使用 64 分区,这是最低的质é‡è®¾ç½®ï¼Œä½†ä¹Ÿæ˜¯æœ€å¿«çš„。如果你能使用它,特别是在低端"
+"硬件上使用它。"
#: doc/classes/GIProbe.xml
msgid "Use 128 subdivisions. This is the default quality setting."
-msgstr "使用128个分区。这是默认的质é‡è®¾ç½®ã€‚"
+msgstr "使用 128 个分区。这是默认的质é‡è®¾ç½®ã€‚"
#: doc/classes/GIProbe.xml
msgid "Use 256 subdivisions."
-msgstr "使用256个分区。"
+msgstr "使用 256 个分区。"
#: doc/classes/GIProbe.xml
msgid ""
@@ -32486,7 +32631,7 @@ msgstr ""
msgid ""
"The [Color] of the light. Defaults to white. A black color causes the light "
"to have no effect."
-msgstr "ç¯çš„[Color]。默认为白色。黑色会导致ç¯å…‰æ— æ•ˆã€‚"
+msgstr "ç¯çš„ [Color]。默认为白色。黑色会导致ç¯å…‰æ— æ•ˆã€‚"
#: modules/gltf/doc_classes/GLTFLight.xml
msgid ""
@@ -32532,8 +32677,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。"
+"ç¯å…‰çš„范围,超过这个范围ç¯å…‰æ— æ•ˆã€‚没有定义范围的 GLTF ç¯å…‰çš„行为与无é™èŒƒå›´çš„"
+"物ç†ç¯å…‰ä¸€æ ·ã€‚当创建 Godot ç¯å…‰æ—¶ï¼ŒèŒƒå›´é™åˆ¶åœ¨ 4096。"
#: modules/gltf/doc_classes/GLTFLight.xml
msgid ""
@@ -32541,8 +32686,8 @@ msgid ""
"and \"directional\", which correspond to Godot's [OmniLight], [SpotLight], "
"and [DirectionalLight] respectively."
msgstr ""
-"ç¯å…‰çš„类型。Godot接å—的值是 \"point\"ã€\"spot\"å’Œ \"directional\",分别对应于"
-"Godotçš„[OmniLight]ã€[SpotLight]å’Œ[DirectionalLight]。"
+"ç¯å…‰çš„类型。Godot 接å—的值是“pointâ€â€œspotâ€â€œdirectionalâ€ï¼Œåˆ†åˆ«å¯¹åº”于 Godot çš„ "
+"[OmniLight]ã€[SpotLight]ã€[DirectionalLight]。"
#: modules/gltf/doc_classes/GLTFMesh.xml
msgid ""
@@ -32605,7 +32750,7 @@ msgstr ""
#: modules/mono/doc_classes/GodotSharp.xml
msgid "Bridge between Godot and the Mono runtime (Mono-enabled builds only)."
-msgstr "Godotå’ŒMonoè¿è¡Œæ—¶ä¹‹é—´çš„æ¡¥æ¢ï¼ˆä»…支æŒMono的构建)。"
+msgstr "Godot å’Œ Mono è¿è¡Œæ—¶ä¹‹é—´çš„æ¡¥æ¢ï¼ˆä»…æ”¯æŒ Mono 的构建)。"
#: modules/mono/doc_classes/GodotSharp.xml
msgid ""
@@ -32614,17 +32759,17 @@ msgid ""
"builds.\n"
"See also [CSharpScript]."
msgstr ""
-"该类是连接Godotå’ŒMonoè¿è¡Œæ—¶çš„æ¡¥æ¢ã€‚它暴露了一些低级别的æ“作,åªåœ¨æ”¯æŒMonoçš„"
-"Godot构建中å¯ç”¨ã€‚\n"
-"å‚阅[CSharpScript] 。"
+"该类是连接 Godot å’Œ Mono è¿è¡Œæ—¶çš„æ¡¥æ¢ã€‚它暴露了一些低级别的æ“作,åªåœ¨æ”¯æŒ "
+"Mono çš„ Godot 构建中å¯ç”¨ã€‚\n"
+"å‚阅 [CSharpScript] 。"
#: modules/mono/doc_classes/GodotSharp.xml
msgid "Attaches the current thread to the Mono runtime."
-msgstr "将当å‰çº¿ç¨‹è¿žæŽ¥åˆ°Monoè¿è¡Œæ—¶ã€‚"
+msgstr "将当å‰çº¿ç¨‹è¿žæŽ¥åˆ° Mono è¿è¡Œæ—¶ã€‚"
#: modules/mono/doc_classes/GodotSharp.xml
msgid "Detaches the current thread from the Mono runtime."
-msgstr "将当å‰çº¿ç¨‹ä»ŽMonoè¿è¡Œæ—¶ä¸­åˆ†ç¦»å‡ºæ¥ã€‚"
+msgstr "将当å‰çº¿ç¨‹ä»Ž Mono è¿è¡Œæ—¶ä¸­åˆ†ç¦»å‡ºæ¥ã€‚"
#: modules/mono/doc_classes/GodotSharp.xml
msgid ""
@@ -32633,9 +32778,9 @@ msgid ""
"(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 ""
-"返回当å‰çš„MonoDomain ID。\n"
-"[b]注æ„:[/b]Monoè¿è¡Œæ—¶å¿…须被åˆå§‹åŒ–,这个方法æ‰èƒ½å·¥ä½œï¼ˆä½¿ç”¨ [method "
-"is_runtime_initialized] æ¥æ£€æŸ¥ï¼‰ã€‚如果在调用这个方法的时候,Monoè¿è¡Œæ—¶æ²¡æœ‰è¢«"
+"返回当å‰çš„ MonoDomain ID。\n"
+"[b]注æ„:[/b]Mono è¿è¡Œæ—¶å¿…须被åˆå§‹åŒ–,这个方法æ‰èƒ½å·¥ä½œï¼ˆä½¿ç”¨ [method "
+"is_runtime_initialized] æ¥æ£€æŸ¥ï¼‰ã€‚如果在调用这个方法的时候,Mono è¿è¡Œæ—¶æ²¡æœ‰è¢«"
"åˆå§‹åŒ–,引擎将崩溃。"
#: modules/mono/doc_classes/GodotSharp.xml
@@ -32646,10 +32791,10 @@ msgid ""
"(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 ""
-"返回scripts MonoDomainçš„ID。这将是与 [method get_domain_id] 相åŒçš„MonoDomain "
-"ID,除éžscripts domain没有被加载。\n"
-"[b]注æ„:[/b]Monoè¿è¡Œæ—¶å¿…须被åˆå§‹åŒ–,这个方法æ‰èƒ½å·¥ä½œï¼ˆä½¿ç”¨ [method "
-"is_runtime_initialized] æ¥æ£€æŸ¥ï¼‰ã€‚如果在调用这个方法的时候,Monoè¿è¡Œæ—¶æ²¡æœ‰è¢«"
+"返回脚本 MonoDomain çš„ ID。这将是与 [method get_domain_id] 相åŒçš„ MonoDomain "
+"ID,除éžè„šæœ¬åŸŸæ²¡æœ‰è¢«åŠ è½½ã€‚\n"
+"[b]注æ„:[/b]Mono è¿è¡Œæ—¶å¿…须被åˆå§‹åŒ–,这个方法æ‰èƒ½å·¥ä½œï¼ˆä½¿ç”¨ [method "
+"is_runtime_initialized] æ¥æ£€æŸ¥ï¼‰ã€‚如果在调用这个方法的时候,Mono è¿è¡Œæ—¶æ²¡æœ‰è¢«"
"åˆå§‹åŒ–,引擎将会崩溃。"
#: modules/mono/doc_classes/GodotSharp.xml
@@ -32664,7 +32809,7 @@ msgid ""
"Returns [code]true[/code] if the Mono runtime is initialized, [code]false[/"
"code] otherwise."
msgstr ""
-"如果Monoè¿è¡Œæ—¶è¢«åˆå§‹åŒ–,返回 [code]true[/code] ,å¦åˆ™è¿”回 [code]false[/"
+"如果 Mono è¿è¡Œæ—¶è¢«åˆå§‹åŒ–,返回 [code]true[/code] ,å¦åˆ™è¿”回 [code]false[/"
"code] 。"
#: modules/mono/doc_classes/GodotSharp.xml
@@ -32672,7 +32817,7 @@ msgid ""
"Returns [code]true[/code] if the Mono runtime is shutting down, [code]false[/"
"code] otherwise."
msgstr ""
-"如果Monoè¿è¡Œæ—¶æ­£åœ¨å…³é—­ï¼Œè¿”回 [code]true[/code] ,å¦åˆ™è¿”回 [code]false[/"
+"如果 Mono è¿è¡Œæ—¶æ­£åœ¨å…³é—­ï¼Œè¿”回 [code]true[/code] ,å¦åˆ™è¿”回 [code]false[/"
"code] 。"
#: modules/mono/doc_classes/GodotSharp.xml
@@ -32768,19 +32913,21 @@ msgid ""
"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])."
+"at fixed steps (see [member width]). See also [GradientTexture2D] and "
+"[CurveTexture]."
msgstr ""
-"GradientTexture使用[Gradient]æ¥å¡«å……çº¹ç†æ•°æ®ã€‚æ¸å˜å°†ä½¿ç”¨ä»Žä¸­èŽ·å¾—çš„é¢œè‰²ä»Žå·¦åˆ°å³"
-"填充。这æ„味ç€çº¹ç†ä¸ä¸€å®šä»£è¡¨æ¸å˜çš„精确副本,而是以固定的步长从æ¸å˜ä¸­èŽ·å¾—çš„æ ·"
-"本的æ’值,è§[member width]。"
+"GradientTexture 使用 [Gradient] æ¥å¡«å……çº¹ç†æ•°æ®ã€‚æ¸å˜å°†ä½¿ç”¨ä»Žä¸­èŽ·å¾—çš„é¢œè‰²ä»Žå·¦"
+"到å³å¡«å……。这æ„味ç€çº¹ç†ä¸ä¸€å®šä»£è¡¨æ¸å˜çš„精确副本,而是以固定的步长从æ¸å˜ä¸­èŽ·å¾—"
+"的样本的æ’å€¼ï¼ˆè§ [member width])。å¦è¯·å‚阅 [GradientTexture2D] å’Œ "
+"[CurveTexture]。"
#: doc/classes/GradientTexture.xml
msgid "The [Gradient] that will be used to fill the texture."
-msgstr "将用于填充纹ç†çš„[Gradient]。"
+msgstr "将用于填充纹ç†çš„ [Gradient]。"
#: doc/classes/GradientTexture.xml
msgid "The number of color samples that will be obtained from the [Gradient]."
-msgstr "将从[Gradient]中获得的颜色样本的数é‡ã€‚"
+msgstr "将从 [Gradient] 中获得的颜色样本的数é‡ã€‚"
#: doc/classes/GradientTexture2D.xml
msgid "Gradient-filled 2D texture."
@@ -32793,12 +32940,13 @@ msgid ""
"repeat] types using colors obtained from the gradient. 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] and [member height])."
+"[member width] and [member height]). See also [GradientTexture] and "
+"[CurveTexture]."
msgstr ""
"该纹ç†ä½¿ç”¨ [Gradient] æ¸å˜æ¥å¡«å…… 2D ç©ºé—´çº¹ç†æ•°æ®ã€‚æ¸å˜ä¼šæ ¹æ® [member fill] "
"å’Œ [member repeat] 类型,使用从æ¸å˜ä¸­èŽ·å–çš„é¢œè‰²è¿›è¡Œå¡«å……ã€‚è¯¥çº¹ç†æœªå¿…精确表示该"
-"æ¸å˜ï¼Œå¯ä»¥æ˜¯ä»Žè¯¥æ¸å˜ä¸ŠæŒ‰ç…§å›ºå®šæ­¥é•¿è¿›è¡Œé‡‡æ ·åŽå†è¿›è¡Œæ’值(请å‚阅 [member "
-"width] 和 [member height])。"
+"æ¸å˜ï¼Œå¯ä»¥æ˜¯ä»Žè¯¥æ¸å˜ä¸ŠæŒ‰ç…§å›ºå®šæ­¥é•¿è¿›è¡Œé‡‡æ ·åŽå†è¿›è¡Œæ’å€¼ï¼ˆè§ [member width] å’Œ "
+"[member height])。å¦è¯·å‚阅 [GradientTexture] å’Œ [CurveTexture]。"
#: doc/classes/GradientTexture2D.xml
msgid ""
@@ -33018,17 +33166,17 @@ msgid ""
"[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 ""
-"将[code]from[/code]的[code]from_port[/code]和[code]to[/code]的[code]to_port[/"
-"code]之间的连接的颜色纹ç†è®¾ç½®ä¸ºå½“剿­£åœ¨ä½¿ç”¨[code]activity[/code]的主题中的颜"
-"色。"
+"将 [code]from[/code] 的 [code]from_port[/code] 和 [code]to[/code] 的 "
+"[code]to_port[/code] 之间的连接的颜色纹ç†è®¾ç½®ä¸ºå½“剿­£åœ¨ä½¿ç”¨ [code]activity[/"
+"code] 的主题中的颜色。"
#: doc/classes/GraphEdit.xml
msgid "Sets the specified [code]node[/code] as the one selected."
-msgstr "选中一个特定的节点[code]node[/code]."
+msgstr "选中一个特定的节点 [code]node[/code]."
#: doc/classes/GraphEdit.xml
msgid "If [code]true[/code], the minimap is visible."
-msgstr "如果[code]true[/code],å°å›¾æ˜¯å¯è§çš„。"
+msgstr "如果为 [code]true[/code],å°å›¾æ˜¯å¯è§çš„。"
#: doc/classes/GraphEdit.xml
msgid "The opacity of the minimap rectangle."
@@ -33045,7 +33193,8 @@ msgid ""
"If [code]true[/code], enables disconnection of existing connections in the "
"GraphEdit by dragging the right end."
msgstr ""
-"如果[code]true[/code],通过拖动å³ç«¯ï¼Œå¯ä»¥æ–­å¼€å›¾å½¢ç¼–辑GraphEdit中现有的连接。"
+"如果为 [code]true[/code],通过拖动å³ç«¯ï¼Œå¯ä»¥æ–­å¼€å›¾å½¢ç¼–辑GraphEdit中现有的连"
+"接。"
#: doc/classes/GraphEdit.xml
msgid "The scroll offset."
@@ -33056,11 +33205,11 @@ 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],则使当å‰ç¼©æ”¾çº§åˆ«çš„æ ‡ç­¾å¯è§ã€‚缩放值以百分比显示。"
+"如果为 [code]true[/code],则使当å‰ç¼©æ”¾çº§åˆ«çš„æ ‡ç­¾å¯è§ã€‚缩放值以百分比显示。"
#: doc/classes/GraphEdit.xml
msgid "The snapping distance in pixels."
-msgstr "å¸é™„è·ç¦»(以åƒç´ ä¸ºå•ä½)。"
+msgstr "å¸é™„è·ç¦»ï¼Œå•ä½ä¸ºåƒç´ ã€‚"
#: doc/classes/GraphEdit.xml
msgid "If [code]true[/code], enables snapping."
@@ -33084,11 +33233,11 @@ msgstr "æ¯ä¸ªç¼©æ”¾çº§åˆ«çš„æ­¥é•¿ã€‚"
#: doc/classes/GraphEdit.xml
msgid "Emitted at the beginning of a GraphNode movement."
-msgstr "在图形节点GraphNode移动开始时å‘出。"
+msgstr "在 GraphNode 移动开始时å‘出。"
#: doc/classes/GraphEdit.xml
msgid "Emitted at the end of a GraphNode movement."
-msgstr "在图形节点GraphNodeç§»åŠ¨ç»“æŸæ—¶å‘出。"
+msgstr "在 GraphNode ç§»åŠ¨ç»“æŸæ—¶å‘出。"
#: doc/classes/GraphEdit.xml
msgid ""
@@ -33114,7 +33263,7 @@ msgstr "当用户将输出端å£è¿žæŽ¥åˆ°å›¾å½¢çš„ç©ºä½æ—¶å‘出。"
#: doc/classes/GraphEdit.xml
msgid "Emitted when the user presses [code]Ctrl + C[/code]."
-msgstr "当用户按[code]Ctrl + C[/code]时触å‘。"
+msgstr "当用户按 [code]Ctrl + C[/code] 时触å‘。"
#: doc/classes/GraphEdit.xml
msgid ""
@@ -33138,15 +33287,15 @@ msgstr ""
#: doc/classes/GraphEdit.xml
msgid ""
"Emitted when a GraphNode is attempted to be duplicated in the GraphEdit."
-msgstr "当图形节点GraphNode试图在图形编辑GraphEdit中被å¤åˆ¶æ—¶å‘出的。"
+msgstr "当 GraphNode 试图在 GraphEdit 中被å¤åˆ¶æ—¶å‘出的。"
#: doc/classes/GraphEdit.xml
msgid "Emitted when a GraphNode is selected."
-msgstr "当图形节点GraphNode被选择时å‘出。"
+msgstr "当 GraphNode 被选择时å‘出。"
#: doc/classes/GraphEdit.xml
msgid "Emitted when the user presses [code]Ctrl + V[/code]."
-msgstr "当用户按下[code]Ctrl + V[/code]时触å‘。"
+msgstr "当用户按下 [code]Ctrl + V[/code] 时触å‘。"
#: doc/classes/GraphEdit.xml
msgid ""
@@ -33154,8 +33303,8 @@ msgid ""
"GraphEdit. [code]position[/code] is the position of the mouse pointer when "
"the signal is sent."
msgstr ""
-"å½“è¯·æ±‚å¼¹å‡ºçª—å£æ—¶å‘出。在图形编辑GraphEdit中å³é”®å•击时å‘ç”Ÿã€‚åæ ‡"
-"[code]position[/code] 是å‘é€ä¿¡å·æ—¶é¼ æ ‡æŒ‡é’ˆçš„ä½ç½®ã€‚"
+"å½“è¯·æ±‚å¼¹å‡ºçª—å£æ—¶å‘出。在 GraphEdit 中å³é”®å•击时å‘ç”Ÿã€‚åæ ‡ [code]position[/"
+"code] 是å‘é€ä¿¡å·æ—¶é¼ æ ‡æŒ‡é’ˆçš„ä½ç½®ã€‚"
#: doc/classes/GraphEdit.xml
msgid ""
@@ -33182,11 +33331,11 @@ msgstr "选择的矩形的轮廓颜色。"
#: doc/classes/GraphEdit.xml
msgid ""
"The horizontal range within which a port can be grabbed (on both sides)."
-msgstr "一个端å£å¯ä»¥è¢«æŠ“å–的水平范围(两侧)。"
+msgstr "端å£å¯ä»¥è¢«æŠ“å–的水平范围(两侧)。"
#: doc/classes/GraphEdit.xml
msgid "The vertical range within which a port can be grabbed (on both sides)."
-msgstr "一个端å£å¯ä»¥è¢«æŠ“å–的垂直范围(两侧)。"
+msgstr "端å£å¯ä»¥è¢«æŠ“å–的垂直范围(两侧)。"
#: doc/classes/GraphEdit.xml
msgid "The icon for the zoom out button."
@@ -33383,17 +33532,19 @@ msgstr ""
msgid ""
"Sets the left (input) type of the slot [code]idx[/code] to [code]type_left[/"
"code]."
-msgstr "å°†æ’æ§½[code]idx[/code]的左侧(输入)类型设置为[code]type_left[/code]。"
+msgstr ""
+"å°†æ’æ§½ [code]idx[/code] 的左侧(输入)类型设置为 [code]type_left[/code]。"
#: doc/classes/GraphNode.xml
msgid ""
"Sets the right (output) type of the slot [code]idx[/code] to "
"[code]type_right[/code]."
-msgstr "å°†æ’æ§½[code]idx[/code]çš„å³ï¼ˆè¾“出)类型设置为[code]type_right[/code]。"
+msgstr ""
+"å°†æ’æ§½ [code]idx[/code] çš„å³ä¾§ï¼ˆè¾“出)类型设置为 [code]type_right[/code]。"
#: doc/classes/GraphNode.xml
msgid "If [code]true[/code], the GraphNode is a comment node."
-msgstr "如果å¯ç”¨[code]true[/code],则GraphNode就是一个注释节点。"
+msgstr "如果为 [code]true[/code],则 GraphNode 是注释节点。"
#: doc/classes/GraphNode.xml
msgid ""
@@ -33402,12 +33553,12 @@ msgid ""
"[b]Note:[/b] You cannot use position directly, as [GraphEdit] is a "
"[Container]."
msgstr ""
-"图形节点 GraphNode çš„åç§»é‡ï¼Œä¸Ž [GraphEdit] 的滚动åç§»é‡ç›¸å…³ã€‚\n"
+"GraphNode çš„åç§»é‡ï¼Œä¸Ž [GraphEdit] 的滚动åç§»é‡ç›¸å…³ã€‚\n"
"[b]注æ„:[/b]由于 [GraphEdit] 是 [Container],因此ä¸èƒ½ç›´æŽ¥ä½¿ç”¨ä½ç½®ã€‚"
#: doc/classes/GraphNode.xml
msgid "Sets the overlay shown above the GraphNode. See [enum Overlay]."
-msgstr "设置在图形节点GraphNode上方显示的å åŠ å±‚ã€‚å‚阅[enum Overlay]。"
+msgstr "设置在 GraphNode 上方显示的å åŠ å±‚ã€‚è§ [enum Overlay]。"
#: doc/classes/GraphNode.xml
msgid ""
@@ -33415,13 +33566,13 @@ msgid ""
"[b]Note:[/b] Dragging the handle will only emit the [signal resize_request] "
"signal, the GraphNode needs to be resized manually."
msgstr ""
-"如果[code]true[/code],用户å¯ä»¥è°ƒæ•´å›¾å½¢èŠ‚ç‚¹GraphNode的大å°ã€‚\n"
+"如果为 [code]true[/code],用户å¯ä»¥è°ƒæ•´å›¾å½¢èŠ‚ç‚¹GraphNode的大å°ã€‚\n"
"[b]注æ„:[/b]拖动手柄åªä¼šå‘出 [signal resize_request] ä¿¡å·ï¼Œå›¾å½¢èŠ‚ç‚¹GraphNode"
"éœ€è¦æ‰‹åŠ¨è°ƒæ•´å¤§å°ã€‚"
#: doc/classes/GraphNode.xml
msgid "If [code]true[/code], the GraphNode is selected."
-msgstr "如果[code]true[/code],图形节点GraphNode被选中。"
+msgstr "如果为 [code]true[/code],图形节点GraphNode被选中。"
#: doc/classes/GraphNode.xml
msgid ""
@@ -33429,44 +33580,44 @@ msgid ""
"[b]Note:[/b] Pressing it will only emit the [signal close_request] signal, "
"the GraphNode needs to be removed manually."
msgstr ""
-"如果[code]true[/code],则关闭按钮将å¯è§ã€‚\n"
+"如果为 [code]true[/code],则关闭按钮将å¯è§ã€‚\n"
"[b]注æ„:[/b]按下它åªä¼šå‘出[signal close_request]ä¿¡å·ï¼Œéœ€è¦æ‰‹åŠ¨åˆ é™¤å›¾å½¢èŠ‚ç‚¹"
"GraphNode。"
#: doc/classes/GraphNode.xml
msgid "The text displayed in the GraphNode's title bar."
-msgstr "显示在图形节点GraphNode标题æ ä¸­çš„æ–‡æœ¬ã€‚"
+msgstr "显示在 GraphNode 标题æ ä¸­çš„æ–‡æœ¬ã€‚"
#: doc/classes/GraphNode.xml
msgid ""
"Emitted when the GraphNode is requested to be closed. Happens on clicking "
"the close button (see [member show_close])."
msgstr ""
-"当图形节点GraphNode被请求关闭时å‘出。在点击关闭按钮时å‘生(è§[member "
+"当 GraphNode 被请求关闭时å‘出。在点击关闭按钮时å‘ç”Ÿï¼ˆè§ [member "
"show_close])。"
#: doc/classes/GraphNode.xml
msgid "Emitted when the GraphNode is dragged."
-msgstr "当图形节点GraphNode被拖动时å‘出。"
+msgstr "当 GraphNode 被拖动时å‘出。"
#: doc/classes/GraphNode.xml
msgid "Emitted when the GraphNode is moved."
-msgstr "当图形节点GraphNode被移动时触å‘。"
+msgstr "当 GraphNode 被移动时触å‘。"
#: doc/classes/GraphNode.xml
msgid ""
"Emitted when the GraphNode is requested to be displayed over other ones. "
"Happens on focusing (clicking into) the GraphNode."
msgstr ""
-"当图形节点GraphNodeè¢«è¦æ±‚显示在其他节点之上时触å‘。在GraphNode获得焦点时触"
-"å‘,å³é¼ æ ‡ç‚¹å‡»è¿›å…¥ã€‚"
+"当 GraphNode è¢«è¦æ±‚显示在其他节点之上时触å‘。在 GraphNode 获得焦点时触å‘,å³"
+"鼠标点击进入。"
#: doc/classes/GraphNode.xml
msgid ""
"Emitted when the GraphNode is requested to be resized. Happens on dragging "
"the resizer handle (see [member resizable])."
msgstr ""
-"当图形节点GraphNodeè¢«è¦æ±‚è°ƒæ•´å¤§å°æ—¶å‘出。在拖动调整器手柄时å‘生(è§[member "
+"当 GraphNode è¢«è¦æ±‚è°ƒæ•´å¤§å°æ—¶å‘出。在拖动调整器手柄时å‘ç”Ÿï¼ˆè§ [member "
"resizable])。"
#: doc/classes/GraphNode.xml
@@ -33479,15 +33630,15 @@ msgstr "没有显示覆盖层。"
#: doc/classes/GraphNode.xml
msgid "Show overlay set in the [code]breakpoint[/code] theme property."
-msgstr "显示在[code]breakpoint[/code]主题属性中设置的覆盖层。"
+msgstr "显示在主题属性 [code]breakpoint[/code] 中设置的覆盖层。"
#: doc/classes/GraphNode.xml
msgid "Show overlay set in the [code]position[/code] theme property."
-msgstr "æ˜¾ç¤ºåœ¨ä¸»é¢˜åæ ‡[code]position[/code]属性中设置的å åŠ å±‚ã€‚"
+msgstr "显示在主题属性 [code]position[/code] 中设置的覆盖层。"
#: doc/classes/GraphNode.xml
msgid "The color modulation applied to the close button icon."
-msgstr "应用于关闭按钮图标的颜色调制(modulation)。"
+msgstr "应用于关闭按钮图标的颜色调制。"
#: doc/classes/GraphNode.xml
msgid "The color modulation applied to the resizer icon."
@@ -33520,7 +33671,7 @@ msgstr "对标题文本应用的字体。"
#: doc/classes/GraphNode.xml
msgid ""
"The icon for the close button, visible when [member show_close] is enabled."
-msgstr "关闭按钮的图标会在å¯ç”¨[member show_close]æ—¶å¯è§ã€‚"
+msgstr "关闭按钮的图标会在å¯ç”¨ [member show_close] æ—¶å¯è§ã€‚"
#: doc/classes/GraphNode.xml
msgid "The icon used for representing ports."
@@ -33528,23 +33679,25 @@ msgstr "该图标用于表示端å£ã€‚"
#: doc/classes/GraphNode.xml
msgid "The icon used for resizer, visible when [member resizable] is enabled."
-msgstr "用于调整大å°çš„图标,在 [member resizable]被å¯ç”¨æ—¶å¯è§ã€‚"
+msgstr "用于调整大å°çš„图标,在 [member resizable] 被å¯ç”¨æ—¶å¯è§ã€‚"
#: doc/classes/GraphNode.xml
msgid ""
"The background used when [member overlay] is set to [constant "
"OVERLAY_BREAKPOINT]."
-msgstr "当[member overlay]被设置为[constant OVERLAY_BREAKPOINT]时使用的背景。"
+msgstr ""
+"当 [member overlay] 被设置为 [constant OVERLAY_BREAKPOINT] 时使用的背景。"
#: doc/classes/GraphNode.xml
msgid "The [StyleBox] used when [member comment] is enabled."
-msgstr "当å¯ç”¨[member comment]时使用的[StyleBox]。"
+msgstr "当å¯ç”¨ [member comment] 时使用的 [StyleBox]。"
#: doc/classes/GraphNode.xml
msgid ""
"The [StyleBox] used when [member comment] is enabled and the [GraphNode] is "
"focused."
-msgstr "当[member comment]被å¯ç”¨ï¼Œä¸”[GraphNode]获得焦点时使用的[StyleBox]。"
+msgstr ""
+"当 [member comment] 被å¯ç”¨ï¼Œä¸” [GraphNode] 获得焦点时使用的 [StyleBox]。"
#: doc/classes/GraphNode.xml
msgid "The default background for [GraphNode]."
@@ -33732,6 +33885,14 @@ msgstr ""
"[code]pos[/code] 应该使用 GridMap çš„æœ¬åœ°åæ ‡ç©ºé—´ã€‚"
#: modules/gridmap/doc_classes/GridMap.xml
+msgid ""
+"If [code]true[/code], this GridMap uses cell navmesh resources to create "
+"navigation regions."
+msgstr ""
+"为 [code]true[/code] 时,这个 GridMap 会使用å•å…ƒæ ¼çš„å¯¼èˆªç½‘æ ¼èµ„æºæ¥åˆ›å»ºå¯¼èˆªåœ°"
+"区。"
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid "If [code]true[/code], grid items are centered on the X axis."
msgstr "如果为 [code]true[/code],则网格项以 X 轴为中心。"
@@ -33765,7 +33926,7 @@ msgid ""
"This does not affect the size of the meshes. See [member cell_scale]."
msgstr ""
"网格å•元的尺寸。\n"
-"这并ä¸å½±å“网格的尺寸大å°ã€‚å‚阅 [member cell_scale]。"
+"这并ä¸å½±å“网格的尺寸大å°ã€‚è§ [member cell_scale]。"
#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
@@ -33793,6 +33954,10 @@ msgid "The assigned [MeshLibrary]."
msgstr "指定的 [MeshLibrary]。"
#: modules/gridmap/doc_classes/GridMap.xml
+msgid "The navigation layers the GridMap generates its navigation regions in."
+msgstr "GridMap 生æˆå¯¼èˆªåœ°åŒºçš„导航层。"
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
"Overrides the default friction and bounce physics properties for the whole "
"[GridMap]."
@@ -33910,7 +34075,7 @@ msgid ""
"HASH_SHA256] to start computation of a SHA-256)."
msgstr ""
"开始对给定的 [code]type[/code] (例如 [constant HASH_SHA256] 进行新的哈希计"
-"算, 以开始计算 SHA-256) 。"
+"算,以开始计算 SHA-256) 。"
#: doc/classes/HashingContext.xml
msgid "Updates the computation with the given [code]chunk[/code] of data."
@@ -33934,7 +34099,7 @@ msgstr "水平盒å¼å®¹å™¨ã€‚"
#: doc/classes/HBoxContainer.xml
msgid "Horizontal box container. See [BoxContainer]."
-msgstr "水平盒å¼å®¹å™¨ã€‚请å‚阅 [BoxContainer]。"
+msgstr "水平盒å¼å®¹å™¨ã€‚è§ [BoxContainer]。"
#: doc/classes/HBoxContainer.xml
msgid "The horizontal space between the [HBoxContainer]'s elements."
@@ -33987,7 +34152,7 @@ msgid ""
"[Generic6DOFJoint]."
msgstr ""
"HingeJoint(铰链关节)通常使用物体 A çš„ Z 轴作为铰链轴,但手动添加时å¯ä»¥æŒ‡å®š"
-"å¦ä¸€ä¸ªè½´ã€‚请å‚阅 [Generic6DOFJoint]。"
+"å¦ä¸€ä¸ªè½´ã€‚å¦è¯·å‚阅 [Generic6DOFJoint]。"
#: doc/classes/HingeJoint.xml doc/classes/Label3D.xml
#: doc/classes/SpriteBase3D.xml
@@ -34581,12 +34746,12 @@ msgid ""
"Sends the body data raw, as a byte array and does not encode it in any way."
msgstr ""
"å‘连接的主机å‘é€åŽŸå§‹è¯·æ±‚ã€‚\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"
+"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 doc/classes/HTTPRequest.xml
@@ -35327,6 +35492,7 @@ msgid "A node with the ability to send HTTP(S) requests."
msgstr "具有å‘é€ HTTP(S) 请求能力的节点。"
#: doc/classes/HTTPRequest.xml
+#, fuzzy
msgid ""
"A node with the ability to send HTTP requests. Uses [HTTPClient] "
"internally.\n"
@@ -35353,7 +35519,7 @@ msgid ""
" # 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 body = to_json({\"name\": \"Godette\"})\n"
" error = http_request.request(\"https://httpbin.org/post\", [], true, "
"HTTPClient.METHOD_POST, body)\n"
" if error != OK:\n"
@@ -35513,7 +35679,7 @@ msgstr ""
"在底层的 [HTTPClient] 上创建请求。如果没有é…置错误,它会å°è¯•使用 [method "
"HTTPClient.connect_to_host] è¿žæŽ¥å¹¶å°†å‚æ•°ä¼ é€’ç»™ [method HTTPClient."
"request]。\n"
-"如果请求创建æˆåŠŸï¼Œåˆ™è¿”å›ž [constant OK]。 ï¼ˆå¹¶ä¸æ„å‘³ç€æœåС噍已å“应),"
+"如果请求创建æˆåŠŸï¼Œåˆ™è¿”å›ž [constant OK]ã€‚ï¼ˆå¹¶ä¸æ„å‘³ç€æœåС噍已å“应),"
"[constant ERR_UNCONFIGURED] 如果ä¸åœ¨æ ‘中,[constant ERR_BUSY] 如果ä»åœ¨å¤„ç†å…ˆ"
"å‰çš„请求,[constant ERR_INVALID_PARAMETER] å¦‚æžœç»™å®šçš„å­—ç¬¦ä¸²ä¸æ˜¯æœ‰æ•ˆçš„ URL æ ¼"
"å¼ï¼Œæˆ– [constant ERR_CANT_CONNECT]如果ä¸ä½¿ç”¨çº¿ç¨‹å¹¶ä¸” [HTTPClient] 无法连接到"
@@ -35541,7 +35707,7 @@ msgstr ""
"在底层的[HTTPClient]上创建请求,使用一个原始字节数组作为请求主体。如果没有é…"
"置错误,它会å°è¯•使用 [method HTTPClient.connect_to_host] è¿žæŽ¥å¹¶å°†å‚æ•°ä¼ é€’ç»™ "
"[method HTTPClient.request]。\n"
-"如果请求创建æˆåŠŸï¼Œåˆ™è¿”å›ž [constant OK]。 ï¼ˆå¹¶ä¸æ„å‘³ç€æœåС噍已å“应),"
+"如果请求创建æˆåŠŸï¼Œåˆ™è¿”å›ž [constant OK]ã€‚ï¼ˆå¹¶ä¸æ„å‘³ç€æœåС噍已å“应),"
"[constant ERR_UNCONFIGURED] 如果ä¸åœ¨æ ‘中,[constant ERR_BUSY] 如果ä»åœ¨å¤„ç†å…ˆ"
"å‰çš„请求,[constant ERR_INVALID_PARAMETER] å¦‚æžœç»™å®šçš„å­—ç¬¦ä¸²ä¸æ˜¯æœ‰æ•ˆçš„ URL æ ¼"
"å¼ï¼Œæˆ– [constant ERR_CANT_CONNECT]如果ä¸ä½¿ç”¨çº¿ç¨‹å¹¶ä¸” [HTTPClient] 无法连接到"
@@ -35677,7 +35843,7 @@ msgid ""
"hardware limitations. Larger images may fail to import."
msgstr ""
"æœ¬åœ°å›¾åƒæ•°æ®ç±»åž‹ã€‚包å«å¯è½¬æ¢ä¸º [ImageTexture] çš„å›¾åƒæ•°æ®ï¼Œå¹¶æä¾›å¸¸ç”¨çš„[i]图åƒ"
-"处ç†[/i]方法。 [Image] 的最大宽度和高度是 [constant MAX_WIDTH] å’Œ [constant "
+"处ç†[/i]方法。[Image] 的最大宽度和高度是 [constant MAX_WIDTH] å’Œ [constant "
"MAX_HEIGHT]。\n"
"[Image] ä¸èƒ½ç›´æŽ¥åˆ†é…给对象的 [code]texture[/code] 属性,例如 [Sprite],必须先"
"手动转æ¢ä¸º [ImageTexture]。\n"
@@ -36087,14 +36253,14 @@ 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.lock()\n"
-"img.set_pixel(x, y, color) # Works\n"
+"img.set_pixel(x, y, color) # 有效\n"
"img.unlock()\n"
-"img.set_pixel(x, y, color) # Does not have an effect\n"
+"img.set_pixel(x, y, color) # 无效\n"
"[/codeblock]"
#: doc/classes/Image.xml
@@ -36110,15 +36276,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.lock()\n"
-"img.set_pixelv(Vector2(x, y), color) # Works\n"
+"img.set_pixelv(Vector2(x, y), color) # 有效\n"
"img.unlock()\n"
-"img.set_pixelv(Vector2(x, y), color) # Does not have an effect\n"
+"img.set_pixelv(Vector2(x, y), color) # 无效\n"
"[/codeblock]"
#: doc/classes/Image.xml
@@ -36675,7 +36841,7 @@ msgid ""
"hardware limitations."
msgstr ""
"基于图片的纹ç†ï¼Œè¦æ˜¾ç¤ºä¸€ä¸ªå›¾ç‰‡ï¼Œå¿…须使用 [method create_from_image] 方法æ¥åˆ›"
-"建一个 [ImageTexture] å›¾ç‰‡çº¹ç†æ•°æ®:\n"
+"建一个 [ImageTexture] å›¾ç‰‡çº¹ç†æ•°æ®ï¼š\n"
"[codeblock]\n"
"var texture = ImageTexture.new()\n"
"var image = Image.new()\n"
@@ -36780,7 +36946,7 @@ msgid ""
"[Image] data is compressed with a lossy algorithm. You can set the storage "
"quality with [member lossy_quality]."
msgstr ""
-"[Image] æ•°æ®æ˜¯ç”¨æœ‰æŸç®—法压缩的。 ä½ å¯ä»¥ç”¨ [member lossy_quality] 设置存储质"
+"[Image] æ•°æ®æ˜¯ç”¨æœ‰æŸç®—法压缩的。你å¯ä»¥ç”¨ [member lossy_quality] 设置存储质"
"é‡ã€‚"
#: doc/classes/ImageTexture.xml
@@ -36898,7 +37064,7 @@ msgid ""
"[method parse_input_event] instead."
msgstr ""
"这将模拟按下指定的按键动作。\n"
-"强度å¯ä»¥ç”¨äºŽéžå¸ƒå°”è¿ç®—的动作,它的范围在0到1之间,代表给定动作的力度。\n"
+"强度å¯ä»¥ç”¨äºŽéžå¸ƒå°”è¿ç®—的动作,它的范围在0 到 1之间,代表给定动作的力度。\n"
"[b]注æ„:[/b]这个方法ä¸ä¼šå¼•起任何[method Node._input]调用。它旨在与[method "
"is_action_pressed]和[method is_action_just_pressed]一起使用。如果你想模拟"
"[code]_input[/code],请使用[method parse_input_event]代替。"
@@ -36917,16 +37083,15 @@ msgstr "在映射数æ®åº“中添加新的映射æ¡ç›®ï¼ˆSDL2 æ ¼å¼ï¼‰ã€‚å¯é€‰æ
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 "
+"([member 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"
+"([member use_accumulated_input]ï¼‰æˆ–æ•æ·è¾“入刷新([member ProjectSettings."
+"input_devices/buffering/agile_event_flushing])而被缓冲的结果。\n"
"引擎已ç»ä¼šåœ¨å…³é”®çš„æ‰§è¡Œç‚¹æ‰§è¡Œæ­¤æ“作,至少æ¯å¸§ä¸€æ¬¡ã€‚然而,在你想è¦ç²¾ç¡®æŽ§åˆ¶äº‹ä»¶"
"å¤„ç†æ—¶é—´çš„高级情况下,这å¯èƒ½æ˜¯æœ‰ç”¨çš„。"
@@ -37113,10 +37278,6 @@ msgstr ""
"起。"
#: doc/classes/Input.xml
-msgid "Returns the mouse mode. See the constants for more information."
-msgstr "返回鼠标模å¼ã€‚有关更多信æ¯ï¼Œè¯·å‚阅常é‡ã€‚"
-
-#: doc/classes/Input.xml
msgid ""
"Gets an input vector by specifying four actions for the positive and "
"negative X and Y axes.\n"
@@ -37338,15 +37499,15 @@ msgid ""
"[b]Uncompressed[/b] compression modes are supported. The [b]Video RAM[/b] "
"compression mode can't be used for custom cursors."
msgstr ""
-"设置一个自定义鼠标光标图åƒï¼Œè¯¥å›¾åƒä»…当游æˆçª—å£å†…å¯è§ã€‚还å¯ä»¥æŒ‡å®šçƒ­ç‚¹ã€‚å°†"
-"[code]null[/code]传递给image傿•°å°†é‡ç½®ä¸ºç³»ç»Ÿå…‰æ ‡ã€‚有关详细信æ¯ï¼Œè¯·å‚阅 [enum "
-"CursorShape] 形状列表。\n"
-"[code]image[/code]的大å°å¿…é¡»å°äºŽ256×256。\n"
-"[code]hotspot[/code]的大å°å¿…须在[code]image[/code]的范围内。\n"
-"[b]注æ„:[/b]䏿”¯æŒAnimatedTexture作为自定义鼠标光标。如果使用"
+"设置一个自定义鼠标光标图åƒï¼Œè¯¥å›¾åƒä»…当游æˆçª—å£å†…å¯è§ã€‚还å¯ä»¥æŒ‡å®šçƒ­ç‚¹ã€‚å°† "
+"[code]null[/code] 传递给 image 傿•°å°†é‡ç½®ä¸ºç³»ç»Ÿå…‰æ ‡ã€‚有关详细信æ¯ï¼Œè¯·å‚阅 "
+"[enum CursorShape] 形状列表。\n"
+"[code]image[/code] 的大å°å¿…é¡»å°äºŽ 256×256。\n"
+"[code]hotspot[/code] 的大å°å¿…须在 [code]image[/code] 的范围内。\n"
+"[b]注æ„:[/b]䏿”¯æŒ AnimatedTexture 作为自定义鼠标光标。如果使用 "
"[AnimatedTexture],将仅显示第一帧。\n"
"[b]注æ„:[/b]仅支æŒä»¥[b]æ— æŸ[/b],[b]有æŸ[/b]或[b]未压缩[/b]压缩模å¼å¯¼å…¥çš„图"
-"åƒã€‚[b]Video RAM[/b]压缩模å¼ä¸èƒ½ç”¨äºŽè‡ªå®šä¹‰å…‰æ ‡ã€‚"
+"åƒã€‚[b]Video RAM[/b] 压缩模å¼ä¸èƒ½ç”¨äºŽè‡ªå®šä¹‰å…‰æ ‡ã€‚"
#: doc/classes/Input.xml
msgid ""
@@ -37399,30 +37560,6 @@ msgstr ""
"[b]注æ„:[/b]在 Android å’Œ iOS 上,这个值å¯ç«‹å³è¢«ç¡¬ä»¶ä¼ æ„Ÿå™¨çš„值所覆盖。"
#: doc/classes/Input.xml
-msgid "Sets the mouse mode. See the constants for more information."
-msgstr "设置鼠标模å¼ã€‚有关更多信æ¯ï¼Œè¯·å‚阅常é‡ã€‚"
-
-#: doc/classes/Input.xml
-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 ""
-"å¯ç”¨æˆ–ç¦ç”¨æ“作系统å‘é€çš„类似输入事件的累积。当å¯ç”¨è¾“入累积时,在一帧中产生的"
-"所有输入事件将被åˆå¹¶ï¼Œå¹¶åœ¨è¯¥å¸§å®Œæˆæ¸²æŸ“æ—¶å‘出。因此,这é™åˆ¶äº†æ¯ç§’的输入方法调"
-"用次数,使之与渲染FPS相一致。\n"
-"输入累加在默认情况下是å¯ç”¨çš„。它å¯ä»¥è¢«ç¦ç”¨ï¼Œå°†ä»¥å¢žåŠ CPU使用率为代价,获得ç¨å¾®"
-"æ›´ç²¾ç¡®åŠæ›´çµæ•的输入。在需è¦è‡ªç”±ç»˜åˆ¶çº¿æ¡çš„åº”ç”¨ä¸­ï¼Œä¸€èˆ¬åº”ç”¨åœ¨ç”¨æˆ·ç»˜åˆ¶çº¿æ¡æ—¶ç¦"
-"用输入累加,以获得紧跟实际输入的结果。"
-
-#: doc/classes/Input.xml
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 "
@@ -37434,9 +37571,9 @@ msgid ""
"is recommended to restart an effect if it has to be played for more than a "
"few seconds."
msgstr ""
-"å¼€å§‹æŒ¯åŠ¨æ¸¸æˆæ‰‹æŸ„。手柄通常带有两个隆隆声电机,一强一弱。 "
+"å¼€å§‹æŒ¯åŠ¨æ¸¸æˆæ‰‹æŸ„。手柄通常带有两个隆隆声电机,一强一弱。"
"[code]weak_magnitude[/code] 弱震级是弱电机的强度(0 到 1 之间),"
-"[code]strong_magnitude[/code] 强震级是强电机的强度(0 到 1 之间)。 "
+"[code]strong_magnitude[/code] 强震级是强电机的强度(0 到 1 之间)。"
"[code]duration[/code] 是效果的æŒç»­æ—¶é—´ï¼ˆä»¥ç§’为å•ä½ï¼‰ï¼ˆæŒç»­æ—¶é—´ä¸º 0 å°†å°è¯•æ— é™"
"期地播放振动)。\n"
"[b]注æ„:[/b]å¹¶éžæ‰€æœ‰ç¡¬ä»¶éƒ½å…¼å®¹é•¿æ•ˆæžœæŒç»­æ—¶é—´ï¼›å¦‚果必须播放超过几秒钟的效果,"
@@ -37455,8 +37592,8 @@ msgid ""
"later."
msgstr ""
"振动 Android 和 iOS 设备。\n"
-"[b]注æ„:[/b]Android 需è¦å¯¼å‡ºè®¾ç½®ä¸­çš„ [code]VIBRATE[/code] æƒé™ã€‚ iOS 䏿”¯æŒ"
-"æŒç»­æ—¶é—´ã€‚\n"
+"[b]注æ„:[/b]Android 需è¦å¯¼å‡ºè®¾ç½®ä¸­çš„ [code]VIBRATE[/code] æƒé™ã€‚iOS 䏿”¯æŒæŒ"
+"续时间。\n"
"[b]注æ„:[/b]在 iOS å¹³å°ä¸Šï¼ŒiOS 13 åŠä¹‹åŽçš„ç‰ˆæœ¬æ‰æ”¯æŒæŒ‡å®šæŒç»­æ—¶é—´ã€‚"
#: doc/classes/Input.xml
@@ -37472,6 +37609,30 @@ msgstr ""
"MOUSE_MODE_CONFINED] 时则是é™åˆ¶åœ¨æ¸¸æˆçª—å£å†…。"
#: doc/classes/Input.xml
+msgid "Controls the mouse mode. See [enum MouseMode] for more information."
+msgstr "控制鼠标模å¼ã€‚详情请å‚阅 [enum MouseMode]。"
+
+#: doc/classes/Input.xml
+msgid ""
+"If [code]true[/code], similar input events sent by the operating system are "
+"accumulated. 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 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 ""
+"如果为 [code]true[/code],会对æ“作系统å‘é€çš„类似输入事件进行累积。当å¯ç”¨è¾“å…¥"
+"累积时,在一帧中产生的所有输入事件将被åˆå¹¶ï¼Œå¹¶åœ¨è¯¥å¸§å®Œæˆæ¸²æŸ“æ—¶å‘出。因此,这"
+"é™åˆ¶äº†æ¯ç§’的输入方法调用次数,使之与渲染FPS相一致。\n"
+"输入累加在默认情况下是å¯ç”¨çš„。它å¯ä»¥è¢«ç¦ç”¨ï¼Œå°†ä»¥å¢žåŠ CPU使用率为代价,获得ç¨å¾®"
+"æ›´ç²¾ç¡®åŠæ›´çµæ•的输入。在需è¦è‡ªç”±ç»˜åˆ¶çº¿æ¡çš„åº”ç”¨ä¸­ï¼Œä¸€èˆ¬åº”ç”¨åœ¨ç”¨æˆ·ç»˜åˆ¶çº¿æ¡æ—¶ç¦"
+"用输入累加,以获得紧跟实际输入的结果。"
+
+#: doc/classes/Input.xml
msgid "Emitted when a joypad device has been connected or disconnected."
msgstr "è¿žæŽ¥æˆ–æ–­å¼€æ¸¸æˆæ‰‹æŸ„设备时触å‘。"
@@ -37589,9 +37750,9 @@ msgid ""
"CURSOR_BDIAGSIZE]. It tells the user they can resize the window or the panel "
"both horizontally and vertically."
msgstr ""
-"窗å£è°ƒæ•´å¤§å°çš„光标。是一个åŒå¤´çš„箭头,从左上角到å³ä¸‹è§’,与[constant "
-"CURSOR_BDIAGSIZE]相å。它告诉用户他们å¯ä»¥åœ¨æ°´å¹³å’Œåž‚ç›´æ–¹å‘ä¸Šè°ƒæ•´çª—å£æˆ–颿¿çš„大"
-"å°ã€‚"
+"窗å£è°ƒæ•´å¤§å°çš„光标。是一个åŒå¤´çš„箭头,从左上角到å³ä¸‹è§’,与 [constant "
+"CURSOR_BDIAGSIZE] 相å。它告诉用户他们å¯ä»¥åœ¨æ°´å¹³å’Œåž‚ç›´æ–¹å‘ä¸Šè°ƒæ•´çª—å£æˆ–颿¿çš„"
+"大å°ã€‚"
#: doc/classes/Input.xml
msgid "Move cursor. Indicates that something can be moved."
@@ -37607,7 +37768,7 @@ msgstr "垂直拆分鼠标光标。在 Windows 上,它与 [constant CURSOR_VSI
msgid ""
"Horizontal split mouse cursor. On Windows, it's the same as [constant "
"CURSOR_HSIZE]."
-msgstr "水平分割的鼠标光标。在Windows上,它与[constant CURSOR_HSIZE]相åŒã€‚"
+msgstr "水平分割的鼠标光标。在 Windows 上,它与 [constant CURSOR_HSIZE] 相åŒã€‚"
#: doc/classes/Input.xml
msgid "Help cursor. Usually a question mark."
@@ -37619,7 +37780,7 @@ msgstr "通用输入事件。"
#: doc/classes/InputEvent.xml
msgid "Base class of all sort of input event. See [method Node._input]."
-msgstr "å„ç§è¾“入事件的基类。请å‚阅 [method Node._input]。"
+msgstr "å„ç§è¾“å…¥äº‹ä»¶çš„åŸºç±»ã€‚è§ [method Node._input]。"
#: doc/classes/InputEvent.xml
msgid "InputEvent"
@@ -37847,20 +38008,20 @@ msgstr ""
#: doc/classes/InputEventJoypadButton.xml
msgid "Button identifier. One of the [enum JoystickList] button constants."
-msgstr "按钮标识符。 [enum JoystickList] 按钮常é‡ä¹‹ä¸€ã€‚"
+msgstr "按钮标识符。[enum JoystickList] 按钮常é‡ä¹‹ä¸€ã€‚"
#: doc/classes/InputEventJoypadButton.xml
msgid ""
"If [code]true[/code], the button's state is pressed. If [code]false[/code], "
"the button's state is released."
msgstr ""
-"如果 [code]true[/code],按钮的状æ€è¢«æŒ‰ä¸‹ã€‚如果[code]false[/code],按钮的状æ€"
-"被释放。"
+"如果为 [code]true[/code],按钮的状æ€è¢«æŒ‰ä¸‹ã€‚如果为 [code]false[/code],按钮的"
+"状æ€è¢«é‡Šæ”¾ã€‚"
#: doc/classes/InputEventJoypadButton.xml
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]."
+"Represents the pressure the user puts on the button with their finger, if "
+"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]."
msgstr ""
"如果控制器支æŒï¼Œåˆ™è¡¨ç¤ºç”¨æˆ·ç”¨æ‰‹æŒ‡åœ¨æŒ‰é’®ä¸Šæ–½åŠ çš„åŽ‹åŠ›ã€‚èŒƒå›´ä»Ž [code]0[/code] 到 "
"[code]1[/code]。"
@@ -37889,8 +38050,8 @@ msgid ""
"[code]-1.0[/code] to [code]1.0[/code]. A value of [code]0[/code] means the "
"axis is in its resting position."
msgstr ""
-"æ“纵æ†åœ¨ç»™å®šè½´ä¸Šçš„当å‰ä½ç½®ã€‚该值范围从[code]-1.0[/code]到[code]1.0[/code]。值"
-"为[code]0[/code]æ„味ç€è½´å¤„äºŽé™æ­¢ä½ç½®ã€‚"
+"æ“纵æ†åœ¨ç»™å®šè½´ä¸Šçš„当å‰ä½ç½®ã€‚该值范围从 [code]-1.0[/code] 到 [code]1.0[/"
+"code]。值为 [code]0[/code] æ„味ç€è½´å¤„äºŽé™æ­¢ä½ç½®ã€‚"
#: doc/classes/InputEventKey.xml
msgid "Input event type for keyboard events."
@@ -37911,8 +38072,8 @@ msgid ""
"get_physical_scancode_with_modifiers())[/code] where [code]event[/code] is "
"the [InputEventKey]."
msgstr ""
-"返回与修改键组åˆçš„ç‰©ç†æ‰«æç ï¼Œä¾‹å¦‚ [code]Shift[/code] 或 [code]Alt[/code]。请"
-"å‚阅 [InputEventWithModifiers]。\n"
+"返回与修改键组åˆçš„ç‰©ç†æ‰«æç ï¼Œä¾‹å¦‚ [code]Shift[/code] 或 [code]Alt[/code]。å¦"
+"请å‚阅 [InputEventWithModifiers]。\n"
"è¦èŽ·å¾—å¸¦æœ‰ä¿®é¥°ç¬¦çš„ [InputEventKey] 的人类å¯è¯»è¡¨ç¤ºï¼Œè¯·ä½¿ç”¨ [code]OS."
"get_scancode_string(event.get_physical_scancode_with_modifiers())[/code] å…¶"
"中 [code]event[/code] 是 [InputEventKey]。"
@@ -37926,7 +38087,7 @@ msgid ""
"get_scancode_with_modifiers())[/code] where [code]event[/code] is the "
"[InputEventKey]."
msgstr ""
-"返回与 [code]Shift[/code] 或 [code]Alt[/code] 等修饰键组åˆçš„æ‰«æç ã€‚请å‚阅 "
+"返回与 [code]Shift[/code] 或 [code]Alt[/code] 等修饰键组åˆçš„æ‰«æç ã€‚å¦è¯·å‚阅 "
"[InputEventWithModifiers]。\n"
"è¦èŽ·å¾—å¸¦æœ‰ä¿®é¥°ç¬¦çš„ [InputEventKey] 的人类å¯è¯»è¡¨ç¤ºï¼Œè¯·ä½¿ç”¨ [code]OS."
"get_scancode_string(event.get_scancode_with_modifiers())[/code] 其中 "
@@ -37937,7 +38098,7 @@ msgid ""
"If [code]true[/code], the key was already pressed before this event. It "
"means the user is holding the key down."
msgstr ""
-"如果 [code]true[/code],则该键在此事件之å‰å·²è¢«æŒ‰ä¸‹ã€‚è¿™æ„味ç€ç”¨æˆ·æ­£åœ¨æŒ‰ä½è¯¥"
+"如果为 [code]true[/code],则该键在此事件之å‰å·²è¢«æŒ‰ä¸‹ã€‚è¿™æ„味ç€ç”¨æˆ·æ­£åœ¨æŒ‰ä½è¯¥"
"键。"
#: doc/classes/InputEventKey.xml
@@ -37960,8 +38121,8 @@ msgid ""
"If [code]true[/code], the key's state is pressed. If [code]false[/code], the "
"key's state is released."
msgstr ""
-"如果[code]true[/code]ï¼ŒæŒ‰é”®çš„çŠ¶æ€æ˜¯è¢«æŒ‰ä¸‹ã€‚如果[code]false[/code],该键的状æ€"
-"被释放。"
+"如果为 [code]true[/code]ï¼ŒæŒ‰é”®çš„çŠ¶æ€æ˜¯è¢«æŒ‰ä¸‹ã€‚如果为 [code]false[/code],该键"
+"的状æ€è¢«é‡Šæ”¾ã€‚"
#: doc/classes/InputEventKey.xml
msgid ""
@@ -38158,17 +38319,17 @@ msgstr "鼠标按钮事件的输入事件类型。"
#: doc/classes/InputEventMouseButton.xml
msgid "Contains mouse click information. See [method Node._input]."
-msgstr "包å«é¼ æ ‡ç‚¹å‡»ä¿¡æ¯ã€‚è§[method Node._input]。"
+msgstr "包å«é¼ æ ‡ç‚¹å‡»ä¿¡æ¯ã€‚è§ [method Node._input]。"
#: doc/classes/InputEventMouseButton.xml
msgid ""
"The mouse button identifier, one of the [enum ButtonList] button or button "
"wheel constants."
-msgstr "鼠标按钮标识符,是[enum ButtonList] 按钮或按钮滚轮常é‡ä¹‹ä¸€ã€‚"
+msgstr "鼠标按钮标识符,是 [enum ButtonList] 按钮或按钮滚轮常é‡ä¹‹ä¸€ã€‚"
#: doc/classes/InputEventMouseButton.xml
msgid "If [code]true[/code], the mouse button's state is a double-click."
-msgstr "如果[code]true[/code]ï¼Œé¼ æ ‡æŒ‰é’®çš„çŠ¶æ€æ˜¯åŒå‡»ã€‚"
+msgstr "如果为 [code]true[/code]ï¼Œé¼ æ ‡æŒ‰é’®çš„çŠ¶æ€æ˜¯åŒå‡»ã€‚"
#: doc/classes/InputEventMouseButton.xml
msgid ""
@@ -38177,8 +38338,8 @@ msgid ""
"only supported on some platforms; the reported sensitivity varies depending "
"on the platform. May be [code]0[/code] if not supported."
msgstr ""
-"事件的数é‡ï¼ˆæˆ–delta)。当用于高精度滚动事件时,这表示滚动é‡ï¼ˆåž‚直或水平)。这"
-"åªåœ¨ä¸€äº›å¹³å°ä¸Šè¢«æ”¯æŒï¼›æŠ¥å‘Šçš„çµæ•度因平å°ä¸åŒè€Œä¸åŒã€‚å¦‚æžœä¸æ”¯æŒï¼Œå¯èƒ½æ˜¯"
+"事件的数é‡ï¼ˆæˆ– delta)。当用于高精度滚动事件时,这表示滚动é‡ï¼ˆåž‚直或水平)。"
+"è¿™åªåœ¨ä¸€äº›å¹³å°ä¸Šè¢«æ”¯æŒï¼›æŠ¥å‘Šçš„çµæ•度因平å°ä¸åŒè€Œä¸åŒã€‚å¦‚æžœä¸æ”¯æŒï¼Œå¯èƒ½æ˜¯"
"[code]0[/code]。"
#: doc/classes/InputEventMouseButton.xml
@@ -38186,8 +38347,8 @@ msgid ""
"If [code]true[/code], the mouse button's state is pressed. If [code]false[/"
"code], the mouse button's state is released."
msgstr ""
-"如果[code]true[/code],鼠标按键的状æ€ä¸ºæŒ‰ä¸‹ã€‚如果[code]false[/code],鼠标按钮"
-"的状æ€è¢«é‡Šæ”¾ã€‚"
+"如果为 [code]true[/code],鼠标按键的状æ€ä¸ºæŒ‰ä¸‹ã€‚如果为 [code]false[/code],鼠"
+"标按钮的状æ€è¢«é‡Šæ”¾ã€‚"
#: doc/classes/InputEventMouseMotion.xml
msgid "Input event type for mouse motion events."
@@ -38198,21 +38359,20 @@ 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 "
+"at most. If you need more precise input reporting, set [member Input."
+"use_accumulated_input] to [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 ""
-"包å«é¼ æ ‡å’Œç¬”çš„è¿åŠ¨ä¿¡æ¯ã€‚支æŒç›¸å¯¹ã€ç»å¯¹ä½ç½®å’Œé€Ÿåº¦ã€‚请å‚阅 [method Node."
-"_input]。\n"
+"包å«é¼ æ ‡å’Œç¬”çš„è¿åŠ¨ä¿¡æ¯ã€‚支æŒç›¸å¯¹ã€ç»å¯¹ä½ç½®å’Œé€Ÿåº¦ã€‚è§ [method Node._input]。\n"
"[b]注æ„:[/b]默认情况下,这个事件最多åªèƒ½åœ¨æ¯ä¸€å¸§æ¸²æŸ“中å‘å‡ºä¸€æ¬¡ã€‚å¦‚æžœä½ éœ€è¦æ›´"
-"精确的输入报告,请用 [code]false[/code] 调用 [method Input."
-"set_use_accumulated_input] æ¥ä½¿äº‹ä»¶å°½å¯èƒ½é¢‘ç¹åœ°å‘射。如果你使用 "
-"InputEventMouseMotion æ¥ç”»çº¿ï¼Œè¯·è€ƒè™‘åŒæ—¶å®žçް [url=https://en.wikipedia.org/"
-"wiki/Bresenham%27s_line_algorithm]Bresenham 的线æ¡ç®—法[/url],以é¿å…在用户快"
-"速移动鼠标时出现å¯è§çš„线æ¡ç©ºéš™ã€‚"
+"精确的输入报告,请将 [member Input.use_accumulated_input] 设为 [code]false[/"
+"code],让事件尽å¯èƒ½é¢‘ç¹åœ°å‘射。如果你使用 InputEventMouseMotion æ¥ç”»çº¿ï¼Œè¯·è€ƒ"
+"è™‘åŒæ—¶å®žçް [url=https://en.wikipedia.org/wiki/"
+"Bresenham%27s_line_algorithm]Bresenham 的线æ¡ç®—法[/url],以é¿å…在用户快速移动"
+"鼠标时出现å¯è§çš„线æ¡ç©ºéš™ã€‚"
#: doc/classes/InputEventMouseMotion.xml
msgid "Mouse and input coordinates"
@@ -38233,8 +38393,8 @@ msgid ""
"code] when the user stops moving the mouse."
msgstr ""
"鼠标相对于å‰ä¸€ä¸ªä½ç½®çš„ä½ç½®ï¼ˆä¸Šä¸€å¸§çš„ä½ç½®ï¼‰ã€‚\n"
-"[b]注æ„:[/b]因为[InputEventMouseMotion]åªåœ¨é¼ æ ‡ç§»åŠ¨æ—¶å‘å‡ºï¼Œå½“ç”¨æˆ·åœæ­¢ç§»åЍ鼠"
-"标时,最åŽä¸€ä¸ªäº‹ä»¶çš„相对ä½ç½®ä¸ä¼šæ˜¯[code]Vector2(0, 0)[/code]。"
+"[b]注æ„:[/b]因为 [InputEventMouseMotion] åªåœ¨é¼ æ ‡ç§»åŠ¨æ—¶å‘å‡ºï¼Œå½“ç”¨æˆ·åœæ­¢ç§»åЍ"
+"鼠标时,最åŽä¸€ä¸ªäº‹ä»¶çš„相对ä½ç½®ä¸ä¼šæ˜¯ [code]Vector2(0, 0)[/code]。"
#: doc/classes/InputEventMouseMotion.xml
msgid "The mouse speed in pixels per second."
@@ -38247,8 +38407,8 @@ msgid ""
"toward the user. Ranges from [code]-1.0[/code] to [code]1.0[/code] for both "
"axes."
msgstr ""
-"代表笔的倾斜角度。正的Xåæ ‡å€¼è¡¨ç¤ºå‘å³å€¾æ–œã€‚正的Yåæ ‡å€¼è¡¨ç¤ºå‘用户自身倾斜。两"
-"个轴的范围是[code]-1.0[/code]到[code]1.0[/code]。"
+"代表笔的倾斜角度。正的 X åæ ‡å€¼è¡¨ç¤ºå‘å³å€¾æ–œã€‚正的Yåæ ‡å€¼è¡¨ç¤ºå‘用户自身倾斜。"
+"两个轴的范围是 [code]-1.0[/code] 到 [code]1.0[/code]。"
#: doc/classes/InputEventScreenDrag.xml
msgid ""
@@ -38257,7 +38417,7 @@ msgstr "å±å¹•拖动事件的输入事件类型。仅适用于移动设备。"
#: doc/classes/InputEventScreenDrag.xml
msgid "Contains screen drag information. See [method Node._input]."
-msgstr "包å«å±å¹•拖动信æ¯ã€‚è§[method Node._input]。"
+msgstr "包å«å±å¹•拖动信æ¯ã€‚è§ [method Node._input]。"
#: doc/classes/InputEventScreenDrag.xml
msgid "The drag event index in the case of a multi-drag event."
@@ -38290,13 +38450,13 @@ msgid ""
"Stores multi-touch press/release information. Supports touch press, touch "
"release and [member index] for multi-touch count and order."
msgstr ""
-"存储多点触摸的按压/释放信æ¯ã€‚支æŒè§¦æ‘¸æŒ‰åŽ‹ã€è§¦æ‘¸é‡Šæ”¾å’Œ[member index]的多点触摸"
-"计数和顺åºã€‚"
+"存储多点触摸的按压/释放信æ¯ã€‚支æŒè§¦æ‘¸æŒ‰åŽ‹ã€è§¦æ‘¸é‡Šæ”¾å’Œ [member index] 的多点触"
+"摸计数和顺åºã€‚"
#: doc/classes/InputEventScreenTouch.xml
msgid ""
"The touch index in the case of a multi-touch event. One index = one finger."
-msgstr "在多点触摸事件中的触摸指数。一个索引=一个手指。"
+msgstr "在多点触摸事件中的触摸指数。一个索引 = 一个手指。"
#: doc/classes/InputEventScreenTouch.xml
msgid "The touch position."
@@ -38307,8 +38467,8 @@ msgid ""
"If [code]true[/code], the touch's state is pressed. If [code]false[/code], "
"the touch's state is released."
msgstr ""
-"如果[code]true[/code],触摸的状æ€ä¸ºæŒ‰ä¸‹ã€‚如果[code]false[/code],触摸的状æ€è¢«"
-"释放。"
+"如果为 [code]true[/code],触摸的状æ€ä¸ºæŒ‰ä¸‹ã€‚如果为 [code]false[/code],触摸的"
+"状æ€è¢«é‡Šæ”¾ã€‚"
#: doc/classes/InputEventWithModifiers.xml
msgid "Base class for keys events with modifiers."
@@ -38570,14 +38730,14 @@ msgid ""
"method will ignore all non-number characters, so calling [code]int('1e3')[/"
"code] will return 13."
msgstr ""
-"将一个[String]å­—ç¬¦ä¸²å€¼è½¬æ¢æˆä¸€ä¸ªæ•´æ•°å€¼ï¼Œè¿™ä¸ªæ–¹æ³•是一个æ¥è‡ªå­—符串的整数解æž"
-"器,所以用一个无效的整数字符串调用这个方法将返回0,一个有效的字符串将是åƒ"
-"[code]'1.7'[/code]è¿™æ ·ã€‚è¿™ä¸ªæ–¹æ³•å°†å¿½ç•¥æ‰€æœ‰éžæ•°å­—字符,所以调用"
-"[code]int('1e3')[/code]将返回13。"
+"å°† [String] å­—ç¬¦ä¸²å€¼è½¬æ¢æˆæ•´æ•°å€¼ï¼Œè¿™ä¸ªæ–¹æ³•是字符串的整数解æžå™¨ï¼Œæ‰€ä»¥ç”¨æ— æ•ˆçš„"
+"整数字符串调用这个方法将返回 0ï¼Œæœ‰æ•ˆçš„å­—ç¬¦ä¸²å°†æ˜¯åƒ [code]'1.7'[/code] 这样"
+"çš„ã€‚è¿™ä¸ªæ–¹æ³•ä¼šå¿½ç•¥æ‰€æœ‰éžæ•°å­—字符,所以调用 [code]int('1e3')[/code] 会返回 "
+"13。"
#: doc/classes/InterpolatedCamera.xml
msgid "[i]Deprecated.[/i] Camera which moves toward another node."
-msgstr "[i] 已弃用。 [/i] å‘å¦ä¸€ä¸ªèŠ‚ç‚¹ç§»åŠ¨çš„ç›¸æœºã€‚"
+msgstr "[i] 已弃用。[/i] å‘å¦ä¸€ä¸ªèŠ‚ç‚¹ç§»åŠ¨çš„ç›¸æœºã€‚"
#: doc/classes/InterpolatedCamera.xml
msgid ""
@@ -38600,7 +38760,7 @@ msgstr "设置è¦ç§»åŠ¨å’Œå®šå‘的节点。"
msgid ""
"If [code]true[/code], and a target is set, the camera will move "
"automatically."
-msgstr "如果[code]true[/code],并且设置了目标,相机将自动移动。"
+msgstr "如果为 [code]true[/code],并且设置了目标,相机将自动移动。"
#: doc/classes/InterpolatedCamera.xml
msgid ""
@@ -38677,14 +38837,14 @@ msgid ""
"}\n"
"[/codeblock]"
msgstr ""
-"以数组形å¼è¿”回所有网络适é…器(network adapters)。\n"
-"æ¯ä¸ªé€‚é…器是一个形å¼çš„字典。\n"
+"以数组形å¼è¿”回所有网络适é…器。\n"
+"æ¯ä¸ªé€‚é…器都是一个以下形å¼çš„字典:\n"
"[codeblock]\n"
"{\n"
" \"index\":\"1\", # 接å£ç´¢å¼•。\n"
" \"name\":\"eth0\", # 接å£å称。\n"
-" \"friendly\":\"Ethernet One\", # 一个å‹å¥½çš„å字(å¯èƒ½æ˜¯ç©ºçš„)。\n"
-" \"address\":[\"192.168.1.101\"], # 一个与此接å£ç›¸å…³çš„IPåœ°å€æ•°ç»„。\n"
+" \"friendly\":\"Ethernet One\", # å‹å¥½çš„å字(å¯èƒ½æ˜¯ç©ºçš„)。\n"
+" \"address\":[\"192.168.1.101\"], # 与此接å£ç›¸å…³çš„ IP åœ°å€æ•°ç»„。\n"
"}\n"
"[/codeblock]"
@@ -38792,6 +38952,7 @@ msgid ""
msgstr "æä¾›å¯é€‰ä¸­é¡¹ç›®ï¼ˆå’Œ/或图标)列表的控件,既å¯ä»¥æ˜¯å•列,也å¯ä»¥æ˜¯å¤šåˆ—。"
#: doc/classes/ItemList.xml
+#, fuzzy
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. "
@@ -38804,7 +38965,18 @@ msgid ""
"[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."
+"fixed_column_width] greater than zero to wrap the text.\n"
+"[b]Incremental search:[/b] Like [PopupMenu] and [Tree], [ItemList] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
"此控件æä¾›äº†ä¸€ä¸ªå¯é€‰æ‹©çš„项目列表,该列表å¯ä»¥æ˜¯å•列(或多列),å¯ä»¥å•独选择文"
"本ã€å›¾æ ‡æˆ–åŒæ—¶é€‰æ‹©æ–‡æœ¬å’Œå›¾æ ‡ã€‚支æŒå·¥å…·æç¤ºï¼Œåˆ—表中的æ¯ä¸ªé¡¹ç›®éƒ½å¯ä»¥æ˜¯ä¸åŒ"
@@ -38992,7 +39164,7 @@ msgstr "设置与指定索引相关的项目的调制颜色[Color]。"
msgid ""
"Sets the region of item's icon used. The whole icon will be used if the "
"region has no area."
-msgstr "设置项目图标的使用区域。如果该区域大å°ä¸º 0, 将使用整个图标。"
+msgstr "设置项目图标的使用区域。如果该区域大å°ä¸º 0,将使用整个图标。"
#: doc/classes/ItemList.xml
msgid "Sets whether the item icon will be drawn transposed."
@@ -39409,41 +39581,41 @@ 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"
+"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 _my_js_callback = JavaScript.create_callback(self, \"myCallback\") # å¿…é¡»"
+"ä¿ç•™è¿™ä¸ªå¼•用\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"
+" print(buf) # 输出 [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"
+" prints(uint8arr[1], uint8arr.byteLength) # 输出 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: 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"
+" # 会使用传给“forEachâ€å›žè°ƒçš„傿•°æ¥è°ƒç”¨\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å¹³å°ä¸Šå¯ç”¨ã€‚"
+"[b]注æ„:[/b]åªåœ¨ HTML5 å¹³å°ä¸Šå¯ç”¨ã€‚"
#: doc/classes/JNISingleton.xml
msgid ""
@@ -39492,7 +39664,7 @@ msgstr "3D 货车镇演示"
msgid ""
"If [code]true[/code], the two bodies of the nodes are not able to collide "
"with each other."
-msgstr "如果 [code]true[/code],则节点的两个主体无法相互碰撞。"
+msgstr "如果为 [code]true[/code],则节点的两个主体无法相互碰撞。"
#: doc/classes/Joint.xml
msgid "The node attached to the first side (A) of the joint."
@@ -39527,7 +39699,7 @@ msgid ""
"can pull on the joint."
msgstr ""
"当 [member node_a] å’Œ [member node_b] å‘ä¸åŒæ–¹å‘移动时,[code]bias[/code] 控"
-"制关节将它们拉回原始ä½ç½®çš„æ‰€éœ€æ—¶é—´ã€‚ [code]bias[/code] 越低,两个物体在关节上"
+"制关节将它们拉回原始ä½ç½®çš„æ‰€éœ€æ—¶é—´ã€‚[code]bias[/code] 越低,两个物体在关节上"
"å—到的拉力越大。"
#: doc/classes/Joint2D.xml
@@ -40083,15 +40255,15 @@ msgstr ""
#: doc/classes/KinematicBody.xml
msgid "Lock the body's X axis movement."
-msgstr "é”定物体的Xè½´è¿åŠ¨ã€‚"
+msgstr "é”定物体的 X è½´è¿åŠ¨ã€‚"
#: doc/classes/KinematicBody.xml
msgid "Lock the body's Y axis movement."
-msgstr "é”定物体的Yè½´è¿åŠ¨ã€‚"
+msgstr "é”定物体的 Y è½´è¿åŠ¨ã€‚"
#: doc/classes/KinematicBody.xml
msgid "Lock the body's Z axis movement."
-msgstr "é”定物体的Zè½´è¿åŠ¨ã€‚"
+msgstr "é”定物体的 Z è½´è¿åŠ¨ã€‚"
#: doc/classes/KinematicBody.xml doc/classes/KinematicBody2D.xml
msgid ""
@@ -40130,19 +40302,19 @@ msgstr ""
msgid ""
"Lock the body's X axis movement. Deprecated alias for [member "
"axis_lock_motion_x]."
-msgstr "é”定物体的Xè½´è¿åŠ¨ã€‚å·²è¢«åºŸå¼ƒçš„[member axis_lock_motion_x]的别å。"
+msgstr "é”定物体的 X è½´è¿åŠ¨ã€‚å·²è¢«åºŸå¼ƒçš„ [member axis_lock_motion_x] 的别å。"
#: doc/classes/KinematicBody.xml
msgid ""
"Lock the body's Y axis movement. Deprecated alias for [member "
"axis_lock_motion_y]."
-msgstr "é”定物体的Yè½´è¿åŠ¨ã€‚å·²è¢«åºŸå¼ƒçš„[member axis_lock_motion_y]的别å。"
+msgstr "é”定物体的 Y è½´è¿åŠ¨ã€‚å·²è¢«åºŸå¼ƒçš„ [member axis_lock_motion_y] 的别å。"
#: doc/classes/KinematicBody.xml
msgid ""
"Lock the body's Z axis movement. Deprecated alias for [member "
"axis_lock_motion_z]."
-msgstr "é”定物体的Zè½´è¿åŠ¨ã€‚å·²è¢«åºŸå¼ƒçš„[member axis_lock_motion_z]的别å。"
+msgstr "é”定物体的 Z è½´è¿åŠ¨ã€‚å·²è¢«åºŸå¼ƒçš„ [member axis_lock_motion_z] 的别å。"
#: doc/classes/KinematicBody.xml doc/classes/KinematicBody2D.xml
msgid ""
@@ -40393,11 +40565,11 @@ msgstr "碰撞体。"
#: doc/classes/KinematicCollision.xml doc/classes/KinematicCollision2D.xml
msgid ""
"The colliding body's unique instance ID. See [method Object.get_instance_id]."
-msgstr "碰撞体的唯一实例ID。å‚阅[method Object.get_instance_id]。"
+msgstr "碰撞体的唯一实例 IDã€‚è§ [method Object.get_instance_id]。"
#: doc/classes/KinematicCollision.xml doc/classes/KinematicCollision2D.xml
msgid "The colliding body's metadata. See [Object]."
-msgstr "碰撞体的元数æ®ã€‚å‚阅[Object]。"
+msgstr "碰撞体的元数æ®ã€‚è§ [Object]。"
#: doc/classes/KinematicCollision.xml
msgid "The colliding body's [RID] used by the [PhysicsServer]."
@@ -40409,7 +40581,7 @@ msgstr "碰撞体的形状。"
#: doc/classes/KinematicCollision.xml
msgid "The colliding shape's index. See [CollisionObject]."
-msgstr "碰撞形状的索引。å‚阅[CollisionObject]。"
+msgstr "ç¢°æ’žå½¢çŠ¶çš„ç´¢å¼•ã€‚è§ [CollisionObject]。"
#: doc/classes/KinematicCollision.xml doc/classes/KinematicCollision2D.xml
msgid "The colliding object's velocity."
@@ -40449,9 +40621,9 @@ 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"
+"åŒ…å« [KinematicBody2D] 碰撞的碰撞数æ®ã€‚当使用 [method KinematicBody2D."
+"move_and_collide] 移动 [KinematicBody2D] 时,如果检测到与å¦ä¸€ä¸ªç‰©ä½“的碰撞,它"
+"å°†åœæ­¢ã€‚如果检测到碰撞,则返回 KinematicCollision2D 对象。\n"
"è¯¥å¯¹è±¡åŒ…å«æœ‰å…³ç¢°æ’žçš„ä¿¡æ¯ï¼ŒåŒ…括碰撞对象,剩余è¿åŠ¨å’Œç¢°æ’žåæ ‡ã€‚该信æ¯å¯ç”¨äºŽè®¡ç®—"
"碰撞å“应。"
@@ -40476,7 +40648,7 @@ msgid ""
"Displays plain text in a line or wrapped inside a rectangle. For formatted "
"text, use [RichTextLabel]."
msgstr ""
-"在一行中显示纯文本,或在一个矩形内包裹。对于格å¼åŒ–的文本,使用"
+"在一行中显示纯文本,或在一个矩形内包裹。对于格å¼åŒ–的文本,使用 "
"[RichTextLabel]。"
#: doc/classes/Label.xml
@@ -40639,7 +40811,8 @@ msgstr "多行[Label]中å„行之间的垂直空间。"
msgid ""
"Boolean value. If set to 1 ([code]true[/code]), the shadow will be displayed "
"around the whole text as an outline."
-msgstr "布尔值。如果设置为1,å³[code]true[/code],整个文本周围显示阴影轮廓。"
+msgstr ""
+"布尔值。如果设置为 1([code]true[/code]),则整个文本周围显示阴影轮廓。"
#: doc/classes/Label.xml
msgid "The horizontal offset of the text's shadow."
@@ -40651,11 +40824,11 @@ msgstr "文本阴影的垂直å移。"
#: doc/classes/Label.xml
msgid "[Font] used for the [Label]'s text."
-msgstr "用于标签[Label]文本的字体[Font]。"
+msgstr "用于标签 [Label] 文本的字体 [Font]。"
#: doc/classes/Label.xml
msgid "Background [StyleBox] for the [Label]."
-msgstr "为[Label]设置背景样å¼[StyleBox]。"
+msgstr "为 [Label] 设置背景样å¼ç›’ [StyleBox]。"
#: doc/classes/Label3D.xml
msgid "Displays plain text in a 3D world."
@@ -40687,11 +40860,11 @@ msgstr ""
msgid ""
"The alpha cutting mode to use for the sprite. See [enum AlphaCutMode] for "
"possible values."
-msgstr "该精çµçš„ Alpha è£å‰ªæ¨¡å¼ã€‚å¯èƒ½çš„å–值请å‚阅 [enum AlphaCutMode]。"
+msgstr "该精çµçš„ Alpha è£å‰ªæ¨¡å¼ã€‚å¯èƒ½çš„å–å€¼è§ [enum AlphaCutMode]。"
#: doc/classes/Label3D.xml doc/classes/SpatialMaterial.xml
msgid "Threshold at which the alpha scissor will discard values."
-msgstr "alpha scissor 会丢弃数值的阈值。"
+msgstr "Alpha è£å‰ªä¸¢å¼ƒæ•°å€¼çš„阈值。"
#: doc/classes/Label3D.xml
msgid "If [code]true[/code], wraps the text to the [member width]."
@@ -40702,8 +40875,7 @@ msgid ""
"The billboard mode to use for the label. See [enum SpatialMaterial."
"BillboardMode] for possible values."
msgstr ""
-"è¯¥æ ‡ç­¾æ‰€ä½¿ç”¨çš„å…¬å‘Šæ¿æ¨¡å¼ã€‚å¯èƒ½çš„å–值请å‚阅 [enum SpatialMaterial."
-"BillboardMode]。"
+"è¯¥æ ‡ç­¾æ‰€ä½¿ç”¨çš„å…¬å‘Šæ¿æ¨¡å¼ã€‚å¯èƒ½çš„å–å€¼è§ [enum SpatialMaterial.BillboardMode]。"
#: doc/classes/Label3D.xml
msgid ""
@@ -40744,7 +40916,7 @@ msgstr "该 [Label3D] 的文本颜色 [Color]。"
msgid ""
"If [code]true[/code], depth testing is disabled and the object will be drawn "
"in render order."
-msgstr "如果[code]true[/code],深度测试被ç¦ç”¨ï¼Œå¯¹è±¡å°†æŒ‰æ¸²æŸ“顺åºç»˜åˆ¶ã€‚"
+msgstr "如果为 [code]true[/code],深度测试被ç¦ç”¨ï¼Œå¯¹è±¡å°†æŒ‰æ¸²æŸ“顺åºç»˜åˆ¶ã€‚"
#: doc/classes/Label3D.xml
msgid "The text drawing offset (in pixels)."
@@ -40859,7 +41031,7 @@ msgstr ""
"这个模å¼åªå…è®¸å®Œå…¨é€æ˜Žæˆ–者完全ä¸é€æ˜Žçš„åƒç´ ã€‚这个模å¼ä¹Ÿå« [i]Alpha 测试[/i]或"
"者[i]1ä½é€æ˜Žåº¦[/i]。\n"
"[b]注æ„:[/b]使用抗锯齿字体和轮廓时,这个模å¼å¯èƒ½ä¼šå‡ºçŽ°é—®é¢˜ï¼Œè¯·å°è¯•调整 "
-"[member alpha_scissor_threshold] 或使用 SDF 字体。 \n"
+"[member alpha_scissor_threshold] 或使用 SDF 字体。\n"
"[b]注æ„:[/b]文本中存在é‡å çš„字形时(例如手写体),这个模å¼å¯èƒ½ä¼šé€ æˆä¸»æ–‡æœ¬å’Œ"
"è½®å»“çš„é€æ˜Žåº¦æŽ’åºé—®é¢˜ã€‚"
@@ -40892,29 +41064,29 @@ msgid ""
"You can dynamically add pieces ([Texture]s) to this [LargeTexture] using "
"different offsets."
msgstr ""
-"[i] 已弃用(将在 Godot 4.0 中移除)。 [/i] 一ç§èƒ½å¤Ÿå­˜å‚¨è®¸å¤šå…·æœ‰åç§»é‡çš„较å°çº¹"
-"ç†çš„ [Texture]。\n"
-"ä½ å¯ä»¥ä½¿ç”¨ä¸åŒçš„åç§»é‡å‘æ­¤ [LargeTexture] åŠ¨æ€æ·»åŠ [Texture]片段。"
+"[i]已弃用(将在 Godot 4.0 中移除)。[/i] 一ç§èƒ½å¤Ÿå­˜å‚¨è®¸å¤šå…·æœ‰åç§»é‡çš„较å°çº¹ç†"
+"的 [Texture]。\n"
+"ä½ å¯ä»¥ä½¿ç”¨ä¸åŒçš„åç§»é‡å‘æ­¤ [LargeTexture] åŠ¨æ€æ·»åŠ  [Texture] 片段。"
#: doc/classes/LargeTexture.xml
msgid ""
"Adds [code]texture[/code] to this [LargeTexture], starting on offset "
"[code]ofs[/code]."
msgstr ""
-"å°†[code]texture[/code]添加到这个[LargeTexture],从åç§»é‡[code]ofs[/code]å¼€"
-"始。"
+"å°† [code]texture[/code] 添加到这个 [LargeTexture],从åç§»é‡ [code]ofs[/code] "
+"开始。"
#: doc/classes/LargeTexture.xml
msgid "Clears the [LargeTexture]."
-msgstr "清除[LargeTexture]。"
+msgstr "清除 [LargeTexture]。"
#: doc/classes/LargeTexture.xml
msgid "Returns the number of pieces currently in this [LargeTexture]."
-msgstr "返回此[LargeTexture]中的片段数。"
+msgstr "返回这个 [LargeTexture] 中的片段数。"
#: doc/classes/LargeTexture.xml
msgid "Returns the offset of the piece with the index [code]idx[/code]."
-msgstr "返回索引为[code]idx[/code]的片段的åç§»é‡ã€‚"
+msgstr "返回索引为 [code]idx[/code] 的片段的åç§»é‡ã€‚"
#: doc/classes/LargeTexture.xml
msgid "Returns the [Texture] of the piece with the index [code]idx[/code]."
@@ -40924,7 +41096,7 @@ msgstr "返回索引为 [code]idx[/code] 的片段的 [Texture]。"
msgid ""
"Sets the offset of the piece with the index [code]idx[/code] to [code]ofs[/"
"code]."
-msgstr "将索引为[code]idx[/code]的片段的åç§»é‡è®¾ç½®ä¸º[code]ofs[/code]。"
+msgstr "将索引为 [code]idx[/code] 的片段的åç§»é‡è®¾ç½®ä¸º [code]ofs[/code]。"
#: doc/classes/LargeTexture.xml
msgid ""
@@ -40935,7 +41107,7 @@ msgstr ""
#: doc/classes/LargeTexture.xml
msgid "Sets the size of this [LargeTexture]."
-msgstr "设置此[LargeTexture]的大å°ã€‚"
+msgstr "设置此 [LargeTexture] 的大å°ã€‚"
#: doc/classes/Light.xml
msgid "Provides a base class for different kinds of light nodes."
@@ -40967,7 +41139,7 @@ msgstr "设置指定的 [enum Light.Param] 傿•°çš„值。"
msgid ""
"If [code]true[/code], the light only appears in the editor and will not be "
"visible at runtime."
-msgstr "如果 [code]true[/code],ç¯å…‰åªåœ¨ç¼–辑器中出现,在è¿è¡Œæ—¶å°†ä¸å¯è§ã€‚"
+msgstr "如果为 [code]true[/code],ç¯å…‰åªåœ¨ç¼–辑器中出现,在è¿è¡Œæ—¶å°†ä¸å¯è§ã€‚"
#: doc/classes/Light.xml
msgid "The light's bake mode. See [enum BakeMode]."
@@ -40978,8 +41150,8 @@ 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 ""
-"光的颜色。一个过亮[i]overbright[/i]颜色å¯ç”¨äºŽå®žçŽ°ç­‰æ•ˆäºŽå¢žåŠ å…‰çš„èƒ½é‡ [member "
-"light_energy] 的结果。"
+"光的颜色。[i]过亮[/i]的颜色å¯ç”¨äºŽå®žçŽ°ä¸Žå¢žåŠ å…‰çš„ [member light_energy] 相等价"
+"的结果。"
#: doc/classes/Light.xml
msgid "The light will affect objects in the selected layers."
@@ -40991,8 +41163,8 @@ msgid ""
"[OmniLight] and [SpotLight], changing this value will only change the light "
"color's intensity, not the light's radius."
msgstr ""
-"å…‰çš„å¼ºåº¦ä¹˜æ•°ï¼Œæ³¨ï¼Œè¿™ä¸æ˜¯ç‰©ç†å•ä½ã€‚对于 [OmniLight] å’Œ [SpotLight],更改此值åª"
-"会更改ç¯å…‰é¢œè‰²çš„强度,而ä¸ä¼šæ›´æ”¹ç¯å…‰çš„åŠå¾„。"
+"å…‰çš„å¼ºåº¦ä¹˜æ•°ï¼ˆè¿™ä¸æ˜¯ç‰©ç†å•ä½ï¼‰ã€‚对于 [OmniLight] å’Œ [SpotLight],更改此值åªä¼š"
+"更改ç¯å…‰é¢œè‰²çš„强度,而ä¸ä¼šæ›´æ”¹ç¯å…‰çš„åŠå¾„。"
#: doc/classes/Light.xml
msgid ""
@@ -41036,8 +41208,8 @@ 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
msgid "The color of shadows cast by this light."
@@ -41067,7 +41239,7 @@ msgid ""
"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],则å转网格的背é¢å‰”除。当你有一个åŽé¢æœ‰ç¯çš„å¹³é¢ç½‘æ ¼"
+"如果为 [code]true[/code],则å转网格的背é¢å‰”除。当你有一个åŽé¢æœ‰ç¯çš„å¹³é¢ç½‘æ ¼"
"时,这会很有用。如果需è¦åœ¨ç½‘格的两侧投射阴影,请使用 [constant "
"GeometryInstance.SHADOW_CASTING_SETTING_DOUBLE_SIDED] 将网格设置为使用åŒé¢é˜´"
"影。"
@@ -41195,20 +41367,20 @@ msgstr ""
#: doc/classes/Light2D.xml
msgid "The Light2D's [Color]."
-msgstr "Light2D光的颜色 [Color]。"
+msgstr "该 Light2D 的颜色 [Color]。"
#: doc/classes/Light2D.xml
msgid "If [code]true[/code], Light2D will only appear when editing the scene."
-msgstr "如果[code]true[/code],Light2Då°†åªåœ¨ç¼–辑场景时出现。"
+msgstr "如果为 [code]true[/code],Light2D å°†åªåœ¨ç¼–辑场景时出现。"
#: doc/classes/Light2D.xml
msgid "If [code]true[/code], Light2D will emit light."
-msgstr "如果 [code]true[/code],Light2D 会å‘光。"
+msgstr "如果为 [code]true[/code],Light2D 会å‘光。"
#: doc/classes/Light2D.xml
msgid ""
"The Light2D's energy value. The larger the value, the stronger the light."
-msgstr "Light2D的能é‡å€¼ã€‚该值越大,光线就越强。"
+msgstr "Light2D 的能é‡å€¼ã€‚该值越大,光线就越强。"
#: doc/classes/Light2D.xml
msgid "The Light2D's mode. See [enum Mode] constants for values."
@@ -41220,7 +41392,7 @@ msgstr "Light2D çš„ [code]texture[/code] çš„åç§»é‡ã€‚"
#: doc/classes/Light2D.xml
msgid "The height of the Light2D. Used with 2D normal mapping."
-msgstr "Light2D的高度。与2D法线贴图(normal mapping)一起使用。"
+msgstr "Light2D 的高度。与 2D 法线贴图一起使用。"
#: doc/classes/Light2D.xml
msgid ""
@@ -41230,7 +41402,7 @@ msgstr "图层é®ç½©ã€‚åªæœ‰å…·æœ‰åŒ¹é…é®ç½©çš„对象æ‰ä¼šå—到Light2Dçš„å½
#: doc/classes/Light2D.xml
msgid "Maximum layer value of objects that are affected by the Light2D."
-msgstr "å—Light2Då½±å“的对象的最大层数值。"
+msgstr "å— Light2D å½±å“的对象的最大层数值。"
#: doc/classes/Light2D.xml
msgid "Minimum layer value of objects that are affected by the Light2D."
@@ -41239,12 +41411,12 @@ msgstr "å— Light2D å½±å“的对象的最å°å±‚数值。"
#: doc/classes/Light2D.xml
msgid ""
"Maximum [code]z[/code] value of objects that are affected by the Light2D."
-msgstr "å—Light2Då½±å“的物体的最大[code]z[/code]值。"
+msgstr "å— Light2D å½±å“的物体的最大 [code]z[/code] 值。"
#: doc/classes/Light2D.xml
msgid ""
"Minimum [code]z[/code] value of objects that are affected by the Light2D."
-msgstr "å—Light2Då½±å“的物体的最å°[code]z[/code]值。"
+msgstr "å— Light2D å½±å“çš„ç‰©ä½“çš„æœ€å° [code]z[/code] 值。"
#: doc/classes/Light2D.xml
msgid "Shadow buffer size."
@@ -41252,15 +41424,15 @@ msgstr "阴影缓冲区大å°ã€‚"
#: doc/classes/Light2D.xml
msgid "[Color] of shadows cast by the Light2D."
-msgstr "Light2D投下的影å­çš„颜色[Color]。"
+msgstr "该 Light2D 投下的影å­çš„颜色 [Color]。"
#: doc/classes/Light2D.xml
msgid "If [code]true[/code], the Light2D will cast shadows."
-msgstr "如果[code]true[/code],Light2D将投下阴影。"
+msgstr "如果为 [code]true[/code],则该 Light2D 将投下阴影。"
#: doc/classes/Light2D.xml
msgid "Shadow filter type. See [enum ShadowFilter] for possible values."
-msgstr "阴影过滤器类型。相关å¯èƒ½çš„值,å‚阅[enum ShadowFilter] 阴影过滤器。"
+msgstr "阴影过滤器类型。å¯èƒ½çš„å–å€¼è§ [enum ShadowFilter]。"
#: doc/classes/Light2D.xml
msgid "Smoothing value for shadows."
@@ -41275,12 +41447,12 @@ msgid ""
"The shadow mask. Used with [LightOccluder2D] to cast shadows. Only occluders "
"with a matching light mask will cast shadows."
msgstr ""
-"阴影é®ç½©ã€‚与[LightOccluder2D]ä¸€èµ·ä½¿ç”¨æ¥æŠ•å°„é˜´å½±ã€‚åªæœ‰å…·æœ‰åŒ¹é…的光线é®ç½©çš„鮿Œ¡"
-"物æ‰ä¼šæŠ•射阴影。"
+"阴影é®ç½©ã€‚与 [LightOccluder2D] ä¸€èµ·ä½¿ç”¨æ¥æŠ•å°„é˜´å½±ã€‚åªæœ‰å…·æœ‰åŒ¹é…的光线é®ç½©çš„é®"
+"挡物æ‰ä¼šæŠ•射阴影。"
#: doc/classes/Light2D.xml
msgid "[Texture] used for the Light2D's appearance."
-msgstr "用于Light2D外观的[Texture]。"
+msgstr "用于 Light2D 外观的 [Texture]。"
#: doc/classes/Light2D.xml
msgid "The [code]texture[/code]'s scale factor."
@@ -41296,13 +41468,13 @@ msgstr "å°† Light2D 对应的åƒç´ å€¼ä¸Žå…¶ä¸‹æ–¹çš„åƒç´ å€¼ç›¸åŠ ã€‚è¿™æ˜¯ç¯
msgid ""
"Subtracts the value of pixels corresponding to the Light2D to the values of "
"pixels under it, resulting in inversed light effect."
-msgstr "å°†Light2D对应的åƒç´ å€¼å‡åŽ»å…¶ä¸‹æ–¹çš„åƒç´ å€¼ï¼Œäº§ç”Ÿå光效果。"
+msgstr "å°† Light2D 对应的åƒç´ å€¼å‡åŽ»å…¶ä¸‹æ–¹çš„åƒç´ å€¼ï¼Œäº§ç”Ÿå光效果。"
#: doc/classes/Light2D.xml
msgid ""
"Mix the value of pixels corresponding to the Light2D to the values of pixels "
"under it by linear interpolation."
-msgstr "通过线性æ’值将Light2D对应的åƒç´ å€¼ä¸Žå…¶ä¸‹æ–¹çš„åƒç´ å€¼æ··åˆã€‚"
+msgstr "通过线性æ’值将 Light2D 对应的åƒç´ å€¼ä¸Žå…¶ä¸‹æ–¹çš„åƒç´ å€¼æ··åˆã€‚"
#: doc/classes/Light2D.xml
msgid ""
@@ -41310,46 +41482,46 @@ msgid ""
"parts of the screen underneath depending on the value of each pixel of the "
"light (mask) texture."
msgstr ""
-"Light2D的光线纹ç†è¢«ç”¨ä½œé®ç½©ï¼Œæ ¹æ®å…‰çº¿é®ç½©çº¹ç†çš„æ¯ä¸ªåƒç´ çš„值,éšè—或显示å±å¹•下"
-"方的部分。"
+"Light2D 的光线纹ç†è¢«ç”¨ä½œé®ç½©ï¼Œæ ¹æ®å…‰çº¿é®ç½©çº¹ç†çš„æ¯ä¸ªåƒç´ çš„值,éšè—或显示å±å¹•"
+"下方的部分。"
#: doc/classes/Light2D.xml
msgid "No filter applies to the shadow map. See [member shadow_filter]."
-msgstr "没有过滤器适用于阴影贴图。å‚阅[member shadow_filter]。"
+msgstr "æ²¡æœ‰è¿‡æ»¤å™¨é€‚ç”¨äºŽé˜´å½±è´´å›¾ã€‚è§ [member shadow_filter]。"
#: doc/classes/Light2D.xml
msgid ""
"Percentage closer filtering (3 samples) applies to the shadow map. See "
"[member shadow_filter]."
-msgstr "百分比接近过滤(3个样本)适用于阴影贴图。å‚阅[member shadow_filter]。"
+msgstr "百分比接近过滤(3 ä¸ªæ ·æœ¬ï¼‰é€‚ç”¨äºŽé˜´å½±è´´å›¾ã€‚è§ [member shadow_filter]。"
#: doc/classes/Light2D.xml
msgid ""
"Percentage closer filtering (5 samples) applies to the shadow map. See "
"[member shadow_filter]."
-msgstr "百分比接近过滤(5个样本)适用于阴影贴图。å‚阅[member shadow_filter]。"
+msgstr "百分比接近过滤(5 ä¸ªæ ·æœ¬ï¼‰é€‚ç”¨äºŽé˜´å½±è´´å›¾ã€‚è§ [member shadow_filter]。"
#: doc/classes/Light2D.xml
msgid ""
"Percentage closer filtering (7 samples) applies to the shadow map. See "
"[member shadow_filter]."
-msgstr "百分比接近过滤(7个样本)适用于阴影贴图。å‚阅[member shadow_filter]。"
+msgstr "百分比接近过滤(7 ä¸ªæ ·æœ¬ï¼‰é€‚ç”¨äºŽé˜´å½±è´´å›¾ã€‚è§ [member shadow_filter]。"
#: doc/classes/Light2D.xml
msgid ""
"Percentage closer filtering (9 samples) applies to the shadow map. See "
"[member shadow_filter]."
-msgstr "百分比接近过滤(9个样本)适用于阴影贴图。å‚阅[member shadow_filter]。"
+msgstr "百分比接近过滤(9 ä¸ªæ ·æœ¬ï¼‰é€‚ç”¨äºŽé˜´å½±è´´å›¾ã€‚è§ [member shadow_filter]。"
#: doc/classes/Light2D.xml
msgid ""
"Percentage closer filtering (13 samples) applies to the shadow map. See "
"[member shadow_filter]."
-msgstr "百分比接近过滤(13个样本)适用于阴影贴图。å‚阅[member shadow_filter]。"
+msgstr "百分比接近过滤(13 ä¸ªæ ·æœ¬ï¼‰é€‚ç”¨äºŽé˜´å½±è´´å›¾ã€‚è§ [member shadow_filter]。"
#: doc/classes/LightOccluder2D.xml
msgid "Occludes light cast by a Light2D, casting shadows."
-msgstr "鮿Œ¡ç”±Light2D投射的光线,投射阴影。"
+msgstr "鮿Œ¡ç”± Light2D 投射的光线,投射阴影。"
#: doc/classes/LightOccluder2D.xml
msgid ""
@@ -41357,7 +41529,7 @@ msgid ""
"be provided with an [OccluderPolygon2D] in order for the shadow to be "
"computed."
msgstr ""
-"鮿Œ¡Light2D投射的ç¯å…‰ï¼ŒæŠ•射阴影。为了计算阴影,必须为LightOccluder2Dæä¾›"
+"鮿Œ¡ Light2D 投射的ç¯å…‰ï¼ŒæŠ•射阴影。为了计算阴影,必须为 LightOccluder2D æä¾› "
"[OccluderPolygon2D]。"
#: doc/classes/LightOccluder2D.xml
@@ -41365,12 +41537,12 @@ msgid ""
"The LightOccluder2D's light mask. The LightOccluder2D will cast shadows only "
"from Light2D(s) that have the same light mask(s)."
msgstr ""
-"LightOccluder2Dçš„ç¯å…‰é®ç½©ã€‚LightOccluder2D将仅从具有相åŒç¯å…‰é®ç½©çš„Light2D投射"
-"阴影。"
+"LightOccluder2D çš„ç¯å…‰é®ç½©ã€‚LightOccluder2D 将仅从具有相åŒç¯å…‰é®ç½©çš„ Light2D "
+"投射阴影。"
#: doc/classes/LightOccluder2D.xml
msgid "The [OccluderPolygon2D] used to compute the shadow."
-msgstr "用于计算阴影的[OccluderPolygon2D]。"
+msgstr "用于计算阴影的 [OccluderPolygon2D]。"
#: doc/classes/Line2D.xml
msgid "A 2D line."
@@ -41421,17 +41593,18 @@ msgstr "返回该 Line2D 上点的数é‡ã€‚"
#: doc/classes/Line2D.xml
msgid "Returns point [code]i[/code]'s position."
-msgstr "返回点[code]i[/code]çš„ä½ç½®ã€‚"
+msgstr "返回点 [code]i[/code] çš„ä½ç½®ã€‚"
#: doc/classes/Line2D.xml
msgid "Removes the point at index [code]i[/code] from the line."
-msgstr "将索引[code]i[/code]处的点从直线中移除。"
+msgstr "将索引 [code]i[/code] 处的点从直线中移除。"
#: doc/classes/Line2D.xml
msgid ""
"Overwrites the position in point [code]i[/code] with the supplied "
"[code]position[/code]."
-msgstr "用æä¾›çš„[code]position[/code]ä½ç½®è¦†ç›–索引[code]i[/code]处点的ä½ç½®ã€‚"
+msgstr ""
+"用æä¾›çš„ [code]position[/code] ä½ç½®è¦†ç›–索引 [code]i[/code] 处点的ä½ç½®ã€‚"
#: doc/classes/Line2D.xml
msgid ""
@@ -41515,7 +41688,7 @@ msgstr ""
msgid ""
"The texture used for the line's texture. Uses [code]texture_mode[/code] for "
"drawing style."
-msgstr "用于线æ¡çº¹ç†çš„纹ç†ã€‚使用[code]texture_mode[/code]作为绘图样å¼ã€‚"
+msgstr "用于线æ¡çº¹ç†çš„纹ç†ã€‚使用 [code]texture_mode[/code] 作为绘图样å¼ã€‚"
#: doc/classes/Line2D.xml
msgid ""
@@ -41970,7 +42143,7 @@ msgstr "按下清除按钮时使用的颜色。"
#: doc/classes/LineEdit.xml
msgid "Color of the [LineEdit]'s visual cursor (caret)."
-msgstr "[LineEdit]å¯è§†å…‰æ ‡(æ’入符å·)的颜色。"
+msgstr "[LineEdit] å¯è§†å…‰æ ‡ï¼ˆæ’入符å·ï¼‰çš„颜色。"
#: doc/classes/LineEdit.xml
msgid "Default font color."
@@ -41978,7 +42151,7 @@ msgstr "默认字体颜色。"
#: doc/classes/LineEdit.xml
msgid "Font color for selected text (inside the selection rectangle)."
-msgstr "选定文本的字体颜色(在选择矩形内)。"
+msgstr "选定文本的字体颜色(在选择矩形内)。"
#: doc/classes/LineEdit.xml
msgid "Font color when editing is disabled."
@@ -41994,8 +42167,8 @@ msgid ""
"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
msgid "Font used for the text."
@@ -42003,7 +42176,7 @@ msgstr "文本使用的字体。"
#: doc/classes/LineEdit.xml
msgid "Texture for the clear button. See [member clear_button_enabled]."
-msgstr "â€œæ¸…é™¤â€æŒ‰é’®çš„纹ç†ã€‚请å‚阅 [member clear_button_enabled]。"
+msgstr "â€œæ¸…é™¤â€æŒ‰é’®çš„纹ç†ã€‚è§ [member clear_button_enabled]。"
#: doc/classes/LineEdit.xml
msgid "Background used when [LineEdit] has GUI focus."
@@ -42296,7 +42469,7 @@ msgstr "在程åºé€€å‡ºå‰è°ƒç”¨ã€‚"
msgid ""
"Called when the user performs an action in the system global menu (e.g. the "
"Mac OS menu bar)."
-msgstr "当用户在系统全局èœå•(如 Mac OSçš„èœå•æ ï¼‰ä¸­æ‰§è¡ŒåŠ¨ä½œæ—¶è¢«è°ƒç”¨ã€‚"
+msgstr "当用户在系统全局èœå•(如 Mac OS çš„èœå•æ ï¼‰ä¸­æ‰§è¡ŒåŠ¨ä½œæ—¶è¢«è°ƒç”¨ã€‚"
#: doc/classes/MainLoop.xml
msgid ""
@@ -42606,8 +42779,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 ""
-"返回一个对应于Base64ç¼–ç çš„字符串[code]base64_str[/code]的解ç [Variant]。如果"
-"[code]allow_objects[/code]是[code]true[/code],则å…许对对象进行解ç ã€‚\n"
+"返回一个对应于 Base64 ç¼–ç çš„字符串 [code]base64_str[/code] çš„è§£ç  [Variant]。"
+"如果 [code]allow_objects[/code] 是 [code]true[/code],则å…许对对象进行解"
+"ç ã€‚\n"
"[b]警告:[/b]ååºåˆ—化的对象å¯èƒ½åŒ…å«ä¼šè¢«æ‰§è¡Œçš„代ç ã€‚如果åºåˆ—化的对象æ¥è‡ªä¸å—ä¿¡"
"ä»»çš„æ¥æºï¼Œè¯·ä¸è¦ä½¿ç”¨è¿™ä¸ªé€‰é¡¹ï¼Œä»¥é¿å…潜在的安全å¨èƒï¼Œå¦‚è¿œç¨‹ä»£ç æ‰§è¡Œã€‚"
@@ -42782,11 +42956,11 @@ msgstr "当鼠标在 [MenuButton] ä¸Šæ‚¬åœæ—¶ä½¿ç”¨çš„ [StyleBox] æ ·å¼ç›’。"
#: doc/classes/MenuButton.xml
msgid "Default [StyleBox] for the [MenuButton]."
-msgstr "[MenuButton]的默认[StyleBox]æ ·å¼ç›’。"
+msgstr "[MenuButton] 的默认 [StyleBox] æ ·å¼ç›’。"
#: doc/classes/MenuButton.xml
msgid "[StyleBox] used when the [MenuButton] is being pressed."
-msgstr "[MenuButton]被按下时的[StyleBox]æ ·å¼ç›’。"
+msgstr "[MenuButton] 被按下时的 [StyleBox] æ ·å¼ç›’。"
#: doc/classes/Mesh.xml
msgid "A [Resource] that contains vertex array-based geometry."
@@ -42817,8 +42991,8 @@ msgstr ""
"如果 [code]clean[/code] 是 [code]true[/code] (默认),é‡å¤çš„和内部的顶点会被"
"自动移除。你å¯ä»¥æŠŠå®ƒè®¾ä¸º [code]false[/code] æ¥ä½¿è¿™ä¸ªè¿‡ç¨‹æ›´å¿«ï¼Œå¦‚æžœä¸éœ€è¦çš„"
"è¯ã€‚\n"
-"如果[code]simplify[/code]是[code]true[/code],å¯ä»¥è¿›ä¸€æ­¥ç®€åŒ–几何体以å‡å°‘顶点"
-"的数é‡ã€‚默认情况下是ç¦ç”¨çš„。"
+"如果 [code]simplify[/code] 是 [code]true[/code],å¯ä»¥è¿›ä¸€æ­¥ç®€åŒ–几何体以å‡å°‘é¡¶"
+"点的数é‡ã€‚默认情况下是ç¦ç”¨çš„。"
#: doc/classes/Mesh.xml
msgid ""
@@ -42832,11 +43006,11 @@ msgstr ""
#: doc/classes/Mesh.xml
msgid "Calculate a [ConcavePolygonShape] from the mesh."
-msgstr "从网格中计算出[ConcavePolygonShape]。"
+msgstr "从网格中计算出 [ConcavePolygonShape]。"
#: doc/classes/Mesh.xml
msgid "Generate a [TriangleMesh] from the mesh."
-msgstr "从网格生æˆ[TriangleMesh]。"
+msgstr "ä»Žç½‘æ ¼ç”Ÿæˆ [TriangleMesh]。"
#: doc/classes/Mesh.xml
msgid ""
@@ -42875,21 +43049,21 @@ msgstr "返回所需é¢çš„æ··åˆå½¢çŠ¶æ•°ç»„ã€‚"
msgid ""
"Returns a [Material] in a given surface. Surface is rendered using this "
"material."
-msgstr "返回给定é¢çš„[Material]æè´¨ã€‚é¢å°†ç”±è¯¥æè´¨æ¥æ¸²æŸ“。"
+msgstr "返回给定é¢çš„ [Material] æè´¨ã€‚é¢å°†ç”±è¯¥æè´¨æ¥æ¸²æŸ“。"
#: doc/classes/Mesh.xml
msgid ""
"Sets a [Material] for a given surface. Surface will be rendered using this "
"material."
-msgstr "设置给定é¢çš„[Material]æè´¨ã€‚该é¢å°†ä¼šä½¿ç”¨æ­¤æè´¨æ¸²æŸ“。"
+msgstr "设置给定é¢çš„ [Material] æè´¨ã€‚该é¢å°†ä¼šä½¿ç”¨æ­¤æè´¨æ¸²æŸ“。"
#: doc/classes/Mesh.xml
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]。"
+"设置æç¤ºï¼Œç”¨äºŽ [BakedLightmap] 中的光照贴图分辨率。é‡å†™ [member "
+"BakedLightmap.default_texels_per_unit]。"
#: doc/classes/Mesh.xml
msgid "Render array as points (one vertex equals one point)."
@@ -42948,11 +43122,11 @@ msgstr "网格组包å«é¢œè‰²ã€‚"
#: doc/classes/Mesh.xml
msgid "Mesh array contains UVs."
-msgstr "网格组包å«UV。"
+msgstr "ç½‘æ ¼ç»„åŒ…å« UV。"
#: doc/classes/Mesh.xml
msgid "Mesh array contains second UV."
-msgstr "网格组包å«ç¬¬äºŒå¥—UV。"
+msgstr "网格组包å«ç¬¬äºŒå¥— UV。"
#: doc/classes/Mesh.xml
msgid "Mesh array contains bones."
@@ -42970,7 +43144,7 @@ msgstr "网格组使用索引。"
msgid ""
"Used internally to calculate other [code]ARRAY_COMPRESS_*[/code] enum "
"values. Do not use."
-msgstr "内部用于计算其他[code]ARRAY_COMPRESS_*[/code]枚举值。ä¸è¦ä½¿ç”¨ã€‚"
+msgstr "内部用于计算其他 [code]ARRAY_COMPRESS_*[/code] 枚举值。ä¸è¦ä½¿ç”¨ã€‚"
#: doc/classes/Mesh.xml doc/classes/VisualServer.xml
msgid "Flag used to mark a compressed (half float) vertex array."
@@ -42978,25 +43152,25 @@ msgstr "用于标记压缩(åŠç²¾åº¦æµ®ç‚¹ï¼‰é¡¶ç‚¹æ•°ç»„的标志。"
#: doc/classes/Mesh.xml doc/classes/VisualServer.xml
msgid "Flag used to mark a compressed (half float) normal array."
-msgstr "曾ç»ç”¨äºŽæ ‡è®°åŽ‹ç¼©ï¼ˆåŠç²¾åº¦æµ®ç‚¹ï¼‰æ³•呿•°ç»„çš„ Flag。"
+msgstr "曾ç»ç”¨äºŽæ ‡è®°åŽ‹ç¼©ï¼ˆåŠç²¾åº¦æµ®ç‚¹ï¼‰æ³•呿•°ç»„的标志。"
#: doc/classes/Mesh.xml doc/classes/VisualServer.xml
msgid "Flag used to mark a compressed (half float) tangent array."
-msgstr "曾ç»ç”¨äºŽæ ‡è®°åŽ‹ç¼©ï¼ˆåŠç²¾åº¦æµ®ç‚¹ï¼‰åˆ‡å‘数组的Flag。"
+msgstr "曾ç»ç”¨äºŽæ ‡è®°åŽ‹ç¼©ï¼ˆåŠç²¾åº¦æµ®ç‚¹ï¼‰åˆ‡å‘数组的标志。"
#: doc/classes/Mesh.xml doc/classes/VisualServer.xml
msgid "Flag used to mark a compressed (half float) color array."
-msgstr "曾用于标记压缩(åŠç²¾åº¦æµ®ç‚¹ï¼‰é¢œè‰²æ•°ç»„çš„Flag。"
+msgstr "曾用于标记压缩(åŠç²¾åº¦æµ®ç‚¹ï¼‰é¢œè‰²æ•°ç»„的标志。"
#: doc/classes/Mesh.xml doc/classes/VisualServer.xml
msgid "Flag used to mark a compressed (half float) UV coordinates array."
-msgstr "曾用于标记压缩(åŠç²¾åº¦æµ®ç‚¹ï¼‰UV åæ ‡æ•°ç»„çš„ Flag。"
+msgstr "曾用于标记压缩(åŠç²¾åº¦æµ®ç‚¹ï¼‰UV åæ ‡æ•°ç»„的标志。"
#: doc/classes/Mesh.xml doc/classes/VisualServer.xml
msgid ""
"Flag used to mark a compressed (half float) UV coordinates array for the "
"second UV coordinates."
-msgstr "曾用于标记第二套UVåæ ‡çš„压缩(åŠç²¾åº¦æµ®ç‚¹ï¼‰UVåæ ‡æ•°ç»„çš„Flag。"
+msgstr "曾用于标记第二套 UV åæ ‡çš„压缩(åŠç²¾åº¦æµ®ç‚¹ï¼‰UV åæ ‡æ•°ç»„的标志。"
#: doc/classes/Mesh.xml doc/classes/VisualServer.xml
msgid "Flag used to mark a compressed bone array."
@@ -43008,15 +43182,15 @@ msgstr "用于标记压缩(åŠç²¾åº¦æµ®ç‚¹ï¼‰æƒé‡æ•°ç»„的标志。"
#: doc/classes/Mesh.xml doc/classes/VisualServer.xml
msgid "Flag used to mark a compressed index array."
-msgstr "曾用于标记压缩索引数组的Flag。"
+msgstr "曾用于标记压缩索引数组的标志。"
#: doc/classes/Mesh.xml doc/classes/VisualServer.xml
msgid "Flag used to mark that the array contains 2D vertices."
-msgstr "曾用于标记包å«2D顶点的数组的Flag。"
+msgstr "æ›¾ç”¨äºŽæ ‡è®°åŒ…å« 2D 顶点的数组的标志。"
#: doc/classes/Mesh.xml doc/classes/VisualServer.xml
msgid "Flag used to mark that the array uses 16-bit bones instead of 8-bit."
-msgstr "用于标记数组使用16ä½éª¨éª¼è€Œä¸æ˜¯8ä½çš„æ ‡å¿—。"
+msgstr "用于标记数组使用 16 ä½éª¨éª¼è€Œä¸æ˜¯ 8 ä½çš„æ ‡å¿—。"
#: doc/classes/Mesh.xml doc/classes/VisualServer.xml
msgid ""
@@ -43032,10 +43206,10 @@ msgid ""
"ARRAY_COMPRESS_TEX_UV2], [constant ARRAY_COMPRESS_WEIGHTS], and [constant "
"ARRAY_FLAG_USE_OCTAHEDRAL_COMPRESSION] quickly."
msgstr ""
-"用于快速设置标志[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 "
+"用于快速设置标志 [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
@@ -43048,7 +43222,7 @@ msgstr "法线数组。"
#: doc/classes/Mesh.xml
msgid "Array of tangents as an array of floats, 4 floats per tangent."
-msgstr "åˆ‡å‘æ•°ç»„。æ¯ä¸€ä¸ªåˆ‡å‘æ•°æ®ç”±å››ä¸ªfloatå˜é‡æè¿°ã€‚"
+msgstr "åˆ‡å‘æ•°ç»„。æ¯ä¸€ä¸ªåˆ‡å‘æ•°æ®ç”±å››ä¸ª float å˜é‡æè¿°ã€‚"
#: doc/classes/Mesh.xml
msgid "Array of colors."
@@ -43060,7 +43234,7 @@ msgstr "UV åæ ‡æ•°ç»„。"
#: doc/classes/Mesh.xml
msgid "Array of second set of UV coordinates."
-msgstr "第二套UVåæ ‡æ•°ç»„。"
+msgstr "第二套 UV åæ ‡æ•°ç»„。"
#: doc/classes/Mesh.xml
msgid "Array of bone data."
@@ -43142,7 +43316,7 @@ msgstr ""
#: doc/classes/MeshDataTool.xml
msgid "Clears all data currently in MeshDataTool."
-msgstr "将当å‰MeshDataTool中所有的数æ®å…¨éƒ¨æ¸…除。"
+msgstr "å°†å½“å‰ MeshDataTool 中所有的数æ®å…¨éƒ¨æ¸…除。"
#: doc/classes/MeshDataTool.xml
msgid "Adds a new surface to specified [Mesh] with edited data."
@@ -43175,11 +43349,11 @@ msgid ""
"vertices."
msgstr ""
"返回连接到给定边的指定顶点的索引。\n"
-"é¡¶ç‚¹å‚æ•°åªèƒ½æ˜¯0或1,因为边是由两个顶点组æˆçš„。"
+"é¡¶ç‚¹å‚æ•°åªèƒ½æ˜¯ 0 或 1,因为边是由两个顶点组æˆçš„。"
#: doc/classes/MeshDataTool.xml
msgid "Returns the number of faces in this [Mesh]."
-msgstr "返回这个[Mesh]ä¸­çš„é¢æ•°ã€‚"
+msgstr "返回这个 [Mesh] ä¸­çš„é¢æ•°ã€‚"
#: doc/classes/MeshDataTool.xml
msgid ""
@@ -43223,7 +43397,7 @@ msgstr ""
#: doc/classes/MeshDataTool.xml
msgid "Returns the material assigned to the [Mesh]."
-msgstr "返回分é…ç»™[Mesh]çš„æè´¨ã€‚"
+msgstr "返回分é…ç»™ [Mesh] çš„æè´¨ã€‚"
#: doc/classes/MeshDataTool.xml
msgid "Returns the vertex at given index."
@@ -43239,7 +43413,7 @@ msgstr "返回给定顶点的颜色。"
#: doc/classes/MeshDataTool.xml
msgid "Returns the total number of vertices in [Mesh]."
-msgstr "返回[Mesh]中顶点的总数。"
+msgstr "返回 [Mesh] 中顶点的总数。"
#: doc/classes/MeshDataTool.xml
msgid "Returns an array of edges that share the given vertex."
@@ -43263,11 +43437,11 @@ msgstr "返回给定顶点的正切值。"
#: doc/classes/MeshDataTool.xml
msgid "Returns the UV of the given vertex."
-msgstr "返回给定顶点的UV。"
+msgstr "返回给定顶点的 UV。"
#: doc/classes/MeshDataTool.xml
msgid "Returns the UV2 of the given vertex."
-msgstr "返回给定顶点的UV2。"
+msgstr "返回给定顶点的 UV2。"
#: doc/classes/MeshDataTool.xml
msgid "Returns bone weights of the given vertex."
@@ -43283,7 +43457,7 @@ msgstr "设置给定é¢çš„元数æ®ã€‚"
#: doc/classes/MeshDataTool.xml
msgid "Sets the material to be used by newly-constructed [Mesh]."
-msgstr "设置新构建的[Mesh]使用的æè´¨ã€‚"
+msgstr "设置新构建的 [Mesh] 使用的æè´¨ã€‚"
#: doc/classes/MeshDataTool.xml
msgid "Sets the position of the given vertex."
@@ -43311,11 +43485,11 @@ msgstr "设置给定顶点的切线。"
#: doc/classes/MeshDataTool.xml
msgid "Sets the UV of the given vertex."
-msgstr "设置给定顶点的UV。"
+msgstr "设置给定顶点的 UV。"
#: doc/classes/MeshDataTool.xml
msgid "Sets the UV2 of the given vertex."
-msgstr "设置给定顶点的UV2。"
+msgstr "设置给定顶点的 UV2。"
#: doc/classes/MeshDataTool.xml
msgid "Sets the bone weights of the given vertex."
@@ -43334,10 +43508,10 @@ msgid ""
"[Mesh] has to be instanced more than thousands of times at close proximity, "
"consider using a [MultiMesh] in a [MultiMeshInstance] instead."
msgstr ""
-"MeshInstance是一个节点,它获å–[Mesh]资æºå¹¶åˆ›å»ºä¸€ä¸ªå®žä¾‹ï¼Œå°†å…¶æ·»åŠ åˆ°å½“å‰åœºæ™¯"
-"ä¸­ã€‚è¿™æ˜¯æœ€å¸¸è¢«ç”¨æ¥æ¸²æŸ“3D几何体的类,这å¯ä»¥åœ¨å¾ˆå¤šåœ°æ–¹ä½¿ç”¨[Mesh]实例,它å…许é‡"
-"å¤ä½¿ç”¨å‡ ä½•体并节çœèµ„æºã€‚当[Mesh]å¿…é¡»åœ¨å¾ˆè¿‘çš„åœ°æ–¹è¢«å®žä¾‹åŒ–è¶…è¿‡æ•°åƒæ¬¡æ—¶ï¼Œå¯ä»¥è€ƒ"
-"虑在[MultiMeshInstance]中使用[MultiMesh]æ¥ä»£æ›¿ã€‚"
+"MeshInstance æ˜¯ä¸€ä¸ªèŠ‚ç‚¹ï¼Œå®ƒèŽ·å– [Mesh] 资æºå¹¶åˆ›å»ºä¸€ä¸ªå®žä¾‹ï¼Œå°†å…¶æ·»åŠ åˆ°å½“å‰åœºæ™¯"
+"ä¸­ã€‚è¿™æ˜¯æœ€å¸¸è¢«ç”¨æ¥æ¸²æŸ“ 3D 几何体的类,这å¯ä»¥åœ¨å¾ˆå¤šåœ°æ–¹ä½¿ç”¨ [Mesh] 实例,它å…"
+"许é‡å¤ä½¿ç”¨å‡ ä½•体并节çœèµ„æºã€‚当 [Mesh] å¿…é¡»åœ¨å¾ˆè¿‘çš„åœ°æ–¹è¢«å®žä¾‹åŒ–è¶…è¿‡æ•°åƒæ¬¡æ—¶ï¼Œ"
+"å¯ä»¥è€ƒè™‘在 [MultiMeshInstance] 中使用 [MultiMesh] æ¥ä»£æ›¿ã€‚"
#: doc/classes/MeshInstance.xml
msgid ""
@@ -43350,21 +43524,21 @@ 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],å¯ä»¥è¿›ä¸€æ­¥ç®€åŒ–几何体以å‡å°‘顶点"
-"的数é‡ã€‚默认情况下是ç¦ç”¨çš„。"
+"这个辅助工具创建 [StaticBody] å­èŠ‚ç‚¹ï¼Œè¯¥èŠ‚ç‚¹å…·æœ‰ä»Žç½‘æ ¼å‡ ä½•å½¢çŠ¶è®¡ç®—çš„ "
+"[ConvexPolygonShape] 碰撞形状。其主è¦ç”¨äºŽæµ‹è¯•。\n"
+"如果 [code]clean[/code] 是 [code]true[/code](默认),é‡å¤çš„顶点和内部顶点会"
+"被自动移除。å¯ä»¥æŠŠå®ƒè®¾ç½®ä¸º [code]false[/code],以便在ä¸éœ€è¦çš„æƒ…况下使这个过程"
+"更快。\n"
+"如果 [code]simplify[/code] 是 [code]true[/code],å¯ä»¥è¿›ä¸€æ­¥ç®€åŒ–几何体以å‡å°‘é¡¶"
+"点的数é‡ã€‚默认情况下是ç¦ç”¨çš„。"
#: doc/classes/MeshInstance.xml
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 ""
-"这个辅助工具创建[MeshInstance]å­èŠ‚ç‚¹ï¼Œåœ¨æ¯ä¸ªé¡¶ç‚¹éƒ½æœ‰æ ¹æ®ç½‘格几何形状计算的辅"
-"助线框。其主è¦ç”¨äºŽæµ‹è¯•。"
+"这个辅助工具创建 [MeshInstance] å­èŠ‚ç‚¹ï¼Œåœ¨æ¯ä¸ªé¡¶ç‚¹éƒ½æœ‰æ ¹æ®ç½‘格几何形状计算的"
+"辅助线框。其主è¦ç”¨äºŽæµ‹è¯•。"
#: doc/classes/MeshInstance.xml
msgid ""
@@ -43372,8 +43546,8 @@ msgid ""
"[ConvexPolygonShape] collision shapes calculated from the mesh geometry via "
"convex decomposition. It's mainly used for testing."
msgstr ""
-"这个助手创建[StaticBody]å­èŠ‚ç‚¹ï¼Œè¯¥èŠ‚ç‚¹å…·æœ‰å¤šä¸ª[ConvexPolygonShape]碰撞形状,"
-"这些碰撞形状是通过凸é¢åˆ†è§£ä»Žç½‘格几何形状计算出æ¥çš„。其主è¦ç”¨äºŽæµ‹è¯•。"
+"这个辅助工具创建 [StaticBody] å­èŠ‚ç‚¹ï¼Œè¯¥èŠ‚ç‚¹å…·æœ‰å¤šä¸ª [ConvexPolygonShape] 碰"
+"撞形状,这些碰撞形状是通过凸é¢åˆ†è§£ä»Žç½‘格几何形状计算出æ¥çš„。其主è¦ç”¨äºŽæµ‹è¯•。"
#: doc/classes/MeshInstance.xml
msgid ""
@@ -43381,7 +43555,7 @@ msgid ""
"collision shape calculated from the mesh geometry. It's mainly used for "
"testing."
msgstr ""
-"这个助手创建[StaticBody]å­èŠ‚ç‚¹ï¼Œå…¶ç¢°æ’žå½¢çŠ¶æ˜¯ç”±ç½‘æ ¼çš„å‡ ä½•å½¢çŠ¶è®¡ç®—å‡ºæ¥çš„"
+"这个辅助工具创建 [StaticBody] å­èŠ‚ç‚¹ï¼Œå…¶ç¢°æ’žå½¢çŠ¶æ˜¯ç”±ç½‘æ ¼çš„å‡ ä½•å½¢çŠ¶è®¡ç®—å‡ºæ¥çš„ "
"[ConcavePolygonShape],其主è¦ç”¨äºŽæµ‹è¯•。"
#: doc/classes/MeshInstance.xml
@@ -43392,17 +43566,23 @@ 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 GeometryInstance."
-"material_override],这个[MeshInstance]中定义的表é¢è¦†ç›–[Material],或者[Mesh]"
-"中定义的表é¢[Material]。例如,如果使用[member GeometryInstance."
+"返回 [Mesh] 绘制时使用的 [Material]。这å¯ä»¥è¿”回 [member GeometryInstance."
+"material_override],这个 [MeshInstance] 中定义的表é¢è¦†ç›– [Material],或者 "
+"[Mesh] ä¸­å®šä¹‰çš„è¡¨é¢ [Material]。例如,如果使用 [member GeometryInstance."
"material_override],所有的表é¢éƒ½ä¼šè¿”回覆盖的æè´¨ã€‚"
#: doc/classes/MeshInstance.xml
-msgid "Returns the [Material] for a surface of the [Mesh] resource."
-msgstr "返回[Mesh]资æºè¡¨é¢çš„[Material]。"
+msgid ""
+"Returns the override [Material] for a surface of the [Mesh] resource.\n"
+"[b]Note:[/b] This function only returns [i]override[/i] materials associated "
+"with this [MeshInstance]. Consider using [method get_active_material] or "
+"[method Mesh.surface_get_material] to get materials associated with the "
+"[Mesh] resource."
+msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the number of surface materials."
+#, fuzzy
+msgid "Returns the number of surface override materials."
msgstr "è¿”å›žè¡¨é¢æè´¨çš„æ•°é‡ã€‚"
#: doc/classes/MeshInstance.xml
@@ -43453,12 +43633,15 @@ msgstr ""
"å¦å¤–请注æ„,目标 [MeshInstance] 中的任何åˆå§‹æ•°æ®éƒ½ä¼šè¢«ä¸¢å¼ƒã€‚"
#: doc/classes/MeshInstance.xml
-msgid "Sets the [Material] for a surface of the [Mesh] resource."
-msgstr "为[Mesh]资æºçš„表é¢è®¾ç½®[Material]。"
+msgid ""
+"Sets the override [Material] for the specified surface of the [Mesh] "
+"resource. This material is associated with this [MeshInstance] rather than "
+"with the [Mesh] resource."
+msgstr ""
#: doc/classes/MeshInstance.xml
msgid "The [Mesh] resource for the instance."
-msgstr "该实例的[Mesh]资æºã€‚"
+msgstr "该实例的 [Mesh] 资æºã€‚"
#: doc/classes/MeshInstance.xml
msgid "[NodePath] to the [Skeleton] associated with the instance."
@@ -43484,21 +43667,22 @@ msgstr ""
#: doc/classes/MeshInstance2D.xml
msgid "Node used for displaying a [Mesh] in 2D."
-msgstr "用于在2D中显示[Mesh]的节点。"
+msgstr "用于在 2D 中显示 [Mesh] 的节点。"
#: doc/classes/MeshInstance2D.xml
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\"."
+"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be "
+"automatically created from an existing [Sprite] via a tool in the editor "
+"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to "
+"MeshInstance2D[/b] at the top of the 2D editor viewport."
msgstr ""
-"用于在2D中显示[Mesh]的节点。å¯ä»¥é€šè¿‡ç¼–辑器工具æ ä¸Šçš„工具从现有的[Sprite]æž„"
-"建。选择 \"Sprite\",然åŽé€‰æ‹© \"转æ¢ä¸ºMesh2D\",在弹出的窗å£ä¸­é€‰æ‹©è®¾ç½®å¹¶æŒ‰ä¸‹ "
-"\"创建Mesh2D\"。"
+"用于在 2D 中显示 [Mesh] 的节点。å¯ä»¥é€šè¿‡ç¼–辑器工具æ ä¸Šçš„工具从现有的 "
+"[Sprite] 构建。选中 [Sprite] 节点,然åŽåœ¨ 2D 编辑器视区顶部选择[b]ç²¾çµ > 转æ¢"
+"为 MeshInstance2D[/b]。"
#: doc/classes/MeshInstance2D.xml
msgid "The [Mesh] that will be drawn by the [MeshInstance2D]."
-msgstr "[Mesh]将由[MeshInstance2D]绘制。"
+msgstr "[Mesh] 将由 [MeshInstance2D] 绘制。"
#: doc/classes/MeshInstance2D.xml doc/classes/MultiMeshInstance2D.xml
msgid ""
@@ -43524,7 +43708,7 @@ msgstr ""
#: doc/classes/MeshInstance2D.xml doc/classes/MultiMeshInstance2D.xml
msgid "Emitted when the [member texture] is changed."
-msgstr "当[member texture]è¢«æ”¹å˜æ—¶è§¦å‘。"
+msgstr "当 [member texture] è¢«æ”¹å˜æ—¶è§¦å‘。"
#: doc/classes/MeshLibrary.xml
msgid "Library of meshes."
@@ -43536,8 +43720,8 @@ msgid ""
"and ID. Each item can also include collision and navigation shapes. This "
"resource is used in [GridMap]."
msgstr ""
-"网格库包å«ä¸€ä¸ª[Mesh]资æºåˆ—表,æ¯ä¸ªèµ„æºéƒ½æœ‰ä¸€ä¸ªåç§°å’ŒID。æ¯ä¸ªé¡¹ç›®è¿˜å¯ä»¥åŒ…括碰"
-"撞和导航形状。这个资æºåœ¨[GridMap]中使用。"
+"网格库包å«ä¸€ä¸ª [Mesh] 资æºåˆ—表,æ¯ä¸ªèµ„æºéƒ½æœ‰ä¸€ä¸ªåç§°å’Œ ID。æ¯ä¸ªé¡¹ç›®è¿˜å¯ä»¥åŒ…括"
+"碰撞和导航形状。这个资æºåœ¨ [GridMap] 中使用。"
#: doc/classes/MeshLibrary.xml
msgid "Clears the library."
@@ -43548,8 +43732,8 @@ 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 ""
-"使用给定的ID在库中创建一个新项。\n"
-"ä½ å¯ä»¥ä»Ž[method get_last_unused_item_id]获å–一个未使用的ID。"
+"使用给定的 ID 在库中创建一个新项。\n"
+"ä½ å¯ä»¥ä»Ž [method get_last_unused_item_id] 获å–一个未使用的 ID。"
#: doc/classes/MeshLibrary.xml
msgid "Returns the first item with the given name."
@@ -43557,7 +43741,7 @@ msgstr "返回第一个指定åç§°çš„ item。"
#: doc/classes/MeshLibrary.xml
msgid "Returns the list of item IDs in use."
-msgstr "返回正在使用的 item id列表。"
+msgstr "返回正在使用的 item id 列表。"
#: doc/classes/MeshLibrary.xml
msgid "Returns the item's mesh."
@@ -43597,11 +43781,11 @@ msgid ""
"The array consists of each [Shape] followed by its [Transform]."
msgstr ""
"返回项目的碰撞形状。\n"
-"这个数组由æ¯ä¸ª[Shape]和它的[Transform]组æˆã€‚"
+"这个数组由æ¯ä¸ª [Shape] 和它的 [Transform] 组æˆã€‚"
#: doc/classes/MeshLibrary.xml
msgid "Gets an unused ID for a new item."
-msgstr "èŽ·å–æ–°é¡¹æœªä½¿ç”¨çš„ID。"
+msgstr "èŽ·å–æ–°é¡¹æœªä½¿ç”¨çš„ ID。"
#: doc/classes/MeshLibrary.xml
msgid "Removes the item."
@@ -43622,7 +43806,7 @@ msgid ""
"later using [method find_item_by_name]."
msgstr ""
"设置项的å称。\n"
-"该å称显示在编辑器中。ç¨åŽè¿˜å¯ä»¥ä½¿ç”¨[method find_item_by_name]æ¥æŸ¥æ‰¾è¯¥é¡¹ã€‚"
+"该å称显示在编辑器中。ç¨åŽè¿˜å¯ä»¥ä½¿ç”¨ [method find_item_by_name] æ¥æŸ¥æ‰¾è¯¥é¡¹ã€‚"
#: doc/classes/MeshLibrary.xml
msgid "Sets the item's navigation mesh."
@@ -43656,8 +43840,8 @@ 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 ""
-"简å•的纹ç†ï¼Œä½¿ç”¨ä¸€ä¸ªç½‘æ ¼æ¥ç»˜åˆ¶è‡ªå·±ã€‚它的应用场景有é™ï¼Œå› ä¸ºFlagä¸èƒ½æ›´æ”¹ï¼Œè€Œä¸”"
-"䏿”¯æŒåŒºåŸŸç»˜åˆ¶ã€‚"
+"简å•的纹ç†ï¼Œä½¿ç”¨ä¸€ä¸ªç½‘æ ¼æ¥ç»˜åˆ¶è‡ªå·±ã€‚它的应用场景有é™ï¼Œå› ä¸º Flag ä¸èƒ½æ›´æ”¹ï¼Œè€Œ"
+"䏔䏿”¯æŒåŒºåŸŸç»˜åˆ¶ã€‚"
#: doc/classes/MeshTexture.xml
msgid "Sets the base texture that the Mesh will use to draw."
@@ -43669,7 +43853,7 @@ msgstr "设置图åƒçš„大å°ï¼Œéœ€è¦å‚考。"
#: doc/classes/MeshTexture.xml
msgid "Sets the mesh used to draw. It must be a mesh using 2D vertices."
-msgstr "设置用于绘制的网格,该网格必须使用2D顶点。"
+msgstr "设置用于绘制的网格,该网格必须使用 2D 顶点。"
#: doc/classes/MethodTweener.xml
msgid ""
@@ -43717,7 +43901,7 @@ msgstr ""
#: modules/mobile_vr/doc_classes/MobileVRInterface.xml
msgid "Generic mobile VR implementation."
-msgstr "通用移动VR实现。"
+msgstr "通用移动 VR 实现。"
#: modules/mobile_vr/doc_classes/MobileVRInterface.xml
msgid ""
@@ -43761,7 +43945,7 @@ msgstr "显示器的宽度,以厘米为å•ä½ã€‚"
msgid ""
"The height at which the camera is placed in relation to the ground (i.e. "
"[ARVROrigin] node)."
-msgstr "æ‘„åƒæœºç›¸å¯¹äºŽåœ°é¢æ‰€å¤„的高度,å³[ARVROrigin]节点。"
+msgstr "æ‘„åƒæœºç›¸å¯¹äºŽåœ°é¢æ‰€å¤„çš„é«˜åº¦ï¼Œå³ [ARVROrigin] 节点。"
#: modules/mobile_vr/doc_classes/MobileVRInterface.xml
msgid ""
@@ -43773,11 +43957,12 @@ msgstr "眼间è·ç¦»ï¼Œä¹Ÿç§°ä¸ºçž³å­”é—´è·ç¦»ã€‚左眼和å³çœ¼çž³å­”之间的
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 "k1é•œå¤´å› å­æ˜¯å®šä¹‰æ‰€ä½¿ç”¨é•œå¤´å¼ºåº¦çš„两个常é‡ä¹‹ä¸€ï¼Œå¹¶ç›´æŽ¥å½±å“镜头失真效果。"
+msgstr ""
+"k1 é•œå¤´å› å­æ˜¯å®šä¹‰æ‰€ä½¿ç”¨é•œå¤´å¼ºåº¦çš„两个常é‡ä¹‹ä¸€ï¼Œå¹¶ç›´æŽ¥å½±å“镜头失真效果。"
#: modules/mobile_vr/doc_classes/MobileVRInterface.xml
msgid "The k2 lens factor, see k1."
-msgstr "k2镜头因å­ï¼Œè§k1。"
+msgstr "k2 镜头因å­ï¼Œè§ k1。"
#: modules/mobile_vr/doc_classes/MobileVRInterface.xml
msgid ""
@@ -43832,7 +44017,7 @@ msgstr "返回已ç»ä¸ºç‰¹å®šå®žä¾‹è®¾ç½®çš„自定义数æ®ã€‚"
#: doc/classes/MultiMesh.xml
msgid "Returns the [Transform] of a specific instance."
-msgstr "返回一个特定实例的[Transform]。"
+msgstr "返回一个特定实例的 [Transform]。"
#: doc/classes/MultiMesh.xml
msgid "Returns the [Transform2D] of a specific instance."
@@ -43907,8 +44092,8 @@ msgid ""
"just a container for 4 floating point numbers. The format of the number can "
"change depending on the [enum CustomDataFormat] used."
msgstr ""
-"为特定的实例设置自定义数æ®ã€‚虽然使用了[Color]ï¼Œä½†å®ƒåªæ˜¯ä¸€ä¸ªå®¹çº³4个浮点数的容"
-"器。数字的格å¼å¯ä»¥æ ¹æ®ä½¿ç”¨çš„[enum CustomDataFormat]æ¥æ”¹å˜ã€‚"
+"为特定的实例设置自定义数æ®ã€‚虽然使用了 [Color]ï¼Œä½†å®ƒåªæ˜¯ä¸€ä¸ªå®¹çº³ 4 个浮点数的"
+"容器。数字的格å¼å¯ä»¥æ ¹æ®ä½¿ç”¨çš„ [enum CustomDataFormat] æ¥æ”¹å˜ã€‚"
#: doc/classes/MultiMesh.xml
msgid "Sets the [Transform] for a specific instance."
@@ -43956,7 +44141,7 @@ msgstr ""
#: doc/classes/MultiMesh.xml
msgid "Format of transform used to transform mesh, either 2D or 3D."
-msgstr "ç”¨äºŽå˜æ¢ç½‘æ ¼çš„å˜æ¢æ ¼å¼ï¼Œå¯ä»¥æ˜¯2D或3D。"
+msgstr "ç”¨äºŽå˜æ¢ç½‘æ ¼çš„å˜æ¢æ ¼å¼ï¼Œå¯ä»¥æ˜¯ 2D 或 3D。"
#: doc/classes/MultiMesh.xml
msgid ""
@@ -44005,7 +44190,7 @@ msgid ""
"will be clamped."
msgstr ""
"传递给ç€è‰²å™¨æ—¶å°† custom_data 压缩为 8 ä½ã€‚这使用更少的内存并且å¯ä»¥æ›´å¿«ï¼Œä½†ä¼š"
-"失去精度和范围。 8 使µ®ç‚¹æ•°åªèƒ½è¡¨ç¤º 0 到 1 之间的值,超出该范围的数字将被é™"
+"失去精度和范围。8 使µ®ç‚¹æ•°åªèƒ½è¡¨ç¤º 0 到 1 之间的值,超出该范围的数字将被é™"
"制。"
#: doc/classes/MultiMesh.xml
@@ -44039,15 +44224,15 @@ msgid ""
"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 ""
-"[MultiMeshInstance]是特有的节点,用于基于[MultiMesh]资æºçš„[GeometryInstance]"
-"的实例。\n"
+"[MultiMeshInstance] 是特有的节点,用于基于 [MultiMesh] 资æºçš„ "
+"[GeometryInstance] 的实例。\n"
"这对于优化给定网格的大é‡å®žä¾‹çš„æ¸²æŸ“是éžå¸¸æœ‰ç”¨çš„(例如,森林中的树木或è‰ä¸›ï¼‰ã€‚"
#: doc/classes/MultiMeshInstance.xml
msgid ""
"The [MultiMesh] resource that will be used and shared among all instances of "
"the [MultiMeshInstance]."
-msgstr "在[MultiMeshInstance]的所有实例中使用和共享的[MultiMesh]资æºã€‚"
+msgstr "在 [MultiMeshInstance] 的所有实例中使用和共享的 [MultiMesh] 资æºã€‚"
#: doc/classes/MultiMeshInstance2D.xml
msgid "Node that instances a [MultiMesh] in 2D."
@@ -44059,16 +44244,16 @@ msgid ""
"resource in 2D.\n"
"Usage is the same as [MultiMeshInstance]."
msgstr ""
-"[MultiMeshInstance2D]是特有的节点,用于实例化2Dçš„[MultiMesh]资æºã€‚\n"
-"使用方法与[MultiMeshInstance]相åŒã€‚"
+"[MultiMeshInstance2D] 是特有的节点,用于实例化 2D çš„ [MultiMesh] 资æºã€‚\n"
+"使用方法与 [MultiMeshInstance] 相åŒã€‚"
#: doc/classes/MultiMeshInstance2D.xml
msgid "The [MultiMesh] that will be drawn by the [MultiMeshInstance2D]."
-msgstr "将由[MultiMeshInstance2D]绘制的[MultiMesh]。"
+msgstr "将由 [MultiMeshInstance2D] 绘制的 [MultiMesh]。"
#: doc/classes/MultiplayerAPI.xml
msgid "High-level multiplayer API."
-msgstr "高级多人游æˆAPI。"
+msgstr "é«˜çº§å¤šäººæ¸¸æˆ API。"
#: doc/classes/MultiplayerAPI.xml
msgid ""
@@ -44083,40 +44268,42 @@ msgid ""
"detail and isn't meant to be used by non-Godot servers. It may change "
"without notice."
msgstr ""
-"该类实现了高阶多人游æˆAPI背åŽçš„大部分逻辑。å‚阅[NetworkedMultiplayerPeer]。\n"
-"默认情况下,[SceneTree]有对该类的引用,用于在整个场景中æä¾›å¤šäººæ¸¸æˆåŠŸèƒ½ï¼ˆå³"
+"è¯¥ç±»å®žçŽ°äº†é«˜é˜¶å¤šäººæ¸¸æˆ API 背åŽçš„大部分逻辑。å¦è¯·å‚阅 "
+"[NetworkedMultiplayerPeer]。\n"
+"默认情况下,[SceneTree] 有对该类的引用,用于在整个场景中æä¾›å¤šäººæ¸¸æˆåŠŸèƒ½ï¼ˆå³ "
"RPC/RSET)。\n"
-"通过设置[member Node.custom_multiplayer]属性,å¯ä»¥é‡å†™ç‰¹å®šèŠ‚ç‚¹ä½¿ç”¨çš„å¤šäººæ¸¸æˆ"
-"API实例,从而有效地å…许在åŒä¸€åœºæ™¯ä¸­åŒæ—¶è¿è¡Œå®¢æˆ·ç«¯å’ŒæœåŠ¡å™¨ã€‚\n"
-"[b]注æ„:[/b]高阶的多人游æˆAPIåè®®å®žçŽ°ç»†èŠ‚ï¼Œå¹¶ä¸æ„味ç€å¯ä»¥è¢«éžGodotæœåŠ¡å™¨ä½¿"
-"用。它å¯èƒ½ä¼šæ”¹å˜ï¼Œä¸åšå¦è¡Œé€šçŸ¥ã€‚"
+"通过设置 [member Node.custom_multiplayer] 属性,å¯ä»¥é‡å†™ç‰¹å®šèŠ‚ç‚¹ä½¿ç”¨çš„ "
+"MultiplayerAPI 实例,从而有效地å…许在åŒä¸€åœºæ™¯ä¸­åŒæ—¶è¿è¡Œå®¢æˆ·ç«¯å’ŒæœåŠ¡å™¨ã€‚\n"
+"[b]注æ„:[/b]é«˜é˜¶çš„å¤šäººæ¸¸æˆ API åè®®å®žçŽ°ç»†èŠ‚ï¼Œå¹¶ä¸æ„味ç€å¯ä»¥è¢«éž Godot æœåС噍"
+"使用。它å¯èƒ½ä¼šæ”¹å˜ï¼Œä¸åšå¦è¡Œé€šçŸ¥ã€‚"
#: doc/classes/MultiplayerAPI.xml
msgid ""
"Clears the current MultiplayerAPI network state (you shouldn't call this "
"unless you know what you are doing)."
msgstr ""
-"清除当å‰çš„MultiplayerAPI网络状æ€ï¼ˆé™¤éžä½ çŸ¥é“自己在åšä»€ä¹ˆï¼Œå¦åˆ™ä¸åº”该调用这"
+"清除当å‰çš„ MultiplayerAPI 网络状æ€ï¼ˆé™¤éžä½ çŸ¥é“自己在åšä»€ä¹ˆï¼Œå¦åˆ™ä¸åº”该调用这"
"个)。"
#: doc/classes/MultiplayerAPI.xml
msgid ""
"Returns the peer IDs of all connected peers of this MultiplayerAPI's [member "
"network_peer]."
-msgstr "返回此MultiplayerAPI的[member network_peer]的所有连接的对等体的ID。"
+msgstr ""
+"返回这个 MultiplayerAPI 的 [member network_peer] 的所有连接的对等体的 ID。"
#: doc/classes/MultiplayerAPI.xml
msgid ""
"Returns the unique peer ID of this MultiplayerAPI's [member network_peer]."
-msgstr "返回该多人游æˆAPIçš„[member network_peer]的唯一对等体ID。"
+msgstr "返回这个 MultiplayerAPI 的 [member network_peer] 的唯一对等体 ID。"
#: doc/classes/MultiplayerAPI.xml
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 ""
-"è¿”å›žå½“å‰æ­£åœ¨æ‰§è¡Œçš„RPCçš„å‘逿–¹çš„对等体ID。\n"
-"[b]注æ„:[/b]如果ä¸åœ¨RPC内,这个方法将返回0。"
+"è¿”å›žå½“å‰æ­£åœ¨æ‰§è¡Œçš„ RPC çš„å‘逿–¹çš„对等体 ID。\n"
+"[b]注æ„:[/b]如果ä¸åœ¨ RPC 内,这个方法将返回 0。"
#: doc/classes/MultiplayerAPI.xml doc/classes/SceneTree.xml
msgid "Returns [code]true[/code] if there is a [member network_peer] set."
@@ -44127,8 +44314,8 @@ msgid ""
"Returns [code]true[/code] if this MultiplayerAPI's [member network_peer] is "
"in server mode (listening for connections)."
msgstr ""
-"如果这个MultiplayerAPIçš„[member network_peer]处于æœåŠ¡å™¨æ¨¡å¼ï¼ˆç›‘å¬è¿žæŽ¥ï¼‰ï¼Œè¿”"
-"回 [code]true[/code]。"
+"如果这个 MultiplayerAPI çš„ [member network_peer] 处于æœåŠ¡å™¨æ¨¡å¼ï¼ˆç›‘å¬è¿žæŽ¥ï¼‰ï¼Œ"
+"返回 [code]true[/code]。"
#: doc/classes/MultiplayerAPI.xml
msgid ""
@@ -44140,9 +44327,10 @@ msgid ""
"will be executed in the same context of this function (e.g. [code]_process[/"
"code], [code]physics[/code], [Thread])."
msgstr ""
-"ç”¨äºŽè½®è¯¢å¤šäººæ¸¸æˆ API çš„æ–¹æ³•ã€‚åªæœ‰å½“你使用 [member Node.custom_multiplayer] 覆"
-"盖或者你将 [member SceneTree.multiplayer_poll] 设置为 [code]false[/code] 时,"
-"ä½ æ‰éœ€è¦æ‹…心这个问题。默认情况下,[SceneTree] å°†ä¸ºä½ è½®è¯¢å…¶å¤šäººæ¸¸æˆ API。\n"
+"用于轮询 MultiplayerAPI çš„æ–¹æ³•ã€‚åªæœ‰å½“你使用 [member Node."
+"custom_multiplayer] 覆盖或者你将 [member SceneTree.multiplayer_poll] 设置为 "
+"[code]false[/code] 时,你æ‰éœ€è¦æ‹…心这个问题。默认情况下,[SceneTree] 将为你轮"
+"询其 MultiplayerAPI。\n"
"[b]注æ„:[/b]这个方法导致 RPC å’Œ RSET 被调用,所以它们将在这个函数的åŒä¸€ä¸Šä¸‹"
"文中执行(例如 [code]_process[/code]ã€[code]physics[/code]ã€[Thread])。"
@@ -44166,8 +44354,8 @@ msgid ""
"to avoid potential security threats such as remote code execution."
msgstr ""
"如果为 [code]true[/code](或者如果 [member network_peer] 的 [member "
-"PacketPeer.allow_object_decoding] 被设置为 [code]true[/code]ï¼‰ï¼Œå¤šäººæ¸¸æˆ API "
-"å°†å…许在 RPC/RSET 期间的对象进行编ç å’Œè§£ç ã€‚\n"
+"PacketPeer.allow_object_decoding] 被设置为 [code]true[/code]),"
+"MultiplayerAPI å°†å…许在 RPC/RSET 期间的对象进行编ç å’Œè§£ç ã€‚\n"
"[b]警告:[/b]ååºåˆ—化的对象å¯èƒ½åŒ…å«ä¼šè¢«æ‰§è¡Œçš„代ç ã€‚如果åºåˆ—化的对象æ¥è‡ªä¸å—ä¿¡"
"ä»»çš„æ¥æºï¼Œè¯·ä¸è¦ä½¿ç”¨è¿™ä¸ªé€‰é¡¹ï¼Œä»¥é¿å…潜在的安全å¨èƒï¼Œå¦‚è¿œç¨‹ä»£ç æ‰§è¡Œã€‚"
@@ -44192,8 +44380,8 @@ msgid ""
"If [code]true[/code], the MultiplayerAPI's [member network_peer] refuses new "
"incoming connections."
msgstr ""
-"如果[code]true[/code],则MultiplayerAPIçš„[member network_peer]ä¼šæ‹’ç»æ–°çš„ä¼ å…¥"
-"连接。"
+"如果为 [code]true[/code],则MultiplayerAPIçš„[member network_peer]ä¼šæ‹’ç»æ–°çš„ä¼ "
+"入连接。"
#: doc/classes/MultiplayerAPI.xml
msgid ""
@@ -44203,25 +44391,26 @@ 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
msgid ""
"Emitted when this MultiplayerAPI's [member network_peer] successfully "
"connected to a server. Only emitted on clients."
msgstr ""
-"当这个MultiplayerAPIçš„[member network_peer]æˆåŠŸè¿žæŽ¥åˆ°ä¸€ä¸ªæœåŠ¡å™¨æ—¶è§¦å‘该信å·ã€‚"
-"è¿™åªåœ¨å®¢æˆ·ç«¯è§¦å‘。"
+"当这个 MultiplayerAPI çš„ [member network_peer] æˆåŠŸè¿žæŽ¥åˆ°ä¸€ä¸ªæœåŠ¡å™¨æ—¶è§¦å‘该信"
+"å·ã€‚è¿™åªåœ¨å®¢æˆ·ç«¯è§¦å‘。"
#: doc/classes/MultiplayerAPI.xml
msgid ""
"Emitted when this MultiplayerAPI's [member network_peer] fails to establish "
"a connection to a server. Only emitted on clients."
msgstr ""
-"当这个MultiplayerAPIçš„[member network_peer]无法与æœåŠ¡å™¨å»ºç«‹è¿žæŽ¥æ—¶è§¦å‘。åªåœ¨å®¢"
-"户端触å‘。"
+"当这个 MultiplayerAPI çš„ [member network_peer] 无法与æœåŠ¡å™¨å»ºç«‹è¿žæŽ¥æ—¶è§¦å‘。åª"
+"在客户端触å‘。"
#: doc/classes/MultiplayerAPI.xml
msgid ""
@@ -44230,9 +44419,9 @@ msgid ""
"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 ""
-"当此多人播放器的 [member network_peer] 与新对等连接时触å‘该信å·ã€‚ID 是新peer"
-"çš„ peer ID。当其他客户端连接到åŒä¸€æœåŠ¡å™¨æ—¶ï¼Œå®¢æˆ·ç«¯ä¼šæ”¶åˆ°é€šçŸ¥ã€‚è¿žæŽ¥åˆ°æœåС噍"
-"åŽï¼Œå®¢æˆ·ç«¯è¿˜ä¼šæ”¶åˆ°æœåŠ¡å™¨çš„æ­¤ä¿¡å·ï¼ˆID 为 1)。"
+"当这个 MultiplayerAPI çš„ [member network_peer] 与新对等连接时触å‘该信å·ã€‚ID "
+"是新 peer çš„ peer ID。当其他客户端连接到åŒä¸€æœåŠ¡å™¨æ—¶ï¼Œå®¢æˆ·ç«¯ä¼šæ”¶åˆ°é€šçŸ¥ã€‚è¿žæŽ¥"
+"到æœåС噍åŽï¼Œå®¢æˆ·ç«¯è¿˜ä¼šæ”¶åˆ°æœåŠ¡å™¨çš„æ­¤ä¿¡å·ï¼ˆID 为 1)。"
#: doc/classes/MultiplayerAPI.xml
msgid ""
@@ -44240,8 +44429,8 @@ msgid ""
"peer. Clients get notified when other clients disconnect from the same "
"server."
msgstr ""
-"当这个MultiplayerAPIçš„[member network_peer]与一个åŒä¼´æ–­å¼€è¿žæŽ¥æ—¶è§¦å‘该信å·ã€‚当"
-"其他客户端与åŒä¸€æœåŠ¡å™¨æ–­å¼€è¿žæŽ¥æ—¶ï¼Œå®¢æˆ·ç«¯ä¼šå¾—åˆ°é€šçŸ¥ã€‚"
+"当这个 MultiplayerAPI çš„ [member network_peer] 与一个åŒä¼´æ–­å¼€è¿žæŽ¥æ—¶è§¦å‘该信"
+"å·ã€‚当其他客户端与åŒä¸€æœåŠ¡å™¨æ–­å¼€è¿žæŽ¥æ—¶ï¼Œå®¢æˆ·ç«¯ä¼šå¾—åˆ°é€šçŸ¥ã€‚"
#: doc/classes/MultiplayerAPI.xml
msgid ""
@@ -44249,16 +44438,17 @@ msgid ""
"[code]packet[/code] with custom data (see [method send_bytes]). ID is the "
"peer ID of the peer that sent the packet."
msgstr ""
-"当这个MultiplayerAPIçš„[member network_peer]收到一个带有自定义数æ®çš„[code]æ•°æ®"
-"包[/code](è§[method send_bytes])时触å‘。ID是å‘é€è¯¥æ•°æ®åŒ…的对等体的ID。"
+"当这个 MultiplayerAPI çš„ [member network_peer] 收到一个带有自定义数æ®çš„æ•°æ®"
+"包 [code]packet[/code]ï¼ˆè§ [method send_bytes])时触å‘。ID 是å‘é€è¯¥æ•°æ®åŒ…的对"
+"等体的ID。"
#: doc/classes/MultiplayerAPI.xml
msgid ""
"Emitted when this MultiplayerAPI's [member network_peer] disconnects from "
"server. Only emitted on clients."
msgstr ""
-"当这个MultiplayerAPIçš„[member network_peer]与æœåŠ¡å™¨æ–­å¼€è¿žæŽ¥æ—¶è§¦å‘。åªåœ¨å®¢æˆ·ç«¯"
-"触å‘。"
+"当这个 MultiplayerAPI çš„ [member network_peer] 与æœåŠ¡å™¨æ–­å¼€è¿žæŽ¥æ—¶è§¦å‘。åªåœ¨å®¢"
+"户端触å‘。"
#: doc/classes/MultiplayerAPI.xml
msgid ""
@@ -44312,8 +44502,8 @@ msgid ""
"[i]Deprecated.[/i] Use [constant RPC_MODE_PUPPET] instead. Analogous to the "
"[code]slave[/code] keyword."
msgstr ""
-"[i]已废弃。[/i] 使用[constant RPC_MODE_PUPPET]代替。类似于[code]slave[/code]"
-"关键字。"
+"[i]已废弃。[/i]使用 [constant RPC_MODE_PUPPET] 代替。类似于 [code]slave[/"
+"code] 关键字。"
#: doc/classes/MultiplayerAPI.xml
msgid ""
@@ -44328,15 +44518,15 @@ msgid ""
"[i]Deprecated.[/i] Use [constant RPC_MODE_REMOTESYNC] instead. Analogous to "
"the [code]sync[/code] keyword."
msgstr ""
-"[i]已废弃。[/i] 使用[constant RPC_MODE_REMOTESYNC]代替。类似于[code]sync[/"
-"code]关键字。"
+"[i]已废弃。[/i]使用 [constant RPC_MODE_REMOTESYNC] 代替。类似于 [code]sync[/"
+"code] 关键字。"
#: doc/classes/MultiplayerAPI.xml
msgid ""
"Behave like [constant RPC_MODE_MASTER] but also make the call or property "
"change locally. Analogous to the [code]mastersync[/code] keyword."
msgstr ""
-"类似于[constant RPC_MODE_MASTER]ï¼Œä½†ä¹Ÿä½¿æ–¹æ³•è°ƒç”¨æˆ–å±žæ€§æ”¹å˜æœ¬åœ°ã€‚类似于 "
+"类似于 [constant RPC_MODE_MASTER]ï¼Œä½†ä¹Ÿä½¿æ–¹æ³•è°ƒç”¨æˆ–å±žæ€§æ”¹å˜æœ¬åœ°ã€‚类似于 "
"[code]mastersync[/code] 关键字。"
#: doc/classes/MultiplayerAPI.xml
@@ -44349,7 +44539,7 @@ msgstr ""
#: doc/classes/Mutex.xml
msgid "A synchronization mutex (mutual exclusion)."
-msgstr "ä¸€ä¸ªåŒæ­¥äº’æ–¥é”(相互排斥)。"
+msgstr "åŒæ­¥äº’æ–¥é”(相互排斥)。"
#: doc/classes/Mutex.xml
msgid ""
@@ -44358,9 +44548,9 @@ msgid ""
"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 ""
-"ä¸€ä¸ªåŒæ­¥äº’æ–¥é”(mutexï¼‰ã€‚å®ƒç”¨äºŽåŒæ­¥å¤šä¸ª[Thread],相当于一个二进制"
-"[Semaphore]。它ä¿è¯æ¯æ¬¡åªæœ‰ä¸€ä¸ªçº¿ç¨‹å¯ä»¥èŽ·å¾—é”。互斥é”å¯ä»¥ç”¨æ¥ä¿æŠ¤ä¸´ç•ŒåŒºï¼›ä½†"
-"æ˜¯ï¼Œè¦æ³¨æ„é¿å…æ­»é”。"
+"åŒæ­¥äº’æ–¥é”ï¼ˆç›¸äº’æŽ’æ–¥ï¼‰ã€‚å®ƒç”¨äºŽåŒæ­¥å¤šä¸ª [Thread],相当于二元 [Semaphore]。它ä¿"
+"è¯æ¯æ¬¡åªæœ‰ä¸€ä¸ªçº¿ç¨‹å¯ä»¥èŽ·å¾—é”。互斥é”å¯ä»¥ç”¨æ¥ä¿æŠ¤ä¸´ç•ŒåŒºï¼›ä½†æ˜¯ï¼Œè¦æ³¨æ„é¿å…æ­»"
+"é”。"
#: doc/classes/Mutex.xml
msgid ""
@@ -44390,40 +44580,40 @@ msgid ""
"unlock] the same number of times in order to unlock it correctly."
msgstr ""
"è§£é”这个 [Mutex],把它留给其他线程。\n"
-"[b]注æ„:[/b]å¦‚æžœä¸€ä¸ªçº¿ç¨‹åœ¨å·²ç»æ‹¥æœ‰äº’æ–¥é”的情况下多次调用[method lock]或"
-"[method try_lock]ï¼Œå®ƒä¹Ÿå¿…é¡»è°ƒç”¨ç›¸åŒæ¬¡æ•°çš„[method unlock]æ‰èƒ½æ­£ç¡®è§£é”."
+"[b]注æ„:[/b]å¦‚æžœä¸€ä¸ªçº¿ç¨‹åœ¨å·²ç»æ‹¥æœ‰äº’æ–¥é”的情况下多次调用 [method lock] 或 "
+"[method try_lock]ï¼Œå®ƒä¹Ÿå¿…é¡»è°ƒç”¨ç›¸åŒæ¬¡æ•°çš„ [method unlock] æ‰èƒ½æ­£ç¡®è§£é”."
#: modules/gdnative/doc_classes/NativeScript.xml
msgid ""
"Returns the documentation string that was previously set with "
"[code]godot_nativescript_set_class_documentation[/code]."
msgstr ""
-"返回之å‰ç”¨[code]godot_nativescript_set_class_documentation[/code]设置的文档字"
-"符串。"
+"返回之å‰ç”¨ [code]godot_nativescript_set_class_documentation[/code] 设置的文档"
+"字符串。"
#: modules/gdnative/doc_classes/NativeScript.xml
msgid ""
"Returns the documentation string that was previously set with "
"[code]godot_nativescript_set_method_documentation[/code]."
msgstr ""
-"返回之å‰ç”¨[code]godot_nativescript_set_method_documentation[/code]设置的文档"
-"字符串。"
+"返回之å‰ç”¨ [code]godot_nativescript_set_method_documentation[/code] 设置的文"
+"档字符串。"
#: modules/gdnative/doc_classes/NativeScript.xml
msgid ""
"Returns the documentation string that was previously set with "
"[code]godot_nativescript_set_property_documentation[/code]."
msgstr ""
-"返回之å‰ç”¨[code]godot_nativescript_set_property_documentation[/code]设置的文"
-"档字符串。"
+"返回之å‰ç”¨ [code]godot_nativescript_set_property_documentation[/code] 设置的"
+"文档字符串。"
#: modules/gdnative/doc_classes/NativeScript.xml
msgid ""
"Returns the documentation string that was previously set with "
"[code]godot_nativescript_set_signal_documentation[/code]."
msgstr ""
-"返回之å‰ç”¨[code]godot_nativescript_set_signal_documentation[/code]设置的文档"
-"字符串。"
+"返回之å‰ç”¨ [code]godot_nativescript_set_signal_documentation[/code] 设置的文"
+"档字符串。"
#: modules/gdnative/doc_classes/NativeScript.xml
msgid ""
@@ -44442,7 +44632,11 @@ msgid "Mesh-based navigation and pathfinding node."
msgstr "基于网格的导航和寻路节点。"
#: doc/classes/Navigation.xml
+#, fuzzy
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"Provides navigation and pathfinding within a collection of "
"[NavigationMesh]es. By default, these will be automatically collected from "
"child [NavigationMeshInstance] nodes. In addition to basic pathfinding, this "
@@ -44492,7 +44686,15 @@ msgstr ""
"导航网格之间的交点。如果找到多个交点,则返回最接近线段起点的交点。"
#: doc/classes/Navigation.xml
+msgid "Returns the [RID] of the navigation map on the [NavigationServer]."
+msgstr "返回这个导航地图在 [NavigationServer] 上的 [RID]。"
+
+#: doc/classes/Navigation.xml
+#, fuzzy
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"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, "
@@ -44517,18 +44719,36 @@ msgstr "该值用于检测相近的边界,连接兼容的地区。"
#: doc/classes/Navigation.xml
msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation.get_simple_path] path query."
+msgstr ""
+"ä½åŸŸï¼Œç”¨äºŽå†³å®šåœ¨ä½¿ç”¨ [method Navigation.get_simple_path] 进行路径请求时,导航"
+"所能用到的导航地图层。"
+
+#: doc/classes/Navigation.xml
+msgid ""
"Defines which direction is up. By default, this is [code](0, 1, 0)[/code], "
"which is the world's \"up\" direction."
msgstr ""
-"定义了å‘上的方å‘。默认情况下,这是[code](0,1,0)[/code],这是世界的“å‘ä¸Šâ€æ–¹"
+"定义了å‘上的方å‘。默认情况下,这是 [code](0,1,0)[/code],这是世界的“å‘ä¸Šâ€æ–¹"
"å‘。"
+#: doc/classes/Navigation.xml doc/classes/Navigation2DServer.xml
+#: doc/classes/NavigationServer.xml
+msgid ""
+"Emitted when a navigation map is updated, when a region moves or is modified."
+msgstr "当导航地图更新时ã€åœ°åŒºç§»åŠ¨æˆ–è¢«ä¿®æ”¹æ—¶å‘出。"
+
#: doc/classes/Navigation2D.xml
msgid "2D navigation and pathfinding node."
msgstr "2D 导航和寻路节点。"
#: doc/classes/Navigation2D.xml
+#, fuzzy
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -44552,7 +44772,11 @@ msgstr ""
"[NavigationPolygonInstance]。"
#: doc/classes/Navigation2D.xml
+#, fuzzy
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -44564,12 +44788,19 @@ msgstr ""
msgid "The XY plane cell size to use for fields."
msgstr "用于字段的 XZ å¹³é¢å•元尺寸。"
+#: doc/classes/Navigation2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation2D.get_simple_path] path query."
+msgstr ""
+"ä½åŸŸï¼Œç”¨äºŽå†³å®šåœ¨ä½¿ç”¨ [method Navigation2D.get_simple_path] 进行路径请求时,导"
+"航所能用到的导航地图层。"
+
#: doc/classes/Navigation2DServer.xml
msgid "Server interface for low-level 2D navigation access."
msgstr "访问底层 2D 导航的æœåŠ¡å™¨æŽ¥å£ã€‚"
#: doc/classes/Navigation2DServer.xml
-#, fuzzy
msgid ""
"Navigation2DServer is the server responsible for all 2D navigation. It "
"handles several objects, namely maps, regions and agents.\n"
@@ -44581,8 +44812,12 @@ msgid ""
"through scripts.\n"
"For two regions to be connected to each other, they must share a similar "
"edge. An edge is considered connected to another if both of its two vertices "
-"are at a distance less than [member Navigation.edge_connection_margin] to "
-"the respective other edge's vertex.\n"
+"are at a distance less than navigation map [code]edge_connection_margin[/"
+"code] to the respective other edge's vertex.\n"
+"You may assign navigation layers to regions with [method Navigation2DServer."
+"region_set_navigation_layers], which then can be checked upon when "
+"requesting a path with [method Navigation2DServer.map_get_path]. This allows "
+"allowing or forbidding some areas to 2D objects.\n"
"To use the collision avoidance system, you may use agents. You can set an "
"agent's target velocity, then the servers will emit a callback with a "
"modified velocity.\n"
@@ -44597,9 +44832,16 @@ msgstr ""
"Navigation2DServer 是负责所有 2D 导航的æœåŠ¡å™¨ï¼Œå¤„ç†çš„对象有地图(map)ã€åœ°åŒº"
"(region)ã€ä»£ç†ï¼ˆagent)。\n"
"地图是由地区组æˆçš„,地区åˆç”±å¯¼èˆªå¤šè¾¹å½¢ç»„æˆã€‚å®ƒä»¬ä¸€åŒæž„æˆäº† 2D 世界中的å¯å¯¼èˆª"
-"区域。两个地区必须共有一æ¡ç›¸ä¼¼çš„边界(edge)æ‰èƒ½ç›¸è¿žã€‚如果一æ¡è¾¹ç•Œçš„两个顶点"
-"(vertex)与å¦ä¸€æ¡è¾¹ç•Œçš„对应顶点的è·ç¦»å°äºŽ [member Navigation."
-"edge_connection_margin],则认为这两æ¡è¾¹ç•Œç›¸è¿žã€‚\n"
+"区域。\n"
+"[b]注æ„:[/b]NavigationServer 的大多数修改都è¦åœ¨ä¸‹ä¸€ä¸ªç‰©ç†å¸§ä¹‹åŽç”Ÿæ•ˆï¼Œä¸æ˜¯ç«‹"
+"å³ç”Ÿæ•ˆçš„。SceneTree 中导航相关的节点对地图ã€åœ°åŒºã€ä»£ç†ä½œå‡ºçš„修改也是如此,通"
+"过脚本作出的修改亦然。\n"
+"两个地区必须共有一æ¡ç›¸ä¼¼çš„边界(edge)æ‰èƒ½ç›¸è¿žã€‚如果一æ¡è¾¹ç•Œçš„两个顶点"
+"(vertex)与å¦ä¸€æ¡è¾¹ç•Œçš„对应顶点的è·ç¦»å°äºŽ [code]edge_connection_margin[/"
+"code],则认为这两æ¡è¾¹ç•Œç›¸è¿žã€‚\n"
+"ä½ å¯ä»¥é€šè¿‡ [method Navigation2DServer.region_set_navigation_layers] 为地区设"
+"置导航层,使用 [method Navigation2DServer.map_get_path] 请求路径时会对导航层"
+"进行检查。这样就能够对 2D 对象å¯ç”¨æˆ–ç¦ç”¨æŸäº›åŒºåŸŸã€‚\n"
"è¦ä½¿ç”¨é˜²æ’žç³»ç»Ÿï¼Œå¯ä»¥ä½¿ç”¨ä»£ç†ã€‚ä½ å¯ä»¥è®¾ç½®ä»£ç†çš„目标速度,æœåŠ¡å™¨å°±ä¼šä½¿ç”¨ä¿®æ­£åŽ"
"的速度触å‘回调。\n"
"[b]注æ„:[/b]防撞系统会忽略地区。直接使用修正åŽçš„速度å¯èƒ½ä¼šå°†ä»£ç†æŽ¨åˆ°å¯å¯¼èˆªåŒº"
@@ -44622,8 +44864,24 @@ msgid "Returns [code]true[/code] if the map got changed the previous frame."
msgstr "如果地图在上一帧å‘生了改å˜ï¼Œåˆ™è¿”回 [code]true[/code]。"
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Callback called at the end of the RVO process."
-msgstr "在 RVO å¤„ç†æœ«å°¾è°ƒç”¨çš„回调。"
+msgid ""
+"Callback called at the end of the RVO process. If a callback is created "
+"manually and the agent is placed on a navigation map it will calculate "
+"avoidance for the agent and dispatch the calculated [code]safe_velocity[/"
+"code] to the [code]receiver[/code] object with a signal to the chosen "
+"[code]method[/code] name.\n"
+"[b]Note:[/b] Created callbacks are always processed independently of the "
+"SceneTree state as long as the agent is on a navigation map and not freed. "
+"To disable the dispatch of a callback from an agent use [method "
+"agent_set_callback] again with a [code]null[/code] object as the "
+"[code]receiver[/code]."
+msgstr ""
+"在 RVO å¤„ç†æœ«å°¾è°ƒç”¨çš„回调。如果手动创建了回调,并且代ç†ä½äºŽå¯¼èˆªåœ°å›¾ä¸Šï¼Œå°±ä¼šä¸º"
+"该代ç†è®¡ç®—é¿éšœï¼Œå¹¶å°†è®¡ç®—出的安全速度 [code]safe_velocity[/code] 通过信å·å‘é€"
+"ç»™ [code]receiver[/code] 对象上å为 [code]method[/code] 的方法。\n"
+"[b]注æ„:[/b]åªè¦ä»£ç†è¿˜åœ¨å¯¼èˆªåœ°å›¾ä¸Šä¸”未被释放,创建的回调就始终会进行处ç†ï¼Œæ— "
+"论 SceneTree 的状æ€å¦‚何。è¦ç¦ç”¨æŸä¸ªä»£ç†çš„回调分å‘ï¼Œè¯·å†æ¬¡ä½¿ç”¨ [method "
+"agent_set_callback],为 [code]receiver[/code] 设置为 [code]null[/code]。"
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Puts the agent in the map."
@@ -44684,15 +44942,55 @@ msgid "Destroys the given RID."
msgstr "销æ¯ç»™å®šçš„ RID。"
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns all created navigation map [RID]s on the NavigationServer. This "
+"returns both 2D and 3D created navigation maps as there is technically no "
+"distinction between them."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Create a new map."
msgstr "创建一张新地图。"
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"This function immediately forces synchronization of the specified navigation "
+"[code]map[/code] [RID]. By default navigation maps are only synchronized at "
+"the end of each physics frame. This function can be used to immediately "
+"(re)calculate all the navigation meshes and region connections of the "
+"navigation map. This makes it possible to query a navigation path for a "
+"changed map immediately and in the same frame (multiple times if needed).\n"
+"Due to technical restrictions the current NavigationServer command queue "
+"will be flushed. This means all already queued update commands for this "
+"physics frame will be executed, even those intended for other maps, regions "
+"and agents not part of the specified map. The expensive computation of the "
+"navigation meshes and region connections of a map will only be done for the "
+"specified map. Other maps will receive the normal synchronization at the end "
+"of the physics frame. Should the specified map receive changes after the "
+"forced update it will update again as well when the other maps receive their "
+"update.\n"
+"Avoidance processing and dispatch of the [code]safe_velocity[/code] signals "
+"is untouched by this function and continues to happen for all maps and "
+"agents at the end of the physics frame.\n"
+"[b]Note:[/b] With great power comes great responsibility. This function "
+"should only be used by users that really know what they are doing and have a "
+"good reason for it. Forcing an immediate update of a navigation map requires "
+"locking the NavigationServer and flushing the entire NavigationServer "
+"command queue. Not only can this severely impact the performance of a game "
+"but it can also introduce bugs if used inappropriately without much "
+"foresight."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns all navigation agents [RID]s that are currently assigned to the "
"requested navigation [code]map[/code]."
msgstr "返回所有与请求的导航地图 [code]map[/code] å…³è”的导航代ç†çš„ [RID]。"
+#: doc/classes/Navigation2DServer.xml
+msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented."
+msgstr "返回地图å•元格高度。[b]注æ„:[/b]尚未实现。"
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Returns the map cell size."
msgstr "返回地图的å•元格大å°ã€‚"
@@ -44716,8 +45014,13 @@ msgid ""
msgstr "返回地图的边界连接边è·ã€‚è¾¹ç•Œè¿žæŽ¥è¾¹è·æ˜¯ç”¨äºŽè¿žæŽ¥ä¸¤ä¸ªåœ°åŒºçš„è·ç¦»ã€‚"
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Returns the navigation path to reach the destination from the origin."
-msgstr "返回从原点到终点的导航路径。"
+msgid ""
+"Returns the navigation path to reach the destination from the origin. "
+"[code]navigation_layers[/code] is a bitmask of all region layers that are "
+"allowed to be in the path."
+msgstr ""
+"返回从起点到达终点的导航路径。[code]navigation_layers[/code] 是å…许在路径中出"
+"çŽ°çš„æ‰€æœ‰åœ°åŒºå±‚çš„ä½æŽ©ç ã€‚"
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
@@ -44733,6 +45036,12 @@ msgstr "如果地图处于活动状æ€ï¼Œåˆ™è¿”回 [code]true[/code]。"
msgid "Sets the map active."
msgstr "设置地图的激活æ€ã€‚"
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/"
+"b] Currently not implemented."
+msgstr "设置用于焊接导航网格多边形的地图å•元格高度。[b]注æ„:[/b]尚未实现。"
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Set the map cell size used to weld the navigation mesh polygons."
msgstr "设置用于焊接导航网格多边形的地图å•元格大å°ã€‚"
@@ -44748,14 +45057,79 @@ msgstr "创建一个新的地区。"
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"Returns the ending point of a connection door. [code]connection[/code] is an "
+"index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+"返回连接门的终点。[code]connection[/code] 是 0 和 [method "
+"region_get_connections_count] 返回值之间的索引å·ã€‚"
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns the starting point of a connection door. [code]connection[/code] is "
+"an index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+"返回连接门的起点。[code]connection[/code] 是 0 和 [method "
+"region_get_connections_count] 返回值之间的索引å·ã€‚"
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns how many connections this [code]region[/code] has with other regions "
+"in the map."
+msgstr "返回 [code]region[/code] 地区与其他地区在地图上有多少连接。"
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]."
+msgstr "返回 [code]region[/code] 地区的进入消耗 [code]enter_cost[/code]。"
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns the navigation map [RID] the requested [code]region[/code] is "
"currently assigned to."
msgstr "返回请求的导航地区 [code]region[/code] 所关è”的导航地图的 [RID]。"
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Returns the region's navigation layers."
+msgstr "返回该地区的导航层。"
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]."
+msgstr "返回 [code]region[/code] 地区的移动消耗 [code]travel_cost[/code]。"
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns [code]true[/code] if the provided [code]point[/code] in world space "
+"is currently owned by the provided navigation [code]region[/code]. Owned in "
+"this context means that one of the region's navigation mesh polygon faces "
+"has a possible position at the closest distance to this point compared to "
+"all other navigation meshes from other navigation regions that are also "
+"registered on the navigation map of the provided region.\n"
+"If multiple navigation meshes have positions at equal distance the "
+"navigation region whose polygons are processed first wins the ownership. "
+"Polygons are processed in the same order that navigation regions were "
+"registered on the NavigationServer.\n"
+"[b]Note:[/b] If navigation meshes from different navigation regions overlap "
+"(which should be avoided in general) the result might not be what is "
+"expected."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]."
+msgstr "设置 [code]region[/code] 地区的进入消耗 [code]enter_cost[/code]。"
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Sets the map for the region."
msgstr "设置该地区的地图。"
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method Navigation2DServer.map_get_path])."
+msgstr ""
+"设置该地区的导航层。å¯ç”¨äºŽï¼ˆä½¿ç”¨ [method Navigation2DServer.map_get_path])请"
+"求路径时对地区进行选择。"
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Sets the navigation mesh for the region."
msgstr "设置该地图的导航网格。"
@@ -44764,6 +45138,10 @@ msgstr "设置该地图的导航网格。"
msgid "Sets the global transformation for the region."
msgstr "è®¾ç½®è¯¥åœ°åŒºçš„å…¨å±€å˜æ¢ã€‚"
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]."
+msgstr "设置 [code]region[/code] 地区的移动消耗 [code]travel_cost[/code]。"
+
#: doc/classes/NavigationAgent.xml
msgid "3D agent used in navigation for collision avoidance."
msgstr "在导航中用于防撞的 3D 代ç†ã€‚"
@@ -44773,14 +45151,26 @@ msgid ""
"3D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationAgent] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World] navigation map. If this node is a child of a [Navigation] "
+"node it will register to the navigation map of the navigation node or the "
+"function [method set_navigation] can be used to set the navigation node "
+"directly. [NavigationAgent] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
"导航中使用的 3D 代ç†ï¼Œå¯ä»¥åœ¨å‰å¾€æŸä¸ªä½ç½®æ—¶èº²é¿é™æ€å’ŒåЍæ€éšœç¢ç‰©ã€‚躲é¿åЍæ€éšœç¢"
"物使用的是 RVO(Reciprocal Velocity Obstacles,相对速度障ç¢ç‰©ï¼‰é˜²æ’žç®—法。代ç†"
-"需è¦å¯¼èˆªæ•°æ®æ‰èƒ½æ­£ç¡®å·¥ä½œã€‚å¯ä»¥é€šè¿‡è®©ä»£ç†æˆä¸º [Navigation] 节点的å­é¡¹å®žçŽ°ï¼Œä¹Ÿ"
-"å¯ä»¥ä½¿ç”¨ [method set_navigation]。[NavigationAgent] 是物ç†å®‰å…¨çš„。"
+"需è¦å¯¼èˆªæ•°æ®æ‰èƒ½æ­£ç¡®å·¥ä½œã€‚默认情况下,这个节点会在默认的 [World] 导航地图中进"
+"行注册。如果这个节点是 [Navigation] 节点的å­é¡¹ï¼Œé‚£ä¹ˆå°±ä¼šåœ¨è¿™ä¸ªå¯¼èˆªèŠ‚ç‚¹çš„å¯¼èˆª"
+"地图中进行注册,也å¯ä»¥ä½¿ç”¨ [method set_navigation] 函数直接设置导航节点。"
+"[NavigationAgent] 是物ç†å®‰å…¨çš„。\n"
+"[b]注æ„:[/b]使用 [method set_target_location] 之åŽï¼Œå¿…须在æ¯ä¸ªç‰©ç†å¸§ä½¿ç”¨ä¸€"
+"次 [method get_next_location] å‡½æ•°æ¥æ›´æ–° NavigationAgent 的内部路径逻辑。这个"
+"函数返回的å‘é‡ä½ç½®åº”该用作该代ç†çš„父节点的下一次移动ä½ç½®ã€‚"
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
@@ -44801,8 +45191,21 @@ msgstr ""
"å¯èƒ½å‘生å˜åŒ–。因此,最好æ¯ä¸€å¸§éƒ½æ£€æŸ¥ä¸€ä¸‹ã€‚"
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-msgid "Returns the path from start to finish in global coordinates."
-msgstr "è¿”å›žä»Žèµ·ç‚¹åˆ°ç»ˆç‚¹çš„è·¯å¾„ï¼Œä½¿ç”¨å…¨å±€åæ ‡ã€‚"
+msgid ""
+"Returns this agent's current path from start to finish in global "
+"coordinates. The path only updates when the target location is changed or "
+"the agent requires a repath. The path array is not intended to be used in "
+"direct path movement as the agent has its own internal path logic that would "
+"get corrupted by changing the path array manually. Use the intended [method "
+"get_next_location] once every physics frame to receive the next path point "
+"for the agents movement as this function also updates the internal path "
+"logic."
+msgstr ""
+"返回这个代ç†ä»Žèµ·ç‚¹åˆ°ç»ˆç‚¹çš„当å‰è·¯å¾„ï¼Œä½¿ç”¨å…¨å±€åæ ‡ã€‚该路径åªä¼šåœ¨ç›®æ ‡ä½ç½®å‘生å˜"
+"化,或者代ç†è¦æ±‚釿–°è®¡ç®—路径时更新。路径数组ä¸åº”ç›´æŽ¥ç”¨ä½œç§»åŠ¨è·¯å¾„ï¼Œä»£ç†æœ‰å…¶å†…"
+"部的路径逻辑,手动修改路径数组å¯èƒ½ä¼šé€ æˆç ´å。请在æ¯ä¸€ä¸ªç‰©ç†å¸§ä¸­è°ƒç”¨ä¸€æ¬¡ "
+"[method get_next_location] 获å–该代ç†çš„下一个路径点,这个函数会更新其内部的路"
+"径逻辑。"
#: doc/classes/NavigationAgent.xml
msgid ""
@@ -44816,14 +45219,33 @@ msgid ""
"system."
msgstr "返回该代ç†çš„导航系统所使用的 [Navigation] 节点。"
-#: doc/classes/NavigationAgent.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
+"Returns the [RID] of the navigation map for this NavigationAgent node. This "
+"function returns always the map set on the NavigationAgent node and not the "
+"map of the abstract agent on the NavigationServer. If the agent map is "
+"changed directly with the NavigationServer API the NavigationAgent node will "
+"not be aware of the map change. Use [method set_navigation_map] to change "
+"the navigation map for the NavigationAgent and also update the agent on the "
+"NavigationServer."
+msgstr ""
+"返回这个 NavigationAgent 节点的导航地图的 [RID]。这个函数返回的始终是在 "
+"NavigationAgent ä¸Šè®¾ç½®çš„åœ°å›¾ï¼Œä¸æ˜¯ NavigationServer ä¸Šçš„æŠ½è±¡ä»£ç†æ‰€ä½¿ç”¨çš„地"
+"图。如果通过 NavigationServer API 修改了代ç†çš„地图,该 NavigationAgent 节点是"
+"ä¸ä¼šæ„ŸçŸ¥åˆ°åœ°å›¾çš„å˜åŒ–的。请使用 [method set_navigation_map] 修改该 "
+"NavigationAgent çš„å¯¼èˆªåœ°å›¾ï¼Œèƒ½å¤ŸåŒæ—¶åœ¨ NavigationServer 上的代ç†ã€‚"
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"Returns a [Vector3] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the origin of the agent's parent."
+"Returns the next location in global coordinates that can be moved to, making "
+"sure that there are no static objects in the way. If the agent does not have "
+"a navigation path, it will return the position of the agent's parent. The "
+"use of this function once every physics frame is required to update the "
+"internal path logic of the NavigationAgent."
msgstr ""
-"返回å¯ä»¥ç§»åŠ¨è‡³çš„ [Vector3] 免局忠‡ï¼Œç¡®ä¿ä¸­é€”æ²¡æœ‰é™æ€ç‰©ä½“é˜»æŒ¡ã€‚å¦‚æžœä»£ç†æ²¡æœ‰å¯¼"
-"航路径,则会返回代ç†çˆ¶èŠ‚ç‚¹çš„åŽŸç‚¹ã€‚"
+"返回å¯ä»¥ç§»åŠ¨è‡³çš„ä¸‹ä¸€ä¸ªä½ç½®ï¼Œä½¿ç”¨å…¨å±€å标,确ä¿ä¸­é€”æ²¡æœ‰é™æ€ç‰©ä½“阻挡。如果代ç†"
+"没有导航路径,则会返回代ç†çˆ¶èŠ‚ç‚¹çš„ä½ç½®ã€‚必须在æ¯ä¸ªç‰©ç†å¸§éƒ½è°ƒç”¨ä¸€æ¬¡è¿™ä¸ªå‡½æ•°ï¼Œ"
+"更新 NavigationAgent 内部的路径逻辑。"
#: doc/classes/NavigationAgent.xml
msgid "Returns the [RID] of this agent on the [NavigationServer]."
@@ -44870,6 +45292,14 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"Sets the [RID] of the navigation map this NavigationAgent node should use "
+"and also updates the [code]agent[/code] on the NavigationServer."
+msgstr ""
+"设置这个 NavigationAgent 节点所应使用的导航地图的 [RID]ï¼ŒåŒæ—¶è¿˜ä¼šæ›´æ–° "
+"NavigationServer ä¸Šçš„ä»£ç† [code]agent[/code]。"
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"Sets the user desired final location. This will clear the current navigation "
"path."
msgstr "设置用户期望的终点ä½ç½®ã€‚会将当å‰å¯¼èˆªè·¯å¾„清空。"
@@ -44884,8 +45314,18 @@ msgstr ""
"ä¼šè§¦å‘ [signal velocity_computed] ä¿¡å·ã€‚"
#: doc/classes/NavigationAgent.xml
-msgid "The agent height offset to match the navigation mesh height."
-msgstr "代ç†çš„高度åç§»é‡ï¼Œç”¨äºŽåŒ¹é…导航网格的高度。"
+msgid ""
+"The NavigationAgent height offset is subtracted from the y-axis value of any "
+"vector path position for this NavigationAgent. The NavigationAgent height "
+"offset does not change or influence the navigation mesh or pathfinding query "
+"result. Additional navigation maps that use regions with navigation meshes "
+"that the developer baked with appropriate agent radius or height values are "
+"required to support different-sized agents."
+msgstr ""
+"这个 NavigationAgent 的任何å‘é‡ä½ç½®çš„ Y åæ ‡å€¼éƒ½ä¼šå‡åŽ» NavigationAgent 的高度"
+"åç§»é‡ã€‚NavigationAgent 的高度åç§»é‡ä¸ä¼šå‘生改å˜ï¼Œä¹Ÿä¸ä¼šå½±å“导航网格和寻路结"
+"果。如果其他导航地图使用了带有导航网格的地区,开å‘者使用åˆé€‚的代ç†åŠå¾„或高度"
+"对其进行了烘焙,那么就必须支æŒä¸åŒå¤§å°çš„代ç†ã€‚"
#: doc/classes/NavigationAgent.xml
msgid ""
@@ -44916,12 +45356,32 @@ msgstr "ä»£ç†æ‰€éœ€è€ƒè™‘的最大邻居数。"
msgid "The maximum speed that an agent can move."
msgstr "ä»£ç†æ‰€èƒ½è¾¾åˆ°çš„æœ€å¤§ç§»åŠ¨é€Ÿåº¦ã€‚"
+#: doc/classes/NavigationAgent.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+"ä½åŸŸï¼Œç”¨äºŽå†³å®šè¯¥ [NavigationAgent] 所属的导航地图层。请求路径时,代ç†ä¼šå¿½ç•¥æ²¡"
+"有任何匹é…层的导航网格。"
+
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "The distance to search for other agents."
msgstr "æœç´¢å…¶ä»–代ç†çš„è·ç¦»ã€‚"
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"The distance threshold before a path point is considered to be reached. This "
+"will allow an agent to not have to hit a path point on the path exactly, but "
+"in the area. If this value is set to high the NavigationAgent will skip "
+"points on the path which can lead to leaving the navigation mesh. If this "
+"value is set to low the NavigationAgent will be stuck in a repath loop cause "
+"it will constantly overshoot or undershoot the distance to the next point on "
+"each physics frame update."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"The maximum distance the agent is allowed away from the ideal path to the "
"final location. This can happen due to trying to avoid collisions. When the "
"maximum distance is exceeded, it recalculates the ideal path."
@@ -44930,17 +45390,24 @@ msgstr ""
"æ–°è®¡ç®—ç†æƒ³è·¯å¾„。"
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-msgid "The radius of the agent."
-msgstr "代ç†çš„åŠå¾„。"
+msgid ""
+"The radius of the avoidance agent. This is the \"body\" of the avoidance "
+"agent and not the avoidance maneuver starting radius (which is controlled by "
+"[member neighbor_dist]).\n"
+"Does not affect normal pathfinding. To change an actor's pathfinding radius "
+"bake [NavigationMesh] resources with a different [member NavigationMesh."
+"agent_radius] property and use different navigation maps for each actor size."
+msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"The distance threshold before a target is considered to be reached. This "
-"will allow an agent to not have to hit a point on the path exactly, but in "
-"the area."
+"The distance threshold before the final target point is considered to be "
+"reached. This will allow an agent to not have to hit the point of the final "
+"target exactly, but only the area. If this value is set to low the "
+"NavigationAgent will be stuck in a repath loop cause it will constantly "
+"overshoot or undershoot the distance to the final target point on each "
+"physics frame update."
msgstr ""
-"认为到达目标的è·ç¦»é˜ˆå€¼ã€‚å¯ä»¥è®©ä»£ç†æ— éœ€ç²¾å‡†åˆ°è¾¾è·¯å¾„上的æŸä¸ªç‚¹ï¼Œåˆ°è¾¾æŸä¸ªåŒºåŸŸå³"
-"å¯ã€‚"
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
@@ -44986,14 +45453,26 @@ msgid ""
"2D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationAgent2D] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World2D] navigation map. If this node is a child of a "
+"[Navigation2D] node it will register to the navigation map of the navigation "
+"node or the function [method set_navigation] can be used to set the "
+"navigation node directly. [NavigationAgent2D] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
"导航中使用的 2D 代ç†ï¼Œå¯ä»¥åœ¨å‰å¾€æŸä¸ªä½ç½®æ—¶èº²é¿é™æ€å’ŒåЍæ€éšœç¢ç‰©ã€‚躲é¿åЍæ€éšœç¢"
"物使用的是 RVO(Reciprocal Velocity Obstacles,相对速度障ç¢ç‰©ï¼‰é˜²æ’žç®—法。代ç†"
-"需è¦å¯¼èˆªæ•°æ®æ‰èƒ½æ­£ç¡®å·¥ä½œã€‚å¯ä»¥é€šè¿‡è®©ä»£ç†æˆä¸º [Navigation2D] 节点的å­é¡¹å®žçŽ°ï¼Œ"
-"也å¯ä»¥ä½¿ç”¨ [method set_navigation]。[NavigationAgent2D] 是物ç†å®‰å…¨çš„。"
+"需è¦å¯¼èˆªæ•°æ®æ‰èƒ½æ­£ç¡®å·¥ä½œã€‚默认情况下,这个节点会在默认的 [World2D] 导航地图中"
+"进行注册。如果这个节点是 [Navigation2D] 节点的å­é¡¹ï¼Œé‚£ä¹ˆå°±ä¼šåœ¨è¿™ä¸ªå¯¼èˆªèŠ‚ç‚¹çš„"
+"导航地图中进行注册,也å¯ä»¥ä½¿ç”¨ [method set_navigation] 函数直接设置导航节点。"
+"[NavigationAgent2D] 是物ç†å®‰å…¨çš„。\n"
+"[b]注æ„:[/b]使用 [method set_target_location] 之åŽï¼Œå¿…须在æ¯ä¸ªç‰©ç†å¸§ä½¿ç”¨ä¸€"
+"次 [method get_next_location] å‡½æ•°æ¥æ›´æ–° NavigationAgent 的内部路径逻辑。这个"
+"函数返回的å‘é‡ä½ç½®åº”该用作该代ç†çš„父节点的下一次移动ä½ç½®ã€‚"
#: doc/classes/NavigationAgent2D.xml
msgid ""
@@ -45008,15 +45487,6 @@ msgid ""
msgstr "返回该代ç†çš„导航系统所使用的 [Navigation2D] 节点。"
#: doc/classes/NavigationAgent2D.xml
-msgid ""
-"Returns a [Vector2] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the position of the agent's parent."
-msgstr ""
-"返回å¯ä»¥ç§»åŠ¨è‡³çš„ [Vector2] 免局忠‡ï¼Œç¡®ä¿ä¸­é€”æ²¡æœ‰é™æ€ç‰©ä½“é˜»æŒ¡ã€‚å¦‚æžœä»£ç†æ²¡æœ‰å¯¼"
-"航路径,则会返回代ç†çˆ¶èŠ‚ç‚¹çš„åŽŸç‚¹ã€‚"
-
-#: doc/classes/NavigationAgent2D.xml
msgid "Returns the [RID] of this agent on the [Navigation2DServer]."
msgstr "返回这个代ç†åœ¨ [Navigation2DServer] 上的 [RID]。"
@@ -45043,6 +45513,15 @@ msgstr ""
"code]。为é¿éšœå¤„ç†æ³¨å†Œå¤§é‡ä»£ç†ä¼šå¯¹æ€§èƒ½æœ‰æ˜¾è‘—å½±å“,应该åªåœ¨å½“剿œ‰éœ€è¦çš„代ç†ä¸Šå¯"
"用。"
+#: doc/classes/NavigationAgent2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent2D] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+"ä½åŸŸï¼Œç”¨äºŽå†³å®šè¯¥ [NavigationAgent2D] 所属的导航地图层。请求路径时,代ç†ä¼šå¿½ç•¥"
+"没有任何匹é…层的导航网格。"
+
#: doc/classes/NavigationMesh.xml
msgid "A mesh to approximate the walkable areas and obstacles."
msgstr "ç”¨äºŽæ¨¡æ‹Ÿå¯æ­¥è¡ŒåŒºåŸŸå’Œéšœç¢ç‰©çš„网格。"
@@ -45075,9 +45554,10 @@ msgstr "é€šè¿‡æ ¹æ® [Mesh] 设置顶点和索引æ¥åˆå§‹åŒ–导航网格。"
#: doc/classes/NavigationMesh.xml
msgid ""
-"Returns whether the specified [code]bit[/code] of the [member geometry/"
-"collision_mask] is set."
-msgstr "返回[member geometry/collision_mask]的指定[code]bit[/code]是å¦è¢«è®¾ç½®ã€‚"
+"Returns whether the specified [code]bit[/code] of the [member "
+"geometry_collision_mask] is set."
+msgstr ""
+"返回 [member geometry_collision_mask] 上指定的 [code]bit[/code] 是å¦å·²è®¾ç½®ã€‚"
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
msgid ""
@@ -45098,14 +45578,14 @@ msgstr "返回包å«ç”¨äºŽåˆ›å»ºå¤šè¾¹å½¢çš„æ‰€æœ‰é¡¶ç‚¹çš„[PoolVector3Array]。
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/"
-"code] in the [member geometry/collision_mask].\n"
+"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]."
+"code] in the [member geometry_collision_mask]."
msgstr ""
-"如果 [code]value[/code] 为 [code]true[/code],则在 [member geometry/"
-"collision_mask] 中设置指定的 [code]bit[/code]。\n"
-"如果 [code]value[/code] 为 [code]false[/code],则在 [member geometry/"
-"collision_mask] 中清除指定的 [code]bit[/code]。"
+"如果 [code]value[/code] 为 [code]true[/code],则在 [member "
+"geometry_collision_mask] 中设置指定的 [code]bit[/code]。\n"
+"如果 [code]value[/code] 为 [code]false[/code],则在 [member "
+"geometry_collision_mask] 中清除指定的 [code]bit[/code]。"
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
msgid ""
@@ -45118,19 +45598,19 @@ 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]."
+"multiple of [member cell_height]."
msgstr ""
"地æ¿åˆ°å¤©èбæ¿çš„æœ€å°é«˜åº¦ï¼Œä»ç„¶å…许被认为是å¯è¡Œèµ°çš„地æ¿ã€‚\n"
-"[b]注æ„:[/b]烘焙时,这个值会å‘ä¸Šå–æ•´åˆ°æœ€æŽ¥è¿‘çš„ [member cell/height] çš„å€æ•°ã€‚"
+"[b]注æ„:[/b]烘焙时,这个值会å‘ä¸Šå–æ•´åˆ°æœ€æŽ¥è¿‘çš„ [member cell_height] çš„å€æ•°ã€‚"
#: doc/classes/NavigationMesh.xml
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]."
+"multiple of [member cell_height]."
msgstr ""
"被认为ä»å¯ç©¿è¶Šçš„æœ€å°å¢™å£é«˜åº¦ã€‚\n"
-"[b]注æ„:[/b]烘焙时,该值将å‘下èˆå…¥åˆ°æœ€æŽ¥è¿‘çš„ [member cell/height] çš„å€æ•°ã€‚"
+"[b]注æ„:[/b]烘焙时,该值将å‘下èˆå…¥åˆ°æœ€æŽ¥è¿‘çš„ [member cell_height] çš„å€æ•°ã€‚"
#: doc/classes/NavigationMesh.xml
msgid "The maximum slope that is considered walkable, in degrees."
@@ -45141,14 +45621,14 @@ 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]."
+"multiple of [member cell_size]."
msgstr ""
"侵蚀/缩å°è¿œç¦»éšœç¢ç‰©çš„高度场的å¯è¡Œèµ°åŒºåŸŸè·ç¦»ã€‚\n"
-"[b]注æ„:[/b]烘焙时,这个值会å‘ä¸Šå–æ•´åˆ°æœ€æŽ¥è¿‘çš„ [member cell/size] çš„å€æ•°ã€‚"
+"[b]注æ„:[/b]烘焙时,这个值会å‘ä¸Šå–æ•´åˆ°æœ€æŽ¥è¿‘çš„ [member cell_size] çš„å€æ•°ã€‚"
#: doc/classes/NavigationMesh.xml
msgid "The Y axis cell size to use for fields."
-msgstr "用于字段Yè½´å•元的尺寸。"
+msgstr "用于字段 Y è½´å•元的尺寸。"
#: doc/classes/NavigationMesh.xml
msgid ""
@@ -45171,18 +45651,20 @@ msgstr "简化轮廓的边界边缘应å离原始原始轮廓的最大è·ç¦»ã€‚
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]."
+"multiple of [member cell_size]."
msgstr ""
"沿网格边界的轮廓的最大å…许长度。\n"
-"[b]注æ„:[/b]烘焙时,这个值会å‘ä¸Šå–æ•´åˆ°æœ€æŽ¥è¿‘çš„[member cell/size]çš„å€æ•°ã€‚"
+"[b]注æ„:[/b]烘焙时,这个值会å‘ä¸Šå–æ•´åˆ°æœ€æŽ¥è¿‘çš„[member cell_size]çš„å€æ•°ã€‚"
#: doc/classes/NavigationMesh.xml
msgid ""
-"If [code]true[/code], marks walkable spans as not walkable if the clearance "
-"above the span is less than [member agent/height]."
+"If the baking [AABB] has a volume the navigation mesh baking will be "
+"restricted to its enclosing area."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+msgid "The position offset applied to the [member filter_baking_aabb] [AABB]."
msgstr ""
-"如果为 [code]true[/code],如果跨度上方的间隙å°äºŽ [member agent/height],则将"
-"å¯è¡Œèµ°èŒƒå›´æ ‡è®°ä¸ºä¸å¯è¡Œèµ°ã€‚"
#: doc/classes/NavigationMesh.xml
msgid "If [code]true[/code], marks spans that are ledges as non-walkable."
@@ -45191,19 +45673,27 @@ msgstr "如果为 [code]true[/code],则标记边缘间的跨度为ä¸å¯è¡Œèµ°
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]true[/code], marks non-walkable spans as walkable if their maximum "
-"is within [member agent/max_climb] of a walkable neighbor."
+"is within [member agent_max_climb] of a walkable neighbor."
msgstr ""
-"如果为 [code]true[/code],如果它们的最大值在å¯è¡Œèµ°é‚»åŸŸçš„ [member agent/"
-"max_climb] 内,则将ä¸å¯è¡Œèµ°èŒƒå›´æ ‡è®°ä¸ºå¯è¡Œèµ°ã€‚"
+"如果为 [code]true[/code],如果它们的最大值在å¯è¡Œèµ°é‚»åŸŸçš„ [member "
+"agent_max_climb] 内,则将ä¸å¯è¡Œèµ°èŒƒå›´æ ‡è®°ä¸ºå¯è¡Œèµ°ã€‚"
+
+#: doc/classes/NavigationMesh.xml
+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
msgid ""
"The physics layers to scan for static colliders.\n"
-"Only used when [member geometry/parsed_geometry_type] is [constant "
+"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 "
+"仅在 [member geometry_parsed_geometry_type] 是 [constant "
"PARSED_GEOMETRY_STATIC_COLLIDERS] 或 [constant PARSED_GEOMETRY_BOTH] æ—¶æ‰ä½¿"
"用。"
@@ -45211,23 +45701,24 @@ msgstr ""
msgid ""
"Determines which type of nodes will be parsed as geometry. See [enum "
"ParsedGeometryType] for possible values."
-msgstr "决定哪ç§ç±»åž‹çš„节点å¯è§£æžä¸ºå‡ ä½•图形。å‚阅 [enum ParsedGeometryType]。"
+msgstr ""
+"决定哪ç§ç±»åž‹çš„节点å¯è§£æžä¸ºå‡ ä½•图形。å¯èƒ½çš„å–å€¼è§ [enum ParsedGeometryType]。"
#: doc/classes/NavigationMesh.xml
msgid ""
"The source of the geometry used when baking. See [enum SourceGeometryMode] "
"for possible values."
-msgstr "烘焙时使用的几何体的æºã€‚å‚阅 [enum SourceGeometryMode]。"
+msgstr "烘焙时使用的几何体的æºã€‚å¯èƒ½çš„å–å€¼è§ [enum SourceGeometryMode]。"
#: doc/classes/NavigationMesh.xml
msgid ""
"The name of the group to scan for geometry.\n"
-"Only used when [member geometry/source_geometry_mode] is [constant "
+"Only used when [member geometry_source_geometry_mode] is [constant "
"SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant "
"SOURCE_GEOMETRY_GROUPS_EXPLICIT]."
msgstr ""
"è¦æ‰«æçš„几何体组的å称。\n"
-"åªæœ‰å½“ [member geometry/source_geometry_mode]是[constant "
+"åªæœ‰å½“ [member geometry_source_geometry_mode] 是 [constant "
"SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] 或 [constant "
"SOURCE_GEOMETRY_GROUPS_EXPLICIT] æ—¶æ‰ä½¿ç”¨ã€‚"
@@ -45255,15 +45746,16 @@ 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。"
+"区域被创建所需的最å°å°ºå¯¸ã€‚\n"
+"[b]注æ„:[/b]该值将被平方,以计算出å…许形æˆå­¤å²›åŒºåŸŸçš„æœ€å°å•元数。例如,值为 "
+"8 时将把å•元格的数é‡è®¾ä¸º 64。"
#: doc/classes/NavigationMesh.xml
msgid ""
"Partitioning algorithm for creating the navigation mesh polys. See [enum "
"SamplePartitionType] for possible values."
-msgstr "创建导航网格多边形å•元的分割算法。å‚阅 [enum SamplePartitionType]。"
+msgstr ""
+"创建导航网格多边形å•元的分割算法。å¯èƒ½çš„å–å€¼è§ [enum SamplePartitionType]。"
#: doc/classes/NavigationMesh.xml
msgid ""
@@ -45282,7 +45774,7 @@ msgstr "å•调分区。如果您想è¦å¿«é€Ÿç”Ÿæˆå¯¼èˆªç½‘格,请使用此选
msgid ""
"Layer partitioning. Good choice to use for tiled navigation mesh with medium "
"and small sized tiles."
-msgstr "层分区。用于具有中å°åž‹ç“·ç –的平铺导航网格的ä¸é”™é€‰æ‹©ã€‚"
+msgstr "层分区。用于具有中å°åž‹å›¾å—的平铺导航网格的ä¸é”™é€‰æ‹©ã€‚"
#: doc/classes/NavigationMesh.xml
msgid "Represents the size of the [enum SamplePartitionType] enum."
@@ -45298,10 +45790,10 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Parses [StaticBody] colliders as geometry. The collider should be in any of "
-"the layers specified by [member geometry/collision_mask]."
+"the layers specified by [member geometry_collision_mask]."
msgstr ""
-"å°† [StaticBody] 碰撞器解æžä¸ºå‡ ä½•体。碰撞器应ä½äºŽ [member geometry/"
-"collision_mask] 指定的任何层中。"
+"å°† [StaticBody] 碰撞器解æžä¸ºå‡ ä½•体。碰撞器应ä½äºŽ [member "
+"geometry_collision_mask] 指定的任何层中。"
#: doc/classes/NavigationMesh.xml
msgid ""
@@ -45323,17 +45815,17 @@ msgstr "递归扫æ [NavigationMeshInstance] çš„å­èŠ‚ç‚¹ä»¥èŽ·å–几何体。"
#: doc/classes/NavigationMesh.xml
msgid ""
"Scans nodes in a group and their child nodes recursively for geometry. The "
-"group is specified by [member geometry/source_group_name]."
+"group is specified by [member geometry_source_group_name]."
msgstr ""
-"ä»¥é€’å½’æ–¹å¼æ‰«æç»„中的节点åŠå…¶å­èŠ‚ç‚¹ä»¥èŽ·å–几何图形。该组由 [member geometry/"
-"source_group_name] 指定。"
+"ä»¥é€’å½’æ–¹å¼æ‰«æç»„中的节点åŠå…¶å­èŠ‚ç‚¹ä»¥èŽ·å–几何图形。该组由 [member "
+"geometry_source_group_name] 指定。"
#: doc/classes/NavigationMesh.xml
msgid ""
"Uses nodes in a group for geometry. The group is specified by [member "
-"geometry/source_group_name]."
+"geometry_source_group_name]."
msgstr ""
-"使用一个组中的节点进行几何è¿ç®—。该组由 [member geometry/source_group_name] 指"
+"使用一个组中的节点进行几何è¿ç®—。该组由 [member geometry_source_group_name] 指"
"定。"
#: doc/classes/NavigationMesh.xml
@@ -45345,6 +45837,7 @@ msgid "Helper class for creating and clearing navigation meshes."
msgstr "对导航网格进行创建和清ç†çš„辅助类。"
#: doc/classes/NavigationMeshGenerator.xml
+#, fuzzy
msgid ""
"This class is responsible for creating and clearing 3D navigation meshes "
"used as [NavigationMesh] resources inside [NavigationMeshInstance]. The "
@@ -45375,7 +45868,15 @@ msgid ""
"geometry for walkable terrain suitable to [NavigationMesh] agent properties "
"by creating a voxel world around the meshes bounding area.\n"
"The finalized navigation mesh is then returned and stored inside the "
-"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes."
+"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] "
+"nodes.\n"
+"[b]Note:[/b] Using meshes to not only define walkable surfaces but also "
+"obstruct navigation baking does not always work. The navigation baking has "
+"no concept of what is a geometry \"inside\" when dealing with mesh source "
+"geometry and this is intentional. Depending on current baking parameters, as "
+"soon as the obstructing mesh is large enough to fit a navigation mesh area "
+"inside, the baking will generate navigation mesh areas that are inside the "
+"obstructing source geometry mesh."
msgstr ""
"这个类负责 3D 导航网格的创建和清ç†ï¼Œå¯¼èˆªç½‘æ ¼ [NavigationMesh] 是 "
"[NavigationMeshInstance] 中的资æºã€‚[NavigationMeshGenerator] 在 2D 中的用处微"
@@ -45403,14 +45904,14 @@ msgid ""
"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child "
"nodes under the provided [code]root_node[/code] or a specific group of nodes "
"for potential source geometry. The parse behavior can be controlled with the "
-"[member NavigationMesh.geometry/parsed_geometry_type] and [member "
-"NavigationMesh.geometry/source_geometry_mode] properties on the "
+"[member NavigationMesh.geometry_parsed_geometry_type] and [member "
+"NavigationMesh.geometry_source_geometry_mode] properties on the "
"[NavigationMesh] resource."
msgstr ""
"将导航数æ®çƒ˜ç„™è‡³æä¾›çš„ [code]nav_mesh[/code] 中。解æžçš„æ˜¯æä¾›çš„æ ¹èŠ‚ç‚¹ "
"[code]root_node[/code] çš„å­èŠ‚ç‚¹ï¼Œæˆ–å¯èƒ½åŒ…å«åŽŸå§‹å‡ ä½•ä½“çš„åˆ†ç»„ã€‚è§£æžè¡Œä¸ºå¯ä»¥é€š"
-"过 [NavigationMesh] 的 [member NavigationMesh.geometry/parsed_geometry_type] "
-"和 [member NavigationMesh.geometry/source_geometry_mode] 属性控制。"
+"过 [NavigationMesh] 的 [member NavigationMesh.geometry_parsed_geometry_type] "
+"和 [member NavigationMesh.geometry_source_geometry_mode] 属性控制。"
#: doc/classes/NavigationMeshGenerator.xml
msgid ""
@@ -45425,11 +45926,34 @@ msgstr "[NavigationMesh] 的一个实例。"
#: doc/classes/NavigationMeshInstance.xml
msgid ""
"An instance of a [NavigationMesh]. It tells the [Navigation] node what can "
-"be navigated and what cannot, based on the [NavigationMesh] resource. This "
-"should be a child of a [Navigation] node."
-msgstr ""
-"[NavigationMesh] çš„ä¸€ä¸ªå®žä¾‹ã€‚å®ƒä¼šæ ¹æ® [NavigationMesh] 资æºï¼Œå‘ŠçŸ¥ "
-"[Navigation] 节点什么å¯ä»¥å¯¼èˆªã€ä»€ä¹ˆä¸å¯ä»¥ã€‚应该是 [Navigation] 节点的å­èŠ‚ç‚¹ã€‚"
+"be navigated and what cannot, based on the [NavigationMesh] resource.\n"
+"By default this node will register to the default [World] navigation map. If "
+"this node is a child of a [Navigation] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method NavigationServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The cost of entering this region from another region can be controlled with "
+"the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The cost of traveling distances inside this region can be controlled with "
+"the [member travel_cost] multiplier."
+msgstr ""
+"[NavigationMesh] 的实例。[Navigation] 节点根æ®å®ƒçš„ [NavigationMesh] èµ„æºæ¥ç¡®"
+"定哪些å¯ä»¥è¿›è¡Œå¯¼èˆªã€å“ªäº›ä¸èƒ½ã€‚\n"
+"默认情况下,这个节点会在默认的 [World] 导航地图中进行注册。如果这个节点是 "
+"[Navigation] 节点的å­é¡¹ï¼Œå°±ä¼šåœ¨è¯¥å¯¼èˆªèŠ‚ç‚¹çš„å¯¼èˆªåœ°å›¾ä¸­è¿›è¡Œæ³¨å†Œã€‚\n"
+"如果两个地图共享类似的边界,就å¯ä»¥ç›¸äº’连接。你å¯ä»¥é€šè¿‡ [method "
+"NavigationServer.map_set_edge_connection_margin] 设置两个顶点连接两æ¡è¾¹ç•Œæ‰€éœ€"
+"的最å°è·ç¦»ã€‚\n"
+"[b]注æ„:[/b]将两个地区的导航网格相互é‡å å¹¶ä¸è¶³ä»¥å°†å…¶ç›¸è¿žã€‚它们必须共享类似的"
+"边界。\n"
+"从å¦ä¸€ä¸ªåœ°åŒºè¿›å…¥è¿™ä¸ªåœ°å›¾çš„æ¶ˆè€—å¯ä»¥é€šè¿‡ [member enter_cost] 进行控制。\n"
+"[b]注æ„:[/b]如果起点已ç»ä½äºŽè¿™ä¸ªåœ°åŒºä¹‹ä¸­ï¼Œè¿™ä¸ªå€¼ä¸ä¼šåŠ å…¥åˆ°è·¯å¾„æ¶ˆè€—ä¹‹ä¸­ã€‚\n"
+"在这个地区中移动所需的消耗å¯ä»¥é€šè¿‡ [member travel_cost] 系数进行控制。"
#: doc/classes/NavigationMeshInstance.xml
msgid ""
@@ -45466,10 +45990,41 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled."
msgstr "决定该 [NavigationMeshInstance] å·²å¯ç”¨è¿˜æ˜¯å·²ç¦ç”¨ã€‚"
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding enters this region's navmesh from another regions navmesh "
+"the [code]enter_cost[/code] value is added to the path distance for "
+"determining the shortest path."
+msgstr ""
+"当从å¦ä¸€ä¸ªå¯¼èˆªåœ°åŒºçš„网格进入这个地区的导航网格进行寻路时,会将进入消耗 "
+"[code]enter_cost[/code] 加入路径长度,从而确定最短路径。"
+
+#: doc/classes/NavigationMeshInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationMesh] "
+"belongs to. On path requests with [method NavigationServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+"ä½åŸŸï¼Œç”¨äºŽå†³å®šè¯¥ [NavigationMesh] 所属的导航地图层。使用 [method "
+"NavigationServer.map_get_path] 请求路径时会忽略没有任何匹é…层的导航网格,导航"
+"地图åªä¼šå°†æ‹¥æœ‰åŒ¹é…层的导航网格进行近似åˆå¹¶ã€‚"
+
+#: doc/classes/NavigationMeshInstance.xml
msgid "The [NavigationMesh] resource to use."
msgstr "使用的 [NavigationMesh] 资æºã€‚"
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding moves inside this region's navmesh the traveled distances "
+"are multiplied with [code]travel_cost[/code] for determining the shortest "
+"path."
+msgstr ""
+"当在这个地区的导航网格中进行寻路时,会将已移动的è·ç¦»ä¹˜ä¸Šç§»åŠ¨æ¶ˆè€— "
+"[code]travel_cost[/code],从而确定最短路径。"
+
+#: doc/classes/NavigationMeshInstance.xml
msgid "Notifies when the navigation mesh bake operation is completed."
msgstr "导航网格烘焙æ“ä½œå®Œæˆæ—¶å‘出通知。"
@@ -45486,11 +46041,15 @@ msgid ""
"3D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationObstacle] is physics safe."
+"[NavigationObstacle] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
"导航中用于防撞的 3D éšœç¢ç‰©ã€‚éšœç¢ç‰©éœ€è¦å¯¼èˆªæ•°æ®æ‰èƒ½æ­£ç¡®å·¥ä½œã€‚å¯ä»¥é€šè¿‡è®©éšœç¢ç‰©"
"æˆä¸º [Navigation] 节点的å­é¡¹å®žçŽ°ï¼Œä¹Ÿå¯ä»¥ä½¿ç”¨ [method set_navigation]。"
-"[NavigationObstacle] 是物ç†å®‰å…¨çš„。"
+"[NavigationObstacle] 是物ç†å®‰å…¨çš„。\n"
+"[b]注æ„:[/b]éšœç¢ç‰©åº”ä½œä¸ºå¤„ç†æŒç»­ç§»åŠ¨çš„ç‰©ä½“çš„æœ€åŽæ‰‹æ®µï¼Œæ— æ³•è¿›è¡Œé«˜æ•ˆçš„ï¼ˆé‡æ–°ï¼‰"
+"烘焙。"
#: doc/classes/NavigationObstacle.xml
msgid ""
@@ -45532,11 +46091,15 @@ msgid ""
"2D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationObstacle2D] is physics safe."
+"[NavigationObstacle2D] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
"导航中用于防撞的 2D éšœç¢ç‰©ã€‚éšœç¢ç‰©éœ€è¦å¯¼èˆªæ•°æ®æ‰èƒ½æ­£ç¡®å·¥ä½œã€‚å¯ä»¥é€šè¿‡è®©éšœç¢ç‰©"
"æˆä¸º [Navigation2D] 节点的å­é¡¹å®žçŽ°ï¼Œä¹Ÿå¯ä»¥ä½¿ç”¨ [method set_navigation]。"
-"[NavigationObstacle2D] 是物ç†å®‰å…¨çš„。"
+"[NavigationObstacle2D] 是物ç†å®‰å…¨çš„。\n"
+"[b]注æ„:[/b]éšœç¢ç‰©åº”ä½œä¸ºå¤„ç†æŒç»­ç§»åŠ¨çš„ç‰©ä½“çš„æœ€åŽæ‰‹æ®µï¼Œè¿™äº›ç‰©ä½“无法进行高效的"
+"ï¼ˆé‡æ–°ï¼‰çƒ˜ç„™ã€‚"
#: doc/classes/NavigationObstacle2D.xml
msgid ""
@@ -45615,8 +46178,8 @@ msgid ""
"make_polygons_from_outlines] in order for this array to be converted to "
"polygons that the engine will use."
msgstr ""
-"将包å«è½®å»“顶点的[PoolVector2Array]æ·»åŠ åˆ°åŒ…å«æ‰€æœ‰è½®å»“的内部数组中。你必须调用"
-"[method make_polygons_from_outlines],将数组转æ¢ä¸ºå¼•擎å¯ä½¿ç”¨çš„多边形。"
+"将包å«è½®å»“顶点的 [PoolVector2Array] æ·»åŠ åˆ°åŒ…å«æ‰€æœ‰è½®å»“的内部数组中。你必须调"
+"用 [method make_polygons_from_outlines],将数组转æ¢ä¸ºå¼•擎å¯ä½¿ç”¨çš„多边形。"
#: doc/classes/NavigationPolygon.xml
msgid ""
@@ -45625,9 +46188,9 @@ msgid ""
"to call [method make_polygons_from_outlines] in order for this array to be "
"converted to polygons that the engine will use."
msgstr ""
-"将包å«è½®å»“顶点的[PoolVector2Array]æ·»åŠ åˆ°å†…éƒ¨æ•°ç»„ä¸­ï¼Œè¯¥æ•°ç»„åŒ…å«æ‰€æœ‰å›ºå®šä½ç½®çš„"
-"轮廓。你必须调用[method make_polygons_from_outlines],将数组转æ¢ä¸ºå¼•擎å¯ä½¿ç”¨"
-"的多边形。"
+"将包å«è½®å»“顶点的 [PoolVector2Array] æ·»åŠ åˆ°å†…éƒ¨æ•°ç»„ä¸­ï¼Œè¯¥æ•°ç»„åŒ…å«æ‰€æœ‰å›ºå®šä½ç½®"
+"的轮廓。你必须调用 [method make_polygons_from_outlines],将数组转æ¢ä¸ºå¼•擎å¯ä½¿"
+"用的多边形。"
#: doc/classes/NavigationPolygon.xml
msgid ""
@@ -45643,6 +46206,17 @@ msgstr "æ¸…é™¤å¤šè¾¹å½¢æ•°ç»„ï¼Œä½†ä¸æ¸…除轮廓和顶点数组。"
#: doc/classes/NavigationPolygon.xml
msgid ""
+"Returns the [NavigationMesh] resulting from this navigation polygon. This "
+"navmesh can be used to update the navmesh of a region with the [method "
+"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server "
+"behind the scene)."
+msgstr ""
+"返回这个导航多边形的 [NavigationMesh]。这个导航网格å¯ç”¨äºŽä½¿ç”¨ [method "
+"NavigationServer.region_set_navmesh] API 直接更新æŸä¸ªåœ°åŒºçš„导航网格(2D 在底"
+"层使用的是 3D æœåŠ¡å™¨ï¼‰ã€‚"
+
+#: doc/classes/NavigationPolygon.xml
+msgid ""
"Returns a [PoolVector2Array] containing the vertices of an outline that was "
"created in the editor or by script."
msgstr "返回[PoolVector2Array],包å«åœ¨ç¼–辑器中或通过脚本创建的轮廓的顶点。"
@@ -45660,7 +46234,7 @@ msgstr "返回多边形的数é‡ã€‚"
msgid ""
"Returns a [PoolVector2Array] containing all the vertices being used to "
"create the polygons."
-msgstr "返回包å«ç”¨äºŽåˆ›å»ºå¤šè¾¹å½¢çš„æ‰€æœ‰é¡¶ç‚¹çš„[PoolVector2Array]。"
+msgstr "返回包å«ç”¨äºŽåˆ›å»ºå¤šè¾¹å½¢çš„æ‰€æœ‰é¡¶ç‚¹çš„ [PoolVector2Array]。"
#: doc/classes/NavigationPolygon.xml
msgid "Creates polygons from the outlines added in the editor or by script."
@@ -45683,6 +46257,42 @@ msgstr ""
"make_polygons_from_outlines] æ¥æ›´æ–°å¤šè¾¹å½¢ã€‚"
#: doc/classes/NavigationPolygonInstance.xml
+msgid "A region of the 2D navigation map."
+msgstr "2D 导航地图上的一个地区。"
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A region of the navigation map. It tells the [Navigation2DServer] what can "
+"be navigated and what cannot, based on its [NavigationPolygon] resource.\n"
+"By default this node will register to the default [World2D] navigation map. "
+"If this node is a child of a [Navigation2D] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The pathfinding cost of entering this region from another region can be "
+"controlled with the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The pathfinding cost of traveling distances inside this region can be "
+"controlled with the [member travel_cost] multiplier."
+msgstr ""
+"导航地图上的地区。[Navigation2DServer] æ ¹æ®å®ƒçš„ [NavigationPolygon] èµ„æºæ¥ç¡®"
+"定哪些å¯ä»¥è¿›è¡Œå¯¼èˆªã€å“ªäº›ä¸èƒ½ã€‚\n"
+"默认情况下,这个节点会在默认的 [World2D] 导航地图中进行注册。如果这个节点是 "
+"[Navigation2D] 节点的å­é¡¹ï¼Œå°±ä¼šåœ¨è¯¥å¯¼èˆªèŠ‚ç‚¹çš„å¯¼èˆªåœ°å›¾ä¸­è¿›è¡Œæ³¨å†Œã€‚\n"
+"如果两个地图共享类似的边界,就å¯ä»¥ç›¸äº’连接。你å¯ä»¥é€šè¿‡ [method "
+"Navigation2DServer.map_set_edge_connection_margin] 设置两个顶点连接两æ¡è¾¹ç•Œæ‰€"
+"需的最å°è·ç¦»ã€‚\n"
+"[b]注æ„:[/b]将两个地区的导航网格相互é‡å å¹¶ä¸è¶³ä»¥å°†å…¶ç›¸è¿žã€‚它们必须共享类似的"
+"边界。\n"
+"从å¦ä¸€ä¸ªåœ°åŒºè¿›å…¥è¿™ä¸ªåœ°å›¾çš„寻路消耗å¯ä»¥é€šè¿‡ [member enter_cost] 进行控制。\n"
+"[b]注æ„:[/b]如果起点已ç»ä½äºŽè¿™ä¸ªåœ°åŒºä¹‹ä¸­ï¼Œè¿™ä¸ªå€¼ä¸ä¼šåŠ å…¥åˆ°è·¯å¾„æ¶ˆè€—ä¹‹ä¸­ã€‚\n"
+"在这个地区中移动所需的寻路消耗å¯ä»¥é€šè¿‡ [member travel_cost] 系数进行控制。"
+
+#: doc/classes/NavigationPolygonInstance.xml
msgid ""
"Returns the [RID] of this region on the [Navigation2DServer]. Combined with "
"[method Navigation2DServer.map_get_closest_point_owner] can be used to "
@@ -45693,12 +46303,30 @@ msgstr ""
"Navigation2DServer.map_get_closest_point_owner] 组åˆä½¿ç”¨ï¼ŒèŽ·å–åˆå¹¶åŽçš„导航图"
"中与æŸä¸ªç‚¹æœ€æŽ¥è¿‘çš„ [NavigationPolygonInstance]。"
+#: doc/classes/NavigationPolygonInstance.xml
+msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled."
+msgstr "决定该 [NavigationPolygonInstance] å·²å¯ç”¨è¿˜æ˜¯å·²ç¦ç”¨ã€‚"
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationPolygon] "
+"belongs to. On path requests with [method Navigation2DServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+"ä½åŸŸï¼Œç”¨äºŽå†³å®šè¯¥ [NavigationPolygon] 所属的导航地图层。使用 [method "
+"Navigation2DServer.map_get_path] 请求路径时会忽略没有任何匹é…层的导航网格,导"
+"航地图åªä¼šå°†æ‹¥æœ‰åŒ¹é…层的导航网格进行近似åˆå¹¶ã€‚"
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid "The [NavigationPolygon] resource to use."
+msgstr "使用的 [NavigationPolygon] 资æºã€‚"
+
#: doc/classes/NavigationServer.xml
msgid "Server interface for low-level 3D navigation access."
msgstr "访问底层 3D 导航的æœåŠ¡å™¨æŽ¥å£ã€‚"
#: doc/classes/NavigationServer.xml
-#, fuzzy
msgid ""
"NavigationServer is the server responsible for all 3D navigation. It handles "
"several objects, namely maps, regions and agents.\n"
@@ -45726,7 +46354,11 @@ msgstr ""
"NavigationServer 是负责所有 3D 导航的æœåŠ¡å™¨ï¼Œå¤„ç†çš„对象有地图(map)ã€åœ°åŒº"
"(region)ã€ä»£ç†ï¼ˆagent)。\n"
"地图是由地区组æˆçš„,地区åˆç”±å¯¼èˆªç½‘格组æˆã€‚å®ƒä»¬ä¸€åŒæž„æˆäº† 3D 世界中的å¯å¯¼èˆªåŒº"
-"域。两个地区必须共有一æ¡ç›¸ä¼¼çš„边界(edge)æ‰èƒ½ç›¸è¿žã€‚如果一æ¡è¾¹ç•Œçš„两个顶点"
+"域。\n"
+"[b]注æ„:[/b]NavigationServer 的大多数修改都è¦åœ¨ä¸‹ä¸€ä¸ªç‰©ç†å¸§ä¹‹åŽç”Ÿæ•ˆï¼Œä¸æ˜¯ç«‹"
+"å³ç”Ÿæ•ˆçš„。SceneTree 中导航相关的节点对地图ã€åœ°åŒºã€ä»£ç†ä½œå‡ºçš„修改也是如此,通"
+"过脚本作出的修改亦然。\n"
+"两个地区必须共有一æ¡ç›¸ä¼¼çš„边界(edge)æ‰èƒ½ç›¸è¿žã€‚如果一æ¡è¾¹ç•Œçš„两个顶点"
"(vertex)与å¦ä¸€æ¡è¾¹ç•Œçš„对应顶点的è·ç¦»å°äºŽ [member Navigation."
"edge_connection_margin],则认为这两æ¡è¾¹ç•Œç›¸è¿žã€‚\n"
"è¦ä½¿ç”¨é˜²æ’žç³»ç»Ÿï¼Œå¯ä»¥ä½¿ç”¨ä»£ç†ã€‚ä½ å¯ä»¥è®¾ç½®ä»£ç†çš„目标速度,æœåŠ¡å™¨å°±ä¼šä½¿ç”¨ä¿®æ­£åŽ"
@@ -45785,6 +46417,14 @@ msgid "Bakes the navigation mesh."
msgstr "烘焙导航网格。"
#: doc/classes/NavigationServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method NavigationServer.map_get_path])."
+msgstr ""
+"设置该地区的导航层。å¯ä»¥åœ¨ï¼ˆä½¿ç”¨ [method NavigationServer.map_get_path])进行"
+"路径请求时选择地区。"
+
+#: doc/classes/NavigationServer.xml
msgid "Control activation of this server."
msgstr "控制这个æœåŠ¡å™¨æ˜¯å¦æ¿€æ´»ã€‚"
@@ -45807,13 +46447,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."
+"PacketPeer 的实现,应该在åˆå§‹åŒ–为客户端或æœåС噍åŽä¼ é€’ç»™ [member SceneTree."
"network_peer]。然åŽå¯ä»¥é€šè¿‡è¿žæŽ¥åˆ° [SceneTree] ä¿¡å·æ¥å¤„ç†äº‹ä»¶ã€‚\n"
"ENet 的目的是在 UDPï¼ˆç”¨æˆ·æ•°æ®æŠ¥å议)之上æä¾›ä¸€ä¸ªç›¸å¯¹ç®€å•而å¥å…¨çš„网络通信"
"层。\n"
-"[b]注æ„:[/b]ENet åªä½¿ç”¨UDP,ä¸ä½¿ç”¨TCPã€‚è½¬å‘æœåŠ¡å™¨ç«¯å£ä½¿æ‚¨çš„æœåŠ¡å™¨å¯ä»¥åœ¨å…¬ç½‘"
-"上访问时,åªéœ€è¦å°†æœåŠ¡å™¨ç«¯å£è½¬å‘为UDPå³å¯ã€‚您å¯ä»¥ä½¿ç”¨ [UPNP] ç±»å°è¯•在å¯åЍæœåŠ¡"
-"å™¨æ—¶è‡ªåŠ¨è½¬å‘æœåŠ¡å™¨ç«¯å£ã€‚"
+"[b]注æ„:[/b]ENet åªä½¿ç”¨ UDP,ä¸ä½¿ç”¨ TCPã€‚è½¬å‘æœåŠ¡å™¨ç«¯å£ä½¿æ‚¨çš„æœåŠ¡å™¨å¯ä»¥åœ¨å…¬"
+"网上访问时,åªéœ€è¦å°†æœåŠ¡å™¨ç«¯å£è½¬å‘为 UDP å³å¯ã€‚您å¯ä»¥ä½¿ç”¨ [UPNP] ç±»å°è¯•在å¯åЍ"
+"æœåŠ¡å™¨æ—¶è‡ªåŠ¨è½¬å‘æœåŠ¡å™¨ç«¯å£ã€‚"
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
@@ -45893,25 +46533,25 @@ msgid ""
"Disconnect the given peer. If \"now\" is set to [code]true[/code], the "
"connection will be closed immediately without flushing queued messages."
msgstr ""
-"断开给定对等体的连接。如果 \"now \"被设置为 [code]true[/code],连接将被立å³å…³"
-"闭而ä¸å†²åˆ·é˜Ÿåˆ—中的消æ¯ã€‚"
+"断开给定对等体的连接。如果“nowâ€è¢«è®¾ç½®ä¸º [code]true[/code],连接将被立å³å…³é—­è€Œ"
+"ä¸å†²åˆ·é˜Ÿåˆ—中的消æ¯ã€‚"
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"Returns the channel of the last packet fetched via [method PacketPeer."
"get_packet]."
-msgstr "返回通过[method PacketPeer.get_packet]获å–的最åŽä¸€ä¸ªåŒ…çš„Channel。"
+msgstr "返回通过 [method PacketPeer.get_packet] 获å–的上一个数æ®åŒ…çš„ Channel。"
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
"Returns the channel of the next packet that will be retrieved via [method "
"PacketPeer.get_packet]."
-msgstr "返回将通过[method PacketPeer.get_packet]获å–的下一个数æ®åŒ…çš„Channel。"
+msgstr "返回通过 [method PacketPeer.get_packet] 获å–的下一个数æ®åŒ…çš„ Channel。"
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
#: modules/websocket/doc_classes/WebSocketServer.xml
msgid "Returns the IP address of the given peer."
-msgstr "返回给定对等体的IP地å€ã€‚"
+msgstr "返回给定对等体的 IP 地å€ã€‚"
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
#: modules/websocket/doc_classes/WebSocketServer.xml
@@ -45934,8 +46574,8 @@ msgid ""
"code]. For servers, you must also setup the [CryptoKey] via [method "
"set_dtls_key]."
msgstr ""
-"当[member use_dtls]为 [code]true[/code] 时,é…ç½®[X509Certificate]使用。对于æœ"
-"务器,您还必须通过[method set_dtls_key]设置[CryptoKey]。"
+"当 [member use_dtls] 为 [code]true[/code] 时,é…ç½® [X509Certificate] 使用。对"
+"于æœåŠ¡å™¨ï¼Œæ‚¨è¿˜å¿…é¡»é€šè¿‡ [method set_dtls_key] 设置 [CryptoKey]。"
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
@@ -45943,8 +46583,8 @@ msgid ""
"code]. Remember to also call [method set_dtls_certificate] to setup your "
"[X509Certificate]."
msgstr ""
-"当[member use_dtls]为 [code]true[/code] 时,é…ç½®[CryptoKey]æ¥ä½¿ç”¨ã€‚è®°ä½ä¹Ÿè¦è°ƒ"
-"用[method set_dtls_certificate]æ¥è®¾ç½®[X509Certificate]。"
+"当 [member use_dtls] 为 [code]true[/code] 时,é…ç½® [CryptoKey] æ¥ä½¿ç”¨ã€‚è®°ä½ä¹Ÿ"
+"è¦è°ƒç”¨ [method set_dtls_certificate] æ¥è®¾ç½® [X509Certificate]。"
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml
msgid ""
@@ -45987,7 +46627,7 @@ msgid ""
"status of a packet in one channel won't stall the delivery of other packets "
"in another channel."
msgstr ""
-"ENetè¦ä½¿ç”¨çš„ä¿¡é“æ•°é‡ã€‚通é“用于分离ä¸åŒç±»åž‹çš„æ•°æ®ã€‚例如,在å¯é æˆ–æœ‰åºæ¨¡å¼ä¸‹ï¼Œ"
+"ENet è¦ä½¿ç”¨çš„ä¿¡é“æ•°é‡ã€‚通é“用于分离ä¸åŒç±»åž‹çš„æ•°æ®ã€‚例如,在å¯é æˆ–æœ‰åºæ¨¡å¼ä¸‹ï¼Œ"
"åŒ…äº¤ä»˜é¡ºåºæ˜¯åœ¨æ¯ä¸ªé€šé“的基础上ä¿è¯çš„ã€‚è¿™æ ·åšæ˜¯ä¸ºäº†æ¶ˆé™¤å»¶è¿Ÿå¹¶å‡å°‘对数æ®åŒ…的排"
"åºé™åˆ¶ã€‚在一个通é“中的包的交付状æ€ä¸ä¼šåœæ­¢åœ¨å¦ä¸€ä¸ªé€šé“中的其他包的交付。"
@@ -46008,8 +46648,8 @@ msgid ""
msgstr ""
"用于网络数æ®åŒ…的压缩方法。这些在压缩速度与带宽之间有ä¸åŒçš„æƒè¡¡ï¼Œå¦‚æžœæ‚¨å®Œå…¨ä½¿"
"用压缩,您å¯èƒ½éœ€è¦æµ‹è¯•å“ªä¸€ç§æœ€é€‚åˆæ‚¨çš„用例。\n"
-"[b]注:[/b]大多数游æˆçš„网络设计都涉åŠé¢‘ç¹å‘é€è®¸å¤šå°æ•°æ®åŒ…(æ¯ä¸ªå°äºŽ4 KB)。如"
-"果有疑问,建议ä¿ç•™é»˜è®¤åŽ‹ç¼©ç®—æ³•ï¼Œå› ä¸ºå®ƒå¯¹è¿™äº›å°æ•°æ®åŒ…效果最好。\n"
+"[b]注æ„:[/b]大多数游æˆçš„网络设计都涉åŠé¢‘ç¹å‘é€è®¸å¤šå°æ•°æ®åŒ…(æ¯ä¸ªå°äºŽ 4 "
+"KB)。如果有疑问,建议ä¿ç•™é»˜è®¤åŽ‹ç¼©ç®—æ³•ï¼Œå› ä¸ºå®ƒå¯¹è¿™äº›å°æ•°æ®åŒ…效果最好。\n"
"[b]注æ„:[/b][member compression_mode] 必须在æœåС噍åŠå…¶æ‰€æœ‰å®¢æˆ·ç«¯ä¸Šè®¾ç½®ä¸ºç›¸åŒ"
"的值。如果客户端上设置的 [member compression_mode] 与æœåŠ¡å™¨ä¸Šè®¾ç½®çš„ä¸åŒï¼Œåˆ™å®¢"
"户端将无法连接。在 Godot 3.4 之å‰ï¼Œé»˜è®¤çš„ [member compression_mode] 是 "
@@ -46149,7 +46789,7 @@ msgstr "WebRTC ä¿¡å·æ¼”示"
#: doc/classes/NetworkedMultiplayerPeer.xml
msgid ""
"Returns the current state of the connection. See [enum ConnectionStatus]."
-msgstr "返回连接的当å‰çжæ€ã€‚请å‚阅 [enum ConnectionStatus]。"
+msgstr "返回连接的当å‰çжæ€ã€‚è§ [enum ConnectionStatus]。"
#: doc/classes/NetworkedMultiplayerPeer.xml
msgid ""
@@ -46191,7 +46831,7 @@ msgstr ""
msgid ""
"The manner in which to send packets to the [code]target_peer[/code]. See "
"[enum TransferMode]."
-msgstr "å‘[code]target_peer[/code]å‘逿•°æ®åŒ…的方å¼ã€‚å‚阅[enum TransferMode]。"
+msgstr "å‘ [code]target_peer[/code] å‘逿•°æ®åŒ…的方å¼ã€‚è§ [enum TransferMode]。"
#: doc/classes/NetworkedMultiplayerPeer.xml
msgid "Emitted when a connection attempt fails."
@@ -46256,7 +46896,7 @@ msgstr "正在进行的连接断开了。"
#: doc/classes/NetworkedMultiplayerPeer.xml
msgid "A connection attempt is ongoing."
-msgstr "一个连接å°è¯•正在进行中。"
+msgstr "正在å°è¯•进行连接。"
#: doc/classes/NetworkedMultiplayerPeer.xml
msgid "The connection attempt succeeded."
@@ -46285,43 +46925,45 @@ msgid ""
"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 ""
-"NinePatchRect也被称为9片å¼é¢æ¿ï¼Œå®ƒåŸºäºŽä¸€ä¸ªå°çš„纹ç†ï¼Œäº§ç”Ÿä»»ä½•å°ºå¯¸çš„å¹²å‡€é¢æ¿ã€‚"
-"为了åšåˆ°è¿™ä¸€ç‚¹ï¼Œå®ƒå°†çº¹ç†åˆ†å‰²æˆ3×3的网格。当你缩放节点时,它在水平或垂直方å‘上"
-"平铺纹ç†çš„两侧,在两个轴上平铺中心,但它ä¸ä¼šç¼©æ”¾æˆ–平铺角部。"
+"NinePatchRect 也被称为 9 片å¼é¢æ¿ï¼Œå®ƒåŸºäºŽä¸€ä¸ªå°çš„纹ç†ï¼Œäº§ç”Ÿä»»ä½•尺寸的干净é¢"
+"æ¿ã€‚为了åšåˆ°è¿™ä¸€ç‚¹ï¼Œå®ƒå°†çº¹ç†åˆ†å‰²æˆ 3×3 的网格。当你缩放节点时,它在水平或垂直"
+"æ–¹å‘上平铺纹ç†çš„两侧,在两个轴上平铺中心,但它ä¸ä¼šç¼©æ”¾æˆ–平铺角部。"
#: doc/classes/NinePatchRect.xml
msgid ""
"Returns the size of the margin identified by the given [enum Margin] "
"constant."
-msgstr "返回由给定的[enum Margin]叏釿 ‡è¯†çš„è¾¹è·å¤§å°ã€‚"
+msgstr "返回由给定的 [enum Margin] 叏釿 ‡è¯†çš„è¾¹è·å¤§å°ã€‚"
#: doc/classes/NinePatchRect.xml
msgid ""
"Sets the size of the margin identified by the given [enum Margin] constant "
"to [code]value[/code] in pixels."
msgstr ""
-"将由给定的[enum Margin]叏釿 ‡è¯†çš„è¾¹è·å¤§å°è®¾ç½®ä¸º[code]value[/code],å•ä½ä¸ºåƒ"
-"素。"
+"将由给定的 [enum Margin] 叏釿 ‡è¯†çš„è¾¹è·å¤§å°è®¾ç½®ä¸º [code]value[/code],å•ä½ä¸º"
+"åƒç´ ã€‚"
#: doc/classes/NinePatchRect.xml
msgid ""
"The stretch mode to use for horizontal stretching/tiling. See [enum "
"NinePatchRect.AxisStretchMode] for possible values."
msgstr ""
-"水平拉伸/平铺时使用的拉伸模å¼ã€‚å‚阅[enum NinePatchRect.AxisStretchMode]。"
+"水平拉伸/平铺时使用的拉伸模å¼ã€‚å¯èƒ½çš„å–å€¼è§ [enum NinePatchRect."
+"AxisStretchMode]。"
#: doc/classes/NinePatchRect.xml
msgid ""
"The stretch mode to use for vertical stretching/tiling. See [enum "
"NinePatchRect.AxisStretchMode] for possible values."
msgstr ""
-"用于垂直拉伸/平铺的拉伸模å¼ã€‚å‚阅[enum NinePatchRect.AxisStretchMode]。"
+"用于垂直拉伸/平铺的拉伸模å¼ã€‚å¯èƒ½çš„å–å€¼è§ [enum NinePatchRect."
+"AxisStretchMode]。"
#: doc/classes/NinePatchRect.xml
msgid ""
"If [code]true[/code], draw the panel's center. Else, only draw the 9-slice's "
"borders."
-msgstr "如果[code]true[/code]ï¼Œåˆ™ç»˜åˆ¶é¢æ¿çš„中心。å¦åˆ™ï¼Œåªç”»9-slice的边框。"
+msgstr "如果为 [code]true[/code]ï¼Œåˆ™ç»˜åˆ¶é¢æ¿çš„中心。å¦åˆ™ï¼Œåªç”»9-slice的边框。"
#: doc/classes/NinePatchRect.xml
msgid ""
@@ -46329,8 +46971,8 @@ msgid ""
"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 ""
-"9-slice的底层行的高度。边è·ä¸º16æ„味ç€9片的底角和侧é¢å°†æœ‰16åƒç´ çš„高度。你å¯ä»¥"
-"å•独设置所有4个边è·å€¼æ¥åˆ›å»ºå…·æœ‰éžç»Ÿä¸€è¾¹æ¡†çš„颿¿ã€‚"
+"9-切片底行的高度。边è·ä¸º 16 æ„å‘³ç€ 9-切片的底角和侧é¢å°†æœ‰ 16 åƒç´ çš„高度。你å¯"
+"以å•独设置所有 4 个边è·å€¼ï¼Œæ¥åˆ›å»ºæœ‰éžç»Ÿä¸€è¾¹æ¡†çš„颿¿ã€‚"
#: doc/classes/NinePatchRect.xml
msgid ""
@@ -46338,8 +46980,8 @@ msgid ""
"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-切片的左列宽度。边è·ä¸º16æ„味ç€9切片的左角和侧é¢å°†æœ‰16åƒç´ çš„宽度。你å¯ä»¥å•独"
-"设置所有4个边è·å€¼ï¼Œæ¥åˆ›å»ºæœ‰éžç»Ÿä¸€è¾¹æ¡†çš„颿¿ã€‚"
+"9-切片左列的宽度。边è·ä¸º 16 æ„å‘³ç€ 9-切片的左角和侧é¢å°†æœ‰ 16 åƒç´ çš„宽度。你å¯"
+"以å•独设置所有 4 个边è·å€¼ï¼Œæ¥åˆ›å»ºæœ‰éžç»Ÿä¸€è¾¹æ¡†çš„颿¿ã€‚"
#: doc/classes/NinePatchRect.xml
msgid ""
@@ -46347,8 +46989,8 @@ msgid ""
"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-切片的å³åˆ—宽度。边è·ä¸º16æ„味ç€9切片的å³è§’和侧é¢å°†æœ‰16åƒç´ çš„宽度。你å¯ä»¥å•独"
-"设置所有4个边è·å€¼ï¼Œä»¥åˆ›å»ºæœ‰éžç»Ÿä¸€è¾¹æ¡†çš„颿¿ã€‚"
+"9-切片å³åˆ—的宽度。边è·ä¸º 16 æ„å‘³ç€ 9-切片的å³è§’和侧é¢å°†æœ‰ 16 åƒç´ çš„宽度。你å¯"
+"以å•独设置所有 4 个边è·å€¼ï¼Œæ¥åˆ›å»ºæœ‰éžç»Ÿä¸€è¾¹æ¡†çš„颿¿ã€‚"
#: doc/classes/NinePatchRect.xml
msgid ""
@@ -46356,8 +46998,8 @@ msgid ""
"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切片的顶行的高度。边è·ä¸º16æ„味ç€9切片的顶角和侧é¢å°†æœ‰16åƒç´ çš„高度。你å¯ä»¥å•"
-"独设置所有4个边è·å€¼ï¼Œæ¥åˆ›å»ºæœ‰éžç»Ÿä¸€è¾¹æ¡†çš„颿¿ã€‚"
+"9-切片顶行的高度。边è·ä¸º 16 æ„å‘³ç€ 9-切片的顶角和侧é¢å°†æœ‰ 16 åƒç´ çš„高度。你å¯"
+"以å•独设置所有 4 个边è·å€¼ï¼Œæ¥åˆ›å»ºæœ‰éžç»Ÿä¸€è¾¹æ¡†çš„颿¿ã€‚"
#: doc/classes/NinePatchRect.xml
msgid ""
@@ -46366,9 +47008,9 @@ msgid ""
"other properties are relative to this one. If the rect is empty, "
"NinePatchRect will use the whole texture."
msgstr ""
-"è¦å–样的纹ç†çš„矩形区域。如果你正在使用一个图集,使用这个属性æ¥å®šä¹‰9-slice应该"
-"使用的区域。所有其他属性都是相对于这个属性而言的。如果矩形为空,NinePatchRect"
-"将使用整个纹ç†ã€‚"
+"è¦å–样的纹ç†çš„矩形区域。如果你正在使用一个图集,使用这个属性æ¥å®šä¹‰ 9-切片应该"
+"使用的区域。所有其他属性都是相对于这个属性而言的。如果矩形为空,"
+"NinePatchRect 将使用整个纹ç†ã€‚"
#: doc/classes/NinePatchRect.xml
msgid "The node's texture resource."
@@ -46382,7 +47024,7 @@ msgstr "当节点的纹ç†å‘生å˜åŒ–时触å‘。"
msgid ""
"Stretches the center texture across the NinePatchRect. This may cause the "
"texture to be distorted."
-msgstr "å°†ä¸­é—´çº¹ç†æ‹‰ä¼¸åˆ°9切片矩形。这å¯èƒ½ä¼šå¯¼è‡´çº¹ç†å¤±çœŸã€‚"
+msgstr "在 NinePatchRect 上拉伸中心纹ç†ã€‚è¿™å¯èƒ½ä¼šå¯¼è‡´çº¹ç†å¤±çœŸã€‚"
#: doc/classes/NinePatchRect.xml
msgid ""
@@ -46394,7 +47036,7 @@ msgid ""
msgstr ""
"在 NinePatchRect 上é‡å¤ä¸­å¿ƒçº¹ç†ã€‚è¿™ä¸ä¼šå¯¼è‡´ä»»ä½•å¯è§çš„失真。纹ç†å¿…须是无ç¼çš„,"
"这样æ‰èƒ½åœ¨è¾¹ç¼˜ä¹‹é—´ä¸æ˜¾ç¤ºä¼ªå½±çš„æƒ…况下工作。\n"
-"[b]注:[/b] 仅在使用 GLES3 渲染器时支æŒã€‚使用 GLES2 渲染器时,这将类似于 "
+"[b]注æ„:[/b]仅在使用 GLES3 渲染器时支æŒã€‚使用 GLES2 渲染器时,这将类似于 "
"[constant AXIS_STRETCH_MODE_STRETCH]。"
#: doc/classes/NinePatchRect.xml
@@ -46410,7 +47052,7 @@ msgstr ""
"在 NinePatchRect 上é‡å¤ä¸­å¿ƒçº¹ç†ï¼Œä½†ä¹Ÿä¼šæ‹‰ä¼¸çº¹ç†ä»¥ç¡®ä¿æ¯ä¸ªå›¾å—都完整å¯è§ã€‚è¿™å¯"
"èƒ½ä¼šå¯¼è‡´çº¹ç†æ‰­æ›²ï¼Œä½†å°äºŽ [constant AXIS_STRETCH_MODE_STRETCH]。纹ç†å¿…须是无ç¼"
"的,这样æ‰èƒ½åœ¨è¾¹ç¼˜ä¹‹é—´ä¸æ˜¾ç¤ºä¼ªå½±çš„æƒ…况下工作。\n"
-"[b]注:[/b] 仅在使用 GLES3 渲染器时支æŒã€‚使用 GLES2 渲染器时,这将类似于 "
+"[b]注æ„:[/b]仅在使用 GLES3 渲染器时支æŒã€‚使用 GLES2 渲染器时,这将类似于 "
"[constant AXIS_STRETCH_MODE_STRETCH]。"
#: doc/classes/Node.xml
@@ -46482,8 +47124,8 @@ msgstr ""
"节点的直接å­èŠ‚ç‚¹ï¼‰çš„å字唯一。\n"
"节点树被称为[i]场景[/i]。场景å¯ä»¥è¢«ä¿å­˜åˆ°ç£ç›˜ä¸Šï¼Œç„¶åŽè¢«å®žä¾‹åŒ–到其他场景中。这"
"使得 Godot é¡¹ç›®çš„æž¶æž„å’Œæ•°æ®æ¨¡åž‹å…·æœ‰éžå¸¸é«˜çš„çµæ´»æ€§ã€‚\n"
-"[b]场景树:[/b] [SceneTree] åŒ…å«æ´»åŠ¨çš„èŠ‚ç‚¹æ ‘ã€‚å½“ä¸€ä¸ªèŠ‚ç‚¹è¢«æ·»åŠ åˆ°åœºæ™¯æ ‘ä¸­æ—¶ï¼Œ"
-"它将收到 [constant NOTIFICATION_ENTER_TREE] 通知,并触å‘å…¶ [method "
+"[b]场景树:[/b][SceneTree] åŒ…å«æ´»åŠ¨çš„èŠ‚ç‚¹æ ‘ã€‚å½“ä¸€ä¸ªèŠ‚ç‚¹è¢«æ·»åŠ åˆ°åœºæ™¯æ ‘ä¸­æ—¶ï¼Œå®ƒ"
+"将收到 [constant NOTIFICATION_ENTER_TREE] 通知,并触å‘å…¶ [method "
"_enter_tree] 回调。å­èŠ‚ç‚¹æ€»æ˜¯åœ¨å…¶çˆ¶èŠ‚ç‚¹[i]之åŽ[/i]被添加,å³çˆ¶èŠ‚ç‚¹çš„ [method "
"_enter_tree] 回调将在其å­èŠ‚ç‚¹çš„ä¹‹å‰è¢«è§¦å‘。\n"
"一旦所有的节点被添加到场景树中,它们就会收到 [constant NOTIFICATION_READY] 通"
@@ -46492,8 +47134,8 @@ msgstr ""
"è¿™æ„味ç€ï¼Œå½“把一个节点添加到场景树中时,将使用下é¢çš„顺åºè¿›è¡Œå›žè°ƒï¼šçˆ¶èŠ‚ç‚¹çš„ "
"[method _enter_tree]ã€å­èŠ‚ç‚¹çš„ [method _enter_tree]ã€å­èŠ‚ç‚¹çš„ [method "
"_ready]ï¼Œæœ€åŽæ˜¯çˆ¶èŠ‚ç‚¹çš„ [method _ready](对整个场景树进行递归)。\n"
-"[b]处ç†ï¼š[/b] 节点å¯ä»¥è¦†ç›–“处ç†â€çжæ€ï¼Œä»¥ä¾¿å®ƒä»¬åœ¨æ¯ä¸€å¸§ä¸Šéƒ½æ”¶åˆ°å›žè°ƒï¼Œè¦æ±‚它们"
-"进行处ç†ï¼ˆåšä¸€äº›äº‹æƒ…)。普通处ç†ï¼ˆå›žè°ƒ [method _process],å¯ä»¥ä½¿ç”¨ [method "
+"[b]处ç†ï¼š[/b]节点å¯ä»¥è¦†ç›–“处ç†â€çжæ€ï¼Œä»¥ä¾¿å®ƒä»¬åœ¨æ¯ä¸€å¸§ä¸Šéƒ½æ”¶åˆ°å›žè°ƒï¼Œè¦æ±‚它们进"
+"行处ç†ï¼ˆåšä¸€äº›äº‹æƒ…)。普通处ç†ï¼ˆå›žè°ƒ [method _process],å¯ä»¥ä½¿ç”¨ [method "
"set_process] 开关)会尽å¯èƒ½å¿«åœ°å‘生,并且å–å†³äºŽå¸§çŽ‡ï¼Œæ‰€ä»¥å¤„ç†æ—¶é—´ [i]delta[/"
"i](å•ä½ä¸ºç§’ï¼‰ä¼šä½œä¸ºå‚æ•°ä¼ å…¥ã€‚物ç†å¤„ç†ï¼ˆå›žè°ƒ [method _physics_process],å¯ä»¥"
"使用 [method set_physics_process] 开关)æ¯ç§’å‘生固定次数(默认为 60),对物ç†"
@@ -46508,11 +47150,11 @@ msgstr ""
"工具时éžå¸¸æœ‰ç”¨ã€‚\n"
"最åŽï¼Œå½“一个节点被 [method Object.free] 或 [method queue_free] 释放时,它也将"
"释放它的所有å­èŠ‚ç‚¹ã€‚\n"
-"[b]分组:[/b] 节点å¯ä»¥è¢«æ·»åŠ åˆ°å¾ˆå¤šçš„ç»„ä¸­ï¼Œä»¥æ–¹ä¾¿ç®¡ç†ï¼Œä½ å¯ä»¥æ ¹æ®è‡ªå·±æ¸¸æˆçš„需"
-"è¦æ¥åˆ›å»ºç±»ä¼¼â€œæ•Œäººâ€æˆ–“收集å“â€è¿™æ ·çš„组。å‚阅 [method add_to_group]ã€[method "
+"[b]分组:[/b]节点å¯ä»¥è¢«æ·»åŠ åˆ°å¾ˆå¤šçš„ç»„ä¸­ï¼Œä»¥æ–¹ä¾¿ç®¡ç†ï¼Œä½ å¯ä»¥æ ¹æ®è‡ªå·±æ¸¸æˆçš„需è¦"
+"æ¥åˆ›å»ºç±»ä¼¼â€œæ•Œäººâ€æˆ–“收集å“â€è¿™æ ·çš„组。å‚阅 [method add_to_group]ã€[method "
"is_in_group] å’Œ [method remove_from_group]。加入组åŽï¼Œä½ å¯ä»¥æ£€ç´¢è¿™äº›ç»„中的所"
"有节点,对它们进行迭代,甚至通过 [SceneTree] 中的方法调用组内方法。\n"
-"[b]节点的网络编程:[/b] 在连接到æœåŠ¡å™¨ï¼ˆæˆ–åˆ¶ä½œæœåŠ¡å™¨ï¼Œå‚阅 "
+"[b]节点的网络编程:[/b]在连接到æœåŠ¡å™¨ï¼ˆæˆ–åˆ¶ä½œæœåŠ¡å™¨ï¼Œå‚阅 "
"[NetworkedMultiplayerENet])之åŽï¼Œå¯ä»¥ä½¿ç”¨å†…置的 RPC(远程过程调用)系统在网"
"络上进行通信。在调用 [method rpc] 时传入方法å,将在本地和所有已连接的对等体"
"中调用对应的方法(对等体=客户端和接å—连接的æœåŠ¡å™¨ï¼‰ã€‚ä¸ºäº†è¯†åˆ«å“ªä¸ªèŠ‚ç‚¹æ”¶åˆ° "
@@ -46536,11 +47178,11 @@ msgid ""
"Corresponds to the [constant NOTIFICATION_ENTER_TREE] notification in "
"[method Object._notification]."
msgstr ""
-"当节点进入[SceneTree]时调用(ä¾‹å¦‚å®žä¾‹åŒ–æ—¶ï¼Œåœºæ™¯æ”¹å˜æ—¶ï¼Œæˆ–者在脚本中调用"
-"[method add_child]åŽ)。如果节点有å­èŠ‚ç‚¹ï¼Œåˆ™é¦–å…ˆè°ƒç”¨å®ƒçš„[method _enter_tree]回"
-"调函数,然åŽå†è°ƒç”¨å­èŠ‚ç‚¹çš„å›žè°ƒå‡½æ•°ã€‚\n"
-"对应于[method Object._notification]中的[constant NOTIFICATION_ENTER_TREE]通"
-"知。"
+"当节点进入 [SceneTree] æ—¶è°ƒç”¨ï¼ˆä¾‹å¦‚å®žä¾‹åŒ–æ—¶ï¼Œåœºæ™¯æ”¹å˜æ—¶ï¼Œæˆ–者在脚本中调用 "
+"[method add_child] åŽï¼‰ã€‚如果节点有å­èŠ‚ç‚¹ï¼Œåˆ™é¦–å…ˆè°ƒç”¨å®ƒçš„ [method "
+"_enter_tree] 回调函数,然åŽå†è°ƒç”¨å­èŠ‚ç‚¹çš„å›žè°ƒå‡½æ•°ã€‚\n"
+"对应于 [method Object._notification] 中的 [constant NOTIFICATION_ENTER_TREE] "
+"通知。"
#: doc/classes/Node.xml
msgid ""
@@ -46553,12 +47195,12 @@ msgid ""
"the node has already left the active tree, connect to the [signal "
"tree_exited]."
msgstr ""
-"当节点å³å°†ç¦»å¼€[SceneTree]时被调用(例如,在释放ã€åœºæ™¯æ”¹å˜æˆ–在脚本中调用"
-"[method remove_child]åŽï¼‰ã€‚如果该节点有å­èŠ‚ç‚¹ï¼Œå®ƒçš„[method _exit_tree]回调将"
-"在所有å­èŠ‚ç‚¹ç¦»å¼€æ ‘åŽè¢«æœ€åŽè°ƒç”¨ã€‚\n"
+"当节点å³å°†ç¦»å¼€ [SceneTree] 时被调用(例如,在释放ã€åœºæ™¯æ”¹å˜æˆ–在脚本中调用 "
+"[method remove_child] åŽï¼‰ã€‚如果该节点有å­èŠ‚ç‚¹ï¼Œå®ƒçš„ [method _exit_tree] 回调"
+"将在所有å­èŠ‚ç‚¹ç¦»å¼€æ ‘åŽè¢«æœ€åŽè°ƒç”¨ã€‚\n"
"对应于 [method Object._notification] 中的 [constant NOTIFICATION_EXIT_TREE] "
"通知和 [signal tree_exiting] ä¿¡å·ã€‚è¦åœ¨èŠ‚ç‚¹å·²ç»ç¦»å¼€æ´»åŠ¨æ ‘æ—¶å¾—åˆ°é€šçŸ¥ï¼Œè¯·è¿žæŽ¥"
-"到 [signal tree_exited] 。"
+"到 [signal tree_exited]。"
#: doc/classes/Node.xml
msgid ""
@@ -46568,10 +47210,10 @@ msgid ""
"Call [method update_configuration_warning] when the warning needs to be "
"updated for this node."
msgstr ""
-"如果覆盖该方法的脚本是一个[code]tool[/code]脚本,那么从该方法返回的字符串将在"
-"Scene Dock中显示为一个警告。\n"
+"如果覆盖该方法的脚本是一个 [code]tool[/code] 脚本,那么从该方法返回的字符串将"
+"åœ¨åœºæ™¯é¢æ¿ä¸­æ˜¾ç¤ºä¸ºä¸€ä¸ªè­¦å‘Šã€‚\n"
"返回一个空字符串ä¸ä¼šäº§ç”Ÿè­¦å‘Šã€‚\n"
-"å½“éœ€è¦æ›´æ–°è¿™ä¸ªèŠ‚ç‚¹çš„è­¦å‘Šæ—¶ï¼Œè°ƒç”¨[method update_configuration_warning]。"
+"å½“éœ€è¦æ›´æ–°è¿™ä¸ªèŠ‚ç‚¹çš„è­¦å‘Šæ—¶ï¼Œè°ƒç”¨ [method update_configuration_warning]。"
#: doc/classes/Node.xml
msgid ""
@@ -46810,7 +47452,7 @@ msgid ""
"scene tree is not paused, and [code]false[/code] if the node is not in the "
"tree."
msgstr ""
-"如果节点å¯ä»¥åœ¨åœºæ™¯æ ‘æš‚åœæ—¶è¿›è¡Œå¤„ç†ï¼Œè¿”回 [code]true[/code](è§[member "
+"如果节点å¯ä»¥åœ¨åœºæ™¯æ ‘æš‚åœæ—¶è¿›è¡Œå¤„ç†ï¼Œè¿”回 [code]true[/code]ï¼ˆè§ [member "
"pause_mode])。如果场景树没有暂åœï¼Œæ€»æ˜¯è¿”回 [code]true[/code],如果节点ä¸åœ¨æ ‘"
"中,则返回 [code]false[/code]。"
@@ -46883,13 +47525,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"
+"查找当å‰èŠ‚ç‚¹çš„ç¬¬ä¸€ä¸ªçˆ¶èŠ‚ç‚¹ï¼Œå…¶å称与 [method String.match] 中的 [code]mask[/"
+"code] 相匹é…,区分大å°å†™ï¼Œå…¶ [code]\"*\"[/code] 匹é…零或多个字符,[code]\"?"
+"\"[/code] 匹é…任何å•个字符,除了 [code]\".\"[/code]。\n"
"[b]注æ„:[/b]å®ƒä¸æ˜¯å…¨è·¯å¾„匹é…,åªä¸Žå•个节点å称匹é…。\n"
"[b]注æ„:[/b]由于这个方法在场景树中å‘ä¸Šè¡Œèµ°ï¼Œåœ¨å¤§åž‹çš„ã€æ·±åº¦åµŒå¥—的场景树中å¯èƒ½"
-"会很慢。åªè¦æœ‰å¯èƒ½ï¼Œè¯·è€ƒè™‘使用[method get_node]代替。为了é¿å…过于频ç¹åœ°ä½¿ç”¨"
-"[method find_parent],考虑将节点引用缓存到一个å˜é‡ä¸­ã€‚"
+"会很慢。åªè¦æœ‰å¯èƒ½ï¼Œè¯·è€ƒè™‘使用 [method get_node] 代替。为了é¿å…过于频ç¹åœ°ä½¿"
+"用 [method find_parent],考虑将节点引用缓存到一个å˜é‡ä¸­ã€‚"
#: doc/classes/Node.xml
msgid ""
@@ -46950,7 +47592,7 @@ msgstr "返回节点的索引,å³å®ƒåœ¨å…¶çˆ¶èŠ‚ç‚¹çš„å…„å¼ŸèŠ‚ç‚¹ä¸­çš„ä½ç½®
msgid ""
"Returns the peer ID of the network master for this node. See [method "
"set_network_master]."
-msgstr "返回此节点的网络主节点的对等 ID。请å‚阅 [method set_network_master]。"
+msgstr "返回此节点的网络主节点的对等 IDã€‚è§ [method set_network_master]。"
#: doc/classes/Node.xml
msgid ""
@@ -47026,13 +47668,15 @@ msgid ""
"[[CollisionShape2D:1161], [RectangleShape2D:1156], :extents]\n"
"[/codeblock]"
msgstr ""
-"获å–一个节点åŠå…¶ç”±[NodePath]å­å称指定的资æº(例如[code]Area2D/"
-"CollisionShape2D:shape[/code])。如果在[NodePath]中指定了多个嵌套资æºï¼Œåˆ™å°†èŽ·"
-"å–æœ€åŽä¸€ä¸ªã€‚\n"
-"返回值是一个大å°ä¸º3的数组:第一个索引指å‘[Node](或[code]null[/code]),第二个索"
-"引指å‘[Resource](或[code]null[/code]),第三个索引是剩余的[NodePath]。\n"
-"例如,å‡è®¾[code]Area2D/CollisionShape2D[/code]是一个有效的节点,并且它的"
-"[code]shape[/code]属性被分é…了一个[RectangleShape2D]资æºï¼Œå¯ä»¥æœ‰è¿™æ ·çš„输出:\n"
+"获å–一个节点åŠå…¶ç”± [NodePath] å­å称指定的资æºï¼ˆä¾‹å¦‚[code]Area2D/"
+"CollisionShape2D:shape[/code])。如果在 [NodePath] 中指定了多个嵌套资æºï¼Œåˆ™å°†"
+"èŽ·å–æœ€åŽä¸€ä¸ªã€‚\n"
+"返回值是一个大å°ä¸º 3 的数组:ç¬¬ä¸€ä¸ªç´¢å¼•æŒ‡å‘ [Node](或 [code]null[/code]),第"
+"äºŒä¸ªç´¢å¼•æŒ‡å‘ [Resource](或 [code]null[/code]),第三个索引是剩余的 "
+"[NodePath]。\n"
+"例如,å‡è®¾ [code]Area2D/CollisionShape2D[/code] 是一个有效的节点,并且它的 "
+"[code]shape[/code] 属性被分é…了一个 [RectangleShape2D] 资æºï¼Œå¯ä»¥æœ‰è¿™æ ·çš„输"
+"出:\n"
"[codeblock]\n"
"print(get_node_and_resource(\"Area2D/CollisionShape2D\")) # "
"[[CollisionShape2D:1161], Null, ]\n"
@@ -47069,8 +47713,8 @@ 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 ""
-"从这个节点返回到指定的[code]node[/code]的相对[NodePath]。两个节点必须在åŒä¸€ä¸ª"
-"场景中,å¦åˆ™å‡½æ•°å°†å¤±è´¥ã€‚"
+"从这个节点返回到指定的 [code]node[/code] 的相对 [NodePath]。两个节点必须在åŒ"
+"一个场景中,å¦åˆ™å‡½æ•°å°†å¤±è´¥ã€‚"
#: doc/classes/Node.xml
msgid ""
@@ -47079,17 +47723,17 @@ msgid ""
"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
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 ""
-"返回场景树分支中节点的顺åºã€‚例如,如果在第一个å­èŠ‚ç‚¹ä¸Šè°ƒç”¨ï¼Œåˆ™ä½ç½®ä¸º[code]0[/"
-"code]。"
+"返回场景树分支中节点的顺åºã€‚例如,如果在第一个å­èŠ‚ç‚¹ä¸Šè°ƒç”¨ï¼Œåˆ™ä½ç½®ä¸º "
+"[code]0[/code]。"
#: doc/classes/Node.xml
msgid ""
@@ -47102,21 +47746,21 @@ msgid ""
"Returns [code]true[/code] if this is an instance load placeholder. See "
"[InstancePlaceholder]."
msgstr ""
-"如果这是一个实例加载å ä½ç¬¦ï¼Œåˆ™è¿”回 [code]true[/code]。看到"
+"如果这是一个实例加载å ä½ç¬¦ï¼Œåˆ™è¿”回 [code]true[/code]ã€‚è§ "
"[InstancePlaceholder]。"
#: doc/classes/Node.xml
msgid "Returns the [SceneTree] that contains this node."
-msgstr "返回包å«è¯¥èŠ‚ç‚¹çš„[SceneTree]。"
+msgstr "返回包å«è¯¥èŠ‚ç‚¹çš„ [SceneTree]。"
#: doc/classes/Node.xml
msgid "Returns the node's [Viewport]."
-msgstr "返回节点的[Viewport]。"
+msgstr "返回节点的 [Viewport]。"
#: doc/classes/Node.xml
msgid ""
"Returns [code]true[/code] if the node that the [NodePath] points to exists."
-msgstr "如果[NodePath]指å‘的节点存在,则返回 [code]true[/code]。"
+msgstr "如果 [NodePath] 指å‘的节点存在,则返回 [code]true[/code]。"
#: doc/classes/Node.xml
msgid ""
@@ -47154,13 +47798,13 @@ 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 ""
-"如果该节点在指定的组中,则返回 [code]true[/code]。å‚阅æè¿°ä¸­çš„æ³¨é‡Šå’Œ"
-"[SceneTree]中的组方法。"
+"如果该节点在指定的组中,则返回 [code]true[/code]。å‚阅æè¿°ä¸­çš„æ³¨é‡Šå’Œ "
+"[SceneTree] 中的组方法。"
#: doc/classes/Node.xml
msgid ""
"Returns [code]true[/code] if this node is currently inside a [SceneTree]."
-msgstr "如果该节点当å‰åœ¨[SceneTree]中,返回 [code]true[/code]。"
+msgstr "如果该节点当å‰åœ¨ [SceneTree] 中,返回 [code]true[/code]。"
#: doc/classes/Node.xml
msgid ""
@@ -47202,54 +47846,54 @@ msgid ""
"Returns [code]true[/code] if physics processing is enabled (see [method "
"set_physics_process])."
msgstr ""
-"如果å¯ç”¨äº†ç‰©ç†å¤„ç†ï¼Œè¿”回 [code]true[/code](å‚阅[method "
-"set_physics_process])。"
+"如果å¯ç”¨äº†ç‰©ç†å¤„ç†ï¼Œè¿”回 [code]true[/code]ï¼ˆè§ [method "
+"set_physics_process])。"
#: doc/classes/Node.xml
msgid ""
"Returns [code]true[/code] if internal physics processing is enabled (see "
"[method set_physics_process_internal])."
msgstr ""
-"如果内部物ç†å¤„ç†è¢«å¯ç”¨ï¼Œè¿”回 [code]true[/code](è§[method "
-"set_physics_process_internal])。"
+"如果内部物ç†å¤„ç†è¢«å¯ç”¨ï¼Œè¿”回 [code]true[/code]ï¼ˆè§ [method "
+"set_physics_process_internal])。"
#: doc/classes/Node.xml
msgid ""
"Returns [code]true[/code] if processing is enabled (see [method "
"set_process])."
-msgstr "如果开å¯äº†å¤„ç†ï¼Œè¿”回 [code]true[/code](å‚阅[method set_process])。"
+msgstr "如果开å¯äº†å¤„ç†ï¼Œè¿”回 [code]true[/code]ï¼ˆè§ [method set_process])。"
#: doc/classes/Node.xml
msgid ""
"Returns [code]true[/code] if the node is processing input (see [method "
"set_process_input])."
msgstr ""
-"如果节点正在处ç†è¾“入(请å‚阅 [method set_process_input]),则返回 "
-"[code]true[/code]。"
+"如果节点正在处ç†è¾“入,则返回 [code]true[/code]ï¼ˆè§ [method "
+"set_process_input])。"
#: doc/classes/Node.xml
msgid ""
"Returns [code]true[/code] if internal processing is enabled (see [method "
"set_process_internal])."
msgstr ""
-"如果å¯ç”¨äº†å†…部处ç†ï¼Œè¿”回 [code]true[/code](å‚阅[method "
-"set_process_internal])。"
+"如果å¯ç”¨äº†å†…部处ç†ï¼Œåˆ™è¿”回 [code]true[/code]ï¼ˆè§ [method "
+"set_process_internal])。"
#: doc/classes/Node.xml
msgid ""
"Returns [code]true[/code] if the node is processing unhandled input (see "
"[method set_process_unhandled_input])."
msgstr ""
-"å¦‚æžœèŠ‚ç‚¹æ­£åœ¨å¤„ç†æœªè¢«å¤„ç†çš„输入(å‚阅[method set_process_unhandled_input]),则"
-"返回 [code]true[/code]。"
+"å¦‚æžœèŠ‚ç‚¹æ­£åœ¨å¤„ç†æœªè¢«å¤„ç†çš„输入,则返回 [code]true[/code]ï¼ˆè§ [method "
+"set_process_unhandled_input])。"
#: doc/classes/Node.xml
msgid ""
"Returns [code]true[/code] if the node is processing unhandled key input (see "
"[method set_process_unhandled_key_input])."
msgstr ""
-"å¦‚æžœèŠ‚ç‚¹æ­£åœ¨å¤„ç†æœªè¢«å¤„ç†çš„键输入(å‚阅[method "
-"set_process_unhandled_key_input]),则返回 [code]true[/code]。"
+"å¦‚æžœèŠ‚ç‚¹æ­£åœ¨å¤„ç†æœªè¢«å¤„ç†çš„键输入,则返回 [code]true[/code]ï¼ˆè§ [method "
+"set_process_unhandled_key_input])。"
#: doc/classes/Node.xml
msgid ""
@@ -47257,8 +47901,8 @@ msgid ""
"Since calls, signals, etc are performed by tree order, changing the order of "
"children nodes may be useful."
msgstr ""
-"在其他å­èŠ‚ç‚¹ä¸­å°†å­èŠ‚ç‚¹ç§»åŠ¨åˆ°ä¸åŒçš„ä½ç½®(顺åº)。由于调用ã€ä¿¡å·ç­‰æ˜¯æŒ‰æ ‘é¡ºåºæ‰§è¡Œ"
-"的,因此更改å­èŠ‚ç‚¹çš„é¡ºåºå¯èƒ½ä¼šå¾ˆæœ‰ç”¨ã€‚"
+"在其他å­èŠ‚ç‚¹ä¸­å°†å­èŠ‚ç‚¹ç§»åŠ¨åˆ°ä¸åŒçš„ä½ç½®ï¼ˆé¡ºåºï¼‰ã€‚由于调用ã€ä¿¡å·ç­‰æ˜¯æŒ‰æ ‘é¡ºåºæ‰§"
+"行的,因此更改å­èŠ‚ç‚¹çš„é¡ºåºå¯èƒ½ä¼šå¾ˆæœ‰ç”¨ã€‚"
#: doc/classes/Node.xml
msgid ""
@@ -47330,10 +47974,11 @@ msgid ""
"[code]parent_first[/code] is [code]false[/code], the children will be called "
"first."
msgstr ""
-"在这个节点上使用[code]args[/code]ä¸­ç»™å‡ºçš„å‚æ•°è°ƒç”¨ç»™å®šçš„æ–¹æ³•(如果存在),并递归"
-"地在其所有å­èŠ‚ç‚¹èº«ä¸Šè°ƒç”¨ã€‚å¦‚æžœ[code]parent_first[/code]傿•°ä¸º [code]true[/"
-"code],该方法将首先在当å‰èŠ‚ç‚¹ä¸Šè°ƒç”¨ï¼Œç„¶åŽåœ¨å…¶æ‰€æœ‰å­èŠ‚ç‚¹ä¸Šè°ƒç”¨ã€‚å¦‚æžœ"
-"[code]parent_first[/code]为 [code]false[/code],å­èŠ‚ç‚¹çš„æ–¹æ³•å°†é¦–å…ˆè¢«è°ƒç”¨ã€‚"
+"在这个节点上使用 [code]args[/code] ä¸­ç»™å‡ºçš„å‚æ•°è°ƒç”¨ç»™å®šçš„æ–¹æ³•(如果存在),并递"
+"归地在其所有å­èŠ‚ç‚¹èº«ä¸Šè°ƒç”¨ã€‚å¦‚æžœ [code]parent_first[/code] 傿•°ä¸º "
+"[code]true[/code],该方法将首先在当å‰èŠ‚ç‚¹ä¸Šè°ƒç”¨ï¼Œç„¶åŽåœ¨å…¶æ‰€æœ‰å­èŠ‚ç‚¹ä¸Šè°ƒç”¨ã€‚å¦‚"
+"æžœ [code]parent_first[/code] 为 [code]false[/code],å­èŠ‚ç‚¹çš„æ–¹æ³•å°†é¦–å…ˆè¢«è°ƒ"
+"用。"
#: doc/classes/Node.xml
msgid ""
@@ -47395,8 +48040,8 @@ msgid ""
"longer a parent or ancestor."
msgstr ""
"删除一个å­èŠ‚ç‚¹ã€‚è¯¥èŠ‚ç‚¹ä¸ä¼šè¢«åˆ é™¤ï¼Œå¿…须手动删除。\n"
-"[b]注:[/b]如果该[member owner]ä¸å†æ˜¯çˆ¶èŠ‚ç‚¹æˆ–ç¥–å…ˆï¼Œåˆ™è¯¥å‡½æ•°å¯ä»¥å°†è¢«ç§»é™¤èŠ‚ç‚¹"
-"(或其åŽä»£ï¼‰çš„[member owner]设置为[code]null[/code]。"
+"[b]注æ„:[/b]如果该 [member owner] ä¸å†æ˜¯çˆ¶èŠ‚ç‚¹æˆ–ç¥–å…ˆï¼Œåˆ™è¯¥å‡½æ•°å¯ä»¥å°†è¢«ç§»é™¤èŠ‚"
+"点(或其åŽä»£ï¼‰çš„ [member owner] 设置为 [code]null[/code]。"
#: doc/classes/Node.xml
msgid ""
@@ -47430,10 +48075,11 @@ msgid ""
"which case, [code]_ready[/code] will be called in the same order as it would "
"normally)."
msgstr ""
-"è¯·æ±‚å†æ¬¡è°ƒç”¨[code]_ready[/code]。注æ„,该方法ä¸ä¼šè¢«ç«‹å³è°ƒç”¨ï¼Œè€Œæ˜¯è¢«å®‰æŽ’在该节"
-"ç‚¹å†æ¬¡è¢«æ·»åŠ åˆ°åœºæ™¯æ ‘æ—¶ï¼ˆè§[method _ready])。[code]_ready[/code]åªä¸ºè¯·æ±‚它的"
-"节点调用,这æ„味ç€å¦‚果你想让æ¯ä¸ªå­èŠ‚ç‚¹ä¹Ÿè°ƒç”¨[code]_ready[/code],你需è¦ä¸ºå®ƒä»¬"
-"请求readyï¼ˆåœ¨è¿™ç§æƒ…况下,[code]_ready[/code]的调用顺åºä¸Žæ­£å¸¸æƒ…况下相åŒï¼‰ã€‚"
+"è¯·æ±‚å†æ¬¡è°ƒç”¨ [code]_ready[/code]。注æ„,该方法ä¸ä¼šè¢«ç«‹å³è°ƒç”¨ï¼Œè€Œæ˜¯è¢«å®‰æŽ’在该"
+"èŠ‚ç‚¹å†æ¬¡è¢«æ·»åŠ åˆ°åœºæ™¯æ ‘æ—¶ï¼ˆè§ [method _ready])。[code]_ready[/code] åªä¸ºè¯·æ±‚"
+"它的节点调用,这æ„味ç€å¦‚果你想让æ¯ä¸ªå­èŠ‚ç‚¹ä¹Ÿè°ƒç”¨ [code]_ready[/code],你需è¦"
+"为它们请求 readyï¼ˆåœ¨è¿™ç§æƒ…况下,[code]_ready[/code] 的调用顺åºä¸Žæ­£å¸¸æƒ…况下相"
+"åŒï¼‰ã€‚"
#: doc/classes/Node.xml
msgid ""
@@ -47493,8 +48139,8 @@ msgid ""
"By default, methods are not exposed to networking (and RPCs). See also "
"[method rset] and [method rset_config] for properties."
msgstr ""
-"å°† [code]method[/code] 方法的 RPC æ¨¡å¼æ”¹ä¸º [code]mode[/code] 模å¼ã€‚请å‚阅 "
-"[enum MultiplayerAPI.RPCMode]。å¦ä¸€ç§æ–¹æ³•是在方法和属性上加入相应的关键字注解"
+"å°† [code]method[/code] 方法的 RPC æ¨¡å¼æ”¹ä¸º [code]mode[/code] 模å¼ã€‚è§ [enum "
+"MultiplayerAPI.RPCMode]。å¦ä¸€ç§æ–¹æ³•是在方法和属性上加入相应的关键字注解"
"([code]remote[/code]ã€[code]master[/code]ã€[code]puppet[/code]ã€"
"[code]remoteesync[/code]ã€[code]masterync[/code]ã€[code]puppetsync[/code])。"
"é»˜è®¤æƒ…å†µä¸‹ï¼Œæ–¹æ³•ä¸æš´éœ²äºŽç½‘络(和 RPC)。请å‚阅 [method rset] å’Œ [method "
@@ -47532,8 +48178,8 @@ msgid ""
"applies to this method as well."
msgstr ""
"在其他对等体上远程改å˜ä¸€ä¸ªå±žæ€§çš„值(和本地)。行为å–决于给定属性的RPCé…置,"
-"è§ [method rset_config]。关于方法的RPC,也请å‚阅 [method rpc],大多数信æ¯ä¹Ÿé€‚"
-"用于这个方法。"
+"è§ [method rset_config]。关于方法的 RPC,也请å‚阅 [method rpc],大多数信æ¯ä¹Ÿ"
+"适用于这个方法。"
#: doc/classes/Node.xml
msgid ""
@@ -47557,14 +48203,14 @@ msgid ""
"Remotely changes the property's value on a specific peer identified by "
"[code]peer_id[/code] (see [method NetworkedMultiplayerPeer.set_target_peer])."
msgstr ""
-"远程改å˜å±žæ€§çš„值在一个指定的peer上[code]peer_id[/code](å‚阅[method "
-"NetworkedMultiplayerPeer.set_target_peer])。"
+"远程改å˜å±žæ€§çš„值在一个指定的 peer 上 [code]peer_id[/code]ï¼ˆè§ [method "
+"NetworkedMultiplayerPeer.set_target_peer])。"
#: doc/classes/Node.xml
msgid ""
"Remotely changes the property's value on other peers (and locally) using an "
"unreliable protocol."
-msgstr "使用ä¸å¯é çš„å议远程更改其他对等点(和本地)上的属性值。"
+msgstr "使用ä¸å¯é çš„å议远程更改其他对等点(和本地)上的属性值。"
#: doc/classes/Node.xml
msgid ""
@@ -47572,12 +48218,12 @@ msgid ""
"[code]peer_id[/code] using an unreliable protocol (see [method "
"NetworkedMultiplayerPeer.set_target_peer])."
msgstr ""
-"使用ä¸å¯é çš„åè®®(å‚阅[method NetworkedMultiplayerPeer.set_target_peer])远程更"
-"改指定对等体[code]peer_id[/code]上的属性值。"
+"使用ä¸å¯é çš„åè®®ï¼ˆè§ [method NetworkedMultiplayerPeer.set_target_peer])远程"
+"更改指定对等体 [code]peer_id[/code] 上的属性值。"
#: doc/classes/Node.xml
msgid "Sets the folded state of the node in the Scene dock."
-msgstr "设置场景dock中节点的折å çжæ€ã€‚"
+msgstr "è®¾ç½®åœºæ™¯é¢æ¿ä¸­èŠ‚ç‚¹çš„æŠ˜å çжæ€ã€‚"
#: doc/classes/Node.xml
msgid ""
@@ -47588,9 +48234,9 @@ msgid ""
"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 ""
-"将节点的网络主节点设置为具有给定ID的对等体。网络主节点是对网络上的节点具有æƒ"
-"å¨çš„对等体。与[code]master[/code]å’Œ[code]puppet[/code]关键字一起使用很有用。"
-"默认情况下从父节点继承,父节点最终默认为peer ID 1(æœåС噍)。如果"
+"将节点的网络主节点设置为具有给定 ID 的对等体。网络主节点是对网络上的节点具有"
+"æƒå¨çš„对等体。与 [code]master[/code] å’Œ [code]puppet[/code] 关键字一起使用很"
+"有用。默认情况下从父节点继承,父节点最终默认为 peer ID 1(æœåŠ¡å™¨ï¼‰ã€‚å¦‚æžœ "
"[code]recursive[/code],则递归地将给定的对等节点设置为该节点所有å­èŠ‚ç‚¹çš„ä¸»èŠ‚"
"点。"
@@ -47605,10 +48251,10 @@ msgid ""
"_ready] will be ignored."
msgstr ""
"å¯ç”¨æˆ–ç¦ç”¨ç‰©ç†å¤„ç†ï¼ˆå³å›ºå®šå¸§çŽ‡ï¼‰ã€‚å½“ä¸€ä¸ªèŠ‚ç‚¹è¢«å¤„ç†æ—¶ï¼Œå®ƒå°†ä»¥ä¸€ä¸ªå›ºå®šçš„(通常"
-"是60FPS,å‚阅[member Engine.iterations_per_second]æ¥æ›´æ”¹è¯¥å€¼ï¼‰æ—¶é—´é—´é𔿔¶åˆ°ä¸€"
-"个[constant NOTIFICATION_PHYSICS_PROCESS](如果存在,[method "
-"_physics_process]回调将被调用)。如果[method _physics_process]被é‡å†™ï¼Œåˆ™è‡ªåЍ"
-"å¯ç”¨ã€‚在[method _ready]之å‰å¯¹å®ƒçš„任何调用都将被忽略。"
+"是 60 FPS,å‚阅 [member Engine.iterations_per_second] æ¥æ›´æ”¹è¯¥å€¼ï¼‰æ—¶é—´é—´é𔿔¶"
+"到一个 [constant NOTIFICATION_PHYSICS_PROCESS](如果存在,[method "
+"_physics_process] 回调将被调用)。如果 [method _physics_process] 被é‡å†™ï¼Œåˆ™è‡ª"
+"动å¯ç”¨ã€‚在 [method _ready] 之å‰å¯¹å®ƒçš„任何调用都将被忽略。"
#: doc/classes/Node.xml
msgid ""
@@ -47650,8 +48296,8 @@ msgid ""
"Enabled automatically if [method _input] is overridden. Any calls to this "
"before [method _ready] will be ignored."
msgstr ""
-"å¯ç”¨æˆ–ç¦ç”¨è¾“入处ç†ã€‚对于GUI控件æ¥è¯´ï¼Œè¿™ä¸æ˜¯å¿…需的。如果[method _input]被é‡"
-"写,则自动å¯ç”¨ã€‚任何在[method _ready]之å‰å¯¹å®ƒçš„调用都将被忽略。"
+"å¯ç”¨æˆ–ç¦ç”¨è¾“入处ç†ã€‚对于 GUI 控件æ¥è¯´ä¸æ˜¯å¿…需的。如果 [method _input] 被覆"
+"盖,则自动å¯ç”¨ã€‚任何在 [method _ready] 之å‰å¯¹å®ƒçš„调用都将被忽略。"
#: doc/classes/Node.xml
msgid ""
@@ -47689,13 +48335,13 @@ msgid ""
"_unhandled_key_input] is overridden. Any calls to this before [method "
"_ready] will be ignored."
msgstr ""
-"å¯ç”¨æœªå¤„ç†çš„æŒ‰é”®è¾“入处ç†ã€‚如果[method _unhandled_key_input]被é‡å†™ï¼Œåˆ™è‡ªåЍå¯"
-"用。任何在[method _ready]之å‰å¯¹å®ƒçš„调用都将被忽略。"
+"å¯ç”¨æœªå¤„ç†çš„æŒ‰é”®è¾“入处ç†ã€‚如果 [method _unhandled_key_input] 被é‡å†™ï¼Œåˆ™è‡ªåЍå¯"
+"用。任何在 [method _ready] 之å‰å¯¹å®ƒçš„调用都将被忽略。"
#: doc/classes/Node.xml
msgid ""
"Sets whether this is an instance load placeholder. See [InstancePlaceholder]."
-msgstr "è®¾ç½®è¿™æ˜¯å¦æ˜¯ä¸€ä¸ªå®žä¾‹åŠ è½½å ä½ç¬¦ã€‚å‚阅[InstancePlaceholder]。"
+msgstr "è®¾ç½®è¿™æ˜¯å¦æ˜¯å®žä¾‹åŠ è½½å ä½ç¬¦ã€‚è§ [InstancePlaceholder]。"
#: doc/classes/Node.xml
msgid ""
@@ -47711,7 +48357,7 @@ msgid ""
"The override to the default [MultiplayerAPI]. Set to [code]null[/code] to "
"use the default [SceneTree] one."
msgstr ""
-"对默认的[MultiplayerAPI]çš„é‡å†™ã€‚设置为[code]null[/code]å¯ä»¥ä½¿ç”¨é»˜è®¤çš„"
+"对默认的 [MultiplayerAPI] çš„é‡å†™ã€‚设置为 [code]null[/code] å¯ä»¥ä½¿ç”¨é»˜è®¤çš„ "
"[SceneTree]。"
#: doc/classes/Node.xml
@@ -47730,8 +48376,8 @@ msgid ""
"The [MultiplayerAPI] instance associated with this node. Either the [member "
"custom_multiplayer], or the default SceneTree one (if inside tree)."
msgstr ""
-"与该节点相关的[MultiplayerAPI]实例。è¦ä¹ˆæ˜¯[member custom_multiplayer],è¦ä¹ˆæ˜¯"
-"默认的SceneTree(如果在树内)。"
+"与该节点相关的 [MultiplayerAPI] 实例。è¦ä¹ˆæ˜¯ [member custom_multiplayer],è¦"
+"么是默认的 SceneTree(如果在树内)。"
#: doc/classes/Node.xml
msgid ""
@@ -47815,20 +48461,25 @@ msgstr ""
"称设置为唯一å称。"
#: doc/classes/Node.xml
+#, fuzzy
msgid ""
"Emitted when a child node enters the scene tree, either because it entered "
-"on its own or because this node entered with it."
+"on its own or because this node entered with it.\n"
+"This signal is emitted [i]after[/i] the child node's own [constant "
+"NOTIFICATION_ENTER_TREE] and [signal tree_entered]."
msgstr ""
"在å­èŠ‚ç‚¹è¿›å…¥åœºæ™¯æ ‘æ—¶è§¦å‘,å¯ä»¥æ˜¯å› ä¸ºè¯¥å­èŠ‚ç‚¹è‡ªè¡Œè¿›å…¥ï¼Œä¹Ÿå¯ä»¥æ˜¯å› ä¸ºæœ¬èŠ‚ç‚¹å¸¦ç€"
"该å­èŠ‚ç‚¹ä¸€èµ·è¿›å…¥ã€‚"
#: doc/classes/Node.xml
msgid ""
-"Emitted when a child node exits the scene tree, either because it exited on "
-"its own or because this node exited."
+"Emitted when a child node is about to exit the scene tree, either because it "
+"is being removed or freed directly, or because this node is exiting the "
+"tree.\n"
+"When this signal is received, the child [code]node[/code] is still in the "
+"tree and valid. This signal is emitted [i]after[/i] the child node's own "
+"[signal tree_exiting] and [constant NOTIFICATION_EXIT_TREE]."
msgstr ""
-"在å­èŠ‚ç‚¹ç¦»å¼€åœºæ™¯æ ‘æ—¶è§¦å‘,å¯ä»¥æ˜¯å› ä¸ºè¯¥å­èŠ‚ç‚¹è‡ªè¡Œç¦»å¼€ï¼Œä¹Ÿå¯ä»¥æ˜¯å› ä¸ºæœ¬èŠ‚ç‚¹ç¦»"
-"开。"
#: doc/classes/Node.xml
msgid "Emitted when the node is ready."
@@ -47839,27 +48490,38 @@ msgid "Emitted when the node is renamed."
msgstr "在é‡å‘½å节点时触å‘。"
#: doc/classes/Node.xml
-msgid "Emitted when the node enters the tree."
-msgstr "当节点进入树时触å‘。"
+msgid ""
+"Emitted when the node enters the tree.\n"
+"This signal is emitted [i]after[/i] the related [constant "
+"NOTIFICATION_ENTER_TREE] notification."
+msgstr ""
#: doc/classes/Node.xml
msgid "Emitted after the node exits the tree and is no longer active."
msgstr "在节点退出树之åŽè§¦å‘,并且ä¸å†å¤„于活动状æ€ã€‚"
#: doc/classes/Node.xml
+#, fuzzy
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)."
+"the right place for de-initialization (or a \"destructor\", if you will).\n"
+"This signal is emitted [i]before[/i] the related [constant "
+"NOTIFICATION_EXIT_TREE] notification."
msgstr ""
"当节点ä»å¤„于活动状æ€ä½†å³å°†é€€å‡ºæ ‘æ—¶å‘出。这是ååˆå§‹åŒ–的正确ä½ç½®ï¼ˆå¦‚果愿æ„,也"
"å¯ä»¥ç§°ä¹‹ä¸ºâ€œæžæž„函数â€ï¼‰ã€‚"
#: doc/classes/Node.xml
-msgid "Notification received when the node enters a [SceneTree]."
-msgstr "当该节点进入 [SceneTree] 时收到的通知。"
+msgid ""
+"Notification received when the node enters a [SceneTree].\n"
+"This notification is emitted [i]before[/i] the related [signal tree_entered]."
+msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node is about to exit a [SceneTree]."
+#, fuzzy
+msgid ""
+"Notification received when the node is about to exit a [SceneTree].\n"
+"This notification is emitted [i]after[/i] the related [signal tree_exiting]."
msgstr "当该节点å³å°†é€€å‡º [SceneTree] 时收到的通知。"
#: doc/classes/Node.xml
@@ -47868,7 +48530,7 @@ msgstr "当该节点在其父节点中移动时收到的通知。"
#: doc/classes/Node.xml
msgid "Notification received when the node is ready. See [method _ready]."
-msgstr "当该节点就绪时接收到通知。请å‚阅 [method _ready]。"
+msgstr "å½“è¯¥èŠ‚ç‚¹å°±ç»ªæ—¶æŽ¥æ”¶åˆ°é€šçŸ¥ã€‚è§ [method _ready]。"
#: doc/classes/Node.xml
msgid "Notification received when the node is paused."
@@ -47899,7 +48561,7 @@ msgid ""
"[b]Note:[/b] This doesn't mean that a node entered the [SceneTree]."
msgstr ""
"当一个节点被设置为å¦ä¸€ä¸ªèŠ‚ç‚¹çš„å­èŠ‚ç‚¹æ—¶æ”¶åˆ°è¯¥é€šçŸ¥ã€‚\n"
-"[b]注æ„:[/b]è¿™å¹¶ä¸æ„味ç€ä¸€ä¸ªèŠ‚ç‚¹è¿›å…¥äº†[SceneTree]。"
+"[b]注æ„:[/b]è¿™å¹¶ä¸æ„味ç€ä¸€ä¸ªèŠ‚ç‚¹è¿›å…¥äº† [SceneTree]。"
#: doc/classes/Node.xml
msgid ""
@@ -48086,8 +48748,8 @@ msgid ""
"_process]'s [code]delta[/code]. If [code]scaled[/code] is [code]false[/"
"code], normalizes the movement."
msgstr ""
-"基于[method Node._process]的[code]delta[/code],在节点的X轴上应用一个局部平"
-"移。如果[code]scaled[/code]是[code]false[/code],则对è¿åŠ¨è¿›è¡Œæ ‡å‡†åŒ–ã€‚"
+"基于 [method Node._process] 的 [code]delta[/code],在节点的 X 轴上应用一个局"
+"部平移。如果 [code]scaled[/code] 是 [code]false[/code],则对è¿åŠ¨è¿›è¡Œæ ‡å‡†åŒ–ã€‚"
#: doc/classes/Node2D.xml
msgid ""
@@ -48095,8 +48757,8 @@ msgid ""
"_process]'s [code]delta[/code]. If [code]scaled[/code] is [code]false[/"
"code], normalizes the movement."
msgstr ""
-"基于[method Node._process]的[code]delta[/code],在节点的Y轴上应用一个局部平"
-"移。如果[code]scaled[/code]是[code]false[/code],则对è¿åŠ¨è¿›è¡Œæ ‡å‡†åŒ–ã€‚"
+"基于 [method Node._process] 的 [code]delta[/code],在节点的 Y 轴上应用一个局"
+"部平移。如果 [code]scaled[/code] 是 [code]false[/code],则对è¿åŠ¨è¿›è¡Œæ ‡å‡†åŒ–ã€‚"
#: doc/classes/Node2D.xml
msgid ""
@@ -48165,8 +48827,18 @@ msgid "Rotation in degrees, relative to the node's parent."
msgstr "旋转角度,相对于父节点。"
#: doc/classes/Node2D.xml
-msgid "The node's scale. Unscaled value: [code](1, 1)[/code]."
-msgstr "节点的缩放。未缩放时为:[code](1, 1)[/code]。"
+msgid ""
+"The node's scale. Unscaled value: [code](1, 1)[/code].\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
+msgstr ""
+"该节点的缩放。未缩放值:[code](1, 1)[/code]。\n"
+"[b]注æ„:[/b]2D ä¸­ï¼Œå˜æ¢çŸ©é˜µæ˜¯æ— æ³•分解出负数的 X 缩放的。由于 Godot 中使用å˜"
+"æ¢çŸ©é˜µæ¥è¡¨ç¤ºç¼©æ”¾ï¼ŒX 轴上的负数缩放在分解åŽä¼šå˜ä¸º Y 轴的负数缩放和一次 180 度"
+"的旋转。"
#: doc/classes/Node2D.xml
msgid "Local [Transform2D]."
@@ -48178,9 +48850,9 @@ msgid ""
"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 ""
-"如果 [code]true[/code],节点的 Z 索引是相对于它的父节点的 Z 索引而言的。如果"
-"这个节点的 Z 索引是 2,它的父节点的实际 Z 索引是 3,那么这个节点的实际 Z 索引"
-"将是 2 + 3 = 5。"
+"如果为 [code]true[/code],节点的 Z 索引是相对于它的父节点的 Z 索引而言的。如"
+"果这个节点的 Z 索引是 2,它的父节点的实际 Z 索引是 3,那么这个节点的实际 Z 索"
+"引将是 2 + 3 = 5。"
#: doc/classes/Node2D.xml
msgid ""
@@ -48251,7 +48923,7 @@ msgstr ""
"@\"..\" # 父节点。\n"
"@\"../C\" # 兄弟节点 C.\n"
"# å‰å¯¼æ–œæ è¡¨ç¤ºå®ƒæ˜¯æ¥è‡ªåœºæ™¯æ ‘çš„ç»å¯¹è·¯å¾„。\n"
-"@\"/root\" # 等价于 get_tree().get_root()。\n"
+"@\"/root\" # 相当于 get_tree().get_root()。\n"
"@\"/root/Main\" # 如果你的主场景的根节点被命å为“Mainâ€ã€‚\n"
"@\"/root/MyAutoload\" # 如果你有一个自动加载的节点或场景。\n"
"[/codeblock]\n"
@@ -48298,17 +48970,17 @@ msgstr ""
"目标节点路径åŽåŠ ä¸Šå¯é€‰çš„“å­åç§°â€å¯ä»¥æŒ‡å‘èµ„æºæˆ–属性,也å¯ä»¥åµŒå¥—。\n"
"有效 NodePath 的示例(å‡è®¾è¿™äº›èŠ‚ç‚¹å­˜åœ¨å¹¶å…·æœ‰å¼•ç”¨çš„èµ„æºæˆ–属性):\n"
"[codeblock]\n"
-"# 指å‘ç²¾çµèŠ‚ç‚¹\n"
+"# æŒ‡å‘ Sprite 节点\n"
"“Path2D/PathFollow2D/Spriteâ€\n"
"# æŒ‡å‘ Sprite 节点åŠå…¶â€œçº¹ç†â€èµ„æºã€‚\n"
-"# get_node() 将检索“Spriteâ€ï¼Œè€Œ get_node_and_resource()\n"
-"# å°†åŒæ—¶æ£€ç´¢ Sprite 节点和“纹ç†â€èµ„æºã€‚\n"
+"# get_node() 将获å–“Spriteâ€ï¼Œè€Œ get_node_and_resource()\n"
+"# å°†åŒæ—¶èŽ·å– Sprite 节点åŠå…¶â€œtextureâ€èµ„æºã€‚\n"
"“Path2D/PathFollow2D/Sprite:textureâ€\n"
-"# æŒ‡å‘ Sprite 节点åŠå…¶â€œä½ç½®â€å±žæ€§ã€‚\n"
+"# æŒ‡å‘ Sprite 节点åŠå…¶â€œpositionâ€å±žæ€§ã€‚\n"
"\"Path2D/PathFollow2D/Sprite:position\"\n"
"# æŒ‡å‘ Sprite 节点åŠå…¶â€œpositionâ€å±žæ€§çš„“xâ€ç»„件。\n"
"\"Path2D/PathFollow2D/Sprite:position:x\"\n"
-"# ç»å¯¹è·¯å¾„(æ¥è‡ªâ€œrootâ€ï¼‰\n"
+"# ç»å¯¹è·¯å¾„(以“rootâ€å¼€å¤´ï¼‰\n"
"“/root/Level/Path2Dâ€\n"
"[/codeblock]"
@@ -48354,7 +49026,6 @@ msgstr ""
"[/codeblock]"
#: doc/classes/NodePath.xml
-#, fuzzy
msgid ""
"Gets the node name indicated by [code]idx[/code] (0 to [method "
"get_name_count] - 1).\n"
@@ -48365,7 +49036,7 @@ 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] - 1)指示的节点å称。\n"
"[codeblock]\n"
"var node_path = NodePath(\"Path2D/PathFollow2D/Sprite\")\n"
"print(node_path.get_name(0)) # Path2D\n"
@@ -48468,8 +49139,8 @@ msgid ""
"If [code]true[/code], the resulting texture contains a normal map created "
"from the original noise interpreted as a bump map."
msgstr ""
-"如果 [code]true[/code],产生的纹ç†åŒ…å«ä¸€ä¸ªç”±åŽŸå§‹å™ªå£°åˆ›å»ºçš„æ³•çº¿è´´å›¾ï¼Œè§£é‡Šä¸ºå‡¹"
-"凸贴图。"
+"如果为 [code]true[/code],产生的纹ç†åŒ…å«ä¸€ä¸ªç”±åŽŸå§‹å™ªå£°åˆ›å»ºçš„æ³•çº¿è´´å›¾ï¼Œè§£é‡Šä¸º"
+"凹凸贴图。"
#: modules/opensimplex/doc_classes/NoiseTexture.xml
msgid ""
@@ -48505,7 +49176,7 @@ msgid ""
"seamless noise."
msgstr ""
"çº¹ç†æ˜¯å¦å¯ä»¥å¹³é“ºè€Œæ²¡æœ‰å¯è§çš„æŽ¥ç¼ã€‚ç”Ÿæˆæ— ç¼çº¹ç†éœ€è¦æ›´é•¿çš„æ—¶é—´ã€‚\n"
-"[b]注:[/b] ä¸Žéžæ— ç¼å™ªå£°ç›¸æ¯”,无ç¼å™ªå£°å…·æœ‰è¾ƒä½Žçš„对比度。这是由于噪声使用更高"
+"[b]注æ„:[/b]ä¸Žéžæ— ç¼å™ªå£°ç›¸æ¯”,无ç¼å™ªå£°å…·æœ‰è¾ƒä½Žçš„对比度。这是由于噪声使用更高"
"维度æ¥ç”Ÿæˆæ— ç¼å™ªå£°çš„æ–¹å¼ã€‚"
#: modules/opensimplex/doc_classes/NoiseTexture.xml
@@ -48558,9 +49229,9 @@ msgstr ""
"çš„ [code]new Object[/code] 或 VisualScript 中的“构造对象â€èŠ‚ç‚¹ã€‚\n"
"对象ä¸ç®¡ç†å†…存。如果类继承自 Object,则必须手动删除它的实例。为此,请从您的脚"
"本中调用 [method free] 方法或从 C++ 中删除该实例。\n"
-"一些继承 Object 的类添加了内存管ç†ã€‚ [Reference] å°±æ˜¯è¿™ç§æƒ…况,它对引用进行计"
-"数,并在ä¸å†è¢«å¼•用时自动删除自己。 [Node] 是å¦ä¸€ç§åŸºæœ¬ç±»åž‹ï¼Œåœ¨ä»Žå†…存中释放时"
-"删除其所有å­èŠ‚ç‚¹ã€‚\n"
+"一些继承 Object 的类添加了内存管ç†ã€‚[Reference] å°±æ˜¯è¿™ç§æƒ…况,它对引用进行计"
+"数,并在ä¸å†è¢«å¼•用时自动删除自己。[Node] 是å¦ä¸€ç§åŸºæœ¬ç±»åž‹ï¼Œåœ¨ä»Žå†…存中释放时删"
+"除其所有å­èŠ‚ç‚¹ã€‚\n"
"对象导出属性,这些属性主è¦ç”¨äºŽå­˜å‚¨å’Œç¼–è¾‘ï¼Œä½†åœ¨ç¼–ç¨‹ä¸­å¹¶ä¸æ˜¯é‚£ä¹ˆæœ‰ç”¨ã€‚属性在 "
"[method _get_property_list] 中导出并在 [method _get] 和 [method _set] 中处"
"ç†ã€‚然而,脚本语言和 C++ 有更简å•的方法æ¥å¯¼å‡ºå®ƒä»¬ã€‚\n"
@@ -48715,14 +49386,14 @@ msgid ""
"where you should use the same convention as in the C# source (typically "
"PascalCase)."
msgstr ""
-"在空闲时间调用对象上的[code]method[/code]。这个方法支æŒå¯å˜æ•°é‡çš„傿•°ï¼Œæ‰€ä»¥å‚"
-"数是以逗å·åˆ†éš”的列表形å¼ä¼ é€’ã€‚ä¸‹é¢æ˜¯ä¸ªä¾‹å­ï¼š\n"
+"在空闲时间调用对象上的 [code]method[/code]。这个方法支æŒå¯å˜æ•°é‡çš„傿•°ï¼Œæ‰€ä»¥"
+"傿•°æ˜¯ä»¥é€—å·åˆ†éš”的列表形å¼ä¼ é€’ã€‚ä¸‹é¢æ˜¯ä¸ªä¾‹å­ï¼š\n"
"[codeblock]\n"
"call_deferred(\"set\", \"position\", Vector2(42.0, 0.0))\n"
"[/codeblock]\n"
-"[b]注æ„:[/b]在C#中,如果方法å称是由内置的Godot节点定义的,必须指定为"
-"snake_case。这ä¸é€‚用于用户定义的方法,在那里你应该使用与C#æºä»£ç ä¸­ç›¸åŒçš„约定"
-"(通常是PascalCase)。"
+"[b]注æ„:[/b]在 C# 中,如果方法å称是由内置的 Godot 节点定义的,必须指定为 "
+"snake_case。这ä¸é€‚用于用户定义的方法,在那里你应该使用与 C# æºä»£ç ä¸­ç›¸åŒçš„约"
+"定(通常是 PascalCase)。"
#: doc/classes/Object.xml
msgid ""
@@ -48733,8 +49404,8 @@ msgid ""
"callv(\"set\", [ \"position\", Vector2(42.0, 0.0) ])\n"
"[/codeblock]"
msgstr ""
-"在对象上调用[code]method[/code]并返回结果。与[method call]相åï¼Œè¿™ä¸ªæ–¹æ³•ä¸æ”¯"
-"æŒå¯å˜æ•°é‡çš„傿•°ï¼Œè€Œæ˜¯æœŸæœ›æ‰€æœ‰çš„傿•°éƒ½é€šè¿‡ä¸€ä¸ª[Array]。\n"
+"在对象上调用 [code]method[/code] 并返回结果。与 [method call] 相å,这个方法"
+"䏿”¯æŒå¯å˜æ•°é‡çš„傿•°ï¼Œè€Œæ˜¯æœŸæœ›æ‰€æœ‰çš„傿•°éƒ½é€šè¿‡ä¸€ä¸ª [Array]。\n"
"[codeblock]\n"
"callv(\"set\", [ \"position\", Vector2(42.0, 0.0) ])\n"
"[/codeblock]"
@@ -48744,8 +49415,8 @@ msgid ""
"Returns [code]true[/code] if the object can translate strings. See [method "
"set_message_translation] and [method tr]."
msgstr ""
-"如果该对象å¯ä»¥ç¿»è¯‘字符串,则返回 [code]true[/code]。å‚阅[method "
-"set_message_translation]和[method tr]。"
+"如果该对象å¯ä»¥ç¿»è¯‘字符串,则返回 [code]true[/code]ã€‚è§ [method "
+"set_message_translation] 和 [method tr]。"
#: doc/classes/Object.xml
msgid ""
@@ -48958,8 +49629,8 @@ msgstr ""
"将该对象的属性列表作为 [Array] 返回,元素为字典。\n"
"æ¯ä¸ªå±žæ€§çš„ [Dictionary] è‡³å°‘åŒ…å« [code]name: String[/code] å’Œ [code]type: "
"int[/code]ï¼ˆè§ [enum Variant.Type])æ¡ç›®ã€‚å¦å¤–,它还å¯ä»¥åŒ…括 [code]hint: "
-"int[/code](è§[enum PropertyHint])ã€[code]hint_string: String[/code],以åŠ"
-"[code]usage: int[/code](è§[enum PropertyUsageFlags])。"
+"int[/code]ï¼ˆè§ [enum PropertyHint])ã€[code]hint_string: String[/code]ï¼Œä»¥åŠ "
+"[code]usage: int[/code]ï¼ˆè§ [enum PropertyUsageFlags])。"
#: doc/classes/Object.xml
msgid ""
@@ -49016,9 +49687,9 @@ msgid ""
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] 。"
+"[b]注æ„:[/b][method is_class] 没有考虑 [code]class_name[/code] 声明。如果对"
+"象有 [code]class_name[/code] 定义,[method is_class] 将为该å称返回 "
+"[code]false[/code]。"
#: doc/classes/Object.xml
msgid ""
@@ -49064,7 +49735,7 @@ msgstr ""
#: doc/classes/Object.xml
msgid ""
"Removes a given entry from the object's metadata. See also [method set_meta]."
-msgstr "从对象的元数æ®ä¸­åˆ é™¤ç»™å®šæ¡ç›®ã€‚å¦è§ [method set_meta]。"
+msgstr "从对象的元数æ®ä¸­åˆ é™¤ç»™å®šæ¡ç›®ã€‚å¦è¯·å‚阅 [method set_meta]。"
#: doc/classes/Object.xml
msgid ""
@@ -49125,7 +49796,7 @@ msgstr ""
msgid ""
"Defines whether the object can translate strings (with calls to [method "
"tr]). Enabled by default."
-msgstr "定义对象是å¦å¯ä»¥è½¬æ¢å­—符串(通过调用[method tr])。默认å¯ç”¨ã€‚"
+msgstr "定义对象是å¦å¯ä»¥è½¬æ¢å­—符串(通过调用 [method tr])。默认å¯ç”¨ã€‚"
#: doc/classes/Object.xml
msgid ""
@@ -49215,7 +49886,7 @@ msgstr ""
#: doc/classes/Occluder.xml
msgid "Allows [OccluderShape]s to be used for occlusion culling."
-msgstr "å…许使用[OccluderShape]æ¥è¿›è¡Œé®æŒ¡å‰”除。"
+msgstr "å…许使用 [OccluderShape] æ¥è¿›è¡Œé®æŒ¡å‰”除。"
#: doc/classes/Occluder.xml
msgid ""
@@ -49256,13 +49927,13 @@ msgstr ""
#: doc/classes/OccluderPolygon2D.xml
msgid "Defines a 2D polygon for LightOccluder2D."
-msgstr "为LightOccluder2D定义一个2D多边形。"
+msgstr "为 LightOccluder2D 定义一个 2D 多边形。"
#: doc/classes/OccluderPolygon2D.xml
msgid ""
"Editor facility that helps you draw a 2D polygon used as resource for "
"[LightOccluder2D]."
-msgstr "编辑工具,帮助你绘制一个2D多边形用作资æº[LightOccluder2D]。"
+msgstr "编辑工具,帮助你绘制一个 2D å¤šè¾¹å½¢ç”¨ä½œèµ„æº [LightOccluder2D]。"
#: doc/classes/OccluderPolygon2D.xml
msgid ""
@@ -49270,7 +49941,7 @@ msgid ""
"occludes the light coming from any direction. An opened OccluderPolygon2D "
"occludes the light only at its outline's direction."
msgstr ""
-"如果[code]true[/code],å°é—­è¯¥å¤šè¾¹å½¢ã€‚一个å°é—­çš„polygon2då°é—­æ¥è‡ªä»»ä½•æ–¹å‘çš„"
+"如果为 [code]true[/code],å°é—­è¯¥å¤šè¾¹å½¢ã€‚一个å°é—­çš„polygon2då°é—­æ¥è‡ªä»»ä½•æ–¹å‘çš„"
"光。一个开放的OccluderPolygon2Dåªåœ¨å…¶è½®å»“æ–¹å‘ä¸Šé®æŒ¡å…‰ã€‚"
#: doc/classes/OccluderPolygon2D.xml
@@ -49283,28 +49954,28 @@ msgid ""
"[b]Note:[/b] The returned value is a copy of the underlying array, rather "
"than a reference."
msgstr ""
-"带有多边形顶点ä½ç½®ç´¢å¼•çš„[Vector2]数组。\n"
+"带有多边形顶点ä½ç½®ç´¢å¼•çš„ [Vector2] 数组。\n"
"[b]注æ„:[/b]è¿”å›žå€¼æ˜¯åŸºç¡€æ•°ç»„çš„å‰¯æœ¬ï¼Œè€Œä¸æ˜¯å¼•用。"
#: doc/classes/OccluderPolygon2D.xml
msgid "Culling is disabled. See [member cull_mode]."
-msgstr "ç¦ç”¨å‰”除。å‚阅[member cull_mode]。"
+msgstr "ç¦ç”¨å‰”é™¤ã€‚è§ [member cull_mode]。"
#: doc/classes/OccluderPolygon2D.xml
msgid ""
"Culling is performed in the clockwise direction. See [member cull_mode]."
-msgstr "按顺时针方å‘进行剔除。è§[member cull_mode]。"
+msgstr "按顺时针方å‘è¿›è¡Œå‰”é™¤ã€‚è§ [member cull_mode]。"
#: doc/classes/OccluderPolygon2D.xml
msgid ""
"Culling is performed in the counterclockwise direction. See [member "
"cull_mode]."
-msgstr "按逆时针方å‘进行剔除。å‚阅[member cull_mode]。"
+msgstr "按逆时针方å‘è¿›è¡Œå‰”é™¤ã€‚è§ [member cull_mode]。"
#: doc/classes/OccluderShape.xml
msgid ""
"Base class for shapes used for occlusion culling by the [Occluder] node."
-msgstr "用于[Occluder]èŠ‚ç‚¹è¿›è¡Œé®æŒ¡å‰”除的形状的基类。"
+msgstr "用于 [Occluder] èŠ‚ç‚¹è¿›è¡Œé®æŒ¡å‰”除的形状的基类。"
#: doc/classes/OccluderShape.xml
msgid "[Occluder]s can use any primitive shape derived from [OccluderShape]."
@@ -49434,31 +50105,32 @@ msgid ""
"[member omni_attenuation] in use, the light will never reach anything "
"outside this radius."
msgstr ""
-"光的åŠå¾„。请注æ„,有效的照明区域å¯èƒ½çœ‹èµ·æ¥æ›´å°ï¼Œè¿™å–决于使用的[member "
-"omni_attenuation]。无论使用何ç§[member omni_attenuation],光线都ä¸ä¼šåˆ°è¾¾è¿™ä¸ª"
+"光的åŠå¾„。请注æ„,有效的照明区域å¯èƒ½çœ‹èµ·æ¥æ›´å°ï¼Œè¿™å–决于使用的 [member "
+"omni_attenuation]ã€‚æ— è®ºä½¿ç”¨ä½•ç§ [member omni_attenuation],光线都ä¸ä¼šåˆ°è¾¾è¿™ä¸ª"
"åŠå¾„以外的地方。"
#: doc/classes/OmniLight.xml
msgid "See [enum ShadowDetail]."
-msgstr "å‚阅[enum ShadowDetail]。"
+msgstr "è§ [enum ShadowDetail]。"
#: doc/classes/OmniLight.xml
msgid "See [enum ShadowMode]."
-msgstr "å‚阅[enum ShadowMode]。"
+msgstr "è§ [enum ShadowMode]。"
#: doc/classes/OmniLight.xml
msgid ""
"Shadows are rendered to a dual-paraboloid texture. Faster than [constant "
"SHADOW_CUBE], but lower-quality."
msgstr ""
-"é˜´å½±è¢«æ¸²æŸ“åˆ°ä¸€ä¸ªåŒæŠ›ç‰©é¢çº¹ç†ã€‚比[constant SHADOW_CUBE]更快,但质é‡è¾ƒå·®ã€‚"
+"é˜´å½±è¢«æ¸²æŸ“åˆ°ä¸€ä¸ªåŒæŠ›ç‰©é¢çº¹ç†ã€‚比 [constant SHADOW_CUBE] 更快,但质é‡è¾ƒå·®ã€‚"
#: doc/classes/OmniLight.xml
msgid ""
"Shadows are rendered to a cubemap. Slower than [constant "
"SHADOW_DUAL_PARABOLOID], but higher-quality."
msgstr ""
-"阴影被渲染æˆä¸€ä¸ªcubemap。比[constant SHADOW_DUAL_PARABOLOID]æ…¢ï¼Œä½†è´¨é‡æ›´é«˜ã€‚"
+"阴影被渲染æˆä¸€ä¸ªç«‹æ–¹ä½“贴图。比 [constant SHADOW_DUAL_PARABOLOID] æ…¢ï¼Œä½†è´¨é‡æ›´"
+"高。"
#: doc/classes/OmniLight.xml
msgid "Use more detail vertically when computing the shadow."
@@ -49470,7 +50142,7 @@ msgstr "在计算阴影时,在水平方å‘上使用更多的细节。"
#: modules/opensimplex/doc_classes/OpenSimplexNoise.xml
msgid "Noise generator based on Open Simplex."
-msgstr "基于Open Simplex的噪声å‘生器。"
+msgstr "基于 Open Simplex 的噪声å‘生器。"
#: modules/opensimplex/doc_classes/OpenSimplexNoise.xml
msgid ""
@@ -49494,17 +50166,17 @@ msgid ""
"[/codeblock]"
msgstr ""
"这个资æºå…许你é…ç½®å’Œé‡‡æ ·ä¸€ä¸ªåˆ†å½¢å™ªå£°ç©ºé—´ã€‚ä¸‹é¢æ˜¯ä¸€ä¸ªç®€çŸ­çš„使用例å­ï¼Œå®ƒé…置了"
-"一个OpenSimplexNoise,并在ä¸åŒçš„ä½ç½®å’Œç»´åº¦ä¸Šå¾—到采样。\n"
+"一个 OpenSimplexNoise,并在ä¸åŒçš„ä½ç½®å’Œç»´åº¦ä¸Šå¾—到采样。\n"
"[codeblock]\n"
"var noise = OpenSimplexNoise.new()\n"
"\n"
-"# Configure\n"
+"# é…ç½®\n"
"noise.seed = randi()\n"
"noise.octaves = 4\n"
"noise.period = 20.0\n"
"noise.persistence = 0.8\n"
"\n"
-"# Sample\n"
+"# 采样\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"
@@ -49519,9 +50191,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],那么å移值将作为生æˆçš„å™ªå£°å·¦ä¸Šè§’çš„åæ ‡ã€‚"
+"æ ¹æ®å½“å‰çš„å™ªå£°å‚æ•°ï¼Œç”Ÿæˆä¸€ä¸ª [constant Image.FORMAT_L8] æ ¼å¼çš„噪声图åƒï¼Œéœ€è¦"
+"指定其 [code]width[/code] 和 [code]height[/code]。如果指定了 "
+"[code]noise_offset[/code],那么å移值将作为生æˆçš„å™ªå£°å·¦ä¸Šè§’çš„åæ ‡ã€‚"
#: modules/opensimplex/doc_classes/OpenSimplexNoise.xml
msgid ""
@@ -49529,21 +50201,21 @@ msgid ""
"[b]Note:[/b] This method actually returns the 2D noise value [code][-1,1][/"
"code] with fixed y-coordinate value 0.0."
msgstr ""
-"返回给定xåæ ‡å¤„的一维噪声值[code][-1,1][/code]。\n"
-"[b]注æ„:[/b]这个方法实际上返回的是固定Yåæ ‡å€¼ä¸º0.0的二维噪声值[code][-1,1][/"
-"code]。"
+"返回给定 x åæ ‡å¤„çš„ 1D 噪声值 [code][-1,1][/code]。\n"
+"[b]注æ„:[/b]这个方法实际上返回的是固定 Y åæ ‡å€¼ä¸º 0.0 的二维噪声值 [code]"
+"[-1,1][/code]。"
#: modules/opensimplex/doc_classes/OpenSimplexNoise.xml
msgid "Returns the 2D noise value [code][-1,1][/code] at the given position."
-msgstr "返回给定ä½ç½®çš„2D噪声值[code][-1,1][/code]。"
+msgstr "返回在给定ä½ç½®çš„ 2D 噪声值 [code][-1,1][/code]。"
#: modules/opensimplex/doc_classes/OpenSimplexNoise.xml
msgid "Returns the 3D noise value [code][-1,1][/code] at the given position."
-msgstr "返回在给定ä½ç½®çš„3D噪声值[code][-1,1][/code]。"
+msgstr "返回在给定ä½ç½®çš„ 3D 噪声值 [code][-1,1][/code]。"
#: modules/opensimplex/doc_classes/OpenSimplexNoise.xml
msgid "Returns the 4D noise value [code][-1,1][/code] at the given position."
-msgstr "返回指定ä½ç½®çš„4D噪声值[code][-1,1][/code]。"
+msgstr "返回在给定ä½ç½®çš„ 4D 噪声值 [code][-1,1][/code]。"
#: modules/opensimplex/doc_classes/OpenSimplexNoise.xml
msgid ""
@@ -49570,16 +50242,16 @@ msgid ""
"generate.\n"
"[b]Note:[/b] The maximum allowed value is 9."
msgstr ""
-"采样得到分形噪声的OpenSimplexå™ªå£°å±‚æ•°ã€‚æ›´é«˜çš„å€¼å¯¼è‡´æ›´è¯¦ç»†çš„å™ªå£°ï¼Œä½†éœ€è¦æ›´å¤šçš„"
-"æ—¶é—´æ¥ç”Ÿæˆã€‚\n"
-"[b]备注:[/b]最大值为9。"
+"采样得到分形噪声的 OpenSimplex å™ªå£°å±‚æ•°ã€‚æ›´é«˜çš„å€¼å¯¼è‡´æ›´è¯¦ç»†çš„å™ªå£°ï¼Œä½†éœ€è¦æ›´å¤š"
+"的时间æ¥ç”Ÿæˆã€‚\n"
+"[b]备注:[/b]最大值为 9。"
#: modules/opensimplex/doc_classes/OpenSimplexNoise.xml
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
msgid ""
@@ -49645,15 +50317,15 @@ msgstr "清除[OptionButton]中的所有项目。"
#: doc/classes/OptionButton.xml
msgid "Returns the amount of items in the OptionButton, including separators."
-msgstr "返回OptionButton中的项目数é‡ï¼ŒåŒ…括分隔符。"
+msgstr "返回 OptionButton 中的项目数é‡ï¼ŒåŒ…括分隔符。"
#: doc/classes/OptionButton.xml doc/classes/PopupMenu.xml
msgid "Returns the icon of the item at index [code]idx[/code]."
-msgstr "返回索引[code]idx[/code]处项目的图标。"
+msgstr "返回索引 [code]idx[/code] 处项目的图标。"
#: doc/classes/OptionButton.xml
msgid "Returns the ID of the item at index [code]idx[/code]."
-msgstr "返回索引[code]idx[/code]处项目的ID。"
+msgstr "返回索引 [code]idx[/code] 处项目的 ID。"
#: doc/classes/OptionButton.xml
msgid "Returns the index of the item with the given [code]id[/code]."
@@ -49685,16 +50357,17 @@ msgstr "返回所选项目的 ID,如果没有选择项目,则返回 [code]-1
msgid ""
"Gets the metadata of the selected item. Metadata for items can be set using "
"[method set_item_metadata]."
-msgstr "获å–选定项的元数æ®ã€‚å¯ä»¥ä½¿ç”¨[method set_item_metadata]设置项的元数æ®ã€‚"
+msgstr ""
+"获å–选定项的元数æ®ã€‚å¯ä»¥ä½¿ç”¨ [method set_item_metadata] 设置项的元数æ®ã€‚"
#: doc/classes/OptionButton.xml
msgid ""
"Returns [code]true[/code] if the item at index [code]idx[/code] is disabled."
-msgstr "如果索引[code]idx[/code]项被ç¦ç”¨ï¼Œè¿”回 [code]true[/code]。"
+msgstr "如果索引 [code]idx[/code] 项被ç¦ç”¨ï¼Œè¿”回 [code]true[/code]。"
#: doc/classes/OptionButton.xml
msgid "Removes the item at index [code]idx[/code]."
-msgstr "移除索引[code]idx[/code]处的项目。"
+msgstr "移除索引 [code]idx[/code] 处的项目。"
#: doc/classes/OptionButton.xml
msgid ""
@@ -49763,11 +50436,11 @@ msgstr "当用户更改当å‰é¡¹æ—¶è§¦å‘ã€‚æ‰€é€‰é¡¹ç›®çš„ç´¢å¼•ä½œä¸ºå‚æ•°ä¼ 
#: doc/classes/OptionButton.xml
msgid "Default text [Color] of the [OptionButton]."
-msgstr "[OptionButton]的默认文本[Color]。"
+msgstr "[OptionButton] 的默认文本 [Color]。"
#: doc/classes/OptionButton.xml
msgid "Text [Color] used when the [OptionButton] is disabled."
-msgstr "当[OptionButton]被ç¦ç”¨æ—¶ä½¿ç”¨çš„æ–‡æœ¬[Color]。"
+msgstr "当 [OptionButton] 被ç¦ç”¨æ—¶ä½¿ç”¨çš„æ–‡æœ¬ [Color]。"
#: doc/classes/OptionButton.xml
msgid ""
@@ -49775,16 +50448,16 @@ msgid ""
"normal text color of the button. Disabled, hovered, and pressed states take "
"precedence over this color."
msgstr ""
-"当[OptionButton]获得焦点时使用的文本[Color]ã€‚åªæ›¿æ¢æŒ‰é’®çš„æ­£å¸¸æ–‡æœ¬é¢œè‰²ã€‚ç¦ç”¨ã€"
-"悬åœå’ŒæŒ‰ä¸‹çжæ€ä¼˜å…ˆäºŽè¿™ä¸ªé¢œè‰²ã€‚"
+"当 [OptionButton] 获得焦点时使用的文本 [Color]ã€‚åªæ›¿æ¢æŒ‰é’®çš„æ­£å¸¸æ–‡æœ¬é¢œè‰²ã€‚ç¦"
+"ç”¨ã€æ‚¬åœå’ŒæŒ‰ä¸‹çжæ€ä¼˜å…ˆäºŽè¿™ä¸ªé¢œè‰²ã€‚"
#: doc/classes/OptionButton.xml
msgid "Text [Color] used when the [OptionButton] is being hovered."
-msgstr "当鼠标悬åœ[OptionButton]时使用的文本[Color]。"
+msgstr "å½“é¼ æ ‡æ‚¬åœ [OptionButton] 时使用的文本 [Color]。"
#: doc/classes/OptionButton.xml
msgid "Text [Color] used when the [OptionButton] is being pressed."
-msgstr "当[OptionButton]被按下时使用的文本[Color]。"
+msgstr "当 [OptionButton] 被按下时使用的文本 [Color]。"
#: doc/classes/OptionButton.xml
msgid ""
@@ -49793,11 +50466,11 @@ msgstr "箭头图标和按钮的å³è¾¹ç¼˜ä¹‹é—´çš„æ°´å¹³ç©ºé—´ã€‚"
#: doc/classes/OptionButton.xml
msgid "The horizontal space between [OptionButton]'s icon and text."
-msgstr "[OptionButton]图标与文本之间的水平间è·ã€‚"
+msgstr "[OptionButton] 图标与文本之间的水平间è·ã€‚"
#: doc/classes/OptionButton.xml
msgid "[Font] of the [OptionButton]'s text."
-msgstr "[OptionButton]的文本的[Font]。"
+msgstr "[OptionButton] 的文本的 [Font]。"
#: doc/classes/OptionButton.xml
msgid "The arrow icon to be drawn on the right end of the button."
@@ -49805,7 +50478,7 @@ msgstr "è¦ç»˜åˆ¶åœ¨æŒ‰é’®å³ä¾§çš„箭头图标。"
#: doc/classes/OptionButton.xml
msgid "[StyleBox] used when the [OptionButton] is disabled."
-msgstr "当[OptionButton]被ç¦ç”¨æ—¶ä½¿ç”¨çš„[StyleBox]。"
+msgstr "当 [OptionButton] 被ç¦ç”¨æ—¶ä½¿ç”¨çš„ [StyleBox]。"
#: doc/classes/OptionButton.xml
msgid ""
@@ -49813,20 +50486,20 @@ msgid ""
"current [StyleBox], so using [StyleBoxEmpty] will just disable the focus "
"visual effect."
msgstr ""
-"当[OptionButton]被èšç„¦æ—¶ä½¿ç”¨çš„[StyleBox]。它显示在当å‰çš„[StyleBox]上,所以使"
-"用[StyleBoxEmpty]å°†åªæ˜¯ç¦ç”¨ç„¦ç‚¹çš„视觉效果。"
+"当 [OptionButton] 被èšç„¦æ—¶ä½¿ç”¨çš„ [StyleBox]。它显示在当å‰çš„ [StyleBox] 上,所"
+"以使用 [StyleBoxEmpty] å°†åªæ˜¯ç¦ç”¨ç„¦ç‚¹çš„视觉效果。"
#: doc/classes/OptionButton.xml
msgid "[StyleBox] used when the [OptionButton] is being hovered."
-msgstr "当[OptionButton]è¢«é¼ æ ‡æ‚¬åœæ—¶ä½¿ç”¨çš„[StyleBox]。"
+msgstr "当 [OptionButton] è¢«é¼ æ ‡æ‚¬åœæ—¶ä½¿ç”¨çš„ [StyleBox]。"
#: doc/classes/OptionButton.xml
msgid "Default [StyleBox] for the [OptionButton]."
-msgstr "[OptionButton]的默认[StyleBox]。"
+msgstr "[OptionButton] 的默认 [StyleBox]。"
#: doc/classes/OptionButton.xml
msgid "[StyleBox] used when the [OptionButton] is being pressed."
-msgstr "当按下[OptionButton]时使用的[StyleBox]。"
+msgstr "当按下 [OptionButton] 时使用的 [StyleBox]。"
#: doc/classes/OS.xml
msgid "Operating System functions."
@@ -49839,8 +50512,8 @@ msgid ""
"driver, date and time, timers, environment variables, execution of binaries, "
"command line, etc."
msgstr ""
-"æ“作系统的功能。OS 包装了与主机æ“作系统通信的最常è§åŠŸèƒ½ï¼Œå¦‚å‰ªè´´æ¿ã€è§†é¢‘驱动程"
-"åºã€æ—¥æœŸå’Œæ—¶é—´ã€è®¡æ—¶å™¨ã€çŽ¯å¢ƒå˜é‡ã€äºŒè¿›åˆ¶æ–‡ä»¶çš„æ‰§è¡Œã€å‘½ä»¤è¡Œç­‰ã€‚"
+"æ“作系统的功能。OS å°è£…了与主机æ“作系统通信的最常è§åŠŸèƒ½ï¼Œå¦‚å‰ªè´´æ¿ã€è§†é¢‘驱动ã€"
+"日期和时间ã€è®¡æ—¶å™¨ã€çŽ¯å¢ƒå˜é‡ã€äºŒè¿›åˆ¶æ–‡ä»¶çš„æ‰§è¡Œã€å‘½ä»¤è¡Œç­‰ã€‚"
#: doc/classes/OS.xml
msgid ""
@@ -49868,8 +50541,8 @@ msgid ""
"Shuts down system MIDI driver.\n"
"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
msgstr ""
-"关闭系统MIDI驱动程åºã€‚\n"
-"[b]注æ„:[/b]该方法åªåœ¨Linux, macOSå’ŒWindows上实现。"
+"关闭系统 MIDI 驱动程åºã€‚\n"
+"[b]注æ„:[/b]该方法åªåœ¨ Linuxã€macOS å’Œ Windows 上实现。"
#: doc/classes/OS.xml
msgid ""
@@ -49903,18 +50576,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] 将䏿‰§è¡Œä»»ä½•æ“作并打å°é”™è¯¯æ¶ˆ"
+"将当å‰çº¿ç¨‹çš„æ‰§è¡Œå»¶è¿Ÿ [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 "
+"[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] 的一部分时,它会冻结编辑器但ä¸ä¼šå†»ç»“当剿­£åœ¨è¿è¡Œçš„项目(因"
-"为项目是一个独立的å­è¿›ç¨‹ï¼‰ã€‚"
+"[b]注æ„:[/b]当在主线程上调用 [method delay_msec] 时,它会冻结项目并阻止它é‡"
+"新绘制和注册输入,直到延迟结æŸã€‚当使用 [method delay_msec] 作为 "
+"[EditorPlugin] 或 [EditorScript] 的一部分时,它会冻结编辑器但ä¸ä¼šå†»ç»“当剿­£åœ¨"
+"è¿è¡Œçš„项目(因为项目是一个独立的å­è¿›ç¨‹ï¼‰ã€‚"
#: doc/classes/OS.xml
msgid ""
@@ -49935,26 +50608,26 @@ 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] 将什么也ä¸åšï¼Œå¹¶ä¼šæ‰“å°é”™è¯¯æ¶ˆ"
+"将当å‰çº¿ç¨‹çš„æ‰§è¡Œå»¶è¿Ÿ [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 "
+"[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] 的一部分时,它会冻结编辑器但ä¸ä¼šå†»ç»“当剿­£åœ¨è¿è¡Œçš„项目(因为项"
-"目是一个独立的å­è¿›ç¨‹ï¼‰ã€‚"
+"[b]注æ„:[/b]当在主线程上调用 [method delay_usec] 时,它会冻结项目并阻止它é‡"
+"绘和注册输入,直到延迟结æŸã€‚当使用 [method delay_usec] 作为 [EditorPlugin] "
+"或 [EditorScript] 的一部分时,它会冻结编辑器但ä¸ä¼šå†»ç»“当剿­£åœ¨è¿è¡Œçš„项目(因"
+"为项目是一个独立的å­è¿›ç¨‹ï¼‰ã€‚"
#: doc/classes/OS.xml
msgid ""
"Dumps the memory allocation ringlist to a file (only works in debug).\n"
"Entry format per line: \"Address - Size - Description\"."
msgstr ""
-"将内存分é…ringlist转储到一个文件(仅在调试中工作)。\n"
-"æ¯è¡Œè¾“入格å¼:“地å€-大å°-æè¿°â€ã€‚"
+"å°†å†…å­˜åˆ†é… ringlist 转储到一个文件(仅在调试时å¯ç”¨ï¼‰ã€‚\n"
+"æ¯è¡Œæ¡ç›®æ ¼å¼ï¼šâ€œåœ°å€ - å¤§å° - æè¿°â€ã€‚"
#: doc/classes/OS.xml
msgid ""
@@ -49962,8 +50635,8 @@ msgid ""
"Entry format per line: \"Resource Type : Resource Location\".\n"
"At the end of the file is a statistic of all used Resource Types."
msgstr ""
-"将所有使用的资æºè½¬å‚¨åˆ°æ–‡ä»¶ä¸­(仅在调试中有效)。\n"
-"æ¯è¡Œè¾“入格å¼:“资æºç±»åž‹:资æºä½ç½®â€ã€‚\n"
+"将所有使用的资æºè½¬å‚¨åˆ°æ–‡ä»¶ä¸­ï¼ˆä»…在调试中有效)。\n"
+"æ¯è¡Œè¾“入格å¼ï¼šâ€œèµ„æºç±»åž‹:资æºä½ç½®â€ã€‚\n"
"在文件的末尾是所有已使用资æºç±»åž‹çš„统计数æ®ã€‚"
#: doc/classes/OS.xml
@@ -50095,6 +50768,7 @@ msgstr ""
"径。"
#: doc/classes/OS.xml
+#, fuzzy
msgid ""
"Returns the command-line arguments passed to the engine.\n"
"Command-line arguments can be written in any form, including both [code]--"
@@ -50113,6 +50787,10 @@ msgid ""
" if argument.find(\"=\") > -1:\n"
" var key_value = argument.split(\"=\")\n"
" arguments[key_value[0].lstrip(\"--\")] = key_value[1]\n"
+" else:\n"
+" # Options without an argument will be present in the dictionary,\n"
+" # with the value set to an empty string.\n"
+" arguments[argument.lstrip(\"--\")] = \"\"\n"
"[/codeblock]"
msgstr ""
"è¿”å›žä¼ é€’ç»™å¼•æ“Žçš„å‘½ä»¤è¡Œå‚æ•°ã€‚\n"
@@ -50262,8 +50940,8 @@ msgid ""
"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
msgid ""
@@ -50276,7 +50954,7 @@ msgstr ""
"返回相对于组åˆå­—符串中的字符的 IME 光标ä½ç½®ï¼ˆå­—符串的当å‰ç¼–辑部分)。\n"
"[constant MainLoop.NOTIFICATION_OS_IME_UPDATE] 被å‘é€åˆ°åº”用程åºä»¥é€šçŸ¥å®ƒ IME "
"光标ä½ç½®çš„å˜åŒ–。\n"
-"[b]注:[/b]此方法在macOS上实现。"
+"[b]注æ„:[/b]此方法在 macOS 上实现。"
#: doc/classes/OS.xml
msgid ""
@@ -50288,7 +50966,7 @@ msgstr ""
"返回 IME 中间组åˆå­—符串。\n"
"[constant MainLoop.NOTIFICATION_OS_IME_UPDATE] 被å‘é€åˆ°åº”用程åºä»¥é€šçŸ¥å®ƒå¯¹ "
"IME 组åˆå­—符串的更改。\n"
-"[b]注:[/b]此方法在macOS上实现。"
+"[b]注æ„:[/b]此方法在 macOS 上实现。"
#: doc/classes/OS.xml
msgid ""
@@ -50300,7 +50978,7 @@ msgid ""
"[code]\"QWERTY\"[/code] on unsupported platforms."
msgstr ""
"将当剿‹‰ä¸é”®ç›˜å˜ä½“作为字符串返回。\n"
-"å¯èƒ½çš„返回值是: [code]\"QWERTY\"[/code], [code]\"AZERTY\"[/code], "
+"å¯èƒ½çš„返回值是:[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 上实现。在ä¸å—支æŒçš„å¹³å°ä¸Šè¿”回 "
@@ -50332,8 +51010,8 @@ msgstr ""
"ISO_15924]æ–‡å­—ä»£ç  [/url],首字æ¯å¤§å†™ã€‚\n"
"[code]COUNTRY[/code] - å¯é€‰ï¼Œ2 个或 3 ä¸ªå­—æ¯ [url=https://en.wikipedia.org/"
"wiki/ISO_3166-1]国家地区代ç [/url],大写。\n"
-"[code]VARIANT[/code] - å¯é€‰ï¼Œè¯­è¨€å˜ä½“,地区和排åºé¡ºåºã€‚ å˜ä½“å¯ä»¥æœ‰ä»»æ„æ•°é‡çš„"
-"带下划线的关键字。\n"
+"[code]VARIANT[/code] - å¯é€‰ï¼Œè¯­è¨€å˜ä½“,地区和排åºé¡ºåºã€‚å˜ä½“å¯ä»¥æœ‰ä»»æ„æ•°é‡çš„带"
+"下划线的关键字。\n"
"[code]extra[/code] - å¯é€‰ï¼Œåˆ†å·åˆ†éš”的附加关键字列表。货å¸ã€æ—¥åŽ†ã€æŽ’åºé¡ºåºå’Œç¼–"
"å·ç³»ç»Ÿä¿¡æ¯ã€‚"
@@ -50348,8 +51026,8 @@ 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] 作为字符串返回,该字符串应在所有平å°ä¸Š"
+"将主机æ“作系统区域设置的 2 或 3 个字æ¯çš„[url=https://en.wikipedia.org/wiki/"
+"List_of_ISO_639-1_codes]语言代ç [/url]作为字符串返回,该字符串应在所有平å°ä¸Š"
"ä¿æŒä¸€è‡´ã€‚这相当于æå– [method get_locale] 字符串的 [code]language[/code] 部"
"分。\n"
"当您ä¸éœ€è¦æœ‰å…³å›½å®¶/åœ°åŒºä»£ç æˆ–å˜ä½“çš„é™„åŠ ä¿¡æ¯æ—¶ï¼Œè¿™å¯ç”¨äºŽå°†å®Œå…¨æŒ‡å®šçš„区域设置字"
@@ -50382,10 +51060,9 @@ msgid ""
"[code]\"Server\"[/code], [code]\"Windows\"[/code], [code]\"UWP\"[/code], "
"[code]\"X11\"[/code]."
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]."
+"返回主机æ“作系统的å称。å¯èƒ½çš„值有:[code]\"Android\"[/code], [code]\"iOS\"[/"
+"code], [code]\"HTML5\"[/code], [code]\"OSX\"[/code], [code]\"Server\"[/"
+"code], [code]\"Windows\"[/code], [code]\"UWP\"[/code], [code]\"X11\"[/code]."
#: doc/classes/OS.xml
msgid ""
@@ -50393,8 +51070,8 @@ msgid ""
"[b]Note:[/b] This method is implemented on Linux and Windows (other OSs will "
"soon be supported)."
msgstr ""
-"返回内部结构指针,以便在GDNativeæ’件中使用。\n"
-"[b]注æ„:[/b]此方法在Linuxå’ŒWindows上实现(其他æ“作系统将很快被支æŒï¼‰ã€‚"
+"返回内部结构指针,以便在 GDNative æ’件中使用。\n"
+"[b]注æ„:[/b]这个方法在 Linux å’Œ Windows 上实现(其他æ“作系统将很快被支æŒï¼‰ã€‚"
#: doc/classes/OS.xml
msgid ""
@@ -50404,7 +51081,7 @@ msgid ""
msgstr ""
"以百分比形å¼è¿”回设备中剩余的电池电é‡ã€‚如果电æºçŠ¶æ€æœªçŸ¥ï¼Œåˆ™è¿”回 [code]-1[/"
"code]。\n"
-"[b]注æ„:[/b]该方法在Linuxã€macOSå’ŒWindows上实现。"
+"[b]注æ„:[/b]这个方法在 Linuxã€macOS å’Œ Windows 上实现。"
#: doc/classes/OS.xml
msgid ""
@@ -50414,7 +51091,7 @@ msgid ""
msgstr ""
"返回设备耗尽电池å‰å‡ ç§’钟内剩余时间的估计值。如果电æºçŠ¶æ€æœªçŸ¥ï¼Œåˆ™è¿”回 "
"[code]-1[/code]。\n"
-"[b]注æ„:[/b]此方法在 Linuxã€macOS å’Œ Windows 上实现。"
+"[b]注æ„:[/b]这个方法在 Linuxã€macOS å’Œ Windows 上实现。"
#: doc/classes/OS.xml
msgid ""
@@ -50422,8 +51099,8 @@ msgid ""
"[enum PowerState] constants.\n"
"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
msgstr ""
-"返回设备关于电池和电æºçš„当å‰çжæ€ã€‚请å‚阅 [enum PowerState] 常é‡ã€‚\n"
-"[b]注æ„:[/b]该方法在Linuxã€macOSå’ŒWindows上实现。"
+"返回设备关于电池和电æºçš„当å‰çжæ€ã€‚è§ [enum PowerState] 常é‡ã€‚\n"
+"[b]注æ„:[/b]这个方法在 Linuxã€macOS å’Œ Windows 上实现。"
#: doc/classes/OS.xml
msgid ""
@@ -50432,7 +51109,7 @@ msgid ""
"Windows."
msgstr ""
"返回项目的进程 ID。\n"
-"[b]注æ„:[/b]此方法在Androidã€iOSã€Linuxã€macOSå’ŒWindows上实现。"
+"[b]注æ„:[/b]这个方法在 Androidã€iOSã€Linuxã€macOS å’Œ Windows 上实现。"
#: doc/classes/OS.xml
msgid ""
@@ -50519,8 +51196,8 @@ msgid ""
"[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 上,如果系统中至少有一个 hiDPI(Retina)å±å¹•,则返回值"
+"为 [code]2.0[/code],其他情况为 [code]1.0[/code]。\n"
"[b]注æ„:[/b]此方法仅在macOS上实现。"
#: doc/classes/OS.xml
@@ -50647,7 +51324,7 @@ msgid ""
"application restarts."
msgstr ""
"返回当å‰çº¿ç¨‹çš„ ID。这å¯ç”¨äºŽæ—¥å¿—,以简化多线程应用程åºçš„调试。\n"
-"[b]注:[/b] 线程 ID 䏿˜¯ç¡®å®šçš„,也许会在应用程åºé‡æ–°å¯åŠ¨æ—¶è¢«é‡å¤ä½¿ç”¨ã€‚"
+"[b]注æ„:[/b] 线程 ID 䏿˜¯ç¡®å®šçš„,也许会在应用程åºé‡æ–°å¯åŠ¨æ—¶è¢«é‡å¤ä½¿ç”¨ã€‚"
#: doc/classes/OS.xml
msgid ""
@@ -50676,7 +51353,7 @@ msgstr ""
#: doc/classes/OS.xml
msgid ""
"Returns the current time zone as a dictionary with the keys: bias and name."
-msgstr "以字典形å¼è¿”å›žå½“å‰æ—¶åŒºï¼Œé”®ä¸ºï¼šbiaså’Œname。"
+msgstr "以字典形å¼è¿”å›žå½“å‰æ—¶åŒºï¼Œé”®ä¸ºï¼šbias å’Œ name。"
#: doc/classes/OS.xml
msgid ""
@@ -50708,8 +51385,8 @@ msgid ""
"decrease)."
msgstr ""
"以秒为å•ä½è¿”回当å‰çš„ UNIX 纪元时间戳。\n"
-"[b]é‡è¦ï¼š[/b] 这是用户å¯ä»¥æ‰‹åŠ¨è®¾ç½®çš„ç³»ç»Ÿæ—¶é’Ÿã€‚ [b]永远ä¸è¦ä½¿ç”¨[/b]è¿™ç§æ–¹æ³•è¿›"
-"行精确的时间计算,因为它的结果也会å—到æ“作系统的自动调整。 [b]始终使用[/b] "
+"[b]é‡è¦ï¼š[/b]这是用户å¯ä»¥æ‰‹åŠ¨è®¾ç½®çš„ç³»ç»Ÿæ—¶é’Ÿã€‚[b]永远ä¸è¦ä½¿ç”¨[/b]è¿™ç§æ–¹æ³•进行"
+"精确的时间计算,因为它的结果也会å—到æ“作系统的自动调整。[b]始终使用[/b] "
"[method get_ticks_usec] 或 [method get_ticks_msec] 进行精确时间计算,因为它们"
"ä¿è¯æ˜¯å•è°ƒçš„ï¼ˆå³æ°¸ä¸å‡å°‘)。"
@@ -50804,7 +51481,7 @@ msgid ""
msgstr ""
"将带有文本“标签â€çš„æ–°é¡¹ç›®æ·»åŠ åˆ°å…¨å±€èœå•。使用“_dockâ€èœå•将项目添加到 macOS åœ"
"é æ å›¾æ ‡èœå•。\n"
-"[b]注:[/b]此方法在macOS上实现。"
+"[b]注æ„:[/b]此方法在 macOS 上实现。"
#: doc/classes/OS.xml
msgid ""
@@ -51007,7 +51684,7 @@ msgid ""
"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
msgstr ""
"设置活动键盘布局。\n"
-"[b]注:[/b]此方法å¯åœ¨Linuxã€macOSå’ŒWindows上实现。"
+"[b]注æ„:[/b]此方法在 Linuxã€macOS å’Œ Windows 上实现。"
#: doc/classes/OS.xml
msgid ""
@@ -51028,11 +51705,25 @@ msgstr ""
msgid ""
"Moves the file or directory to the system's recycle bin. See also [method "
"Directory.remove].\n"
+"The method takes only global paths, so you may need to use [method "
+"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/"
+"code] as it will not work in exported project.\n"
"[b]Note:[/b] If the user has disabled the recycle bin on their system, the "
-"file will be permanently deleted instead."
+"file will be permanently deleted instead.\n"
+"[codeblock]\n"
+"var file_to_remove = \"user://slot1.sav\"\n"
+"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n"
+"[/codeblock]"
msgstr ""
-"将文件或目录移动到系统的回收站。å¦è¯·å‚阅 [method Directory.remove]。\n"
-"[b]注æ„:[/b]如果用户ç¦ç”¨äº†ç³»ç»Ÿçš„回收站,那么这个文件就会被永久删除。"
+"将文件或目录移动到系统的回收站。å¦è¯·å‚阅 [method Directory.remove].\n"
+"该方法仅支æŒå…¨å±€è·¯å¾„,所以你å¯èƒ½éœ€è¦ä½¿ç”¨ [method ProjectSettings."
+"globalize_path]。请勿将其用于 [code]res://[/code] 中的文件,因为在导出åŽçš„项"
+"目中是无法正常工作的。\n"
+"[b]注æ„:[/b]如果用户在系统中ç¦ç”¨äº†å›žæ”¶ç«™ï¼Œé‚£ä¹ˆè¯¥æ–‡ä»¶ä¼šè¢«æ°¸ä¹…删除。\n"
+"[codeblock]\n"
+"var file_to_remove = \"user://slot1.sav\"\n"
+"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n"
+"[/codeblock]"
#: doc/classes/OS.xml
msgid ""
@@ -51048,7 +51739,7 @@ msgid ""
"[b]Note:[/b] This method is only implemented on iOS."
msgstr ""
"如果本地视频正在播放,返回 [code]true[/code]。\n"
-"[b]注æ„:[/b]这个方法åªåœ¨iOS上实现。"
+"[b]注æ„:[/b]这个方法åªåœ¨ iOS 上实现。"
#: doc/classes/OS.xml
msgid ""
@@ -51056,7 +51747,7 @@ msgid ""
"[b]Note:[/b] This method is only implemented on iOS."
msgstr ""
"æš‚åœæœ¬åœ°è§†é¢‘播放。\n"
-"[b]注æ„:[/b]这个方法åªåœ¨iOS上实现。"
+"[b]注æ„:[/b]这个方法åªåœ¨ iOS 上实现。"
#: doc/classes/OS.xml
msgid ""
@@ -51065,7 +51756,7 @@ msgid ""
"[b]Note:[/b] This method is only implemented on iOS."
msgstr ""
"以给定的音é‡ã€éŸ³é¢‘å’Œå­—å¹•è½¨é“æ’­æ”¾æ¥è‡ªæŒ‡å®šè·¯å¾„的本地视频。\n"
-"[b]注æ„:[/b]这个方法åªåœ¨iOS上实现。"
+"[b]注æ„:[/b]这个方法åªåœ¨ iOS 上实现。"
#: doc/classes/OS.xml
msgid ""
@@ -51073,7 +51764,7 @@ msgid ""
"[b]Note:[/b] This method is implemented on iOS."
msgstr ""
"åœæ­¢æœ¬åœ°è§†é¢‘播放。\n"
-"[b]注æ„:[/b]这个方法在iOS上实现。"
+"[b]注æ„:[/b]这个方法在 iOS 上实现。"
#: doc/classes/OS.xml
msgid ""
@@ -51081,7 +51772,7 @@ msgid ""
"[b]Note:[/b] This method is implemented on iOS."
msgstr ""
"æ¢å¤æœ¬åœ°è§†é¢‘播放。\n"
-"[b]注æ„:[/b]这个方法在iOS上实现。"
+"[b]注æ„:[/b]这个方法在 iOS 上实现。"
#: doc/classes/OS.xml
msgid ""
@@ -51149,11 +51840,12 @@ 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外,环境å˜é‡åç§°"
-"在所有平å°ä¸Šéƒ½æ˜¯åŒºåˆ†å¤§å°å†™çš„。"
+"将环境å˜é‡ [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
msgid ""
@@ -51271,7 +51963,6 @@ msgstr ""
"[b]注æ„:[/b]该方法在 HTML5ã€Linuxã€macOS å’Œ Windows 上实现。"
#: doc/classes/OS.xml
-#, fuzzy
msgid ""
"Requests the OS to open a resource with the most appropriate program. For "
"example:\n"
@@ -51296,8 +51987,8 @@ msgstr ""
"器打开 Godot 官方网站。\n"
"- [code]OS.shell_open(\"mailto:example@example.com\")[/code] 会打开默认电å­é‚®"
"件客户端并将“收件人â€å­—段设置为 [code]example@example.com[/code]。其他支æŒè‡ªå®š"
-"ä¹‰çš„å­—æ®µè§ [url=https://blog.escapecreative.com/customizing-mailto-links/]自"
-"定义 [code]mailto:[/code] 链接[/url] 。\n"
+"ä¹‰çš„å­—æ®µè§ [url=https://datatracker.ietf.org/doc/html/rfc2368]RFC 2368 - "
+"[code]mailto[/code] URL 方案[/url]。\n"
"å¯ä»¥ä½¿ç”¨ [method ProjectSettings.globalize_path] å°† [code]res://[/code] å’Œ "
"[code]user://[/code] 路径转æ¢ä¸ºæœ¬æ–¹æ³•所使用的系统路径。\n"
"[b]注æ„:[/b]本方法在 Androidã€iOSã€HTML5ã€Linuxã€macOSã€ä»¥åŠ Windows 上实"
@@ -51336,7 +52027,7 @@ 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],引擎会过滤æ¯å¸§ä¹‹é—´æµ‹é‡çš„æ—¶é—´å¢žé‡ï¼Œå¹¶å°è¯•è¡¥å¿éšæœºå˜"
+"如果为 [code]true[/code],引擎会过滤æ¯å¸§ä¹‹é—´æµ‹é‡çš„æ—¶é—´å¢žé‡ï¼Œå¹¶å°è¯•è¡¥å¿éšæœºå˜"
"化。这åªä¼šåœ¨åž‚ç›´åŒæ­¥å¤„于活动状æ€çš„系统上è¿è¡Œã€‚"
#: doc/classes/OS.xml
@@ -51423,8 +52114,8 @@ 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]true[/code] 时,如果 [code]vsync_enabled[/code] 为真,当æ“作系统的窗"
-"å£åˆæˆå™¨è¢«å¯ç”¨å¹¶ä¸”游æˆå¤„äºŽçª—å£æ¨¡å¼æ—¶ï¼Œå°†ä½¿ç”¨è¯¥åˆæˆå™¨è¿›è¡Œåž‚ç›´åŒæ­¥ã€‚\n"
+"如果为 [code]true[/code] 且 [code]vsync_enabled[/code] 为真,当æ“作系统的窗å£"
+"åˆæˆå™¨è¢«å¯ç”¨å¹¶ä¸”游æˆå¤„äºŽçª—å£æ¨¡å¼æ—¶ï¼Œå°†ä½¿ç”¨è¯¥åˆæˆå™¨è¿›è¡Œåž‚ç›´åŒæ­¥ã€‚\n"
"[b]注æ„:[/b]此选项是实验性的,旨在缓解æŸäº›ç”¨æˆ·é‡åˆ°çš„å¡é¡¿ã€‚但是,一些用户在使"
"用时é‡åˆ°äº† Vsync 帧率å‡åŠï¼Œä¾‹å¦‚从 60 FPS 到 30 FPS。\n"
"[b]注æ„:[/b]此属性仅在 Windows 上实现。"
@@ -51632,10 +52323,10 @@ msgid ""
"- Linux: [code]X11::GLXContext[/code]\n"
"- MacOS: [code]NSOpenGLContext*[/code] (not yet implemented)"
msgstr ""
-"OpenGL上下文:\n"
+"OpenGL 上下文:\n"
"- Windows:[code]HGLRC[/code]\n"
"- Linux:[code]X11::GLXContext[/code]\n"
-"- MacOS:[code]NSOpenGLContext*[/code] (尚未实现)"
+"- MacOS:[code]NSOpenGLContext*[/code](尚未实现)"
#: doc/classes/OS.xml
msgid "Landscape screen orientation."
@@ -51723,7 +52414,7 @@ msgstr "[PackedDataContainer] 的引用版本。"
#: doc/classes/PackedScene.xml
msgid "An abstraction of a serialized scene."
-msgstr "一个åºåˆ—化场景的抽象。"
+msgstr "对åºåˆ—化场景的抽象。"
#: doc/classes/PackedScene.xml
msgid ""
@@ -51905,9 +52596,9 @@ msgid ""
"without having to encode data as low-level bytes or having to worry about "
"network ordering."
msgstr ""
-"PacketPeer是基于数æ®åŒ…çš„å议(如UDP)的抽象和基类。它æä¾›äº†ä¸€ä¸ªAPI,用于å‘é€"
-"å’ŒæŽ¥æ”¶ä½œä¸ºåŽŸå§‹æ•°æ®æˆ–å˜é‡çš„æ•°æ®åŒ…。这使得通过å议传输数æ®å˜å¾—很容易,而ä¸å¿…å°†"
-"æ•°æ®ç¼–ç ä¸ºä½Žçº§å­—节或担心网络顺åºã€‚"
+"PacketPeer 是基于数æ®åŒ…çš„å议(如 UDP)的抽象和基类。它æä¾›äº†ä¸€ä¸ª API,用于å‘"
+"é€å’ŒæŽ¥æ”¶ä½œä¸ºåŽŸå§‹æ•°æ®æˆ–å˜é‡çš„æ•°æ®åŒ…。这使得通过å议传输数æ®å˜å¾—很容易,而ä¸å¿…"
+"将数æ®ç¼–ç ä¸ºä½Žçº§å­—节或担心网络顺åºã€‚"
#: doc/classes/PacketPeer.xml
msgid "Returns the number of packets currently available in the ring-buffer."
@@ -51922,7 +52613,8 @@ msgid ""
"Returns the error state of the last packet received (via [method get_packet] "
"and [method get_var])."
msgstr ""
-"è¿”å›žæœ€åŽæŽ¥æ”¶çš„æ•°æ®åŒ…的错误状æ€ï¼ˆé€šè¿‡[method get_packet]å’Œ[method get_var])。"
+"è¿”å›žæœ€åŽæŽ¥æ”¶çš„æ•°æ®åŒ…的错误状æ€ï¼ˆé€šè¿‡ [method get_packet] å’Œ [method "
+"get_var])。"
#: doc/classes/PacketPeer.xml
msgid ""
@@ -51932,8 +52624,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] 或 [member "
-"allow_object_decoding]为 [code]true[/code],则å…许对对象进行解ç ã€‚\n"
+"获å–一个å˜é‡ã€‚如果 [code]allow_objects[/code] 或 [member "
+"allow_object_decoding] 为 [code]true[/code],则å…许对对象进行解ç ã€‚\n"
"[b]警告:[/b]ååºåˆ—化对象å¯èƒ½åŒ…嫿‰§è¡Œçš„代ç ã€‚如果åºåˆ—化对象æ¥è‡ªä¸å—信任的æºï¼Œ"
"请ä¸è¦ä½¿ç”¨æ­¤é€‰é¡¹ï¼Œä»¥é¿å…潜在的安全å¨èƒï¼Œå¦‚è¿œç¨‹ä»£ç æ‰§è¡Œã€‚"
@@ -51947,8 +52639,8 @@ msgid ""
"allow_object_decoding]) is [code]true[/code], encoding objects is allowed "
"(and can potentially include code)."
msgstr ""
-"å°†[Variant]作为数æ®åŒ…å‘é€ã€‚如果[code]full_objects[/code] 或 [member "
-"allow_object_decoding]为 [code]true[/code],则å…许对对象进行编ç ï¼ˆå¹¶ä¸”å¯èƒ½åŒ…"
+"å°† [Variant] 作为数æ®åŒ…å‘é€ã€‚如果 [code]full_objects[/code] 或 [member "
+"allow_object_decoding] 为 [code]true[/code],则å…许对对象进行编ç ï¼ˆå¹¶ä¸”å¯èƒ½åŒ…"
"å«ä»£ç ï¼‰ã€‚"
#: doc/classes/PacketPeer.xml
@@ -51963,7 +52655,7 @@ msgid ""
msgstr ""
"[i]已废弃。[/i] 你应该使用 [code]get_var[/code] å’Œ [code]put_var[/code] 傿•°"
"æ¥ä»£æ›¿å®ƒã€‚\n"
-"如果[code]true[/code],多人游æˆAPIå°†å…许在RPC/RSETs期间对对象进行编ç å’Œè§£"
+"如果为 [code]true[/code],多人游æˆAPIå°†å…许在RPC/RSETs期间对对象进行编ç å’Œè§£"
"ç ã€‚\n"
"[b]警告:[/b]ååºåˆ—化的对象å¯èƒ½åŒ…å«ä¼šè¢«æ‰§è¡Œçš„代ç ã€‚如果åºåˆ—化的对象æ¥è‡ªä¸å—ä¿¡"
"ä»»çš„æ¥æºï¼Œè¯·ä¸è¦ä½¿ç”¨è¿™ä¸ªé€‰é¡¹ï¼Œä»¥é¿å…潜在的安全å¨èƒï¼Œå¦‚è¿œç¨‹ä»£ç æ‰§è¡Œã€‚"
@@ -51978,14 +52670,15 @@ msgid ""
"[code]encode_buffer_max_size[/code], the method will error out with "
"[constant ERR_OUT_OF_MEMORY]."
msgstr ""
-"ç¼–ç [Variant]æ—¶å…许的最大缓冲区大å°ã€‚æé«˜æ­¤å€¼ä»¥æ”¯æŒæ›´å¤§çš„内存分é…。\n"
-"[method put_var]方法在堆栈上分é…内存,使用的缓冲区将自动增长到最接近的二次"
-"方,以匹é…[Variant]的大å°ã€‚如果[Variant]大于 [code]encode_buffer_max_size[/"
-"code],则该方法将以[constant ERR_OUT_OF_MEMORY]出错。"
+"ç¼–ç  [Variant] æ—¶å…许的最大缓冲区大å°ã€‚æé«˜æ­¤å€¼ä»¥æ”¯æŒæ›´å¤§çš„内存分é…。\n"
+"[method put_var] 方法在堆栈上分é…内存,使用的缓冲区将自动增长到最接近的二次"
+"æ–¹ï¼Œä»¥åŒ¹é… [Variant] 的大å°ã€‚如果 [Variant] 大于 "
+"[code]encode_buffer_max_size[/code],则该方法将以 [constant "
+"ERR_OUT_OF_MEMORY] 出错。"
#: doc/classes/PacketPeerDTLS.xml
msgid "DTLS packet peer."
-msgstr "DTLSæ•°æ®åŒ…客户端。"
+msgstr "DTLS æ•°æ®åŒ…客户端。"
#: doc/classes/PacketPeerDTLS.xml
msgid ""
@@ -52012,19 +52705,19 @@ msgid ""
"argument. You can specify a custom [X509Certificate] to use for validation "
"via the [code]valid_certificate[/code] argument."
msgstr ""
-"使用必须连接的底层[PacketPeerUDP](è§[method PacketPeerUDP.connect_to_host])"
-"连接一个[code]peer[/code],开始DTLSæ¡æ‰‹è¿‡ç¨‹ã€‚如果[code]validate_certs[/code]"
-"是[code]true[/code],[PacketPeerDTLS]将验è¯è¿œç¨‹å¯¹ç­‰ä½“æäº¤çš„è¯ä¹¦å¹¶ä¸Ž"
-"[code]for_hostname[/code]傿•°åŒ¹é…。你å¯ä»¥é€šè¿‡[code]valid_certificate[/code]å‚"
-"数指定一个自定义的[X509Certificate]æ¥è¿›è¡ŒéªŒè¯ã€‚"
+"使用必须连接的底层 [PacketPeerUDP]ï¼ˆè§ [method PacketPeerUDP."
+"connect_to_host])连接一个 [code]peer[/code],开始 DTLS æ¡æ‰‹è¿‡ç¨‹ã€‚如果 "
+"[code]validate_certs[/code] 为 [code]true[/code],[PacketPeerDTLS] 将验è¯è¿œç¨‹"
+"对等体æäº¤çš„è¯ä¹¦å¹¶ä¸Ž [code]for_hostname[/code] 傿•°åŒ¹é…。你å¯ä»¥é€šè¿‡ "
+"[code]valid_certificate[/code] 傿•°æŒ‡å®šç”¨äºŽéªŒè¯çš„自定义 [X509Certificate]。"
#: doc/classes/PacketPeerDTLS.xml
msgid "Disconnects this peer, terminating the DTLS session."
-msgstr "断开此对等体的连接,终止DTLS会è¯ã€‚"
+msgstr "断开此对等体的连接,终止 DTLS 会è¯ã€‚"
#: doc/classes/PacketPeerDTLS.xml doc/classes/StreamPeerSSL.xml
msgid "Returns the status of the connection. See [enum Status] for values."
-msgstr "返回连接的状æ€ã€‚有关值,请å‚阅[enum Status]。"
+msgstr "返回连接的状æ€ã€‚å–å€¼è§ [enum Status]。"
#: doc/classes/PacketPeerDTLS.xml
msgid ""
@@ -52035,13 +52728,13 @@ msgstr ""
#: doc/classes/PacketPeerDTLS.xml
msgid "A status representing a [PacketPeerDTLS] that is disconnected."
-msgstr "表示已断开连接的[PacketPeerDTLS]的状æ€ã€‚"
+msgstr "表示已断开连接的 [PacketPeerDTLS] 的状æ€ã€‚"
#: doc/classes/PacketPeerDTLS.xml
msgid ""
"A status representing a [PacketPeerDTLS] that is currently performing the "
"handshake with a remote peer."
-msgstr "è¡¨ç¤ºå½“å‰æ­£åœ¨ä¸Žè¿œç¨‹å¯¹ç­‰æ–¹è¿›è¡Œæ¡æ‰‹çš„[PacketPeerDTLS]的状æ€ã€‚"
+msgstr "è¡¨ç¤ºå½“å‰æ­£åœ¨ä¸Žè¿œç¨‹å¯¹ç­‰æ–¹è¿›è¡Œæ¡æ‰‹çš„ [PacketPeerDTLS] 的状æ€ã€‚"
#: doc/classes/PacketPeerDTLS.xml
msgid ""
@@ -52060,7 +52753,7 @@ msgstr "显示主机æä¾›çš„DTLSè¯ä¹¦åŸŸä¸Žè¯·æ±‚验è¯çš„域ä¸åŒ¹é…的错è¯
#: doc/classes/PacketPeerStream.xml
msgid "Wrapper to use a PacketPeer over a StreamPeer."
-msgstr "在StreamPeer上使用PacketPeer的包装器。"
+msgstr "在 StreamPeer 上使用 PacketPeer 的包装器。"
#: doc/classes/PacketPeerStream.xml
msgid ""
@@ -52069,9 +52762,9 @@ msgid ""
"implements a custom protocol over the StreamPeer, so the user should not "
"read or write to the wrapped StreamPeer directly."
msgstr ""
-"PacketStreamPeeræä¾›äº†ä¸€ä¸ªåŒ…装器,用于在æµä¸Šä½¿ç”¨æ•°æ®åŒ…工作。这å…许在"
-"StreamPeer上使用基于数æ®åŒ…的代ç ã€‚PacketPeerStream在StreamPeer上实现了一个自"
-"定义的å议,所以用户ä¸åº”该直接读或写到被包装的StreamPeer上。"
+"PacketStreamPeer æä¾›äº†ä¸€ä¸ªåŒ…装器,用于在æµä¸Šä½¿ç”¨æ•°æ®åŒ…工作。这å…许在 "
+"StreamPeer 上使用基于数æ®åŒ…的代ç ã€‚PacketPeerStream 在 StreamPeer 上实现了一"
+"个自定义的å议,所以用户ä¸åº”该直接读或写到被包装的 StreamPeer 上。"
#: doc/classes/PacketPeerStream.xml
msgid "The wrapped [StreamPeer] object."
@@ -52088,7 +52781,7 @@ msgstr "UDPæ•°æ®åŒ…对等体。å¯ä»¥ç”¨æ¥å‘é€åŽŸå§‹çš„UDPæ•°æ®åŒ…以åŠ[Va
#: doc/classes/PacketPeerUDP.xml
msgid "Closes the UDP socket the [PacketPeerUDP] is currently listening on."
-msgstr "关闭[PacketPeerUDP]当剿­£åœ¨ä¾¦å¬çš„UDP套接字。"
+msgstr "关闭 [PacketPeerUDP] 当剿­£åœ¨ä¾¦å¬çš„ UDP 套接字。"
#: doc/classes/PacketPeerUDP.xml
msgid ""
@@ -52105,41 +52798,41 @@ 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"
-"[b]注æ„:[/b]连接到远程对等体并ä¸èƒ½é˜²æ­¢IPæ¬ºéª—ç­‰æ¶æ„攻击。如果您觉得您的应用程"
-"åºæ­£åœ¨ä¼ è¾“æ•æ„Ÿä¿¡æ¯ï¼Œå¯ä»¥è€ƒè™‘使用SSL或DTLS等加密技术。"
+"调用此方法将 UDP 对等体连接到给定的 [code]host[/code]/[code]port[/code] 对。"
+"UDP å®žé™…ä¸Šæ˜¯æ— è¿žæŽ¥çš„ï¼Œæ‰€ä»¥è¿™ä¸ªé€‰é¡¹åªæ„å‘³ç€æ¥è‡ªä¸åŒåœ°å€çš„入包被自动丢弃,而出"
+"包总是被å‘é€åˆ°è¿žæŽ¥çš„地å€ï¼ˆä¸å…许将æ¥è°ƒç”¨ [method set_dest_address])。该方法"
+"ä¸å‘远程对等体å‘é€ä»»ä½•æ•°æ®ï¼Œè¦å‘逿•°æ®ï¼Œè¯·ä½¿ç”¨ [method PacketPeer.put_var] "
+"或 [method PacketPeer.put_packet]。å¦è¯·å‚阅 [UDPServer]。\n"
+"[b]注æ„:[/b]连接到远程对等体并ä¸èƒ½é˜²æ­¢ IP æ¬ºéª—ç­‰æ¶æ„攻击。如果您觉得您的应用"
+"ç¨‹åºæ­£åœ¨ä¼ è¾“æ•æ„Ÿä¿¡æ¯ï¼Œå¯ä»¥è€ƒè™‘使用 SSL 或 DTL S等加密技术。"
#: doc/classes/PacketPeerUDP.xml
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 ""
-"返回å‘逿œ€åŽä¸€ä¸ªæ•°æ®åŒ…(通过[method PacketPeer.get_packet]或[method "
-"PacketPeer.get_var]接收)的远程对等体的IP。"
+"返回å‘逿œ€åŽä¸€ä¸ªæ•°æ®åŒ…(通过 [method PacketPeer.get_packet] 或 [method "
+"PacketPeer.get_var] 接收)的远程对等体的 IP。"
#: doc/classes/PacketPeerUDP.xml
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 ""
-"返回å‘逿œ€åŽä¸€ä¸ªæ•°æ®åŒ…(通过[method PacketPeer.get_packet]或[method "
-"PacketPeer.get_var]接收)的远程对等方的端å£ã€‚"
+"返回å‘逿œ€åŽä¸€ä¸ªæ•°æ®åŒ…(通过 [method PacketPeer.get_packet] 或 [method "
+"PacketPeer.get_var] 接收)的远程对等方的端å£ã€‚"
#: doc/classes/PacketPeerUDP.xml
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 ""
-"如果UDP套接字已打开并已连接到远程地å€ï¼Œåˆ™è¿”回 [code]true[/code]。请å‚阅"
+"如果 UDP 套接字已打开并已连接到远程地å€ï¼Œåˆ™è¿”回 [code]true[/code]ã€‚è§ "
"[method connect_to_host]。"
#: doc/classes/PacketPeerUDP.xml
msgid "Returns whether this [PacketPeerUDP] is listening."
-msgstr "返回这个[PacketPeerUDP]æ˜¯å¦æ­£åœ¨ç›‘å¬ã€‚"
+msgstr "返回这个 [PacketPeerUDP] æ˜¯å¦æ­£åœ¨ç›‘å¬ã€‚"
#: doc/classes/PacketPeerUDP.xml
msgid ""
@@ -52162,8 +52855,8 @@ msgid ""
"Removes the interface identified by [code]interface_name[/code] from the "
"multicast group specified by [code]multicast_address[/code]."
msgstr ""
-"从[code]multicast_address[/code]指定的组播组中移除[code]interface_name[/code]"
-"标识的接å£ã€‚"
+"从 [code]multicast_address[/code] 指定的组播组中移除 [code]interface_name[/"
+"code] 标识的接å£ã€‚"
#: doc/classes/PacketPeerUDP.xml
msgid ""
@@ -52179,15 +52872,16 @@ msgid ""
"only listen on the interface with that addresses (or fail if no interface "
"with the given address exists)."
msgstr ""
-"使这个[PacketPeerUDP]在与[code]bind_address[/code]绑定的[code]端å£[/code]上监"
-"å¬ï¼Œç¼“冲区大å°ä¸º[code]recv_buf_size[/code]。\n"
-"如果[code]bind_address[/code]被设置为[code]\"*\"[/code](默认),对等体将监å¬"
-"所有å¯ç”¨åœ°å€ï¼ˆåŒ…括IPv4å’ŒIPv6)。\n"
-"如果[code]bind_address[/code]被设置为[code]\"0.0.0.0\"[/code](对于IPv4)或"
-"[code]\":\"[/code](对于IPv6ï¼‰ï¼Œå¯¹ç­‰ä½“å°†ç›‘å¬æ‰€æœ‰ç¬¦åˆè¯¥IP类型的å¯ç”¨åœ°å€ã€‚\n"
-"如果[code]bind_address[/code]被设置为任何有效的地å€ï¼ˆä¾‹å¦‚"
-"[code]\"192.168.1.101\"[/code],[code]\":1\"[/code]等),对等体将åªç›‘å¬å…·æœ‰è¯¥"
-"地å€çš„æŽ¥å£ï¼ˆå¦‚æžœä¸å­˜åœ¨å…·æœ‰è¯¥åœ°å€çš„æŽ¥å£ï¼Œåˆ™å¤±è´¥ï¼‰ã€‚"
+"使这个 [PacketPeerUDP] 在与 [code]bind_address[/code] ç»‘å®šçš„ç«¯å£ [code]port[/"
+"code] 上监å¬ï¼Œç¼“冲区大å°ä¸º [code]recv_buf_size[/code]。\n"
+"如果 [code]bind_address[/code] 被设置为 [code]\"*\"[/code](默认),对等体将"
+"ç›‘å¬æ‰€æœ‰å¯ç”¨åœ°å€ï¼ˆåŒ…括 IPv4 å’Œ IPv6)。\n"
+"如果 [code]bind_address[/code] 被设置为 [code]\"0.0.0.0\"[/code](对于 IPv4)"
+"或 [code]\":\"[/code](对于 IPv6ï¼‰ï¼Œå¯¹ç­‰ä½“å°†ç›‘å¬æ‰€æœ‰ç¬¦åˆè¯¥ IP 类型的å¯ç”¨åœ°"
+"å€ã€‚\n"
+"如果 [code]bind_address[/code] 被设置为任何有效的地å€ï¼ˆä¾‹å¦‚ "
+"[code]\"192.168.1.101\"[/code]ã€[code]\":1\"[/code] 等),对等体将åªç›‘å¬å…·æœ‰"
+"该地å€çš„æŽ¥å£ï¼ˆå¦‚æžœä¸å­˜åœ¨å…·æœ‰è¯¥åœ°å€çš„æŽ¥å£ï¼Œåˆ™å¤±è´¥ï¼‰ã€‚"
#: doc/classes/PacketPeerUDP.xml
msgid ""
@@ -52233,15 +52927,15 @@ msgid ""
" return\n"
"[/codeblock]"
msgstr ""
-"等待数æ®åŒ…到达侦å¬ç«¯å£ã€‚å‚è§[method listen]。\n"
-"[b]注æ„:[/b][method wait]一旦被调用就ä¸èƒ½è¢«ä¸­æ–­ã€‚è¿™å¯ä»¥é€šè¿‡å…许å¦ä¸€æ–¹å‘é€ä¸€"
+"等待数æ®åŒ…到达侦å¬ç«¯å£ã€‚è§ [method listen]。\n"
+"[b]注æ„:[/b][method wait] 一旦被调用就ä¸èƒ½è¢«ä¸­æ–­ã€‚è¿™å¯ä»¥é€šè¿‡å…许å¦ä¸€æ–¹å‘é€ä¸€"
"个特定的“death pillâ€åŒ…æ¥è§£å†³ï¼Œå¦‚下所示:\n"
"[codeblock]\n"
-"# Server\n"
+"# æœåС噍\n"
"socket.set_dest_address(\"127.0.0.1\", 789)\n"
"socket.put_packet(\"Time to stop\".to_ascii())\n"
"\n"
-"# Client\n"
+"# 客户的\n"
"while socket.wait() == OK:\n"
" var data = socket.get_packet().get_string_from_ascii()\n"
" if data == \"Time to stop\":\n"
@@ -52250,15 +52944,15 @@ msgstr ""
#: doc/classes/Panel.xml
msgid "Provides an opaque background for [Control] children."
-msgstr "为[Control]孿ާ件æä¾›ä¸é€æ˜Žçš„背景。"
+msgstr "为 [Control] 孿ާ件æä¾›ä¸é€æ˜Žçš„背景。"
#: doc/classes/Panel.xml
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 ""
-"颿¿æ˜¯ä¸€ä¸ªæ˜¾ç¤ºä¸é€æ˜ŽèƒŒæ™¯çš„[Control]。它通常用作其他类型的[Control]节点的父节"
-"点和容器。"
+"颿¿æ˜¯ä¸€ä¸ªæ˜¾ç¤ºä¸é€æ˜ŽèƒŒæ™¯çš„ [Control]。它通常用作其他类型的 [Control] 节点的父"
+"节点和容器。"
#: doc/classes/Panel.xml
msgid "2D Finite State Machine Demo"
@@ -52399,25 +53093,25 @@ msgid ""
"will not be mirrored."
msgstr ""
"视差图层的[Texture]镜åƒã€‚ç”¨äºŽåˆ›å»ºæ— é™æ»šåŠ¨çš„èƒŒæ™¯ã€‚å¦‚æžœä¸€ä¸ªè½´è¢«è®¾ç½®ä¸º[code]0[/"
-"code], [Texture]å°†ä¸ä¼šè¢«é•œåƒã€‚"
+"code],[Texture]å°†ä¸ä¼šè¢«é•œåƒã€‚"
#: doc/classes/ParallaxLayer.xml
msgid ""
"The ParallaxLayer's offset relative to the parent ParallaxBackground's "
"[member ParallaxBackground.scroll_offset]."
msgstr ""
-"ParallaxLayer相对于父ParallaxBackgroundçš„åç§»é‡[member ParallaxBackground."
-"scroll_offset]。"
+"ParallaxLayer 相对于父 ParallaxBackground çš„åç§»é‡ [member "
+"ParallaxBackground.scroll_offset]。"
#: doc/classes/ParallaxLayer.xml
msgid ""
"Multiplies the ParallaxLayer's motion. If an axis is set to [code]0[/code], "
"it will not scroll."
-msgstr "å¤åˆ¶è§†å·®å›¾å±‚çš„è¿åŠ¨ã€‚å¦‚æžœä¸€ä¸ªè½´è¢«è®¾ç½®ä¸º[code]0[/code],它将ä¸ä¼šæ»šåŠ¨ã€‚"
+msgstr "å¤åˆ¶è§†å·®å›¾å±‚çš„è¿åŠ¨ã€‚å¦‚æžœä¸€ä¸ªè½´è¢«è®¾ç½®ä¸º [code]0[/code],它将ä¸ä¼šæ»šåŠ¨ã€‚"
#: doc/classes/Particles.xml
msgid "GPU-based 3D particle emitter."
-msgstr "基于GPUçš„3Dç²’å­å‘射器。"
+msgstr "基于 GPU çš„ 3D ç²’å­å‘射器。"
#: doc/classes/Particles.xml
msgid ""
@@ -52549,8 +53243,8 @@ msgid ""
"when particles are off-screen."
msgstr ""
"[AABB] 确定节点的区域,该区域需è¦åœ¨å±å¹•上å¯è§æ‰èƒ½ä½¿ç²’å­ç³»ç»Ÿå¤„于活动状æ€ã€‚\n"
-"如果在节点进入/退出å±å¹•æ—¶ç²’å­çªç„¶å‡ºçް/消失,则增大框。 [AABB] å¯ä»¥é€šè¿‡ä»£ç æˆ–"
-"使用 [b]Particles → Generate AABB[/b] 编辑器工具生æˆã€‚\n"
+"如果在节点进入/退出å±å¹•æ—¶ç²’å­çªç„¶å‡ºçް/消失,则增大框。[AABB] å¯ä»¥é€šè¿‡ä»£ç æˆ–使"
+"用 [b]Particles → Generate AABB[/b] 编辑器工具生æˆã€‚\n"
"[b]注æ„:[/b]如果使用中的 [ParticlesMaterial] é…置为投射阴影,您å¯èƒ½éœ€è¦æ”¾å¤§"
"æ­¤ AABB 以确ä¿åœ¨ç²’å­ç¦»å±æ—¶æ›´æ–°é˜´å½±ã€‚"
@@ -52587,7 +53281,7 @@ msgid ""
"[b]Note:[/b] Unlike [CPUParticles2D], [Particles2D] currently ignore the "
"texture region defined in [AtlasTexture]s."
msgstr ""
-"用于创建å„ç§ç²’å­ç³»ç»Ÿå’Œæ•ˆæžœçš„ 2D ç²’å­èŠ‚ç‚¹ã€‚ [Particles2D] 具有一个å‘射器,å¯ä»¥"
+"用于创建å„ç§ç²’å­ç³»ç»Ÿå’Œæ•ˆæžœçš„ 2D ç²’å­èŠ‚ç‚¹ã€‚[Particles2D] 具有一个å‘射器,å¯ä»¥"
"以给定的速率生æˆä¸€å®šæ•°é‡çš„ç²’å­ã€‚\n"
"使用 [code]process_material[/code] 属性添加 [ParticlesMaterial] 以é…置粒å­å¤–"
"观和行为。或者,您å¯ä»¥æ·»åŠ å°†åº”ç”¨äºŽæ‰€æœ‰ç²’å­çš„ [ShaderMaterial]。\n"
@@ -52625,7 +53319,7 @@ msgid ""
"→ Generate Visibility Rect[/b] editor tool."
msgstr ""
"[Rect2] 确定节点的区域,该区域需è¦åœ¨å±å¹•上å¯è§æ‰èƒ½ä½¿ç²’å­ç³»ç»Ÿå¤„于活动状æ€ã€‚\n"
-"如果当节点进入/退出å±å¹•æ—¶ç²’å­çªç„¶å‡ºçް/消失,则增长矩形。 [Rect2] å¯ä»¥é€šè¿‡ä»£ç "
+"如果当节点进入/退出å±å¹•æ—¶ç²’å­çªç„¶å‡ºçް/消失,则增长矩形。[Rect2] å¯ä»¥é€šè¿‡ä»£ç "
"或使用 [b]Particles → Generate Visibility Rect[/b] 编辑器工具生æˆã€‚"
#: doc/classes/ParticlesMaterial.xml
@@ -52647,14 +53341,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定义了粒å­çš„属性和行为。它å¯ç”¨äºŽ[Particles]å’Œ[Particles2D]å‘"
-"射器节点的[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
msgid "Returns [code]true[/code] if the specified flag is enabled."
@@ -52672,7 +53366,7 @@ msgstr "è¿”å›žæŒ‡å®šå‚æ•°ä½¿ç”¨çš„ [Texture]。"
msgid ""
"If [code]true[/code], enables the specified flag. See [enum Flags] for "
"options."
-msgstr "如果[code]true[/code],å¯ç”¨æŒ‡å®šçš„Flag。选项请å‚阅[enum Flags]。"
+msgstr "如果为 [code]true[/code],å¯ç”¨æŒ‡å®šçš„æ ‡å¿—。选项请å‚阅 [enum Flags]。"
#: doc/classes/ParticlesMaterial.xml
msgid "Sets the specified [enum Parameter]."
@@ -52717,15 +53411,15 @@ msgstr ""
#: doc/classes/ParticlesMaterial.xml
msgid "Each particle's angular velocity will vary along this [CurveTexture]."
-msgstr "æ¯ä¸ªç²’å­çš„角速度将沿ç€è¿™ä¸ª[CurveTexture]å˜åŒ–。"
+msgstr "æ¯ä¸ªç²’å­çš„角速度将沿ç€è¿™ä¸ª [CurveTexture] å˜åŒ–。"
#: doc/classes/ParticlesMaterial.xml
msgid "Each particle's animation offset will vary along this [CurveTexture]."
-msgstr "æ¯ä¸ªç²’å­çš„动画å移将沿ç€è¿™ä¸ª[CurveTexture]å˜åŒ–。"
+msgstr "æ¯ä¸ªç²’å­çš„动画å移将沿ç€è¿™ä¸ª [CurveTexture] å˜åŒ–。"
#: doc/classes/ParticlesMaterial.xml
msgid "Each particle's animation speed will vary along this [CurveTexture]."
-msgstr "æ¯ä¸ªç²’å­çš„动画速度将沿ç€è¿™ä¸ª[CurveTexture]å˜åŒ–。"
+msgstr "æ¯ä¸ªç²’å­çš„动画速度将沿ç€è¿™ä¸ª [CurveTexture] å˜åŒ–。"
#: doc/classes/ParticlesMaterial.xml
msgid ""
@@ -52833,12 +53527,12 @@ msgstr "沿 Y è½´çš„ [member spread] é‡ã€‚"
#: doc/classes/ParticlesMaterial.xml
msgid "Each particle's hue will vary along this [CurveTexture]."
-msgstr "æ¯ä¸ªç²’å­çš„色调将沿ç€è¿™ä¸ª[CurveTexture]å˜åŒ–。"
+msgstr "æ¯ä¸ªç²’å­çš„色调将沿ç€è¿™ä¸ª [CurveTexture] å˜åŒ–。"
#: doc/classes/ParticlesMaterial.xml
msgid ""
"Each particle's linear acceleration will vary along this [CurveTexture]."
-msgstr "æ¯ä¸ªç²’å­çš„线性加速度将沿ç€è¿™ä¸ª[CurveTexture]å˜åŒ–。"
+msgstr "æ¯ä¸ªç²’å­çš„线性加速度将沿ç€è¿™ä¸ª [CurveTexture] å˜åŒ–。"
#: doc/classes/ParticlesMaterial.xml
msgid ""
@@ -52852,37 +53546,37 @@ msgstr ""
#: doc/classes/ParticlesMaterial.xml
msgid "Each particle's orbital velocity will vary along this [CurveTexture]."
-msgstr "æ¯ä¸ªç²’å­çš„轨é“速度将沿ç€è¿™ä¸ª[CurveTexture]å˜åŒ–。"
+msgstr "æ¯ä¸ªç²’å­çš„轨é“速度将沿ç€è¿™ä¸ª [CurveTexture] å˜åŒ–。"
#: doc/classes/ParticlesMaterial.xml
msgid ""
"Each particle's radial acceleration will vary along this [CurveTexture]."
-msgstr "æ¯ä¸ªç²’å­çš„径å‘加速度将沿ç€è¿™ä¸ª[CurveTexture]å˜åŒ–。"
+msgstr "æ¯ä¸ªç²’å­çš„径å‘加速度将沿ç€è¿™ä¸ª [CurveTexture] å˜åŒ–。"
#: doc/classes/ParticlesMaterial.xml
msgid "Each particle's scale will vary along this [CurveTexture]."
-msgstr "æ¯ä¸ªç²’å­çš„æ¯”例将沿ç€è¿™ä¸ª[CurveTexture]å˜åŒ–。"
+msgstr "æ¯ä¸ªç²’å­çš„æ¯”例将沿ç€è¿™ä¸ª [CurveTexture] å˜åŒ–。"
#: doc/classes/ParticlesMaterial.xml
msgid ""
"Each particle's tangential acceleration will vary along this [CurveTexture]."
-msgstr "æ¯ä¸ªç²’å­çš„切å‘加速度将沿ç€è¿™ä¸ª[CurveTexture]å˜åŒ–。"
+msgstr "æ¯ä¸ªç²’å­çš„切å‘加速度将沿ç€è¿™ä¸ª [CurveTexture] å˜åŒ–。"
#: doc/classes/ParticlesMaterial.xml
msgid "Trail particles' color will vary along this [GradientTexture]."
-msgstr "轨迹粒å­çš„颜色将沿ç€è¿™ä¸ª[GradientTexture]å˜åŒ–。"
+msgstr "轨迹粒å­çš„颜色将沿ç€è¿™ä¸ª [GradientTexture] å˜åŒ–。"
#: doc/classes/ParticlesMaterial.xml
msgid ""
"Emitter will emit [code]amount[/code] divided by [code]trail_divisor[/code] "
"particles. The remaining particles will be used as trail(s)."
msgstr ""
-"å‘射器将å‘å°„[code]amount[/code]除以[code]trail_visor[/code]的粒å­ã€‚剩下的粒å­"
-"将作为轨迹使用。"
+"å‘射器将å‘å°„ [code]amount[/code] 除以 [code]trail_visor[/code] 的粒å­ã€‚剩下的"
+"ç²’å­å°†ä½œä¸ºè½¨è¿¹ä½¿ç”¨ã€‚"
#: doc/classes/ParticlesMaterial.xml
msgid "Trail particles' size will vary along this [CurveTexture]."
-msgstr "轨迹粒å­çš„大å°å°†æ²¿ç€è¿™ä¸ª[CurveTexture]å˜åŒ–。"
+msgstr "轨迹粒å­çš„大å°å°†æ²¿ç€è¿™ä¸ª [CurveTexture] å˜åŒ–。"
#: doc/classes/ParticlesMaterial.xml
msgid ""
@@ -52998,8 +53692,8 @@ msgid ""
"point on the [member emission_point_texture]. Particle color will be "
"modulated by [member emission_color_texture]."
msgstr ""
-"ç²’å­å°†åœ¨[member emission_point_texture]ä¸Šéšæœºé‡‡æ ·ç‚¹æ‰€å†³å®šçš„ä½ç½®å‘射。粒å­é¢œè‰²"
-"将由[member emission_color_texture]调节。"
+"ç²’å­å°†åœ¨ [member emission_point_texture] ä¸Šéšæœºé‡‡æ ·ç‚¹æ‰€å†³å®šçš„ä½ç½®å‘射。粒å­é¢œ"
+"色将由 [member emission_color_texture] 调节。"
#: doc/classes/ParticlesMaterial.xml
msgid ""
@@ -53008,9 +53702,9 @@ msgid ""
"will be set based on [member emission_normal_texture]. Particle color will "
"be modulated by [member emission_color_texture]."
msgstr ""
-"ç²’å­å°†åœ¨[member emission_point_texture]ä¸Šéšæœºé‡‡æ ·ç‚¹æ‰€å†³å®šçš„ä½ç½®å‘射。粒å­é€Ÿåº¦"
-"和旋转将基于[member emission_normal_texture]进行设置。粒å­é¢œè‰²å°†ç”±[member "
-"emission_color_texture]调节。"
+"ç²’å­å°†åœ¨ [member emission_point_texture] ä¸Šéšæœºé‡‡æ ·ç‚¹æ‰€å†³å®šçš„ä½ç½®å‘射。粒å­é€Ÿ"
+"度和旋转将基于 [member emission_normal_texture] 进行设置。粒å­é¢œè‰²å°†ç”± "
+"[member emission_color_texture] 调节。"
#: doc/classes/Path.xml
msgid "Contains a [Curve3D] path for [PathFollow] nodes to follow."
@@ -53031,15 +53725,15 @@ msgstr ""
#: doc/classes/Path.xml
msgid "A [Curve3D] describing the path."
-msgstr "A [Curve3D]æè¿°è·¯å¾„。"
+msgstr "æè¿°è·¯å¾„çš„ [Curve3D]。"
#: doc/classes/Path.xml
msgid "Emitted when the [member curve] changes."
-msgstr "当[member curve]æ”¹å˜æ—¶è§¦å‘。"
+msgstr "当 [member curve] æ”¹å˜æ—¶è§¦å‘。"
#: doc/classes/Path2D.xml
msgid "Contains a [Curve2D] path for [PathFollow2D] nodes to follow."
-msgstr "包å«ä¸€ä¸ª[Curve2D]路径,供[PathFollow2D]节点éµå¾ªã€‚"
+msgstr "包å«ä¸€ä¸ª [Curve2D] 路径,供 [PathFollow2D] 节点éµå¾ªã€‚"
#: doc/classes/Path2D.xml
msgid ""
@@ -53049,14 +53743,14 @@ msgid ""
"of [PathFollow2D]). As such, the curve should usually start with a zero "
"vector ([code](0, 0)[/code])."
msgstr ""
-"å¯ä»¥è®©[PathFollow2D]å­èŠ‚ç‚¹æ²¿ç€[Curve2D]移动。有关用法的更多信æ¯ï¼Œè¯·å‚阅"
+"å¯ä»¥è®© [PathFollow2D] å­èŠ‚ç‚¹æ²¿ç€ [Curve2D] 移动。有关用法的更多信æ¯ï¼Œè¯·å‚阅 "
"[PathFollow2D]。\n"
-"[b]注:[/b]该路径被认为是相对于移动的节点([PathFollow2D]çš„å­èŠ‚ç‚¹)。因此,曲线"
-"通常以零å‘é‡([code](0,0)[/code])开始。"
+"[b]注æ„:[/b]该路径被认为是相对于移动的节点([PathFollow2D] çš„å­èŠ‚ç‚¹ï¼‰ã€‚å› "
+"此,曲线通常以零å‘é‡ï¼ˆ[code](0,0)[/code])开始。"
#: doc/classes/Path2D.xml
msgid "A [Curve2D] describing the path."
-msgstr "A [Curve2D]æè¿°è·¯å¾„。"
+msgstr "æè¿°è·¯å¾„çš„ [Curve2D]。"
#: doc/classes/PathFollow.xml
msgid "Point sampler for a [Path]."
@@ -53089,10 +53783,11 @@ 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"
-"沿ç€[Path]çš„[Curve3D]的点在使用å‰è¢«é¢„计算,以加快计算。而åŽï¼Œåœ¨ç¡®å®šåç§»é‡ä¸Šçš„"
-"点会在两个相邻的缓存点之间进行æ’值计算。如果曲线有急转弯,这å¯èƒ½ä¼šäº§ç”Ÿä¸€ä¸ªé—®"
-"题,因为缓存的点å¯èƒ½ä¸ä¼šè¶³å¤Ÿç´§è·Ÿæ›²çº¿ã€‚\n"
+"如果为 [code]true[/code],两个缓存的点之间的ä½ç½®æ˜¯ç«‹æ–¹æ’值,å¦åˆ™æ˜¯çº¿æ€§æ’"
+"值。\n"
+"æ²¿ç€ [Path] çš„ [Curve3D] 的点在使用å‰è¢«é¢„计算,以加快计算。而åŽï¼Œåœ¨ç¡®å®šåç§»é‡"
+"上的点会在两个相邻的缓存点之间进行æ’值计算。如果曲线有急转弯,这å¯èƒ½ä¼šäº§ç”Ÿä¸€"
+"个问题,因为缓存的点å¯èƒ½ä¸ä¼šè¶³å¤Ÿç´§è·Ÿæ›²çº¿ã€‚\n"
"这个问题有两个答案:è¦ä¹ˆå¢žåŠ ç¼“å­˜ç‚¹çš„æ•°é‡ï¼Œä»£ä»·æ˜¯å¢žåŠ å†…å­˜æ¶ˆè€—ï¼›è¦ä¹ˆåœ¨ä¸¤ä¸ªç‚¹ä¹‹"
"间进行立方æ’å€¼ï¼Œä»£ä»·æ˜¯è®¡ç®—é€Ÿåº¦ç¨æ…¢ã€‚"
@@ -53105,8 +53800,8 @@ 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 ""
-"如果[code]true[/code],路径长度以外的任何åç§»éƒ½å°†çŽ¯ç»•ï¼Œè€Œä¸æ˜¯åœ¨ç»“æŸæ—¶åœæ­¢ã€‚对"
-"于循环路径使用它。"
+"如果为 [code]true[/code],路径长度以外的任何åç§»éƒ½å°†çŽ¯ç»•ï¼Œè€Œä¸æ˜¯åœ¨ç»“æŸæ—¶åœ"
+"止。对于循环路径使用它。"
#: doc/classes/PathFollow.xml
msgid ""
@@ -53121,7 +53816,7 @@ msgid ""
"Allows or forbids rotation on one or more axes, depending on the [enum "
"RotationMode] constants being used."
msgstr ""
-"å…è®¸æˆ–ç¦æ­¢åœ¨ä¸€ä¸ªæˆ–多个轴上旋转,这å–决于使用的[enum RotationMode]常é‡ã€‚"
+"å…è®¸æˆ–ç¦æ­¢åœ¨ä¸€ä¸ªæˆ–多个轴上旋转,这å–决于使用的 [enum RotationMode] 常é‡ã€‚"
#: doc/classes/PathFollow.xml
msgid ""
@@ -53130,8 +53825,8 @@ msgid ""
"the path, as the offset supplied is multiplied internally by the path's "
"length."
msgstr ""
-"到第一个顶点的è·ç¦»ï¼Œå°†0.0作为第一个顶点,1.0作为最åŽä¸€ä¸ªé¡¶ç‚¹ã€‚è¿™åªæ˜¯è¡¨ç¤ºè·¯å¾„"
-"内åç§»é‡çš„å¦ä¸€ç§æ–¹å¼ï¼Œå› ä¸ºæä¾›çš„åç§»é‡åœ¨å†…部乘以路径的长度。"
+"到第一个顶点的è·ç¦»ï¼Œå°† 0.0 作为第一个顶点,1.0 作为最åŽä¸€ä¸ªé¡¶ç‚¹ã€‚è¿™åªæ˜¯è¡¨ç¤ºè·¯"
+"径内åç§»é‡çš„å¦ä¸€ç§æ–¹å¼ï¼Œå› ä¸ºæä¾›çš„åç§»é‡åœ¨å†…部乘以路径的长度。"
#: doc/classes/PathFollow.xml doc/classes/PathFollow2D.xml
msgid "The node's offset perpendicular to the curve."
@@ -53164,7 +53859,7 @@ msgstr ""
#: doc/classes/PathFollow2D.xml
msgid "Point sampler for a [Path2D]."
-msgstr "对[Path2D]çš„ç‚¹å–æ ·çš„å–æ ·å™¨ã€‚"
+msgstr "对 [Path2D] çš„ç‚¹å–æ ·çš„å–æ ·å™¨ã€‚"
#: doc/classes/PathFollow2D.xml
msgid ""
@@ -53175,8 +53870,8 @@ msgid ""
"descendant nodes will then move accordingly when setting an offset in this "
"node."
msgstr ""
-"这个节点接å—它的父节点[Path2D]ï¼Œå¹¶è¿”å›žå…¶ä¸­ä¸€ä¸ªç‚¹çš„åæ ‡(给定到第一个顶点的è·"
-"离)。\n"
+"这个节点接å—它的父节点 [Path2D] å¹¶è¿”å›žå…¶ä¸­ä¸€ä¸ªç‚¹çš„åæ ‡ï¼Œéœ€è¦ç»™å®šåˆ°ç¬¬ä¸€ä¸ªé¡¶ç‚¹"
+"çš„è·ç¦»ã€‚\n"
"在ä¸ç¼–ç ç§»åŠ¨æ¨¡å¼çš„æƒ…况下,它å¯ä»¥ä½¿å…¶ä»–节点éµå¾ªä¸€æ¡è·¯å¾„。因此,节点必须是这个"
"节点的å­èŠ‚ç‚¹ã€‚å½“åœ¨è¯¥èŠ‚ç‚¹ä¸­è®¾ç½®åç§»é‡æ—¶ï¼ŒåŽä»£èŠ‚ç‚¹å°†ç›¸åº”åœ°ç§»åŠ¨ã€‚"
@@ -53226,8 +53921,9 @@ msgid ""
"offset within the path, as the offset supplied is multiplied internally by "
"the path's length."
msgstr ""
-"在0.0(第一个顶点)到1.0(最åŽä¸€ä¸ªé¡¶ç‚¹)的范围内,沿ç€è·¯å¾„çš„è·ç¦»ä¸ºä¸€ä¸ªæ•°å­—。这åª"
-"是表示路径内åç§»é‡çš„å¦ä¸€ç§æ–¹å¼ï¼Œå› ä¸ºæä¾›çš„åç§»é‡åœ¨å†…部乘以路径的长度。"
+"在 0.0(第一个顶点)到 1.0(最åŽä¸€ä¸ªé¡¶ç‚¹ï¼‰çš„范围内,沿ç€è·¯å¾„çš„è·ç¦»ä¸ºä¸€ä¸ªæ•°"
+"å­—ã€‚è¿™åªæ˜¯è¡¨ç¤ºè·¯å¾„内åç§»é‡çš„å¦ä¸€ç§æ–¹å¼ï¼Œå› ä¸ºæä¾›çš„åç§»é‡åœ¨å†…部乘以路径的长"
+"度。"
#: doc/classes/PCKPacker.xml
msgid "Creates packages that can be loaded into a running project."
@@ -53246,24 +53942,24 @@ msgid ""
"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 ""
-"[PCKPacker]用于创建å¯ä»¥é€šè¿‡[method ProjectSettings.load_resource_pack]加载到"
-"正在è¿è¡Œçš„项目中的包。\n"
+"[PCKPacker] 用于创建å¯ä»¥é€šè¿‡ [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"
-"上é¢çš„[PCKPacker]创建包[code]test.pck[/code],然åŽåœ¨åŒ…的根目录中添加一个å为"
-"[code]text.txt[/code]的文件。"
+"上é¢çš„ [PCKPacker] 创建包 [code]test.pck[/code],然åŽåœ¨åŒ…的根目录中添加一个å"
+"为 [code]text.txt[/code] 的文件。"
#: doc/classes/PCKPacker.xml
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 ""
-"å°†[code]source_path[/code]文件添加到当å‰PCK包的[code]pck_path[/code]内部路径"
-"(应该以[code]res://[/code]开始)。"
+"å°† [code]source_path[/code] æ–‡ä»¶æ·»åŠ åˆ°å½“å‰ PCK 包的 [code]pck_path[/code] 内"
+"部路径(应该以 [code]res://[/code] 开头)。"
#: doc/classes/PCKPacker.xml
msgid ""
@@ -53271,8 +53967,8 @@ msgid ""
"flush. If [code]verbose[/code] is [code]true[/code], a list of files added "
"will be printed to the console for easier debugging."
msgstr ""
-"自上次刷新以æ¥ï¼Œä½¿ç”¨æ‰€æœ‰[method add_file]调用写入指定的文件。如果"
-"[code]verbose[/code]为 [code]true[/code],添加的文件列表将被打å°åˆ°æŽ§åˆ¶å°ï¼Œä»¥"
+"自上次刷新以æ¥ï¼Œä½¿ç”¨æ‰€æœ‰ [method add_file] 调用写入指定的文件。如果 "
+"[code]verbose[/code] 为 [code]true[/code],添加的文件列表将被打å°åˆ°æŽ§åˆ¶å°ï¼Œä»¥"
"便于调试。"
#: doc/classes/PCKPacker.xml
@@ -53281,8 +53977,9 @@ msgid ""
"code] file extension isn't added automatically, so it should be part of "
"[code]pck_name[/code] (even though it's not required)."
msgstr ""
-"创建一个å为[code]pck_name[/code]的新PCK文件。[code].Pck[/code]文件扩展åä¸ä¼š"
-"自动添加,所以它应该是[code]pck_name[/code]的一部分(å³ä½¿å®ƒä¸æ˜¯å¿…需的)。"
+"创建一个å为 [code]pck_name[/code] 的新 PCK 文件。ä¸ä¼šè‡ªåŠ¨æ·»åŠ  [code].pck[/"
+"code] 文件扩展å,所以它应该是 [code]pck_name[/code] 的一部分(å³ä½¿å®ƒä¸æ˜¯å¿…需"
+"的)。"
#: doc/classes/Performance.xml
msgid "Exposes performance-related data."
@@ -53317,10 +54014,9 @@ msgid ""
"console\n"
"[/codeblock]"
msgstr ""
-"返回一个å¯ç”¨ç›‘视器的值。你应该æä¾›ä¸€ä¸ª[enum Monitor]常é‡ä½œä¸ºå‚数,åƒè¿™æ ·:\n"
+"返回一个å¯ç”¨ç›‘视器的值。你应该æä¾›ä¸€ä¸ª [enum Monitor] 常é‡ä½œä¸ºå‚数,åƒè¿™æ ·:\n"
"[codeblock]\n"
-"print(Performance.get_monitor(Performance.TIME_FPS)) # Prints the FPS to the "
-"console\n"
+"print(Performance.get_monitor(Performance.TIME_FPS)) # 在终端中输出 FPS\n"
"[/codeblock]"
#: doc/classes/Performance.xml
@@ -53358,12 +54054,12 @@ 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
msgid "Number of objects currently instanced (including nodes)."
-msgstr "当å‰å®žä¾‹åŒ–的对象数é‡(包括节点)。"
+msgstr "当å‰å®žä¾‹åŒ–的对象数é‡ï¼ˆåŒ…括节点)。"
#: doc/classes/Performance.xml
msgid "Number of resources currently used."
@@ -53387,23 +54083,23 @@ msgstr "æ¯å¸§ç»˜åˆ¶3D对象的数é‡ã€‚"
#: doc/classes/Performance.xml
msgid "Vertices drawn per frame. 3D only."
-msgstr "æ¯å¸§ç»˜åˆ¶çš„顶点数。åªåœ¨3D中有效。"
+msgstr "æ¯å¸§ç»˜åˆ¶çš„顶点数。åªåœ¨ 3D 中有效。"
#: doc/classes/Performance.xml
msgid "Material changes per frame. 3D only."
-msgstr "æ¯ä¸€å¸§çš„æè´¨å˜åŒ–。仅é™3D。"
+msgstr "æ¯ä¸€å¸§çš„æè´¨å˜åŒ–ã€‚ä»…é™ 3D。"
#: doc/classes/Performance.xml
msgid "Shader changes per frame. 3D only."
-msgstr "æ¯ä¸€å¸§çš„ç€è‰²å™¨å˜åŒ–。仅é™3D。"
+msgstr "æ¯ä¸€å¸§çš„ç€è‰²å™¨å˜åŒ–ã€‚ä»…é™ 3D。"
#: doc/classes/Performance.xml
msgid "Render surface changes per frame. 3D only."
-msgstr "æ¯å¸§æ¸²æŸ“é¢çš„å˜åŒ–。仅3D中有效。"
+msgstr "æ¯å¸§æ¸²æŸ“é¢çš„å˜åŒ–。仅 3D 中有效。"
#: doc/classes/Performance.xml
msgid "Draw calls per frame. 3D only."
-msgstr "æ¯ä¸€å¸§çš„绘图调用。仅é™3D。"
+msgstr "æ¯ä¸€å¸§çš„ç»˜å›¾è°ƒç”¨ã€‚ä»…é™ 3D。"
#: doc/classes/Performance.xml
msgid "Items or joined items drawn per frame."
@@ -53433,15 +54129,15 @@ msgstr "在 GLES2 å’Œ GLES3 渲染åŽç«¯ä¸­æœªå®žçŽ°ï¼Œå§‹ç»ˆè¿”å›ž 0。"
#: doc/classes/Performance.xml
msgid "Number of active [RigidBody2D] nodes in the game."
-msgstr "游æˆä¸­æ´»è·ƒçš„[RigidBody2D]节点数é‡ã€‚"
+msgstr "游æˆä¸­æ´»è·ƒçš„ [RigidBody2D] 节点数é‡ã€‚"
#: doc/classes/Performance.xml
msgid "Number of collision pairs in the 2D physics engine."
-msgstr "2D物ç†å¼•擎中的碰撞对数é‡ã€‚"
+msgstr "2D 物ç†å¼•擎中的碰撞对数é‡ã€‚"
#: doc/classes/Performance.xml
msgid "Number of islands in the 2D physics engine."
-msgstr "2D物ç†å¼•擎中的岛屿数é‡ã€‚"
+msgstr "2D 物ç†å¼•擎中的岛屿数é‡ã€‚"
#: doc/classes/Performance.xml
msgid "Number of active [RigidBody] and [VehicleBody] nodes in the game."
@@ -53449,19 +54145,19 @@ msgstr "游æˆä¸­æ´»åŠ¨çš„ [RigidBody] å’Œ [VehicleBody] 节点的数é‡ã€‚"
#: doc/classes/Performance.xml
msgid "Number of collision pairs in the 3D physics engine."
-msgstr "3D物ç†å¼•擎中的碰撞对数é‡ã€‚"
+msgstr "3D 物ç†å¼•擎中的碰撞对数é‡ã€‚"
#: doc/classes/Performance.xml
msgid "Number of islands in the 3D physics engine."
-msgstr "3D物ç†å¼•擎中的岛屿数é‡ã€‚"
+msgstr "3D 物ç†å¼•擎中的岛屿数é‡ã€‚"
#: doc/classes/Performance.xml
msgid "Output latency of the [AudioServer]."
-msgstr "[AudioServer]的输出延迟。"
+msgstr "[AudioServer] 的输出延迟。"
#: doc/classes/Performance.xml
msgid "Represents the size of the [enum Monitor] enum."
-msgstr "表示[enum Monitor] enum的大å°ã€‚"
+msgstr "表示 [enum Monitor] 枚举的大å°ã€‚"
#: doc/classes/PHashTranslation.xml
msgid "Optimized translation."
@@ -53471,13 +54167,13 @@ msgstr "优化的翻译。"
msgid ""
"Optimized translation. Uses real-time compressed translations, which results "
"in very small dictionaries."
-msgstr "优化翻译。使用实时压缩翻译,从而生æˆéžå¸¸å°çš„è¯å…¸ã€‚"
+msgstr "优化的翻译。使用实时压缩翻译,从而生æˆéžå¸¸å°çš„è¯å…¸ã€‚"
#: doc/classes/PHashTranslation.xml
msgid ""
"Generates and sets an optimized translation from the given [Translation] "
"resource."
-msgstr "从给定的[Translation]资æºç”Ÿæˆå¹¶è®¾ç½®ä¼˜åŒ–的翻译。"
+msgstr "从给定的 [Translation] 资æºç”Ÿæˆå¹¶è®¾ç½®ä¼˜åŒ–的翻译。"
#: doc/classes/Physics2DDirectBodyState.xml
msgid "Direct access object to a physics body in the [Physics2DServer]."
@@ -53544,7 +54240,7 @@ msgstr "返回碰撞体的[RID]。"
#: doc/classes/Physics2DDirectBodyState.xml
#: doc/classes/PhysicsDirectBodyState.xml
msgid "Returns the collider's object id."
-msgstr "返回碰撞体的对象id。"
+msgstr "返回碰撞体的对象 id。"
#: doc/classes/Physics2DDirectBodyState.xml
msgid ""
@@ -53570,8 +54266,8 @@ msgid ""
"[method Object.get_meta], and is set with [method Physics2DServer."
"shape_set_data]."
msgstr ""
-"返回碰撞形状的元数æ®ã€‚这个元数æ®ä¸åŒäºŽ[method Object.get_meta],是用[method "
-"Physics2DServer.shape_set_data]设置的。"
+"返回碰撞形状的元数æ®ã€‚这个元数æ®ä¸åŒäºŽ [method Object.get_meta],是用 "
+"[method Physics2DServer.shape_set_data] 设置的。"
#: doc/classes/Physics2DDirectBodyState.xml
#: doc/classes/PhysicsDirectBodyState.xml
@@ -53641,12 +54337,12 @@ msgstr "物体的线性速度,å•ä½ä¸ºåƒç´ æ¯ç§’。"
#: doc/classes/Physics2DDirectBodyState.xml
#: doc/classes/PhysicsDirectBodyState.xml
msgid "If [code]true[/code], this body is currently sleeping (not active)."
-msgstr "如果[code]true[/code],则该物体当å‰å¤„于ç¡çœ çжæ€(䏿´»åЍ)。"
+msgstr "如果为 [code]true[/code],则该物体当å‰å¤„于ç¡çœ çжæ€ï¼ˆä¸æ´»åŠ¨ï¼‰ã€‚"
#: doc/classes/Physics2DDirectBodyState.xml
#: doc/classes/PhysicsDirectBodyState.xml
msgid "The timestep (delta) used for the simulation."
-msgstr "用于模拟的时间步长(delta)。"
+msgstr "用于模拟的时间步长(delta)。"
#: doc/classes/Physics2DDirectBodyState.xml
#: doc/classes/PhysicsDirectBodyState.xml
@@ -53674,15 +54370,15 @@ msgstr "ç‰©ä½“çš„å˜æ¢çŸ©é˜µã€‚"
#: doc/classes/Physics2DDirectSpaceState.xml
msgid "Direct access object to a space in the [Physics2DServer]."
-msgstr "直接访问[Physics2DServer]中的空间的对象。"
+msgstr "直接访问 [Physics2DServer] 中的空间的对象。"
#: doc/classes/Physics2DDirectSpaceState.xml
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 ""
-"直接访问[Physics2DServer]中的空间的对象。它主è¦ç”¨äºŽå¯¹ä½äºŽç»™å®šç©ºé—´ä¸­çš„对象和区"
-"域进行查询。"
+"直接访问 [Physics2DServer] 中的空间的对象。它主è¦ç”¨äºŽå¯¹ä½äºŽç»™å®šç©ºé—´ä¸­çš„对象和"
+"区域进行查询。"
#: doc/classes/Physics2DDirectSpaceState.xml
msgid ""
@@ -53894,7 +54590,7 @@ msgstr ""
#: doc/classes/Physics2DServer.xml
msgid "Server interface for low-level 2D physics access."
-msgstr "用于底层2D物ç†è®¿é—®æœåŠ¡çš„æŽ¥å£ã€‚"
+msgstr "用于底层 2D 物ç†è®¿é—®æœåŠ¡çš„æŽ¥å£ã€‚"
#: doc/classes/Physics2DServer.xml
msgid ""
@@ -53935,17 +54631,17 @@ msgstr ""
#: doc/classes/Physics2DServer.xml doc/classes/PhysicsServer.xml
msgid "Gets the instance ID of the object the area is assigned to."
-msgstr "获å–区域分é…给的对象的实例ID。"
+msgstr "获å–区域分é…给的对象的实例 ID。"
#: doc/classes/Physics2DServer.xml
msgid ""
"Returns an area parameter value. See [enum AreaParameter] for a list of "
"available parameters."
-msgstr "è¿”å›žåŒºåŸŸå‚æ•°å€¼ã€‚有关å¯ç”¨å‚数的列表,请å‚阅[enum AreaParameter]。"
+msgstr "è¿”å›žåŒºåŸŸå‚æ•°å€¼ã€‚有关å¯ç”¨å‚数的列表,请å‚阅 [enum AreaParameter]。"
#: doc/classes/Physics2DServer.xml doc/classes/PhysicsServer.xml
msgid "Returns the [RID] of the nth shape of an area."
-msgstr "返回区域的第n个形状的[RID]。"
+msgstr "返回区域的第 n 个形状的 [RID]。"
#: doc/classes/Physics2DServer.xml doc/classes/PhysicsServer.xml
msgid "Returns the number of shapes assigned to an area."
@@ -54032,8 +54728,8 @@ msgid ""
"Sets the space override mode for the area. See [enum AreaSpaceOverrideMode] "
"for a list of available modes."
msgstr ""
-"为该区域设置空间覆盖模å¼ã€‚请å‚阅[enum AreaSpaceOverrideMode]获å–å¯ç”¨æ¨¡å¼çš„列"
-"表。"
+"为该区域设置空间覆盖模å¼ã€‚请å‚阅 [enum AreaSpaceOverrideMode] 获å–å¯ç”¨æ¨¡å¼çš„"
+"列表。"
#: doc/classes/Physics2DServer.xml doc/classes/PhysicsServer.xml
msgid "Sets the transform matrix for an area."
@@ -54050,9 +54746,9 @@ msgid ""
"in global coordinates. A force differs from an impulse in that, while the "
"two are forces, the impulse clears itself after being applied."
msgstr ""
-"在施加的力和扭矩上添加一个有作用点的力。与[method body_apply_impulse]一样,力"
-"和物体原点的åç§»é‡éƒ½åœ¨å…¨å±€å标中。力与冲é‡çš„ä¸åŒä¹‹å¤„在于,虽然两者都是力,但"
-"冲é‡åœ¨è¢«æ–½åŠ åŽä¼šè‡ªåŠ¨æ¸…é™¤ã€‚"
+"在施加的力和扭矩上添加一个有作用点的力。与 [method body_apply_impulse] 一样,"
+"力和物体原点的åç§»é‡éƒ½åœ¨å…¨å±€å标中。力与冲é‡çš„ä¸åŒä¹‹å¤„在于,虽然两者都是力,"
+"但冲é‡åœ¨è¢«æ–½åŠ åŽä¼šè‡ªåŠ¨æ¸…é™¤ã€‚"
#: doc/classes/Physics2DServer.xml doc/classes/PhysicsServer.xml
msgid ""
@@ -54102,7 +54798,7 @@ msgstr ""
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 doc/classes/PhysicsServer.xml
msgid "Returns the body mode."
@@ -54112,11 +54808,11 @@ msgstr "返回物体模å¼ã€‚"
msgid ""
"Returns the value of a body parameter. See [enum BodyParameter] for a list "
"of available parameters."
-msgstr "è¿”å›žç‰©ä½“å‚æ•°çš„值。请å‚阅[enum BodyParameter]获å–å¯ç”¨å‚数列表。"
+msgstr "è¿”å›žç‰©ä½“å‚æ•°çš„值。请å‚阅 [enum BodyParameter] 获å–å¯ç”¨å‚数列表。"
#: doc/classes/Physics2DServer.xml doc/classes/PhysicsServer.xml
msgid "Returns the [RID] of the nth shape of a body."
-msgstr "返回body的第n个碰撞形状的[RID]。"
+msgstr "返回 body 的第 n 个碰撞形状的 [RID]。"
#: doc/classes/Physics2DServer.xml doc/classes/PhysicsServer.xml
msgid "Returns the number of shapes assigned to a body."
@@ -54132,7 +54828,7 @@ msgstr "è¿”å›žç‰©ä½“ç¢°æ’žå½¢çŠ¶çš„å˜æ¢çŸ©é˜µã€‚"
#: doc/classes/Physics2DServer.xml doc/classes/PhysicsServer.xml
msgid "Returns the [RID] of the space assigned to a body."
-msgstr "返回分é…给物体的空间的[RID]。"
+msgstr "返回分é…给物体的空间的 [RID]。"
#: doc/classes/Physics2DServer.xml doc/classes/PhysicsServer.xml
msgid "Returns a body state."
@@ -54143,8 +54839,8 @@ msgid ""
"Returns whether a body uses a callback function to calculate its own physics "
"(see [method body_set_force_integration_callback])."
msgstr ""
-"返回一个body是å¦ä½¿ç”¨å›žè°ƒå‡½æ•°æ¥è®¡ç®—它自己的物ç†å€¼(å‚阅"
-"body_set_force_integration_callback方法)。"
+"返回一个 body 是å¦ä½¿ç”¨å›žè°ƒå‡½æ•°æ¥è®¡ç®—它自己的物ç†å€¼ï¼ˆè§ [method "
+"body_set_force_integration_callback])。"
#: doc/classes/Physics2DServer.xml
msgid "Removes a body from the list of bodies exempt from collisions."
@@ -54181,7 +54877,7 @@ msgid ""
"Continuous collision detection tries to predict where a moving body will "
"collide, instead of moving it and correcting its movement if it collided."
msgstr ""
-"设置使用[enum CCDMode]常é‡ä¹‹ä¸€çš„连续碰撞检测模å¼ã€‚\n"
+"设置使用 [enum CCDMode] 常é‡ä¹‹ä¸€çš„连续碰撞检测模å¼ã€‚\n"
"连续碰撞检测试图预测一个è¿åŠ¨ä½“å°†åœ¨å“ªé‡Œå‘ç”Ÿç¢°æ’žï¼Œè€Œä¸æ˜¯ç§»åŠ¨å®ƒå¹¶åœ¨å®ƒå‘生碰撞时"
"纠正其è¿åŠ¨ã€‚"
@@ -54204,14 +54900,14 @@ msgstr ""
#: doc/classes/Physics2DServer.xml
msgid "Sets the body mode using one of the [enum BodyMode] constants."
-msgstr "使用[enum BodyMode]常é‡ä¹‹ä¸€è®¾ç½®body模å¼ã€‚"
+msgstr "使用 [enum BodyMode] 常é‡ä¹‹ä¸€è®¾ç½® body 模å¼ã€‚"
#: doc/classes/Physics2DServer.xml doc/classes/PhysicsServer.xml
msgid ""
"Sets whether a body uses a callback function to calculate its own physics "
"(see [method body_set_force_integration_callback])."
msgstr ""
-"设置一个物体是å¦ä½¿ç”¨å›žè°ƒå‡½æ•°æ¥è®¡ç®—它自己的物ç†ï¼ˆå‚阅 [method "
+"设置一个物体是å¦ä½¿ç”¨å›žè°ƒå‡½æ•°æ¥è®¡ç®—它自己的物ç†ï¼ˆè§ [method "
"body_set_force_integration_callback])。"
#: doc/classes/Physics2DServer.xml
@@ -54225,26 +54921,27 @@ msgid ""
"Substitutes a given body shape by another. The old shape is selected by its "
"index, the new one by its [RID]."
msgstr ""
-"用一个给定的物体形状代替å¦ä¸€ä¸ªã€‚旧的形状是通过其索引选择的,新的是通过其[RID]"
-"选择的。"
+"用一个给定的物体形状代替å¦ä¸€ä¸ªã€‚旧的形状是通过其索引选择的,新的是通过其 "
+"[RID] 选择的。"
#: doc/classes/Physics2DServer.xml
msgid ""
"Enables one way collision on body if [code]enable[/code] is [code]true[/"
"code]."
-msgstr "如果[code]enable[/code]为 [code]true[/code],则在body上å¯ç”¨å•å‘碰撞。"
+msgstr ""
+"如果 [code]enable[/code] 为 [code]true[/code],则在 body 上å¯ç”¨å•å‘碰撞。"
#: doc/classes/Physics2DServer.xml
msgid "Disables shape in body if [code]disable[/code] is [code]true[/code]."
-msgstr "如果[code]disable[/code]为 [code]true[/code],则在body中ç¦ç”¨å½¢çŠ¶ã€‚"
+msgstr "如果 [code]disable[/code] 为 [code]true[/code],则在 body 中ç¦ç”¨å½¢çŠ¶ã€‚"
#: doc/classes/Physics2DServer.xml
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 ""
-"设置一个体中的形状的元数æ®ã€‚这个元数æ®ä¸Ž[method Object.set_meta]ä¸åŒï¼Œå¯ä»¥åœ¨"
-"形状查询中检索。"
+"设置一个体中的形状的元数æ®ã€‚这个元数æ®ä¸Ž [method Object.set_meta] ä¸åŒï¼Œå¯ä»¥"
+"在形状查询中检索。"
#: doc/classes/Physics2DServer.xml doc/classes/PhysicsServer.xml
msgid "Sets the transform matrix for a body shape."
@@ -54252,7 +54949,7 @@ msgstr "è®¾ç½®ç‰©ä½“å½¢çŠ¶çš„å˜æ¢çŸ©é˜µã€‚"
#: doc/classes/Physics2DServer.xml doc/classes/PhysicsServer.xml
msgid "Assigns a space to the body (see [method space_create])."
-msgstr "给物体分é…一个空间(å‚阅 [method space_create])。"
+msgstr "给物体分é…ä¸€ä¸ªç©ºé—´ï¼ˆè§ [method space_create])。"
#: doc/classes/Physics2DServer.xml
msgid ""
@@ -54271,7 +54968,7 @@ msgid ""
"can be passed to return additional information in."
msgstr ""
"如果从空间中的给定点沿给定方å‘移动会导致碰撞,则返回 [code]true[/code]。边è·"
-"增加了碰撞检测中涉åŠçš„形状的大å°ã€‚ 通过返回[Physics2DTestMotionResult] å¯ä»¥é™„"
+"增加了碰撞检测中涉åŠçš„形状的大å°ã€‚通过返回[Physics2DTestMotionResult] å¯ä»¥é™„"
"加信æ¯ã€‚"
#: doc/classes/Physics2DServer.xml
@@ -54289,7 +54986,8 @@ msgstr "è¿”å›žé˜»å°¼å¼¹ç°§å…³èŠ‚å‚æ•°å€¼ã€‚"
msgid ""
"Sets a damped spring joint parameter. See [enum DampedStringParam] for a "
"list of available parameters."
-msgstr "è®¾ç½®é˜»å°¼å¼¹ç°§å…³èŠ‚å‚æ•°ã€‚å‚阅[enum DampedStringParam]获å–å¯ç”¨å‚数的列表。"
+msgstr ""
+"è®¾ç½®é˜»å°¼å¼¹ç°§å…³èŠ‚å‚æ•°ã€‚å‚阅 [enum DampedStringParam] 获å–å¯ç”¨å‚数的列表。"
#: doc/classes/Physics2DServer.xml
msgid ""
@@ -54305,7 +55003,7 @@ msgid ""
"Returns information about the current state of the 2D physics engine. See "
"[enum ProcessInfo] for a list of available states."
msgstr ""
-"返回关于2D物ç†å¼•擎当å‰çжæ€çš„ä¿¡æ¯ã€‚有关å¯ç”¨çжæ€åˆ—表,请å‚阅[enum "
+"返回关于 2D 物ç†å¼•擎当å‰çжæ€çš„ä¿¡æ¯ã€‚有关å¯ç”¨çжæ€åˆ—表,请å‚阅 [enum "
"ProcessInfo]。"
#: doc/classes/Physics2DServer.xml
@@ -54320,7 +55018,7 @@ msgstr "è¿”å›žå…³èŠ‚å‚æ•°çš„值。"
#: doc/classes/Physics2DServer.xml
msgid "Returns a joint's type (see [enum JointType])."
-msgstr "返回一个关节的类型(è§[enum JointType])。"
+msgstr "è¿”å›žä¸€ä¸ªå…³èŠ‚çš„ç±»åž‹ï¼ˆè§ [enum JointType])。"
#: doc/classes/Physics2DServer.xml
msgid ""
@@ -54356,14 +55054,14 @@ msgstr "返回形状数æ®ã€‚"
#: doc/classes/Physics2DServer.xml
msgid "Returns a shape's type (see [enum ShapeType])."
-msgstr "返回一个形状的类型(å‚阅[enum ShapeType])。"
+msgstr "è¿”å›žä¸€ä¸ªå½¢çŠ¶çš„ç±»åž‹ï¼ˆè§ [enum ShapeType])。"
#: doc/classes/Physics2DServer.xml doc/classes/PhysicsServer.xml
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 ""
-"设置定义形状和大å°çš„形状数æ®ã€‚è¦ä¼ é€’的数æ®å–决于创建的形状的类型[method "
+"设置定义形状和大å°çš„形状数æ®ã€‚è¦ä¼ é€’的数æ®å–决于创建的形状的类型 [method "
"shape_get_type]。"
#: doc/classes/Physics2DServer.xml doc/classes/PhysicsServer.xml
@@ -54372,9 +55070,9 @@ msgid ""
"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 ""
-"创建一个空间。空间是物ç†å¼•æ“Žçš„å‚æ•°é›†åˆï¼Œå¯ä»¥åˆ†é…给区域或主体。它å¯ä»¥é€šè¿‡"
-"[method area_set_space]分é…给一个区域,或者通过[method body_set_space]分é…ç»™"
-"一个主体。"
+"创建一个空间。空间是物ç†å¼•æ“Žçš„å‚æ•°é›†åˆï¼Œå¯ä»¥åˆ†é…给区域或主体。它å¯ä»¥é€šè¿‡ "
+"[method area_set_space] 分é…给一个区域,或者通过 [method body_set_space] 分é…"
+"给一个主体。"
#: doc/classes/Physics2DServer.xml
msgid ""
@@ -54401,7 +55099,7 @@ msgstr "将空间标记为活动空间。它ä¸ä¼šæœ‰æ•ˆæžœï¼Œé™¤éžå®ƒè¢«åˆ†é…
msgid ""
"Sets the value for a space parameter. See [enum SpaceParameter] for a list "
"of available parameters."
-msgstr "è®¾ç½®ç©ºé—´å‚æ•°çš„值。å‚阅[enum SpaceParameter]获å–å¯ç”¨å‚数列表。"
+msgstr "è®¾ç½®ç©ºé—´å‚æ•°çš„值。å‚阅 [enum SpaceParameter] 获å–å¯ç”¨å‚数列表。"
#: doc/classes/Physics2DServer.xml doc/classes/PhysicsServer.xml
msgid ""
@@ -54659,7 +55357,7 @@ msgstr "常é‡ï¼Œç”¨äºŽè®¾ç½®/获å–物体的角度阻尼系数。"
#: doc/classes/Physics2DServer.xml doc/classes/PhysicsServer.xml
msgid "Represents the size of the [enum BodyParameter] enum."
-msgstr "表示[enum BodyParameter]枚举的大å°ã€‚"
+msgstr "表示 [enum BodyParameter] 枚举的大å°ã€‚"
#: doc/classes/Physics2DServer.xml doc/classes/PhysicsServer.xml
msgid "Constant to set/get the current transform matrix of the body."
@@ -54726,7 +55424,7 @@ msgstr ""
msgid ""
"Enables continuous collision detection by raycasting. It is faster than "
"shapecasting, but less precise."
-msgstr "通过射线投射实现连续的碰撞检测。它比shapecasting更快,但ä¸å¤Ÿç²¾ç¡®ã€‚"
+msgstr "通过射线投射实现连续的碰撞检测。它比 shapecasting 更快,但ä¸å¤Ÿç²¾ç¡®ã€‚"
#: doc/classes/Physics2DServer.xml
msgid ""
@@ -54776,12 +55474,12 @@ msgstr "设置用于碰撞/相交查询的 [Shape2D]。"
#: doc/classes/Physics2DShapeQueryParameters.xml
msgid "If [code]true[/code], the query will take [Area2D]s into account."
-msgstr "如果[code]true[/code],查询将考虑[Area2D]。"
+msgstr "如果为 [code]true[/code],查询将考虑 [Area2D]。"
#: doc/classes/Physics2DShapeQueryParameters.xml
msgid ""
"If [code]true[/code], the query will take [PhysicsBody2D]s into account."
-msgstr "如果[code]true[/code],查询将考虑[PhysicsBody2D]。"
+msgstr "如果为 [code]true[/code],查询将考虑 [PhysicsBody2D]。"
#: doc/classes/Physics2DShapeQueryParameters.xml
#: doc/classes/PhysicsShapeQueryParameters.xml
@@ -54813,7 +55511,7 @@ msgstr "正在查询的形状的è¿åŠ¨ã€‚"
#: doc/classes/Physics2DShapeQueryParameters.xml
#: doc/classes/PhysicsShapeQueryParameters.xml
msgid "The queried shape's [RID]. See also [method set_shape]."
-msgstr "查询形状的 [RID]。å¦è§[method set_shape]。"
+msgstr "查询形状的 [RID]。å¦è¯·å‚阅 [method set_shape]。"
#: doc/classes/Physics2DShapeQueryParameters.xml
#: doc/classes/PhysicsShapeQueryParameters.xml
@@ -54822,7 +55520,7 @@ msgstr "è¢«æŸ¥è¯¢å½¢çŠ¶çš„å˜æ¢çŸ©é˜µã€‚"
#: doc/classes/PhysicsBody.xml
msgid "Base class for all objects affected by physics in 3D space."
-msgstr "在3D空间中å—物ç†å½±å“的所有对象的基类。"
+msgstr "在 3D 空间中å—物ç†å½±å“的所有对象的基类。"
#: doc/classes/PhysicsBody.xml
msgid ""
@@ -54886,7 +55584,7 @@ msgid ""
"This is equivalent to [code]add_force(force, Vector3(0,0,0))[/code]."
msgstr ""
"增加一个æ’定的方å‘力,而ä¸å½±å“旋转。\n"
-"这相当于[code]add_force(force, Vector3(0,0,0))[/code]。"
+"相当于 [code]add_force(force, Vector3(0,0,0))[/code]。"
#: doc/classes/PhysicsDirectBodyState.xml
msgid "Adds a constant rotational force without affecting position."
@@ -54898,7 +55596,7 @@ msgid ""
"This is equivalent to [code]apply_impulse(Vector3(0, 0, 0), impulse)[/code]."
msgstr ""
"施加å•一方å‘的冲é‡è€Œä¸å½±å“旋转。\n"
-"这等价于 [code]apply_impulse(Vector3(0, 0, 0), impulse)[/code]。"
+"相当于 [code]apply_impulse(Vector3(0, 0, 0), impulse)[/code]。"
#: doc/classes/PhysicsDirectBodyState.xml
msgid ""
@@ -55115,7 +55813,8 @@ msgstr "æä¾›äº†ä¸€ç§ä¿®æ”¹[PhysicsBody]的碰撞属性的方法。"
msgid ""
"If [code]true[/code], subtracts the bounciness from the colliding object's "
"bounciness instead of adding it."
-msgstr "如果[code]true[/code],则从碰撞对象的弹跳性中å‡åŽ»å¼¹æ€§ï¼Œè€Œä¸æ˜¯æ·»åŠ å®ƒã€‚"
+msgstr ""
+"如果为 [code]true[/code],则从碰撞对象的弹跳性中å‡åŽ»å¼¹æ€§ï¼Œè€Œä¸æ˜¯æ·»åŠ å®ƒã€‚"
#: doc/classes/PhysicsMaterial.xml
msgid ""
@@ -55129,7 +55828,7 @@ msgid ""
"The body's friction. Values range from [code]0[/code] (frictionless) to "
"[code]1[/code] (maximum friction)."
msgstr ""
-"物体的摩擦。å–值范围从[code]0[/code](无摩擦)到[code]1[/code](最大摩擦)。"
+"物体的摩擦。å–值范围从[code]0[/code](无摩擦)到[code]1[/code](最大摩擦)。"
#: doc/classes/PhysicsMaterial.xml
msgid ""
@@ -55139,9 +55838,9 @@ msgid ""
"instead. If [code]true[/code] for both colliding objects, the physics engine "
"will use the highest friction."
msgstr ""
-"如果 [code]true[/code],当两个物体碰撞时,物ç†å¼•擎将使用标记为“粗糙â€çš„物体的"
-"摩擦。如果 [code]false[/code],物ç†å¼•擎将使用所有碰撞物体的最低摩擦力æ¥ä»£æ›¿ã€‚"
-"如果两个碰撞的对象都为 [code]true[/code],物ç†å¼•擎将使用最高的摩擦力。"
+"如果为 [code]true[/code],当两个物体碰撞时,物ç†å¼•擎将使用标记为“粗糙â€çš„物体"
+"的摩擦。如果 [code]false[/code],物ç†å¼•擎将使用所有碰撞物体的最低摩擦力æ¥ä»£"
+"替。如果两个碰撞的对象都为 [code]true[/code],物ç†å¼•擎将使用最高的摩擦力。"
#: doc/classes/PhysicsServer.xml
msgid "Server interface for low-level physics access."
@@ -55163,17 +55862,17 @@ msgstr "创建一个[Area]区域。"
msgid ""
"Returns an area parameter value. A list of available parameters is on the "
"[enum AreaParameter] constants."
-msgstr "è¿”å›žåŒºåŸŸå‚æ•°å€¼ã€‚å¯ç”¨å‚数列表ä½äºŽ[enum AreaParameter]常é‡ä¸Šã€‚"
+msgstr "è¿”å›žåŒºåŸŸå‚æ•°å€¼ã€‚å¯ç”¨å‚数列表ä½äºŽ [enum AreaParameter] 常é‡ä¸Šã€‚"
#: doc/classes/PhysicsServer.xml
msgid "If [code]true[/code], area collides with rays."
-msgstr "如果[code]true[/code],则区域与光线碰撞。"
+msgstr "如果为 [code]true[/code],则区域与光线碰撞。"
#: doc/classes/PhysicsServer.xml
msgid ""
"Sets the value for an area parameter. A list of available parameters is on "
"the [enum AreaParameter] constants."
-msgstr "设置é¢ç§¯å‚数的值。å¯ç”¨å‚数列表ä½äºŽ[enum AreaParameter]常é‡ä¸Šã€‚"
+msgstr "设置é¢ç§¯å‚数的值。å¯ç”¨å‚数列表ä½äºŽ [enum AreaParameter] 常é‡ä¸Šã€‚"
#: doc/classes/PhysicsServer.xml
msgid "Sets object pickable with rays."
@@ -55184,7 +55883,7 @@ msgid ""
"Sets the space override mode for the area. The modes are described in the "
"[enum AreaSpaceOverrideMode] constants."
msgstr ""
-"设置区域的空间替代模å¼ã€‚[enum AreaSpaceOverrideMode]常é‡ä¸­æè¿°äº†è¿™äº›æ¨¡å¼ã€‚"
+"设置区域的空间替代模å¼ã€‚[enum AreaSpaceOverrideMode] 常é‡ä¸­æè¿°äº†è¿™äº›æ¨¡å¼ã€‚"
#: doc/classes/PhysicsServer.xml
msgid ""
@@ -55243,7 +55942,7 @@ msgid ""
"Continuous collision detection tries to predict where a moving body will "
"collide, instead of moving it and correcting its movement if it collided."
msgstr ""
-"如果[code]true[/code],则å¯ç”¨è¿žç»­ç¢°æ’žæ£€æµ‹æ¨¡å¼ã€‚\n"
+"如果为 [code]true[/code],则å¯ç”¨è¿žç»­ç¢°æ’žæ£€æµ‹æ¨¡å¼ã€‚\n"
"连续碰撞检测å°è¯•预测è¿åŠ¨ç‰©ä½“ç¢°æ’žçš„ä½ç½®ï¼Œè€Œä¸æ˜¯åœ¨ç¢°æ’žæ—¶ç§»åŠ¨ç‰©ä½“å¹¶çº æ­£å…¶è¿åŠ¨ã€‚"
#: doc/classes/PhysicsServer.xml
@@ -55254,7 +55953,7 @@ msgstr "从[enum BodyMode]常é‡ä¹‹ä¸€è®¾ç½®ä¸»ä½“模å¼ã€‚"
msgid ""
"Sets a body parameter. A list of available parameters is on the [enum "
"BodyParameter] constants."
-msgstr "è®¾ç½®ç‰©ä½“å‚æ•°ã€‚å¯ç”¨å‚数列表ä½äºŽ[enum BodyParameter]常é‡ä¸Šã€‚"
+msgstr "è®¾ç½®ç‰©ä½“å‚æ•°ã€‚å¯ç”¨å‚数列表ä½äºŽ [enum BodyParameter] 常é‡ä¸Šã€‚"
#: doc/classes/PhysicsServer.xml
msgid "Sets the body pickable with rays if [code]enabled[/code] is set."
@@ -55262,7 +55961,7 @@ msgstr "如果设置了[code]enabled[/code],则设置å¯ä½¿ç”¨å…‰çº¿æ‹¾å–çš„ç
#: doc/classes/PhysicsServer.xml
msgid "Sets a body state (see [enum BodyState] constants)."
-msgstr "设置主体状æ€ï¼ˆè¯·å‚阅[enum BodyState]常é‡ï¼‰ã€‚"
+msgstr "设置主体状æ€ï¼ˆè§ [enum BodyState] 常é‡ï¼‰ã€‚"
#: doc/classes/PhysicsServer.xml
msgid ""
@@ -55276,12 +55975,12 @@ msgstr ""
#: doc/classes/PhysicsServer.xml
msgid ""
"Gets a cone_twist_joint parameter (see [enum ConeTwistJointParam] constants)."
-msgstr "获å–åœ†é”¥ä½“æ‰­æ›²å…³èŠ‚å‚æ•°ï¼ˆè¯·å‚阅[enum ConeTwistJointParam]常é‡ï¼‰ã€‚"
+msgstr "获å–åœ†é”¥ä½“æ‰­æ›²å…³èŠ‚å‚æ•°ï¼ˆè§ [enum ConeTwistJointParam] 常é‡ï¼‰ã€‚"
#: doc/classes/PhysicsServer.xml
msgid ""
"Sets a cone_twist_joint parameter (see [enum ConeTwistJointParam] constants)."
-msgstr "è®¾ç½®åœ†é”¥ä½“æ‰­æ›²å…³èŠ‚å‚æ•°ï¼ˆè¯·å‚阅[enum ConeTwistJointParam]常é‡ï¼‰ã€‚"
+msgstr "è®¾ç½®åœ†é”¥ä½“æ‰­æ›²å…³èŠ‚å‚æ•°ï¼ˆè§ [enum ConeTwistJointParam] 常é‡ï¼‰ã€‚"
#: doc/classes/PhysicsServer.xml
msgid ""
@@ -55295,25 +55994,24 @@ msgstr ""
#: doc/classes/PhysicsServer.xml
msgid ""
"Gets a generic_6_DOF_joint flag (see [enum G6DOFJointAxisFlag] constants)."
-msgstr "获å–generic_6_DOF_joit flag(请å‚阅[enum G6DOFJointAxisFlag]常é‡ï¼‰ã€‚"
+msgstr "èŽ·å– generic_6_DOF_joit æ ‡å¿—ï¼ˆè§ [enum G6DOFJointAxisFlag] 常é‡ï¼‰ã€‚"
#: doc/classes/PhysicsServer.xml
msgid ""
"Gets a generic_6_DOF_joint parameter (see [enum G6DOFJointAxisParam] "
"constants)."
-msgstr ""
-"èŽ·å– generic_6_DOF_joint 傿•°ï¼ˆè¯·å‚阅[enum G6DOFJointAxisParam]常é‡ï¼‰ã€‚"
+msgstr "èŽ·å– generic_6_DOF_joint 傿•°ï¼ˆè§ [enum G6DOFJointAxisParam] 常é‡ï¼‰ã€‚"
#: doc/classes/PhysicsServer.xml
msgid ""
"Sets a generic_6_DOF_joint flag (see [enum G6DOFJointAxisFlag] constants)."
-msgstr "设置generic_6_DOF_joint flag(请å‚阅[enum G6DOFJointAxisFlag]常é‡ï¼‰ã€‚"
+msgstr "设置 generic_6_DOF_joint æ ‡å¿—ï¼ˆè§ [enum G6DOFJointAxisFlag] 常é‡ï¼‰ã€‚"
#: doc/classes/PhysicsServer.xml
msgid ""
"Sets a generic_6_DOF_joint parameter (see [enum G6DOFJointAxisParam] "
"constants)."
-msgstr "设置 generic_6_DOF_joint傿•°ï¼ˆè¯·å‚阅[enum G6DOFJointAxisParam]常é‡ï¼‰ã€‚"
+msgstr "设置 generic_6_DOF_joint 傿•°ï¼ˆè§ [enum G6DOFJointAxisParam] 常é‡ï¼‰ã€‚"
#: doc/classes/PhysicsServer.xml
msgid ""
@@ -55326,39 +56024,39 @@ msgstr ""
#: doc/classes/PhysicsServer.xml
msgid "Gets a hinge_joint flag (see [enum HingeJointFlag] constants)."
-msgstr "获å–铰链关节标志(请å‚阅[enum HingeJointFlag]常é‡ï¼‰ã€‚"
+msgstr "èŽ·å– hinge_joint æ ‡å¿—ï¼ˆè§ [enum HingeJointFlag] 常é‡ï¼‰ã€‚"
#: doc/classes/PhysicsServer.xml
msgid "Gets a hinge_joint parameter (see [enum HingeJointParam])."
-msgstr "获å–é“°é“¾å…³èŠ‚å‚æ•°ï¼ˆè¯·å‚阅[enum HingeJointParam])。"
+msgstr "èŽ·å– hinge_joint 傿•°ï¼ˆè§ [enum HingeJointParam])。"
#: doc/classes/PhysicsServer.xml
msgid "Sets a hinge_joint flag (see [enum HingeJointFlag] constants)."
-msgstr "设置铰链关节标志(请å‚阅[enum HingeJointFlag]常é‡ï¼‰ã€‚"
+msgstr "设置 hinge_joint æ ‡å¿—ï¼ˆè§ [enum HingeJointFlag] 常é‡ï¼‰ã€‚"
#: doc/classes/PhysicsServer.xml
msgid "Sets a hinge_joint parameter (see [enum HingeJointParam] constants)."
-msgstr "è®¾ç½®é“°é“¾å…³èŠ‚å‚æ•°ï¼ˆè¯·å‚阅[enum HingeJointParam]常é‡ï¼‰ã€‚"
+msgstr "设置 hinge_joint 傿•°ï¼ˆè§ [enum HingeJointParam] 常é‡ï¼‰ã€‚"
#: doc/classes/PhysicsServer.xml
msgid "Creates a [ConeTwistJoint]."
-msgstr "创建一个[ConeTwistJoint]。"
+msgstr "创建一个 [ConeTwistJoint]。"
#: doc/classes/PhysicsServer.xml
msgid "Creates a [Generic6DOFJoint]."
-msgstr "创建一个 [Generic6DOFJoint]通用6å‘关节。"
+msgstr "创建一个 [Generic6DOFJoint] 通用 6 å‘关节。"
#: doc/classes/PhysicsServer.xml
msgid "Creates a [HingeJoint]."
-msgstr "创建一个 [HingeJoint]关节。"
+msgstr "创建一个 [HingeJoint] 铰链关节。"
#: doc/classes/PhysicsServer.xml
msgid "Creates a [PinJoint]."
-msgstr "创建一个 [PinJoint]图钉关节。"
+msgstr "创建一个 [PinJoint] 图钉关节。"
#: doc/classes/PhysicsServer.xml
msgid "Creates a [SliderJoint]."
-msgstr "创建一个 [SliderJoint]关节。"
+msgstr "创建一个 [SliderJoint] 关节。"
#: doc/classes/PhysicsServer.xml
msgid "Gets the priority value of the Joint."
@@ -55384,7 +56082,7 @@ msgstr "返回关节在关节物体B的局部空间中的ä½ç½®ã€‚"
#: doc/classes/PhysicsServer.xml
msgid "Gets a pin_joint parameter (see [enum PinJointParam] constants)."
-msgstr "获å–pin_joint傿•°ï¼ˆè¯·å‚阅[enum PinJointParam]常é‡ï¼‰ã€‚"
+msgstr "èŽ·å– pin_joint 傿•°ï¼ˆè§ [enum PinJointParam] 常é‡ï¼‰ã€‚"
#: doc/classes/PhysicsServer.xml
msgid "Sets position of the joint in the local space of body a of the joint."
@@ -55396,7 +56094,7 @@ msgstr "设置关节在关节物体B的局部空间中的ä½ç½®ã€‚"
#: doc/classes/PhysicsServer.xml
msgid "Sets a pin_joint parameter (see [enum PinJointParam] constants)."
-msgstr "设置pin_joint傿•°ï¼ˆè¯·å‚阅[enum PinJointParam]常é‡ï¼‰ã€‚"
+msgstr "设置 pin_joint 傿•°ï¼ˆè§ [enum PinJointParam] 常é‡ï¼‰ã€‚"
#: doc/classes/PhysicsServer.xml
msgid "Activates or deactivates the 3D physics engine."
@@ -55427,11 +56125,11 @@ msgstr ""
#: doc/classes/PhysicsServer.xml
msgid "Returns the type of shape (see [enum ShapeType] constants)."
-msgstr "返回形状的类型(请å‚阅[enum ShapeType]常é‡ï¼‰ã€‚"
+msgstr "è¿”å›žå½¢çŠ¶çš„ç±»åž‹ï¼ˆè§ [enum ShapeType] 常é‡ï¼‰ã€‚"
#: doc/classes/PhysicsServer.xml
msgid "Gets a slider_joint parameter (see [enum SliderJointParam] constants)."
-msgstr "获å–slider_joint傿•°ï¼ˆè¯·å‚阅[enum SliderJointParam]常é‡ï¼‰ã€‚"
+msgstr "èŽ·å– slider_joint 傿•°ï¼ˆè§ [enum SliderJointParam] 常é‡ï¼‰ã€‚"
#: doc/classes/PhysicsServer.xml
msgid ""
@@ -55448,7 +56146,7 @@ msgstr "è®¾ç½®ç©ºé—´å‚æ•°çš„值。å¯ç”¨å‚数列表ä½äºŽ[enum SpaceParameter]
#: doc/classes/PhysicsServer.xml
msgid "The [Joint] is a [PinJoint]."
-msgstr "该[Joint] 是 [PinJoint]。"
+msgstr "该 [Joint] 是 [PinJoint]。"
#: doc/classes/PhysicsServer.xml
msgid "The [Joint] is a [HingeJoint]."
@@ -55500,7 +56198,7 @@ msgstr "é“°é“¾ä¸Šçš„æœ€å°æ—‹è½¬ã€‚"
#: doc/classes/PhysicsServer.xml
msgid "If [code]true[/code], the Hinge has a maximum and a minimum rotation."
-msgstr "如果[code]true[/code]ï¼Œé“°é“¾å…·æœ‰æœ€å¤§å’Œæœ€å°æ—‹è½¬ã€‚"
+msgstr "如果为 [code]true[/code]ï¼Œé“°é“¾å…·æœ‰æœ€å¤§å’Œæœ€å°æ—‹è½¬ã€‚"
#: doc/classes/PhysicsServer.xml
msgid "If [code]true[/code], a motor turns the Hinge."
@@ -55646,7 +56344,7 @@ msgstr "线性马达在试图达到目标速度时å¯ä»¥æ–½åŠ çš„æœ€å¤§åŠ›ã€‚"
#: doc/classes/PhysicsServer.xml
msgid "A factor that gets multiplied onto all rotations across the axes."
-msgstr "一个乘以所有轴旋转的因å­ã€‚"
+msgstr "乘以所有轴旋转的因å­ã€‚"
#: doc/classes/PhysicsServer.xml
msgid ""
@@ -55676,7 +56374,7 @@ msgstr "设置时,存在跨这些轴的线性马达,以指定的速度为目
#: doc/classes/PhysicsServer.xml
msgid "The [Shape] is a [PlaneShape]."
-msgstr "该[Shape] 是 [PlaneShape]。"
+msgstr "该 [Shape] 是 [PlaneShape]。"
#: doc/classes/PhysicsServer.xml
msgid "The [Shape] is a [RayShape]."
@@ -55726,11 +56424,11 @@ msgstr "设置将用于碰撞/相交查询的 [Shape]。"
#: doc/classes/PhysicsShapeQueryParameters.xml
msgid "If [code]true[/code], the query will take [Area]s into account."
-msgstr "如果[code]true[/code],查询将考虑 [Area]。"
+msgstr "如果为 [code]true[/code],查询将考虑 [Area]。"
#: doc/classes/PhysicsShapeQueryParameters.xml
msgid "If [code]true[/code], the query will take [PhysicsBody]s into account."
-msgstr "如果 [code]true[/code],则查询将考虑 [PhysicsBody]。"
+msgstr "如果为 [code]true[/code],则查询将考虑 [PhysicsBody]。"
#: doc/classes/PinJoint.xml
msgid "Pin joint for 3D PhysicsBodies."
@@ -55788,9 +56486,9 @@ msgid ""
"the plane is considered the side of the plane towards where the normal is "
"pointing."
msgstr ""
-"å¹³é¢è¡¨ç¤ºæ ‡å‡†åŒ–çš„å¹³é¢æ–¹ç¨‹ã€‚åŸºæœ¬ä¸Šï¼Œâ€œæ³•çº¿â€æ˜¯å¹³é¢çš„æ³•线(aã€bã€c归一化),而“dâ€æ˜¯"
-"原点到平é¢çš„è·ç¦»(åœ¨â€œæ³•çº¿â€æ–¹å‘)ã€‚â€œä¸Šæ–¹â€æˆ–“上方â€å¹³é¢è¢«è®¤ä¸ºæ˜¯æ³•线指å‘的平é¢ä¸€"
-"侧。"
+"å¹³é¢è¡¨ç¤ºæ ‡å‡†åŒ–çš„å¹³é¢æ–¹ç¨‹ã€‚åŸºæœ¬ä¸Šï¼Œâ€œæ³•çº¿â€æ˜¯å¹³é¢çš„æ³•线(归一化的 aã€bã€c),"
+"而“dâ€æ˜¯åŽŸç‚¹åˆ°å¹³é¢çš„è·ç¦»ï¼ˆåœ¨â€œæ³•çº¿â€æ–¹å‘ï¼‰ã€‚â€œä¸Šæ–¹â€æˆ–“上方â€å¹³é¢è¢«è®¤ä¸ºæ˜¯æ³•线指å‘çš„"
+"å¹³é¢ä¸€ä¾§ã€‚"
#: doc/classes/Plane.xml
msgid ""
@@ -55912,15 +56610,15 @@ msgstr ""
#: doc/classes/Plane.xml
msgid "The X component of the plane's [member normal] vector."
-msgstr "å¹³é¢çš„[member normal]å‘é‡çš„X分é‡ã€‚"
+msgstr "平颿³•å‘é‡ [member normal] çš„ X 分é‡ã€‚"
#: doc/classes/Plane.xml
msgid "The Y component of the plane's [member normal] vector."
-msgstr "å¹³é¢çš„[member normal]å‘é‡çš„Y分é‡ã€‚"
+msgstr "平颿³•å‘é‡ [member normal] çš„ Y 分é‡ã€‚"
#: doc/classes/Plane.xml
msgid "The Z component of the plane's [member normal] vector."
-msgstr "å¹³é¢çš„[member normal]å‘é‡çš„Z分é‡ã€‚"
+msgstr "平颿³•å‘é‡ [member normal] çš„ Z 分é‡ã€‚"
#: doc/classes/Plane.xml
msgid "A plane that extends in the Y and Z axes (normal vector points +X)."
@@ -56036,7 +56734,7 @@ msgid ""
"canvas_polygon_index_buffer_size_kb]."
msgstr ""
"Polygon2D 由一组点定义。æ¯ä¸ªç‚¹éƒ½è¿žæŽ¥åˆ°ä¸‹ä¸€ä¸ªç‚¹ï¼Œæœ€åŽä¸€ä¸ªç‚¹è¿žæŽ¥åˆ°ç¬¬ä¸€ä¸ªç‚¹ï¼Œä»Ž"
-"而形æˆå°é—­çš„多边形。 Polygon2D å¯ä»¥å¡«å……颜色(纯色或æ¸å˜è‰²ï¼‰æˆ–填充给定的纹"
+"而形æˆå°é—­çš„多边形。Polygon2D å¯ä»¥å¡«å……颜色(纯色或æ¸å˜è‰²ï¼‰æˆ–填充给定的纹"
"ç†ã€‚\n"
"[b]注æ„:[/b]默认情况下,Godot 一次最多åªèƒ½ç»˜åˆ¶ 4096 个多边形点。è¦å¢žåŠ æ­¤é™"
"制,请打开项目设置并增加 [member ProjectSettings.rendering/limits/buffers/"
@@ -56046,35 +56744,35 @@ msgstr ""
#: doc/classes/Polygon2D.xml
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
msgid "Removes all bones from this [Polygon2D]."
-msgstr "删除这个[Polygon2D]的所有骨骼."
+msgstr "删除这个 [Polygon2D] 的所有骨骼。"
#: doc/classes/Polygon2D.xml
msgid "Removes the specified bone from this [Polygon2D]."
-msgstr "从这个[Polygon2D]中删除指定的骨骼."
+msgstr "从这个 [Polygon2D] 中删除指定的骨骼。"
#: doc/classes/Polygon2D.xml
msgid "Returns the number of bones in this [Polygon2D]."
-msgstr "返回这个[Polygon2D]中骨骼的数é‡."
+msgstr "返回这个 [Polygon2D] 中骨骼的数é‡ã€‚"
#: doc/classes/Polygon2D.xml
msgid "Returns the path to the node associated with the specified bone."
-msgstr "返回与指定骨骼相关è”的节点的路径."
+msgstr "返回与指定骨骼相关è”的节点的路径。"
#: doc/classes/Polygon2D.xml
msgid "Returns the height values of the specified bone."
-msgstr "返回指定骨骼的高度值."
+msgstr "返回指定骨骼的高度值。"
#: doc/classes/Polygon2D.xml
msgid "Sets the path to the node associated with the specified bone."
-msgstr "设置与指定骨骼相关è”的节点的路径."
+msgstr "设置与指定骨骼相关è”的节点的路径。"
#: doc/classes/Polygon2D.xml
msgid "Sets the weight values for the specified bone."
-msgstr "设置指定骨骼的æƒé‡å€¼."
+msgstr "设置指定骨骼的æƒé‡å€¼ã€‚"
#: doc/classes/Polygon2D.xml
msgid ""
@@ -56187,7 +56885,6 @@ msgid "A pooled array of bytes."
msgstr "字节池数组。"
#: doc/classes/PoolByteArray.xml
-#, fuzzy
msgid ""
"An array specifically designed to hold bytes. Optimized for memory usage, "
"does not fragment the memory.\n"
@@ -56217,7 +56914,7 @@ msgstr ""
"[codeblock]\n"
"var array = [PoolByteArray()]\n"
"array[0].push_back(123)\n"
-"print(array) # [[]](空 Array 中包å«äº†ç©ºçš„ PoolByteArray)\n"
+"print(array) # [[]](Array 中包å«äº†ç©ºçš„ PoolByteArray)\n"
"[/codeblock]\n"
"整个 [PoolByteArray] 属性必须使用 [code]=[/code] 进行[i]釿–°èµ‹å€¼[/i],æ‰ä¼šå‘"
"生å˜åŒ–:\n"
@@ -56253,7 +56950,7 @@ msgid ""
"[code]buffer_size[/code] to the size of the uncompressed data. Set the "
"compression mode using one of [enum File.CompressionMode]'s constants."
msgstr ""
-"返回新的 [PoolByteArray] 解压数æ®ã€‚ [code]buffer_size[/code] 设置未压缩数æ®çš„"
+"返回新的 [PoolByteArray] 解压数æ®ã€‚[code]buffer_size[/code] 设置未压缩数æ®çš„"
"大å°ã€‚使用 [enum File.CompressionMode] 常é‡ä¹‹ä¸€è®¾ç½®åŽ‹ç¼©æ¨¡å¼ã€‚"
#: doc/classes/PoolByteArray.xml
@@ -56328,7 +57025,7 @@ msgid ""
"[b]Note:[/b] This is equivalent to using the [code]in[/code] operator."
msgstr ""
"如果该数组包å«ç»™å®šçš„值,则返回 [code]true[/code]。\n"
-"[b]注æ„:[/b]与使用 [code]in[/code] æ“作符等价。"
+"[b]注æ„:[/b]相当于使用 [code]in[/code] æ“作符。"
#: doc/classes/PoolByteArray.xml
msgid ""
@@ -56396,7 +57093,6 @@ msgid "A pooled array of [Color]s."
msgstr "[Color] 池数组。"
#: doc/classes/PoolColorArray.xml
-#, fuzzy
msgid ""
"An array specifically designed to hold [Color]. Optimized for memory usage, "
"does not fragment the memory.\n"
@@ -56427,7 +57123,7 @@ msgstr ""
"[codeblock]\n"
"var array = [PoolColorArray()]\n"
"array[0].push_back(Color(0.1, 0.2, 0.3, 0.4))\n"
-"print(array) # [[]](空 Array 中包å«äº†ç©ºçš„ PoolColorArray)\n"
+"print(array) # [[]](Array 中包å«äº†ç©ºçš„ PoolColorArray)\n"
"[/codeblock]\n"
"整个 [PoolColorArray] 属性必须使用 [code]=[/code] 进行[i]釿–°èµ‹å€¼[/i],æ‰ä¼šå‘"
"生å˜åŒ–:\n"
@@ -56467,14 +57163,13 @@ msgstr ""
#: doc/classes/PoolColorArray.xml
msgid "Changes the [Color] at the given index."
-msgstr "更改给定索引处的[Color]。"
+msgstr "更改给定索引处的 [Color]。"
#: doc/classes/PoolIntArray.xml
msgid "A pooled array of integers ([int])."
msgstr "整数([int])池数组。"
#: doc/classes/PoolIntArray.xml
-#, fuzzy
msgid ""
"An array specifically designed to hold integer values ([int]). Optimized for "
"memory usage, does not fragment the memory.\n"
@@ -56510,7 +57205,7 @@ msgstr ""
"[codeblock]\n"
"var array = [PoolIntArray()]\n"
"array[0].push_back(1234)\n"
-"print(array) # [[]](空 Array 中包å«äº†ç©ºçš„ PoolIntArray)\n"
+"print(array) # [[]](Array 中包å«äº†ç©ºçš„ PoolIntArray)\n"
"[/codeblock]\n"
"整个 [PoolIntArray] 属性必须使用 [code]=[/code] 进行[i]釿–°èµ‹å€¼[/i],æ‰ä¼šå‘生"
"å˜åŒ–:\n"
@@ -56553,7 +57248,6 @@ msgid "A pooled array of real numbers ([float])."
msgstr "实数([float])池数组。"
#: doc/classes/PoolRealArray.xml
-#, fuzzy
msgid ""
"An array specifically designed to hold floating-point values. Optimized for "
"memory usage, does not fragment the memory.\n"
@@ -56590,7 +57284,7 @@ msgstr ""
"[codeblock]\n"
"var array = [PoolIntArray()]\n"
"array[0].push_back(12.34)\n"
-"print(array) # [[]](空 Array 中包å«äº†ç©ºçš„ PoolRealArray)\n"
+"print(array) # [[]](Array 中包å«äº†ç©ºçš„ PoolRealArray)\n"
"[/codeblock]\n"
"整个 [PoolRealArray] 属性必须使用 [code]=[/code] 进行[i]釿–°èµ‹å€¼[/i],æ‰ä¼šå‘"
"生å˜åŒ–:\n"
@@ -56611,11 +57305,12 @@ msgstr ""
msgid ""
"Constructs a new [PoolRealArray]. Optionally, you can pass in a generic "
"[Array] that will be converted."
-msgstr "构建新的[PoolRealArray]。你å¯ä»¥é€‰æ‹©ä¼ å…¥ä¸€ä¸ªé€šç”¨çš„[Array],它将被转æ¢ã€‚"
+msgstr ""
+"构建新的 [PoolRealArray]。你å¯ä»¥é€‰æ‹©ä¼ å…¥ä¸€ä¸ªé€šç”¨çš„ [Array],它将被转æ¢ã€‚"
#: doc/classes/PoolRealArray.xml
msgid "Appends a [PoolRealArray] at the end of this array."
-msgstr "åœ¨è¿™ä¸ªæ•°ç»„çš„æœ€åŽæ·»åŠ [PoolRealArray]。"
+msgstr "åœ¨è¿™ä¸ªæ•°ç»„çš„æœ€åŽæ·»åŠ  [PoolRealArray]。"
#: doc/classes/PoolRealArray.xml
msgid "Changes the float at the given index."
@@ -56626,7 +57321,6 @@ msgid "A pooled array of [String]s."
msgstr "[String] 池数组。"
#: doc/classes/PoolStringArray.xml
-#, fuzzy
msgid ""
"An array specifically designed to hold [String]s. Optimized for memory "
"usage, does not fragment the memory.\n"
@@ -56656,7 +57350,7 @@ msgstr ""
"[codeblock]\n"
"var array = [PoolStringArray()]\n"
"array[0].push_back(\"hello\")\n"
-"print(array) # [[]](空 Array 中包å«äº†ç©ºçš„ PoolStringArray)\n"
+"print(array) # [[]](Array 中包å«äº†ç©ºçš„ PoolStringArray)\n"
"[/codeblock]\n"
"整个 [PoolStringArray] 属性必须使用 [code]=[/code] 进行[i]釿–°èµ‹å€¼[/i],æ‰ä¼š"
"å‘生å˜åŒ–:\n"
@@ -56692,14 +57386,13 @@ msgstr "在数组的末尾追加字符串元素。"
#: doc/classes/PoolStringArray.xml
msgid "Changes the [String] at the given index."
-msgstr "更改给定索引处的[String]。"
+msgstr "更改给定索引处的 [String]。"
#: doc/classes/PoolVector2Array.xml
msgid "A pooled array of [Vector2]s."
msgstr "[Vector2] 池数组。"
#: doc/classes/PoolVector2Array.xml
-#, fuzzy
msgid ""
"An array specifically designed to hold [Vector2]. Optimized for memory "
"usage, does not fragment the memory.\n"
@@ -56730,7 +57423,7 @@ msgstr ""
"[codeblock]\n"
"var array = [PoolVector2Array()]\n"
"array[0].push_back(Vector2(12, 34))\n"
-"print(array) # [[]](空 Array 中包å«äº†ç©ºçš„ PoolVector2Array)\n"
+"print(array) # [[]](Array 中包å«äº†ç©ºçš„ PoolVector2Array)\n"
"[/codeblock]\n"
"整个 [PoolVector2Array] 属性必须使用 [code]=[/code] 进行[i]釿–°èµ‹å€¼[/i],æ‰ä¼š"
"å‘生å˜åŒ–:\n"
@@ -56772,7 +57465,6 @@ msgid "A pooled array of [Vector3]."
msgstr "[Vector3] 池数组。"
#: doc/classes/PoolVector3Array.xml
-#, fuzzy
msgid ""
"An array specifically designed to hold [Vector3]. Optimized for memory "
"usage, does not fragment the memory.\n"
@@ -56803,7 +57495,7 @@ msgstr ""
"[codeblock]\n"
"var array = [PoolVector3Array()]\n"
"array[0].push_back(Vector3(12, 34, 56))\n"
-"print(array) # [[]](空 Array 中包å«äº†ç©ºçš„ PoolVector3Array)\n"
+"print(array) # [[]](Array 中包å«äº†ç©ºçš„ PoolVector3Array)\n"
"[/codeblock]\n"
"整个 [PoolVector3Array] 属性必须使用 [code]=[/code] 进行[i]釿–°èµ‹å€¼[/i],æ‰ä¼š"
"å‘生å˜åŒ–:\n"
@@ -56904,8 +57596,8 @@ 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"
+"如果为 [code]true[/code],当点击事件å‘生在它之外,或者当它收到"
+"[code]ui_cancel[/code]动作事件时,弹出窗å£ä¸ä¼šè¢«éšè—。\n"
"[b]注æ„:[/b]å¯ç”¨æ­¤å±žæ€§ä¸ä¼šå½±å“ä»Žæ­¤ç±»ç»§æ‰¿çš„å¯¹è¯æ¡†ä¸­å…³é—­æˆ–å–æ¶ˆæŒ‰é’®çš„行为。作为"
"解决方法,您å¯ä»¥ä½¿ç”¨ [method WindowDialog.get_close_button] 或 [method "
"ConfirmationDialog.get_cancel] 并通过将其 [member CanvasItem.visible] 属性设"
@@ -56952,9 +57644,19 @@ msgstr "PopupMenu(弹出èœå•)显示选项列表."
#: doc/classes/PopupMenu.xml
msgid ""
"[PopupMenu] is a [Control] that displays a list of options. They are popular "
-"in toolbars or context menus."
+"in toolbars or context menus.\n"
+"[b]Incremental search:[/b] Like [ItemList] and [Tree], [PopupMenu] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
-"[PopupMenu]是一个显示选项列表的[Control].å®ƒä»¬åœ¨å·¥å…·æ æˆ–上下文èœå•中很常用."
#: doc/classes/PopupMenu.xml
msgid ""
@@ -56968,13 +57670,14 @@ msgid ""
"built-in checking behavior and must be checked/unchecked manually. See "
"[method set_item_checked] for more info on how to control it."
msgstr ""
-"添加一个新的带有[code]label[/code]æ–‡æœ¬çš„å¯æ£€æŸ¥é¡¹ç›®.\n"
-"å¯ä»¥é€‰æ‹©æä¾›ä¸€ä¸ª[code]id[/code]以åŠä¸€ä¸ªå¿«æ·é”®([code]accel[/code])加速.如果没"
-"有æä¾›[code]id[/code],将从索引中创建一个.如果没有æä¾›[code]accel[/code],那么"
-"将为其分é…默认的[code]0[/code].å‚阅 [method get_item_accelerator]了解更多关于"
-"å¿«æ·é”®çš„ä¿¡æ¯.\n"
-"[b]注æ„:[/b]坿£€æŸ¥é¡¹ç›®åªæ˜¯æ˜¾ç¤ºä¸€ä¸ªæ£€æŸ¥æ ‡è®°,但没有任何内置的检查行为,必须手动"
-"æ£€æŸ¥æˆ–å–æ¶ˆæ£€æŸ¥.å‚阅[method set_item_checked]了解更多关于如何控制它的信æ¯."
+"添加一个新的带有 [code]label[/code] 文本的å¯å‹¾é€‰é¡¹ç›®ã€‚\n"
+"å¯ä»¥é€‰æ‹©æä¾›ä¸€ä¸ª [code]id[/code] 以åŠä¸€ä¸ªå¿«æ·é”®ï¼ˆ[code]accel[/code])。如果没"
+"有æä¾› [code]id[/code],将从索引中创建一个。如果没有æä¾› [code]accel[/code],"
+"那么将为其分é…默认的 [code]0[/code]。å‚阅 [method get_item_accelerator] 了解"
+"更多关于快æ·é”®çš„ä¿¡æ¯.\n"
+"[b]注æ„:[/b]å¯å‹¾é€‰é¡¹ç›®åªæ˜¯æ˜¾ç¤ºä¸€ä¸ªå‹¾é€‰æ ‡è®°ï¼Œä½†æ²¡æœ‰ä»»ä½•内置的检查行为,必须手"
+"åŠ¨å‹¾é€‰æˆ–å–æ¶ˆå‹¾é€‰ã€‚å‚阅 [method set_item_checked] 了解更多关于如何控制它的信"
+"æ¯ã€‚"
#: doc/classes/PopupMenu.xml
msgid ""
@@ -57042,11 +57745,11 @@ msgid ""
"[code]0[/code] will be assigned to it. See [method get_item_accelerator] for "
"more info on accelerators."
msgstr ""
-"添加带有文本[code]lable[/code]和图标[code]texture[/code]的新项目。\n"
-"å¯ä»¥é€‰æ‹©æä¾›ä¸€ä¸ª[code]id[/code],以åŠä¸€ä¸ªåŠ é€Ÿå™¨([code]accel[/code])。如果没有"
-"æä¾›[code]id[/code],将从索引中创建一个。如果没有æä¾›[code]accel[/code],则将"
-"为其分é…默认的[code]0[/code]。有关加速器的更多信æ¯ï¼Œè¯·å‚阅[method "
-"get_item_accelerator]。"
+"添加带有文本 [code]lable[/code] 和图标 [code]texture[/code] 的新项目。\n"
+"å¯ä»¥é€‰æ‹©æä¾›ä¸€ä¸ª [code]id[/code],以åŠä¸€ä¸ªå¿«æ·é”®ï¼ˆ[code]accel[/code])。如果"
+"没有æä¾› [code]id[/code],将从索引中创建一个。如果没有æä¾› [code]accel[/"
+"code],则将为其分é…默认的[code]0[/code]。有关快æ·é”®çš„æ›´å¤šä¿¡æ¯ï¼Œè¯·å‚阅 "
+"[method get_item_accelerator]。"
#: doc/classes/PopupMenu.xml
msgid "Same as [method add_icon_check_item], but uses a radio check button."
@@ -57078,10 +57781,10 @@ msgid ""
"[code]0[/code] will be assigned to it. See [method get_item_accelerator] for "
"more info on accelerators."
msgstr ""
-"添加一个带有文本[code]label[/code]的新项目。\n"
-"å¯ä»¥é€‰æ‹©æä¾›[code]id[/code],以åŠåŠ é€Ÿå™¨([code]accel[/code])。如果没有æä¾›"
-"[code]id[/code],将从索引中创建一个。如果没有æä¾›[code]accel[/code],则默认的"
-"[code]0[/code]将被分é…给它。有关加速器的更多信æ¯ï¼Œè¯·å‚阅[method "
+"添加一个带有文本 [code]label[/code] 的新项目。\n"
+"å¯ä»¥é€‰æ‹©æä¾› [code]id[/code],以åŠåŠ é€Ÿå™¨ï¼ˆ[code]accel[/code])。如果没有æä¾› "
+"[code]id[/code],将从索引中创建一个。如果没有æä¾› [code]accel[/code],则默认"
+"çš„ [code]0[/code] 将被分é…给它。有关加速器的更多信æ¯ï¼Œè¯·å‚阅 [method "
"get_item_accelerator]。"
#: doc/classes/PopupMenu.xml
@@ -57097,13 +57800,13 @@ msgid ""
"[code]0[/code] will be assigned to it. See [method get_item_accelerator] for "
"more info on accelerators."
msgstr ""
-"添加一个带有文本[code]label[/code]的新的多状æ€é¡¹ã€‚\n"
-"与普通的二进制项相å,多状æ€é¡¹å¯ä»¥æœ‰ä¸¤ä¸ªä»¥ä¸Šçš„状æ€ï¼Œå¦‚[code]max_states[/code]"
-"æ‰€å®šä¹‰çš„ã€‚æ¯æ¬¡æŒ‰ä¸‹æˆ–激活物å“将增加一个状æ€ã€‚默认值由[code]default_state[/"
-"code]定义。\n"
-"å¯ä»¥é€‰æ‹©æä¾›[code]id[/code],以åŠåŠ é€Ÿå™¨([code]accel[/code])。如果没有æä¾›"
-"[code]id[/code],将从索引中创建一个。如果没有æä¾›[code]accel[/code],则默认的"
-"[code]0[/code]将被分é…给它。有关加速器的更多信æ¯ï¼Œè¯·å‚阅[method "
+"添加一个带有文本 [code]label[/code] 的新的多状æ€é¡¹ã€‚\n"
+"与普通的二进制项相å,多状æ€é¡¹å¯ä»¥æœ‰ä¸¤ä¸ªä»¥ä¸Šçš„状æ€ï¼Œå¦‚ [code]max_states[/"
+"code] æ‰€å®šä¹‰çš„ã€‚æ¯æ¬¡æŒ‰ä¸‹æˆ–激活物å“将增加一个状æ€ã€‚默认值由 "
+"[code]default_state[/code] 定义。\n"
+"å¯ä»¥é€‰æ‹©æä¾› [code]id[/code],以åŠåŠ é€Ÿå™¨ï¼ˆ[code]accel[/code])。如果没有æä¾›"
+"[code]id[/code],将从索引中创建一个。如果没有æä¾› [code]accel[/code],则默认"
+"çš„ [code]0[/code] 将被分é…给它。有关加速器的更多信æ¯ï¼Œè¯·å‚阅 [method "
"get_item_accelerator]。"
#: doc/classes/PopupMenu.xml
@@ -57118,10 +57821,10 @@ msgid ""
"built-in checking behavior and must be checked/unchecked manually. See "
"[method set_item_checked] for more info on how to control it."
msgstr ""
-"添加一个带有文本[code]label[/code]çš„å•选按钮。\n"
-"å¯ä»¥é€‰æ‹©æä¾›[code]id[/code],以åŠåŠ é€Ÿå™¨([code]accel[/code])。如果没有æä¾›"
-"[code]id[/code],将从索引中创建一个。如果没有æä¾›[code]accel[/code],则默认的"
-"[code]0[/code]将被分é…给它。有关加速器的更多信æ¯ï¼Œè¯·å‚阅[method "
+"添加一个带有文本 [code]label[/code] çš„å•选按钮。\n"
+"å¯ä»¥é€‰æ‹©æä¾› [code]id[/code],以åŠåŠ é€Ÿå™¨ï¼ˆ[code]accel[/code])。如果没有æä¾›"
+"[code]id[/code],将从索引中创建一个。如果没有æä¾› [code]accel[/code],则默认"
+"çš„ [code]0[/code] 将被分é…给它。有关加速器的更多信æ¯ï¼Œè¯·å‚阅 [method "
"get_item_accelerator]。\n"
"[b]注æ„:[/b]Checkable é¡¹ç›®åªæ˜¯æ˜¾ç¤ºä¸€ä¸ªå¤é€‰æ ‡è®°ï¼Œä½†æ²¡æœ‰ä»»ä½•内置的检查行为,必"
"须手动检查/䏿£€æŸ¥ã€‚有关如何控制它的更多信æ¯ï¼Œè¯·å‚阅 [method "
@@ -57137,12 +57840,12 @@ msgid ""
"built-in checking behavior and must be checked/unchecked manually. See "
"[method set_item_checked] for more info on how to control it."
msgstr ""
-"添加一个新的å•选å¤é€‰æŒ‰é’®å¹¶ä¸ºå…¶åˆ†é…一个[ShortCut]。将å¤é€‰æ¡†çš„æ ‡ç­¾è®¾ç½®ä¸º"
-"[ShortCut]çš„å称。\n"
-"å¯ä»¥é€‰æ‹©æä¾›[code]id[/code]。如果没有æä¾›[code]id[/code],将从索引中创建一"
+"添加一个新的å•选å¤é€‰æŒ‰é’®å¹¶ä¸ºå…¶åˆ†é…一个 [ShortCut]。将å¤é€‰æ¡†çš„æ ‡ç­¾è®¾ç½®ä¸º "
+"[ShortCut] çš„å称。\n"
+"å¯ä»¥é€‰æ‹©æä¾› [code]id[/code]。如果没有æä¾› [code]id[/code],将从索引中创建一"
"个。\n"
-"[b]注:[/b] Checkableé¡¹ç›®åªæ˜¯æ˜¾ç¤ºä¸€ä¸ªå¤é€‰æ ‡è®°ï¼Œä½†æ²¡æœ‰ä»»ä½•内置的检查行为,必须"
-"手动检查/䏿£€æŸ¥ã€‚有关如何控制它的更多信æ¯ï¼Œè¯·å‚阅[method set_item_checked]。"
+"[b]注æ„:[/b]å¯å‹¾é€‰çš„é¡¹ç›®åªæ˜¯æ˜¾ç¤ºä¸€ä¸ªå¤é€‰æ ‡è®°ï¼Œä½†æ²¡æœ‰ä»»ä½•内置的检查行为,必须"
+"手动检查/䏿£€æŸ¥ã€‚有关如何控制它的更多信æ¯ï¼Œè¯·å‚阅 [method set_item_checked]。"
#: doc/classes/PopupMenu.xml
msgid ""
@@ -57258,10 +57961,10 @@ msgid ""
"don't have any built-in checking behavior and must be checked/unchecked "
"manually."
msgstr ""
-"如果索引[code]idx[/code]的项目以æŸç§æ–¹å¼æ˜¯å¯æ£€æŸ¥çš„,例如,如果它有一个å¤é€‰æ¡†"
-"或å•选按钮,则返回 [code]true[/code]。\n"
-"[b]注:[/b]坿£€æŸ¥é¡¹ç›®åªæ˜¯æ˜¾ç¤ºä¸€ä¸ªå¤é€‰æ ‡è®°æˆ–å•选按钮,但没有任何内置的检查行"
-"为,必须手动检查/å–æ¶ˆã€‚"
+"如果索引 [code]idx[/code] 的项目以æŸç§æ–¹å¼æ˜¯å¯æ£€æŸ¥çš„,例如,如果它有一个å¤é€‰"
+"框或å•选按钮,则返回 [code]true[/code]。\n"
+"[b]注æ„:[/b]å¯å‹¾é€‰é¡¹ç›®åªæ˜¯æ˜¾ç¤ºä¸€ä¸ªå¤é€‰æ ‡è®°æˆ–å•选按钮,但没有任何内置的检查行"
+"为,必须手动勾选/å–æ¶ˆã€‚"
#: doc/classes/PopupMenu.xml
msgid ""
@@ -57285,9 +57988,10 @@ msgid ""
"[b]Note:[/b] This is purely cosmetic; you must add the logic for checking/"
"unchecking items in radio groups."
msgstr ""
-"如果index [code]idx[/code]具有å•选按钮样å¼çš„坿£€æŸ¥æ€§ï¼Œåˆ™è¿”回 [code]true[/"
+"å¦‚æžœç´¢å¼•å· [code]idx[/code] 具有å•选按钮样å¼çš„坿£€æŸ¥æ€§ï¼Œåˆ™è¿”回 [code]true[/"
"code]。\n"
-"[b]注:[/b]这纯粹是装饰性的;您必须添加用于在å•选组中检查/å–æ¶ˆæ£€æŸ¥é¡¹ç›®çš„逻辑。"
+"[b]注æ„:[/b]这纯粹是装饰性的;您必须添加用于在å•选组中检查/å–æ¶ˆæ£€æŸ¥é¡¹ç›®çš„逻"
+"辑。"
#: doc/classes/PopupMenu.xml
msgid ""
@@ -57308,8 +58012,8 @@ msgid ""
"[b]Note:[/b] The indices of items after the removed item will be shifted by "
"one."
msgstr ""
-"从èœå•中移除索引[code]idx[/code]项。\n"
-"[b]注:[/b]被移除项åŽçš„项的索引将被移ä½1。"
+"从èœå•中移除索引 [code]idx[/code] 项。\n"
+"[b]注æ„:[/b]被移除项åŽçš„é¡¹çš„ç´¢å¼•å°†è¢«ç§»ä½ 1。"
#: doc/classes/PopupMenu.xml
msgid "Sets the currently focused item as the given [code]index[/code]."
@@ -57335,17 +58039,17 @@ msgid ""
"[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 ""
-"设置索引[code]idx[/code]é¡¹æ˜¯å¦æœ‰å¤é€‰æ¡†ã€‚如果[code]false[/code],则将项目类型"
-"设置为纯文本。\n"
-"[b]注:[/b] Checkableé¡¹ç›®åªæ˜¯æ˜¾ç¤ºä¸€ä¸ªå¤é€‰æ ‡è®°ï¼Œä½†æ²¡æœ‰ä»»ä½•内置的检查行为,必须"
-"手动检查/䏿£€æŸ¥ã€‚"
+"设置索引 [code]idx[/code] é¡¹æ˜¯å¦æœ‰å¤é€‰æ¡†ã€‚如果为 [code]false[/code],则将项目"
+"类型设置为纯文本。\n"
+"[b]注æ„:[/b]å¯å‹¾é€‰é¡¹ç›®åªæ˜¯æ˜¾ç¤ºä¸€ä¸ªå¤é€‰æ ‡è®°ï¼Œä½†æ²¡æœ‰ä»»ä½•内置的勾选行为,必须手"
+"动勾选/å–æ¶ˆã€‚"
#: doc/classes/PopupMenu.xml
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 ""
-"将指定索引[code]idx[/code]处的项目类型设置为å•选按钮。如果[code]false[/"
+"将指定索引[code]idx[/code]处的项目类型设置为å•选按钮。如果为 [code]false[/"
"code],则将项目类型设置为纯文本。"
#: doc/classes/PopupMenu.xml
@@ -57354,7 +58058,7 @@ msgid ""
"would be displayed as a line. If [code]false[/code], sets the type of the "
"item to plain text."
msgstr ""
-"将索引 [code]idx[/code]标记为分隔符,这æ„味ç€å®ƒå°†æ˜¾ç¤ºä¸ºä¸€è¡Œã€‚如果"
+"将索引 [code]idx[/code]标记为分隔符,这æ„味ç€å®ƒå°†æ˜¾ç¤ºä¸ºä¸€è¡Œã€‚如果为 "
"[code]false[/code],则将项目类型设置为纯文本。"
#: doc/classes/PopupMenu.xml
@@ -57371,7 +58075,7 @@ msgstr ""
#: doc/classes/PopupMenu.xml
msgid "Replaces the [Texture] icon of the specified [code]idx[/code]."
-msgstr "æ›¿æ¢æŒ‡å®š[code]idx[/code]的纹ç†[Texture]图标。"
+msgstr "æ›¿æ¢æŒ‡å®š [code]idx[/code] çš„çº¹ç† [Texture] 图标。"
#: doc/classes/PopupMenu.xml
msgid "Sets the [code]id[/code] of the item at index [code]idx[/code]."
@@ -57390,15 +58094,15 @@ msgstr ""
msgid ""
"Sets the state of a multistate item. See [method add_multistate_item] for "
"details."
-msgstr "设置一个多æ€é¡¹ç›®çš„状æ€ã€‚详è§[method add_multistate_item]。"
+msgstr "设置一个多æ€é¡¹ç›®çš„状æ€ã€‚详情请å‚阅 [method add_multistate_item]。"
#: doc/classes/PopupMenu.xml
msgid "Sets a [ShortCut] for the specified item [code]idx[/code]."
-msgstr "为指定的项目[code]idx[/code]设置[ShortCut]。"
+msgstr "为指定的项目 [code]idx[/code] 设置 [ShortCut]。"
#: doc/classes/PopupMenu.xml
msgid "Disables the [ShortCut] of the specified index [code]idx[/code]."
-msgstr "ç¦ç”¨æŒ‡å®šç´¢å¼•[code]idx[/code]çš„[ShortCut]。"
+msgstr "ç¦ç”¨æŒ‡å®šç´¢å¼• [code]idx[/code] çš„ [ShortCut]。"
#: doc/classes/PopupMenu.xml
msgid ""
@@ -57406,44 +58110,45 @@ msgid ""
"name of a child [PopupMenu] node that would be shown when the item is "
"clicked."
msgstr ""
-"将项目的å­èœå•设置为索引[code]idx[/code]。å­èœå•是一个å­[PopupMenu]节点的å"
-"称,在å•击项目时显示该节点。"
+"将项目的å­èœå•设置为索引 [code]idx[/code]。å­èœå•æ˜¯ä¸€ä¸ªå­ [PopupMenu] 节点的"
+"å称,在å•击项目时显示该节点。"
#: doc/classes/PopupMenu.xml
msgid ""
"Sets the [String] tooltip of the item at the specified index [code]idx[/"
"code]."
-msgstr "在指定的索引[code]idx[/code]处设置项目的[String]工具æç¤ºã€‚"
+msgstr "在指定的索引 [code]idx[/code] 处设置项目的 [String] 工具æç¤ºã€‚"
#: doc/classes/PopupMenu.xml
msgid ""
"Toggles the check state of the item of the specified index [code]idx[/code]."
-msgstr "åˆ‡æ¢æŒ‡å®šç´¢å¼•[code]idx[/code]项的检查状æ€ã€‚"
+msgstr "åˆ‡æ¢æŒ‡å®šç´¢å¼• [code]idx[/code] 项的检查状æ€ã€‚"
#: doc/classes/PopupMenu.xml
msgid ""
"Cycle to the next state of a multistate item. See [method "
"add_multistate_item] for details."
-msgstr "循环到一个多æ€é¡¹ç›®çš„下一个状æ€ã€‚详è§[method add_multistate_item]。"
+msgstr ""
+"循环到一个多æ€é¡¹ç›®çš„下一个状æ€ã€‚详情请å‚阅 [method add_multistate_item]。"
#: doc/classes/PopupMenu.xml
msgid "If [code]true[/code], allows navigating [PopupMenu] with letter keys."
-msgstr "如果为 [code]true[/code],å…许用字æ¯é”®å¯¼èˆª[PopupMenu]。"
+msgstr "如果为 [code]true[/code],å…许用字æ¯é”®å¯¼èˆª [PopupMenu]。"
#: doc/classes/PopupMenu.xml
msgid ""
"If [code]true[/code], hides the [PopupMenu] when a checkbox or radio button "
"is selected."
-msgstr "如果[code]true[/code],则在选中å¤é€‰æ¡†æˆ–å•选按钮时éšè—[PopupMenu]。"
+msgstr "如果为 [code]true[/code],则在选中å¤é€‰æ¡†æˆ–å•选按钮时éšè— [PopupMenu]。"
#: doc/classes/PopupMenu.xml
msgid "If [code]true[/code], hides the [PopupMenu] when an item is selected."
-msgstr "如果[code]true[/code],当一个项目被选中时éšè—[PopupMenu]。"
+msgstr "如果为 [code]true[/code],当一个项目被选中时éšè— [PopupMenu]。"
#: doc/classes/PopupMenu.xml
msgid ""
"If [code]true[/code], hides the [PopupMenu] when a state item is selected."
-msgstr "如果[code]true[/code],则在选中状æ€é¡¹æ—¶éšè—[PopupMenu]。"
+msgstr "如果为 [code]true[/code],则在选中状æ€é¡¹æ—¶éšè— [PopupMenu]。"
#: doc/classes/PopupMenu.xml
msgid ""
@@ -57451,16 +58156,16 @@ msgid ""
"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
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 ""
-"当用户使用[code]ui_up[/code]或[code]ui_down[/code]æ“作导航到æŸä¸ª[code]id[/"
-"code]项时触å‘。"
+"当用户使用 [code]ui_up[/code] 或 [code]ui_down[/code] æ“作导航到æŸä¸ª "
+"[code]id[/code] 项时触å‘。"
#: doc/classes/PopupMenu.xml
msgid ""
@@ -57476,7 +58181,7 @@ msgstr "当按下æŸä¸ª[code]index[/code]的项或激活其加速器时触å‘。
#: doc/classes/PopupMenu.xml
msgid "The default text [Color] for menu items' names."
-msgstr "èœå•项å称的默认文本[Color]。"
+msgstr "èœå•项å称的默认文本 [Color]。"
#: doc/classes/PopupMenu.xml
msgid ""
@@ -57484,8 +58189,8 @@ msgid ""
"menu item name when defined. See [method get_item_accelerator] for more info "
"on accelerators."
msgstr ""
-"文本[Color]用于快æ·é”®å’ŒåŠ é€Ÿå™¨ï¼Œå½“å®šä¹‰æ—¶æ˜¾ç¤ºåœ¨èœå•项åç§°æ—边。有关加速器的更多"
-"ä¿¡æ¯ï¼Œè¯·å‚阅[method get_item_accelerator]。"
+"文本 [Color] 用于快æ·é”®å’ŒåŠ é€Ÿå™¨ï¼Œå½“å®šä¹‰æ—¶æ˜¾ç¤ºåœ¨èœå•项åç§°æ—边。有关加速器的更"
+"多信æ¯ï¼Œè¯·å‚阅 [method get_item_accelerator]。"
#: doc/classes/PopupMenu.xml
msgid "[Color] used for disabled menu items' text."
@@ -57669,14 +58374,14 @@ 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] è¾¹è·ï¼ˆè¿™æ˜¯åœ¨ "
+"在大多数情况下,您会希望在 Portal 中使用默认的 [Portal] è¾¹è·ï¼ˆè¿™æ˜¯åœ¨ "
"[RoomManager] 中设置的)。\n"
-"如果è¦è¦†ç›–这个默认值,把这个值设置为 [code]false[/code],本地的[member "
-"portal_margin]就会生效。"
+"如果è¦è¦†ç›–这个默认值,把这个值设置为 [code]false[/code],本地的 [member "
+"portal_margin] 就会生效。"
#: doc/classes/Position2D.xml
msgid "Generic 2D position hint for editing."
-msgstr "用于编辑的通用2Dä½ç½®æç¤ºã€‚"
+msgstr "用于编辑的通用 2D ä½ç½®æç¤ºã€‚"
#: doc/classes/Position2D.xml
msgid ""
@@ -57684,8 +58389,9 @@ msgid ""
"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 ""
-"用于编辑的通用2Dä½ç½®æç¤ºã€‚它就åƒä¸€ä¸ªæ™®é€šçš„[Node2D],但它在2D编辑器中始终显示"
-"为一个å字。选择节点时,å¯ä»¥ä½¿ç”¨2Dç¼–è¾‘å™¨ä¸­çš„å°æŽ§ä»¶æ¥è®¾ç½®å字的视觉大å°ã€‚"
+"用于编辑的通用 2D ä½ç½®æç¤ºã€‚它就åƒä¸€ä¸ªæ™®é€šçš„ [Node2D],但它在 2D 编辑器中始终"
+"显示为一个å字。选择节点时,å¯ä»¥ä½¿ç”¨ 2D ç¼–è¾‘å™¨ä¸­çš„å°æŽ§ä»¶æ¥è®¾ç½®å字的视觉大"
+"å°ã€‚"
#: doc/classes/Position3D.xml
msgid "Generic 3D position hint for editing."
@@ -58277,12 +58983,12 @@ msgid ""
"The [member application/config/use_custom_user_dir] setting must be enabled "
"for this to take effect."
msgstr ""
-"该用户目录用于存储æŒä¹…æ•°æ®([code]user://[/code]文件系统)。如果留空,"
-"[code]user://[/code]将解æžä¸ºGodot自己的é…置文件夹中特定于项目的文件夹(请å‚阅"
-"[method OS.get_user_data_dir])。如果定义了自定义目录å,将使用该å称并将其附"
-"加到系统特定的用户数æ®ç›®å½•(与[method OS.get_user_data_dir]中记录的Godoté…置文"
-"件夹相åŒçš„父文件夹)。\n"
-"å¿…é¡»å¯ç”¨ [member application/config/use_custom_user_dir]设置æ‰èƒ½ä½¿å…¶ç”Ÿæ•ˆã€‚"
+"这个用户目录用于存储æŒä¹…æ•°æ®ï¼ˆ[code]user://[/code]文件系统)。如果留空,"
+"[code]user://[/code] 将解æžä¸º Godot 自己的é…ç½®æ–‡ä»¶å¤¹ä¸­ç‰¹å®šäºŽé¡¹ç›®çš„æ–‡ä»¶å¤¹ï¼ˆè§ "
+"[method OS.get_user_data_dir])。如果定义了自定义目录å,将使用该å称并将其附"
+"加到系统特定的用户数æ®ç›®å½•(与 [method OS.get_user_data_dir] 中记录的 Godot "
+"é…置文件夹相åŒçš„父文件夹)。\n"
+"å¿…é¡»å¯ç”¨ [member application/config/use_custom_user_dir] 设置æ‰èƒ½ä½¿å…¶ç”Ÿæ•ˆã€‚"
#: doc/classes/ProjectSettings.xml
msgid ""
@@ -58333,8 +59039,8 @@ msgid ""
"[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]。"
-"å‚è§ [ProjectSettings] 顶部类æè¿°ä¸­çš„“Overridingâ€ä»¥èŽ·å–æ›´å¤šä¿¡æ¯ã€‚\n"
+"指定一个文件æ¥è¦†ç›–项目设置。例如:[code]user://custom_settings.cfg[/code]。å‚"
+"è§ [ProjectSettings] 顶部类æè¿°ä¸­çš„“Overridingâ€ä»¥èŽ·å–æ›´å¤šä¿¡æ¯ã€‚\n"
"[b]注æ„:[/b]ä¸ç®¡è¿™ä¸ªè®¾ç½®çš„值如何,[code]res://override.cfg[/code] ä»ç„¶ä¼šè¢«è¯»"
"å–æ¥è¦†ç›–项目设置。"
@@ -58347,11 +59053,11 @@ msgid ""
"effect. If [code]false[/code], the project will save user data to [code](OS "
"user data directory)/Godot/app_userdata/(project name)[/code]."
msgstr ""
-"如果[code]true[/code],项目将把用户数æ®ä¿å­˜åˆ°è‡ªå·±çš„用户目录中(请å‚阅[member "
-"application/config/custom_user_dir_name])。此设置仅在桌é¢å¹³å°ä¸Šæœ‰æ•ˆã€‚必须在"
-"[member application/config/custom_user_dir_name]设置中设置åç§°æ‰èƒ½ç”Ÿæ•ˆã€‚如果"
-"[code]false[/code],项目将把用户数æ®ä¿å­˜åˆ°[code](OS user data directory)/"
-"Godot/app_userdata/(project name)[/code]。"
+"如果为 [code]true[/code],项目将把用户数æ®ä¿å­˜åˆ°è‡ªå·±çš„用户目录中(请å‚阅"
+"[member application/config/custom_user_dir_name])。此设置仅在桌é¢å¹³å°ä¸Šæœ‰"
+"效。必须在[member application/config/custom_user_dir_name]设置中设置åç§°æ‰èƒ½"
+"生效。如果为 [code]false[/code],项目将把用户数æ®ä¿å­˜åˆ°[code](OS user data "
+"directory)/Godot/app_userdata/(project name)[/code]。"
#: doc/classes/ProjectSettings.xml
msgid ""
@@ -58367,9 +59073,9 @@ msgid ""
"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"
+"如果为 [code]true[/code],项目将使用一个éšè—目录([code].import[/code])æ¥å­˜"
+"储项目特定的数æ®ï¼ˆå…ƒæ•°æ®ã€ç€è‰²å™¨ç¼“存等)。\n"
+"如果为 [code]false[/code],将使用éžéšè—目录([code]import[/code])。\n"
"[b]注æ„:[/b]更改此设置åŽé‡æ–°å¯åŠ¨åº”ç”¨ç¨‹åºã€‚\n"
"[b]注æ„:[/b]更改此值有助于在平å°ä¸Šæˆ–使用ä¸å…许éšè—目录模å¼çš„第三方工具。仅当"
"æ‚¨çŸ¥é“æ‚¨çš„çŽ¯å¢ƒéœ€è¦æ—¶æ‰ä¿®æ”¹æ­¤è®¾ç½®ï¼Œå› ä¸ºæ›´æ”¹é»˜è®¤è®¾ç½®ä¼šå½±å“与æŸäº›éœ€è¦é»˜è®¤ "
@@ -58380,8 +59086,8 @@ 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 OS.set_native_icon]自动完æˆã€‚"
+"以 [code].ico[/code] æ ¼å¼è®¾ç½®çš„图标,在 Windows 上用于设置游æˆçš„图标。这在å¯"
+"动时通过调用 [method OS.set_native_icon] 自动完æˆã€‚"
#: doc/classes/ProjectSettings.xml
msgid ""
@@ -58421,9 +59127,9 @@ 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"
+"如果为 [code]true[/code],则ç¦ç”¨æ‰“å°åˆ°æ ‡å‡†é”™è¯¯ã€‚如果为 [code]true[/code],这"
+"也会éšè—ç”± [method @GDScript.push_error] å’Œ [method @GDScript.push_warning] "
+"打å°çš„错误和警告消æ¯ã€‚å¦è§[member application/run/disable_stdout]。\n"
"对此设置的更改åªä¼šåœ¨é‡æ–°å¯åŠ¨åº”ç”¨ç¨‹åºæ—¶åº”用。"
#: doc/classes/ProjectSettings.xml
@@ -58433,7 +59139,7 @@ msgid ""
"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]true[/code],则ç¦ç”¨æ‰“å°åˆ°æ ‡å‡†è¾“出。这相当于使用 [code]--quiet[/"
"code] å‘½ä»¤è¡Œå‚æ•°å¯åŠ¨ç¼–è¾‘å™¨æˆ–é¡¹ç›®ã€‚å¦è§[member application/run/"
"disable_stderr]。\n"
"对此设置的更改åªä¼šåœ¨é‡æ–°å¯åŠ¨åº”ç”¨ç¨‹åºæ—¶åº”用。"
@@ -58453,8 +59159,8 @@ 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"
+"如果为 [code]true[/code]ï¼Œåˆ™æ¯æ¬¡æ‰“å°ä¸€è¡Œæ—¶åˆ·æ–°æ ‡å‡†è¾“出æµã€‚这会影å“终端日志记"
+"录和文件日志记录。\n"
"è¿è¡Œé¡¹ç›®æ—¶ï¼Œå¦‚果希望由 systemd/journalctl ç­‰æœåŠ¡ç®¡ç†å™¨æ”¶é›†æ—¥å¿—,则必须å¯ç”¨æ­¤"
"设置。默认情况下,在å‘布版本中ç¦ç”¨æ­¤è®¾ç½®ï¼Œå› ä¸ºå¦‚果快速连续打å°å¤§é‡è¡Œï¼Œåˆ™åœ¨æ¯"
"个打å°è¡Œä¸Šåˆ·æ–°éƒ½ä¼šå¯¹æ€§èƒ½äº§ç”Ÿè´Ÿé¢å½±å“。此外,如果å¯ç”¨æ­¤è®¾ç½®ï¼Œå¦‚果应用程åºå´©æºƒ"
@@ -58488,15 +59194,16 @@ msgid ""
"visually. This is meant for writing applications and editors, but is pretty "
"useless (and can hurt performance) in most games."
msgstr ""
-"如果 [code]true[/code],则å¯ç”¨ä½Žå¤„ç†å™¨ä½¿ç”¨æ¨¡å¼ã€‚此设置仅适用于桌é¢å¹³å°ã€‚如果"
-"视觉上没有任何å˜åŒ–,å±å¹•ä¸ä¼šè¢«é‡ç»˜ã€‚这是为了编写应用程åºå’Œç¼–辑器,但在大多数"
-"游æˆä¸­è¿™æ˜¯éžå¸¸æ— ç”¨çš„(并å¯èƒ½æŸå®³æ€§èƒ½ï¼‰ã€‚"
+"如果为 [code]true[/code],则å¯ç”¨ä½Žå¤„ç†å™¨ä½¿ç”¨æ¨¡å¼ã€‚此设置仅适用于桌é¢å¹³å°ã€‚如"
+"果视觉上没有任何å˜åŒ–,å±å¹•ä¸ä¼šè¢«é‡ç»˜ã€‚这是为了编写应用程åºå’Œç¼–辑器,但在大多"
+"数游æˆä¸­è¿™æ˜¯éžå¸¸æ— ç”¨çš„(并å¯èƒ½æŸå®³æ€§èƒ½ï¼‰ã€‚"
#: doc/classes/ProjectSettings.xml
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å ç”¨çŽ‡è¶Šä½Žã€‚"
+msgstr ""
+"å¯ç”¨ä½Žå¤„ç†å™¨ä½¿ç”¨æ¨¡å¼æ—¶å¸§é—´çš„ç¡çœ é‡ï¼ˆä»¥å¾®ç§’计)。值越高,CPUå ç”¨çŽ‡è¶Šä½Žã€‚"
#: doc/classes/ProjectSettings.xml
msgid "Path to the main scene file that will be loaded when the project runs."
@@ -58716,14 +59423,15 @@ msgstr ""
msgid ""
"If [code]true[/code], enables warnings when using a function as if it was a "
"property."
-msgstr "如果[code]true[/code],则在使用函数时å¯ç”¨è­¦å‘Šï¼Œå°±åƒå®ƒæ˜¯å±žæ€§ä¸€æ ·ã€‚"
+msgstr "如果为 [code]true[/code],则在使用函数时å¯ç”¨è­¦å‘Šï¼Œå°±åƒå®ƒæ˜¯å±žæ€§ä¸€æ ·ã€‚"
#: doc/classes/ProjectSettings.xml
msgid ""
"If [code]true[/code], enables warnings when a ternary operator may emit "
"values with incompatible types."
msgstr ""
-"如果[code]true[/code],则当三元è¿ç®—符å¯èƒ½å‘出类型ä¸å…¼å®¹çš„值时,将å¯ç”¨è­¦å‘Šã€‚"
+"如果为 [code]true[/code],则当三元è¿ç®—符å¯èƒ½å‘出类型ä¸å…¼å®¹çš„值时,将å¯ç”¨è­¦"
+"告。"
#: doc/classes/ProjectSettings.xml
msgid ""
@@ -58746,7 +59454,7 @@ msgstr ""
msgid ""
"If [code]true[/code], enables warnings when using a property as if it was a "
"function."
-msgstr "如果[code]true[/code],则在将属性当作函数使用时å¯ç”¨è­¦å‘Šã€‚"
+msgstr "如果为 [code]true[/code],则在将属性当作函数使用时å¯ç”¨è­¦å‘Šã€‚"
#: doc/classes/ProjectSettings.xml
msgid ""
@@ -58755,9 +59463,9 @@ msgid ""
"argument). Such return values are sometimes used to denote possible errors "
"using the [enum Error] enum."
msgstr ""
-"如果[code]true[/code],则在ä¸ä½¿ç”¨å‡½æ•°è¿”回值(通过将其赋值给å˜é‡æˆ–将其用作函数"
-"傿•°)调用函数时å¯ç”¨è­¦å‘Šã€‚这样的返回值有时使用[enum Error] 枚举æ¥è¡¨ç¤ºå¯èƒ½çš„é”™"
-"误。"
+"如果为 [code]true[/code],则在ä¸ä½¿ç”¨å‡½æ•°è¿”回值(通过将其赋值给å˜é‡æˆ–将其用作函"
+"æ•°å‚æ•°)调用函数时å¯ç”¨è­¦å‘Šã€‚这样的返回值有时使用[enum Error] 枚举æ¥è¡¨ç¤ºå¯èƒ½çš„"
+"错误。"
#: doc/classes/ProjectSettings.xml
msgid ""
@@ -58765,8 +59473,8 @@ msgid ""
"member variable that would shadow a variable at an upper level (such as a "
"member variable)."
msgstr ""
-"如果[code]true[/code],则在定义局部或å­ç±»æˆå‘˜å˜é‡æ—¶å¯ç”¨è­¦å‘Šï¼Œè¯¥å±€éƒ¨æˆ–å­ç±»æˆå‘˜"
-"å˜é‡å°†åœ¨ä¸Šå±‚阴影å˜é‡(如æˆå‘˜å˜é‡)。"
+"如果为 [code]true[/code],则在定义局部或å­ç±»æˆå‘˜å˜é‡æ—¶å¯ç”¨è­¦å‘Šï¼Œè¯¥å±€éƒ¨æˆ–å­ç±»"
+"æˆå‘˜å˜é‡å°†åœ¨ä¸Šå±‚阴影å˜é‡ï¼ˆå¦‚æˆå‘˜å˜é‡ï¼‰ã€‚"
#: doc/classes/ProjectSettings.xml
msgid ""
@@ -58774,8 +59482,8 @@ msgid ""
"no effect on the surrounding code, such as writing [code]2 + 2[/code] as a "
"statement."
msgstr ""
-"如果[code]true[/code]ï¼Œåˆ™åœ¨è°ƒç”¨å¯¹å‘¨å›´ä»£ç æ²¡æœ‰å½±å“çš„è¡¨è¾¾å¼æ—¶å¯ç”¨è­¦å‘Šï¼Œä¾‹å¦‚å°†"
-"[code]2 + 2[/code]写æˆè¯­å¥ã€‚"
+"如果为 [code]true[/code]ï¼Œåˆ™åœ¨è°ƒç”¨å¯¹å‘¨å›´ä»£ç æ²¡æœ‰å½±å“çš„è¡¨è¾¾å¼æ—¶å¯ç”¨è­¦å‘Šï¼Œä¾‹å¦‚"
+"å°†[code]2 + 2[/code]写æˆè¯­å¥ã€‚"
#: doc/classes/ProjectSettings.xml
msgid ""
@@ -58783,19 +59491,19 @@ msgid ""
"that has no effect on the surrounding code, such as writing [code]42 if "
"active else 0[/code] as a statement."
msgstr ""
-"如果[code]true[/code]ï¼Œåˆ™åœ¨è°ƒç”¨å¯¹å‘¨å›´ä»£ç æ²¡æœ‰å½±å“çš„ä¸‰å…ƒè¡¨è¾¾å¼æ—¶å¯ç”¨è­¦å‘Šï¼Œä¾‹å¦‚"
-"å°†[code]42(如果激活else 0[/code])写入语å¥ã€‚"
+"如果为 [code]true[/code]ï¼Œåˆ™åœ¨è°ƒç”¨å¯¹å‘¨å›´ä»£ç æ²¡æœ‰å½±å“çš„ä¸‰å…ƒè¡¨è¾¾å¼æ—¶å¯ç”¨è­¦å‘Šï¼Œ"
+"例如将[code]42(如果激活else 0[/code])写入语å¥ã€‚"
#: doc/classes/ProjectSettings.xml
msgid ""
"If [code]true[/code], all warnings will be reported as if they were errors."
-msgstr "如果[code]true[/code],所有警告将被报告为错误。"
+msgstr "如果为 [code]true[/code],所有警告将被报告为错误。"
#: doc/classes/ProjectSettings.xml
msgid ""
"If [code]true[/code], enables warnings when using a variable that wasn't "
"previously assigned."
-msgstr "如果[code]true[/code]ï¼Œåˆ™åœ¨ä½¿ç”¨ä»¥å‰æ²¡æœ‰èµ‹å€¼çš„å˜é‡æ—¶å¯ç”¨è­¦å‘Šã€‚"
+msgstr "如果为 [code]true[/code]ï¼Œåˆ™åœ¨ä½¿ç”¨ä»¥å‰æ²¡æœ‰èµ‹å€¼çš„å˜é‡æ—¶å¯ç”¨è­¦å‘Šã€‚"
#: doc/classes/ProjectSettings.xml
msgid ""
@@ -58803,60 +59511,60 @@ msgid ""
"assignment operator like [code]+=[/code] if the variable wasn't previously "
"assigned."
msgstr ""
-"如果[code]true[/code],则在使用赋值æ“作符[code]+=[/code](如果å˜é‡ä¹‹å‰æ²¡æœ‰èµ‹"
-"值)为å˜é‡èµ‹å€¼æ—¶å¯ç”¨è­¦å‘Šã€‚"
+"如果为 [code]true[/code],则在使用赋值æ“作符[code]+=[/code](如果å˜é‡ä¹‹å‰æ²¡æœ‰"
+"赋值)为å˜é‡èµ‹å€¼æ—¶å¯ç”¨è­¦å‘Šã€‚"
#: doc/classes/ProjectSettings.xml
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 ""
-"如果[code]true[/code],则在检测到ä¸å¯è¾¾çš„ä»£ç æ—¶å¯ç”¨è­¦å‘Š(例如在始终执行的"
-"[code]return[/code]语å¥ä¹‹åŽ)。"
+"如果为 [code]true[/code],则在检测到ä¸å¯è¾¾çš„ä»£ç æ—¶å¯ç”¨è­¦å‘Šï¼ˆä¾‹å¦‚在始终执行的"
+"[code]return[/code]语å¥ä¹‹åŽï¼‰ã€‚"
#: doc/classes/ProjectSettings.xml
msgid ""
"If [code]true[/code], enables warnings when using an expression whose type "
"may not be compatible with the function parameter expected."
msgstr ""
-"如果[code]true[/code],则在使用类型å¯èƒ½ä¸ŽæœŸæœ›çš„å‡½æ•°å‚æ•°ä¸å…¼å®¹çš„è¡¨è¾¾å¼æ—¶å¯ç”¨è­¦"
-"告。"
+"如果为 [code]true[/code],则在使用类型å¯èƒ½ä¸ŽæœŸæœ›çš„å‡½æ•°å‚æ•°ä¸å…¼å®¹çš„è¡¨è¾¾å¼æ—¶å¯"
+"用警告。"
#: doc/classes/ProjectSettings.xml
msgid "If [code]true[/code], enables warnings when performing an unsafe cast."
-msgstr "如果[code]true[/code],则在执行ä¸å®‰å…¨çš„å¼ºåˆ¶è½¬æ¢æ—¶å¯ç”¨è­¦å‘Šã€‚"
+msgstr "如果为 [code]true[/code],则在执行ä¸å®‰å…¨çš„å¼ºåˆ¶è½¬æ¢æ—¶å¯ç”¨è­¦å‘Šã€‚"
#: doc/classes/ProjectSettings.xml
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],则在调用类中ä¸èƒ½ä¿è¯åœ¨ç¼–译时存在的方法时å¯ç”¨è­¦å‘Šã€‚"
+"如果为 [code]true[/code],则在调用类中ä¸èƒ½ä¿è¯åœ¨ç¼–译时存在的方法时å¯ç”¨è­¦å‘Šã€‚"
#: doc/classes/ProjectSettings.xml
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],则在访问类中ä¸èƒ½ä¿è¯åœ¨ç¼–译时存在的属性时å¯ç”¨è­¦å‘Šã€‚"
+"如果为 [code]true[/code],则在访问类中ä¸èƒ½ä¿è¯åœ¨ç¼–译时存在的属性时å¯ç”¨è­¦å‘Šã€‚"
#: doc/classes/ProjectSettings.xml
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
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
msgid "If [code]true[/code], enables warnings when a signal is unused."
-msgstr "如果[code]true[/code]ï¼Œåˆ™åœ¨ä¿¡å·æœªä½¿ç”¨æ—¶å¯ç”¨è­¦å‘Šã€‚"
+msgstr "如果为 [code]true[/code]ï¼Œåˆ™åœ¨ä¿¡å·æœªä½¿ç”¨æ—¶å¯ç”¨è­¦å‘Šã€‚"
#: doc/classes/ProjectSettings.xml
msgid "If [code]true[/code], enables warnings when a local variable is unused."
-msgstr "如果[code]true[/code],则在局部å˜é‡æœªä½¿ç”¨æ—¶å¯ç”¨è­¦å‘Šã€‚"
+msgstr "如果为 [code]true[/code],则在局部å˜é‡æœªä½¿ç”¨æ—¶å¯ç”¨è­¦å‘Šã€‚"
#: doc/classes/ProjectSettings.xml
msgid ""
@@ -58864,20 +59572,33 @@ msgid ""
"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 支æŒ"
-"一æµå‡½æ•°æ—¶ï¼Œè¿™å°†åœ¨æœªæ¥ç‰ˆæœ¬ä¸­å˜æˆé”™è¯¯ã€‚"
+"如果为 [code]true[/code],则在声明与函数åŒåçš„å˜é‡æ—¶å¯ç”¨è­¦å‘Šã€‚当 GDScript 支"
+"æŒä¸€æµå‡½æ•°æ—¶ï¼Œè¿™å°†åœ¨æœªæ¥ç‰ˆæœ¬ä¸­å˜æˆé”™è¯¯ã€‚"
#: doc/classes/ProjectSettings.xml
msgid ""
"If [code]true[/code], enables warnings when assigning the result of a "
"function that returns [code]void[/code] to a variable."
msgstr ""
-"如果[code]true[/code],则在将返回 [code]void[/code]的函数的结果赋值给å˜é‡æ—¶å¯"
-"用警告。"
+"如果为 [code]true[/code],则在将返回 [code]void[/code]的函数的结果赋值给å˜é‡"
+"æ—¶å¯ç”¨è­¦å‘Šã€‚"
#: doc/classes/ProjectSettings.xml
-msgid "Message to be displayed before the backtrace when the engine crashes."
-msgstr "å½“å¼•æ“Žå´©æºƒæ—¶ï¼Œåœ¨å›žæº¯ä¹‹å‰æ˜¾ç¤ºçš„æ¶ˆæ¯ã€‚"
+msgid ""
+"Message to be displayed before the backtrace when the engine crashes. By "
+"default, this message is only used in exported projects due to the editor-"
+"only override applied to this setting."
+msgstr ""
+"å¼•æ“Žå´©æºƒæ—¶ï¼Œåœ¨è°ƒç”¨ç«™å›žæº¯å‰æ˜¾ç¤ºçš„æ¶ˆæ¯ã€‚默认情况下,这个消æ¯åªä¼šåœ¨å¯¼å‡ºåŽçš„项目"
+"中使用,因为编辑器会对这个设置进行覆盖。"
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Editor-only override for [member debug/settings/crash_handler/message]. Does "
+"not affect exported projects in debug or release mode."
+msgstr ""
+"仅用于编辑器的 [member debug/settings/crash_handler/message] 覆盖项。ä¸ä¼šå½±å“"
+"用调试或å‘布模å¼å¯¼å‡ºçš„项目。"
#: doc/classes/ProjectSettings.xml
msgid ""
@@ -58944,43 +59665,42 @@ msgstr "最大的å¯è§†è„šæœ¬è°ƒç”¨å †æ ˆï¼Œä»¥é¿å…æ— é™é€’归。"
msgid ""
"Color of the contact points between collision shapes, visible when \"Visible "
"Collision Shapes\" is enabled in the Debug menu."
-msgstr "碰撞形状之间接触点的颜色,在调试èœå•中å¯ç”¨â€œå¯è§ç¢°æ’žå½¢çŠ¶â€æ—¶å¯è§ã€‚"
+msgstr "碰撞形状之间接触点的颜色,在调试èœå•中å¯ç”¨â€œæ˜¾ç¤ºç¢°æ’žå½¢çŠ¶â€æ—¶å¯è§ã€‚"
#: doc/classes/ProjectSettings.xml
msgid ""
"Sets whether 2D physics will display collision outlines in game when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-"设置当调试èœå•中的å¯ç”¨ \"å¯è§çš„碰撞形状\" 时,2Dç‰©ç†æ˜¯å¦ä¼šåœ¨æ¸¸æˆä¸­æ˜¾ç¤ºç¢°æ’žè½®"
-"廓。"
+"设置当调试èœå•中的å¯ç”¨â€œæ˜¾ç¤ºç¢°æ’žå½¢çŠ¶â€æ—¶ï¼Œ2D ç‰©ç†æ˜¯å¦ä¼šåœ¨æ¸¸æˆä¸­æ˜¾ç¤ºç¢°æ’žè½®å»“。"
#: doc/classes/ProjectSettings.xml
msgid ""
"Maximum number of contact points between collision shapes to display when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
-msgstr "当在调试èœå•中å¯ç”¨â€œå¯è§ç¢°æ’žå½¢çŠ¶â€æ—¶ï¼Œç¢°æ’žå½¢çŠ¶ä¹‹é—´æ˜¾ç¤ºçš„æœ€å¤§æŽ¥è§¦ç‚¹æ•°ã€‚"
+msgstr "当在调试èœå•中å¯ç”¨â€œæ˜¾ç¤ºç¢°æ’žå½¢çŠ¶â€æ—¶ï¼Œç¢°æ’žå½¢çŠ¶ä¹‹é—´æ˜¾ç¤ºçš„æœ€å¤§æŽ¥è§¦ç‚¹æ•°ã€‚"
#: doc/classes/ProjectSettings.xml
msgid ""
"Color of the collision shapes, visible when \"Visible Collision Shapes\" is "
"enabled in the Debug menu."
-msgstr "碰撞形状的颜色,当在调试èœå•中å¯ç”¨â€œå¯è§ç¢°æ’žå½¢çŠ¶â€æ—¶å¯è§ã€‚"
+msgstr "碰撞形状的颜色,当在调试èœå•中å¯ç”¨â€œæ˜¾ç¤ºç¢°æ’žå½¢çŠ¶â€æ—¶å¯è§ã€‚"
#: doc/classes/ProjectSettings.xml
msgid ""
"Color of the disabled navigation geometry, visible when \"Visible "
"Navigation\" is enabled in the Debug menu."
-msgstr "被ç¦ç”¨çš„导航几何图形的颜色,在调试èœå•中å¯ç”¨â€œå¯è§å¯¼èˆªâ€æ—¶å¯è§ã€‚"
+msgstr "被ç¦ç”¨çš„导航几何图形的颜色,在调试èœå•中å¯ç”¨â€œæ˜¾ç¤ºå¯¼èˆªâ€æ—¶å¯è§ã€‚"
#: doc/classes/ProjectSettings.xml
msgid ""
"Color of the navigation geometry, visible when \"Visible Navigation\" is "
"enabled in the Debug menu."
-msgstr "导航几何图形的颜色,在调试èœå•中å¯ç”¨â€œå¯è§å¯¼èˆªâ€æ—¶å¯è§ã€‚"
+msgstr "导航几何图形的颜色,在调试èœå•中å¯ç”¨â€œæ˜¾ç¤ºå¯¼èˆªâ€æ—¶å¯è§ã€‚"
#: doc/classes/ProjectSettings.xml
msgid "Custom image for the mouse cursor (limited to 256×256)."
-msgstr "鼠标光标的自定义图åƒ(最大256×256)。"
+msgstr "鼠标光标的自定义图åƒï¼ˆæœ€å¤§ 256×256)。"
#: doc/classes/ProjectSettings.xml
msgid "Hotspot for the custom mouse cursor image."
@@ -59190,11 +59910,28 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default naming style for scene files to infer from their root nodes. "
+"Possible options are:\n"
+"- [code]0[/code] (Auto): Uses the scene root name as is without changing its "
+"casing.\n"
+"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase "
+"casing.\n"
+"- [code]2[/code] (snake_case): Converts the scene root name to snake_case "
+"casing."
+msgstr ""
+"场景文件的默认命å风格,从场景根节点推导时使用。å¯èƒ½çš„选项有:\n"
+"- [code]0[/code]ï¼ˆè‡ªåŠ¨ï¼‰ï¼šä¿æŒåœºæ™¯æ ¹èŠ‚ç‚¹å称,ä¸ä¿®æ”¹å¤§å°å†™ã€‚\n"
+"- [code]1[/code](PascalCase):将场景根节点å称转æ¢ä¸º PascalCase 驼峰风"
+"格。\n"
+"- [code]2[/code](snake_case):将场景根节点å称转æ¢ä¸º snake_case 蛇形风格。"
+
+#: doc/classes/ProjectSettings.xml
+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 将在编辑器的特定路径和此项目的路径中"
+"对于项目特定的脚本模æ¿çš„æœç´¢è·¯å¾„ã€‚Godot 将在编辑器的特定路径和此项目的路径中"
"æœç´¢ã€‚"
#: doc/classes/ProjectSettings.xml
@@ -59227,8 +59964,8 @@ msgid ""
"Default value for [member ScrollContainer.scroll_deadzone], which will be "
"used for all [ScrollContainer]s unless overridden."
msgstr ""
-"[member ScrollContainer.scroll_deadzone],它将用于所有[ScrollContainer]s,除"
-"éžé‡å†™ã€‚"
+"[member ScrollContainer.scroll_deadzone],它将用于所有 [ScrollContainer],除"
+"éžfug。"
#: doc/classes/ProjectSettings.xml
msgid ""
@@ -59254,8 +59991,8 @@ 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çš„å¯¹è¯æ¡†ä¸­äº¤æ¢ç¡®å®šå’Œå–消按钮,以éµå¾ªç•Œé¢"
-"惯例。"
+"如果为 [code]true[/code],在Windowså’ŒUWPçš„å¯¹è¯æ¡†ä¸­äº¤æ¢ç¡®å®šå’Œå–消按钮,以éµå¾ª"
+"ç•Œé¢æƒ¯ä¾‹ã€‚"
#: doc/classes/ProjectSettings.xml
msgid ""
@@ -59273,17 +60010,17 @@ msgstr "自定义 [Font] 资æºçš„路径,用于项目的所有 GUI 元素的é»
#: doc/classes/ProjectSettings.xml
msgid "If [code]true[/code], makes sure the theme used works with HiDPI."
-msgstr "如果[code]true[/code],确ä¿ä½¿ç”¨çš„主题将在HiDPI下工作。"
+msgstr "如果为 [code]true[/code],确ä¿ä½¿ç”¨çš„主题将在 HiDPI 下工作。"
#: doc/classes/ProjectSettings.xml
msgid ""
"Timer setting for incremental search in [Tree], [ItemList], etc. controls "
"(in milliseconds)."
-msgstr "在[Tree], [ItemList]ç­‰æŽ§ä»¶ä¸­ä¸ºå¢žé‡æœç´¢è®¾ç½®è®¡æ—¶å™¨(以毫秒为å•ä½)。"
+msgstr "在 [Tree]ã€[ItemList] ç­‰æŽ§ä»¶ä¸­ä¸ºå¢žé‡æœç´¢è®¾ç½®è®¡æ—¶å™¨ï¼ˆå•ä½ä¸ºæ¯«ç§’)。"
#: doc/classes/ProjectSettings.xml
msgid "Timer for detecting idle in [TextEdit] (in seconds)."
-msgstr "检测[TextEdit]空闲的计时器(å•ä½ä¸ºç§’)。"
+msgstr "检测 [TextEdit] 空闲的计时器(å•ä½ä¸ºç§’)。"
#: doc/classes/ProjectSettings.xml
msgid "Default delay for tooltips (in seconds)."
@@ -59397,10 +60134,11 @@ msgid ""
"necessary for the internal logic of several [Control]s. The events assigned "
"to the action can however be modified."
msgstr ""
-"默认的在[Control](例如[ItemList]或[Tree])中下拉页é¢çš„[InputEventAction],与典"
-"型桌é¢UI系统中[constant KEY_PAGEDOWN]的行为相匹é…。\n"
-"[b]注æ„:[/b]默认的[code]ui_*[/code]动作ä¸èƒ½è¢«åˆ é™¤ï¼Œå› ä¸ºå®ƒä»¬æ˜¯å‡ ä¸ª[Control]çš„"
-"内部逻辑所必需的。但是,å¯ä»¥ä¿®æ”¹åˆ†é…给该æ“作的事件。"
+"默认的在 [Control](例如 [ItemList] 或 [Tree])中å‘下翻页的 "
+"[InputEventAction]ï¼Œä¸Žå…¸åž‹æ¡Œé¢ UI 系统中 [constant KEY_PAGEDOWN] 的行为相匹"
+"é…。\n"
+"[b]注æ„:[/b]默认的 [code]ui_*[/code] 动作ä¸èƒ½è¢«åˆ é™¤ï¼Œå› ä¸ºå®ƒä»¬æ˜¯å‡ ä¸ª "
+"[Control] 的内部逻辑所必需的。但是,å¯ä»¥ä¿®æ”¹åˆ†é…给该æ“作的事件。"
#: doc/classes/ProjectSettings.xml
msgid ""
@@ -59411,10 +60149,11 @@ msgid ""
"necessary for the internal logic of several [Control]s. The events assigned "
"to the action can however be modified."
msgstr ""
-"默认在[Control](例如[ItemList]或[Tree])中上移页é¢çš„[InputEventAction],与典型"
-"桌é¢UI系统中[constant KEY_PAGEUP]的行为相匹é…。\n"
-"[b]注æ„:[/b]默认的[code]ui_*[/code]动作ä¸èƒ½è¢«åˆ é™¤ï¼Œå› ä¸ºå®ƒä»¬æ˜¯å‡ ä¸ª[Control]çš„"
-"内部逻辑所必需的。但是,å¯ä»¥ä¿®æ”¹åˆ†é…给该æ“作的事件。"
+"默认的在 [Control](例如 [ItemList] 或 [Tree])中å‘上翻页的 "
+"[InputEventAction]ï¼Œä¸Žå…¸åž‹æ¡Œé¢ UI 系统中 [constant KEY_PAGEUP] 的行为相匹"
+"é…。\n"
+"[b]注æ„:[/b]默认的 [code]ui_*[/code] 动作ä¸èƒ½è¢«åˆ é™¤ï¼Œå› ä¸ºå®ƒä»¬æ˜¯å‡ ä¸ª "
+"[Control] 的内部逻辑所必需的。但是,å¯ä»¥ä¿®æ”¹åˆ†é…给该æ“作的事件。"
#: doc/classes/ProjectSettings.xml
msgid ""
@@ -59461,12 +60200,12 @@ msgid ""
"because they can't run at the target frame rate.\n"
"[b]Note:[/b] Currently implemented only in Android."
msgstr ""
-"如果 [code]true[/code],按键/触摸/æ“纵æ†äº‹ä»¶å°†åœ¨æ¯ä¸ªç©ºé—²å¸§å’Œç‰©ç†å¸§ä¹‹å‰åˆ·"
+"如果为 [code]true[/code],按键/触摸/æ“纵æ†äº‹ä»¶å°†åœ¨æ¯ä¸ªç©ºé—²å¸§å’Œç‰©ç†å¸§ä¹‹å‰åˆ·"
"新。\n"
-"如果 [code]false[/code],此类事件将在引擎迭代之间æ¯ä¸ªç©ºé—²å¸§ä»…刷新一次。\n"
+"如果为 [code]false[/code],此类事件将在引擎迭代之间æ¯ä¸ªç©ºé—²å¸§ä»…刷新一次。\n"
"å¯ç”¨æ­¤åŠŸèƒ½å¯ä»¥å¤§å¤§æé«˜å¯¹è¾“入的å“åº”èƒ½åŠ›ï¼Œç‰¹åˆ«æ˜¯åœ¨éœ€è¦æ¯ä¸ªå¯è§ï¼ˆç©ºé—²ï¼‰å¸§è¿è¡Œå¤š"
"个物ç†å¸§çš„设备中,因为它们无法以目标帧速率è¿è¡Œã€‚\n"
-"[b]注:[/b] ç›®å‰ä»…在 Android 中实现。"
+"[b]注æ„:[/b]ç›®å‰ä»…在 Android 中实现。"
#: doc/classes/ProjectSettings.xml
msgid ""
@@ -59485,6 +60224,198 @@ msgid "Default delay for touch events. This only affects iOS devices."
msgstr "触摸事件的默认延迟(å•ä½ä¸ºç§’ï¼‰ã€‚ä»…å½±å“ iOS 设备。"
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr "2D 导航层 1 çš„å¯é€‰å称。留空则会显示为“层 1â€ã€‚"
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr "2D 导航层 10 çš„å¯é€‰å称。留空则会显示为“层 10â€ã€‚"
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr "2D 导航层 11 çš„å¯é€‰å称。留空则会显示为“层 11â€ã€‚"
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr "2D 导航层 12 çš„å¯é€‰å称。留空则会显示为“层 12â€ã€‚"
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr "2D 导航层 13 çš„å¯é€‰å称。留空则会显示为“层 13â€ã€‚"
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr "2D 导航层 14 çš„å¯é€‰å称。留空则会显示为“层 14â€ã€‚"
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr "2D 导航层 15 çš„å¯é€‰å称。留空则会显示为“层 15â€ã€‚"
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr "2D 导航层 16 çš„å¯é€‰å称。留空则会显示为“层 16â€ã€‚"
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr "2D 导航层 17 çš„å¯é€‰å称。留空则会显示为“层 17â€ã€‚"
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr "2D 导航层 18 çš„å¯é€‰å称。留空则会显示为“层 18â€ã€‚"
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr "2D 导航层 19 çš„å¯é€‰å称。留空则会显示为“层 19â€ã€‚"
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr "2D 导航层 2 çš„å¯é€‰å称。留空则会显示为“层 2â€ã€‚"
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr "2D 导航层 20 çš„å¯é€‰å称。留空则会显示为“层 20â€ã€‚"
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr "2D 导航层 21 çš„å¯é€‰å称。留空则会显示为“层 21â€ã€‚"
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr "2D 导航层 22 çš„å¯é€‰å称。留空则会显示为“层 22â€ã€‚"
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr "2D 导航层 23 çš„å¯é€‰å称。留空则会显示为“层 23â€ã€‚"
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr "2D 导航层 24 çš„å¯é€‰å称。留空则会显示为“层 24â€ã€‚"
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr "2D 导航层 25 çš„å¯é€‰å称。留空则会显示为“层 25â€ã€‚"
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr "2D 导航层 26 çš„å¯é€‰å称。留空则会显示为“层 26â€ã€‚"
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr "2D 导航层 27 çš„å¯é€‰å称。留空则会显示为“层 27â€ã€‚"
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr "2D 导航层 28 çš„å¯é€‰å称。留空则会显示为“层 28â€ã€‚"
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr "2D 导航层 29 çš„å¯é€‰å称。留空则会显示为“层 29â€ã€‚"
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr "2D 导航层 3 çš„å¯é€‰å称。留空则会显示为“层 3â€ã€‚"
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr "2D 导航层 30 çš„å¯é€‰å称。留空则会显示为“层 30â€ã€‚"
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr "2D 导航层 31 çš„å¯é€‰å称。留空则会显示为“层 31â€ã€‚"
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr "2D 导航层 32 çš„å¯é€‰å称。留空则会显示为“层 32â€ã€‚"
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr "2D 导航层 4 çš„å¯é€‰å称。留空则会显示为“层 4â€ã€‚"
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr "2D 导航层 5 çš„å¯é€‰å称。留空则会显示为“层 5â€ã€‚"
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr "2D 导航层 6 çš„å¯é€‰å称。留空则会显示为“层 6â€ã€‚"
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr "2D 导航层 7 çš„å¯é€‰å称。留空则会显示为“层 7â€ã€‚"
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr "2D 导航层 8 çš„å¯é€‰å称。留空则会显示为“层 8â€ã€‚"
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr "2D 导航层 9 çš„å¯é€‰å称。留空则会显示为“层 9â€ã€‚"
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 1."
msgstr "2D 物ç†å±‚ 1 çš„å¯é€‰å称。"
@@ -59693,6 +60624,198 @@ msgid "Optional name for the 2D render layer 9."
msgstr "2D 渲染层 9 çš„å¯é€‰å称。"
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr "3D 导航层 1 çš„å¯é€‰å称。留空则会显示为“层 1â€ã€‚"
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr "3D 导航层 10 çš„å¯é€‰å称。留空则会显示为“层 10â€ã€‚"
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr "3D 导航层 11 çš„å¯é€‰å称。留空则会显示为“层 11â€ã€‚"
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr "3D 导航层 12 çš„å¯é€‰å称。留空则会显示为“层 12â€ã€‚"
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr "3D 导航层 13 çš„å¯é€‰å称。留空则会显示为“层 13â€ã€‚"
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr "3D 导航层 14 çš„å¯é€‰å称。留空则会显示为“层 14â€ã€‚"
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr "3D 导航层 15 çš„å¯é€‰å称。留空则会显示为“层 15â€ã€‚"
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr "3D 导航层 16 çš„å¯é€‰å称。留空则会显示为“层 16â€ã€‚"
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr "3D 导航层 17 çš„å¯é€‰å称。留空则会显示为“层 17â€ã€‚"
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr "3D 导航层 18 çš„å¯é€‰å称。留空则会显示为“层 18â€ã€‚"
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr "3D 导航层 19 çš„å¯é€‰å称。留空则会显示为“层 19â€ã€‚"
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr "3D 导航层 2 çš„å¯é€‰å称。留空则会显示为“层 2â€ã€‚"
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr "3D 导航层 20 çš„å¯é€‰å称。留空则会显示为“层 20â€ã€‚"
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr "3D 导航层 21 çš„å¯é€‰å称。留空则会显示为“层 21â€ã€‚"
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr "3D 导航层 22 çš„å¯é€‰å称。留空则会显示为“层 22â€ã€‚"
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr "3D 导航层 23 çš„å¯é€‰å称。留空则会显示为“层 23â€ã€‚"
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr "3D 导航层 24 çš„å¯é€‰å称。留空则会显示为“层 24â€ã€‚"
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr "3D 导航层 25 çš„å¯é€‰å称。留空则会显示为“层 25â€ã€‚"
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr "3D 导航层 26 çš„å¯é€‰å称。留空则会显示为“层 26â€ã€‚"
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr "3D 导航层 27 çš„å¯é€‰å称。留空则会显示为“层 27â€ã€‚"
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr "3D 导航层 28 çš„å¯é€‰å称。留空则会显示为“层 28â€ã€‚"
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr "3D 导航层 29 çš„å¯é€‰å称。留空则会显示为“层 29â€ã€‚"
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr "3D 导航层 3 çš„å¯é€‰å称。留空则会显示为“层 3â€ã€‚"
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr "3D 导航层 30 çš„å¯é€‰å称。留空则会显示为“层 30â€ã€‚"
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr "3D 导航层 31 çš„å¯é€‰å称。留空则会显示为“层 31â€ã€‚"
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr "3D 导航层 32 çš„å¯é€‰å称。留空则会显示为“层 32â€ã€‚"
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr "3D 导航层 4 çš„å¯é€‰å称。留空则会显示为“层 4â€ã€‚"
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr "3D 导航层 5 çš„å¯é€‰å称。留空则会显示为“层 5â€ã€‚"
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr "3D 导航层 6 çš„å¯é€‰å称。留空则会显示为“层 6â€ã€‚"
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr "3D 导航层 7 çš„å¯é€‰å称。留空则会显示为“层 7â€ã€‚"
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr "3D 导航层 8 çš„å¯é€‰å称。留空则会显示为“层 8â€ã€‚"
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr "3D 导航层 9 çš„å¯é€‰å称。留空则会显示为“层 9â€ã€‚"
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 1."
msgstr "3D 物ç†å±‚ 1 çš„å¯é€‰å称。"
@@ -59951,7 +61074,7 @@ msgid ""
"on threads. If servers get stalled too often when loading resources in a "
"thread, increase this number."
msgstr ""
-"在多线程模å¼ä¸‹ä½¿ç”¨æ—¶ï¼ŒæœåŠ¡å™¨ä¼šä½¿ç”¨å®ƒï¼ˆæœåŠ¡å™¨å’Œå¯è§†åŒ–端)。 RID 是预先分é…的,"
+"在多线程模å¼ä¸‹ä½¿ç”¨æ—¶ï¼ŒæœåŠ¡å™¨ä¼šä½¿ç”¨å®ƒï¼ˆæœåŠ¡å™¨å’Œå¯è§†åŒ–端)。RID 是预先分é…的,"
"以é¿å…åœ¨çº¿ç¨‹ä¸Šåœæ­¢è¯·æ±‚它们的æœåŠ¡å™¨ã€‚å¦‚æžœåœ¨çº¿ç¨‹ä¸­åŠ è½½èµ„æºæ—¶æœåС噍ç»å¸¸å¡é¡¿ï¼Œè¯·"
"增加此数字。"
@@ -59974,6 +61097,61 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default cell height for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_height].\n"
+"[b]Note:[/b] Currently not implemented."
+msgstr ""
+"2D 导航地图的默认å•å…ƒæ ¼é«˜åº¦ã€‚è§ [method Navigation2DServer."
+"map_set_cell_height]。\n"
+"[b]注æ„:[/b]尚未实现。"
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_size]."
+msgstr ""
+"2D 导航地图的默认å•元格大å°ã€‚è§ [method Navigation2DServer."
+"map_set_cell_size]。"
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 2D navigation maps. See [method "
+"Navigation2DServer.map_set_edge_connection_margin]."
+msgstr ""
+"2D 导航地图的默认边界连接边è·ã€‚è§ [method Navigation2DServer."
+"map_set_edge_connection_margin]。"
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell height for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_height]."
+msgstr ""
+"3D 导航地图的默认å•å…ƒæ ¼é«˜åº¦ã€‚è§ [method NavigationServer."
+"map_set_cell_height]。"
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_size]."
+msgstr ""
+"3D 导航地图的默认å•元格大å°ã€‚è§ [method NavigationServer.map_set_cell_size]。"
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 3D navigation maps. See [method "
+"NavigationServer.map_set_edge_connection_margin]."
+msgstr ""
+"3D 导航地图的默认边界连接边è·ã€‚è§ [method NavigationServer."
+"map_set_edge_connection_margin]。"
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default map up vector for 3D navigation maps. See [method NavigationServer."
+"map_set_up]."
+msgstr "3D 导航地图的默认地图上å‘é‡ã€‚è§ [method NavigationServer.map_set_up]。"
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -60024,11 +61202,11 @@ msgstr "使用TCP的连接å°è¯•的超时(以秒为å•ä½ï¼‰ã€‚"
#: doc/classes/ProjectSettings.xml
msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer."
-msgstr "[WebRTCDataChannel] 输入缓冲区的最大尺寸(å•ä½ï¼šåƒå­—节)。"
+msgstr "[WebRTCDataChannel] 输入缓冲区的最大尺寸(å•ä½ä¸º kiB)。"
#: doc/classes/ProjectSettings.xml
msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer."
-msgstr "[WebSocketClient] 输入缓冲区的最大尺寸,以 kiB 为å•ä½ã€‚"
+msgstr "[WebSocketClient] 输入缓冲区的最大尺寸(å•ä½ä¸º kiB)。"
#: doc/classes/ProjectSettings.xml
msgid "Maximum number of concurrent input packets for [WebSocketClient]."
@@ -60036,7 +61214,7 @@ msgstr "[WebSocketClient] 的最大并å‘输入数æ®åŒ…数。"
#: doc/classes/ProjectSettings.xml
msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer."
-msgstr "[WebSocketClient]输出缓冲区的最大尺寸,以kiB为å•ä½ã€‚"
+msgstr "[WebSocketClient]输出缓冲区的最大尺寸(å•ä½ä¸º kiB)。"
#: doc/classes/ProjectSettings.xml
msgid "Maximum number of concurrent output packets for [WebSocketClient]."
@@ -60044,7 +61222,7 @@ msgstr "[WebSocketClient]的最大并å‘输出数æ®åŒ…æ•°é‡ã€‚"
#: doc/classes/ProjectSettings.xml
msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer."
-msgstr "[WebSocketServer]输入缓冲区的最大尺寸,以kiB为å•ä½ã€‚"
+msgstr "[WebSocketServer]输入缓冲区的最大尺寸(å•ä½ä¸º kiB)。"
#: doc/classes/ProjectSettings.xml
msgid "Maximum number of concurrent input packets for [WebSocketServer]."
@@ -60052,7 +61230,7 @@ msgstr "[WebSocketServer] 的最大并å‘输入数æ®åŒ…æ•°é‡ã€‚"
#: doc/classes/ProjectSettings.xml
msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer."
-msgstr "[WebSocketServer] 输出缓冲区的最大尺寸,以 kiB 为å•ä½ã€‚"
+msgstr "[WebSocketServer] 输出缓冲区的最大尺寸(å•ä½ä¸º kiB)。"
#: doc/classes/ProjectSettings.xml
msgid "Maximum number of concurrent output packets for [WebSocketServer]."
@@ -60079,9 +61257,9 @@ msgid ""
"bundle will be used.\n"
"If in doubt, leave this setting empty."
msgstr ""
-"用于SSL连接的CAè¯ä¹¦åŒ…。如果设置为éžç©ºå€¼ï¼Œè¿™å°†[i]覆盖[/i]Godot默认的"
+"用于 SSL 连接的 CA è¯ä¹¦åŒ…。如果设置为éžç©ºå€¼ï¼Œè¿™å°†[i]覆盖[/i] Godot 默认的 "
"[url=https://github.com/godotengine/godot/blob/master/thirdparty/certs/ca-"
-"certificates.crt]Mozillaè¯ä¹¦åŒ…[/url]。如果留空,将使用默认的è¯ä¹¦åŒ…。\n"
+"certificates.crt]Mozilla è¯ä¹¦åŒ…[/url]。如果留空,将使用默认的è¯ä¹¦åŒ…。\n"
"如果有疑问,让这个设置为空。"
#: doc/classes/ProjectSettings.xml
@@ -60617,8 +61795,8 @@ msgid ""
"with hardware skinning, [code]VERTEX[/code] is the position [i]before[/i] "
"skinning."
msgstr ""
-"如果 [code]true[/code],则在 CPU è€Œéž GPU 上执行 2D 蒙皮。这æä¾›äº†ä¸Žå„ç§ç¡¬ä»¶"
-"的更大兼容性,并且在æŸäº›æƒ…况下也å¯èƒ½æ›´å¿«ã€‚\n"
+"如果为 [code]true[/code],则在 CPU è€Œéž GPU 上执行 2D 蒙皮。这æä¾›äº†ä¸Žå„ç§ç¡¬"
+"件的更大兼容性,并且在æŸäº›æƒ…况下也å¯èƒ½æ›´å¿«ã€‚\n"
"当å‰ä»…在 [member rendering/batching/options/use_batching] å¤„äºŽæ´»åŠ¨çŠ¶æ€æ—¶å¯"
"用。\n"
"[b]注æ„:[/b]䏿”¯æŒæŠ—锯齿软件蒙皮多边形,将在没有抗锯齿的情况下渲染。\n"
@@ -60634,8 +61812,8 @@ msgid ""
"Consider using the project setting [member rendering/batching/precision/"
"uv_contract] to prevent artifacts."
msgstr ""
-"如果 [code]true[/code],则在 2D 渲染中强制将顶点对é½åˆ°åƒç´ ã€‚å¯èƒ½æœ‰åŠ©äºŽæŸäº›åƒ"
-"素艺术风格。\n"
+"如果为 [code]true[/code],则在 2D 渲染中强制将顶点对é½åˆ°åƒç´ ã€‚å¯èƒ½æœ‰åŠ©äºŽæŸäº›"
+"åƒç´ è‰ºæœ¯é£Žæ ¼ã€‚\n"
"è¿™ç§æ•æ‰æ˜¯åœ¨é¡¶ç‚¹ç€è‰²å™¨ä¸­çš„ GPU 上执行的。\n"
"考虑使用项目设置[member rendering/batching/precision/uv_contract] æ¥é˜²æ­¢å‡ºçް"
"伪影。"
@@ -60879,6 +62057,7 @@ msgstr ""
"义。"
#: doc/classes/ProjectSettings.xml
+#, fuzzy
msgid ""
"This is the maximum number of shaders that can be compiled (or reconstructed "
"from cache) at the same time.\n"
@@ -60894,9 +62073,8 @@ msgid ""
"cause.\n"
"The default value is a conservative one, so you are advised to tweak it "
"according to the hardware you are targeting.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
"这是åŒä¸€æ—¶é—´æ‰€èƒ½ç¼–译(或者从缓存中é‡å»ºï¼‰çš„ç€è‰²å™¨çš„æœ€å¤§æ•°é‡ã€‚\n"
"在è¿è¡Œæ—¶ï¼Œå¦‚果已ç»è¾¾åˆ°äº†è¿™ä¸ªæ•°é‡ï¼Œå…¶ä»–能够进行异步编译的ç€è‰²å™¨ä¼šç›´æŽ¥ä½¿ç”¨å®ƒä»¬"
@@ -60910,14 +62088,31 @@ msgstr ""
"义。"
#: doc/classes/ProjectSettings.xml
+#, fuzzy
msgid ""
-"The default is a very conservative override for [code]rendering/gles3/"
-"shaders/max_concurrent_compiles[/code].\n"
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
"Depending on the specific devices you are targeting, you may want to raise "
"it.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
+msgstr ""
+"默认是针对 [code]rendering/gles3/shaders/max_concurrent_compiles[/code] 的覆"
+"盖,å–值éžå¸¸ä¿å®ˆã€‚\n"
+"æ ¹æ®ä½ æ‰€è®¾å®šä¸ºç›®æ ‡çš„特定设备,你å¯èƒ½ä¼šæƒ³è¦æé«˜è¿™ä¸ªå€¼ã€‚\n"
+"[b]注æ„:[/b]本设置仅在 [code]rendering/gles3/shaders/"
+"shader_compilation_mode[/code] [b]ä¸ä¸º[/b] [code]Synchronous[/code] 时有æ„"
+"义。"
+
+#: doc/classes/ProjectSettings.xml
+#, fuzzy
+msgid ""
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
+"Depending on the specific browsers you are targeting, you may want to raise "
+"it.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
"默认是针对 [code]rendering/gles3/shaders/max_concurrent_compiles[/code] 的覆"
"盖,å–值éžå¸¸ä¿å®ˆã€‚\n"
@@ -60927,13 +62122,13 @@ msgstr ""
"义。"
#: doc/classes/ProjectSettings.xml
+#, fuzzy
msgid ""
"The maximum size, in megabytes, that the ubershader cache can grow up to. On "
"startup, the least recently used entries will be deleted until the total "
"size is within bounds.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
"超级ç€è‰²å™¨ç¼“存所能增长到的最大大å°ï¼Œå•ä½ä¸ºå…†å­—节。在å¯åŠ¨æ—¶ï¼Œä¼šåˆ é™¤æœ€ä¹…æœªç”¨çš„"
"æ¡ç›®ï¼Œç›´åˆ°æ€»å¤§å°åˆ°è¾¾èŒƒå›´å†…。\n"
@@ -60942,13 +62137,30 @@ msgstr ""
"义。"
#: doc/classes/ProjectSettings.xml
+#, fuzzy
msgid ""
-"An override for [code]rendering/gles3/shaders/ubershader_cache_size_mb[/"
-"code], so a smaller maximum size can be configured for mobile platforms, "
-"where storage space is more limited.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for mobile platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
+msgstr ""
+"[code]rendering/gles3/shaders/ubershader_cache_size_mb[/code] 的覆盖项,为针"
+"对移动平å°é…置更å°çš„æœ€å¤§å¤§å°ï¼Œç§»åЍ平å°çš„存储空间更有é™ã€‚\n"
+"[b]注æ„:[/b]本设置仅在 [code]rendering/gles3/shaders/"
+"shader_compilation_mode[/code] 为 [code]Asynchronous + Cache[/code] 时有æ„"
+"义。"
+
+#: doc/classes/ProjectSettings.xml
+#, fuzzy
+msgid ""
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for web platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] Currently, shader caching is generally unavailable on web "
+"platforms.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
"[code]rendering/gles3/shaders/ubershader_cache_size_mb[/code] 的覆盖项,为针"
"对移动平å°é…置更å°çš„æœ€å¤§å¤§å°ï¼Œç§»åЍ平å°çš„存储空间更有é™ã€‚\n"
@@ -61000,9 +62212,10 @@ msgstr ""
"ç€è‰²å™¨ä¹Ÿä¸ä¼šä½¿ç”¨å¼‚步编译。"
#: doc/classes/ProjectSettings.xml
+#, fuzzy
msgid ""
-"An override for [code]rendering/gles3/shaders/shader_compilation_mode[/"
-"code], so asynchronous compilation can be disabled for mobile.\n"
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on mobile platforms.\n"
"You may want to do that since mobile GPUs generally won't support "
"ubershaders due to their complexity."
msgstr ""
@@ -61011,6 +62224,18 @@ msgstr ""
"移动 GPU 通常ä¸ä¼šæ”¯æŒè¶…级ç€è‰²å™¨ï¼Œå› ä¸ºå…¶å¤æ‚度较高。"
#: doc/classes/ProjectSettings.xml
+#, fuzzy
+msgid ""
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on web platforms.\n"
+"You may want to do that since certain browsers (especially on mobile "
+"platforms) generally won't support ubershaders due to their complexity."
+msgstr ""
+"[code]rendering/gles3/shaders/shader_compilation_mode[/code] 的覆盖项,用于为"
+"移动设备ç¦ç”¨å¼‚步编译。\n"
+"移动 GPU 通常ä¸ä¼šæ”¯æŒè¶…级ç€è‰²å™¨ï¼Œå› ä¸ºå…¶å¤æ‚度较高。"
+
+#: doc/classes/ProjectSettings.xml
msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
@@ -61328,7 +62553,7 @@ msgid ""
"VRAM-compressed textures will be exported on Android and iOS, increasing the "
"data pack's size."
msgstr ""
-"如果 [code]true[/code]ï¼Œä¸”ä¸æ”¯æŒ GLES3 驱动程åºï¼Œåˆ™å…许回退到 GLES2 驱动程"
+"如果为 [code]true[/code]ï¼Œä¸”ä¸æ”¯æŒ GLES3 驱动程åºï¼Œåˆ™å…许回退到 GLES2 驱动程"
"åºã€‚\n"
"[b]注æ„:[/b]两个显å¡é©±åЍ䏿˜¯äº’相替代的,所以为 GLES3 设计的游æˆåœ¨å›žé€€åˆ° "
"GLES2 æ—¶å¯èƒ½æ— æ³•正常è¿è¡Œã€‚特别是,GLES3 åŽç«¯çš„æŸäº›åŠŸèƒ½åœ¨ GLES2 中ä¸å¯ç”¨ã€‚å¯ç”¨"
@@ -61365,9 +62590,8 @@ msgid ""
"[member rendering/quality/filters/use_fxaa]."
msgstr ""
"如果设置为大于 [code]0.0[/code] 的值,对比度自适应é”化将应用于 3D 视å£ã€‚这具"
-"æœ‰è¾ƒä½Žçš„æ€§èƒ½æˆæœ¬ï¼Œå¯ç”¨äºŽæ¢å¤ä½¿ç”¨ FXAA æ—¶æŸå¤±çš„一些é”度。 [code]0.5[/code] 附"
-"近的值通常会给出最好的结果。å¦è§ [member rendering/quality/filters/"
-"use_fxaa]。"
+"æœ‰è¾ƒä½Žçš„æ€§èƒ½æˆæœ¬ï¼Œå¯ç”¨äºŽæ¢å¤ä½¿ç”¨ FXAA æ—¶æŸå¤±çš„一些é”度。[code]0.5[/code] 附近"
+"的值通常会给出最好的结果。å¦è§ [member rendering/quality/filters/use_fxaa]。"
#: doc/classes/ProjectSettings.xml
msgid ""
@@ -61385,8 +62609,8 @@ msgstr ""
"如果为 [code]true[/code],则使用快速åŽå¤„ç†è¿‡æ»¤å™¨ä½¿æ¡å¸¦æ˜Žæ˜¾ä¸é‚£ä¹ˆæ˜Žæ˜¾ã€‚在æŸäº›"
"情况下,去带å¯èƒ½ä¼šå¼•å…¥ç¨å¾®æ˜Žæ˜¾çš„æŠ–动模å¼ã€‚å»ºè®®ä»…åœ¨å®žé™…éœ€è¦æ—¶å¯ç”¨åŽ»æ¡å¸¦ï¼Œå› ä¸º"
"抖动模å¼ä¼šä½¿æ— æŸåŽ‹ç¼©çš„å±å¹•截图更大。\n"
-"[b]注æ„:[/b]仅在 GLES3 åŽç«¯å¯ç”¨ã€‚ [member rendering/quality/depth/hdr] 也必"
-"须为 [code]true[/code] æ‰èƒ½ä½¿åŽ»è‰²å¸¦æœ‰æ•ˆã€‚\n"
+"[b]注æ„:[/b]仅在 GLES3 åŽç«¯å¯ç”¨ã€‚[member rendering/quality/depth/hdr] 也必须"
+"为 [code]true[/code] æ‰èƒ½ä½¿åŽ»è‰²å¸¦æœ‰æ•ˆã€‚\n"
"[b]注æ„:[/b]已知在移动平å°ä¸Šçš„åŽ»è‰²å¸¦å­˜åœ¨ç ´åæ¸²æŸ“的问题。因此,建议在用于移动"
"平尿—¶ç¦ç”¨æ­¤é€‰é¡¹ã€‚"
@@ -61412,10 +62636,10 @@ msgid ""
"mobile as less memory bandwidth is used. If [code]false[/code], linear "
"mipmap filtering (also called \"trilinear filtering\") is used."
msgstr ""
-"如果 [code]true[/code],则在使用 mipmap 时使用最近邻 mipmap 过滤(也称为“åŒçº¿"
-"性过滤â€ï¼‰ï¼Œè¿™å°†å¯¼è‡´ mipmap 阶段之间出现å¯è§çš„æŽ¥ç¼ã€‚由于使用较少的内存带宽,这"
-"å¯èƒ½ä¼šæé«˜ç§»åŠ¨è®¾å¤‡çš„æ€§èƒ½ã€‚å¦‚æžœ [code]false[/code],则使用线性 mipmap 过滤(也"
-"称为“三线性过滤â€ï¼‰ã€‚"
+"如果为 [code]true[/code],则在使用 mipmap 时使用最近邻 mipmap 过滤(也称为“åŒ"
+"线性过滤â€ï¼‰ï¼Œè¿™å°†å¯¼è‡´ mipmap 阶段之间出现å¯è§çš„æŽ¥ç¼ã€‚由于使用较少的内存带宽,"
+"è¿™å¯èƒ½ä¼šæé«˜ç§»åŠ¨è®¾å¤‡çš„æ€§èƒ½ã€‚å¦‚æžœ [code]false[/code],则使用线性 mipmap 过滤"
+"(也称为“三线性过滤â€ï¼‰ã€‚"
#: doc/classes/ProjectSettings.xml
msgid ""
@@ -61438,8 +62662,8 @@ msgid ""
"framebuffer_allocation] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-"由于性能或驱动支æŒé—®é¢˜ï¼Œåœ¨ç§»åŠ¨è®¾å¤‡ä¸Šå¯¹[member rendering/quality/"
-"intended_usage/framebuffer_allocation]ä»¥ä½Žé…æ•°å€¼è¦†ç›–。"
+"由于性能或驱动支æŒé—®é¢˜ï¼Œåœ¨ç§»åŠ¨è®¾å¤‡ä¸Šå¯¹ [member rendering/quality/"
+"intended_usage/framebuffer_allocation] ä»¥ä½Žé…æ•°å€¼è¦†ç›–。"
#: doc/classes/ProjectSettings.xml
msgid ""
@@ -61455,8 +62679,8 @@ 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/lightmapping/use_bicubic_sampling]进"
-"行低端覆盖,以å‡å°‘带宽使用。"
+"在移动设备上对 [member rendering/quality/lightmapping/use_bicubic_sampling] "
+"进行低端覆盖,以å‡å°‘带宽使用。"
#: doc/classes/ProjectSettings.xml
msgid ""
@@ -61480,8 +62704,8 @@ msgid ""
"variants of reflection probes and panorama backgrounds (sky). Those blurred "
"variants are used by rough materials."
msgstr ""
-"如果 [code]true[/code]ï¼Œåˆ™ä½¿ç”¨å¤§é‡æ ·æœ¬æ¥åˆ›å»ºå射探针和全景背景(天空)的模糊"
-"å˜ä½“。这些模糊的å˜ä½“å¯ä»¥è¢«ç²—糙的æè´¨ä½¿ç”¨ã€‚"
+"如果为 [code]true[/code]ï¼Œåˆ™ä½¿ç”¨å¤§é‡æ ·æœ¬æ¥åˆ›å»ºå射探针和全景背景(天空)的模"
+"糊å˜ä½“。这些模糊的å˜ä½“å¯ä»¥è¢«ç²—糙的æè´¨ä½¿ç”¨ã€‚"
#: doc/classes/ProjectSettings.xml
msgid ""
@@ -61502,7 +62726,7 @@ 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 "
+"é™åˆ¶è¾ç…§åº¦è´´å›¾çš„大å°ï¼Œé€šå¸¸ç”± [member Sky.radiance_size] 确定。与 [member "
"rendering/quality/reflections/high_quality_ggx] 类似,更大的尺寸会产生更高质"
"é‡çš„è¾ç…§åº¦è´´å›¾ã€‚使用高频 HDRI 贴图时使用较高的值,å¦åˆ™è¯·å°½å¯èƒ½é™ä½Žè¯¥å€¼ã€‚\n"
"[b]注æ„:[/b]中低档硬件ä¸èƒ½å¾ˆå¥½åœ°æ”¯æŒå¤æ‚çš„è¾ç…§åº¦è´´å›¾ï¼Œå¦‚果设置太高å¯èƒ½ä¼šå´©"
@@ -61773,8 +62997,8 @@ msgid ""
"Try enabling this option if you see any visual anomalies in 3D (such as "
"incorrect object visibility)."
msgstr ""
-"如果 [code]true[/code],则将在渲染和 Godot 物ç†ä¸­ä½¿ç”¨çº¿ç¨‹å®‰å…¨ç‰ˆæœ¬çš„ BVH(边界"
-"体积层次结构)。\n"
+"如果为 [code]true[/code],则将在渲染和 Godot 物ç†ä¸­ä½¿ç”¨çº¿ç¨‹å®‰å…¨ç‰ˆæœ¬çš„ BVH(边"
+"界体积层次结构)。\n"
"如果您在 3D ä¸­çœ‹åˆ°ä»»ä½•è§†è§‰å¼‚å¸¸ï¼Œä¾‹å¦‚ä¸æ­£ç¡®çš„å¯è§æ€§å¯¹è±¡ï¼Œè¯·å°è¯•å¯ç”¨æ­¤é€‰é¡¹ã€‚"
#: doc/classes/ProjectSettings.xml
@@ -61791,8 +63015,8 @@ msgid ""
msgstr ""
"如果为 [code]true[/code],纹ç†å¯¼å…¥å™¨å°†ä½¿ç”¨ BPTC 算法导入 VRAM 压缩的纹ç†ã€‚æ­¤"
"纹ç†åŽ‹ç¼©ç®—æ³•ä»…åœ¨æ¡Œé¢å¹³å°å¾—到支æŒï¼Œå¹¶ä¸”仅在使用 GLES3 渲染器时æ‰å—支æŒã€‚\n"
-"[b]注æ„:[/b]更改此设置ä¸ä¼š[i]ä¸[/i]å½±å“之å‰å·²ç»å¯¼å…¥çš„纹ç†ã€‚è¦å°†æ­¤è®¾ç½®åº”用于"
-"已导入的纹ç†ï¼Œè¯·é€€å‡ºç¼–辑器,删除ä½äºŽé¡¹ç›®æ–‡ä»¶å¤¹å†…çš„ [code].import/[/code] 文件"
+"[b]注æ„:[/b]更改此设置[i]ä¸ä¼š[/i]å½±å“之å‰å·²ç»å¯¼å…¥çš„纹ç†ã€‚è¦å°†æ­¤è®¾ç½®åº”用于已"
+"导入的纹ç†ï¼Œè¯·é€€å‡ºç¼–辑器,删除ä½äºŽé¡¹ç›®æ–‡ä»¶å¤¹å†…çš„ [code].import/[/code] 文件"
"夹,然åŽé‡æ–°å¯åŠ¨ç¼–è¾‘å™¨ï¼ˆå‚阅 [member application/config/"
"use_hidden_project_data_directory])。"
@@ -62022,7 +63246,6 @@ msgid ""
"- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/"
"code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, "
"small grid radius values may lead to unwanted groupings.\n"
-"[/codeblock]\n"
"[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more "
"effective and faster [VisibilityNotifier] functionality. For most use cases, "
"[method Vector3.distance_to] or [method Vector3.distance_squared_to] are "
@@ -62072,7 +63295,6 @@ msgstr ""
"- 如果你的 [member grid_radius] 比 [code]Vector3(1, 1, 1)[/code] å°ï¼Œå°±ä¼šè¢«èˆ"
"入到 [code]Vector3(1, 1, 1)[/code]。因此,较å°çš„网格åŠå¾„å¯èƒ½ä¼šå¯¼è‡´æ„外的分"
"组。\n"
-"[/codeblock]\n"
"[b]注æ„:[/b]Godot 4.0 会移除 [ProximityGroup],使用更高效ã€å¿«é€Ÿçš„ "
"[VisibilityNotifier] 功能。对于大多数情况,[method Vector3.distance_to] 和 "
"[method Vector3.distance_squared_to] 都足够快了,尤其是在使用 [Timer] 节点å‡"
@@ -62195,7 +63417,7 @@ msgid ""
"operations (obtaining axis-angle and performing SLERP, in particular) are "
"more efficient and robust against floating-point errors."
msgstr ""
-"一个用于表示 3D 旋转的å•ä½å››å…ƒæ•°ã€‚四元数需è¦ç»è¿‡å½’一化æ‰èƒ½ç”¨äºŽæ—‹è½¬ã€‚\n"
+"用于表示 3D 旋转的å•ä½å››å…ƒæ•°ã€‚四元数需è¦ç»è¿‡å½’一化æ‰èƒ½ç”¨äºŽæ—‹è½¬ã€‚\n"
"它类似于 Basis,åŽè€…实现了旋转的矩阵表示,并且å¯ä»¥ä½¿ç”¨è½´-è§’å¯¹æˆ–æ¬§æ‹‰è§’è¿›è¡Œå‚æ•°"
"化。Basis å¯ä»¥å­˜å‚¨æ—‹è½¬ã€ç¼©æ”¾å’Œé”™åˆ‡ï¼Œè€Œ Quat åªå­˜å‚¨æ—‹è½¬ã€‚\n"
"由于它的紧凑性和在内存中的存储方å¼ï¼ŒæŸäº›æ“作(特别是获得轴角和执行 SLERP)更"
@@ -62367,12 +63589,12 @@ msgid ""
"[Basis] matrix. If a vector is transformed by an identity quaternion, it "
"will not change."
msgstr ""
-"å•ä½å››å…ƒæ•°ï¼Œä»£è¡¨æ— æ—‹è½¬ã€‚等效于å•ä½ [Basis] 矩阵。如果一个å‘é‡è¢«ä¸€ä¸ªå•ä½å››å…ƒæ•°"
+"å•ä½å››å…ƒæ•°ï¼Œä»£è¡¨æ— æ—‹è½¬ã€‚相当于å•ä½ [Basis] 矩阵。如果一个å‘é‡è¢«ä¸€ä¸ªå•ä½å››å…ƒæ•°"
"å˜æ¢ï¼Œå®ƒä¸ä¼šæ”¹å˜ã€‚"
#: doc/classes/RandomNumberGenerator.xml
msgid "A class for generating pseudo-random numbers."
-msgstr "一个用于生æˆä¼ªéšæœºæ•°çš„ç±»ã€‚"
+msgstr "用于生æˆä¼ªéšæœºæ•°çš„ç±»ã€‚"
#: doc/classes/RandomNumberGenerator.xml
msgid ""
@@ -62396,8 +63618,8 @@ msgid ""
msgstr ""
"RandomNumberGenerator 是一个用于生æˆä¼ªéšæœºæ•°çš„ç±»ã€‚å®ƒç›®å‰ä½¿ç”¨ [url=http://www."
"pcg-random.org/]PCG32[/url]。\n"
-"[b]注:[/b]底层算法是实现细节。因此,跨 Godot 版本的å¯é‡å¤éšæœºæµä¸åº”该ä¾èµ–于"
-"此。\n"
+"[b]注æ„:[/b]底层算法是实现细节。因此,跨 Godot 版本的å¯é‡å¤éšæœºæµä¸åº”该ä¾èµ–"
+"于此。\n"
"è¦æ ¹æ®æ—¶é—´ç›¸å…³ç§å­ç”Ÿæˆéšæœºæµ®ç‚¹æ•°ï¼Œåœ¨ç»™å®šèŒƒå›´å†…ï¼š\n"
"[codeblock]\n"
"var rng = RandomNumberGenerator.new()\n"
@@ -62405,7 +63627,7 @@ msgstr ""
" rng.randomize()\n"
" var my_random_number = rng.randf_range(-10.0, 10.0)\n"
"[/codeblock]\n"
-"[b]注:[/b] [member seed] å’Œ [member state] å±žæ€§çš„é»˜è®¤å€¼æ˜¯ä¼ªéšæœºçš„,在调用"
+"[b]注æ„:[/b][member seed] å’Œ [member state] å±žæ€§çš„é»˜è®¤å€¼æ˜¯ä¼ªéšæœºçš„,在调用 "
"[method randomize] 时会å‘生å˜åŒ–。此处记录的 [code]0[/code] 值是一个å ä½ç¬¦ï¼Œè€Œ"
"䏿˜¯å®žé™…的默认ç§å­ã€‚"
@@ -62479,17 +63701,17 @@ msgid ""
msgstr ""
"æ ¹æ®ç»™å®šçš„ç§å­å€¼åˆå§‹åŒ–éšæœºæ•°ç”Ÿæˆå™¨çжæ€ã€‚给定的ç§å­å°†æä¾›å¯é‡å¤çš„ä¼ªéšæœºæ•°åº"
"列。\n"
-"[b]注:[/b] RNG 没有雪崩效应,å¯ä»¥è¾“å‡ºç›¸ä¼¼çš„éšæœºæµç»™å®šç›¸ä¼¼çš„ç§å­ã€‚如果ç§å­æ¥"
+"[b]注æ„:[/b]RNG 没有雪崩效应,å¯ä»¥è¾“å‡ºç›¸ä¼¼çš„éšæœºæµç»™å®šç›¸ä¼¼çš„ç§å­ã€‚如果ç§å­æ¥"
"è‡ªå¤–éƒ¨ï¼Œè¯·è€ƒè™‘ä½¿ç”¨å“ˆå¸Œå‡½æ•°æ¥æé«˜ç§å­è´¨é‡ã€‚\n"
-"[b]注:[/b]设置这个属性会产生改å˜å†…部[member state]的副作用,所以一定è¦åœ¨ä¿®æ”¹"
-"[member state][i]之å‰[/i]åˆå§‹åŒ–ç§å­ï¼š\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"
+"rng.state = 100 # æ¢å¤ä¹‹å‰ä¿å­˜çš„æŸä¸ªçŠ¶æ€ã€‚\n"
"[/codeblock]\n"
-"[b]警告:[/b]该属性的getter返回之å‰çš„[member state]ï¼Œè€Œä¸æ˜¯åˆå§‹ç§å­å€¼ï¼Œè¿™å°†åœ¨"
-"Godot 4.0中修å¤ã€‚"
+"[b]警告:[/b]该属性的 getter 返回之å‰çš„ [member state]ï¼Œè€Œä¸æ˜¯åˆå§‹ç§å­å€¼ï¼Œè¿™"
+"将在 Godot 4.0 中修å¤ã€‚"
#: doc/classes/RandomNumberGenerator.xml
msgid ""
@@ -62513,10 +63735,10 @@ msgstr ""
"[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"
+"var saved_state = rng.state # ä¿å­˜å½“å‰çжæ€ã€‚\n"
+"print(rng.randf()) # 让内部状æ€å‘生步进。\n"
+"rng.state = saved_state # æ¢å¤çжæ€ã€‚\n"
+"print(rng.randf()) # 输出和之å‰ä¸€æ ·çš„值。\n"
"[/codeblock]\n"
"[b]注æ„:[/b]ä¸è¦å°†çжæ€è®¾ç½®ä¸ºä»»æ„å€¼ï¼Œå› ä¸ºéšæœºæ•°ç”Ÿæˆå™¨è¦æ±‚状æ€å…·æœ‰æŸäº›ç‰¹æ€§æ‰èƒ½"
"正常è¿è¡Œã€‚它应该åªè®¾ç½®ä¸ºæ¥è‡ªçжæ€å±žæ€§æœ¬èº«çš„值。è¦ä½¿ç”¨ä»»æ„输入åˆå§‹åŒ–éšæœºæ•°ç”Ÿæˆ"
@@ -62527,15 +63749,16 @@ msgid "Abstract base class for range-based controls."
msgstr "基于范围的控件的抽象基类。"
#: doc/classes/Range.xml
-#, fuzzy
msgid ""
"Range is a base class for [Control] nodes that change a floating-point "
"[member value] between a [member min_value] and [member max_value], using a "
"configured [member step] and [member page] size. See e.g. [ScrollBar] and "
"[Slider] for examples of higher level nodes using Range."
msgstr ""
-"Range是一个用于[Control]节点的基类,它在[i]最å°å€¼[/i]å’Œ[i]最大值[/i]之间改å˜"
-"一个浮点[i]值[/i],用于[i]步进[/i]å’Œ[i]页é¢[/i],例如[ScrollBar]。"
+"Range 是一些 [Control] 节点的基类,这些节点能够将浮点值 [member value] 在最å°"
+"值 [member min_value] 和最大值 [member max_value] 之间进行调整,并且能够对步"
+"é•¿ [member step] å’Œåˆ†é¡µå¤§å° [member page] 进行设置。使用 Range 的更高级节点示"
+"例请å‚考 [ScrollBar] å’Œ [Slider]。"
#: doc/classes/Range.xml
msgid ""
@@ -62554,20 +63777,20 @@ msgstr "使该 [Range] åœæ­¢ä¸Žä»»ä½•å…¶ä»– Range 共享其æˆå‘˜å˜é‡ã€‚"
#: doc/classes/Range.xml
msgid ""
"If [code]true[/code], [member value] may be greater than [member max_value]."
-msgstr "如果[code]true[/code],[member value]å¯èƒ½å¤§äºŽ[member max_value]。"
+msgstr "如果为 [code]true[/code],[member value]å¯èƒ½å¤§äºŽ[member max_value]。"
#: doc/classes/Range.xml
msgid ""
"If [code]true[/code], [member value] may be less than [member min_value]."
-msgstr "如果[code]true[/code],[member value]å¯èƒ½å°äºŽ[member min_value]。"
+msgstr "如果为 [code]true[/code],[member value]å¯èƒ½å°äºŽ[member min_value]。"
#: doc/classes/Range.xml
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 ""
-"如果[code]true[/code],并且[code]min_value[/code]大于0,[code]value[/code]将"
-"以指数方å¼è€Œä¸æ˜¯çº¿æ€§æ–¹å¼è¡¨ç¤ºã€‚"
+"如果为 [code]true[/code],并且[code]min_value[/code]大于0,[code]value[/code]"
+"将以指数方å¼è€Œä¸æ˜¯çº¿æ€§æ–¹å¼è¡¨ç¤ºã€‚"
#: doc/classes/Range.xml
msgid ""
@@ -62601,7 +63824,7 @@ msgid ""
"If [code]true[/code], [code]value[/code] will always be rounded to the "
"nearest integer."
msgstr ""
-"如果 [code]true[/code],[code]value[/code] 将始终四èˆäº”入到最接近的整数。"
+"如果为 [code]true[/code],[code]value[/code] 将始终四èˆäº”入到最接近的整数。"
#: doc/classes/Range.xml
msgid ""
@@ -62897,7 +64120,7 @@ msgstr "射线的长度。"
#: doc/classes/RayShape.xml doc/classes/RayShape2D.xml
msgid "If [code]true[/code], allow the shape to return the correct normal."
-msgstr "如果 [code]true[/code],则å…许形状返回正确的法线。"
+msgstr "如果为 [code]true[/code],则å…许形状返回正确的法线。"
#: doc/classes/RayShape2D.xml
msgid "Ray shape for 2D collisions."
@@ -63088,7 +64311,7 @@ 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"
+"ä»»ä½•ä¿æŒå¼•用计数对象的基类。[Resource] 和许多其他辅助对象继承了这个类。\n"
"与其他 [Object] 类型ä¸åŒï¼ŒReference ä¿ç•™ä¸€ä¸ªå†…部引用计数器,以便在ä¸ä½¿ç”¨ä¸”ä»…"
"在那时自动释放。因此,ä¸éœ€è¦ä½¿ç”¨ [method Object.free] 手动释放引用。\n"
"在ç»å¤§å¤šæ•°ç”¨ä¾‹ä¸­ï¼Œæ‚¨åªéœ€è¦å®žä¾‹åŒ–和使用 [Reference] 派生类型。此类中æä¾›çš„æ–¹æ³•"
@@ -63136,8 +64359,8 @@ msgid ""
"display a rectangle filled with a solid color, consider using [ColorRect] "
"instead."
msgstr ""
-"矩形框,仅在其矩形周围显示 [member border_color] 边框颜色。 [ReferenceRect] "
-"没有填充 [Color]ã€‚å¦‚æžœä½ éœ€è¦æ˜¾ç¤ºå¡«å……纯色的矩形,请考虑使用 [ColorRect] 。"
+"矩形框,仅在其矩形周围显示 [member border_color] 边框颜色。[ReferenceRect] 没"
+"有填充 [Color]ã€‚å¦‚æžœä½ éœ€è¦æ˜¾ç¤ºå¡«å……纯色的矩形,请考虑使用 [ColorRect] 。"
#: doc/classes/ReferenceRect.xml
msgid "Sets the border [Color] of the [ReferenceRect]."
@@ -63237,8 +64460,8 @@ msgid ""
"the reflection probe slower to render; you may want to disable this if using "
"the [constant UPDATE_ALWAYS] [member update_mode]."
msgstr ""
-"如果[code]true[/code],则在å射探测中计算阴影。这使得å射探针渲染更慢;如果想"
-"ç¦ç”¨å®ƒ,å¯ä»¥ä½¿ç”¨ [constant UPDATE_ALWAYS] [member update_mode]。"
+"如果为 [code]true[/code],则在å射探测中计算阴影。这使得å射探针渲染更慢;如果"
+"想ç¦ç”¨å®ƒ,å¯ä»¥ä½¿ç”¨ [constant UPDATE_ALWAYS] [member update_mode]。"
#: doc/classes/ReflectionProbe.xml
msgid ""
@@ -63287,7 +64510,7 @@ msgid ""
"lighting is then controlled by the [code]interior_ambient_*[/code] "
"properties."
msgstr ""
-"如果[code]true[/code],å射将忽略天空的贡献。然åŽçŽ¯å¢ƒç…§æ˜Žç”±"
+"如果为 [code]true[/code],å射将忽略天空的贡献。然åŽçŽ¯å¢ƒç…§æ˜Žç”±"
"[code]internal_ambient_*[/code]属性控制。"
#: doc/classes/ReflectionProbe.xml
@@ -63423,61 +64646,63 @@ msgid ""
"[b]Tip:[/b] You can use [url=https://regexr.com/]Regexr[/url] to test "
"regular expressions online."
msgstr ""
-"正则表达å¼ï¼ˆæˆ–ç§°regex)是一ç§ç´§å‡‘的语言,å¯ç”¨äºŽè¯†åˆ«éµå¾ªç‰¹å®šæ¨¡å¼çš„字符串,如"
-"URLã€ç”µå­é‚®ä»¶åœ°å€ã€å®Œæ•´å¥å­ç­‰ã€‚例如,一个[code]ab[0-9][/code]的正则表达å¼å¯ä»¥"
-"找到[code]ab[/code]åŽé¢è·Ÿç€[code]0[/code]到[code]9[/code]的任何数字的字符串。"
-"è¦æƒ³æ›´æ·±å…¥åœ°äº†è§£ï¼Œä½ å¯ä»¥å¾ˆå®¹æ˜“地在互è”网上找到å„ç§æ•™ç¨‹å’Œè¯¦ç»†è§£é‡Šã€‚\n"
-"首先,在使用RegEx对象之å‰ï¼Œéœ€è¦ç”¨[method compile] 对其进行æœç´¢æ¨¡å¼çš„编译。\n"
+"正则表达å¼ï¼ˆæˆ–ç§° regex)是一ç§ç´§å‡‘的语言,å¯ç”¨äºŽè¯†åˆ«éµå¾ªç‰¹å®šæ¨¡å¼çš„字符串,如 "
+"URLã€ç”µå­é‚®ä»¶åœ°å€ã€å®Œæ•´å¥å­ç­‰ã€‚ä¾‹å¦‚æ­£åˆ™è¡¨è¾¾å¼ [code]ab[0-9][/code] å¯ä»¥æ‰¾åˆ° "
+"[code]ab[/code] åŽé¢è·Ÿç€ [code]0[/code] 到 [code]9[/code] 的任何数字的字符"
+"ä¸²ã€‚è¦æƒ³æ›´æ·±å…¥åœ°äº†è§£ï¼Œä½ å¯ä»¥å¾ˆå®¹æ˜“地在互è”网上找到å„ç§æ•™ç¨‹å’Œè¯¦ç»†è§£é‡Šã€‚\n"
+"首先,在使用 RegEx 对象之å‰ï¼Œéœ€è¦ç”¨ [method compile] 对其进行æœç´¢æ¨¡å¼çš„ç¼–"
+"译。\n"
"[codeblock]\n"
"var regex = RegEx.new()\n"
"regex.compile(\"\\\\w-(\\\\d+)\")\n"
"[/codeblock]\n"
-"在为表达å¼è½¬ä¹‰ä¹‹å‰ï¼Œå¿…须先为GDScript转义æœç´¢æ¨¡å¼ã€‚例如,[code]compile(\"\\"
-"\\d+\")[/code]会被RegEx读æˆ[code]\\d+[/code]ã€‚åŒæ ·ï¼Œ[code]compile(\"\\\"(?:\\"
-"\\\\\\.|[^\\\"])*\\\")[/code]会被读作[code]\"(?:\\.|[^\"])*\"[/code]。\n"
-"使用 [method search] ,你å¯ä»¥åœ¨ç»™å®šçš„æ–‡æœ¬ä¸­åŒ¹é…模å¼ã€‚如果匹é…到一个模å¼ï¼Œå°†è¿”"
-"回[RegExMatch],你å¯ä»¥ä½¿ç”¨[method RegExMatch.get_string]å’Œ[method RegExMatch."
-"get_start]等方法检索结果的细节。\n"
+"在为表达å¼è½¬ä¹‰ä¹‹å‰ï¼Œå¿…须先为 GDScript 转义æœç´¢æ¨¡å¼ã€‚例如,[code]compile(\"\\"
+"\\d+\")[/code] 会被 RegEx è¯»æˆ [code]\\d+[/code]ã€‚åŒæ ·ï¼Œ[code]compile(\"\\"
+"\"(?:\\\\\\\\.|[^\\\"])*\\\")[/code] 会被读作 [code]\"(?:\\.|[^\"])*\"[/"
+"code]。\n"
+"使用 [method search],你å¯ä»¥åœ¨ç»™å®šçš„æ–‡æœ¬ä¸­åŒ¹é…模å¼ã€‚如果匹é…到一个模å¼ï¼Œå°†è¿”"
+"回 [RegExMatch],你å¯ä»¥ä½¿ç”¨ [method RegExMatch.get_string] å’Œ [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"
+" print(result.get_string()) # 会输出 n-0123\n"
"[/codeblock]\n"
-"æ•获组的结果[code]()[/code]å¯ä»¥é€šè¿‡å‘[RegExMatch]中的å„ç§æ–¹æ³•ä¼ é€’ç»„å·æ¥æ£€ç´¢ã€‚"
-"默认是组0,并且将总是指整个模å¼ã€‚在上é¢çš„例å­ä¸­ï¼Œè°ƒç”¨[code]result."
-"get_string(1)[/code]会得到[code]0123[/code]。\n"
-"这个版本的RegEx也支æŒå‘½åçš„æ•获组,åç§°å¯ä»¥ç”¨æ¥æ£€ç´¢ç»“果。如果两个或更多的组有"
-"相åŒçš„å称,那么这个åç§°å°†åªæŒ‡ç¬¬ä¸€ä¸ªæœ‰åŒ¹é…的组。\n"
+"æ•获组的结果 [code]()[/code] å¯ä»¥é€šè¿‡å‘ [RegExMatch] 中的å„ç§æ–¹æ³•ä¼ é€’ç»„å·æ¥æ£€"
+"索。默认是组 0,并且将总是指整个模å¼ã€‚在上é¢çš„例å­ä¸­ï¼Œè°ƒç”¨ [code]result."
+"get_string(1)[/code] 会得到 [code]0123[/code]。\n"
+"这个版本的 RegEx 也支æŒå‘½åçš„æ•获组,åç§°å¯ä»¥ç”¨æ¥æ£€ç´¢ç»“果。如果两个或更多的组"
+"有相åŒçš„å称,那么这个åç§°å°†åªæŒ‡ç¬¬ä¸€ä¸ªæœ‰åŒ¹é…的组。\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"
+"var result = regex.search(\"数字是 x2f\")\n"
"if result:\n"
-" print(result.get_string(\"digit\")) # Would print 2f\n"
+" print(result.get_string(\"digit\")) # 会输出 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"
-"# Would print 01 03 0 3f 42\n"
+"# 会输出 01 03 0 3f 42\n"
"[/codeblock]\n"
-"[b]使用RegEx分割字符串的例å­ï¼š[/b]\n"
+"[b]使用 RegEx 分割字符串的例å­ï¼š[/b]\n"
"[codeblock]\n"
"var regex = RegEx.new()\n"
-"regex.compile(\"\\\\S+\") # Negated whitespace character class.\n"
+"regex.compile(\"\\\\S+\") # éžç©ºç™½å­—符类。\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"
+"# `results` æ•°ç»„åŒ…å« \"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/"
+"[b]注æ„:[/b]Godot çš„ regex 实现基于的是 [url=https://www.pcre.org/]PCRE2[/"
+"url]。你å¯ä»¥æŸ¥çœ‹å®Œæ•´çš„æ¨¡å¼å‚考[url=https://www.pcre.org/current/doc/html/"
"pcre2pattern.html]这里[/url]。\n"
-"[b]æç¤ºï¼š[/b] ä½ å¯ä»¥ä½¿ç”¨[url=https://regexr.com/]Regexr[/url]æ¥åœ¨çº¿æµ‹è¯•正则表"
-"è¾¾å¼ã€‚"
+"[b]æç¤ºï¼š[/b] ä½ å¯ä»¥ä½¿ç”¨ [url=https://regexr.com/]Regexr[/url] æ¥åœ¨çº¿æµ‹è¯•正则"
+"表达å¼ã€‚"
#: modules/regex/doc_classes/RegEx.xml
msgid ""
@@ -63493,8 +64718,8 @@ msgid ""
"compilation is successful. If an error is encountered, details are printed "
"to standard output and an error is returned."
msgstr ""
-"编译并指定è¦ä½¿ç”¨çš„æœç´¢æ¨¡å¼ã€‚如果编译æˆåŠŸï¼Œè¿”å›ž[constant OK]。如果é‡åˆ°é”™è¯¯ï¼Œç»†"
-"节将被打å°åˆ°æ ‡å‡†è¾“出,并返回一个错误。"
+"编译并指定è¦ä½¿ç”¨çš„æœç´¢æ¨¡å¼ã€‚如果编译æˆåŠŸï¼Œè¿”å›ž [constant OK]。如果é‡åˆ°é”™è¯¯ï¼Œ"
+"细节将被打å°åˆ°æ ‡å‡†è¾“出,并返回一个错误。"
#: modules/regex/doc_classes/RegEx.xml
msgid "Returns the number of capturing groups in compiled pattern."
@@ -63522,9 +64747,9 @@ msgid ""
"region to search within can be specified without modifying where the start "
"and end anchor would be."
msgstr ""
-"在文本中æœç´¢ç¼–译åŽçš„æ¨¡å¼ã€‚如果找到,返回第一个匹é…结果的[RegExMatch]容器,å¦"
-"则返回 [code]null[/code]。å¯ä»¥æŒ‡å®šè¦æœç´¢çš„区域,而ä¸éœ€è¦ä¿®æ”¹å¼€å§‹å’Œç»“æŸé”šç‚¹çš„"
-"ä½ç½®ã€‚"
+"在文本中æœç´¢ç¼–译åŽçš„æ¨¡å¼ã€‚如果找到,返回第一个匹é…结果的 [RegExMatch] 容器,"
+"å¦åˆ™è¿”回 [code]null[/code]。å¯ä»¥æŒ‡å®šè¦æœç´¢çš„区域,而ä¸éœ€è¦ä¿®æ”¹å¼€å§‹å’Œç»“æŸé”šç‚¹"
+"çš„ä½ç½®ã€‚"
#: modules/regex/doc_classes/RegEx.xml
msgid ""
@@ -63533,9 +64758,9 @@ msgid ""
"empty array is returned instead. The region to search within can be "
"specified without modifying where the start and end anchor would be."
msgstr ""
-"在文本中æœç´¢ç¼–译过的模å¼ã€‚为æ¯ä¸ªä¸é‡å çš„结果返回一个[RegExMatch]容器数组。如"
-"果没有å‘现任何结果,则返回一个空数组。å¯ä»¥æŒ‡å®šè¦æœç´¢çš„区域,而ä¸éœ€è¦ä¿®æ”¹å¼€å§‹"
-"和结æŸé”šç‚¹çš„ä½ç½®ã€‚"
+"在文本中æœç´¢ç¼–译过的模å¼ã€‚为æ¯ä¸ªä¸é‡å çš„结果返回一个 [RegExMatch] 容器数组。"
+"如果没有å‘现任何结果,则返回一个空数组。å¯ä»¥æŒ‡å®šè¦æœç´¢çš„区域,而ä¸éœ€è¦ä¿®æ”¹å¼€"
+"始和结æŸé”šç‚¹çš„ä½ç½®ã€‚"
#: modules/regex/doc_classes/RegEx.xml
msgid ""
@@ -63546,14 +64771,14 @@ msgid ""
"replacement). The region to search within can be specified without modifying "
"where the start and end anchor would be."
msgstr ""
-"æœç´¢æ–‡æœ¬ä¸­çš„编译模å¼ï¼Œå¹¶å°†å…¶æ›¿æ¢ä¸ºæŒ‡å®šçš„字符串。诸如[code]$1[/code]å’Œ"
-"[code]$name[/code]等转义和åå‘å¼•ç”¨ä¼šè¢«å±•å¼€å’Œè§£å†³ã€‚é»˜è®¤æƒ…å†µä¸‹ï¼Œåªæœ‰ç¬¬ä¸€ä¸ªå®žä¾‹"
+"æœç´¢æ–‡æœ¬ä¸­çš„编译模å¼ï¼Œå¹¶å°†å…¶æ›¿æ¢ä¸ºæŒ‡å®šçš„字符串。诸如 [code]$1[/code] å’Œ "
+"[code]$name[/code] 等转义和åå‘å¼•ç”¨ä¼šè¢«å±•å¼€å’Œè§£å†³ã€‚é»˜è®¤æƒ…å†µä¸‹ï¼Œåªæœ‰ç¬¬ä¸€ä¸ªå®žä¾‹"
"被替æ¢ï¼Œä½†å¯ä»¥å¯¹æ‰€æœ‰å®žä¾‹è¿›è¡Œä¿®æ”¹ï¼ˆå…¨å±€æ›¿æ¢ï¼‰ã€‚å¯ä»¥æŒ‡å®šè¦æœç´¢çš„区域,而ä¸éœ€è¦"
"修改开始和结æŸé”šçš„ä½ç½®ã€‚"
#: modules/regex/doc_classes/RegExMatch.xml
msgid "Contains the results of a [RegEx] search."
-msgstr "包å«[RegEx]æœç´¢çš„结果。"
+msgstr "åŒ…å« [RegEx] æœç´¢çš„结果。"
#: modules/regex/doc_classes/RegExMatch.xml
msgid ""
@@ -63562,8 +64787,9 @@ msgid ""
"and range of the match and its capturing groups, and it can extract its "
"substring for you."
msgstr ""
-"包å«ç”±[method RegEx.search]å’Œ[method RegEx.search_all]返回的å•个[RegEx]匹é…结"
-"果。它å¯ä»¥ç”¨æ¥æŸ¥æ‰¾åŒ¹é…çš„ä½ç½®å’ŒèŒƒå›´ä»¥åŠå®ƒçš„æ•èŽ·ç»„ï¼Œå¹¶ä¸”å¯ä»¥æå–å…¶å­å­—符串。"
+"包å«ç”± [method RegEx.search] å’Œ [method RegEx.search_all] 返回的å•个 [RegEx] "
+"匹é…结果。它å¯ä»¥ç”¨æ¥æŸ¥æ‰¾åŒ¹é…çš„ä½ç½®å’ŒèŒƒå›´ä»¥åŠå®ƒçš„æ•èŽ·ç»„ï¼Œå¹¶ä¸”å¯ä»¥æå–å…¶å­å­—符"
+"串。"
#: modules/regex/doc_classes/RegExMatch.xml
msgid ""
@@ -63574,8 +64800,8 @@ msgid ""
"Returns -1 if the group did not match or doesn't exist."
msgstr ""
"返回æºå­—符串中匹é…的结æŸä½ç½®ã€‚æ•获组的结æŸä½ç½®å¯ä»¥é€šè¿‡æä¾›å…¶ç»„å·çš„æ•´æ•°æˆ–å…¶å­—"
-"符串å称(如果它是一个命åç»„ï¼‰æ¥æ£€ç´¢ã€‚默认值为0,指的是整个表达å¼ã€‚\n"
-"å¦‚æžœè¯¥ç»„æ²¡æœ‰åŒ¹é…æˆ–ä¸å­˜åœ¨ï¼Œåˆ™è¿”回-1。"
+"符串å称(如果它是一个命åç»„ï¼‰æ¥æ£€ç´¢ã€‚默认值为 0,指的是整个表达å¼ã€‚\n"
+"å¦‚æžœè¯¥ç»„æ²¡æœ‰åŒ¹é…æˆ–ä¸å­˜åœ¨ï¼Œåˆ™è¿”回 -1。"
#: modules/regex/doc_classes/RegExMatch.xml
msgid "Returns the number of capturing groups."
@@ -63612,8 +64838,8 @@ msgid ""
"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
msgid "An [Array] of the match and its capturing groups."
@@ -63629,7 +64855,7 @@ msgid ""
"RemoteTransform pushes its own [Transform] to another [Spatial] derived Node "
"in the scene."
msgstr ""
-"RemoteTransform将自己的[Transform]推é€åˆ°åœºæ™¯ä¸­å¦ä¸€ä¸ª[Spatial]派生节点。"
+"RemoteTransform 将自己的 [Transform] 推é€åˆ°åœºæ™¯ä¸­å¦ä¸€ä¸ª [Spatial] 派生节点。"
#: doc/classes/RemoteTransform.xml
msgid ""
@@ -63638,8 +64864,8 @@ msgid ""
"It can be set to update another Node's position, rotation and/or scale. It "
"can use either global or local coordinates."
msgstr ""
-"RemoteTransform将自己的[Transform]推é€åˆ°åœºæ™¯ä¸­å¦ä¸€ä¸ª[Spatial]派生节点(称为远"
-"程节点)。\n"
+"RemoteTransform 将自己的 [Transform] 推é€åˆ°åœºæ™¯ä¸­å¦ä¸€ä¸ª [Spatial] 派生节点"
+"(称为远程节点)。\n"
"它å¯ä»¥è¢«è®¾ç½®ä¸ºæ›´æ–°å¦ä¸€ä¸ªèŠ‚ç‚¹çš„ä½ç½®ã€æ—‹è½¬å’Œ/或比例。它å¯ä»¥ä½¿ç”¨å…¨å±€å标或局部å"
"标。"
@@ -63660,31 +64886,31 @@ msgstr "远程节点的节点ä½ç½® [NodePath],相对于 RemoteTransform 在åœ
#: doc/classes/RemoteTransform.xml doc/classes/RemoteTransform2D.xml
msgid "If [code]true[/code], the remote node's position is updated."
-msgstr "如果 [code]true[/code],则更新远程节点的ä½ç½®ã€‚"
+msgstr "如果为 [code]true[/code],则更新远程节点的ä½ç½®ã€‚"
#: doc/classes/RemoteTransform.xml doc/classes/RemoteTransform2D.xml
msgid "If [code]true[/code], the remote node's rotation is updated."
-msgstr "如果 [code]true[/code],则更新远程节点的旋转。"
+msgstr "如果为 [code]true[/code],则更新远程节点的旋转。"
#: doc/classes/RemoteTransform.xml doc/classes/RemoteTransform2D.xml
msgid "If [code]true[/code], the remote node's scale is updated."
-msgstr "如果 [code]true[/code],则更新远程节点的比例。"
+msgstr "如果为 [code]true[/code],则更新远程节点的比例。"
#: doc/classes/RemoteTransform.xml doc/classes/RemoteTransform2D.xml
msgid ""
"If [code]true[/code], global coordinates are used. If [code]false[/code], "
"local coordinates are used."
msgstr ""
-"如果 [code]true[/code]ï¼Œåˆ™ä½¿ç”¨å…¨å±€åæ ‡ã€‚如果 [code]false[/code],则使用本地å"
-"标。"
+"如果为 [code]true[/code]ï¼Œåˆ™ä½¿ç”¨å…¨å±€åæ ‡ã€‚如果 [code]false[/code],则使用本地"
+"åæ ‡ã€‚"
#: doc/classes/RemoteTransform2D.xml
msgid ""
"RemoteTransform2D pushes its own [Transform2D] to another [CanvasItem] "
"derived Node in the scene."
msgstr ""
-"RemoteTransform2D将自己的[Transform2D]推é€åˆ°åœºæ™¯ä¸­å¦ä¸€ä¸ª[CanvasItem]派生节"
-"点。"
+"RemoteTransform2D 将自己的 [Transform2D] 推é€åˆ°åœºæ™¯ä¸­å¦ä¸€ä¸ª [CanvasItem] 派生"
+"节点。"
#: doc/classes/RemoteTransform2D.xml
msgid ""
@@ -63732,12 +64958,12 @@ msgid ""
"free resources that are no longer in use. This means that unused resources "
"will linger on for a while before being removed."
msgstr ""
-"èµ„æºæ˜¯æ‰€æœ‰Godot特定资æºç±»åž‹çš„基类,主è¦ä½œä¸ºæ•°æ®å®¹å™¨ã€‚由于它们继承自"
+"èµ„æºæ˜¯æ‰€æœ‰ Godot 特定资æºç±»åž‹çš„基类,主è¦ä½œä¸ºæ•°æ®å®¹å™¨ã€‚由于它们继承自 "
"[Reference],资æºè¢«å¼•用计数,并在ä¸å†ä½¿ç”¨æ—¶è¢«é‡Šæ”¾ã€‚一旦从ç£ç›˜åŠ è½½ï¼Œå®ƒä»¬ä¹Ÿä¼šè¢«"
-"缓存,因此任何从给定路径加载资æºçš„å°è¯•都会返回相åŒçš„引用(这与[Node]相å,"
-"[Node]没有引用计数,å¯ä»¥æ ¹æ®éœ€è¦ä»Žç£ç›˜å®žä¾‹åŒ–多次)。资æºå¯ä»¥ä»Žå¤–部ä¿å­˜åœ¨ç£ç›˜"
+"缓存,因此任何从给定路径加载资æºçš„å°è¯•都会返回相åŒçš„引用(这与 [Node] 相å,"
+"[Node] 没有引用计数,å¯ä»¥æ ¹æ®éœ€è¦ä»Žç£ç›˜å®žä¾‹åŒ–多次)。资æºå¯ä»¥ä»Žå¤–部ä¿å­˜åœ¨ç£ç›˜"
"上,也å¯ä»¥æ†ç»‘在å¦ä¸€ä¸ªå¯¹è±¡ä¸­ï¼Œå¦‚[Node]或å¦ä¸€ä¸ªèµ„æºã€‚\n"
-"[b]注æ„:[/b]在C#中,资æºä¸å†è¢«ä½¿ç”¨åŽä¸ä¼šç«‹å³è¢«é‡Šæ”¾ã€‚相å,垃圾回收将定期è¿"
+"[b]注æ„:[/b]在 C# 中,资æºä¸å†è¢«ä½¿ç”¨åŽä¸ä¼šç«‹å³è¢«é‡Šæ”¾ã€‚相å,垃圾回收将定期è¿"
"行,并释放ä¸å†ä½¿ç”¨çš„资æºã€‚è¿™æ„å‘³ç€æœªä½¿ç”¨çš„资æºåœ¨è¢«åˆ é™¤ä¹‹å‰ä¼šåœç•™ä¸€æ®µæ—¶é—´ã€‚"
#: doc/classes/Resource.xml
@@ -63787,7 +65013,7 @@ msgid ""
"[/codeblock]\n"
"[b]Note:[/b] This method is called automatically for built-in resources."
msgstr ""
-"å‘出[signal changed]更改信å·ã€‚\n"
+"å‘出 [signal changed] 更改信å·ã€‚\n"
"如果ä¾èµ–该资æºçš„外部对象应该被更新,那么æ¯å½“该资æºçš„状æ€å‘生å˜åŒ–(如属性的修"
"改)时,必须手动调用该方法。\n"
"该方法等åŒäºŽã€‚\n"
@@ -63903,17 +65129,17 @@ msgid ""
"as [code].stex[/code] ([StreamTexture]) first, so they can be loaded with "
"better efficiency on the graphics card."
msgstr ""
-"Godot使用ResourceFormatLoaders在编辑器或导出的游æˆä¸­åŠ è½½èµ„æºã€‚它们通过"
-"[ResourceLoader]å•例自动查询,或者在加载具有内部ä¾èµ–æ€§çš„èµ„æºæ—¶è¢«æŸ¥è¯¢ã€‚æ¯ä¸ªæ–‡"
-"件类型å¯ä»¥ä½œä¸ºä¸åŒçš„资æºç±»åž‹åŠ è½½ï¼Œå› æ­¤åœ¨å¼•æ“Žä¸­æ³¨å†Œäº†å¤šä¸ª"
-"ResourceFormatLoaders。\n"
+"Godot 使用 ResourceFormatLoader 在编辑器或导出的游æˆä¸­åŠ è½½èµ„æºã€‚它们通过 "
+"[ResourceLoader] å•例自动查询,或者在加载具有内部ä¾èµ–æ€§çš„èµ„æºæ—¶è¢«æŸ¥è¯¢ã€‚æ¯ä¸ªæ–‡"
+"件类型å¯ä»¥ä½œä¸ºä¸åŒçš„资æºç±»åž‹åŠ è½½ï¼Œå› æ­¤åœ¨å¼•æ“Žä¸­æ³¨å†Œäº†å¤šä¸ª "
+"ResourceFormatLoader。\n"
"扩展这个类å…许你定义你自己的加载器。请确ä¿å°Šé‡æ–‡æ¡£ä¸­çš„返回类型和值。你应该给"
-"它一个带有[code]class_name[/code]的全局类å,这样它æ‰èƒ½è¢«æ³¨å†Œã€‚åƒå†…置的"
-"ResourceFormatLoaders一样,它将在加载其处ç†çš„ç±»åž‹çš„èµ„æºæ—¶è¢«è‡ªåŠ¨è°ƒç”¨ã€‚ä½ ä¹Ÿå¯ä»¥"
-"实现一个[ResourceFormatSaver]。\n"
-"[b]注æ„:[/b]如果你需è¦çš„资æºç±»åž‹å­˜åœ¨ï¼Œä½†Godot无法加载其格å¼ï¼Œä½ ä¹Ÿå¯ä»¥æ‰©å±•"
+"它一个带有 [code]class_name[/code] 的全局类å,这样它æ‰èƒ½è¢«æ³¨å†Œã€‚åƒå†…置的 "
+"ResourceFormatLoader 一样,它将在加载其处ç†çš„ç±»åž‹çš„èµ„æºæ—¶è¢«è‡ªåŠ¨è°ƒç”¨ã€‚ä½ ä¹Ÿå¯ä»¥"
+"实现一个 [ResourceFormatSaver]。\n"
+"[b]注æ„:[/b]如果你需è¦çš„资æºç±»åž‹å­˜åœ¨ï¼Œä½†Godot无法加载其格å¼ï¼Œä½ ä¹Ÿå¯ä»¥æ‰©å±• "
"[EditorImportPlugin]ã€‚é€‰æ‹©ä¸€ç§æ–¹å¼è€Œä¸æ˜¯å¦ä¸€ç§æ–¹å¼ï¼Œå–å†³äºŽè¯¥æ ¼å¼æ˜¯å¦é€‚åˆäºŽæœ€"
-"终导出的游æˆã€‚例如,最好先把[code].png[/code]纹ç†å¯¼å…¥ä¸º[code].stex[/code]"
+"终导出的游æˆã€‚例如,最好先把 [code].png[/code] 纹ç†å¯¼å…¥ä¸º [code].stex[/code]"
"([StreamTexture]),这样它们在显å¡ä¸Šçš„加载效率会更好。"
#: doc/classes/ResourceFormatLoader.xml
@@ -63965,8 +65191,8 @@ msgid ""
"Error] constant in case of failure."
msgstr ""
"当引擎å‘现这个加载器是兼容的,就会加载一个资æºã€‚å¦‚æžœåŠ è½½çš„èµ„æºæ˜¯å¯¼å…¥çš„结果,"
-"[code]original_path[/code]å°†é’ˆå¯¹æºæ–‡ä»¶ã€‚æˆåŠŸæ—¶è¿”å›žä¸€ä¸ª[Resource]对象,失败时"
-"返回一个[enum Error]常é‡ã€‚"
+"[code]original_path[/code] å°†é’ˆå¯¹æºæ–‡ä»¶ã€‚æˆåŠŸæ—¶è¿”å›žä¸€ä¸ª [Resource] 对象,失败"
+"时返回一个 [enum Error] 常é‡ã€‚"
#: doc/classes/ResourceFormatLoader.xml
msgid ""
@@ -63976,8 +65202,8 @@ msgid ""
"Returns [constant OK] on success, or an [enum Error] constant in case of "
"failure."
msgstr ""
-"如果实现,é‡å‘½å给定资æºä¸­çš„ä¾èµ–项并ä¿å­˜å®ƒã€‚ [code]renames[/code] 是一个将旧"
-"çš„ä¾èµ–路径映射到新的路径的 [code]{ String => String }[/code]的字典 。\n"
+"如果实现,é‡å‘½å给定资æºä¸­çš„ä¾èµ–项并ä¿å­˜å®ƒã€‚[code]renames[/code] 是一个将旧的"
+"ä¾èµ–路径映射到新的路径的 [code]{ String => String }[/code]的字典 。\n"
"æˆåŠŸæ—¶è¿”å›ž [constant OK],失败时返回 [enum Error] 常é‡ã€‚"
#: doc/classes/ResourceFormatSaver.xml
@@ -64003,8 +65229,8 @@ msgstr ""
"默认情况下,Godot 将资æºä¿å­˜ä¸º [code].tres[/code](基于文本)ã€[code].res[/"
"code](二进制)或其他内置格å¼ï¼Œä½†æ‚¨å¯ä»¥é€‰æ‹©é€šè¿‡æ‰©å±•这个类æ¥åˆ›å»ºè‡ªå·±çš„æ ¼å¼ã€‚请"
"务必éµå®ˆè®°å½•的返回类型和值。你应该给它一个全局类å [code]class_name[/code] 以"
-"便它被注册。与内置的 ResourceFormatSavers 一样,它会在ä¿å­˜å…¶è¯†åˆ«ç±»åž‹çš„èµ„æºæ—¶"
-"自动调用。你也å¯ä»¥å®žçŽ°ä¸€ä¸ª [ResourceFormatLoader]。"
+"便它被注册。与内置的 ResourceFormatSaver 一样,它会在ä¿å­˜å…¶è¯†åˆ«ç±»åž‹çš„èµ„æºæ—¶è‡ª"
+"动调用。你也å¯ä»¥å®žçŽ°ä¸€ä¸ª [ResourceFormatLoader]。"
#: doc/classes/ResourceFormatSaver.xml
msgid ""
@@ -64025,9 +65251,9 @@ msgid ""
"Returns [constant OK] on success, or an [enum Error] constant in case of "
"failure."
msgstr ""
-"将给定的资æºå¯¹è±¡ä¿å­˜åˆ°ç›®æ ‡[code]path[/code]处的文件。[code]flags[/code]是一个"
-"ç”±[enum ResourceSaver.SaverFlags]常é‡ç»„æˆçš„使ީç ã€‚\n"
-"æˆåŠŸæ—¶è¿”å›ž[constant OK],失败时返回[enum Error]常é‡ã€‚"
+"将给定的资æºå¯¹è±¡ä¿å­˜åˆ°ç›®æ ‡ [code]path[/code] 处的文件。[code]flags[/code] 是"
+"一个由 [enum ResourceSaver.SaverFlags] 常é‡ç»„æˆçš„使ީç ã€‚\n"
+"æˆåŠŸæ—¶è¿”å›ž [constant OK],失败时返回 [enum Error] 常é‡ã€‚"
#: doc/classes/ResourceImporter.xml
msgid "Base class for the implementation of core resource importers."
@@ -64072,21 +65298,20 @@ msgid ""
"granularity, which makes it mainly useful for displaying loading bars or "
"percentages."
msgstr ""
-"交互å¼èµ„æº[Resource]加载器。这个对象在执行交互å¼åŠ è½½æ—¶ç”±[ResourceLoader]è¿”"
-"回。它å…许以高粒度(high granularity)加载资æºï¼Œè¿™ä½¿å¾—它主è¦ç”¨äºŽæ˜¾ç¤ºåŠ è½½æ¡æˆ–"
-"百分比。"
+"äº¤äº’å¼ [Resource] 加载器。这个对象在执行交互å¼åŠ è½½æ—¶ç”± [ResourceLoader] è¿”"
+"回。它å…许以高粒度加载资æºï¼Œè¿™ä½¿å¾—它主è¦ç”¨äºŽæ˜¾ç¤ºåŠ è½½æ¡æˆ–百分比。"
#: doc/classes/ResourceInteractiveLoader.xml
msgid ""
"Returns the loaded resource if the load operation completed successfully, "
"[code]null[/code] otherwise."
-msgstr "如果加载æ“作æˆåŠŸå®Œæˆï¼Œè¿”回加载的资æºï¼Œå¦åˆ™ä¸ºç©º[code]null[/code]。"
+msgstr "如果加载æ“作æˆåŠŸå®Œæˆï¼Œè¿”回加载的资æºï¼Œå¦åˆ™ä¸º [code]null[/code]。"
#: doc/classes/ResourceInteractiveLoader.xml
msgid ""
"Returns the load stage. The total amount of stages can be queried with "
"[method get_stage_count]."
-msgstr "返回加载阶段。å¯ä»¥ä½¿ç”¨[method get_stage_count]查询阶段总数。"
+msgstr "返回加载阶段。å¯ä»¥ä½¿ç”¨ [method get_stage_count] 查询阶段总数。"
#: doc/classes/ResourceInteractiveLoader.xml
msgid ""
@@ -64149,14 +65374,14 @@ msgid ""
"An optional [code]type_hint[/code] can be used to further specify the "
"[Resource] type that should be handled by the [ResourceFormatLoader]."
msgstr ""
-"返回给定的[code]path[/code]是å¦å­˜åœ¨å·²è¯†åˆ«çš„资æºã€‚\n"
-"一个å¯é€‰çš„[code]type_hint[/code]å¯ä»¥ç”¨æ¥è¿›ä¸€æ­¥æŒ‡å®š[ResourceFormatLoader]应该"
-"处ç†çš„[Resource]类型。"
+"返回给定的路径 [code]path[/code] 处是å¦å­˜åœ¨å·²è¯†åˆ«çš„资æºã€‚\n"
+"一个å¯é€‰çš„ [code]type_hint[/code] å¯ä»¥ç”¨æ¥è¿›ä¸€æ­¥æŒ‡å®š [ResourceFormatLoader] "
+"应该处ç†çš„ [Resource] 类型。"
#: doc/classes/ResourceLoader.xml
msgid ""
"Returns the dependencies for the resource at the given [code]path[/code]."
-msgstr "返回给定[code]path[/code]处资æºçš„ä¾èµ–关系。"
+msgstr "返回给定路径 [code]path[/code] 处资æºçš„ä¾èµ–关系。"
#: doc/classes/ResourceLoader.xml
msgid "Returns the list of recognized extensions for a resource type."
@@ -64165,7 +65390,8 @@ msgstr "返回资æºç±»åž‹çš„已识别扩展å列表。"
#: doc/classes/ResourceLoader.xml
msgid ""
"[i]Deprecated method.[/i] Use [method has_cached] or [method exists] instead."
-msgstr "[i]废弃的方法。[/i]使用[method has_cached]或[method exists]代替。"
+msgstr ""
+"[i]废弃的方法。[/i]请使用 [method has_cached] 或 [method exists] 代替。"
#: doc/classes/ResourceLoader.xml
msgid ""
@@ -64349,7 +65575,7 @@ msgstr "ä¸è¦ä¿å­˜ç¼–辑器特定的元数æ®ï¼ˆç”±å…¶ [code]__editor[/code] å
#: doc/classes/ResourceSaver.xml
msgid "Save as big endian (see [member File.endian_swap])."
-msgstr "ä¿å­˜ä¸ºå¤§ç«¯ï¼ˆå‚阅 [member File.endian_swap])。"
+msgstr "ä¿å­˜ä¸ºå¤§ç«¯ï¼ˆè§ [member File.endian_swap])。"
#: doc/classes/ResourceSaver.xml
msgid ""
@@ -64363,7 +65589,7 @@ msgstr ""
msgid ""
"Take over the paths of the saved subresources (see [method Resource."
"take_over_path])."
-msgstr "接管ä¿å­˜çš„å­èµ„æºçš„路径(è§[method Resource.take_over_path])。"
+msgstr "接管ä¿å­˜çš„å­èµ„æºçš„è·¯å¾„ï¼ˆè§ [method Resource.take_over_path])。"
#: doc/classes/RichTextEffect.xml
msgid "A custom effect for use with [RichTextLabel]."
@@ -64527,7 +65753,7 @@ msgid ""
"Installs a custom effect. [code]effect[/code] should be a valid "
"[RichTextEffect]."
msgstr ""
-"安装自定义效果。 [code]effect[/code] 应该是一个有效的 [RichTextEffect]。"
+"安装自定义效果。[code]effect[/code] 应该是一个有效的 [RichTextEffect]。"
#: doc/classes/RichTextLabel.xml
msgid "Adds a newline tag to the tag stack."
@@ -64561,8 +65787,8 @@ msgid ""
"Adds an [code][align][/code] tag based on the given [code]align[/code] "
"value. See [enum Align] for possible values."
msgstr ""
-"æ ¹æ®ç»™å®šçš„[code][align][/code]值,添加一个[code]align[/code]标签。å¯èƒ½çš„值è§"
-"[enum Align]。"
+"æ ¹æ®ç»™å®šçš„ [code][align][/code] 值,添加一个 [code]align[/code] 标签。å¯èƒ½çš„"
+"å–å€¼è§ [enum Align]。"
#: doc/classes/RichTextLabel.xml
msgid ""
@@ -64688,7 +65914,7 @@ 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"
+"如果为 [code]true[/code],标签使用 BBCode æ ¼å¼ã€‚\n"
"[b]注æ„:[/b]å°è¯•使用 [method add_text] 更改 [RichTextLabel] 的文本会将其é‡ç½®"
"为 [code]false[/code]。改用 [method append_bbcode] æ¥ä¿ç•™ BBCode æ ¼å¼ã€‚"
@@ -64729,7 +65955,7 @@ msgid ""
"[RichTextLabel] in [Container]s, but it's unreliable in some cases and will "
"be removed in future versions."
msgstr ""
-"如果 [code]true[/code],标签的高度将自动更新以适应其内容。\n"
+"如果为 [code]true[/code],标签的高度将自动更新以适应其内容。\n"
"[b]注æ„:[/b]此属性用作解决 [Container] 中 [RichTextLabel] 问题的解决方法,但"
"在æŸäº›æƒ…况下ä¸å¯é ï¼Œå°†åœ¨æœªæ¥ç‰ˆæœ¬ä¸­åˆ é™¤ã€‚"
@@ -64738,12 +65964,12 @@ msgid ""
"If [code]true[/code], the label underlines meta tags such as [code][url]"
"{text}[/url][/code]."
msgstr ""
-"如果 [code]true[/code],则会在元标签下划线,例如 [code][url]{text}[/url][/"
+"如果为 [code]true[/code],则会在元标签下划线,例如 [code][url]{text}[/url][/"
"code]。"
#: doc/classes/RichTextLabel.xml
msgid "If [code]true[/code], the label uses the custom font color."
-msgstr "如果 [code]true[/code],则标签使用自定义字体颜色。"
+msgstr "如果为 [code]true[/code],则标签使用自定义字体颜色。"
#: doc/classes/RichTextLabel.xml
msgid ""
@@ -64762,18 +65988,18 @@ 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 ""
-"如果 [code]true[/code],则滚动æ¡å¯è§ã€‚将此设置为 [code]false[/code] ä¸ä¼šå®Œå…¨"
-"阻止滚动。è§[method scroll_to_line]。"
+"如果为 [code]true[/code],则滚动æ¡å¯è§ã€‚将此设置为 [code]false[/code] ä¸ä¼šå®Œ"
+"全阻止滚动。è§[method scroll_to_line]。"
#: doc/classes/RichTextLabel.xml
msgid ""
"If [code]true[/code], the window scrolls down to display new content "
"automatically."
-msgstr "如果 [code]true[/code],则窗å£å‘下滚动以自动显示新内容。"
+msgstr "如果为 [code]true[/code],则窗å£å‘下滚动以自动显示新内容。"
#: doc/classes/RichTextLabel.xml
msgid "If [code]true[/code], the label allows text selection."
-msgstr "如果 [code]true[/code],标签å…许文本选择。"
+msgstr "如果为 [code]true[/code],标签å…许文本选择。"
#: doc/classes/RichTextLabel.xml
msgid ""
@@ -64841,6 +66067,22 @@ msgid "Makes text fill width."
msgstr "使文本填充宽度。"
#: doc/classes/RichTextLabel.xml
+msgid "Aligns top of the inline image to the top of the text."
+msgstr "将内è”图åƒçš„顶部与文本的顶部对é½ã€‚"
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns center of the inline image to the center of the text."
+msgstr "将内è”图åƒçš„中心与文本的中心对é½ã€‚"
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns bottom of the inline image to the baseline of the text."
+msgstr "将内è”图åƒçš„底部与文本的基线对é½ã€‚"
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns bottom of the inline image to the bottom of the text."
+msgstr "将内è”图åƒçš„底部与文本的底部对é½ã€‚"
+
+#: doc/classes/RichTextLabel.xml
msgid "Each list item has a number marker."
msgstr "æ¯ä¸ªåˆ—表项都有一个数字标记。"
@@ -64861,7 +66103,7 @@ msgid ""
"The color of selected text, used when [member selection_enabled] is "
"[code]true[/code]."
msgstr ""
-"选定文本的颜色(当[member selection_enabled]为 [code]true[/code] 时使用)。"
+"选定文本的颜色(当 [member selection_enabled] 为 [code]true[/code] 时使用)。"
#: doc/classes/RichTextLabel.xml
msgid "The color of the font's shadow."
@@ -64937,16 +66179,16 @@ msgid ""
"themselves. They are used by and with the low-level Server classes such as "
"[VisualServer]."
msgstr ""
-"RID类型用于访问资æºçš„唯一整数ID。它们ä¸é€æ˜Žï¼Œè¿™æ„味ç€å…¶æœ¬èº«å¹¶ä¸æŽˆäºˆå¯¹ç›¸å…³èµ„æº"
-"的访问。它们被低级别的æœåŠ¡ç±»ä½¿ç”¨ï¼Œå¦‚[VisualServer]。"
+"RID 类型用于访问资æºçš„唯一整数 ID。它们ä¸é€æ˜Žï¼Œè¿™æ„味ç€å…¶æœ¬èº«å¹¶ä¸æŽˆäºˆå¯¹ç›¸å…³èµ„"
+"æºçš„访问。它们被低级别的æœåŠ¡ç±»ä½¿ç”¨ï¼Œå¦‚ [VisualServer]。"
#: doc/classes/RID.xml
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 ""
-"用给定资æºçš„ID创建一个新的RIDå®žä¾‹ã€‚å½“æ²¡æœ‰å¾—åˆ°ä¸€ä¸ªæœ‰æ•ˆçš„èµ„æºæ—¶ï¼Œé»˜è®¤å­˜å‚¨æœªä½¿ç”¨"
-"的ID 0。"
+"用给定资æºçš„ ID 创建一个新的 RID å®žä¾‹ã€‚å½“æ²¡æœ‰å¾—åˆ°ä¸€ä¸ªæœ‰æ•ˆçš„èµ„æºæ—¶ï¼Œé»˜è®¤å­˜å‚¨æœª"
+"使用的 ID 0。"
#: doc/classes/RID.xml
msgid "Returns the ID of the referenced resource."
@@ -65009,7 +66251,7 @@ msgid ""
"This is equivalent to [code]add_force(force, Vector3(0,0,0))[/code]."
msgstr ""
"在ä¸å½±å“旋转的情况下添加æ’定的方å‘力(å³åŠ é€Ÿåº¦ï¼‰ã€‚\n"
-"这相当于 [code]add_force(force, Vector3(0,0,0))[/code]。"
+"相当于 [code]add_force(force, Vector3(0,0,0))[/code]。"
#: doc/classes/RigidBody.xml
msgid ""
@@ -65031,7 +66273,7 @@ msgid ""
"This is equivalent to [code]apply_impulse(Vector3(0,0,0), impulse)[/code]."
msgstr ""
"施加å•一方å‘的冲é‡è€Œä¸å½±å“旋转。\n"
-"这等价于[code]apply_impulse(Vector3(0,0,0), impulse)[/code]。"
+"相当于 [code]apply_impulse(Vector3(0,0,0), impulse)[/code]。"
#: doc/classes/RigidBody.xml
msgid ""
@@ -65068,8 +66310,9 @@ msgid ""
"For performance, list of collisions is updated once per frame and before the "
"physics step. Consider using signals instead."
msgstr ""
-"è¿”å›žä¸€ä¸ªä¸Žæ­¤ç¢°æ’žçš„ç‰©ä½“çš„åˆ—è¡¨ã€‚è¦æ±‚[member contact_monitor]设置为 [code]true[/"
-"code],[member contacts_reported]设置得足够高,以检测所有碰撞。\n"
+"è¿”å›žä¸€ä¸ªä¸Žæ­¤ç¢°æ’žçš„ç‰©ä½“çš„åˆ—è¡¨ã€‚è¦æ±‚ [member contact_monitor] 设置为 "
+"[code]true[/code],[member contacts_reported] 设置得足够高,以检测所有碰"
+"撞。\n"
"[b]注æ„:[/b]在移动物体åŽï¼Œè¿™ä¸ªæµ‹è¯•çš„ç»“æžœä¸æ˜¯ç«‹å³çš„。为了性能,碰撞列表æ¯å¸§åœ¨"
"物ç†è¿ç®—之剿›´æ–°ä¸€æ¬¡ã€‚å¯ä»¥è€ƒè™‘ä½¿ç”¨ä¿¡å·æ¥ä»£æ›¿ã€‚"
@@ -65084,15 +66327,14 @@ msgid "Locks the specified linear or rotational axis."
msgstr "é”定指定的线性或旋转轴。"
#: doc/classes/RigidBody.xml
-#, fuzzy
msgid ""
"Damps the body's rotational forces. If this value is different from -1.0 it "
"will be added to any angular damp derived from the world or areas.\n"
"See [member ProjectSettings.physics/3d/default_angular_damp] for more "
"details about damping."
msgstr ""
-"对 RigidBody 的旋转力进行阻尼è¿ç®—。如果这个值与 -1.0 ä¸åŒï¼Œå°†ä¼šè¿½åŠ åˆ°ä»»ä½•ä»Žä¸–"
-"界或区域派生的线性阻尼中。\n"
+"对该实体的旋转力进行阻尼è¿ç®—。如果这个值与 -1.0 ä¸åŒï¼Œå°†ä¼šè¿½åŠ åˆ°ä»»ä½•ä»Žä¸–ç•Œæˆ–"
+"区域派生的角度阻尼中。\n"
"关于阻尼的更多细节,请å‚阅 [member ProjectSettings.physics/3d/"
"default_angular_damp]。"
@@ -65141,7 +66383,7 @@ 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 "
+"如果为 [code]true[/code],实体å¯ä»¥åœ¨æ²¡æœ‰è¿åŠ¨çš„æƒ…å†µä¸‹è¿›å…¥ç¡çœ æ¨¡å¼ã€‚è§[member "
"sleeping]。\n"
"[b]注æ„:[/b]RigidBody3D 的模å¼[member mode] 为常é‡[constant MODE_CHARACTER] "
"æ—¶ä¸ä¼šè‡ªåŠ¨è¿›å…¥ä¼‘çœ æ¨¡å¼ã€‚ä»ç„¶å¯ä»¥é€šè¿‡å°†å…¶ [member sleeping] 属性设置为 "
@@ -65152,7 +66394,7 @@ 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碰撞时会å‘出信å·ã€‚å‚阅"
+"如果为 [code]true[/code],当RigidBody与å¦ä¸€ä¸ªRigidBody碰撞时会å‘出信å·ã€‚å‚阅"
"[member contacts_reported]。"
#: doc/classes/RigidBody.xml
@@ -65166,7 +66408,7 @@ msgid ""
msgstr ""
"将被记录的最大接触次数。需è¦å°† [member contact_monitor] 设置为 [code]true[/"
"code]。\n"
-"[b]注:[/b]接触次数与碰撞次数ä¸åŒã€‚平行边之间的碰撞将导致两个接触(æ¯ç«¯ä¸€"
+"[b]注æ„:[/b]接触次数与碰撞次数ä¸åŒã€‚平行边之间的碰撞将导致两个接触(æ¯ç«¯ä¸€"
"个),平行é¢ä¹‹é—´çš„碰撞将导致四个接触(æ¯ä¸ªè§’一个)。"
#: doc/classes/RigidBody.xml
@@ -65178,7 +66420,7 @@ msgid ""
"small, fast-moving objects. Not using continuous collision detection is "
"faster to compute, but can miss small, fast-moving objects."
msgstr ""
-"如果 [code]true[/code],则使用连续碰撞检测。\n"
+"如果为 [code]true[/code],则使用连续碰撞检测。\n"
"连续碰撞检测å°è¯•é¢„æµ‹ä¸€ä¸ªç§»åŠ¨çš„ç‰©ä½“ä¼šåœ¨å“ªé‡Œç¢°æ’žï¼Œè€Œä¸æ˜¯ç§»åŠ¨å®ƒå¹¶åœ¨å®ƒå‘生碰撞时"
"纠正它的è¿åŠ¨ã€‚è¿žç»­ç¢°æ’žæ£€æµ‹æ›´ç²¾ç¡®ï¼Œå¹¶ä¸”é”™è¿‡äº†è¾ƒå°çš„ã€å¿«é€Ÿç§»åŠ¨çš„ç‰©ä½“çš„æ’žå‡»ã€‚ä¸"
"使用连续碰撞检测的计算速度更快,但å¯èƒ½ä¼šé”™è¿‡å°çš„ã€å¿«é€Ÿç§»åŠ¨çš„ç‰©ä½“ã€‚"
@@ -65190,9 +66432,9 @@ msgid ""
"body will only move as determined by the [method _integrate_forces] "
"function, if defined."
msgstr ""
-"如果 [code]true[/code],则该物体的内力积分将被ç¦ç”¨ï¼ˆå¦‚é‡åŠ›æˆ–ç©ºæ°”æ‘©æ“¦ï¼‰ã€‚é™¤äº†"
-"碰撞å“åº”ä¹‹å¤–ï¼Œç‰©ä½“å°†ä»…æ ¹æ® [method _integrate_forces] 函数确定的方å¼ç§»åŠ¨ï¼ˆå¦‚"
-"果已定义)。"
+"如果为 [code]true[/code],则该物体的内力积分将被ç¦ç”¨ï¼ˆå¦‚é‡åŠ›æˆ–ç©ºæ°”æ‘©æ“¦ï¼‰ã€‚é™¤"
+"了碰撞å“åº”ä¹‹å¤–ï¼Œç‰©ä½“å°†ä»…æ ¹æ® [method _integrate_forces] 函数确定的方å¼ç§»åЍ"
+"(如果已定义)。"
#: doc/classes/RigidBody.xml
msgid ""
@@ -65245,7 +66487,7 @@ msgstr "实体的质é‡ã€‚"
#: doc/classes/RigidBody.xml
msgid "The body mode. See [enum Mode] for possible values."
-msgstr "物体的模å¼ã€‚å¯èƒ½çš„值è§[enum Mode]。"
+msgstr "物体的模å¼ã€‚å¯èƒ½çš„å–å€¼è§ [enum Mode]。"
#: doc/classes/RigidBody.xml doc/classes/RigidBody2D.xml
#: doc/classes/StaticBody.xml doc/classes/StaticBody2D.xml
@@ -65264,8 +66506,8 @@ msgid ""
"until woken up by another body through, for example, a collision, or by "
"using the [method apply_impulse] or [method add_force] methods."
msgstr ""
-"如果 [code]true[/code],物体ä¸ä¼šç§»åЍ并䏔ä¸ä¼šè®¡ç®—力,直到被å¦ä¸€ä¸ªç‰©ä½“唤醒,例"
-"如碰撞,或使用 [method apply_impulse] 或 [method add_force] 方法。"
+"如果为 [code]true[/code],物体ä¸ä¼šç§»åЍ并䏔ä¸ä¼šè®¡ç®—力,直到被å¦ä¸€ä¸ªç‰©ä½“唤醒,"
+"例如碰撞,或使用 [method apply_impulse] 或 [method add_force] 方法。"
#: doc/classes/RigidBody.xml
msgid ""
@@ -65329,22 +66571,23 @@ 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 contact_monitor]设置为 [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]。"
+"当 [PhysicsBody] 或 [GridMap] 的一个形状 [Shape] 进入这个区域的一个形状 "
+"[Shape] æ—¶å‘出的。需è¦å°†ç›‘控 [member contact_monitor] 设置为 [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
msgid ""
@@ -65553,7 +66796,7 @@ 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 "
+"如果为 [code]true[/code],身体å¯ä»¥åœ¨æ²¡æœ‰è¿åŠ¨çš„æƒ…å†µä¸‹è¿›å…¥ç¡çœ æ¨¡å¼ã€‚è§[member "
"sleeping]。\n"
"[b]注æ„:[/b]RigidBody2D çš„[member mode] 为[constant MODE_CHARACTER] æ—¶ä¸ä¼šè‡ª"
"动进入休眠模å¼ã€‚ä»ç„¶å¯ä»¥é€šè¿‡å°†å…¶ [member sleeping] 属性设置为 [code]true[/"
@@ -65564,7 +66807,7 @@ 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
@@ -65600,7 +66843,7 @@ msgid ""
"Aside from collision response, the body will only move as determined by the "
"[method _integrate_forces] function."
msgstr ""
-"如果 [code]true[/code],则ç¦ç”¨è¯¥ç‰©ä½“的内力积分。除了碰撞å“应,物体åªä¼šæŒ‰ç…§ "
+"如果为 [code]true[/code],则ç¦ç”¨è¯¥ç‰©ä½“的内力积分。除了碰撞å“应,物体åªä¼šæŒ‰ç…§ "
"[method _integrate_forces] 函数确定的方å¼ç§»åŠ¨ã€‚"
#: doc/classes/RigidBody2D.xml
@@ -65698,11 +66941,12 @@ msgid ""
"[code]body[/code] the [Node], if it exists in the tree, of the other "
"[PhysicsBody2D] or [TileMap]."
msgstr ""
-"当与å¦ä¸€ä¸ª[PhysicsBody2D]或[TileMap]çš„ç¢°æ’žç»“æŸæ—¶å‘出的。需è¦å°† [member "
+"当与å¦ä¸€ä¸ª [PhysicsBody2D] 或 [TileMap] çš„ç¢°æ’žç»“æŸæ—¶å‘出的。需è¦å°† [member "
"contact_monitor] 设置为 [code]true[/code] 并将 [member contacts_reported] 设"
-"置为足够高以检测所有碰撞。如果[TileSet]有碰撞[Shape2D],就会检测到"
+"置为足够高以检测所有碰撞。如果[TileSet] 有碰撞 [Shape2D],就会检测到 "
"[TileMap]。\n"
-"[code]body[/code] 其他[PhysicsBody2D]或[TileMap]的[Node](如果它存在于树中)。"
+"[code]body[/code] 其他 [PhysicsBody2D] 或 [TileMap] 的 [Node](如果它存在于树"
+"中)。"
#: doc/classes/RigidBody2D.xml
msgid ""
@@ -65952,7 +67196,7 @@ msgid ""
msgstr ""
"为了使用入å£é®æŒ¡å‰”除系统,您必须使用 [Room] å’Œ [Portal] æ¥æž„建您的关å¡ã€‚在这"
"些å¯ä»¥åœ¨è¿è¡Œæ—¶ä½¿ç”¨ä¹‹å‰ï¼Œå®ƒä»¬å¿…é¡»ç»è¿‡ä¸€ä¸ªç®€çŸ­çš„转æ¢è¿‡ç¨‹æ¥æž„建 [code]room "
-"graph[/code],这是入å£å‰”除所需的è¿è¡Œæ—¶æ•°æ®ã€‚ [code]portal graph[/code] ç”± "
+"graph[/code],这是入å£å‰”除所需的è¿è¡Œæ—¶æ•°æ®ã€‚[code]portal graph[/code] ç”± "
"[RoomManager] 节点控制,[RoomManager] è¿˜åŒ…å«æ•´ä¸ªå…¥å£ç³»ç»Ÿé€šç”¨çš„设置。"
#: doc/classes/RoomManager.xml
@@ -66059,7 +67303,7 @@ msgstr ""
"请注æ„,已ç»è½¬æ¢ä¸º [Portal] èŠ‚ç‚¹ï¼ˆè€Œä¸æ˜¯ [MeshInstance])的 [Portal] ä»ç„¶éœ€è¦"
"éµå¾ªç›¸åŒçš„命å约定,因为它们在转æ¢è¿‡ç¨‹ä¸­æ¯æ¬¡éƒ½ä¼šé‡æ–°é“¾æŽ¥ã€‚\n"
"建议您仅将对象放置在希望留在这些空间内的空间中 - å³ [code]portal mode[/code]"
-"是 [code]STATIC[/code] 或 [code]DYNAMIC[/code](ä¸ç©¿è¶Š Portal)。 "
+"是 [code]STATIC[/code] 或 [code]DYNAMIC[/code](ä¸ç©¿è¶Š Portal)。"
"[code]GLOBAL[/code] å’Œ [code]ROAMING[/code] 对象最好放置在场景树的å¦ä¸€éƒ¨åˆ†ï¼Œ"
"以é¿å…混淆。有关portal模å¼çš„完整说明,请å‚阅 [CullInstance]。"
@@ -66259,7 +67503,7 @@ msgstr ""
#: doc/classes/RoomManager.xml
msgid "Shows the [Portal] margins when the portal gizmo is used in the editor."
-msgstr "当在编辑器中使用portal工具时,显示[Portal]的边界。"
+msgstr "当在编辑器中使用入å£å·¥å…·æ—¶ï¼Œæ˜¾ç¤º [Portal] 的边界。"
#: doc/classes/RoomManager.xml
msgid ""
@@ -66270,8 +67514,8 @@ msgid ""
"Sometimes using the larger gameplay area of the secondary PVS may be "
"preferable."
msgstr ""
-"å½“å¯¹è±¡è¿›å…¥å’Œé€€å‡ºæ¸¸æˆæ—¶æŽ¥æ”¶æ¸¸æˆå›žè°ƒæ—¶ï¼Œ[b]游æˆåŒºåŸŸ[/b]å¯ä»¥ç”±[Room]的主è¦PVS"
-"(潜在å¯è§é›†ï¼‰æˆ–次è¦PVS(主è¦PVSåŠå…¶ç›¸é‚»çš„PVS)定义[Room])。\n"
+"å½“å¯¹è±¡è¿›å…¥å’Œé€€å‡ºæ¸¸æˆæ—¶æŽ¥æ”¶æ¸¸æˆå›žè°ƒæ—¶ï¼Œ[b]游æˆåŒºåŸŸ[/b]å¯ä»¥ç”± [Room] çš„ä¸»è¦ PVS"
+"(潜在å¯è§é›†ï¼‰æˆ–æ¬¡è¦ PVSï¼ˆä¸»è¦ PVS åŠå…¶ç›¸é‚»çš„ PVS)定义 [Room])。\n"
"æœ‰æ—¶ä½¿ç”¨æ¬¡è¦ PVS 的较大游æˆåŒºåŸŸå¯èƒ½æ›´å¯å–。"
#: doc/classes/RoomManager.xml
@@ -66279,8 +67523,8 @@ 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,无法使用游"
-"æˆé€šçŸ¥ã€‚"
+"在è¿è¡Œæ—¶ä»…使用 [Portal] æ¥ç¡®å®šå¯è§æ€§ã€‚[Room] 的转æ¢ä¸ä¼šäº§ç”Ÿ PVS,无法使用游æˆ"
+"通知。"
#: doc/classes/RoomManager.xml
msgid ""
@@ -66296,7 +67540,7 @@ msgstr "仅使用 [Room] çš„ PVS(潜在å¯è§é›†ï¼‰æ¥ç¡®å®šå¯è§æ€§ã€‚"
#: doc/classes/RootMotionView.xml
msgid "Editor-only helper for setting up root motion in [AnimationTree]."
-msgstr "在[AnimationTree]中设置根è¿åŠ¨çš„ä»…ç¼–è¾‘å™¨å¯ç”¨çš„辅助工具。"
+msgstr "在 [AnimationTree] 中设置根è¿åŠ¨çš„ä»…ç¼–è¾‘å™¨å¯ç”¨çš„辅助工具。"
#: doc/classes/RootMotionView.xml
msgid ""
@@ -66352,8 +67596,8 @@ msgid ""
"([i]local[/i] Y = 0). If [code]false[/code], the points' original Y "
"coordinate is preserved."
msgstr ""
-"如果 [code]true[/code],则网格的点都将ä½äºŽç›¸åŒçš„ Y åæ ‡ä¸Šï¼ˆ[i]local[/i] Y = "
-"0)。如果 [code]false[/code],则ä¿ç•™ç‚¹çš„原始 Y åæ ‡ã€‚"
+"如果为 [code]true[/code],则网格的点都将ä½äºŽç›¸åŒçš„ Y åæ ‡ä¸Šï¼ˆ[i]local[/i] Y "
+"= 0)。如果 [code]false[/code],则ä¿ç•™ç‚¹çš„原始 Y åæ ‡ã€‚"
#: doc/classes/SceneState.xml
msgid "A script interface to a scene file's data."
@@ -66383,16 +67627,16 @@ msgid ""
"get_connection_count() - 1][/code]."
msgstr ""
"返回场景中的信å·è¿žæŽ¥æ•°ã€‚\n"
-"用于查询其他[code]get_connection_*[/code]方法中的连接元数æ®çš„[code]idx[/code]"
-"傿•°ï¼Œå…¶é—´é𔿗¶é—´ä¸º[code][0, get_connection_count() - 1][/code]。"
+"用于查询其他 [code]get_connection_*[/code] 方法中的连接元数æ®çš„ [code]idx[/"
+"code] 傿•°ï¼ŒèŒƒå›´æ˜¯ [code][0, get_connection_count() - 1][/code]。"
#: doc/classes/SceneState.xml
msgid ""
"Returns the connection flags for the signal at [code]idx[/code]. See [enum "
"Object.ConnectFlags] constants."
msgstr ""
-"返回 [code]idx[/code] 处的信å·çš„连接标志。请å‚阅 [enum Object.ConnectFlags] "
-"常é‡ã€‚"
+"返回 [code]idx[/code] 处的信å·çš„è¿žæŽ¥æ ‡å¿—ã€‚è§ [enum Object.ConnectFlags] 常"
+"é‡ã€‚"
#: doc/classes/SceneState.xml
msgid "Returns the method connected to the signal at [code]idx[/code]."
@@ -66406,7 +67650,7 @@ msgstr "返回 [code]idx[/code] 处的信å·å称。"
msgid ""
"Returns the path to the node that owns the signal at [code]idx[/code], "
"relative to the root node."
-msgstr "返回拥有[code]idx[/code]处信å·çš„节点的相对于根节点的路径。"
+msgstr "返回拥有 [code]idx[/code] 处信å·çš„节点的相对于根节点的路径。"
#: doc/classes/SceneState.xml
msgid ""
@@ -66423,8 +67667,8 @@ msgid ""
"1][/code]."
msgstr ""
"返回场景中节点的数é‡ã€‚\n"
-"[code]idx[/code]傿•°ç”¨äºŽåœ¨å…¶ä»–[code]get_node_*[/code]方法中查询节点数æ®ï¼Œå…¶é—´"
-"隔为[code][0, get_node_count() - 1][/code]。"
+"[code]idx[/code] 傿•°ç”¨äºŽåœ¨å…¶ä»– [code]get_node_*[/code] 方法中查询节点数æ®ï¼Œ"
+"范围为 [code][0, get_node_count() - 1][/code]。"
#: doc/classes/SceneState.xml
msgid ""
@@ -66594,8 +67838,8 @@ 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]method[/code] 最多åªèƒ½æœ‰ 5 ä¸ªå‚æ•°ï¼ˆæ€»å…± 7 ä¸ªå‚æ•°ä¼ é€’给这个"
+"方法)。\n"
"[b]注æ„:[/b]由于设计é™åˆ¶ï¼Œå¦‚æžœå‚æ•°ä¹‹ä¸€ä¸º [code]null[/code],[method "
"call_group] å°†é™é»˜å¤±è´¥ã€‚\n"
"[b]注æ„:[/b][method call_group] 将始终调用具有一帧延迟的方法,其方å¼ç±»ä¼¼äºŽ "
@@ -66620,8 +67864,8 @@ msgstr ""
"对给定组的æ¯ä¸ªæˆå‘˜è°ƒç”¨ [code]method[/code],éµä»Žç»™å®šçš„ [enum "
"GroupCallFlags]。您å¯ä»¥é€šè¿‡åœ¨æ–¹æ³•è°ƒç”¨ç»“æŸæ—¶æŒ‡å®šå‚æ•°æ¥å°†å‚数传递给 "
"[code]method[/code]。\n"
-"[b]注:[/b] [code]method[/code]最多åªèƒ½æœ‰5ä¸ªå‚æ•°ï¼ˆæ€»å…±8ä¸ªå‚æ•°ä¼ é€’给这个方"
-"法)。\n"
+"[b]注æ„:[/b][code]method[/code] 最多åªèƒ½æœ‰ 5 ä¸ªå‚æ•°ï¼ˆæ€»å…± 8 ä¸ªå‚æ•°ä¼ é€’给这个"
+"方法)。\n"
"[b]注æ„:[/b]由于设计é™åˆ¶ï¼Œå¦‚æžœå‚æ•°ä¹‹ä¸€ä¸º [code]null[/code],[method "
"call_group_flags] å°†é™é»˜å¤±è´¥ã€‚\n"
"[codeblock]\n"
@@ -66741,8 +67985,8 @@ msgid ""
"Returns [code]true[/code] if the most recent [InputEvent] was marked as "
"handled with [method set_input_as_handled]."
msgstr ""
-"如果最近的 [InputEvent] 被使用 [method set_input_as_handled] 设置为已处ç†ï¼Œè¿”"
-"回 [code]true[/code]。"
+"如果最近的 [InputEvent] 被使用 [method set_input_as_handled] 设置为已处ç†ï¼Œåˆ™"
+"返回 [code]true[/code]。"
#: doc/classes/SceneTree.xml
msgid ""
@@ -66845,14 +68089,15 @@ msgid ""
"If [code]true[/code], collision shapes will be visible when running the game "
"from the editor for debugging purposes."
msgstr ""
-"如果 [code]true[/code],以调试为目的从编辑器è¿è¡Œæ¸¸æˆæ—¶ï¼Œç¢°æ’žå½¢çŠ¶å°†æ˜¯å¯è§çš„。"
+"如果为 [code]true[/code],以调试为目的从编辑器è¿è¡Œæ¸¸æˆæ—¶ï¼Œç¢°æ’žå½¢çŠ¶å°†æ˜¯å¯è§"
+"的。"
#: doc/classes/SceneTree.xml
msgid ""
"If [code]true[/code], navigation polygons will be visible when running the "
"game from the editor for debugging purposes."
msgstr ""
-"如果 [code]true[/code],以调试为目的从编辑器è¿è¡Œæ¸¸æˆæ—¶ï¼Œå¯¼èˆªå¤šè¾¹å½¢å°†æ˜¯å¯è§"
+"如果为 [code]true[/code],以调试为目的从编辑器è¿è¡Œæ¸¸æˆæ—¶ï¼Œå¯¼èˆªå¤šè¾¹å½¢å°†æ˜¯å¯è§"
"的。"
#: doc/classes/SceneTree.xml
@@ -66873,11 +68118,12 @@ msgid ""
"and for manual [Mutex] protection when accessing the [MultiplayerAPI] from "
"threads."
msgstr ""
-"如果 [code]true[/code](默认值),则在 [signal idle_frame] 期间å¯ç”¨æ­¤ "
+"如果为 [code]true[/code](默认值),则在 [signal idle_frame] 期间å¯ç”¨æ­¤ "
"SceneTree 的 [MultiplayerAPI] 自动轮询。\n"
-"如果[code]false[/code]ï¼Œåˆ™éœ€è¦æ‰‹åŠ¨è°ƒç”¨[method MultiplayerAPI.poll]æ¥å¤„ç†ç½‘络"
-"æ•°æ®åŒ…并投递RPCs/RSETs。这å…许在ä¸åŒçš„循环(例如物ç†ã€çº¿ç¨‹ã€ç‰¹å®šæ—¶é—´æ­¥é•¿ï¼‰ä¸­"
-"è¿è¡Œ RPC/RSET,并在从线程访问 [MultiplayerAPI] 时进行手动 [Mutex] ä¿æŠ¤ã€‚"
+"如果为 [code]false[/code]ï¼Œåˆ™éœ€è¦æ‰‹åŠ¨è°ƒç”¨ [method MultiplayerAPI.poll] æ¥å¤„ç†"
+"网络数æ®åŒ…并投递 RPC/RSET。这样就能够在ä¸åŒçš„循环(例如物ç†ã€çº¿ç¨‹ã€ç‰¹å®šæ—¶é—´æ­¥"
+"长)中è¿è¡Œ RPC/RSET,并在从线程访问 [MultiplayerAPI] 时进行手动 [Mutex] ä¿"
+"护。"
#: doc/classes/SceneTree.xml
msgid ""
@@ -66889,11 +68135,11 @@ msgid ""
"by default. Handling of networking-related events (connection, "
"disconnection, new clients) is done by connecting to [SceneTree]'s signals."
msgstr ""
-"å¤„ç† RPC ç³»ç»Ÿçš„å¯¹ç­‰å¯¹è±¡ï¼ˆè®¾ç½®åŽæœ‰æ•ˆåœ°å¯ç”¨ç½‘络)。根æ®peer本身的ä¸åŒï¼Œ"
-"[SceneTree]å°†æˆä¸ºç½‘络æœåŠ¡å™¨ï¼ˆæ£€æŸ¥[method is_network_server])并将根节点的网络"
-"模å¼è®¾ç½®ä¸ºmaster,或者它将æˆä¸ºæ ¹èŠ‚ç‚¹è¢«è®¾ç½®ä¸ºpuppet的普通对等体。所有å­èŠ‚ç‚¹é»˜"
-"认设置为继承网络模å¼ã€‚ä¸Žç½‘ç»œç›¸å…³çš„äº‹ä»¶ï¼ˆè¿žæŽ¥ã€æ–­å¼€è¿žæŽ¥ã€æ–°å®¢æˆ·ç«¯ï¼‰çš„å¤„ç†æ˜¯é€š"
-"过连接到 [SceneTree] çš„ä¿¡å·æ¥å®Œæˆçš„。"
+"å¤„ç† RPC ç³»ç»Ÿçš„å¯¹ç­‰å¯¹è±¡ï¼ˆè®¾ç½®åŽæœ‰æ•ˆåœ°å¯ç”¨ç½‘络)。根æ®å¯¹ç­‰ä½“本身的ä¸åŒï¼Œ"
+"[SceneTree] å°†æˆä¸ºç½‘络æœåŠ¡å™¨ï¼ˆæ£€æŸ¥ [method is_network_server])并将根节点的网"
+"络模å¼è®¾ç½®ä¸º master,或者它将æˆä¸ºæ ¹èŠ‚ç‚¹è¢«è®¾ç½®ä¸º puppet 的普通对等体。所有å­èŠ‚"
+"点默认设置为继承网络模å¼ã€‚ä¸Žç½‘ç»œç›¸å…³çš„äº‹ä»¶ï¼ˆè¿žæŽ¥ã€æ–­å¼€è¿žæŽ¥ã€æ–°å®¢æˆ·ç«¯ï¼‰çš„处ç†"
+"是通过连接到 [SceneTree] çš„ä¿¡å·æ¥å®Œæˆçš„。"
#: doc/classes/SceneTree.xml
msgid ""
@@ -66904,9 +68150,9 @@ 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]å’Œ"
+"如果为 [code]true[/code],[SceneTree] 会暂åœã€‚这样åšä¼šæœ‰ä»¥ä¸‹è¡Œä¸ºï¼š\n"
+"- 2D å’Œ 3D 物ç†å°†åœæ­¢ï¼ŒåŒ…括信å·å’Œç¢°æ’žæ£€æµ‹ã€‚\n"
+"- 节点ä¸å†è°ƒç”¨ [method Node._process]ã€[method Node._physics_process] å’Œ "
"[method Node._input]。"
#: doc/classes/SceneTree.xml
@@ -66934,8 +68180,8 @@ msgid ""
"If [code]true[/code], the [SceneTree]'s [member network_peer] refuses new "
"incoming connections."
msgstr ""
-"如果 [code]true[/code],则 [SceneTree] çš„ [member network_peer] æ‹’ç»æ–°çš„ä¼ å…¥"
-"连接。"
+"如果为 [code]true[/code],则 [SceneTree] çš„ [member network_peer] æ‹’ç»æ–°çš„ä¼ "
+"入连接。"
#: doc/classes/SceneTree.xml
msgid "The [SceneTree]'s root [Viewport]."
@@ -66971,16 +68217,16 @@ msgid ""
"Emitted whenever this [SceneTree]'s [member network_peer] successfully "
"connected to a server. Only emitted on clients."
msgstr ""
-"当这个[SceneTree]çš„[member network_peer]æˆåŠŸè¿žæŽ¥åˆ°ä¸€ä¸ªæœåŠ¡å™¨æ—¶å‘出。åªåœ¨å®¢æˆ·"
-"端å‘出。"
+"æ¯å½“这个 [SceneTree] çš„ [member network_peer] æˆåŠŸè¿žæŽ¥åˆ°æœåŠ¡å™¨æ—¶å‘出。åªä¼šåœ¨"
+"客户端å‘出。"
#: doc/classes/SceneTree.xml
msgid ""
"Emitted whenever this [SceneTree]'s [member network_peer] fails to establish "
"a connection to a server. Only emitted on clients."
msgstr ""
-"æ¯å½“æ­¤ [SceneTree] çš„ [member network_peer] 无法与æœåŠ¡å™¨å»ºç«‹è¿žæŽ¥æ—¶å‘出。仅在"
-"客户端上å‘出。"
+"æ¯å½“这个 [SceneTree] çš„ [member network_peer] 无法建立与æœåŠ¡å™¨çš„è¿žæŽ¥æ—¶å‘出。"
+"åªä¼šåœ¨å®¢æˆ·ç«¯å‘出。"
#: doc/classes/SceneTree.xml
msgid ""
@@ -66999,7 +68245,8 @@ msgstr "æ¯å½“å•击全局èœå•项时触å‘。"
msgid ""
"Emitted immediately before [method Node._process] is called on every node in "
"the [SceneTree]."
-msgstr "在对[SceneTree]中的æ¯ä¸ªèŠ‚ç‚¹è°ƒç”¨[method Node._process]之å‰ç«‹å³å‘出。"
+msgstr ""
+"在对 [SceneTree] 中的æ¯ä¸ªèŠ‚ç‚¹è°ƒç”¨ [method Node._process] 之å‰ç«‹å³å‘出。"
#: doc/classes/SceneTree.xml
msgid ""
@@ -67008,9 +68255,9 @@ msgid ""
"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 ""
-"当这个[SceneTree]çš„[member network_peer]与一个新的对等体连接时å‘出。ID是新对"
-"等体的对等体ID。当其他客户端连接到åŒä¸€ä¸ªæœåŠ¡å™¨æ—¶ï¼Œå®¢æˆ·ç«¯ä¼šå¾—åˆ°é€šçŸ¥ã€‚å½“è¿žæŽ¥åˆ°"
-"一个æœåŠ¡å™¨æ—¶ï¼Œå®¢æˆ·ç«¯ä¹Ÿä¼šæ”¶åˆ°è¯¥æœåŠ¡å™¨çš„è¿™ä¸ªä¿¡å·ï¼ˆID为1)。"
+"æ¯å½“这个 [SceneTree] çš„ [member network_peer] 连上一个新的对等体时å‘出。ID 是"
+"新对等体的对等体 ID。当有其他客户端连接到åŒä¸€ä¸ªæœåŠ¡å™¨æ—¶ï¼Œå®¢æˆ·ç«¯ä¼šå¾—åˆ°é€šçŸ¥ã€‚å½“"
+"连接到æœåŠ¡å™¨æ—¶ï¼Œå®¢æˆ·ç«¯ä¹Ÿä¼šæ”¶åˆ°é’ˆå¯¹è¯¥æœåŠ¡å™¨çš„è¿™ä¸ªä¿¡å·ï¼ˆID 为 1)。"
#: doc/classes/SceneTree.xml
msgid ""
@@ -67018,8 +68265,8 @@ msgid ""
"peer. Clients get notified when other clients disconnect from the same "
"server."
msgstr ""
-"æ¯å½“æ­¤ [SceneTree] çš„ [member network_peer] 与对等方断开连接时å‘出。当其他客"
-"户端与åŒä¸€æœåŠ¡å™¨æ–­å¼€è¿žæŽ¥æ—¶ï¼Œå®¢æˆ·ç«¯ä¼šæ”¶åˆ°é€šçŸ¥ã€‚"
+"æ¯å½“这个 [SceneTree] çš„ [member network_peer] 断开与对等体的连接时å‘出。当其"
+"他客户端与åŒä¸€æœåŠ¡å™¨æ–­å¼€è¿žæŽ¥æ—¶ï¼Œå®¢æˆ·ç«¯ä¼šæ”¶åˆ°é€šçŸ¥ã€‚"
#: doc/classes/SceneTree.xml
msgid "Emitted whenever a node is added to the [SceneTree]."
@@ -67132,7 +68379,6 @@ msgid "One-shot timer."
msgstr "一次性定时器。"
#: doc/classes/SceneTreeTimer.xml
-#, fuzzy
msgid ""
"A one-shot timer managed by the scene tree, which emits [signal timeout] on "
"completion. See also [method SceneTree.create_timer].\n"
@@ -67144,8 +68390,8 @@ msgid ""
" yield(get_tree().create_timer(1.0), \"timeout\")\n"
" print(\"Timer ended.\")\n"
"[/codeblock]\n"
-"The timer will be automatically freed after its time elapses, so be aware "
-"that any reference you might have kept to it will become invalid."
+"The timer will be dereferenced after its time elapses. To preserve the "
+"timer, you can keep a reference to it. See [Reference]."
msgstr ""
"由场景树管ç†çš„ä¸€æ¬¡æ€§å®šæ—¶å™¨ï¼Œå®ƒåœ¨å®Œæˆæ—¶å‘[signal timeout] ä¿¡å·ã€‚请å‚阅 "
"[method SceneTree.create_timer]。\n"
@@ -67157,7 +68403,8 @@ msgstr ""
" yield(get_tree().create_timer(1.0), \"timeout\")\n"
" print(\"计时器结æŸã€‚\")\n"
"[/codeblock]\n"
-"时间结æŸåŽï¼Œè¯¥è®¡æ—¶å™¨å°†è¢«è‡ªåŠ¨é‡Šæ”¾ã€‚"
+"时间结æŸåŽï¼Œå¯¹è¯¥è®¡æ—¶å™¨çš„引用将被自动释放。è¦ä¿ç•™è¯¥è®¡æ—¶å™¨ï¼Œä½ å¯ä»¥ä¿æŒå¯¹å®ƒçš„引"
+"ç”¨ã€‚è§ [Reference]。"
#: doc/classes/SceneTreeTimer.xml
msgid "The time remaining (in seconds)."
@@ -67174,6 +68421,7 @@ msgid ""
msgstr "通过脚本进行通用动画的轻é‡çº§å¯¹è±¡ï¼Œä½¿ç”¨ [Tweener]。"
#: doc/classes/SceneTreeTween.xml
+#, fuzzy
msgid ""
"[SceneTreeTween] is a tween managed by the scene tree. As opposed to "
"[Tween], it does not require the instantiation of a node.\n"
@@ -67188,24 +68436,23 @@ msgid ""
"manually (i.e. by using [code]Tween.new()[/code]) are invalid. They can't be "
"used for tweening values, but you can do manual interpolation with [method "
"interpolate_value].\n"
-"A [SceneTreeTween] animation is composed of a sequence of [Tweener]s, which "
-"by default are executed one after another. You can create a sequence by "
-"appending [Tweener]s to the [SceneTreeTween]. Animating something with a "
-"[Tweener] is called tweening. Example tweening sequence looks like this:\n"
+"A tween animation is created by adding [Tweener]s to the [SceneTreeTween] "
+"object, using [method tween_property], [method tween_interval], [method "
+"tween_callback] or [method tween_method]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1)\n"
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"This sequence will make the [code]$Sprite[/code] node turn red, then shrink "
-"and finally the [method Node.queue_free] is called to remove the sprite. See "
-"methods [method tween_property], [method tween_interval], [method "
-"tween_callback] and [method tween_method] for more usage information.\n"
+"This sequence will make the [code]$Sprite[/code] node turn red, then shrink, "
+"before finally calling [method Node.queue_free] to free the sprite. "
+"[Tweener]s are executed one after another by default. This behavior can be "
+"changed using [method parallel] and [method set_parallel].\n"
"When a [Tweener] is created with one of the [code]tween_*[/code] methods, a "
"chained method call can be used to tweak the properties of this [Tweener]. "
-"For example, if you want to set different transition type in the above "
-"example, you can do:\n"
+"For example, if you want to set a different transition type in the above "
+"example, you can use [method set_trans]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1).set_trans(Tween."
@@ -67214,8 +68461,9 @@ msgid ""
"TRANS_BOUNCE)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Most of the [SceneTreeTween] methods can be chained this way too. In this "
-"example the [SceneTreeTween] is bound and have set a default transition:\n"
+"Most of the [SceneTreeTween] methods can be chained this way too. In the "
+"following example the [SceneTreeTween] is bound to the running script's node "
+"and a default transition is set for its [Tweener]s:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween().bind_node(self).set_trans(Tween."
"TRANS_ELASTIC)\n"
@@ -67223,16 +68471,16 @@ msgid ""
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Another interesting use for [SceneTreeTween]s is animating arbitrary set of "
+"Another interesting use for [SceneTreeTween]s is animating arbitrary sets of "
"objects:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"for sprite in get_children():\n"
-" tween.tween_property(sprite, \"position\", Vector2(), 1)\n"
+" tween.tween_property(sprite, \"position\", Vector2(0, 0), 1)\n"
"[/codeblock]\n"
"In the example above, all children of a node are moved one after another to "
"position (0, 0).\n"
-"Some [Tweener]s use transitions and eases. The first accepts an [enum Tween."
+"Some [Tweener]s use transitions and eases. The first accepts a [enum Tween."
"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 Tween.EaseType] constant, and "
@@ -67244,7 +68492,7 @@ msgid ""
"tween_cheatsheet.png]Tween easing and transition types cheatsheet[/url]\n"
"[b]Note:[/b] All [SceneTreeTween]s will automatically start by default. To "
"prevent a [SceneTreeTween] from autostarting, you can call [method stop] "
-"immediately after it was created."
+"immediately after it is created."
msgstr ""
"[SceneTreeTween] 是由场景树管ç†çš„补间动画。与 [Tween] 相对,ä¸éœ€è¦å®žä¾‹åŒ–节"
"点。\n"
@@ -67345,15 +68593,18 @@ msgstr ""
"[/codeblock]"
#: doc/classes/SceneTreeTween.xml
+#, fuzzy
msgid ""
-"Processes the [SceneTreeTween] by given [code]delta[/code] value, in "
-"seconds. Mostly useful when the [SceneTreeTween] is paused, for controlling "
-"it manually. Can also be used to end the [SceneTreeTween] animation "
-"immediately, by using [code]delta[/code] longer than the whole duration.\n"
+"Processes the [SceneTreeTween] by the given [code]delta[/code] value, in "
+"seconds. This is mostly useful for manual control when the [SceneTreeTween] "
+"is paused. It can also be used to end the [SceneTreeTween] animation "
+"immediately, by setting [code]delta[/code] longer than the whole duration of "
+"the [SceneTreeTween] animation.\n"
"Returns [code]true[/code] if the [SceneTreeTween] still has [Tweener]s that "
"haven't finished.\n"
-"[b]Note:[/b] The [SceneTreeTween] will become invalid after finished, but "
-"you can call [method stop] after the step, to keep it and reset."
+"[b]Note:[/b] The [SceneTreeTween] will become invalid in the next processing "
+"frame after its animation finishes. Calling [method stop] after performing "
+"[method custom_step] instead keeps and resets the [SceneTreeTween]."
msgstr ""
"使用给定的增é‡ç§’æ•° [code]delta[/code] 处ç†è¯¥ [SceneTreeTween]。最常è§çš„用法是"
"在该 [SceneTreeTween] æš‚åœæ—¶å¯¹å…¶è¿›è¡Œæ‰‹åŠ¨æŽ§åˆ¶ã€‚ä¹Ÿå¯ç”¨äºŽç«‹å³åœæ­¢è¯¥ "
@@ -67364,10 +68615,12 @@ msgstr ""
"[method stop] 将其ä¿ç•™å¹¶é‡ç½®ã€‚"
#: doc/classes/SceneTreeTween.xml
+#, fuzzy
msgid ""
"Returns the total time in seconds the [SceneTreeTween] has been animating (i."
-"e. time since it started, not counting pauses etc.). The time is affected by "
-"[method set_speed_scale] and [method stop] will reset it to [code]0[/code].\n"
+"e. the time since it started, not counting pauses etc.). The time is "
+"affected by [method set_speed_scale], and [method stop] will reset it to "
+"[code]0[/code].\n"
"[b]Note:[/b] As it results from accumulating frame deltas, the time returned "
"after the [SceneTreeTween] has finished animating will be slightly greater "
"than the actual [SceneTreeTween] duration."
@@ -67416,14 +68669,14 @@ msgid ""
msgstr "返回该 [SceneTreeTween] ç›®å‰æ˜¯å¦æ­£åœ¨æ‰§è¡Œï¼Œå³æœªæš‚åœä¸”未完æˆã€‚"
#: doc/classes/SceneTreeTween.xml
+#, fuzzy
msgid ""
"Returns whether the [SceneTreeTween] is valid. A valid [SceneTreeTween] is a "
"[SceneTreeTween] contained by the scene tree (i.e. the array from [method "
-"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). "
-"[SceneTreeTween] might become invalid when it has finished tweening or was "
-"killed, also when created with [code]Tween.new()[/code]. Invalid "
-"[SceneTreeTween] can't have [Tweener]s appended, because it can't animate "
-"them. You can however still use [method interpolate_value]."
+"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). A "
+"[SceneTreeTween] might become invalid when it has finished tweening, is "
+"killed, or when created with [code]SceneTreeTween.new()[/code]. Invalid "
+"[SceneTreeTween]s can't have [Tweener]s appended."
msgstr ""
"返回该 [SceneTreeTween] æ˜¯å¦æœ‰æ•ˆã€‚有效的 [SceneTreeTween] 是由场景树包å«çš„ "
"[SceneTreeTween]ï¼ˆå³ [method SceneTree.get_processed_tweens] 返回的数组中包å«"
@@ -67476,19 +68729,19 @@ msgstr ""
"的默认缓动类型。"
#: doc/classes/SceneTreeTween.xml
+#, fuzzy
msgid ""
"Sets the number of times the tweening sequence will be repeated, i.e. "
"[code]set_loops(2)[/code] will run the animation twice.\n"
-"Calling this method without arguments will make the [SceneTreeTween] run "
-"infinitely, until it is either killed by [method kill] or by freeing bound "
-"node, or all the animated objects have been freed (which makes further "
+"Calling this method without arguments will make the [Tween] run infinitely, "
+"until either it is killed with [method kill], the [Tween]'s bound node is "
+"freed, or all the animated objects have been freed (which makes further "
"animation impossible).\n"
"[b]Warning:[/b] Make sure to always add some duration/delay when using "
-"infinite loops. 0-duration looped animations (e.g. single [CallbackTweener] "
-"with no delay or [PropertyTweener] with invalid node) are equivalent to "
-"infinite [code]while[/code] loops and will freeze your game. If a "
-"[SceneTreeTween]'s lifetime depends on some node, always use [method "
-"bind_node]."
+"infinite loops. To prevent the game freezing, 0-duration looped animations "
+"(e.g. a single [CallbackTweener] with no delay) are stopped after a small "
+"number of loops, which may produce unexpected results. If a [Tween]'s "
+"lifetime depends on some node, always use [method bind_node]."
msgstr ""
"è¿™åªè¯¥è¡¥é—´åºåˆ—çš„é‡å¤æ¬¡æ•°ï¼Œå³ [code]set_loops(2)[/code] 会让动画执行两次。\n"
"调用这个方法时如果ä¸å¸¦å‚数,那么该 [SceneTreeTween] ä¼šæ— é™æ‰§è¡Œï¼Œç›´åˆ°è¢« "
@@ -67581,12 +68834,13 @@ msgstr ""
"[/codeblock]"
#: doc/classes/SceneTreeTween.xml
+#, fuzzy
msgid ""
"Creates and appends an [IntervalTweener]. This method can be used to create "
-"delays in the tween animation, as an alternative for using the delay in "
-"other [Tweener]s or when there's no animation (in which case the "
-"[SceneTreeTween] acts as a timer). [code]time[/code] is the length of the "
-"interval, in seconds.\n"
+"delays in the tween animation, as an alternative to using the delay in other "
+"[Tweener]s, or when there's no animation (in which case the [SceneTreeTween] "
+"acts as a timer). [code]time[/code] is the length of the interval, in "
+"seconds.\n"
"Example: creating an interval in code execution.\n"
"[codeblock]\n"
"# ... some code\n"
@@ -67677,12 +68931,13 @@ msgstr ""
"[/codeblock]"
#: doc/classes/SceneTreeTween.xml
+#, fuzzy
msgid ""
"Creates and appends a [PropertyTweener]. This method tweens a "
"[code]property[/code] of an [code]object[/code] between an initial value and "
"[code]final_val[/code] in a span of time equal to [code]duration[/code], in "
-"seconds. The initial value by default is a value at the time the tweening of "
-"the [PropertyTweener] start. For example:\n"
+"seconds. The initial value by default is the property's value at the time "
+"the tweening of the [PropertyTweener] starts. For example:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"tween.tween_property($Sprite, \"position\", Vector2(100, 200), 1)\n"
@@ -67732,14 +68987,14 @@ msgstr ""
"[/codeblock]"
#: doc/classes/SceneTreeTween.xml
+#, fuzzy
msgid ""
"Emitted when the [SceneTreeTween] has finished all tweening. Never emitted "
"when the [SceneTreeTween] is set to infinite looping (see [method "
"set_loops]).\n"
-"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) after this signal "
-"is emitted, but it doesn't happen immediately, but on the next processing "
-"frame. Calling [method stop] inside the signal callback will preserve the "
-"[SceneTreeTween]."
+"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) in the next "
+"processing frame after this signal is emitted. Calling [method stop] inside "
+"the signal callback will prevent the [SceneTreeTween] from being removed."
msgstr ""
"在该 [SceneTreeTween] å®Œæˆæ‰€æœ‰è¡¥é—´æ—¶è§¦å‘。该 [SceneTreeTween] 被设为无é™å¾ªçޝ"
"æ—¶ä¸ä¼šè§¦å‘ï¼ˆè§ [method set_loops])。\n"
@@ -67748,19 +69003,21 @@ msgstr ""
"留该 [SceneTreeTween]。"
#: doc/classes/SceneTreeTween.xml
+#, fuzzy
msgid ""
"Emitted when a full loop is complete (see [method set_loops]), providing the "
-"loop index. This signal is not emitted after final loop, use [signal "
+"loop index. This signal is not emitted after the final loop, use [signal "
"finished] instead for this case."
msgstr ""
"完æˆä¸€æ¬¡å¾ªçŽ¯æ—¶è§¦å‘ï¼ˆè§ [method set_loops]),会æä¾›è¯¥å¾ªçŽ¯çš„ç´¢å¼•å·ã€‚这个信å·ä¸"
"会在最åŽä¸€æ¬¡å¾ªçޝåŽè§¦å‘ï¼Œè¿™ç§æƒ…况请使用 [signal finished] 代替。"
#: doc/classes/SceneTreeTween.xml
+#, fuzzy
msgid ""
"Emitted when one step of the [SceneTreeTween] is complete, providing the "
"step index. One step is either a single [Tweener] or a group of [Tweener]s "
-"running parallelly."
+"running in parallel."
msgstr ""
"完æˆè¯¥ [SceneTreeTween] 的一步完æˆåŽè§¦å‘,会æä¾›è¿™ä¸€æ­¥çš„索引å·ã€‚一步指的是å•"
"个 [Tweener] 或一组并行执行的 [Tweener]。"
@@ -67889,9 +69146,9 @@ msgstr ""
"调用 [method Popup.popup] 方法之å‰é…置其字段。\n"
"[codeblock]\n"
"func _ready():\n"
-" dialog.config(\"Node\", \"res://new_node.gd\") # For in-engine types\n"
+" dialog.config(\"Node\", \"res://new_node.gd\") # 引擎内置类型\n"
" dialog.config(\"\\\"res://base_node.gd\\\"\", \"res://derived_node.gd\") "
-"# For script types\n"
+"# 脚本类型\n"
" dialog.popup_centered()\n"
"[/codeblock]"
@@ -67901,19 +69158,19 @@ msgstr "预填必填字段以é…ç½® ScriptCreateDialog 以供使用。"
#: doc/classes/ScriptCreateDialog.xml
msgid "Emitted when the user clicks the OK button."
-msgstr "当用户点击OK按钮时å‘出。"
+msgstr "当用户点击确定按钮时å‘出。"
#: doc/classes/ScriptEditor.xml
msgid "Godot editor's script editor."
-msgstr "Godot编辑器的脚本编辑器。"
+msgstr "Godot 编辑器的脚本编辑器。"
#: doc/classes/ScriptEditor.xml
msgid ""
"[b]Note:[/b] This class shouldn't be instantiated directly. Instead, access "
"the singleton using [method EditorInterface.get_script_editor]."
msgstr ""
-"[b]注æ„:[/b]这个类ä¸åº”该被直接实例化。相å,使用[method EditorInterface."
-"get_script_editor]æ¥è®¿é—®è¿™ä¸ªå•例。"
+"[b]注æ„:[/b]这个类ä¸åº”该被直接实例化。相å,使用 [method EditorInterface."
+"get_script_editor] æ¥è®¿é—®è¿™ä¸ªå•例。"
#: doc/classes/ScriptEditor.xml
msgid "Returns a [Script] that is currently active in editor."
@@ -67935,8 +69192,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]中çœç•¥ã€‚å®ƒå°†æ ¹æ®æ‰€é€‰æ‹©çš„脚本语言添加。"
+"æ‰“å¼€åˆ›å»ºè„šæœ¬çš„å¯¹è¯æ¡†ã€‚脚本将扩展 [code]base_name[/code]。文件扩展åå¯ä»¥ä»Ž "
+"[code]base_path[/code] 中çœç•¥ã€‚å®ƒå°†æ ¹æ®æ‰€é€‰æ‹©çš„脚本语言添加。"
#: doc/classes/ScriptEditor.xml
msgid ""
@@ -67966,8 +69223,8 @@ msgid ""
"size of the page). Horizontal ([HScrollBar]) and Vertical ([VScrollBar]) "
"versions are available."
msgstr ""
-"æ»šåŠ¨æ¡æ˜¯åŸºäºŽ [Range] çš„ [Control]ï¼Œæ˜¾ç¤ºå¯æ‹–动区域(页é¢å¤§å°ï¼‰ã€‚æä¾›æ°´å¹³ "
-"([HScrollBar]) 和垂直 ([VScrollBar]) 版本。"
+"æ»šåŠ¨æ¡æ˜¯åŸºäºŽ [Range] çš„ [Control]ï¼Œæ˜¾ç¤ºå¯æ‹–动区域(页é¢å¤§å°ï¼‰ã€‚æä¾›æ°´å¹³"
+"([HScrollBar])和垂直([VScrollBar])版本。"
#: doc/classes/ScrollBar.xml
msgid ""
@@ -67998,13 +69255,13 @@ msgid ""
"they will upscale to the ScrollContainer's size if it's larger (scroll is "
"invisible for the chosen dimension)."
msgstr ""
-"æ»šåŠ¨å®¹å™¨èŠ‚ç‚¹ï¼Œç”¨äºŽåŒ…å« [Control] å­èŠ‚ç‚¹ã€‚ æ»šåŠ¨å®¹å™¨å°†åœ¨éœ€è¦æ—¶è‡ªåŠ¨åˆ›å»ºæ»šåŠ¨æ¡å­"
-"项([HScrollBar]ã€[VScrollBar] 或两者),且仅在滚动容器区域内绘制控件。滚动æ¡"
-"将自动绘制在å³ä¾§æˆ–底部,å³åž‚直或水平,并å…许拖动以在滚动容器内移动å¯è§†æŽ§ä»¶åŠ"
-"å…¶å­é¡¹ã€‚滚动æ¡è¿˜å°†æ ¹æ®æŽ§ä»¶ç›¸å¯¹äºŽæ»šåŠ¨å®¹å™¨çš„ [member Control.rect_min_size] 自"
-"动调整抓å–器的大å°ã€‚与 [Panel] 控件é…åˆä½¿ç”¨æ•ˆæžœå¾ˆå¥½ã€‚您å¯ä»¥å°†å­é¡¹çš„大尿 ‡å¿—设"
-"置为 [code]EXPAND[/code]ï¼Œå½“æ»šåŠ¨å®¹å™¨çš„å¤§å°æ›´å¤§ï¼ˆæ»šåŠ¨å¯¹äºŽæ‰€é€‰ç»´åº¦ä¸å¯è§ï¼‰ï¼Œå®ƒ"
-"们将放大到滚动容器的大å°ã€‚"
+"æ»šåŠ¨å®¹å™¨èŠ‚ç‚¹ï¼Œç”¨äºŽåŒ…å« [Control] å­èŠ‚ç‚¹ã€‚æ»šåŠ¨å®¹å™¨å°†åœ¨éœ€è¦æ—¶è‡ªåŠ¨åˆ›å»ºæ»šåŠ¨æ¡å­é¡¹"
+"([HScrollBar]ã€[VScrollBar] 或两者),且仅在滚动容器区域内绘制控件。滚动æ¡å°†"
+"自动绘制在å³ä¾§æˆ–底部,å³åž‚直或水平,并å…许拖动以在滚动容器内移动å¯è§†æŽ§ä»¶åŠå…¶"
+"å­é¡¹ã€‚滚动æ¡è¿˜å°†æ ¹æ®æŽ§ä»¶ç›¸å¯¹äºŽæ»šåŠ¨å®¹å™¨çš„ [member Control.rect_min_size] 自动"
+"调整抓å–器的大å°ã€‚与 [Panel] 控件é…åˆä½¿ç”¨æ•ˆæžœå¾ˆå¥½ã€‚您å¯ä»¥å°†å­é¡¹çš„大尿 ‡å¿—设置"
+"为 [code]EXPAND[/code]ï¼Œå½“æ»šåŠ¨å®¹å™¨çš„å¤§å°æ›´å¤§ï¼ˆæ»šåŠ¨å¯¹äºŽæ‰€é€‰ç»´åº¦ä¸å¯è§ï¼‰ï¼Œå®ƒä»¬"
+"将放大到滚动容器的大å°ã€‚"
#: doc/classes/ScrollContainer.xml
msgid ""
@@ -68061,8 +69318,8 @@ msgid ""
"focused children (including indirect children) to make sure they are fully "
"visible."
msgstr ""
-"如果 [code]true[/code],则 ScrollContainer 将自动滚动到获得焦点的å­é¡¹ï¼ˆåŒ…括间"
-"接å­é¡¹ï¼‰ä»¥ç¡®ä¿å®ƒä»¬å®Œå…¨å¯è§ã€‚"
+"如果为 [code]true[/code],则 ScrollContainer 将自动滚动到获得焦点的å­é¡¹ï¼ˆåŒ…括"
+"间接å­é¡¹ï¼‰ä»¥ç¡®ä¿å®ƒä»¬å®Œå…¨å¯è§ã€‚"
#: doc/classes/ScrollContainer.xml
msgid "The current horizontal scroll value."
@@ -68070,7 +69327,7 @@ msgstr "当剿°´å¹³æ»šåŠ¨å€¼ã€‚"
#: doc/classes/ScrollContainer.xml
msgid "If [code]true[/code], enables horizontal scrolling."
-msgstr "如果 [code]true[/code],å¯ç”¨æ°´å¹³æ»šåŠ¨ã€‚"
+msgstr "如果为 [code]true[/code],å¯ç”¨æ°´å¹³æ»šåŠ¨ã€‚"
#: doc/classes/ScrollContainer.xml
msgid "The current vertical scroll value."
@@ -68078,7 +69335,7 @@ msgstr "当å‰åž‚直滚动值。"
#: doc/classes/ScrollContainer.xml
msgid "If [code]true[/code], enables vertical scrolling."
-msgstr "如果 [code]true[/code],则å¯ç”¨åž‚直滚动。"
+msgstr "如果为 [code]true[/code],则å¯ç”¨åž‚直滚动。"
#: doc/classes/ScrollContainer.xml
msgid "Emitted when scrolling stops."
@@ -68100,7 +69357,7 @@ msgstr "2D 碰撞的分段形状。"
msgid ""
"Segment shape for 2D collisions. Consists of two points, [code]a[/code] and "
"[code]b[/code]."
-msgstr "2D 碰撞的分段形状。由[code]a[/code] å’Œ [code]b[/code]两点组æˆã€‚"
+msgstr "2D 碰撞的分段形状。由 [code]a[/code] å’Œ [code]b[/code] 两点组æˆã€‚"
#: doc/classes/SegmentShape2D.xml
msgid "The segment's first point position."
@@ -68204,8 +69461,8 @@ msgid ""
"[b]Note:[/b] [code]param[/code] must match the name of the uniform in the "
"code exactly."
msgstr ""
-"如果ç€è‰²å™¨åœ¨å…¶ä»£ç ä¸­æŠŠè¿™ä¸ªå‚数定义为uniform,则返回 [code]true[/code]。\n"
-"[b]注æ„:[/b][code]param[/code] 必须与代ç ä¸­çš„uniformå称完全匹é…。"
+"如果ç€è‰²å™¨åœ¨å…¶ä»£ç ä¸­æŠŠè¿™ä¸ªå‚数定义为 uniform,则返回 [code]true[/code]。\n"
+"[b]注æ„:[/b][code]param[/code] 必须与代ç ä¸­çš„ uniform å称完全匹é…。"
#: doc/classes/Shader.xml
msgid ""
@@ -68232,9 +69489,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ç€è‰²å™¨è§£æžå™¨çš„验è¯ï¼Œæ‰€ä»¥ä½¿ç”¨æ—¶è¦æ³¨æ„。"
+"返回该ç€è‰²å™¨çš„自定义。自定义å¯ä»¥åœ¨ Godot 中用于添加ç€è‰²å™¨é€»è¾‘所需的 GLSL 预处"
+"ç†æŒ‡ä»¤ï¼ˆä¾‹å¦‚:扩展)。\n"
+"[b]注æ„:[/b]自定义没有ç»è¿‡ Godot ç€è‰²å™¨è§£æžå™¨çš„验è¯ï¼Œæ‰€ä»¥ä½¿ç”¨æ—¶è¦æ³¨æ„。"
#: doc/classes/Shader.xml
msgid "Mode used to draw all 3D objects."
@@ -68272,14 +69529,15 @@ msgstr ""
#: doc/classes/ShaderMaterial.xml
msgid ""
"Returns the current value set for this material of a uniform in the shader."
-msgstr "返回在ç€è‰²å™¨ä¸­æ­¤uniformæè´¨çš„当å‰å€¼ã€‚"
+msgstr "返回在ç€è‰²å™¨ä¸­æ­¤ uniform æè´¨çš„当å‰å€¼ã€‚"
#: doc/classes/ShaderMaterial.xml
msgid ""
"Returns [code]true[/code] if the property identified by [code]name[/code] "
"can be reverted to a default value."
msgstr ""
-"如果由[code]name[/code]标识的属性å¯ä»¥æ¢å¤åˆ°é»˜è®¤å€¼ï¼Œåˆ™è¿”回 [code]true[/code]。"
+"如果由 [code]name[/code] 标识的属性å¯ä»¥æ¢å¤åˆ°é»˜è®¤å€¼ï¼Œåˆ™è¿”回 [code]true[/"
+"code]。"
#: doc/classes/ShaderMaterial.xml
msgid ""
@@ -68293,8 +69551,8 @@ msgid ""
"[b]Note:[/b] [code]param[/code] must match the name of the uniform in the "
"code exactly."
msgstr ""
-"改å˜ç€è‰²å™¨ä¸­æè´¨çš„uniform值。\n"
-"[b]注æ„:[/b][code]param[/code]必须与代ç ä¸­çš„uniformå称完全匹é…。"
+"改å˜ç€è‰²å™¨ä¸­æè´¨çš„ uniform 值。\n"
+"[b]注æ„:[/b][code]param[/code] 必须与代ç ä¸­çš„ uniform å称完全匹é…。"
#: doc/classes/ShaderMaterial.xml
msgid "The [Shader] program used to render this material."
@@ -68309,7 +69567,8 @@ 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形状资æºçš„基类。继承于此的节点å¯ä»¥ä½œä¸º[PhysicsBody]或[Area]对象的形状。"
+"所有3D形状资æºçš„基类。继承于此的节点å¯ä»¥ä½œä¸º [PhysicsBody] 或 [Area] 对象的形"
+"状。"
#: doc/classes/Shape.xml
msgid ""
@@ -68332,11 +69591,11 @@ msgstr ""
#: doc/classes/Shape2D.xml
msgid "Base class for all 2D shapes."
-msgstr "所有2D形状的基类。"
+msgstr "所有 2D 形状的基类。"
#: doc/classes/Shape2D.xml
msgid "Base class for all 2D shapes. All 2D shape types inherit from this."
-msgstr "所有2D形状的基类。所有的2D形状类型都继承于此。"
+msgstr "所有 2D 形状的基类。所有的 2D 形状类型都继承于此。"
#: doc/classes/Shape2D.xml
msgid ""
@@ -68463,7 +69722,7 @@ msgstr ""
#: doc/classes/ShortCut.xml
msgid "If [code]true[/code], this shortcut is valid."
-msgstr "如果 [code]true[/code]ï¼Œåˆ™æ­¤å¿«æ·æ–¹å¼æœ‰æ•ˆã€‚"
+msgstr "如果为 [code]true[/code]ï¼Œåˆ™æ­¤å¿«æ·æ–¹å¼æœ‰æ•ˆã€‚"
#: doc/classes/ShortCut.xml
msgid ""
@@ -68489,8 +69748,8 @@ msgid ""
"with respect to skeleton, so it not the actual global/world transform of the "
"bone."
msgstr ""
-"骨架为管ç†éª¨éª¼æä¾›äº†åˆ†å±‚的界é¢ï¼ŒåŒ…æ‹¬å§¿åŠ¿ã€æ”¾æ¾å’ŒåŠ¨ç”»ï¼ˆè¯·å‚阅 [Animation])。"
-"它还å¯ä»¥ä½¿ç”¨å¸ƒå¨ƒå¨ƒç‰©ç†ã€‚\n"
+"骨架为管ç†éª¨éª¼æä¾›äº†åˆ†å±‚的界é¢ï¼ŒåŒ…æ‹¬å§¿åŠ¿ã€æ”¾æ¾å’ŒåŠ¨ç”»ï¼ˆè§ [Animation])。它还"
+"å¯ä»¥ä½¿ç”¨å¸ƒå¨ƒå¨ƒç‰©ç†ã€‚\n"
"éª¨éª¼ç›¸å¯¹äºŽéª¨æž¶çš„æ•´ä½“å˜æ¢æ˜¯ç”±ä»¥ä¸‹å±‚次顺åºå†³å®šçš„:放æ¾å§¿åŠ¿ã€è‡ªå®šä¹‰å§¿åŠ¿å’Œå§¿"
"势。\n"
"注æ„,下é¢çš„â€œå…¨å±€å§¿åŠ¿â€æ˜¯æŒ‡éª¨éª¼ç›¸å¯¹äºŽéª¨æž¶çš„æ•´ä½“å˜æ¢ï¼Œæ‰€ä»¥å®ƒä¸æ˜¯éª¨éª¼çš„实际全局"
@@ -68501,7 +69760,7 @@ msgid ""
"Adds a bone, with name [code]name[/code]. [method get_bone_count] will "
"become the bone index."
msgstr ""
-"添加一个骨骼,å称为 [code]name[/code]。 [method get_bone_count] å°†æˆä¸ºéª¨éª¼ç´¢"
+"添加一个骨骼,å称为 [code]name[/code]。[method get_bone_count] å°†æˆä¸ºéª¨éª¼ç´¢"
"引。"
#: doc/classes/Skeleton.xml
@@ -68555,9 +69814,9 @@ msgid ""
"[b]Note:[/b] The parent bone returned will always be less than "
"[code]bone_idx[/code]."
msgstr ""
-"返回在[code]bone_idx[/code]处的骨骼的父级索引。如果是-1,那么骨骼就没有父骨"
-"骼。\n"
-"[b]注æ„:[/b]返回的父骨骼将总是å°äºŽ[code]bone_idx[/code]。"
+"返回在 [code]bone_idx[/code] 处的骨骼的父级索引。如果是 -1,那么骨骼就没有父"
+"骨骼。\n"
+"[b]注æ„:[/b]返回的父骨骼将总是å°äºŽ [code]bone_idx[/code]。"
#: doc/classes/Skeleton.xml
msgid ""
@@ -68587,7 +69846,7 @@ msgstr "设置骨骼 [code]bone_idx[/code] çš„å§¿åŠ¿å˜æ¢ã€‚"
#: doc/classes/Skeleton.xml
msgid "Sets the rest transform for bone [code]bone_idx[/code]."
-msgstr "为骨骼[code]bone_idx[/code]设置休æ¯å˜æ¢ã€‚"
+msgstr "为骨骼 [code]bone_idx[/code] 设置休æ¯å˜æ¢ã€‚"
#: doc/classes/Skeleton2D.xml
msgid "Skeleton for 2D characters and animated objects."
@@ -68740,7 +69999,7 @@ 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] 的值将完全覆盖所有骨架骨"
+"IK 效果应用于当å‰éª¨æž¶éª¨éª¼é“¾çš„æ’å€¼ã€‚[code]1.0[/code] 的值将完全覆盖所有骨架骨"
"éª¼å˜æ¢ï¼Œè€Œ [code]0.0[/code] 的值将在视觉上ç¦ç”¨ SkeletonIK。等于或低于 "
"[code]0.01[/code] 的值也调用 [method Skeleton."
"clear_bones_global_pose_override]。"
@@ -68776,12 +70035,12 @@ 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 "
+"如果为 [code]true[/code],则用 [member target](或者如果定义了 [member "
"target_node]])的旋转覆盖尖端骨骼的旋转。"
#: doc/classes/SkeletonIK.xml
msgid "The name of the current root bone, the first bone in the IK chain."
-msgstr "当剿 ¹éª¨çš„å称,å³IK链中的第一个骨。"
+msgstr "当å‰çš„æ ¹éª¨éª¼çš„åç§°ï¼Œå³ IK 链中的第一æ¡éª¨éª¼ã€‚"
#: doc/classes/SkeletonIK.xml
msgid ""
@@ -68799,8 +70058,8 @@ 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]属性。"
+"IK 链的目标节点 [NodePath]。如果有的è¯ï¼Œå°†ä½¿ç”¨èŠ‚ç‚¹å½“å‰çš„ [Transform]ï¼Œè€Œä¸æ˜¯ "
+"[member target] 属性。"
#: doc/classes/SkeletonIK.xml
msgid ""
@@ -68816,8 +70075,8 @@ 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链的弯曲。"
+"如果为 [code]true[/code],指示 IK 求解器在解算器链时考虑次è¦ç£é“目标(æžç‚¹ç›®"
+"标)。使用ç£é“ä½ç½®ï¼ˆç£æžç›®æ ‡ï¼‰æ¥æŽ§åˆ¶ IK 链的弯曲。"
#: doc/classes/Sky.xml
msgid "The base class for [PanoramaSky] and [ProceduralSky]."
@@ -68869,8 +70128,8 @@ msgid ""
"as it is known to cause GPU hangs on certain systems."
msgstr ""
"è¾å°„纹ç†å°ºå¯¸ä¸º1024×1024åƒç´ ã€‚\n"
-"[b]注æ„:[/b][constant RADIANCE_SIZE_1024]在检查器中没有公开,因为它在æŸäº›ç³»"
-"统上会导致GPU挂起。"
+"[b]注æ„:[/b][constant RADIANCE_SIZE_1024] 在检查器中没有公开,因为它在æŸäº›ç³»"
+"统上会导致 GPU 挂起。"
#: doc/classes/Sky.xml
msgid ""
@@ -68879,12 +70138,12 @@ msgid ""
"as it is known to cause GPU hangs on certain systems."
msgstr ""
"è¾å°„纹ç†å°ºå¯¸ä¸º2048×2048åƒç´ ã€‚\n"
-"[b]注æ„:[/b][constant RADIANCE_SIZE_2048]没有在检查器中公开,因为它在æŸäº›ç³»"
-"统上会导致GPU挂起。"
+"[b]注æ„:[/b][constant RADIANCE_SIZE_2048] 没有在检查器中公开,因为它在æŸäº›ç³»"
+"统上会导致 GPU 挂起。"
#: doc/classes/Sky.xml
msgid "Represents the size of the [enum RadianceSize] enum."
-msgstr "代表[enum RadianceSize]枚举的大å°ã€‚"
+msgstr "代表 [enum RadianceSize] 枚举的大å°ã€‚"
#: doc/classes/Slider.xml
msgid "Base class for GUI sliders."
@@ -68943,7 +70202,7 @@ msgstr "3D 中,两个 PhysicsBody 之间的滑动æ¡ã€‚"
#: doc/classes/SliderJoint.xml
msgid ""
"Slides across the X axis of the pivot object. See also [Generic6DOFJoint]."
-msgstr "在轴心对象的 X 轴上滑动。å‚阅 [Generic6DOFJoint]。"
+msgstr "在轴心对象的 X 轴上滑动。å¦è¯·å‚阅 [Generic6DOFJoint]。"
#: doc/classes/SliderJoint.xml
msgid ""
@@ -68985,8 +70244,8 @@ msgid ""
"linear_limit/lower_distance] and [member linear_limit/upper_distance] is "
"surpassed."
msgstr ""
-"一旦超过[member linear_limit/lower_distance]和[member linear_limit/"
-"upper_distance]所定义的æžé™ï¼Œå°±ä¼šäº§ç”Ÿçš„阻尼é‡ã€‚"
+"一旦超过 [member linear_limit/lower_distance] 和 [member linear_limit/"
+"upper_distance] 所定义的æžé™ï¼Œå°±ä¼šäº§ç”Ÿçš„阻尼é‡ã€‚"
#: doc/classes/SliderJoint.xml
msgid ""
@@ -69069,7 +70328,7 @@ 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] æ—¶ [SoftBody] ä¼šè¿›è¡Œç‰©ç†æ¨¡æ‹Ÿã€‚å¯ä»¥é€šè¿‡è®¾ç½®ä¸º "
+"为 [code]true[/code] 时该 [SoftBody] ä¼šè¿›è¡Œç‰©ç†æ¨¡æ‹Ÿã€‚å¯ä»¥é€šè¿‡è®¾ç½®ä¸º "
"[code]false[/code] æ¥æš‚åœç‰©ç†æ¨¡æ‹Ÿã€‚"
#: doc/classes/SoftBody.xml
@@ -69252,15 +70511,15 @@ msgstr ""
msgid ""
"Rotates the local transformation around axis, a unit [Vector3], by specified "
"angle in radians."
-msgstr "围绕轴(一个å•ä½[Vector3]ï¼‰æ—‹è½¬å±€éƒ¨å˜æ¢ï¼ŒæŒ‡å®šè§’度(弧度)。"
+msgstr "围绕轴(å•ä½ [Vector3]ï¼‰æ—‹è½¬å±€éƒ¨å˜æ¢ï¼ŒæŒ‡å®šè§’度(弧度)。"
#: doc/classes/Spatial.xml
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 ""
-"围绕轴(一个å•ä½[Vector3]ï¼‰æ—‹è½¬æœ¬åœ°å˜æ¢ï¼ŒæŒ‡å®šè§’度(弧度)。旋转轴是在物体的本"
-"åœ°åæ ‡ç³»ä¸­ã€‚"
+"围绕轴(å•ä½ [Vector3]ï¼‰æ—‹è½¬æœ¬åœ°å˜æ¢ï¼ŒæŒ‡å®šè§’度(弧度)。旋转轴是在物体的本地"
+"åæ ‡ç³»ä¸­ã€‚"
#: doc/classes/Spatial.xml
msgid "Rotates the local transformation around the X axis by angle in radians."
@@ -69292,8 +70551,8 @@ msgid ""
"transformation scale. Changes to the local transformation scale are "
"preserved."
msgstr ""
-"设置节点是å¦ä½¿ç”¨[code](1, 1, 1)[/code]çš„æ¯”ä¾‹æˆ–å…¶æœ¬åœ°å˜æ¢æ¯”ä¾‹ã€‚å¯¹æœ¬åœ°å˜æ¢æ¯”例"
-"的改å˜ä¼šè¢«ä¿ç•™ä¸‹æ¥ã€‚"
+"设置节点是å¦ä½¿ç”¨ [code](1, 1, 1)[/code] çš„æ¯”ä¾‹æˆ–å…¶æœ¬åœ°å˜æ¢æ¯”ä¾‹ã€‚å¯¹æœ¬åœ°å˜æ¢æ¯”"
+"例的改å˜ä¼šè¢«ä¿ç•™ä¸‹æ¥ã€‚"
#: doc/classes/Spatial.xml
msgid ""
@@ -69312,7 +70571,7 @@ msgid ""
"Sets whether the node notifies about its local transformation changes. "
"[Spatial] will not propagate this by default."
msgstr ""
-"设置节点是å¦é€šçŸ¥å®ƒçš„å±€éƒ¨å˜æ¢å˜åŒ–。默认情况下,[Spatial]ä¸ä¼šä¼ æ’­è¿™ä¸€ç‚¹ã€‚"
+"设置节点是å¦é€šçŸ¥å®ƒçš„å±€éƒ¨å˜æ¢å˜åŒ–。默认情况下,[Spatial] ä¸ä¼šä¼ æ’­è¿™ä¸€ç‚¹ã€‚"
#: doc/classes/Spatial.xml
msgid ""
@@ -69320,26 +70579,26 @@ msgid ""
"changes. [Spatial] will not propagate this by default, unless it is in the "
"editor context and it has a valid gizmo."
msgstr ""
-"设置节点是å¦é€šçŸ¥å…¶å…¨å±€å’Œå±€éƒ¨å˜æ¢çš„å˜åŒ–。[Spatial]默认情况下ä¸ä¼šä¼ æ’­ï¼Œé™¤éžæ˜¯åœ¨"
-"编辑器上下文中,并且它有一个有效的gizmo。"
+"设置节点是å¦é€šçŸ¥å…¶å…¨å±€å’Œå±€éƒ¨å˜æ¢çš„å˜åŒ–。[Spatial] 默认情况下ä¸ä¼šä¼ æ’­ï¼Œé™¤éžæ˜¯"
+"在编辑器上下文中,并且它有一个有效的控制器。"
#: doc/classes/Spatial.xml
msgid ""
"Enables rendering of this node. Changes [member visible] to [code]true[/"
"code]."
-msgstr "å¯ç”¨æ­¤èŠ‚ç‚¹çš„å‘ˆçŽ°ã€‚å°†[member visible]更改为 [code]true[/code]。"
+msgstr "å¯ç”¨æ­¤èŠ‚ç‚¹çš„å‘ˆçŽ°ã€‚å°† [member visible] 更改为 [code]true[/code]。"
#: doc/classes/Spatial.xml
msgid ""
"Transforms [code]local_point[/code] from this node's local space to world "
"space."
-msgstr "å°†[code]local_point[/code]从该节点的本地空间转æ¢ä¸ºä¸–界空间。"
+msgstr "å°† [code]local_point[/code] 从该节点的本地空间转æ¢ä¸ºä¸–界空间。"
#: doc/classes/Spatial.xml
msgid ""
"Transforms [code]global_point[/code] from world space to this node's local "
"space."
-msgstr "å°†[code]global_point[/code]从世界空间转æ¢åˆ°è¿™ä¸ªèŠ‚ç‚¹çš„æœ¬åœ°ç©ºé—´ã€‚"
+msgstr "å°† [code]global_point[/code] 从世界空间转æ¢åˆ°è¿™ä¸ªèŠ‚ç‚¹çš„æœ¬åœ°ç©ºé—´ã€‚"
#: doc/classes/Spatial.xml
msgid ""
@@ -69349,15 +70608,15 @@ msgid ""
"offset of [code](2, 0, 0)[/code] would actually add 20 ([code]2 * 10[/code]) "
"to the X coordinate."
msgstr ""
-"通过给定的åç§»é‡[Vector3]改å˜èŠ‚ç‚¹çš„ä½ç½®ã€‚\n"
-"注æ„,平移[code]offset[/code]å—节点比例因å­(scale)的影å“,所以如果按例如"
-"[code](10,1,1)[/code]进行缩放,平移[code](2,0,0)[/code]实际上会在Xåæ ‡ä¸Šå¢žåŠ "
+"通过给定的åç§»é‡ [Vector3] 改å˜èŠ‚ç‚¹çš„ä½ç½®ã€‚\n"
+"注æ„,平移 [code]offset[/code] å—节点缩放的影å“,所以如果按例如 [code]"
+"(10,1,1)[/code] 进行缩放,平移 [code](2,0,0)[/code] 实际上会在 X åæ ‡ä¸Šå¢žåŠ  "
"20 ([code]2 * 10[/code])。"
#: doc/classes/Spatial.xml
msgid ""
"Changes the node's position by the given offset [Vector3] in local space."
-msgstr "通过给定的åç§»é‡[Vector3]改å˜èŠ‚ç‚¹åœ¨å±€éƒ¨ç©ºé—´ä¸­çš„ä½ç½®ã€‚"
+msgstr "通过给定的åç§»é‡ [Vector3] 改å˜èŠ‚ç‚¹åœ¨å±€éƒ¨ç©ºé—´ä¸­çš„ä½ç½®ã€‚"
#: doc/classes/Spatial.xml
msgid "Updates the [SpatialGizmo] of this node."
@@ -69387,25 +70646,34 @@ msgid ""
"point numbers. Therefore, applying affine operations on the rotation "
"\"vector\" is not meaningful."
msgstr ""
-"å±€éƒ¨å˜æ¢çš„æ—‹è½¬éƒ¨åˆ†ä»¥å¼§åº¦è¡¨ç¤ºï¼Œä»¥YXZ-Euler角的形å¼è¡¨ç¤º(Xè§’ã€Yè§’ã€Zè§’)。\n"
-"[b]注:[/b]在数学æ„ä¹‰ä¸Šï¼Œæ—‹è½¬æ˜¯ä¸€ä¸ªçŸ©é˜µè€Œä¸æ˜¯ä¸€ä¸ªå‘é‡ã€‚这三个欧拉角是旋转矩阵"
-"æ¬§æ‹‰è§’å‚æ•°åŒ–çš„ä¸‰ä¸ªç‹¬ç«‹å‚æ•°ï¼Œå­˜å‚¨åœ¨[Vector3]æ•°æ®ç»“æž„ä¸­å¹¶ä¸æ˜¯å› ä¸ºæ—‹è½¬æ˜¯ä¸€ä¸ªçŸ¢"
-"é‡ï¼Œè€Œæ˜¯å› ä¸º[Vector3]æ˜¯ä¸€ç§æ–¹ä¾¿å­˜å‚¨3个浮点数的数æ®ç»“构。因此,对旋转“å‘é‡â€åº”"
-"用仿射æ“作是没有æ„义的。"
+"å±€éƒ¨å˜æ¢çš„æ—‹è½¬éƒ¨åˆ†ä»¥å¼§åº¦è¡¨ç¤ºï¼Œä»¥ YXZ-Euler 角的形å¼è¡¨ç¤ºï¼ˆX è§’ã€Y è§’ã€Z "
+"角)。\n"
+"[b]注æ„:[/b]在数学æ„ä¹‰ä¸Šï¼Œæ—‹è½¬æ˜¯ä¸€ä¸ªçŸ©é˜µè€Œä¸æ˜¯ä¸€ä¸ªå‘é‡ã€‚这三个欧拉角是旋转矩"
+"é˜µæ¬§æ‹‰è§’å‚æ•°åŒ–çš„ä¸‰ä¸ªç‹¬ç«‹å‚æ•°ï¼Œå­˜å‚¨åœ¨ [Vector3] æ•°æ®ç»“æž„ä¸­å¹¶ä¸æ˜¯å› ä¸ºæ—‹è½¬æ˜¯ä¸€ä¸ª"
+"矢é‡ï¼Œè€Œæ˜¯å› ä¸º [Vector3] æ˜¯ä¸€ç§æ–¹ä¾¿å­˜å‚¨ 3 个浮点数的数æ®ç»“构。因此,对旋转“å‘"
+"é‡â€åº”用仿射æ“作是没有æ„义的。"
#: doc/classes/Spatial.xml
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 "æ—‹è½¬éƒ¨åˆ†å±€éƒ¨å˜æ¢ä¸ºåº¦ï¼ŒæŒ‰YXZ-Eulerè§’æ ¼å¼æŒ‡å®š(Xè§’ã€Yè§’ã€Zè§’)。"
+msgstr "æ—‹è½¬éƒ¨åˆ†å±€éƒ¨å˜æ¢ä¸ºåº¦ï¼ŒæŒ‰ YXZ-Euler è§’æ ¼å¼æŒ‡å®šï¼ˆX è§’ã€Y è§’ã€Z 角)。"
#: doc/classes/Spatial.xml
-msgid "Scale part of the local transformation."
-msgstr "å±€éƒ¨å˜æ¢çš„缩放部分。"
+msgid ""
+"Scale part of the local transformation.\n"
+"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, the scale values will either be all "
+"positive or all negative."
+msgstr ""
+"æœ¬åœ°å˜æ¢ä¸­çš„缩放。\n"
+"[b]注æ„:[/b]3D ä¸­ï¼Œå˜æ¢çŸ©é˜µæ˜¯æ— æ³•分解出正负混åˆçš„缩放的。由于 Godot 中使用å˜"
+"æ¢çŸ©é˜µæ¥è¡¨ç¤ºç¼©æ”¾ï¼Œå¾—到的缩放值è¦ä¹ˆå…¨æ­£ã€è¦ä¹ˆå…¨è´Ÿã€‚"
#: doc/classes/Spatial.xml
msgid "Local space [Transform] of this node, with respect to the parent node."
-msgstr "该节点相对于父节点的局部空间[Transform]。"
+msgstr "该节点相对于父节点的局部空间 [Transform]。"
#: doc/classes/Spatial.xml
msgid "Local translation of this node."
@@ -69417,8 +70685,8 @@ msgid ""
"its antecedents are visible as well (in other words, [method "
"is_visible_in_tree] must return [code]true[/code])."
msgstr ""
-"如果[code]true[/code],这个节点就会被画出æ¥ã€‚åªæœ‰å½“它的所有å‰é¡¹ä¹Ÿæ˜¯å¯è§çš„æ—¶"
-"å€™ï¼Œè¿™ä¸ªèŠ‚ç‚¹æ‰æ˜¯å¯è§çš„(æ¢å¥è¯è¯´ï¼Œ[method is_visible_in_tree]必须返回 "
+"如果为 [code]true[/code],这个节点就会被画出æ¥ã€‚åªæœ‰å½“它的所有å‰é¡¹ä¹Ÿæ˜¯å¯è§çš„"
+"æ—¶å€™ï¼Œè¿™ä¸ªèŠ‚ç‚¹æ‰æ˜¯å¯è§çš„(æ¢å¥è¯è¯´ï¼Œ[method is_visible_in_tree] 必须返回 "
"[code]true[/code])。"
#: doc/classes/Spatial.xml
@@ -69517,7 +70785,7 @@ msgid ""
"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]。 [SpatialMaterial]s 中å¯"
+"如果为 [code]true[/code],则å¯ç”¨æŒ‡å®šçš„ [enum Feature]。[SpatialMaterial] 中å¯"
"用的许多功能需è¦åœ¨ä½¿ç”¨å‰å¯ç”¨ã€‚è¿™æ ·ï¼Œåªæœ‰åœ¨æŒ‡å®šæ—¶æ‰ä¼šäº§ç”Ÿä½¿ç”¨è¯¥åŠŸèƒ½çš„æˆæœ¬ã€‚也"
"å¯ä»¥é€šè¿‡å°†ç›¸åº”çš„æˆå‘˜è®¾ç½®ä¸º [code]true[/code] æ¥å¯ç”¨åŠŸèƒ½ã€‚"
@@ -69609,8 +70877,8 @@ msgid ""
"If [code]true[/code], ambient occlusion is enabled. Ambient occlusion "
"darkens areas based on the [member ao_texture]."
msgstr ""
-"如果 [code]true[/code],å¯ç”¨çŽ¯å¢ƒé®æŒ¡ã€‚çŽ¯å¢ƒé®æŒ¡æ ¹æ® [member ao_texture] 使区域"
-"å˜æš—。"
+"如果为 [code]true[/code],å¯ç”¨çŽ¯å¢ƒé®æŒ¡ã€‚çŽ¯å¢ƒé®æŒ¡æ ¹æ® [member ao_texture] 使区"
+"åŸŸå˜æš—。"
#: doc/classes/SpatialMaterial.xml
msgid ""
@@ -69629,8 +70897,8 @@ msgid ""
"If [code]true[/code], use [code]UV2[/code] coordinates to look up from the "
"[member ao_texture]."
msgstr ""
-"如果 [code]true[/code],请使用 [code]UV2[/code] åæ ‡ä»Ž[member ao_texture]中查"
-"找。"
+"如果为 [code]true[/code],请使用 [code]UV2[/code] åæ ‡ä»Ž [member ao_texture] "
+"中查找。"
#: doc/classes/SpatialMaterial.xml
msgid ""
@@ -69677,9 +70945,9 @@ 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],则å¯ç”¨æ¸…æ¼†æ¸²æŸ“ã€‚åœ¨ç…§æ˜Žè®¡ç®—ä¸­æ·»åŠ äºŒçº§é€æ˜Žé€šè·¯ï¼Œä»Žè€Œå¯¼"
-"致添加镜é¢å射斑点。这使得æè´¨çœ‹èµ·æ¥å¥½åƒæœ‰ä¸€å±‚逿˜Žå±‚,å¯ä»¥æ˜¯æœ‰å…‰æ³½çš„也å¯ä»¥æ˜¯"
-"粗糙的。\n"
+"如果为 [code]true[/code],则å¯ç”¨æ¸…æ¼†æ¸²æŸ“ã€‚åœ¨ç…§æ˜Žè®¡ç®—ä¸­æ·»åŠ äºŒçº§é€æ˜Žé€šè·¯ï¼Œä»Žè€Œ"
+"导致添加镜é¢å射斑点。这使得æè´¨çœ‹èµ·æ¥å¥½åƒæœ‰ä¸€å±‚逿˜Žå±‚,å¯ä»¥æ˜¯æœ‰å…‰æ³½çš„也å¯ä»¥"
+"是粗糙的。\n"
"[b]注æ„:[/b]如果æè´¨å°† [member flags_unshaded] 设置为 [code]true[/code],则"
"逿˜Žæ¶‚层渲染ä¸å¯è§ã€‚"
@@ -69706,8 +70974,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],ç€è‰²å™¨å°†åœ¨æ²¿è§†å›¾å°„çº¿çš„å¤šä¸ªç‚¹ä¸Šè¯»å–æ·±åº¦çº¹ç†ä»¥ç¡®å®šé®æŒ¡"
-"和视差。这å¯èƒ½å¯¹æ€§èƒ½è¦æ±‚很高,但会产生更逼真的深度映射。"
+"如果为 [code]true[/code],ç€è‰²å™¨å°†åœ¨æ²¿è§†å›¾å°„çº¿çš„å¤šä¸ªç‚¹ä¸Šè¯»å–æ·±åº¦çº¹ç†ä»¥ç¡®å®šé®"
+"挡和视差。这å¯èƒ½å¯¹æ€§èƒ½è¦æ±‚很高,但会产生更逼真的深度映射。"
#: doc/classes/SpatialMaterial.xml
msgid ""
@@ -69717,8 +70985,8 @@ 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"
+"如果为 [code]true[/code],则å¯ç”¨æ·±åº¦æ˜ å°„ï¼ˆä¹Ÿç§°ä¸ºâ€œè§†å·®æ˜ å°„â€æˆ–“高度映射â€ï¼‰ã€‚å¦"
+"è§ [member normal_enabled]。\n"
"[b]注æ„:[/b]如果在åŒä¸€æè´¨ä¸Šä½¿ç”¨ä¸‰å¹³é¢è´´å›¾ï¼Œåˆ™ä¸æ”¯æŒæ·±åº¦è´´å›¾ã€‚如果å¯ç”¨ "
"[member uv1_triplanar],则 [member depth_enabled] 的值将被忽略。"
@@ -69728,8 +70996,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],则在深度效果中使用之å‰ä¼šç¿»è½¬å‰¯æ³•线的方å‘。如果你对你"
-"çš„å‰¯æ³•çº¿çš„ç¼–ç æ–¹å¼ä¸Žæ·±åº¦æ•ˆæžœæœ‰å†²çªï¼Œè¿™å¯èƒ½æ˜¯å¿…è¦çš„。"
+"如果为 [code]true[/code],则在深度效果中使用之å‰ä¼šç¿»è½¬å‰¯æ³•线的方å‘。如果你对"
+"ä½ çš„å‰¯æ³•çº¿çš„ç¼–ç æ–¹å¼ä¸Žæ·±åº¦æ•ˆæžœæœ‰å†²çªï¼Œè¿™å¯èƒ½æ˜¯å¿…è¦çš„。"
#: doc/classes/SpatialMaterial.xml
msgid ""
@@ -69737,8 +71005,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],切线方å‘在深度效果中使用å‰ä¼šç¿»è½¬ã€‚如果你对切线的编ç "
-"æ–¹å¼ä¸Žæ·±åº¦æ•ˆæžœæœ‰å†²çªï¼Œè¿™å¯èƒ½æ˜¯å¿…è¦çš„。"
+"如果为 [code]true[/code],切线方å‘在深度效果中使用å‰ä¼šç¿»è½¬ã€‚如果你对切线的编"
+"ç æ–¹å¼ä¸Žæ·±åº¦æ•ˆæžœæœ‰å†²çªï¼Œè¿™å¯èƒ½æ˜¯å¿…è¦çš„。"
#: doc/classes/SpatialMaterial.xml
msgid ""
@@ -69789,9 +71057,9 @@ msgid ""
"detail_mask]. This can be used to add variation to objects, or to blend "
"between two different albedo/normal textures."
msgstr ""
-"如果[code]true[/code],å¯ç”¨ç»†èŠ‚å åŠ ã€‚Detail是基于[member detail_mask]在对象表"
-"颿··åˆçš„第二个纹ç†ã€‚è¿™å¯ä»¥ç”¨æ¥ç»™ç‰©ä½“增加å˜åŒ–,或者在两ç§ä¸åŒçš„å射率/法线纹ç†"
-"之间进行混åˆã€‚"
+"如果为 [code]true[/code],å¯ç”¨ç»†èŠ‚å åŠ ã€‚Detail是基于[member detail_mask]在对"
+"è±¡è¡¨é¢æ··åˆçš„第二个纹ç†ã€‚è¿™å¯ä»¥ç”¨æ¥ç»™ç‰©ä½“增加å˜åŒ–,或者在两ç§ä¸åŒçš„å射率/法线"
+"纹ç†ä¹‹é—´è¿›è¡Œæ··åˆã€‚"
#: doc/classes/SpatialMaterial.xml
msgid ""
@@ -69818,7 +71086,7 @@ msgid ""
"Specifies whether to use [code]UV[/code] or [code]UV2[/code] for the detail "
"layer. See [enum DetailUV] for options."
msgstr ""
-"指定细节层是使用[code]UV[/code]还是[code]UV2[/code]。选项请å‚阅[enum "
+"指定细节层是使用 [code]UV[/code] 还是 [code]UV2[/code]。选项请å‚阅 [enum "
"DetailUV]。"
#: doc/classes/SpatialMaterial.xml
@@ -69856,11 +71124,11 @@ msgstr ""
msgid ""
"Specifies which type of fade to use. Can be any of the [enum "
"DistanceFadeMode]s."
-msgstr "指定è¦ä½¿ç”¨çš„æ·¡å…¥æ·¡å‡ºç±»åž‹ã€‚å¯ä»¥æ˜¯ä»»ä½•一个[enum DistanceFadeMode]。"
+msgstr "指定è¦ä½¿ç”¨çš„æ·¡å…¥æ·¡å‡ºç±»åž‹ã€‚å¯ä»¥æ˜¯ä»»ä½•一个 [enum DistanceFadeMode]。"
#: doc/classes/SpatialMaterial.xml
msgid "The emitted light's color. See [member emission_enabled]."
-msgstr "å‘出的光的颜色。å‚阅[member emission_enabled]。"
+msgstr "å‘出的光的颜色。å‚阅 [member emission_enabled]。"
#: doc/classes/SpatialMaterial.xml
msgid ""
@@ -69869,25 +71137,25 @@ msgid ""
"[GIProbe] or [BakedLightmap] is used and this object is used in baked "
"lighting."
msgstr ""
-"如果 [code]true[/code],物体会å‘光。å‘å…‰ä½¿ç‰©ä½“çœ‹èµ·æ¥æ›´äº®ã€‚如果使用 [GIProbe] "
-"或 [BakedLightmap] 并且此对象用于烘焙照明,则该对象还å¯ä»¥å°†å…‰æŠ•射到其他对象"
-"上。"
+"如果为 [code]true[/code],物体会å‘光。å‘å…‰ä½¿ç‰©ä½“çœ‹èµ·æ¥æ›´äº®ã€‚如果使用 "
+"[GIProbe] 或 [BakedLightmap] 并且此对象用于烘焙照明,则该对象还å¯ä»¥å°†å…‰æŠ•射到"
+"其他对象上。"
#: doc/classes/SpatialMaterial.xml
msgid "The emitted light's strength. See [member emission_enabled]."
-msgstr "å‘出的光的强度。å‚阅[member emission_enabled]。"
+msgstr "å‘å‡ºçš„å…‰çš„å¼ºåº¦ã€‚è§ [member emission_enabled]。"
#: doc/classes/SpatialMaterial.xml
msgid "Use [code]UV2[/code] to read from the [member emission_texture]."
-msgstr "使用[code]UV2[/code]从[member emission_texture]中读å–。"
+msgstr "使用 [code]UV2[/code] 从 [member emission_texture] 中读å–。"
#: doc/classes/SpatialMaterial.xml
msgid ""
"Sets how [member emission] interacts with [member emission_texture]. Can "
"either add or multiply. See [enum EmissionOperator] for options."
msgstr ""
-"设置[member emission]与[member emission_texture]的交互方å¼ã€‚å¯ä»¥æ˜¯åŠ æ³•æˆ–ä¹˜"
-"法。选项å‚阅 [enum EmissionOperator] 。"
+"设置 [member emission] 与 [member emission_texture] 的交互方å¼ã€‚å¯ä»¥æ˜¯åŠ æ³•æˆ–"
+"乘法。å¯é€‰å€¼è§ [enum EmissionOperator] 。"
#: doc/classes/SpatialMaterial.xml
msgid "Texture that specifies how much surface emits light at a given point."
@@ -69905,13 +71173,13 @@ msgstr "å¯ç”¨æœ‰ç¬¦å·è·ç¦»åœºæ¸²æŸ“ç€è‰²å™¨ã€‚"
#: doc/classes/SpatialMaterial.xml
msgid "If [code]true[/code], the object receives no ambient light."
-msgstr "如果[code]true[/code]ï¼Œåˆ™å¯¹è±¡ä¸æŽ¥æ”¶çŽ¯å¢ƒå…‰ã€‚"
+msgstr "如果为 [code]true[/code]ï¼Œåˆ™å¯¹è±¡ä¸æŽ¥æ”¶çŽ¯å¢ƒå…‰ã€‚"
#: doc/classes/SpatialMaterial.xml
msgid ""
"If [code]true[/code], the object receives no shadow that would otherwise be "
"cast onto it."
-msgstr "如果[code]true[/code],则对象ä¸ä¼šæ”¶åˆ°æŠ•射到其上的阴影。"
+msgstr "如果为 [code]true[/code],则对象ä¸ä¼šæ”¶åˆ°æŠ•射到其上的阴影。"
#: doc/classes/SpatialMaterial.xml
msgid ""
@@ -69919,25 +71187,26 @@ msgid ""
"the normal stays correct when using a non-uniform scale. Only enable if "
"using non-uniform scaling."
msgstr ""
-"如果 [code]true[/code],ç€è‰²å™¨å°†è®¡ç®—é¢å¤–çš„æ“作,以确ä¿åœ¨ä½¿ç”¨éžå‡åŒ€æ¯”例时法线"
-"ä¿æŒæ­£ç¡®ã€‚仅在使用éžå‡åŒ€ç¼©æ”¾æ—¶å¯ç”¨ã€‚"
+"如果为 [code]true[/code],ç€è‰²å™¨å°†è®¡ç®—é¢å¤–çš„æ“作,以确ä¿åœ¨ä½¿ç”¨éžå‡åŒ€æ¯”例时法"
+"çº¿ä¿æŒæ­£ç¡®ã€‚仅在使用éžå‡åŒ€ç¼©æ”¾æ—¶å¯ç”¨ã€‚"
#: doc/classes/SpatialMaterial.xml
msgid ""
"If [code]true[/code], the object is rendered at the same size regardless of "
"distance."
-msgstr "如果[code]true[/code],则无论è·ç¦»è¿œè¿‘,对象都以相åŒçš„尺寸呈现。"
+msgstr "如果为 [code]true[/code],则无论è·ç¦»è¿œè¿‘,对象都以相åŒçš„尺寸呈现。"
#: doc/classes/SpatialMaterial.xml
msgid ""
"If [code]true[/code], transparency is enabled on the body. See also [member "
"params_blend_mode]."
msgstr ""
-"如果[code]true[/code],则å¯ç”¨ç‰©ä½“çš„é€æ˜Žåº¦ã€‚å‚阅 [member params_blend_mode]。"
+"如果为 [code]true[/code],则å¯ç”¨ç‰©ä½“çš„é€æ˜Žåº¦ã€‚å‚阅 [member "
+"params_blend_mode]。"
#: doc/classes/SpatialMaterial.xml
msgid "If [code]true[/code], the object is unaffected by lighting."
-msgstr "如果 [code]true[/code],则物体ä¸å—光照影å“。"
+msgstr "如果为 [code]true[/code],则物体ä¸å—光照影å“。"
#: doc/classes/SpatialMaterial.xml
msgid ""
@@ -69945,8 +71214,8 @@ msgid ""
"[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 "
+"如果为 [code]true[/code],则å¯ä»¥æ”¹å˜æ¸²æŸ“点的大å°ã€‚\n"
+"[b]注æ„:[/b]è¿™åªå¯¹å‡ ä½•ä½“æ˜¯åŸºäºŽç‚¹è€Œä¸æ˜¯åŸºäºŽä¸‰è§’å½¢çš„å¯¹è±¡æœ‰æ•ˆã€‚è§ [member "
"params_point_size]。"
#: doc/classes/SpatialMaterial.xml
@@ -69956,8 +71225,8 @@ msgid ""
"areas are transparent. Useful for overlaying shadows onto a camera feed in "
"AR."
msgstr ""
-"如果 [code]true[/code],å¯ç”¨ \"阴影到ä¸é€æ˜Žåº¦ \"的渲染模å¼ï¼Œåœ¨è¯¥æ¨¡å¼ä¸‹ï¼Œå…‰ç…§"
-"会修改 alpha,使阴影区域ä¸é€æ˜Žï¼Œéžé˜´å½±åŒºåŸŸé€æ˜Žã€‚对于在AR中把阴影å åŠ åˆ°ç›¸æœºç”»"
+"如果为 [code]true[/code],å¯ç”¨â€œé˜´å½±åˆ°ä¸é€æ˜Žåº¦â€çš„æ¸²æŸ“模å¼ï¼Œåœ¨è¯¥æ¨¡å¼ä¸‹ï¼Œå…‰ç…§ä¼š"
+"修改 Alpha,使阴影区域ä¸é€æ˜Žï¼Œéžé˜´å½±åŒºåŸŸé€æ˜Žã€‚对于在 AR 中把阴影å åŠ åˆ°ç›¸æœºç”»"
"é¢ä¸Šå¾ˆæœ‰ç”¨ã€‚"
#: doc/classes/SpatialMaterial.xml
@@ -69996,8 +71265,8 @@ 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]ï¼Œåˆ™åœ¨ä¸–ç•Œç©ºé—´è€Œä¸æ˜¯ç‰©ä½“å±€éƒ¨ç©ºé—´ä¸­è®¡ç®—ä¸‰å¹³é¢æ˜ å°„。å¦è§ "
-"[member uv1_triplanar]。"
+"如果为 [code]true[/code]ï¼Œåˆ™åœ¨ä¸–ç•Œç©ºé—´è€Œä¸æ˜¯ç‰©ä½“å±€éƒ¨ç©ºé—´ä¸­è®¡ç®—ä¸‰å¹³é¢æ˜ å°„。å¦"
+"è§ [member uv1_triplanar]。"
#: doc/classes/SpatialMaterial.xml
msgid ""
@@ -70027,13 +71296,13 @@ msgid ""
msgstr ""
"设置镜é¢åå°„å…‰å¶çš„大å°ã€‚镜é¢å射光嶿˜¯å…‰æºå射的亮点。\n"
"[b]注æ„:[/b]这与 [member metallic] ä¸åŒï¼Œèƒ½é‡ä¸å®ˆæ’,所以在大多数情况下,应"
-"该将其ä¿ç•™åœ¨ [code]0.5[/code]。请å‚阅 [member roughness]。"
+"该将其ä¿ç•™åœ¨ [code]0.5[/code]。å¦è¯·å‚阅 [member roughness]。"
#: doc/classes/SpatialMaterial.xml
msgid ""
"Texture used to specify metallic for an object. This is multiplied by "
"[member metallic]."
-msgstr "用于指定对象的金属质感。此值乘[member metallic]。"
+msgstr "用于指定对象的金属质感。此值乘 [member metallic]。"
#: doc/classes/SpatialMaterial.xml
msgid ""
@@ -70049,7 +71318,7 @@ msgstr ""
#: doc/classes/SpatialMaterial.xml
msgid "If [code]true[/code], normal mapping is enabled."
-msgstr "如果[code]true[/code],则å¯ç”¨æ³•线映射。"
+msgstr "如果为 [code]true[/code],则å¯ç”¨æ³•线映射。"
#: doc/classes/SpatialMaterial.xml
msgid "The strength of the normal map's effect."
@@ -70090,9 +71359,9 @@ msgid ""
"Otherwise the scale is lost when billboarding. Only applies when [member "
"params_billboard_mode] is [constant BILLBOARD_ENABLED]."
msgstr ""
-"如果 [code]true[/code],ç€è‰²å™¨å°†ä¿æŒä¸ºç½‘格缩放设置。å¦åˆ™ï¼Œå½“åšå¹¿å‘Šç‰Œæ—¶ï¼Œç¼©æ”¾"
-"会丢失。仅在 [member params_billboard_mode] 为 [constant BILLBOARD_ENABLED] "
-"时适用。"
+"如果为 [code]true[/code],ç€è‰²å™¨å°†ä¿æŒä¸ºç½‘格缩放设置。å¦åˆ™ï¼Œå½“åšå¹¿å‘Šç‰Œæ—¶ï¼Œç¼©"
+"放会丢失。仅在 [member params_billboard_mode] 为 [constant "
+"BILLBOARD_ENABLED] 时适用。"
#: doc/classes/SpatialMaterial.xml
msgid ""
@@ -70121,27 +71390,27 @@ msgstr ""
msgid ""
"Which side of the object is not drawn when backfaces are rendered. See [enum "
"CullMode]."
-msgstr "æ¸²æŸ“èƒŒé¢æ—¶ï¼Œä¸ç»˜åˆ¶å¯¹è±¡çš„哪一é¢ã€‚å‚阅 [enum CullMode]。"
+msgstr "æ¸²æŸ“èƒŒé¢æ—¶ï¼Œä¸ç»˜åˆ¶å¯¹è±¡çš„哪一é¢ã€‚è§ [enum CullMode]。"
#: doc/classes/SpatialMaterial.xml
msgid ""
"Determines when depth rendering takes place. See [enum DepthDrawMode]. See "
"also [member flags_transparent]."
msgstr ""
-"确定深度渲染å‘生的时间。请å‚é˜…æ·±åº¦ç»˜åˆ¶æ¨¡å¼ [enum DepthDrawMode] 。å¦è§"
+"确定深度渲染å‘生的时间。请å‚é˜…æ·±åº¦ç»˜åˆ¶æ¨¡å¼ [enum DepthDrawMode] 。å¦è¯·å‚阅 "
"[member flags_transparent]。"
#: doc/classes/SpatialMaterial.xml
msgid ""
"The algorithm used for diffuse light scattering. See [enum DiffuseMode]."
-msgstr "用于漫å射光散射的算法。å‚è§ [enum DiffuseMode]。"
+msgstr "用于漫åå°„å…‰æ•£å°„çš„ç®—æ³•ã€‚è§ [enum DiffuseMode]。"
#: doc/classes/SpatialMaterial.xml
msgid ""
"If [code]true[/code], enables the vertex grow setting. See [member "
"params_grow_amount]."
msgstr ""
-"如果[code]true[/code],å¯ç”¨é¡¶ç‚¹ç”Ÿé•¿è®¾ç½®ã€‚å‚è§[member params_grow_amount]。"
+"如果为 [code]true[/code],å¯ç”¨é¡¶ç‚¹ç”Ÿé•¿è®¾ç½®ã€‚å‚è§[member params_grow_amount]。"
#: doc/classes/SpatialMaterial.xml
msgid "Grows object vertices in the direction of their normals."
@@ -70164,7 +71433,7 @@ 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 "
+"如果为 [code]true[/code],ç€è‰²å™¨å°†ä¸¢å¼ƒæ‰€æœ‰alpha值å°äºŽ[member "
"params_alpha_scissor_threshold]çš„åƒç´ ã€‚"
#: doc/classes/SpatialMaterial.xml
@@ -70181,7 +71450,7 @@ 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 "
+"如果为 [code]true[/code],循环粒å­åŠ¨ç”»ã€‚ä»…åœ¨ä½¿ç”¨ [constant "
"BILLBOARD_PARTICLES] æ—¶å¯ç”¨ã€‚å‚阅[member params_billboard_mode]。"
#: doc/classes/SpatialMaterial.xml
@@ -70204,8 +71473,8 @@ 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 ""
-"如果[code]true[/code],则å¯ç”¨æŽ¥è¿‘æ·¡å‡ºæ•ˆæžœã€‚é‚»è¿‘æ·¡å‡ºæ•ˆæžœä¼šæ ¹æ®æ¯ä¸ªåƒç´ ä¸Žå¦ä¸€ä¸ª"
-"对象的è·ç¦»æ·¡å‡ºã€‚"
+"如果为 [code]true[/code],则å¯ç”¨æŽ¥è¿‘æ·¡å‡ºæ•ˆæžœã€‚é‚»è¿‘æ·¡å‡ºæ•ˆæžœä¼šæ ¹æ®æ¯ä¸ªåƒç´ ä¸Žå¦"
+"一个对象的è·ç¦»æ·¡å‡ºã€‚"
#: doc/classes/SpatialMaterial.xml
msgid ""
@@ -70214,9 +71483,9 @@ 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åŽç«¯æ—¶ï¼Œæè´¨çš„ç²—ç³™åº¦å€¼ä¼šå½±å“æŠ˜å°„çš„æ¨¡ç³Šåº¦ã€‚è¾ƒé«˜çš„ç²—ç³™åº¦å€¼ä¼šä½¿"
-"æŠ˜å°„çœ‹èµ·æ¥æ›´æ¨¡ç³Šã€‚"
+"如果为 [code]true[/code],则å¯ç”¨æŠ˜å°„æ•ˆæžœã€‚æŠ˜å°„æ˜¯æ ¹æ®æ¥è‡ªç‰©ä½“åŽé¢çš„å…‰çº¿æ¥æ‰­æ›²"
+"逿˜Žåº¦çš„。当使用GLES3åŽç«¯æ—¶ï¼Œæè´¨çš„ç²—ç³™åº¦å€¼ä¼šå½±å“æŠ˜å°„çš„æ¨¡ç³Šåº¦ã€‚è¾ƒé«˜çš„ç²—ç³™åº¦å€¼"
+"ä¼šä½¿æŠ˜å°„çœ‹èµ·æ¥æ›´æ¨¡ç³Šã€‚"
#: doc/classes/SpatialMaterial.xml
msgid ""
@@ -70253,7 +71522,7 @@ msgid ""
"[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],则"
"边缘光照ä¸å¯è§ã€‚"
@@ -70262,7 +71531,7 @@ msgstr ""
msgid ""
"Texture used to set the strength of the rim lighting effect per-pixel. "
"Multiplied by [member rim]."
-msgstr "纹ç†ç”¨äºŽè®¾ç½®æ¯ä¸ªåƒç´ çš„边缘光照效果的强度。乘以[member rim]。"
+msgstr "纹ç†ç”¨äºŽè®¾ç½®æ¯ä¸ªåƒç´ çš„边缘光照效果的强度。乘以 [member rim]。"
#: doc/classes/SpatialMaterial.xml
msgid ""
@@ -70270,8 +71539,8 @@ msgid ""
"[code]0[/code] the light color is used, while [code]1[/code] means albedo "
"color is used. An intermediate value generally works best."
msgstr ""
-"渲染边缘效果时,混åˆå…‰ç…§è‰²å’Œå射色的数é‡ã€‚如果[code]0[/code]表示使用光色,"
-"[code]1[/code]表示使用å照色。一般æ¥è¯´ï¼Œä¸­é—´å€¼çš„æ•ˆæžœæœ€å¥½ã€‚"
+"渲染边缘效果时,混åˆå…‰ç…§è‰²å’Œå射色的数é‡ã€‚如果 [code]0[/code] 表示使用光色,"
+"[code]1[/code] 表示使用å照色。一般æ¥è¯´ï¼Œä¸­é—´å€¼çš„æ•ˆæžœæœ€å¥½ã€‚"
#: doc/classes/SpatialMaterial.xml
msgid ""
@@ -70280,21 +71549,21 @@ msgid ""
"[member metallic]."
msgstr ""
"表é¢å射。[code]0[/code] 值表示一é¢å®Œç¾Žçš„镜åƒï¼Œè€Œ [code]1[/code] 值则完全模糊"
-"了å射。å¦è¯·å‚阅[member metallic]。"
+"了å射。å¦è¯·å‚阅 [member metallic]。"
#: doc/classes/SpatialMaterial.xml
msgid ""
"Texture used to control the roughness per-pixel. Multiplied by [member "
"roughness]."
-msgstr "用于控制æ¯ä¸ªåƒç´ ç²—糙度的纹ç†ã€‚乘以[member roughness]。"
+msgstr "用于控制æ¯ä¸ªåƒç´ ç²—糙度的纹ç†ã€‚乘以 [member roughness]。"
#: doc/classes/SpatialMaterial.xml
msgid ""
"If [code]true[/code], subsurface scattering is enabled. Emulates light that "
"penetrates an object's surface, is scattered, and then emerges."
msgstr ""
-"如果[code]true[/code],则å¯ç”¨æ¬¡è¡¨é¢æ•£å°„。模拟光线穿é€ç‰©ä½“表é¢ï¼Œè¢«æ•£å°„,然åŽå‡º"
-"现。"
+"如果为 [code]true[/code],则å¯ç”¨æ¬¡è¡¨é¢æ•£å°„。模拟光线穿é€ç‰©ä½“表é¢ï¼Œè¢«æ•£å°„,然"
+"åŽå‡ºçŽ°ã€‚"
#: doc/classes/SpatialMaterial.xml
msgid "The strength of the subsurface scattering effect."
@@ -70305,7 +71574,7 @@ msgid ""
"Texture used to control the subsurface scattering strength. Stored in the "
"red texture channel. Multiplied by [member subsurf_scatter_strength]."
msgstr ""
-"ç”¨äºŽæŽ§åˆ¶æ¬¡è¡¨é¢æ•£å°„强度的纹ç†ã€‚存储在红色纹ç†é€šé“中。乘以[member "
+"ç”¨äºŽæŽ§åˆ¶æ¬¡è¡¨é¢æ•£å°„强度的纹ç†ã€‚存储在红色纹ç†é€šé“中。乘以 [member "
"subsurf_scatter_strength]。"
#: doc/classes/SpatialMaterial.xml
@@ -70316,13 +71585,13 @@ msgstr "传输效果使用的颜色。表示穿过物体的光。"
#: doc/classes/SpatialMaterial.xml
msgid "If [code]true[/code], the transmission effect is enabled."
-msgstr "如果 [code]true[/code],则å¯ç”¨ä¼ è¾“效果。"
+msgstr "如果为 [code]true[/code],则å¯ç”¨ä¼ è¾“效果。"
#: doc/classes/SpatialMaterial.xml
msgid ""
"Texture used to control the transmission effect per-pixel. Added to [member "
"transmission]."
-msgstr "纹ç†ç”¨äºŽæŽ§åˆ¶æ¯ä¸ªåƒç´ çš„传输效果。添加到[member transmission]。"
+msgstr "纹ç†ç”¨äºŽæŽ§åˆ¶æ¯ä¸ªåƒç´ çš„传输效果。添加到 [member transmission]。"
#: doc/classes/SpatialMaterial.xml
msgid ""
@@ -70338,7 +71607,7 @@ msgid ""
"How much to scale the [code]UV[/code] coordinates. This is multiplied by "
"[code]UV[/code] in the vertex function."
msgstr ""
-"缩放 [code]UV[/code] åæ ‡çš„多少。这个值乘以顶点函数中的[code]UV[/code]。"
+"缩放 [code]UV[/code] åæ ‡çš„多少。这个值乘以顶点函数中的 [code]UV[/code]。"
#: doc/classes/SpatialMaterial.xml
msgid ""
@@ -70353,12 +71622,12 @@ msgid ""
"because it is blending the texture between the three axes, it is unsuitable "
"when you are trying to achieve crisp texturing."
msgstr ""
-"如果 [code]true[/code],纹ç†å°†ä¸ä½¿ç”¨ [code]UV[/code],而是使用三平é¢çº¹ç†æŸ¥æ‰¾"
-"æ¥ç¡®å®šå¦‚何应用纹ç†ã€‚三平é¢çº¹ç†ä½¿ç”¨å¯¹è±¡è¡¨é¢çš„æ–¹å‘æ¥æ··åˆçº¹ç†å标之间。它从æºçº¹"
-"ç†ä¸­è¯»å–3次,æ¯ä¸ªè½´ä¸€æ¬¡ï¼Œç„¶åŽæ ¹æ®åƒç´ ä¸Žæ¯ä¸ªè½´çš„紧密程度在结果之间进行混åˆã€‚è¿™"
-"通常用于自然特å¾ï¼Œä»¥èŽ·å¾—çœŸå®žçš„æè´¨æ··åˆã€‚由于三平é¢çº¹ç†å¤„ç†æ¯ä¸€ä¸ªåƒç´ éœ€è¦æ›´å¤š"
-"的纹ç†è¯»å–,所以它比普通的UV纹ç†å¤„ç†è¦æ…¢å¾—多。此外,由于它是在三个轴之间混åˆ"
-"纹ç†ï¼Œæ‰€ä»¥å½“ä½ è¯•å›¾å®žçŽ°æ¸…æ™°çš„çº¹ç†æ—¶ï¼Œå®ƒæ˜¯ä¸åˆé€‚的。"
+"如果为 [code]true[/code],纹ç†å°†ä¸ä½¿ç”¨ [code]UV[/code],而是使用三平é¢çº¹ç†æŸ¥"
+"找æ¥ç¡®å®šå¦‚何应用纹ç†ã€‚三平é¢çº¹ç†ä½¿ç”¨å¯¹è±¡è¡¨é¢çš„æ–¹å‘æ¥æ··åˆçº¹ç†å标之间。它从æº"
+"纹ç†ä¸­è¯»å–3次,æ¯ä¸ªè½´ä¸€æ¬¡ï¼Œç„¶åŽæ ¹æ®åƒç´ ä¸Žæ¯ä¸ªè½´çš„紧密程度在结果之间进行混åˆã€‚"
+"这通常用于自然特å¾ï¼Œä»¥èŽ·å¾—çœŸå®žçš„æè´¨æ··åˆã€‚由于三平é¢çº¹ç†å¤„ç†æ¯ä¸€ä¸ªåƒç´ éœ€è¦æ›´"
+"多的纹ç†è¯»å–,所以它比普通的UV纹ç†å¤„ç†è¦æ…¢å¾—多。此外,由于它是在三个轴之间混"
+"åˆçº¹ç†ï¼Œæ‰€ä»¥å½“ä½ è¯•å›¾å®žçŽ°æ¸…æ™°çš„çº¹ç†æ—¶ï¼Œå®ƒæ˜¯ä¸åˆé€‚的。"
#: doc/classes/SpatialMaterial.xml
msgid ""
@@ -70372,7 +71641,7 @@ msgid ""
"added to [code]UV2[/code] in the vertex function. This can be used to offset "
"a texture."
msgstr ""
-"[code]UV2[/code]åæ ‡çš„åç§»é‡ã€‚这个é‡å°†è¢«æ·»åŠ åˆ°é¡¶ç‚¹å‡½æ•°ä¸­çš„ [code]UV2[/code] "
+"[code]UV2[/code] åæ ‡çš„åç§»é‡ã€‚这个é‡å°†è¢«æ·»åŠ åˆ°é¡¶ç‚¹å‡½æ•°ä¸­çš„ [code]UV2[/code] "
"中。这å¯ä»¥ç”¨æ¥å移纹ç†ã€‚"
#: doc/classes/SpatialMaterial.xml
@@ -70380,7 +71649,7 @@ msgid ""
"How much to scale the [code]UV2[/code] coordinates. This is multiplied by "
"[code]UV2[/code] in the vertex function."
msgstr ""
-"缩放 [code]UV[/code] åæ ‡çš„多少。这个值乘以顶点函数中的[code]UV[/code]。"
+"缩放 [code]UV[/code] åæ ‡çš„多少。这个值乘以顶点函数中的 [code]UV[/code]。"
#: doc/classes/SpatialMaterial.xml
msgid ""
@@ -70395,21 +71664,21 @@ msgid ""
"because it is blending the texture between the three axes, it is unsuitable "
"when you are trying to achieve crisp texturing."
msgstr ""
-"如果 [code]true[/code],纹ç†å°†ä¸ä½¿ç”¨ [code]UV[/code],而是使用三平é¢çº¹ç†æŸ¥æ‰¾"
-"æ¥ç¡®å®šå¦‚何应用纹ç†ã€‚三平é¢çº¹ç†ä½¿ç”¨å¯¹è±¡è¡¨é¢çš„æ–¹å‘æ¥æ··åˆçº¹ç†å标之间。它从æºçº¹"
-"ç†ä¸­è¯»å– 3 次,æ¯ä¸ªè½´ä¸€æ¬¡ï¼Œç„¶åŽæ ¹æ®åƒç´ ä¸Žæ¯ä¸ªè½´çš„紧密程度在结果之间进行混åˆã€‚"
-"这通常用于自然特å¾ï¼Œä»¥èŽ·å¾—çœŸå®žçš„æè´¨æ··åˆã€‚由于三平é¢çº¹ç†å¤„ç†æ¯ä¸€ä¸ªåƒç´ éœ€è¦æ›´"
-"多的纹ç†è¯»å–,所以它比普通的 UV 纹ç†å¤„ç†è¦æ…¢å¾—多。此外,由于它是在三个轴之间"
-"æ··åˆçº¹ç†ï¼Œæ‰€ä»¥å½“ä½ è¯•å›¾å®žçŽ°æ¸…æ™°çš„çº¹ç†æ—¶ï¼Œå®ƒæ˜¯ä¸åˆé€‚的。"
+"如果为 [code]true[/code],纹ç†å°†ä¸ä½¿ç”¨ [code]UV[/code],而是使用三平é¢çº¹ç†æŸ¥"
+"找æ¥ç¡®å®šå¦‚何应用纹ç†ã€‚三平é¢çº¹ç†ä½¿ç”¨å¯¹è±¡è¡¨é¢çš„æ–¹å‘æ¥æ··åˆçº¹ç†å标之间。它从æº"
+"纹ç†ä¸­è¯»å– 3 次,æ¯ä¸ªè½´ä¸€æ¬¡ï¼Œç„¶åŽæ ¹æ®åƒç´ ä¸Žæ¯ä¸ªè½´çš„紧密程度在结果之间进行混"
+"åˆã€‚这通常用于自然特å¾ï¼Œä»¥èŽ·å¾—çœŸå®žçš„æè´¨æ··åˆã€‚由于三平é¢çº¹ç†å¤„ç†æ¯ä¸€ä¸ªåƒç´ éœ€"
+"è¦æ›´å¤šçš„纹ç†è¯»å–,所以它比普通的 UV 纹ç†å¤„ç†è¦æ…¢å¾—多。此外,由于它是在三个轴"
+"之间混åˆçº¹ç†ï¼Œæ‰€ä»¥å½“ä½ è¯•å›¾å®žçŽ°æ¸…æ™°çš„çº¹ç†æ—¶ï¼Œå®ƒæ˜¯ä¸åˆé€‚的。"
#: doc/classes/SpatialMaterial.xml
msgid ""
"If [code]true[/code], the model's vertex colors are processed as sRGB mode."
-msgstr "如果[code]true[/code],则模型的顶点颜色将作为 sRGB 模å¼å¤„ç†ã€‚"
+msgstr "如果为 [code]true[/code],则模型的顶点颜色将作为 sRGB 模å¼å¤„ç†ã€‚"
#: doc/classes/SpatialMaterial.xml
msgid "If [code]true[/code], the vertex color is used as albedo color."
-msgstr "如果[code]true[/code],则使用顶点颜色作为å射率颜色。"
+msgstr "如果为 [code]true[/code],则使用顶点颜色作为å射率颜色。"
#: doc/classes/SpatialMaterial.xml
msgid "Texture specifying per-pixel color."
@@ -70443,7 +71712,7 @@ msgstr "指定æ¯åƒç´ æ¸…漆值的纹ç†ã€‚"
msgid ""
"Texture specifying per-pixel flowmap direction for use with [member "
"anisotropy]."
-msgstr "指定æ¯ä¸ªåƒç´ æµå›¾æ–¹å‘的纹ç†ï¼Œç”¨äºŽ[member anisotropy]。"
+msgstr "指定æ¯ä¸ªåƒç´ æµå›¾æ–¹å‘的纹ç†ï¼Œç”¨äºŽ [member anisotropy]。"
#: doc/classes/SpatialMaterial.xml
msgid "Texture specifying per-pixel ambient occlusion value."
@@ -70479,15 +71748,15 @@ msgstr "指定æ¯ä¸ªåƒç´ ç»†èŠ‚æ³•çº¿çš„çº¹ç†ã€‚"
#: doc/classes/SpatialMaterial.xml
msgid "Represents the size of the [enum TextureParam] enum."
-msgstr "表示[enum TextureParam]枚举的大å°ã€‚"
+msgstr "表示 [enum TextureParam] 枚举的大å°ã€‚"
#: doc/classes/SpatialMaterial.xml
msgid "Use [code]UV[/code] with the detail texture."
-msgstr "使用[code]UV[/code]与细节纹ç†ã€‚"
+msgstr "使用 [code]UV[/code] 与细节纹ç†ã€‚"
#: doc/classes/SpatialMaterial.xml
msgid "Use [code]UV2[/code] with the detail texture."
-msgstr "使用[code]UV2[/code]与细节纹ç†ã€‚"
+msgstr "使用 [code]UV2[/code] 与细节纹ç†ã€‚"
#: doc/classes/SpatialMaterial.xml
msgid "Constant for setting [member flags_transparent]."
@@ -70495,19 +71764,19 @@ msgstr "用于设置 [member flags_transparent] 的常é‡ã€‚"
#: doc/classes/SpatialMaterial.xml
msgid "Constant for setting [member emission_enabled]."
-msgstr "用于设置[member emission_enabled]的常é‡ã€‚"
+msgstr "用于设置 [member emission_enabled] 的常é‡ã€‚"
#: doc/classes/SpatialMaterial.xml
msgid "Constant for setting [member normal_enabled]."
-msgstr "用于设置[member normal_enabled]的常é‡ã€‚"
+msgstr "用于设置 [member normal_enabled] 的常é‡ã€‚"
#: doc/classes/SpatialMaterial.xml
msgid "Constant for setting [member rim_enabled]."
-msgstr "用于设置[member rim_enabled]的常é‡ã€‚"
+msgstr "用于设置 [member rim_enabled] 的常é‡ã€‚"
#: doc/classes/SpatialMaterial.xml
msgid "Constant for setting [member clearcoat_enabled]."
-msgstr "用于设置[member clearcoat_enabled]的常é‡ã€‚"
+msgstr "用于设置 [member clearcoat_enabled] 的常é‡ã€‚"
#: doc/classes/SpatialMaterial.xml
msgid "Constant for setting [member anisotropy_enabled]."
@@ -70515,7 +71784,7 @@ msgstr "用于设置 [member anisotropy_enabled] 的常é‡ã€‚"
#: doc/classes/SpatialMaterial.xml
msgid "Constant for setting [member ao_enabled]."
-msgstr "用于设置[member ao_enabled]的常é‡ã€‚"
+msgstr "用于设置 [member ao_enabled] 的常é‡ã€‚"
#: doc/classes/SpatialMaterial.xml
msgid "Constant for setting [member depth_enabled]."
@@ -70523,7 +71792,7 @@ msgstr "用于设置 [member depth_enabled] 的常é‡ã€‚"
#: doc/classes/SpatialMaterial.xml
msgid "Constant for setting [member subsurf_scatter_enabled]."
-msgstr "用于设置[member subsurf_scatter_enabled]的常é‡ã€‚"
+msgstr "用于设置 [member subsurf_scatter_enabled] 的常é‡ã€‚"
#: doc/classes/SpatialMaterial.xml
msgid "Constant for setting [member transmission_enabled]."
@@ -70531,11 +71800,11 @@ msgstr "用于设置 [member transmission_enabled] 的常é‡ã€‚"
#: doc/classes/SpatialMaterial.xml
msgid "Constant for setting [member refraction_enabled]."
-msgstr "用于设置[member refraction_enabled]的常é‡ã€‚"
+msgstr "用于设置 [member refraction_enabled] 的常é‡ã€‚"
#: doc/classes/SpatialMaterial.xml
msgid "Constant for setting [member detail_enabled]."
-msgstr "用于设置[member detail_enabled]的常é‡ã€‚"
+msgstr "用于设置 [member detail_enabled] 的常é‡ã€‚"
#: doc/classes/SpatialMaterial.xml
msgid ""
@@ -70607,7 +71876,7 @@ msgstr "å°† [code]ALBEDO[/code] 设置为网格中指定的æ¯é¡¶ç‚¹é¢œè‰²ã€‚"
msgid ""
"Vertex color is in sRGB space and needs to be converted to linear. Only "
"applies in the GLES3 renderer."
-msgstr "顶点颜色在sRGB空间,需è¦è½¬æˆçº¿æ€§ã€‚仅适用于 GLES3 渲染器。"
+msgstr "顶点颜色在 sRGB 空间,需è¦è½¬æˆçº¿æ€§ã€‚仅适用于 GLES3 渲染器。"
#: doc/classes/SpatialMaterial.xml
msgid ""
@@ -70636,28 +71905,28 @@ msgstr ""
msgid ""
"Use triplanar texture lookup for all texture lookups that would normally use "
"[code]UV[/code]."
-msgstr "对所有通常会使用[code]UV[/code]çš„çº¹ç†æŸ¥æ‰¾ä½¿ç”¨ä¸‰å¹³é¢çº¹ç†æŸ¥æ‰¾ã€‚"
+msgstr "对所有通常会使用 [code]UV[/code] çš„çº¹ç†æŸ¥æ‰¾ä½¿ç”¨ä¸‰å¹³é¢çº¹ç†æŸ¥æ‰¾ã€‚"
#: doc/classes/SpatialMaterial.xml
msgid ""
"Use triplanar texture lookup for all texture lookups that would normally use "
"[code]UV2[/code]."
-msgstr "对所有通常会使用[code]UV2[/code]çš„çº¹ç†æŸ¥æ‰¾ä½¿ç”¨ä¸‰å¹³é¢çº¹ç†æŸ¥æ‰¾ã€‚"
+msgstr "对所有通常会使用 [code]UV2[/code] çš„çº¹ç†æŸ¥æ‰¾ä½¿ç”¨ä¸‰å¹³é¢çº¹ç†æŸ¥æ‰¾ã€‚"
#: doc/classes/SpatialMaterial.xml
msgid ""
"Use [code]UV2[/code] coordinates to look up from the [member ao_texture]."
-msgstr "使用[code]UV2[/code]åæ ‡ä»Ž[member ao_texture]中查找。"
+msgstr "使用 [code]UV2[/code] åæ ‡ä»Ž [member ao_texture] 中查找。"
#: doc/classes/SpatialMaterial.xml
msgid ""
"Use [code]UV2[/code] coordinates to look up from the [member "
"emission_texture]."
-msgstr "使用[code]UV2[/code]åæ ‡ï¼Œä»Ž[member emission_texture]中查找。"
+msgstr "使用 [code]UV2[/code] åæ ‡ä»Ž [member emission_texture] 中查找。"
#: doc/classes/SpatialMaterial.xml
msgid "Use alpha scissor. Set by [member params_use_alpha_scissor]."
-msgstr "使用alpha剪刀。由 [member params_use_alpha_scissor] 设置。"
+msgstr "使用 Alpha è£å‰ªã€‚ç”± [member params_use_alpha_scissor] 设置。"
#: doc/classes/SpatialMaterial.xml
msgid ""
@@ -70667,7 +71936,7 @@ msgstr "在三平é¢çº¹ç†æŸ¥æ‰¾ä¸­ä½¿ç”¨ä¸–ç•Œåæ ‡è€Œä¸æ˜¯å±€éƒ¨å标。"
#: doc/classes/SpatialMaterial.xml
msgid "Forces the shader to convert albedo from sRGB space to linear space."
-msgstr "强制ç€è‰²å™¨å°†å射率从sRGB空间转æ¢ä¸ºçº¿æ€§ç©ºé—´ã€‚"
+msgstr "强制ç€è‰²å™¨å°†å射率从 sRGB 空间转æ¢ä¸ºçº¿æ€§ç©ºé—´ã€‚"
#: doc/classes/SpatialMaterial.xml
msgid "Disables receiving shadows from other objects."
@@ -70695,7 +71964,7 @@ msgstr "漫散射忽略了粗糙度。"
#: doc/classes/SpatialMaterial.xml
msgid "Extends Lambert to cover more than 90 degrees when roughness increases."
-msgstr "当粗糙度增加时,将Lambert延伸到90度以上。"
+msgstr "当粗糙度增加时,将 Lambert 延伸到 90 度以上。"
#: doc/classes/SpatialMaterial.xml
msgid "Attempts to use roughness to emulate microsurfacing."
@@ -70740,10 +72009,10 @@ msgid ""
"The [member ParticlesMaterial.anim_speed] or [member CPUParticles."
"anim_speed] should also be set to a positive value for the animation to play."
msgstr ""
-"当分é…ç»™[Particles]å’Œ[CPUParticles]节点时用于粒å­ç³»ç»Ÿã€‚å¯ç”¨"
-"[code]particles_anim_*[/code]属性。\n"
-"为了播放动画,[member ParticlesMaterial.anim_speed]或[member CPUParticles."
-"anim_speed]也应该被设置为正值。"
+"当分é…ç»™ [Particles] å’Œ [CPUParticles] 节点时用于粒å­ç³»ç»Ÿã€‚å¯ç”¨ "
+"[code]particles_anim_*[/code] 属性。\n"
+"为了播放动画,[member ParticlesMaterial.anim_speed] 或 [member CPUParticles."
+"anim_speed] 也应该被设置为正值。"
#: doc/classes/SpatialMaterial.xml
msgid "Used to read from the red channel of a texture."
@@ -70759,7 +72028,7 @@ msgstr "用æ¥è¯»å–纹ç†çš„è“色通é“。"
#: doc/classes/SpatialMaterial.xml
msgid "Used to read from the alpha channel of a texture."
-msgstr "用æ¥è¯»å–纹ç†çš„alpha通é“。"
+msgstr "用æ¥è¯»å–纹ç†çš„ Alpha 通é“。"
#: doc/classes/SpatialMaterial.xml
msgid "Adds the emission color to the color from the emission texture."
@@ -70840,8 +72109,8 @@ msgid ""
"[b]Note:[/b] To get a regular hemisphere, the height and radius of the "
"sphere must be equal."
msgstr ""
-"如果 [code]true[/code],则创建一个åŠçƒè€Œä¸æ˜¯ä¸€ä¸ªå®Œæ•´çš„çƒä½“。\n"
-"[b]注:[/b]è¦å¾—到一个规则的åŠçƒï¼Œçƒä½“的高度和åŠå¾„必须相等。"
+"如果为 [code]true[/code],则创建一个åŠçƒè€Œä¸æ˜¯ä¸€ä¸ªå®Œæ•´çš„çƒä½“。\n"
+"[b]注æ„:[/b]è¦å¾—到一个规则的åŠçƒï¼Œçƒä½“的高度和åŠå¾„必须相等。"
#: doc/classes/SphereMesh.xml
msgid "Number of radial segments on the sphere."
@@ -70938,7 +72207,7 @@ msgid ""
"If [code]true[/code], the [SpinBox] will be editable. Otherwise, it will be "
"read only."
msgstr ""
-"如果 [code]true[/code],则 [SpinBox] 将是å¯ç¼–辑的。å¦åˆ™ï¼Œå®ƒå°†æ˜¯åªè¯»çš„。"
+"如果为 [code]true[/code],则 [SpinBox] 将是å¯ç¼–辑的。å¦åˆ™ï¼Œå®ƒå°†æ˜¯åªè¯»çš„。"
#: doc/classes/SpinBox.xml
msgid ""
@@ -70978,7 +72247,7 @@ msgid ""
"If [code]true[/code], the area of the first [Control] will be collapsed and "
"the dragger will be disabled."
msgstr ""
-"如果 [code]true[/code],第一个 [Control] 的区域将被折å å¹¶ä¸”拖动器将被ç¦ç”¨ã€‚"
+"如果为 [code]true[/code],第一个 [Control] 的区域将被折å å¹¶ä¸”拖动器将被ç¦ç”¨ã€‚"
#: doc/classes/SplitContainer.xml
msgid ""
@@ -71201,7 +72470,7 @@ msgstr ""
#: doc/classes/Sprite.xml
msgid "If [code]true[/code], texture is centered."
-msgstr "如果 [code]true[/code],纹ç†å±…中。"
+msgstr "如果为 [code]true[/code],纹ç†å±…中。"
#: doc/classes/Sprite.xml doc/classes/Sprite3D.xml
msgid ""
@@ -71242,19 +72511,19 @@ msgid ""
"If [code]true[/code], texture is cut from a larger atlas texture. See "
"[member region_rect]."
msgstr ""
-"如果 [code]true[/code],则从较大的图集纹ç†ä¸­å‰ªåˆ‡çº¹ç†ã€‚å‚阅 [member "
+"如果为 [code]true[/code],则从较大的图集纹ç†ä¸­å‰ªåˆ‡çº¹ç†ã€‚è§ [member "
"region_rect]。"
#: doc/classes/Sprite.xml
msgid "If [code]true[/code], the outermost pixels get blurred out."
-msgstr "如果 [code]true[/code],最外é¢çš„åƒç´ ä¼šå˜å¾—模糊。"
+msgstr "如果为 [code]true[/code],最外é¢çš„åƒç´ ä¼šå˜å¾—模糊。"
#: doc/classes/Sprite.xml doc/classes/Sprite3D.xml
msgid ""
"The region of the atlas texture to display. [member region_enabled] must be "
"[code]true[/code]."
msgstr ""
-"è¦æ˜¾ç¤ºçš„图集纹ç†åŒºåŸŸã€‚ [member region_enabled] 必须是 [code]true[/code]。"
+"è¦æ˜¾ç¤ºçš„图集纹ç†åŒºåŸŸã€‚[member region_enabled] 必须是 [code]true[/code]。"
#: doc/classes/Sprite.xml
msgid "[Texture] object to draw."
@@ -71290,7 +72559,7 @@ msgid ""
"If [code]true[/code], texture will be cut from a larger atlas texture. See "
"[member region_rect]."
msgstr ""
-"如果 [code]true[/code],纹ç†å°†ä»Žè¾ƒå¤§çš„图集纹ç†ä¸­å‰ªåˆ‡ã€‚å‚阅 [member "
+"如果为 [code]true[/code],纹ç†å°†ä»Žè¾ƒå¤§çš„图集纹ç†ä¸­å‰ªåˆ‡ã€‚å‚阅 [member "
"region_rect]。"
#: doc/classes/Sprite3D.xml
@@ -71396,14 +72665,14 @@ msgstr ""
msgid ""
"If [code]true[/code], the [Light] in the [Environment] has effects on the "
"sprite."
-msgstr "如果 [code]true[/code],则 [Environment] 中的 [Light] å¯¹ç²¾çµæœ‰å½±å“。"
+msgstr "如果为 [code]true[/code],则 [Environment] 中的 [Light] å¯¹ç²¾çµæœ‰å½±å“。"
#: doc/classes/SpriteBase3D.xml
msgid ""
"If [code]true[/code], the texture's transparency and the opacity are used to "
"make those parts of the sprite invisible."
msgstr ""
-"如果 [code]true[/code],纹ç†çš„逿˜Žåº¦å’Œä¸é€æ˜Žåº¦ç”¨äºŽä½¿ç²¾çµçš„这些部分ä¸å¯è§ã€‚"
+"如果为 [code]true[/code],纹ç†çš„逿˜Žåº¦å’Œä¸é€æ˜Žåº¦ç”¨äºŽä½¿ç²¾çµçš„这些部分ä¸å¯è§ã€‚"
#: doc/classes/SpriteBase3D.xml
msgid ""
@@ -71951,7 +73220,7 @@ msgstr "一ç§é”™è¯¯çжæ€ï¼Œæ˜¾ç¤ºä¸»æœºæäº¤çš„SSLè¯ä¹¦åŸŸä¸Žè¯·æ±‚验è¯çš„
#: doc/classes/StreamPeerTCP.xml
msgid "TCP stream peer."
-msgstr "TCPæµå¯¹ç­‰ä½“。"
+msgstr "TCP æµå¯¹ç­‰ä½“。"
#: doc/classes/StreamPeerTCP.xml
msgid ""
@@ -72025,11 +73294,11 @@ msgstr "表示处于错误状æ€çš„ [StreamPeerTCP] 的状æ€ã€‚"
#: doc/classes/StreamTexture.xml
msgid "A [code].stex[/code] texture."
-msgstr "[code].stex[/code]纹ç†."
+msgstr "[code].stex[/code] 纹ç†ã€‚"
#: doc/classes/StreamTexture.xml
msgid "A texture that is loaded from a [code].stex[/code] file."
-msgstr "从[code].stex[/code]文件加载的纹ç†ã€‚"
+msgstr "从 [code].stex[/code] 文件加载的纹ç†ã€‚"
#: doc/classes/StreamTexture.xml
msgid "Loads the texture from the given path."
@@ -72592,14 +73861,15 @@ msgstr ""
"[/codeblock]"
#: doc/classes/String.xml
+#, fuzzy
msgid ""
"Returns [code]true[/code] if this string contains a valid integer.\n"
"[codeblock]\n"
-"print(\"7\".is_valid_int()) # Prints \"True\"\n"
-"print(\"14.6\".is_valid_int()) # Prints \"False\"\n"
-"print(\"L\".is_valid_int()) # Prints \"False\"\n"
-"print(\"+3\".is_valid_int()) # Prints \"True\"\n"
-"print(\"-12\".is_valid_int()) # Prints \"True\"\n"
+"print(\"7\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"14.6\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"L\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"+3\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"-12\".is_valid_integer()) # Prints \"True\"\n"
"[/codeblock]"
msgstr ""
"å¦‚æžœè¯¥å­—ç¬¦ä¸²åŒ…å«æœ‰æ•ˆçš„æ•´æ•°ï¼Œåˆ™è¿”回 [code]true[/code]\n"
@@ -72788,7 +74058,7 @@ msgstr "æ ¼å¼åŒ–æ•°å­—ï¼Œåœ¨å°æ•°ç‚¹å‰å…·æœ‰ [code]digits[/code] 的确切数
#: doc/classes/String.xml
msgid "Decode a percent-encoded string. See [method percent_encode]."
-msgstr "è§£ç ä¸€ä¸ªç™¾åˆ†æ¯”ç¼–ç çš„字符串。å‚阅[method percent_encode]。"
+msgstr "è§£ç ä¸€ä¸ªç™¾åˆ†æ¯”ç¼–ç çš„å­—ç¬¦ä¸²ã€‚è§ [method percent_encode]。"
#: doc/classes/String.xml
msgid ""
@@ -72804,7 +74074,7 @@ msgid ""
"the string as a subpath. E.g. [code]\"this/is\".plus_file(\"path\") == "
"\"this/is/path\"[/code]."
msgstr ""
-"如果字符串是路径,则在字符串末尾连接 [code]file[/code] 作为å­è·¯å¾„。例如。 "
+"如果字符串是路径,则在字符串末尾连接 [code]file[/code] 作为å­è·¯å¾„。例如。"
"[code]\"this/is\".plus_file(\"path\") == \"this/is/path\"[/code]。"
#: doc/classes/String.xml
@@ -72951,7 +74221,7 @@ msgid ""
"If you need to split strings with more complex rules, use the [RegEx] class "
"instead."
msgstr ""
-"通过 [code]delimiter[/code] 字符串拆分字符串并返回å­å­—符串数组。 "
+"通过 [code]delimiter[/code] 字符串拆分字符串并返回å­å­—符串数组。"
"[code]delimiter[/code] å¯ä»¥æ˜¯ä»»æ„长度。\n"
"如果指定了 [code]maxsplit[/code],它定义了从左边到 [code]maxsplit[/code] 的分"
"割次数。默认值 [code]0[/code] 表示所有项目都被拆分。\n"
@@ -73134,9 +74404,9 @@ msgid ""
"[code]focus[/code] [StyleBox] more reusable across different nodes."
msgstr ""
"æ ·å¼ç›’ StyleBox æ˜¯ä¸€ç§ [Resource],它æä¾›äº†ä¸€ä¸ªæŠ½è±¡åŸºç±»ï¼Œç”¨äºŽä¸º UI 绘制风格化"
-"的框。 StyleBox 被用于绘制按钮的样å¼ã€è¡Œç¼–è¾‘æ¡†çš„èƒŒæ™¯ã€æ ‘的背景等,也被用作测"
-"试指针信å·çš„逿˜ŽæŽ©ç ã€‚å°† StyleBox æŒ‡å®šä¸ºæŽ§ä»¶çš„æŽ©ç æ—¶ï¼Œå¦‚æžœåœ¨æŽ©ç æµ‹è¯•失败,点"
-"击和è¿åŠ¨ä¿¡å·å°†é€è¿‡å®ƒä¼ é€’至下层控件。\n"
+"的框。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] "
@@ -73309,8 +74579,7 @@ msgid ""
"Returns the given [code]margin[/code]'s border width. See [enum Margin] for "
"possible values."
msgstr ""
-"返回给定的 [code]margin[/code] 的边框宽度。有关å¯èƒ½çš„值,请å‚阅 [enum "
-"Margin]。"
+"返回给定的 [code]margin[/code] 的边框宽度。å¯èƒ½çš„å–å€¼è§ [enum Margin]。"
#: doc/classes/StyleBoxFlat.xml
msgid "Returns the smallest border width out of all four borders."
@@ -73320,23 +74589,22 @@ msgstr "返回所有四个边界中最å°çš„边框宽度。"
msgid ""
"Returns the given [code]corner[/code]'s radius. See [enum Corner] for "
"possible values."
-msgstr ""
-"返回给定的 [code]corner[/code] çš„åŠå¾„。有关å¯èƒ½çš„值,请å‚阅 [enum Corner]。"
+msgstr "返回给定的 [code]corner[/code] çš„åŠå¾„。å¯èƒ½çš„å–å€¼è§ [enum Corner]。"
#: doc/classes/StyleBoxFlat.xml doc/classes/StyleBoxTexture.xml
msgid ""
"Returns the size of the given [code]margin[/code]'s expand margin. See [enum "
"Margin] for possible values."
msgstr ""
-"返回给定的[code]margin[/code]的扩展边è·çš„大å°ã€‚å¯èƒ½çš„值è§[enum Margin]。"
+"返回给定的 [code]margin[/code] 的扩展边è·çš„大å°ã€‚å¯èƒ½çš„å–å€¼è§ [enum Margin]。"
#: doc/classes/StyleBoxFlat.xml
msgid ""
"Sets the border width to [code]width[/code] pixels for the given "
"[code]margin[/code]. See [enum Margin] for possible values."
msgstr ""
-"用给定的[code]margin[/code]设置边界宽度为[code]width[/code]åƒç´ ã€‚å¯èƒ½çš„值è§"
-"[enum Margin]。"
+"用给定的 [code]margin[/code] 设置边界宽度为 [code]width[/code] åƒç´ ã€‚å¯èƒ½çš„å–"
+"å€¼è§ [enum Margin]。"
#: doc/classes/StyleBoxFlat.xml
msgid "Sets the border width to [code]width[/code] pixels for all margins."
@@ -73347,8 +74615,8 @@ msgid ""
"Sets the corner radius to [code]radius[/code] pixels for the given "
"[code]corner[/code]. See [enum Corner] for possible values."
msgstr ""
-"用给定的[code]corner[/code]设置角的åŠå¾„为[code]radius[/code]åƒç´ ã€‚å¯èƒ½çš„值è§"
-"[enum Corner]。"
+"用给定的 [code]corner[/code] 设置角的åŠå¾„为 [code]radius[/code] åƒç´ ã€‚å¯èƒ½çš„"
+"å–å€¼è§ [enum Corner]。"
#: doc/classes/StyleBoxFlat.xml
msgid "Sets the corner radius to [code]radius[/code] pixels for all corners."
@@ -73369,8 +74637,8 @@ msgid ""
"Sets the expand margin to [code]size[/code] pixels for the given "
"[code]margin[/code]. See [enum Margin] for possible values."
msgstr ""
-"将给定的 [code]margin[/code] 的扩展边è·è®¾ç½®ä¸º [code]size[/code] åƒç´ ã€‚有关å¯"
-"能的值,请å‚阅 [enum Margin]。"
+"将给定的 [code]margin[/code] 的扩展边è·è®¾ç½®ä¸º [code]size[/code] åƒç´ ã€‚å¯èƒ½çš„"
+"å–å€¼è§ [enum Margin]。"
#: doc/classes/StyleBoxFlat.xml doc/classes/StyleBoxTexture.xml
msgid "Sets the expand margin to [code]size[/code] pixels for all margins."
@@ -73413,7 +74681,7 @@ msgstr "StyleBox的背景颜色。"
#: doc/classes/StyleBoxFlat.xml
msgid "If [code]true[/code], the border will fade into the background color."
-msgstr "如果[code]true[/code],边框会淡入背景色。"
+msgstr "如果为 [code]true[/code],边框会淡入背景色。"
#: doc/classes/StyleBoxFlat.xml
msgid "Sets the color of the border."
@@ -73421,7 +74689,7 @@ msgstr "设置边框的颜色。"
#: doc/classes/StyleBoxFlat.xml
msgid "Border width for the bottom border."
-msgstr "底部边框的宽度。"
+msgstr "底边框的宽度。"
#: doc/classes/StyleBoxFlat.xml
msgid "Border width for the left border."
@@ -73433,7 +74701,7 @@ msgstr "å³è¾¹æ¡†çš„宽度。"
#: doc/classes/StyleBoxFlat.xml
msgid "Border width for the top border."
-msgstr "顶部边框的宽度。"
+msgstr "顶边框的宽度。"
#: doc/classes/StyleBoxFlat.xml
msgid ""
@@ -73457,27 +74725,27 @@ msgstr ""
msgid ""
"The bottom-left corner's radius. If [code]0[/code], the corner is not "
"rounded."
-msgstr "左下角的åŠå¾„。如果[code]0[/code],则角ä¸åœ†æ»‘。"
+msgstr "左下角的åŠå¾„。如果为 [code]0[/code],则该角ä¸åœ†æ»‘。"
#: doc/classes/StyleBoxFlat.xml
msgid ""
"The bottom-right corner's radius. If [code]0[/code], the corner is not "
"rounded."
-msgstr "å³ä¸‹è§’çš„åŠå¾„。如果[code]0[/code],则角ä¸åœ†æ»‘。"
+msgstr "å³ä¸‹è§’çš„åŠå¾„。如果为 [code]0[/code],则该角ä¸åœ†æ»‘。"
#: doc/classes/StyleBoxFlat.xml
msgid ""
"The top-left corner's radius. If [code]0[/code], the corner is not rounded."
-msgstr "左上角的åŠå¾„。如果[code]0[/code],则角ä¸åœ†æ»‘。"
+msgstr "左上角的åŠå¾„。如果为 [code]0[/code],则该角ä¸åœ†æ»‘。"
#: doc/classes/StyleBoxFlat.xml
msgid ""
"The top-right corner's radius. If [code]0[/code], the corner is not rounded."
-msgstr "å³ä¸Šè§’çš„åŠå¾„。如果[code]0[/code],则角ä¸åœ†æ»‘。"
+msgstr "å³ä¸Šè§’çš„åŠå¾„。如果为 [code]0[/code],则该角ä¸åœ†æ»‘。"
#: doc/classes/StyleBoxFlat.xml
msgid "Toggles drawing of the inner part of the stylebox."
-msgstr "切æ¢ç»˜åˆ¶StyleBox的内部部分。"
+msgstr "切æ¢ç»˜åˆ¶ StyleBox 的内部部分。"
#: doc/classes/StyleBoxFlat.xml
msgid ""
@@ -73626,12 +74894,12 @@ msgid ""
"If [code]true[/code], the line will be vertical. If [code]false[/code], the "
"line will be horizontal."
msgstr ""
-"如果 [code]true[/code],则该线将是垂直的。如果 [code]false[/code],该线将是水"
-"平的。"
+"如果为 [code]true[/code],则该线将是垂直的。如果 [code]false[/code],该线将是"
+"水平的。"
#: doc/classes/StyleBoxTexture.xml
msgid "Texture-based nine-patch [StyleBox]."
-msgstr "基于纹ç†çš„ä¹å®«æ ¼[StyleBox]。"
+msgstr "基于纹ç†çš„ä¹å®«æ ¼ [StyleBox]。"
#: doc/classes/StyleBoxTexture.xml
msgid ""
@@ -73648,37 +74916,34 @@ msgstr ""
msgid ""
"Returns the size of the given [code]margin[/code]. See [enum Margin] for "
"possible values."
-msgstr ""
-"返回给定 [code]margin[/code] 的大å°ã€‚有关å¯èƒ½çš„值,请å‚阅 [enum Margin]。"
+msgstr "返回给定 [code]margin[/code] 的大å°ã€‚å¯èƒ½çš„å–å€¼è§ [enum Margin]。"
#: doc/classes/StyleBoxTexture.xml
msgid ""
"Sets the margin to [code]size[/code] pixels for the given [code]margin[/"
"code]. See [enum Margin] for possible values."
msgstr ""
-"将给定的 [code]margin[/code] 的边è·è®¾ç½®ä¸º [code]size[/code] åƒç´ ã€‚有关å¯èƒ½çš„"
-"值,请å‚阅 [enum Margin]。"
+"将给定的 [code]margin[/code] 的边è·è®¾ç½®ä¸º [code]size[/code] åƒç´ ã€‚å¯èƒ½çš„å–值"
+"è§ [enum Margin]。"
#: doc/classes/StyleBoxTexture.xml
msgid ""
"Controls how the stylebox's texture will be stretched or tiled horizontally. "
"See [enum AxisStretchMode] for possible values."
msgstr ""
-"控制如何水平拉伸或平铺样å¼ç›’的纹ç†ã€‚有关å¯èƒ½çš„值,请å‚阅 [enum "
-"AxisStretchMode]。"
+"控制如何水平拉伸或平铺样å¼ç›’的纹ç†ã€‚å¯èƒ½çš„å–å€¼è§ [enum AxisStretchMode]。"
#: doc/classes/StyleBoxTexture.xml
msgid ""
"Controls how the stylebox's texture will be stretched or tiled vertically. "
"See [enum AxisStretchMode] for possible values."
msgstr ""
-"控制如何垂直拉伸或平铺StyleBox的纹ç†ã€‚有关å¯èƒ½çš„值,请å‚阅 [enum "
-"AxisStretchMode]。"
+"控制如何垂直拉伸或平铺 StyleBox 的纹ç†ã€‚å¯èƒ½çš„å–å€¼è§ [enum AxisStretchMode]。"
#: doc/classes/StyleBoxTexture.xml
msgid ""
"If [code]true[/code], the nine-patch texture's center tile will be drawn."
-msgstr "如果[code]true[/code],将绘制ä¹å®«æ ¼çº¹ç†çš„中心瓦片。"
+msgstr "如果为 [code]true[/code],将绘制ä¹å®«æ ¼çº¹ç†çš„中心图å—。"
#: doc/classes/StyleBoxTexture.xml
msgid ""
@@ -73712,9 +74977,10 @@ msgid ""
"This is also the value used as fallback for [member StyleBox."
"content_margin_bottom] if it is negative."
msgstr ""
-"增加3×3 StyleBox的底边è·ã€‚\n"
-"更高的值æ„å‘³ç€æ›´å¤šçš„æºçº¹ç†è¢«è®¤ä¸ºæ˜¯3×3 box的底边的一部分。\n"
-"如果[member StyleBox.content_margin_bottom]为负值,这个值也是作为åŽå¤‡å€¼ä½¿ç”¨ã€‚"
+"增加 3×3 StyleBox 的底边è·ã€‚\n"
+"更高的值æ„å‘³ç€æ›´å¤šçš„æºçº¹ç†è¢«è®¤ä¸ºæ˜¯ 3×3 box的底边的一部分。\n"
+"如果 [member StyleBox.content_margin_bottom] 为负值,这个值也是作为åŽå¤‡å€¼ä½¿"
+"用。"
#: doc/classes/StyleBoxTexture.xml
msgid ""
@@ -73724,9 +74990,9 @@ msgid ""
"This is also the value used as fallback for [member StyleBox."
"content_margin_left] if it is negative."
msgstr ""
-"增加 3×3 StyleBox的左边è·ã€‚\n"
+"增加 3×3 StyleBox 的左边è·ã€‚\n"
"较高的值æ„å‘³ç€æ›´å¤šçš„æºçº¹ç†è¢«è®¤ä¸ºæ˜¯ 3×3 box左边框的一部分。\n"
-"如果[member StyleBox.content_margin_left]为负值,这个值也是作为åŽå¤‡å€¼ä½¿ç”¨ã€‚"
+"如果 [member StyleBox.content_margin_left] 为负值,这个值也是作为åŽå¤‡å€¼ä½¿ç”¨ã€‚"
#: doc/classes/StyleBoxTexture.xml
msgid ""
@@ -73736,9 +75002,10 @@ msgid ""
"This is also the value used as fallback for [member StyleBox."
"content_margin_right] if it is negative."
msgstr ""
-"增加 3×3 StyleBoxçš„å³è¾¹è·ã€‚\n"
+"增加 3×3 StyleBox çš„å³è¾¹è·ã€‚\n"
"较高的值æ„å‘³ç€æ›´å¤šçš„æºçº¹ç†è¢«è®¤ä¸ºæ˜¯ 3×3 boxå³è¾¹æ¡†çš„一部分。\n"
-"如果[member StyleBox.content_margin_right]为负值,这个值也是作为åŽå¤‡å€¼ä½¿ç”¨ã€‚"
+"如果 [member StyleBox.content_margin_right] 为负值,这个值也是作为åŽå¤‡å€¼ä½¿"
+"用。"
#: doc/classes/StyleBoxTexture.xml
msgid ""
@@ -73748,9 +75015,9 @@ msgid ""
"This is also the value used as fallback for [member StyleBox."
"content_margin_top] if it is negative."
msgstr ""
-"增加 3×3 StyleBox的上边è·ã€‚\n"
+"增加 3×3 StyleBox 的上边è·ã€‚\n"
"较高的值æ„å‘³ç€æ›´å¤šçš„æºçº¹ç†è¢«è®¤ä¸ºæ˜¯ 3×3 box上边框的一部分。\n"
-"如果[member StyleBox.content_margin_top]为负值,这个值也是作为åŽå¤‡å€¼ä½¿ç”¨ã€‚"
+"如果 [member StyleBox.content_margin_top] 为负值,这个值也是作为åŽå¤‡å€¼ä½¿ç”¨ã€‚"
#: doc/classes/StyleBoxTexture.xml
msgid "Modulates the color of the texture when this style box is drawn."
@@ -73869,8 +75136,7 @@ msgid ""
"Specifies an array of bones to use for the [i]next[/i] vertex. [code]bones[/"
"code] must contain 4 integers."
msgstr ""
-"指定[i]下一个[/i]顶点所使用的骨骼数组。 [code]bones[/code] å¿…é¡»åŒ…å« 4 个整"
-"数。"
+"指定[i]下一个[/i]顶点所使用的骨骼数组。[code]bones[/code] å¿…é¡»åŒ…å« 4 个整数。"
#: doc/classes/SurfaceTool.xml
msgid ""
@@ -73957,9 +75223,9 @@ 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 个值。"
-"如果æ¯ä¸ªé¡¶ç‚¹éƒ½éœ€è¦è®¾ç½®æ­¤ä¿¡æ¯ï¼Œè€Œæ‚¨æœªèƒ½ä¸ºç¬¬ä¸€ä¸ªé¡¶ç‚¹æäº¤æ­¤ä¿¡æ¯ï¼Œæ­¤ä¿¡æ¯å¯èƒ½æ ¹æœ¬"
-"å°±ä¸ä¼šè¢«ä½¿ç”¨ã€‚"
+"指定[i]下一个[/i]顶点所使用的æƒé‡å€¼ã€‚[code]weights[/code] å¿…é¡»åŒ…å« 4 个值。如"
+"æžœæ¯ä¸ªé¡¶ç‚¹éƒ½éœ€è¦è®¾ç½®æ­¤ä¿¡æ¯ï¼Œè€Œæ‚¨æœªèƒ½ä¸ºç¬¬ä¸€ä¸ªé¡¶ç‚¹æäº¤æ­¤ä¿¡æ¯ï¼Œæ­¤ä¿¡æ¯å¯èƒ½æ ¹æœ¬å°±"
+"ä¸ä¼šè¢«ä½¿ç”¨ã€‚"
#: doc/classes/SurfaceTool.xml
msgid ""
@@ -74042,7 +75308,7 @@ msgid ""
"be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
msgstr ""
"ä»Žé¡¶ç‚¹ç”Ÿæˆæ³•线,因此您ä¸å¿…手动执行。如果 [code]flip[/code] 为 [code]true[/"
-"code],则生æˆçš„æ³•线将被å转。 [method generate_normals] 应在生æˆå‡ ä½•体[i]之åŽ"
+"code],则生æˆçš„æ³•线将被å转。[method generate_normals] 应在生æˆå‡ ä½•体[i]之åŽ"
"[/i] 调用,在[i]之å‰[/i]使用 [method commit] 或 [method commit_to_arrays] æ"
"交网格。为了正确显示法线贴图表é¢ï¼Œæ‚¨è¿˜å¿…须使用 [method generate_tangents] 生"
"æˆåˆ‡çº¿ã€‚\n"
@@ -74223,7 +75489,7 @@ msgstr ""
#: doc/classes/TabContainer.xml doc/classes/Tabs.xml
msgid "If [code]true[/code], tabs can be rearranged with mouse drag."
-msgstr "如果 [code]true[/code],å¯ä»¥é€šè¿‡é¼ æ ‡æ‹–åŠ¨é‡æ–°æŽ’列选项å¡ã€‚"
+msgstr "如果为 [code]true[/code],å¯ä»¥é€šè¿‡é¼ æ ‡æ‹–åŠ¨é‡æ–°æŽ’列选项å¡ã€‚"
#: doc/classes/TabContainer.xml
msgid ""
@@ -74237,8 +75503,8 @@ msgid ""
"If [code]true[/code], tabs are visible. If [code]false[/code], tabs' content "
"and titles are hidden."
msgstr ""
-"如果 [code]true[/code],选项å¡å¯è§ã€‚如果 [code]false[/code],选项å¡çš„内容和标"
-"题被éšè—。"
+"如果为 [code]true[/code],选项å¡å¯è§ã€‚如果 [code]false[/code],选项å¡çš„内容和"
+"标题被éšè—。"
#: doc/classes/TabContainer.xml
msgid ""
@@ -74246,8 +75512,8 @@ msgid ""
"minimum size take into account in the total, instead of only the currently "
"visible one."
msgstr ""
-"如果 [code]true[/code],éšè—çš„å­ [Control] 节点在总数中考虑其最å°å¤§å°ï¼Œè€Œä¸æ˜¯"
-"仅考虑当å‰å¯è§çš„一个。"
+"如果为 [code]true[/code],éšè—çš„å­ [Control] 节点在总数中考虑其最å°å¤§å°ï¼Œè€Œä¸"
+"是仅考虑当å‰å¯è§çš„一个。"
#: doc/classes/TabContainer.xml
msgid ""
@@ -74337,13 +75603,13 @@ msgstr ""
#: doc/classes/TabContainer.xml
msgid "The icon for the menu button (see [method set_popup])."
-msgstr "èœå•按钮的图标(è§[method set_popup])。"
+msgstr "èœå•æŒ‰é’®çš„å›¾æ ‡ï¼ˆè§ [method set_popup])。"
#: doc/classes/TabContainer.xml
msgid ""
"The icon for the menu button (see [method set_popup]) when it's being "
"hovered with the cursor."
-msgstr "å½“å…‰æ ‡æ‚¬åœæ—¶èœå•按钮的图标(å‚阅 [method set_popup])。"
+msgstr "å½“å…‰æ ‡æ‚¬åœæ—¶èœå•æŒ‰é’®çš„å›¾æ ‡ï¼ˆè§ [method set_popup])。"
#: doc/classes/TabContainer.xml
msgid "The style for the background fill."
@@ -74370,7 +75636,7 @@ msgid ""
"Simple tabs control, similar to [TabContainer] but is only in charge of "
"drawing tabs, not interacting with children."
msgstr ""
-"简å•çš„é€‰é¡¹å¡æŽ§åˆ¶ï¼Œç±»ä¼¼äºŽ[TabContainer],但åªè´Ÿè´£ç»˜åˆ¶é€‰é¡¹å¡ï¼Œä¸ä¸Žå­èŠ‚ç‚¹äº’åŠ¨ã€‚"
+"简å•çš„é€‰é¡¹å¡æŽ§åˆ¶ï¼Œç±»ä¼¼äºŽ [TabContainer],但åªè´Ÿè´£ç»˜åˆ¶é€‰é¡¹å¡ï¼Œä¸ä¸Žå­èŠ‚ç‚¹äº’åŠ¨ã€‚"
#: doc/classes/Tabs.xml
msgid "Adds a new tab."
@@ -74419,7 +75685,7 @@ msgstr "删除索引 [code]tab_idx[/code] 处的选项å¡ã€‚"
#: doc/classes/Tabs.xml
msgid ""
"If [code]true[/code], enables selecting a tab with the right mouse button."
-msgstr "如果 [code]true[/code],å¯ç”¨é¼ æ ‡å³é”®é€‰æ‹©é€‰é¡¹å¡ã€‚"
+msgstr "如果为 [code]true[/code],å¯ç”¨é¼ æ ‡å³é”®é€‰æ‹©é€‰é¡¹å¡ã€‚"
#: doc/classes/Tabs.xml
msgid "Sets an [code]icon[/code] for the tab at index [code]tab_idx[/code]."
@@ -74446,7 +75712,7 @@ msgstr "选择索引 [code]tab_idx[/code] 处的选项å¡ã€‚"
msgid ""
"if [code]true[/code], the mouse's scroll wheel can be used to navigate the "
"scroll view."
-msgstr "如果 [code]true[/code],鼠标的滚轮å¯ç”¨äºŽå¯¼èˆªæ»šåŠ¨è§†å›¾ã€‚"
+msgstr "如果为 [code]true[/code],鼠标的滚轮å¯ç”¨äºŽå¯¼èˆªæ»šåŠ¨è§†å›¾ã€‚"
#: doc/classes/Tabs.xml
msgid "The alignment of all tabs. See [enum TabAlign] for details."
@@ -74510,7 +75776,7 @@ msgstr "选项å¡ä¹‹é—´çš„æ°´å¹³é—´éš”。"
#: doc/classes/Tabs.xml
msgid "The icon for the close button (see [member tab_close_display_policy])."
-msgstr "关闭按钮的图标(å‚阅 [member tab_close_display_policy])。"
+msgstr "å…³é—­æŒ‰é’®çš„å›¾æ ‡ï¼ˆè§ [member tab_close_display_policy])。"
#: doc/classes/Tabs.xml
msgid "Background of the close button when it's being hovered with the cursor."
@@ -74679,11 +75945,11 @@ msgstr "å–æ¶ˆå½“å‰é€‰æ‹©ã€‚"
#: doc/classes/TextEdit.xml
msgid "Folds all lines that are possible to be folded (see [method can_fold])."
-msgstr "æŠ˜å æ‰€æœ‰å¯èƒ½è¢«æŠ˜å çš„行(å‚阅 [method can_fold])。"
+msgstr "æŠ˜å æ‰€æœ‰å¯èƒ½è¢«æŠ˜å çš„è¡Œï¼ˆè§ [method can_fold])。"
#: doc/classes/TextEdit.xml
msgid "Folds the given line, if possible (see [method can_fold])."
-msgstr "如果å¯èƒ½ï¼ŒæŠ˜å ç»™å®šçš„行(å‚阅 [method can_fold])。"
+msgstr "如果å¯èƒ½ï¼ŒæŠ˜å ç»™å®šçš„è¡Œï¼ˆè§ [method can_fold])。"
#: doc/classes/TextEdit.xml
msgid "Returns an array containing the line number of each breakpoint."
@@ -74947,7 +76213,7 @@ msgstr ""
#: doc/classes/TextEdit.xml
msgid "If [code]true[/code], hides the line of the specified index."
-msgstr "如果 [code]true[/code],éšè—指定索引的行。"
+msgstr "如果为 [code]true[/code],éšè—指定索引的行。"
#: doc/classes/TextEdit.xml
msgid ""
@@ -75009,43 +76275,43 @@ msgstr "为 [code]true[/code] æ—¶å³é”®å•击会显示上下文èœå•。"
msgid ""
"If [code]true[/code], the \"space\" character will have a visible "
"representation."
-msgstr "如果 [code]true[/code],“空格â€å­—符将具有å¯è§è¡¨ç¤ºå½¢å¼ã€‚"
+msgstr "如果为 [code]true[/code],“空格â€å­—符将具有å¯è§è¡¨ç¤ºå½¢å¼ã€‚"
#: doc/classes/TextEdit.xml
msgid ""
"If [code]true[/code], the \"tab\" character will have a visible "
"representation."
-msgstr "如果 [code]true[/code],“制表符â€å­—符将具有å¯è§è¡¨ç¤ºå½¢å¼ã€‚"
+msgstr "如果为 [code]true[/code],“制表符â€å­—符将具有å¯è§è¡¨ç¤ºå½¢å¼ã€‚"
#: doc/classes/TextEdit.xml
msgid ""
"If [code]true[/code], the fold gutter is visible. This enables folding "
"groups of indented lines."
-msgstr "如果 [code]true[/code]ï¼Œåˆ™æŠ˜å æ å¯è§ã€‚è¿™å…许折å ç¼©è¿›è¡Œã€‚"
+msgstr "如果为 [code]true[/code]ï¼Œåˆ™æŠ˜å æ å¯è§ã€‚è¿™å…许折å ç¼©è¿›è¡Œã€‚"
#: doc/classes/TextEdit.xml
msgid ""
"If [code]true[/code], all lines that have been set to hidden by [method "
"set_line_as_hidden], will not be visible."
msgstr ""
-"如果 [code]true[/code],所有已被 [method set_line_as_hidden] 设置为éšè—的行将"
-"ä¸å¯è§ã€‚"
+"如果为 [code]true[/code],所有已被 [method set_line_as_hidden] 设置为éšè—的行"
+"å°†ä¸å¯è§ã€‚"
#: doc/classes/TextEdit.xml
msgid ""
"If [code]true[/code], all occurrences of the selected text will be "
"highlighted."
-msgstr "如果 [code]true[/code],所选文本的所有匹é…项都将çªå‡ºæ˜¾ç¤ºã€‚"
+msgstr "如果为 [code]true[/code],所选文本的所有匹é…项都将çªå‡ºæ˜¾ç¤ºã€‚"
#: doc/classes/TextEdit.xml
msgid "If [code]true[/code], the line containing the cursor is highlighted."
-msgstr "如果 [code]true[/code],则包å«å…‰æ ‡çš„行会çªå‡ºæ˜¾ç¤ºã€‚"
+msgstr "如果为 [code]true[/code],则包å«å…‰æ ‡çš„行会çªå‡ºæ˜¾ç¤ºã€‚"
#: doc/classes/TextEdit.xml
msgid ""
"If [code]true[/code], a minimap is shown, providing an outline of your "
"source code."
-msgstr "如果 [code]true[/code],则显示å°åœ°å›¾ï¼Œæä¾›æºä»£ç çš„æ¦‚è¦ã€‚"
+msgstr "如果为 [code]true[/code],则显示å°åœ°å›¾ï¼Œæä¾›æºä»£ç çš„æ¦‚è¦ã€‚"
#: doc/classes/TextEdit.xml
msgid "The width, in pixels, of the minimap."
@@ -75056,16 +76322,16 @@ msgid ""
"If [code]true[/code], custom [code]font_color_selected[/code] will be used "
"for selected text."
msgstr ""
-"如果 [code]true[/code],自定义 [code]font_color_selected[/code] 将用于所选文"
-"本。"
+"如果为 [code]true[/code],自定义 [code]font_color_selected[/code] 将用于所选"
+"文本。"
#: doc/classes/TextEdit.xml
msgid ""
"If [code]true[/code], read-only mode is enabled. Existing text cannot be "
"modified and new text cannot be added."
msgstr ""
-"如果[code]true[/code],å¯ç”¨åªè¯»æ¨¡å¼ã€‚现有的文本ä¸èƒ½è¢«ä¿®æ”¹ï¼Œæ–°çš„æ–‡æœ¬ä¸èƒ½è¢«æ·»"
-"加。"
+"如果为 [code]true[/code],å¯ç”¨åªè¯»æ¨¡å¼ã€‚现有的文本ä¸èƒ½è¢«ä¿®æ”¹ï¼Œæ–°çš„æ–‡æœ¬ä¸èƒ½è¢«"
+"添加。"
#: doc/classes/TextEdit.xml
msgid ""
@@ -75086,9 +76352,9 @@ msgid ""
"If [code]false[/code], text can not be selected by the user or by the "
"[method select] or [method select_all] methods."
msgstr ""
-"如果[code]true[/code],文本å¯ä»¥è¢«é€‰æ‹©ã€‚\n"
-"如果[code]false[/code],用户或使用[method select]或[method select_all]方法都"
-"ä¸èƒ½é€‰æ‹©æ–‡æœ¬ã€‚"
+"如果为 [code]true[/code],文本å¯ä»¥è¢«é€‰æ‹©ã€‚\n"
+"如果为 [code]false[/code],用户或使用[method select]或[method select_all]方法"
+"都ä¸èƒ½é€‰æ‹©æ–‡æœ¬ã€‚"
#: doc/classes/TextEdit.xml
msgid ""
@@ -75101,22 +76367,22 @@ msgstr ""
#: doc/classes/TextEdit.xml
msgid ""
"If [code]true[/code], line numbers are displayed to the left of the text."
-msgstr "如果 [code]true[/code]ï¼Œè¡Œå·æ˜¾ç¤ºåœ¨æ–‡æœ¬çš„左侧。"
+msgstr "如果为 [code]true[/code]ï¼Œè¡Œå·æ˜¾ç¤ºåœ¨æ–‡æœ¬çš„左侧。"
#: doc/classes/TextEdit.xml
msgid ""
"If [code]true[/code], sets the [code]step[/code] of the scrollbars to "
"[code]0.25[/code] which results in smoother scrolling."
msgstr ""
-"如果 [code]true[/code],将滚动æ¡çš„æ­¥é•¿ [code]step[/code] 设置为 [code]0.25[/"
-"code],从而使滚动更加平滑。"
+"如果为 [code]true[/code],将滚动æ¡çš„æ­¥é•¿ [code]step[/code] 设置为 "
+"[code]0.25[/code],从而使滚动更加平滑。"
#: doc/classes/TextEdit.xml
msgid ""
"If [code]true[/code], any custom color properties that have been set for "
"this [TextEdit] will be visible."
msgstr ""
-"如果 [code]true[/code],为此 [TextEdit] 设置的任何自定义颜色属性都将å¯è§ã€‚"
+"如果为 [code]true[/code],为此 [TextEdit] 设置的任何自定义颜色属性都将å¯è§ã€‚"
#: doc/classes/TextEdit.xml
msgid "String value of the [TextEdit]."
@@ -75130,7 +76396,7 @@ msgstr "åž‚ç›´æ»šåŠ¨çš„çµæ•度。"
msgid ""
"If [code]true[/code], enables text wrapping when it goes beyond the edge of "
"what is visible."
-msgstr "如果 [code]true[/code],当文本超出å¯è§è¾¹ç¼˜æ—¶å¯ç”¨æ–‡æœ¬æ¢è¡Œã€‚"
+msgstr "如果为 [code]true[/code],当文本超出å¯è§è¾¹ç¼˜æ—¶å¯ç”¨æ–‡æœ¬æ¢è¡Œã€‚"
#: doc/classes/TextEdit.xml
msgid "Emitted when a breakpoint is placed via the breakpoint gutter."
@@ -75338,16 +76604,16 @@ msgid ""
"canvas_item_add_texture_rect] with a rect at [code]position[/code] and the "
"size of this [Texture]."
msgstr ""
-"在指定的ä½ç½®[code]position[/code]使用[VisualServer]APIçš„[CanvasItem]æ¥ç»˜åˆ¶çº¹"
-"ç†ã€‚相当于[method VisualServer.canvas_item_add_texture_rect],在ä½ç½®"
-"[code]position[/code]有一个矩形,尺寸为这个[Texture]。"
+"在指定的ä½ç½® [code]position[/code] 使用 [VisualServer] API çš„ [CanvasItem] æ¥"
+"绘制纹ç†ã€‚相当于 [method VisualServer.canvas_item_add_texture_rect],在ä½ç½® "
+"[code]position[/code] 有一个矩形,尺寸为这个 [Texture]。"
#: doc/classes/Texture.xml
msgid ""
"Draws the texture using a [CanvasItem] with the [VisualServer] API. "
"Equivalent to [method VisualServer.canvas_item_add_texture_rect]."
msgstr ""
-"使用 [VisualServer] API çš„ [CanvasItem] æ¥ç»˜åˆ¶çº¹ç†ã€‚相当于方法 [method "
+"使用 [VisualServer] API çš„ [CanvasItem] æ¥ç»˜åˆ¶çº¹ç†ã€‚相当于 [method "
"VisualServer.canvas_item_add_texture_rect]。"
#: doc/classes/Texture.xml
@@ -75355,16 +76621,16 @@ 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 ""
-"使用 [VisualServer] API çš„ [CanvasItem] æ¥ç»˜åˆ¶çº¹ç†çš„一个部分。相当于方法 "
-"[method VisualServer.canvas_item_add_texture_rect_region]。"
+"使用 [VisualServer] API çš„ [CanvasItem] æ¥ç»˜åˆ¶çº¹ç†çš„一个部分。相当于 [method "
+"VisualServer.canvas_item_add_texture_rect_region]。"
#: doc/classes/Texture.xml
msgid ""
"Returns an [Image] that is a copy of data from this [Texture]. [Image]s can "
"be accessed and manipulated directly."
msgstr ""
-"返回一个 [Image],它是此 [Texture] 中数æ®çš„副本。 [Image] 图åƒå¯ä»¥ç›´æŽ¥è®¿é—®å’Œ"
-"æ“作。"
+"返回一个 [Image],它是此 [Texture] 中数æ®çš„副本。[Image] 图åƒå¯ä»¥ç›´æŽ¥è®¿é—®å’Œæ“"
+"作。"
#: doc/classes/Texture.xml
msgid "Returns the texture height."
@@ -75698,7 +76964,7 @@ msgstr "返回纹ç†çš„æ·±åº¦ã€‚深度是第三个维度(通常是 Z 轴)。
msgid ""
"Returns the current format being used by this texture. See [enum Image."
"Format] for details."
-msgstr "返回纹ç†å½“å‰ä½¿ç”¨çš„æ ¼å¼ã€‚详情è§[enum Image.Format]。"
+msgstr "返回纹ç†å½“å‰ä½¿ç”¨çš„æ ¼å¼ã€‚è¯¦æƒ…è§ [enum Image.Format]。"
#: doc/classes/TextureLayered.xml
msgid ""
@@ -75725,8 +76991,8 @@ msgid ""
"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] 必须适åˆçº¹ç†ã€‚"
+"的数æ®ã€‚[code]x_offset[/code] å’Œ [code]y_offset[/code] 确定 [Image] 在纹ç†ä¸Š"
+"\"stamped\" 标记的ä½ç½®ã€‚[code]image[/code] 必须适åˆçº¹ç†ã€‚"
#: doc/classes/TextureLayered.xml
msgid ""
@@ -75747,7 +77013,7 @@ msgid ""
"Default flags for [TextureArray]. [constant FLAG_MIPMAPS], [constant "
"FLAG_REPEAT] and [constant FLAG_FILTER] are enabled."
msgstr ""
-"[TextureArray] 的默认标记。 å¯ç”¨ [constant FLAG_MIPMAPS]ã€[constant "
+"[TextureArray] 的默认标记。å¯ç”¨ [constant FLAG_MIPMAPS]ã€[constant "
"FLAG_REPEAT] 和 [constant FLAG_FILTER]。"
#: doc/classes/TextureLayered.xml
@@ -75760,7 +77026,7 @@ msgstr "纹ç†å°†åœ¨åˆ›å»ºæ—¶ç”Ÿæˆå¤šçº§æ¸è¿œçº¹ç†ã€‚"
#: doc/classes/TextureLayered.xml
msgid "Texture will repeat when UV used is outside the 0-1 range."
-msgstr "当使用的UV超出0-1范围时,纹ç†å°†é‡å¤ã€‚"
+msgstr "当使用的 UV 超出 0-1 范围时,纹ç†å°†é‡å¤ã€‚"
#: doc/classes/TextureLayered.xml
msgid ""
@@ -75783,12 +77049,12 @@ msgid ""
"of Godot's [Theme] resource. It can be used to create horizontal, vertical "
"and radial progress bars."
msgstr ""
-"TextureProgress的工作原ç†ä¸Ž[ProgressBar]类似,但最多使用3个纹ç†ï¼Œè€Œä¸æ˜¯Godot"
-"çš„[Theme]资æºã€‚它å¯ä»¥ç”¨æ¥åˆ›å»ºæ°´å¹³ã€åž‚直和径å‘的进度æ¡ã€‚"
+"TextureProgress 的工作原ç†ä¸Ž [ProgressBar] 类似,但最多使用 3 个纹ç†ï¼Œè€Œä¸æ˜¯ "
+"Godot çš„ [Theme] 资æºã€‚它å¯ä»¥ç”¨æ¥åˆ›å»ºæ°´å¹³ã€åž‚直和径å‘的进度æ¡ã€‚"
#: doc/classes/TextureProgress.xml
msgid "The fill direction. See [enum FillMode] for possible values."
-msgstr "å¡«å……æ–¹å‘。有关å¯èƒ½çš„值,å‚阅[enum FillMode]。"
+msgstr "å¡«å……æ–¹å‘。å¯èƒ½çš„å–å€¼è§ [enum FillMode]。"
#: doc/classes/TextureProgress.xml
msgid ""
@@ -75797,9 +77063,10 @@ msgid ""
"[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 ""
-"如果[code]true[/code],Godot会åƒåœ¨[NinePatchRect]ä¸­é‚£æ ·å¤„ç†æ¡å½¢çº¹ç†ã€‚使用"
-"[code]stretch_margin_*[/code]属性,如[member stretch_margin_bottom]æ¥è®¾ç½®ä¹å®«"
-"格的3×3网格。当使用径å‘çš„[member fill_mode]时,这个设置将å¯ç”¨æ‹‰ä¼¸åŠŸèƒ½ã€‚"
+"如果为 [code]true[/code],Godot 会åƒåœ¨ [NinePatchRect] ä¸­é‚£æ ·å¤„ç†æ¡å½¢çº¹ç†ã€‚使"
+"用 [code]stretch_margin_*[/code] 属性,如 [member stretch_margin_bottom] æ¥è®¾"
+"ç½®ä¹å®«æ ¼çš„ 3×3 网格。当使用径å‘çš„ [member fill_mode] 时,这个设置将å¯ç”¨æ‹‰ä¼¸åŠŸ"
+"能。"
#: doc/classes/TextureProgress.xml
msgid ""
@@ -75842,8 +77109,8 @@ msgid ""
"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 ""
-"ä¹å®«æ ¼åº•行的高度。边è·ä¸º16æ„味ç€ä¹å®«æ ¼çš„底角和侧é¢å°†æœ‰16åƒç´ çš„高度。你å¯ä»¥å•"
-"独设置所有4个边è·å€¼ï¼Œæ¥åˆ›å»ºå…·æœ‰éžç»Ÿä¸€è¾¹æ¡†çš„颿¿ã€‚"
+"ä¹å®«æ ¼åº•行的高度。边è·ä¸º 16 æ„味ç€ä¹å®«æ ¼çš„底角和侧é¢å°†æœ‰ 16 åƒç´ çš„高度。你å¯"
+"以å•独设置所有 4 个边è·å€¼ï¼Œæ¥åˆ›å»ºå…·æœ‰éžç»Ÿä¸€è¾¹æ¡†çš„颿¿ã€‚"
#: doc/classes/TextureProgress.xml
msgid "The width of the 9-patch's left column."
@@ -75874,12 +77141,12 @@ msgid ""
"The [code]value[/code] property comes from [Range]. See [member Range."
"value], [member Range.min_value], [member Range.max_value]."
msgstr ""
-"基于节点的[code]value[/code]å’Œ[member fill_mode]进行è£å‰ª[Texture]。éšç€"
-"[code]value[/code]的增加,纹ç†ä¼šè¢«å¡«æ»¡ã€‚当[code]value[/code]达到"
-"[code]max_value[/code]时,它完全显示。如果[code]value[/code]等于"
+"基于节点的 [code]value[/code] å’Œ [member fill_mode] 进行è£å‰ª [Texture]。éšç€ "
+"[code]value[/code] 的增加,纹ç†ä¼šè¢«å¡«æ»¡ã€‚当 [code]value[/code] 达到 "
+"[code]max_value[/code] 时,它完全显示。如果 [code]value[/code] 等于 "
"[code]min_value[/code]ï¼Œå®ƒå°±å®Œå…¨ä¸æ˜¾ç¤ºäº†ã€‚\n"
-"[code]value[/code]属性æ¥è‡ª[Range]。å‚阅[member Range.value], [member Range."
-"min_value], [member Range.max_value]。"
+"[code]value[/code] 属性æ¥è‡ª [Range]ã€‚è§ [member Range.value]ã€[member Range."
+"min_value]ã€[member Range.max_value]。"
#: doc/classes/TextureProgress.xml
msgid ""
@@ -75887,12 +77154,12 @@ msgid ""
"and [member texture_under] with fancy borders, to avoid transparent margins "
"in your progress texture."
msgstr ""
-"[member texture_progress]çš„åç§»é‡ã€‚对于带有花哨的边框的[member texture_over]"
-"å’Œ[member texture_under]很有用,å¯ä»¥é¿å…进度纹ç†çš„è¾¹ç¼˜é€æ˜Žã€‚"
+"[member texture_progress] çš„åç§»é‡ã€‚对于带有花哨的边框的 [member "
+"texture_over] å’Œ [member texture_under] 很有用,å¯ä»¥é¿å…进度纹ç†çš„è¾¹ç¼˜é€æ˜Žã€‚"
#: doc/classes/TextureProgress.xml
msgid "[Texture] that draws under the progress bar. The bar's background."
-msgstr "在进度æ¡ä¸‹é¢ç»˜åˆ¶çš„[Texture]。å³èƒŒæ™¯ã€‚"
+msgstr "在进度æ¡ä¸‹é¢ç»˜åˆ¶çš„ [Texture]。å³èƒŒæ™¯ã€‚"
#: doc/classes/TextureProgress.xml
msgid ""
@@ -75914,7 +77181,7 @@ msgstr "å°†æ¡å½¢çš„ [code]texture_under[/code] 纹ç†çš„颜色相乘。"
#: doc/classes/TextureProgress.xml
msgid "The [member texture_progress] fills from left to right."
-msgstr "[member texture_progress]从左到å³å¡«å……。"
+msgstr "[member texture_progress] 从左到å³å¡«å……。"
#: doc/classes/TextureProgress.xml
msgid "The [member texture_progress] fills from right to left."
@@ -76000,7 +77267,7 @@ msgstr "如果为 [code]true[/code],纹ç†ç¼©æ”¾ä»¥é€‚åˆå…¶è¾¹ç•ŒçŸ©å½¢ã€‚"
msgid ""
"Controls the texture's behavior when resizing the node's bounding rectangle. "
"See [enum StretchMode]."
-msgstr "控件纹ç†åœ¨è°ƒæ•´èŠ‚ç‚¹è¾¹ç•ŒçŸ©å½¢æ—¶çš„è¡Œä¸ºã€‚å‚阅[enum StretchMode]。"
+msgstr "控件纹ç†åœ¨è°ƒæ•´èŠ‚ç‚¹è¾¹ç•ŒçŸ©å½¢æ—¶çš„è¡Œä¸ºã€‚è§ [enum StretchMode]。"
#: doc/classes/TextureRect.xml
msgid "The node's [Texture] resource."
@@ -76136,14 +77403,14 @@ 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 ""
-"返回所有的[Color]类型为[PoolStringArray],其中填充了唯一类型å称,供[method "
-"get_color]和/或[method get_color_list]使用。"
+"返回所有的 [Color] 类型为 [PoolStringArray],其中填充了唯一类型å称,供 "
+"[method get_color] 和/或 [method get_color_list] 使用。"
#: doc/classes/Theme.xml
msgid ""
"Returns the constant at [code]name[/code] if the theme has [code]node_type[/"
"code]."
-msgstr "如果主题有[code]node_type[/code],返回 [code]name[/code]处的常é‡ã€‚"
+msgstr "如果主题有 [code]node_type[/code],返回 [code]name[/code] 处的常é‡ã€‚"
#: doc/classes/Theme.xml
msgid ""
@@ -76151,8 +77418,8 @@ msgid ""
"name, for use in [method get_constant], if the theme has [code]node_type[/"
"code]."
msgstr ""
-"如果主题有[code]node_type[/code],将所有常é‡ä½œä¸º[PoolStringArray]返回,并填充"
-"æ¯ä¸ªå¸¸é‡çš„å称,以供[method get_constant]使用。"
+"如果主题有 [code]node_type[/code],将所有常é‡ä½œä¸º [PoolStringArray] 返回,并"
+"å¡«å……æ¯ä¸ªå¸¸é‡çš„å称,以供 [method get_constant] 使用。"
#: doc/classes/Theme.xml
msgid ""
@@ -76178,8 +77445,8 @@ 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 ""
-"如果主题有[code]node_type[/code],将所有的[Font]作为[PoolStringArray]返回,并"
-"å¡«å…¥æ¯ä¸ª[Font]çš„å称,以供[method get_font]使用。"
+"如果主题有 [code]node_type[/code],将所有的 [Font] 作为 [PoolStringArray] 返"
+"回,并填入æ¯ä¸ª [Font] çš„å称,以供 [method get_font] 使用。"
#: doc/classes/Theme.xml
msgid ""
@@ -76368,9 +77635,9 @@ msgid ""
"[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 ""
-"如果一个[code]data_type[/code]的主题项目与[code]name[/code]在"
-"[code]node_type[/code]中,则返回 [code]true[/code]。\n"
-"如果该主题没有[code]node_type[/code],则返回 [code]false[/code]。"
+"如果一个 [code]data_type[/code] 的主题项目与 [code]name[/code] 在 "
+"[code]node_type[/code] 中,则返回 [code]true[/code]。\n"
+"如果该主题没有 [code]node_type[/code],则返回 [code]false[/code]。"
#: doc/classes/Theme.xml
msgid ""
@@ -76388,7 +77655,7 @@ msgid ""
"themes together without modifying either one, create a new empty theme and "
"merge the other two into it one after another."
msgstr ""
-"用[code]other[/code][Theme]的值添加缺失的,和覆盖现有的定义。\n"
+"用 [code]other[/code] [Theme]的值添加缺失的,和覆盖现有的定义。\n"
"[b]注æ„:[/b]这将修改当å‰çš„主题。如果你想在ä¸ä¿®æ”¹ä»»ä½•一个主题的情况下将两个主"
"题åˆå¹¶åœ¨ä¸€èµ·ï¼Œè¯·åˆ›å»ºä¸€ä¸ªæ–°çš„空主题,然åŽå°†å¦å¤–两个主题é€ä¸ªåˆå¹¶åˆ°å…¶ä¸­ã€‚"
@@ -76407,8 +77674,8 @@ msgid ""
"theme has [code]node_type[/code]. If [code]name[/code] is already taken, "
"this method fails."
msgstr ""
-"如果主题有[code]node_type[/code],则将[code]old_name[/code]çš„[Color]é‡å‘½å为"
-"[code]name[/code]。如果[code]name[/code]å·²ç»è¢«å ç”¨ï¼Œåˆ™æ­¤æ–¹æ³•将失败。"
+"如果主题有 [code]node_type[/code],则将 [code]old_name[/code] çš„ [Color] é‡å‘½"
+"å为 [code]name[/code]。如果 [code]name[/code] å·²ç»è¢«å ç”¨ï¼Œåˆ™æ­¤æ–¹æ³•将失败。"
#: doc/classes/Theme.xml
msgid ""
@@ -76416,8 +77683,8 @@ msgid ""
"theme has [code]node_type[/code]. If [code]name[/code] is already taken, "
"this method fails."
msgstr ""
-"如果主题有[code]node_type[/code],则将[code]old_name[/code]的常é‡é‡å‘½å为"
-"[code]name[/code]。如果[code]name[/code]å·²ç»è¢«å ç”¨ï¼Œåˆ™æ­¤æ–¹æ³•失败。"
+"如果主题有 [code]node_type[/code],则将 [code]old_name[/code] 的常é‡é‡å‘½å为 "
+"[code]name[/code]。如果 [code]name[/code] å·²ç»è¢«å ç”¨ï¼Œåˆ™æ­¤æ–¹æ³•失败。"
#: doc/classes/Theme.xml
msgid ""
@@ -76425,8 +77692,8 @@ msgid ""
"theme has [code]node_type[/code]. If [code]name[/code] is already taken, "
"this method fails."
msgstr ""
-"如果主题有[code]node_type[/code],则将[code]old_name[/code]çš„[Font]é‡å‘½å为"
-"[code]name[/code]。如果[code]name[/code]å·²ç»è¢«å ç”¨ï¼Œåˆ™æ­¤æ–¹æ³•失败。"
+"如果主题有 [code]node_type[/code],则将 [code]old_name[/code] çš„ [Font] é‡å‘½"
+"å为 [code]name[/code]。如果 [code]name[/code] å·²ç»è¢«å ç”¨ï¼Œåˆ™æ­¤æ–¹æ³•失败。"
#: doc/classes/Theme.xml
msgid ""
@@ -76434,8 +77701,8 @@ msgid ""
"has [code]node_type[/code]. If [code]name[/code] is already taken, this "
"method fails."
msgstr ""
-"如果主题有[code]node_type[/code],将[code]old_name[/code]的图标é‡å‘½å为"
-"[code]name[/code]。如果[code]name[/code]å·²ç»è¢«å ç”¨ï¼Œåˆ™æ­¤æ–¹æ³•失败。"
+"如果主题有 [code]node_type[/code],则将 [code]old_name[/code] 的图标é‡å‘½å为 "
+"[code]name[/code]。如果 [code]name[/code] å·²ç»è¢«å ç”¨ï¼Œåˆ™æ­¤æ–¹æ³•失败。"
#: doc/classes/Theme.xml
msgid ""
@@ -76443,8 +77710,8 @@ msgid ""
"theme has [code]node_type[/code]. If [code]name[/code] is already taken, "
"this method fails."
msgstr ""
-"如果主题有[code]node_type[/code],则将[StyleBox]在[code]old_name[/code]é‡å‘½å"
-"为[code]name[/code]。如果[code]name[/code]å·²ç»è¢«å ç”¨ï¼Œæ­¤æ–¹æ³•会失败。"
+"如果主题有 [code]node_type[/code],则将 [StyleBox] 在 [code]old_name[/code] "
+"é‡å‘½å为 [code]name[/code]。如果 [code]name[/code] å·²ç»è¢«å ç”¨ï¼Œæ­¤æ–¹æ³•会失败。"
#: doc/classes/Theme.xml
msgid ""
@@ -76462,7 +77729,7 @@ msgid ""
"[code]node_type[/code].\n"
"Creates [code]node_type[/code] if the theme does not have it."
msgstr ""
-"在[code]node_type[/code]中的[code]name[/code]处,设置主题的[Color]为"
+"在 [code]node_type[/code] 中的 [code]name[/code] 处,设置主题的[Color]为"
"[code]color[/code]。\n"
"如果主题没有[code]node_type[/code],则创建该节点。"
@@ -76472,7 +77739,7 @@ msgid ""
"[code]node_type[/code].\n"
"Creates [code]node_type[/code] if the theme does not have it."
msgstr ""
-"在[code]node_type[/code]中的[code]name[/code]处,将主题的常é‡è®¾ç½®ä¸º"
+"在 [code]node_type[/code] 中的 [code]name[/code] 处,将主题的常é‡è®¾ç½®ä¸º"
"[code]constant[/code]。\n"
"如果主题没有,则创建[code]node_type[/code]。"
@@ -76482,7 +77749,7 @@ msgid ""
"[code]node_type[/code].\n"
"Creates [code]node_type[/code] if the theme does not have it."
msgstr ""
-"在[code]node_type[/code]中的[code]name[/code]处将主题的 [Font] 设置为"
+"在 [code]node_type[/code] 中的 [code]name[/code] 处将主题的 [Font] 设置为"
"[code]font[/code]。\n"
"如果主题没有[code]node_type[/code],则创建该节点。"
@@ -76492,7 +77759,7 @@ msgid ""
"in [code]node_type[/code].\n"
"Creates [code]node_type[/code] if the theme does not have it."
msgstr ""
-"在[code]node_type[/code]中的[code]name[/code]处设置主题的图标[Texture]为"
+"在 [code]node_type[/code] 中的 [code]name[/code] 处设置主题的图标[Texture]为"
"[code]texture[/code]。\n"
"如果主题没有[code]node_type[/code],则创建该节点。"
@@ -76567,11 +77834,11 @@ msgstr "主题的 [Font] 字体项类型。"
#: doc/classes/Theme.xml
msgid "Theme's icon [Texture] item type."
-msgstr "主题的图标[Texture]项类型。"
+msgstr "主题的图标 [Texture] 项类型。"
#: doc/classes/Theme.xml
msgid "Theme's [StyleBox] item type."
-msgstr "主题的[StyleBox]项目类型。"
+msgstr "主题的 [StyleBox] 项目类型。"
#: doc/classes/Theme.xml
msgid "Maximum value for the DataType enum."
@@ -76669,7 +77936,7 @@ msgstr ""
#: doc/classes/Thread.xml
msgid "A thread running with lower priority than normally."
-msgstr "一个线程以比正常情况下更低的优先级è¿è¡Œã€‚"
+msgstr "线程以比正常情况下更低的优先级è¿è¡Œã€‚"
#: doc/classes/Thread.xml
msgid "A thread with a standard priority."
@@ -76830,7 +78097,7 @@ msgstr ""
"[codeblock]\n"
"func set_cell(x, y, tile, flip_x=false, flip_y=false, transpose=false, "
"autotile_coord=Vector2()):\n"
-" # 在这里写下你的自定义逻辑。 \n"
+" # 在这里写下你的自定义逻辑。\n"
" # 调用默认方法:\n"
" .set_cell(x, y, tile, flip_x, flip_y, transpose, autotile_coord)\n"
"[/codeblock]"
@@ -76903,18 +78170,22 @@ msgstr ""
"[/codeblock]"
#: doc/classes/TileMap.xml
+msgid "If [code]true[/code], this TileMap bakes a navigation region."
+msgstr "如果为 [code]true[/code],这个 TileMap 会烘焙导航地区。"
+
+#: doc/classes/TileMap.xml
msgid "If [code]true[/code], the cell's UVs will be clipped."
-msgstr "如果[code]true[/code],å•元格的UV将被剪è£ã€‚"
+msgstr "如果为 [code]true[/code],å•元格的 UV 将被剪è£ã€‚"
#: doc/classes/TileMap.xml
msgid "The custom [Transform2D] to be applied to the TileMap's cells."
-msgstr "将应用到图å—地图的,å•元格的自定义[Transform2D]。"
+msgstr "将应用到 TileMap 的,å•元格的自定义 [Transform2D]。"
#: doc/classes/TileMap.xml
msgid ""
"Amount to offset alternating tiles. See [enum HalfOffset] for possible "
"values."
-msgstr "便¬¡æŽ’列的图å—çš„åç§»é‡ã€‚有关å¯èƒ½çš„值,å‚阅[enum HalfOffset]。"
+msgstr "便¬¡æŽ’列的图å—çš„åç§»é‡ã€‚å¯èƒ½çš„å–å€¼è§ [enum HalfOffset]。"
#: doc/classes/TileMap.xml
msgid ""
@@ -76928,13 +78199,13 @@ msgstr "图å—地图的å•元大å°ã€‚"
#: doc/classes/TileMap.xml
msgid "Position for tile origin. See [enum TileOrigin] for possible values."
-msgstr "图å—åŽŸç‚¹çš„åæ ‡ã€‚有关å¯èƒ½çš„值,å‚阅[enum TileOrigin]。"
+msgstr "图å—åŽŸç‚¹çš„åæ ‡ã€‚å¯èƒ½çš„å–å€¼è§ [enum TileOrigin]。"
#: doc/classes/TileMap.xml
msgid ""
"If [code]true[/code], the TileMap's direct children will be drawn in order "
"of their Y coordinate."
-msgstr "如果[code]true[/code],图å—地图的直接å­èŠ‚ç‚¹å°†æŒ‰å…¶Yåæ ‡é¡ºåºç»˜åˆ¶ã€‚"
+msgstr "如果为 [code]true[/code],TileMap 的直接å­èŠ‚ç‚¹å°†æŒ‰å…¶ Y åæ ‡é¡ºåºç»˜åˆ¶ã€‚"
#: doc/classes/TileMap.xml
msgid ""
@@ -76946,12 +78217,12 @@ msgid ""
"If [code]false[/code], the texture position start in the top-left corner "
"unless [member compatibility_mode] is enabled."
msgstr ""
-"如果[code]true[/code],纹ç†å°†è¢«é›†ä¸­åœ¨æ¯ä¸ªå›¾å—的中间。这对æŸäº›ç­‰è·æˆ–上å¸è§†è§’çš„"
-"模å¼å¾ˆæœ‰ç”¨ï¼Œå½“纹ç†è¢«åšå¾—比图å—å¤§æˆ–å°æ—¶ï¼Œä¾‹å¦‚,为了é¿å…瓷砖边缘的闪çƒã€‚åç§»é‡"
-"ä»è¢«åº”用,但从瓦片的中心开始。如果使用,[member compatibility_mode]会被忽"
-"略。\n"
-"如果[code]false[/code],纹ç†å标从左上角开始,除éž[member compatibility_mode]"
-"被å¯ç”¨ã€‚"
+"如果为 [code]true[/code],纹ç†å°†è¢«é›†ä¸­åœ¨æ¯ä¸ªå›¾å—的中间。这对æŸäº›ç­‰è·æˆ–上å¸è§†"
+"角的模å¼å¾ˆæœ‰ç”¨ï¼Œå½“纹ç†è¢«åšå¾—比图å—å¤§æˆ–å°æ—¶ï¼Œä¾‹å¦‚,为了é¿å…图å—边缘的闪çƒã€‚å"
+"ç§»é‡ä»è¢«åº”用,但从图å—的中心开始。如果使用,[member compatibility_mode] 会被"
+"忽略。\n"
+"如果为 [code]false[/code],纹ç†åæ ‡ä»Žå·¦ä¸Šè§’å¼€å§‹ï¼Œé™¤éž [member "
+"compatibility_mode] 被å¯ç”¨ã€‚"
#: doc/classes/TileMap.xml
msgid ""
@@ -76992,16 +78263,16 @@ 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 ""
-"如果[code]true[/code],图å—地图的碰撞将被当作è¿åЍ体处ç†ã€‚如果[code]false[/"
-"code]ï¼Œç¢°æ’žå°†è¢«å½“ä½œé™æ€ä½“æ¥å¤„ç†ã€‚"
+"如果为 [code]true[/code],图å—地图的碰撞将被当作è¿åЍ体处ç†ã€‚如果为 "
+"[code]false[/code]ï¼Œç¢°æ’žå°†è¢«å½“ä½œé™æ€ä½“æ¥å¤„ç†ã€‚"
#: doc/classes/TileMap.xml
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 ""
-"如果[code]true[/code],这个图å—地图的碰撞形状将被添加到父级的碰撞形状中。父级"
-"必须是一个[CollisionObject2D]。"
+"如果为 [code]true[/code],这个图å—地图的碰撞形状将被添加到父级的碰撞形状中。"
+"父级必须是一个[CollisionObject2D]。"
#: doc/classes/TileMap.xml
msgid ""
@@ -77032,7 +78303,11 @@ msgstr ""
#: doc/classes/TileMap.xml
msgid "The TileMap orientation mode. See [enum Mode] for possible values."
-msgstr "图å—åœ°å›¾çš„æ–¹å‘æ¨¡å¼ã€‚有关å¯èƒ½çš„值,å‚阅[enum Mode]。"
+msgstr "图å—åœ°å›¾çš„æ–¹å‘æ¨¡å¼ã€‚å¯èƒ½çš„å–å€¼è§ [enum Mode]。"
+
+#: doc/classes/TileMap.xml
+msgid "The navigation layers the TileMap generates its navigation regions in."
+msgstr "TileMap 生æˆå…¶å¯¼èˆªåœ°åŒºçš„导航层。"
#: doc/classes/TileMap.xml
msgid ""
@@ -77050,9 +78325,9 @@ msgid ""
"runtime, enable [b]Visible Collision Shapes[/b] in the [b]Debug[/b] menu "
"instead."
msgstr ""
-"如果[code]true[/code],碰撞形状在编辑器中是å¯è§çš„。ä¸å½±å“碰撞形状在è¿è¡Œæ—¶çš„å¯"
-"è§æ€§ã€‚è¦åœ¨è¿è¡Œæ—¶æ˜¾ç¤ºç¢°æ’žå½¢çŠ¶ï¼Œè¯·åœ¨[b]调试[/b]èœå•中å¯ç”¨[b]å¯è§çš„碰撞形状[/"
-"b]。"
+"如果为 [code]true[/code],碰撞形状在编辑器中是å¯è§çš„。ä¸å½±å“碰撞形状在è¿è¡Œæ—¶"
+"çš„å¯è§æ€§ã€‚è¦åœ¨è¿è¡Œæ—¶æ˜¾ç¤ºç¢°æ’žå½¢çŠ¶ï¼Œè¯·åœ¨[b]调试[/b]èœå•中å¯ç”¨[b]å¯è§çš„碰撞形状"
+"[/b]。"
#: doc/classes/TileMap.xml
msgid "The assigned [TileSet]."
@@ -77216,7 +78491,7 @@ msgstr ""
#: doc/classes/TileSet.xml
msgid "Sets the [enum BitmaskMode] of the autotile."
-msgstr "设置自动图å—çš„[enum BitmaskMode]ä½æŽ©ç æ¨¡å¼ã€‚"
+msgstr "设置自动图å—çš„ [enum BitmaskMode] ä½æŽ©ç æ¨¡å¼ã€‚"
#: doc/classes/TileSet.xml
msgid ""
@@ -77351,7 +78626,7 @@ msgstr "返回图å—形状的å•å‘碰撞值。"
#: doc/classes/TileSet.xml
msgid "Returns the [Transform2D] of a tile's shape."
-msgstr "返回图å—形状的[Transform2D]。"
+msgstr "返回图å—形状的 [Transform2D]。"
#: doc/classes/TileSet.xml
msgid ""
@@ -77389,7 +78664,7 @@ msgstr "返回图å—的纹ç†åç§»é‡ã€‚"
#: doc/classes/TileSet.xml
msgid "Returns the tile's [enum TileMode]."
-msgstr "返回图å—çš„[enum TileMode]。"
+msgstr "返回图å—çš„ [enum TileMode]。"
#: doc/classes/TileSet.xml
msgid "Returns the tile's Z index (drawing layer)."
@@ -77600,7 +78875,7 @@ msgid ""
"with the exception of Daylight Savings Time as it cannot be determined from "
"the epoch."
msgstr ""
-"将给定的 Unix 时间戳转æ¢ä¸ºå­—典,包å«çš„键为: [code]year[/code]ã€[code]month[/"
+"将给定的 Unix 时间戳转æ¢ä¸ºå­—典,包å«çš„键为:[code]year[/code]ã€[code]month[/"
"code]ã€[code]day[/code]ã€[code]weekday[/code]。\n"
"如果 Unix æ—¶é—´æˆ³ä¸ºå½“å‰æ—¶é—´ï¼Œè¿”回的 Dictionary 的值与 [method "
"get_datetime_dict_from_system] 相åŒï¼ŒåŒºåˆ«æ˜¯æ— æ³•æ ¹æ®çºªå…ƒæŽ¨å®šå¤ä»¤æ—¶ã€‚"
@@ -77620,7 +78895,7 @@ msgid ""
"the middle."
msgstr ""
"将给定的时间值字典转æ¢ä¸º ISO 8601 日期和时间字符串(YYYY-MM-DDTHH:MM:SS)。\n"
-"给定的字典å¯ä»¥åŒ…å«ä»¥ä¸‹é”®ï¼š [code]year[/code]ã€[code]month[/code]ã€[code]day[/"
+"给定的字典å¯ä»¥åŒ…å«ä»¥ä¸‹é”®ï¼š[code]year[/code]ã€[code]month[/code]ã€[code]day[/"
"code]ã€[code]hour[/code]ã€[code]minute[/code]ã€[code]second[/code]。其他的记"
"录(包括 [code]dst[/code])都会被忽略。\n"
"字典为空时将返回 [code]0[/code]。如果çœç•¥äº†éƒ¨åˆ†é”®ï¼Œé»˜è®¤ä½¿ç”¨ Unix 纪元时间戳 0"
@@ -77739,7 +79014,7 @@ msgid ""
"given datetime dictionary."
msgstr ""
"将时间值字典转æ¢ä¸º Unix 时间戳。\n"
-"给定的字典å¯ä»¥åŒ…å«ä»¥ä¸‹é”®ï¼š [code]year[/code]ã€[code]month[/code]ã€[code]day[/"
+"给定的字典å¯ä»¥åŒ…å«ä»¥ä¸‹é”®ï¼š[code]year[/code]ã€[code]month[/code]ã€[code]day[/"
"code]ã€[code]hour[/code]ã€[code]minute[/code]ã€[code]second[/code]。其他的记"
"录(包括 [code]dst[/code])都会被忽略。\n"
"字典为空时将返回 [code]0[/code]。如果çœç•¥äº†éƒ¨åˆ†é”®ï¼Œé»˜è®¤ä½¿ç”¨ Unix 纪元时间戳 0"
@@ -77883,9 +79158,9 @@ msgid ""
"[code]wait_time[/code].\n"
"[b]Note:[/b] This method will not resume a paused timer. See [member paused]."
msgstr ""
-"å¯åŠ¨å®šæ—¶å™¨ã€‚å¦‚æžœ[code]time_sec>0[/code],将[code]wait_time[/code]设置为"
-"[code]time_sec[/code]。这也会将剩余时间é‡ç½®ä¸º[code]wait_time[/code]。\n"
-"[b]注æ„:[/b]这个方法ä¸ä¼šæ¢å¤ä¸€ä¸ªæš‚åœçš„定时器。å‚阅 [member paused]。"
+"å¯åŠ¨å®šæ—¶å™¨ã€‚å¦‚æžœ [code]time_sec > 0[/code],将 [code]wait_time[/code] 设置为 "
+"[code]time_sec[/code]。这也会将剩余时间é‡ç½®ä¸º [code]wait_time[/code]。\n"
+"[b]注æ„:[/b]这个方法ä¸ä¼šæ¢å¤å·²æš‚åœçš„å®šæ—¶å™¨ã€‚è§ [member paused]。"
#: doc/classes/Timer.xml
msgid "Stops the timer."
@@ -77898,7 +79173,7 @@ msgid ""
"[b]Note:[/b] This property is automatically set to [code]false[/code] after "
"the timer enters the scene tree and starts."
msgstr ""
-"如果[code]true[/code],定时器将在进入场景树时自动å¯åŠ¨ã€‚\n"
+"如果为 [code]true[/code],定时器将在进入场景树时自动å¯åŠ¨ã€‚\n"
"[b]注æ„:[/b]在定时器进入场景树并å¯åЍåŽï¼Œè¯¥å±žæ€§ä¼šè‡ªåŠ¨è®¾ç½®ä¸º [code]false[/"
"code]。"
@@ -77907,20 +79182,20 @@ msgid ""
"If [code]true[/code], the timer will stop when reaching 0. If [code]false[/"
"code], it will restart."
msgstr ""
-"如果[code]true[/code],定时器将在达到0æ—¶åœæ­¢ã€‚ 如果[code]false[/code],它将é‡"
-"æ–°å¯åŠ¨ã€‚"
+"如果为 [code]true[/code],定时器将在达到 0 æ—¶åœæ­¢ã€‚如果为 [code]false[/"
+"code]ï¼Œå®ƒå°†é‡æ–°å¯åŠ¨ã€‚"
#: doc/classes/Timer.xml
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 ""
-"如果[code]true[/code],定时器会被暂åœï¼Œå¹¶ä¸”ä¸å†å¤„ç†ï¼Œå³ä½¿è°ƒç”¨[method start],"
-"ç›´åˆ°å®ƒè¢«å–æ¶ˆæš‚åœã€‚"
+"如果为 [code]true[/code],定时器会被暂åœï¼Œå¹¶ä¸”ä¸å†å¤„ç†ï¼Œå³ä½¿è°ƒç”¨ [method "
+"start]ï¼Œç›´åˆ°å®ƒè¢«å–æ¶ˆæš‚åœã€‚"
#: doc/classes/Timer.xml
msgid "Processing mode. See [enum TimerProcessMode]."
-msgstr "å¤„ç†æ¨¡å¼ã€‚å‚阅[enum TimerProcessMode]。"
+msgstr "å¤„ç†æ¨¡å¼ã€‚è§ [enum TimerProcessMode]。"
#: doc/classes/Timer.xml
msgid ""
@@ -77928,8 +79203,9 @@ msgid ""
"[b]Note:[/b] You cannot set this value. To change the timer's remaining "
"time, use [method start]."
msgstr ""
-"定时器的剩余时间,å•使˜¯ç§’ã€‚å¦‚æžœå®šæ—¶å™¨å¤„äºŽéžæ¿€æ´»çжæ€ï¼Œåˆ™è¿”回0。\n"
-"[b]注æ„:[/b]ä½ ä¸èƒ½è®¾ç½®è¿™ä¸ªå€¼ã€‚è¦æ”¹å˜å®šæ—¶å™¨çš„剩余时间,请使用[method start]。"
+"定时器的剩余时间,å•使˜¯ç§’ã€‚å¦‚æžœå®šæ—¶å™¨å¤„äºŽéžæ¿€æ´»çжæ€ï¼Œåˆ™è¿”回 0。\n"
+"[b]注æ„:[/b]ä½ ä¸èƒ½è®¾ç½®è¿™ä¸ªå€¼ã€‚è¦æ”¹å˜å®šæ—¶å™¨çš„剩余时间,请使用 [method "
+"start]。"
#: doc/classes/Timer.xml
msgid ""
@@ -77971,8 +79247,8 @@ msgid ""
"btn.flat = true\n"
"[/codeblock]"
msgstr ""
-"这是一个辅助类,用于生æˆä¸€ä¸ªæ‰å¹³çš„[Button],å‚阅 [member Button.flat],创建一"
-"个[ToolButton]就相当于:\n"
+"这是一个辅助类,用于生æˆä¸€ä¸ªæ‰å¹³çš„ [Button]ï¼ˆè§ [member Button.flat]),创建"
+"一个 [ToolButton] 就相当于:\n"
"[codeblock]\n"
"var btn = Button.new()\n"
"btn.flat = true\n"
@@ -77980,11 +79256,11 @@ msgstr ""
#: doc/classes/ToolButton.xml
msgid "Default text [Color] of the [ToolButton]."
-msgstr "[ToolButton] 的默认文本 [Color]颜色。"
+msgstr "[ToolButton] 的默认文本 [Color] 颜色。"
#: doc/classes/ToolButton.xml
msgid "Text [Color] used when the [ToolButton] is disabled."
-msgstr "ç¦ç”¨ [ToolButton] 时使用的文本 [Color]颜色。"
+msgstr "ç¦ç”¨ [ToolButton] 时使用的文本 [Color] 颜色。"
#: doc/classes/ToolButton.xml
msgid ""
@@ -77997,11 +79273,11 @@ msgstr ""
#: doc/classes/ToolButton.xml
msgid "Text [Color] used when the [ToolButton] is being hovered."
-msgstr "[ToolButton] æ‚¬åœæ—¶ä½¿ç”¨çš„æ–‡æœ¬ [Color]颜色。"
+msgstr "[ToolButton] æ‚¬åœæ—¶ä½¿ç”¨çš„æ–‡æœ¬ [Color] 颜色。"
#: doc/classes/ToolButton.xml
msgid "Text [Color] used when the [ToolButton] is being pressed."
-msgstr "按下 [ToolButton] 时使用的文本 [Color]颜色。"
+msgstr "按下 [ToolButton] 时使用的文本 [Color] 颜色。"
#: doc/classes/ToolButton.xml
msgid "The horizontal space between [ToolButton]'s icon and text."
@@ -78009,11 +79285,11 @@ msgstr "[ToolButton] 的图标和文本之间的水平间è·ã€‚"
#: doc/classes/ToolButton.xml
msgid "[Font] of the [ToolButton]'s text."
-msgstr "[ToolButton]的文本的[Font]字体。"
+msgstr "[ToolButton] 的文本的 [Font] 字体。"
#: doc/classes/ToolButton.xml
msgid "[StyleBox] used when the [ToolButton] is disabled."
-msgstr "当[ToolButton]被ç¦ç”¨æ—¶ä½¿ç”¨çš„[StyleBox]。"
+msgstr "当 [ToolButton] 被ç¦ç”¨æ—¶ä½¿ç”¨çš„ [StyleBox]。"
#: doc/classes/ToolButton.xml
msgid ""
@@ -78026,7 +79302,7 @@ msgstr ""
#: doc/classes/ToolButton.xml
msgid "[StyleBox] used when the [ToolButton] is being hovered."
-msgstr "当[ToolButton]è¢«æ‚¬åœæ—¶ä½¿ç”¨çš„[StyleBox]。"
+msgstr "当 [ToolButton] è¢«æ‚¬åœæ—¶ä½¿ç”¨çš„ [StyleBox]。"
#: doc/classes/ToolButton.xml
msgid "Default [StyleBox] for the [ToolButton]."
@@ -78034,7 +79310,7 @@ msgstr "[ToolButton] 的默认 [StyleBox]。"
#: doc/classes/ToolButton.xml
msgid "[StyleBox] used when the [ToolButton] is being pressed."
-msgstr "当[ToolButton]被按下时使用的[StyleBox]。"
+msgstr "当 [ToolButton] 被按下时使用的 [StyleBox]。"
#: doc/classes/TouchScreenButton.xml
msgid "Button for touch screen devices for gameplay use."
@@ -78054,14 +79330,14 @@ msgid ""
"You can configure TouchScreenButton to be visible only on touch devices, "
"helping you develop your game both for desktop and mobile devices."
msgstr ""
-"TouchScreenButtonå…许你为触摸设备创建å±å¹•上的按钮。其为游æˆä½¿ç”¨ï¼Œæ¯”如在必须触"
-"摸æ‰èƒ½ç§»åŠ¨çš„è®¾å¤‡ã€‚ä¸Ž[Button]ä¸åŒï¼ŒTouchScreenButton原生支æŒå¤šç‚¹è§¦æ‘¸ã€‚几个"
-"TouchScreenButtonå¯ä»¥é€šè¿‡è§¦æ‘¸è¾“å…¥åŒæ—¶è¢«æŒ‰ä¸‹ã€‚\n"
-"这个节点继承自[Node2D]。与[Control]节点ä¸åŒï¼Œä½ ä¸èƒ½åœ¨å®ƒä¸Šé¢è®¾ç½®é”šç‚¹ã€‚如果è¦åˆ›"
-"建èœå•或用户界é¢ï¼Œå¯ç”¨[Button]节点代替。为了使按钮节点对触摸事件作出å应,å¯"
-"在项目设置中å¯ç”¨æ¨¡æ‹Ÿé¼ æ ‡é€‰é¡¹ã€‚\n"
-"å¯å°†TouchScreenButtoné…置为åªåœ¨è§¦æ‘¸è®¾å¤‡ä¸Šå¯è§ï¼Œæœ‰åŠ©ä½ åŒæ—¶ä¸ºæ¡Œé¢å’Œç§»åŠ¨è®¾å¤‡å¼€å‘"
-"游æˆã€‚"
+"TouchScreenButton å…许你为触摸设备创建å±å¹•上的按钮。其为游æˆä½¿ç”¨ï¼Œæ¯”如在必须"
+"触摸æ‰èƒ½ç§»åŠ¨çš„è®¾å¤‡ã€‚ä¸Ž [Button] ä¸åŒï¼ŒTouchScreenButton 原生支æŒå¤šç‚¹è§¦æ‘¸ã€‚几"
+"个 TouchScreenButton å¯ä»¥é€šè¿‡è§¦æ‘¸è¾“å…¥åŒæ—¶è¢«æŒ‰ä¸‹ã€‚\n"
+"这个节点继承自 [Node2D]。与 [Control] 节点ä¸åŒï¼Œä½ ä¸èƒ½åœ¨å®ƒä¸Šé¢è®¾ç½®é”šç‚¹ã€‚如果"
+"è¦åˆ›å»ºèœå•或用户界é¢ï¼Œå¯ç”¨ [Button] 节点代替。为了使按钮节点对触摸事件作出å"
+"应,å¯åœ¨é¡¹ç›®è®¾ç½®ä¸­å¯ç”¨æ¨¡æ‹Ÿé¼ æ ‡é€‰é¡¹ã€‚\n"
+"å¯å°† TouchScreenButton é…置为åªåœ¨è§¦æ‘¸è®¾å¤‡ä¸Šå¯è§ï¼Œæœ‰åŠ©ä½ åŒæ—¶ä¸ºæ¡Œé¢å’Œç§»åŠ¨è®¾å¤‡å¼€"
+"呿¸¸æˆã€‚"
#: doc/classes/TouchScreenButton.xml
msgid "Returns [code]true[/code] if this button is currently pressed."
@@ -78069,11 +79345,11 @@ msgstr "如果这个按钮当å‰è¢«æŒ‰ä¸‹ï¼Œåˆ™è¿”回 [code]true[/code]。"
#: doc/classes/TouchScreenButton.xml
msgid "The button's action. Actions can be handled with [InputEventAction]."
-msgstr "按钮的动作。动作å¯ä»¥ç”¨[InputEventAction]æ¥å¤„ç†ã€‚"
+msgstr "按钮的动作。动作å¯ä»¥ç”¨ [InputEventAction] æ¥å¤„ç†ã€‚"
#: doc/classes/TouchScreenButton.xml
msgid "The button's bitmask."
-msgstr "按钮的bit使ީç ã€‚"
+msgstr "æŒ‰é’®çš„ä½æŽ©ç ã€‚"
#: doc/classes/TouchScreenButton.xml
msgid "The button's texture for the normal state."
@@ -78086,8 +79362,8 @@ msgid ""
"pressure started outside the active area of the button.\n"
"[b]Note:[/b] This is a \"pass-by\" (not \"bypass\") press mode."
msgstr ""
-"如果[code]true[/code],åªè¦æŒ‰ä¸‹çš„æ‰‹æŒ‡è¿›å‡ºæŒ‰é’®ï¼Œå°±ä¼šå‘出 [signal pressed] å’Œ"
-"[signal released] ]ä¿¡å·ï¼Œå³ä½¿åŽ‹åŠ›å¼€å§‹äºŽæŒ‰é’®çš„æœ‰æ•ˆåŒºåŸŸä¹‹å¤–ã€‚\n"
+"如果为 [code]true[/code],åªè¦æŒ‰ä¸‹çš„æ‰‹æŒ‡è¿›å‡ºæŒ‰é’®ï¼Œå°±ä¼šå‘出 [signal pressed] "
+"å’Œ[signal released] ]ä¿¡å·ï¼Œå³ä½¿åŽ‹åŠ›å¼€å§‹äºŽæŒ‰é’®çš„æœ‰æ•ˆåŒºåŸŸä¹‹å¤–ã€‚\n"
"[b]注æ„:[/b]è¿™æ˜¯ä¸€ç§ \"pass-by\" çš„æŒ‰åŽ‹æ¨¡å¼ ï¼Œè€Œä¸æ˜¯ \"bypass\"。"
#: doc/classes/TouchScreenButton.xml
@@ -78103,17 +79379,17 @@ 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 ""
-"如果[code]true[/code],按钮的形状会在æä¾›çš„纹ç†ä¸­å±…中。如果没有使用纹ç†ï¼Œè¿™ä¸ª"
-"属性就没有效果。"
+"如果为 [code]true[/code],按钮的形状会在æä¾›çš„纹ç†ä¸­å±…中。如果没有使用纹ç†ï¼Œ"
+"这个属性就没有效果。"
#: doc/classes/TouchScreenButton.xml
msgid "If [code]true[/code], the button's shape is visible."
-msgstr "如果[code]true[/code],按钮的形状是å¯è§çš„。"
+msgstr "如果为 [code]true[/code],按钮的形状是å¯è§çš„。"
#: doc/classes/TouchScreenButton.xml
msgid ""
"The button's visibility mode. See [enum VisibilityMode] for possible values."
-msgstr "按钮的å¯è§æ€§æ¨¡å¼ã€‚有关å¯èƒ½çš„值,å‚阅[enum VisibilityMode]。"
+msgstr "按钮的å¯è§æ€§æ¨¡å¼ã€‚å¯èƒ½çš„å–å€¼è§ [enum VisibilityMode]。"
#: doc/classes/TouchScreenButton.xml
msgid "Emitted when the button is pressed (down)."
@@ -78189,7 +79465,7 @@ msgid ""
"given [code]weight[/code] (on the range of 0.0 to 1.0)."
msgstr ""
"è¿”å›žåœ¨æ­¤å˜æ¢å’Œå¦ä¸€ä¸ªå˜æ¢ä¹‹é—´é€šè¿‡ç»™å®šçš„[code]weight[/code]æ’å€¼çš„å˜æ¢ï¼ŒèŒƒå›´ä¸º"
-"0.0到1.0。"
+"0.0 到 1.0。"
#: doc/classes/Transform.xml doc/classes/Transform2D.xml
msgid ""
@@ -78218,9 +79494,9 @@ msgid ""
"perpendicular to both the [code]target[/code] and [code]up[/code] vectors.\n"
"Operations take place in global space."
msgstr ""
-"返回一个旋转åŽçš„å˜æ¢å‰¯æœ¬ï¼Œä½¿å…¶-Z轴指å‘[code]target[/code]ä½ç½®ã€‚\n"
-"å˜æ¢å°†é¦–先围绕给定的[code]up[/code]å‘釿—‹è½¬ï¼Œç„¶åŽè¿›ä¸€æ­¥é€šè¿‡å›´ç»•垂直于"
-"[code]target[/code]å’Œ[code]up[/code]å‘é‡çš„轴旋转,æ¥å®Œå…¨ä¸Žç›®æ ‡å¯¹é½ã€‚\n"
+"返回一个旋转åŽçš„å˜æ¢å‰¯æœ¬ï¼Œä½¿å…¶ -Z è½´æŒ‡å‘ [code]target[/code] ä½ç½®ã€‚\n"
+"å˜æ¢å°†é¦–先围绕给定的 [code]up[/code] å‘釿—‹è½¬ï¼Œç„¶åŽè¿›ä¸€æ­¥é€šè¿‡å›´ç»•垂直于 "
+"[code]target[/code] å’Œ [code]up[/code] å‘é‡çš„轴旋转,æ¥å®Œå…¨ä¸Žç›®æ ‡å¯¹é½ã€‚\n"
"æ“作是在全局空间进行的。"
#: doc/classes/Transform.xml doc/classes/Transform2D.xml
@@ -78276,7 +79552,7 @@ msgid ""
"method."
msgstr ""
"将给定的 [Vector3]ã€[Plane]ã€[AABB]ã€[PoolVector3Array] åšè¯¥å˜æ¢çš„é€†å˜æ¢ï¼Œå‰"
-"æå‡è®¾æ˜¯è¯¥å˜æ¢ä»…由旋转和平移构æˆï¼ˆä¸åŒ…æ‹¬ç¼©æ”¾ï¼‰ã€‚ç­‰ä»·äºŽè°ƒç”¨è¯¥å˜æ¢çš„ "
+"æå‡è®¾æ˜¯è¯¥å˜æ¢ä»…由旋转和平移构æˆï¼ˆä¸åŒ…æ‹¬ç¼©æ”¾ï¼‰ã€‚ç›¸å½“äºŽè°ƒç”¨è¯¥å˜æ¢çš„ "
"[code]inverse().xform(v)[/code]ã€‚ä»¿å°„å˜æ¢ï¼ˆå³åŒ…å«ç¼©æ”¾ï¼‰è¯·å‚阅 [method "
"affine_inverse] 方法。"
@@ -78293,7 +79569,7 @@ msgstr ""
msgid ""
"The translation offset of the transform (column 3, the fourth column). "
"Equivalent to array index [code]3[/code]."
-msgstr "å˜æ¢çš„平移åç§»é‡ï¼Œå³ç¬¬3ã€4列。相当于数组索引[code]3[/code]。"
+msgstr "å˜æ¢çš„平移åç§»é‡ï¼Œå³ç¬¬ 3ã€4 列。相当于数组索引 [code]3[/code]。"
#: doc/classes/Transform.xml
msgid ""
@@ -78334,7 +79610,7 @@ msgstr ""
#: doc/classes/Transform2D.xml
msgid "Constructs the transform from a 3D [Transform]."
-msgstr "从一个 3D [Transform] æž„å»ºå˜æ¢ã€‚"
+msgstr "从 3D [Transform] æž„å»ºå˜æ¢ã€‚"
#: doc/classes/Transform2D.xml
msgid ""
@@ -78387,10 +79663,17 @@ msgstr ""
#: doc/classes/Transform2D.xml
msgid ""
"Returns a copy of the transform scaled by the given [code]scale[/code] "
-"factor, using matrix multiplication."
-msgstr ""
-"è¿”å›žè¯¥å˜æ¢çš„副本,使用矩阵乘法将其用给定的缩放系数 [code]scale[/code] 进行缩"
-"放。"
+"factor, using matrix multiplication.\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
+msgstr ""
+"è¿”å›žè¯¥å˜æ¢åœ¨ä½¿ç”¨ç»™å®šçš„ [code]scale[/code] 缩放系统进行矩阵乘法åŽçš„副本。\n"
+"[b]注æ„:[/b]2D ä¸­ï¼Œå˜æ¢çŸ©é˜µæ˜¯æ— æ³•分解出负数的 X 缩放的。由于 Godot 中使用å˜"
+"æ¢çŸ©é˜µæ¥è¡¨ç¤ºç¼©æ”¾ï¼ŒX 轴上的负数缩放在分解åŽä¼šå˜ä¸º Y 轴的负数缩放和一次 180 度"
+"的旋转。"
#: doc/classes/Transform2D.xml
msgid ""
@@ -78407,7 +79690,7 @@ msgid ""
"scaling) see [method affine_inverse] method."
msgstr ""
"将给定的 [Vector2]ã€[Rect2]ã€[PoolVector2Array] åšè¯¥å˜æ¢çš„é€†å˜æ¢ï¼Œå‰æå‡è®¾æ˜¯"
-"è¯¥å˜æ¢ä»…由旋转和平移构æˆï¼ˆä¸åŒ…æ‹¬ç¼©æ”¾ï¼‰ã€‚ç­‰ä»·äºŽè°ƒç”¨è¯¥å˜æ¢çš„ [code]inverse()."
+"è¯¥å˜æ¢ä»…由旋转和平移构æˆï¼ˆä¸åŒ…æ‹¬ç¼©æ”¾ï¼‰ã€‚ç›¸å½“äºŽè°ƒç”¨è¯¥å˜æ¢çš„ [code]inverse()."
"xform(v)[/code]ã€‚ä»¿å°„å˜æ¢ï¼ˆå³åŒ…å«ç¼©æ”¾ï¼‰è¯·å‚阅 [method affine_inverse] 方法。"
#: doc/classes/Transform2D.xml
@@ -78538,6 +79821,7 @@ msgid "Control to show a tree of items."
msgstr "ä»¥æ ‘çŠ¶å½¢å¼æ˜¾ç¤ºé¡¹ç›®çš„æŽ§ä»¶ã€‚"
#: doc/classes/Tree.xml
+#, fuzzy
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, "
@@ -78559,7 +79843,18 @@ msgid ""
"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]."
+"to remove it from the [Tree].\n"
+"[b]Incremental search:[/b] Like [ItemList] and [PopupMenu], [Tree] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
"这展示了一个å¯ä»¥é€‰æ‹©ã€å±•开和折å çš„项目树。该树å¯ä»¥æœ‰å¤šåˆ—的自定义控件,如文本"
"ç¼–è¾‘ã€æŒ‰é’®å’Œå¼¹å‡ºçª—å£ã€‚它对于结构化显示和互动很有用。\n"
@@ -78605,9 +79900,9 @@ msgid ""
"editable with [method TreeItem.set_editable]. Returns [code]true[/code] if "
"the item could be edited. Fails if no item is selected."
msgstr ""
-"编辑选中的树项,就åƒå®ƒè¢«ç‚¹å‡»ä¸€æ ·ã€‚该项必须通过[method TreeItem.set_editable]"
-"设置为å¯ç¼–辑。其å¯è¢«ç¼–辑,则返回 [code]true[/code]。如果没有项被选中,则失"
-"败。"
+"编辑选中的树项,就åƒå®ƒè¢«ç‚¹å‡»ä¸€æ ·ã€‚该项必须通过 [method TreeItem."
+"set_editable] 设置为å¯ç¼–辑。其å¯è¢«ç¼–辑,则返回 [code]true[/code]。如果没有项"
+"被选中,则失败。"
#: doc/classes/Tree.xml
msgid ""
@@ -78619,8 +79914,8 @@ msgid ""
"only visible in [constant SELECT_MULTI] mode."
msgstr ""
"使当å‰èŽ·å¾—ç„¦ç‚¹çš„å•å…ƒå¯è§ã€‚\n"
-"如果有必è¦ï¼Œå°†æ»šåŠ¨æ ‘ã€‚åœ¨[constant SELECT_ROW]模å¼ä¸‹ï¼Œä¸ä¼šåšæ°´å¹³æ»šåŠ¨ï¼Œå› ä¸ºæ‰€é€‰"
-"行中的所有å•元都按逻辑获得焦点。\n"
+"如果有必è¦ï¼Œå°†æ»šåŠ¨æ ‘ã€‚åœ¨ [constant SELECT_ROW] 模å¼ä¸‹ï¼Œä¸ä¼šåšæ°´å¹³æ»šåŠ¨ï¼Œå› ä¸ºæ‰€"
+"选行中的所有å•元都按逻辑获得焦点。\n"
"[b]注æ„:[/b]尽管这个方法的å称是这样的,但焦点光标本身åªåœ¨ [constant "
"SELECT_MULTI] 模å¼ä¸‹å¯è§ã€‚"
@@ -78739,9 +80034,10 @@ msgid ""
"To get the currently selected item(s), use [method get_next_selected]."
msgstr ""
"返回当å‰çš„焦点项,如果没有焦点项,则返回 [code]null[/code]。\n"
-"在[constant SELECT_ROW]å’Œ[constant SELECT_SINGLE]模å¼ä¸‹ï¼Œç„¦ç‚¹é¡¹ä¸Žé€‰æ‹©é¡¹ç›¸åŒã€‚"
-"在[constant SELECT_MULTI]模å¼ä¸‹ï¼Œç„¦ç‚¹é¡¹æ˜¯ç„¦ç‚¹å…‰æ ‡ä¸‹çš„项目,ä¸ä¸€å®šè¢«é€‰ä¸­ã€‚\n"
-"è¦è޷得当å‰é€‰ä¸­é¡¹ï¼Œè¯·ä½¿ç”¨[method get_next_selected]。"
+"在 [constant SELECT_ROW] å’Œ [constant SELECT_SINGLE] 模å¼ä¸‹ï¼Œç„¦ç‚¹é¡¹ä¸Žé€‰æ‹©é¡¹ç›¸"
+"åŒã€‚在 [constant SELECT_MULTI] 模å¼ä¸‹ï¼Œç„¦ç‚¹é¡¹æ˜¯ç„¦ç‚¹å…‰æ ‡ä¸‹çš„项目,ä¸ä¸€å®šè¢«é€‰"
+"中。\n"
+"è¦è޷得当å‰é€‰ä¸­é¡¹ï¼Œè¯·ä½¿ç”¨ [method get_next_selected]。"
#: doc/classes/Tree.xml
msgid ""
@@ -78753,11 +80049,11 @@ msgid ""
"To tell whether a column of an item is selected, use [method TreeItem."
"is_selected]."
msgstr ""
-"返回当å‰èŽ·å¾—ç„¦ç‚¹çš„åˆ—ï¼Œå¦‚æžœæ²¡æœ‰ç„¦ç‚¹åˆ—ï¼Œåˆ™è¿”å›ž-1。\n"
-"在[constant SELECT_SINGLE]模å¼ä¸‹ï¼Œç„¦ç‚¹åˆ—是被选中的列。在[constant SELECT_ROW]"
-"模å¼ä¸‹ï¼Œå¦‚果有任æ„项被选中,焦点列总是0。在[constant SELECT_MULTI]模å¼ä¸‹ï¼Œç„¦"
-"点列是焦点光标下的列,但ä¸ä¸€å®šæœ‰åˆ—被选中。\n"
-"è¦åˆ¤æ–­ä¸€ä¸ªé¡¹çš„æŸä¸€åˆ—æ˜¯å¦è¢«é€‰ä¸­ï¼Œè¯·ä½¿ç”¨[method TreeItem.is_selected]。"
+"返回当å‰èŽ·å¾—ç„¦ç‚¹çš„åˆ—ï¼Œå¦‚æžœæ²¡æœ‰ç„¦ç‚¹åˆ—ï¼Œåˆ™è¿”å›ž -1。\n"
+"在[constant SELECT_SINGLE] 模å¼ä¸‹ï¼Œç„¦ç‚¹åˆ—是被选中的列。在 [constant "
+"SELECT_ROW] 模å¼ä¸‹ï¼Œå¦‚果有任æ„项被选中,焦点列总是 0。在 [constant "
+"SELECT_MULTI] 模å¼ä¸‹ï¼Œç„¦ç‚¹åˆ—是焦点光标下的列,但ä¸ä¸€å®šæœ‰åˆ—被选中。\n"
+"è¦åˆ¤æ–­ä¸€ä¸ªé¡¹çš„æŸä¸€åˆ—æ˜¯å¦è¢«é€‰ä¸­ï¼Œè¯·ä½¿ç”¨ [method TreeItem.is_selected]。"
#: doc/classes/Tree.xml
msgid "Causes the [Tree] to jump to the specified [TreeItem]."
@@ -78769,8 +80065,8 @@ msgid ""
"Columns that have the \"Expand\" flag will use their \"min_width\" in a "
"similar fashion to [member Control.size_flags_stretch_ratio]."
msgstr ""
-"如果 [code]true[/code],该列将拥有 [Control] 的“Expandâ€æ ‡å¿—。拥有“Expandâ€æ ‡å¿—"
-"的列,将以类似于 [member Control.size_flags_stretch_ratio] 的方å¼ä½¿ç”¨"
+"如果为 [code]true[/code],该列将拥有 [Control] 的“Expandâ€æ ‡å¿—。拥有“Expandâ€æ ‡"
+"志的列,将以类似于 [member Control.size_flags_stretch_ratio] 的方å¼ä½¿ç”¨"
"其“min_widthâ€æœ€å°å®½åº¦ã€‚"
#: doc/classes/Tree.xml
@@ -78789,15 +80085,15 @@ msgstr "设置一个列的标题。"
#: doc/classes/Tree.xml
msgid ""
"If [code]true[/code], the currently selected cell may be selected again."
-msgstr "如果[code]true[/code],å¯ä»¥å†æ¬¡é€‰æ‹©å½“å‰é€‰å®šçš„å•元。"
+msgstr "如果为 [code]true[/code],å¯ä»¥å†æ¬¡é€‰æ‹©å½“å‰é€‰å®šçš„å•元。"
#: doc/classes/Tree.xml
msgid "If [code]true[/code], a right mouse button click can select items."
-msgstr "如果[code]true[/code],鼠标å³é”®ç‚¹å‡»å¯ä»¥é€‰æ‹©é¡¹ç›®ã€‚"
+msgstr "如果为 [code]true[/code],鼠标å³é”®ç‚¹å‡»å¯ä»¥é€‰æ‹©é¡¹ç›®ã€‚"
#: doc/classes/Tree.xml
msgid "If [code]true[/code], column titles are visible."
-msgstr "如果[code]true[/code],列标题å¯è§ã€‚"
+msgstr "如果为 [code]true[/code],列标题å¯è§ã€‚"
#: doc/classes/Tree.xml
msgid "The number of columns."
@@ -78811,29 +80107,29 @@ msgid ""
"This controls the drop sections, i.e. the decision and drawing of possible "
"drop locations based on the mouse position."
msgstr ""
-"作为一个标志的OR组åˆçš„æ”¾ç½®æ¨¡å¼ã€‚å‚阅[enum DropModeFlags]常é‡ã€‚一旦拖动完æˆï¼Œ"
-"å°†æ¢å¤åˆ°[constant DROP_MODE_DISABLED]。建议在[method Control.can_drop_data]中"
-"设置这个。\n"
+"作为一个标志的 OR 组åˆçš„æ”¾ç½®æ¨¡å¼ã€‚è§ [enum DropModeFlags] 常é‡ã€‚一旦拖动完"
+"æˆï¼Œå°†æ¢å¤åˆ° [constant DROP_MODE_DISABLED]。建议在 [method Control."
+"can_drop_data] 中设置这个。\n"
"æŽ§ä»¶æ”¾ç½®éƒ¨åˆ†ï¼Œå³æ ¹æ®é¼ æ ‡ä½ç½®å†³å®šå’Œç»˜åˆ¶å¯èƒ½çš„æ”¾ç½®ä½ç½®ã€‚"
#: doc/classes/Tree.xml
msgid "If [code]true[/code], the folding arrow is hidden."
-msgstr "如果[code]true[/code],éšè—折å ç®­å¤´ã€‚"
+msgstr "如果为 [code]true[/code],éšè—折å ç®­å¤´ã€‚"
#: doc/classes/Tree.xml
msgid "If [code]true[/code], the tree's root is hidden."
-msgstr "如果[code]true[/code],则éšè—树的根节点。"
+msgstr "如果为 [code]true[/code],则éšè—树的根节点。"
#: doc/classes/Tree.xml
msgid ""
"Allows single or multiple selection. See the [enum SelectMode] constants."
-msgstr "å…许å•选或多选。å‚阅[enum SelectMode]常é‡ã€‚"
+msgstr "å…许å•é€‰æˆ–å¤šé€‰ã€‚è§ [enum SelectMode] 常é‡ã€‚"
#: doc/classes/Tree.xml
msgid ""
"Emitted when a button on the tree was pressed (see [method TreeItem."
"add_button])."
-msgstr "当树中按钮被按下时触å‘,å‚阅[method TreeItem.add_button]。"
+msgstr "当树中按钮被按下时触å‘ï¼ˆè§ [method TreeItem.add_button])。"
#: doc/classes/Tree.xml
msgid "Emitted when a cell is selected."
@@ -78848,7 +80144,7 @@ msgid ""
"Emitted when a cell with the [constant TreeItem.CELL_MODE_CUSTOM] is clicked "
"to be edited."
msgstr ""
-"当具有[constant TreeItem.CELL_MODE_CUSTOM]çš„å•元格被点击,进行编辑时触å‘。"
+"当具有 [constant TreeItem.CELL_MODE_CUSTOM] çš„å•元格被点击,进行编辑时触å‘。"
#: doc/classes/Tree.xml
msgid ""
@@ -78875,8 +80171,8 @@ msgid ""
"Emitted when a custom button is pressed (i.e. in a [constant TreeItem."
"CELL_MODE_CUSTOM] mode cell)."
msgstr ""
-"当自定义按钮被按下时触å‘,å³åœ¨[constant TreeItem.CELL_MODE_CUSTOM]模å¼å•元格"
-"中。"
+"当自定义按钮被按下时触å‘(å³åœ¨ [constant TreeItem.CELL_MODE_CUSTOM] 模å¼å•å…ƒ"
+"格中)。"
#: doc/classes/Tree.xml
msgid "Emitted when an item's icon is double-clicked."
@@ -78903,7 +80199,7 @@ msgid ""
"Emitted instead of [code]item_selected[/code] if [code]select_mode[/code] is "
"[constant SELECT_MULTI]."
msgstr ""
-"如果[code]select_mode[/code]是[constant SELECT_MULTI],则触å‘代替"
+"如果 [code]select_mode[/code] 是 [constant SELECT_MULTI],则触å‘代替 "
"[code]item_selected[/code]。"
#: doc/classes/Tree.xml
@@ -78957,8 +80253,8 @@ msgid ""
"[b]Note:[/b] This is the default flag, it has no effect when combined with "
"other flags."
msgstr ""
-"ç¦ç”¨æ‰€æœ‰æ”¾ç½®éƒ¨åˆ†ï¼Œä½†ä»ç„¶å…许通过[method get_drop_section_at_position]检测 "
-"\"物å“上\" 的放置部分。\n"
+"ç¦ç”¨æ‰€æœ‰æ”¾ç½®éƒ¨åˆ†ï¼Œä½†ä»ç„¶å…许通过 [method get_drop_section_at_position] 检"
+"测“物å“上â€çš„æ”¾ç½®éƒ¨åˆ†ã€‚\n"
"[b]注æ„:[/b]è¿™æ˜¯é»˜è®¤çš„æ ‡å¿—ï¼Œå½“ä¸Žå…¶ä»–æ ‡å¿—ç»“åˆæ—¶ï¼Œå®ƒæ²¡æœ‰æ•ˆæžœã€‚"
#: doc/classes/Tree.xml
@@ -78968,9 +80264,9 @@ msgid ""
"When combined with [constant DROP_MODE_INBETWEEN], this drop section halves "
"the height and stays centered vertically."
msgstr ""
-"å¯ç”¨ \"项目上\" 的放置部分。这个放置部分覆盖整个项。\n"
-"当与[constant DROP_MODE_INBETWEEN]结åˆä½¿ç”¨æ—¶ï¼Œè¿™ä¸ªæ”¾ç½®éƒ¨åˆ†çš„高度å‡åŠï¼Œå¹¶ä¿æŒ"
-"垂直居中。"
+"å¯ç”¨â€œé¡¹ç›®ä¸Šâ€çš„æ”¾ç½®éƒ¨åˆ†ã€‚这个放置部分覆盖整个项。\n"
+"当与 [constant DROP_MODE_INBETWEEN] 结åˆä½¿ç”¨æ—¶ï¼Œè¿™ä¸ªæ”¾ç½®éƒ¨åˆ†çš„高度å‡åŠï¼Œå¹¶ä¿"
+"æŒåž‚直居中。"
#: doc/classes/Tree.xml
msgid ""
@@ -78980,41 +80276,42 @@ msgid ""
"When combined with [constant DROP_MODE_ON_ITEM], these drop sections halves "
"the height and stays on top / bottom accordingly."
msgstr ""
-"å¯ç”¨ \"项目上方\" å’Œ \"项目下方\" 的放置部分。\"项目上方\" 的放置部分覆盖项目"
-"的上åŠéƒ¨åˆ†ï¼Œ\"项目下方\" 的放置部分覆盖下åŠéƒ¨åˆ†ã€‚\n"
-"当与[constant DROP_MODE_ON_ITEM]ç»“åˆæ—¶ï¼Œè¿™äº›æ”¾ç½®éƒ¨åˆ†çš„高度å‡åŠï¼Œå¹¶ç›¸åº”地åœç•™"
-"在顶部或底部。"
+"å¯ç”¨â€œé¡¹ç›®ä¸Šæ–¹â€å’Œâ€œé¡¹ç›®ä¸‹æ–¹â€çš„æ”¾ç½®éƒ¨åˆ†ã€‚“项目上方â€çš„æ”¾ç½®éƒ¨åˆ†è¦†ç›–项目的上åŠéƒ¨"
+"分,“项目下方â€çš„æ”¾ç½®éƒ¨åˆ†è¦†ç›–下åŠéƒ¨åˆ†ã€‚\n"
+"当与 [constant DROP_MODE_ON_ITEM] ç»“åˆæ—¶ï¼Œè¿™äº›æ”¾ç½®éƒ¨åˆ†çš„高度å‡åŠï¼Œå¹¶ç›¸åº”地åœ"
+"留在顶部或底部。"
#: doc/classes/Tree.xml
msgid ""
"Text [Color] for a [constant TreeItem.CELL_MODE_CUSTOM] mode cell when it's "
"hovered."
msgstr ""
-"当[constant TreeItem.CELL_MODE_CUSTOM]模å¼çš„å•å…ƒæ ¼è¢«æ‚¬åœæ—¶çš„æ–‡æœ¬[Color]颜色。"
+"当 [constant TreeItem.CELL_MODE_CUSTOM] 模å¼çš„å•å…ƒæ ¼è¢«æ‚¬åœæ—¶çš„æ–‡æœ¬ [Color] 颜"
+"色。"
#: doc/classes/Tree.xml
msgid ""
"[Color] used to draw possible drop locations. See [enum DropModeFlags] "
"constants for further description of drop locations."
msgstr ""
-"用于绘制å¯èƒ½çš„æ”¾ç½®ä½ç½®çš„[Color]颜色。有关放置ä½ç½®çš„æè¿°ï¼Œå‚阅[enum "
-"DropModeFlags]常é‡ã€‚"
+"用于绘制å¯èƒ½çš„æ”¾ç½®ä½ç½®çš„ [Color] 颜色。有关放置ä½ç½®çš„æè¿°ï¼Œå‚阅 [enum "
+"DropModeFlags] 常é‡ã€‚"
#: doc/classes/Tree.xml
msgid "[Color] of the guideline."
-msgstr "å‚考线的[Color]颜色。"
+msgstr "å‚考线的 [Color] 颜色。"
#: doc/classes/Tree.xml
msgid "[Color] of the relationship lines."
-msgstr "关系线的[Color]颜色。"
+msgstr "关系线的 [Color] 颜色。"
#: doc/classes/Tree.xml
msgid "Default text [Color] of the title button."
-msgstr "标题按钮的默认文本[Color]颜色。"
+msgstr "标题按钮的默认文本 [Color] 颜色。"
#: doc/classes/Tree.xml
msgid "The horizontal space between each button in a cell."
-msgstr "一个å•元中æ¯ä¸ªæŒ‰é’®ä¹‹é—´çš„æ°´å¹³ç©ºé—´ã€‚"
+msgstr "å•元格中按钮之间的水平间è·ã€‚"
#: doc/classes/Tree.xml
msgid ""
@@ -79123,8 +80420,7 @@ msgstr "当 [Tree] 未获èšç„¦æ—¶ï¼Œç”¨äºŽå…‰æ ‡çš„ [StyleBox]。"
#: doc/classes/Tree.xml
msgid ""
"Default [StyleBox] for a [constant TreeItem.CELL_MODE_CUSTOM] mode cell."
-msgstr ""
-"为 [constant TreeItem.CELL_MODE_CUSTOM] 模å¼çš„å•元格默认的 [StyleBox]。"
+msgstr "[constant TreeItem.CELL_MODE_CUSTOM] 模å¼çš„å•元格默认的 [StyleBox]。"
#: doc/classes/Tree.xml
msgid ""
@@ -79143,7 +80439,7 @@ msgstr ""
#: doc/classes/Tree.xml
msgid ""
"[StyleBox] for the selected items, used when the [Tree] is not being focused."
-msgstr "所选项目的 [StyleBox],当 [Tree] 没有获得焦点时使用。"
+msgstr "所选项目的 [StyleBox],在 [Tree] 没有获得焦点时使用。"
#: doc/classes/Tree.xml
msgid ""
@@ -79172,7 +80468,7 @@ msgid ""
"styled as well as contain buttons.\n"
"You can remove a [TreeItem] by using [method Object.free]."
msgstr ""
-"控件 [Tree] 中的å•个项目。å¯ä»¥æœ‰å­çº§ [TreeItem], æ ·å¼ï¼Œ 以åŠåŒ…嫿Œ‰é’®ã€‚\n"
+"控件 [Tree] 中的å•个项目。å¯ä»¥æœ‰å­çº§ [TreeItem]ã€æ ·å¼ã€åŒ…嫿Œ‰é’®ã€‚\n"
"您å¯ä»¥ä½¿ç”¨ [method Object.free] 删除 [TreeItem]。"
#: doc/classes/TreeItem.xml
@@ -79183,7 +80479,7 @@ msgid ""
"get_button_count] immediately before this method. Optionally, the button can "
"be [code]disabled[/code] and have a [code]tooltip[/code]."
msgstr ""
-"在 [code]column[/code] 列添加一个带有 [Texture] [code]button[/code] 的按钮。 "
+"在 [code]column[/code] 列添加一个带有 [Texture] [code]button[/code] 的按钮。"
"[code]id[/code] 用于标识按钮。如果未指定,则使用下一个å¯ç”¨ç´¢å¼•,å¯ä»¥åœ¨æ­¤æ–¹æ³•"
"之å‰è°ƒç”¨ [method get_button_count] æ¥èŽ·å–该索引。å¦å¤–,该按钮还å¯ä»¥é€šè¿‡ "
"[code]disabled[/code] ç¦ç”¨ã€é€šè¿‡ [code]tooltip[/code] 设置工具æç¤ºã€‚"
@@ -79193,8 +80489,8 @@ msgid ""
"Calls the [code]method[/code] on the actual TreeItem and its children "
"recursively. Pass parameters as a comma separated list."
msgstr ""
-"在实际的TreeItem树项åŠå…¶å­é¡¹ä¸Šé€’归地调用[code]method[/code]。以逗å·åˆ†éš”的列表"
-"å½¢å¼ä¼ é€’傿•°ã€‚"
+"在实际的 TreeItem 树项åŠå…¶å­é¡¹ä¸Šé€’归地调用 [code]method[/code]。以逗å·åˆ†éš”çš„"
+"列表形å¼ä¼ é€’傿•°ã€‚"
#: doc/classes/TreeItem.xml
msgid "Resets the background color for the given column to default."
@@ -79212,7 +80508,7 @@ msgstr "å–æ¶ˆé€‰æ‹©æŒ‡å®šåˆ—。"
msgid ""
"Removes the button at index [code]button_idx[/code] in column [code]column[/"
"code]."
-msgstr "删除列[code]column[/code]中索引[code]button_idx[/code]处的按钮。"
+msgstr "删除列 [code]column[/code] 中索引 [code]button_idx[/code] 处的按钮。"
#: doc/classes/TreeItem.xml
msgid ""
@@ -79260,15 +80556,15 @@ msgstr "返回 TreeItem 树项的第一个å­é¡¹ï¼Œå¦‚果没有,则返回一ä¸
#: doc/classes/TreeItem.xml
msgid "Returns the custom background color of column [code]column[/code]."
-msgstr "返回列[code]column[/code]的自定义背景颜色。"
+msgstr "返回列 [code]column[/code] 的自定义背景颜色。"
#: doc/classes/TreeItem.xml
msgid "Returns the custom color of column [code]column[/code]."
-msgstr "返回列[code]column[/code]的自定义颜色。"
+msgstr "返回列 [code]column[/code] 的自定义颜色。"
#: doc/classes/TreeItem.xml
msgid "Returns [code]true[/code] if [code]expand_right[/code] is set."
-msgstr "如果设置了[code]expand_right[/code],返回 [code]true[/code]。"
+msgstr "如果设置了 [code]expand_right[/code],则返回 [code]true[/code]。"
#: doc/classes/TreeItem.xml
msgid "Returns the given column's icon [Texture]. Error if no icon is set."
@@ -79280,7 +80576,7 @@ msgstr "返回列的图标的最大宽度。"
#: doc/classes/TreeItem.xml
msgid "Returns the [Color] modulating the column's icon."
-msgstr "返回调制列的图标的[Color]颜色。"
+msgstr "返回调制列的图标的 [Color] 颜色。"
#: doc/classes/TreeItem.xml
msgid "Returns the icon [Texture] region as [Rect2]."
@@ -79295,7 +80591,7 @@ msgstr "返回使用 [method set_metadata] 为指定列设置的元数æ®ã€‚"
#: doc/classes/TreeItem.xml
msgid ""
"Returns the next TreeItem in the tree or a null object if there is none."
-msgstr "返回树中的下一个TreeItem树项,如果没有,则返回一个空对象。"
+msgstr "返回树中的下一个 TreeItem,如果没有,则返回一个空对象。"
#: doc/classes/TreeItem.xml
msgid ""
@@ -79305,18 +80601,18 @@ msgid ""
"visible element in the tree when called on the last visible element, "
"otherwise it returns [code]null[/code]."
msgstr ""
-"返回树中下一个å¯è§çš„TreeItem树项,如果没有,则返回空对象。\n"
-"如果[code]wrap[/code]被å¯ç”¨ï¼Œå½“在最åŽä¸€ä¸ªå¯è§å…ƒç´ ä¸Šè°ƒç”¨æ—¶ï¼Œè¯¥æ–¹æ³•将环绕到树中"
-"的第一个å¯è§å…ƒç´ ï¼Œå¦åˆ™å®ƒå°†è¿”回 [code]null[/code]。"
+"返回树中下一个å¯è§çš„ TreeItem,如果没有,则返回空对象。\n"
+"如果 [code]wrap[/code] 被å¯ç”¨ï¼Œå½“在最åŽä¸€ä¸ªå¯è§å…ƒç´ ä¸Šè°ƒç”¨æ—¶ï¼Œè¯¥æ–¹æ³•将环绕到树"
+"中的第一个å¯è§å…ƒç´ ï¼Œå¦åˆ™å®ƒå°†è¿”回 [code]null[/code]。"
#: doc/classes/TreeItem.xml
msgid "Returns the parent TreeItem or a null object if there is none."
-msgstr "返回父级TreeItem树项,如果没有,则返回一个空对象。"
+msgstr "返回父级 TreeItem,如果没有,则返回一个空对象。"
#: doc/classes/TreeItem.xml
msgid ""
"Returns the previous TreeItem in the tree or a null object if there is none."
-msgstr "返回树中的å‰ä¸€ä¸ªTreeItem树项,如果没有,则返回一个空对象。"
+msgstr "返回树中的å‰ä¸€ä¸ª TreeItem,如果没有,则返回一个空对象。"
#: doc/classes/TreeItem.xml
msgid ""
@@ -79326,9 +80622,9 @@ msgid ""
"visible element in the tree when called on the first visible element, "
"otherwise it returns [code]null[/code]."
msgstr ""
-"返回树中å‰ä¸€ä¸ªå¯è§çš„TreeItem树项,如果没有,则返回null对象。\n"
-"如果[code]wrap[/code]被å¯ç”¨ï¼Œå½“在第一个å¯è§å…ƒç´ ä¸Šè°ƒç”¨æ—¶ï¼Œè¯¥æ–¹æ³•将环绕到树中最"
-"åŽä¸€ä¸ªå¯è§å…ƒç´ ï¼Œå¦åˆ™å®ƒå°†è¿”回 [code]null[/code]。"
+"返回树中å‰ä¸€ä¸ªå¯è§çš„ TreeItem,如果没有,则返回 null 对象。\n"
+"如果 [code]wrap[/code] 被å¯ç”¨ï¼Œå½“在第一个å¯è§å…ƒç´ ä¸Šè°ƒç”¨æ—¶ï¼Œè¯¥æ–¹æ³•将环绕到树中"
+"最åŽä¸€ä¸ªå¯è§å…ƒç´ ï¼Œå¦åˆ™å®ƒå°†è¿”回 [code]null[/code]。"
#: doc/classes/TreeItem.xml
msgid "Returns the value of a [constant CELL_MODE_RANGE] column."
@@ -79338,8 +80634,7 @@ msgstr "返回 [constant CELL_MODE_RANGE] 列的值。"
msgid ""
"Returns a dictionary containing the range parameters for a given column. The "
"keys are \"min\", \"max\", \"step\", and \"expr\"."
-msgstr ""
-"返回包å«ç»™å®šåˆ—çš„èŒƒå›´å‚æ•°çš„字典。键是 \"min\"ã€\"max\"ã€\"step \"å’Œ \"expr\"。"
+msgstr "返回包å«ç»™å®šåˆ—çš„èŒƒå›´å‚æ•°çš„字典。键是“minâ€ã€â€œmaxâ€ã€â€œstepâ€å’Œâ€œexprâ€ã€‚"
#: doc/classes/TreeItem.xml
msgid "Gets the suffix string shown after the column value."
@@ -79362,7 +80657,7 @@ msgid ""
"Returns [code]true[/code] if the button at index [code]button_idx[/code] for "
"the given column is disabled."
msgstr ""
-"如果给定列的索引[code]button_idx[/code]处的按钮被ç¦ç”¨ï¼Œè¿”回 [code]true[/"
+"如果给定列的索引 [code]button_idx[/code] 处的按钮被ç¦ç”¨ï¼Œè¿”回 [code]true[/"
"code]。"
#: doc/classes/TreeItem.xml
@@ -79371,23 +80666,23 @@ msgstr "如果给定的列被选中,返回 [code]true[/code]。"
#: doc/classes/TreeItem.xml
msgid "Returns [code]true[/code] if column [code]column[/code] is editable."
-msgstr "如果列[code]column[/code]是å¯ç¼–辑的,则返回 [code]true[/code]。"
+msgstr "如果列 [code]column[/code] 是å¯ç¼–辑的,则返回 [code]true[/code]。"
#: doc/classes/TreeItem.xml
msgid "Returns [code]true[/code] if column [code]column[/code] is selectable."
-msgstr "如果列[code]column[/code]是å¯é€‰æ‹©çš„,则返回 [code]true[/code]。"
+msgstr "如果列 [code]column[/code] 是å¯é€‰æ‹©çš„,则返回 [code]true[/code]。"
#: doc/classes/TreeItem.xml
msgid "Returns [code]true[/code] if column [code]column[/code] is selected."
-msgstr "如果列[code]column[/code]被选中,返回 [code]true[/code]。"
+msgstr "如果列 [code]column[/code] 被选中,返回 [code]true[/code]。"
#: doc/classes/TreeItem.xml
msgid "Moves this TreeItem to the bottom in the [Tree] hierarchy."
-msgstr "将此TreeItem树项移动到[Tree]层次结构的底部。"
+msgstr "将这个 TreeItem 移动到 [Tree] 层次结构的底部。"
#: doc/classes/TreeItem.xml
msgid "Moves this TreeItem to the top in the [Tree] hierarchy."
-msgstr "将此TreeItem树项移动到[Tree]树层次结构的顶部。"
+msgstr "将这个 TreeItem 移动到 [Tree] 层次结构的顶部。"
#: doc/classes/TreeItem.xml
msgid ""
@@ -79395,27 +80690,28 @@ msgid ""
"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 ""
-"将给定的å­é¡¹[TreeItem]和它的所有å­é¡¹ä»Ž[Tree]中移除。注æ„,它并未从内存中释放"
-"该项,所以之åŽå¯é‡æ–°ä½¿ç”¨ã€‚è¦å®Œå…¨åˆ é™¤ä¸€ä¸ª[TreeItem],请使用[method Object."
-"free]。"
+"将给定的å­é¡¹ [TreeItem] 和它的所有å­é¡¹ä»Ž [Tree] 中移除。注æ„,它并未从内存中"
+"释放该项,所以之åŽå¯é‡æ–°ä½¿ç”¨ã€‚è¦å®Œå…¨åˆ é™¤ä¸€ä¸ª [TreeItem],请使用 [method "
+"Object.free]。"
#: doc/classes/TreeItem.xml
msgid "Selects the column [code]column[/code]."
-msgstr "选择列[code]column[/code]。"
+msgstr "选择列 [code]column[/code]。"
#: doc/classes/TreeItem.xml
msgid ""
"Sets the given column's button [Texture] at index [code]button_idx[/code] to "
"[code]button[/code]."
msgstr ""
-"设置索引[code]button_idx[/code]的给定列的按钮[code]button[/code]的[Texture]。"
+"设置索引 [code]button_idx[/code] 的给定列的按钮 [code]button[/code] 的 "
+"[Texture]。"
#: doc/classes/TreeItem.xml
msgid ""
"If [code]true[/code], disables the button at index [code]button_idx[/code] "
"in column [code]column[/code]."
msgstr ""
-"如果[code]true[/code],则ç¦ç”¨åˆ—[code]column[/code]中索引[code]button_idx[/"
+"如果为 [code]true[/code],则ç¦ç”¨åˆ—[code]column[/code]中索引[code]button_idx[/"
"code]的按钮。"
#: doc/classes/TreeItem.xml
@@ -79423,11 +80719,11 @@ msgid ""
"Sets the given column's cell mode to [code]mode[/code]. See [enum "
"TreeCellMode] constants."
msgstr ""
-"设置给定列的å•元格模å¼ä¸º[code]mode[/code]。å‚阅[enum TreeCellMode]常é‡ã€‚"
+"设置给定列的å•元格模å¼ä¸º [code]mode[/code]ã€‚è§ [enum TreeCellMode] 常é‡ã€‚"
#: doc/classes/TreeItem.xml
msgid "If [code]true[/code], the column [code]column[/code] is checked."
-msgstr "如果[code]true[/code],则选中[code]column[/code]。"
+msgstr "如果为 [code]true[/code],则选中 [code]column[/code]。"
#: doc/classes/TreeItem.xml
msgid ""
@@ -79446,10 +80742,10 @@ msgid ""
"The [code]callback[/code] should accept two arguments: the [TreeItem] that "
"is drawn and its position and size as a [Rect2]."
msgstr ""
-"设置给定列的自定义绘制回调到[code]object[/code]上的[code]callback[/code]回调"
-"方法。\n"
-"[code]callback[/code]应该接å—ä¸¤ä¸ªå‚æ•°ï¼šè¢«ç»˜åˆ¶çš„[TreeItem]树项以åŠå®ƒçš„ä½ç½®å’Œå¤§"
-"å°æ˜¯ä¸€ä¸ª[Rect2]。"
+"设置给定列的自定义绘制回调到 [code]object[/code] 上的 [code]callback[/code] "
+"回调方法。\n"
+"[code]callback[/code] 应该接å—ä¸¤ä¸ªå‚æ•°ï¼šè¢«ç»˜åˆ¶çš„ [TreeItem] 以åŠå®ƒçš„ä½ç½®å’Œå¤§"
+"å°æ˜¯ä¸€ä¸ª [Rect2]。"
#: doc/classes/TreeItem.xml
msgid "If [code]true[/code], column [code]column[/code] is editable."
@@ -79470,7 +80766,7 @@ msgstr "设置给定列图标的最大宽度。"
#: doc/classes/TreeItem.xml
msgid "Modulates the given column's icon with [code]modulate[/code]."
-msgstr "用[code]modulate[/code]调制给定列的图标。"
+msgstr "用 [code]modulate[/code] 调制给定列的图标。"
#: doc/classes/TreeItem.xml
msgid "Sets the given column's icon's texture region."
@@ -79497,18 +80793,18 @@ msgid ""
"exponential scale as with [member Range.exp_edit]."
msgstr ""
"è®¾ç½®åˆ—çš„å¯æŽ¥å—值的范围。该列必须处于 [constant CELL_MODE_RANGE] 模å¼ã€‚\n"
-"如果 [code]expr[/code] 是 [code]true[/code]ï¼Œç¼–è¾‘æ¨¡å¼æ»‘å—将使用指数刻度,与 "
+"如果 [code]expr[/code] 为 [code]true[/code]ï¼Œç¼–è¾‘æ¨¡å¼æ»‘å—将使用指数刻度,与 "
"[member Range.exp_edit] 一样。"
#: doc/classes/TreeItem.xml
msgid "If [code]true[/code], the given column is selectable."
-msgstr "如果[code]true[/code],给定的列是å¯é€‰æ‹©çš„。"
+msgstr "如果为 [code]true[/code],给定的列是å¯é€‰ä¸­çš„。"
#: doc/classes/TreeItem.xml
msgid ""
"Sets a string to be shown after a column's value (for example, a unit "
"abbreviation)."
-msgstr "设置字符串,显示在列的值之åŽï¼Œä¾‹å¦‚,å•ä½çš„缩写。"
+msgstr "设置字符串,显示在列的值之åŽï¼ˆä¾‹å¦‚,å•ä½çš„缩写)。"
#: doc/classes/TreeItem.xml
msgid "Sets the given column's text value."
@@ -79518,7 +80814,7 @@ msgstr "设置给定列的文本值。"
msgid ""
"Sets the given column's text alignment. See [enum TextAlign] for possible "
"values."
-msgstr "è®¾ç½®ç»™å®šåˆ—çš„æ–‡æœ¬å¯¹é½æ–¹å¼ã€‚å¯èƒ½çš„值,å‚阅[enum TextAlign]。"
+msgstr "è®¾ç½®ç»™å®šåˆ—çš„æ–‡æœ¬å¯¹é½æ–¹å¼ã€‚å¯èƒ½çš„å–å€¼è§ [enum TextAlign]。"
#: doc/classes/TreeItem.xml
msgid "Sets the given column's tooltip text."
@@ -79526,7 +80822,7 @@ msgstr "设置给定列的工具æç¤ºæ–‡æœ¬ã€‚"
#: doc/classes/TreeItem.xml
msgid "If [code]true[/code], the TreeItem is collapsed."
-msgstr "如果[code]true[/code],TreeItem树项被折å ã€‚"
+msgstr "如果为 [code]true[/code],则该 TreeItem 被折å ã€‚"
#: doc/classes/TreeItem.xml
msgid "The custom minimum height."
@@ -79534,7 +80830,7 @@ msgstr "自定义最å°é«˜åº¦ã€‚"
#: doc/classes/TreeItem.xml
msgid "If [code]true[/code], folding is disabled for this TreeItem."
-msgstr "如果[code]true[/code],则TreeItem树项ç¦ç”¨æŠ˜å ã€‚"
+msgstr "如果为 [code]true[/code],则这个 TreeItem ç¦ç”¨æŠ˜å ã€‚"
#: doc/classes/TreeItem.xml
msgid "Cell contains a string."
@@ -79554,15 +80850,15 @@ msgstr "å•元包å«å›¾æ ‡ã€‚"
#: doc/classes/TreeItem.xml
msgid "Align text to the left. See [code]set_text_align()[/code]."
-msgstr "将文本å‘左对é½ã€‚å‚阅[code]set_text_align()[/code]。"
+msgstr "将文本å‘左对é½ã€‚è§ [code]set_text_align()[/code]。"
#: doc/classes/TreeItem.xml
msgid "Center text. See [code]set_text_align()[/code]."
-msgstr "将文本居中。å‚阅[code]set_text_align()[/code]。"
+msgstr "å°†æ–‡æœ¬å±…ä¸­ã€‚è§ [code]set_text_align()[/code]。"
#: doc/classes/TreeItem.xml
msgid "Align text to the right. See [code]set_text_align()[/code]."
-msgstr "将文本å‘å³å¯¹é½ã€‚å‚阅[code]set_text_align()[/code]。"
+msgstr "将文本å‘å³å¯¹é½ã€‚è§ [code]set_text_align()[/code]。"
#: doc/classes/TriangleMesh.xml
msgid "Internal mesh type."
@@ -79872,7 +81168,7 @@ msgstr "è¿”å›žè¡¥é—´çš„å½“å‰æ—¶é—´ã€‚"
#: doc/classes/Tween.xml
msgid "The tween's animation process thread. See [enum TweenProcessMode]."
-msgstr "补间动画处ç†çº¿ç¨‹ã€‚å‚阅[enum TweenProcessMode]。"
+msgstr "补间动画处ç†çº¿ç¨‹ã€‚è§ [enum TweenProcessMode]。"
#: doc/classes/Tween.xml
msgid ""
@@ -79887,7 +81183,7 @@ msgstr ""
#: doc/classes/Tween.xml
msgid "If [code]true[/code], the tween loops."
-msgstr "如果[code]true[/code],补间循环。"
+msgstr "如果为 [code]true[/code],则补间循环。"
#: doc/classes/Tween.xml
msgid "Emitted when all processes in a tween end."
@@ -79911,7 +81207,7 @@ msgstr "补间通过 [code]_physics_process[/code] 回调进行更新。"
#: doc/classes/Tween.xml
msgid "The tween updates with the [code]_process[/code] callback."
-msgstr "补间通过[code]_process[/code]回调进行更新。"
+msgstr "补间通过 [code]_process[/code] 回调进行更新。"
#: doc/classes/Tween.xml
msgid "The animation is interpolated linearly."
@@ -79924,23 +81220,23 @@ msgstr "动画使用正弦函数进行æ’值。"
#: doc/classes/Tween.xml
msgid ""
"The animation is interpolated with a quintic (to the power of 5) function."
-msgstr "动画是用五次方,å³5的幂函数进行æ’值的。"
+msgstr "åŠ¨ç”»æ˜¯ç”¨äº”æ¬¡æ–¹ï¼Œå³ 5 的幂函数进行æ’值的。"
#: doc/classes/Tween.xml
msgid ""
"The animation is interpolated with a quartic (to the power of 4) function."
-msgstr "动画是用一个四次方,å³4的幂函数æ’值的。"
+msgstr "åŠ¨ç”»æ˜¯ç”¨ä¸€ä¸ªå››æ¬¡æ–¹ï¼Œå³ 4 的幂函数æ’值的。"
#: doc/classes/Tween.xml
msgid ""
"The animation is interpolated with a quadratic (to the power of 2) function."
-msgstr "动画是用二次方,å³2的幂函数æ’值的。"
+msgstr "åŠ¨ç”»æ˜¯ç”¨äºŒæ¬¡æ–¹ï¼Œå³ 2 的幂函数æ’值的。"
#: doc/classes/Tween.xml
msgid ""
"The animation is interpolated with an exponential (to the power of x) "
"function."
-msgstr "动画是用一个指数,å³x的幂函数æ’值的。"
+msgstr "åŠ¨ç”»æ˜¯ç”¨ä¸€ä¸ªæŒ‡æ•°ï¼Œå³ x 的幂函数æ’值的。"
#: doc/classes/Tween.xml
msgid ""
@@ -79950,7 +81246,7 @@ msgstr "动画弹性æ’值,在边缘摆动。"
#: doc/classes/Tween.xml
msgid ""
"The animation is interpolated with a cubic (to the power of 3) function."
-msgstr "动画是用一个立方,å³3的幂函数æ’值的。"
+msgstr "åŠ¨ç”»æ˜¯ç”¨ä¸€ä¸ªç«‹æ–¹ï¼Œå³ 3 的幂函数æ’值的。"
#: doc/classes/Tween.xml
msgid "The animation is interpolated with a function using square roots."
@@ -79982,7 +81278,7 @@ msgstr "[constant EASE_IN] å’Œ [constant EASE_OUT] 的组åˆã€‚两端的æ’值æœ
msgid ""
"A combination of [constant EASE_IN] and [constant EASE_OUT]. The "
"interpolation is fastest at both ends."
-msgstr "[constant EASE_IN] and [constant EASE_OUT]的组åˆã€‚两端的æ’值最快。"
+msgstr "[constant EASE_IN] å’Œ [constant EASE_OUT] 的组åˆã€‚两端的æ’值最快。"
#: doc/classes/Tweener.xml
msgid "Abstract class for all Tweeners used by [SceneTreeTween]."
@@ -80062,8 +81358,8 @@ msgid ""
" connected = true\n"
"[/codeblock]"
msgstr ""
-"一个简å•çš„æœåŠ¡å™¨ï¼Œå®ƒæ‰“å¼€ä¸€ä¸ª UDP 套接字,并在收到新的数æ®åŒ…时,返回连接的 "
-"[PacketPeerUDP]。请å‚阅 [method PacketPeerUDP.connect_to_host]。\n"
+"简å•çš„æœåŠ¡å™¨ï¼Œå®ƒæ‰“å¼€ä¸€ä¸ª UDP 套接字,并在收到新的数æ®åŒ…时,返回连接的 "
+"[PacketPeerUDP]。å¦è¯·å‚阅 [method PacketPeerUDP.connect_to_host]。\n"
"å¯åЍæœåС噍åŽï¼ˆ[method listen]),你将需è¦å®šæœŸ [method poll] 它(例如在 "
"[method Node._process] 内),æ‰ä¼šå¤„ç†æ–°çš„æ•°æ®åŒ…ã€å°†å®ƒä»¬ä¼ é€’给适当的 "
"[PacketPeerUDP]ã€æŽ¥å—æ–°è¿žæŽ¥ã€‚\n"
@@ -80168,8 +81464,8 @@ msgid ""
"also [method is_connection_available], [method PacketPeerUDP."
"connect_to_host]."
msgstr ""
-"返回第一个挂起的连接,注,连接到适当的地å€åŠç«¯å£ã€‚如果没有新的连接å¯ç”¨ï¼Œå°†è¿”"
-"回 [code]null[/code]。å‚阅[method is_connection_available], [method "
+"返回第一个挂起的连接(连接到适当的地å€åŠç«¯å£ï¼‰ã€‚如果没有新的连接å¯ç”¨ï¼Œå°†è¿”回 "
+"[code]null[/code]。å¦è¯·å‚阅 [method is_connection_available]ã€[method "
"PacketPeerUDP.connect_to_host]。"
#: doc/classes/UDPServer.xml
@@ -80225,9 +81521,9 @@ msgstr ""
"åœ¨ç¼–è¾‘å™¨æˆ–è‡ªå®šä¹‰å·¥å…·ä¸­ç®¡ç†æ’¤é”€åŠé‡åšæ“ä½œçš„è¾…åŠ©å·¥å…·ã€‚å®ƒçš„å·¥ä½œåŽŸç†æ˜¯"
"在“actionâ€ï¼ˆåŠ¨ä½œï¼‰ä¸­æ³¨å†Œæ–¹æ³•å’Œå±žæ€§çš„å˜åŒ–。\n"
"常è§çš„è¡Œä¸ºæ˜¯é¦–å…ˆåˆ›å»ºä¸€ä¸ªåŠ¨ä½œï¼Œç„¶åŽæ·»åŠ ç”¨äºŽ do/undo(执行/撤销)的方法调用或属"
-"æ€§æ›´æ”¹ï¼Œç„¶åŽæäº¤åŠ¨ä½œã€‚ \n"
+"æ€§æ›´æ”¹ï¼Œç„¶åŽæäº¤åŠ¨ä½œã€‚\n"
"䏋颿˜¯ä¸€ä¸ªæ’件中例å­ï¼Œå±•示如何在 Godot 编辑器自己的 [UndoRedo] 中添加一个动"
-"作。 \n"
+"作。\n"
"[codeblock]\n"
"var undo_redo = get_undo_redo() # EditorPlugin 的方法。\n"
"\n"
@@ -80527,10 +81823,10 @@ msgid ""
"[code]TCP[/code] or [code]UDP[/code]. See [enum UPNPResult] for possible "
"return values."
msgstr ""
-"删除默认网关上给定端å£å’Œå议组åˆçš„ç«¯å£æ˜ å°„,如果存在的è¯ã€‚[code]port[/code]å¿…"
-"须是1到65535之间的有效端å£ï¼Œ[code]proto[/code]å¯ä»¥æ˜¯[code]TCP[/code]或"
-"[code]UDP[/code]。å¯èƒ½çš„返回值,å‚阅[enum UPNPResult]。å‚阅[method "
-"get_gateway]。"
+"如果默认网关上存在给定的端å£å’Œå议组åˆçš„ç«¯å£æ˜ å°„ï¼ˆè§ [method get_gateway]),"
+"则将其删除。[code]port[/code] 必须是 1 到 65535 之间的有效端å£ï¼Œ[code]proto[/"
+"code] å¯ä»¥æ˜¯ [code]TCP[/code] 或 [code]UDP[/code]。å¯èƒ½çš„è¿”å›žå€¼è§ [enum "
+"UPNPResult]。"
#: modules/upnp/doc_classes/UPNP.xml
msgid ""
@@ -80550,11 +81846,11 @@ msgstr ""
#: modules/upnp/doc_classes/UPNP.xml
msgid "Returns the [UPNPDevice] at the given [code]index[/code]."
-msgstr "返回给定[code]index[/code]处的[UPNPDevice]。"
+msgstr "返回给定 [code]index[/code] 处的 [UPNPDevice]。"
#: modules/upnp/doc_classes/UPNP.xml
msgid "Returns the number of discovered [UPNPDevice]s."
-msgstr "返回已å‘现的[UPNPDevice]的数é‡ã€‚"
+msgstr "返回已å‘现的 [UPNPDevice] 的数é‡ã€‚"
#: modules/upnp/doc_classes/UPNP.xml
msgid ""
@@ -80569,24 +81865,25 @@ msgid ""
"Returns the external [IP] address of the default gateway (see [method "
"get_gateway]) as string. Returns an empty string on error."
msgstr ""
-"返回默认网关的外部[IP]地å€å­—符串。错误时返回一个空字符串。å‚阅[method "
-"get_gateway]。"
+"返回默认网关的外部 [IP] 地å€å­—ç¬¦ä¸²ï¼ˆè§ [method get_gateway])。错误时返回空字"
+"符串。"
#: modules/upnp/doc_classes/UPNP.xml
msgid ""
"Removes the device at [code]index[/code] from the list of discovered devices."
-msgstr "å°†[code]index[/code]处的设备从已å‘现的设备列表中移除。"
+msgstr "å°† [code]index[/code] 处的设备从已å‘现的设备列表中移除。"
#: modules/upnp/doc_classes/UPNP.xml
msgid ""
"Sets the device at [code]index[/code] from the list of discovered devices to "
"[code]device[/code]."
msgstr ""
-"å°†[code]index[/code]处的设备从已å‘现的设备列表中设置为[code]device[/code]。"
+"å°† [code]index[/code] 处的设备从已å‘现的设备列表中设置为 [code]device[/"
+"code]。"
#: modules/upnp/doc_classes/UPNP.xml
msgid "If [code]true[/code], IPv6 is used for [UPNPDevice] discovery."
-msgstr "如果[code]true[/code],则IPv6用于[UPNPDevice]å‘现。"
+msgstr "如果为 [code]true[/code],则 IPv6 用于 [UPNPDevice] å‘现。"
#: modules/upnp/doc_classes/UPNP.xml
msgid ""
@@ -80595,8 +81892,8 @@ msgid ""
"the source port 1900 (same as destination port). Otherwise, the value will "
"be used as the port."
msgstr ""
-"如果[code]0[/code],系统会自动选择用于å‘现的本地端å£ã€‚如果[code]1[/code],将"
-"从æºç«¯å£1900进行å‘现,注,与目的端å£ç›¸åŒã€‚å¦åˆ™ï¼Œå°†ä½¿ç”¨è¯¥å€¼ä½œä¸ºç«¯å£ã€‚"
+"如果为 [code]0[/code],系统会自动选择用于å‘现的本地端å£ã€‚如果为 [code]1[/"
+"code],将从æºç«¯å£ 1900 进行å‘现(与目的端å£ç›¸åŒï¼‰ã€‚å¦åˆ™ï¼Œå°†ä½¿ç”¨è¯¥å€¼ä½œä¸ºç«¯å£ã€‚"
#: modules/upnp/doc_classes/UPNP.xml
msgid ""
@@ -80606,21 +81903,21 @@ msgstr "用于å‘现的多播接å£ã€‚如果为空,则使用默认的多播接
#: modules/upnp/doc_classes/UPNP.xml
msgid "UPNP command or discovery was successful."
-msgstr "UPNP命令或å‘现æˆåŠŸã€‚"
+msgstr "UPNP 命令或å‘现æˆåŠŸã€‚"
#: modules/upnp/doc_classes/UPNP.xml
msgid ""
"Not authorized to use the command on the [UPNPDevice]. May be returned when "
"the user disabled UPNP on their router."
msgstr ""
-"未授æƒåœ¨[UPNPDevice]上使用该命令。当用户在其路由器上ç¦ç”¨UPNP时,å¯èƒ½ä¼šè¢«è¿”"
-"回。"
+"未授æƒåœ¨ [UPNPDevice] 上使用该命令。当用户在其路由器上ç¦ç”¨ UPNP 时,å¯èƒ½ä¼šè¢«"
+"返回。"
#: modules/upnp/doc_classes/UPNP.xml
msgid ""
"No port mapping was found for the given port, protocol combination on the "
"given [UPNPDevice]."
-msgstr "在给定的[UPNPDevice]上没有找到给定端å£ã€å议组åˆçš„ç«¯å£æ˜ å°„。"
+msgstr "在给定的 [UPNPDevice] 上没有找到给定端å£ã€å议组åˆçš„ç«¯å£æ˜ å°„。"
#: modules/upnp/doc_classes/UPNP.xml
msgid "Inconsistent parameters."
@@ -80631,8 +81928,8 @@ msgid ""
"No such entry in array. May be returned if a given port, protocol "
"combination is not found on an [UPNPDevice]."
msgstr ""
-"数组中没有此æ¡ç›®ã€‚如果在[UPNPDevice]上没有找到给定的端å£ã€å议组åˆï¼Œå¯èƒ½ä¼šè¢«"
-"返回。"
+"数组中没有此æ¡ç›®ã€‚如果在 [UPNPDevice] 上没有找到给定的端å£ã€å议组åˆï¼Œå¯èƒ½ä¼š"
+"被返回。"
#: modules/upnp/doc_classes/UPNP.xml
msgid "The action failed."
@@ -80641,15 +81938,15 @@ msgstr "æ“作失败。"
#: modules/upnp/doc_classes/UPNP.xml
msgid ""
"The [UPNPDevice] does not allow wildcard values for the source IP address."
-msgstr "[UPNPDevice]ä¸å…许æºIP地å€çš„通é…符值。"
+msgstr "[UPNPDevice] ä¸å…è®¸æº IP 地å€çš„通é…符值。"
#: modules/upnp/doc_classes/UPNP.xml
msgid "The [UPNPDevice] does not allow wildcard values for the external port."
-msgstr "[UPNPDevice]ä¸å…许外部端å£çš„通é…符值。"
+msgstr "[UPNPDevice] ä¸å…许外部端å£çš„通é…符值。"
#: modules/upnp/doc_classes/UPNP.xml
msgid "The [UPNPDevice] does not allow wildcard values for the internal port."
-msgstr "[UPNPDevice]ä¸å…许内部端å£çš„通é…符值。"
+msgstr "[UPNPDevice] ä¸å…许内部端å£çš„通é…符值。"
#: modules/upnp/doc_classes/UPNP.xml
msgid "The remote host value must be a wildcard."
@@ -80686,7 +81983,8 @@ msgstr "外部和内部端å£å€¼å¿…须相åŒã€‚"
msgid ""
"Only permanent leases are supported. Do not use the [code]duration[/code] "
"parameter when adding port mappings."
-msgstr "åªæ”¯æŒæ°¸ä¹…ç§Ÿç”¨ã€‚åœ¨æ·»åŠ ç«¯å£æ˜ å°„时,ä¸è¦ä½¿ç”¨[code]duration[/code]傿•°ã€‚"
+msgstr ""
+"åªæ”¯æŒæ°¸ä¹…ç§Ÿç”¨ã€‚åœ¨æ·»åŠ ç«¯å£æ˜ å°„时,ä¸è¦ä½¿ç”¨ [code]duration[/code] 傿•°ã€‚"
#: modules/upnp/doc_classes/UPNP.xml
msgid "Invalid gateway."
@@ -80718,7 +82016,7 @@ msgstr "æ— æ•ˆå‚æ•°ã€‚"
#: modules/upnp/doc_classes/UPNP.xml modules/upnp/doc_classes/UPNPDevice.xml
msgid "HTTP error."
-msgstr "HTTP错误。"
+msgstr "HTTP 错误。"
#: modules/upnp/doc_classes/UPNP.xml
msgid "Socket error."
@@ -80733,16 +82031,16 @@ msgid ""
"No gateway available. You may need to call [method discover] first, or "
"discovery didn't detect any valid IGDs (InternetGatewayDevices)."
msgstr ""
-"没有å¯ç”¨çš„网关。你å¯èƒ½éœ€è¦å…ˆè°ƒç”¨[method discover] ,å¦åˆ™å‘现没有检测到任何有"
-"效的IGD(InternetGatewayDevices)。"
+"没有å¯ç”¨çš„网关。你å¯èƒ½éœ€è¦å…ˆè°ƒç”¨ [method discover] ,å¦åˆ™å‘现没有检测到任何有"
+"效的 IGD(InternetGatewayDevices)。"
#: modules/upnp/doc_classes/UPNP.xml
msgid ""
"No devices available. You may need to call [method discover] first, or "
"discovery didn't detect any valid [UPNPDevice]s."
msgstr ""
-"没有å¯ç”¨çš„设备。你å¯èƒ½éœ€è¦å…ˆè°ƒç”¨[method discover],或者å‘现没有检测到任何有效"
-"的[UPNPDevice]。"
+"没有å¯ç”¨çš„设备。你å¯èƒ½éœ€è¦å…ˆè°ƒç”¨ [method discover],或者å‘现没有检测到任何有"
+"效的 [UPNPDevice]。"
#: modules/upnp/doc_classes/UPNP.xml modules/upnp/doc_classes/UPNPDevice.xml
msgid "Unknown error."
@@ -80760,9 +82058,9 @@ msgid ""
"and external IP address and status). Note that methods on this class are "
"synchronous and block the calling thread."
msgstr ""
-"UPNP设备。å‚阅 [UPNP] 了解UPNPå‘现和实用功能。æä¾›å¯¹UPNP控制命令的低层访问。"
-"å…许管ç†ç«¯å£æ˜ å°„(端å£è½¬å‘)和查询设备的网络信æ¯ï¼Œå¦‚本地和外部IP地å€å’Œçжæ€ã€‚"
-"请注æ„ï¼Œè¿™ä¸ªç±»çš„æ–¹æ³•æ˜¯åŒæ­¥çš„,会阻塞调用线程。"
+"UPNP 设备。å‚阅 [UPNP] 了解 UPNP å‘现和实用功能。æä¾›å¯¹ UPNP 控制命令的低层访"
+"问。å…许管ç†ç«¯å£æ˜ å°„(端å£è½¬å‘)和查询设备的网络信æ¯ï¼Œå¦‚本地和外部IP地å€å’Œçж"
+"æ€ã€‚请注æ„ï¼Œè¿™ä¸ªç±»çš„æ–¹æ³•æ˜¯åŒæ­¥çš„,会阻塞调用线程。"
#: modules/upnp/doc_classes/UPNPDevice.xml
msgid ""
@@ -80770,15 +82068,15 @@ msgid ""
"for the given protocol to the local machine. See [method UPNP."
"add_port_mapping]."
msgstr ""
-"æ·»åŠ ä¸€ä¸ªç«¯å£æ˜ å°„,将这个[UPNPDevice]上给定的外部端å£è½¬å‘到本地机器上,以给定"
-"çš„å议。å‚阅 [method UPNP.add_port_mapping]。"
+"æ·»åŠ ä¸€ä¸ªç«¯å£æ˜ å°„,将这个 [UPNPDevice] 上给定的外部端å£è½¬å‘到本地机器上,以给"
+"定的åè®®ã€‚è§ [method UPNP.add_port_mapping]。"
#: modules/upnp/doc_classes/UPNPDevice.xml
msgid ""
"Deletes the port mapping identified by the given port and protocol "
"combination on this device. See [method UPNP.delete_port_mapping]."
msgstr ""
-"删除该设备上由给定的端å£å’Œå议组åˆç¡®å®šçš„ç«¯å£æ˜ å°„。å‚阅[method UPNP."
+"删除该设备上由给定的端å£å’Œå议组åˆç¡®å®šçš„ç«¯å£æ˜ å°„ã€‚è§ [method UPNP."
"delete_port_mapping]。"
#: modules/upnp/doc_classes/UPNPDevice.xml
@@ -80786,35 +82084,35 @@ msgid ""
"Returns [code]true[/code] if this is a valid IGD (InternetGatewayDevice) "
"which potentially supports port forwarding."
msgstr ""
-"如果这是一个有效的IGD(InternetGatewayDevice),å¯èƒ½æ”¯æŒç«¯å£è½¬å‘,则返回 "
+"如果这是一个有效的 IGD(InternetGatewayDevice),å¯èƒ½æ”¯æŒç«¯å£è½¬å‘,则返回 "
"[code]true[/code]。"
#: modules/upnp/doc_classes/UPNPDevice.xml
msgid ""
"Returns the external IP address of this [UPNPDevice] or an empty string."
-msgstr "返回这个[UPNPDevice]的外部IPåœ°å€æˆ–空字符串。"
+msgstr "返回这个 [UPNPDevice] 的外部 IP åœ°å€æˆ–空字符串。"
#: modules/upnp/doc_classes/UPNPDevice.xml
msgid "URL to the device description."
-msgstr "设备æè¿°çš„URL。"
+msgstr "设备æè¿°çš„ URL。"
#: modules/upnp/doc_classes/UPNPDevice.xml
msgid "IDG control URL."
-msgstr "IDG控件URL。"
+msgstr "IDG 控件 URL。"
#: modules/upnp/doc_classes/UPNPDevice.xml
msgid ""
"Address of the local machine in the network connecting it to this "
"[UPNPDevice]."
-msgstr "将其连接到该[UPNPDevice]的网络中的本地机器的地å€ã€‚"
+msgstr "将其连接到该 [UPNPDevice] 的网络中的本地机器的地å€ã€‚"
#: modules/upnp/doc_classes/UPNPDevice.xml
msgid "IGD service type."
-msgstr "IGDæœåŠ¡ç±»åž‹ã€‚"
+msgstr "IGD æœåŠ¡ç±»åž‹ã€‚"
#: modules/upnp/doc_classes/UPNPDevice.xml
msgid "IGD status. See [enum IGDStatus]."
-msgstr "IGD状æ€ã€‚å‚阅[enum IGDStatus]。"
+msgstr "IGD 状æ€ã€‚è§ [enum IGDStatus]。"
#: modules/upnp/doc_classes/UPNPDevice.xml
msgid "Service type."
@@ -80826,11 +82124,11 @@ msgstr "OK。"
#: modules/upnp/doc_classes/UPNPDevice.xml
msgid "Empty HTTP response."
-msgstr "空的HTTPå“应。"
+msgstr "空的 HTTP å“应。"
#: modules/upnp/doc_classes/UPNPDevice.xml
msgid "Returned response contained no URLs."
-msgstr "返回的å“应ä¸åŒ…å«ä»»ä½•URL。"
+msgstr "返回的å“应ä¸åŒ…å«ä»»ä½• URL。"
#: modules/upnp/doc_classes/UPNPDevice.xml
msgid "Not a valid IGD."
@@ -81016,7 +82314,7 @@ msgstr "垂直盒å¼å®¹å™¨ã€‚请å‚阅 [BoxContainer]。"
#: doc/classes/VBoxContainer.xml
msgid "The vertical space between the [VBoxContainer]'s elements."
-msgstr "[VBoxContainer]的元素之间的垂直空间。"
+msgstr "[VBoxContainer] 的元素之间的垂直空间。"
#: doc/classes/Vector2.xml
msgid "Vector used for 2D math."
@@ -81061,14 +82359,15 @@ msgid ""
"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 ""
-"返回这个å‘é‡ç›¸å¯¹äºŽæ­£X轴的角度,或[code](1, 0)[/code]å‘é‡ï¼Œå•ä½ä¸ºå¼§åº¦ã€‚\n"
-"例如,[code]Vector2.RIGHT.angle()[/code]将返回0,[code]Vector2.DOWN.angle()[/"
-"code]将返回 [code]PI / 2[/code](四分之一转,或90度),[code]Vector2(1, -1)."
-"angle()[/code]将返回 [code]-PI / 4[/code] (负八分之一转,或-45度)。\n"
+"返回这个å‘é‡ç›¸å¯¹äºŽæ­£ X 轴的角度,或 [code](1, 0)[/code] å‘é‡ï¼Œå•ä½ä¸ºå¼§åº¦ã€‚\n"
+"例如,[code]Vector2.RIGHT.angle()[/code] 将返回 0,[code]Vector2.DOWN.angle()"
+"[/code] 将返回 [code]PI / 2[/code](四分之一转,或 90 度),[code]Vector2(1, "
+"-1).angle()[/code] 将返回 [code]-PI / 4[/code] (负八分之一转,或 -45 "
+"度)。\n"
"[url=https://raw.githubusercontent.com/godotengine/godot-docs/master/img/"
"vector2_angle.png]返回角度的说明。[/url]\n"
-"相当于以å‘é‡çš„[member y] å’Œ [member x]ä¸ºå‚æ•°è°ƒç”¨[method @GDScript.atan2]æ—¶çš„"
-"结果。[code]atan2(y, x)[/code]。"
+"相当于以å‘é‡çš„ [member y] å’Œ [member x] ä¸ºå‚æ•°è°ƒç”¨ [method @GDScript.atan2] "
+"时的结果。[code]atan2(y, x)[/code]。"
#: doc/classes/Vector2.xml
msgid ""
@@ -81095,7 +82394,7 @@ msgstr ""
msgid ""
"Returns the aspect ratio of this vector, the ratio of [member x] to [member "
"y]."
-msgstr "返回这个å‘é‡çš„长宽比,å³[member x] 与[member y]的比例。"
+msgstr "返回这个å‘é‡çš„é•¿å®½æ¯”ï¼Œå³ [member x] 与 [member y] 的比例。"
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
msgid ""
@@ -81144,14 +82443,14 @@ msgid ""
msgstr ""
"用[code]pre_a[/code]å’Œ[code]post_b[/code]ä½œä¸ºå¥æŸ„,在这个å‘é‡å’Œ[code]b[/code]"
"之间进行三次æ’值,并在[code]weight[/code]ä½ç½®è¿”回结果。[code]weight[/code]çš„"
-"范围是0.0到1.0,表示æ’值的é‡ã€‚"
+"范围是0.0 到 1.0,表示æ’值的é‡ã€‚"
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
msgid ""
"Returns the normalized vector pointing from this vector to [code]b[/code]. "
"This is equivalent to using [code](b - a).normalized()[/code]."
msgstr ""
-"返回从这个å‘釿Œ‡å‘[code]b[/code]的归一化å‘é‡ã€‚这相当于使用[code](b-a)."
+"返回从这个å‘釿Œ‡å‘ [code]b[/code] 的归一化å‘é‡ã€‚相当于使用 [code](b-a)."
"normalized()[/code]。"
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
@@ -81160,9 +82459,9 @@ msgid ""
"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 ""
-"返回这个å‘é‡ä¸Ž[code]b[/code]之间的平方è·ç¦»ã€‚\n"
-"这个方法比[method distance_to]è¿è¡Œå¾—æ›´å¿«ï¼Œæ‰€ä»¥å¦‚æžœä½ éœ€è¦æ¯”较å‘釿ˆ–需è¦ä¸€äº›å…¬"
-"å¼çš„平方è·ç¦»ï¼Œåˆ™æ›´å–œæ¬¢å®ƒã€‚"
+"返回这个å‘é‡ä¸Ž [code]b[/code] 之间的平方è·ç¦»ã€‚\n"
+"这个方法比 [method distance_to] è¿è¡Œå¾—æ›´å¿«ï¼Œæ‰€ä»¥å¦‚æžœä½ éœ€è¦æ¯”较å‘釿ˆ–需è¦ä¸€äº›"
+"å…¬å¼çš„平方è·ç¦»ï¼Œåˆ™æ›´å–œæ¬¢å®ƒã€‚"
#: doc/classes/Vector2.xml
msgid "Returns the distance between this vector and [code]to[/code]."
@@ -81182,13 +82481,13 @@ msgid ""
"aligned.\n"
"[b]Note:[/b] [code]a.dot(b)[/code] is equivalent to [code]b.dot(a)[/code]."
msgstr ""
-"返回此å‘é‡ä¸Ž[code]with[/code]的点积。这å¯ä»¥ç”¨æ¥æ¯”较两个å‘é‡ä¹‹é—´çš„角度。例如,"
-"è¿™å¯ä»¥ç”¨æ¥ç¡®å®šä¸€ä¸ªæ•Œäººæ˜¯å¦æ­£æœå‘玩家。\n"
-"对于直角90度,点积将是[code]0[/code],对于窄于90度的角度,点积大于0,对于宽于"
-"90度的角度,点积å°äºŽ0。\n"
-"当使用归一化å•ä½å‘釿—¶ï¼Œå½“å‘釿œå‘ç›¸åæ–¹å‘时,结果总是在[code]-1.0[/code]"
-"(180度角)和[code]1.0[/code](0度角)之间,当å‘é‡å¯¹é½ã€‚\n"
-"[b]注æ„:[/b][code]a.dot(b)[/code]ç­‰åŒäºŽ[code]b.dot(a)[/code]。"
+"返回此å‘é‡ä¸Ž [code]with[/code] 的点积。这å¯ä»¥ç”¨æ¥æ¯”较两个å‘é‡ä¹‹é—´çš„角度。例"
+"如,这å¯ä»¥ç”¨æ¥ç¡®å®šä¸€ä¸ªæ•Œäººæ˜¯å¦æ­£æœå‘玩家。\n"
+"对于直角 90 度,点积将是 [code]0[/code],对于窄于 90 度的角度,点积大于 0,对"
+"于宽于 90 度的角度,点积å°äºŽ 0。\n"
+"当使用归一化å•ä½å‘釿—¶ï¼Œå½“å‘釿œå‘ç›¸åæ–¹å‘时,结果总是在 [code]-1.0[/code]"
+"(180 度角)和 [code]1.0[/code](0 度角)之间,当å‘é‡å¯¹é½ã€‚\n"
+"[b]注æ„:[/b][code]a.dot(b)[/code] 与 [code]b.dot(a)[/code] 等价。"
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
msgid ""
@@ -81202,8 +82501,8 @@ msgid ""
"approximately equal, by running [method @GDScript.is_equal_approx] on each "
"component."
msgstr ""
-"通过对æ¯ä¸ªåˆ†é‡è¿è¡Œ[method @GDScript.is_equal_approx],如果这个å‘é‡å’Œ[code]v[/"
-"code]近似相等,返回 [code]true[/code]。"
+"通过对æ¯ä¸ªåˆ†é‡è¿è¡Œ [method @GDScript.is_equal_approx],如果这个å‘é‡å’Œ "
+"[code]v[/code] 近似相等,返回 [code]true[/code]。"
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
msgid ""
@@ -81223,14 +82522,14 @@ msgid ""
"compare vectors or need the squared distance for some formula."
msgstr ""
"返回这个å‘é‡çš„平方长度,å³å¹³æ–¹å¤§å°ã€‚\n"
-"这个方法比[method length]è¿è¡Œå¾—æ›´å¿«ï¼Œæ‰€ä»¥å¦‚æžœä½ éœ€è¦æ¯”较å‘釿ˆ–需è¦ä¸€äº›å…¬å¼çš„å¹³"
-"æ–¹è·ç¦»æ—¶ï¼Œæ›´å–œæ¬¢ç”¨å®ƒã€‚"
+"这个方法比 [method length] è¿è¡Œå¾—æ›´å¿«ï¼Œæ‰€ä»¥å¦‚æžœä½ éœ€è¦æ¯”较å‘釿ˆ–需è¦ä¸€äº›å…¬å¼çš„"
+"平方è·ç¦»æ—¶ï¼Œæ›´å–œæ¬¢ç”¨å®ƒã€‚"
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
msgid ""
"Returns the vector with a maximum length by limiting its length to "
"[code]length[/code]."
-msgstr "通过é™åˆ¶å…¶é•¿åº¦ä¸º[code]length[/code],返回具有最大长度的å‘é‡ã€‚"
+msgstr "通过é™åˆ¶å…¶é•¿åº¦ä¸º [code]length[/code],返回具有最大长度的å‘é‡ã€‚"
#: doc/classes/Vector2.xml
msgid ""
@@ -81238,8 +82537,8 @@ msgid ""
"[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 ""
-"返回这个å‘é‡ä¸Ž[code]to[/code]之间线性æ’值的结果,æ’值é‡ä¸º[code]weight[/"
-"code]。[code]weight[/code]的范围是0.0到1.0,表示æ’值的数é‡ã€‚"
+"返回这个å‘é‡ä¸Ž [code]to[/code] 之间线性æ’值的结果,æ’值é‡ä¸º [code]weight[/"
+"code]。[code]weight[/code] 的范围是 0.0 到 1.0,表示æ’值的数é‡ã€‚"
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
msgid ""
@@ -81253,15 +82552,15 @@ msgstr ""
msgid ""
"Returns the vector scaled to unit length. Equivalent to [code]v / v.length()"
"[/code]."
-msgstr "返回缩放为å•ä½é•¿åº¦çš„å‘é‡ã€‚相当于[code]v/v.length()[/code]。"
+msgstr "返回缩放为å•ä½é•¿åº¦çš„å‘é‡ã€‚相当于 [code]v/v.length()[/code]。"
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
msgid ""
"Returns a vector composed of the [method @GDScript.fposmod] of this vector's "
"components and [code]mod[/code]."
msgstr ""
-"返回一个由这个å‘é‡åˆ†é‡çš„[method @GDScript.fposmod]å’Œ[code]mod[/code]组æˆçš„å‘"
-"é‡ã€‚"
+"返回一个由这个å‘é‡åˆ†é‡çš„ [method @GDScript.fposmod] å’Œ [code]mod[/code] 组æˆ"
+"çš„å‘é‡ã€‚"
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
msgid ""
@@ -81315,7 +82614,7 @@ msgid ""
"[b]Note:[/b] Both vectors must be normalized."
msgstr ""
"返回这个å‘é‡ä¸Ž[code]to[/code]之间的çƒé¢çº¿æ€§æ’值的结果,按[code]weight[/code]"
-"的数é‡ã€‚[code]weight[/code]的范围是0.0到1.0,表示æ’值的数é‡ã€‚\n"
+"的数é‡ã€‚[code]weight[/code]的范围是0.0 到 1.0,表示æ’值的数é‡ã€‚\n"
"[b]注æ„:[/b]两个å‘é‡éƒ½å¿…须被归一化。"
#: doc/classes/Vector2.xml doc/classes/Vector3.xml
@@ -81401,7 +82700,7 @@ msgid ""
msgstr ""
"3 元素结构,å¯ç”¨äºŽè¡¨ç¤º 3D 空间中的ä½ç½®æˆ–任何其他数值三元组。\n"
"[b]注æ„:[/b]在布尔上下文中,如果 Vector3 等于 [code]Vector3(0, 0, 0)[/"
-"code],将评估为 [code]false[/code]。å¦åˆ™ï¼Œ Vector3 将始终评估为 [code]true[/"
+"code],将评估为 [code]false[/code]。å¦åˆ™ï¼ŒVector3 将始终评估为 [code]true[/"
"code]。"
#: doc/classes/Vector3.xml
@@ -81451,7 +82750,7 @@ msgstr ""
"于宽于 90 度的角度,点积å°äºŽ 0。\n"
"当使用归一化å•ä½å‘é‡ï¼Œå‘釿œå‘ç›¸åæ–¹å‘时,结果总是在 [code]-1.0[/code](180 "
"度角)和 [code]1.0[/code](0 度角)之间,当å‘é‡å¯¹é½ã€‚\n"
-"[b]注æ„:[/b][code]a.dot(b)[/code] ç­‰åŒäºŽ [code]b.dot(a)[/code]。"
+"[b]注æ„:[/b][code]a.dot(b)[/code] 与 [code]b.dot(a)[/code] 等价。"
#: doc/classes/Vector3.xml
msgid ""
@@ -81521,7 +82820,7 @@ msgid ""
"components set as the scale."
msgstr ""
"返回一个以该å‘é‡ä¸ºä¸»å¯¹è§’线的对角线矩阵。\n"
-"这相当于一个没有旋转或剪切的 Basis,这个å‘é‡çš„分é‡è¢«è®¾å®šä¸ºç¼©æ”¾ã€‚"
+"相当于一个没有旋转或剪切的 Basis,这个å‘é‡çš„分é‡è¢«è®¾å®šä¸ºç¼©æ”¾ã€‚"
#: doc/classes/Vector3.xml
msgid ""
@@ -81787,7 +83086,7 @@ msgid ""
"0.1 and 0.3 depending on the type of car."
msgstr ""
"这是悬架å¯ä»¥ç§»åŠ¨çš„è·ç¦»ã€‚由于Godot çš„å•ä½ç›¸å½“äºŽç±³ï¼Œæ‰€ä»¥ä¿æŒè¿™ä¸ªè®¾ç½®ç›¸å¯¹è¾ƒä½Žã€‚"
-"æ ¹æ®æ±½è½¦çš„类型,试试0.1å’Œ0.3之间的值。"
+"æ ¹æ®æ±½è½¦çš„类型,试试 0.1 å’Œ 0.3 之间的值。"
#: doc/classes/VehicleWheel.xml
msgid ""
@@ -81795,7 +83094,7 @@ msgid ""
"value is used in conjunction with [member VehicleBody.steering] and ignored "
"if you are using the per-wheel [member steering] value instead."
msgstr ""
-"如果[code]true[/code]ï¼Œå½“æ±½è½¦è½¬å‘æ—¶ï¼Œå…¶è½®å­å°†è¢«è½¬åŠ¨ã€‚æ­¤å€¼å’Œ[member "
+"如果为 [code]true[/code]ï¼Œå½“æ±½è½¦è½¬å‘æ—¶ï¼Œå…¶è½®å­å°†è¢«è½¬åŠ¨ã€‚æ­¤å€¼å’Œ[member "
"VehicleBody.steering]一起使用,如果使用æ¯ä¸ªè½®å­çš„[member steering]值æ¥ä»£æ›¿ï¼Œ"
"则会被忽略。"
@@ -81806,9 +83105,9 @@ msgid ""
"VehicleBody.engine_force] and ignored if you are using the per-wheel [member "
"engine_force] value instead."
msgstr ""
-"如果[code]true[/code],此轮å­å°†å¼•擎力传递给地é¢ï¼ŒæŽ¨åŠ¨è½¦è¾†å‰è¿›ã€‚此值和[member "
-"VehicleBody.engine_force]一起使用,如果使用æ¯ä¸ªè½®å­çš„[member engine_force]"
-"值,则忽略该值。"
+"如果为 [code]true[/code],此轮å­å°†å¼•擎力传递给地é¢ï¼ŒæŽ¨åŠ¨è½¦è¾†å‰è¿›ã€‚此值和"
+"[member VehicleBody.engine_force]一起使用,如果使用æ¯ä¸ªè½®å­çš„[member "
+"engine_force]值,则忽略该值。"
#: doc/classes/VehicleWheel.xml
msgid ""
@@ -81922,7 +83221,7 @@ msgstr "è¦æ’­æ”¾çš„嵌入å¼éŸ³è½¨ã€‚"
#: doc/classes/VideoPlayer.xml
msgid "If [code]true[/code], playback starts when the scene loads."
-msgstr "如果[code]true[/code],当场景加载时开始播放。"
+msgstr "如果为 [code]true[/code],当场景加载时开始播放。"
#: doc/classes/VideoPlayer.xml
msgid "Amount of time in milliseconds to store in buffer while playing."
@@ -81938,12 +83237,12 @@ msgid ""
"control minimum size will be automatically adjusted to match the video "
"stream's dimensions."
msgstr ""
-"如果[code]true[/code],视频会缩放到控件的尺寸。å¦åˆ™ï¼ŒæŽ§ä»¶çš„æœ€å°å°ºå¯¸å°†è¢«è‡ªåŠ¨è°ƒ"
-"整以匹é…视频æµçš„尺寸。"
+"如果为 [code]true[/code],视频会缩放到控件的尺寸。å¦åˆ™ï¼ŒæŽ§ä»¶çš„æœ€å°å°ºå¯¸å°†è¢«è‡ª"
+"动调整以匹é…视频æµçš„尺寸。"
#: doc/classes/VideoPlayer.xml
msgid "If [code]true[/code], the video is paused."
-msgstr "如果[code]true[/code],则暂åœè§†é¢‘。"
+msgstr "如果为 [code]true[/code],则暂åœè§†é¢‘。"
#: doc/classes/VideoPlayer.xml
msgid "The assigned video stream. See description for supported formats."
@@ -82027,15 +83326,16 @@ msgid ""
"extension, you will have to rename the extension to [code].ogv[/code] to use "
"those videos within Godot."
msgstr ""
-"[VideoStream]资æºå¤„ç†[url=https://www.theora.org/]Ogg Theora[/url]视频格å¼ï¼Œ"
-"扩展å为[code].ogv[/code]。Theoraç¼–è§£ç å™¨æ¯”[VideoStreamWebm]çš„VP8å’ŒVP9效率"
-"低,但它以较少的CPUèµ„æºæ¥è§£ç ã€‚Theoraç¼–è§£ç å™¨æ˜¯åœ¨CPU上解ç ã€‚\n"
-"[b]注æ„:[/b]虽然Ogg Theora视频也å¯ä»¥æœ‰[code].ogg[/code]扩展å,但必须将扩展"
-"åæ”¹ä¸º[code].ogv[/code],以便在Godot内使用。"
+"[VideoStream] 资æºå¤„ç† [url=https://www.theora.org/]Ogg Theora[/url] 视频格"
+"å¼ï¼Œæ‰©å±•å为 [code].ogv[/code]。Theora ç¼–è§£ç å™¨æ¯” [VideoStreamWebm] çš„ VP8 "
+"å’Œ VP9 效率低,但它以较少的 CPU èµ„æºæ¥è§£ç ã€‚Theora ç¼–è§£ç å™¨æ˜¯åœ¨ CPU 上解"
+"ç ã€‚\n"
+"[b]注æ„:[/b]虽然 Ogg Theora 视频也å¯ä»¥æœ‰ [code].ogg[/code] 扩展å,但必须将"
+"æ‰©å±•åæ”¹ä¸º [code].ogv[/code],以便在 Godot 内使用。"
#: modules/theora/doc_classes/VideoStreamTheora.xml
msgid "Returns the Ogg Theora video file handled by this [VideoStreamTheora]."
-msgstr "返回由这个[VideoStreamTheora]处ç†çš„Ogg Theora视频文件。"
+msgstr "返回由这个 [VideoStreamTheora] 处ç†çš„ Ogg Theora 视频文件。"
#: modules/theora/doc_classes/VideoStreamTheora.xml
msgid ""
@@ -82043,12 +83343,12 @@ msgid ""
"handles. The [code]file[/code] name should have the [code].ogv[/code] "
"extension."
msgstr ""
-"设置该[VideoStreamTheora]资æºå¤„ç†çš„Ogg Theora视频文件。[code]file[/code]çš„å"
-"称应该有[code].ogv[/code]扩展å。"
+"设置该 [VideoStreamTheora] 资æºå¤„ç†çš„ Ogg Theora 视频文件。[code]file[/code] "
+"çš„å称应该有 [code].ogv[/code] 扩展å。"
#: modules/webm/doc_classes/VideoStreamWebm.xml
msgid "[VideoStream] resource for WebM videos."
-msgstr "[VideoStream] WebM视频的资æºã€‚"
+msgstr "[VideoStream] WebM 视频的资æºã€‚"
#: modules/webm/doc_classes/VideoStreamWebm.xml
msgid ""
@@ -82424,13 +83724,12 @@ msgstr ""
"是针对éžå¸¸é«˜ç«¯çš„系统,å¦åˆ™æ•°å€¼ä¸º4是最好的。"
#: doc/classes/Viewport.xml
-#, fuzzy
msgid ""
"If [code]true[/code], the viewport will use a unique copy of the [World] "
"defined in [member world]."
msgstr ""
-"如果为 [code]true[/code],该视窗将使用 [code]world[/code] 属性中定义的 "
-"[World]。"
+"如果为 [code]true[/code],该视窗将使用 [member world] 中定义的 [World] 的唯一"
+"副本。"
#: doc/classes/Viewport.xml
msgid ""
@@ -82861,11 +84160,11 @@ msgstr "设置由给定的[enum Enabler]常é‡è¯†åˆ«çš„å¯ç”¨ç¨‹åºçš„æ´»åŠ¨çŠ¶æ
#: doc/classes/VisibilityEnabler.xml
msgid "If [code]true[/code], [RigidBody] nodes will be paused."
-msgstr "如果[code]true[/code],[RigidBody]节点将被暂åœã€‚"
+msgstr "如果为 [code]true[/code],[RigidBody]节点将被暂åœã€‚"
#: doc/classes/VisibilityEnabler.xml doc/classes/VisibilityEnabler2D.xml
msgid "If [code]true[/code], [AnimationPlayer] nodes will be paused."
-msgstr "如果[code]true[/code],[AnimationPlayer]节点将被暂åœã€‚"
+msgstr "如果为 [code]true[/code],[AnimationPlayer]节点将被暂åœã€‚"
#: doc/classes/VisibilityEnabler.xml doc/classes/VisibilityEnabler2D.xml
msgid "This enabler will pause [AnimationPlayer] nodes."
@@ -82904,46 +84203,48 @@ msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
msgid "If [code]true[/code], [RigidBody2D] nodes will be paused."
-msgstr "如果[code]true[/code],[RigidBody2D]节点将被暂åœã€‚"
+msgstr "如果为 [code]true[/code],[RigidBody2D]节点将被暂åœã€‚"
#: doc/classes/VisibilityEnabler2D.xml
msgid "If [code]true[/code], [AnimatedSprite] nodes will be paused."
-msgstr "如果[code]true[/code],[AnimatedSprite]节点将被暂åœã€‚"
+msgstr "如果为 [code]true[/code],[AnimatedSprite]节点将被暂åœã€‚"
#: doc/classes/VisibilityEnabler2D.xml
msgid "If [code]true[/code], [Particles2D] nodes will be paused."
-msgstr "如果[code]true[/code],[Particles2D]节点将被暂åœã€‚"
+msgstr "如果为 [code]true[/code],[Particles2D]节点将被暂åœã€‚"
#: doc/classes/VisibilityEnabler2D.xml
msgid ""
"If [code]true[/code], the parent's [method Node._physics_process] will be "
"stopped."
-msgstr "如果[code]true[/code],父级的[method Node._physics_process]å°†è¢«åœæ­¢ã€‚"
+msgstr ""
+"如果为 [code]true[/code],父级的[method Node._physics_process]å°†è¢«åœæ­¢ã€‚"
#: doc/classes/VisibilityEnabler2D.xml
msgid ""
"If [code]true[/code], the parent's [method Node._process] will be stopped."
-msgstr "如果[code]true[/code],父级的[method Node._process]å°†è¢«åœæ­¢ã€‚"
+msgstr "如果为 [code]true[/code],父级的[method Node._process]å°†è¢«åœæ­¢ã€‚"
#: doc/classes/VisibilityEnabler2D.xml
msgid "This enabler will freeze [RigidBody2D] nodes."
-msgstr "这个å¯ç”¨ç¨‹åºå°†å†»ç»“[RigidBody2D]节点。"
+msgstr "这个å¯ç”¨ç¨‹åºå°†å†»ç»“ [RigidBody2D] 节点。"
#: doc/classes/VisibilityEnabler2D.xml
msgid "This enabler will stop [Particles2D] nodes."
-msgstr "这个å¯ç”¨ç¨‹åºå°†åœæ­¢[Particles2D]节点。"
+msgstr "这个å¯ç”¨ç¨‹åºå°†åœæ­¢ [Particles2D] 节点。"
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _process function."
-msgstr "这个å¯ç”¨ç¨‹åºå°†åœæ­¢çˆ¶ç±»çš„_process函数。"
+msgid "This enabler will stop the parent's [method Node._process] function."
+msgstr "这个å¯ç”¨ç¨‹åºå°†åœæ­¢çˆ¶ç±»çš„ [method Node._process] 函数。"
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _physics_process function."
-msgstr "这个å¯ç”¨ç¨‹åºå°†åœæ­¢çˆ¶ç±»çš„_physics_process函数。"
+msgid ""
+"This enabler will stop the parent's [method Node._physics_process] function."
+msgstr "这个å¯ç”¨ç¨‹åºå°†åœæ­¢çˆ¶ç±»çš„ [method Node._physics_process] 函数。"
#: doc/classes/VisibilityEnabler2D.xml
msgid "This enabler will stop [AnimatedSprite] nodes animations."
-msgstr "这个å¯ç”¨ç¨‹åºå°†åœæ­¢[AnimatedSprite]节点的动画。"
+msgstr "这个å¯ç”¨ç¨‹åºå°†åœæ­¢ [AnimatedSprite] 节点的动画。"
#: doc/classes/VisibilityNotifier.xml doc/classes/VisibilityNotifier2D.xml
msgid "Detects approximately when the node is visible on screen."
@@ -82979,7 +84280,7 @@ msgid ""
"right after it is instantiated, even if it will be on screen in the draw "
"pass."
msgstr ""
-"如果[code]true[/code],则边界框在å±å¹•上。\n"
+"如果为 [code]true[/code],则边界框在å±å¹•上。\n"
"[b]注æ„:[/b]一旦添加到场景树中,需è¦ä¸€å¸§æ¥è®¡ç®—节点的å¯è§æ€§ï¼Œæ‰€ä»¥è¿™ä¸ªæ–¹æ³•将在"
"它被实例化åŽç«‹å³è¿”回 [code]false[/code],å³ä½¿å±å¹•在绘制过程中。"
@@ -82988,6 +84289,20 @@ msgid "The VisibilityNotifier's bounding box."
msgstr "VisibilityNotifier的边界框。"
#: doc/classes/VisibilityNotifier.xml
+msgid ""
+"In addition to checking whether a node is on screen or within a [Camera]'s "
+"view, VisibilityNotifier can also optionally check whether a node is within "
+"a specified maximum distance when using a [Camera] with perspective "
+"projection. This is useful for throttling the performance requirements of "
+"nodes that are far away.\n"
+"[b]Note:[/b] This feature will be disabled if set to 0.0."
+msgstr ""
+"除了检查节点是å¦åœ¨å±å¹•内或在 [Camera] 的视野内,VisibilityNotifier 还å¯ä»¥åœ¨ä½¿"
+"用é€è§†æŠ•影的 [Camera] 时对节点是å¦åœ¨æŒ‡å®šçš„æœ€å¤§è·ç¦»å†…进行检测。å¯ç”¨äºŽé™åˆ¶è¿œè·"
+"离节点的性能需求。\n"
+"[b]注æ„:[/b]如果设为 0.0 则会ç¦ç”¨è¿™ä¸ªç‰¹æ€§ã€‚"
+
+#: doc/classes/VisibilityNotifier.xml
msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view."
msgstr "当VisibilityNotifier进入[Camera]的视图时触å‘。"
@@ -83030,7 +84345,7 @@ msgid ""
"right after it is instantiated, even if it will be on screen in the draw "
"pass."
msgstr ""
-"如果[code]true[/code],则边界矩形在å±å¹•上。\n"
+"如果为 [code]true[/code],则边界矩形在å±å¹•上。\n"
"[b]注æ„:[/b]一旦添加到场景树中,需è¦ä¸€å¸§æ¥è®¡ç®—节点的å¯è§æ€§ï¼Œæ‰€ä»¥è¿™ä¸ªæ–¹æ³•将在"
"它被实例化åŽç«‹å³è¿”回 [code]false[/code],å³ä½¿å±å¹•在绘制过程中。"
@@ -83124,8 +84439,8 @@ msgid ""
"changes how the engine handles the [VisualInstance] under the hood. "
"Equivalent to [method VisualServer.instance_set_base]."
msgstr ""
-"设置由该[VisualInstance]实例化的资æºï¼Œè¿™å°†æ”¹å˜å¼•擎对该[VisualInstance]的处ç†"
-"æ–¹å¼ã€‚相当于[method VisualServer.instance_set_base]。"
+"设置由该 [VisualInstance] 实例化的资æºï¼Œè¿™å°†æ”¹å˜å¼•擎对该 [VisualInstance] çš„"
+"å¤„ç†æ–¹å¼ã€‚相当于 [method VisualServer.instance_set_base]。"
#: doc/classes/VisualInstance.xml
msgid "Enables a particular layer in [member layers]."
@@ -83356,7 +84671,7 @@ msgstr "å½“èŠ‚ç‚¹ç«¯å£æ›´æ”¹æ—¶è§¦å‘。"
#: modules/visual_script/doc_classes/VisualScriptBasicTypeConstant.xml
msgid "A Visual Script node representing a constant from the base types."
-msgstr "一个 Visual Script 节点,表示基本类型中的一个常é‡ã€‚"
+msgstr "Visual Script 节点,表示基本类型中的一个常é‡ã€‚"
#: modules/visual_script/doc_classes/VisualScriptBasicTypeConstant.xml
msgid ""
@@ -83509,8 +84824,8 @@ msgid ""
"ease-in, 1+ is ease out. Negative values are in-out/out in."
msgstr ""
"缓动函数,基于指数。[code]s[/code]是函数的x值,[code]curve[/code]为0时,函数"
-"为常é‡å‡½æ•°ï¼Œ1是线性函数,0到1是缓入,1+是缓出。0到-1是缓出å†ç¼“入,低于-1是缓"
-"å…¥å†ç¼“出。"
+"为常é‡å‡½æ•°ï¼Œ1是线性函数,0 到 1是缓入,1+是缓出。0到-1是缓出å†ç¼“入,低于-1是"
+"缓入å†ç¼“出。"
#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml
msgid ""
@@ -83563,8 +84878,8 @@ 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 ""
-"返回一个介于0到1ä¹‹é—´çš„éšæœºæµ®ç‚¹å€¼ã€‚è¦èŽ·å¾—ä¸€ä¸ªä»‹äºŽ0到Nä¹‹é—´çš„éšæœºå€¼ï¼Œå¯ä»¥å°†å…¶ä¸Ž"
-"乘法结åˆä½¿ç”¨ã€‚"
+"返回一个介于0 到 1ä¹‹é—´çš„éšæœºæµ®ç‚¹å€¼ã€‚è¦èŽ·å¾—ä¸€ä¸ªä»‹äºŽ0到Nä¹‹é—´çš„éšæœºå€¼ï¼Œå¯ä»¥å°†å…¶"
+"与乘法结åˆä½¿ç”¨ã€‚"
#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml
msgid "Return a random floating-point value between the two inputs."
@@ -83608,7 +84923,7 @@ msgid ""
"never outside it. Equivalent to [code]min(max(input, range_low), range_high)"
"[/code]."
msgstr ""
-"返回é™å®šåœ¨ç»™å®šèŒƒå›´å†…的输入,确ä¿ç»“果永远ä¸ä¼šè¶…出该范围。相当于"
+"返回é™å®šåœ¨ç»™å®šèŒƒå›´å†…的输入,确ä¿ç»“果永远ä¸ä¼šè¶…出该范围。相当于 "
"[code]min(max(input, range_low), range_high)[/code]。"
#: modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml
@@ -84173,7 +85488,7 @@ msgstr ""
msgid ""
"If [code]false[/code], call errors (e.g. wrong number of arguments) will be "
"ignored."
-msgstr "如果[code]false[/code]ï¼Œè°ƒç”¨é”™è¯¯å°†è¢«å¿½ç•¥ï¼Œä¾‹å¦‚å‚æ•°æ•°é‡é”™è¯¯ã€‚"
+msgstr "如果为 [code]false[/code]ï¼Œè°ƒç”¨é”™è¯¯å°†è¢«å¿½ç•¥ï¼Œä¾‹å¦‚å‚æ•°æ•°é‡é”™è¯¯ã€‚"
#: modules/visual_script/doc_classes/VisualScriptFunctionCall.xml
msgid "The method will be called on this [Object]."
@@ -84345,8 +85660,7 @@ msgstr "图内å¯ç¼–辑节点的 Visual Script 虚类。"
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 ""
-"一个 Visual Script å¯è§†åŒ–类,用于定义必须是图形内å¯ç¼–辑节点的形状和默认行为。"
+msgstr "Visual Script 虚类,用于定义必须是图形内å¯ç¼–辑节点的形状和默认行为。"
#: modules/visual_script/doc_classes/VisualScriptLists.xml
msgid "Adds an input port to the Visual Script node."
@@ -84530,7 +85844,7 @@ msgstr "当å¯ç”¨çš„输入/è¾“å‡ºç«¯å£æ›´æ”¹æ—¶è§¦å‘。"
#: modules/visual_script/doc_classes/VisualScriptOperator.xml
msgid "A Visual Script node that performs an operation on two values."
-msgstr "一个 Visual Script 节点,对两个值执行æ“作。"
+msgstr "Visual Script 节点,对两个值执行æ“作。"
#: modules/visual_script/doc_classes/VisualScriptOperator.xml
msgid ""
@@ -84582,7 +85896,7 @@ msgstr "è¦åŠ è½½çš„[Resource]资æºã€‚"
#: modules/visual_script/doc_classes/VisualScriptPropertyGet.xml
msgid "A Visual Script node returning a value of a property from an [Object]."
-msgstr "一个Visual Script节点,从[Object]返回属性值。"
+msgstr "Visual Script 节点,返回 [Object] çš„æŸä¸ªå±žæ€§çš„值。"
#: modules/visual_script/doc_classes/VisualScriptPropertyGet.xml
msgid ""
@@ -85043,7 +86357,7 @@ msgstr ""
#: modules/visual_script/doc_classes/VisualScriptYield.xml
msgid "A Visual Script node used to pause a function execution."
-msgstr "一个Visual Script节点,用于暂åœå‡½æ•°çš„æ‰§è¡Œã€‚"
+msgstr "Visual Script 节点,用于暂åœå‡½æ•°çš„æ‰§è¡Œã€‚"
#: modules/visual_script/doc_classes/VisualScriptYield.xml
msgid ""
@@ -85072,11 +86386,11 @@ msgstr "物ç†å¸§æœŸé—´Yield。"
#: modules/visual_script/doc_classes/VisualScriptYield.xml
msgid "Yields a function and waits the given time."
-msgstr "一个函数Yields并等待给定的时间。"
+msgstr "将函数 Yield 并等待给定的时间。"
#: modules/visual_script/doc_classes/VisualScriptYieldSignal.xml
msgid "A Visual Script node yielding for a signal."
-msgstr "一个Visual Script节点yieldä¿¡å·ã€‚"
+msgstr "Visual Script 节点,用于 yield ä¿¡å·ã€‚"
#: modules/visual_script/doc_classes/VisualScriptYieldSignal.xml
msgid ""
@@ -85182,8 +86496,8 @@ 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"
-"将用于所有[code]camera_*[/code] VisualServer函数。\n"
+"创建一个相机并将其添加到 VisualServer 中。它å¯ä»¥é€šè¿‡è¿”回的RID进行访问。这个"
+"RID将用于所有[code]camera_*[/code] VisualServer函数。\n"
"一旦完æˆäº†å¯¹RID的处ç†ï¼Œä½ å°†éœ€è¦ä½¿ç”¨VisualServerçš„[method free_rid]陿€æ–¹æ³•释"
"放RID。"
@@ -85193,14 +86507,14 @@ msgid ""
"which 3D layers are rendered by this camera. Equivalent to [member Camera."
"cull_mask]."
msgstr ""
-"设置与此相机相关的剔除é®ç½©ã€‚剔除é®ç½©æè¿°äº†æ­¤ç›¸æœºæ¸²æŸ“çš„ 3D 层。相当于[member "
+"设置与此相机相关的剔除é®ç½©ã€‚剔除é®ç½©æè¿°äº†æ­¤ç›¸æœºæ¸²æŸ“çš„ 3D 层。相当于 [member "
"Camera.cull_mask]。"
#: doc/classes/VisualServer.xml
msgid ""
"Sets the environment used by this camera. Equivalent to [member Camera."
"environment]."
-msgstr "设置此相机所使用的环境。等åŒäºŽ[member Camera.environment]。"
+msgstr "设置此相机所使用的环境。相当于 [member Camera.environment]。"
#: doc/classes/VisualServer.xml
msgid ""
@@ -85236,8 +86550,9 @@ msgid ""
"the vertical aspect ratio which is equivalent to [constant Camera."
"KEEP_HEIGHT]."
msgstr ""
-"如果 [code]true[/code], ä¿ç•™æ°´å¹³é•¿å®½æ¯”,相当于 [constant Camera.KEEP_WIDTH]。"
-"如果[code]false[/code],ä¿ç•™åž‚直长宽比,相当于[constant Camera.KEEP_HEIGHT]。"
+"如果 [code]true[/code],ä¿ç•™æ°´å¹³é•¿å®½æ¯”,相当于 [constant Camera.KEEP_WIDTH]。"
+"如果为 [code]false[/code],ä¿ç•™åž‚直长宽比,相当于 [constant Camera."
+"KEEP_HEIGHT]。"
#: doc/classes/VisualServer.xml
msgid ""
@@ -85373,7 +86688,7 @@ msgstr "设置 [CanvasItem] 的索引。"
#: doc/classes/VisualServer.xml
msgid ""
"The light mask. See [LightOccluder2D] for more information on light masks."
-msgstr "光线é®ç½©ã€‚关于其更多信æ¯ï¼Œè¯·å‚阅[LightOccluder2D]。"
+msgstr "光线é®ç½©ã€‚详情请å‚阅 [LightOccluder2D]。"
#: doc/classes/VisualServer.xml
msgid "Sets a new material to the [CanvasItem]."
@@ -85454,8 +86769,8 @@ 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å¯"
-"用于所有[code]canvas_light_ocluder_*[/code] VisualServer函数。\n"
+"创建ç¯å…‰é®æŒ¡å™¨å¹¶å°†å…¶æ·»åŠ åˆ° VisualServer 中。å¯ä»¥ç”¨è¿”回的RIDæ¥è®¿é—®å®ƒã€‚这个RID"
+"å¯ç”¨äºŽæ‰€æœ‰[code]canvas_light_ocluder_*[/code] VisualServer函数。\n"
"一旦完æˆäº†RID处ç†ï¼Œå¯ä½¿ç”¨VisualServerçš„[method free_rid]陿€æ–¹æ³•释放RID。"
#: doc/classes/VisualServer.xml
@@ -85539,13 +86854,13 @@ msgstr "使阴影å˜å¾—平滑。数值越低越光滑。"
#: doc/classes/VisualServer.xml
msgid ""
"Sets texture to be used by light. Equivalent to [member Light2D.texture]."
-msgstr "设置ç¯å…‰ä½¿ç”¨çš„纹ç†ã€‚ç­‰åŒäºŽ[member Light2D.texture]。"
+msgstr "设置ç¯å…‰ä½¿ç”¨çš„纹ç†ã€‚相当于 [member Light2D.texture]。"
#: doc/classes/VisualServer.xml
msgid ""
"Sets the offset of the light's texture. Equivalent to [member Light2D."
"offset]."
-msgstr "设置ç¯å…‰çº¹ç†çš„åç§»é‡ã€‚ç­‰åŒäºŽ[member Light2D.offset]。"
+msgstr "设置ç¯å…‰çº¹ç†çš„åç§»é‡ã€‚相当于 [member Light2D.offset]。"
#: doc/classes/VisualServer.xml
msgid "Sets the canvas light's [Transform2D]."
@@ -85567,8 +86882,8 @@ 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å¯ç”¨äºŽæ‰€æœ‰[code]canvas_occluder_polygon_*[/code] VisualServer函数。\n"
+"创建新的光é®è”½å™¨å¤šè¾¹å½¢å¹¶å°†å…¶æ·»åŠ åˆ° VisualServer 中。å¯ä»¥ç”¨è¿”回的RIDæ¥è®¿é—®å®ƒã€‚"
+"这个RIDå¯ç”¨äºŽæ‰€æœ‰[code]canvas_occluder_polygon_*[/code] VisualServer函数。\n"
"一旦完æˆäº†RID处ç†ï¼Œå¯ä½¿ç”¨VisualServerçš„[method free_rid]陿€æ–¹æ³•释放RID。"
#: doc/classes/VisualServer.xml
@@ -85626,8 +86941,8 @@ 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å¯åœ¨"
-"所有[code]environment_*[/code]VisualServer函数中使用。\n"
+"创建一个环境并将其添加到 VisualServer 中。å¯ä»¥ç”¨è¿”回的RIDæ¥è®¿é—®å®ƒã€‚这个RIDå¯"
+"在所有[code]environment_*[/code]VisualServer函数中使用。\n"
"一旦完æˆäº†å¯¹RID的处ç†ï¼Œå¯ä½¿ç”¨VisualServerçš„[method free_rid]陿€æ–¹æ³•释放RID。"
#: doc/classes/VisualServer.xml
@@ -85644,7 +86959,8 @@ msgstr "è®¾ç½®çŽ¯å¢ƒå…‰å‚æ•°ã€‚详情请å‚阅 [Environment]。"
msgid ""
"Sets the [i]BGMode[/i] of the environment. Equivalent to [member Environment."
"background_mode]."
-msgstr "设置环境的[i]BGMode[/i]。相当于[member Environment.background_mode]。"
+msgstr ""
+"设置环境的 [i]BGMode[/i]。相当于 [member Environment.background_mode]。"
#: doc/classes/VisualServer.xml
msgid ""
@@ -85779,7 +87095,7 @@ msgid ""
"[b]Note:[/b] When running a headless or server binary, this function returns "
"an empty string."
msgstr ""
-"返回视频适é…器的å称(例如:\"GeForce GTX 1080/PCIe/SSE2\")。\n"
+"返回视频适é…器的å称(例如 \"GeForce GTX 1080/PCIe/SSE2\")。\n"
"[b]注æ„:[/b]当è¿è¡Œä¸€ä¸ªç²¾ç®€æˆ–æœåС噍坿‰§è¡Œæ–‡ä»¶æ—¶ï¼Œè¿™ä¸ªå‡½æ•°è¿”回一个空字符串。"
#: doc/classes/VisualServer.xml
@@ -85788,12 +87104,12 @@ msgid ""
"[b]Note:[/b] When running a headless or server binary, this function returns "
"an empty string."
msgstr ""
-"返回视频适é…器的供应商(例如,\"NVIDIA Corporation\")。\n"
+"返回视频适é…器的供应商(例如 \"NVIDIA Corporation\")。\n"
"[b]注æ„:[/b]当è¿è¡Œç²¾ç®€æˆ–æœåС噍坿‰§è¡Œæ–‡ä»¶æ—¶ï¼Œè¯¥å‡½æ•°è¿”回一个空字符串。"
#: doc/classes/VisualServer.xml
msgid "Returns the id of a white texture. Creates one if none exists."
-msgstr "返回白色纹ç†çš„id。如果ä¸å­˜åœ¨ï¼Œåˆ™åˆ›å»ºä¸€ä¸ªã€‚"
+msgstr "返回白色纹ç†çš„ id。如果ä¸å­˜åœ¨ï¼Œåˆ™åˆ›å»ºä¸€ä¸ªã€‚"
#: doc/classes/VisualServer.xml
msgid ""
@@ -85809,7 +87125,7 @@ msgstr ""
"于所有 [code]gi_probe_*[/code] VisualServer 函数。\n"
"å®Œæˆ RID 处ç†åŽï¼Œå¯ä½¿ç”¨ VisualServer çš„ [method free_rid] 陿€æ–¹æ³•释放 "
"RID。\n"
-"è¦æ”¾ç½®åœ¨åœºæ™¯ä¸­ï¼Œè¯·ä½¿ç”¨è¿”回的 RID, 使用 [method instance_set_base] 将此 GI 探"
+"è¦æ”¾ç½®åœ¨åœºæ™¯ä¸­ï¼Œè¯·ä½¿ç”¨è¿”回的 RID,使用 [method instance_set_base] 将此 GI 探"
"针附加到实例。"
#: doc/classes/VisualServer.xml
@@ -85817,57 +87133,57 @@ msgid ""
"Returns the bias value for the GI probe. Bias is used to avoid self "
"occlusion. Equivalent to [member GIProbeData.bias]."
msgstr ""
-"返回GI探针的å置值。å置是用æ¥é¿å…è‡ªæˆ‘é®æŒ¡çš„。相当于[member GIProbeData."
+"返回该 GI 探针的å置值。å置是用æ¥é¿å…è‡ªæˆ‘é®æŒ¡çš„。相当于 [member GIProbeData."
"bias]。"
#: doc/classes/VisualServer.xml
msgid ""
"Returns the axis-aligned bounding box that covers the full extent of the GI "
"probe."
-msgstr "返回覆盖GI探针全部范围的轴对é½çš„边界框。"
+msgstr "返回覆盖该 GI 探针全部范围的轴对é½çš„边界框。"
#: doc/classes/VisualServer.xml
msgid "Returns the cell size set by [method gi_probe_set_cell_size]."
-msgstr "返回由[method gi_probe_set_cell_size]设置的å•元大å°ã€‚"
+msgstr "返回由 [method gi_probe_set_cell_size] 设置的å•元大å°ã€‚"
#: doc/classes/VisualServer.xml
msgid "Returns the data used by the GI probe."
-msgstr "返回GI探针所使用的数æ®ã€‚"
+msgstr "返回该 GI 探针所使用的数æ®ã€‚"
#: doc/classes/VisualServer.xml
msgid ""
"Returns the dynamic range set for this GI probe. Equivalent to [member "
"GIProbe.dynamic_range]."
-msgstr "返回该GI探针的动æ€èŒƒå›´è®¾ç½®ã€‚相当于[member GIProbe.dynamic_range]。"
+msgstr "返回该 GI 探针的动æ€èŒƒå›´è®¾ç½®ã€‚相当于 [member GIProbe.dynamic_range]。"
#: doc/classes/VisualServer.xml
msgid ""
"Returns the energy multiplier for this GI probe. Equivalent to [member "
"GIProbe.energy]."
-msgstr "返回这个GI探针的能é‡ä¹˜æ•°ã€‚相当于[member GIProbe.energy]。"
+msgstr "返回这个 GI 探针的能é‡ä¹˜æ•°ã€‚相当于 [member GIProbe.energy]。"
#: doc/classes/VisualServer.xml
msgid ""
"Returns the normal bias for this GI probe. Equivalent to [member GIProbe."
"normal_bias]."
-msgstr "返回该GI探针的法线å置。相当于[member GIProbe.normal_bias]。"
+msgstr "返回这个 GI 探针的法线å置。相当于 [member GIProbe.normal_bias]。"
#: doc/classes/VisualServer.xml
msgid ""
"Returns the propagation value for this GI probe. Equivalent to [member "
"GIProbe.propagation]."
-msgstr "返回这个GI探针的传播值。相当于[member GIProbe.propagation]。"
+msgstr "返回这个 GI 探针的传播值。相当于 [member GIProbe.propagation]。"
#: doc/classes/VisualServer.xml
msgid "Returns the Transform set by [method gi_probe_set_to_cell_xform]."
-msgstr "返回由[method gi_probe_set_to_cell_xform]è®¾ç½®çš„å˜æ¢ã€‚"
+msgstr "返回由 [method gi_probe_set_to_cell_xform] è®¾ç½®çš„å˜æ¢ã€‚"
#: doc/classes/VisualServer.xml
msgid ""
"Returns [code]true[/code] if the GI probe data associated with this GI probe "
"is compressed. Equivalent to [member GIProbe.compress]."
msgstr ""
-"如果与此GI探针相关的数æ®è¢«åŽ‹ç¼©ï¼Œè¿”å›ž [code]true[/code]。相当于[member "
+"如果与该 GI 探针相关的数æ®è¢«åŽ‹ç¼©ï¼Œè¿”å›ž [code]true[/code]。相当于 [member "
"GIProbe.compress]。"
#: doc/classes/VisualServer.xml
@@ -85875,23 +87191,23 @@ 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 ""
-"如果 GI 探针设置为内部,则返回 [code]true[/code],这æ„味ç€å®ƒä¸è€ƒè™‘天空光。相"
-"当于[member GIProbe.interior]。"
+"如果该 GI 探针设置为内部,则返回 [code]true[/code],这æ„味ç€å®ƒä¸è€ƒè™‘天空光。"
+"相当于 [member GIProbe.interior]。"
#: doc/classes/VisualServer.xml
msgid ""
"Sets the bias value to avoid self-occlusion. Equivalent to [member GIProbe."
"bias]."
-msgstr "设置å置值以é¿å…è‡ªé®æŒ¡ã€‚相当于[member GIProbe.bias]。"
+msgstr "设置å置值以é¿å…è‡ªé®æŒ¡ã€‚相当于 [member GIProbe.bias]。"
#: doc/classes/VisualServer.xml
msgid ""
"Sets the axis-aligned bounding box that covers the extent of the GI probe."
-msgstr "设置覆盖 GI 探针范围的轴对é½è¾¹ç•Œæ¡†ã€‚"
+msgstr "设置覆盖该 GI 探针范围的轴对é½è¾¹ç•Œæ¡†ã€‚"
#: doc/classes/VisualServer.xml
msgid "Sets the size of individual cells within the GI probe."
-msgstr "设置 GI 探针内å•个å•元的大å°ã€‚"
+msgstr "设置该 GI 探针内å•个å•元的大å°ã€‚"
#: doc/classes/VisualServer.xml
msgid ""
@@ -85899,8 +87215,8 @@ msgid ""
"take up less space but may look worse. Equivalent to [member GIProbe."
"compress]."
msgstr ""
-"设置GI探针数æ®çš„压缩设置。压缩åŽçš„æ•°æ®å°†å ç”¨æ›´å°‘的空间,但å¯èƒ½çœ‹èµ·æ¥æ›´ç³Ÿç³•。"
-"相当于[member GIProbe.compress]。"
+"设置该 GI 探针数æ®çš„压缩设置。压缩åŽçš„æ•°æ®å°†å ç”¨æ›´å°‘的空间,但å¯èƒ½çœ‹èµ·æ¥æ›´ç³Ÿ"
+"糕。相当于 [member GIProbe.compress]。"
#: doc/classes/VisualServer.xml
msgid ""
@@ -85908,8 +87224,8 @@ msgid ""
"this is created and called internally within the [GIProbe] node. You should "
"not try to set this yourself."
msgstr ""
-"设置用于照明计算的GI探针的数æ®ã€‚通常这是在[GIProbe]节点内部创建和调用的。你ä¸"
-"应该å°è¯•自己设置。"
+"设置用于照明计算的 GI 探针的数æ®ã€‚通常这是在 [GIProbe] 节点内部创建和调用的。"
+"ä½ ä¸åº”该å°è¯•自己设置。"
#: doc/classes/VisualServer.xml
msgid ""
@@ -85917,8 +87233,8 @@ msgid ""
"bright lights can be. A smaller range captures greater detail but limits how "
"bright lights can be. Equivalent to [member GIProbe.dynamic_range]."
msgstr ""
-"设定GI探针的动æ€èŒƒå›´ã€‚动æ€èŒƒå›´è®¾å®šäº†ç¯å…‰çš„亮度é™åˆ¶ã€‚较å°çš„范围å¯ä»¥æ•æ‰åˆ°æ›´å¤š"
-"的细节,但是é™åˆ¶äº†ç¯å…‰çš„亮度。相当于[member GIProbe.dynamic_range]。"
+"设置该 GI 探针的动æ€èŒƒå›´ã€‚动æ€èŒƒå›´è®¾å®šäº†ç¯å…‰çš„亮度é™åˆ¶ã€‚较å°çš„范围å¯ä»¥æ•æ‰åˆ°"
+"更多的细节,但是é™åˆ¶äº†ç¯å…‰çš„亮度。相当于 [member GIProbe.dynamic_range]。"
#: doc/classes/VisualServer.xml
msgid ""
@@ -85926,7 +87242,7 @@ msgid ""
"indirect light from the GI probe brighter. Equivalent to [member GIProbe."
"energy]."
msgstr ""
-"设置该GI探针的能é‡ä¹˜æ•°ã€‚较高的能é‡ä½¿GI探针的间接光更亮。相当于[member "
+"设置这个 GI 探针的能é‡ä¹˜æ•°ã€‚较高的能é‡ä½¿ GI 探针的间接光更亮。相当于 [member "
"GIProbe.energy]。"
#: doc/classes/VisualServer.xml
@@ -85935,7 +87251,7 @@ msgid ""
"not include the sky when calculating lighting. Equivalent to [member GIProbe."
"interior]."
msgstr ""
-"设置该 GI 探针的内部值。设置为内部的 GI 探针在计算照明时ä¸åŒ…括天空。相当于 "
+"设置这个 GI 探针的内部值。设置为内部的 GI 探针在计算照明时ä¸åŒ…括天空。相当于 "
"[member GIProbe.interior]。"
#: doc/classes/VisualServer.xml
@@ -85944,18 +87260,18 @@ msgid ""
"other form of bias and may help reduce self-occlusion. Equivalent to [member "
"GIProbe.normal_bias]."
msgstr ""
-"设置该GI探针的法线å置。法线å置的行为类似于其他形å¼çš„åç½®ï¼Œå¯æœ‰åŠ©äºŽå‡å°‘自我"
-"鮿Œ¡ã€‚相当于[member GIProbe.normal_bias]。"
+"设置这个 GI 探针的法线å置。法线å置的行为类似于其他形å¼çš„åç½®ï¼Œå¯æœ‰åŠ©äºŽå‡å°‘"
+"è‡ªæˆ‘é®æŒ¡ã€‚相当于 [member GIProbe.normal_bias]。"
#: doc/classes/VisualServer.xml
msgid ""
"Sets the propagation of light within this GI probe. Equivalent to [member "
"GIProbe.propagation]."
-msgstr "设置光在这个GI探针中的传播。相当于[member GIProbe.propagation]。"
+msgstr "设置光在这个 GI 探针中的传播。相当于 [member GIProbe.propagation]。"
#: doc/classes/VisualServer.xml
msgid "Sets the to cell [Transform] for this GI probe."
-msgstr "为这个GI探针设置å•å…ƒ[Transform]。"
+msgstr "为这个 GI 探针设置å•å…ƒ [Transform]。"
#: doc/classes/VisualServer.xml
msgid ""
@@ -85983,18 +87299,18 @@ msgid ""
"[code]skinning_fallback[/code] in case the hardware doesn't support the "
"default GPU skinning process."
msgstr ""
-"如果æ“ä½œç³»ç»Ÿæ”¯æŒæŸé¡¹åŠŸèƒ½ï¼Œåˆ™è¿”å›ž [code]true[/code]。特性å¯èƒ½æ˜¯[code]s3tc[/"
-"code], [code]etc[/code], [code]etc2[/code], [code]pvrtc[/code] 和 "
+"如果æ“ä½œç³»ç»Ÿæ”¯æŒæŸé¡¹åŠŸèƒ½ï¼Œåˆ™è¿”å›ž [code]true[/code]。特性å¯èƒ½æ˜¯ [code]s3tc[/"
+"code]ã€[code]etc[/code]ã€[code]etc2[/code]ã€[code]pvrtc[/code] å’Œ "
"[code]skinning_fallback[/code]。\n"
-"当使用GLES2æ¸²æŸ“æ—¶ï¼Œåœ¨ç¡¬ä»¶ä¸æ”¯æŒé»˜è®¤çš„GPU蒙皮过程的情况下,返回 [code]true[/"
-"code]与[code]skinning_fallback[/code]。"
+"当使用 GLES2 æ¸²æŸ“æ—¶ï¼Œåœ¨ç¡¬ä»¶ä¸æ”¯æŒé»˜è®¤çš„ GPU 蒙皮过程的情况下,返回 "
+"[code]true[/code] 与 [code]skinning_fallback[/code]。"
#: doc/classes/VisualServer.xml
msgid ""
"Sets up [ImmediateGeometry] internals to prepare for drawing. Equivalent to "
"[method ImmediateGeometry.begin]."
msgstr ""
-"设置[ImmediateGeometry]的内部结构,为绘图åšå‡†å¤‡ã€‚相当于[method "
+"设置 [ImmediateGeometry] 的内部结构,为绘图åšå‡†å¤‡ã€‚相当于 [method "
"ImmediateGeometry.begin]。"
#: doc/classes/VisualServer.xml
@@ -86009,7 +87325,8 @@ msgstr ""
msgid ""
"Sets the color to be used with next vertex. Equivalent to [method "
"ImmediateGeometry.set_color]."
-msgstr "设置用于下一个顶点的颜色。相当于[method ImmediateGeometry.set_color]。"
+msgstr ""
+"设置用于下一个顶点的颜色。相当于 [method ImmediateGeometry.set_color]。"
#: doc/classes/VisualServer.xml
msgid ""
@@ -86021,60 +87338,61 @@ msgid ""
"To place in a scene, attach this immediate geometry to an instance using "
"[method instance_set_base] using the returned RID."
msgstr ""
-"创建直接几何图形并将其添加到VisualServer中。它å¯ä»¥é€šè¿‡è¿”回的RID进行访问。这个"
-"RIDå¯åœ¨æ‰€æœ‰[code]immediate_*[/code]VisualServer函数中使用。\n"
-"一旦完æˆäº†å¯¹RID的处ç†ï¼Œå¯ä½¿ç”¨VisualServerçš„[method free_rid]陿€æ–¹æ³•释放"
-"RID。\n"
-"è¦åœ¨åœºæ™¯ä¸­æ”¾ç½®ï¼Œä½¿ç”¨è¿”回的RID用[method instance_set_base]将这个直接几何体附加"
-"到一个实例上。"
+"创建直接几何图形并将其添加到 VisualServer 中。它å¯ä»¥é€šè¿‡è¿”回的 RID 进行访问。"
+"这个 RID å¯åœ¨æ‰€æœ‰ [code]immediate_*[/code] VisualServer 函数中使用。\n"
+"一旦完æˆäº†å¯¹ RID 的处ç†ï¼Œå¯ä½¿ç”¨ VisualServer çš„ [method free_rid] 陿€æ–¹æ³•释"
+"放 RID。\n"
+"è¦åœ¨åœºæ™¯ä¸­æ”¾ç½®ï¼Œä½¿ç”¨è¿”回的 RID 用 [method instance_set_base] 将这个直接几何体"
+"附加到一个实例上。"
#: doc/classes/VisualServer.xml
msgid ""
"Ends drawing the [ImmediateGeometry] and displays it. Equivalent to [method "
"ImmediateGeometry.end]."
msgstr ""
-"结æŸç»˜åˆ¶[ImmediateGeometry]并显示它。相当于[method ImmediateGeometry.end]。"
+"结æŸç»˜åˆ¶ [ImmediateGeometry] 并进行显示。相当于 [method ImmediateGeometry."
+"end]。"
#: doc/classes/VisualServer.xml
msgid "Returns the material assigned to the [ImmediateGeometry]."
-msgstr "返回分é…ç»™[ImmediateGeometry]çš„æè´¨ã€‚"
+msgstr "返回分é…给该 [ImmediateGeometry] çš„æè´¨ã€‚"
#: doc/classes/VisualServer.xml
msgid ""
"Sets the normal to be used with next vertex. Equivalent to [method "
"ImmediateGeometry.set_normal]."
msgstr ""
-"设置用于下一个顶点的法线。相当于[method ImmediateGeometry.set_normal]。"
+"设置用于下一个顶点的法线。相当于 [method ImmediateGeometry.set_normal]。"
#: doc/classes/VisualServer.xml
msgid "Sets the material to be used to draw the [ImmediateGeometry]."
-msgstr "设置用于绘制[ImmediateGeometry]çš„æè´¨ã€‚"
+msgstr "设置用于绘制该 [ImmediateGeometry] çš„æè´¨ã€‚"
#: doc/classes/VisualServer.xml
msgid ""
"Sets the tangent to be used with next vertex. Equivalent to [method "
"ImmediateGeometry.set_tangent]."
msgstr ""
-"设置用于下一个顶点的切线。相当于[method ImmediateGeometry.set_tangent]。"
+"设置用于下一个顶点的切线。相当于 [method ImmediateGeometry.set_tangent]。"
#: doc/classes/VisualServer.xml
msgid ""
"Sets the UV to be used with next vertex. Equivalent to [method "
"ImmediateGeometry.set_uv]."
-msgstr "设置用于下一个顶点的UV。相当于[method ImmediateGeometry.set_uv]。"
+msgstr "设置用于下一个顶点的 UV。相当于 [method ImmediateGeometry.set_uv]。"
#: doc/classes/VisualServer.xml
msgid ""
"Sets the UV2 to be used with next vertex. Equivalent to [method "
"ImmediateGeometry.set_uv2]."
-msgstr "设置用于下一个顶点的UV2。相当于[method ImmediateGeometry.set_uv2]。"
+msgstr "设置用于下一个顶点的 UV2。相当于 [method ImmediateGeometry.set_uv2]。"
#: doc/classes/VisualServer.xml
msgid ""
"Adds the next vertex using the information provided in advance. Equivalent "
"to [method ImmediateGeometry.add_vertex]."
msgstr ""
-"使用预先æä¾›çš„ä¿¡æ¯æ·»åŠ ä¸‹ä¸€ä¸ªé¡¶ç‚¹ã€‚ç›¸å½“äºŽ[method ImmediateGeometry."
+"使用预先æä¾›çš„ä¿¡æ¯æ·»åŠ ä¸‹ä¸€ä¸ªé¡¶ç‚¹ã€‚ç›¸å½“äºŽ [method ImmediateGeometry."
"add_vertex]。"
#: doc/classes/VisualServer.xml
@@ -86083,8 +87401,8 @@ msgid ""
"helper class that calls [method immediate_vertex] under the hood. Equivalent "
"to [method ImmediateGeometry.add_vertex]."
msgstr ""
-"使用预先æä¾›çš„ä¿¡æ¯æ·»åŠ ä¸‹ä¸€ä¸ªé¡¶ç‚¹ã€‚è¿™æ˜¯ä¸€ä¸ªè¾…åŠ©ç±»ï¼Œå®ƒåœ¨åŽå°è°ƒç”¨[method "
-"immediate_vertex]。相当于[method ImmediateGeometry.add_vertex]。"
+"使用预先æä¾›çš„ä¿¡æ¯æ·»åŠ ä¸‹ä¸€ä¸ªé¡¶ç‚¹ã€‚è¿™æ˜¯ä¸€ä¸ªè¾…åŠ©ç±»ï¼Œå®ƒåœ¨åŽå°è°ƒç”¨ [method "
+"immediate_vertex]。相当于 [method ImmediateGeometry.add_vertex]。"
#: doc/classes/VisualServer.xml
msgid ""
@@ -86101,9 +87419,9 @@ msgid ""
"instance for proper culling with [method instances_cull_aabb], [method "
"instances_cull_convex], and [method instances_cull_ray]."
msgstr ""
-"将唯一的对象ID附加到实例上。必须将对象ID附加到实例上,以便通过[method "
-"instances_cull_aabb]ã€[method instances_cull_convex]å’Œ[method "
-"instances_cull_ray]进行正确的筛除。"
+"将唯一的对象 ID 附加到实例上。必须将对象 ID 附加到实例上,以便通过 [method "
+"instances_cull_aabb]ã€[method instances_cull_convex] å’Œ [method "
+"instances_cull_ray] 进行正确的筛除。"
#: doc/classes/VisualServer.xml
msgid ""
@@ -86122,7 +87440,7 @@ msgid ""
"particles, meshes, and reflection probes need to be associated with an "
"instance to be visible in the scenario using [method instance_set_base]."
msgstr ""
-"创建一个å¯è§†åŒ–实例并将其添加到VisualServer中。å¯ä»¥ç”¨è¿”回的RIDæ¥è®¿é—®å®ƒã€‚这个"
+"创建一个å¯è§†åŒ–实例并将其添加到 VisualServer 中。å¯ä»¥ç”¨è¿”回的RIDæ¥è®¿é—®å®ƒã€‚这个"
"RIDå¯åœ¨æ‰€æœ‰[code]instance_*[/code]VisualServer函数中使用。\n"
"一旦完æˆäº†å¯¹RID的处ç†ï¼Œå¯ä½¿ç”¨VisualServerçš„[method free_rid]陿€æ–¹æ³•释放"
"RID。\n"
@@ -86137,8 +87455,9 @@ 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å¯åœ¨æ‰€æœ‰[code]instance_*[/code]VisualServer函数中使用。\n"
+"创建一个å¯è§†åŒ–实例,将其添加到 VisualServer 中,并设置基本和效果。å¯ä»¥ç”¨è¿”回"
+"çš„RIDæ¥è®¿é—®å®ƒã€‚这个RIDå¯åœ¨æ‰€æœ‰[code]instance_*[/code]VisualServer函数中使"
+"用。\n"
"一旦完æˆäº†å¯¹RID的处ç†ï¼Œå¯ä½¿ç”¨VisualServerçš„[method free_rid]陿€æ–¹æ³•释放RID。"
#: doc/classes/VisualServer.xml
@@ -86158,7 +87477,7 @@ msgid ""
"Sets the flag for a given [enum InstanceFlags]. See [enum InstanceFlags] for "
"more details."
msgstr ""
-"设置给定的[enum InstanceFlags]标志。更多细节请å‚阅[enum InstanceFlags]。"
+"设置给定的 [enum InstanceFlags] 标志。更多细节请å‚阅 [enum InstanceFlags]。"
#: doc/classes/VisualServer.xml
msgid ""
@@ -86166,7 +87485,7 @@ msgid ""
"materials for the mesh associated with this instance. Equivalent to [member "
"GeometryInstance.material_overlay]."
msgstr ""
-"为该实例的网格设置æè´¨ï¼Œå°†åœ¨æ‰€æœ‰è¡¨é¢çš„æ´»åЍæè´¨ä¸Šå±‚进行渲染。等价于 [member "
+"为该实例的网格设置æè´¨ï¼Œå°†åœ¨æ‰€æœ‰è¡¨é¢çš„æ´»åЍæè´¨ä¸Šå±‚进行渲染。相当于 [member "
"GeometryInstance.material_overlay]。"
#: doc/classes/VisualServer.xml
@@ -86175,7 +87494,7 @@ msgid ""
"associated with this instance. Equivalent to [member GeometryInstance."
"material_override]."
msgstr ""
-"设置一个æè´¨ï¼Œè¦†ç›–与此实例关è”的网格上的所有表é¢çš„æè´¨ã€‚相当于[member "
+"设置一个æè´¨ï¼Œè¦†ç›–与此实例关è”的网格上的所有表é¢çš„æè´¨ã€‚相当于 [member "
"GeometryInstance.material_override]。"
#: doc/classes/VisualServer.xml
@@ -86186,9 +87505,9 @@ msgid ""
"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 ""
-"设置实例的基类。基类å¯ä»¥æ˜¯VisualServer中创建的任何å¯ä»¥æ˜¾ç¤ºçš„3D对象。例如,光"
-"照类型ã€ç½‘æ ¼ã€å¤šç½‘æ ¼ã€åŸºæœ¬å‡ ä½•ã€ç²’å­ç³»ç»Ÿã€å射探针ã€å…‰ç…§å›¾æ•æ‰å’ŒGI探针等类型"
-"都å¯ä»¥è¢«è®¾ç½®ä¸ºå®žä¾‹çš„基类,以便在场景中显示。"
+"设置实例的基类。基类å¯ä»¥æ˜¯ VisualServer 中创建的任何å¯ä»¥æ˜¾ç¤ºçš„3D对象。例如,"
+"光照类型ã€ç½‘æ ¼ã€å¤šç½‘æ ¼ã€åŸºæœ¬å‡ ä½•ã€ç²’å­ç³»ç»Ÿã€å射探针ã€å…‰ç…§å›¾æ•æ‰å’ŒGI探针等类"
+"型都å¯ä»¥è¢«è®¾ç½®ä¸ºå®žä¾‹çš„基类,以便在场景中显示。"
#: doc/classes/VisualServer.xml
msgid "Sets the weight for a given blend shape associated with this instance."
@@ -86199,12 +87518,12 @@ msgid ""
"Sets a custom AABB to use when culling objects from the view frustum. "
"Equivalent to [method GeometryInstance.set_custom_aabb]."
msgstr ""
-"设置自定义的AABB,当从视图中剔除对象时使用。相当于[method GeometryInstance."
+"设置自定义的 AABB,当从视图中剔除对象时使用。相当于 [method GeometryInstance."
"set_custom_aabb]。"
#: doc/classes/VisualServer.xml
msgid "Function not implemented in Godot 3.x."
-msgstr "在Godot 3.x中没有实现的功能。"
+msgstr "在 Godot 3.x 中没有实现的功能。"
#: doc/classes/VisualServer.xml
msgid ""
@@ -86212,14 +87531,14 @@ msgid ""
"view frustum. This allows you to avoid culling objects that fall outside the "
"view frustum. Equivalent to [member GeometryInstance.extra_cull_margin]."
msgstr ""
-"设置边è·ï¼Œåœ¨å‰”除视域范围内的对象时增加AABB的大å°ã€‚è¿™å¯ä»¥è®©ä½ é¿å…剔除è½åœ¨è§†åŸŸ"
-"范围外的物体。相当于[member GeometryInstance.extra_cull_margin]。"
+"设置边è·ï¼Œåœ¨å‰”除视域范围内的对象时增加 AABB 的大å°ã€‚è¿™å¯ä»¥è®©ä½ é¿å…剔除è½åœ¨è§†"
+"域范围外的物体。相当于 [member GeometryInstance.extra_cull_margin]。"
#: doc/classes/VisualServer.xml
msgid ""
"Sets the render layers that this instance will be drawn to. Equivalent to "
"[member VisualInstance.layers]."
-msgstr "设置该实例将被绘制的渲染层。相当于[member VisualInstance.layers]。"
+msgstr "设置该实例将被绘制的渲染层。相当于 [member VisualInstance.layers]。"
#: doc/classes/VisualServer.xml
msgid ""
@@ -86231,13 +87550,14 @@ msgstr "设置实例所在的场景。场景是对象将在其中显示的 3D ä¸
msgid ""
"Sets the material of a specific surface. Equivalent to [method MeshInstance."
"set_surface_material]."
-msgstr "设置特定表é¢çš„æè´¨ã€‚相当于[method MeshInstance.set_surface_material]。"
+msgstr ""
+"设置特定表é¢çš„æè´¨ã€‚相当于 [method MeshInstance.set_surface_material]。"
#: doc/classes/VisualServer.xml
msgid ""
"Sets the world space transform of the instance. Equivalent to [member "
"Spatial.transform]."
-msgstr "è®¾ç½®å®žä¾‹çš„ä¸–ç•Œç©ºé—´å˜æ¢ã€‚相当于[member Spatial.transform]。"
+msgstr "è®¾ç½®å®žä¾‹çš„ä¸–ç•Œç©ºé—´å˜æ¢ã€‚相当于 [member Spatial.transform]。"
#: doc/classes/VisualServer.xml
msgid "Sets the lightmap to use with this instance."
@@ -86260,10 +87580,10 @@ msgid ""
"[b]Warning:[/b] This function is primarily intended for editor usage. For in-"
"game use cases, prefer physics collision."
msgstr ""
-"返回一个与所æä¾›çš„AABB相交的物体ID数组。åªè€ƒè™‘å¯è§†åŒ–çš„3D节点,例如"
-"[MeshInstance]或[DirectionalLight]。使用[method @GDScript.instance_from_id]æ¥"
-"获å–实际节点。这必须æä¾›ä¸€ä¸ªåœºæ™¯çš„RID,该RID在你想查询的[World]中是å¯ç”¨çš„。这"
-"将强制更新所有排队等待更新的资æºã€‚\n"
+"返回一个与所æä¾›çš„ AABB 相交的物体 ID 数组。åªè€ƒè™‘å¯è§†åŒ–çš„ 3D 节点,例如 "
+"[MeshInstance] 或 [DirectionalLight]。使用 [method @GDScript."
+"instance_from_id] æ¥èŽ·å–实际节点。这必须æä¾›ä¸€ä¸ªåœºæ™¯çš„ RID,该 RID 在你想查询"
+"çš„ [World] 中是å¯ç”¨çš„。这将强制更新所有排队等待更新的资æºã€‚\n"
"[b]警告:[/b]这个函数主è¦ç”¨äºŽç¼–辑器使用。对于游æˆä¸­çš„使用情况,最好是物ç†ç¢°"
"撞。"
@@ -86361,14 +87681,14 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid "Sets the color of the light. Equivalent to [member Light.light_color]."
-msgstr "设置ç¯å…‰çš„颜色。相当于[member Light.light_color]。"
+msgstr "设置ç¯å…‰çš„颜色。相当于 [member Light.light_color]。"
#: doc/classes/VisualServer.xml
msgid ""
"Sets the cull mask for this Light. Lights only affect objects in the "
"selected layers. Equivalent to [member Light.light_cull_mask]."
msgstr ""
-"设置此ç¯å…‰çš„剔除é®ç½©ã€‚ç¯å…‰ä»…å½±å“选定图层中的对象。相当于[member Light."
+"设置此ç¯å…‰çš„剔除é®ç½©ã€‚ç¯å…‰ä»…å½±å“选定图层中的对象。相当于 [member Light."
"light_cull_mask]。"
#: doc/classes/VisualServer.xml
@@ -86376,7 +87696,7 @@ msgid ""
"If [code]true[/code], light will subtract light instead of adding light. "
"Equivalent to [member Light.light_negative]."
msgstr ""
-"如果[code]true[/code],光将å‡åŽ»å…‰è€Œä¸æ˜¯å¢žåŠ å…‰ã€‚ç›¸å½“äºŽ[member Light."
+"如果为 [code]true[/code],光将å‡åŽ»å…‰è€Œä¸æ˜¯å¢žåŠ å…‰ã€‚ç›¸å½“äºŽ [member Light."
"light_negative]。"
#: doc/classes/VisualServer.xml
@@ -86384,7 +87704,7 @@ msgid ""
"Sets the specified light parameter. See [enum LightParam] for options. "
"Equivalent to [method Light.set_param]."
msgstr ""
-"设置指定的ç¯å…‰å‚数。å‚阅[enum LightParam]的选项。相当于[method Light."
+"设置指定的ç¯å…‰å‚数。å‚阅 [enum LightParam] 的选项。相当于 [method Light."
"set_param]。"
#: doc/classes/VisualServer.xml
@@ -86395,8 +87715,8 @@ msgid ""
"shadows with [method instance_geometry_set_cast_shadows_setting]. Equivalent "
"to [member Light.shadow_reverse_cull_face]."
msgstr ""
-"如果[code]true[/code],å转网格的背é¢å‰”除。当你有一个平é¢ç½‘æ ¼åŽé¢æœ‰ç¯å…‰æ—¶ï¼Œè¿™"
-"å¯èƒ½å¾ˆæœ‰ç”¨ã€‚如果你需è¦åœ¨ç½‘格的两é¢éƒ½æŠ•下阴影,å¯ä»¥ç”¨[method "
+"如果为 [code]true[/code],å转网格的背é¢å‰”除。当你有一个平é¢ç½‘æ ¼åŽé¢æœ‰ç¯å…‰"
+"时,这å¯èƒ½å¾ˆæœ‰ç”¨ã€‚如果你需è¦åœ¨ç½‘格的两é¢éƒ½æŠ•下阴影,å¯ä»¥ç”¨[method "
"instance_geometry_set_cast_shadows_setting]将网格设置为使用åŒé¢é˜´å½±ã€‚相当于"
"[member Light.shadow_reverse_cull_face]。"
@@ -86405,13 +87725,14 @@ msgid ""
"If [code]true[/code], light will cast shadows. Equivalent to [member Light."
"shadow_enabled]."
msgstr ""
-"如果[code]true[/code],光线会投射阴影。相当于[member Light.shadow_enabled]。"
+"如果为 [code]true[/code],光线会投射阴影。相当于 [member Light."
+"shadow_enabled]。"
#: doc/classes/VisualServer.xml
msgid ""
"Sets the color of the shadow cast by the light. Equivalent to [member Light."
"shadow_color]."
-msgstr "设置ç¯å…‰æŠ•射阴影的颜色。相当于[member Light.shadow_color]。"
+msgstr "设置ç¯å…‰æŠ•射阴影的颜色。相当于 [member Light.shadow_color]。"
#: doc/classes/VisualServer.xml
msgid ""
@@ -86437,8 +87758,8 @@ msgid ""
"To place in a scene, attach this lightmap capture to an instance using "
"[method instance_set_base] using the returned RID."
msgstr ""
-"创建一个光照贴图æ•获并将其添加到VisualServer中。å¯ä»¥ç”¨è¿”回的RIDæ¥è®¿é—®å®ƒã€‚这个"
-"RIDå¯ç”¨äºŽæ‰€æœ‰[code]lightmap_capture_*[/code] VisualServer函数。\n"
+"创建一个光照贴图æ•获并将其添加到 VisualServer 中。å¯ä»¥ç”¨è¿”回的RIDæ¥è®¿é—®å®ƒã€‚è¿™"
+"个RIDå¯ç”¨äºŽæ‰€æœ‰[code]lightmap_capture_*[/code] VisualServer函数。\n"
"一旦完æˆäº†RID处ç†ï¼Œå¯ä½¿ç”¨VisualServerçš„[method free_rid]陿€æ–¹æ³•释放RID。\n"
"è¦åœ¨åœºæ™¯ä¸­æ”¾ç½®ï¼Œä½¿ç”¨è¿”回的RID,用[method instance_set_base]将这个lightmap "
"capture附加到一个实例上。"
@@ -86480,7 +87801,7 @@ msgid ""
"Sets the energy multiplier for this lightmap capture. Equivalent to [member "
"BakedLightmapData.energy]."
msgstr ""
-"设置此光照贴图æ•获的能é‡ä¹˜æ•°ã€‚相当于[member BakedLightmapData.energy]。"
+"设置此光照贴图æ•获的能é‡ä¹˜æ•°ã€‚相当于 [member BakedLightmapData.energy]。"
#: doc/classes/VisualServer.xml
msgid ""
@@ -86497,14 +87818,14 @@ msgid ""
"BakedLightmapData.octree]."
msgstr ""
"设置此光照贴图æ•获è¦ä½¿ç”¨çš„八剿 ‘。该函数通常由 [BakedLightmap] 节点使用。相当"
-"于[member BakedLightmapData.octree]。"
+"于 [member BakedLightmapData.octree]。"
#: doc/classes/VisualServer.xml
msgid ""
"Sets the subdivision level of this lightmap capture's octree. Equivalent to "
"[member BakedLightmapData.cell_subdiv]."
msgstr ""
-"设置此光照贴图æ•èŽ·å…«å‰æ ‘的细分级别。相当于[member BakedLightmapData."
+"设置此光照贴图æ•èŽ·å…«å‰æ ‘的细分级别。相当于 [member BakedLightmapData."
"cell_subdiv]。"
#: doc/classes/VisualServer.xml
@@ -86512,7 +87833,7 @@ msgid ""
"Sets the octree cell transform for this lightmap capture's octree. "
"Equivalent to [member BakedLightmapData.cell_space_transform]."
msgstr ""
-"设置此光照贴图æ•èŽ·çš„å…«å‰æ ‘çš„å…«å‰æ ‘å•å…ƒå˜æ¢ã€‚相当于[member BakedLightmapData."
+"设置此光照贴图æ•èŽ·çš„å…«å‰æ ‘çš„å…«å‰æ ‘å•å…ƒå˜æ¢ã€‚相当于 [member BakedLightmapData."
"cell_space_transform]。"
#: doc/classes/VisualServer.xml
@@ -86721,22 +88042,20 @@ msgstr ""
msgid ""
"Calculates and returns the axis-aligned bounding box that encloses all "
"instances within the multimesh."
-msgstr ""
-"计算并返回轴对é½çš„边界框(包围盒),该边界框(包围盒)将所有的实例都包å«åœ¨"
-"multimesh中。"
+msgstr "计算并返回轴对é½çš„包围盒,该包围盒将所有的实例都包å«åœ¨ multimesh 中。"
#: doc/classes/VisualServer.xml
msgid "Returns the number of instances allocated for this multimesh."
-msgstr "返回分é…给这个multimesh的实例的数é‡ã€‚"
+msgstr "返回分é…给这个 multimesh 的实例的数é‡ã€‚"
#: doc/classes/VisualServer.xml
msgid ""
"Returns the RID of the mesh that will be used in drawing this multimesh."
-msgstr "返回用于绘制此multimesh的RID。"
+msgstr "返回用于绘制此 multimesh 的 RID。"
#: doc/classes/VisualServer.xml
msgid "Returns the number of visible instances for this multimesh."
-msgstr "返回此multimeshçš„å¯è§å®žä¾‹æ•°ã€‚"
+msgstr "返回此 multimesh çš„å¯è§å®žä¾‹æ•°ã€‚"
#: doc/classes/VisualServer.xml
msgid "Returns the color by which the specified instance will be modulated."
@@ -86748,19 +88067,20 @@ msgstr "返回与指定实例相关的自定义数æ®ã€‚"
#: doc/classes/VisualServer.xml
msgid "Returns the [Transform] of the specified instance."
-msgstr "返回指定实例的[Transform]。"
+msgstr "返回指定实例的 [Transform]。"
#: doc/classes/VisualServer.xml
msgid ""
"Returns the [Transform2D] of the specified instance. For use when the "
"multimesh is set to use 2D transforms."
-msgstr "返回指定实例的 [Transform2D]。åªåœ¨multimesh设置为使用 2D å˜æ¢æ—¶ä½¿ç”¨ã€‚"
+msgstr ""
+"返回指定实例的 [Transform2D]。åªåœ¨ multimesh 设置为使用 2D å˜æ¢æ—¶ä½¿ç”¨ã€‚"
#: doc/classes/VisualServer.xml
msgid ""
"Sets the color by which this instance will be modulated. Equivalent to "
"[method MultiMesh.set_instance_color]."
-msgstr "设置这个实例的调制颜色。等åŒäºŽ[method MultiMesh.set_instance_color]。"
+msgstr "设置这个实例的调制颜色。相当于 [method MultiMesh.set_instance_color]。"
#: doc/classes/VisualServer.xml
msgid ""
@@ -86768,22 +88088,22 @@ msgid ""
"but is interpreted as a [code]vec4[/code] in the shader. Equivalent to "
"[method MultiMesh.set_instance_custom_data]."
msgstr ""
-"为这个实例设置自定义数æ®ã€‚自定义数æ®ä»¥[Color]的形å¼ä¼ é€’,但在ç€è‰²å™¨ä¸­ä¼šè¢«è§£é‡Š"
-"为[code]vec4[/code]。等åŒäºŽ[method MultiMesh.set_instance_custom_data]。"
+"为这个实例设置自定义数æ®ã€‚自定义数æ®ä»¥ [Color] 的形å¼ä¼ é€’,但在ç€è‰²å™¨ä¸­ä¼šè¢«è§£"
+"释为 [code]vec4[/code]。相当于 [method MultiMesh.set_instance_custom_data]。"
#: doc/classes/VisualServer.xml
msgid ""
"Sets the [Transform] for this instance. Equivalent to [method MultiMesh."
"set_instance_transform]."
msgstr ""
-"设置此实例的 [Transform]。相当于[method MultiMesh.set_instance_transform]。"
+"设置此实例的 [Transform]。相当于 [method MultiMesh.set_instance_transform]。"
#: doc/classes/VisualServer.xml
msgid ""
"Sets the [Transform2D] for this instance. For use when multimesh is used in "
"2D. Equivalent to [method MultiMesh.set_instance_transform_2d]."
msgstr ""
-"为此实例设置 [Transform2D]。用于在 2D 中使用multimesh时。相当于[method "
+"为此实例设置 [Transform2D]。用于在 2D 中使用 multimesh 时。相当于 [method "
"MultiMesh.set_instance_transform_2d]。"
#: doc/classes/VisualServer.xml
@@ -86815,7 +88135,7 @@ msgstr ""
msgid ""
"Sets the mesh to be drawn by the multimesh. Equivalent to [member MultiMesh."
"mesh]."
-msgstr "设置Multimesh所è¦ç»˜åˆ¶çš„网格。等åŒäºŽ [member MultiMesh.mesh]。"
+msgstr "设置 Multimesh 所è¦ç»˜åˆ¶çš„网格。相当于 [member MultiMesh.mesh]。"
#: doc/classes/VisualServer.xml
msgid ""
@@ -86823,8 +88143,8 @@ msgid ""
"that have been allocated are drawn. Equivalent to [member MultiMesh."
"visible_instance_count]."
msgstr ""
-"设置在给定时间内å¯è§çš„实例的数é‡ã€‚如果是-1,所有被分é…的实例都会被画出æ¥ã€‚ç­‰"
-"åŒäºŽ[member MultiMesh.visible_instance_count]。"
+"设置在给定时间内å¯è§çš„实例的数é‡ã€‚如果是 -1,所有被分é…的实例都会被画出æ¥ã€‚相"
+"当于 [member MultiMesh.visible_instance_count]。"
#: doc/classes/VisualServer.xml
msgid ""
@@ -86864,7 +88184,8 @@ msgid ""
"Calculates and returns the axis-aligned bounding box that contains all the "
"particles. Equivalent to [method Particles.capture_aabb]."
msgstr ""
-"è®¡ç®—å¹¶è¿”å›žåŒ…å«æ‰€æœ‰ç²’å­çš„轴对é½è¾¹ç•Œæ¡†ã€‚相当于[method Particles.capture_aabb]。"
+"è®¡ç®—å¹¶è¿”å›žåŒ…å«æ‰€æœ‰ç²’å­çš„轴对é½è¾¹ç•Œæ¡†ã€‚相当于 [method Particles."
+"capture_aabb]。"
#: doc/classes/VisualServer.xml
msgid "Returns [code]true[/code] if particles are currently set to emitting."
@@ -86891,14 +88212,14 @@ msgstr ""
msgid ""
"Reset the particles on the next update. Equivalent to [method Particles."
"restart]."
-msgstr "在下次更新时é‡ç½®ç²’å­ã€‚相当于[method Particles.restart]。"
+msgstr "在下次更新时é‡ç½®ç²’å­ã€‚相当于 [method Particles.restart]。"
#: doc/classes/VisualServer.xml
msgid ""
"Sets the number of particles to be drawn and allocates the memory for them. "
"Equivalent to [member Particles.amount]."
msgstr ""
-"设置è¦ç»˜åˆ¶çš„ç²’å­çš„æ•°é‡ï¼Œå¹¶ä¸ºå…¶åˆ†é…内存。相当于[member Particles.amount]。"
+"设置è¦ç»˜åˆ¶çš„ç²’å­çš„æ•°é‡ï¼Œå¹¶ä¸ºå…¶åˆ†é…内存。相当于 [member Particles.amount]。"
#: doc/classes/VisualServer.xml
msgid ""
@@ -86943,8 +88264,8 @@ msgid ""
"not reset the particles, but only stops their emission. Equivalent to "
"[member Particles.emitting]."
msgstr ""
-"如果[code]true[/code],粒å­ä¼šéšç€æ—¶é—´çš„æŽ¨ç§»è€Œå‘射出æ¥ã€‚设置为falseä¸ä¼šé‡ç½®ç²’"
-"å­ï¼Œè€Œåªæ˜¯åœæ­¢å…¶å‘射。相当于[member Particles.emitting]。"
+"如果为 [code]true[/code],粒å­ä¼šéšç€æ—¶é—´çš„æŽ¨ç§»è€Œå‘射出æ¥ã€‚设置为falseä¸ä¼šé‡ç½®"
+"ç²’å­ï¼Œè€Œåªæ˜¯åœæ­¢å…¶å‘射。相当于[member Particles.emitting]。"
#: doc/classes/VisualServer.xml
msgid ""
@@ -86962,7 +88283,7 @@ msgid ""
"If [code]true[/code], uses fractional delta which smooths the movement of "
"the particles. Equivalent to [member Particles.fract_delta]."
msgstr ""
-"如果 [code]true[/code]ï¼Œåˆ™ä½¿ç”¨åˆ†æ•°å¢žé‡æ¥å¹³æ»‘ç²’å­çš„è¿åŠ¨ã€‚ç›¸å½“äºŽ [member "
+"如果为 [code]true[/code]ï¼Œåˆ™ä½¿ç”¨åˆ†æ•°å¢žé‡æ¥å¹³æ»‘ç²’å­çš„è¿åŠ¨ã€‚ç›¸å½“äºŽ [member "
"Particles.fract_delta]。"
#: doc/classes/VisualServer.xml
@@ -86976,7 +88297,7 @@ msgid ""
"If [code]true[/code], particles will emit once and then stop. Equivalent to "
"[member Particles.one_shot]."
msgstr ""
-"如果 [code]true[/code],粒å­å°†å‘射一次然åŽåœæ­¢ã€‚相当于 [member Particles."
+"如果为 [code]true[/code],粒å­å°†å‘射一次然åŽåœæ­¢ã€‚相当于 [member Particles."
"one_shot]。"
#: doc/classes/VisualServer.xml
@@ -87017,8 +88338,8 @@ msgid ""
"If [code]true[/code], particles use local coordinates. If [code]false[/code] "
"they use global coordinates. Equivalent to [member Particles.local_coords]."
msgstr ""
-"如果 [code]true[/code],粒å­ä½¿ç”¨å±€éƒ¨å标。如果 [code]false[/code] 其使用全局"
-"åæ ‡ã€‚相当于 [member Particles.local_coords]。"
+"如果为 [code]true[/code],粒å­ä½¿ç”¨å±€éƒ¨å标。如果 [code]false[/code] 其使用全"
+"局忠‡ã€‚相当于 [member Particles.local_coords]。"
#: doc/classes/VisualServer.xml
msgid ""
@@ -87030,8 +88351,8 @@ msgid ""
"To place in a scene, attach this reflection probe to an instance using "
"[method instance_set_base] using the returned RID."
msgstr ""
-"创建一个å射探针并将其添加到VisualServer中。å¯ä»¥ç”¨è¿”回的RIDæ¥è®¿é—®å®ƒã€‚这个RID"
-"å¯ç”¨äºŽæ‰€æœ‰[code]reflection_probe_*[/code] VisualServer函数。\n"
+"创建一个å射探针并将其添加到 VisualServer 中。å¯ä»¥ç”¨è¿”回的RIDæ¥è®¿é—®å®ƒã€‚这个"
+"RIDå¯ç”¨äºŽæ‰€æœ‰[code]reflection_probe_*[/code] VisualServer函数。\n"
"一旦完æˆäº†RID处ç†ï¼Œå¯ä½¿ç”¨VisualServerçš„[method free_rid]陿€æ–¹æ³•释放RID。\n"
"è¦åœ¨åœºæ™¯ä¸­æ”¾ç½®ï¼Œä½¿ç”¨è¿”回的RID,用[method instance_set_base]将这个å射探针附加"
"到一个实例上。"
@@ -87041,8 +88362,8 @@ msgid ""
"If [code]true[/code], reflections will ignore sky contribution. Equivalent "
"to [member ReflectionProbe.interior_enable]."
msgstr ""
-"如果 [code]true[/code],å射将忽略天空的贡献。相当于 [member ReflectionProbe."
-"interior_enable]。"
+"如果为 [code]true[/code],å射将忽略天空的贡献。相当于 [member "
+"ReflectionProbe.interior_enable]。"
#: doc/classes/VisualServer.xml
msgid ""
@@ -87050,8 +88371,8 @@ msgid ""
"matching cull mask will be rendered by this probe. Equivalent to [member "
"ReflectionProbe.cull_mask]."
msgstr ""
-"为这个å射探针设置渲染é®è”½ã€‚åªæœ‰å…·æœ‰åŒ¹é…çš„é®è”½ç½©çš„实例æ‰ä¼šè¢«è¿™ä¸ªæŽ¢é’ˆæ¸²æŸ“。等"
-"åŒäºŽ[member ReflectionProbe.cull_mask]。"
+"为这个å射探针设置渲染é®è”½ã€‚åªæœ‰å…·æœ‰åŒ¹é…çš„é®è”½ç½©çš„实例æ‰ä¼šè¢«è¿™ä¸ªæŽ¢é’ˆæ¸²æŸ“。相"
+"当于 [member ReflectionProbe.cull_mask]。"
#: doc/classes/VisualServer.xml
msgid ""
@@ -87059,7 +88380,7 @@ msgid ""
"more correct in certain situations. Equivalent to [member ReflectionProbe."
"box_projection]."
msgstr ""
-"如果 [code]true[/code],则使用箱体投影。这å¯ä»¥ä½¿å射在æŸäº›æƒ…å†µä¸‹çœ‹èµ·æ¥æ›´æ­£"
+"如果为 [code]true[/code],则使用箱体投影。这å¯ä»¥ä½¿å射在æŸäº›æƒ…å†µä¸‹çœ‹èµ·æ¥æ›´æ­£"
"确。相当于 [member ReflectionProbe.box_projection]。"
#: doc/classes/VisualServer.xml
@@ -87068,22 +88389,22 @@ msgid ""
"the reflection much slower to compute. Equivalent to [member ReflectionProbe."
"enable_shadows]."
msgstr ""
-"如果 [code]true[/code],计算å射探针中的阴影。这会使得å射的计算速度慢得多。"
-"相当于 [member ReflectionProbe.enable_shadows]。"
+"如果为 [code]true[/code],计算å射探针中的阴影。这会使得å射的计算速度慢得"
+"多。相当于 [member ReflectionProbe.enable_shadows]。"
#: doc/classes/VisualServer.xml
msgid ""
"Sets the size of the area that the reflection probe will capture. Equivalent "
"to [member ReflectionProbe.extents]."
msgstr ""
-"设置å射探针将æ•获的区域的大å°ã€‚等效于 [member ReflectionProbe.extents]。"
+"设置å射探针将æ•获的区域的大å°ã€‚相当于 [member ReflectionProbe.extents]。"
#: doc/classes/VisualServer.xml
msgid ""
"Sets the intensity of the reflection probe. Intensity modulates the strength "
"of the reflection. Equivalent to [member ReflectionProbe.intensity]."
msgstr ""
-"设置å射探针的强度。强度调节å射的强度。等效于 [member ReflectionProbe."
+"设置å射探针的强度。强度调节å射的强度。相当于 [member ReflectionProbe."
"intensity]。"
#: doc/classes/VisualServer.xml
@@ -87091,7 +88412,7 @@ msgid ""
"Sets the ambient light color for this reflection probe when set to interior "
"mode. Equivalent to [member ReflectionProbe.interior_ambient_color]."
msgstr ""
-"è®¾ç½®ä¸ºå†…éƒ¨æ¨¡å¼æ—¶ï¼Œä¸ºæ­¤å射探针设置环境光颜色。相当于[member ReflectionProbe."
+"è®¾ç½®ä¸ºå†…éƒ¨æ¨¡å¼æ—¶ï¼Œä¸ºæ­¤å射探针设置环境光颜色。相当于 [member ReflectionProbe."
"interior_ambient_color]。"
#: doc/classes/VisualServer.xml
@@ -87100,7 +88421,7 @@ msgid ""
"contribution when set to interior mode. Equivalent to [member "
"ReflectionProbe.interior_ambient_energy]."
msgstr ""
-"å½“è®¾ç½®ä¸ºå†…éƒ¨æ¨¡å¼æ—¶ï¼Œè®¾ç½®æ­¤å射探针环境光贡献的能é‡ä¹˜æ•°ã€‚相当于[member "
+"å½“è®¾ç½®ä¸ºå†…éƒ¨æ¨¡å¼æ—¶ï¼Œè®¾ç½®æ­¤å射探针环境光贡献的能é‡ä¹˜æ•°ã€‚相当于 [member "
"ReflectionProbe.interior_ambient_energy]。"
#: doc/classes/VisualServer.xml
@@ -87119,7 +88440,7 @@ msgid ""
"Sets the max distance away from the probe an object can be before it is "
"culled. Equivalent to [member ReflectionProbe.max_distance]."
msgstr ""
-"设置物体在被删除å‰ä¸ŽæŽ¢é’ˆçš„æœ€å¤§è·ç¦»ã€‚ç­‰åŒäºŽ[member ReflectionProbe."
+"设置物体在被删除å‰ä¸ŽæŽ¢é’ˆçš„æœ€å¤§è·ç¦»ã€‚相当于 [member ReflectionProbe."
"max_distance]。"
#: doc/classes/VisualServer.xml
@@ -87127,7 +88448,7 @@ msgid ""
"Sets the origin offset to be used when this reflection probe is in box "
"project mode. Equivalent to [member ReflectionProbe.origin_offset]."
msgstr ""
-"设置当此åå°„æŽ¢é’ˆå¤„äºŽæ¡†é¡¹ç›®æ¨¡å¼æ—¶è¦ä½¿ç”¨çš„æºå移。相当于[member "
+"设置当此åå°„æŽ¢é’ˆå¤„äºŽæ¡†é¡¹ç›®æ¨¡å¼æ—¶è¦ä½¿ç”¨çš„æºå移。相当于 [member "
"ReflectionProbe.origin_offset]。"
#: doc/classes/VisualServer.xml
@@ -87135,8 +88456,8 @@ msgid ""
"Sets how often the reflection probe updates. Can either be once or every "
"frame. See [enum ReflectionProbeUpdateMode] for options."
msgstr ""
-"设置å射探针的更新频率。å¯ä»¥æ˜¯ä¸€æ¬¡ï¼Œä¹Ÿå¯ä»¥æ˜¯æ¯ä¸€å¸§ã€‚å‚阅[enum "
-"ReflectionProbeUpdateMode]选项。"
+"设置å射探针的更新频率。å¯ä»¥æ˜¯ä¸€æ¬¡ï¼Œä¹Ÿå¯ä»¥æ˜¯æ¯ä¸€å¸§ã€‚å‚阅 [enum "
+"ReflectionProbeUpdateMode] 选项。"
#: doc/classes/VisualServer.xml
msgid ""
@@ -87145,9 +88466,9 @@ msgid ""
"The callback method must use only 1 argument which will be called with "
"[code]userdata[/code]."
msgstr ""
-"在画完一帧åŽï¼Œåœ¨[code]where[/code]上安排一个回调给相应的命åçš„[code]method[/"
-"code]。\n"
-"回调方法必须åªä½¿ç”¨1ä¸ªå‚æ•°ï¼Œå®ƒå°†ä¸Ž[code]userdata[/code]一起被调用。"
+"在画完一帧åŽï¼Œåœ¨ [code]where[/code] 上安排一个回调给相应的命åçš„ "
+"[code]method[/code]。\n"
+"回调方法必须åªä½¿ç”¨ 1 ä¸ªå‚æ•°ï¼Œå®ƒå°†ä¸Ž [code]userdata[/code] 一起被调用。"
#: doc/classes/VisualServer.xml
msgid ""
@@ -87158,17 +88479,17 @@ msgid ""
"VisualServer's [method free_rid] static method.\n"
"The scenario is the 3D world that all the visual instances exist in."
msgstr ""
-"创建一个场景并将其添加到VisualServer中。它å¯ä»¥é€šè¿‡è¿”回的RID进行访问。这个RID"
-"å¯åœ¨æ‰€æœ‰[code]scenario_*[/code]VisualServer函数中使用。\n"
-"一旦完æˆäº†å¯¹RID的处ç†ï¼Œå¯ä½¿ç”¨VisualServerçš„[method free_rid]陿€æ–¹æ³•释放"
-"RID。\n"
-"场景是所有视觉实例所存在的三维世界。"
+"创建一个场景并将其添加到 VisualServer 中。它å¯ä»¥é€šè¿‡è¿”回的 RID 进行访问。这"
+"个 RID å¯åœ¨æ‰€æœ‰ [code]scenario_*[/code] VisualServer 函数中使用。\n"
+"一旦完æˆäº†å¯¹ RID 的处ç†ï¼Œå¯ä½¿ç”¨ VisualServer çš„ [method free_rid] 陿€æ–¹æ³•释"
+"放 RID。\n"
+"场景是所有视觉实例所存在的 3D 世界。"
#: doc/classes/VisualServer.xml
msgid ""
"Sets the [enum ScenarioDebugMode] for this scenario. See [enum "
"ScenarioDebugMode] for options."
-msgstr "设置该场景的[enum ScenarioDebugMode]。"
+msgstr "设置该场景的 [enum ScenarioDebugMode]。"
#: doc/classes/VisualServer.xml
msgid "Sets the environment that will be used with this scenario."
@@ -87197,16 +88518,16 @@ msgid ""
"with linear interpolation. If [code]use_filter[/code] is [code]false[/code], "
"the image will be scaled with nearest-neighbor interpolation."
msgstr ""
-"设置一个å¯åЍ图åƒã€‚颜色定义了背景颜色。如果[code]scale[/code]是[code]true[/"
-"code],图åƒå°†è¢«ç¼©æ”¾ä»¥é€‚应å±å¹•尺寸。如果[code]use_filter[/code]是[code]true[/"
-"code],图åƒå°†ä»¥çº¿æ€§æ’值进行缩放。如果[code]use_filter[/code]是[code]false[/"
-"code],图åƒå°†ä»¥è¿‘é‚»æ’值的方å¼ç¼©æ”¾ã€‚"
+"设置一个å¯åЍ图åƒã€‚颜色定义了背景颜色。如果 [code]scale[/code] 是 [code]true[/"
+"code],图åƒå°†è¢«ç¼©æ”¾ä»¥é€‚应å±å¹•尺寸。如果 [code]use_filter[/code] 是 "
+"[code]true[/code],图åƒå°†ä»¥çº¿æ€§æ’值进行缩放。如果 [code]use_filter[/code] 是 "
+"[code]false[/code],图åƒå°†ä»¥è¿‘é‚»æ’值的方å¼ç¼©æ”¾ã€‚"
#: doc/classes/VisualServer.xml
msgid ""
"If [code]true[/code], the engine will generate wireframes for use with the "
"wireframe debug mode."
-msgstr "如果 [code]true[/code],引擎将生æˆç”¨äºŽçº¿æ¡†è°ƒè¯•模å¼çš„线框。"
+msgstr "如果为 [code]true[/code],引擎将生æˆç”¨äºŽçº¿æ¡†è°ƒè¯•模å¼çš„线框。"
#: doc/classes/VisualServer.xml
msgid ""
@@ -87238,8 +88559,8 @@ msgid ""
"count the real time as it goes by, without narrowing or stretching it."
msgstr ""
"设置应用于ç€è‰²å™¨ [code]TIME[/code] 内置时间æµé€çš„æ¯”例。\n"
-"默认值是[code]1.0[/code],表示[code]TIME[/code]会éšç€æ—¶é—´çš„æŽ¨ç§»è®¡ç®—实时时间,"
-"ä¸ä¼šç¼©å°æˆ–拉伸它。"
+"默认值是 [code]1.0[/code],表示 [code]TIME[/code] 会éšç€æ—¶é—´çš„æŽ¨ç§»è®¡ç®—实时时"
+"间,ä¸ä¼šç¼©å°æˆ–拉伸它。"
#: doc/classes/VisualServer.xml
msgid "Enables or disables occlusion culling."
@@ -87322,8 +88643,8 @@ 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"
-"å¯ç”¨äºŽæ‰€æœ‰[code]sky_*[/code] VisualServer函数。\n"
+"创建一个空的天空并将其添加到 VisualServer 中。å¯ä»¥ç”¨è¿”回的RIDæ¥è®¿é—®å®ƒã€‚这个"
+"RIDå¯ç”¨äºŽæ‰€æœ‰[code]sky_*[/code] VisualServer函数。\n"
"一旦完æˆäº†å¯¹RID的处ç†ï¼Œå¯ä½¿ç”¨VisualServerçš„[method free_rid]陿€æ–¹æ³•释放RID。"
#: doc/classes/VisualServer.xml
@@ -87363,8 +88684,8 @@ 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å¯"
-"用于所有[code]texture_*[/code] VisualServer函数中。\n"
+"创建一个空纹ç†å¹¶å°†å…¶æ·»åŠ åˆ° VisualServer 中。å¯ä»¥ç”¨è¿”回的RIDæ¥è®¿é—®å®ƒã€‚这个RID"
+"å¯ç”¨äºŽæ‰€æœ‰[code]texture_*[/code] VisualServer函数中。\n"
"一旦完æˆäº†å¯¹RID的处ç†ï¼Œå¯ä½¿ç”¨VisualServerçš„[method free_rid]陿€æ–¹æ³•释放RID。"
#: doc/classes/VisualServer.xml
@@ -87390,7 +88711,7 @@ msgstr "返回纹ç†çš„æ·±åº¦ã€‚"
#: doc/classes/VisualServer.xml
msgid "Returns the flags of a texture."
-msgstr "返回一个纹ç†çš„æ ‡å¿—flags。"
+msgstr "返回纹ç†çš„æ ‡å¿—。"
#: doc/classes/VisualServer.xml
msgid "Returns the format of the texture's image."
@@ -87410,7 +88731,7 @@ msgstr "返回纹ç†å›¾åƒçš„opengl id。"
#: doc/classes/VisualServer.xml
msgid "Returns the type of the texture, can be any of the [enum TextureType]."
-msgstr "返回纹ç†çš„类型,å¯ä»¥æ˜¯[enum TextureType]中的任何一ç§ã€‚"
+msgstr "返回纹ç†çš„类型,å¯ä»¥æ˜¯ [enum TextureType] 中的任何一ç§ã€‚"
#: doc/classes/VisualServer.xml
msgid "Returns the texture's width."
@@ -87433,7 +88754,7 @@ msgstr ""
#: doc/classes/VisualServer.xml
msgid "Sets the texture's flags. See [enum TextureFlags] for options."
-msgstr "设置纹ç†çš„æ ‡å¿—flags。选项è§[enum TextureFlags]。"
+msgstr "设置纹ç†çš„æ ‡å¿—。å¯é€‰é¡¹è§ [enum TextureFlags]。"
#: doc/classes/VisualServer.xml
msgid "Sets the texture's path."
@@ -87506,7 +88827,6 @@ msgid "Sets a viewport's canvas."
msgstr "设置视窗的画布。"
#: doc/classes/VisualServer.xml
-#, fuzzy
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 "
@@ -87527,10 +88847,10 @@ msgid ""
"manually. For further optimization, see [method "
"viewport_set_render_direct_to_screen]."
msgstr ""
-"将视窗å¤åˆ¶åˆ°å±å¹•上由[code]rect[/code]指定的区域。如果[member Viewport."
-"render_direct_to_screen]是[code]true[/code],那么视窗就ä¸ä¼šä½¿ç”¨å¸§ç¼“冲器,视窗"
+"将视窗å¤åˆ¶åˆ°å±å¹•上由 [code]rect[/code] 指定的区域。如果 [member Viewport."
+"render_direct_to_screen] 为 [code]true[/code],那么视窗就ä¸ä¼šä½¿ç”¨å¸§ç¼“冲,视窗"
"的内容会直接渲染到å±å¹•上。然而,请注æ„,根视窗是最åŽç»˜åˆ¶çš„,因此它将在å±å¹•上"
-"绘制。因此,你必须将根视窗设置为一个ä¸è¦†ç›–你所附加的这个视窗的区域。\n"
+"绘制。相应地,你就必须将根视窗设置为一个ä¸è¦†ç›–你所附加的这个视窗的区域。\n"
"例如,你å¯ä»¥ç”¨ä»¥ä¸‹ä»£ç å°†æ ¹è§†çª—è®¾ç½®ä¸ºå®Œå…¨ä¸æ¸²æŸ“。\n"
"[codeblock]\n"
"func _ready():\n"
@@ -87538,7 +88858,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
@@ -87549,8 +88869,8 @@ 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å°†"
-"用于所有[code]viewport_*[/code] 的VisualServer函数。\n"
+"创建一个空视窗并将其添加到 VisualServer 中。å¯ä»¥ç”¨è¿”回的RIDæ¥è®¿é—®å®ƒã€‚这个RID"
+"将用于所有[code]viewport_*[/code] 的VisualServer函数。\n"
"一旦你用完了RID,你è¦ä½¿ç”¨VisualServerçš„[method free_rid]陿€æ–¹æ³•释放RID。"
#: doc/classes/VisualServer.xml
@@ -87574,7 +88894,7 @@ msgstr "从画布分离视窗,å之亦然。"
#: doc/classes/VisualServer.xml
msgid "If [code]true[/code], sets the viewport active, else sets it inactive."
msgstr ""
-"如果 [code]true[/code],则将视窗设置为活动状æ€ï¼Œå¦åˆ™å°†å…¶è®¾ç½®ä¸ºéžæ´»åŠ¨çŠ¶æ€ã€‚"
+"如果为 [code]true[/code],则将视窗设置为活动状æ€ï¼Œå¦åˆ™å°†å…¶è®¾ç½®ä¸ºéžæ´»åŠ¨çŠ¶æ€ã€‚"
#: doc/classes/VisualServer.xml
msgid ""
@@ -87583,8 +88903,8 @@ msgid ""
"specifies the stacking order of the canvas among those in the same layer."
msgstr ""
"设置视窗画布的堆å é¡ºåºã€‚\n"
-"[code]layer[/code]是实际的画布层,而[code]sublayer[/code]则指定画布在åŒä¸€å±‚中"
-"的堆å é¡ºåºã€‚"
+"[code]layer[/code] 是实际的画布层,而 [code]sublayer[/code] 则指定画布在åŒä¸€"
+"层中的堆å é¡ºåºã€‚"
#: doc/classes/VisualServer.xml
msgid "Sets the transformation of a viewport's canvas."
@@ -87593,13 +88913,13 @@ msgstr "è®¾ç½®è§†çª—ç”»å¸ƒçš„å˜æ¢ã€‚"
#: doc/classes/VisualServer.xml
msgid ""
"Sets the clear mode of a viewport. See [enum ViewportClearMode] for options."
-msgstr "设置视窗的清除模å¼ã€‚详è§[enum ViewportClearMode]。"
+msgstr "设置视窗的清除模å¼ã€‚å¯é€‰é¡¹è§ [enum ViewportClearMode]。"
#: doc/classes/VisualServer.xml
msgid ""
"Sets the debug draw mode of a viewport. See [enum ViewportDebugDraw] for "
"options."
-msgstr "设置视窗的调试绘图模å¼ã€‚详è§[enum ViewportDebugDraw]。"
+msgstr "设置视窗的调试绘图模å¼ã€‚å¯é€‰é¡¹è§ [enum ViewportDebugDraw]。"
#: doc/classes/VisualServer.xml
msgid "If [code]true[/code], a viewport's 3D rendering is disabled."
@@ -87608,7 +88928,7 @@ msgstr "如果为 [code]true[/code],则视窗的 3D 渲染将ç¦ç”¨ã€‚"
#: doc/classes/VisualServer.xml
msgid ""
"If [code]true[/code], rendering of a viewport's environment is disabled."
-msgstr "如果 [code]true[/code],则ç¦ç”¨è§†çª—环境的渲染。"
+msgstr "如果为 [code]true[/code],则ç¦ç”¨è§†çª—环境的渲染。"
#: doc/classes/VisualServer.xml
msgid "Sets the viewport's global transformation matrix."
@@ -87616,11 +88936,11 @@ msgstr "è®¾ç½®è§†çª—çš„å…¨å±€å˜æ¢çŸ©é˜µã€‚"
#: doc/classes/VisualServer.xml
msgid "If [code]true[/code], the viewport renders to hdr."
-msgstr "如果 [code]true[/code],视窗将呈现为 hdr。"
+msgstr "如果为 [code]true[/code],视窗将呈现为 hdr。"
#: doc/classes/VisualServer.xml
msgid "If [code]true[/code], the viewport's canvas is not rendered."
-msgstr "如果 [code]true[/code]ï¼Œåˆ™ä¸æ¸²æŸ“视窗的画布。"
+msgstr "如果为 [code]true[/code]ï¼Œåˆ™ä¸æ¸²æŸ“视窗的画布。"
#: doc/classes/VisualServer.xml
msgid "Currently unimplemented in Godot 3.x."
@@ -87628,7 +88948,7 @@ msgstr "ç›®å‰åœ¨ Godot 3.x 中未实现。"
#: doc/classes/VisualServer.xml
msgid "Sets the anti-aliasing mode. See [enum ViewportMSAA] for options."
-msgstr "设置抗锯齿模å¼ã€‚详è§[enum ViewportMSAA]。"
+msgstr "设置抗锯齿模å¼ã€‚å¯é€‰é¡¹è§ [enum ViewportMSAA]。"
#: doc/classes/VisualServer.xml
msgid "Sets the viewport's parent to another viewport."
@@ -87649,8 +88969,8 @@ msgid ""
"will be drawn, no automatic scaling is possible, even if your game scene is "
"significantly larger than the window size."
msgstr ""
-"如果[code]true[/code],直接将视窗的内容渲染到å±å¹•上。这å…许一个低级别的优化,"
-"ä½ å¯ä»¥è·³è¿‡ç»˜åˆ¶è§†çª—到根视窗。虽然这ç§ä¼˜åŒ–å¯ä»¥æ˜¾è‘—æé«˜é€Ÿåº¦ï¼ˆç‰¹åˆ«æ˜¯åœ¨æ—§è®¾å¤‡"
+"如果为 [code]true[/code],直接将视窗的内容渲染到å±å¹•上。这å…许一个低级别的优"
+"化,你å¯ä»¥è·³è¿‡ç»˜åˆ¶è§†çª—到根视窗。虽然这ç§ä¼˜åŒ–å¯ä»¥æ˜¾è‘—æé«˜é€Ÿåº¦ï¼ˆç‰¹åˆ«æ˜¯åœ¨æ—§è®¾å¤‡"
"上),但它是以牺牲å¯ç”¨æ€§ä¸ºä»£ä»·çš„。当å¯ç”¨è¿™ä¸ªåŠŸèƒ½æ—¶ï¼Œä½ ä¸èƒ½ä»Žè§†çª—或"
"[code]SCREEN_TEXTURE[/code]中读å–。你也会失去æŸäº›çª—å£è®¾ç½®çš„好处,比如å„ç§æ‹‰ä¼¸"
"模å¼ã€‚å¦ä¸€ä¸ªéœ€è¦æ³¨æ„çš„åŽæžœæ˜¯ï¼Œåœ¨2D中,渲染是以窗å£å标进行的,所以如果你有一"
@@ -87664,7 +88984,7 @@ msgid ""
"environment information, reflection atlas etc."
msgstr ""
"设置一个视窗的场景。\n"
-"场景包å«[enum ScenarioDebugMode]的信æ¯ã€çŽ¯å¢ƒä¿¡æ¯ã€å射图集等。"
+"åœºæ™¯åŒ…å« [enum ScenarioDebugMode] 的信æ¯ã€çŽ¯å¢ƒä¿¡æ¯ã€å射图集等。"
#: doc/classes/VisualServer.xml
msgid "Sets the shadow atlas quadrant's subdivision."
@@ -87699,13 +89019,13 @@ msgstr "设置视窗的宽度和高度。"
#: doc/classes/VisualServer.xml
msgid ""
"If [code]true[/code], the viewport renders its background as transparent."
-msgstr "如果 [code]true[/code]ï¼Œè§†çª—å°†å…¶èƒŒæ™¯æ¸²æŸ“ä¸ºé€æ˜Žã€‚"
+msgstr "如果为 [code]true[/code]ï¼Œè§†çª—å°†å…¶èƒŒæ™¯æ¸²æŸ“ä¸ºé€æ˜Žã€‚"
#: doc/classes/VisualServer.xml
msgid ""
"Sets when the viewport should be updated. See [enum ViewportUpdateMode] "
"constants for options."
-msgstr "设置应更新视窗的时间。请å‚阅 [enum ViewportUpdateMode] 。"
+msgstr "设置应更新视窗的时间。å¯é€‰é¡¹è¯·å‚阅 [enum ViewportUpdateMode] 。"
#: doc/classes/VisualServer.xml
msgid ""
@@ -87718,7 +89038,7 @@ msgid ""
"If [code]true[/code], the viewport uses augmented or virtual reality "
"technologies. See [ARVRInterface]."
msgstr ""
-"如果 [code]true[/code],则视窗使用增强或虚拟现实技术。å‚阅 [ARVRInterface]。"
+"如果为 [code]true[/code]ï¼Œåˆ™è§†çª—ä½¿ç”¨å¢žå¼ºæˆ–è™šæ‹ŸçŽ°å®žæŠ€æœ¯ã€‚è§ [ARVRInterface]。"
#: doc/classes/VisualServer.xml
msgid ""
@@ -87745,14 +89065,14 @@ msgid ""
"recovered by enabling contrast-adaptive sharpening (see [method "
"viewport_set_sharpen_intensity])."
msgstr ""
-"å¯ç”¨è¯¥è§†çª—的快速近似抗锯齿。FXAAæ˜¯ä¸€ç§æµè¡Œçš„å±å¹•空间抗锯齿方法,它速度快,但"
-"会使图åƒçœ‹èµ·æ¥å¾ˆæ¨¡ç³Šï¼Œç‰¹åˆ«æ˜¯åœ¨ä½Žåˆ†è¾¨çŽ‡ä¸‹ã€‚åœ¨å¤§çš„åˆ†è¾¨çŽ‡ä¸‹ï¼Œå¦‚1440på’Œ4K,它ä»ç„¶"
-"å¯ä»¥å·¥ä½œå¾—比较好。一些æŸå¤±çš„é”度å¯ä»¥é€šè¿‡å¯ç”¨å¯¹æ¯”度适应性é”åŒ–æ¥æ¢å¤ï¼ˆè§"
+"å¯ç”¨è¯¥è§†çª—的快速近似抗锯齿。FXAA æ˜¯ä¸€ç§æµè¡Œçš„å±å¹•空间抗锯齿方法,它速度快,但"
+"会使图åƒçœ‹èµ·æ¥å¾ˆæ¨¡ç³Šï¼Œç‰¹åˆ«æ˜¯åœ¨ä½Žåˆ†è¾¨çŽ‡ä¸‹ã€‚åœ¨ 1440p å’Œ 4K 等高分辨率下,它ä»ç„¶"
+"å¯ä»¥å·¥ä½œå¾—比较好。一些æŸå¤±çš„é”度å¯ä»¥é€šè¿‡å¯ç”¨å¯¹æ¯”度适应性é”åŒ–æ¥æ¢å¤ï¼ˆè§ "
"[method viewport_set_sharpen_intensity])。"
#: doc/classes/VisualServer.xml
msgid "If [code]true[/code], the viewport's rendering is flipped vertically."
-msgstr "如果 [code]true[/code],则视窗的渲染垂直翻转。"
+msgstr "如果为 [code]true[/code],则视窗的渲染垂直翻转。"
#: doc/classes/VisualServer.xml
msgid ""
@@ -87760,8 +89080,8 @@ msgid ""
"is still being processed. You can call [method force_draw] to draw a frame "
"even with rendering disabled."
msgstr ""
-"如果[code]false[/code],则完全ç¦ç”¨æ¸²æŸ“,但引擎逻辑ä»åœ¨å¤„ç†ä¸­ã€‚å³ä½¿ç¦ç”¨æ¸²æŸ“,"
-"您也å¯ä»¥è°ƒç”¨ [method force_draw] æ¥ç»˜åˆ¶å¸§ã€‚"
+"如果为 [code]false[/code],则完全ç¦ç”¨æ¸²æŸ“,但引擎逻辑ä»åœ¨å¤„ç†ä¸­ã€‚å³ä½¿ç¦ç”¨æ¸²"
+"染,您也å¯ä»¥è°ƒç”¨ [method force_draw] æ¥ç»˜åˆ¶å¸§ã€‚"
#: doc/classes/VisualServer.xml
msgid ""
@@ -87963,10 +89283,11 @@ msgid ""
"ARRAY_COMPRESS_WEIGHTS], and [constant "
"ARRAY_FLAG_USE_OCTAHEDRAL_COMPRESSION] quickly."
msgstr ""
-"用于快速设置标志[constant ARRAY_COMPRESS_NORMAL]ã€[constant "
+"用于快速设置标志 [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] 。"
+"ARRAY_COMPRESS_WEIGHTS] 和 [constant "
+"ARRAY_FLAG_USE_OCTAHEDRAL_COMPRESSION] 。"
#: doc/classes/VisualServer.xml
msgid "Primitive to draw consists of points."
@@ -88252,7 +89573,7 @@ msgstr "在这一帧中,2d绘制所调用的数é‡ã€‚"
#: doc/classes/VisualServer.xml
msgid "Represents the size of the [enum ViewportRenderInfo] enum."
-msgstr "代表[enum ViewportRenderInfo]枚举的大å°ã€‚"
+msgstr "代表 [enum ViewportRenderInfo] 枚举的大å°ã€‚"
#: doc/classes/VisualServer.xml
msgid "Debug draw is disabled. Default setting."
@@ -88260,15 +89581,15 @@ msgstr "调试绘制被ç¦ç”¨ã€‚默认设置。"
#: doc/classes/VisualServer.xml
msgid "Debug draw sets objects to unshaded."
-msgstr "调试绘制将对象设置为无阴影。"
+msgstr "调试绘制,ä¸ä½¿ç”¨ç€è‰²æµç¨‹ç»˜åˆ¶å¯¹è±¡ã€‚"
#: doc/classes/VisualServer.xml
msgid "Overwrites clear color to [code](0,0,0,0)[/code]."
-msgstr "将清除颜色覆盖为[code](0,0,0,0)[/code]。"
+msgstr "将清除颜色覆盖为 [code](0,0,0,0)[/code]。"
#: doc/classes/VisualServer.xml
msgid "Debug draw draws objects in wireframe."
-msgstr "调试绘制 在线框中绘制对象。"
+msgstr "调试绘制,将对象用线框形å¼ç»˜åˆ¶ã€‚"
#: doc/classes/VisualServer.xml
msgid "Do not use a debug mode."
@@ -88292,7 +89613,8 @@ msgid ""
"Draw all objects without shading. Equivalent to setting all objects shaders "
"to [code]unshaded[/code]."
msgstr ""
-"绘制没有阴影的所有物体。相当于将所有物体的ç€è‰²å™¨è®¾ç½®ä¸º[code]unshaded[/code]。"
+"ä¸ä½¿ç”¨ç€è‰²æµç¨‹ç»˜åˆ¶å¯¹è±¡ã€‚相当于将所有物体的ç€è‰²å™¨è®¾ç½®ä¸º [code]unshaded[/"
+"code]。"
#: doc/classes/VisualServer.xml
msgid "The instance does not have a type."
@@ -88332,7 +89654,7 @@ msgstr "该实例是一个光照贴图æ•获。"
#: doc/classes/VisualServer.xml
msgid "Represents the size of the [enum InstanceType] enum."
-msgstr "代表[enum InstanceType]枚举的大å°ã€‚"
+msgstr "代表 [enum InstanceType] 枚举的大å°ã€‚"
#: doc/classes/VisualServer.xml
msgid ""
@@ -88350,7 +89672,7 @@ msgstr "当设置时,手动请求在下一帧绘制几何图形。"
#: doc/classes/VisualServer.xml
msgid "Represents the size of the [enum InstanceFlags] enum."
-msgstr "代表[enum InstanceFlags]枚举的大å°ã€‚"
+msgstr "代表 [enum InstanceFlags] 枚举的大å°ã€‚"
#: doc/classes/VisualServer.xml
msgid "Disable shadows from this instance."
@@ -88378,13 +89700,13 @@ msgstr "ä¹å®«æ ¼åœ¨éœ€è¦çš„地方被拉伸。"
#: doc/classes/VisualServer.xml
msgid "The nine patch gets filled with tiles where needed."
-msgstr "ä¹å®«æ ¼åœ¨éœ€è¦çš„地方填充瓷砖。"
+msgstr "ä¹å®«æ ¼åœ¨éœ€è¦çš„地方填充图å—。"
#: doc/classes/VisualServer.xml
msgid ""
"The nine patch gets filled with tiles where needed and stretches them a bit "
"if needed."
-msgstr "ä¹å®«æ ¼åœ¨éœ€è¦çš„åœ°æ–¹å¡«å……ç“·ç –ï¼Œå¹¶åœ¨éœ€è¦æ—¶å°†å®ƒä»¬æ‹‰ä¼¸ä¸€ç‚¹ã€‚"
+msgstr "ä¹å®«æ ¼åœ¨éœ€è¦çš„地方填充图å—ï¼Œå¹¶åœ¨éœ€è¦æ—¶å°†å®ƒä»¬æ‹‰ä¼¸ä¸€ç‚¹ã€‚"
#: doc/classes/VisualServer.xml
msgid "Adds light color additive to the canvas."
@@ -88408,23 +89730,23 @@ msgstr "ä¸è¦å¯¹ç”»å¸ƒä¸Šçš„光影应用滤镜。"
#: doc/classes/VisualServer.xml
msgid "Use PCF3 filtering to filter canvas light shadows."
-msgstr "使用PCF3过滤法æ¥è¿‡æ»¤ç”»å¸ƒçš„光影。"
+msgstr "使用 PCF3 过滤法æ¥è¿‡æ»¤ç”»å¸ƒçš„光影。"
#: doc/classes/VisualServer.xml
msgid "Use PCF5 filtering to filter canvas light shadows."
-msgstr "使用PCF5过滤法æ¥è¿‡æ»¤ç”»å¸ƒçš„光影。"
+msgstr "使用 PCF5 过滤法æ¥è¿‡æ»¤ç”»å¸ƒçš„光影。"
#: doc/classes/VisualServer.xml
msgid "Use PCF7 filtering to filter canvas light shadows."
-msgstr "使用PCF7过滤法æ¥è¿‡æ»¤ç”»å¸ƒçš„光影。"
+msgstr "使用 PCF7 过滤法æ¥è¿‡æ»¤ç”»å¸ƒçš„光影。"
#: doc/classes/VisualServer.xml
msgid "Use PCF9 filtering to filter canvas light shadows."
-msgstr "使用PCF9过滤法æ¥è¿‡æ»¤ç”»å¸ƒçš„光影。"
+msgstr "使用 PCF9 过滤法æ¥è¿‡æ»¤ç”»å¸ƒçš„光影。"
#: doc/classes/VisualServer.xml
msgid "Use PCF13 filtering to filter canvas light shadows."
-msgstr "使用PCF13过滤法æ¥è¿‡æ»¤ç”»å¸ƒçš„光影。"
+msgstr "使用 PCF13 过滤法æ¥è¿‡æ»¤ç”»å¸ƒçš„光影。"
#: doc/classes/VisualServer.xml
msgid "Culling of the canvas occluder is disabled."
@@ -88455,6 +89777,21 @@ msgid "The amount of shader rebinds in the frame."
msgstr "叧䏭釿–°ç»‘定的ç€è‰²å™¨æ•°é‡ã€‚"
#: doc/classes/VisualServer.xml
+msgid ""
+"The peak amount of shaders that have been under compilation in the frame.\n"
+"This is useful to know when asynchronous shader compilation has finished for "
+"the current shaders on screen.\n"
+"[b]Note:[/b] For complete certainty, only assume there are no outstanding "
+"compilations when this value is zero for at least two frames in a row.\n"
+"Unimplemented in the GLES2 rendering backend, always returns 0."
+msgstr ""
+"在该帧中,处于编译状æ€çš„ç€è‰²å™¨æ•°é‡å³°å€¼ã€‚\n"
+"å¯ç”¨äºŽæ£€æŸ¥å±å¹•上当å‰ç€è‰²å™¨çš„异步编译是å¦å®Œæˆã€‚\n"
+"[b]注æ„:[/b]è¦çœŸæ­£ç¡®å®šå®Œæˆï¼Œè¯·åœ¨è¿™ä¸ªå€¼è‡³å°‘连续两帧都为零时æ‰è®¤ä¸ºæ²¡æœ‰å…¶ä»–东西"
+"需è¦ç¼–译。\n"
+"GLES2 渲染åŽç«¯ä¸­å°šæœªå®žçŽ°ï¼Œå§‹ç»ˆè¿”å›ž 0。"
+
+#: doc/classes/VisualServer.xml
msgid "The amount of surface changes in the frame."
msgstr "å¸§ä¸­çš„è¡¨é¢æ›´æ”¹é‡ã€‚"
@@ -88472,12 +89809,12 @@ msgstr "帧中2d绘制调用数é‡ã€‚"
#: doc/classes/VisualServer.xml
msgid "Hardware supports shaders. This enum is currently unused in Godot 3.x."
-msgstr "硬件支æŒç€è‰²å™¨ã€‚这个枚举目å‰åœ¨Godot 3.x中没有使用。"
+msgstr "硬件支æŒç€è‰²å™¨ã€‚这个枚举目å‰åœ¨ Godot 3.x 中没有使用。"
#: doc/classes/VisualServer.xml
msgid ""
"Hardware supports multithreading. This enum is currently unused in Godot 3.x."
-msgstr "硬件支æŒå¤šçº¿ç¨‹ã€‚这个枚举目å‰åœ¨Godot 3.x中没有使用。"
+msgstr "硬件支æŒå¤šçº¿ç¨‹ã€‚这个枚举目å‰åœ¨ Godot 3.x 中没有使用。"
#: doc/classes/VisualServer.xml
msgid "Use [Transform2D] to store MultiMesh transform."
@@ -88813,12 +90150,12 @@ 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 ""
-"返回一个包å«èŠ‚ç‚¹æ‰€æœ‰è¾“å…¥ç«¯å£é»˜è®¤å€¼çš„[Array],形å¼ä¸º[code][index0, value0, "
+"返回一个包å«èŠ‚ç‚¹æ‰€æœ‰è¾“å…¥ç«¯å£é»˜è®¤å€¼çš„ [Array],形å¼ä¸º [code][index0, value0, "
"index1, value1, ...][/code]。"
#: doc/classes/VisualShaderNode.xml
msgid "Returns the default value of the input [code]port[/code]."
-msgstr "返回输入[code]port[/code]的默认值。"
+msgstr "返回输入 [code]port[/code] 的默认值。"
#: doc/classes/VisualShaderNode.xml
msgid ""
@@ -88826,8 +90163,8 @@ msgid ""
"[index0, value0, index1, value1, ...][/code]. For example: [code][0, "
"Vector3(0, 0, 0), 1, Vector3(0, 0, 0)][/code]."
msgstr ""
-"使用[code][index0, value0, index1, value1, ...][/code]å½¢å¼çš„[Array]设置默认输"
-"入端å£å€¼ã€‚例如: [code][0, Vector3(0, 0, 0), 1, Vector3(0, 0, 0)][/code]。"
+"使用 [code][index0, value0, index1, value1, ...][/code] å½¢å¼çš„ [Array] 设置默"
+"认输入端å£å€¼ã€‚例如: [code][0, Vector3(0, 0, 0), 1, Vector3(0, 0, 0)][/code]。"
#: doc/classes/VisualShaderNode.xml
msgid "Sets the default value for the selected input [code]port[/code]."
@@ -88876,12 +90213,12 @@ msgid ""
"Sampler type. Translated to reference of sampler uniform in shader code. Can "
"only be used for input ports in non-uniform nodes."
msgstr ""
-"采样器类型。转æ¢ä¸ºç€è‰²å™¨ä»£ç ä¸­çš„采样器uniform引用。åªèƒ½ç”¨äºŽnon-uniform节点中"
-"的输入端å£ã€‚"
+"采样器类型。转æ¢ä¸ºç€è‰²å™¨ä»£ç ä¸­çš„采样器 uniform 引用。åªèƒ½ç”¨äºŽéž uniform 节点"
+"中的输入端å£ã€‚"
#: doc/classes/VisualShaderNode.xml
msgid "Represents the size of the [enum PortType] enum."
-msgstr "表示[enum PortType]枚举的大å°ã€‚"
+msgstr "表示 [enum PortType] 枚举的大å°ã€‚"
#: doc/classes/VisualShaderNodeBooleanConstant.xml
msgid "A boolean constant to be used within the visual shader graph."
@@ -88893,19 +90230,19 @@ msgid ""
"Translated to [code]bool[/code] in the shader language."
msgstr ""
"åªæœ‰ä¸€ä¸ªè¾“出端å£ï¼Œæ²¡æœ‰è¾“入。\n"
-"在ç€è‰²å™¨è¯­è¨€ä¸­è¢«è½¬æ¢æˆ[code]bool[/code]。"
+"在ç€è‰²å™¨è¯­è¨€ä¸­è¢«è½¬æ¢æˆ [code]bool[/code]。"
#: doc/classes/VisualShaderNodeBooleanConstant.xml
msgid "A boolean constant which represents a state of this node."
-msgstr "一个布尔常é‡ï¼Œè¡¨ç¤ºè¯¥èŠ‚ç‚¹çš„çŠ¶æ€ã€‚"
+msgstr "布尔常é‡ï¼Œè¡¨ç¤ºè¯¥èŠ‚ç‚¹çš„çŠ¶æ€ã€‚"
#: doc/classes/VisualShaderNodeBooleanUniform.xml
msgid "A boolean uniform to be used within the visual shader graph."
-msgstr "一个在å¯è§†åŒ–ç€è‰²å™¨å›¾ä¸­ä½¿ç”¨çš„布尔uniform。"
+msgstr "在å¯è§†åŒ–ç€è‰²å™¨å›¾ä¸­ä½¿ç”¨çš„布尔 uniform。"
#: doc/classes/VisualShaderNodeBooleanUniform.xml
msgid "Translated to [code]uniform bool[/code] in the shader language."
-msgstr "在ç€è‰²å™¨è¯­è¨€ä¸­è¢«è½¬æ¢æˆ[code]uniform bool[/code]。"
+msgstr "在ç€è‰²å™¨è¯­è¨€ä¸­è¢«è½¬æ¢æˆ [code]uniform bool[/code]。"
#: doc/classes/VisualShaderNodeBooleanUniform.xml
#: doc/classes/VisualShaderNodeColorUniform.xml
@@ -88925,7 +90262,7 @@ msgstr "å¯ç”¨ [member default_value]。"
#: doc/classes/VisualShaderNodeColorConstant.xml
msgid "A [Color] constant to be used within the visual shader graph."
-msgstr "一个[Color]常é‡ï¼Œåœ¨å¯è§†åŒ–ç€è‰²å™¨å›¾ä¸­ä½¿ç”¨ã€‚"
+msgstr "[Color] 常é‡ï¼Œåœ¨å¯è§†åŒ–ç€è‰²å™¨å›¾ä¸­ä½¿ç”¨ã€‚"
#: doc/classes/VisualShaderNodeColorConstant.xml
msgid ""
@@ -88938,11 +90275,11 @@ msgstr ""
#: doc/classes/VisualShaderNodeColorConstant.xml
msgid "A [Color] constant which represents a state of this node."
-msgstr "一个[Color]常é‡ï¼Œè¡¨ç¤ºè¿™ä¸ªèŠ‚ç‚¹çš„çŠ¶æ€ã€‚"
+msgstr "[Color] 常é‡ï¼Œè¡¨ç¤ºè¿™ä¸ªèŠ‚ç‚¹çš„çŠ¶æ€ã€‚"
#: doc/classes/VisualShaderNodeColorFunc.xml
msgid "A [Color] function to be used within the visual shader graph."
-msgstr "一个[Color]函数,在å¯è§†åŒ–ç€è‰²å™¨å›¾ä¸­ä½¿ç”¨ã€‚"
+msgstr "[Color] 函数,在å¯è§†åŒ–ç€è‰²å™¨å›¾ä¸­ä½¿ç”¨ã€‚"
#: doc/classes/VisualShaderNodeColorFunc.xml
msgid ""
@@ -88953,7 +90290,7 @@ msgstr "接å—一个 [Color] 到输入端å£ï¼Œå¹¶æ ¹æ® [member function] 对å…
#: doc/classes/VisualShaderNodeColorFunc.xml
msgid ""
"A function to be applied to the input color. See [enum Function] for options."
-msgstr "è¦åº”用于输入颜色的函数。å‚阅[enum Function]的选项。"
+msgstr "è¦åº”用于输入颜色的函数。å‚阅 [enum Function] 的选项。"
#: doc/classes/VisualShaderNodeColorFunc.xml
msgid ""
@@ -88997,7 +90334,7 @@ msgstr ""
#: doc/classes/VisualShaderNodeColorOp.xml
msgid "A [Color] operator to be used within the visual shader graph."
-msgstr "在å¯è§†åŒ–ç€è‰²å™¨å›¾ä¸­ä½¿ç”¨çš„[Color]è¿ç®—符。"
+msgstr "在å¯è§†åŒ–ç€è‰²å™¨å›¾ä¸­ä½¿ç”¨çš„ [Color] è¿ç®—符。"
#: doc/classes/VisualShaderNodeColorOp.xml
msgid "Applies [member operator] to two color inputs."
@@ -89006,7 +90343,7 @@ msgstr "将 [member operator] 应用于两个颜色输入。"
#: doc/classes/VisualShaderNodeColorOp.xml
msgid ""
"An operator to be applied to the inputs. See [enum Operator] for options."
-msgstr "è¦åº”用于输入的è¿ç®—符。å‚阅[enum Operator]的选项。"
+msgstr "è¦åº”用于输入的è¿ç®—符。å‚阅 [enum Operator] 的选项。"
#: doc/classes/VisualShaderNodeColorOp.xml
msgid ""
@@ -89027,7 +90364,7 @@ msgid ""
"result = abs(a - b);\n"
"[/codeblock]"
msgstr ""
-"用下é¢çš„å…¬å¼äº§ç”Ÿå·®å¼‚效果。\n"
+"用以下公å¼äº§ç”Ÿå·®å¼‚效果。\n"
"[codeblock]\n"
"result = abs(a - b);\n"
"[/codeblock]"
@@ -89039,7 +90376,7 @@ msgid ""
"result = min(a, b);\n"
"[/codeblock]"
msgstr ""
-"用以下公å¼äº§ç”Ÿå˜æš—的效果。\n"
+"用以下公å¼äº§ç”Ÿå˜æš—效果。\n"
"[codeblock]\n"
"result = min(a, b);\n"
"[/codeblock]"
@@ -89123,7 +90460,7 @@ msgid ""
"}\n"
"[/codeblock]"
msgstr ""
-"用以下公å¼äº§ç”ŸæŸ”和的光线效果。\n"
+"用以下公å¼äº§ç”ŸæŸ”光效果。\n"
"[codeblock]\n"
"for (int i = 0; i < 3; i++) {\n"
" float base = a[i];\n"
@@ -89151,7 +90488,7 @@ msgid ""
"}\n"
"[/codeblock]"
msgstr ""
-"用下é¢çš„å…¬å¼äº§ç”Ÿä¸€ä¸ªç¡¬å…‰æ•ˆæžœã€‚\n"
+"用以下公å¼äº§ç”Ÿç¡¬å…‰æ•ˆæžœã€‚\n"
"[codeblock]\n"
"for (int i = 0; i < 3; i++) {\n"
" float base = a[i];\n"
@@ -89166,11 +90503,11 @@ msgstr ""
#: doc/classes/VisualShaderNodeColorUniform.xml
msgid "A [Color] uniform to be used within the visual shader graph."
-msgstr "在å¯è§†åŒ–ç€è‰²å™¨å›¾ä¸­ä½¿ç”¨çš„一个[Color]uniform。"
+msgstr "在å¯è§†åŒ–ç€è‰²å™¨å›¾ä¸­ä½¿ç”¨çš„一个 [Color] uniform。"
#: doc/classes/VisualShaderNodeColorUniform.xml
msgid "Translated to [code]uniform vec4[/code] in the shader language."
-msgstr "在ç€è‰²å™¨è¯­è¨€ä¸­è¢«è½¬æ¢æˆ[code]uniform vec4[/code]。"
+msgstr "在ç€è‰²å™¨è¯­è¨€ä¸­è¢«è½¬æ¢æˆ [code]uniform vec4[/code]。"
#: doc/classes/VisualShaderNodeCompare.xml
msgid "A comparison function for common types within the visual shader graph."
@@ -89214,23 +90551,23 @@ msgstr "布林类型。"
#: doc/classes/VisualShaderNodeCompare.xml
msgid "A transform ([code]mat4[/code]) type."
-msgstr "å˜æ¢ç±»åž‹ï¼Œå³[code]mat4[/code]。"
+msgstr "å˜æ¢ç±»åž‹ï¼Œå³ [code]mat4[/code]。"
#: doc/classes/VisualShaderNodeCompare.xml
msgid "Comparison for equality ([code]a == b[/code])."
-msgstr "相等比较,å³[code]a == b[/code]。"
+msgstr "ç›¸ç­‰æ¯”è¾ƒï¼Œå³ [code]a == b[/code]。"
#: doc/classes/VisualShaderNodeCompare.xml
msgid "Comparison for inequality ([code]a != b[/code])."
-msgstr "ä¸ç­‰æ¯”较,å³[code]a != b[/code]。"
+msgstr "ä¸ç­‰æ¯”è¾ƒï¼Œå³ [code]a != b[/code]。"
#: doc/classes/VisualShaderNodeCompare.xml
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 ""
-"大于比较,å³[code]a > b[/code]。如果 [member type] 设置为 [constant "
-"CTYPE_BOOLEAN]或 [constant CTYPE_TRANSFORM]则ä¸èƒ½ä½¿ç”¨ã€‚"
+"å¤§äºŽæ¯”è¾ƒï¼Œå³ [code]a > b[/code]。如果 [member type] 设置为 [constant "
+"CTYPE_BOOLEAN] 或 [constant CTYPE_TRANSFORM] 则ä¸èƒ½ä½¿ç”¨ã€‚"
#: doc/classes/VisualShaderNodeCompare.xml
msgid ""
@@ -89238,24 +90575,24 @@ msgid ""
"if [member type] set to [constant CTYPE_BOOLEAN] or [constant "
"CTYPE_TRANSFORM]."
msgstr ""
-"大于或等于的比较,å³[code]a >= b[/code]。如果[member type]设置为 [constant "
-"CTYPE_BOOLEAN] 或[constant CTYPE_TRANSFORM]则ä¸èƒ½ä½¿ç”¨ã€‚"
+"å¤§äºŽæˆ–ç­‰äºŽçš„æ¯”è¾ƒï¼Œå³ [code]a >= b[/code]。如果 [member type] 设置为 "
+"[constant CTYPE_BOOLEAN] 或 [constant CTYPE_TRANSFORM] 则ä¸èƒ½ä½¿ç”¨ã€‚"
#: doc/classes/VisualShaderNodeCompare.xml
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 ""
-"å°äºŽæ¯”较,å³[code]a < b[/code]。如果 [member type] 设置为[constant "
-"CTYPE_BOOLEAN]或 [constant CTYPE_TRANSFORM]则ä¸èƒ½ä½¿ç”¨ã€‚"
+"å°äºŽæ¯”è¾ƒï¼Œå³ [code]a < b[/code]。如果 [member type] 设置为 [constant "
+"CTYPE_BOOLEAN] 或 [constant CTYPE_TRANSFORM] 则ä¸èƒ½ä½¿ç”¨ã€‚"
#: doc/classes/VisualShaderNodeCompare.xml
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 ""
-"å°äºŽæˆ–等于的比较,å³[code]a < b[/code]。如果[member type] 设置为[constant "
-"CTYPE_BOOLEAN]或[constant CTYPE_TRANSFORM]则ä¸èƒ½ä½¿ç”¨ã€‚"
+"å°äºŽæˆ–ç­‰äºŽçš„æ¯”è¾ƒï¼Œå³ [code]a < b[/code]。如果 [member type] 设置为 [constant "
+"CTYPE_BOOLEAN] 或 [constant CTYPE_TRANSFORM] 则ä¸èƒ½ä½¿ç”¨ã€‚"
#: doc/classes/VisualShaderNodeCompare.xml
msgid ""
@@ -89271,7 +90608,7 @@ msgstr "如果å‘é‡ä¸­çš„ä»»æ„åˆ†é‡æ»¡è¶³æ¯”较æ¡ä»¶ï¼Œåˆ™ç»“果为真。"
#: doc/classes/VisualShaderNodeCubeMap.xml
msgid "A [CubeMap] sampling node to be used within the visual shader graph."
-msgstr "[CubeMap]采样节点,在å¯è§†åŒ–ç€è‰²å™¨å›¾å½¢ä¸­ä½¿ç”¨ã€‚"
+msgstr "[CubeMap] 采样节点,在å¯è§†åŒ–ç€è‰²å™¨å›¾å½¢ä¸­ä½¿ç”¨ã€‚"
#: doc/classes/VisualShaderNodeCubeMap.xml
msgid ""
@@ -89286,8 +90623,8 @@ msgid ""
"The [CubeMap] texture to sample when using [constant SOURCE_TEXTURE] as "
"[member source]."
msgstr ""
-"当使用[constant SOURCE_TEXTURE]作为 [member source] 时,è¦é‡‡æ ·çš„[CubeMap]纹"
-"ç†ã€‚"
+"当使用 [constant SOURCE_TEXTURE] 作为 [member source] 时,è¦é‡‡æ ·çš„ [CubeMap] "
+"纹ç†ã€‚"
#: doc/classes/VisualShaderNodeCubeMap.xml
msgid ""
@@ -89332,7 +90669,8 @@ msgid ""
"Adds [code]hint_albedo[/code] as hint to the uniform declaration for proper "
"sRGB to linear conversion."
msgstr ""
-"å°†[code]hint_albedo[/code]作为æç¤ºæ·»åŠ åˆ°uniform声明中,以便将sRGB转æ¢ä¸ºçº¿æ€§ã€‚"
+"å°† [code]hint_albedo[/code] 作为æç¤ºæ·»åŠ åˆ° uniform 声明中,以便将 sRGB 转æ¢ä¸º"
+"线性。"
#: doc/classes/VisualShaderNodeCubeMap.xml
#: doc/classes/VisualShaderNodeTexture.xml
@@ -89341,8 +90679,8 @@ msgid ""
"Adds [code]hint_normal[/code] as hint to the uniform declaration, which "
"internally converts the texture for proper usage as normal map."
msgstr ""
-"å°†[code]hint_normal[/code]作为æç¤ºæ·»åŠ åˆ°uniform声明中,该声明在内部将纹ç†è½¬æ¢"
-"为法线贴图。"
+"å°† [code]hint_normal[/code] 作为æç¤ºæ·»åŠ åˆ° uniform 声明中,该声明在内部将纹ç†"
+"转æ¢ä¸ºæ³•线贴图。"
#: doc/classes/VisualShaderNodeCubeMapUniform.xml
msgid "A [CubeMap] uniform node to be used within the visual shader graph."
@@ -89586,7 +90924,7 @@ msgstr "计算å¯è§†åŒ–ç€è‰²å™¨å›¾ä¸­ä¸¤ä¸ªå‘é‡çš„点积。"
#: doc/classes/VisualShaderNodeDotProduct.xml
msgid "Translates to [code]dot(a, b)[/code] in the shader language."
-msgstr "在ç€è‰²å™¨è¯­è¨€ä¸­è½¬æ¢æˆ[code]dot(a, b)[/code]。"
+msgstr "在ç€è‰²å™¨è¯­è¨€ä¸­è½¬æ¢æˆ [code]dot(a, b)[/code]。"
#: doc/classes/VisualShaderNodeExpression.xml
msgid ""
@@ -89603,10 +90941,10 @@ msgid ""
"global constants. See [VisualShaderNodeGlobalExpression] for such global "
"definitions."
msgstr ""
-"自定义Godotç€è‰²å™¨è¯­è¨€è¡¨è¾¾å¼ï¼Œæœ‰è‡ªå®šä¹‰æ•°é‡çš„输入和输出端å£ã€‚\n"
-"所æä¾›çš„代ç ç›´æŽ¥æ³¨å…¥åˆ°å›¾å½¢åŒ¹é…ç€è‰²å™¨å‡½æ•°ä¸­ï¼Œå³[code]vertex[/code], "
-"[code]fragment[/code], or [code]light[/code],所以它ä¸èƒ½ç”¨äºŽå£°æ˜Žå‡½æ•°ã€å˜ä½“ã€"
-"uniforms或全局常é‡ã€‚请å‚阅[VisualShaderNodeGlobalExpression]以了解此类全局定"
+"自定义 Godot ç€è‰²å™¨è¯­è¨€è¡¨è¾¾å¼ï¼Œæœ‰è‡ªå®šä¹‰æ•°é‡çš„输入和输出端å£ã€‚\n"
+"所æä¾›çš„代ç ç›´æŽ¥æ³¨å…¥åˆ°å›¾å½¢åŒ¹é…ç€è‰²å™¨å‡½æ•°ä¸­ï¼ˆ[code]vertex[/code]ã€"
+"[code]fragment[/code] 或 [code]light[/code]),所以它ä¸èƒ½ç”¨äºŽå£°æ˜Žå‡½æ•°ã€å˜ä½“ã€"
+"uniform 或全局常é‡ã€‚请å‚阅[VisualShaderNodeGlobalExpression]以了解此类全局定"
"义。"
#: doc/classes/VisualShaderNodeExpression.xml
@@ -89617,8 +90955,8 @@ msgid ""
"declare functions, varyings, uniforms, or global constants."
msgstr ""
"Godot ç€è‰²å™¨è¯­è¨€ä¸­çš„表达å¼ï¼Œå®ƒå°†è¢«æ³¨å…¥åˆ°å›¾å½¢åŒ¹é…çš„ç€è‰²å™¨å‡½æ•°ï¼ˆ[code]vertex[/"
-"code], [code]fragment[/code], or [code]light[/code])的开头,因此ä¸èƒ½ç”¨äºŽå£°æ˜Ž"
-"函数ã€varyingsã€uniforms或全局常é‡ã€‚"
+"code]ã€[code]fragment[/code] 或 [code]light[/code])的开头,因此ä¸èƒ½ç”¨äºŽå£°æ˜Ž"
+"函数ã€varyingã€uniform 或全局常é‡ã€‚"
#: doc/classes/VisualShaderNodeFaceForward.xml
msgid ""
@@ -89635,10 +90973,10 @@ msgid ""
"is smaller than zero the return value is [code]N[/code]. Otherwise, [code]-"
"N[/code] is returned."
msgstr ""
-"在ç€è‰²å™¨è¯­è¨€ä¸­ç¿»è¯‘为[code]faceforward(N, I, Nref)[/code]。该函数有三个å‘é‡å‚"
-"数。[code]N[/code],定å‘矢é‡ï¼Œ[code]I[/code],入射矢é‡ï¼Œä»¥åŠ[code]Nref[/"
-"code],å‚考矢é‡ã€‚如果[code]I[/code]å’Œ[code]Nref[/code]的点积å°äºŽé›¶ï¼Œè¿”回值为"
-"[code]N[/code]。å¦åˆ™ï¼Œå°†è¿”回 [code]-N[/code]。"
+"在ç€è‰²å™¨è¯­è¨€ä¸­ç¿»è¯‘为 [code]faceforward(N, I, Nref)[/code]。该函数有三个å‘é‡å‚"
+"数。[code]N[/code],定å‘å‘é‡ï¼Œ[code]I[/code],入射å‘é‡ï¼Œä»¥åŠ[code]Nref[/"
+"code],å‚考矢é‡ã€‚如果 [code]I[/code] å’Œ [code]Nref[/code] 的点积å°äºŽé›¶ï¼Œè¿”回"
+"值为 [code]N[/code]。å¦åˆ™ï¼Œå°†è¿”回 [code]-N[/code]。"
#: doc/classes/VisualShaderNodeFresnel.xml
msgid "A Fresnel effect to be used within the visual shader graph."
@@ -89809,7 +91147,7 @@ msgid ""
"type (check [code]Tutorials[/code] section for link)."
msgstr ""
"æä¾›å¯¹ç€è‰²å™¨å¯ç”¨çš„输入å˜é‡ï¼ˆå†…置)的访问。关于æ¯ç§ç€è‰²å™¨ç±»åž‹çš„å¯ç”¨å†…ç½®å˜é‡åˆ—"
-"表,请å‚阅ç€è‰²å™¨å‚è€ƒï¼Œå³æŸ¥çœ‹[code]Tutorials[/code]教程部分的链接。"
+"表,请å‚阅ç€è‰²å™¨å‚考(查看[code]教程[/code]部分的链接)。"
#: doc/classes/VisualShaderNodeInput.xml
msgid ""
@@ -89925,7 +91263,7 @@ msgstr "在å¯è§†åŒ–ç€è‰²å™¨å›¾ä¸­çš„两个标é‡ä¹‹é—´è¿›è¡Œçº¿æ€§æ’值。"
#: doc/classes/VisualShaderNodeScalarInterp.xml
msgid "Translates to [code]mix(a, b, weight)[/code] in the shader language."
-msgstr "在ç€è‰²å™¨è¯­è¨€ä¸­è½¬æ¢ä¸º[code]mix(a, b, weight)[/code]。"
+msgstr "在ç€è‰²å™¨è¯­è¨€ä¸­è½¬æ¢ä¸º [code]mix(a, b, weight)[/code]。"
#: doc/classes/VisualShaderNodeScalarSmoothStep.xml
msgid "Calculates a scalar SmoothStep function within the visual shader graph."
@@ -89940,10 +91278,10 @@ msgid ""
"code]. Otherwise the return value is interpolated between [code]0.0[/code] "
"and [code]1.0[/code] using Hermite polynomials."
msgstr ""
-"在ç€è‰²å™¨è¯­è¨€ä¸­è½¬æ¢æˆ[code]smoothstep(edge0, edge1, x)[/code]。\n"
-"如果[code]x[/code]å°äºŽ[code]edge0[/code],返回 [code]0.0[/code];如果"
-"[code]x[/code]大于[code]edge1[/code],返回 [code]1.0[/code]。å¦åˆ™è¿”回值在"
-"[code]0.0[/code]å’Œ[code]1.0[/code]之间使用Hermite多项å¼è¿›è¡Œæ’值。"
+"在ç€è‰²å™¨è¯­è¨€ä¸­è½¬æ¢æˆ [code]smoothstep(edge0, edge1, x)[/code]。\n"
+"如果 [code]x[/code] å°äºŽ [code]edge0[/code],返回 [code]0.0[/code];如果 "
+"[code]x[/code] 大于 [code]edge1[/code],返回 [code]1.0[/code]。å¦åˆ™è¿”回值在 "
+"[code]0.0[/code] å’Œ [code]1.0[/code] 之间使用 Hermite 多项å¼è¿›è¡Œæ’值。"
#: doc/classes/VisualShaderNodeScalarSwitch.xml
msgid "A boolean/scalar function for use within the visual shader graph."
@@ -90078,23 +91416,23 @@ msgstr "将输入端å£ä¸­æä¾›çš„纹ç†ç”¨äºŽæ­¤å‡½æ•°ã€‚"
#: doc/classes/VisualShaderNodeTextureUniform.xml
msgid "Performs a uniform texture lookup within the visual shader graph."
-msgstr "在å¯è§†åŒ–ç€è‰²å™¨å›¾ä¸­æ‰§è¡Œuniformçš„çº¹ç†æŸ¥æ‰¾ã€‚"
+msgstr "在å¯è§†åŒ–ç€è‰²å™¨å›¾ä¸­æ‰§è¡Œ uniform çš„çº¹ç†æŸ¥æ‰¾ã€‚"
#: doc/classes/VisualShaderNodeTextureUniform.xml
msgid ""
"Performs a lookup operation on the texture provided as a uniform for the "
"shader."
-msgstr "对作为uniformç€è‰²å™¨æä¾›çš„纹ç†è¿›è¡ŒæŸ¥æ‰¾æ“作。"
+msgstr "对作为 uniform ç€è‰²å™¨æä¾›çš„纹ç†è¿›è¡ŒæŸ¥æ‰¾æ“作。"
#: doc/classes/VisualShaderNodeTextureUniform.xml
msgid "Sets the default color if no texture is assigned to the uniform."
-msgstr "如果没有给uniform分é…纹ç†ï¼Œåˆ™è®¾ç½®é»˜è®¤é¢œè‰²ã€‚"
+msgstr "如果没有给 uniform 分é…纹ç†ï¼Œåˆ™è®¾ç½®é»˜è®¤é¢œè‰²ã€‚"
#: doc/classes/VisualShaderNodeTextureUniform.xml
msgid ""
"Adds [code]hint_aniso[/code] as hint to the uniform declaration to use for a "
"flowmap."
-msgstr "å°†[code]hint_aniso[/code]作为æç¤ºæ·»åŠ åˆ°uniform声明中,用于æµç¨‹å›¾ã€‚"
+msgstr "å°† [code]hint_aniso[/code] 作为æç¤ºæ·»åŠ åˆ° uniform 声明中,用于æµå‘图。"
#: doc/classes/VisualShaderNodeTextureUniform.xml
msgid "Defaults to white color."
@@ -90108,7 +91446,7 @@ msgstr "默认为黑色。"
msgid ""
"Performs a uniform texture lookup with triplanar within the visual shader "
"graph."
-msgstr "在å¯è§†åŒ–ç€è‰²å™¨å›¾ä¸­ç”¨ä¸‰è§’é¢è¿›è¡Œuniformçº¹ç†æŸ¥æ‰¾ã€‚"
+msgstr "在å¯è§†åŒ–ç€è‰²å™¨å›¾ä¸­ç”¨ä¸‰è§’é¢è¿›è¡Œ uniform çº¹ç†æŸ¥æ‰¾ã€‚"
#: doc/classes/VisualShaderNodeTextureUniformTriplanar.xml
msgid ""
@@ -90119,7 +91457,7 @@ msgstr "对作为uniformç€è‰²å™¨æä¾›çš„纹ç†è¿›è¡ŒæŸ¥æ‰¾æ“作,并支æŒä¸
#: doc/classes/VisualShaderNodeTransformCompose.xml
msgid ""
"Composes a [Transform] from four [Vector3]s within the visual shader graph."
-msgstr "从å¯è§†åŒ–ç€è‰²å™¨å›¾ä¸­çš„四个[Vector3]组æˆä¸€ä¸ª[Transform]。"
+msgstr "从å¯è§†åŒ–ç€è‰²å™¨å›¾ä¸­çš„四个 [Vector3] 组æˆä¸€ä¸ª [Transform]。"
#: doc/classes/VisualShaderNodeTransformCompose.xml
msgid ""
@@ -90127,25 +91465,25 @@ msgid ""
"Each vector is one row in the matrix and the last column is a [code]vec4(0, "
"0, 0, 1)[/code]."
msgstr ""
-"使用四个类型为[code]vec3[/code]çš„å‘é‡åˆ›å»ºä¸€ä¸ª4x4å˜æ¢çŸ©é˜µã€‚æ¯ä¸ªå‘釿˜¯çŸ©é˜µä¸­çš„"
-"一行,最åŽä¸€åˆ—是一个[code]vec4(0, 0, 0, 1)[/code]。"
+"使用四个类型为 [code]vec3[/code] çš„å‘é‡åˆ›å»ºä¸€ä¸ª 4x4 å˜æ¢çŸ©é˜µã€‚æ¯ä¸ªå‘釿˜¯çŸ©é˜µ"
+"中的一行,最åŽä¸€åˆ—是一个 [code]vec4(0, 0, 0, 1)[/code]。"
#: doc/classes/VisualShaderNodeTransformConstant.xml
msgid "A [Transform] constant for use within the visual shader graph."
-msgstr "一个[Transform]常é‡ï¼Œåœ¨å¯è§†åŒ–ç€è‰²å™¨å›¾ä¸­ä½¿ç”¨ã€‚"
+msgstr "[Transform] 常é‡ï¼Œåœ¨å¯è§†åŒ–ç€è‰²å™¨å›¾ä¸­ä½¿ç”¨ã€‚"
#: doc/classes/VisualShaderNodeTransformConstant.xml
msgid "A constant [Transform], which can be used as an input node."
-msgstr "一个常é‡[Transform],å¯ä»¥ä½œä¸ºä¸€ä¸ªè¾“入节点使用。"
+msgstr "å¸¸é‡ [Transform],å¯ä»¥ä½œä¸ºä¸€ä¸ªè¾“入节点使用。"
#: doc/classes/VisualShaderNodeTransformConstant.xml
msgid "A [Transform] constant which represents the state of this node."
-msgstr "一个[Transform]常é‡ï¼Œè¡¨ç¤ºè¿™ä¸ªèŠ‚ç‚¹çš„çŠ¶æ€ã€‚"
+msgstr "[Transform] 常é‡ï¼Œè¡¨ç¤ºè¿™ä¸ªèŠ‚ç‚¹çš„çŠ¶æ€ã€‚"
#: doc/classes/VisualShaderNodeTransformDecompose.xml
msgid ""
"Decomposes a [Transform] into four [Vector3]s within the visual shader graph."
-msgstr "将一个[Transform]分解为å¯è§†åŒ–ç€è‰²å™¨å›¾ä¸­çš„四个[Vector3]。"
+msgstr "将一个 [Transform] 分解为å¯è§†åŒ–ç€è‰²å™¨å›¾ä¸­çš„四个 [Vector3]。"
#: doc/classes/VisualShaderNodeTransformDecompose.xml
msgid ""
@@ -90191,47 +91529,47 @@ msgstr "è¦å¯¹å˜æ¢è¿›è¡Œçš„乘法类型。å‚阅[enum Operator]的选项。"
#: doc/classes/VisualShaderNodeTransformMult.xml
msgid "Multiplies transform [code]a[/code] by the transform [code]b[/code]."
-msgstr "å°†å˜æ¢[code]a[/code]ä¹˜ä»¥å˜æ¢[code]b[/code]。"
+msgstr "å°†å˜æ¢ [code]a[/code] ä¹˜ä»¥å˜æ¢ [code]b[/code]。"
#: doc/classes/VisualShaderNodeTransformMult.xml
msgid "Multiplies transform [code]b[/code] by the transform [code]a[/code]."
-msgstr "å°†å˜æ¢[code]b[/code]ä¹˜ä»¥å˜æ¢[code]a[/code]。"
+msgstr "å°†å˜æ¢ [code]b[/code] ä¹˜ä»¥å˜æ¢ [code]a[/code]。"
#: doc/classes/VisualShaderNodeTransformMult.xml
msgid ""
"Performs a component-wise multiplication of transform [code]a[/code] by the "
"transform [code]b[/code]."
-msgstr "å¯¹å˜æ¢[code]a[/code]ä¸Žå˜æ¢[code]b[/code]è¿›è¡Œåˆ†é‡æ˜Žæ™ºçš„乘法。"
+msgstr "å¯¹å˜æ¢ [code]a[/code] ä¸Žå˜æ¢ [code]b[/code] è¿›è¡Œåˆ†é‡æ˜Žæ™ºçš„乘法。"
#: doc/classes/VisualShaderNodeTransformMult.xml
msgid ""
"Performs a component-wise multiplication of transform [code]b[/code] by the "
"transform [code]a[/code]."
-msgstr "å¯¹å˜æ¢[code]b[/code]ä¸Žå˜æ¢[code]a[/code]è¿›è¡Œåˆ†é‡æ˜Žæ™ºçš„乘法。"
+msgstr "å¯¹å˜æ¢ [code]b[/code] ä¸Žå˜æ¢ [code]a[/code] è¿›è¡Œåˆ†é‡æ˜Žæ™ºçš„乘法。"
#: doc/classes/VisualShaderNodeTransformUniform.xml
msgid "A [Transform] uniform for use within the visual shader graph."
-msgstr "在å¯è§†åŒ–ç€è‰²å™¨å›¾ä¸­ä½¿ç”¨çš„[Transform]uniform。"
+msgstr "在å¯è§†åŒ–ç€è‰²å™¨å›¾ä¸­ä½¿ç”¨çš„ [Transform] uniform。"
#: doc/classes/VisualShaderNodeTransformUniform.xml
msgid "Translated to [code]uniform mat4[/code] in the shader language."
-msgstr "在ç€è‰²å™¨è¯­è¨€ä¸­è¢«è½¬æ¢æˆ[code]uniform mat4[/code]。"
+msgstr "在ç€è‰²å™¨è¯­è¨€ä¸­è¢«è½¬æ¢æˆ [code]uniform mat4[/code]。"
#: doc/classes/VisualShaderNodeTransformVecMult.xml
msgid ""
"Multiplies a [Transform] and a [Vector3] within the visual shader graph."
-msgstr "在å¯è§†åŒ–ç€è‰²å™¨å›¾ä¸­ï¼Œå°†ä¸€ä¸ª[Transform]和一个[Vector3]相乘。"
+msgstr "在å¯è§†åŒ–ç€è‰²å™¨å›¾ä¸­ï¼Œå°†ä¸€ä¸ª [Transform] 和一个 [Vector3] 相乘。"
#: doc/classes/VisualShaderNodeTransformVecMult.xml
msgid ""
"A multiplication operation on a transform (4x4 matrix) and a vector, with "
"support for different multiplication operators."
-msgstr "å¯¹ä¸€ä¸ªå˜æ¢ï¼ˆ4x4矩阵)和一个å‘é‡è¿›è¡Œä¹˜æ³•è¿ç®—,支æŒä¸åŒçš„乘法è¿ç®—符。"
+msgstr "å¯¹ä¸€ä¸ªå˜æ¢ï¼ˆ4x4 矩阵)和一个å‘é‡è¿›è¡Œä¹˜æ³•è¿ç®—,支æŒä¸åŒçš„乘法è¿ç®—符。"
#: doc/classes/VisualShaderNodeTransformVecMult.xml
msgid ""
"The multiplication type to be performed. See [enum Operator] for options."
-msgstr "è¦æ‰§è¡Œçš„乘法类型。å‚阅[enum Operator]的选项。"
+msgstr "è¦æ‰§è¡Œçš„乘法类型。å‚阅 [enum Operator] 的选项。"
#: doc/classes/VisualShaderNodeTransformVecMult.xml
msgid "Multiplies transform [code]a[/code] by the vector [code]b[/code]."
@@ -90292,23 +91630,23 @@ msgstr "该引用所指å‘çš„ uniform çš„å称。"
#: doc/classes/VisualShaderNodeVec3Constant.xml
msgid "A [Vector3] constant to be used within the visual shader graph."
-msgstr "一个 [Vector3] 常é‡ï¼Œç”¨äºŽå¯è§†åŒ–ç€è‰²å™¨å›¾ä¸­ã€‚"
+msgstr "[Vector3] 常é‡ï¼Œç”¨äºŽå¯è§†åŒ–ç€è‰²å™¨å›¾ä¸­ã€‚"
#: doc/classes/VisualShaderNodeVec3Constant.xml
msgid "A constant [Vector3], which can be used as an input node."
-msgstr "ä¸€ä¸ªå¸¸é‡ [Vector3],它å¯ä»¥ä½œä¸ºè¾“入节点使用。"
+msgstr "å¸¸é‡ [Vector3],它å¯ä»¥ä½œä¸ºè¾“入节点使用。"
#: doc/classes/VisualShaderNodeVec3Constant.xml
msgid "A [Vector3] constant which represents the state of this node."
-msgstr "一个 [Vector3] 常é‡ï¼Œè¡¨ç¤ºè¯¥èŠ‚ç‚¹çš„çŠ¶æ€ã€‚"
+msgstr "[Vector3] 常é‡ï¼Œè¡¨ç¤ºè¯¥èŠ‚ç‚¹çš„çŠ¶æ€ã€‚"
#: doc/classes/VisualShaderNodeVec3Uniform.xml
msgid "A [Vector3] uniform to be used within the visual shader graph."
-msgstr "一个 [Vector3] çš„ uniform,在å¯è§†åŒ–ç€è‰²å™¨å›¾ä¸­ä½¿ç”¨ã€‚"
+msgstr "[Vector3] çš„ uniform,在å¯è§†åŒ–ç€è‰²å™¨å›¾ä¸­ä½¿ç”¨ã€‚"
#: doc/classes/VisualShaderNodeVec3Uniform.xml
msgid "Translated to [code]uniform vec3[/code] in the shader language."
-msgstr "在ç€è‰²å™¨è¯­è¨€ä¸­è¢«è½¬æ¢æˆ[code]uniform vec3[/code]。"
+msgstr "在ç€è‰²å™¨è¯­è¨€ä¸­è¢«è½¬æ¢æˆ [code]uniform vec3[/code]。"
#: doc/classes/VisualShaderNodeVectorClamp.xml
msgid "Clamps a vector value within the visual shader graph."
@@ -90320,30 +91658,30 @@ msgid ""
"values. The operation is performed on each component of the vector "
"individually."
msgstr ""
-"将一个值é™åˆ¶åœ¨[code]min[/code]å’Œ[code]max[/code]之间。该æ“作是对å‘é‡çš„æ¯ä¸ªåˆ†"
-"é‡å•独执行的。"
+"将一个值é™åˆ¶åœ¨ [code]min[/code] å’Œ [code]max[/code] 之间。该æ“作是对å‘é‡çš„æ¯"
+"个分é‡å•独执行的。"
#: doc/classes/VisualShaderNodeVectorCompose.xml
msgid "Composes a [Vector3] from three scalars within the visual shader graph."
-msgstr "从å¯è§†åŒ–ç€è‰²å™¨å›¾ä¸­çš„三个标é‡ç»„æˆä¸€ä¸ª[Vector3]。"
+msgstr "从å¯è§†åŒ–ç€è‰²å™¨å›¾ä¸­çš„三个标é‡ç»„æˆä¸€ä¸ª [Vector3]。"
#: doc/classes/VisualShaderNodeVectorCompose.xml
msgid ""
"Creates a [code]vec3[/code] using three scalar values that can be provided "
"from separate inputs."
msgstr ""
-"使用三个标é‡å€¼åˆ›å»ºä¸€ä¸ª[code]vec3[/code],这些标é‡å€¼å¯ä»¥ç”±å•独的输入æä¾›ã€‚"
+"使用三个标é‡å€¼åˆ›å»ºä¸€ä¸ª [code]vec3[/code],这些标é‡å€¼å¯ä»¥ç”±å•独的输入æä¾›ã€‚"
#: doc/classes/VisualShaderNodeVectorDecompose.xml
msgid ""
"Decomposes a [Vector3] into three scalars within the visual shader graph."
-msgstr "将一个[Vector3]分解为å¯è§†åŒ–ç€è‰²å™¨å›¾ä¸­çš„三个标é‡ã€‚"
+msgstr "将一个 [Vector3] 分解为å¯è§†åŒ–ç€è‰²å™¨å›¾ä¸­çš„三个标é‡ã€‚"
#: doc/classes/VisualShaderNodeVectorDecompose.xml
msgid ""
"Takes a [code]vec3[/code] and decomposes it into three scalar values that "
"can be used as separate inputs."
-msgstr "å–一个[code]vec3[/code]并将其分解为三个标é‡å€¼ï¼Œå¯ä½œä¸ºå•独的输入。"
+msgstr "å–一个 [code]vec3[/code] 并将其分解为三个标é‡å€¼ï¼Œå¯ä½œä¸ºå•独的输入。"
#: doc/classes/VisualShaderNodeVectorDerivativeFunc.xml
msgid "Calculates a vector derivative within the visual shader graph."
@@ -90351,7 +91689,7 @@ msgstr "在å¯è§†åŒ–ç€è‰²å™¨å›¾ä¸­è®¡ç®—一个å‘é‡å¯¼æ•°ã€‚"
#: doc/classes/VisualShaderNodeVectorDerivativeFunc.xml
msgid "A derivative type. See [enum Function] for options."
-msgstr "派生类型。选项å‚阅[enum Function]。"
+msgstr "派生类型。选项å‚阅 [enum Function]。"
#: doc/classes/VisualShaderNodeVectorDistance.xml
msgid ""
@@ -90365,8 +91703,8 @@ msgid ""
"vector [code]p1[/code].\n"
"Translated to [code]distance(p0, p1)[/code] in the shader language."
msgstr ""
-"计算从å‘é‡[code]p0[/code]表示的点到å‘é‡[code]p1[/code]çš„è·ç¦»ã€‚\n"
-"在ç€è‰²å™¨è¯­è¨€ä¸­è¢«è½¬æ¢æˆ[code]distance(p0, p1)[/code]。"
+"计算从å‘é‡ [code]p0[/code] 表示的点到å‘é‡ [code]p1[/code] çš„è·ç¦»ã€‚\n"
+"在ç€è‰²å™¨è¯­è¨€ä¸­è¢«è½¬æ¢æˆ [code]distance(p0, p1)[/code]。"
#: doc/classes/VisualShaderNodeVectorFunc.xml
msgid "A vector function to be used within the visual shader graph."
@@ -90378,7 +91716,7 @@ msgstr "å¯è§†åŒ–ç€è‰²å™¨èŠ‚ç‚¹ï¼Œèƒ½å¤Ÿä½¿ç”¨å‘釿‰§è¡Œä¸åŒçš„函数。"
#: doc/classes/VisualShaderNodeVectorFunc.xml
msgid "The function to be performed. See [enum Function] for options."
-msgstr "è¦æ‰§è¡Œçš„函数。å‚阅[enum Function]的选项。"
+msgstr "è¦æ‰§è¡Œçš„函数。å‚阅 [enum Function] 的选项。"
#: doc/classes/VisualShaderNodeVectorFunc.xml
msgid ""
@@ -90540,8 +91878,8 @@ 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 ""
-"在ç€è‰²å™¨è¯­è¨€ä¸­è½¬æ¢æˆ[code]mix(a, b, weight)[/code],其中[code]weight[/code]是"
-"一个[Vector3],æ¯ä¸ªåˆ†é‡çš„æƒé‡ã€‚"
+"在ç€è‰²å™¨è¯­è¨€ä¸­è½¬æ¢æˆ [code]mix(a, b, weight)[/code],其中 [code]weight[/"
+"code] 是一个 [Vector3],æ¯ä¸ªåˆ†é‡çš„æƒé‡ã€‚"
#: doc/classes/VisualShaderNodeVectorLen.xml
msgid "Returns the length of a [Vector3] within the visual shader graph."
@@ -90636,8 +91974,8 @@ msgid ""
"[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 ""
-"在ç€è‰²å™¨è¯­è¨€ä¸­è½¬æ¢æˆ[code]refract(I, N, eta)[/code],其中[code]I[/code]是入射"
-"å‘é‡ï¼Œ[code]N[/code]是法线å‘é‡ï¼Œ[code]eta[/code]是折射的比率。"
+"在ç€è‰²å™¨è¯­è¨€ä¸­è½¬æ¢æˆ [code]refract(I, N, eta)[/code],其中 [code]I[/code] 是"
+"入射å‘é‡ï¼Œ[code]N[/code] 是法线å‘é‡ï¼Œ[code]eta[/code] 是折射的比率。"
#: doc/classes/VisualShaderNodeVectorScalarMix.xml
msgid ""
@@ -90651,8 +91989,8 @@ msgid ""
"[code]a[/code] and [code]b[/code] are vectors and [code]weight[/code] is a "
"scalar."
msgstr ""
-"在ç€è‰²å™¨è¯­è¨€ä¸­è½¬æ¢æˆ[code]mix(a, b, weight)[/code],其中[code]a[/code]å’Œ"
-"[code]b[/code]是å‘é‡ï¼Œ[code]weight[/code]是标é‡ã€‚"
+"在ç€è‰²å™¨è¯­è¨€ä¸­è½¬æ¢æˆ [code]mix(a, b, weight)[/code],其中 [code]a[/code] å’Œ "
+"[code]b[/code] 是å‘é‡ï¼Œ[code]weight[/code] 是标é‡ã€‚"
#: doc/classes/VisualShaderNodeVectorScalarSmoothStep.xml
msgid ""
@@ -90669,11 +92007,11 @@ msgid ""
"code]. Otherwise the return value is interpolated between [code]0.0[/code] "
"and [code]1.0[/code] using Hermite polynomials."
msgstr ""
-"在ç€è‰²å™¨è¯­è¨€ä¸­è½¬æ¢æˆ[code]smoothstep(edge0, edge1, x)[/code],其中[code]x[/"
-"code]是一个标é‡ã€‚\n"
-"如果[code]x[/code]å°äºŽ[code]edge0[/code],返回 [code]0.0[/code],如果"
-"[code]x[/code]大于[code]edge1[/code],返回 [code]1.0[/code]。å¦åˆ™è¿”回值在"
-"[code]0.0[/code]å’Œ[code]1.0[/code]之间使用Hermite多项å¼è¿›è¡Œæ’值。"
+"在ç€è‰²å™¨è¯­è¨€ä¸­è½¬æ¢æˆ [code]smoothstep(edge0, edge1, x)[/code],其中 [code]x[/"
+"code] 是一个标é‡ã€‚\n"
+"如果 [code]x[/code] å°äºŽ [code]edge0[/code],返回 [code]0.0[/code],如果 "
+"[code]x[/code] 大于 [code]edge1[/code],返回 [code]1.0[/code]。å¦åˆ™è¿”回值在"
+"[code]0.0[/code] å’Œ [code]1.0[/code] 之间使用 Hermite 多项å¼è¿›è¡Œæ’值。"
#: doc/classes/VisualShaderNodeVectorScalarStep.xml
msgid "Calculates a vector Step function within the visual shader graph."
@@ -90685,8 +92023,8 @@ msgid ""
"Returns [code]0.0[/code] if [code]x[/code] is smaller than [code]edge[/code] "
"and [code]1.0[/code] otherwise."
msgstr ""
-"在ç€è‰²å™¨è¯­è¨€ä¸­è½¬æ¢æˆ[code]step(edge, x)[/code]。\n"
-"如果[code]x[/code]å°äºŽ[code]edge[/code],返回 [code]0.0[/code],å¦åˆ™è¿”回 "
+"在ç€è‰²å™¨è¯­è¨€ä¸­è½¬æ¢æˆ [code]step(edge, x)[/code]。\n"
+"如果 [code]x[/code] å°äºŽ [code]edge[/code],返回 [code]0.0[/code],å¦åˆ™è¿”回 "
"[code]1.0[/code]。"
#: doc/classes/VisualShaderNodeVectorSmoothStep.xml
@@ -90702,11 +92040,11 @@ msgid ""
"code]. Otherwise the return value is interpolated between [code]0.0[/code] "
"and [code]1.0[/code] using Hermite polynomials."
msgstr ""
-"在ç€è‰²å™¨è¯­è¨€ä¸­è½¬æ¢æˆ[code]smoothstep(edge0, edge1, x)[/code],其中[code]x[/"
-"code]是一个å‘é‡ã€‚\n"
-"如果[code]x[/code]å°äºŽ[code]edge0[/code],返回 [code]0.0[/code],如果"
-"[code]x[/code]大于[code]edge1[/code],返回 [code]1.0[/code]。å¦åˆ™è¿”回值在"
-"[code]0.0[/code]å’Œ[code]1.0[/code]之间使用Hermite多项å¼è¿›è¡Œæ’值。"
+"在ç€è‰²å™¨è¯­è¨€ä¸­è½¬æ¢æˆ [code]smoothstep(edge0, edge1, x)[/code],其中 [code]x[/"
+"code] 是一个å‘é‡ã€‚\n"
+"如果 [code]x[/code] å°äºŽ [code]edge0[/code],返回 [code]0.0[/code],如果 "
+"[code]x[/code] 大于 [code]edge1[/code],返回 [code]1.0[/code]。å¦åˆ™è¿”回值在 "
+"[code]0.0[/code] å’Œ [code]1.0[/code] 之间使用 Hermite 多项å¼è¿›è¡Œæ’值。"
#: doc/classes/VScrollBar.xml
msgid "Vertical scroll bar."
@@ -90754,8 +92092,8 @@ msgid ""
"The style for the separator line. Works best with [StyleBoxLine] (remember "
"to enable [member StyleBoxLine.vertical])."
msgstr ""
-"分隔线的样å¼ã€‚与[StyleBoxLine]一起使用效果最好,记得è¦å¯ç”¨[member "
-"StyleBoxLine.vertical]。"
+"分隔线的样å¼ã€‚与 [StyleBoxLine] 一起使用效果最好(记得è¦å¯ç”¨ [member "
+"StyleBoxLine.vertical])。"
#: doc/classes/VSlider.xml
msgid "Vertical slider."
@@ -90768,7 +92106,7 @@ 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"
+"垂直滑动æ¡ã€‚è§ [Slider]。这个控件是从底部(最å°ï¼‰æ»‘到顶部(最大)的。\n"
"[b]注æ„:[/b][signal Range.changed] å’Œ [signal Range.value_changed] ä¿¡å·æ˜¯ "
"[Range] 类的一部分,该类继承自它。"
@@ -90789,7 +92127,7 @@ msgstr "垂直拆分容器。"
#: doc/classes/VSplitContainer.xml
msgid ""
"Vertical split container. See [SplitContainer]. This goes from top to bottom."
-msgstr "垂直拆分容器。å‚阅[SplitContainer]。这是从上到下的。"
+msgstr "åž‚ç›´æ‹†åˆ†å®¹å™¨ã€‚è§ [SplitContainer]。这是从上到下的。"
#: doc/classes/WeakRef.xml
msgid ""
@@ -90837,8 +92175,8 @@ msgid ""
"after the connection is established (will return [code]65535[/code] until "
"then)."
msgstr ""
-"返回创建时分é…给该通é“çš„ID,或在å商时自动分é…。\n"
-"å¦‚æžœè¯¥é€šé“æ²¡æœ‰è¿›è¡Œå¸¦å¤–å商,那么该IDå°†åªåœ¨è¿žæŽ¥å»ºç«‹åŽå¯ç”¨ï¼Œåœ¨æ­¤ä¹‹å‰å°†è¿”回 "
+"返回创建时分é…给该通é“çš„ ID,或在å商时自动分é…。\n"
+"å¦‚æžœè¯¥é€šé“æ²¡æœ‰è¿›è¡Œå¸¦å¤–å商,那么该 ID å°†åªåœ¨è¿žæŽ¥å»ºç«‹åŽå¯ç”¨ï¼Œåœ¨æ­¤ä¹‹å‰å°†è¿”回 "
"[code]65535[/code]。"
#: modules/webrtc/doc_classes/WebRTCDataChannel.xml
@@ -90851,8 +92189,8 @@ msgid ""
"during creation.\n"
"Will be [code]65535[/code] if not specified."
msgstr ""
-"返回创建时分é…给这个通é“çš„[code]maxPacketLifeTime[/code]值。\n"
-"如果没有指定,将是[code]65535[/code]。"
+"返回创建时分é…给这个通é“çš„ [code]maxPacketLifeTime[/code] 值。\n"
+"如果没有指定,将是 [code]65535[/code]。"
#: modules/webrtc/doc_classes/WebRTCDataChannel.xml
msgid ""
@@ -90860,8 +92198,8 @@ msgid ""
"during creation.\n"
"Will be [code]65535[/code] if not specified."
msgstr ""
-"返回创建时分é…给这个通é“çš„[code]maxRetransmits[/code]值。\n"
-"如果没有指定,将是[code]65535[/code]。"
+"返回创建时分é…给这个通é“çš„ [code]maxRetransmits[/code] 值。\n"
+"如果没有指定,将是 [code]65535[/code]。"
#: modules/webrtc/doc_classes/WebRTCDataChannel.xml
msgid ""
@@ -90871,7 +92209,7 @@ msgstr "返回创建时分é…给这个通é“çš„å­å议。如果没有指定,
#: modules/webrtc/doc_classes/WebRTCDataChannel.xml
msgid "Returns the current state of this channel, see [enum ChannelState]."
-msgstr "返回该通é“的当å‰çжæ€ï¼Œå‚阅[enum ChannelState]。"
+msgstr "返回该通é“的当å‰çжæ€ï¼Œè§ [enum ChannelState]。"
#: modules/webrtc/doc_classes/WebRTCDataChannel.xml
msgid ""
@@ -90894,7 +92232,7 @@ msgid ""
"Returns [code]true[/code] if the last received packet was transferred as "
"text. See [member write_mode]."
msgstr ""
-"å¦‚æžœæœ€åŽæ”¶åˆ°çš„æ•°æ®åŒ…是以文本形å¼ä¼ è¾“,则返回 [code]true[/code]。å‚阅[member "
+"å¦‚æžœæœ€åŽæ”¶åˆ°çš„æ•°æ®åŒ…是以文本形å¼ä¼ è¾“,则返回 [code]true[/code]ã€‚è§ [member "
"write_mode]。"
#: modules/webrtc/doc_classes/WebRTCDataChannel.xml
@@ -90907,16 +92245,16 @@ msgid ""
"Tells the channel to send data over this channel as text. An external peer "
"(non-Godot) would receive this as a string."
msgstr ""
-"告诉通é“以文本形å¼åœ¨è¿™ä¸ªé€šé“上å‘逿•°æ®ã€‚外部对等体(éžGodot)会以字符串的形å¼"
-"接收。"
+"告诉通é“以文本形å¼åœ¨è¿™ä¸ªé€šé“上å‘逿•°æ®ã€‚å¤–éƒ¨å¯¹ç­‰ä½“ï¼ˆéž Godot)会以字符串的形"
+"å¼æŽ¥æ”¶ã€‚"
#: modules/webrtc/doc_classes/WebRTCDataChannel.xml
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 ""
-"告诉通é“以二进制形å¼åœ¨æ­¤é€šé“上å‘逿•°æ®ã€‚外部对等体(éžGodot)将以数组缓冲区或"
-"blobçš„å½¢å¼æŽ¥æ”¶ã€‚"
+"告诉通é“以二进制形å¼åœ¨æ­¤é€šé“上å‘逿•°æ®ã€‚å¤–éƒ¨å¯¹ç­‰ä½“ï¼ˆéž Godot)将以数组缓冲区"
+"或 blob çš„å½¢å¼æŽ¥æ”¶ã€‚"
#: modules/webrtc/doc_classes/WebRTCDataChannel.xml
msgid "The channel was created, but it's still trying to connect."
@@ -90941,8 +92279,8 @@ msgid ""
"A simple interface to create a peer-to-peer mesh network composed of "
"[WebRTCPeerConnection] that is compatible with the [MultiplayerAPI]."
msgstr ""
-"简å•的接å£ï¼Œç”¨äºŽåˆ›å»ºç”±[WebRTCPeerConnection]组æˆçš„点对点网状网络,与"
-"[MultiplayerAPI]兼容。"
+"简å•的接å£ï¼Œç”¨äºŽåˆ›å»ºç”± [WebRTCPeerConnection] 组æˆçš„点对点网状网络,与 "
+"[MultiplayerAPI] 兼容。"
#: modules/webrtc/doc_classes/WebRTCMultiplayer.xml
msgid ""
@@ -90981,12 +92319,12 @@ msgid ""
"the [code]maxPacketLifetime[/code] option when creating unreliable and "
"ordered channels (see [method WebRTCPeerConnection.create_data_channel])."
msgstr ""
-"以给定的[code]peer_id[/code]添加一个新的对等体到网状结构。该"
-"[WebRTCPeerConnection]必须处于[constant WebRTCPeerConnection.STATE_NEW]状"
+"以给定的 [code]peer_id[/code] 添加一个新的对等体到网状结构。该 "
+"[WebRTCPeerConnection] 必须处于 [constant WebRTCPeerConnection.STATE_NEW] 状"
"æ€ã€‚\n"
"将为å¯é çš„ã€ä¸å¯é çš„和有åºçš„传输创建三个通é“。在创建ä¸å¯é å’Œæœ‰åºé€šé“时,"
-"[code]unreliable_lifetime[/code]的值将被传递给[code]maxPacketLifetime[/code]"
-"选项,å‚阅[method WebRTCPeerConnection.create_data_channel]。"
+"[code]unreliable_lifetime[/code] 的值将被传递给 [code]maxPacketLifetime[/"
+"code]é€‰é¡¹ï¼ˆè§ [method WebRTCPeerConnection.create_data_channel])。"
#: modules/webrtc/doc_classes/WebRTCMultiplayer.xml
msgid "Close all the add peer connections and channels, freeing all resources."
@@ -91000,25 +92338,25 @@ msgid ""
"[WebRTCDataChannel], and [code]connected[/code] a boolean representing if "
"the peer connection is currently connected (all three channels are open)."
msgstr ""
-"返回一个具有给定[code]peer_id[/code]的对等体的字典表示,有三个键。"
-"[code]connection[/code]包å«åˆ°è¿™ä¸ªå¯¹ç­‰ä½“çš„[WebRTCPeerConnection],"
-"[code]channels[/code]三个[WebRTCDataChannel]的数组,以åŠ[code]connected[/"
-"code]一个布尔值,表示对等体连接是å¦å½“å‰å·²è¿žæŽ¥ï¼Œæ³¨ï¼Œæ‰€æœ‰ä¸‰ä¸ªé€šé“都打开。"
+"返回一个具有给定 [code]peer_id[/code] 的对等体的字典表示,有三个键。"
+"[code]connection[/code] 包å«åˆ°è¿™ä¸ªå¯¹ç­‰ä½“çš„ [WebRTCPeerConnection],"
+"[code]channels[/code] 三个 [WebRTCDataChannel] çš„æ•°ç»„ï¼Œä»¥åŠ [code]connected[/"
+"code] 一个布尔值,表示对等体连接是å¦å½“å‰å·²è¿žæŽ¥ï¼ˆæ‰€æœ‰ä¸‰ä¸ªé€šé“都打开)。"
#: modules/webrtc/doc_classes/WebRTCMultiplayer.xml
msgid ""
"Returns a dictionary which keys are the peer ids and values the peer "
"representation as in [method get_peer]."
msgstr ""
-"返回一个字典,其键是对等体的id,其值是对等体的表示,如[method get_peer]。"
+"返回一个字典,其键是对等体的 id,其值是对等体的表示,如 [method get_peer]。"
#: modules/webrtc/doc_classes/WebRTCMultiplayer.xml
msgid ""
"Returns [code]true[/code] if the given [code]peer_id[/code] is in the peers "
"map (it might not be connected though)."
msgstr ""
-"如果给定的[code]peer_id[/code]在对等体映射中,则返回 [code]true[/code],尽管"
-"它å¯èƒ½æ²¡æœ‰è¿žæŽ¥ã€‚"
+"如果给定的 [code]peer_id[/code] 在对等体映射中,则返回 [code]true[/code],尽"
+"管它å¯èƒ½æ²¡æœ‰è¿žæŽ¥ã€‚"
#: modules/webrtc/doc_classes/WebRTCMultiplayer.xml
msgid ""
@@ -91039,18 +92377,18 @@ msgid ""
"server_disconnected] will be emitted and state will become [constant "
"NetworkedMultiplayerPeer.CONNECTION_CONNECTED]."
msgstr ""
-"用给定的[code]peer_id[/code](必须在1å’Œ2147483647之间)åˆå§‹åŒ–多人游æˆå¯¹ç­‰"
-"体。\n"
-"如果[code]server_compatibilty[/code]是[code]false[/code](默认),多人对等体"
-"将立å³å¤„于[constant NetworkedMultiplayerPeer.CONNECTION_CONNECTED]状æ€ï¼Œ"
-"[signal NetworkedMultiplayerPeer.connection_succeeded]å°†ä¸ä¼šè¢«å‘射出æ¥ã€‚\n"
-"如果[code]server_compatibilty[/code]为 [code]true[/code],对等体将抑制所有"
-"[signal NetworkedMultiplayerPeer.peer_connected]ä¿¡å·ï¼Œç›´åˆ°ä¸€ä¸ªid为[constant "
-"NetworkedMultiplayerPeer.TARGET_PEER_SERVER]的对等体连接,然åŽå‘出[signal "
-"NetworkedMultiplayerPeer.connection_succeeded]。之åŽå°†å¯¹æ¯ä¸ªå·²ç»è¿žæŽ¥çš„对等体"
-"å’Œå¯èƒ½è¿žæŽ¥çš„任何新对等体å‘出[signal NetworkedMultiplayerPeer.peer_connected]"
-"的信å·ã€‚如果æœåŠ¡å™¨å¯¹ç­‰ä½“åœ¨æ­¤ä¹‹åŽæ–­å¼€è¿žæŽ¥ï¼Œä¿¡å·[signal "
-"NetworkedMultiplayerPeer.server_disconnected]将被å‘出,状æ€å°†å˜æˆ[constant "
+"用给定的 [code]peer_id[/code](必须在 1 å’Œ 2147483647 之间)åˆå§‹åŒ–多人游æˆå¯¹"
+"等体。\n"
+"如果[code]server_compatibilty[/code] 是 [code]false[/code](默认),多人对等"
+"体将立å³å¤„于 [constant NetworkedMultiplayerPeer.CONNECTION_CONNECTED] 状æ€ï¼Œ"
+"[signal NetworkedMultiplayerPeer.connection_succeeded] å°†ä¸ä¼šè¢«å‘射出æ¥ã€‚\n"
+"如果[code]server_compatibilty[/code] 为 [code]true[/code],对等体将抑制所有 "
+"[signal NetworkedMultiplayerPeer.peer_connected] ä¿¡å·ï¼Œç›´åˆ°ä¸€ä¸ª id 为 "
+"[constant NetworkedMultiplayerPeer.TARGET_PEER_SERVER] 的对等体连接,然åŽå‘"
+"出 [signal NetworkedMultiplayerPeer.connection_succeeded]。之åŽå°†å¯¹æ¯ä¸ªå·²ç»è¿ž"
+"接的对等体和å¯èƒ½è¿žæŽ¥çš„任何新对等体å‘出 [signal NetworkedMultiplayerPeer."
+"peer_connected] 的信å·ã€‚如果æœåŠ¡å™¨å¯¹ç­‰ä½“åœ¨æ­¤ä¹‹åŽæ–­å¼€è¿žæŽ¥ï¼Œä¿¡å· [signal "
+"NetworkedMultiplayerPeer.server_disconnected] 将被å‘出,状æ€å°†å˜æˆ [constant "
"NetworkedMultiplayerPeer.CONNECTION_CONNECTED]。"
#: modules/webrtc/doc_classes/WebRTCMultiplayer.xml
@@ -91060,13 +92398,13 @@ msgid ""
"emitted for it, then [signal NetworkedMultiplayerPeer.peer_disconnected] "
"will be emitted."
msgstr ""
-"从网格中移除给定的[code]peer_id[/code]的对等体。如果对等体是连接的,并为其å‘"
-"出[signal NetworkedMultiplayerPeer.peer_connected],那么[signal "
-"NetworkedMultiplayerPeer.peer_disconnected]将被å‘出。"
+"从网格中移除给定的 [code]peer_id[/code] 的对等体。如果对等体是连接的,并为其"
+"å‘出 [signal NetworkedMultiplayerPeer.peer_connected],那么 [signal "
+"NetworkedMultiplayerPeer.peer_disconnected] 将被å‘出。"
#: modules/webrtc/doc_classes/WebRTCPeerConnection.xml
msgid "Interface to a WebRTC peer connection."
-msgstr "与WebRTC对等体连接的接å£ã€‚"
+msgstr "与 WebRTC 对等体连接的接å£ã€‚"
#: modules/webrtc/doc_classes/WebRTCPeerConnection.xml
msgid ""
@@ -91084,14 +92422,14 @@ msgid ""
"After these steps, the connection should become connected. Keep on reading "
"or look into the tutorial for more information."
msgstr ""
-"本地计算机和远程对等体之间的WebRTC连接。æä¾›ä¸€ä¸ªæŽ¥å£æ¥è¿žæŽ¥ã€ç»´æŠ¤å’Œç›‘控连"
+"本地计算机和远程对等体之间的 WebRTC 连接。æä¾›ä¸€ä¸ªæŽ¥å£æ¥è¿žæŽ¥ã€ç»´æŠ¤å’Œç›‘控连"
"接。\n"
-"从当å‰å¼€å§‹ï¼Œåœ¨ä¸¤ä¸ªå¯¹ç­‰ä½“之间建立WebRTCè¿žæŽ¥ï¼Œè¿™ä¸æ˜¯ä¸€é¡¹ç®€å•的任务,但它å¯ä»¥åˆ†"
-"解为3ä¸ªä¸»è¦æ­¥éª¤ã€‚\n"
+"从当å‰å¼€å§‹ï¼Œåœ¨ä¸¤ä¸ªå¯¹ç­‰ä½“之间建立 WebRTC è¿žæŽ¥ï¼Œè¿™ä¸æ˜¯ä¸€é¡¹ç®€å•的任务,但它å¯ä»¥"
+"分解为 3 ä¸ªä¸»è¦æ­¥éª¤ã€‚\n"
"- 想è¦å¯åŠ¨è¿žæŽ¥çš„å¯¹ç­‰ä½“ï¼ˆ[code]A[/code]从现在开始)创建一个æäº¤ï¼Œå¹¶å°†å…¶å‘é€ç»™"
"å¦ä¸€ä¸ªå¯¹ç­‰ä½“([code]B[/code]从现在开始)。\n"
-"- [code]B[/code]收到è¦çº¦ï¼Œç”Ÿæˆå’Œå›žç­”,并将其å‘é€ç»™[code]A[/code])。\n"
-"- [code]A[/code]å’Œ[code]B[/code]ç„¶åŽç”Ÿæˆå¹¶ç›¸äº’交æ¢ICE候选。\n"
+"- [code]B[/code] 收到è¦çº¦ï¼Œç”Ÿæˆå’Œå›žç­”,并将其å‘é€ç»™ [code]A[/code])。\n"
+"- [code]A[/code] å’Œ [code]B[/code] ç„¶åŽç”Ÿæˆå¹¶ç›¸äº’äº¤æ¢ ICE 候选。\n"
"在这些步骤之åŽï¼Œè¿žæŽ¥åº”该æˆåŠŸå»ºç«‹ã€‚ç»§ç»­é˜…è¯»æˆ–æŸ¥çœ‹æ•™ç¨‹ä»¥äº†è§£æ›´å¤šä¿¡æ¯ã€‚"
#: modules/webrtc/doc_classes/WebRTCPeerConnection.xml
@@ -91109,7 +92447,7 @@ msgid ""
"call [method initialize]."
msgstr ""
"关闭对等体连接和与之相关的所有数æ®é€šé“。\n"
-"[b]注æ„:[/b]ä½ ä¸èƒ½ä¸ºä¸€ä¸ªæ–°çš„连接é‡å¤ä½¿ç”¨è¿™ä¸ªå¯¹è±¡ï¼Œé™¤éžä½ è°ƒç”¨[method "
+"[b]注æ„:[/b]ä½ ä¸èƒ½ä¸ºä¸€ä¸ªæ–°çš„连接é‡å¤ä½¿ç”¨è¿™ä¸ªå¯¹è±¡ï¼Œé™¤éžä½ è°ƒç”¨ [method "
"initialize]。"
#: modules/webrtc/doc_classes/WebRTCPeerConnection.xml
@@ -91188,14 +92526,14 @@ msgid ""
"session_description_created] will be called when the session is ready to be "
"sent."
msgstr ""
-"创建一个新的SDPæäº¤ï¼Œä»¥å¼€å§‹ä¸Žè¿œç¨‹å¯¹ç­‰ä½“çš„WebRTC连接。在调用此方法之å‰ï¼Œè‡³å°‘è¦"
-"创建一个[WebRTCDataChannel]。\n"
-"如果这个函数返回[constant OK],当会è¯å‡†å¤‡å¥½è¢«å‘逿—¶ï¼Œ[signal "
-"session_description_created]将被调用。"
+"创建一个新的 SDP æäº¤ï¼Œä»¥å¼€å§‹ä¸Žè¿œç¨‹å¯¹ç­‰ä½“çš„ WebRTC 连接。在调用此方法之å‰ï¼Œè‡³"
+"å°‘è¦åˆ›å»ºä¸€ä¸ª [WebRTCDataChannel]。\n"
+"如果这个函数返回 [constant OK],当会è¯å‡†å¤‡å¥½è¢«å‘逿—¶ï¼Œ[signal "
+"session_description_created] 将被调用。"
#: modules/webrtc/doc_classes/WebRTCPeerConnection.xml
msgid "Returns the connection state. See [enum ConnectionState]."
-msgstr "返回连接状æ€ã€‚å‚阅[enum ConnectionState]。"
+msgstr "返回连接状æ€ã€‚è§ [enum ConnectionState]。"
#: modules/webrtc/doc_classes/WebRTCPeerConnection.xml
msgid ""
@@ -91247,8 +92585,8 @@ msgid ""
"Call this method frequently (e.g. in [method Node._process] or [method Node."
"_physics_process]) to properly receive signals."
msgstr ""
-"ç»å¸¸è°ƒç”¨è¿™ä¸ªæ–¹æ³•以正确接收信å·ï¼Œä¾‹å¦‚在[method Node._process]或[method Node."
-"_physics_process]中。"
+"ç»å¸¸è°ƒç”¨è¿™ä¸ªæ–¹æ³•以正确接收信å·ï¼Œä¾‹å¦‚在 [method Node._process] 或 [method "
+"Node._physics_process] 中。"
#: modules/webrtc/doc_classes/WebRTCPeerConnection.xml
msgid ""
@@ -91258,10 +92596,10 @@ msgid ""
"ice_candidate_created] (unless an [enum Error] different from [constant OK] "
"is returned)."
msgstr ""
-"设置本地对等体的SDPæè¿°ã€‚这应是在å“应[signal session_description_created]æ—¶è°ƒ"
-"用的。\n"
-"调用此函数åŽï¼Œå¯¹ç­‰ä½“将开始å‘出[signal ice_candidate_created],除éžè¿”回与"
-"[constant OK]ä¸åŒçš„[enum Error]。"
+"设置本地对等体的 SDP æè¿°ã€‚这应是在å“应 [signal session_description_created] "
+"时调用的。\n"
+"调用此函数åŽï¼Œå¯¹ç­‰ä½“将开始å‘出 [signal ice_candidate_created],除éžè¿”回与 "
+"[constant OK] ä¸åŒçš„ [enum Error]。"
#: modules/webrtc/doc_classes/WebRTCPeerConnection.xml
msgid ""
@@ -91272,11 +92610,11 @@ msgid ""
"If [code]type[/code] is [code]answer[/code] the peer will start emitting "
"[signal ice_candidate_created]."
msgstr ""
-"设置远程对等体的SDPæè¿°ã€‚应用远程对等体产生的值æ¥è°ƒç”¨ï¼Œå¹¶é€šè¿‡ä¿¡å·æœåŠ¡å™¨æŽ¥"
+"设置远程对等体的 SDP æè¿°ã€‚应用远程对等体产生的值æ¥è°ƒç”¨ï¼Œå¹¶é€šè¿‡ä¿¡å·æœåŠ¡å™¨æŽ¥"
"收。\n"
-"如果[code]type[/code]是[code]offer[/code],对等体将å‘出[signal "
-"session_description_created]并给出适当的答案。\n"
-"如果[code]type[/code]是[code]answer[/code],对等体将开始å‘出[signal "
+"如果 [code]type[/code] 是 [code]offer[/code],对等体将å‘出 [signal "
+"session_description_created] 并给出适当的答案。\n"
+"如果 [code]type[/code] 是 [code]answer[/code],对等体将开始å‘出 [signal "
"ice_candidate_created]。"
#: modules/webrtc/doc_classes/WebRTCPeerConnection.xml
@@ -91297,7 +92635,8 @@ 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 ""
-"当新的ICE候选者被创建时触å‘ã€‚è¿™ä¸‰ä¸ªå‚æ•°æ˜¯ä¸ºäº†é€šè¿‡ä¿¡å·æœåŠ¡å™¨ä¼ é€’ç»™è¿œç¨‹å¯¹ç­‰ä½“ã€‚"
+"当新的 ICE 候选者被创建时触å‘ã€‚è¿™ä¸‰ä¸ªå‚æ•°æ˜¯ä¸ºäº†é€šè¿‡ä¿¡å·æœåŠ¡å™¨ä¼ é€’ç»™è¿œç¨‹å¯¹ç­‰"
+"体。"
#: modules/webrtc/doc_classes/WebRTCPeerConnection.xml
msgid ""
@@ -91306,8 +92645,8 @@ msgid ""
"meant to be passed to [method set_local_description] on this object, and "
"sent to the remote peer over the signaling server."
msgstr ""
-"在æˆåŠŸè°ƒç”¨[method create_offer]或[method set_remote_description]åŽè§¦å‘,当它"
-"äº§ç”Ÿä¸€ä¸ªåº”ç­”æ—¶ã€‚è¿™äº›å‚æ•°æ˜¯ä¸ºäº†ä¼ é€’给这个对象上的[method "
+"在æˆåŠŸè°ƒç”¨ [method create_offer] 或 [method set_remote_description] åŽè§¦å‘,"
+"å½“å®ƒäº§ç”Ÿä¸€ä¸ªåº”ç­”æ—¶ã€‚è¿™äº›å‚æ•°æ˜¯ä¸ºäº†ä¼ é€’给这个对象上的 [method "
"set_local_description]ï¼Œå¹¶é€šè¿‡ä¿¡å·æœåС噍å‘é€ç»™è¿œç¨‹å¯¹ç­‰ä½“。"
#: modules/webrtc/doc_classes/WebRTCPeerConnection.xml
@@ -91320,28 +92659,28 @@ msgstr "连接是新的,数æ®é€šé“å’Œæäº¤å¯ä»¥åœ¨è¿™ç§çжæ€ä¸‹åˆ›å»ºã€‚
msgid ""
"The peer is connecting, ICE is in progress, none of the transports has "
"failed."
-msgstr "对等体正在连接,ICE正在进行中,没有任何传输失败。"
+msgstr "对等体正在连接,ICE 正在进行中,没有任何传输失败。"
#: modules/webrtc/doc_classes/WebRTCPeerConnection.xml
msgid "The peer is connected, all ICE transports are connected."
-msgstr "对等体已连接,所有的ICE传输都已连接。"
+msgstr "对等体已连接,所有的 ICE 传输都已连接。"
#: modules/webrtc/doc_classes/WebRTCPeerConnection.xml
msgid "At least one ICE transport is disconnected."
-msgstr "至少有一个ICE传输被断开连接。"
+msgstr "至少有一个 ICE 传输被断开连接。"
#: modules/webrtc/doc_classes/WebRTCPeerConnection.xml
msgid "One or more of the ICE transports failed."
-msgstr "一个或更多的ICE传输失败。"
+msgstr "一个或更多的 ICE 传输失败。"
#: modules/webrtc/doc_classes/WebRTCPeerConnection.xml
msgid ""
"The peer connection is closed (after calling [method close] for example)."
-msgstr "对等连接已关闭,例如在调用[method close]åŽã€‚"
+msgstr "对等连接已关闭,例如在调用 [method close] åŽã€‚"
#: modules/websocket/doc_classes/WebSocketClient.xml
msgid "A WebSocket client implementation."
-msgstr "WebSocket客户端的实现。"
+msgstr "WebSocket 客户端的实现。"
#: modules/websocket/doc_classes/WebSocketClient.xml
msgid ""
@@ -91355,12 +92694,13 @@ msgid ""
"You will receive appropriate signals when connecting, disconnecting, or when "
"new data is available."
msgstr ""
-"该类实现了一个与任何符åˆRFC 6455çš„WebSocketæœåŠ¡å™¨å…¼å®¹çš„WebSocket客户端。\n"
-"这个客户端å¯ä»¥é€‰æ‹©æ€§åœ°ä½œä¸º[MultiplayerAPI]的网络对等体使用。\n"
-"在å¯åŠ¨å®¢æˆ·ç«¯åŽï¼ˆ[method connect_to_url]),你需è¦[method "
-"NetworkedMultiplayerPeer.poll]它以固定的时间间隔,例如在[method Node."
-"_process]内。\n"
-"å½“è¿žæŽ¥ã€æ–­å¼€è¿žæŽ¥æˆ–æœ‰æ–°æ•°æ®æ—¶ï¼Œä½ å°†æ”¶åˆ°é€‚当的信å·ã€‚"
+"该类实现了一个 WebSocket å®¢æˆ·ç«¯ï¼Œä¸Žä»»ä½•ç¬¦åˆ RFC 6455 çš„ WebSocket æœåС噍兼"
+"容。\n"
+"这个客户端å¯ä»¥é€‰æ‹©æ€§åœ°ä½œä¸º [MultiplayerAPI] 的网络对等体使用。\n"
+"在å¯åŠ¨å®¢æˆ·ç«¯åŽï¼ˆ[method connect_to_url]),你需è¦ä»¥å›ºå®šçš„æ—¶é—´é—´éš”调用 "
+"[method NetworkedMultiplayerPeer.poll](例如在 [method Node._process] "
+"内)。\n"
+"å½“è¿žæŽ¥ã€æ–­å¼€è¿žæŽ¥æˆ–æœ‰æ–°æ•°æ®æ—¶ï¼Œä½ å°†æ”¶åˆ°ç›¸åº”的信å·ã€‚"
#: modules/websocket/doc_classes/WebSocketClient.xml
msgid ""
@@ -91386,38 +92726,38 @@ msgid ""
"[b]Note:[/b] Specifying [code]custom_headers[/code] is not supported in "
"HTML5 exports due to browsers restrictions."
msgstr ""
-"连接到给定的URL,请求给定的[code]protocols[/code]之一作为å­å议。如果列表为"
-"空,默认为空,将ä¸è¯·æ±‚å­å议。\n"
-"如果[code]true[/code]作为[code]gd_mp_api[/code]被传递,客户端将表现得åƒ"
-"[MultiplayerAPI]的网络对等体,与éžGodotæœåŠ¡å™¨çš„è¿žæŽ¥å°†ä¸å·¥ä½œï¼Œå¹¶ä¸”[signal "
+"连接到给定的 URL,请求给定的 [code]protocols[/code] 之一作为å­å议。如果列表"
+"为空,默认为空,将ä¸è¯·æ±‚å­å议。\n"
+"如果 [code]true[/code] 作为 [code]gd_mp_api[/code] è¢«ä¼ é€’ï¼Œå®¢æˆ·ç«¯å°†è¡¨çŽ°å¾—åƒ "
+"[MultiplayerAPI] çš„ç½‘ç»œå¯¹ç­‰ä½“ï¼Œä¸Žéž Godot æœåŠ¡å™¨çš„è¿žæŽ¥å°†ä¸å·¥ä½œï¼Œå¹¶ä¸”[signal "
"data_received]å°†ä¸è¢«è§¦å‘。\n"
-"如果[code]false[/code]被传递,默认传递,你必须调用[PacketPeer]函数,"
-"[code]put_packet[/code], [code]get_packet[/code]等,对通过[code]get_peer(1)[/"
-"code]返回的[WebSocketPeer]ï¼Œè€Œä¸æ˜¯ç›´æŽ¥å¯¹è¯¥å¯¹è±¡ï¼Œä¾‹å¦‚,[code]get_peer(1)."
+"如果 [code]false[/code] 被传递,默认传递,你必须调用 [PacketPeer]函数,"
+"[code]put_packet[/code], [code]get_packet[/code] 等,对通过[code]get_peer(1)"
+"[/code] 返回的 [WebSocketPeer]ï¼Œè€Œä¸æ˜¯ç›´æŽ¥å¯¹è¯¥å¯¹è±¡ï¼Œä¾‹å¦‚ [code]get_peer(1)."
"put_packet(data)[/code]。\n"
-"ä½ å¯ä»¥é€‰æ‹©ä¼ é€’一个[code]custom_headers[/code]çš„åˆ—è¡¨ï¼Œä»¥æ·»åŠ åˆ°æ¡æ‰‹çš„HTTP请求"
-"中。\n"
-"[b]注æ„:[/b]为了é¿å…HTML5中的混åˆå†…容警告或错误,须使用以[code]wss://[/code]"
-"(安全)开头的[code]url[/code]ï¼Œè€Œä¸æ˜¯[code]ws://[/code]ã€‚è¿™æ ·åšæ—¶ï¼Œç¡®ä¿ä½¿ç”¨"
-"与æœåŠ¡å™¨çš„SSLè¯ä¹¦ä¸­å®šä¹‰çš„å®Œå…¨åˆæ ¼çš„域å。ä¸è¦ç›´æŽ¥é€šè¿‡IP地å€è¿›è¡Œ[code]wss://[/"
-"code]连接,因为它ä¸ä¼šä¸ŽSSLè¯ä¹¦ç›¸åŒ¹é…。\n"
-"[b]注æ„:[/b]由于æµè§ˆå™¨çš„é™åˆ¶ï¼ŒæŒ‡å®š[code]custom_headers[/code]在HTML5导出中ä¸"
-"被支æŒã€‚"
+"ä½ å¯ä»¥é€‰æ‹©ä¼ é€’一个 [code]custom_headers[/code] çš„åˆ—è¡¨ï¼Œä»¥æ·»åŠ åˆ°æ¡æ‰‹çš„ HTTP 请"
+"求中。\n"
+"[b]注æ„:[/b]为了é¿å… HTML5 中的混åˆå†…容警告或错误,须使用以 [code]wss://[/"
+"code](安全)开头的 [code]url[/code]ï¼Œè€Œä¸æ˜¯ [code]ws://[/code]ã€‚è¿™æ ·åšæ—¶ï¼Œç¡®"
+"ä¿ä½¿ç”¨ä¸ŽæœåŠ¡å™¨çš„ SSL è¯ä¹¦ä¸­å®šä¹‰çš„å®Œå…¨åˆæ ¼çš„域å。ä¸è¦ç›´æŽ¥é€šè¿‡ IP 地å€è¿›è¡Œ "
+"[code]wss://[/code] 连接,因为它ä¸ä¼šä¸Ž SSL è¯ä¹¦ç›¸åŒ¹é…。\n"
+"[b]注æ„:[/b]由于æµè§ˆå™¨çš„é™åˆ¶ï¼ŒæŒ‡å®š [code]custom_headers[/code] 在 HTML5 导出"
+"中ä¸è¢«æ”¯æŒã€‚"
#: modules/websocket/doc_classes/WebSocketClient.xml
msgid ""
"Disconnects this client from the connected host. See [method WebSocketPeer."
"close] for more information."
msgstr ""
-"断开此客户端与所连接主机的连接。更多信æ¯å‚阅[method WebSocketPeer.close]。"
+"断开此客户端与所连接主机的连接。详情请å‚阅 [method WebSocketPeer.close]。"
#: modules/websocket/doc_classes/WebSocketClient.xml
msgid "Return the IP address of the currently connected host."
-msgstr "返回当å‰è¿žæŽ¥çš„主机的IP地å€ã€‚"
+msgstr "返回当å‰è¿žæŽ¥çš„主机的 IP 地å€ã€‚"
#: modules/websocket/doc_classes/WebSocketClient.xml
msgid "Return the IP port of the currently connected host."
-msgstr "返回当å‰è¿žæŽ¥çš„主机的IP端å£ã€‚"
+msgstr "返回当å‰è¿žæŽ¥çš„主机的 IP 端å£ã€‚"
#: modules/websocket/doc_classes/WebSocketClient.xml
msgid ""
@@ -91427,9 +92767,9 @@ msgid ""
"[b]Note:[/b] Specifying a custom [code]trusted_ssl_certificate[/code] is not "
"supported in HTML5 exports due to browsers restrictions."
msgstr ""
-"如果指定,该[X509Certificate]将是连接到SSL主机时唯一接å—çš„è¯ä¹¦ã€‚任何由æœåС噍"
-"æä¾›çš„å…¶ä»–è¯ä¹¦å°†è¢«è§†ä¸ºæ— æ•ˆã€‚\n"
-"[b]注æ„:[/b]由于æµè§ˆå™¨çš„é™åˆ¶ï¼Œåœ¨HTML5å¯¼å‡ºä¸­ä¸æ”¯æŒæŒ‡å®šä¸€ä¸ªè‡ªå®šä¹‰çš„"
+"如果指定,该 [X509Certificate] 将是连接到 SSL 主机时唯一接å—çš„è¯ä¹¦ã€‚任何由æœ"
+"务器æä¾›çš„å…¶ä»–è¯ä¹¦å°†è¢«è§†ä¸ºæ— æ•ˆã€‚\n"
+"[b]注æ„:[/b]由于æµè§ˆå™¨çš„é™åˆ¶ï¼Œåœ¨ HTML5 å¯¼å‡ºä¸­ä¸æ”¯æŒæŒ‡å®šä¸€ä¸ªè‡ªå®šä¹‰çš„ "
"[code]trusted_ssl_certificate[/code]。"
#: modules/websocket/doc_classes/WebSocketClient.xml
@@ -91438,7 +92778,7 @@ msgid ""
"[b]Note:[/b] You must specify the certificates to be used in the Project "
"Settings for it to work when exported."
msgstr ""
-"如果 [code]true[/code],则å¯ç”¨ SSL è¯ä¹¦éªŒè¯ã€‚\n"
+"如果为 [code]true[/code],则å¯ç”¨ SSL è¯ä¹¦éªŒè¯ã€‚\n"
"[b]注æ„:[/b]你必须在项目设置中指定è¦ä½¿ç”¨çš„è¯ä¹¦ï¼Œä»¥ä¾¿åœ¨å¯¼å‡ºæ—¶å‘挥作用。"
#: modules/websocket/doc_classes/WebSocketClient.xml
@@ -91446,7 +92786,7 @@ 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 ""
-"当与æœåŠ¡å™¨çš„è¿žæŽ¥è¢«å…³é—­æ—¶è§¦å‘。[code]was_clean_close[/code] 将是[code]true[/"
+"当与æœåŠ¡å™¨çš„è¿žæŽ¥è¢«å…³é—­æ—¶è§¦å‘。[code]was_clean_close[/code] 将是 [code]true[/"
"code] 如果连接完全关闭。"
#: modules/websocket/doc_classes/WebSocketClient.xml
@@ -91458,8 +92798,8 @@ msgid ""
"Emitted when a connection with the server is established, [code]protocol[/"
"code] will contain the sub-protocol agreed with the server."
msgstr ""
-"当与æœåŠ¡å™¨å»ºç«‹è¿žæŽ¥æ—¶è§¦å‘,[code]protocol[/code]å议将包å«ä¸ŽæœåŠ¡å™¨è¾¾æˆä¸€è‡´çš„å­"
-"å议。"
+"当与æœåŠ¡å™¨å»ºç«‹è¿žæŽ¥æ—¶è§¦å‘,[code]protocol[/code] 将包å«ä¸ŽæœåŠ¡å™¨è¾¾æˆä¸€è‡´çš„å­å"
+"议。"
#: modules/websocket/doc_classes/WebSocketClient.xml
msgid ""
@@ -91476,9 +92816,9 @@ msgid ""
"until you get a [signal connection_closed] signal to achieve the clean "
"close. See [method WebSocketPeer.close] for more details."
msgstr ""
-"当æœåŠ¡å™¨è¯·æ±‚å®Œå…¨å…³é—­æ—¶è§¦å‘。你应该继续进行轮询,直到获得[signal "
-"connection_closed]ä¿¡å·ï¼Œä»¥å®žçŽ°å½»åº•çš„å…³é—­ã€‚æ›´å¤šç»†èŠ‚å‚阅[method WebSocketPeer."
-"close]。"
+"当æœåŠ¡å™¨è¯·æ±‚å®Œå…¨å…³é—­æ—¶è§¦å‘。你应该继续进行轮询,直到获得 [signal "
+"connection_closed] ä¿¡å·ï¼Œä»¥å®žçŽ°å½»åº•çš„å…³é—­ã€‚æ›´å¤šç»†èŠ‚å‚阅 [method "
+"WebSocketPeer.close]。"
#: modules/websocket/doc_classes/WebSocketMultiplayerPeer.xml
msgid "Base class for WebSocket server and client."
@@ -91509,13 +92849,13 @@ msgid ""
"[b]Note:[/b] HTML5 exports only use the input buffer since the output one is "
"managed by browsers."
msgstr ""
-"é…置该WebSocket对等体的缓冲区大å°ã€‚默认值å¯ä»¥åœ¨é¡¹ç›®è®¾ç½®ä¸­çš„[code]network/"
-"limits[/code]下指定。对于æœåŠ¡å™¨ï¼Œæ•°å€¼æ˜¯æŒ‡æ¯ä¸ªè¿žæŽ¥çš„对等体。\n"
+"é…置该 WebSocket 对等体的缓冲区大å°ã€‚默认值å¯ä»¥åœ¨é¡¹ç›®è®¾ç½®ä¸­çš„ [code]network/"
+"limits[/code] 下指定。对于æœåŠ¡å™¨ï¼Œæ•°å€¼æ˜¯æŒ‡æ¯ä¸ªè¿žæŽ¥çš„对等体。\n"
"å‰ä¸¤ä¸ªå‚数定义了输入缓冲区的大å°å’ŒæŽ’队数æ®åŒ…çš„é™åˆ¶ï¼ŒåŽä¸¤ä¸ªå‚数定义了输出缓冲"
"区。\n"
-"缓冲区的大å°ä»¥KiB为å•ä½ï¼Œæ‰€ä»¥[code]4=2^12=4096字节[/code]ã€‚æ‰€æœ‰çš„å‚æ•°éƒ½å°†è¢«å››"
-"èˆäº”入到最接近的2的幂。\n"
-"[b]注æ„:[/b]HTML5输出åªä½¿ç”¨è¾“入缓冲区,因为输出缓冲区是由æµè§ˆå™¨ç®¡ç†çš„。"
+"缓冲区的大å°ä»¥ KiB 为å•ä½ï¼Œæ‰€ä»¥ [code]4=2^12=4096字节[/code]ã€‚æ‰€æœ‰çš„å‚æ•°éƒ½å°†"
+"被四èˆäº”入到最接近的 2 的幂。\n"
+"[b]注æ„:[/b]HTML5 输出åªä½¿ç”¨è¾“入缓冲区,因为输出缓冲区是由æµè§ˆå™¨ç®¡ç†çš„。"
#: modules/websocket/doc_classes/WebSocketMultiplayerPeer.xml
msgid ""
@@ -91553,13 +92893,13 @@ msgid ""
"[b]Note:[/b] The HTML5 export might not support all status codes. Please "
"refer to browser-specific documentation for more details."
msgstr ""
-"关闭此WebSocket连接。[code]code[/code]是关闭的状æ€ä»£ç ï¼Œæœ‰æ•ˆçжæ€ä»£ç çš„列表å‚"
-"阅RFC 6455第7.4节。[code]reason[/code] 是关闭连接的åªè¯»åŽŸå› ï¼ˆå¯ä»¥æ˜¯ä»»ä½•å°äºŽ"
-"123字节的UTF-8字符串)。\n"
-"[b]注æ„:[/b]为了实现彻底的关闭,你需è¦ç»§ç»­è½®è¯¢ï¼Œç›´åˆ°æ”¶åˆ°[signal "
-"WebSocketClient.connection_closed]或[signal WebSocketServer."
+"关闭此 WebSocket 连接。[code]code[/code] 是关闭的状æ€ä»£ç ï¼Œæœ‰æ•ˆçжæ€ä»£ç çš„列表"
+"å‚阅 RFC 6455 第 7.4 节。[code]reason[/code] 是关闭连接的åªè¯»åŽŸå› ï¼ˆå¯ä»¥æ˜¯ä»»ä½•"
+"å°äºŽ 123 字节的 UTF-8 字符串)。\n"
+"[b]注æ„:[/b]为了实现彻底的关闭,你需è¦ç»§ç»­è½®è¯¢ï¼Œç›´åˆ°æ”¶åˆ° [signal "
+"WebSocketClient.connection_closed] 或 [signal WebSocketServer."
"client_disconnected]。\n"
-"[b]注æ„:[/b]HTML5导出å¯èƒ½ä¸æ”¯æŒæ‰€æœ‰çжæ€ä»£ç ã€‚请å‚考特定æµè§ˆå™¨çš„æ–‡æ¡£ä»¥äº†è§£æ›´"
+"[b]注æ„:[/b]HTML5 导出å¯èƒ½ä¸æ”¯æŒæ‰€æœ‰çжæ€ä»£ç ã€‚请å‚考特定æµè§ˆå™¨çš„æ–‡æ¡£ä»¥äº†è§£æ›´"
"多细节。"
#: modules/websocket/doc_classes/WebSocketPeer.xml
@@ -91584,12 +92924,12 @@ msgid ""
"[/b] HTML5 exports use WebSocket.bufferedAmount, while other platforms use "
"an internal buffer."
msgstr ""
-"返回输出的websocketç¼“å†²åŒºä¸­çš„å½“å‰æ•°æ®é‡ã€‚[b]注æ„:[/b]HTML5导出使用WebSocket."
-"bufferedAmount,而其他平å°ä½¿ç”¨å†…部缓冲区。"
+"返回输出的 websocket ç¼“å†²åŒºä¸­çš„å½“å‰æ•°æ®é‡ã€‚[b]注æ„:[/b]HTML5 导出使用 "
+"WebSocket.bufferedAmount,而其他平å°ä½¿ç”¨å†…部缓冲区。"
#: modules/websocket/doc_classes/WebSocketPeer.xml
msgid "Gets the current selected write mode. See [enum WriteMode]."
-msgstr "获å–当å‰é€‰æ‹©çš„写入模å¼ã€‚å‚阅[enum WriteMode]。"
+msgstr "获å–当å‰é€‰æ‹©çš„写入模å¼ã€‚è§ [enum WriteMode]。"
#: modules/websocket/doc_classes/WebSocketPeer.xml
msgid "Returns [code]true[/code] if this peer is currently connected."
@@ -91614,24 +92954,24 @@ msgid ""
"Returns [code]true[/code] if the last received packet was sent as a text "
"payload. See [enum WriteMode]."
msgstr ""
-"å¦‚æžœæœ€åŽæ”¶åˆ°çš„æ•°æ®åŒ…是作为文本有效载è·å‘é€çš„,返回 [code]true[/code]。å‚阅"
+"å¦‚æžœæœ€åŽæ”¶åˆ°çš„æ•°æ®åŒ…是作为文本有效载è·å‘é€çš„,返回 [code]true[/code]ã€‚è§ "
"[enum WriteMode]。"
#: modules/websocket/doc_classes/WebSocketPeer.xml
msgid ""
"Specifies that WebSockets messages should be transferred as text payload "
"(only valid UTF-8 is allowed)."
-msgstr "指定WebSockets消æ¯åº”作为文本有效载è·ä¼ è¾“(åªå…许有效的UTF-8)。"
+msgstr "指定 WebSockets 消æ¯åº”作为文本有效载è·ä¼ è¾“(åªå…许有效的 UTF-8)。"
#: modules/websocket/doc_classes/WebSocketPeer.xml
msgid ""
"Specifies that WebSockets messages should be transferred as binary payload "
"(any byte combination is allowed)."
-msgstr "指定WebSockets消æ¯åº”以二进制有效载è·çš„å½¢å¼ä¼ è¾“(å…许任何字节组åˆï¼‰ã€‚"
+msgstr "指定 WebSockets 消æ¯åº”以二进制有效载è·çš„å½¢å¼ä¼ è¾“(å…许任何字节组åˆï¼‰ã€‚"
#: modules/websocket/doc_classes/WebSocketServer.xml
msgid "A WebSocket server implementation."
-msgstr "WebSocketæœåŠ¡å™¨çš„å®žçŽ°ã€‚"
+msgstr "WebSocket æœåŠ¡å™¨çš„å®žçŽ°ã€‚"
#: modules/websocket/doc_classes/WebSocketServer.xml
msgid ""
@@ -91654,7 +92994,7 @@ msgid ""
"Disconnects the peer identified by [code]id[/code] from the server. See "
"[method WebSocketPeer.close] for more information."
msgstr ""
-"断开由[code]id[/code]标识的对等体与æœåŠ¡å™¨çš„è¿žæŽ¥ã€‚æ›´å¤šä¿¡æ¯å‚阅[method "
+"断开由 [code]id[/code] 标识的对等体与æœåŠ¡å™¨çš„è¿žæŽ¥ã€‚è¯¦æƒ…è¯·å‚阅 [method "
"WebSocketPeer.close]。"
#: modules/websocket/doc_classes/WebSocketServer.xml
@@ -91682,15 +93022,16 @@ msgid ""
"[code]get_peer(id).get_available_packet_count[/code])."
msgstr ""
"在给定的端å£ä¸Šå¼€å§‹ç›‘å¬ã€‚\n"
-"ä½ å¯ä»¥é€šè¿‡ \"åè®®\" 数组指定所需的å­å议。如果列表为空(默认情况下),将ä¸è¯·"
+"ä½ å¯ä»¥é€šè¿‡â€œprotocolsâ€æ•°ç»„指定所需的å­å议。如果列表为空(默认情况下),将ä¸è¯·"
"求任何å­å议。\n"
-"如果[code]true[/code]作为[code]gd_mp_api[/code]传递,æœåŠ¡å™¨å°†è¡¨çŽ°å¾—åƒ"
-"[MultiplayerAPI]的网络对等体,æ¥è‡ªéžGodot客户端的连接将ä¸å·¥ä½œï¼Œå¹¶ä¸”[signal "
-"data_received]å°†ä¸è¢«è§¦å‘。\n"
-"如果[code]false[/code]被传递(默认),你必须调用[PacketPeer]函数"
-"([code]put_packet[/code], [code]get_packet[/code], etc.),在通过"
-"[code]get_peer(id)[/code]返回的[WebSocketPeer]上,与具有给定[code]id[/code]的"
-"对等体进行通信,例如,[code]get_peer(id).get_available_packet_count[/code]。"
+"如果传递的 [code]gd_mp_api[/code] 为 [code]true[/code],æœåŠ¡å™¨å°†è¡¨çŽ°å¾—åƒ "
+"[MultiplayerAPI] 的网络对等体,æ¥è‡ªéž Godot 客户端的连接将ä¸å·¥ä½œï¼Œå¹¶ä¸” "
+"[signal data_received] å°†ä¸è¢«è§¦å‘。\n"
+"如果传递的是 [code]false[/code](默认),你必须调用 [PacketPeer] 函数"
+"([code]put_packet[/code]ã€[code]get_packet[/code] 等),在通过 "
+"[code]get_peer(id)[/code] 返回的 [WebSocketPeer] 上,与具有给定 [code]id[/"
+"code] 的对等体进行通信(例如 [code]get_peer(id).get_available_packet_count[/"
+"code])。"
#: modules/websocket/doc_classes/WebSocketServer.xml
msgid ""
@@ -91707,8 +93048,9 @@ msgid ""
"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 ""
-"当ä¸è®¾ç½®ä¸º[code]*[/code]时,将é™åˆ¶è¿›å…¥çš„连接到指定的IP地å€ã€‚å°†[code]bind_ip[/"
-"code]设置为[code]127.0.0.1[/code]将导致æœåС噍åªç›‘嬿œ¬åœ°ä¸»æœºã€‚"
+"当ä¸è®¾ç½®ä¸º [code]*[/code] 时,将é™åˆ¶è¿›å…¥çš„连接到指定的 IP 地å€ã€‚å°† "
+"[code]bind_ip[/code] 设置为 [code]127.0.0.1[/code] 将导致æœåС噍åªç›‘嬿œ¬åœ°ä¸»"
+"机。"
#: modules/websocket/doc_classes/WebSocketServer.xml
msgid ""
@@ -91716,8 +93058,9 @@ msgid ""
"can set this to a valid [X509Certificate] to be provided as additional CA "
"chain information during the SSL handshake."
msgstr ""
-"当使用SSL时,你å¯ä»¥å°†å…¶è®¾ç½®ä¸ºä¸€ä¸ªæœ‰æ•ˆçš„[X509Certificate],作为SSLæ¡æ‰‹è¿‡ç¨‹ä¸­é¢"
-"外的CAé“¾ä¿¡æ¯æä¾›ã€‚å‚阅[member private_key]å’Œ[member ssl_certificate]。"
+"当使用 SSL 时,你å¯ä»¥å°†å…¶è®¾ç½®ä¸ºä¸€ä¸ªæœ‰æ•ˆçš„ [X509Certificate],作为 SSL æ¡æ‰‹è¿‡"
+"程中é¢å¤–çš„ CA é“¾ä¿¡æ¯æä¾›ã€‚è¯·å‚阅 [member private_key] å’Œ [member "
+"ssl_certificate]。"
#: modules/websocket/doc_classes/WebSocketServer.xml
msgid ""
@@ -91733,8 +93076,8 @@ msgid ""
"cause the server to require SSL instead of regular TCP (i.e. the [code]wss://"
"[/code] protocol)."
msgstr ""
-"当设置为有效的[CryptoKey]时,与[member ssl_certificate]一起,将导致æœåŠ¡å™¨éœ€è¦"
-"SSLè€Œä¸æ˜¯æ™®é€šçš„TCP,å³[code]wss://[/code]å议。"
+"当设置为有效的 [CryptoKey] 时,与 [member ssl_certificate] 一起,将导致æœåС噍"
+"éœ€è¦ SSL è€Œä¸æ˜¯æ™®é€šçš„ TCPï¼Œå³ [code]wss://[/code] å议。"
#: modules/websocket/doc_classes/WebSocketServer.xml
msgid ""
@@ -91742,8 +93085,8 @@ msgid ""
"cause the server to require SSL instead of regular TCP (i.e. the [code]wss://"
"[/code] protocol)."
msgstr ""
-"当设置为有效的[X509Certificate]时,连åŒ[member private_key],将导致æœåŠ¡å™¨éœ€è¦"
-"SSLè€Œä¸æ˜¯æ™®é€šçš„TCP,å³[code]wss://[/code]å议。"
+"当设置为有效的 [X509Certificate] æ—¶ï¼Œè¿žåŒ [member private_key],将导致æœåС噍"
+"éœ€è¦ SSL è€Œä¸æ˜¯æ™®é€šçš„ TCPï¼Œå³ [code]wss://[/code] å议。"
#: modules/websocket/doc_classes/WebSocketServer.xml
msgid ""
@@ -91752,23 +93095,23 @@ msgid ""
"to achieve the clean close. See [method WebSocketPeer.close] for more "
"details."
msgstr ""
-"å½“ä¸€ä¸ªå®¢æˆ·ç«¯è¦æ±‚彻底关闭时触å‘。你应该继续轮询,直到你得到一个具有相åŒ"
-"[code]id[/code]çš„[signal client_disconnected]ä¿¡å·ï¼Œä»¥å®žçŽ°å½»åº•å…³é—­ã€‚è¯·å‚阅"
-"[method WebSocketPeer.close]以了解更多细节。"
+"å½“ä¸€ä¸ªå®¢æˆ·ç«¯è¦æ±‚彻底关闭时触å‘ã€‚ä½ åº”è¯¥ç»§ç»­è½®è¯¢ï¼Œç›´åˆ°ä½ å¾—åˆ°ä¸€ä¸ªå…·æœ‰ç›¸åŒ "
+"[code]id[/code] çš„ [signal client_disconnected] ä¿¡å·ï¼Œä»¥å®žçŽ°å½»åº•å…³é—­ã€‚æ›´å¤šç»†"
+"节请å‚阅 [method WebSocketPeer.close]。"
#: modules/websocket/doc_classes/WebSocketServer.xml
msgid ""
"Emitted when a new client connects. \"protocol\" will be the sub-protocol "
"agreed with the client."
-msgstr "当新的客户端连接时触å‘。\"åè®®\" 将是与客户端达æˆçš„å­å议。"
+msgstr "当新的客户端连接时触å‘。“protocolâ€å°†æ˜¯ä¸Žå®¢æˆ·ç«¯è¾¾æˆçš„å­å议。"
#: modules/websocket/doc_classes/WebSocketServer.xml
msgid ""
"Emitted when a client disconnects. [code]was_clean_close[/code] will be "
"[code]true[/code] if the connection was shutdown cleanly."
msgstr ""
-"当客户端断开连接时触å‘。如果连接被彻底关闭[code]was_clean_close[/code] 将是"
-"[code]true[/code] 。"
+"当客户端断开连接时触å‘。如果连接被彻底关闭,[code]was_clean_close[/code] å°†"
+"是 [code]true[/code] 。"
#: modules/websocket/doc_classes/WebSocketServer.xml
msgid ""
@@ -91777,7 +93120,7 @@ msgid ""
"multiplayer peer."
msgstr ""
"å½“æ”¶åˆ°ä¸€ä¸ªæ–°æ¶ˆæ¯æ—¶è§¦å‘。\n"
-"[b]注æ„:[/b]这个信å·åœ¨ç”¨ä½œé«˜çº§å¤šäººå¯¹ç­‰çš„æ—¶å€™ï¼Œ[i]ä¸[/i]触å‘。"
+"[b]注æ„:[/b]这个信å·åœ¨ç”¨ä½œé«˜çº§å¤šäººå¯¹ç­‰çš„æ—¶å€™ï¼Œ[i]ä¸ä¼š[/i]触å‘。"
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid "AR/VR interface using WebXR."
@@ -91937,7 +93280,7 @@ msgstr ""
" webxr_interface.xr_standard_mapping = true\n"
"\n"
" # WebXR使用了大é‡çš„异步回调,\n"
-" # 所以我们è¦è¿žæŽ¥å„ç§ä¿¡å·æ¥æŽ¥æ”¶å®ƒä»¬ã€‚ \n"
+" # 所以我们è¦è¿žæŽ¥å„ç§ä¿¡å·æ¥æŽ¥æ”¶å®ƒä»¬ã€‚ \n"
" webxr_interface.connect(\"session_supported\", self, "
"\"_webxr_session_supported\")\n"
" webxr_interface.connect(\"session_started\", self, "
@@ -91949,7 +93292,7 @@ msgstr ""
"\n"
" # 这将立å³è¿”回——自身的_webxr_session_supported()方法\n"
" # (我们在上é¢è¿žæŽ¥äº†'session_supported' ä¿¡å·)将在ç¨åŽè¢«è°ƒç”¨\n"
-" # 让我们知é“它是å¦è¢«æ”¯æŒã€‚ \n"
+" # 让我们知é“它是å¦è¢«æ”¯æŒã€‚ \n"
" webxr_interface.is_session_supported(\"immersive-vr\")\n"
"\n"
"func _webxr_session_supported(session_mode, supported):\n"
@@ -91958,11 +93301,11 @@ msgstr ""
"\n"
"func _on_Button_pressed():\n"
" if not vr_supported:\n"
-" OS.alert(\"Your browser doesn't support VR\")\n"
+" OS.alert(\"ä½ çš„æµè§ˆå™¨ä¸æ”¯æŒ VR\")\n"
" return\n"
"\n"
" # 获得沉浸å¼çš„VRä½“éªŒï¼Œè€Œä¸æ˜¯AR('immersive-ar')\n"
-" # 或一个简å•çš„3DoF查看器('viewer')。 \n"
+" # 或一个简å•çš„3DoF查看器('viewer')。 \n"
" webxr_interface.session_mode = 'immersive-vr'\n"
" # 'bounded-floor'是房间大å°ï¼Œ'local-floor'æ˜¯ç«™ç€æˆ–åç€çš„\n"
" # 体验(如果你有3DoF耳机,它会让你离地é¢1.6米)。\n"
@@ -91983,16 +93326,16 @@ msgstr ""
" # _webxr_session_started()或_webxr_session_failed()方法被调用时,æ‰çŸ¥é“它"
"是å¦çœŸçš„æˆåŠŸæˆ–å¤±è´¥ã€‚\n"
" if not webxr_interface.initialize():\n"
-" OS.alert(\"Failed to initialize\")\n"
+" OS.alert(\"åˆå§‹åŒ–失败\")\n"
" return\n"
"\n"
"func _webxr_session_started():\n"
" $Button.visible = false\n"
-" # 这告诉Godot开始进行渲染。\n"
+" # 让 Godot 开始进行渲染。\n"
" get_viewport().arvr = true\n"
" # 这将是您从上é¢è¯·æ±‚的类型中最终得到的引用空间类型。\n"
" # 如果你想让游æˆåœ¨'bounded-floor'å’Œ 'local-floor' 中有一点ä¸åŒï¼Œ\n"
-" # 这是很有用的。 \n"
+" # 这是很有用的。 \n"
" print (\"Reference space type: \" + webxr_interface."
"reference_space_type)\n"
"\n"
@@ -92003,7 +93346,7 @@ msgstr ""
" get_viewport().arvr = false\n"
"\n"
"func _webxr_session_failed(message):\n"
-" OS.alert(\"Failed to initialize: \" + message)\n"
+" OS.alert(\"åˆå§‹åŒ–失败:\" + message)\n"
"[/codeblock]\n"
"æœ‰å‡ ç§æ–¹æ³•æ¥å¤„ç†â€œcontrollerâ€æŽ§åˆ¶å™¨çš„è¾“å…¥ã€‚\n"
"- 使用 [ARVRController] 节点和它们的 [signal ARVRController.button_pressed] "
@@ -92047,10 +93390,10 @@ msgid ""
"- [signal squeezestart]"
msgstr ""
"获å–给定 [code]controller_id[/code] çš„ [ARVRPositionalTracker]。\n"
-"在 WebXR 的上下文中, \"controller\"控制器å¯ä»¥æ˜¯é«˜çº§ VR 控制器,如 Oculus "
-"Touch 或 Index 控制器,甚至å¯ä»¥æ˜¯å±å¹•上的点击ã€è¯­éŸ³å‘½ä»¤æˆ–设备本身的按钮按下。"
-"当使用éžä¼ ç»ŸæŽ§åˆ¶å™¨æ—¶ï¼Œå°† [ARVRPositionalTracker] çš„ä½ç½®å’Œæ–¹å‘解释为指å‘用户希"
-"望与之交互的对象的射线。\n"
+"在 WebXR 的上下文中,“controllerâ€æŽ§åˆ¶å™¨å¯ä»¥æ˜¯é«˜çº§ VR 控制器,如 Oculus Touch "
+"或 Index 控制器,甚至å¯ä»¥æ˜¯å±å¹•上的点击ã€è¯­éŸ³å‘½ä»¤æˆ–设备本身的按钮按下。当使用"
+"éžä¼ ç»ŸæŽ§åˆ¶å™¨æ—¶ï¼Œå°† [ARVRPositionalTracker] çš„ä½ç½®å’Œæ–¹å‘解释为指å‘用户希望与之"
+"交互的对象的射线。\n"
"ä½¿ç”¨æ­¤æ–¹æ³•èŽ·å–æœ‰å…³è§¦å‘以下信å·ä¹‹ä¸€çš„æŽ§åˆ¶å™¨çš„ä¿¡æ¯ï¼š\n"
"- [signal selectstart]\n"
"- [signal select]\n"
@@ -92081,11 +93424,11 @@ msgid ""
"This method returns nothing, instead it emits the [signal session_supported] "
"signal with the result."
msgstr ""
-"检查给定的[code]session_mode[/code]是å¦è¢«ç”¨æˆ·çš„æµè§ˆå™¨æ”¯æŒã€‚\n"
-"å¯èƒ½çš„值æ¥è‡ª[url=https://developer.mozilla.org/en-US/docs/Web/API/"
-"XRSessionMode]WebXR的XRSessionMode[/url],包括:[code]\"immersive-vr\"[/"
-"code], [code]\"immersive-ar\"[/code], 和[code]\"inline\"[/code]。\n"
-"此方法ä¸è¿”回任何东西,而是将结果å‘é€ç»™[signal session_supported]ä¿¡å·ã€‚"
+"检查给定的 [code]session_mode[/code] 是å¦è¢«ç”¨æˆ·çš„æµè§ˆå™¨æ”¯æŒã€‚\n"
+"å¯èƒ½çš„值æ¥è‡ª [url=https://developer.mozilla.org/en-US/docs/Web/API/"
+"XRSessionMode]WebXR 的 XRSessionMode[/url],包括:[code]\"immersive-vr\"[/"
+"code]ã€[code]\"immersive-ar\"[/code] å’Œ [code]\"inline\"[/code]。\n"
+"此方法ä¸è¿”回任何东西,而是将结果å‘é€ç»™ [signal session_supported] ä¿¡å·ã€‚"
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
@@ -92134,12 +93477,13 @@ msgid ""
"use a particular reference space type, it must be listed in either [member "
"required_features] or [member optional_features]."
msgstr ""
-"引用空间类型,æ¥è‡ª[member requested_reference_space_types]属性中设置的请求类"
-"型列表,最终由[method ARVRInterface.initialize]在设置WebXRä¼šè¯æ—¶ä½¿ç”¨ã€‚\n"
-"å¯èƒ½çš„值æ¥è‡ª[url=https://developer.mozilla.org/en-US/docs/Web/API/"
-"XRReferenceSpaceType]WebXR的XRReferenceSpaceType[/url]。如果你想使用一个特定"
-"的引用空间类型,它必须被列入[member required_features]或[member "
-"optional_features]中。"
+"引用空间类型,æ¥è‡ª [member requested_reference_space_types] 属性中设置的请求"
+"类型列表,最终由 [method ARVRInterface.initialize] 在设置 WebXR ä¼šè¯æ—¶ä½¿"
+"用。\n"
+"å¯èƒ½çš„值æ¥è‡ª [url=https://developer.mozilla.org/en-US/docs/Web/API/"
+"XRReferenceSpaceType]WebXR 的 XRReferenceSpaceType[/url]。如果你想使用一个特"
+"定的引用空间类型,它必须被列入 [member required_features] 或 [member "
+"optional_features] 中。"
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
@@ -92157,7 +93501,7 @@ msgid ""
msgstr ""
"[method ARVRInterface.initialize] 设置 WebXR ä¼šè¯æ—¶ä½¿ç”¨çš„引用空间类型的逗å·åˆ†"
"隔列表。\n"
-"按顺åºè¯·æ±‚引用空间类型,将使用用户设备或æµè§ˆå™¨æ”¯æŒçš„第一个。 [member "
+"按顺åºè¯·æ±‚引用空间类型,将使用用户设备或æµè§ˆå™¨æ”¯æŒçš„第一个。[member "
"reference_space_type] å±žæ€§åŒ…å«æœ€ç»ˆä½¿ç”¨çš„引用空间类型。\n"
"这对已ç»åˆå§‹åŒ–çš„æŽ¥å£æ²¡æœ‰ä»»ä½•å½±å“。\n"
"å¯èƒ½çš„值æ¥è‡ª [url=https://developer.mozilla.org/en-US/docs/Web/API/"
@@ -92196,11 +93540,11 @@ msgid ""
"API/XRSessionMode]WebXR's XRSessionMode[/url], including: [code]\"immersive-"
"vr\"[/code], [code]\"immersive-ar\"[/code], and [code]\"inline\"[/code]."
msgstr ""
-"设置WebXRä¼šè¯æ—¶ï¼Œ[method ARVRInterface.initialize]æ‰€ä½¿ç”¨çš„ä¼šè¯æ¨¡å¼ã€‚\n"
+"设置 WebXR ä¼šè¯æ—¶ï¼Œ[method ARVRInterface.initialize] æ‰€ä½¿ç”¨çš„ä¼šè¯æ¨¡å¼ã€‚\n"
"在已ç»åˆå§‹åŒ–çš„æƒ…å†µä¸‹ï¼Œè¿™å¯¹æŽ¥å£æ²¡æœ‰ä»»ä½•å½±å“。\n"
-"å¯èƒ½çš„值æ¥è‡ª[url=https://developer.mozilla.org/en-US/docs/Web/API/"
-"XRSessionMode]WebXR的XRSessionMode[/url],包括:[code]\"immersive-vr\"[/"
-"code], [code]\"immersive-ar\"[/code], 和[code]\"inline\"[/code]。"
+"å¯èƒ½çš„值æ¥è‡ª [url=https://developer.mozilla.org/en-US/docs/Web/API/"
+"XRSessionMode]WebXR 的 XRSessionMode[/url],包括:[code]\"immersive-vr\"[/"
+"code]ã€[code]\"immersive-ar\"[/code] å’Œ [code]\"inline\"[/code]。"
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
@@ -92213,7 +93557,7 @@ msgstr ""
"指示用户是å¦å¯ä»¥çœ‹åˆ° WebXR 会è¯çš„图åƒã€‚\n"
"å¯èƒ½çš„值æ¥è‡ª [url=https://developer.mozilla.org/en-US/docs/Web/API/"
"XRVisibilityState]WebXR 的 XRVisibilityState[/url],包括 [code]\"hidden\"[/"
-"code], [code]\"visible\"[/code], 和 [code]\"visible-blurred\"[/code]。"
+"code]ã€[code]\"visible\"[/code] å’Œ [code]\"visible-blurred\"[/code]。"
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
@@ -92286,9 +93630,9 @@ msgid ""
"[code]message[/code] may optionally contain an error message from WebXR, or "
"an empty string if no message is available."
msgstr ""
-"如果会è¯å¯åŠ¨å¤±è´¥ï¼Œç”±[method ARVRInterface.initialize]触å‘。\n"
-"[code]message[/code]å¯ä»¥é€‰æ‹©åŒ…å«ä¸€ä¸ªæ¥è‡ªWebXR的错误信æ¯ï¼Œå¦‚果没有信æ¯ï¼Œåˆ™ä¸ºç©º"
-"字符串。"
+"如果会è¯å¯åŠ¨å¤±è´¥ï¼Œç”± [method ARVRInterface.initialize] 触å‘。\n"
+"[code]message[/code] å¯ä»¥é€‰æ‹©åŒ…å«ä¸€ä¸ªæ¥è‡ª WebXR 的错误信æ¯ï¼Œå¦‚果没有信æ¯ï¼Œåˆ™"
+"为空字符串。"
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
@@ -92297,17 +93641,17 @@ msgid ""
"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 ""
-"å¦‚æžœä¼šè¯æˆåŠŸå¯åŠ¨ï¼Œç”±[method ARVRInterface.initialize]触å‘。\n"
-"此时,应该执行[code]get_viewport().arvr = true[/code]æ¥æŒ‡ç¤ºGodot开始å‘AR/VR设"
-"备进行渲染是安全的。"
+"å¦‚æžœä¼šè¯æˆåŠŸå¯åŠ¨ï¼Œç”± [method ARVRInterface.initialize] 触å‘。\n"
+"此时,应该执行 [code]get_viewport().arvr = true[/code] æ¥æŒ‡ç¤º Godot å¼€å§‹å‘ "
+"AR/VR 设备进行渲染是安全的。"
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
"Emitted by [method is_session_supported] to indicate if the given "
"[code]session_mode[/code] is supported or not."
msgstr ""
-"ç”±[method is_session_supported]触å‘ï¼Œè¡¨ç¤ºæ˜¯å¦æ”¯æŒæŒ‡å®šçš„[code]session_mode[/"
-"code]。"
+"ç”± [method is_session_supported] 触å‘ï¼Œè¡¨ç¤ºæ˜¯å¦æ”¯æŒæŒ‡å®šçš„ "
+"[code]session_mode[/code]。"
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid ""
@@ -92341,7 +93685,7 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid "Emitted when [member visibility_state] has changed."
-msgstr "当[member visibility_state]已更改时触å‘。"
+msgstr "当 [member visibility_state] 已更改时触å‘。"
#: modules/webxr/doc_classes/WebXRInterface.xml
msgid "We don't know the target ray mode."
@@ -92371,8 +93715,8 @@ msgid ""
"default toplevel [Control] that draws a window decoration and allows motion "
"and resizing."
msgstr ""
-"Windowdialog是所有基于窗å£çš„å¯¹è¯æ¡†çš„基类。它是一个默认的顶层[Control]控件,å¯"
-"以绘制一个窗å£è£…饰,并å…许移动和调整大å°ã€‚"
+"Windowdialog 是所有基于窗å£çš„å¯¹è¯æ¡†çš„基类。它是一个默认的顶层 [Control] 控"
+"件,å¯ä»¥ç»˜åˆ¶ä¸€ä¸ªçª—å£è£…饰,并å…许移动和调整大å°ã€‚"
#: doc/classes/WindowDialog.xml
msgid ""
@@ -92387,7 +93731,7 @@ msgstr ""
#: doc/classes/WindowDialog.xml
msgid "If [code]true[/code], the user can resize the window."
-msgstr "如果[code]true[/code],用户å¯ä»¥è°ƒæ•´çª—å£å¤§å°ã€‚"
+msgstr "如果为 [code]true[/code],用户å¯ä»¥è°ƒæ•´çª—å£å¤§å°ã€‚"
#: doc/classes/WindowDialog.xml
msgid "The text displayed in the window's title bar."
@@ -92405,7 +93749,7 @@ msgstr "关闭按钮的水平å移。"
msgid ""
"The thickness of the border that can be dragged when scaling the window (if "
"[member resizable] is enabled)."
-msgstr "ç¼©æ”¾çª—å£æ—¶å¯ä»¥æ‹–动的边框的粗细,如果å¯ç”¨äº†[member resizable]。"
+msgstr "ç¼©æ”¾çª—å£æ—¶å¯ä»¥æ‹–动的边框的粗细,如果å¯ç”¨äº† [member resizable]。"
#: doc/classes/WindowDialog.xml
msgid "The vertical offset of the title text."
@@ -92440,11 +93784,11 @@ msgstr "拥有与世界相关的一切的类。"
#: doc/classes/World.xml
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."
+"scenario, a navigation map and a sound space. Spatial nodes register their "
+"resources into the current world."
msgstr ""
-"拥有与世界相关的一切的类。物ç†ç©ºé—´ã€è§†è§‰åœºæ™¯å’Œå£°éŸ³ç©ºé—´ã€‚ç©ºé—´èŠ‚ç‚¹å°†å…¶èµ„æºæ³¨å†Œ"
-"到当å‰ä¸–界中。"
+"拥有与世界相关的一切的类。物ç†ç©ºé—´ã€è§†è§‰åœºæ™¯ã€å¯¼èˆªåœ°å›¾å’Œå£°éŸ³ç©ºé—´ã€‚空间节点将"
+"å…¶èµ„æºæ³¨å†Œåˆ°å½“å‰ä¸–界中。"
#: doc/classes/World.xml
msgid ""
@@ -92454,15 +93798,18 @@ msgstr "ç›´æŽ¥è®¿é—®ä¸–ç•Œç‰©ç† 3D 空间状æ€ã€‚用于查询当å‰å’Œæ½œåœ¨çš
#: doc/classes/World.xml
msgid "The World's [Environment]."
-msgstr "World的[Environment]环境。"
+msgstr "World 的 [Environment] 环境。"
#: doc/classes/World.xml
msgid ""
-"The World's fallback_environment will be used if the World's [Environment] "
-"fails or is missing."
-msgstr ""
-"如果 World 的 [Environment] 失败或丢失,将使用 World 的 "
-"fallback_environment。"
+"The World's fallback environment will be used if [member environment] fails "
+"or is missing."
+msgstr "该 World 的回退环境会在 [member environment] 失败或丢失时使用。"
+
+#: doc/classes/World.xml
+msgid ""
+"The [RID] of this world's navigation map. Used by the [NavigationServer]."
+msgstr "这个世界的导航地图的 [RID]。会被 [NavigationServer] 使用。"
#: doc/classes/World.xml
msgid "The World's visual scenario."
@@ -92479,11 +93826,11 @@ msgstr "拥有与 2D 世界有关的所有内容的类。"
#: doc/classes/World2D.xml
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."
+"visual scenario, a navigation map and a sound space. 2D nodes register their "
+"resources into the current 2D world."
msgstr ""
-"拥有与 2D 世界有关一切的类。一个物ç†ç©ºé—´ã€ä¸€ä¸ªå¯è§†åŒ–场景和一个声音空间。2D 节"
-"ç‚¹å°†å…¶èµ„æºæ³¨å†Œåˆ°å½“å‰çš„ 2D 世界中。"
+"拥有与 2D 世界有关一切的类。物ç†ç©ºé—´ã€è§†è§‰åœºæ™¯ã€å¯¼èˆªåœ°å›¾å’Œå£°éŸ³ç©ºé—´ã€‚2D 节点将"
+"å…¶èµ„æºæ³¨å†Œåˆ°å½“å‰çš„ 2D 世界中。"
#: doc/classes/World2D.xml
msgid ""
@@ -92502,10 +93849,15 @@ msgstr ""
#: doc/classes/World2D.xml
msgid ""
+"The [RID] of this world's navigation map. Used by the [Navigation2DServer]."
+msgstr "这个世界的导航地图的 [RID]。会被 [Navigation2DServer] 使用。"
+
+#: doc/classes/World2D.xml
+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 ""
-"这个世界物ç†ç©ºé—´èµ„æºçš„[RID]。 [Physics2DServer] 用于 2D 物ç†ï¼Œå°†å…¶è§†ä¸ºç©ºé—´å’Œ"
+"这个世界物ç†ç©ºé—´èµ„æºçš„ [RID]。[Physics2DServer] 用于 2D 物ç†ï¼Œå°†å…¶è§†ä¸ºç©ºé—´å’Œ"
"区域。"
#: doc/classes/WorldEnvironment.xml
@@ -92633,8 +93985,8 @@ msgid ""
"current node type is neither [constant NODE_ELEMENT] nor [constant "
"NODE_ELEMENT_END]."
msgstr ""
-"获å–当å‰å…ƒç´ èŠ‚ç‚¹çš„å称。如果当å‰èŠ‚ç‚¹ç±»åž‹æ—¢ä¸æ˜¯[constant NODE_ELEMENT]ä¹Ÿä¸æ˜¯"
-"[constant NODE_ELEMENT_END],将引å‘一个错误。"
+"获å–当å‰å…ƒç´ èŠ‚ç‚¹çš„å称。如果当å‰èŠ‚ç‚¹ç±»åž‹æ—¢ä¸æ˜¯ [constant NODE_ELEMENT] 也ä¸"
+"是 [constant NODE_ELEMENT_END],将引å‘一个错误。"
#: doc/classes/XMLParser.xml
msgid ""
diff --git a/doc/translations/zh_TW.po b/doc/translations/zh_TW.po
index 50436013ff..84b16d22a6 100644
--- a/doc/translations/zh_TW.po
+++ b/doc/translations/zh_TW.po
@@ -428,7 +428,7 @@ msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml
msgid ""
"Compares two values by checking their actual contents, recursing into any "
-"`Array` or `Dictionary` up to its deepest level.\n"
+"[Array] or [Dictionary] up to its deepest level.\n"
"This compares to [code]==[/code] in a number of ways:\n"
"- For [code]null[/code], [code]int[/code], [code]float[/code], [code]String[/"
"code], [code]Object[/code] and [code]RID[/code] both [code]deep_equal[/code] "
@@ -482,7 +482,7 @@ msgid ""
"- 1.0: Linear\n"
"- Greater than 1.0 (exclusive): Ease in\n"
"[/codeblock]\n"
-"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.4/img/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/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]."
@@ -1203,7 +1203,7 @@ msgid ""
"[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/"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.5/img/"
"smoothstep_ease_comparison.png]Comparison between smoothstep() and ease(x, "
"-1.6521) return values[/url]"
msgstr ""
@@ -3488,6 +3488,12 @@ msgstr ""
#: doc/classes/@GlobalScope.xml
msgid ""
+"Hints that an integer property is a bitmask using the optionally named 2D "
+"navigation layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml
+msgid ""
"Hints that an integer property is a bitmask using the optionally named 3D "
"render layers."
msgstr ""
@@ -3500,6 +3506,12 @@ msgstr ""
#: doc/classes/@GlobalScope.xml
msgid ""
+"Hints that an integer property is a bitmask using the optionally named 3D "
+"navigation layers."
+msgstr ""
+
+#: doc/classes/@GlobalScope.xml
+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]."
@@ -8480,7 +8492,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/AStar.xml
+#: doc/classes/AStar.xml doc/classes/AStar2D.xml
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[/"
@@ -8679,7 +8691,10 @@ msgid ""
msgstr ""
#: doc/classes/AStar2D.xml
-msgid "Returns whether there is a connection/segment between the given points."
+msgid ""
+"Returns whether there is a connection/segment between the given points. 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/AStar2D.xml
@@ -8696,10 +8711,6 @@ msgid ""
msgstr ""
#: doc/classes/AStar2D.xml
-msgid "Deletes the segment between the given points."
-msgstr ""
-
-#: doc/classes/AStar2D.xml
msgid ""
"Returns the closest position to [code]to_position[/code] that resides inside "
"a segment between two connected points.\n"
@@ -8884,7 +8895,9 @@ msgid ""
"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."
+"transmit audio over the network. When capturing audio data from a "
+"microphone, the format of the samples will be stereo 32-bit floating point "
+"PCM."
msgstr ""
#: doc/classes/AudioEffectCapture.xml
@@ -13736,7 +13749,7 @@ msgid ""
msgstr ""
#: doc/classes/CollisionObject.xml doc/classes/CollisionObject2D.xml
-#: doc/classes/Navigation.xml doc/classes/Navigation2D.xml
+#: doc/classes/Navigation2D.xml
msgid "Returns the object's [RID]."
msgstr ""
@@ -19221,11 +19234,15 @@ msgid ""
msgstr ""
#: doc/classes/CurveTexture.xml
-msgid "The [code]curve[/code] rendered onto the texture."
-msgstr ""
+#, fuzzy
+msgid "The [Curve] that is rendered onto the texture."
+msgstr "å›žå‚³åƒæ•¸çš„æ­£å¼¦å€¼ã€‚"
#: doc/classes/CurveTexture.xml
-msgid "The width of the texture."
+msgid ""
+"The width of the texture (in pixels). Higher values make it possible to "
+"represent high-frequency data better (such as sudden direction changes), at "
+"the cost of increased generation time and memory usage."
msgstr ""
#: doc/classes/CylinderMesh.xml
@@ -19511,6 +19528,13 @@ msgid "Returns the list of keys in the [Dictionary]."
msgstr ""
#: doc/classes/Dictionary.xml
+msgid ""
+"Adds elements from [code]dictionary[/code] to this [Dictionary]. By default, "
+"duplicate keys will not be copied over, unless [code]overwrite[/code] is "
+"[code]true[/code]."
+msgstr ""
+
+#: doc/classes/Dictionary.xml
#, fuzzy
msgid "Returns the number of keys in the dictionary."
msgstr "å›žå‚³åƒæ•¸çš„æ­£å¼¦å€¼ã€‚"
@@ -21451,9 +21475,23 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide a state data you want to be saved, like view "
+"position, grid settings, folding, etc. 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). This data is automatically saved for "
+"each scene in an [code]editstate[/code] file in the editor metadata folder. "
+"If you want to store global (scene-independent) editor data for your plugin, "
+"you can use [method get_window_layout] instead.\n"
+"Use [method set_state] to restore your saved state.\n"
+"[b]Note:[/b] This method should not be used to save important settings that "
+"should persist with the project.\n"
+"[b]Note:[/b] You must implement [method get_plugin_name] for the state to be "
+"stored and restored correctly.\n"
+"[codeblock]\n"
+"func get_state():\n"
+" var state = {\"zoom\": zoom, \"preferred_color\": my_color}\n"
+" return state\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -21464,9 +21502,18 @@ msgstr ""
#: doc/classes/EditorPlugin.xml
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)."
+"Override this method to provide the GUI layout of the plugin or any other "
+"data you want to be stored. 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). The data is stored in the "
+"[code]editor_layout.cfg[/code] file in the editor metadata directory.\n"
+"Use [method set_window_layout] to restore your saved layout.\n"
+"[codeblock]\n"
+"func get_window_layout(configuration):\n"
+" configuration.set_value(\"MyPlugin\", \"window_position\", $Window."
+"position)\n"
+" configuration.set_value(\"MyPlugin\", \"icon_color\", $Icon.modulate)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -21579,11 +21626,30 @@ msgid ""
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the state saved by [method get_state]."
+msgid ""
+"Restore the state saved by [method get_state]. This method is called when "
+"the current scene tab is changed in the editor.\n"
+"[b]Note:[/b] Your plugin must implement [method get_plugin_name], otherwise "
+"it will not be recognized and this method will not be called.\n"
+"[codeblock]\n"
+"func set_state(data):\n"
+" zoom = data.get(\"zoom\", 1.0)\n"
+" preferred_color = data.get(\"my_color\", Color.white)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
-msgid "Restore the plugin GUI layout saved by [method get_window_layout]."
+msgid ""
+"Restore the plugin GUI layout and data saved by [method get_window_layout]. "
+"This method is called for every plugin on editor startup. Use the provided "
+"[code]configuration[/code] file to read your saved data.\n"
+"[codeblock]\n"
+"func set_window_layout(configuration):\n"
+" $Window.position = configuration.get_value(\"MyPlugin\", "
+"\"window_position\", Vector2())\n"
+" $Icon.modulate = configuration.get_value(\"MyPlugin\", \"icon_color\", "
+"Color.white)\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/EditorPlugin.xml
@@ -26230,7 +26296,8 @@ msgid ""
"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])."
+"at fixed steps (see [member width]). See also [GradientTexture2D] and "
+"[CurveTexture]."
msgstr ""
#: doc/classes/GradientTexture.xml
@@ -26252,7 +26319,8 @@ msgid ""
"repeat] types using colors obtained from the gradient. 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] and [member height])."
+"[member width] and [member height]). See also [GradientTexture] and "
+"[CurveTexture]."
msgstr ""
#: doc/classes/GradientTexture2D.xml
@@ -27066,6 +27134,12 @@ msgid ""
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+msgid ""
+"If [code]true[/code], this GridMap uses cell navmesh resources to create "
+"navigation regions."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid "If [code]true[/code], grid items are centered on the X axis."
msgstr ""
@@ -27116,6 +27190,10 @@ msgid "The assigned [MeshLibrary]."
msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml
+msgid "The navigation layers the GridMap generates its navigation regions in."
+msgstr ""
+
+#: modules/gridmap/doc_classes/GridMap.xml
msgid ""
"Overrides the default friction and bounce physics properties for the whole "
"[GridMap]."
@@ -28339,7 +28417,7 @@ msgid ""
" # 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 body = to_json({\"name\": \"Godette\"})\n"
" error = http_request.request(\"https://httpbin.org/post\", [], true, "
"HTTPClient.METHOD_POST, body)\n"
" if error != OK:\n"
@@ -29508,7 +29586,7 @@ msgstr ""
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 "
+"([member 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 "
@@ -29657,10 +29735,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Returns the mouse mode. See the constants for more information."
-msgstr ""
-
-#: doc/classes/Input.xml
msgid ""
"Gets an input vector by specifying four actions for the positive and "
"negative X and Y axes.\n"
@@ -29854,24 +29928,6 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
-msgid "Sets the mouse mode. See the constants for more information."
-msgstr ""
-
-#: doc/classes/Input.xml
-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
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 "
@@ -29907,6 +29963,24 @@ msgid ""
msgstr ""
#: doc/classes/Input.xml
+msgid "Controls the mouse mode. See [enum MouseMode] for more information."
+msgstr ""
+
+#: doc/classes/Input.xml
+msgid ""
+"If [code]true[/code], similar input events sent by the operating system are "
+"accumulated. 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 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
msgid "Emitted when a joypad device has been connected or disconnected."
msgstr ""
@@ -30214,8 +30288,8 @@ msgstr ""
#: doc/classes/InputEventJoypadButton.xml
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]."
+"Represents the pressure the user puts on the button with their finger, if "
+"the controller supports it. Ranges from [code]0[/code] to [code]1[/code]."
msgstr ""
#: doc/classes/InputEventJoypadMotion.xml
@@ -30478,9 +30552,9 @@ 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 "
+"at most. If you need more precise input reporting, set [member Input."
+"use_accumulated_input] to [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."
@@ -30968,7 +31042,18 @@ msgid ""
"[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."
+"fixed_column_width] greater than zero to wrap the text.\n"
+"[b]Incremental search:[/b] Like [PopupMenu] and [Tree], [ItemList] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/ItemList.xml
@@ -34720,12 +34805,18 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Returns the override [Material] for a surface of the [Mesh] resource.\n"
+"[b]Note:[/b] This function only returns [i]override[/i] materials associated "
+"with this [MeshInstance]. Consider using [method get_active_material] or "
+"[method Mesh.surface_get_material] to get materials associated with the "
+"[Mesh] resource."
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Returns the number of surface materials."
-msgstr ""
+#, fuzzy
+msgid "Returns the number of surface override materials."
+msgstr "å›žå‚³åƒæ•¸çš„æ­£å¼¦å€¼ã€‚"
#: doc/classes/MeshInstance.xml
msgid ""
@@ -34761,7 +34852,10 @@ msgid ""
msgstr ""
#: doc/classes/MeshInstance.xml
-msgid "Sets the [Material] for a surface of the [Mesh] resource."
+msgid ""
+"Sets the override [Material] for the specified surface of the [Mesh] "
+"resource. This material is associated with this [MeshInstance] rather than "
+"with the [Mesh] resource."
msgstr ""
#: doc/classes/MeshInstance.xml
@@ -34792,9 +34886,10 @@ msgstr ""
#: doc/classes/MeshInstance2D.xml
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\"."
+"Node used for displaying a [Mesh] in 2D. A [MeshInstance2D] can be "
+"automatically created from an existing [Sprite] via a tool in the editor "
+"toolbar. Select the [Sprite] node, then choose [b]Sprite > Convert to "
+"MeshInstance2D[/b] at the top of the 2D editor viewport."
msgstr ""
#: doc/classes/MeshInstance2D.xml
@@ -35559,6 +35654,9 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"Provides navigation and pathfinding within a collection of "
"[NavigationMesh]es. By default, these will be automatically collected from "
"child [NavigationMeshInstance] nodes. In addition to basic pathfinding, this "
@@ -35599,7 +35697,15 @@ msgid ""
msgstr ""
#: doc/classes/Navigation.xml
+#, fuzzy
+msgid "Returns the [RID] of the navigation map on the [NavigationServer]."
+msgstr "å›žå‚³åƒæ•¸çš„æ­£å¼¦å€¼ã€‚"
+
+#: doc/classes/Navigation.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"NavigationServer.map_get_path] instead.\n"
"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, "
@@ -35621,16 +35727,31 @@ msgstr ""
#: doc/classes/Navigation.xml
msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation.get_simple_path] path query."
+msgstr ""
+
+#: doc/classes/Navigation.xml
+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/Navigation.xml doc/classes/Navigation2DServer.xml
+#: doc/classes/NavigationServer.xml
+msgid ""
+"Emitted when a navigation map is updated, when a region moves or is modified."
+msgstr ""
+
#: doc/classes/Navigation2D.xml
msgid "2D navigation and pathfinding node."
msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -35650,6 +35771,9 @@ msgstr ""
#: doc/classes/Navigation2D.xml
msgid ""
+"[i]Deprecated.[/i] [Navigation2D] node and [method get_simple_path] are "
+"deprecated and will be removed in a future version. Use [method "
+"Navigation2DServer.map_get_path] instead.\n"
"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."
@@ -35659,6 +35783,12 @@ msgstr ""
msgid "The XY plane cell size to use for fields."
msgstr ""
+#: doc/classes/Navigation2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the navigation can use on a "
+"[method Navigation2D.get_simple_path] path query."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml
msgid "Server interface for low-level 2D navigation access."
msgstr ""
@@ -35675,8 +35805,12 @@ msgid ""
"through scripts.\n"
"For two regions to be connected to each other, they must share a similar "
"edge. An edge is considered connected to another if both of its two vertices "
-"are at a distance less than [member Navigation.edge_connection_margin] to "
-"the respective other edge's vertex.\n"
+"are at a distance less than navigation map [code]edge_connection_margin[/"
+"code] to the respective other edge's vertex.\n"
+"You may assign navigation layers to regions with [method Navigation2DServer."
+"region_set_navigation_layers], which then can be checked upon when "
+"requesting a path with [method Navigation2DServer.map_get_path]. This allows "
+"allowing or forbidding some areas to 2D objects.\n"
"To use the collision avoidance system, you may use agents. You can set an "
"agent's target velocity, then the servers will emit a callback with a "
"modified velocity.\n"
@@ -35704,7 +35838,17 @@ msgid "Returns [code]true[/code] if the map got changed the previous frame."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Callback called at the end of the RVO process."
+msgid ""
+"Callback called at the end of the RVO process. If a callback is created "
+"manually and the agent is placed on a navigation map it will calculate "
+"avoidance for the agent and dispatch the calculated [code]safe_velocity[/"
+"code] to the [code]receiver[/code] object with a signal to the chosen "
+"[code]method[/code] name.\n"
+"[b]Note:[/b] Created callbacks are always processed independently of the "
+"SceneTree state as long as the agent is on a navigation map and not freed. "
+"To disable the dispatch of a callback from an agent use [method "
+"agent_set_callback] again with a [code]null[/code] object as the "
+"[code]receiver[/code]."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -35765,15 +35909,55 @@ msgid "Destroys the given RID."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns all created navigation map [RID]s on the NavigationServer. This "
+"returns both 2D and 3D created navigation maps as there is technically no "
+"distinction between them."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Create a new map."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"This function immediately forces synchronization of the specified navigation "
+"[code]map[/code] [RID]. By default navigation maps are only synchronized at "
+"the end of each physics frame. This function can be used to immediately "
+"(re)calculate all the navigation meshes and region connections of the "
+"navigation map. This makes it possible to query a navigation path for a "
+"changed map immediately and in the same frame (multiple times if needed).\n"
+"Due to technical restrictions the current NavigationServer command queue "
+"will be flushed. This means all already queued update commands for this "
+"physics frame will be executed, even those intended for other maps, regions "
+"and agents not part of the specified map. The expensive computation of the "
+"navigation meshes and region connections of a map will only be done for the "
+"specified map. Other maps will receive the normal synchronization at the end "
+"of the physics frame. Should the specified map receive changes after the "
+"forced update it will update again as well when the other maps receive their "
+"update.\n"
+"Avoidance processing and dispatch of the [code]safe_velocity[/code] signals "
+"is untouched by this function and continues to happen for all maps and "
+"agents at the end of the physics frame.\n"
+"[b]Note:[/b] With great power comes great responsibility. This function "
+"should only be used by users that really know what they are doing and have a "
+"good reason for it. Forcing an immediate update of a navigation map requires "
+"locking the NavigationServer and flushing the entire NavigationServer "
+"command queue. Not only can this severely impact the performance of a game "
+"but it can also introduce bugs if used inappropriately without much "
+"foresight."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns all navigation agents [RID]s that are currently assigned to the "
"requested navigation [code]map[/code]."
msgstr ""
+#: doc/classes/Navigation2DServer.xml
+msgid "Returns the map cell height. [b]Note:[/b] Currently not implemented."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
#, fuzzy
msgid "Returns the map cell size."
@@ -35798,7 +35982,10 @@ msgid ""
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
-msgid "Returns the navigation path to reach the destination from the origin."
+msgid ""
+"Returns the navigation path to reach the destination from the origin. "
+"[code]navigation_layers[/code] is a bitmask of all region layers that are "
+"allowed to be in the path."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
@@ -35817,6 +36004,12 @@ msgstr "å›žå‚³åƒæ•¸çš„餘弦值。"
msgid "Sets the map active."
msgstr "å›žå‚³åƒæ•¸çš„åæ­£å¼¦å€¼ã€‚"
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the map cell height used to weld the navigation mesh polygons. [b]Note:[/"
+"b] Currently not implemented."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid "Set the map cell size used to weld the navigation mesh polygons."
msgstr ""
@@ -35832,15 +36025,78 @@ msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
msgid ""
+"Returns the ending point of a connection door. [code]connection[/code] is an "
+"index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns the starting point of a connection door. [code]connection[/code] is "
+"an index between 0 and the return value of [method "
+"region_get_connections_count]."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns how many connections this [code]region[/code] has with other regions "
+"in the map."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Returns the [code]enter_cost[/code] of this [code]region[/code]."
+msgstr "計算兩個å‘é‡çš„外ç©ã€‚"
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
"Returns the navigation map [RID] the requested [code]region[/code] is "
"currently assigned to."
msgstr ""
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
#, fuzzy
+msgid "Returns the region's navigation layers."
+msgstr "å›žå‚³åƒæ•¸çš„æ­£å¼¦å€¼ã€‚"
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Returns the [code]travel_cost[/code] of this [code]region[/code]."
+msgstr "計算兩個å‘é‡çš„外ç©ã€‚"
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+msgid ""
+"Returns [code]true[/code] if the provided [code]point[/code] in world space "
+"is currently owned by the provided navigation [code]region[/code]. Owned in "
+"this context means that one of the region's navigation mesh polygon faces "
+"has a possible position at the closest distance to this point compared to "
+"all other navigation meshes from other navigation regions that are also "
+"registered on the navigation map of the provided region.\n"
+"If multiple navigation meshes have positions at equal distance the "
+"navigation region whose polygons are processed first wins the ownership. "
+"Polygons are processed in the same order that navigation regions were "
+"registered on the NavigationServer.\n"
+"[b]Note:[/b] If navigation meshes from different navigation regions overlap "
+"(which should be avoided in general) the result might not be what is "
+"expected."
+msgstr ""
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Sets the [code]enter_cost[/code] for this [code]region[/code]."
+msgstr "計算兩個å‘é‡çš„外ç©ã€‚"
+
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
msgid "Sets the map for the region."
msgstr "å›žå‚³åƒæ•¸çš„æ­£å¼¦å€¼ã€‚"
+#: doc/classes/Navigation2DServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method Navigation2DServer.map_get_path])."
+msgstr ""
+
#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
#, fuzzy
msgid "Sets the navigation mesh for the region."
@@ -35851,6 +36107,11 @@ msgstr "å›žå‚³åƒæ•¸çš„相å值。"
msgid "Sets the global transformation for the region."
msgstr "計算兩個å‘é‡çš„外ç©ã€‚"
+#: doc/classes/Navigation2DServer.xml doc/classes/NavigationServer.xml
+#, fuzzy
+msgid "Sets the [code]travel_cost[/code] for this [code]region[/code]."
+msgstr "計算兩個å‘é‡çš„外ç©ã€‚"
+
#: doc/classes/NavigationAgent.xml
msgid "3D agent used in navigation for collision avoidance."
msgstr ""
@@ -35860,9 +36121,16 @@ msgid ""
"3D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationAgent] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World] navigation map. If this node is a child of a [Navigation] "
+"node it will register to the navigation map of the navigation node or the "
+"function [method set_navigation] can be used to set the navigation node "
+"directly. [NavigationAgent] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -35880,7 +36148,15 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-msgid "Returns the path from start to finish in global coordinates."
+msgid ""
+"Returns this agent's current path from start to finish in global "
+"coordinates. The path only updates when the target location is changed or "
+"the agent requires a repath. The path array is not intended to be used in "
+"direct path movement as the agent has its own internal path logic that would "
+"get corrupted by changing the path array manually. Use the intended [method "
+"get_next_location] once every physics frame to receive the next path point "
+"for the agents movement as this function also updates the internal path "
+"logic."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -35896,11 +36172,24 @@ msgid ""
"system."
msgstr ""
-#: doc/classes/NavigationAgent.xml
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"Returns a [Vector3] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the origin of the agent's parent."
+"Returns the [RID] of the navigation map for this NavigationAgent node. This "
+"function returns always the map set on the NavigationAgent node and not the "
+"map of the abstract agent on the NavigationServer. If the agent map is "
+"changed directly with the NavigationServer API the NavigationAgent node will "
+"not be aware of the map change. Use [method set_navigation_map] to change "
+"the navigation map for the NavigationAgent and also update the agent on the "
+"NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
+"Returns the next location in global coordinates that can be moved to, making "
+"sure that there are no static objects in the way. If the agent does not have "
+"a navigation path, it will return the position of the agent's parent. The "
+"use of this function once every physics frame is required to update the "
+"internal path logic of the NavigationAgent."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -35942,6 +36231,12 @@ msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"Sets the [RID] of the navigation map this NavigationAgent node should use "
+"and also updates the [code]agent[/code] on the NavigationServer."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"Sets the user desired final location. This will clear the current navigation "
"path."
msgstr ""
@@ -35954,7 +36249,13 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent.xml
-msgid "The agent height offset to match the navigation mesh height."
+msgid ""
+"The NavigationAgent height offset is subtracted from the y-axis value of any "
+"vector path position for this NavigationAgent. The NavigationAgent height "
+"offset does not change or influence the navigation mesh or pathfinding query "
+"result. Additional navigation maps that use regions with navigation meshes "
+"that the developer baked with appropriate agent radius or height values are "
+"required to support different-sized agents."
msgstr ""
#: doc/classes/NavigationAgent.xml
@@ -35981,26 +36282,53 @@ msgstr ""
msgid "The maximum speed that an agent can move."
msgstr ""
+#: doc/classes/NavigationAgent.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid "The distance to search for other agents."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
+"The distance threshold before a path point is considered to be reached. This "
+"will allow an agent to not have to hit a path point on the path exactly, but "
+"in the area. If this value is set to high the NavigationAgent will skip "
+"points on the path which can lead to leaving the navigation mesh. If this "
+"value is set to low the NavigationAgent will be stuck in a repath loop cause "
+"it will constantly overshoot or undershoot the distance to the next point on "
+"each physics frame update."
+msgstr ""
+
+#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
+msgid ""
"The maximum distance the agent is allowed away from the ideal path to the "
"final location. This can happen due to trying to avoid collisions. When the "
"maximum distance is exceeded, it recalculates the ideal path."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
-msgid "The radius of the agent."
+msgid ""
+"The radius of the avoidance agent. This is the \"body\" of the avoidance "
+"agent and not the avoidance maneuver starting radius (which is controlled by "
+"[member neighbor_dist]).\n"
+"Does not affect normal pathfinding. To change an actor's pathfinding radius "
+"bake [NavigationMesh] resources with a different [member NavigationMesh."
+"agent_radius] property and use different navigation maps for each actor size."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
msgid ""
-"The distance threshold before a target is considered to be reached. This "
-"will allow an agent to not have to hit a point on the path exactly, but in "
-"the area."
+"The distance threshold before the final target point is considered to be "
+"reached. This will allow an agent to not have to hit the point of the final "
+"target exactly, but only the area. If this value is set to low the "
+"NavigationAgent will be stuck in a repath loop cause it will constantly "
+"overshoot or undershoot the distance to the final target point on each "
+"physics frame update."
msgstr ""
#: doc/classes/NavigationAgent.xml doc/classes/NavigationAgent2D.xml
@@ -36043,9 +36371,16 @@ msgid ""
"2D agent that is used in navigation to reach a location while avoiding "
"static and dynamic obstacles. The dynamic obstacles are avoided using RVO "
"(Reciprocal Velocity Obstacles) collision avoidance. The agent needs "
-"navigation data to work correctly. This can be done by having the agent as a "
-"child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationAgent2D] is physics safe."
+"navigation data to work correctly. By default this node will register to the "
+"default [World2D] navigation map. If this node is a child of a "
+"[Navigation2D] node it will register to the navigation map of the navigation "
+"node or the function [method set_navigation] can be used to set the "
+"navigation node directly. [NavigationAgent2D] is physics safe.\n"
+"[b]Note:[/b] After [method set_target_location] is used it is required to "
+"use the [method get_next_location] function once every physics frame to "
+"update the internal path logic of the NavigationAgent. The returned vector "
+"position from this function should be used as the next movement position for "
+"the agent's parent Node."
msgstr ""
#: doc/classes/NavigationAgent2D.xml
@@ -36062,13 +36397,6 @@ msgid ""
msgstr ""
#: doc/classes/NavigationAgent2D.xml
-msgid ""
-"Returns a [Vector2] in global coordinates, that can be moved to, making sure "
-"that there are no static objects in the way. If the agent does not have a "
-"navigation path, it will return the position of the agent's parent."
-msgstr ""
-
-#: doc/classes/NavigationAgent2D.xml
#, fuzzy
msgid "Returns the [RID] of this agent on the [Navigation2DServer]."
msgstr "å›žå‚³åƒæ•¸çš„æ­£å¼¦å€¼ã€‚"
@@ -36089,6 +36417,13 @@ msgid ""
"only be enabled on agents that currently require it."
msgstr ""
+#: doc/classes/NavigationAgent2D.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationAgent2D] "
+"belongs to. On path requests the agent will ignore navmeshes without at "
+"least one matching layer."
+msgstr ""
+
#: doc/classes/NavigationMesh.xml
msgid "A mesh to approximate the walkable areas and obstacles."
msgstr ""
@@ -36119,8 +36454,8 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
-"Returns whether the specified [code]bit[/code] of the [member geometry/"
-"collision_mask] is set."
+"Returns whether the specified [code]bit[/code] of the [member "
+"geometry_collision_mask] is set."
msgstr ""
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
@@ -36143,9 +36478,9 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]value[/code] is [code]true[/code], sets the specified [code]bit[/"
-"code] in the [member geometry/collision_mask].\n"
+"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]."
+"code] in the [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml doc/classes/NavigationPolygon.xml
@@ -36159,14 +36494,14 @@ 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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
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]."
+"multiple of [member cell_height]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36178,7 +36513,7 @@ 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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36206,13 +36541,17 @@ msgstr ""
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]."
+"multiple of [member cell_size]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
-"If [code]true[/code], marks walkable spans as not walkable if the clearance "
-"above the span is less than [member agent/height]."
+"If the baking [AABB] has a volume the navigation mesh baking will be "
+"restricted to its enclosing area."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+msgid "The position offset applied to the [member filter_baking_aabb] [AABB]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36222,13 +36561,19 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"If [code]true[/code], marks non-walkable spans as walkable if their maximum "
-"is within [member agent/max_climb] of a walkable neighbor."
+"is within [member agent_max_climb] of a walkable neighbor."
+msgstr ""
+
+#: doc/classes/NavigationMesh.xml
+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
msgid ""
"The physics layers to scan for static colliders.\n"
-"Only used when [member geometry/parsed_geometry_type] is [constant "
+"Only used when [member geometry_parsed_geometry_type] is [constant "
"PARSED_GEOMETRY_STATIC_COLLIDERS] or [constant PARSED_GEOMETRY_BOTH]."
msgstr ""
@@ -36247,7 +36592,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"The name of the group to scan for geometry.\n"
-"Only used when [member geometry/source_geometry_mode] is [constant "
+"Only used when [member geometry_source_geometry_mode] is [constant "
"SOURCE_GEOMETRY_GROUPS_WITH_CHILDREN] or [constant "
"SOURCE_GEOMETRY_GROUPS_EXPLICIT]."
msgstr ""
@@ -36310,7 +36655,7 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Parses [StaticBody] colliders as geometry. The collider should be in any of "
-"the layers specified by [member geometry/collision_mask]."
+"the layers specified by [member geometry_collision_mask]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36332,13 +36677,13 @@ msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Scans nodes in a group and their child nodes recursively for geometry. The "
-"group is specified by [member geometry/source_group_name]."
+"group is specified by [member geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
msgid ""
"Uses nodes in a group for geometry. The group is specified by [member "
-"geometry/source_group_name]."
+"geometry_source_group_name]."
msgstr ""
#: doc/classes/NavigationMesh.xml
@@ -36380,7 +36725,15 @@ msgid ""
"geometry for walkable terrain suitable to [NavigationMesh] agent properties "
"by creating a voxel world around the meshes bounding area.\n"
"The finalized navigation mesh is then returned and stored inside the "
-"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] nodes."
+"[NavigationMesh] for use as a resource inside [NavigationMeshInstance] "
+"nodes.\n"
+"[b]Note:[/b] Using meshes to not only define walkable surfaces but also "
+"obstruct navigation baking does not always work. The navigation baking has "
+"no concept of what is a geometry \"inside\" when dealing with mesh source "
+"geometry and this is intentional. Depending on current baking parameters, as "
+"soon as the obstructing mesh is large enough to fit a navigation mesh area "
+"inside, the baking will generate navigation mesh areas that are inside the "
+"obstructing source geometry mesh."
msgstr ""
#: doc/classes/NavigationMeshGenerator.xml
@@ -36388,8 +36741,8 @@ msgid ""
"Bakes navigation data to the provided [code]nav_mesh[/code] by parsing child "
"nodes under the provided [code]root_node[/code] or a specific group of nodes "
"for potential source geometry. The parse behavior can be controlled with the "
-"[member NavigationMesh.geometry/parsed_geometry_type] and [member "
-"NavigationMesh.geometry/source_geometry_mode] properties on the "
+"[member NavigationMesh.geometry_parsed_geometry_type] and [member "
+"NavigationMesh.geometry_source_geometry_mode] properties on the "
"[NavigationMesh] resource."
msgstr ""
@@ -36407,8 +36760,21 @@ msgstr ""
#: doc/classes/NavigationMeshInstance.xml
msgid ""
"An instance of a [NavigationMesh]. It tells the [Navigation] node what can "
-"be navigated and what cannot, based on the [NavigationMesh] resource. This "
-"should be a child of a [Navigation] node."
+"be navigated and what cannot, based on the [NavigationMesh] resource.\n"
+"By default this node will register to the default [World] navigation map. If "
+"this node is a child of a [Navigation] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method NavigationServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' navmeshes is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The cost of entering this region from another region can be controlled with "
+"the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The cost of traveling distances inside this region can be controlled with "
+"the [member travel_cost] multiplier."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
@@ -36437,10 +36803,34 @@ msgid "Determines if the [NavigationMeshInstance] is enabled or disabled."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding enters this region's navmesh from another regions navmesh "
+"the [code]enter_cost[/code] value is added to the path distance for "
+"determining the shortest path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationMesh] "
+"belongs to. On path requests with [method NavigationServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
msgid "The [NavigationMesh] resource to use."
msgstr ""
#: doc/classes/NavigationMeshInstance.xml
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"When pathfinding moves inside this region's navmesh the traveled distances "
+"are multiplied with [code]travel_cost[/code] for determining the shortest "
+"path."
+msgstr ""
+
+#: doc/classes/NavigationMeshInstance.xml
msgid "Notifies when the navigation mesh bake operation is completed."
msgstr ""
@@ -36457,7 +36847,9 @@ msgid ""
"3D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation] node, or using [method set_navigation]. "
-"[NavigationObstacle] is physics safe."
+"[NavigationObstacle] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle.xml
@@ -36498,7 +36890,9 @@ msgid ""
"2D obstacle used in navigation for collision avoidance. The obstacle needs "
"navigation data to work correctly. This can be done by having the obstacle "
"as a child of a [Navigation2D] node, or using [method set_navigation]. "
-"[NavigationObstacle2D] is physics safe."
+"[NavigationObstacle2D] is physics safe.\n"
+"[b]Note:[/b] Obstacles are intended as a last resort option for constantly "
+"moving objects that cannot be (re)baked to a navigation mesh efficiently."
msgstr ""
#: doc/classes/NavigationObstacle2D.xml
@@ -36579,6 +36973,14 @@ msgstr ""
#: doc/classes/NavigationPolygon.xml
msgid ""
+"Returns the [NavigationMesh] resulting from this navigation polygon. This "
+"navmesh can be used to update the navmesh of a region with the [method "
+"NavigationServer.region_set_navmesh] API directly (as 2D uses the 3D server "
+"behind the scene)."
+msgstr ""
+
+#: doc/classes/NavigationPolygon.xml
+msgid ""
"Returns a [PoolVector2Array] containing the vertices of an outline that was "
"created in the editor or by script."
msgstr ""
@@ -36615,6 +37017,30 @@ msgid ""
msgstr ""
#: doc/classes/NavigationPolygonInstance.xml
+msgid "A region of the 2D navigation map."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A region of the navigation map. It tells the [Navigation2DServer] what can "
+"be navigated and what cannot, based on its [NavigationPolygon] resource.\n"
+"By default this node will register to the default [World2D] navigation map. "
+"If this node is a child of a [Navigation2D] node it will register to the "
+"navigation map of the navigation node.\n"
+"Two regions can be connected to each other if they share a similar edge. You "
+"can set the minimum distance between two vertices required to connect two "
+"edges by using [method Navigation2DServer.map_set_edge_connection_margin].\n"
+"[b]Note:[/b] Overlapping two regions' polygons is not enough for connecting "
+"two regions. They must share a similar edge.\n"
+"The pathfinding cost of entering this region from another region can be "
+"controlled with the [member enter_cost] value.\n"
+"[b]Note[/b]: This value is not added to the path cost when the start "
+"position is already inside this region.\n"
+"The pathfinding cost of traveling distances inside this region can be "
+"controlled with the [member travel_cost] multiplier."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
msgid ""
"Returns the [RID] of this region on the [Navigation2DServer]. Combined with "
"[method Navigation2DServer.map_get_closest_point_owner] can be used to "
@@ -36622,6 +37048,22 @@ msgid ""
"navigation map."
msgstr ""
+#: doc/classes/NavigationPolygonInstance.xml
+msgid "Determines if the [NavigationPolygonInstance] is enabled or disabled."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid ""
+"A bitfield determining all navigation map layers the [NavigationPolygon] "
+"belongs to. On path requests with [method Navigation2DServer.map_get_path] "
+"navmeshes without matching layers will be ignored and the navigation map "
+"will only proximity merge different navmeshes with matching layers."
+msgstr ""
+
+#: doc/classes/NavigationPolygonInstance.xml
+msgid "The [NavigationPolygon] resource to use."
+msgstr ""
+
#: doc/classes/NavigationServer.xml
msgid "Server interface for low-level 3D navigation access."
msgstr ""
@@ -36701,6 +37143,12 @@ msgid "Bakes the navigation mesh."
msgstr ""
#: doc/classes/NavigationServer.xml
+msgid ""
+"Set the region's navigation layers. This allows selecting regions from a "
+"path request (when using [method NavigationServer.map_get_path])."
+msgstr ""
+
+#: doc/classes/NavigationServer.xml
msgid "Control activation of this server."
msgstr ""
@@ -38167,13 +38615,19 @@ msgstr ""
#: doc/classes/Node.xml
msgid ""
"Emitted when a child node enters the scene tree, either because it entered "
-"on its own or because this node entered with it."
+"on its own or because this node entered with it.\n"
+"This signal is emitted [i]after[/i] the child node's own [constant "
+"NOTIFICATION_ENTER_TREE] and [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
msgid ""
-"Emitted when a child node exits the scene tree, either because it exited on "
-"its own or because this node exited."
+"Emitted when a child node is about to exit the scene tree, either because it "
+"is being removed or freed directly, or because this node is exiting the "
+"tree.\n"
+"When this signal is received, the child [code]node[/code] is still in the "
+"tree and valid. This signal is emitted [i]after[/i] the child node's own "
+"[signal tree_exiting] and [constant NOTIFICATION_EXIT_TREE]."
msgstr ""
#: doc/classes/Node.xml
@@ -38185,7 +38639,10 @@ msgid "Emitted when the node is renamed."
msgstr ""
#: doc/classes/Node.xml
-msgid "Emitted when the node enters the tree."
+msgid ""
+"Emitted when the node enters the tree.\n"
+"This signal is emitted [i]after[/i] the related [constant "
+"NOTIFICATION_ENTER_TREE] notification."
msgstr ""
#: doc/classes/Node.xml
@@ -38195,15 +38652,21 @@ msgstr ""
#: doc/classes/Node.xml
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)."
+"the right place for de-initialization (or a \"destructor\", if you will).\n"
+"This signal is emitted [i]before[/i] the related [constant "
+"NOTIFICATION_EXIT_TREE] notification."
msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node enters a [SceneTree]."
+msgid ""
+"Notification received when the node enters a [SceneTree].\n"
+"This notification is emitted [i]before[/i] the related [signal tree_entered]."
msgstr ""
#: doc/classes/Node.xml
-msgid "Notification received when the node is about to exit a [SceneTree]."
+msgid ""
+"Notification received when the node is about to exit a [SceneTree].\n"
+"This notification is emitted [i]after[/i] the related [signal tree_exiting]."
msgstr ""
#: doc/classes/Node.xml
@@ -38464,7 +38927,13 @@ msgid "Rotation in degrees, relative to the node's parent."
msgstr ""
#: doc/classes/Node2D.xml
-msgid "The node's scale. Unscaled value: [code](1, 1)[/code]."
+msgid ""
+"The node's scale. Unscaled value: [code](1, 1)[/code].\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
#: doc/classes/Node2D.xml
@@ -39909,6 +40378,10 @@ msgid ""
" if argument.find(\"=\") > -1:\n"
" var key_value = argument.split(\"=\")\n"
" arguments[key_value[0].lstrip(\"--\")] = key_value[1]\n"
+" else:\n"
+" # Options without an argument will be present in the dictionary,\n"
+" # with the value set to an empty string.\n"
+" arguments[argument.lstrip(\"--\")] = \"\"\n"
"[/codeblock]"
msgstr ""
@@ -40565,8 +41038,15 @@ msgstr ""
msgid ""
"Moves the file or directory to the system's recycle bin. See also [method "
"Directory.remove].\n"
+"The method takes only global paths, so you may need to use [method "
+"ProjectSettings.globalize_path]. Do not use it for files in [code]res://[/"
+"code] as it will not work in exported project.\n"
"[b]Note:[/b] If the user has disabled the recycle bin on their system, the "
-"file will be permanently deleted instead."
+"file will be permanently deleted instead.\n"
+"[codeblock]\n"
+"var file_to_remove = \"user://slot1.sav\"\n"
+"OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))\n"
+"[/codeblock]"
msgstr ""
#: doc/classes/OS.xml
@@ -45423,7 +45903,18 @@ msgstr ""
#: doc/classes/PopupMenu.xml
msgid ""
"[PopupMenu] is a [Control] that displays a list of options. They are popular "
-"in toolbars or context menus."
+"in toolbars or context menus.\n"
+"[b]Incremental search:[/b] Like [ItemList] and [Tree], [PopupMenu] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/PopupMenu.xml
@@ -46933,7 +47424,16 @@ msgid ""
msgstr ""
#: doc/classes/ProjectSettings.xml
-msgid "Message to be displayed before the backtrace when the engine crashes."
+msgid ""
+"Message to be displayed before the backtrace when the engine crashes. By "
+"default, this message is only used in exported projects due to the editor-"
+"only override applied to this setting."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Editor-only override for [member debug/settings/crash_handler/message]. Does "
+"not affect exported projects in debug or release mode."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -47178,6 +47678,18 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default naming style for scene files to infer from their root nodes. "
+"Possible options are:\n"
+"- [code]0[/code] (Auto): Uses the scene root name as is without changing its "
+"casing.\n"
+"- [code]1[/code] (PascalCase): Converts the scene root name to PascalCase "
+"casing.\n"
+"- [code]2[/code] (snake_case): Converts the scene root name to snake_case "
+"casing."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -47403,6 +47915,198 @@ msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 2D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 2D physics layer 1."
msgstr ""
@@ -47611,6 +48315,198 @@ msgid "Optional name for the 2D render layer 9."
msgstr ""
#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 1. If left empty, the layer will "
+"display as \"Layer 1\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 10. If left empty, the layer will "
+"display as \"Layer 10\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 11. If left empty, the layer will "
+"display as \"Layer 11\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 12. If left empty, the layer will "
+"display as \"Layer 12\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 13. If left empty, the layer will "
+"display as \"Layer 13\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 14. If left empty, the layer will "
+"display as \"Layer 14\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 15. If left empty, the layer will "
+"display as \"Layer 15\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 16. If left empty, the layer will "
+"display as \"Layer 16\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 17. If left empty, the layer will "
+"display as \"Layer 17\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 18. If left empty, the layer will "
+"display as \"Layer 18\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 19. If left empty, the layer will "
+"display as \"Layer 19\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 2. If left empty, the layer will "
+"display as \"Layer 2\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 20. If left empty, the layer will "
+"display as \"Layer 20\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 21. If left empty, the layer will "
+"display as \"Layer 21\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 22. If left empty, the layer will "
+"display as \"Layer 22\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 23. If left empty, the layer will "
+"display as \"Layer 23\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 24. If left empty, the layer will "
+"display as \"Layer 24\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 25. If left empty, the layer will "
+"display as \"Layer 25\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 26. If left empty, the layer will "
+"display as \"Layer 26\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 27. If left empty, the layer will "
+"display as \"Layer 27\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 28. If left empty, the layer will "
+"display as \"Layer 28\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 29. If left empty, the layer will "
+"display as \"Layer 29\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 3. If left empty, the layer will "
+"display as \"Layer 3\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 30. If left empty, the layer will "
+"display as \"Layer 30\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 31. If left empty, the layer will "
+"display as \"Layer 31\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 32. If left empty, the layer will "
+"display as \"Layer 32\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 4. If left empty, the layer will "
+"display as \"Layer 4\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 5. If left empty, the layer will "
+"display as \"Layer 5\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 6. If left empty, the layer will "
+"display as \"Layer 6\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 7. If left empty, the layer will "
+"display as \"Layer 7\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 8. If left empty, the layer will "
+"display as \"Layer 8\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Optional name for the 3D navigation layer 9. If left empty, the layer will "
+"display as \"Layer 9\"."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
msgid "Optional name for the 3D physics layer 1."
msgstr ""
@@ -47878,6 +48774,49 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"Default cell height for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_height].\n"
+"[b]Note:[/b] Currently not implemented."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 2D navigation maps. See [method Navigation2DServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 2D navigation maps. See [method "
+"Navigation2DServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell height for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_height]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default cell size for 3D navigation maps. See [method NavigationServer."
+"map_set_cell_size]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default edge connection margin for 3D navigation maps. See [method "
+"NavigationServer.map_set_edge_connection_margin]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"Default map up vector for 3D navigation maps. See [method NavigationServer."
+"map_set_up]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+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."
@@ -48551,20 +49490,28 @@ msgid ""
"cause.\n"
"The default value is a conservative one, so you are advised to tweak it "
"according to the hardware you are targeting.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"The default is a very conservative override for [code]rendering/gles3/"
-"shaders/max_concurrent_compiles[/code].\n"
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
"Depending on the specific devices you are targeting, you may want to raise "
"it.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is [b]not[/b] [code]Synchronous[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"The default is a very conservative override for [member rendering/gles3/"
+"shaders/max_simultaneous_compiles].\n"
+"Depending on the specific browsers you are targeting, you may want to raise "
+"it.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is [b]not[/b] [code]Synchronous[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -48572,19 +49519,28 @@ msgid ""
"The maximum size, in megabytes, that the ubershader cache can grow up to. On "
"startup, the least recently used entries will be deleted until the total "
"size is within bounds.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/ubershader_cache_size_mb[/"
-"code], so a smaller maximum size can be configured for mobile platforms, "
-"where storage space is more limited.\n"
-"[b]Note:[/b] This setting is only meaningful if [code]rendering/gles3/"
-"shaders/shader_compilation_mode[/code] is set to [code]Asynchronous + Cache[/"
-"code]."
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for mobile platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
+"An override for [member rendering/gles3/shaders/shader_cache_size_mb], so a "
+"smaller maximum size can be configured for web platforms, where storage "
+"space is more limited.\n"
+"[b]Note:[/b] Currently, shader caching is generally unavailable on web "
+"platforms.\n"
+"[b]Note:[/b] This setting is only meaningful if [member rendering/gles3/"
+"shaders/shader_compilation_mode] is set to [code]Asynchronous + Cache[/code]."
msgstr ""
#: doc/classes/ProjectSettings.xml
@@ -48616,14 +49572,22 @@ msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
-"An override for [code]rendering/gles3/shaders/shader_compilation_mode[/"
-"code], so asynchronous compilation can be disabled for mobile.\n"
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on mobile platforms.\n"
"You may want to do that since mobile GPUs generally won't support "
"ubershaders due to their complexity."
msgstr ""
#: doc/classes/ProjectSettings.xml
msgid ""
+"An override for [member rendering/gles3/shaders/shader_compilation_mode], so "
+"asynchronous compilation can be disabled on web platforms.\n"
+"You may want to do that since certain browsers (especially on mobile "
+"platforms) generally won't support ubershaders due to their complexity."
+msgstr ""
+
+#: doc/classes/ProjectSettings.xml
+msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
@@ -49380,7 +50344,6 @@ msgid ""
"- If your [member grid_radius] is smaller than [code]Vector3(1, 1, 1)[/"
"code], it will be rounded up to [code]Vector3(1, 1, 1)[/code]. Therefore, "
"small grid radius values may lead to unwanted groupings.\n"
-"[/codeblock]\n"
"[b]Note:[/b] [ProximityGroup] will be removed in Godot 4.0 in favor of more "
"effective and faster [VisibilityNotifier] functionality. For most use cases, "
"[method Vector3.distance_to] or [method Vector3.distance_squared_to] are "
@@ -51529,6 +52492,22 @@ msgid "Makes text fill width."
msgstr ""
#: doc/classes/RichTextLabel.xml
+msgid "Aligns top of the inline image to the top of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns center of the inline image to the center of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns bottom of the inline image to the baseline of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
+msgid "Aligns bottom of the inline image to the bottom of the text."
+msgstr ""
+
+#: doc/classes/RichTextLabel.xml
msgid "Each list item has a number marker."
msgstr ""
@@ -53266,8 +54245,8 @@ msgid ""
" yield(get_tree().create_timer(1.0), \"timeout\")\n"
" print(\"Timer ended.\")\n"
"[/codeblock]\n"
-"The timer will be automatically freed after its time elapses, so be aware "
-"that any reference you might have kept to it will become invalid."
+"The timer will be dereferenced after its time elapses. To preserve the "
+"timer, you can keep a reference to it. See [Reference]."
msgstr ""
#: doc/classes/SceneTreeTimer.xml
@@ -53299,24 +54278,23 @@ msgid ""
"manually (i.e. by using [code]Tween.new()[/code]) are invalid. They can't be "
"used for tweening values, but you can do manual interpolation with [method "
"interpolate_value].\n"
-"A [SceneTreeTween] animation is composed of a sequence of [Tweener]s, which "
-"by default are executed one after another. You can create a sequence by "
-"appending [Tweener]s to the [SceneTreeTween]. Animating something with a "
-"[Tweener] is called tweening. Example tweening sequence looks like this:\n"
+"A tween animation is created by adding [Tweener]s to the [SceneTreeTween] "
+"object, using [method tween_property], [method tween_interval], [method "
+"tween_callback] or [method tween_method]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1)\n"
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"This sequence will make the [code]$Sprite[/code] node turn red, then shrink "
-"and finally the [method Node.queue_free] is called to remove the sprite. See "
-"methods [method tween_property], [method tween_interval], [method "
-"tween_callback] and [method tween_method] for more usage information.\n"
+"This sequence will make the [code]$Sprite[/code] node turn red, then shrink, "
+"before finally calling [method Node.queue_free] to free the sprite. "
+"[Tweener]s are executed one after another by default. This behavior can be "
+"changed using [method parallel] and [method set_parallel].\n"
"When a [Tweener] is created with one of the [code]tween_*[/code] methods, a "
"chained method call can be used to tweak the properties of this [Tweener]. "
-"For example, if you want to set different transition type in the above "
-"example, you can do:\n"
+"For example, if you want to set a different transition type in the above "
+"example, you can use [method set_trans]:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween()\n"
"tween.tween_property($Sprite, \"modulate\", Color.red, 1).set_trans(Tween."
@@ -53325,8 +54303,9 @@ msgid ""
"TRANS_BOUNCE)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Most of the [SceneTreeTween] methods can be chained this way too. In this "
-"example the [SceneTreeTween] is bound and have set a default transition:\n"
+"Most of the [SceneTreeTween] methods can be chained this way too. In the "
+"following example the [SceneTreeTween] is bound to the running script's node "
+"and a default transition is set for its [Tweener]s:\n"
"[codeblock]\n"
"var tween = get_tree().create_tween().bind_node(self).set_trans(Tween."
"TRANS_ELASTIC)\n"
@@ -53334,16 +54313,16 @@ msgid ""
"tween.tween_property($Sprite, \"scale\", Vector2(), 1)\n"
"tween.tween_callback($Sprite, \"queue_free\")\n"
"[/codeblock]\n"
-"Another interesting use for [SceneTreeTween]s is animating arbitrary set of "
+"Another interesting use for [SceneTreeTween]s is animating arbitrary sets of "
"objects:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"for sprite in get_children():\n"
-" tween.tween_property(sprite, \"position\", Vector2(), 1)\n"
+" tween.tween_property(sprite, \"position\", Vector2(0, 0), 1)\n"
"[/codeblock]\n"
"In the example above, all children of a node are moved one after another to "
"position (0, 0).\n"
-"Some [Tweener]s use transitions and eases. The first accepts an [enum Tween."
+"Some [Tweener]s use transitions and eases. The first accepts a [enum Tween."
"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 Tween.EaseType] constant, and "
@@ -53355,7 +54334,7 @@ msgid ""
"tween_cheatsheet.png]Tween easing and transition types cheatsheet[/url]\n"
"[b]Note:[/b] All [SceneTreeTween]s will automatically start by default. To "
"prevent a [SceneTreeTween] from autostarting, you can call [method stop] "
-"immediately after it was created."
+"immediately after it is created."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53385,21 +54364,24 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
-"Processes the [SceneTreeTween] by given [code]delta[/code] value, in "
-"seconds. Mostly useful when the [SceneTreeTween] is paused, for controlling "
-"it manually. Can also be used to end the [SceneTreeTween] animation "
-"immediately, by using [code]delta[/code] longer than the whole duration.\n"
+"Processes the [SceneTreeTween] by the given [code]delta[/code] value, in "
+"seconds. This is mostly useful for manual control when the [SceneTreeTween] "
+"is paused. It can also be used to end the [SceneTreeTween] animation "
+"immediately, by setting [code]delta[/code] longer than the whole duration of "
+"the [SceneTreeTween] animation.\n"
"Returns [code]true[/code] if the [SceneTreeTween] still has [Tweener]s that "
"haven't finished.\n"
-"[b]Note:[/b] The [SceneTreeTween] will become invalid after finished, but "
-"you can call [method stop] after the step, to keep it and reset."
+"[b]Note:[/b] The [SceneTreeTween] will become invalid in the next processing "
+"frame after its animation finishes. Calling [method stop] after performing "
+"[method custom_step] instead keeps and resets the [SceneTreeTween]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Returns the total time in seconds the [SceneTreeTween] has been animating (i."
-"e. time since it started, not counting pauses etc.). The time is affected by "
-"[method set_speed_scale] and [method stop] will reset it to [code]0[/code].\n"
+"e. the time since it started, not counting pauses etc.). The time is "
+"affected by [method set_speed_scale], and [method stop] will reset it to "
+"[code]0[/code].\n"
"[b]Note:[/b] As it results from accumulating frame deltas, the time returned "
"after the [SceneTreeTween] has finished animating will be slightly greater "
"than the actual [SceneTreeTween] duration."
@@ -53435,11 +54417,10 @@ msgstr ""
msgid ""
"Returns whether the [SceneTreeTween] is valid. A valid [SceneTreeTween] is a "
"[SceneTreeTween] contained by the scene tree (i.e. the array from [method "
-"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). "
-"[SceneTreeTween] might become invalid when it has finished tweening or was "
-"killed, also when created with [code]Tween.new()[/code]. Invalid "
-"[SceneTreeTween] can't have [Tweener]s appended, because it can't animate "
-"them. You can however still use [method interpolate_value]."
+"SceneTree.get_processed_tweens] will contain this [SceneTreeTween]). A "
+"[SceneTreeTween] might become invalid when it has finished tweening, is "
+"killed, or when created with [code]SceneTreeTween.new()[/code]. Invalid "
+"[SceneTreeTween]s can't have [Tweener]s appended."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53479,16 +54460,15 @@ msgstr ""
msgid ""
"Sets the number of times the tweening sequence will be repeated, i.e. "
"[code]set_loops(2)[/code] will run the animation twice.\n"
-"Calling this method without arguments will make the [SceneTreeTween] run "
-"infinitely, until it is either killed by [method kill] or by freeing bound "
-"node, or all the animated objects have been freed (which makes further "
+"Calling this method without arguments will make the [Tween] run infinitely, "
+"until either it is killed with [method kill], the [Tween]'s bound node is "
+"freed, or all the animated objects have been freed (which makes further "
"animation impossible).\n"
"[b]Warning:[/b] Make sure to always add some duration/delay when using "
-"infinite loops. 0-duration looped animations (e.g. single [CallbackTweener] "
-"with no delay or [PropertyTweener] with invalid node) are equivalent to "
-"infinite [code]while[/code] loops and will freeze your game. If a "
-"[SceneTreeTween]'s lifetime depends on some node, always use [method "
-"bind_node]."
+"infinite loops. To prevent the game freezing, 0-duration looped animations "
+"(e.g. a single [CallbackTweener] with no delay) are stopped after a small "
+"number of loops, which may produce unexpected results. If a [Tween]'s "
+"lifetime depends on some node, always use [method bind_node]."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -53550,10 +54530,10 @@ msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Creates and appends an [IntervalTweener]. This method can be used to create "
-"delays in the tween animation, as an alternative for using the delay in "
-"other [Tweener]s or when there's no animation (in which case the "
-"[SceneTreeTween] acts as a timer). [code]time[/code] is the length of the "
-"interval, in seconds.\n"
+"delays in the tween animation, as an alternative to using the delay in other "
+"[Tweener]s, or when there's no animation (in which case the [SceneTreeTween] "
+"acts as a timer). [code]time[/code] is the length of the interval, in "
+"seconds.\n"
"Example: creating an interval in code execution.\n"
"[codeblock]\n"
"# ... some code\n"
@@ -53607,8 +54587,8 @@ msgid ""
"Creates and appends a [PropertyTweener]. This method tweens a "
"[code]property[/code] of an [code]object[/code] between an initial value and "
"[code]final_val[/code] in a span of time equal to [code]duration[/code], in "
-"seconds. The initial value by default is a value at the time the tweening of "
-"the [PropertyTweener] start. For example:\n"
+"seconds. The initial value by default is the property's value at the time "
+"the tweening of the [PropertyTweener] starts. For example:\n"
"[codeblock]\n"
"var tween = create_tween()\n"
"tween.tween_property($Sprite, \"position\", Vector2(100, 200), 1)\n"
@@ -53639,16 +54619,15 @@ msgid ""
"Emitted when the [SceneTreeTween] has finished all tweening. Never emitted "
"when the [SceneTreeTween] is set to infinite looping (see [method "
"set_loops]).\n"
-"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) after this signal "
-"is emitted, but it doesn't happen immediately, but on the next processing "
-"frame. Calling [method stop] inside the signal callback will preserve the "
-"[SceneTreeTween]."
+"[b]Note:[/b] The [SceneTreeTween] is removed (invalidated) in the next "
+"processing frame after this signal is emitted. Calling [method stop] inside "
+"the signal callback will prevent the [SceneTreeTween] from being removed."
msgstr ""
#: doc/classes/SceneTreeTween.xml
msgid ""
"Emitted when a full loop is complete (see [method set_loops]), providing the "
-"loop index. This signal is not emitted after final loop, use [signal "
+"loop index. This signal is not emitted after the final loop, use [signal "
"finished] instead for this case."
msgstr ""
@@ -53656,7 +54635,7 @@ msgstr ""
msgid ""
"Emitted when one step of the [SceneTreeTween] is complete, providing the "
"step index. One step is either a single [Tweener] or a group of [Tweener]s "
-"running parallelly."
+"running in parallel."
msgstr ""
#: doc/classes/SceneTreeTween.xml
@@ -54989,7 +55968,12 @@ msgid ""
msgstr ""
#: doc/classes/Spatial.xml
-msgid "Scale part of the local transformation."
+msgid ""
+"Scale part of the local transformation.\n"
+"[b]Note:[/b] Mixed negative scales in 3D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, the scale values will either be all "
+"positive or all negative."
msgstr ""
#: doc/classes/Spatial.xml
@@ -57623,11 +58607,11 @@ msgstr ""
msgid ""
"Returns [code]true[/code] if this string contains a valid integer.\n"
"[codeblock]\n"
-"print(\"7\".is_valid_int()) # Prints \"True\"\n"
-"print(\"14.6\".is_valid_int()) # Prints \"False\"\n"
-"print(\"L\".is_valid_int()) # Prints \"False\"\n"
-"print(\"+3\".is_valid_int()) # Prints \"True\"\n"
-"print(\"-12\".is_valid_int()) # Prints \"True\"\n"
+"print(\"7\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"14.6\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"L\".is_valid_integer()) # Prints \"False\"\n"
+"print(\"+3\".is_valid_integer()) # Prints \"True\"\n"
+"print(\"-12\".is_valid_integer()) # Prints \"True\"\n"
"[/codeblock]"
msgstr ""
@@ -61105,6 +62089,11 @@ msgid ""
msgstr ""
#: doc/classes/TileMap.xml
+#, fuzzy
+msgid "If [code]true[/code], this TileMap bakes a navigation region."
+msgstr "å›žå‚³åƒæ•¸çš„餘弦值。"
+
+#: doc/classes/TileMap.xml
msgid "If [code]true[/code], the cell's UVs will be clipped."
msgstr ""
@@ -61211,6 +62200,10 @@ msgid "The TileMap orientation mode. See [enum Mode] for possible values."
msgstr ""
#: doc/classes/TileMap.xml
+msgid "The navigation layers the TileMap generates its navigation regions in."
+msgstr ""
+
+#: doc/classes/TileMap.xml
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 "
@@ -62342,7 +63335,12 @@ msgstr ""
#: doc/classes/Transform2D.xml
msgid ""
"Returns a copy of the transform scaled by the given [code]scale[/code] "
-"factor, using matrix multiplication."
+"factor, using matrix multiplication.\n"
+"[b]Note:[/b] Negative X scales in 2D are not decomposable from the "
+"transformation matrix. Due to the way scale is represented with "
+"transformation matrices in Godot, negative scales on the X axis will be "
+"changed to negative scales on the Y axis and a rotation of 180 degrees when "
+"decomposed."
msgstr ""
#: doc/classes/Transform2D.xml
@@ -62498,7 +63496,18 @@ msgid ""
"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]."
+"to remove it from the [Tree].\n"
+"[b]Incremental search:[/b] Like [ItemList] and [PopupMenu], [Tree] supports "
+"searching within the list while the control is focused. Press a key that "
+"matches the first letter of an item's name to select the first item starting "
+"with the given letter. After that point, there are two ways to perform "
+"incremental search: 1) Press the same key again before the timeout duration "
+"to select the next item starting with the same letter. 2) Press letter keys "
+"that match the rest of the word before the timeout duration to match to "
+"select the item in question directly. Both of these actions will be reset to "
+"the beginning of the list if the timeout duration has passed since the last "
+"keystroke was registered. You can adjust the timeout duration by changing "
+"[member ProjectSettings.gui/timers/incremental_search_max_interval_msec]."
msgstr ""
#: doc/classes/Tree.xml
@@ -66028,11 +67037,12 @@ msgid "This enabler will stop [Particles2D] nodes."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _process function."
+msgid "This enabler will stop the parent's [method Node._process] function."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
-msgid "This enabler will stop the parent's _physics_process function."
+msgid ""
+"This enabler will stop the parent's [method Node._physics_process] function."
msgstr ""
#: doc/classes/VisibilityEnabler2D.xml
@@ -66072,6 +67082,16 @@ msgid "The VisibilityNotifier's bounding box."
msgstr ""
#: doc/classes/VisibilityNotifier.xml
+msgid ""
+"In addition to checking whether a node is on screen or within a [Camera]'s "
+"view, VisibilityNotifier can also optionally check whether a node is within "
+"a specified maximum distance when using a [Camera] with perspective "
+"projection. This is useful for throttling the performance requirements of "
+"nodes that are far away.\n"
+"[b]Note:[/b] This feature will be disabled if set to 0.0."
+msgstr ""
+
+#: doc/classes/VisibilityNotifier.xml
msgid "Emitted when the VisibilityNotifier enters a [Camera]'s view."
msgstr ""
@@ -70836,6 +71856,16 @@ msgid "The amount of shader rebinds in the frame."
msgstr ""
#: doc/classes/VisualServer.xml
+msgid ""
+"The peak amount of shaders that have been under compilation in the frame.\n"
+"This is useful to know when asynchronous shader compilation has finished for "
+"the current shaders on screen.\n"
+"[b]Note:[/b] For complete certainty, only assume there are no outstanding "
+"compilations when this value is zero for at least two frames in a row.\n"
+"Unimplemented in the GLES2 rendering backend, always returns 0."
+msgstr ""
+
+#: doc/classes/VisualServer.xml
msgid "The amount of surface changes in the frame."
msgstr ""
@@ -74033,8 +75063,8 @@ msgstr ""
#: doc/classes/World.xml
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."
+"scenario, a navigation map and a sound space. Spatial nodes register their "
+"resources into the current world."
msgstr ""
#: doc/classes/World.xml
@@ -74049,11 +75079,17 @@ msgstr ""
#: doc/classes/World.xml
msgid ""
-"The World's fallback_environment will be used if the World's [Environment] "
-"fails or is missing."
+"The World's fallback environment will be used if [member environment] fails "
+"or is missing."
msgstr ""
#: doc/classes/World.xml
+#, fuzzy
+msgid ""
+"The [RID] of this world's navigation map. Used by the [NavigationServer]."
+msgstr "å›žå‚³åƒæ•¸çš„æ­£å¼¦å€¼ã€‚"
+
+#: doc/classes/World.xml
msgid "The World's visual scenario."
msgstr ""
@@ -74068,8 +75104,8 @@ msgstr ""
#: doc/classes/World2D.xml
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."
+"visual scenario, a navigation map and a sound space. 2D nodes register their "
+"resources into the current 2D world."
msgstr ""
#: doc/classes/World2D.xml
@@ -74086,6 +75122,12 @@ msgid ""
msgstr ""
#: doc/classes/World2D.xml
+#, fuzzy
+msgid ""
+"The [RID] of this world's navigation map. Used by the [Navigation2DServer]."
+msgstr "å›žå‚³åƒæ•¸çš„æ­£å¼¦å€¼ã€‚"
+
+#: doc/classes/World2D.xml
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."
diff --git a/drivers/gles3/SCsub b/drivers/gles3/SCsub
index 5760fd714e..506312df80 100644
--- a/drivers/gles3/SCsub
+++ b/drivers/gles3/SCsub
@@ -7,3 +7,4 @@ env.add_source_files(env.drivers_sources, "*.cpp")
SConscript("shaders/SCsub")
SConscript("storage/SCsub")
SConscript("effects/SCsub")
+SConscript("environment/SCsub")
diff --git a/drivers/gles3/environment/SCsub b/drivers/gles3/environment/SCsub
new file mode 100644
index 0000000000..91e1140b75
--- /dev/null
+++ b/drivers/gles3/environment/SCsub
@@ -0,0 +1,5 @@
+#!/usr/bin/env python
+
+Import("env")
+
+env.add_source_files(env.drivers_sources, "*.cpp")
diff --git a/drivers/gles3/environment/gi.cpp b/drivers/gles3/environment/gi.cpp
new file mode 100644
index 0000000000..98d698b2ae
--- /dev/null
+++ b/drivers/gles3/environment/gi.cpp
@@ -0,0 +1,140 @@
+/*************************************************************************/
+/* gi.cpp */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2022 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. */
+/*************************************************************************/
+
+#ifdef GLES3_ENABLED
+
+#include "gi.h"
+
+using namespace GLES3;
+
+/* VOXEL GI API */
+
+RID GI::voxel_gi_allocate() {
+ return RID();
+}
+
+void GI::voxel_gi_free(RID p_rid) {
+}
+
+void GI::voxel_gi_initialize(RID p_rid) {
+}
+
+void GI::voxel_gi_allocate_data(RID p_voxel_gi, const Transform3D &p_to_cell_xform, const AABB &p_aabb, const Vector3i &p_octree_size, const Vector<uint8_t> &p_octree_cells, const Vector<uint8_t> &p_data_cells, const Vector<uint8_t> &p_distance_field, const Vector<int> &p_level_counts) {
+}
+
+AABB GI::voxel_gi_get_bounds(RID p_voxel_gi) const {
+ return AABB();
+}
+
+Vector3i GI::voxel_gi_get_octree_size(RID p_voxel_gi) const {
+ return Vector3i();
+}
+
+Vector<uint8_t> GI::voxel_gi_get_octree_cells(RID p_voxel_gi) const {
+ return Vector<uint8_t>();
+}
+
+Vector<uint8_t> GI::voxel_gi_get_data_cells(RID p_voxel_gi) const {
+ return Vector<uint8_t>();
+}
+
+Vector<uint8_t> GI::voxel_gi_get_distance_field(RID p_voxel_gi) const {
+ return Vector<uint8_t>();
+}
+
+Vector<int> GI::voxel_gi_get_level_counts(RID p_voxel_gi) const {
+ return Vector<int>();
+}
+
+Transform3D GI::voxel_gi_get_to_cell_xform(RID p_voxel_gi) const {
+ return Transform3D();
+}
+
+void GI::voxel_gi_set_dynamic_range(RID p_voxel_gi, float p_range) {
+}
+
+float GI::voxel_gi_get_dynamic_range(RID p_voxel_gi) const {
+ return 0;
+}
+
+void GI::voxel_gi_set_propagation(RID p_voxel_gi, float p_range) {
+}
+
+float GI::voxel_gi_get_propagation(RID p_voxel_gi) const {
+ return 0;
+}
+
+void GI::voxel_gi_set_energy(RID p_voxel_gi, float p_range) {
+}
+
+float GI::voxel_gi_get_energy(RID p_voxel_gi) const {
+ return 0.0;
+}
+
+void GI::voxel_gi_set_bias(RID p_voxel_gi, float p_range) {
+}
+
+float GI::voxel_gi_get_bias(RID p_voxel_gi) const {
+ return 0.0;
+}
+
+void GI::voxel_gi_set_normal_bias(RID p_voxel_gi, float p_range) {
+}
+
+float GI::voxel_gi_get_normal_bias(RID p_voxel_gi) const {
+ return 0.0;
+}
+
+void GI::voxel_gi_set_interior(RID p_voxel_gi, bool p_enable) {
+}
+
+bool GI::voxel_gi_is_interior(RID p_voxel_gi) const {
+ return false;
+}
+
+void GI::voxel_gi_set_use_two_bounces(RID p_voxel_gi, bool p_enable) {
+}
+
+bool GI::voxel_gi_is_using_two_bounces(RID p_voxel_gi) const {
+ return false;
+}
+
+void GI::voxel_gi_set_anisotropy_strength(RID p_voxel_gi, float p_strength) {
+}
+
+float GI::voxel_gi_get_anisotropy_strength(RID p_voxel_gi) const {
+ return 0;
+}
+
+uint32_t GI::voxel_gi_get_version(RID p_voxel_gi) const {
+ return 0;
+}
+
+#endif // GLES3_ENABLED
diff --git a/drivers/gles3/environment/gi.h b/drivers/gles3/environment/gi.h
new file mode 100644
index 0000000000..bff482d7fa
--- /dev/null
+++ b/drivers/gles3/environment/gi.h
@@ -0,0 +1,99 @@
+/*************************************************************************/
+/* gi.h */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2022 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 GI_GLES3_H
+#define GI_GLES3_H
+
+#ifdef GLES3_ENABLED
+
+#include "core/templates/local_vector.h"
+#include "core/templates/rid_owner.h"
+#include "core/templates/self_list.h"
+#include "servers/rendering/environment/renderer_gi.h"
+
+#include "platform_config.h"
+#ifndef OPENGL_INCLUDE_H
+#include <GLES3/gl3.h>
+#else
+#include OPENGL_INCLUDE_H
+#endif
+
+namespace GLES3 {
+
+class GI : public RendererGI {
+public:
+ /* VOXEL GI API */
+
+ virtual RID voxel_gi_allocate() override;
+ virtual void voxel_gi_free(RID p_rid) override;
+ virtual void voxel_gi_initialize(RID p_rid) override;
+ virtual void voxel_gi_allocate_data(RID p_voxel_gi, const Transform3D &p_to_cell_xform, const AABB &p_aabb, const Vector3i &p_octree_size, const Vector<uint8_t> &p_octree_cells, const Vector<uint8_t> &p_data_cells, const Vector<uint8_t> &p_distance_field, const Vector<int> &p_level_counts) override;
+
+ virtual AABB voxel_gi_get_bounds(RID p_voxel_gi) const override;
+ virtual Vector3i voxel_gi_get_octree_size(RID p_voxel_gi) const override;
+ virtual Vector<uint8_t> voxel_gi_get_octree_cells(RID p_voxel_gi) const override;
+ virtual Vector<uint8_t> voxel_gi_get_data_cells(RID p_voxel_gi) const override;
+ virtual Vector<uint8_t> voxel_gi_get_distance_field(RID p_voxel_gi) const override;
+
+ virtual Vector<int> voxel_gi_get_level_counts(RID p_voxel_gi) const override;
+ virtual Transform3D voxel_gi_get_to_cell_xform(RID p_voxel_gi) const override;
+
+ virtual void voxel_gi_set_dynamic_range(RID p_voxel_gi, float p_range) override;
+ virtual float voxel_gi_get_dynamic_range(RID p_voxel_gi) const override;
+
+ virtual void voxel_gi_set_propagation(RID p_voxel_gi, float p_range) override;
+ virtual float voxel_gi_get_propagation(RID p_voxel_gi) const override;
+
+ virtual void voxel_gi_set_energy(RID p_voxel_gi, float p_range) override;
+ virtual float voxel_gi_get_energy(RID p_voxel_gi) const override;
+
+ virtual void voxel_gi_set_bias(RID p_voxel_gi, float p_range) override;
+ virtual float voxel_gi_get_bias(RID p_voxel_gi) const override;
+
+ virtual void voxel_gi_set_normal_bias(RID p_voxel_gi, float p_range) override;
+ virtual float voxel_gi_get_normal_bias(RID p_voxel_gi) const override;
+
+ virtual void voxel_gi_set_interior(RID p_voxel_gi, bool p_enable) override;
+ virtual bool voxel_gi_is_interior(RID p_voxel_gi) const override;
+
+ virtual void voxel_gi_set_use_two_bounces(RID p_voxel_gi, bool p_enable) override;
+ virtual bool voxel_gi_is_using_two_bounces(RID p_voxel_gi) const override;
+
+ virtual void voxel_gi_set_anisotropy_strength(RID p_voxel_gi, float p_strength) override;
+ virtual float voxel_gi_get_anisotropy_strength(RID p_voxel_gi) const override;
+
+ virtual uint32_t voxel_gi_get_version(RID p_voxel_gi) const override;
+};
+
+}; // namespace GLES3
+
+#endif // GLES3_ENABLED
+
+#endif // !GI_GLES3_H
diff --git a/drivers/gles3/rasterizer_gles3.cpp b/drivers/gles3/rasterizer_gles3.cpp
index c8705dc8c8..78ffb42557 100644
--- a/drivers/gles3/rasterizer_gles3.cpp
+++ b/drivers/gles3/rasterizer_gles3.cpp
@@ -198,6 +198,8 @@ void RasterizerGLES3::finalize() {
memdelete(scene);
memdelete(canvas);
memdelete(storage);
+ memdelete(gi);
+ memdelete(copy_effects);
memdelete(light_storage);
memdelete(particles_storage);
memdelete(mesh_storage);
@@ -269,6 +271,7 @@ RasterizerGLES3::RasterizerGLES3() {
particles_storage = memnew(GLES3::ParticlesStorage);
light_storage = memnew(GLES3::LightStorage);
copy_effects = memnew(GLES3::CopyEffects);
+ gi = memnew(GLES3::GI);
storage = memnew(RasterizerStorageGLES3);
canvas = memnew(RasterizerCanvasGLES3(storage));
scene = memnew(RasterizerSceneGLES3(storage));
diff --git a/drivers/gles3/rasterizer_gles3.h b/drivers/gles3/rasterizer_gles3.h
index 5f1cbab849..c0322dc45b 100644
--- a/drivers/gles3/rasterizer_gles3.h
+++ b/drivers/gles3/rasterizer_gles3.h
@@ -34,6 +34,7 @@
#ifdef GLES3_ENABLED
#include "effects/copy_effects.h"
+#include "environment/gi.h"
#include "rasterizer_canvas_gles3.h"
#include "rasterizer_scene_gles3.h"
#include "rasterizer_storage_gles3.h"
@@ -59,6 +60,7 @@ protected:
GLES3::MeshStorage *mesh_storage = nullptr;
GLES3::ParticlesStorage *particles_storage = nullptr;
GLES3::LightStorage *light_storage = nullptr;
+ GLES3::GI *gi = nullptr;
GLES3::CopyEffects *copy_effects = nullptr;
RasterizerStorageGLES3 *storage = nullptr;
RasterizerCanvasGLES3 *canvas = nullptr;
@@ -72,6 +74,7 @@ public:
RendererMeshStorage *get_mesh_storage() { return mesh_storage; }
RendererParticlesStorage *get_particles_storage() { return particles_storage; }
RendererTextureStorage *get_texture_storage() { return texture_storage; }
+ RendererGI *get_gi() { return gi; }
RendererStorage *get_storage() { return storage; }
RendererCanvasRender *get_canvas() { return canvas; }
RendererSceneRender *get_scene() { return scene; }
diff --git a/drivers/gles3/rasterizer_scene_gles3.cpp b/drivers/gles3/rasterizer_scene_gles3.cpp
index 94ae8ecc8a..33c7b9bf32 100644
--- a/drivers/gles3/rasterizer_scene_gles3.cpp
+++ b/drivers/gles3/rasterizer_scene_gles3.cpp
@@ -1923,11 +1923,11 @@ void RasterizerSceneGLES3::render_scene(RID p_render_buffers, const CameraData *
render_data.cam_transform = p_camera_data->main_transform;
render_data.inv_cam_transform = render_data.cam_transform.affine_inverse();
render_data.cam_projection = p_camera_data->main_projection;
- render_data.view_projection[0] = p_camera_data->main_projection;
render_data.cam_orthogonal = p_camera_data->is_orthogonal;
render_data.view_count = p_camera_data->view_count;
for (uint32_t v = 0; v < p_camera_data->view_count; v++) {
+ render_data.view_eye_offset[v] = p_camera_data->view_offset[v].origin;
render_data.view_projection[v] = p_camera_data->view_projection[v];
}
diff --git a/drivers/gles3/rasterizer_scene_gles3.h b/drivers/gles3/rasterizer_scene_gles3.h
index 308ef36fa1..4757a3f161 100644
--- a/drivers/gles3/rasterizer_scene_gles3.h
+++ b/drivers/gles3/rasterizer_scene_gles3.h
@@ -100,6 +100,7 @@ struct RenderDataGLES3 {
// For stereo rendering
uint32_t view_count = 1;
+ Vector3 view_eye_offset[RendererSceneRender::MAX_RENDER_VIEWS];
CameraMatrix view_projection[RendererSceneRender::MAX_RENDER_VIEWS];
float z_near = 0.0;
diff --git a/drivers/gles3/rasterizer_storage_gles3.cpp b/drivers/gles3/rasterizer_storage_gles3.cpp
index bbe4d92856..3b80d88666 100644
--- a/drivers/gles3/rasterizer_storage_gles3.cpp
+++ b/drivers/gles3/rasterizer_storage_gles3.cpp
@@ -79,106 +79,6 @@ Vector<uint8_t> RasterizerStorageGLES3::buffer_get_data(GLenum p_target, GLuint
return ret;
}
-/* VOXEL GI API */
-
-RID RasterizerStorageGLES3::voxel_gi_allocate() {
- return RID();
-}
-
-void RasterizerStorageGLES3::voxel_gi_initialize(RID p_rid) {
-}
-
-void RasterizerStorageGLES3::voxel_gi_allocate_data(RID p_voxel_gi, const Transform3D &p_to_cell_xform, const AABB &p_aabb, const Vector3i &p_octree_size, const Vector<uint8_t> &p_octree_cells, const Vector<uint8_t> &p_data_cells, const Vector<uint8_t> &p_distance_field, const Vector<int> &p_level_counts) {
-}
-
-AABB RasterizerStorageGLES3::voxel_gi_get_bounds(RID p_voxel_gi) const {
- return AABB();
-}
-
-Vector3i RasterizerStorageGLES3::voxel_gi_get_octree_size(RID p_voxel_gi) const {
- return Vector3i();
-}
-
-Vector<uint8_t> RasterizerStorageGLES3::voxel_gi_get_octree_cells(RID p_voxel_gi) const {
- return Vector<uint8_t>();
-}
-
-Vector<uint8_t> RasterizerStorageGLES3::voxel_gi_get_data_cells(RID p_voxel_gi) const {
- return Vector<uint8_t>();
-}
-
-Vector<uint8_t> RasterizerStorageGLES3::voxel_gi_get_distance_field(RID p_voxel_gi) const {
- return Vector<uint8_t>();
-}
-
-Vector<int> RasterizerStorageGLES3::voxel_gi_get_level_counts(RID p_voxel_gi) const {
- return Vector<int>();
-}
-
-Transform3D RasterizerStorageGLES3::voxel_gi_get_to_cell_xform(RID p_voxel_gi) const {
- return Transform3D();
-}
-
-void RasterizerStorageGLES3::voxel_gi_set_dynamic_range(RID p_voxel_gi, float p_range) {
-}
-
-float RasterizerStorageGLES3::voxel_gi_get_dynamic_range(RID p_voxel_gi) const {
- return 0;
-}
-
-void RasterizerStorageGLES3::voxel_gi_set_propagation(RID p_voxel_gi, float p_range) {
-}
-
-float RasterizerStorageGLES3::voxel_gi_get_propagation(RID p_voxel_gi) const {
- return 0;
-}
-
-void RasterizerStorageGLES3::voxel_gi_set_energy(RID p_voxel_gi, float p_range) {
-}
-
-float RasterizerStorageGLES3::voxel_gi_get_energy(RID p_voxel_gi) const {
- return 0.0;
-}
-
-void RasterizerStorageGLES3::voxel_gi_set_bias(RID p_voxel_gi, float p_range) {
-}
-
-float RasterizerStorageGLES3::voxel_gi_get_bias(RID p_voxel_gi) const {
- return 0.0;
-}
-
-void RasterizerStorageGLES3::voxel_gi_set_normal_bias(RID p_voxel_gi, float p_range) {
-}
-
-float RasterizerStorageGLES3::voxel_gi_get_normal_bias(RID p_voxel_gi) const {
- return 0.0;
-}
-
-void RasterizerStorageGLES3::voxel_gi_set_interior(RID p_voxel_gi, bool p_enable) {
-}
-
-bool RasterizerStorageGLES3::voxel_gi_is_interior(RID p_voxel_gi) const {
- return false;
-}
-
-void RasterizerStorageGLES3::voxel_gi_set_use_two_bounces(RID p_voxel_gi, bool p_enable) {
-}
-
-bool RasterizerStorageGLES3::voxel_gi_is_using_two_bounces(RID p_voxel_gi) const {
- return false;
-}
-
-void RasterizerStorageGLES3::voxel_gi_set_anisotropy_strength(RID p_voxel_gi, float p_strength) {
-}
-
-float RasterizerStorageGLES3::voxel_gi_get_anisotropy_strength(RID p_voxel_gi) const {
- return 0;
-}
-
-uint32_t RasterizerStorageGLES3::voxel_gi_get_version(RID p_voxel_gi) {
- return 0;
-}
-
/* OCCLUDER */
void RasterizerStorageGLES3::occluder_set_mesh(RID p_occluder, const PackedVector3Array &p_vertices, const PackedInt32Array &p_indices) {
diff --git a/drivers/gles3/rasterizer_storage_gles3.h b/drivers/gles3/rasterizer_storage_gles3.h
index 981080f6a5..c42efbce19 100644
--- a/drivers/gles3/rasterizer_storage_gles3.h
+++ b/drivers/gles3/rasterizer_storage_gles3.h
@@ -154,47 +154,6 @@ public:
public:
virtual void base_update_dependency(RID p_base, DependencyTracker *p_instance) override;
- /* VOXEL GI API */
-
- RID voxel_gi_allocate() override;
- void voxel_gi_initialize(RID p_rid) override;
- void voxel_gi_allocate_data(RID p_voxel_gi, const Transform3D &p_to_cell_xform, const AABB &p_aabb, const Vector3i &p_octree_size, const Vector<uint8_t> &p_octree_cells, const Vector<uint8_t> &p_data_cells, const Vector<uint8_t> &p_distance_field, const Vector<int> &p_level_counts) override;
-
- AABB voxel_gi_get_bounds(RID p_voxel_gi) const override;
- Vector3i voxel_gi_get_octree_size(RID p_voxel_gi) const override;
- Vector<uint8_t> voxel_gi_get_octree_cells(RID p_voxel_gi) const override;
- Vector<uint8_t> voxel_gi_get_data_cells(RID p_voxel_gi) const override;
- Vector<uint8_t> voxel_gi_get_distance_field(RID p_voxel_gi) const override;
-
- Vector<int> voxel_gi_get_level_counts(RID p_voxel_gi) const override;
- Transform3D voxel_gi_get_to_cell_xform(RID p_voxel_gi) const override;
-
- void voxel_gi_set_dynamic_range(RID p_voxel_gi, float p_range) override;
- float voxel_gi_get_dynamic_range(RID p_voxel_gi) const override;
-
- void voxel_gi_set_propagation(RID p_voxel_gi, float p_range) override;
- float voxel_gi_get_propagation(RID p_voxel_gi) const override;
-
- void voxel_gi_set_energy(RID p_voxel_gi, float p_range) override;
- float voxel_gi_get_energy(RID p_voxel_gi) const override;
-
- void voxel_gi_set_bias(RID p_voxel_gi, float p_range) override;
- float voxel_gi_get_bias(RID p_voxel_gi) const override;
-
- void voxel_gi_set_normal_bias(RID p_voxel_gi, float p_range) override;
- float voxel_gi_get_normal_bias(RID p_voxel_gi) const override;
-
- void voxel_gi_set_interior(RID p_voxel_gi, bool p_enable) override;
- bool voxel_gi_is_interior(RID p_voxel_gi) const override;
-
- void voxel_gi_set_use_two_bounces(RID p_voxel_gi, bool p_enable) override;
- bool voxel_gi_is_using_two_bounces(RID p_voxel_gi) const override;
-
- void voxel_gi_set_anisotropy_strength(RID p_voxel_gi, float p_strength) override;
- float voxel_gi_get_anisotropy_strength(RID p_voxel_gi) const override;
-
- uint32_t voxel_gi_get_version(RID p_voxel_gi) override;
-
/* OCCLUDER */
void occluder_set_mesh(RID p_occluder, const PackedVector3Array &p_vertices, const PackedInt32Array &p_indices);
diff --git a/drivers/vulkan/rendering_device_vulkan.cpp b/drivers/vulkan/rendering_device_vulkan.cpp
index 77aab72d40..10250bddb5 100644
--- a/drivers/vulkan/rendering_device_vulkan.cpp
+++ b/drivers/vulkan/rendering_device_vulkan.cpp
@@ -1400,7 +1400,7 @@ Error RenderingDeviceVulkan::_insert_staging_block() {
return OK;
}
-Error RenderingDeviceVulkan::_staging_buffer_allocate(uint32_t p_amount, uint32_t p_required_align, uint32_t &r_alloc_offset, uint32_t &r_alloc_size, bool p_can_segment, bool p_on_draw_command_buffer) {
+Error RenderingDeviceVulkan::_staging_buffer_allocate(uint32_t p_amount, uint32_t p_required_align, uint32_t &r_alloc_offset, uint32_t &r_alloc_size, bool p_can_segment) {
//determine a block to use
r_alloc_size = p_amount;
@@ -1542,7 +1542,7 @@ Error RenderingDeviceVulkan::_buffer_update(Buffer *p_buffer, size_t p_offset, c
uint32_t block_write_offset;
uint32_t block_write_amount;
- Error err = _staging_buffer_allocate(MIN(to_submit, staging_buffer_block_size), p_required_align, block_write_offset, block_write_amount, p_use_draw_command_buffer);
+ Error err = _staging_buffer_allocate(MIN(to_submit, staging_buffer_block_size), p_required_align, block_write_offset, block_write_amount);
if (err) {
return err;
}
@@ -2314,6 +2314,12 @@ RID RenderingDeviceVulkan::texture_create_shared_from_slice(const TextureView &p
image_view_create_info.viewType = VK_IMAGE_VIEW_TYPE_2D_ARRAY;
}
+ if (p_slice_type == TEXTURE_SLICE_2D) {
+ texture.type = TEXTURE_TYPE_2D;
+ } else if (p_slice_type == TEXTURE_SLICE_3D) {
+ texture.type = TEXTURE_TYPE_3D;
+ }
+
if (p_view.format_override == DATA_FORMAT_MAX || p_view.format_override == texture.format) {
image_view_create_info.format = vulkan_formats[texture.format];
} else {
@@ -2370,6 +2376,22 @@ Error RenderingDeviceVulkan::texture_update(RID p_texture, uint32_t p_layer, con
return _texture_update(p_texture, p_layer, p_data, p_post_barrier, false);
}
+static _ALWAYS_INLINE_ void _copy_region(uint8_t const *__restrict p_src, uint8_t *__restrict p_dst, uint32_t p_src_x, uint32_t p_src_y, uint32_t p_src_w, uint32_t p_src_h, uint32_t p_src_full_w, uint32_t p_unit_size) {
+ uint32_t src_offset = (p_src_y * p_src_full_w + p_src_x) * p_unit_size;
+ uint32_t dst_offset = 0;
+ for (uint32_t y = p_src_h; y > 0; y--) {
+ uint8_t const *__restrict src = p_src + src_offset;
+ uint8_t *__restrict dst = p_dst + dst_offset;
+ for (uint32_t x = p_src_w * p_unit_size; x > 0; x--) {
+ *dst = *src;
+ src++;
+ dst++;
+ }
+ src_offset += p_src_full_w * p_unit_size;
+ dst_offset += p_src_w * p_unit_size;
+ }
+}
+
Error RenderingDeviceVulkan::_texture_update(RID p_texture, uint32_t p_layer, const Vector<uint8_t> &p_data, uint32_t p_post_barrier, bool p_use_setup_queue) {
_THREAD_SAFE_METHOD_
@@ -2455,8 +2477,8 @@ Error RenderingDeviceVulkan::_texture_update(RID p_texture, uint32_t p_layer, co
const uint8_t *read_ptr = read_ptr_mipmap + image_size * z / depth;
- for (uint32_t x = 0; x < width; x += region_size) {
- for (uint32_t y = 0; y < height; y += region_size) {
+ for (uint32_t y = 0; y < height; y += region_size) {
+ for (uint32_t x = 0; x < width; x += region_size) {
uint32_t region_w = MIN(region_size, width - x);
uint32_t region_h = MIN(region_size, height - y);
@@ -2468,7 +2490,7 @@ Error RenderingDeviceVulkan::_texture_update(RID p_texture, uint32_t p_layer, co
to_allocate >>= get_compressed_image_format_pixel_rshift(texture->format);
uint32_t alloc_offset, alloc_size;
- Error err = _staging_buffer_allocate(to_allocate, required_align, alloc_offset, alloc_size, false, !p_use_setup_queue);
+ Error err = _staging_buffer_allocate(to_allocate, required_align, alloc_offset, alloc_size, false);
ERR_FAIL_COND_V(err, ERR_CANT_CREATE);
uint8_t *write_ptr;
@@ -2499,31 +2521,11 @@ Error RenderingDeviceVulkan::_texture_update(RID p_texture, uint32_t p_layer, co
//uint32_t hb = height / block_h;
uint32_t region_wb = region_w / block_w;
uint32_t region_hb = region_h / block_h;
- for (uint32_t xr = 0; xr < region_wb; xr++) {
- for (uint32_t yr = 0; yr < region_hb; yr++) {
- uint32_t src_offset = ((yr + yb) * wb + xr + xb) * block_size;
- uint32_t dst_offset = (yr * region_wb + xr) * block_size;
- //copy block
- for (uint32_t i = 0; i < block_size; i++) {
- write_ptr[dst_offset + i] = read_ptr[src_offset + i];
- }
- }
- }
-
+ _copy_region(read_ptr, write_ptr, xb, yb, region_wb, region_hb, wb, block_size);
} else {
//regular image (pixels)
//must copy a pixel region
-
- for (uint32_t xr = 0; xr < region_w; xr++) {
- for (uint32_t yr = 0; yr < region_h; yr++) {
- uint32_t src_offset = ((yr + y) * width + xr + x) * pixel_size;
- uint32_t dst_offset = (yr * region_w + xr) * pixel_size;
- //copy block
- for (uint32_t i = 0; i < pixel_size; i++) {
- write_ptr[dst_offset + i] = read_ptr[src_offset + i];
- }
- }
- }
+ _copy_region(read_ptr, write_ptr, x, y, region_w, region_h, width, pixel_size);
}
{ //unmap
@@ -2566,11 +2568,11 @@ Error RenderingDeviceVulkan::_texture_update(RID p_texture, uint32_t p_layer, co
uint32_t access_flags = 0;
if (p_post_barrier & BARRIER_MASK_COMPUTE) {
barrier_flags |= VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT;
- access_flags |= VK_ACCESS_SHADER_READ_BIT;
+ access_flags |= VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT;
}
if (p_post_barrier & BARRIER_MASK_RASTER) {
barrier_flags |= VK_PIPELINE_STAGE_VERTEX_SHADER_BIT | VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT;
- access_flags |= VK_ACCESS_SHADER_READ_BIT;
+ access_flags |= VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT;
}
if (p_post_barrier & BARRIER_MASK_TRANSFER) {
barrier_flags |= VK_PIPELINE_STAGE_TRANSFER_BIT;
@@ -2984,7 +2986,7 @@ Error RenderingDeviceVulkan::texture_copy(RID p_from_texture, RID p_to_texture,
image_memory_barrier.subresourceRange.baseArrayLayer = p_src_layer;
image_memory_barrier.subresourceRange.layerCount = 1;
- vkCmdPipelineBarrier(command_buffer, VK_ACCESS_TRANSFER_WRITE_BIT, barrier_flags, 0, 0, nullptr, 0, nullptr, 1, &image_memory_barrier);
+ vkCmdPipelineBarrier(command_buffer, VK_PIPELINE_STAGE_TRANSFER_BIT, barrier_flags, 0, 0, nullptr, 0, nullptr, 1, &image_memory_barrier);
}
{ //make dst readable
@@ -3010,6 +3012,13 @@ Error RenderingDeviceVulkan::texture_copy(RID p_from_texture, RID p_to_texture,
}
}
+ if (dst_tex->used_in_frame != frames_drawn) {
+ dst_tex->used_in_raster = false;
+ dst_tex->used_in_compute = false;
+ dst_tex->used_in_frame = frames_drawn;
+ }
+ dst_tex->used_in_transfer = true;
+
return OK;
}
@@ -4342,7 +4351,7 @@ String RenderingDeviceVulkan::_shader_uniform_debug(RID p_shader, int p_set) {
if (!ret.is_empty()) {
ret += "\n";
}
- ret += "Set: " + itos(i) + " Binding: " + itos(ui.binding) + " Type: " + shader_uniform_names[ui.type] + " Length: " + itos(ui.length);
+ ret += "Set: " + itos(i) + " Binding: " + itos(ui.binding) + " Type: " + shader_uniform_names[ui.type] + " Writable: " + (ui.writable ? "Y" : "N") + " Length: " + itos(ui.length);
}
}
return ret;
@@ -4542,8 +4551,9 @@ bool RenderingDeviceVulkan::_uniform_add_binding(Vector<Vector<VkDescriptorSetLa
//version 1: initial
//version 2: Added shader name
+//version 3: Added writable
-#define SHADER_BINARY_VERSION 2
+#define SHADER_BINARY_VERSION 3
String RenderingDeviceVulkan::shader_get_binary_cache_key() const {
return "Vulkan-SV" + itos(SHADER_BINARY_VERSION);
@@ -4554,6 +4564,7 @@ struct RenderingDeviceVulkanShaderBinaryDataBinding {
uint32_t binding;
uint32_t stages;
uint32_t length; //size of arrays (in total elements), or ubos (in bytes * total elements)
+ uint32_t writable;
};
struct RenderingDeviceVulkanShaderBinarySpecializationConstant {
@@ -4636,6 +4647,18 @@ Vector<uint8_t> RenderingDeviceVulkan::shader_compile_binary_from_spirv(const Ve
ERR_FAIL_COND_V_MSG(result != SPV_REFLECT_RESULT_SUCCESS, Vector<uint8_t>(),
"Reflection of SPIR-V shader stage '" + String(shader_stage_names[p_spirv[i].shader_stage]) + "' failed getting descriptor bindings.");
+ uint32_t interface_vars_count = 0;
+ result = spvReflectEnumerateInterfaceVariables(&module, &interface_vars_count, nullptr);
+ ERR_FAIL_COND_V_MSG(result != SPV_REFLECT_RESULT_SUCCESS, Vector<uint8_t>(),
+ "Reflection of SPIR-V shader stage '" + String(shader_stage_names[p_spirv[i].shader_stage]) + "' failed enumerating interface variables.");
+
+ Vector<SpvReflectInterfaceVariable *> interface_vars;
+ interface_vars.resize(interface_vars_count);
+ result = spvReflectEnumerateInterfaceVariables(&module, &interface_vars_count, interface_vars.ptrw());
+
+ ERR_FAIL_COND_V_MSG(result != SPV_REFLECT_RESULT_SUCCESS, Vector<uint8_t>(),
+ "Reflection of SPIR-V shader stage '" + String(shader_stage_names[p_spirv[i].shader_stage]) + "' failed getting interface variables.");
+
for (uint32_t j = 0; j < binding_count; j++) {
const SpvReflectDescriptorBinding &binding = *bindings[j];
@@ -4714,6 +4737,18 @@ Vector<uint8_t> RenderingDeviceVulkan::shader_compile_binary_from_spirv(const Ve
info.length = 0;
}
+ SpvReflectInterfaceVariable *interface_var = nullptr;
+ for (uint32_t k = 0; k < interface_vars_count; k++) {
+ if (interface_vars[k]->spirv_id == binding.spirv_id) {
+ interface_var = interface_vars[k];
+ break;
+ }
+ }
+ ERR_FAIL_COND_V_MSG(!interface_var, Vector<uint8_t>(),
+ "Reflection of SPIR-V shader stage '" + String(shader_stage_names[p_spirv[i].shader_stage]) + "' failed finding interface variable.");
+
+ info.writable = !(bool)(interface_var->decoration_flags & SPV_REFLECT_DECORATION_NON_WRITABLE);
+
info.binding = binding.binding;
uint32_t set = binding.set;
@@ -4739,6 +4774,7 @@ Vector<uint8_t> RenderingDeviceVulkan::shader_compile_binary_from_spirv(const Ve
//just append stage mask and return
uniform_info.write[set].write[k].stages |= 1 << stage;
exists = true;
+ break;
}
}
@@ -5081,6 +5117,7 @@ RID RenderingDeviceVulkan::shader_create_from_bytecode(const Vector<uint8_t> &p_
for (uint32_t j = 0; j < set_count; j++) {
UniformInfo info;
info.type = UniformType(set_ptr[j].type);
+ info.writable = set_ptr[j].writable;
info.length = set_ptr[j].length;
info.binding = set_ptr[j].binding;
info.stages = set_ptr[j].stages;
@@ -5404,7 +5441,6 @@ RID RenderingDeviceVulkan::storage_buffer_create(uint32_t p_size_bytes, const Ve
ERR_FAIL_COND_V(p_data.size() && (uint32_t)p_data.size() != p_size_bytes, RID());
Buffer buffer;
- buffer.usage = p_usage;
uint32_t flags = VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_STORAGE_BUFFER_BIT;
if (p_usage & STORAGE_BUFFER_USAGE_DISPATCH_INDIRECT) {
flags |= VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT;
@@ -7169,6 +7205,9 @@ RenderingDevice::DrawListID RenderingDeviceVulkan::draw_list_begin(RID p_framebu
Error RenderingDeviceVulkan::draw_list_begin_split(RID p_framebuffer, uint32_t p_splits, DrawListID *r_split_ids, InitialAction p_initial_color_action, FinalAction p_final_color_action, InitialAction p_initial_depth_action, FinalAction p_final_depth_action, const Vector<Color> &p_clear_color_values, float p_clear_depth, uint32_t p_clear_stencil, const Rect2 &p_region, const Vector<RID> &p_storage_textures) {
_THREAD_SAFE_METHOD_
+ ERR_FAIL_COND_V_MSG(draw_list != nullptr, ERR_BUSY, "Only one draw list can be active at the same time.");
+ ERR_FAIL_COND_V_MSG(compute_list != nullptr && !compute_list->state.allow_draw_overlap, ERR_BUSY, "Only one draw/compute list can be active at the same time.");
+
ERR_FAIL_COND_V(p_splits < 1, ERR_INVALID_DECLARATION);
Framebuffer *framebuffer = framebuffer_owner.get_or_null(p_framebuffer);
@@ -7893,10 +7932,6 @@ void RenderingDeviceVulkan::draw_list_end(uint32_t p_post_barrier) {
// * Some buffer is copied
// * Another render pass happens (since we may be done)
-#ifdef FORCE_FULL_BARRIER
- _full_barrier(true);
-#else
-
VkMemoryBarrier mem_barrier;
mem_barrier.sType = VK_STRUCTURE_TYPE_MEMORY_BARRIER;
mem_barrier.pNext = nullptr;
@@ -7907,6 +7942,8 @@ void RenderingDeviceVulkan::draw_list_end(uint32_t p_post_barrier) {
vkCmdPipelineBarrier(frames[frame].draw_command_buffer, src_stage, barrier_flags, 0, 1, &mem_barrier, 0, nullptr, image_barrier_count, image_barriers);
}
+#ifdef FORCE_FULL_BARRIER
+ _full_barrier(true);
#endif
}
@@ -8261,7 +8298,7 @@ void RenderingDeviceVulkan::compute_list_dispatch_indirect(ComputeListID p_list,
Buffer *buffer = storage_buffer_owner.get_or_null(p_buffer);
ERR_FAIL_COND(!buffer);
- ERR_FAIL_COND_MSG(!(buffer->usage & STORAGE_BUFFER_USAGE_DISPATCH_INDIRECT), "Buffer provided was not created to do indirect dispatch.");
+ ERR_FAIL_COND_MSG(!(buffer->usage & VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT), "Buffer provided was not created to do indirect dispatch.");
ERR_FAIL_COND_MSG(p_offset + 12 > buffer->size, "Offset provided (+12) is past the end of buffer.");
@@ -8377,9 +8414,6 @@ void RenderingDeviceVulkan::compute_list_end(uint32_t p_post_barrier) {
}
}
-#ifdef FORCE_FULL_BARRIER
- _full_barrier(true);
-#else
VkMemoryBarrier mem_barrier;
mem_barrier.sType = VK_STRUCTURE_TYPE_MEMORY_BARRIER;
mem_barrier.pNext = nullptr;
@@ -8390,6 +8424,8 @@ void RenderingDeviceVulkan::compute_list_end(uint32_t p_post_barrier) {
vkCmdPipelineBarrier(compute_list->command_buffer, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, barrier_flags, 0, 1, &mem_barrier, 0, nullptr, image_barrier_count, image_barriers);
}
+#ifdef FORCE_FULL_BARRIER
+ _full_barrier(true);
#endif
memdelete(compute_list);
@@ -8717,7 +8753,7 @@ void RenderingDeviceVulkan::_begin_frame() {
}
if (frames[frame].timestamp_count) {
- vkGetQueryPoolResults(device, frames[frame].timestamp_pool, 0, frames[frame].timestamp_count, sizeof(uint64_t) * max_timestamp_query_elements, frames[frame].timestamp_result_values, sizeof(uint64_t), VK_QUERY_RESULT_64_BIT);
+ vkGetQueryPoolResults(device, frames[frame].timestamp_pool, 0, frames[frame].timestamp_count, sizeof(uint64_t) * max_timestamp_query_elements, frames[frame].timestamp_result_values.ptr(), sizeof(uint64_t), VK_QUERY_RESULT_64_BIT);
vkCmdResetQueryPool(frames[frame].setup_command_buffer, frames[frame].timestamp_pool, 0, frames[frame].timestamp_count);
SWAP(frames[frame].timestamp_names, frames[frame].timestamp_result_names);
SWAP(frames[frame].timestamp_cpu_values, frames[frame].timestamp_cpu_result_values);
@@ -9008,7 +9044,7 @@ void RenderingDeviceVulkan::initialize(VulkanContext *p_context, bool p_local_de
vmaCreateAllocator(&allocatorInfo, &allocator);
}
- frames = memnew_arr(Frame, frame_count);
+ frames.resize(frame_count);
frame = 0;
//create setup and frame buffers
for (int i = 0; i < frame_count; i++) {
@@ -9054,12 +9090,12 @@ void RenderingDeviceVulkan::initialize(VulkanContext *p_context, bool p_local_de
vkCreateQueryPool(device, &query_pool_create_info, nullptr, &frames[i].timestamp_pool);
- frames[i].timestamp_names = memnew_arr(String, max_timestamp_query_elements);
- frames[i].timestamp_cpu_values = memnew_arr(uint64_t, max_timestamp_query_elements);
+ frames[i].timestamp_names.resize(max_timestamp_query_elements);
+ frames[i].timestamp_cpu_values.resize(max_timestamp_query_elements);
frames[i].timestamp_count = 0;
- frames[i].timestamp_result_names = memnew_arr(String, max_timestamp_query_elements);
- frames[i].timestamp_cpu_result_values = memnew_arr(uint64_t, max_timestamp_query_elements);
- frames[i].timestamp_result_values = memnew_arr(uint64_t, max_timestamp_query_elements);
+ frames[i].timestamp_result_names.resize(max_timestamp_query_elements);
+ frames[i].timestamp_cpu_result_values.resize(max_timestamp_query_elements);
+ frames[i].timestamp_result_values.resize(max_timestamp_query_elements);
frames[i].timestamp_result_count = 0;
}
}
@@ -9460,18 +9496,13 @@ void RenderingDeviceVulkan::finalize() {
_free_pending_resources(f);
vkDestroyCommandPool(device, frames[i].command_pool, nullptr);
vkDestroyQueryPool(device, frames[i].timestamp_pool, nullptr);
- memdelete_arr(frames[i].timestamp_names);
- memdelete_arr(frames[i].timestamp_cpu_values);
- memdelete_arr(frames[i].timestamp_result_names);
- memdelete_arr(frames[i].timestamp_result_values);
- memdelete_arr(frames[i].timestamp_cpu_result_values);
}
for (int i = 0; i < split_draw_list_allocators.size(); i++) {
vkDestroyCommandPool(device, split_draw_list_allocators[i].command_pool, nullptr);
}
- memdelete_arr(frames);
+ frames.clear();
for (int i = 0; i < staging_buffer_blocks.size(); i++) {
vmaDestroyBuffer(allocator, staging_buffer_blocks[i].buffer, staging_buffer_blocks[i].allocation);
diff --git a/drivers/vulkan/rendering_device_vulkan.h b/drivers/vulkan/rendering_device_vulkan.h
index 903a39b3d0..ec9e864370 100644
--- a/drivers/vulkan/rendering_device_vulkan.h
+++ b/drivers/vulkan/rendering_device_vulkan.h
@@ -206,7 +206,7 @@ class RenderingDeviceVulkan : public RenderingDevice {
uint64_t staging_buffer_max_size = 0;
bool staging_buffer_used = false;
- Error _staging_buffer_allocate(uint32_t p_amount, uint32_t p_required_align, uint32_t &r_alloc_offset, uint32_t &r_alloc_size, bool p_can_segment = true, bool p_on_draw_command_buffer = false);
+ Error _staging_buffer_allocate(uint32_t p_amount, uint32_t p_required_align, uint32_t &r_alloc_offset, uint32_t &r_alloc_size, bool p_can_segment = true);
Error _insert_staging_block();
struct Buffer {
@@ -457,17 +457,17 @@ class RenderingDeviceVulkan : public RenderingDevice {
uint32_t hash() const {
int vdc = vertex_formats.size();
- uint32_t h = hash_djb2_one_32(vdc);
+ uint32_t h = hash_murmur3_one_32(vdc);
const VertexAttribute *ptr = vertex_formats.ptr();
for (int i = 0; i < vdc; i++) {
const VertexAttribute &vd = ptr[i];
- h = hash_djb2_one_32(vd.location, h);
- h = hash_djb2_one_32(vd.offset, h);
- h = hash_djb2_one_32(vd.format, h);
- h = hash_djb2_one_32(vd.stride, h);
- h = hash_djb2_one_32(vd.frequency, h);
+ h = hash_murmur3_one_32(vd.location, h);
+ h = hash_murmur3_one_32(vd.offset, h);
+ h = hash_murmur3_one_32(vd.format, h);
+ h = hash_murmur3_one_32(vd.stride, h);
+ h = hash_murmur3_one_32(vd.frequency, h);
}
- return h;
+ return hash_fmix32(h);
}
};
@@ -544,12 +544,13 @@ class RenderingDeviceVulkan : public RenderingDevice {
struct UniformInfo {
UniformType type = UniformType::UNIFORM_TYPE_MAX;
+ bool writable = false;
int binding = 0;
uint32_t stages = 0;
int length = 0; //size of arrays (in total elements), or ubos (in bytes * total elements)
bool operator!=(const UniformInfo &p_info) const {
- return (binding != p_info.binding || type != p_info.type || stages != p_info.stages || length != p_info.length);
+ return (binding != p_info.binding || type != p_info.type || writable != p_info.writable || stages != p_info.stages || length != p_info.length);
}
bool operator<(const UniformInfo &p_info) const {
@@ -559,6 +560,9 @@ class RenderingDeviceVulkan : public RenderingDevice {
if (type != p_info.type) {
return type < p_info.type;
}
+ if (writable != p_info.writable) {
+ return writable < p_info.writable;
+ }
if (stages != p_info.stages) {
return stages < p_info.stages;
}
@@ -633,7 +637,6 @@ class RenderingDeviceVulkan : public RenderingDevice {
};
bool is_compute = false;
- int max_output = 0;
Vector<Set> sets;
Vector<uint32_t> set_formats;
Vector<VkPipelineShaderStageCreateInfo> pipeline_stages;
@@ -866,11 +869,9 @@ class RenderingDeviceVulkan : public RenderingDevice {
uint32_t pipeline_dynamic_state = 0;
VertexFormatID pipeline_vertex_format = INVALID_ID;
RID pipeline_shader;
- uint32_t invalid_set_from = 0;
bool pipeline_uses_restart_indices = false;
uint32_t pipeline_primitive_divisor = 0;
uint32_t pipeline_primitive_minimum = 0;
- Vector<uint32_t> pipeline_set_formats;
uint32_t pipeline_push_constant_size = 0;
bool pipeline_push_constant_supplied = false;
} validation;
@@ -944,7 +945,6 @@ class RenderingDeviceVulkan : public RenderingDevice {
bool pipeline_active = false;
RID pipeline_shader;
uint32_t invalid_set_from = 0;
- Vector<uint32_t> pipeline_set_formats;
uint32_t pipeline_push_constant_size = 0;
bool pipeline_push_constant_supplied = false;
} validation;
@@ -994,19 +994,19 @@ class RenderingDeviceVulkan : public RenderingDevice {
VkQueryPool timestamp_pool;
- String *timestamp_names = nullptr;
- uint64_t *timestamp_cpu_values = nullptr;
+ TightLocalVector<String> timestamp_names;
+ TightLocalVector<uint64_t> timestamp_cpu_values;
uint32_t timestamp_count = 0;
- String *timestamp_result_names = nullptr;
- uint64_t *timestamp_cpu_result_values = nullptr;
- uint64_t *timestamp_result_values = nullptr;
+ TightLocalVector<String> timestamp_result_names;
+ TightLocalVector<uint64_t> timestamp_cpu_result_values;
+ TightLocalVector<uint64_t> timestamp_result_values;
uint32_t timestamp_result_count = 0;
uint64_t index = 0;
};
uint32_t max_timestamp_query_elements = 0;
- Frame *frames = nullptr; //frames available, for main device they are cycled (usually 3), for local devices only 1
+ TightLocalVector<Frame> frames; //frames available, for main device they are cycled (usually 3), for local devices only 1
int frame = 0; //current frame
int frame_count = 0; //total amount of frames
uint64_t frames_drawn = 0;
diff --git a/drivers/vulkan/vulkan_context.cpp b/drivers/vulkan/vulkan_context.cpp
index 7944057041..0301f5b7fa 100644
--- a/drivers/vulkan/vulkan_context.cpp
+++ b/drivers/vulkan/vulkan_context.cpp
@@ -1860,16 +1860,16 @@ Error VulkanContext::initialize() {
return OK;
}
-void VulkanContext::set_setup_buffer(const VkCommandBuffer &pCommandBuffer) {
- command_buffer_queue.write[0] = pCommandBuffer;
+void VulkanContext::set_setup_buffer(VkCommandBuffer p_command_buffer) {
+ command_buffer_queue.write[0] = p_command_buffer;
}
-void VulkanContext::append_command_buffer(const VkCommandBuffer &pCommandBuffer) {
+void VulkanContext::append_command_buffer(VkCommandBuffer p_command_buffer) {
if (command_buffer_queue.size() <= command_buffer_count) {
command_buffer_queue.resize(command_buffer_count + 1);
}
- command_buffer_queue.write[command_buffer_count] = pCommandBuffer;
+ command_buffer_queue.write[command_buffer_count] = p_command_buffer;
command_buffer_count++;
}
@@ -1879,7 +1879,10 @@ void VulkanContext::flush(bool p_flush_setup, bool p_flush_pending) {
//flush the pending setup buffer
- if (p_flush_setup && command_buffer_queue[0]) {
+ bool setup_flushable = p_flush_setup && command_buffer_queue[0];
+ bool pending_flushable = p_flush_pending && command_buffer_count > 1;
+
+ if (setup_flushable) {
//use a fence to wait for everything done
VkSubmitInfo submit_info;
submit_info.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO;
@@ -1889,33 +1892,33 @@ void VulkanContext::flush(bool p_flush_setup, bool p_flush_pending) {
submit_info.pWaitSemaphores = nullptr;
submit_info.commandBufferCount = 1;
submit_info.pCommandBuffers = command_buffer_queue.ptr();
- submit_info.signalSemaphoreCount = 0;
- submit_info.pSignalSemaphores = nullptr;
+ submit_info.signalSemaphoreCount = pending_flushable ? 1 : 0;
+ submit_info.pSignalSemaphores = pending_flushable ? &draw_complete_semaphores[frame_index] : nullptr;
VkResult err = vkQueueSubmit(graphics_queue, 1, &submit_info, VK_NULL_HANDLE);
command_buffer_queue.write[0] = nullptr;
ERR_FAIL_COND(err);
- vkDeviceWaitIdle(device);
}
- if (p_flush_pending && command_buffer_count > 1) {
+ if (pending_flushable) {
//use a fence to wait for everything done
VkSubmitInfo submit_info;
submit_info.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO;
submit_info.pNext = nullptr;
- submit_info.pWaitDstStageMask = nullptr;
- submit_info.waitSemaphoreCount = 0;
- submit_info.pWaitSemaphores = nullptr;
+ VkPipelineStageFlags wait_stage_mask = VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT;
+ submit_info.pWaitDstStageMask = setup_flushable ? &wait_stage_mask : nullptr;
+ submit_info.waitSemaphoreCount = setup_flushable ? 1 : 0;
+ submit_info.pWaitSemaphores = setup_flushable ? &draw_complete_semaphores[frame_index] : nullptr;
submit_info.commandBufferCount = command_buffer_count - 1;
submit_info.pCommandBuffers = command_buffer_queue.ptr() + 1;
submit_info.signalSemaphoreCount = 0;
submit_info.pSignalSemaphores = nullptr;
VkResult err = vkQueueSubmit(graphics_queue, 1, &submit_info, VK_NULL_HANDLE);
- ERR_FAIL_COND(err);
- vkDeviceWaitIdle(device);
-
command_buffer_count = 1;
+ ERR_FAIL_COND(err);
}
+
+ vkDeviceWaitIdle(device);
}
Error VulkanContext::prepare_buffers() {
diff --git a/drivers/vulkan/vulkan_context.h b/drivers/vulkan/vulkan_context.h
index 236e3bf35f..e96facfacb 100644
--- a/drivers/vulkan/vulkan_context.h
+++ b/drivers/vulkan/vulkan_context.h
@@ -117,8 +117,8 @@ private:
// Present queue.
bool queues_initialized = false;
- uint32_t graphics_queue_family_index = 0;
- uint32_t present_queue_family_index = 0;
+ uint32_t graphics_queue_family_index = UINT32_MAX;
+ uint32_t present_queue_family_index = UINT32_MAX;
bool separate_present_queue = false;
VkQueue graphics_queue = VK_NULL_HANDLE;
VkQueue present_queue = VK_NULL_HANDLE;
@@ -289,8 +289,8 @@ public:
VkFormat get_screen_format() const;
VkPhysicalDeviceLimits get_device_limits() const;
- void set_setup_buffer(const VkCommandBuffer &pCommandBuffer);
- void append_command_buffer(const VkCommandBuffer &pCommandBuffer);
+ void set_setup_buffer(VkCommandBuffer p_command_buffer);
+ void append_command_buffer(VkCommandBuffer p_command_buffer);
void resize_notify();
void flush(bool p_flush_setup = false, bool p_flush_pending = false);
Error prepare_buffers();
diff --git a/editor/animation_bezier_editor.cpp b/editor/animation_bezier_editor.cpp
index f0650ee446..391cd009f1 100644
--- a/editor/animation_bezier_editor.cpp
+++ b/editor/animation_bezier_editor.cpp
@@ -44,17 +44,6 @@ float AnimationBezierTrackEdit::_bezier_h_to_pixel(float p_h) {
return h;
}
-static _FORCE_INLINE_ Vector2 _bezier_interp(real_t t, const Vector2 &start, const Vector2 &control_1, const Vector2 &control_2, const Vector2 &end) {
- /* Formula from Wikipedia article on Bezier curves. */
- real_t omt = (1.0 - t);
- real_t omt2 = omt * omt;
- real_t omt3 = omt2 * omt;
- real_t t2 = t * t;
- real_t t3 = t2 * t;
-
- return start * omt3 + control_1 * omt2 * t * 3.0 + control_2 * omt * t2 * 3.0 + end * t3;
-}
-
void AnimationBezierTrackEdit::_draw_track(int p_track, const Color &p_color) {
float scale = timeline->get_zoom_scale();
@@ -151,7 +140,7 @@ void AnimationBezierTrackEdit::_draw_track(int p_track, const Color &p_color) {
for (int k = 0; k < iterations; k++) {
float middle = (low + high) / 2;
- Vector2 interp = _bezier_interp(middle, start, out_handle, in_handle, end);
+ Vector2 interp = start.bezier_interpolate(out_handle, in_handle, end, middle);
if (interp.x < t) {
low = middle;
@@ -161,8 +150,8 @@ void AnimationBezierTrackEdit::_draw_track(int p_track, const Color &p_color) {
}
//interpolate the result:
- Vector2 low_pos = _bezier_interp(low, start, out_handle, in_handle, end);
- Vector2 high_pos = _bezier_interp(high, start, out_handle, in_handle, end);
+ Vector2 low_pos = start.bezier_interpolate(out_handle, in_handle, end, low);
+ Vector2 high_pos = start.bezier_interpolate(out_handle, in_handle, end, high);
float c = (t - low_pos.x) / (high_pos.x - low_pos.x);
diff --git a/editor/animation_track_editor.cpp b/editor/animation_track_editor.cpp
index d81d629780..e612130041 100644
--- a/editor/animation_track_editor.cpp
+++ b/editor/animation_track_editor.cpp
@@ -6239,7 +6239,7 @@ AnimationTrackEditor::AnimationTrackEditor() {
info_message->set_text(TTR("Select an AnimationPlayer node to create and edit animations."));
info_message->set_vertical_alignment(VERTICAL_ALIGNMENT_CENTER);
info_message->set_horizontal_alignment(HORIZONTAL_ALIGNMENT_CENTER);
- info_message->set_autowrap_mode(Label::AUTOWRAP_WORD_SMART);
+ info_message->set_autowrap_mode(TextServer::AUTOWRAP_WORD_SMART);
info_message->set_custom_minimum_size(Size2(100 * EDSCALE, 0));
info_message->set_anchors_and_offsets_preset(PRESET_WIDE, PRESET_MODE_KEEP_SIZE, 8 * EDSCALE);
main_panel->add_child(info_message);
diff --git a/editor/code_editor.cpp b/editor/code_editor.cpp
index 7c00cf351c..272de725c8 100644
--- a/editor/code_editor.cpp
+++ b/editor/code_editor.cpp
@@ -1024,6 +1024,7 @@ void CodeTextEditor::update_editor_settings() {
text_editor->set_scroll_past_end_of_file_enabled(EditorSettings::get_singleton()->get("text_editor/behavior/navigation/scroll_past_end_of_file"));
text_editor->set_smooth_scroll_enabled(EditorSettings::get_singleton()->get("text_editor/behavior/navigation/smooth_scrolling"));
text_editor->set_v_scroll_speed(EditorSettings::get_singleton()->get("text_editor/behavior/navigation/v_scroll_speed"));
+ text_editor->set_drag_and_drop_selection_enabled(EditorSettings::get_singleton()->get("text_editor/behavior/navigation/drag_and_drop_selection"));
// Behavior: indent
text_editor->set_indent_using_spaces(EditorSettings::get_singleton()->get("text_editor/behavior/indent/type"));
diff --git a/editor/create_dialog.cpp b/editor/create_dialog.cpp
index 3469e96a0a..31c169a0fb 100644
--- a/editor/create_dialog.cpp
+++ b/editor/create_dialog.cpp
@@ -474,6 +474,13 @@ void CreateDialog::select_type(const String &p_type, bool p_center_on_item) {
get_ok_button()->set_disabled(false);
}
+void CreateDialog::select_base() {
+ if (search_options_types.is_empty()) {
+ _update_search();
+ }
+ select_type(base_type, false);
+}
+
String CreateDialog::get_selected_type() {
TreeItem *selected = search_options->get_selected();
if (!selected) {
diff --git a/editor/create_dialog.h b/editor/create_dialog.h
index 3ab27ea58c..dc8618a1c0 100644
--- a/editor/create_dialog.h
+++ b/editor/create_dialog.h
@@ -115,6 +115,7 @@ public:
void set_base_type(const String &p_base) { base_type = p_base; }
String get_base_type() const { return base_type; }
+ void select_base();
void set_preferred_search_result_type(const String &p_preferred_type) { preferred_search_result_type = p_preferred_type; }
String get_preferred_search_result_type() { return preferred_search_result_type; }
diff --git a/editor/debugger/debug_adapter/debug_adapter_types.h b/editor/debugger/debug_adapter/debug_adapter_types.h
index 4d77b6d51c..fd66905f9b 100644
--- a/editor/debugger/debug_adapter/debug_adapter_types.h
+++ b/editor/debugger/debug_adapter/debug_adapter_types.h
@@ -220,7 +220,7 @@ struct StackFrame {
int column;
static uint32_t hash(const StackFrame &p_frame) {
- return hash_djb2_one_32(p_frame.id);
+ return hash_murmur3_one_32(p_frame.id);
}
bool operator==(const StackFrame &p_other) const {
return id == p_other.id;
diff --git a/editor/debugger/editor_debugger_node.h b/editor/debugger/editor_debugger_node.h
index 8dc53690eb..d50cbec291 100644
--- a/editor/debugger/editor_debugger_node.h
+++ b/editor/debugger/editor_debugger_node.h
@@ -72,7 +72,7 @@ private:
static uint32_t hash(const Breakpoint &p_val) {
uint32_t h = HashMapHasherDefault::hash(p_val.source);
- return hash_djb2_one_32(p_val.line, h);
+ return hash_murmur3_one_32(p_val.line, h);
}
bool operator==(const Breakpoint &p_b) const {
return (line == p_b.line && source == p_b.source);
diff --git a/editor/debugger/editor_performance_profiler.cpp b/editor/debugger/editor_performance_profiler.cpp
index ed451ed68e..764e842539 100644
--- a/editor/debugger/editor_performance_profiler.cpp
+++ b/editor/debugger/editor_performance_profiler.cpp
@@ -391,7 +391,7 @@ EditorPerformanceProfiler::EditorPerformanceProfiler() {
info_message->set_text(TTR("Pick one or more items from the list to display the graph."));
info_message->set_vertical_alignment(VERTICAL_ALIGNMENT_CENTER);
info_message->set_horizontal_alignment(HORIZONTAL_ALIGNMENT_CENTER);
- info_message->set_autowrap_mode(Label::AUTOWRAP_WORD_SMART);
+ info_message->set_autowrap_mode(TextServer::AUTOWRAP_WORD_SMART);
info_message->set_custom_minimum_size(Size2(100 * EDSCALE, 0));
info_message->set_anchors_and_offsets_preset(PRESET_WIDE, PRESET_MODE_KEEP_SIZE, 8 * EDSCALE);
monitor_draw->add_child(info_message);
diff --git a/editor/debugger/script_editor_debugger.cpp b/editor/debugger/script_editor_debugger.cpp
index 05409dbeeb..c209c67dcb 100644
--- a/editor/debugger/script_editor_debugger.cpp
+++ b/editor/debugger/script_editor_debugger.cpp
@@ -1686,7 +1686,7 @@ ScriptEditorDebugger::ScriptEditorDebugger() {
reason->set_text("");
hbc->add_child(reason);
reason->set_h_size_flags(SIZE_EXPAND_FILL);
- reason->set_autowrap_mode(Label::AUTOWRAP_WORD_SMART);
+ reason->set_autowrap_mode(TextServer::AUTOWRAP_WORD_SMART);
reason->set_max_lines_visible(3);
reason->set_mouse_filter(Control::MOUSE_FILTER_PASS);
diff --git a/editor/dependency_editor.cpp b/editor/dependency_editor.cpp
index 97699d0349..9a1b2b5ff5 100644
--- a/editor/dependency_editor.cpp
+++ b/editor/dependency_editor.cpp
@@ -487,7 +487,7 @@ void DependencyRemoveDialog::show(const Vector<String> &p_folders, const Vector<
void DependencyRemoveDialog::ok_pressed() {
for (int i = 0; i < files_to_delete.size(); ++i) {
if (ResourceCache::has(files_to_delete[i])) {
- Resource *res = ResourceCache::get(files_to_delete[i]);
+ Ref<Resource> res = ResourceCache::get_ref(files_to_delete[i]);
res->set_path("");
}
diff --git a/editor/editor_about.cpp b/editor/editor_about.cpp
index 6fafb2d91a..17aa67cd45 100644
--- a/editor/editor_about.cpp
+++ b/editor/editor_about.cpp
@@ -213,7 +213,7 @@ EditorAbout::EditorAbout() {
Label *tpl_label = memnew(Label);
tpl_label->set_h_size_flags(Control::SIZE_EXPAND_FILL);
- tpl_label->set_autowrap_mode(Label::AUTOWRAP_WORD_SMART);
+ tpl_label->set_autowrap_mode(TextServer::AUTOWRAP_WORD_SMART);
tpl_label->set_text(TTR("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."));
tpl_label->set_size(Size2(630, 1) * EDSCALE);
license_thirdparty->add_child(tpl_label);
diff --git a/editor/editor_file_dialog.cpp b/editor/editor_file_dialog.cpp
index 13084e2aab..95f72476aa 100644
--- a/editor/editor_file_dialog.cpp
+++ b/editor/editor_file_dialog.cpp
@@ -756,7 +756,7 @@ void EditorFileDialog::update_file_list() {
item_list->set_icon_mode(ItemList::ICON_MODE_TOP);
item_list->set_fixed_column_width(thumbnail_size * 3 / 2);
item_list->set_max_text_lines(2);
- item_list->set_text_overrun_behavior(TextParagraph::OVERRUN_TRIM_ELLIPSIS);
+ item_list->set_text_overrun_behavior(TextServer::OVERRUN_TRIM_ELLIPSIS);
item_list->set_fixed_icon_size(Size2(thumbnail_size, thumbnail_size));
if (thumbnail_size < 64) {
diff --git a/editor/editor_file_system.cpp b/editor/editor_file_system.cpp
index f9a4c14c48..adbba98897 100644
--- a/editor/editor_file_system.cpp
+++ b/editor/editor_file_system.cpp
@@ -1792,9 +1792,9 @@ Error EditorFileSystem::_reimport_group(const String &p_group_file, const Vector
//if file is currently up, maybe the source it was loaded from changed, so import math must be updated for it
//to reload properly
- if (ResourceCache::has(file)) {
- Resource *r = ResourceCache::get(file);
+ Ref<Resource> r = ResourceCache::get_ref(file);
+ if (r.is_valid()) {
if (!r->get_import_path().is_empty()) {
String dst_path = ResourceFormatImporter::get_singleton()->get_internal_resource_path(file);
r->set_import_path(dst_path);
@@ -2034,9 +2034,8 @@ void EditorFileSystem::_reimport_file(const String &p_file, const HashMap<String
//if file is currently up, maybe the source it was loaded from changed, so import math must be updated for it
//to reload properly
- if (ResourceCache::has(p_file)) {
- Resource *r = ResourceCache::get(p_file);
-
+ Ref<Resource> r = ResourceCache::get_ref(p_file);
+ if (r.is_valid()) {
if (!r->get_import_path().is_empty()) {
String dst_path = ResourceFormatImporter::get_singleton()->get_internal_resource_path(p_file);
r->set_import_path(dst_path);
diff --git a/editor/editor_folding.cpp b/editor/editor_folding.cpp
index 9e1b361f64..8c508494c0 100644
--- a/editor/editor_folding.cpp
+++ b/editor/editor_folding.cpp
@@ -193,10 +193,7 @@ void EditorFolding::load_scene_folding(Node *p_scene, const String &p_path) {
for (int i = 0; i < res_unfolds.size(); i += 2) {
String path2 = res_unfolds[i];
- Ref<Resource> res;
- if (ResourceCache::has(path2)) {
- res = Ref<Resource>(ResourceCache::get(path2));
- }
+ Ref<Resource> res = ResourceCache::get_ref(path2);
if (res.is_null()) {
continue;
}
diff --git a/editor/editor_inspector.cpp b/editor/editor_inspector.cpp
index 0f31e3e7bb..2bf0cd2f20 100644
--- a/editor/editor_inspector.cpp
+++ b/editor/editor_inspector.cpp
@@ -406,7 +406,7 @@ Object *EditorProperty::get_edited_object() {
return object;
}
-StringName EditorProperty::get_edited_property() {
+StringName EditorProperty::get_edited_property() const {
return property;
}
@@ -437,16 +437,20 @@ Variant EditorPropertyRevert::get_property_revert_value(Object *p_object, const
return PropertyUtils::get_property_default_value(p_object, p_property, r_is_valid);
}
-bool EditorPropertyRevert::can_property_revert(Object *p_object, const StringName &p_property) {
+bool EditorPropertyRevert::can_property_revert(Object *p_object, const StringName &p_property, const Variant *p_custom_current_value) {
bool is_valid_revert = false;
Variant revert_value = EditorPropertyRevert::get_property_revert_value(p_object, p_property, &is_valid_revert);
if (!is_valid_revert) {
return false;
}
- Variant current_value = p_object->get(p_property);
+ Variant current_value = p_custom_current_value ? *p_custom_current_value : p_object->get(p_property);
return PropertyUtils::is_property_value_different(current_value, revert_value);
}
+StringName EditorProperty::_get_revert_property() const {
+ return property;
+}
+
void EditorProperty::update_revert_and_pin_status() {
if (property == StringName()) {
return; //no property, so nothing to do
@@ -458,7 +462,8 @@ void EditorProperty::update_revert_and_pin_status() {
CRASH_COND(!node);
new_pinned = node->is_property_pinned(property);
}
- bool new_can_revert = EditorPropertyRevert::can_property_revert(object, property) && !is_read_only();
+ Variant current = object->get(_get_revert_property());
+ bool new_can_revert = EditorPropertyRevert::can_property_revert(object, property, &current) && !is_read_only();
if (new_can_revert != can_revert || new_pinned != pinned) {
can_revert = new_can_revert;
@@ -717,11 +722,15 @@ void EditorProperty::set_bottom_editor(Control *p_control) {
bottom_editor = p_control;
}
+Variant EditorProperty::_get_cache_value(const StringName &p_prop, bool &r_valid) const {
+ return object->get(p_prop, &r_valid);
+}
+
bool EditorProperty::is_cache_valid() const {
if (object) {
for (const KeyValue<StringName, Variant> &E : cache) {
bool valid;
- Variant value = object->get(E.key, &valid);
+ Variant value = _get_cache_value(E.key, valid);
if (!valid || value != E.value) {
return false;
}
@@ -733,7 +742,7 @@ void EditorProperty::update_cache() {
cache.clear();
if (object && property != StringName()) {
bool valid;
- Variant value = object->get(property, &valid);
+ Variant value = _get_cache_value(property, valid);
if (valid) {
cache[property] = value;
}
diff --git a/editor/editor_inspector.h b/editor/editor_inspector.h
index 555fedf939..d70d06c48b 100644
--- a/editor/editor_inspector.h
+++ b/editor/editor_inspector.h
@@ -50,7 +50,7 @@ public:
static bool is_property_value_different(const Variant &p_a, const Variant &p_b);
static Variant get_property_revert_value(Object *p_object, const StringName &p_property, bool *r_is_valid);
- static bool can_property_revert(Object *p_object, const StringName &p_property);
+ static bool can_property_revert(Object *p_object, const StringName &p_property, const Variant *p_custom_current_value = nullptr);
};
class EditorProperty : public Container {
@@ -131,6 +131,9 @@ protected:
virtual void shortcut_input(const Ref<InputEvent> &p_event) override;
const Color *_get_property_colors();
+ virtual Variant _get_cache_value(const StringName &p_prop, bool &r_valid) const;
+ virtual StringName _get_revert_property() const;
+
public:
void emit_changed(const StringName &p_property, const Variant &p_value, const StringName &p_field = StringName(), bool p_changing = false);
@@ -143,7 +146,7 @@ public:
bool is_read_only() const;
Object *get_edited_object();
- StringName get_edited_property();
+ StringName get_edited_property() const;
virtual void update_property();
void update_revert_and_pin_status();
diff --git a/editor/editor_log.cpp b/editor/editor_log.cpp
index dbe44aee1b..f26f47dbc7 100644
--- a/editor/editor_log.cpp
+++ b/editor/editor_log.cpp
@@ -181,7 +181,7 @@ void EditorLog::clear() {
}
void EditorLog::_process_message(const String &p_msg, MessageType p_type) {
- if (messages.size() > 0 && messages[messages.size() - 1].text == p_msg) {
+ if (messages.size() > 0 && messages[messages.size() - 1].text == p_msg && messages[messages.size() - 1].type == p_type) {
// If previous message is the same as the new one, increase previous count rather than adding another
// instance to the messages list.
LogMessage &previous = messages.write[messages.size() - 1];
@@ -258,6 +258,8 @@ void EditorLog::_add_log_line(LogMessage &p_message, bool p_replace_previous) {
switch (p_message.type) {
case MSG_TYPE_STD: {
} break;
+ case MSG_TYPE_STD_RICH: {
+ } break;
case MSG_TYPE_ERROR: {
log->push_color(get_theme_color(SNAME("error_color"), SNAME("Editor")));
Ref<Texture2D> icon = get_theme_icon(SNAME("Error"), SNAME("EditorIcons"));
@@ -285,11 +287,15 @@ void EditorLog::_add_log_line(LogMessage &p_message, bool p_replace_previous) {
log->pop();
}
- log->add_text(p_message.text);
+ if (p_message.type == MSG_TYPE_STD_RICH) {
+ log->append_text(p_message.text);
+ } else {
+ log->add_text(p_message.text);
+ }
// Need to use pop() to exit out of the RichTextLabels current "push" stack.
- // We only "push" in the above switch when message type != STD, so only pop when that is the case.
- if (p_message.type != MSG_TYPE_STD) {
+ // We only "push" in the above switch when message type != STD and RICH, so only pop when that is the case.
+ if (p_message.type != MSG_TYPE_STD && p_message.type != MSG_TYPE_STD_RICH) {
log->pop();
}
@@ -342,6 +348,7 @@ EditorLog::EditorLog() {
// Log - Rich Text Label.
log = memnew(RichTextLabel);
+ log->set_use_bbcode(true);
log->set_scroll_follow(true);
log->set_selection_enabled(true);
log->set_focus_mode(FOCUS_CLICK);
@@ -418,6 +425,7 @@ EditorLog::EditorLog() {
std_filter->initialize_button(TTR("Toggle visibility of standard output messages."), callable_mp(this, &EditorLog::_set_filter_active));
vb_right->add_child(std_filter->toggle_button);
type_filter_map.insert(MSG_TYPE_STD, std_filter);
+ type_filter_map.insert(MSG_TYPE_STD_RICH, std_filter);
LogFilter *error_filter = memnew(LogFilter(MSG_TYPE_ERROR));
error_filter->initialize_button(TTR("Toggle visibility of errors."), callable_mp(this, &EditorLog::_set_filter_active));
@@ -451,6 +459,10 @@ void EditorLog::deinit() {
EditorLog::~EditorLog() {
for (const KeyValue<MessageType, LogFilter *> &E : type_filter_map) {
- memdelete(E.value);
+ // MSG_TYPE_STD_RICH is connected to the std_filter button, so we do this
+ // to avoid it from being deleted twice, causing a crash on closing.
+ if (E.key != MSG_TYPE_STD_RICH) {
+ memdelete(E.value);
+ }
}
}
diff --git a/editor/editor_log.h b/editor/editor_log.h
index de0368501c..653fba9524 100644
--- a/editor/editor_log.h
+++ b/editor/editor_log.h
@@ -48,6 +48,7 @@ public:
enum MessageType {
MSG_TYPE_STD,
MSG_TYPE_ERROR,
+ MSG_TYPE_STD_RICH,
MSG_TYPE_WARNING,
MSG_TYPE_EDITOR,
};
diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp
index e0a5cab167..b196cadcb1 100644
--- a/editor/editor_node.cpp
+++ b/editor/editor_node.cpp
@@ -582,9 +582,10 @@ void EditorNode::_notification(int p_what) {
opening_prev = false;
}
+ bool unsaved_cache_changed = false;
if (unsaved_cache != (saved_version != editor_data.get_undo_redo().get_version())) {
unsaved_cache = (saved_version != editor_data.get_undo_redo().get_version());
- _update_title();
+ unsaved_cache_changed = true;
}
if (last_checked_version != editor_data.get_undo_redo().get_version()) {
@@ -615,6 +616,10 @@ void EditorNode::_notification(int p_what) {
ResourceImporterTexture::get_singleton()->update_imports();
+ if (settings_changed || unsaved_cache_changed) {
+ _update_title();
+ }
+
if (settings_changed) {
_update_from_settings();
settings_changed = false;
@@ -876,7 +881,7 @@ void EditorNode::_resources_changed(const Vector<String> &p_resources) {
int rc = p_resources.size();
for (int i = 0; i < rc; i++) {
- Ref<Resource> res(ResourceCache::get(p_resources.get(i)));
+ Ref<Resource> res = ResourceCache::get_ref(p_resources.get(i));
if (res.is_null()) {
continue;
}
@@ -1006,8 +1011,8 @@ void EditorNode::_resources_reimported(const Vector<String> &p_resources) {
continue;
}
// Reload normally.
- Resource *resource = ResourceCache::get(p_resources[i]);
- if (resource) {
+ Ref<Resource> resource = ResourceCache::get_ref(p_resources[i]);
+ if (resource.is_valid()) {
resource->reload_from_file();
}
}
@@ -1615,34 +1620,6 @@ bool EditorNode::_validate_scene_recursive(const String &p_filename, Node *p_nod
return false;
}
-static bool _find_edited_resources(const Ref<Resource> &p_resource, HashSet<Ref<Resource>> &edited_resources) {
- if (p_resource->is_edited()) {
- edited_resources.insert(p_resource);
- return true;
- }
-
- List<PropertyInfo> plist;
-
- p_resource->get_property_list(&plist);
-
- for (const PropertyInfo &E : plist) {
- if (E.type == Variant::OBJECT && E.usage & PROPERTY_USAGE_STORAGE && !(E.usage & PROPERTY_USAGE_RESOURCE_NOT_PERSISTENT)) {
- Ref<Resource> res = p_resource->get(E.name);
- if (res.is_null()) {
- continue;
- }
- if (res->get_path().is_resource_file()) { // Not a subresource, continue.
- continue;
- }
- if (_find_edited_resources(res, edited_resources)) {
- return true;
- }
- }
- }
-
- return false;
-}
-
int EditorNode::_save_external_resources() {
// Save external resources and its subresources if any was modified.
@@ -1652,29 +1629,43 @@ int EditorNode::_save_external_resources() {
}
flg |= ResourceSaver::FLAG_REPLACE_SUBRESOURCE_PATHS;
- HashSet<Ref<Resource>> edited_subresources;
+ HashSet<String> edited_resources;
int saved = 0;
List<Ref<Resource>> cached;
ResourceCache::get_cached_resources(&cached);
- for (const Ref<Resource> &res : cached) {
- if (!res->get_path().is_resource_file()) {
+
+ for (Ref<Resource> res : cached) {
+ if (!res->is_edited()) {
continue;
}
- // not only check if this resource is edited, check contained subresources too
- if (_find_edited_resources(res, edited_subresources)) {
- ResourceSaver::save(res->get_path(), res, flg);
- saved++;
- }
- }
- // Clear later, because user may have put the same subresource in two different resources,
- // which will be shared until the next reload.
+ String path = res->get_path();
+ if (path.begins_with("res://")) {
+ int subres_pos = path.find("::");
+ if (subres_pos == -1) {
+ // Actual resource.
+ edited_resources.insert(path);
+ } else {
+ edited_resources.insert(path.substr(0, subres_pos));
+ }
+ }
- for (const Ref<Resource> &E : edited_subresources) {
- Ref<Resource> res = E;
res->set_edited(false);
}
+ for (const String &E : edited_resources) {
+ Ref<Resource> res = ResourceCache::get_ref(E);
+ if (!res.is_valid()) {
+ continue; // Maybe it was erased in a thread, who knows.
+ }
+ Ref<PackedScene> ps = res;
+ if (ps.is_valid()) {
+ continue; // Do not save PackedScenes, this will mess up the editor.
+ }
+ ResourceSaver::save(res->get_path(), res, flg);
+ saved++;
+ }
+
return saved;
}
@@ -1720,7 +1711,7 @@ void EditorNode::_save_scene(String p_file, int idx) {
// We must update it, but also let the previous scene state go, as
// old version still work for referencing changes in instantiated or inherited scenes.
- sdata = Ref<PackedScene>(Object::cast_to<PackedScene>(ResourceCache::get(p_file)));
+ sdata = ResourceCache::get_ref(p_file);
if (sdata.is_valid()) {
sdata->recreate_state();
} else {
@@ -1792,6 +1783,10 @@ void EditorNode::save_scene_list(Vector<String> p_scene_filenames) {
void EditorNode::restart_editor() {
exiting = true;
+ if (editor_run.get_status() != EditorRun::STATUS_STOP) {
+ editor_run.stop();
+ }
+
String to_reopen;
if (get_tree()->get_edited_scene_root()) {
to_reopen = get_tree()->get_edited_scene_root()->get_scene_file_path();
@@ -2338,6 +2333,20 @@ void EditorNode::_run(bool p_current, const String &p_custom) {
return;
}
+ String write_movie_file;
+ if (write_movie_button->is_pressed()) {
+ if (p_current && get_tree()->get_edited_scene_root() && get_tree()->get_edited_scene_root()->has_meta("movie_file")) {
+ // If the scene file has a movie_file metadata set, use this as file. Quick workaround if you want to have multiple scenes that write to multiple movies.
+ write_movie_file = get_tree()->get_edited_scene_root()->get_meta("movie_file");
+ } else {
+ write_movie_file = GLOBAL_GET("editor/movie_writer/movie_file");
+ }
+ if (write_movie_file == String()) {
+ show_accept(TTR("Movie Maker mode is enabled, but no movie file path has been specified.\nA default movie file path can be specified in the project settings under the 'Editor/Movie Writer' category.\nAlternatively, for running single scenes, a 'movie_path' metadata can be added to the root node,\nspecifying the path to a movie file that will be used when recording that scene."), TTR("OK"));
+ return;
+ }
+ }
+
play_button->set_pressed(false);
play_button->set_icon(gui_base->get_theme_icon(SNAME("MainPlay"), SNAME("EditorIcons")));
play_scene_button->set_pressed(false);
@@ -2401,7 +2410,7 @@ void EditorNode::_run(bool p_current, const String &p_custom) {
}
EditorDebuggerNode::get_singleton()->start();
- Error error = editor_run.run(run_filename);
+ Error error = editor_run.run(run_filename, write_movie_file);
if (error != OK) {
EditorDebuggerNode::get_singleton()->stop();
show_accept(TTR("Could not start subprocess(es)!"), TTR("OK"));
@@ -2784,6 +2793,9 @@ void EditorNode::_menu_option_confirm(int p_option, bool p_confirmed) {
case RUN_SETTINGS: {
project_settings_editor->popup_project_settings();
} break;
+ case RUN_WRITE_MOVIE: {
+ _update_write_movie_icon();
+ } break;
case FILE_INSTALL_ANDROID_SOURCE: {
if (p_confirmed) {
export_template_manager->install_android_template();
@@ -3299,33 +3311,39 @@ void EditorNode::_update_addon_config() {
}
void EditorNode::set_addon_plugin_enabled(const String &p_addon, bool p_enabled, bool p_config_changed) {
- ERR_FAIL_COND(p_enabled && addon_name_to_plugin.has(p_addon));
- ERR_FAIL_COND(!p_enabled && !addon_name_to_plugin.has(p_addon));
+ String addon_path = p_addon;
+
+ if (!addon_path.begins_with("res://")) {
+ addon_path = "res://addons/" + addon_path + "/plugin.cfg";
+ }
+
+ ERR_FAIL_COND(p_enabled && addon_name_to_plugin.has(addon_path));
+ ERR_FAIL_COND(!p_enabled && !addon_name_to_plugin.has(addon_path));
if (!p_enabled) {
- EditorPlugin *addon = addon_name_to_plugin[p_addon];
+ EditorPlugin *addon = addon_name_to_plugin[addon_path];
remove_editor_plugin(addon, p_config_changed);
memdelete(addon);
- addon_name_to_plugin.erase(p_addon);
+ addon_name_to_plugin.erase(addon_path);
_update_addon_config();
return;
}
Ref<ConfigFile> cf;
cf.instantiate();
- if (!DirAccess::exists(p_addon.get_base_dir())) {
- _remove_plugin_from_enabled(p_addon);
- WARN_PRINT("Addon '" + p_addon + "' failed to load. No directory found. Removing from enabled plugins.");
+ if (!DirAccess::exists(addon_path.get_base_dir())) {
+ _remove_plugin_from_enabled(addon_path);
+ WARN_PRINT("Addon '" + addon_path + "' failed to load. No directory found. Removing from enabled plugins.");
return;
}
- Error err = cf->load(p_addon);
+ Error err = cf->load(addon_path);
if (err != OK) {
- show_warning(vformat(TTR("Unable to enable addon plugin at: '%s' parsing of config failed."), p_addon));
+ show_warning(vformat(TTR("Unable to enable addon plugin at: '%s' parsing of config failed."), addon_path));
return;
}
if (!cf->has_section_key("plugin", "script")) {
- show_warning(vformat(TTR("Unable to find script field for addon plugin at: '%s'."), p_addon));
+ show_warning(vformat(TTR("Unable to find script field for addon plugin at: '%s'."), addon_path));
return;
}
@@ -3334,7 +3352,7 @@ void EditorNode::set_addon_plugin_enabled(const String &p_addon, bool p_enabled,
// Only try to load the script if it has a name. Else, the plugin has no init script.
if (script_path.length() > 0) {
- script_path = p_addon.get_base_dir().plus_file(script_path);
+ script_path = addon_path.get_base_dir().plus_file(script_path);
script = ResourceLoader::load(script_path);
if (script.is_null()) {
@@ -3344,8 +3362,8 @@ void EditorNode::set_addon_plugin_enabled(const String &p_addon, bool p_enabled,
// Errors in the script cause the base_type to be an empty StringName.
if (script->get_instance_base_type() == StringName()) {
- show_warning(vformat(TTR("Unable to load addon script from path: '%s'. This might be due to a code error in that script.\nDisabling the addon at '%s' to prevent further errors."), script_path, p_addon));
- _remove_plugin_from_enabled(p_addon);
+ show_warning(vformat(TTR("Unable to load addon script from path: '%s'. This might be due to a code error in that script.\nDisabling the addon at '%s' to prevent further errors."), script_path, addon_path));
+ _remove_plugin_from_enabled(addon_path);
return;
}
@@ -3363,14 +3381,18 @@ void EditorNode::set_addon_plugin_enabled(const String &p_addon, bool p_enabled,
EditorPlugin *ep = memnew(EditorPlugin);
ep->set_script(script);
- addon_name_to_plugin[p_addon] = ep;
+ addon_name_to_plugin[addon_path] = ep;
add_editor_plugin(ep, p_config_changed);
_update_addon_config();
}
bool EditorNode::is_addon_plugin_enabled(const String &p_addon) const {
- return addon_name_to_plugin.has(p_addon);
+ if (p_addon.begins_with("res://")) {
+ return addon_name_to_plugin.has(p_addon);
+ }
+
+ return addon_name_to_plugin.has("res://addons/" + p_addon + "/plugin.cfg");
}
void EditorNode::_remove_edited_scene(bool p_change_tab) {
@@ -3681,7 +3703,7 @@ Error EditorNode::load_scene(const String &p_scene, bool p_ignore_broken_deps, b
if (ResourceCache::has(lpath)) {
// Used from somewhere else? No problem! Update state and replace sdata.
- Ref<PackedScene> ps = Ref<PackedScene>(Object::cast_to<PackedScene>(ResourceCache::get(lpath)));
+ Ref<PackedScene> ps = ResourceCache::get_ref(lpath);
if (ps.is_valid()) {
ps->replace_state(sdata->get_state());
ps->set_last_modified_time(sdata->get_last_modified_time());
@@ -4935,6 +4957,14 @@ String EditorNode::get_run_playing_scene() const {
return run_filename;
}
+void EditorNode::_update_write_movie_icon() {
+ if (write_movie_button->is_pressed()) {
+ write_movie_button->set_icon(gui_base->get_theme_icon(SNAME("MainMovieWriteEnabled"), SNAME("EditorIcons")));
+ } else {
+ write_movie_button->set_icon(gui_base->get_theme_icon(SNAME("MainMovieWrite"), SNAME("EditorIcons")));
+ }
+}
+
void EditorNode::_immediate_dialog_confirmed() {
immediate_dialog_confirmed = true;
}
@@ -5799,9 +5829,15 @@ static Node *_resource_get_edited_scene() {
return EditorNode::get_singleton()->get_edited_scene();
}
-void EditorNode::_print_handler(void *p_this, const String &p_string, bool p_error) {
+void EditorNode::_print_handler(void *p_this, const String &p_string, bool p_error, bool p_rich) {
EditorNode *en = static_cast<EditorNode *>(p_this);
- en->log->add_message(p_string, p_error ? EditorLog::MSG_TYPE_ERROR : EditorLog::MSG_TYPE_STD);
+ if (p_error) {
+ en->log->add_message(p_string, EditorLog::MSG_TYPE_ERROR);
+ } else if (p_rich) {
+ en->log->add_message(p_string, EditorLog::MSG_TYPE_STD_RICH);
+ } else {
+ en->log->add_message(p_string, EditorLog::MSG_TYPE_STD);
+ }
}
static void _execute_thread(void *p_ud) {
@@ -6690,6 +6726,23 @@ EditorNode::EditorNode() {
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"));
+ write_movie_button = memnew(Button);
+ write_movie_button->set_flat(true);
+ write_movie_button->set_toggle_mode(true);
+ play_hb->add_child(write_movie_button);
+ write_movie_button->set_pressed(false);
+ write_movie_button->set_icon(gui_base->get_theme_icon(SNAME("MainMovieWrite"), SNAME("EditorIcons")));
+ write_movie_button->set_focus_mode(Control::FOCUS_NONE);
+ write_movie_button->connect("pressed", callable_mp(this, &EditorNode::_menu_option), make_binds(RUN_WRITE_MOVIE));
+ write_movie_button->set_tooltip(TTR("Enable Movie Maker mode.\nThe project will run at stable FPS and the visual and audio output will be recorded to a video file."));
+ // Restore these values to something more useful so it ignores the theme
+ write_movie_button->add_theme_color_override("icon_normal_color", Color(1, 1, 1, 0.4));
+ write_movie_button->add_theme_color_override("icon_pressed_color", Color(1, 1, 1, 1));
+ write_movie_button->add_theme_color_override("icon_hover_color", Color(1.2, 1.2, 1.2, 0.4));
+ write_movie_button->add_theme_color_override("icon_hover_pressed_color", Color(1.2, 1.2, 1.2, 1));
+ write_movie_button->add_theme_color_override("icon_focus_color", Color(1, 1, 1, 1));
+ write_movie_button->add_theme_color_override("icon_disabled_color", Color(1, 1, 1, 0.4));
+
HBoxContainer *right_menu_hb = memnew(HBoxContainer);
menu_hb->add_child(right_menu_hb);
@@ -7040,7 +7093,6 @@ EditorNode::EditorNode() {
add_editor_plugin(VersionControlEditorPlugin::get_singleton());
add_editor_plugin(memnew(ShaderEditorPlugin));
add_editor_plugin(memnew(ShaderFileEditorPlugin));
- add_editor_plugin(memnew(VisualShaderEditorPlugin));
add_editor_plugin(memnew(Camera3DEditorPlugin));
add_editor_plugin(memnew(ThemeEditorPlugin));
diff --git a/editor/editor_node.h b/editor/editor_node.h
index 48df767562..c327a73ce9 100644
--- a/editor/editor_node.h
+++ b/editor/editor_node.h
@@ -173,6 +173,7 @@ private:
RUN_PLAY_CUSTOM_SCENE,
RUN_SETTINGS,
RUN_USER_DATA_FOLDER,
+ RUN_WRITE_MOVIE,
RELOAD_CURRENT_PROJECT,
RUN_PROJECT_MANAGER,
RUN_VCS_METADATA,
@@ -333,6 +334,7 @@ private:
Button *play_scene_button = nullptr;
Button *play_custom_scene_button = nullptr;
Button *search_button = nullptr;
+ Button *write_movie_button = nullptr;
TextureProgressBar *audio_vu = nullptr;
Timer *screenshot_timer = nullptr;
@@ -503,7 +505,7 @@ private:
static void _load_error_notify(void *p_ud, const String &p_text);
static void _file_access_close_error_notify(const String &p_str);
- static void _print_handler(void *p_this, const String &p_string, bool p_error);
+ static void _print_handler(void *p_this, const String &p_string, bool p_error, bool p_rich);
static void _resource_saved(Ref<Resource> p_resource, const String &p_path);
static void _resource_loaded(Ref<Resource> p_resource, const String &p_path);
@@ -667,7 +669,7 @@ private:
void _pick_main_scene_custom_action(const String &p_custom_action_name);
void _immediate_dialog_confirmed();
-
+ void _update_write_movie_icon();
void _select_default_main_screen_plugin();
void _bottom_panel_switch(bool p_enable, int p_idx);
diff --git a/editor/editor_properties.cpp b/editor/editor_properties.cpp
index a5c02c70d9..aff328bba7 100644
--- a/editor/editor_properties.cpp
+++ b/editor/editor_properties.cpp
@@ -43,6 +43,7 @@
#include "scene/main/window.h"
#include "scene/resources/font.h"
#include "scene/resources/mesh.h"
+#include "scene/resources/packed_scene.h"
///////////////////// Nil /////////////////////////
@@ -164,6 +165,9 @@ void EditorPropertyMultilineText::_notification(int p_what) {
Ref<Font> font = get_theme_font(SNAME("font"), SNAME("Label"));
int font_size = get_theme_font_size(SNAME("font_size"), SNAME("Label"));
text->set_custom_minimum_size(Vector2(0, font->get_height(font_size) * 6));
+ text->add_theme_font_override("font", get_theme_font("expression", "EditorFonts"));
+ text->add_theme_font_size_override("font_size", get_theme_font_size("expression_size", "EditorFonts"));
+
} break;
}
}
@@ -171,7 +175,7 @@ void EditorPropertyMultilineText::_notification(int p_what) {
void EditorPropertyMultilineText::_bind_methods() {
}
-EditorPropertyMultilineText::EditorPropertyMultilineText() {
+EditorPropertyMultilineText::EditorPropertyMultilineText(bool p_expression) {
HBoxContainer *hb = memnew(HBoxContainer);
hb->add_theme_constant_override("separation", 0);
add_child(hb);
@@ -188,6 +192,12 @@ EditorPropertyMultilineText::EditorPropertyMultilineText() {
hb->add_child(open_big_text);
big_text_dialog = nullptr;
big_text = nullptr;
+ if (p_expression) {
+ expression = true;
+ Ref<EditorStandardSyntaxHighlighter> highlighter;
+ highlighter.instantiate();
+ text->set_syntax_highlighter(highlighter);
+ }
}
///////////////////// TEXT ENUM /////////////////////////
@@ -3017,6 +3027,27 @@ void EditorPropertyNodePath::_set_read_only(bool p_read_only) {
clear->set_disabled(p_read_only);
};
+String EditorPropertyNodePath::_get_meta_pointer_property() const {
+ ERR_FAIL_COND_V(!pointer_mode, String());
+ return SceneState::get_meta_pointer_property(get_edited_property());
+}
+
+Variant EditorPropertyNodePath::_get_cache_value(const StringName &p_prop, bool &r_valid) const {
+ if (p_prop == get_edited_property()) {
+ r_valid = true;
+ return const_cast<EditorPropertyNodePath *>(this)->get_edited_object()->get(pointer_mode ? StringName(_get_meta_pointer_property()) : get_edited_property(), &r_valid);
+ }
+ return Variant();
+}
+
+StringName EditorPropertyNodePath::_get_revert_property() const {
+ if (pointer_mode) {
+ return _get_meta_pointer_property();
+ } else {
+ return get_edited_property();
+ }
+}
+
void EditorPropertyNodePath::_node_selected(const NodePath &p_path) {
NodePath path = p_path;
Node *base_node = nullptr;
@@ -3048,7 +3079,11 @@ void EditorPropertyNodePath::_node_selected(const NodePath &p_path) {
if (base_node) { // for AnimationTrackKeyEdit
path = base_node->get_path().rel_path_to(p_path);
}
- emit_changed(get_edited_property(), path);
+ if (pointer_mode && base_node) {
+ emit_changed(_get_meta_pointer_property(), path);
+ } else {
+ emit_changed(get_edited_property(), path);
+ }
update_property();
}
@@ -3064,7 +3099,11 @@ void EditorPropertyNodePath::_node_assign() {
}
void EditorPropertyNodePath::_node_clear() {
- emit_changed(get_edited_property(), NodePath());
+ if (pointer_mode) {
+ emit_changed(_get_meta_pointer_property(), NodePath());
+ } else {
+ emit_changed(get_edited_property(), NodePath());
+ }
update_property();
}
@@ -3092,7 +3131,12 @@ bool EditorPropertyNodePath::is_drop_valid(const Dictionary &p_drag_data) const
}
void EditorPropertyNodePath::update_property() {
- NodePath p = get_edited_object()->get(get_edited_property());
+ NodePath p;
+ if (pointer_mode) {
+ p = get_edited_object()->get(_get_meta_pointer_property());
+ } else {
+ p = get_edited_object()->get(get_edited_property());
+ }
assign->set_tooltip(p);
if (p == NodePath()) {
@@ -3131,7 +3175,8 @@ void EditorPropertyNodePath::update_property() {
assign->set_icon(EditorNode::get_singleton()->get_object_icon(target_node, "Node"));
}
-void EditorPropertyNodePath::setup(const NodePath &p_base_hint, Vector<StringName> p_valid_types, bool p_use_path_from_scene_root) {
+void EditorPropertyNodePath::setup(const NodePath &p_base_hint, Vector<StringName> p_valid_types, bool p_use_path_from_scene_root, bool p_pointer_mode) {
+ pointer_mode = p_pointer_mode;
base_hint = p_base_hint;
valid_types = p_valid_types;
use_path_from_scene_root = p_use_path_from_scene_root;
@@ -3601,7 +3646,7 @@ static EditorPropertyRangeHint _parse_range_hint(PropertyHint p_hint, const Stri
hint.greater = true;
} else if (slice == "or_lesser") {
hint.lesser = true;
- } else if (slice == "noslider") {
+ } else if (slice == "no_slider") {
hint.hide_slider = true;
} else if (slice == "exp") {
hint.exp_range = true;
@@ -3739,6 +3784,9 @@ EditorProperty *EditorInspectorDefaultPlugin::get_editor_for_property(Object *p_
} else if (p_hint == PROPERTY_HINT_MULTILINE_TEXT) {
EditorPropertyMultilineText *editor = memnew(EditorPropertyMultilineText);
return editor;
+ } else if (p_hint == PROPERTY_HINT_EXPRESSION) {
+ EditorPropertyMultilineText *editor = memnew(EditorPropertyMultilineText(true));
+ return editor;
} else if (p_hint == PROPERTY_HINT_TYPE_STRING) {
EditorPropertyClassName *editor = memnew(EditorPropertyClassName);
editor->setup("Object", p_hint_text);
@@ -3747,11 +3795,11 @@ EditorProperty *EditorInspectorDefaultPlugin::get_editor_for_property(Object *p_
EditorPropertyLocale *editor = memnew(EditorPropertyLocale);
editor->setup(p_hint_text);
return editor;
- } else if (p_hint == PROPERTY_HINT_DIR || p_hint == PROPERTY_HINT_FILE || p_hint == PROPERTY_HINT_SAVE_FILE || p_hint == PROPERTY_HINT_GLOBAL_DIR || p_hint == PROPERTY_HINT_GLOBAL_FILE) {
+ } else if (p_hint == PROPERTY_HINT_DIR || p_hint == PROPERTY_HINT_FILE || p_hint == PROPERTY_HINT_SAVE_FILE || p_hint == PROPERTY_HINT_GLOBAL_SAVE_FILE || p_hint == PROPERTY_HINT_GLOBAL_DIR || p_hint == PROPERTY_HINT_GLOBAL_FILE) {
Vector<String> extensions = p_hint_text.split(",");
- bool global = p_hint == PROPERTY_HINT_GLOBAL_DIR || p_hint == PROPERTY_HINT_GLOBAL_FILE;
+ bool global = p_hint == PROPERTY_HINT_GLOBAL_DIR || p_hint == PROPERTY_HINT_GLOBAL_FILE || p_hint == PROPERTY_HINT_GLOBAL_SAVE_FILE;
bool folder = p_hint == PROPERTY_HINT_DIR || p_hint == PROPERTY_HINT_GLOBAL_DIR;
- bool save = p_hint == PROPERTY_HINT_SAVE_FILE;
+ bool save = p_hint == PROPERTY_HINT_SAVE_FILE || p_hint == PROPERTY_HINT_GLOBAL_SAVE_FILE;
EditorPropertyPath *editor = memnew(EditorPropertyPath);
editor->setup(extensions, folder, global);
if (save) {
@@ -3927,23 +3975,31 @@ EditorProperty *EditorInspectorDefaultPlugin::get_editor_for_property(Object *p_
return editor;
} break;
case Variant::OBJECT: {
- EditorPropertyResource *editor = memnew(EditorPropertyResource);
- editor->setup(p_object, p_path, p_hint == PROPERTY_HINT_RESOURCE_TYPE ? p_hint_text : "Resource");
-
- if (p_hint == PROPERTY_HINT_RESOURCE_TYPE) {
- String open_in_new = EDITOR_GET("interface/inspector/resources_to_open_in_new_inspector");
- for (int i = 0; i < open_in_new.get_slice_count(","); i++) {
- String type = open_in_new.get_slicec(',', i).strip_edges();
- for (int j = 0; j < p_hint_text.get_slice_count(","); j++) {
- String inherits = p_hint_text.get_slicec(',', j);
- if (ClassDB::is_parent_class(inherits, type)) {
- editor->set_use_sub_inspector(false);
+ if (p_hint == PROPERTY_HINT_NODE_TYPE) {
+ EditorPropertyNodePath *editor = memnew(EditorPropertyNodePath);
+ Vector<String> types = p_hint_text.split(",", false);
+ Vector<StringName> sn = Variant(types); //convert via variant
+ editor->setup(NodePath(), sn, false, true);
+ return editor;
+ } else {
+ EditorPropertyResource *editor = memnew(EditorPropertyResource);
+ editor->setup(p_object, p_path, p_hint == PROPERTY_HINT_RESOURCE_TYPE ? p_hint_text : "Resource");
+
+ if (p_hint == PROPERTY_HINT_RESOURCE_TYPE) {
+ String open_in_new = EDITOR_GET("interface/inspector/resources_to_open_in_new_inspector");
+ for (int i = 0; i < open_in_new.get_slice_count(","); i++) {
+ String type = open_in_new.get_slicec(',', i).strip_edges();
+ for (int j = 0; j < p_hint_text.get_slice_count(","); j++) {
+ String inherits = p_hint_text.get_slicec(',', j);
+ if (ClassDB::is_parent_class(inherits, type)) {
+ editor->set_use_sub_inspector(false);
+ }
}
}
}
- }
- return editor;
+ return editor;
+ }
} break;
case Variant::DICTIONARY: {
diff --git a/editor/editor_properties.h b/editor/editor_properties.h
index a3b98b7724..7cd6ea4f6b 100644
--- a/editor/editor_properties.h
+++ b/editor/editor_properties.h
@@ -81,6 +81,7 @@ class EditorPropertyMultilineText : public EditorProperty {
void _big_text_changed();
void _text_changed();
void _open_big_text();
+ bool expression = false;
protected:
virtual void _set_read_only(bool p_read_only) override;
@@ -89,7 +90,7 @@ protected:
public:
virtual void update_property() override;
- EditorPropertyMultilineText();
+ EditorPropertyMultilineText(bool p_expression = false);
};
class EditorPropertyTextEnum : public EditorProperty {
@@ -704,6 +705,7 @@ class EditorPropertyNodePath : public EditorProperty {
SceneTreeDialog *scene_tree = nullptr;
NodePath base_hint;
bool use_path_from_scene_root = false;
+ bool pointer_mode = false;
Vector<StringName> valid_types;
void _node_selected(const NodePath &p_path);
@@ -714,6 +716,10 @@ class EditorPropertyNodePath : public EditorProperty {
void drop_data_fw(const Point2 &p_point, const Variant &p_data, Control *p_from);
bool is_drop_valid(const Dictionary &p_drag_data) const;
+ String _get_meta_pointer_property() const;
+ virtual Variant _get_cache_value(const StringName &p_prop, bool &r_valid) const override;
+ virtual StringName _get_revert_property() const override;
+
protected:
virtual void _set_read_only(bool p_read_only) override;
static void _bind_methods();
@@ -721,7 +727,7 @@ protected:
public:
virtual void update_property() override;
- void setup(const NodePath &p_base_hint, Vector<StringName> p_valid_types, bool p_use_path_from_scene_root = true);
+ void setup(const NodePath &p_base_hint, Vector<StringName> p_valid_types, bool p_use_path_from_scene_root = true, bool p_pointer_mode = false);
EditorPropertyNodePath();
};
diff --git a/editor/editor_property_name_processor.cpp b/editor/editor_property_name_processor.cpp
index 397afc0653..09d2992e07 100644
--- a/editor/editor_property_name_processor.cpp
+++ b/editor/editor_property_name_processor.cpp
@@ -176,6 +176,7 @@ EditorPropertyNameProcessor::EditorPropertyNameProcessor() {
capitalize_string_remaps["lowpass"] = "Low-pass";
capitalize_string_remaps["macos"] = "macOS";
capitalize_string_remaps["mb"] = "(MB)"; // Unit.
+ capitalize_string_remaps["mjpeg"] = "MJPEG";
capitalize_string_remaps["mms"] = "MMS";
capitalize_string_remaps["ms"] = "(ms)"; // Unit
capitalize_string_remaps["msaa"] = "MSAA";
diff --git a/editor/editor_run.cpp b/editor/editor_run.cpp
index 0035e5e915..ba49c6dc5f 100644
--- a/editor/editor_run.cpp
+++ b/editor/editor_run.cpp
@@ -43,7 +43,7 @@ String EditorRun::get_running_scene() const {
return running_scene;
}
-Error EditorRun::run(const String &p_scene) {
+Error EditorRun::run(const String &p_scene, const String &p_write_movie) {
List<String> args;
String resource_path = ProjectSettings::get_singleton()->get_resource_path();
@@ -73,6 +73,16 @@ Error EditorRun::run(const String &p_scene) {
args.push_back("--debug-navigation");
}
+ if (p_write_movie != "") {
+ args.push_back("--write-movie");
+ args.push_back(p_write_movie);
+ args.push_back("--fixed-fps");
+ args.push_back(itos(GLOBAL_GET("editor/movie_writer/fps")));
+ if (bool(GLOBAL_GET("editor/movie_writer/disable_vsync"))) {
+ args.push_back("--disable-vsync");
+ }
+ }
+
int screen = EditorSettings::get_singleton()->get("run/window_placement/screen");
if (screen == 0) {
// Same as editor
diff --git a/editor/editor_run.h b/editor/editor_run.h
index 50604ff032..4cbc6838e4 100644
--- a/editor/editor_run.h
+++ b/editor/editor_run.h
@@ -50,7 +50,7 @@ private:
public:
Status get_status() const;
String get_running_scene() const;
- Error run(const String &p_scene);
+ Error run(const String &p_scene, const String &p_write_movie = "");
void run_native_notify() { status = STATUS_PLAY; }
void stop();
diff --git a/editor/editor_settings.cpp b/editor/editor_settings.cpp
index db9193db06..ad9c547693 100644
--- a/editor/editor_settings.cpp
+++ b/editor/editor_settings.cpp
@@ -542,6 +542,7 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) {
_initial_set("text_editor/behavior/navigation/scroll_past_end_of_file", false);
_initial_set("text_editor/behavior/navigation/smooth_scrolling", true);
EDITOR_SETTING(Variant::INT, PROPERTY_HINT_RANGE, "text_editor/behavior/navigation/v_scroll_speed", 80, "1,10000,1")
+ _initial_set("text_editor/behavior/navigation/drag_and_drop_selection", true);
// Behavior: Indent
EDITOR_SETTING(Variant::INT, PROPERTY_HINT_ENUM, "text_editor/behavior/indent/type", 0, "Tabs,Spaces")
diff --git a/editor/editor_spin_slider.cpp b/editor/editor_spin_slider.cpp
index a0c818ba84..f23f0cf758 100644
--- a/editor/editor_spin_slider.cpp
+++ b/editor/editor_spin_slider.cpp
@@ -530,7 +530,7 @@ void EditorSpinSlider::_evaluate_input_text() {
return;
}
- Variant v = expr->execute(Array(), nullptr, false);
+ Variant v = expr->execute(Array(), nullptr, false, true);
if (v.get_type() == Variant::NIL) {
return;
}
diff --git a/editor/editor_themes.cpp b/editor/editor_themes.cpp
index 7a80cf36a8..10412eac41 100644
--- a/editor/editor_themes.cpp
+++ b/editor/editor_themes.cpp
@@ -464,6 +464,7 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) {
Color icon_hover_color = icon_normal_color * (dark_theme ? 1.15 : 1.45);
icon_hover_color.a = 1.0;
Color icon_focus_color = icon_hover_color;
+ Color icon_disabled_color = Color(icon_normal_color, 0.4);
// Make the pressed icon color overbright because icons are not completely white on a dark theme.
// On a light theme, icons are dark, so we need to modulate them with an even brighter color.
Color icon_pressed_color = accent_color * (dark_theme ? 1.15 : 3.5);
@@ -738,10 +739,12 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) {
theme->set_color("font_focus_color", "Button", font_focus_color);
theme->set_color("font_pressed_color", "Button", accent_color);
theme->set_color("font_disabled_color", "Button", font_disabled_color);
+
theme->set_color("icon_normal_color", "Button", icon_normal_color);
theme->set_color("icon_hover_color", "Button", icon_hover_color);
theme->set_color("icon_focus_color", "Button", icon_focus_color);
theme->set_color("icon_pressed_color", "Button", icon_pressed_color);
+ theme->set_color("icon_disabled_color", "Button", icon_disabled_color);
const float ACTION_BUTTON_EXTRA_MARGIN = 32 * EDSCALE;
@@ -768,7 +771,7 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) {
// When pressed, don't tint the icons with the accent color, just leave them normal.
theme->set_color("icon_pressed_color", "EditorLogFilterButton", icon_normal_color);
// When unpressed, dim the icons.
- theme->set_color("icon_normal_color", "EditorLogFilterButton", font_disabled_color);
+ theme->set_color("icon_normal_color", "EditorLogFilterButton", icon_disabled_color);
// When pressed, add a small bottom border to the buttons to better show their active state,
// similar to active tabs.
Ref<StyleBoxFlat> editor_log_button_pressed = style_widget_pressed->duplicate();
@@ -805,8 +808,13 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) {
theme->set_color("font_focus_color", "OptionButton", font_focus_color);
theme->set_color("font_pressed_color", "OptionButton", accent_color);
theme->set_color("font_disabled_color", "OptionButton", font_disabled_color);
+
+ theme->set_color("icon_normal_color", "OptionButton", icon_normal_color);
theme->set_color("icon_hover_color", "OptionButton", icon_hover_color);
theme->set_color("icon_focus_color", "OptionButton", icon_focus_color);
+ theme->set_color("icon_pressed_color", "OptionButton", icon_pressed_color);
+ theme->set_color("icon_disabled_color", "OptionButton", icon_disabled_color);
+
theme->set_icon("arrow", "OptionButton", theme->get_icon(SNAME("GuiOptionArrow"), SNAME("EditorIcons")));
theme->set_constant("arrow_margin", "OptionButton", widget_default_margin.x - 2 * EDSCALE);
theme->set_constant("modulate_arrow", "OptionButton", true);
@@ -833,8 +841,12 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) {
theme->set_color("font_focus_color", "CheckButton", font_focus_color);
theme->set_color("font_pressed_color", "CheckButton", accent_color);
theme->set_color("font_disabled_color", "CheckButton", font_disabled_color);
+
+ theme->set_color("icon_normal_color", "CheckButton", icon_normal_color);
theme->set_color("icon_hover_color", "CheckButton", icon_hover_color);
theme->set_color("icon_focus_color", "CheckButton", icon_focus_color);
+ theme->set_color("icon_pressed_color", "CheckButton", icon_pressed_color);
+ theme->set_color("icon_disabled_color", "CheckButton", icon_disabled_color);
theme->set_constant("h_separation", "CheckButton", 8 * EDSCALE);
theme->set_constant("check_v_adjust", "CheckButton", 0 * EDSCALE);
@@ -864,8 +876,12 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) {
theme->set_color("font_focus_color", "CheckBox", font_focus_color);
theme->set_color("font_pressed_color", "CheckBox", accent_color);
theme->set_color("font_disabled_color", "CheckBox", font_disabled_color);
+
+ theme->set_color("icon_normal_color", "CheckBox", icon_normal_color);
theme->set_color("icon_hover_color", "CheckBox", icon_hover_color);
theme->set_color("icon_focus_color", "CheckBox", icon_focus_color);
+ theme->set_color("icon_pressed_color", "CheckBox", icon_pressed_color);
+ theme->set_color("icon_disabled_color", "CheckBox", icon_disabled_color);
theme->set_constant("h_separation", "CheckBox", 8 * EDSCALE);
theme->set_constant("check_v_adjust", "CheckBox", 0 * EDSCALE);
diff --git a/editor/filesystem_dock.cpp b/editor/filesystem_dock.cpp
index 3dd0044ab9..2d6ec0c63a 100644
--- a/editor/filesystem_dock.cpp
+++ b/editor/filesystem_dock.cpp
@@ -43,6 +43,7 @@
#include "editor/editor_scale.h"
#include "editor/editor_settings.h"
#include "editor/import_dock.h"
+#include "editor/scene_create_dialog.h"
#include "editor/scene_tree_dock.h"
#include "editor/shader_create_dialog.h"
#include "scene/gui/label.h"
@@ -1469,44 +1470,12 @@ void FileSystemDock::_make_dir_confirm() {
}
void FileSystemDock::_make_scene_confirm() {
- String scene_name = make_scene_dialog_text->get_text().strip_edges();
-
- if (scene_name.length() == 0) {
- EditorNode::get_singleton()->show_warning(TTR("No name provided."));
- return;
- }
-
- String directory = path;
- if (!directory.ends_with("/")) {
- directory = directory.get_base_dir();
- }
-
- String extension = scene_name.get_extension();
- List<String> extensions;
- Ref<PackedScene> sd = memnew(PackedScene);
- ResourceSaver::get_recognized_extensions(sd, &extensions);
-
- bool extension_correct = false;
- for (const String &E : extensions) {
- if (E == extension) {
- extension_correct = true;
- break;
- }
- }
- if (!extension_correct) {
- scene_name = scene_name.get_basename() + ".tscn";
- }
-
- scene_name = directory.plus_file(scene_name);
-
- Ref<DirAccess> da = DirAccess::create(DirAccess::ACCESS_RESOURCES);
- if (da->file_exists(scene_name)) {
- EditorNode::get_singleton()->show_warning(TTR("A file or folder with this name already exists."));
- return;
- }
+ const String scene_path = make_scene_dialog->get_scene_path();
int idx = EditorNode::get_singleton()->new_scene();
- EditorNode::get_singleton()->get_editor_data().set_scene_path(idx, scene_name);
+ EditorNode::get_singleton()->get_editor_data().set_scene_path(idx, scene_path);
+ EditorNode::get_singleton()->set_edited_scene(make_scene_dialog->create_scene_root());
+ EditorNode::get_singleton()->save_scene_list({ scene_path });
}
void FileSystemDock::_file_removed(String p_file) {
@@ -2003,10 +1972,12 @@ void FileSystemDock::_file_option(int p_option, const Vector<String> &p_selected
} break;
case FILE_NEW_SCENE: {
- make_scene_dialog_text->set_text("new scene");
- make_scene_dialog_text->select_all();
- make_scene_dialog->popup_centered(Size2(250, 80) * EDSCALE);
- make_scene_dialog_text->grab_focus();
+ String directory = path;
+ if (!directory.ends_with("/")) {
+ directory = directory.get_base_dir();
+ }
+ make_scene_dialog->config(directory);
+ make_scene_dialog->popup_centered();
} break;
case FILE_NEW_SCRIPT: {
@@ -3216,15 +3187,8 @@ FileSystemDock::FileSystemDock() {
make_dir_dialog->register_text_enter(make_dir_dialog_text);
make_dir_dialog->connect("confirmed", callable_mp(this, &FileSystemDock::_make_dir_confirm));
- make_scene_dialog = memnew(ConfirmationDialog);
- make_scene_dialog->set_title(TTR("Create Scene"));
- VBoxContainer *make_scene_dialog_vb = memnew(VBoxContainer);
- make_scene_dialog->add_child(make_scene_dialog_vb);
-
- make_scene_dialog_text = memnew(LineEdit);
- make_scene_dialog_vb->add_margin_child(TTR("Name:"), make_scene_dialog_text);
+ make_scene_dialog = memnew(SceneCreateDialog);
add_child(make_scene_dialog);
- make_scene_dialog->register_text_enter(make_scene_dialog_text);
make_scene_dialog->connect("confirmed", callable_mp(this, &FileSystemDock::_make_scene_confirm));
make_script_dialog = memnew(ScriptCreateDialog);
diff --git a/editor/filesystem_dock.h b/editor/filesystem_dock.h
index f20c0b2f76..f73e076ac0 100644
--- a/editor/filesystem_dock.h
+++ b/editor/filesystem_dock.h
@@ -47,6 +47,7 @@
#include "scene/gui/split_container.h"
#include "scene/gui/tree.h"
+class SceneCreateDialog;
class ShaderCreateDialog;
class FileSystemDock : public VBoxContainer {
@@ -148,9 +149,8 @@ private:
LineEdit *duplicate_dialog_text = nullptr;
ConfirmationDialog *make_dir_dialog = nullptr;
LineEdit *make_dir_dialog_text = nullptr;
- ConfirmationDialog *make_scene_dialog = nullptr;
- LineEdit *make_scene_dialog_text = nullptr;
ConfirmationDialog *overwrite_dialog = nullptr;
+ SceneCreateDialog *make_scene_dialog = nullptr;
ScriptCreateDialog *make_script_dialog = nullptr;
ShaderCreateDialog *make_shader_dialog = nullptr;
CreateDialog *new_resource_dialog = nullptr;
diff --git a/editor/groups_editor.cpp b/editor/groups_editor.cpp
index f3129db65e..5dc81f623d 100644
--- a/editor/groups_editor.cpp
+++ b/editor/groups_editor.cpp
@@ -559,7 +559,7 @@ GroupDialog::GroupDialog() {
group_empty->set_text(TTR("Empty groups will be automatically removed."));
group_empty->set_vertical_alignment(VERTICAL_ALIGNMENT_CENTER);
group_empty->set_horizontal_alignment(HORIZONTAL_ALIGNMENT_CENTER);
- group_empty->set_autowrap_mode(Label::AUTOWRAP_WORD_SMART);
+ group_empty->set_autowrap_mode(TextServer::AUTOWRAP_WORD_SMART);
group_empty->set_custom_minimum_size(Size2(100 * EDSCALE, 0));
nodes_to_remove->add_child(group_empty);
group_empty->set_anchors_and_offsets_preset(Control::PRESET_WIDE, Control::PRESET_MODE_KEEP_SIZE, 8 * EDSCALE);
diff --git a/editor/icons/BaseButton.svg b/editor/icons/BaseButton.svg
new file mode 100644
index 0000000000..9aa0ae1c07
--- /dev/null
+++ b/editor/icons/BaseButton.svg
@@ -0,0 +1 @@
+<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m5.5 9c-.831 0-1.5.669-1.5 1.5v1.5h-2v2h12v-2h-2v-1.5c0-.831-.669-1.5-1.5-1.5z" fill="#8eef97"/></svg>
diff --git a/editor/icons/GeometryInstance3D.svg b/editor/icons/GeometryInstance3D.svg
new file mode 100644
index 0000000000..759d5fe413
--- /dev/null
+++ b/editor/icons/GeometryInstance3D.svg
@@ -0,0 +1 @@
+<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m3 1a2 2 0 0 0 -2 2 2 2 0 0 0 1 1.7304688v6.5410152a2 2 0 0 0 -1 1.728516 2 2 0 0 0 2 2 2 2 0 0 0 1.7304688-1h6.5410152a2 2 0 0 0 1.728516 1 2 2 0 0 0 2-2 2 2 0 0 0 -1.03125-1.75h.03125v-6.5214844a2 2 0 0 0 1-1.7285156 2 2 0 0 0 -2-2 2 2 0 0 0 -1.730469 1h-6.5410154a2 2 0 0 0 -1.7285156-1zm1 3h1.4140625 3.5859375 2.271484a2 2 0 0 0 .728516.7304688v1.2695312 4.585938 1.414062h-1.414062-4.585938-1.2714844a2 2 0 0 0 -.7285156-.730469v-3.269531-2.5859375z" fill="#fc7f7f"/></svg>
diff --git a/editor/icons/ImporterMeshInstance3D.svg b/editor/icons/ImporterMeshInstance3D.svg
new file mode 100644
index 0000000000..7e7598ac2b
--- /dev/null
+++ b/editor/icons/ImporterMeshInstance3D.svg
@@ -0,0 +1 @@
+<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#fc7f7f"><path d="m3 1a2 2 0 0 0 -2 2 2 2 0 0 0 1 1.7304688v6.5410152a2 2 0 0 0 -1 1.728516 2 2 0 0 0 2 2 2 2 0 0 0 1.7304688-1h6.5410152a2 2 0 0 0 1.728516 1 2 2 0 0 0 2-2 2 2 0 0 0 -1.03125-1.75h.03125v-6.5214844a2 2 0 0 0 1-1.7285156 2 2 0 0 0 -2-2 2 2 0 0 0 -1.730469 1h-6.5410154a2 2 0 0 0 -1.7285156-1zm1 3h1.4140625 3.5859375 2.271484a2 2 0 0 0 .728516.7304688v1.2695312 4.585938 1.414062h-1.414062-4.585938-1.2714844a2 2 0 0 0 -.7285156-.730469v-3.269531-2.5859375z"/><path d="m7 7h2v4h-2z"/><path d="m7 5h2v1h-2z"/></g></svg>
diff --git a/editor/icons/MainMovieWrite.svg b/editor/icons/MainMovieWrite.svg
new file mode 100644
index 0000000000..21464bb57c
--- /dev/null
+++ b/editor/icons/MainMovieWrite.svg
@@ -0,0 +1 @@
+<svg height="16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M8 2a6 6 0 0 0-6 6 6 6 0 0 0 6 6 6 6 0 0 0 4-1.535V14h.002a2 2 0 0 0 .266 1A2 2 0 0 0 14 16h1v-2h-.5a.5.5 0 0 1-.5-.5V8a6 6 0 0 0-6-6zm0 1a1 1 0 0 1 1 1 1 1 0 0 1-1 1 1 1 0 0 1-1-1 1 1 0 0 1 1-1zm3.441 2a1 1 0 0 1 .89.5 1 1 0 0 1-.366 1.365 1 1 0 0 1-1.367-.365 1 1 0 0 1 .367-1.365A1 1 0 0 1 11.44 5zm-6.953.002a1 1 0 0 1 .547.133A1 1 0 0 1 5.402 6.5a1 1 0 0 1-1.367.365A1 1 0 0 1 3.67 5.5a1 1 0 0 1 .818-.498zM4.512 9a1 1 0 0 1 .89.5 1 1 0 0 1-.367 1.365A1 1 0 0 1 3.67 10.5a1 1 0 0 1 .365-1.365A1 1 0 0 1 4.512 9zm6.904.002a1 1 0 0 1 .549.133 1 1 0 0 1 .365 1.365 1 1 0 0 1-1.365.365 1 1 0 0 1-.367-1.365 1 1 0 0 1 .818-.498zM8 11a1 1 0 0 1 1 1 1 1 0 0 1-1 1 1 1 0 0 1-1-1 1 1 0 0 1 1-1z" fill="#e0e0e0"/></svg>
diff --git a/editor/icons/MainMovieWriteEnabled.svg b/editor/icons/MainMovieWriteEnabled.svg
new file mode 100644
index 0000000000..b12ea38bed
--- /dev/null
+++ b/editor/icons/MainMovieWriteEnabled.svg
@@ -0,0 +1 @@
+<svg height="16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M8 2a6 6 0 0 0-6 6 6 6 0 0 0 6 6 6 6 0 0 0 4-1.535V14h.002a2 2 0 0 0 .266 1A2 2 0 0 0 14 16h1v-2h-.5a.5.5 0 0 1-.5-.5V8a6 6 0 0 0-6-6zm0 1a1 1 0 0 1 1 1 1 1 0 0 1-1 1 1 1 0 0 1-1-1 1 1 0 0 1 1-1zm3.441 2a1 1 0 0 1 .89.5 1 1 0 0 1-.366 1.365 1 1 0 0 1-1.367-.365 1 1 0 0 1 .367-1.365A1 1 0 0 1 11.44 5zm-6.953.002a1 1 0 0 1 .547.133A1 1 0 0 1 5.402 6.5a1 1 0 0 1-1.367.365A1 1 0 0 1 3.67 5.5a1 1 0 0 1 .818-.498zM4.512 9a1 1 0 0 1 .89.5 1 1 0 0 1-.367 1.365A1 1 0 0 1 3.67 10.5a1 1 0 0 1 .365-1.365A1 1 0 0 1 4.512 9zm6.904.002a1 1 0 0 1 .549.133 1 1 0 0 1 .365 1.365 1 1 0 0 1-1.365.365 1 1 0 0 1-.367-1.365 1 1 0 0 1 .818-.498zM8 11a1 1 0 0 1 1 1 1 1 0 0 1-1 1 1 1 0 0 1-1-1 1 1 0 0 1 1-1z" fill="#e0e0e0" style="fill:#ee5353;fill-opacity:1"/></svg>
diff --git a/editor/icons/MultiplayerSpawner.svg b/editor/icons/MultiplayerSpawner.svg
new file mode 100644
index 0000000000..68ffd3aab4
--- /dev/null
+++ b/editor/icons/MultiplayerSpawner.svg
@@ -0,0 +1 @@
+<svg height="16" width="16" xmlns="http://www.w3.org/2000/svg"><path style="fill:none;fill-opacity:.996078;stroke:#e0e0e0;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16.5;stroke-opacity:1;paint-order:stroke markers fill" d="M4.936 7.429A4 4 0 0 1 8 6a4 4 0 0 1 3.064 1.429M1.872 4.858A8 8 0 0 1 8 2a8 8 0 0 1 6.128 2.858"/><path d="M7 9v2H5v2h2v2h2v-2h2v-2H9V9Z" fill="#5fff97"/></svg>
diff --git a/editor/icons/MultiplayerSynchronizer.svg b/editor/icons/MultiplayerSynchronizer.svg
new file mode 100644
index 0000000000..1547ec5a2b
--- /dev/null
+++ b/editor/icons/MultiplayerSynchronizer.svg
@@ -0,0 +1 @@
+<svg height="16" width="16" xmlns="http://www.w3.org/2000/svg"><path style="fill:#5fff97;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers" d="M5 10h3l-2 4-2-4Z"/><path style="fill:#ff5f5f;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers" d="M9 14h3l-2-4-2 4Z"/><path style="fill:none;fill-opacity:.996078;stroke:#e0e0e0;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16.5;stroke-opacity:1;paint-order:stroke markers fill" d="M4.936 7.429A4 4 0 0 1 8 6a4 4 0 0 1 3.064 1.429M1.872 4.858A8 8 0 0 1 8 2a8 8 0 0 1 6.128 2.858"/></svg>
diff --git a/editor/icons/NavigationAgent2D.svg b/editor/icons/NavigationAgent2D.svg
index 3f1d571a7e..05aeb95e12 100644
--- a/editor/icons/NavigationAgent2D.svg
+++ b/editor/icons/NavigationAgent2D.svg
@@ -1 +1 @@
-<svg clip-rule="evenodd" fill-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="m8 1c-3 0-5 2-5 5s3 6 5 9c2-3 5.007-6.03 5-9 0-3-2-5-5-5zm0 2.5c1.371 0 2.5 1.129 2.5 2.5s-1.129 2.5-2.5 2.5-2.5-1.129-2.5-2.5 1.129-2.5 2.5-2.5z" fill="#e0e0e0" fill-rule="nonzero"/></svg>
+<svg clip-rule="evenodd" fill-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="m8 1v2.5c1.371 0 2.5 1.129 2.5 2.5s-1.129 2.5-2.5 2.5v6.5c2-3 5.007-6.03 5-9 0-3-2-5-5-5z" fill="#8da5f3" fill-opacity=".988235"/><path d="m8 1c-3 0-5 2-5 5s3 6 5 9v-6.5c-1.371 0-2.5-1.129-2.5-2.5s1.129-2.5 2.5-2.5z" fill="#e0e0e0"/></svg>
diff --git a/editor/icons/NavigationAgent3D.svg b/editor/icons/NavigationAgent3D.svg
index 947b2129c3..5a2d8b3489 100644
--- a/editor/icons/NavigationAgent3D.svg
+++ b/editor/icons/NavigationAgent3D.svg
@@ -1 +1 @@
-<svg clip-rule="evenodd" fill-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><g fill-rule="nonzero"><path d="m9 1c-1.371 0-2.308.429-2.939 1.074-.668.663-1.34 1.324-2.01 1.985-.046 1.741.757 4.327 2.365 4.843.178.317.384.649.584.977v5.121l2-2c2-3 4-6 4-8s-1-4-4-4z" fill="#fff" fill-opacity=".39"/><path d="m7 3c-3 0-4 2-4 4s2 5 4 8c2-3 4-6 4-8s-1-4-4-4zm0 2c1.097 0 2 .903 2 2s-.903 2-2 2-2-.903-2-2 .903-2 2-2z" fill="#e0e0e0"/></g></svg>
+<svg clip-rule="evenodd" fill-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><g fill-rule="nonzero"><path d="m8 1.0859375c-.8454344.1560829-1.4755929.5141293-1.9394531.9882813-.668.663-1.3397656 1.323375-2.0097657 1.984375-.046 1.7409999.7572344 4.32775 2.3652344 4.84375.178.317.3839844.6485624.5839844.9765624v5.1210938l1-1z" fill="#e0e0e0" fill-opacity=".501961"/><path d="m7 3c-3 0-4 2-4 4s2 5 4 8c.3378629-.506794.671779-1.011698 1-1.513672v-4.7597655c-.2952789.1727801-.6361816.2734375-1 .2734375-1.097 0-2-.903-2-2s.903-2 2-2c.3638184 0 .7047211.1006574 1 .2734375v-2.1894531c-.3055959-.054762-.6378835-.0839844-1-.0839844z" fill="#e0e0e0"/><g fill="#fc7f7f"><path d="m9 1c-.3631515 0-.6953702.0296972-1 .0859375v12.9140625l1-1c2-3 4-6 4-8s-1-4-4-4z" fill-opacity=".501961"/><path d="m8 3.0839844v2.1894531c.5950581.3481936 1 .9933809 1 1.7265625s-.4049419 1.3783689-1 1.7265625v4.7597655c1.6147033-2.469489 3-4.8241909 3-6.486328 0-1.758589-.773848-3.5170952-3-3.9160156z"/></g></g></svg>
diff --git a/editor/icons/NavigationObstacle2D.svg b/editor/icons/NavigationObstacle2D.svg
index 8fcb5617dd..a5073898f4 100644
--- a/editor/icons/NavigationObstacle2D.svg
+++ b/editor/icons/NavigationObstacle2D.svg
@@ -1 +1 @@
-<svg clip-rule="evenodd" fill-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="m8 .875c-.625 0-1.25.375-1.5 1.125l-3 10h9l-3-10c-.25-.75-.875-1.125-1.5-1.125zm-1.5 4.125h3l1 4h-5zm-4.5 8c-1 0-1 2 0 2h12c1 0 1-2 0-2z" fill="#e0e0e0" fill-rule="nonzero"/></svg>
+<svg clip-rule="evenodd" fill-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="m8 .875c-.625 0-1.25.375-1.5 1.125l-3 10h4.5v-3h-2.5l1-4h1.5zm-6 12.125c-1 0-1 2 0 2h6v-2z" fill="#e0e0e0"/><path d="m8 .875v4.125h1.5l1 4h-2.5v3h4.5l-3-10c-.25-.75-.875-1.125-1.5-1.125zm0 12.125v2h6c1 0 1-2 0-2z" fill="#8da5f3" fill-opacity=".988235"/></svg>
diff --git a/editor/icons/NavigationObstacle3D.svg b/editor/icons/NavigationObstacle3D.svg
index c5e58eebf7..d8ccd3a646 100644
--- a/editor/icons/NavigationObstacle3D.svg
+++ b/editor/icons/NavigationObstacle3D.svg
@@ -1 +1 @@
-<svg clip-rule="evenodd" fill-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><g fill-rule="nonzero"><path d="m4.607 8.379c-1.798.928-3.607 2.072-3.607 2.621 0 1 6 4 7 4s7-3 7-4c0-.549-1.809-1.693-3.607-2.621l.607 1.621c2 4-10 4-8 0z" fill="#fff" fill-opacity=".39"/><path d="m8 .875c-.375 0-.75.375-1 1.125l-3 8c-2 4 10 4 8 0l-3-8c-.25-.75-.625-1.125-1-1.125zm-1.5 4.125c1 .5 2 .5 3 0l1 3.5c-1.5 1-3.5 1-5 0z" fill="#e0e0e0"/></g></svg>
+<svg clip-rule="evenodd" fill-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><g fill-rule="nonzero"><path d="m4.6074219 8.3789062c-1.798.9280001-3.6074219 2.0720938-3.6074219 2.6210938 0 1 6 4 7 4v-2c-2.5 0-5-1-4-3z" fill="#e0e0e0" fill-opacity=".501961"/><path d="m8 .875c-.375 0-.75.375-1 1.125l-3 8c-1 2 1.5 3 4 3v-3.75c-.875 0-1.75-.25-2.5-.75l1-3.5c.5.25 1 .375 1.5.375z" fill="#e0e0e0"/><g fill="#fc7f7f"><path d="m11.392578 8.3789062.607422 1.6210938c1.002342 2.004685-1.511742 3.004696-4.0175781 3v1.998047c.0053893.000157.0124503.001953.0175781.001953 1 0 7-3 7-4 0-.549-1.809422-1.6930938-3.607422-2.6210938z" fill-opacity=".501961"/><path d="m8 .875c-.00585 0-.011729.001771-.017578.001953v4.498047c.5058535.0029611 1.0117243-.1220732 1.517578-.375l1 3.5c-.7550159.5033439-1.6367318.7533663-2.5175781.75v3.75c2.5058361.004696 5.0199201-.995315 4.0175781-3l-3-8c-.25-.75-.625-1.125-1-1.125z"/></g></g></svg>
diff --git a/editor/icons/Range.svg b/editor/icons/Range.svg
new file mode 100644
index 0000000000..49311546b0
--- /dev/null
+++ b/editor/icons/Range.svg
@@ -0,0 +1 @@
+<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m7.8027344 2.7714844c-1.0905892.2029663-1.089037 1.7659969.00195 1.9667968l2.8808595.5761719.576172 2.8808594c.231158 1.3504655 2.264924.9453327 1.960937-.390625l-.7070279-3.5371094c-.039663-.1968491-.137665-.3771998-.28125-.5175781-.138135-.1351849-.312483-.2274468-.501953-.265625l-3.5371095-.7070312c-.1291868-.0278728-.262617-.0298643-.3925781-.0058594zm-3.9941406 4.2167968c-.6571498-.0349349-1.1683412.5633914-1.03125 1.2070313l.7070312 3.5371095c.079467.394998.3882047.703736.7832031.783203l3.5371094.707031c1.3359577.303987 1.7410905-1.729779.390625-1.960937l-2.8808594-.576172-.5761719-2.8808595c-.0369237-.1982539-.1329195-.3807141-.2753906-.5234375-.1744016-.1751556-.407488-.2795227-.6542968-.2929688z" fill="#8eef97"/></svg>
diff --git a/editor/icons/SkeletonIK3D.svg b/editor/icons/SkeletonIK3D.svg
index 45697a1b42..7210019749 100644
--- a/editor/icons/SkeletonIK3D.svg
+++ b/editor/icons/SkeletonIK3D.svg
@@ -1 +1 @@
-<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m6 2a4 4 0 0 0 -4 4 4 4 0 0 0 2 3.4531v3.5469a2 2 0 0 0 1 1.7324 2 2 0 0 0 1 .26562v.001953h4v-.001953a2 2 0 0 0 1-.26562 2 2 0 0 0 1-1.7324v-3.5469a4 4 0 0 0 2-3.4531 4 4 0 0 0 -4-4zm-1 3a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1-1 1 1 0 0 1 1-1zm6 0a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1-1 1 1 0 0 1 1-1zm-4 2h2v1h-2zm-2 2h1v1h1v-1h1 1v1h1v-1h1v.86719 3.1328h-1v-1h-1v1h-1-1v-1h-1v1h-1v-3.1309-.86914z" fill="#e0e0e0"/></svg>
+<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m6 2a4 4 0 0 0 -4 4 4 4 0 0 0 2 3.453125v3.546875a2 2 0 0 0 1 1.732422 2 2 0 0 0 1 .265625v.001953h2v-2h-1v-1h-1v1h-1v-3.1308594-.8691406h1v1h1v-1h1v-1h-1v-1h1v-5zm-1 3a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1-1 1 1 0 0 1 1-1z" fill="#e0e0e0"/><path d="m8 2v5h1v1h-1v1h1v1h1v-1h1v.8671875 3.1328125h-1v-1h-1v1h-1v2h2v-.001953a2 2 0 0 0 1-.265625 2 2 0 0 0 1-1.732422v-3.546875a4 4 0 0 0 2-3.453125 4 4 0 0 0 -4-4zm3 3a1 1 0 0 1 1 1 1 1 0 0 1 -1 1 1 1 0 0 1 -1-1 1 1 0 0 1 1-1z" fill="#fc7f7f"/></svg>
diff --git a/editor/icons/VideoPlayer.svg b/editor/icons/VideoStreamPlayer.svg
index 092a26b955..092a26b955 100644
--- a/editor/icons/VideoPlayer.svg
+++ b/editor/icons/VideoStreamPlayer.svg
diff --git a/editor/icons/VisualInstance3D.svg b/editor/icons/VisualInstance3D.svg
new file mode 100644
index 0000000000..e5e43b59dd
--- /dev/null
+++ b/editor/icons/VisualInstance3D.svg
@@ -0,0 +1 @@
+<svg height="16" viewBox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><g fill="#fc7f7f"><circle cx="3" cy="3" r="2"/><circle cx="13" cy="3" r="2"/><circle cx="13" cy="13" r="2"/><circle cx="3" cy="13" r="2"/></g></svg>
diff --git a/editor/import/dynamic_font_import_settings.cpp b/editor/import/dynamic_font_import_settings.cpp
index 5e203a3e39..f7fe334828 100644
--- a/editor/import/dynamic_font_import_settings.cpp
+++ b/editor/import/dynamic_font_import_settings.cpp
@@ -1455,7 +1455,7 @@ DynamicFontImportSettings::DynamicFontImportSettings() {
font_preview_label->add_theme_font_size_override("font_size", 200 * EDSCALE);
font_preview_label->set_horizontal_alignment(HORIZONTAL_ALIGNMENT_CENTER);
font_preview_label->set_vertical_alignment(VERTICAL_ALIGNMENT_CENTER);
- font_preview_label->set_autowrap_mode(Label::AUTOWRAP_ARBITRARY);
+ font_preview_label->set_autowrap_mode(TextServer::AUTOWRAP_ARBITRARY);
font_preview_label->set_clip_text(true);
font_preview_label->set_v_size_flags(Control::SIZE_EXPAND_FILL);
font_preview_label->set_h_size_flags(Control::SIZE_EXPAND_FILL);
@@ -1475,7 +1475,7 @@ DynamicFontImportSettings::DynamicFontImportSettings() {
page2_description = memnew(Label);
page2_description->set_text(TTR("Add font size, variation coordinates, and extra spacing combinations to pre-render:"));
page2_description->set_h_size_flags(Control::SIZE_EXPAND_FILL);
- page2_description->set_autowrap_mode(Label::AUTOWRAP_WORD_SMART);
+ page2_description->set_autowrap_mode(TextServer::AUTOWRAP_WORD_SMART);
page2_vb->add_child(page2_description);
HSplitContainer *page2_hb = memnew(HSplitContainer);
@@ -1527,7 +1527,7 @@ DynamicFontImportSettings::DynamicFontImportSettings() {
page3_description = memnew(Label);
page3_description->set_text(TTR("Enter a text to shape and add all required glyphs to pre-render list:"));
page3_description->set_h_size_flags(Control::SIZE_EXPAND_FILL);
- page3_description->set_autowrap_mode(Label::AUTOWRAP_WORD_SMART);
+ page3_description->set_autowrap_mode(TextServer::AUTOWRAP_WORD_SMART);
page3_vb->add_child(page3_description);
HBoxContainer *ot_hb = memnew(HBoxContainer);
@@ -1584,7 +1584,7 @@ DynamicFontImportSettings::DynamicFontImportSettings() {
page4_description = memnew(Label);
page4_description->set_text(TTR("Add or remove additional glyphs from the character map to pre-render list:\nNote: Some stylistic alternatives and glyph variants do not have one-to-one correspondence to character, and not shown in this map, use \"Glyphs from the text\" to add these."));
page4_description->set_h_size_flags(Control::SIZE_EXPAND_FILL);
- page4_description->set_autowrap_mode(Label::AUTOWRAP_WORD_SMART);
+ page4_description->set_autowrap_mode(TextServer::AUTOWRAP_WORD_SMART);
page4_vb->add_child(page4_description);
HSplitContainer *glyphs_split = memnew(HSplitContainer);
@@ -1635,7 +1635,7 @@ DynamicFontImportSettings::DynamicFontImportSettings() {
page5_description = memnew(Label);
page5_description->set_text(TTR("Add or remove language and script support overrides, to control fallback font selection order:"));
page5_description->set_h_size_flags(Control::SIZE_EXPAND_FILL);
- page5_description->set_autowrap_mode(Label::AUTOWRAP_WORD_SMART);
+ page5_description->set_autowrap_mode(TextServer::AUTOWRAP_WORD_SMART);
page5_vb->add_child(page5_description);
HBoxContainer *hb_lang = memnew(HBoxContainer);
diff --git a/editor/import/resource_importer_scene.cpp b/editor/import/resource_importer_scene.cpp
index f2975b1d7a..171ef5bf4c 100644
--- a/editor/import/resource_importer_scene.cpp
+++ b/editor/import/resource_importer_scene.cpp
@@ -1115,7 +1115,7 @@ Ref<Animation> ResourceImporterScene::_save_animation_to_file(Ref<Animation> ani
}
if (ResourceCache::has(p_save_to_path)) {
- Ref<Animation> old_anim = Ref<Resource>(ResourceCache::get(p_save_to_path));
+ Ref<Animation> old_anim = ResourceCache::get_ref(p_save_to_path);
if (old_anim.is_valid()) {
old_anim->copy_from(anim);
anim = old_anim;
@@ -1711,7 +1711,7 @@ void ResourceImporterScene::_generate_meshes(Node *p_node, const Dictionary &p_m
}
if (!save_to_file.is_empty()) {
- Ref<Mesh> existing = Ref<Resource>(ResourceCache::get(save_to_file));
+ Ref<Mesh> existing = ResourceCache::get_ref(save_to_file);
if (existing.is_valid()) {
//if somehow an existing one is useful, create
existing->reset_state();
diff --git a/editor/import/resource_importer_texture_atlas.cpp b/editor/import/resource_importer_texture_atlas.cpp
index aa338a6c0d..e5fe99890e 100644
--- a/editor/import/resource_importer_texture_atlas.cpp
+++ b/editor/import/resource_importer_texture_atlas.cpp
@@ -306,10 +306,8 @@ Error ResourceImporterTextureAtlas::import_group_file(const String &p_group_file
//update cache if existing, else create
Ref<Texture2D> cache;
- if (ResourceCache::has(p_group_file)) {
- Resource *resptr = ResourceCache::get(p_group_file);
- cache.reference_ptr(resptr);
- } else {
+ cache = ResourceCache::get_ref(p_group_file);
+ if (!cache.is_valid()) {
Ref<ImageTexture> res_cache;
res_cache.instantiate();
res_cache->create_from_image(new_atlas);
diff --git a/editor/import_dock.cpp b/editor/import_dock.cpp
index 9eb2706d8a..6bb71ff491 100644
--- a/editor/import_dock.cpp
+++ b/editor/import_dock.cpp
@@ -685,7 +685,7 @@ ImportDock::ImportDock() {
select_a_resource = memnew(Label);
select_a_resource->set_text(TTR("Select a resource file in the filesystem or in the inspector to adjust import settings."));
- select_a_resource->set_autowrap_mode(Label::AUTOWRAP_WORD);
+ select_a_resource->set_autowrap_mode(TextServer::AUTOWRAP_WORD);
select_a_resource->set_custom_minimum_size(Size2(100 * EDSCALE, 0));
select_a_resource->set_v_size_flags(SIZE_EXPAND_FILL);
select_a_resource->set_horizontal_alignment(HORIZONTAL_ALIGNMENT_CENTER);
diff --git a/editor/node_dock.cpp b/editor/node_dock.cpp
index 18545d3c9a..986370f537 100644
--- a/editor/node_dock.cpp
+++ b/editor/node_dock.cpp
@@ -134,7 +134,7 @@ NodeDock::NodeDock() {
select_a_node->set_v_size_flags(SIZE_EXPAND_FILL);
select_a_node->set_vertical_alignment(VERTICAL_ALIGNMENT_CENTER);
select_a_node->set_horizontal_alignment(HORIZONTAL_ALIGNMENT_CENTER);
- select_a_node->set_autowrap_mode(Label::AUTOWRAP_WORD_SMART);
+ select_a_node->set_autowrap_mode(TextServer::AUTOWRAP_WORD_SMART);
add_child(select_a_node);
}
diff --git a/editor/plugins/animation_library_editor.cpp b/editor/plugins/animation_library_editor.cpp
index ed908e413c..cae33edecb 100644
--- a/editor/plugins/animation_library_editor.cpp
+++ b/editor/plugins/animation_library_editor.cpp
@@ -419,12 +419,12 @@ void AnimationLibraryEditor::_item_renamed() {
}
}
-void AnimationLibraryEditor::_button_pressed(TreeItem *p_item, int p_column, int p_button) {
+void AnimationLibraryEditor::_button_pressed(TreeItem *p_item, int p_column, int p_id, MouseButton p_button) {
if (p_item->get_parent() == tree->get_root()) {
// Library
StringName lib_name = p_item->get_metadata(0);
Ref<AnimationLibrary> al = player->call("get_animation_library", lib_name);
- switch (p_button) {
+ switch (p_id) {
case LIB_BUTTON_ADD: {
add_library_dialog->set_title(TTR("Animation Name:"));
add_library_name->set_text("");
@@ -519,7 +519,7 @@ void AnimationLibraryEditor::_button_pressed(TreeItem *p_item, int p_column, int
Ref<AnimationLibrary> al = player->call("get_animation_library", lib_name);
Ref<Animation> anim = al->get_animation(anim_name);
ERR_FAIL_COND(!anim.is_valid());
- switch (p_button) {
+ switch (p_id) {
case ANIM_BUTTON_COPY: {
if (anim->get_name() == "") {
anim->set_name(anim_name); // Keep the name around
diff --git a/editor/plugins/animation_library_editor.h b/editor/plugins/animation_library_editor.h
index 5bd4e8d9e2..bf89508321 100644
--- a/editor/plugins/animation_library_editor.h
+++ b/editor/plugins/animation_library_editor.h
@@ -99,7 +99,7 @@ class AnimationLibraryEditor : public AcceptDialog {
void _load_file(String p_path);
void _item_renamed();
- void _button_pressed(TreeItem *p_item, int p_column, int p_button);
+ void _button_pressed(TreeItem *p_item, int p_column, int p_id, MouseButton p_button);
void _file_popup_selected(int p_id);
diff --git a/editor/plugins/animation_player_editor_plugin.cpp b/editor/plugins/animation_player_editor_plugin.cpp
index 98ccc1fdbe..e5ca5d66e8 100644
--- a/editor/plugins/animation_player_editor_plugin.cpp
+++ b/editor/plugins/animation_player_editor_plugin.cpp
@@ -1053,7 +1053,7 @@ void AnimationPlayerEditor::_animation_duplicate() {
_update_name_dialog_library_dropdown();
name_dialog_op = TOOL_DUPLICATE_ANIM;
- name_dialog->set_title("Duplicate Animation");
+ name_dialog->set_title(TTR("Duplicate Animation"));
name_title->set_text(TTR("Duplicated Animation Name:"));
name->set_text(new_name);
name_dialog->popup_centered(Size2(300, 90));
diff --git a/editor/plugins/animation_state_machine_editor.cpp b/editor/plugins/animation_state_machine_editor.cpp
index 2ba2466646..00cc5a6ca0 100644
--- a/editor/plugins/animation_state_machine_editor.cpp
+++ b/editor/plugins/animation_state_machine_editor.cpp
@@ -817,11 +817,11 @@ bool AnimationNodeStateMachineEditor::_create_submenu(PopupMenu *p_menu, Ref<Ani
Vector<Ref<AnimationNodeStateMachine>> parents = p_parents;
if (from_root) {
- Ref<AnimationNodeStateMachine> prev = p_nodesm->get_prev_state_machine();
+ AnimationNodeStateMachine *prev = p_nodesm->get_prev_state_machine();
- while (prev.is_valid()) {
+ while (prev != nullptr) {
parents.push_back(prev);
- p_nodesm = prev;
+ p_nodesm = Ref<AnimationNodeStateMachine>(prev);
prev_path += "../";
prev = prev->get_prev_state_machine();
}
diff --git a/editor/plugins/canvas_item_editor_plugin.cpp b/editor/plugins/canvas_item_editor_plugin.cpp
index 1ea0299d4e..dea4aaded7 100644
--- a/editor/plugins/canvas_item_editor_plugin.cpp
+++ b/editor/plugins/canvas_item_editor_plugin.cpp
@@ -5455,7 +5455,7 @@ void CanvasItemEditorViewport::_create_nodes(Node *parent, Node *child, String &
}
child->set_name(name);
- Ref<Texture2D> texture = Ref<Texture2D>(Object::cast_to<Texture2D>(ResourceCache::get(path)));
+ Ref<Texture2D> texture = ResourceCache::get_ref(path);
if (parent) {
editor_data->get_undo_redo().add_do_method(parent, "add_child", child, true);
diff --git a/editor/plugins/control_editor_plugin.cpp b/editor/plugins/control_editor_plugin.cpp
index ebb0da1ad7..3adaf8f601 100644
--- a/editor/plugins/control_editor_plugin.cpp
+++ b/editor/plugins/control_editor_plugin.cpp
@@ -120,7 +120,7 @@ ControlPositioningWarning::ControlPositioningWarning() {
grid->add_child(title_icon);
title_label = memnew(Label);
- title_label->set_autowrap_mode(Label::AutowrapMode::AUTOWRAP_WORD);
+ title_label->set_autowrap_mode(TextServer::AutowrapMode::AUTOWRAP_WORD);
title_label->set_h_size_flags(Control::SIZE_EXPAND_FILL);
title_label->set_vertical_alignment(VerticalAlignment::VERTICAL_ALIGNMENT_CENTER);
grid->add_child(title_label);
@@ -135,7 +135,7 @@ ControlPositioningWarning::ControlPositioningWarning() {
grid->add_child(hint_filler_left);
hint_label = memnew(Label);
- hint_label->set_autowrap_mode(Label::AutowrapMode::AUTOWRAP_WORD);
+ hint_label->set_autowrap_mode(TextServer::AutowrapMode::AUTOWRAP_WORD);
hint_label->set_h_size_flags(Control::SIZE_EXPAND_FILL);
hint_label->set_vertical_alignment(VerticalAlignment::VERTICAL_ALIGNMENT_CENTER);
hint_label->hide();
diff --git a/editor/plugins/input_event_editor_plugin.cpp b/editor/plugins/input_event_editor_plugin.cpp
index 2acd0fca6e..153eab32d2 100644
--- a/editor/plugins/input_event_editor_plugin.cpp
+++ b/editor/plugins/input_event_editor_plugin.cpp
@@ -80,7 +80,7 @@ void InputEventConfigContainer::set_event(const Ref<InputEvent> &p_event) {
InputEventConfigContainer::InputEventConfigContainer() {
input_event_text = memnew(Label);
input_event_text->set_h_size_flags(SIZE_EXPAND_FILL);
- input_event_text->set_autowrap_mode(Label::AutowrapMode::AUTOWRAP_WORD_SMART);
+ input_event_text->set_autowrap_mode(TextServer::AutowrapMode::AUTOWRAP_WORD_SMART);
input_event_text->set_horizontal_alignment(HORIZONTAL_ALIGNMENT_CENTER);
add_child(input_event_text);
diff --git a/editor/plugins/mesh_instance_3d_editor_plugin.cpp b/editor/plugins/mesh_instance_3d_editor_plugin.cpp
index d85087b5ea..d1f858315c 100644
--- a/editor/plugins/mesh_instance_3d_editor_plugin.cpp
+++ b/editor/plugins/mesh_instance_3d_editor_plugin.cpp
@@ -350,8 +350,8 @@ struct MeshInstance3DEditorEdgeSort {
Vector2 b;
static uint32_t hash(const MeshInstance3DEditorEdgeSort &p_edge) {
- uint32_t h = hash_djb2_one_32(HashMapHasherDefault::hash(p_edge.a));
- return hash_djb2_one_32(HashMapHasherDefault::hash(p_edge.b), h);
+ uint32_t h = hash_murmur3_one_32(HashMapHasherDefault::hash(p_edge.a));
+ return hash_fmix32(hash_murmur3_one_32(HashMapHasherDefault::hash(p_edge.b), h));
}
bool operator==(const MeshInstance3DEditorEdgeSort &p_b) const {
diff --git a/editor/plugins/node_3d_editor_plugin.cpp b/editor/plugins/node_3d_editor_plugin.cpp
index 9f4842a5a1..815d0a2425 100644
--- a/editor/plugins/node_3d_editor_plugin.cpp
+++ b/editor/plugins/node_3d_editor_plugin.cpp
@@ -2412,6 +2412,18 @@ void Node3DEditorViewport::_project_settings_changed() {
const float mesh_lod_threshold = GLOBAL_GET("rendering/mesh_lod/lod_change/threshold_pixels");
viewport->set_mesh_lod_threshold(mesh_lod_threshold);
+
+ const Viewport::Scaling3DMode scaling_3d_mode = Viewport::Scaling3DMode(int(GLOBAL_GET("rendering/scaling_3d/mode")));
+ viewport->set_scaling_3d_mode(scaling_3d_mode);
+
+ const float scaling_3d_scale = GLOBAL_GET("rendering/scaling_3d/scale");
+ viewport->set_scaling_3d_scale(scaling_3d_scale);
+
+ const float fsr_sharpness = GLOBAL_GET("rendering/scaling_3d/fsr_sharpness");
+ viewport->set_fsr_sharpness(fsr_sharpness);
+
+ const float fsr_mipmap_bias = GLOBAL_GET("rendering/scaling_3d/fsr_mipmap_bias");
+ viewport->set_fsr_mipmap_bias(fsr_mipmap_bias);
}
void Node3DEditorViewport::_notification(int p_what) {
diff --git a/editor/plugins/script_editor_plugin.cpp b/editor/plugins/script_editor_plugin.cpp
index b9d99fcc93..6ab2366a44 100644
--- a/editor/plugins/script_editor_plugin.cpp
+++ b/editor/plugins/script_editor_plugin.cpp
@@ -3547,7 +3547,7 @@ void ScriptEditor::_on_find_in_files_result_selected(String fpath, int line_numb
ShaderEditorPlugin *shader_editor = Object::cast_to<ShaderEditorPlugin>(EditorNode::get_singleton()->get_editor_data().get_editor("Shader"));
shader_editor->edit(res.ptr());
shader_editor->make_visible(true);
- shader_editor->get_shader_editor()->goto_line_selection(line_number - 1, begin, end);
+ shader_editor->get_shader_editor(res)->goto_line_selection(line_number - 1, begin, end);
return;
} else if (fpath.get_extension() == "tscn") {
EditorNode::get_singleton()->load_scene(fpath);
diff --git a/editor/plugins/script_text_editor.cpp b/editor/plugins/script_text_editor.cpp
index 05c707c065..7d4ffd1a25 100644
--- a/editor/plugins/script_text_editor.cpp
+++ b/editor/plugins/script_text_editor.cpp
@@ -1196,7 +1196,7 @@ void ScriptTextEditor::_edit_option(int p_op) {
String whitespace = line.substr(0, line.size() - line.strip_edges(true, false).size()); //extract the whitespace at the beginning
if (expression.parse(line) == OK) {
- Variant result = expression.execute(Array(), Variant(), false);
+ Variant result = expression.execute(Array(), Variant(), false, true);
if (expression.get_error_text().is_empty()) {
results.push_back(whitespace + result.get_construct_string());
} else {
diff --git a/editor/plugins/shader_editor_plugin.cpp b/editor/plugins/shader_editor_plugin.cpp
index c13d0dc197..04b407ce65 100644
--- a/editor/plugins/shader_editor_plugin.cpp
+++ b/editor/plugins/shader_editor_plugin.cpp
@@ -38,8 +38,12 @@
#include "editor/editor_node.h"
#include "editor/editor_scale.h"
#include "editor/editor_settings.h"
+#include "editor/filesystem_dock.h"
+#include "editor/plugins/visual_shader_editor_plugin.h"
#include "editor/project_settings_editor.h"
#include "editor/property_editor.h"
+#include "editor/shader_create_dialog.h"
+#include "scene/gui/split_container.h"
#include "servers/display_server.h"
#include "servers/rendering/shader_types.h"
@@ -836,50 +840,216 @@ ShaderEditor::ShaderEditor() {
_editor_settings_changed();
}
+void ShaderEditorPlugin::_update_shader_list() {
+ shader_list->clear();
+ for (uint32_t i = 0; i < edited_shaders.size(); i++) {
+ String text;
+ String path = edited_shaders[i].shader->get_path();
+ String _class = edited_shaders[i].shader->get_class();
+
+ if (path.is_resource_file()) {
+ text = path.get_file();
+ } else if (edited_shaders[i].shader->get_name() != "") {
+ text = edited_shaders[i].shader->get_name();
+ } else {
+ text = _class + ":" + itos(edited_shaders[i].shader->get_instance_id());
+ }
+
+ if (!shader_list->has_theme_icon(_class, SNAME("EditorIcons"))) {
+ _class = "Resource";
+ }
+ Ref<Texture2D> icon = shader_list->get_theme_icon(_class, SNAME("EditorIcons"));
+
+ shader_list->add_item(text, icon);
+ shader_list->set_item_tooltip(shader_list->get_item_count() - 1, path);
+ }
+
+ if (shader_tabs->get_tab_count()) {
+ shader_list->select(shader_tabs->get_current_tab());
+ }
+
+ for (int i = 1; i < FILE_MAX; i++) {
+ file_menu->get_popup()->set_item_disabled(file_menu->get_popup()->get_item_index(i), edited_shaders.size() == 0);
+ }
+}
+
void ShaderEditorPlugin::edit(Object *p_object) {
Shader *s = Object::cast_to<Shader>(p_object);
- shader_editor->edit(s);
+ for (uint32_t i = 0; i < edited_shaders.size(); i++) {
+ if (edited_shaders[i].shader.ptr() == s) {
+ // Exists, select.
+ shader_tabs->set_current_tab(i);
+ shader_list->select(i);
+ return;
+ }
+ }
+ // Add.
+ EditedShader es;
+ es.shader = Ref<Shader>(s);
+ Ref<VisualShader> vs = es.shader;
+ if (vs.is_valid()) {
+ es.visual_shader_editor = memnew(VisualShaderEditor);
+ es.visual_shader_editor->edit(vs.ptr());
+ shader_tabs->add_child(es.visual_shader_editor);
+ } else {
+ es.shader_editor = memnew(ShaderEditor);
+ es.shader_editor->edit(s);
+ shader_tabs->add_child(es.shader_editor);
+ }
+ shader_tabs->set_current_tab(shader_tabs->get_tab_count() - 1);
+ edited_shaders.push_back(es);
+ _update_shader_list();
}
bool ShaderEditorPlugin::handles(Object *p_object) const {
- Shader *shader = Object::cast_to<Shader>(p_object);
- return shader != nullptr && shader->is_text_shader();
+ return Object::cast_to<Shader>(p_object) != nullptr;
}
void ShaderEditorPlugin::make_visible(bool p_visible) {
if (p_visible) {
- button->show();
- EditorNode::get_singleton()->make_bottom_panel_item_visible(shader_editor);
-
- } else {
- button->hide();
- if (shader_editor->is_visible_in_tree()) {
- EditorNode::get_singleton()->hide_bottom_panel();
- }
- shader_editor->apply_shaders();
+ EditorNode::get_singleton()->make_bottom_panel_item_visible(main_split);
}
}
void ShaderEditorPlugin::selected_notify() {
- shader_editor->ensure_select_current();
+}
+
+ShaderEditor *ShaderEditorPlugin::get_shader_editor(const Ref<Shader> &p_for_shader) {
+ for (uint32_t i = 0; i < edited_shaders.size(); i++) {
+ if (edited_shaders[i].shader == p_for_shader) {
+ return edited_shaders[i].shader_editor;
+ }
+ }
+ return nullptr;
}
void ShaderEditorPlugin::save_external_data() {
- shader_editor->save_external_data();
+ for (uint32_t i = 0; i < edited_shaders.size(); i++) {
+ if (edited_shaders[i].shader_editor) {
+ edited_shaders[i].shader_editor->save_external_data();
+ }
+ }
}
void ShaderEditorPlugin::apply_changes() {
- shader_editor->apply_shaders();
+ for (uint32_t i = 0; i < edited_shaders.size(); i++) {
+ if (edited_shaders[i].shader_editor) {
+ edited_shaders[i].shader_editor->apply_shaders();
+ }
+ }
+}
+
+void ShaderEditorPlugin::_shader_selected(int p_index) {
+ shader_tabs->set_current_tab(p_index);
+}
+
+void ShaderEditorPlugin::_close_shader(int p_index) {
+ int index = shader_tabs->get_current_tab();
+ ERR_FAIL_INDEX(index, shader_tabs->get_tab_count());
+ Control *c = shader_tabs->get_tab_control(index);
+ memdelete(c);
+ edited_shaders.remove_at(index);
+ _update_shader_list();
+}
+
+void ShaderEditorPlugin::_resource_saved(Object *obj) {
+ // May have been renamed on save.
+ for (uint32_t i = 0; i < edited_shaders.size(); i++) {
+ if (edited_shaders[i].shader.ptr() == obj) {
+ _update_shader_list();
+ return;
+ }
+ }
+}
+
+void ShaderEditorPlugin::_menu_item_pressed(int p_index) {
+ switch (p_index) {
+ case FILE_NEW: {
+ String base_path = FileSystemDock::get_singleton()->get_current_path();
+ shader_create_dialog->config(base_path.plus_file("new_shader"), false, false, 0);
+ shader_create_dialog->popup_centered();
+ } break;
+ case FILE_OPEN: {
+ InspectorDock::get_singleton()->open_resource("Shader");
+ } break;
+ case FILE_SAVE: {
+ int index = shader_tabs->get_current_tab();
+ ERR_FAIL_INDEX(index, shader_tabs->get_tab_count());
+ EditorNode::get_singleton()->save_resource(edited_shaders[index].shader);
+ } break;
+ case FILE_SAVE_AS: {
+ int index = shader_tabs->get_current_tab();
+ ERR_FAIL_INDEX(index, shader_tabs->get_tab_count());
+ String path = edited_shaders[index].shader->get_path();
+ if (!path.is_resource_file()) {
+ path = "";
+ }
+ EditorNode::get_singleton()->save_resource_as(edited_shaders[index].shader, path);
+ } break;
+ case FILE_INSPECT: {
+ int index = shader_tabs->get_current_tab();
+ ERR_FAIL_INDEX(index, shader_tabs->get_tab_count());
+ EditorNode::get_singleton()->push_item(edited_shaders[index].shader.ptr());
+ } break;
+ case FILE_CLOSE: {
+ _close_shader(shader_tabs->get_current_tab());
+ } break;
+ }
+}
+
+void ShaderEditorPlugin::_shader_created(Ref<Shader> p_shader) {
+ EditorNode::get_singleton()->push_item(p_shader.ptr());
}
ShaderEditorPlugin::ShaderEditorPlugin() {
- shader_editor = memnew(ShaderEditor);
+ main_split = memnew(HSplitContainer);
+
+ VBoxContainer *vb = memnew(VBoxContainer);
+
+ HBoxContainer *file_hb = memnew(HBoxContainer);
+ vb->add_child(file_hb);
+ file_menu = memnew(MenuButton);
+ file_menu->set_text(TTR("File"));
+ file_menu->get_popup()->add_item(TTR("New Shader"), FILE_NEW);
+ file_menu->get_popup()->add_separator();
+ file_menu->get_popup()->add_item(TTR("Load Shader"), FILE_OPEN);
+ file_menu->get_popup()->add_item(TTR("Save Shader"), FILE_SAVE);
+ file_menu->get_popup()->add_item(TTR("Save Shader As"), FILE_SAVE_AS);
+ file_menu->get_popup()->add_separator();
+ file_menu->get_popup()->add_item(TTR("Open Shader in Inspector"), FILE_INSPECT);
+ file_menu->get_popup()->add_separator();
+ file_menu->get_popup()->add_item(TTR("Close Shader"), FILE_CLOSE);
+ file_menu->get_popup()->connect("id_pressed", callable_mp(this, &ShaderEditorPlugin::_menu_item_pressed));
+ file_hb->add_child(file_menu);
+
+ for (int i = 1; i < FILE_MAX; i++) {
+ file_menu->get_popup()->set_item_disabled(file_menu->get_popup()->get_item_index(i), true);
+ }
+
+ shader_list = memnew(ItemList);
+ shader_list->set_v_size_flags(Control::SIZE_EXPAND_FILL);
+ vb->add_child(shader_list);
+ shader_list->connect("item_selected", callable_mp(this, &ShaderEditorPlugin::_shader_selected));
+
+ main_split->add_child(vb);
+ vb->set_custom_minimum_size(Size2(200, 300) * EDSCALE);
+
+ shader_tabs = memnew(TabContainer);
+ shader_tabs->set_tabs_visible(false);
+ shader_tabs->set_h_size_flags(Control::SIZE_EXPAND_FILL);
+ main_split->add_child(shader_tabs);
+ Ref<StyleBoxEmpty> empty;
+ empty.instantiate();
+ shader_tabs->add_theme_style_override("panel", empty);
+
+ button = EditorNode::get_singleton()->add_bottom_panel_item(TTR("Shader Editor"), main_split);
- shader_editor->set_custom_minimum_size(Size2(0, 300) * EDSCALE);
- button = EditorNode::get_singleton()->add_bottom_panel_item(TTR("Shader"), shader_editor);
- button->hide();
+ // Defer connect because Editor class is not in the binding system yet.
+ EditorNode::get_singleton()->call_deferred("connect", "resource_saved", callable_mp(this, &ShaderEditorPlugin::_resource_saved), varray(), CONNECT_DEFERRED);
- _2d = false;
+ shader_create_dialog = memnew(ShaderCreateDialog);
+ vb->add_child(shader_create_dialog);
+ shader_create_dialog->connect("shader_created", callable_mp(this, &ShaderEditorPlugin::_shader_created));
}
ShaderEditorPlugin::~ShaderEditorPlugin() {
diff --git a/editor/plugins/shader_editor_plugin.h b/editor/plugins/shader_editor_plugin.h
index bd0c2db824..e1e815f939 100644
--- a/editor/plugins/shader_editor_plugin.h
+++ b/editor/plugins/shader_editor_plugin.h
@@ -42,6 +42,11 @@
#include "scene/resources/shader.h"
#include "servers/rendering/shader_warnings.h"
+class ItemList;
+class VisualShaderEditor;
+class HSplitContainer;
+class ShaderCreateDialog;
+
class ShaderTextEditor : public CodeTextEditor {
GDCLASS(ShaderTextEditor, CodeTextEditor);
@@ -160,9 +165,40 @@ public:
class ShaderEditorPlugin : public EditorPlugin {
GDCLASS(ShaderEditorPlugin, EditorPlugin);
- bool _2d;
- ShaderEditor *shader_editor = nullptr;
+ struct EditedShader {
+ Ref<Shader> shader;
+ ShaderEditor *shader_editor = nullptr;
+ VisualShaderEditor *visual_shader_editor = nullptr;
+ };
+
+ LocalVector<EditedShader> edited_shaders;
+
+ enum {
+ FILE_NEW,
+ FILE_OPEN,
+ FILE_SAVE,
+ FILE_SAVE_AS,
+ FILE_INSPECT,
+ FILE_CLOSE,
+ FILE_MAX
+ };
+
+ HSplitContainer *main_split = nullptr;
+ ItemList *shader_list = nullptr;
+ TabContainer *shader_tabs = nullptr;
+
Button *button = nullptr;
+ MenuButton *file_menu = nullptr;
+
+ ShaderCreateDialog *shader_create_dialog = nullptr;
+
+ void _update_shader_list();
+ void _shader_selected(int p_index);
+ void _menu_item_pressed(int p_index);
+ void _resource_saved(Object *obj);
+ void _close_shader(int p_index);
+
+ void _shader_created(Ref<Shader> p_shader);
public:
virtual String get_name() const override { return "Shader"; }
@@ -172,7 +208,7 @@ public:
virtual void make_visible(bool p_visible) override;
virtual void selected_notify() override;
- ShaderEditor *get_shader_editor() const { return shader_editor; }
+ ShaderEditor *get_shader_editor(const Ref<Shader> &p_for_shader);
virtual void save_external_data() override;
virtual void apply_changes() override;
diff --git a/editor/plugins/theme_editor_plugin.cpp b/editor/plugins/theme_editor_plugin.cpp
index 418115c041..c7dc61b3a8 100644
--- a/editor/plugins/theme_editor_plugin.cpp
+++ b/editor/plugins/theme_editor_plugin.cpp
@@ -1119,7 +1119,7 @@ ThemeItemImportTree::ThemeItemImportTree() {
select_icons_warning = memnew(Label);
select_icons_warning->set_text(TTR("Caution: Adding icon data may considerably increase the size of your Theme resource."));
- select_icons_warning->set_autowrap_mode(Label::AUTOWRAP_WORD_SMART);
+ select_icons_warning->set_autowrap_mode(TextServer::AUTOWRAP_WORD_SMART);
select_icons_warning->set_h_size_flags(Control::SIZE_EXPAND_FILL);
select_icons_warning_hb->add_child(select_icons_warning);
}
@@ -2021,7 +2021,7 @@ ThemeItemEditorDialog::ThemeItemEditorDialog(ThemeTypeEditor *p_theme_type_edito
edit_items_message->set_mouse_filter(Control::MOUSE_FILTER_STOP);
edit_items_message->set_horizontal_alignment(HORIZONTAL_ALIGNMENT_CENTER);
edit_items_message->set_vertical_alignment(VERTICAL_ALIGNMENT_CENTER);
- edit_items_message->set_autowrap_mode(Label::AUTOWRAP_WORD);
+ edit_items_message->set_autowrap_mode(TextServer::AUTOWRAP_WORD);
edit_items_tree->add_child(edit_items_message);
edit_theme_item_dialog = memnew(ConfirmationDialog);
@@ -3443,7 +3443,7 @@ ThemeTypeEditor::ThemeTypeEditor() {
type_variation_locked = memnew(Label);
type_variation_vb->add_child(type_variation_locked);
type_variation_locked->set_horizontal_alignment(HORIZONTAL_ALIGNMENT_CENTER);
- type_variation_locked->set_autowrap_mode(Label::AUTOWRAP_WORD);
+ type_variation_locked->set_autowrap_mode(TextServer::AUTOWRAP_WORD);
type_variation_locked->set_text(TTR("A type associated with a built-in class cannot be marked as a variation of another type."));
type_variation_locked->hide();
diff --git a/editor/plugins/tiles/tile_data_editors.cpp b/editor/plugins/tiles/tile_data_editors.cpp
index ec45341970..468681c967 100644
--- a/editor/plugins/tiles/tile_data_editors.cpp
+++ b/editor/plugins/tiles/tile_data_editors.cpp
@@ -1147,7 +1147,7 @@ void TileDataDefaultEditor::setup_property_editor(Variant::Type p_type, String p
property_editor = EditorInspectorDefaultPlugin::get_editor_for_property(dummy_object, p_type, p_property, PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT);
property_editor->set_object_and_property(dummy_object, p_property);
if (p_label.is_empty()) {
- property_editor->set_label(p_property);
+ property_editor->set_label(EditorPropertyNameProcessor::get_singleton()->process_name(p_property, EditorPropertyNameProcessor::get_default_inspector_style()));
} else {
property_editor->set_label(p_label);
}
@@ -1173,6 +1173,7 @@ TileDataDefaultEditor::TileDataDefaultEditor() {
label = memnew(Label);
label->set_text(TTR("Painting:"));
+ label->set_theme_type_variation("HeaderSmall");
add_child(label);
toolbar->add_child(memnew(VSeparator));
@@ -2566,7 +2567,8 @@ TileDataTerrainsEditor::TileDataTerrainsEditor() {
undo_redo = EditorNode::get_undo_redo();
label = memnew(Label);
- label->set_text("Painting:");
+ label->set_text(TTR("Painting:"));
+ label->set_theme_type_variation("HeaderSmall");
add_child(label);
// Toolbar
diff --git a/editor/plugins/tiles/tile_map_editor.cpp b/editor/plugins/tiles/tile_map_editor.cpp
index d2f3eab31c..d914b9c363 100644
--- a/editor/plugins/tiles/tile_map_editor.cpp
+++ b/editor/plugins/tiles/tile_map_editor.cpp
@@ -884,6 +884,9 @@ void TileMapEditorTilesPlugin::forward_canvas_draw_over_viewport(Control *p_over
if (atlas_source) {
// Get tile data.
TileData *tile_data = atlas_source->get_tile_data(E.value.get_atlas_coords(), E.value.alternative_tile);
+ if (!tile_data) {
+ continue;
+ }
// Compute the offset
Rect2i source_rect = atlas_source->get_tile_texture_region(E.value.get_atlas_coords());
@@ -3998,7 +4001,7 @@ TileMapEditor::TileMapEditor() {
// Layer selector.
layers_selection_button = memnew(OptionButton);
layers_selection_button->set_custom_minimum_size(Size2(200, 0));
- layers_selection_button->set_text_overrun_behavior(TextParagraph::OVERRUN_TRIM_ELLIPSIS);
+ layers_selection_button->set_text_overrun_behavior(TextServer::OVERRUN_TRIM_ELLIPSIS);
layers_selection_button->set_tooltip(TTR("TileMap Layers"));
layers_selection_button->connect("item_selected", callable_mp(this, &TileMapEditor::_layers_selection_item_selected));
tile_map_toolbar->add_child(layers_selection_button);
diff --git a/editor/plugins/tiles/tile_set_atlas_source_editor.cpp b/editor/plugins/tiles/tile_set_atlas_source_editor.cpp
index 66459d3ef9..37ccc6ad45 100644
--- a/editor/plugins/tiles/tile_set_atlas_source_editor.cpp
+++ b/editor/plugins/tiles/tile_set_atlas_source_editor.cpp
@@ -97,9 +97,9 @@ bool TileSetAtlasSourceEditor::TileSetAtlasSourceProxyObject::_get(const StringN
void TileSetAtlasSourceEditor::TileSetAtlasSourceProxyObject::_get_property_list(List<PropertyInfo> *p_list) const {
p_list->push_back(PropertyInfo(Variant::STRING, "name", PROPERTY_HINT_NONE, ""));
p_list->push_back(PropertyInfo(Variant::OBJECT, "texture", PROPERTY_HINT_RESOURCE_TYPE, "Texture2D"));
- 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::VECTOR2I, "margins", PROPERTY_HINT_NONE, "suffix:px"));
+ p_list->push_back(PropertyInfo(Variant::VECTOR2I, "separation", PROPERTY_HINT_NONE, "suffix:px"));
+ p_list->push_back(PropertyInfo(Variant::VECTOR2I, "texture_region_size", PROPERTY_HINT_NONE, "suffix:px"));
p_list->push_back(PropertyInfo(Variant::BOOL, "use_texture_padding", PROPERTY_HINT_NONE, ""));
}
@@ -401,15 +401,15 @@ void TileSetAtlasSourceEditor::AtlasTileProxyObject::_get_property_list(List<Pro
if (all_alternatve_id_zero) {
p_list->push_back(PropertyInfo(Variant::NIL, "Animation", PROPERTY_HINT_NONE, "animation_", PROPERTY_USAGE_GROUP));
p_list->push_back(PropertyInfo(Variant::INT, "animation_columns", PROPERTY_HINT_NONE, ""));
- p_list->push_back(PropertyInfo(Variant::VECTOR2I, "animation_separation", PROPERTY_HINT_NONE, ""));
+ p_list->push_back(PropertyInfo(Variant::VECTOR2I, "animation_separation", PROPERTY_HINT_NONE, "suffix:px"));
p_list->push_back(PropertyInfo(Variant::FLOAT, "animation_speed", PROPERTY_HINT_NONE, ""));
p_list->push_back(PropertyInfo(Variant::INT, "animation_frames_count", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_EDITOR | PROPERTY_USAGE_ARRAY, "Frames,animation_frame_"));
// Not optimal, but returns value for the first tile. This is similar to what MultiNodeEdit does.
if (tile_set_atlas_source->get_tile_animation_frames_count(tiles.front()->get().tile) == 1) {
- p_list->push_back(PropertyInfo(Variant::FLOAT, "animation_frame_0/duration", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_READ_ONLY));
+ p_list->push_back(PropertyInfo(Variant::FLOAT, "animation_frame_0/duration", PROPERTY_HINT_NONE, "suffix:s", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_READ_ONLY));
} else {
for (int i = 0; i < tile_set_atlas_source->get_tile_animation_frames_count(tiles.front()->get().tile); i++) {
- p_list->push_back(PropertyInfo(Variant::FLOAT, vformat("animation_frame_%d/duration", i), PROPERTY_HINT_NONE, ""));
+ p_list->push_back(PropertyInfo(Variant::FLOAT, vformat("animation_frame_%d/duration", i), PROPERTY_HINT_NONE, "suffix:s"));
}
}
}
@@ -2335,6 +2335,7 @@ TileSetAtlasSourceEditor::TileSetAtlasSourceEditor() {
// Tile inspector.
tile_inspector_label = memnew(Label);
tile_inspector_label->set_text(TTR("Tile Properties:"));
+ tile_inspector_label->set_theme_type_variation("HeaderSmall");
middle_vbox_container->add_child(tile_inspector_label);
tile_proxy_object = memnew(AtlasTileProxyObject(this));
@@ -2350,7 +2351,7 @@ TileSetAtlasSourceEditor::TileSetAtlasSourceEditor() {
tile_inspector_no_tile_selected_label = memnew(Label);
tile_inspector_no_tile_selected_label->set_horizontal_alignment(HORIZONTAL_ALIGNMENT_CENTER);
- tile_inspector_no_tile_selected_label->set_text(TTR("No tile selected."));
+ tile_inspector_no_tile_selected_label->set_text(TTR("No tiles selected."));
middle_vbox_container->add_child(tile_inspector_no_tile_selected_label);
// Property values palette.
@@ -2358,6 +2359,7 @@ TileSetAtlasSourceEditor::TileSetAtlasSourceEditor() {
tile_data_editors_label = memnew(Label);
tile_data_editors_label->set_text(TTR("Paint Properties:"));
+ tile_data_editors_label->set_theme_type_variation("HeaderSmall");
middle_vbox_container->add_child(tile_data_editors_label);
tile_data_editor_dropdown_button = memnew(Button);
@@ -2381,6 +2383,7 @@ TileSetAtlasSourceEditor::TileSetAtlasSourceEditor() {
// Atlas source inspector.
atlas_source_inspector_label = memnew(Label);
atlas_source_inspector_label->set_text(TTR("Atlas Properties:"));
+ atlas_source_inspector_label->set_theme_type_variation("HeaderSmall");
middle_vbox_container->add_child(atlas_source_inspector_label);
atlas_source_proxy_object = memnew(TileSetAtlasSourceProxyObject());
diff --git a/editor/plugins/visual_shader_editor_plugin.cpp b/editor/plugins/visual_shader_editor_plugin.cpp
index ecf1bea6bb..8c72a886ea 100644
--- a/editor/plugins/visual_shader_editor_plugin.cpp
+++ b/editor/plugins/visual_shader_editor_plugin.cpp
@@ -1102,27 +1102,6 @@ void VisualShaderEditor::edit(VisualShader *p_visual_shader) {
if (!visual_shader->is_connected("changed", ce)) {
visual_shader->connect("changed", ce);
}
-#ifndef DISABLE_DEPRECATED
- Dictionary engine_version = Engine::get_singleton()->get_version_info();
- static Array components;
- if (components.is_empty()) {
- components.push_back("major");
- components.push_back("minor");
- }
- const Dictionary vs_version = visual_shader->get_engine_version();
- if (!vs_version.has_all(components)) {
- visual_shader->update_engine_version(engine_version);
- print_line(vformat(TTR("The shader (\"%s\") has been updated to correspond Godot %s.%s version."), visual_shader->get_path(), engine_version["major"], engine_version["minor"]));
- } else {
- for (int i = 0; i < components.size(); i++) {
- if (vs_version[components[i]] != engine_version[components[i]]) {
- visual_shader->update_engine_version(engine_version);
- print_line(vformat(TTR("The shader (\"%s\") has been updated to correspond Godot %s.%s version."), visual_shader->get_path(), engine_version["major"], engine_version["minor"]));
- break;
- }
- }
- }
-#endif
visual_shader->set_graph_offset(graph->get_scroll_ofs() / EDSCALE);
_set_mode(visual_shader->get_mode());
} else {
@@ -4851,7 +4830,7 @@ VisualShaderEditor::VisualShaderEditor() {
error_label = memnew(Label);
error_panel->add_child(error_label);
- error_label->set_autowrap_mode(Label::AUTOWRAP_WORD_SMART);
+ error_label->set_autowrap_mode(TextServer::AUTOWRAP_WORD_SMART);
///////////////////////////////////////
// POPUP MENU
@@ -5008,7 +4987,7 @@ VisualShaderEditor::VisualShaderEditor() {
}
alert = memnew(AcceptDialog);
- alert->get_label()->set_autowrap_mode(Label::AUTOWRAP_WORD);
+ alert->get_label()->set_autowrap_mode(TextServer::AUTOWRAP_WORD);
alert->get_label()->set_horizontal_alignment(HORIZONTAL_ALIGNMENT_CENTER);
alert->get_label()->set_vertical_alignment(VERTICAL_ALIGNMENT_CENTER);
alert->get_label()->set_custom_minimum_size(Size2(400, 60) * EDSCALE);
@@ -5666,48 +5645,6 @@ VisualShaderEditor::VisualShaderEditor() {
property_editor->connect("variant_changed", callable_mp(this, &VisualShaderEditor::_port_edited));
}
-/////////////////
-
-void VisualShaderEditorPlugin::edit(Object *p_object) {
- visual_shader_editor->edit(Object::cast_to<VisualShader>(p_object));
-}
-
-bool VisualShaderEditorPlugin::handles(Object *p_object) const {
- return p_object->is_class("VisualShader");
-}
-
-void VisualShaderEditorPlugin::make_visible(bool p_visible) {
- if (p_visible) {
- //editor->hide_animation_player_editors();
- //editor->animation_panel_make_visible(true);
- button->show();
- EditorNode::get_singleton()->make_bottom_panel_item_visible(visual_shader_editor);
- visual_shader_editor->update_nodes();
- visual_shader_editor->set_process_input(true);
- //visual_shader_editor->set_process(true);
- } else {
- if (visual_shader_editor->is_visible_in_tree()) {
- EditorNode::get_singleton()->hide_bottom_panel();
- }
- button->hide();
- visual_shader_editor->set_process_input(false);
- //visual_shader_editor->set_process(false);
- }
-}
-
-VisualShaderEditorPlugin::VisualShaderEditorPlugin() {
- visual_shader_editor = memnew(VisualShaderEditor);
- visual_shader_editor->set_custom_minimum_size(Size2(0, 300) * EDSCALE);
-
- button = EditorNode::get_singleton()->add_bottom_panel_item(TTR("VisualShader"), visual_shader_editor);
- button->hide();
-}
-
-VisualShaderEditorPlugin::~VisualShaderEditorPlugin() {
-}
-
-////////////////
-
class VisualShaderNodePluginInputEditor : public OptionButton {
GDCLASS(VisualShaderNodePluginInputEditor, OptionButton);
diff --git a/editor/plugins/visual_shader_editor_plugin.h b/editor/plugins/visual_shader_editor_plugin.h
index 1b56892ebf..b8da266ed7 100644
--- a/editor/plugins/visual_shader_editor_plugin.h
+++ b/editor/plugins/visual_shader_editor_plugin.h
@@ -493,23 +493,6 @@ public:
VisualShaderEditor();
};
-class VisualShaderEditorPlugin : public EditorPlugin {
- GDCLASS(VisualShaderEditorPlugin, EditorPlugin);
-
- VisualShaderEditor *visual_shader_editor = nullptr;
- Button *button = nullptr;
-
-public:
- virtual String get_name() const override { return "VisualShader"; }
- 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;
-
- VisualShaderEditorPlugin();
- ~VisualShaderEditorPlugin();
-};
-
class VisualShaderNodePluginDefault : public VisualShaderNodePlugin {
GDCLASS(VisualShaderNodePluginDefault, VisualShaderNodePlugin);
diff --git a/editor/project_converter_3_to_4.cpp b/editor/project_converter_3_to_4.cpp
index 515d09c3fc..9ed3b72587 100644
--- a/editor/project_converter_3_to_4.cpp
+++ b/editor/project_converter_3_to_4.cpp
@@ -32,14 +32,16 @@
#include "modules/modules_enabled.gen.h"
+const int ERROR_CODE = 77;
+
#ifdef MODULE_REGEX_ENABLED
+
#include "modules/regex/regex.h"
#include "core/os/time.h"
#include "core/templates/hash_map.h"
#include "core/templates/list.h"
-const int ERROR_CODE = 77;
const int CONVERSION_MAX_FILE_SIZE = 1024 * 1024 * 4; // 4 MB
static const char *enum_renames[][2] = {
@@ -108,6 +110,7 @@ static const char *enum_renames[][2] = {
{ "FORMAT_PVRTC2A", "FORMAT_PVRTC1_2A" }, // Image
{ "FORMAT_PVRTC4", "FORMAT_PVRTC1_4" }, // Image
{ "FORMAT_PVRTC4A", "FORMAT_PVRTC1_4A" }, // Image
+ { "FUNC_FRAC", "FUNC_FRACT" }, // VisualShaderNodeVectorFunc
{ "INSTANCE_LIGHTMAP_CAPTURE", "INSTANCE_LIGHTMAP" }, // RenderingServer
{ "JOINT_6DOF", "JOINT_TYPE_6DOF" }, // PhysicsServer3D
{ "JOINT_CONE_TWIST", "JOINT_TYPE_CONE_TWIST" }, // PhysicsServer3D
@@ -122,12 +125,14 @@ static const char *enum_renames[][2] = {
{ "MATH_RANDOM", "MATH_RANDI_RANGE" }, // VisualScriptBuiltinFunc
{ "MATH_STEPIFY", "MATH_STEP_DECIMALS" }, // VisualScriptBuiltinFunc
{ "MODE_CHARACTER", "MODE_DYNAMIC_LOCKED" }, // RigidBody2D, RigidBody3D
+ { "MODE_KINEMATIC", "FREEZE_MODE_KINEMATIC" }, // RigidDynamicBody
{ "MODE_OPEN_ANY", "FILE_MODE_OPEN_ANY" }, // FileDialog
{ "MODE_OPEN_DIR", "FILE_MODE_OPEN_DIR" }, // FileDialog
{ "MODE_OPEN_FILE", "FILE_MODE_OPEN_FILE" }, // FileDialog
{ "MODE_OPEN_FILES", "FILE_MODE_OPEN_FILES" }, // FileDialog
{ "MODE_RIGID", "MODE_DYNAMIC" }, // RigidBody2D, RigidBody3D
{ "MODE_SAVE_FILE", "FILE_MODE_SAVE_FILE" }, // FileDialog
+ { "MODE_STATIC", "FREEZE_MODE_STATIC" }, // RigidDynamicBody
{ "NOTIFICATION_APP_PAUSED", "NOTIFICATION_APPLICATION_PAUSED" }, // MainLoop
{ "NOTIFICATION_APP_RESUMED", "NOTIFICATION_APPLICATION_RESUMED" }, // MainLoop
{ "NOTIFICATION_PATH_CHANGED", "NOTIFICATION_PATH_RENAMED" }, //Node
@@ -206,7 +211,6 @@ static const char *gdscript_function_renames[][2] = {
// { "set_v_offset", "set_drag_vertical_offset" }, // Camera2D broke Camera3D, PathFollow3D, PathFollow2D
// {"get_points","get_points_id"},// Astar, broke Line2D, Convexpolygonshape
// {"get_v_scroll","get_v_scroll_bar"},//ItemList, broke TextView
- { "RenderingServer", "get_tab_alignment" }, // Tab
{ "_about_to_show", "_about_to_popup" }, // ColorPickerButton
{ "_get_configuration_warning", "_get_configuration_warnings" }, // Node
{ "_set_current", "set_current" }, // Camera2D
@@ -215,17 +219,20 @@ static const char *gdscript_function_renames[][2] = {
{ "_update_wrap_at", "_update_wrap_at_column" }, // TextEdit
{ "add_animation", "add_animation_library" }, // AnimationPlayer
{ "add_cancel", "add_cancel_button" }, // AcceptDialog
- { "add_central_force", "add_constant_central_force" }, //RigidDynamicBody2D
+ { "add_central_force", "apply_central_force" }, //RigidDynamicBody2D
{ "add_child_below_node", "add_sibling" }, // Node
{ "add_color_override", "add_theme_color_override" }, // Control
{ "add_constant_override", "add_theme_constant_override" }, // Control
{ "add_font_override", "add_theme_font_override" }, // Control
- { "add_force", "add_constant_force" }, //RigidDynamicBody2D
+ { "add_force", "apply_force" }, //RigidDynamicBody2D
{ "add_icon_override", "add_theme_icon_override" }, // Control
{ "add_scene_import_plugin", "add_scene_format_importer_plugin" }, //EditorPlugin
{ "add_stylebox_override", "add_theme_stylebox_override" }, // Control
- { "add_torque", "add_constant_torque" }, //RigidDynamicBody2D
+ { "add_torque", "apply_torque" }, //RigidDynamicBody2D
+ { "apply_changes", "_apply_changes" }, // EditorPlugin
{ "bind_child_node_to_bone", "set_bone_children" }, // Skeleton3D
+ { "body_add_force", "body_apply_force" }, // PhysicsServer2D
+ { "body_add_torque", "body_apply_torque" }, // PhysicsServer2D
{ "bumpmap_to_normalmap", "bump_map_to_normal_map" }, // Image
{ "can_be_hidden", "_can_be_hidden" }, // EditorNode3DGizmoPlugin
{ "can_drop_data_fw", "_can_drop_data_fw" }, // ScriptEditor
@@ -237,6 +244,7 @@ static const char *gdscript_function_renames[][2] = {
{ "clip_polyline_with_polygon_2d", "clip_polyline_with_polygon" }, //Geometry2D
{ "commit_handle", "_commit_handle" }, // EditorNode3DGizmo
{ "convex_hull_2d", "convex_hull" }, // Geometry2D
+ { "create_gizmo", "_create_gizmo" }, // EditorNode3DGizmoPlugin
{ "cursor_get_blink_speed", "get_caret_blink_speed" }, // TextEdit
{ "cursor_get_column", "get_caret_column" }, // TextEdit
{ "cursor_get_line", "get_caret_line" }, // TextEdit
@@ -249,8 +257,10 @@ static const char *gdscript_function_renames[][2] = {
{ "damped_string_joint_set_param", "damped_spring_joint_set_param" }, // PhysicsServer2D
{ "delete_char_at_cursor", "delete_char_at_caret" }, // LineEdit
{ "deselect_items", "deselect_all" }, // FileDialog
+ { "disable_plugin", "_disable_plugin" }, // EditorPlugin
{ "drop_data_fw", "_drop_data_fw" }, // ScriptEditor
{ "exclude_polygons_2d", "exclude_polygons" }, // Geometry2D
+ { "find_node", "find_child" }, // Node
{ "find_scancode_from_string", "find_keycode_from_string" }, // OS
{ "forward_canvas_draw_over_viewport", "_forward_canvas_draw_over_viewport" }, // EditorPlugin
{ "forward_canvas_force_draw_over_viewport", "_forward_canvas_force_draw_over_viewport" }, // EditorPlugin
@@ -285,7 +295,9 @@ static const char *gdscript_function_renames[][2] = {
{ "get_cull_mask_bit", "get_cull_mask_value" }, // Camera3D
{ "get_cursor_position", "get_caret_column" }, // LineEdit
{ "get_d", "get_distance" }, // LineShape2D
+ { "get_drag_data", "_get_drag_data" }, // Control
{ "get_drag_data_fw", "_get_drag_data_fw" }, // ScriptEditor
+ { "get_editor_description", "_get_editor_description" }, // Node
{ "get_editor_viewport", "get_viewport" }, // EditorPlugin
{ "get_enabled_focus_mode", "get_focus_mode" }, // BaseButton
{ "get_endian_swap", "is_big_endian" }, // File
@@ -325,6 +337,7 @@ static const char *gdscript_function_renames[][2] = {
{ "get_parameter_default_value", "_get_parameter_default_value" }, // AnimationNode
{ "get_parameter_list", "_get_parameter_list" }, // AnimationNode
{ "get_parent_spatial", "get_parent_node_3d" }, // Node3D
+ { "get_pause_mode", "get_process_mode" }, // Node
{ "get_physical_scancode", "get_physical_keycode" }, // InputEventKey
{ "get_physical_scancode_with_modifiers", "get_physical_keycode_with_modifiers" }, // InputEventKey
{ "get_plugin_icon", "_get_plugin_icon" }, // EditorPlugin
@@ -390,8 +403,10 @@ static const char *gdscript_function_renames[][2] = {
{ "is_a_parent_of", "is_ancestor_of" }, // Node
{ "is_commiting_action", "is_committing_action" }, // UndoRedo
{ "is_doubleclick", "is_double_click" }, // InputEventMouseButton
+ { "is_draw_red", "is_draw_warning" }, // EditorProperty
{ "is_h_drag_enabled", "is_drag_horizontal_enabled" }, // Camera2D
{ "is_handle_highlighted", "_is_handle_highlighted" }, // EditorNode3DGizmo, EditorNode3DGizmoPlugin
+ { "is_inverting_faces", "get_flip_faces" }, // CSGPrimitive3D
{ "is_network_master", "is_multiplayer_authority" }, // Node
{ "is_network_server", "is_server" }, // Multiplayer API
{ "is_normalmap", "is_normal_map" }, // NoiseTexture
@@ -413,6 +428,7 @@ static const char *gdscript_function_renames[][2] = {
{ "line_intersects_line_2d", "line_intersects_line" }, // Geometry2D
{ "load_from_globals", "load_from_project_settings" }, // InputMap
{ "make_convex_from_brothers", "make_convex_from_siblings" }, // CollisionShape3D
+ { "make_visible", "_make_visible" }, // EditorPlugin
{ "merge_polygons_2d", "merge_polygons" }, // Geometry2D
{ "mesh_surface_get_format", "mesh_surface_get_format_attribute_stride" }, // RenderingServer
{ "mesh_surface_update_region", "mesh_surface_update_attribute_region" }, // RenderingServer
@@ -436,6 +452,7 @@ static const char *gdscript_function_renames[][2] = {
{ "remove_color_override", "remove_theme_color_override" }, // Control
{ "remove_constant_override", "remove_theme_constant_override" }, // Control
{ "remove_font_override", "remove_theme_font_override" }, // Control
+ { "remove_icon_override", "remove_theme_icon_override" }, // Control
{ "remove_scene_import_plugin", "remove_scene_format_importer_plugin" }, //EditorPlugin
{ "remove_stylebox_override", "remove_theme_stylebox_override" }, // Control
{ "rename_animation", "rename_animation_library" }, // AnimationPlayer
@@ -463,6 +480,7 @@ static const char *gdscript_function_renames[][2] = {
{ "set_cursor_position", "set_caret_column" }, // LineEdit
{ "set_d", "set_distance" }, // WorldMarginShape2D
{ "set_doubleclick", "set_double_click" }, // InputEventMouseButton
+ { "set_draw_red", "set_draw_warning" }, // EditorProperty
{ "set_enabled_focus_mode", "set_focus_mode" }, // BaseButton
{ "set_endian_swap", "set_big_endian" }, // File
{ "set_expand_to_text_length", "set_expand_to_text_length_enabled" }, // LineEdit
@@ -475,6 +493,7 @@ static const char *gdscript_function_renames[][2] = {
{ "set_icon_align", "set_icon_alignment" }, // Button
{ "set_interior_ambient", "set_ambient_color" }, // ReflectionProbe
{ "set_interior_ambient_energy", "set_ambient_color_energy" }, // ReflectionProbe
+ { "set_invert_faces", "set_flip_faces" }, // CSGPrimitive3D
{ "set_is_initialized", "_is_initialized" }, // XRInterface
{ "set_is_primary", "set_primary" }, // XRInterface
{ "set_iterations_per_second", "set_physics_ticks_per_second" }, // Engine
@@ -485,6 +504,7 @@ static const char *gdscript_function_renames[][2] = {
{ "set_mid_height", "set_height" }, // CapsuleMesh
{ "set_network_master", "set_multiplayer_authority" }, // Node
{ "set_network_peer", "set_multiplayer_peer" }, // Multiplayer API
+ { "set_pause_mode", "set_process_mode" }, // Node
{ "set_physical_scancode", "set_physical_keycode" }, // InputEventKey
{ "set_refuse_new_network_connections", "set_refuse_new_connections" }, // Multiplayer API
{ "set_region", "set_region_enabled" }, // Sprite2D, Sprite broke AtlasTexture
@@ -1218,7 +1238,6 @@ static const char *class_renames[][2] = {
// { "Physics2DShapeQueryResult", "PhysicsShapeQueryResult2D" }, // Class is not visible in ClassDB
// { "PhysicsShapeQueryResult", "PhysicsShapeQueryResult3D" }, // Class is not visible in ClassDB
// { "NativeScript","NativeExtension"}, ??
- { "AStar", "AStar3D" },
{ "ARVRAnchor", "XRAnchor3D" },
{ "ARVRCamera", "XRCamera3D" },
{ "ARVRController", "XRController3D" },
@@ -1227,6 +1246,7 @@ static const char *class_renames[][2] = {
{ "ARVROrigin", "XROrigin3D" },
{ "ARVRPositionalTracker", "XRPositionalTracker" },
{ "ARVRServer", "XRServer" },
+ { "AStar", "AStar3D" },
{ "AnimatedSprite", "AnimatedSprite2D" },
{ "AnimationTreePlayer", "AnimationTree" },
{ "Area", "Area3D" }, // Be careful, this will be used everywhere
@@ -1342,6 +1362,7 @@ static const char *class_renames[][2] = {
{ "ResourceInteractiveLoader", "ResourceLoader" },
{ "RigidBody", "RigidDynamicBody3D" },
{ "RigidBody2D", "RigidDynamicBody2D" },
+ { "SceneTreeTween", "Tween" },
{ "Shape", "Shape3D" }, // Be careful, this will be used everywhere
{ "ShortCut", "Shortcut" },
{ "Skeleton", "Skeleton3D" },
@@ -2043,6 +2064,7 @@ bool ProjectConverter3To4::test_conversion() {
valid = valid & test_conversion_single_additional("set_cell_item(a, b)", "set_cell_item(a, b)", &ProjectConverter3To4::rename_gdscript_functions, "custom rename");
valid = valid & test_conversion_single_additional("get_cell_item_orientation(a, b,c)", "get_cell_item_orientation(Vector3i(a,b,c))", &ProjectConverter3To4::rename_gdscript_functions, "custom rename");
valid = valid & test_conversion_single_additional("get_cell_item(a, b,c)", "get_cell_item(Vector3i(a,b,c))", &ProjectConverter3To4::rename_gdscript_functions, "custom rename");
+ valid = valid & test_conversion_single_additional("map_to_world(a, b,c)", "map_to_world(Vector3i(a,b,c))", &ProjectConverter3To4::rename_gdscript_functions, "custom rename");
valid = valid & test_conversion_single_additional("PackedStringArray(req_godot).join('.')", "'.'.join(PackedStringArray(req_godot))", &ProjectConverter3To4::rename_gdscript_functions, "custom rename");
valid = valid & test_conversion_single_additional("=PackedStringArray(req_godot).join('.')", "='.'.join(PackedStringArray(req_godot))", &ProjectConverter3To4::rename_gdscript_functions, "custom rename");
@@ -2052,6 +2074,9 @@ bool ProjectConverter3To4::test_conversion() {
valid = valid & test_conversion_single_additional("\t aa", "\taa", &ProjectConverter3To4::rename_gdscript_functions, "custom rename");
valid = valid & test_conversion_single_additional(" \taa", " \taa", &ProjectConverter3To4::rename_gdscript_functions, "custom rename");
+ valid = valid & test_conversion_single_additional("apply_force(position, impulse)", "apply_force(impulse, position)", &ProjectConverter3To4::rename_gdscript_functions, "custom rename");
+ valid = valid & test_conversion_single_additional("apply_impulse(position, impulse)", "apply_impulse(impulse, position)", &ProjectConverter3To4::rename_gdscript_functions, "custom rename");
+
valid = valid & test_conversion_single_additional("AAA Color.white AF", "AAA Color.WHITE AF", &ProjectConverter3To4::rename_enums, "custom rename");
// Custom rule conversion
@@ -2991,14 +3016,39 @@ void ProjectConverter3To4::rename_gdscript_functions(String &file_content) {
}
}
}
-
- // TODO - add_surface_from_arrays - additional 4 argument
- // ENetMultiplayerPeer.create_client - additional argument
- // ENetMultiplayerPeer.create_server - additional argument
- // Translation.get_message (and similar)
- // TreeItem.move_after() - new argument
- // TreeItem.move_before() - new argument
- // UndoRedo.commit_action() - additional argument
+ // apply_impulse(A, B) -> apply_impulse(B, A)
+ if (line.find("apply_impulse(") != -1) {
+ int start = line.find("apply_impulse(");
+ int end = get_end_parenthess(line.substr(start)) + 1;
+ if (end > -1) {
+ Vector<String> parts = parse_arguments(line.substr(start, end));
+ if (parts.size() == 2) {
+ line = line.substr(0, start) + "apply_impulse(" + parts[1] + ", " + parts[0] + ")" + line.substr(end + start);
+ }
+ }
+ }
+ // apply_force(A, B) -> apply_force(B, A)
+ if (line.find("apply_force(") != -1) {
+ int start = line.find("apply_force(");
+ int end = get_end_parenthess(line.substr(start)) + 1;
+ if (end > -1) {
+ Vector<String> parts = parse_arguments(line.substr(start, end));
+ if (parts.size() == 2) {
+ line = line.substr(0, start) + "apply_force(" + parts[1] + ", " + parts[0] + ")" + line.substr(end + start);
+ }
+ }
+ }
+ // map_to_world(a, b, c) -> map_to_world(Vector3i(a, b, c))
+ if (line.find("map_to_world(") != -1) {
+ int start = line.find("map_to_world(");
+ int end = get_end_parenthess(line.substr(start)) + 1;
+ if (end > -1) {
+ Vector<String> parts = parse_arguments(line.substr(start, end));
+ if (parts.size() == 3) {
+ line = line.substr(0, start) + "map_to_world(Vector3i(" + parts[0] + "," + parts[1] + "," + parts[2] + "))" + line.substr(end + start);
+ }
+ }
+ }
}
// Collect vector to string
@@ -3396,13 +3446,39 @@ Vector<String> ProjectConverter3To4::check_for_rename_gdscript_functions(Vector<
}
}
- // TODO - add_surface_from_arrays - additional 4 argument
- // ENetMultiplayerPeer.create_client - additional argument
- // ENetMultiplayerPeer.create_server - additional argument
- // Translation.get_message (and similar)
- // TreeItem.move_after() - new argument
- // TreeItem.move_before() - new argument
- // UndoRedo.commit_action() - additional argument
+ // apply_impulse(A, B) -> apply_impulse(B, A)
+ if (line.find("apply_impulse(") != -1) {
+ int start = line.find("apply_impulse(");
+ int end = get_end_parenthess(line.substr(start)) + 1;
+ if (end > -1) {
+ Vector<String> parts = parse_arguments(line.substr(start, end));
+ if (parts.size() == 2) {
+ line = line.substr(0, start) + "apply_impulse(" + parts[1] + ", " + parts[0] + ")" + line.substr(end + start);
+ }
+ }
+ }
+ // apply_force(A, B) -> apply_force(B, A)
+ if (line.find("apply_force(") != -1) {
+ int start = line.find("apply_force(");
+ int end = get_end_parenthess(line.substr(start)) + 1;
+ if (end > -1) {
+ Vector<String> parts = parse_arguments(line.substr(start, end));
+ if (parts.size() == 2) {
+ line = line.substr(0, start) + "apply_force(" + parts[1] + ", " + parts[0] + ")" + line.substr(end + start);
+ }
+ }
+ }
+ // map_to_world(a, b, c) -> map_to_world(Vector3i(a, b, c))
+ if (line.find("map_to_world(") != -1) {
+ int start = line.find("get_cell_item_orientation(");
+ int end = get_end_parenthess(line.substr(start)) + 1;
+ if (end > -1) {
+ Vector<String> parts = parse_arguments(line.substr(start, end));
+ if (parts.size() == 3) {
+ line = line.substr(0, start) + "map_to_world(Vector3i(" + parts[0] + "," + parts[1] + "," + parts[2] + "))" + line.substr(end + start);
+ }
+ }
+ }
if (old_line != line) {
found_things.append(simple_line_formatter(current_line, old_line, line));
diff --git a/editor/project_manager.cpp b/editor/project_manager.cpp
index 7fcabb1e80..2e7b6f7476 100644
--- a/editor/project_manager.cpp
+++ b/editor/project_manager.cpp
@@ -1877,6 +1877,15 @@ void ProjectManager::_notification(int p_what) {
search_box->set_right_icon(get_theme_icon(SNAME("Search"), SNAME("EditorIcons")));
search_box->set_clear_button_enabled(true);
+ create_btn->set_icon(get_theme_icon(SNAME("Add"), SNAME("EditorIcons")));
+ import_btn->set_icon(get_theme_icon(SNAME("Load"), SNAME("EditorIcons")));
+ scan_btn->set_icon(get_theme_icon(SNAME("Search"), SNAME("EditorIcons")));
+ open_btn->set_icon(get_theme_icon(SNAME("Edit"), SNAME("EditorIcons")));
+ run_btn->set_icon(get_theme_icon(SNAME("Play"), SNAME("EditorIcons")));
+ rename_btn->set_icon(get_theme_icon(SNAME("Rename"), SNAME("EditorIcons")));
+ erase_btn->set_icon(get_theme_icon(SNAME("Remove"), SNAME("EditorIcons")));
+ erase_missing_btn->set_icon(get_theme_icon(SNAME("Clear"), SNAME("EditorIcons")));
+
Engine::get_singleton()->set_editor_hint(false);
} break;
@@ -2644,40 +2653,48 @@ ProjectManager::ProjectManager() {
tree_vb->set_custom_minimum_size(Size2(120, 120));
local_projects_hb->add_child(tree_vb);
- Button *create = memnew(Button);
- create->set_text(TTR("New Project"));
- 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"), 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"), KeyModifierMask::CMD | Key::S));
- scan->connect("pressed", callable_mp(this, &ProjectManager::_scan_projects));
- tree_vb->add_child(scan);
+ const int btn_h_separation = int(6 * EDSCALE);
+
+ create_btn = memnew(Button);
+ create_btn->set_text(TTR("New Project"));
+ create_btn->add_theme_constant_override("h_separation", btn_h_separation);
+ create_btn->set_shortcut(ED_SHORTCUT("project_manager/new_project", TTR("New Project"), KeyModifierMask::CMD | Key::N));
+ create_btn->connect("pressed", callable_mp(this, &ProjectManager::_new_project));
+ tree_vb->add_child(create_btn);
+
+ import_btn = memnew(Button);
+ import_btn->set_text(TTR("Import"));
+ import_btn->add_theme_constant_override("h_separation", btn_h_separation);
+ import_btn->set_shortcut(ED_SHORTCUT("project_manager/import_project", TTR("Import Project"), KeyModifierMask::CMD | Key::I));
+ import_btn->connect("pressed", callable_mp(this, &ProjectManager::_import_project));
+ tree_vb->add_child(import_btn);
+
+ scan_btn = memnew(Button);
+ scan_btn->set_text(TTR("Scan"));
+ scan_btn->add_theme_constant_override("h_separation", btn_h_separation);
+ scan_btn->set_shortcut(ED_SHORTCUT("project_manager/scan_projects", TTR("Scan Projects"), KeyModifierMask::CMD | Key::S));
+ scan_btn->connect("pressed", callable_mp(this, &ProjectManager::_scan_projects));
+ tree_vb->add_child(scan_btn);
tree_vb->add_child(memnew(HSeparator));
open_btn = memnew(Button);
open_btn->set_text(TTR("Edit"));
+ open_btn->add_theme_constant_override("h_separation", btn_h_separation);
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->add_theme_constant_override("h_separation", btn_h_separation);
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->add_theme_constant_override("h_separation", btn_h_separation);
// 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));
@@ -2685,12 +2702,14 @@ ProjectManager::ProjectManager() {
erase_btn = memnew(Button);
erase_btn->set_text(TTR("Remove"));
+ erase_btn->add_theme_constant_override("h_separation", btn_h_separation);
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);
erase_missing_btn = memnew(Button);
erase_missing_btn->set_text(TTR("Remove Missing"));
+ erase_missing_btn->add_theme_constant_override("h_separation", btn_h_separation);
erase_missing_btn->connect("pressed", callable_mp(this, &ProjectManager::_erase_missing_projects));
tree_vb->add_child(erase_missing_btn);
diff --git a/editor/project_manager.h b/editor/project_manager.h
index 2ffe293f3b..28383e4142 100644
--- a/editor/project_manager.h
+++ b/editor/project_manager.h
@@ -63,8 +63,11 @@ class ProjectManager : public Control {
Label *loading_label = nullptr;
OptionButton *filter_option = nullptr;
- Button *run_btn = nullptr;
+ Button *create_btn = nullptr;
+ Button *import_btn = nullptr;
+ Button *scan_btn = nullptr;
Button *open_btn = nullptr;
+ Button *run_btn = nullptr;
Button *rename_btn = nullptr;
Button *erase_btn = nullptr;
Button *erase_missing_btn = nullptr;
diff --git a/editor/project_settings_editor.cpp b/editor/project_settings_editor.cpp
index 404199d2da..1524993bd0 100644
--- a/editor/project_settings_editor.cpp
+++ b/editor/project_settings_editor.cpp
@@ -35,6 +35,7 @@
#include "editor/editor_log.h"
#include "editor/editor_node.h"
#include "editor/editor_scale.h"
+#include "servers/movie_writer/movie_writer.h"
ProjectSettingsEditor *ProjectSettingsEditor::singleton = nullptr;
@@ -261,6 +262,7 @@ void ProjectSettingsEditor::_add_feature_overrides() {
presets.insert("standalone");
presets.insert("32");
presets.insert("64");
+ presets.insert("movie");
EditorExport *ee = EditorExport::get_singleton();
@@ -698,4 +700,6 @@ ProjectSettingsEditor::ProjectSettingsEditor(EditorData *p_data) {
import_defaults_editor->set_name(TTR("Import Defaults"));
tab_container->add_child(import_defaults_editor);
import_defaults_editor->connect("project_settings_changed", callable_mp(this, &ProjectSettingsEditor::queue_save));
+
+ MovieWriter::set_extensions_hint(); // ensure extensions are properly displayed.
}
diff --git a/editor/property_editor.cpp b/editor/property_editor.cpp
index 771d34d841..d936e821df 100644
--- a/editor/property_editor.cpp
+++ b/editor/property_editor.cpp
@@ -1474,7 +1474,7 @@ void CustomPropertyEditor::_modified(String p_string) {
v = value_editor[0]->get_text().to_int();
return;
} else {
- v = expr->execute(Array(), nullptr, false);
+ v = expr->execute(Array(), nullptr, false, false);
}
if (v != prev_v) {
@@ -1650,7 +1650,7 @@ real_t CustomPropertyEditor::_parse_real_expression(String text) {
if (err != OK) {
out = value_editor[0]->get_text().to_float();
} else {
- out = expr->execute(Array(), nullptr, false);
+ out = expr->execute(Array(), nullptr, false, true);
}
return out;
}
diff --git a/editor/quick_open.cpp b/editor/quick_open.cpp
index 53da945868..4938699fc4 100644
--- a/editor/quick_open.cpp
+++ b/editor/quick_open.cpp
@@ -146,8 +146,8 @@ void EditorQuickOpen::_confirmed() {
return;
}
_cleanup();
- emit_signal(SNAME("quick_open"));
hide();
+ emit_signal(SNAME("quick_open"));
}
void EditorQuickOpen::cancel_pressed() {
diff --git a/editor/rename_dialog.cpp b/editor/rename_dialog.cpp
index e47250fcf8..a8278b9aab 100644
--- a/editor/rename_dialog.cpp
+++ b/editor/rename_dialog.cpp
@@ -283,7 +283,7 @@ RenameDialog::RenameDialog(SceneTreeEditor *p_scene_tree_editor, UndoRedo *p_und
vbc->add_child(lbl_preview_title);
lbl_preview = memnew(Label);
- lbl_preview->set_autowrap_mode(Label::AUTOWRAP_WORD_SMART);
+ lbl_preview->set_autowrap_mode(TextServer::AUTOWRAP_WORD_SMART);
vbc->add_child(lbl_preview);
// ---- Dialog related
diff --git a/editor/scene_create_dialog.cpp b/editor/scene_create_dialog.cpp
new file mode 100644
index 0000000000..64aea54c5f
--- /dev/null
+++ b/editor/scene_create_dialog.cpp
@@ -0,0 +1,312 @@
+/*************************************************************************/
+/* scene_create_dialog.cpp */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2022 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 "scene_create_dialog.h"
+
+#include "core/io/dir_access.h"
+#include "editor/create_dialog.h"
+#include "editor/editor_node.h"
+#include "editor/editor_scale.h"
+#include "scene/2d/node_2d.h"
+#include "scene/3d/node_3d.h"
+#include "scene/gui/box_container.h"
+#include "scene/gui/check_box.h"
+#include "scene/gui/grid_container.h"
+#include "scene/gui/line_edit.h"
+#include "scene/gui/option_button.h"
+#include "scene/gui/panel_container.h"
+#include "scene/resources/packed_scene.h"
+
+void SceneCreateDialog::_notification(int p_what) {
+ switch (p_what) {
+ case NOTIFICATION_ENTER_TREE:
+ case NOTIFICATION_THEME_CHANGED: {
+ select_node_button->set_icon(get_theme_icon(SNAME("ClassList"), SNAME("EditorIcons")));
+ node_type_2d->set_icon(get_theme_icon(SNAME("Node2D"), SNAME("EditorIcons")));
+ node_type_3d->set_icon(get_theme_icon(SNAME("Node3D"), SNAME("EditorIcons")));
+ node_type_gui->set_icon(get_theme_icon(SNAME("Control"), SNAME("EditorIcons")));
+ node_type_other->add_theme_icon_override(SNAME("icon"), get_theme_icon(SNAME("Node"), SNAME("EditorIcons")));
+ status_panel->add_theme_style_override("panel", get_theme_stylebox(SNAME("bg"), SNAME("Tree")));
+ } break;
+ }
+}
+
+void SceneCreateDialog::config(const String &p_dir) {
+ directory = p_dir;
+ root_name_edit->set_text("");
+ scene_name_edit->set_text("");
+ scene_name_edit->call_deferred(SNAME("grab_focus"));
+ update_dialog();
+}
+
+void SceneCreateDialog::accept_create() {
+ if (!get_ok_button()->is_disabled()) {
+ hide();
+ emit_signal(SNAME("confirmed"));
+ }
+}
+
+void SceneCreateDialog::browse_types() {
+ select_node_dialog->popup_create(true);
+ select_node_dialog->set_title(TTR("Pick Root Node Type"));
+ select_node_dialog->get_ok_button()->set_text(TTR("Pick"));
+}
+
+void SceneCreateDialog::on_type_picked() {
+ other_type_display->set_text(select_node_dialog->get_selected_type().get_slice(" ", 0));
+ if (node_type_other->is_pressed()) {
+ update_dialog();
+ } else {
+ node_type_other->set_pressed(true); // Calls update_dialog() via group.
+ }
+}
+
+void SceneCreateDialog::update_dialog() {
+ scene_name = scene_name_edit->get_text().strip_edges();
+ update_error(file_error_label, MSG_OK, TTR("Scene name is valid."));
+
+ bool is_valid = true;
+ if (scene_name.is_empty()) {
+ update_error(file_error_label, MSG_ERROR, TTR("Scene name is empty."));
+ is_valid = false;
+ }
+
+ if (is_valid) {
+ if (!scene_name.ends_with(".")) {
+ scene_name += ".";
+ }
+ scene_name += scene_extension_picker->get_selected_metadata().operator String();
+ }
+
+ if (is_valid && !scene_name.is_valid_filename()) {
+ update_error(file_error_label, MSG_ERROR, TTR("File name invalid."));
+ is_valid = false;
+ }
+
+ if (is_valid) {
+ scene_name = directory.plus_file(scene_name);
+ Ref<DirAccess> da = DirAccess::create(DirAccess::ACCESS_RESOURCES);
+ if (da->file_exists(scene_name)) {
+ update_error(file_error_label, MSG_ERROR, TTR("File already exists."));
+ is_valid = false;
+ }
+ }
+
+ const StringName root_type_name = StringName(other_type_display->get_text());
+ if (has_theme_icon(root_type_name, SNAME("EditorIcons"))) {
+ node_type_other->set_icon(get_theme_icon(root_type_name, SNAME("EditorIcons")));
+ } else {
+ node_type_other->set_icon(nullptr);
+ }
+
+ update_error(node_error_label, MSG_OK, "Root node valid.");
+
+ root_name = root_name_edit->get_text().strip_edges();
+ if (root_name.is_empty()) {
+ root_name = scene_name.get_file().get_basename();
+ }
+
+ if (!root_name.is_valid_identifier()) {
+ update_error(node_error_label, MSG_ERROR, TTR("Invalid root node name."));
+ is_valid = false;
+ }
+
+ get_ok_button()->set_disabled(!is_valid);
+}
+
+void SceneCreateDialog::update_error(Label *p_label, MsgType p_type, const String &p_msg) {
+ p_label->set_text(String::utf8("• ") + p_msg);
+ switch (p_type) {
+ case MSG_OK:
+ p_label->add_theme_color_override("font_color", get_theme_color(SNAME("success_color"), SNAME("Editor")));
+ break;
+ case MSG_ERROR:
+ p_label->add_theme_color_override("font_color", get_theme_color(SNAME("error_color"), SNAME("Editor")));
+ break;
+ }
+}
+
+String SceneCreateDialog::get_scene_path() const {
+ return scene_name;
+}
+
+Node *SceneCreateDialog::create_scene_root() {
+ ERR_FAIL_NULL_V(node_type_group->get_pressed_button(), nullptr);
+ RootType type = (RootType)node_type_group->get_pressed_button()->get_meta(type_meta).operator int();
+
+ Node *root = nullptr;
+ switch (type) {
+ case ROOT_2D_SCENE:
+ root = memnew(Node2D);
+ break;
+ case ROOT_3D_SCENE:
+ root = memnew(Node3D);
+ break;
+ case ROOT_USER_INTERFACE: {
+ Control *gui = memnew(Control);
+ gui->set_anchors_and_offsets_preset(Control::PRESET_WIDE);
+ root = gui;
+ } break;
+ case ROOT_OTHER:
+ root = Object::cast_to<Node>(select_node_dialog->instance_selected());
+ break;
+ }
+
+ ERR_FAIL_NULL_V(root, nullptr);
+ root->set_name(root_name);
+ return root;
+}
+
+SceneCreateDialog::SceneCreateDialog() {
+ select_node_dialog = memnew(CreateDialog);
+ add_child(select_node_dialog);
+ select_node_dialog->set_base_type("Node");
+ select_node_dialog->select_base();
+ select_node_dialog->connect("create", callable_mp(this, &SceneCreateDialog::on_type_picked));
+
+ VBoxContainer *main_vb = memnew(VBoxContainer);
+ add_child(main_vb);
+
+ GridContainer *gc = memnew(GridContainer);
+ main_vb->add_child(gc);
+ gc->set_columns(2);
+
+ {
+ Label *label = memnew(Label(TTR("Root Type:")));
+ gc->add_child(label);
+ label->set_v_size_flags(Control::SIZE_SHRINK_BEGIN);
+
+ VBoxContainer *vb = memnew(VBoxContainer);
+ gc->add_child(vb);
+
+ node_type_group.instantiate();
+
+ node_type_2d = memnew(CheckBox);
+ vb->add_child(node_type_2d);
+ node_type_2d->set_text(TTR("2D Scene"));
+ node_type_2d->set_button_group(node_type_group);
+ node_type_2d->set_meta(type_meta, ROOT_2D_SCENE);
+ node_type_2d->set_pressed(true);
+
+ node_type_3d = memnew(CheckBox);
+ vb->add_child(node_type_3d);
+ node_type_3d->set_text(TTR("3D Scene"));
+ node_type_3d->set_button_group(node_type_group);
+ node_type_3d->set_meta(type_meta, ROOT_3D_SCENE);
+
+ node_type_gui = memnew(CheckBox);
+ vb->add_child(node_type_gui);
+ node_type_gui->set_text(TTR("User Interface"));
+ node_type_gui->set_button_group(node_type_group);
+ node_type_gui->set_meta(type_meta, ROOT_USER_INTERFACE);
+
+ HBoxContainer *hb = memnew(HBoxContainer);
+ vb->add_child(hb);
+
+ node_type_other = memnew(CheckBox);
+ hb->add_child(node_type_other);
+ node_type_other->set_button_group(node_type_group);
+ node_type_other->set_meta(type_meta, ROOT_OTHER);
+
+ Control *spacing = memnew(Control);
+ hb->add_child(spacing);
+ spacing->set_custom_minimum_size(Size2(4 * EDSCALE, 0));
+
+ other_type_display = memnew(LineEdit);
+ hb->add_child(other_type_display);
+ other_type_display->set_h_size_flags(Control::SIZE_EXPAND_FILL);
+ other_type_display->set_editable(false);
+ other_type_display->set_text("Node");
+
+ select_node_button = memnew(Button);
+ hb->add_child(select_node_button);
+ select_node_button->connect("pressed", callable_mp(this, &SceneCreateDialog::browse_types));
+
+ node_type_group->connect("pressed", callable_mp(this, &SceneCreateDialog::update_dialog).unbind(1));
+ }
+
+ {
+ Label *label = memnew(Label(TTR("Scene Name:")));
+ gc->add_child(label);
+
+ HBoxContainer *hb = memnew(HBoxContainer);
+ gc->add_child(hb);
+
+ scene_name_edit = memnew(LineEdit);
+ hb->add_child(scene_name_edit);
+ scene_name_edit->set_h_size_flags(Control::SIZE_EXPAND_FILL);
+ scene_name_edit->connect("text_changed", callable_mp(this, &SceneCreateDialog::update_dialog).unbind(1));
+ scene_name_edit->connect("text_submitted", callable_mp(this, &SceneCreateDialog::accept_create).unbind(1));
+
+ List<String> extensions;
+ Ref<PackedScene> sd = memnew(PackedScene);
+ ResourceSaver::get_recognized_extensions(sd, &extensions);
+
+ scene_extension_picker = memnew(OptionButton);
+ hb->add_child(scene_extension_picker);
+ for (const String &E : extensions) {
+ scene_extension_picker->add_item("." + E);
+ scene_extension_picker->set_item_metadata(-1, E);
+ }
+ }
+
+ {
+ Label *label = memnew(Label(TTR("Root Name:")));
+ gc->add_child(label);
+
+ root_name_edit = memnew(LineEdit);
+ gc->add_child(root_name_edit);
+ root_name_edit->set_placeholder(TTR("Leave empty to use scene name"));
+ root_name_edit->set_h_size_flags(Control::SIZE_EXPAND_FILL);
+ root_name_edit->connect("text_changed", callable_mp(this, &SceneCreateDialog::update_dialog).unbind(1));
+ root_name_edit->connect("text_submitted", callable_mp(this, &SceneCreateDialog::accept_create).unbind(1));
+ }
+
+ Control *spacing = memnew(Control);
+ main_vb->add_child(spacing);
+ spacing->set_custom_minimum_size(Size2(0, 10 * EDSCALE));
+
+ status_panel = memnew(PanelContainer);
+ main_vb->add_child(status_panel);
+ status_panel->set_h_size_flags(Control::SIZE_FILL);
+ status_panel->set_v_size_flags(Control::SIZE_EXPAND_FILL);
+
+ VBoxContainer *status_vb = memnew(VBoxContainer);
+ status_panel->add_child(status_vb);
+
+ file_error_label = memnew(Label);
+ status_vb->add_child(file_error_label);
+
+ node_error_label = memnew(Label);
+ status_vb->add_child(node_error_label);
+
+ set_title(TTR("Create New Scene"));
+ set_min_size(Size2i(400 * EDSCALE, 0));
+}
diff --git a/editor/scene_create_dialog.h b/editor/scene_create_dialog.h
new file mode 100644
index 0000000000..5ac9d89cd7
--- /dev/null
+++ b/editor/scene_create_dialog.h
@@ -0,0 +1,104 @@
+/*************************************************************************/
+/* scene_create_dialog.h */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2022 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 SCENE_CREATE_DIALOG_H
+#define SCENE_CREATE_DIALOG_H
+
+#include "scene/gui/dialogs.h"
+
+class ButtonGroup;
+class CheckBox;
+class CreateDialog;
+class EditorFileDialog;
+class Label;
+class LineEdit;
+class OptionButton;
+class PanelContainer;
+
+class SceneCreateDialog : public ConfirmationDialog {
+ GDCLASS(SceneCreateDialog, ConfirmationDialog);
+
+ enum MsgType {
+ MSG_OK,
+ MSG_ERROR,
+ };
+
+ const StringName type_meta = StringName("type");
+
+public:
+ enum RootType {
+ ROOT_2D_SCENE,
+ ROOT_3D_SCENE,
+ ROOT_USER_INTERFACE,
+ ROOT_OTHER,
+ };
+
+private:
+ String directory;
+ String scene_name;
+ String root_name;
+
+ Ref<ButtonGroup> node_type_group;
+ CheckBox *node_type_2d = nullptr;
+ CheckBox *node_type_3d = nullptr;
+ CheckBox *node_type_gui = nullptr;
+ CheckBox *node_type_other = nullptr;
+
+ LineEdit *other_type_display = nullptr;
+ Button *select_node_button = nullptr;
+ CreateDialog *select_node_dialog = nullptr;
+
+ LineEdit *scene_name_edit = nullptr;
+ OptionButton *scene_extension_picker = nullptr;
+ LineEdit *root_name_edit = nullptr;
+
+ PanelContainer *status_panel = nullptr;
+ Label *file_error_label = nullptr;
+ Label *node_error_label = nullptr;
+
+ void accept_create();
+ void browse_types();
+ void on_type_picked();
+ void update_dialog();
+ void update_error(Label *p_label, MsgType p_type, const String &p_msg);
+
+protected:
+ void _notification(int p_what);
+
+public:
+ void config(const String &p_dir);
+
+ String get_scene_path() const;
+ Node *create_scene_root();
+
+ SceneCreateDialog();
+};
+
+#endif // SCENE_CREATE_DIALOG_H
diff --git a/editor/scene_tree_dock.cpp b/editor/scene_tree_dock.cpp
index 08df4cdf3c..2e1090e6c0 100644
--- a/editor/scene_tree_dock.cpp
+++ b/editor/scene_tree_dock.cpp
@@ -2418,8 +2418,8 @@ void SceneTreeDock::_new_scene_from(String p_file) {
Node *copy = base->duplicate_from_editor(duplimap);
if (copy) {
- for (int i = 0; i < copy->get_child_count(); i++) {
- _set_node_owner_recursive(copy->get_child(i), copy);
+ for (int i = 0; i < copy->get_child_count(false); i++) {
+ _set_node_owner_recursive(copy->get_child(i, false), copy);
}
Ref<PackedScene> sdata = memnew(PackedScene);
@@ -2456,8 +2456,8 @@ void SceneTreeDock::_set_node_owner_recursive(Node *p_node, Node *p_owner) {
p_node->set_owner(p_owner);
}
- for (int i = 0; i < p_node->get_child_count(); i++) {
- _set_node_owner_recursive(p_node->get_child(i), p_owner);
+ for (int i = 0; i < p_node->get_child_count(false); i++) {
+ _set_node_owner_recursive(p_node->get_child(i, false), p_owner);
}
}
diff --git a/editor/scene_tree_editor.cpp b/editor/scene_tree_editor.cpp
index 5536e09da7..86fa9222c0 100644
--- a/editor/scene_tree_editor.cpp
+++ b/editor/scene_tree_editor.cpp
@@ -1353,8 +1353,9 @@ void SceneTreeDialog::_cancel() {
void SceneTreeDialog::_select() {
if (tree->get_selected()) {
- emit_signal(SNAME("selected"), tree->get_selected()->get_path());
+ // The signal may cause another dialog to be displayed, so be sure to hide this one first.
hide();
+ emit_signal(SNAME("selected"), tree->get_selected()->get_path());
}
}
diff --git a/editor/script_create_dialog.cpp b/editor/script_create_dialog.cpp
index 9530a58eb2..e8561de19c 100644
--- a/editor/script_create_dialog.cpp
+++ b/editor/script_create_dialog.cpp
@@ -940,7 +940,7 @@ ScriptCreateDialog::ScriptCreateDialog() {
builtin_warning_label->set_text(
TTR("Note: Built-in scripts have some limitations and can't be edited using an external editor."));
vb->add_child(builtin_warning_label);
- builtin_warning_label->set_autowrap_mode(Label::AUTOWRAP_WORD_SMART);
+ builtin_warning_label->set_autowrap_mode(TextServer::AUTOWRAP_WORD_SMART);
builtin_warning_label->hide();
script_name_warning_label = memnew(Label);
@@ -948,12 +948,12 @@ ScriptCreateDialog::ScriptCreateDialog() {
TTR("Warning: Having the script name be the same as a built-in type is usually not desired."));
vb->add_child(script_name_warning_label);
script_name_warning_label->add_theme_color_override("font_color", Color(1, 0.85, 0.4));
- script_name_warning_label->set_autowrap_mode(Label::AUTOWRAP_WORD_SMART);
+ script_name_warning_label->set_autowrap_mode(TextServer::AUTOWRAP_WORD_SMART);
script_name_warning_label->hide();
template_info_label = memnew(Label);
vb->add_child(template_info_label);
- template_info_label->set_autowrap_mode(Label::AUTOWRAP_WORD_SMART);
+ template_info_label->set_autowrap_mode(TextServer::AUTOWRAP_WORD_SMART);
status_panel = memnew(PanelContainer);
status_panel->set_h_size_flags(Control::SIZE_FILL);
@@ -1090,7 +1090,7 @@ ScriptCreateDialog::ScriptCreateDialog() {
add_child(file_browse);
get_ok_button()->set_text(TTR("Create"));
alert = memnew(AcceptDialog);
- alert->get_label()->set_autowrap_mode(Label::AUTOWRAP_WORD_SMART);
+ alert->get_label()->set_autowrap_mode(TextServer::AUTOWRAP_WORD_SMART);
alert->get_label()->set_horizontal_alignment(HORIZONTAL_ALIGNMENT_CENTER);
alert->get_label()->set_vertical_alignment(VERTICAL_ALIGNMENT_CENTER);
alert->get_label()->set_custom_minimum_size(Size2(325, 60) * EDSCALE);
diff --git a/editor/shader_create_dialog.cpp b/editor/shader_create_dialog.cpp
index 9c322320b8..f70c46c8d8 100644
--- a/editor/shader_create_dialog.cpp
+++ b/editor/shader_create_dialog.cpp
@@ -184,7 +184,6 @@ void ShaderCreateDialog::_create_new() {
Ref<VisualShader> visual_shader;
visual_shader.instantiate();
shader = visual_shader;
- visual_shader->set_engine_version(Engine::get_singleton()->get_version_info());
visual_shader->set_mode(Shader::Mode(current_mode));
}
@@ -529,7 +528,7 @@ ShaderCreateDialog::ShaderCreateDialog() {
builtin_warning_label->set_text(
TTR("Note: Built-in shaders can't be edited using an external editor."));
vb->add_child(builtin_warning_label);
- builtin_warning_label->set_autowrap_mode(Label::AUTOWRAP_WORD_SMART);
+ builtin_warning_label->set_autowrap_mode(TextServer::AUTOWRAP_WORD_SMART);
builtin_warning_label->hide();
status_panel = memnew(PanelContainer);
@@ -633,7 +632,7 @@ ShaderCreateDialog::ShaderCreateDialog() {
add_child(file_browse);
alert = memnew(AcceptDialog);
- alert->get_label()->set_autowrap_mode(Label::AUTOWRAP_WORD_SMART);
+ alert->get_label()->set_autowrap_mode(TextServer::AUTOWRAP_WORD_SMART);
alert->get_label()->set_horizontal_alignment(HORIZONTAL_ALIGNMENT_CENTER);
alert->get_label()->set_vertical_alignment(VERTICAL_ALIGNMENT_CENTER);
alert->get_label()->set_custom_minimum_size(Size2(325, 60) * EDSCALE);
diff --git a/editor/translations/af.po b/editor/translations/af.po
index 6f644867b8..00c05287a1 100644
--- a/editor/translations/af.po
+++ b/editor/translations/af.po
@@ -218,9 +218,10 @@ msgid "Data"
msgstr ""
#: core/io/file_access_network.cpp core/register_core_types.cpp
-#: editor/editor_settings.cpp main/main.cpp
+#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
#: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h
+#: scene/gui/file_dialog.cpp
#, fuzzy
msgid "Network"
msgstr "Skep Vouer"
@@ -378,6 +379,15 @@ msgstr ""
msgid "Max Size (KB)"
msgstr ""
+#: core/os/input.cpp
+#, fuzzy
+msgid "Mouse Mode"
+msgstr "Wissel Modus"
+
+#: core/os/input.cpp
+msgid "Use Accumulated Input"
+msgstr ""
+
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: servers/audio_server.cpp
msgid "Device"
@@ -570,7 +580,8 @@ msgstr "Beskrywing:"
#: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
-#: main/main.cpp
+#: main/main.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp
msgid "Run"
msgstr ""
@@ -658,26 +669,24 @@ msgid "Main Run Args"
msgstr ""
#: core/project_settings.cpp
-msgid "Search In File Extensions"
+msgid "Scene Naming"
msgstr ""
#: core/project_settings.cpp
-msgid "Script Templates Search Path"
+msgid "Search In File Extensions"
msgstr ""
-#: core/project_settings.cpp editor/editor_node.cpp
-#: editor/plugins/version_control_editor_plugin.cpp
-msgid "Version Control"
+#: core/project_settings.cpp
+msgid "Script Templates Search Path"
msgstr ""
#: core/project_settings.cpp
-msgid "Autoload On Startup"
+msgid "Version Control Autoload On Startup"
msgstr ""
#: core/project_settings.cpp
-#, fuzzy
-msgid "Plugin Name"
-msgstr "Nodus Naam:"
+msgid "Version Control Plugin Name"
+msgstr ""
#: core/project_settings.cpp scene/2d/collision_object_2d.cpp
#: scene/3d/collision_object.cpp scene/gui/control.cpp
@@ -787,7 +796,8 @@ msgid "Quality"
msgstr ""
#: core/project_settings.cpp scene/gui/file_dialog.cpp
-#: scene/main/scene_tree.cpp servers/visual_server.cpp
+#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp
+#: servers/visual_server.cpp
#, fuzzy
msgid "Filters"
msgstr "Eienskappe"
@@ -2250,8 +2260,8 @@ msgid "Open"
msgstr "Oop"
#: editor/dependency_editor.cpp
-msgid "Owners Of:"
-msgstr "Eienaars van:"
+msgid "Owners of: %s (Total: %d)"
+msgstr ""
#: editor/dependency_editor.cpp
#, fuzzy
@@ -2565,7 +2575,7 @@ msgid "Bus Options"
msgstr "Bus opsies"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/scene_tree_dock.cpp
+#: editor/project_export.cpp editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "Dupliseer"
@@ -2832,6 +2842,23 @@ msgid "Choose"
msgstr "Kies"
#: editor/editor_export.cpp
+msgid "Project export for platform:"
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Completed with errors."
+msgstr ""
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Completed successfully."
+msgstr "Pakket Suksesvol Geïnstalleer!"
+
+#: editor/editor_export.cpp
+msgid "Failed."
+msgstr ""
+
+#: editor/editor_export.cpp
msgid "Storing File:"
msgstr "Leêr word gebêre:"
@@ -2844,6 +2871,31 @@ msgid "Packing"
msgstr "Verpak"
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save PCK"
+msgstr "Stoor As"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Cannot create file \"%s\"."
+msgstr "Kon nie vouer skep nie."
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to export project files."
+msgstr "Kon nie vouer skep nie."
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Can't open file to read from path \"%s\"."
+msgstr "Kan nie lêer vir skryf oopmaak nie:"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save ZIP"
+msgstr "Stoor As"
+
+#: editor/editor_export.cpp
msgid ""
"Target platform requires 'ETC' texture compression for GLES2. Enable 'Import "
"Etc' in Project Settings."
@@ -2948,12 +3000,31 @@ msgstr "Sjabloon lêer nie gevind nie:\n"
msgid "Custom release template not found."
msgstr ""
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Prepare Template"
+msgstr "Skep Vouer"
+
+#: editor/editor_export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "The given export path doesn't exist."
+msgstr "Lêer bestaan nie."
+
#: editor/editor_export.cpp platform/javascript/export/export.cpp
#, fuzzy
-msgid "Template file not found:"
+msgid "Template file not found: \"%s\"."
msgstr "Sjabloon lêer nie gevind nie:\n"
#: editor/editor_export.cpp
+msgid "Failed to copy export template."
+msgstr ""
+
+#: editor/editor_export.cpp platform/windows/export/export.cpp
+#: platform/x11/export/export.cpp
+msgid "PCK Embedding"
+msgstr ""
+
+#: editor/editor_export.cpp
msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB."
msgstr ""
@@ -3137,9 +3208,9 @@ msgid "Import"
msgstr "Invoer"
#: editor/editor_feature_profile.cpp editor/project_export.cpp
-#: platform/android/export/export.cpp platform/javascript/export/export.cpp
-#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
-#: platform/windows/export/export.cpp
+#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#: platform/uwp/export/export.cpp platform/windows/export/export.cpp
msgid "Export"
msgstr ""
@@ -4273,14 +4344,6 @@ msgid ""
"Unable to write to file '%s', file in use, locked or lacking permissions."
msgstr ""
-#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
-msgid "Scene"
-msgstr ""
-
-#: editor/editor_node.cpp
-msgid "Scene Naming"
-msgstr ""
-
#: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp
#: servers/arvr/arvr_interface.cpp
msgid "Interface"
@@ -4405,6 +4468,10 @@ msgid "Default Color Picker Mode"
msgstr ""
#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
+msgid "Version Control"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
#, fuzzy
msgid "Username"
msgstr "Nodus Naam:"
@@ -4433,6 +4500,10 @@ msgstr ""
msgid "Add a new scene."
msgstr ""
+#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
+msgid "Scene"
+msgstr ""
+
#: editor/editor_node.cpp
msgid "Go to previously opened scene."
msgstr ""
@@ -5183,6 +5254,11 @@ msgid ""
"as runnable."
msgstr ""
+#: editor/editor_run_native.cpp
+#, fuzzy
+msgid "Project Run"
+msgstr "Beskrywing"
+
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
msgstr ""
@@ -5451,7 +5527,9 @@ msgid "Draw Spaces"
msgstr ""
#: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp
-#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp
+#: scene/main/scene_tree.cpp scene/resources/world.cpp
+#: scene/resources/world_2d.cpp
#, fuzzy
msgid "Navigation"
msgstr "Skep Intekening"
@@ -6933,7 +7011,7 @@ msgstr ""
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp
-#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp
+#: scene/gui/control.cpp
#, fuzzy
msgid "Filter"
msgstr "Eienskappe"
@@ -7221,6 +7299,18 @@ msgid "Saving..."
msgstr ""
#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used as a normal map in 3D. Enabling red-green "
+"texture compression to reduce memory usage (blue channel is discarded)."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap "
+"generation and VRAM texture compression."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
msgid "2D, Detect 3D"
msgstr ""
@@ -7919,11 +8009,20 @@ msgid "New Anim"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+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 "Rename Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Delete Animation?"
msgstr ""
@@ -7943,11 +8042,6 @@ msgid "Animation name already exists!"
msgstr "AutoLaai '%s' bestaan reeds!"
#: 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 "Duplicate Animation"
msgstr ""
@@ -8095,10 +8189,6 @@ msgid "Pin AnimationPlayer"
msgstr "Animasie Zoem."
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Create New Animation"
-msgstr ""
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Name:"
msgstr ""
@@ -10230,6 +10320,7 @@ msgid "Points"
msgstr "Skuif Gunsteling Op"
#: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp
+#: scene/resources/navigation_mesh.cpp
#, fuzzy
msgid "Polygons"
msgstr "Skep Intekening"
@@ -11650,8 +11741,9 @@ msgid "Invalid geometry, can't replace by mesh."
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
-msgid "Convert to Mesh2D"
-msgstr ""
+#, fuzzy
+msgid "Convert to MeshInstance2D"
+msgstr "Hernoem AutoLaai"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Invalid geometry, can't create polygon."
@@ -12686,8 +12778,7 @@ msgid "Select the previous shape, subtile, or Tile."
msgstr ""
#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp
-#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp
-#: scene/resources/texture.cpp
+#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp
msgid "Region"
msgstr ""
@@ -14186,31 +14277,10 @@ 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 "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 "Export Path"
msgstr ""
@@ -14349,6 +14419,11 @@ msgid "Export templates for this platform are missing:"
msgstr ""
#: editor/project_export.cpp
+#, fuzzy
+msgid "Project Export"
+msgstr "Projek Stigters"
+
+#: editor/project_export.cpp
msgid "Manage Export Templates"
msgstr ""
@@ -16687,7 +16762,7 @@ msgstr ""
#: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp
#: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp
-#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp
+#: scene/3d/collision_polygon.cpp
#, fuzzy
msgid "Polygon"
msgstr "Skep Intekening"
@@ -17278,7 +17353,6 @@ msgid "Use In Baked Light"
msgstr ""
#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
-#: scene/resources/navigation_mesh.cpp
msgid "Cell"
msgstr ""
@@ -17308,6 +17382,19 @@ msgstr "Skrap"
msgid "Mask"
msgstr ""
+#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
+#, fuzzy
+msgid "Bake Navigation"
+msgstr "Skep Intekening"
+
+#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp
+#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp
+#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp
+#: scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Navigation Layers"
+msgstr "Skep Intekening"
+
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Plane"
msgstr ""
@@ -18830,10 +18917,6 @@ msgid "Could not execute on device."
msgstr "Kon nie vouer skep nie."
#: 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."
@@ -18938,12 +19021,16 @@ msgstr ""
msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version."
msgstr ""
+#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Code Signing"
+msgstr "Seine"
+
#: 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."
+"'apksigner' could not be found. Please check that the command is available "
+"in the Android SDK build-tools directory. The resulting %s is unsigned."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18960,6 +19047,10 @@ msgid "Could not find keystore, unable to export."
msgstr "Kon nie vouer skep nie."
#: platform/android/export/export_plugin.cpp
+msgid "Could not start apksigner executable."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
@@ -18988,7 +19079,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Unsupported export format!\n"
+msgid "Unsupported export format!"
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18999,20 +19090,19 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Android build version mismatch:\n"
-" Template installed: %s\n"
-" Godot Version: %s\n"
+"Android build version mismatch: Template installed: %s, Godot version: %s. "
"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"
+"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 ""
+#, fuzzy
+msgid "Could not export project files to gradle project."
+msgstr "Kon nie vouer skep nie."
#: platform/android/export/export_plugin.cpp
#, fuzzy
@@ -19025,7 +19115,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Building of Android project failed, check output for the error.\n"
+"Building of Android project failed, check output for the error. "
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
@@ -19041,7 +19131,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
#, fuzzy
-msgid "Package not found: %s"
+msgid "Package not found: \"%s\"."
msgstr "Animasie lengte (in sekondes)."
#: platform/android/export/export_plugin.cpp
@@ -19050,15 +19140,12 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
#, fuzzy
-msgid ""
-"Could not find template APK to export:\n"
-"%s"
+msgid "Could not find template APK to export: \"%s\"."
msgstr "Kon nie vouer skep nie."
#: platform/android/export/export_plugin.cpp
msgid ""
-"Missing libraries in the export template for the selected architectures: "
-"%s.\n"
+"Missing libraries in the export template for the selected architectures: %s. "
"Please build a template with all required libraries, or uncheck the missing "
"architectures in the export preset."
msgstr ""
@@ -19070,7 +19157,7 @@ msgstr "Vind"
#: platform/android/export/export_plugin.cpp
#, fuzzy
-msgid "Could not export project files"
+msgid "Could not export project files."
msgstr "Kon nie vouer skep nie."
#: platform/android/export/export_plugin.cpp
@@ -19309,6 +19396,16 @@ msgstr "Anim Dupliseer Sleutels"
msgid "Custom BG Color"
msgstr "Anim Dupliseer Sleutels"
+#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
+#: platform/osx/export/export.cpp
+msgid "Prepare Templates"
+msgstr ""
+
+#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Export template not found."
+msgstr "Sjabloon lêer nie gevind nie:\n"
+
#: platform/iphone/export/export.cpp
msgid "App Store Team ID not specified - cannot configure the project."
msgstr ""
@@ -19332,24 +19429,34 @@ msgstr ""
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not open template for export:"
+msgid "Could not open template for export: \"%s\"."
msgstr "Kon nie vouer skep nie."
#: platform/javascript/export/export.cpp
-msgid "Invalid export template:"
-msgstr ""
+#, fuzzy
+msgid "Invalid export template: \"%s\"."
+msgstr "Moet 'n geldige uitbreiding gebruik."
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not write file:"
+msgid "Could not write file: \"%s\"."
msgstr "Kon nie vouer skep nie."
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Icon Creation"
+msgstr "Deursoek Klasse"
+
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not read file:"
+msgid "Could not read file: \"%s\"."
msgstr "Kon nie vouer skep nie."
#: platform/javascript/export/export.cpp
+msgid "PWA"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
#, fuzzy
msgid "Variant"
msgstr "Opnoemings:"
@@ -19424,17 +19531,17 @@ msgstr ""
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not read HTML shell:"
+msgid "Could not read HTML shell: \"%s\"."
msgstr "Kon nie vouer skep nie."
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not create HTTP server directory:"
+msgid "Could not create HTTP server directory: %s."
msgstr "Kon nie vouer skep nie."
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Error starting HTTP server:"
+msgid "Error starting HTTP server: %d."
msgstr "Leêr word gebêre:"
#: platform/javascript/export/export.cpp
@@ -19724,9 +19831,28 @@ msgid "Apple Team ID"
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open icon file \"%s\"."
+msgstr "Kon nie vouer skep nie."
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start xcrun executable."
+msgstr "Kon nie vouer skep nie."
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization failed."
+msgstr "Skep Intekening"
+
+#: platform/osx/export/export.cpp
+msgid "Notarization request UUID: \"%s\""
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid ""
-"Note: The notarization process generally takes less than an hour. When the "
-"process is completed, you'll receive an email."
+"The notarization process generally takes less than an hour. When the process "
+"is completed, you'll receive an email."
msgstr ""
#: platform/osx/export/export.cpp
@@ -19742,20 +19868,74 @@ msgid ""
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign failed with error \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign require regex module."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Could not start codesign executable, make sure Xcode command line tools are "
+"installed."
+msgstr ""
+
+#: platform/osx/export/export.cpp platform/windows/export/export.cpp
#, fuzzy
msgid "No identity found."
msgstr "Nie gevind nie!"
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Cannot sign file %s."
+msgstr "Fout tydens storing van hulpbron!"
+
+#: platform/osx/export/export.cpp
+msgid "Relative symlinks are not supported, exported \"%s\" might be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "DMG Creation"
+msgstr "Beskrywing"
+
+#: platform/osx/export/export.cpp
+msgid "Could not start hdiutil executable."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed - file exists."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed."
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid "Creating app bundle"
msgstr ""
#: platform/osx/export/export.cpp
#, fuzzy
-msgid "Could not find template app to export:"
+msgid "Could not find template app to export: \"%s\"."
msgstr "Kon nie vouer skep nie."
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid export format."
+msgstr "Ongeldige Pad."
+
+#: platform/osx/export/export.cpp
msgid ""
"Relative symlinks are not supported on this OS, the exported project might "
"be broken!"
@@ -19763,7 +19943,7 @@ msgstr ""
#: platform/osx/export/export.cpp
msgid ""
-"Requested template binary '%s' not found. It might be missing from your "
+"Requested template binary \"%s\" not found. It might be missing from your "
"template archive."
msgstr ""
@@ -19805,6 +19985,16 @@ msgstr ""
#: platform/osx/export/export.cpp
#, fuzzy
+msgid "ZIP Creation"
+msgstr "Beskrywing"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open file to read from path \"%s\"."
+msgstr "Kon nie vouer skep nie."
+
+#: platform/osx/export/export.cpp
+#, fuzzy
msgid "Invalid bundle identifier:"
msgstr "Ongeldige naam."
@@ -20117,6 +20307,11 @@ msgid "Debug Algorithm"
msgstr ""
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to rename temporary file \"%s\"."
+msgstr "Kan nie verwyder nie:\n"
+
+#: platform/windows/export/export.cpp
msgid "Identity Type"
msgstr ""
@@ -20163,6 +20358,70 @@ msgid "Trademarks"
msgstr ""
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Resources Modification"
+msgstr "Konstant"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find rcedit executable at \"%s\"."
+msgstr "Kon nie vouer skep nie."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find wine executable at \"%s\"."
+msgstr "Kon nie vouer skep nie."
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start rcedit executable, configure rcedit path in the Editor "
+"Settings (Export > Windows > Rcedit)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"rcedit failed to modify executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find signtool executable at \"%s\"."
+msgstr "Kon nie vouer skep nie."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find osslsigncode executable at \"%s\"."
+msgstr "Kon nie vouer skep nie."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid identity type."
+msgstr "Ongeldige naam."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid timestamp server."
+msgstr "Ongeldige naam."
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start signtool executable, configure signtool path in the Editor "
+"Settings (Export > Windows > Signtool)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Signtool failed to sign executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to remove temporary file \"%s\"."
+msgstr "Kan nie verwyder nie:\n"
+
+#: platform/windows/export/export.cpp
msgid ""
"The rcedit tool must be configured in the Editor Settings (Export > Windows "
"> Rcedit) to change the icon or app information data."
@@ -20184,6 +20443,23 @@ msgid "Invalid product version:"
msgstr "Ongeldige naam."
#: platform/windows/export/export.cpp
+msgid "Windows executables cannot be >= 4 GiB."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+#, fuzzy
+msgid "Failed to open executable file \"%s\"."
+msgstr "Moet 'n geldige uitbreiding gebruik."
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable file header corrupted."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable \"pck\" section not found."
+msgstr ""
+
+#: platform/windows/export/export.cpp
msgid "Windows"
msgstr ""
@@ -20199,6 +20475,10 @@ msgstr ""
msgid "Wine"
msgstr ""
+#: platform/x11/export/export.cpp
+msgid "32-bit executables cannot have embedded data >= 4 GiB."
+msgstr ""
+
#: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp
#: scene/resources/texture.cpp
#, fuzzy
@@ -20315,7 +20595,8 @@ msgstr ""
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/3d/light.cpp scene/3d/reflection_probe.cpp
-#: scene/3d/visual_instance.cpp scene/resources/material.cpp
+#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp
+#: scene/resources/material.cpp
msgid "Max Distance"
msgstr ""
@@ -21065,6 +21346,18 @@ msgstr ""
msgid "Edge Connection Margin"
msgstr "Wysig Seleksie Kurwe"
+#: scene/2d/navigation_2d.cpp
+msgid ""
+"'Navigation2D' node and 'Navigation2D.get_simple_path()' are deprecated and "
+"will be removed in a future version. Use 'Navigation2DServer.map_get_path()' "
+"instead."
+msgstr ""
+
+#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
+#, fuzzy
+msgid "Path Desired Distance"
+msgstr "Installeer"
+
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
msgid "Target Desired Distance"
msgstr ""
@@ -21116,13 +21409,16 @@ msgid ""
msgstr ""
#: scene/2d/navigation_polygon.cpp
-msgid ""
-"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
-"node. It only provides navigation data."
+msgid "Navpoly"
msgstr ""
-#: scene/2d/navigation_polygon.cpp
-msgid "Navpoly"
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Enter Cost"
+msgstr "Skrap"
+
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+msgid "Travel Cost"
msgstr ""
#: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp
@@ -22229,6 +22525,13 @@ msgstr ""
msgid "Transform Normals"
msgstr "Skep Intekening"
+#: scene/3d/navigation.cpp
+msgid ""
+"'Navigation' node and 'Navigation.get_simple_path()' are deprecated and will "
+"be removed in a future version. Use 'NavigationServer.map_get_path()' "
+"instead."
+msgstr ""
+
#: scene/3d/navigation.cpp scene/resources/curve.cpp
msgid "Up Vector"
msgstr ""
@@ -22250,12 +22553,6 @@ msgid ""
"The NavigationAgent can be used only under a Spatial inheriting parent node."
msgstr ""
-#: scene/3d/navigation_mesh_instance.cpp
-msgid ""
-"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
-"It only provides navigation data."
-msgstr ""
-
#: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp
msgid "NavMesh"
msgstr ""
@@ -24808,6 +25105,16 @@ msgid "3D Physics"
msgstr ""
#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "2D Navigation"
+msgstr "Skep Intekening"
+
+#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "3D Navigation"
+msgstr "Skep Intekening"
+
+#: scene/register_scene_types.cpp
msgid "Use hiDPI"
msgstr ""
@@ -26188,7 +26495,7 @@ msgstr "Oorgang"
msgid "Refraction"
msgstr "Opnoemings:"
-#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp
+#: scene/resources/material.cpp
msgid "Detail"
msgstr ""
@@ -26268,7 +26575,12 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
-msgid "Sample Partition Type"
+msgid "Sampling"
+msgstr "Wissel Modus"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Partition Type"
msgstr "Verander Skikking Waarde-Soort"
#: scene/resources/navigation_mesh.cpp
@@ -26285,7 +26597,11 @@ msgid "Source Group Name"
msgstr "Hulpbron"
#: scene/resources/navigation_mesh.cpp
-msgid "Agent"
+msgid "Cells"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
+msgid "Agents"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -26297,11 +26613,16 @@ msgid "Max Slope"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Regions"
+msgstr "Beskrywing"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Merge Size"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Edge"
+msgid "Edges"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -26314,6 +26635,11 @@ msgid "Verts Per Poly"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Details"
+msgstr "Laai Verstek"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Sample Distance"
msgstr ""
@@ -26330,9 +26656,18 @@ msgid "Ledge Spans"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Filter Walkable Low Height Spans"
+msgid "Walkable Low Height Spans"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
+msgid "Baking AABB"
msgstr ""
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB Offset"
+msgstr "Verwyder Seleksie"
+
#: scene/resources/occluder_shape.cpp
msgid "Spheres"
msgstr ""
@@ -26725,6 +27060,11 @@ msgid "Scenario"
msgstr ""
#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Navigation Map"
+msgstr "Skep Intekening"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
msgid "Direct Space State"
msgstr ""
@@ -26742,6 +27082,26 @@ msgstr "Lineêr"
msgid "Default Angular Damp"
msgstr ""
+#: scene/resources/world.cpp
+#, fuzzy
+msgid "Default Map Up"
+msgstr "Voorskou:"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Size"
+msgstr "Voorskou:"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Height"
+msgstr "Verander Skikking Waarde-Soort"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Edge Connection Margin"
+msgstr "Wysig Seleksie Kurwe"
+
#: scene/resources/world_2d.cpp
msgid "Canvas"
msgstr ""
diff --git a/editor/translations/ar.po b/editor/translations/ar.po
index faed43ac8f..f449036b53 100644
--- a/editor/translations/ar.po
+++ b/editor/translations/ar.po
@@ -62,13 +62,15 @@
# Whales State <whalesstate@gmail.com>, 2022.
# Mr.k <mineshtine28546271@gmail.com>, 2022.
# ywmaa <ywmaa.personal@gmail.com>, 2022.
+# Awab Najim <dev.djvan@gmail.com>, 2022.
+# Abderrahim <abdoudido117@gmail.com>, 2022.
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: 2022-03-17 13:58+0000\n"
-"Last-Translator: Mr.k <mineshtine28546271@gmail.com>\n"
+"PO-Revision-Date: 2022-06-29 10:04+0000\n"
+"Last-Translator: Awab Najim <dev.djvan@gmail.com>\n"
"Language-Team: Arabic <https://hosted.weblate.org/projects/godot-engine/"
"godot/ar/>\n"
"Language: ar\n"
@@ -77,110 +79,97 @@ 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.12-dev\n"
+"X-Generator: Weblate 4.13.1-dev\n"
#: core/bind/core_bind.cpp main/main.cpp
msgid "Tablet Driver"
-msgstr ""
+msgstr "برنامج تشغيل الكمبيوتر اللوحي"
#: core/bind/core_bind.cpp
-#, fuzzy
msgid "Clipboard"
-msgstr "Ø§Ù„Ø­Ø§ÙØ¸Ø© ÙØ§Ø±ØºØ©!"
+msgstr "Ø§Ù„Ø­Ø§ÙØ¸Ø©"
#: core/bind/core_bind.cpp
-#, fuzzy
msgid "Current Screen"
-msgstr "المشهد الحالي"
+msgstr "الشاشة الحالية"
#: core/bind/core_bind.cpp
msgid "Exit Code"
-msgstr ""
+msgstr "Ø´ÙÙØ±Ø© الخروج"
#: core/bind/core_bind.cpp
-#, fuzzy
msgid "V-Sync Enabled"
-msgstr "ØªÙØ¹ÙŠÙ„"
+msgstr "ØªÙØ¹ÙŠÙ„ V-Sync"
#: core/bind/core_bind.cpp main/main.cpp
msgid "V-Sync Via Compositor"
-msgstr ""
+msgstr "V-Sync عبر المؤلÙ"
#: core/bind/core_bind.cpp main/main.cpp
msgid "Delta Smoothing"
-msgstr ""
+msgstr "سلاسة دلتا"
#: core/bind/core_bind.cpp
-#, fuzzy
msgid "Low Processor Usage Mode"
-msgstr "وضع التحريك"
+msgstr "وضع استخدام المعالج Ø§Ù„Ù…Ù†Ø®ÙØ¶"
#: core/bind/core_bind.cpp
msgid "Low Processor Usage Mode Sleep (µsec)"
-msgstr ""
+msgstr "وضع السكون لاستخدام المعالج Ø§Ù„Ù…Ù†Ø®ÙØ¶ (µsec)"
#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp
-#, fuzzy
msgid "Keep Screen On"
-msgstr "إبقاء منÙقتح الأخطاء البرمجية Ù…ÙØªÙˆØ­Ø§Ù‹"
+msgstr "إبقاء الشاشة قيد التشغيل"
#: core/bind/core_bind.cpp
-#, fuzzy
msgid "Min Window Size"
-msgstr "حجم الخطوط:"
+msgstr "الحد الأدنى لحجم Ø§Ù„Ù†Ø§ÙØ°Ø©"
#: core/bind/core_bind.cpp
-#, fuzzy
msgid "Max Window Size"
-msgstr "حجم الخطوط:"
+msgstr "الحد الأعلى لحجم Ø§Ù„Ù†Ø§ÙØ°Ø©"
#: core/bind/core_bind.cpp
-#, fuzzy
msgid "Screen Orientation"
-msgstr "Ù…ÙØ´ØºÙ„ الشاشة."
+msgstr "اتجاه الشاشة"
#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp
#: platform/uwp/os_uwp.cpp
-#, fuzzy
msgid "Window"
-msgstr "Ù†Ø§ÙØ°Ø© جديدة"
+msgstr "Ù†Ø§ÙØ°Ø©"
#: core/bind/core_bind.cpp core/project_settings.cpp
-#, fuzzy
msgid "Borderless"
-msgstr "البكسلات المحيطية (الحدودية)"
+msgstr "بلا إطار"
#: core/bind/core_bind.cpp
msgid "Per Pixel Transparency Enabled"
-msgstr ""
+msgstr "تمكين Ø§Ù„Ø´ÙØ§Ùية لكل بكسل"
#: core/bind/core_bind.cpp core/project_settings.cpp
-#, fuzzy
msgid "Fullscreen"
-msgstr "ØªÙØ¹ÙŠÙ„/إلغاء وضع الشاشة الكاملة"
+msgstr "ملء الشاشة"
#: core/bind/core_bind.cpp
msgid "Maximized"
-msgstr ""
+msgstr "مكبرة"
#: core/bind/core_bind.cpp
-#, fuzzy
msgid "Minimized"
-msgstr "الشروع"
+msgstr "مصغرة"
#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp
#: scene/gui/graph_node.cpp
msgid "Resizable"
-msgstr ""
+msgstr "متغير الحجم"
#: core/bind/core_bind.cpp core/os/input_event.cpp scene/2d/node_2d.cpp
#: scene/2d/physics_body_2d.cpp scene/2d/remote_transform_2d.cpp
#: scene/3d/physics_body.cpp scene/3d/remote_transform.cpp
#: scene/gui/control.cpp scene/gui/line_edit.cpp
#: scene/resources/default_theme/default_theme.cpp
-#, fuzzy
msgid "Position"
-msgstr "مكان الرصيÙ"
+msgstr "موقع"
#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp
#: main/main.cpp modules/gridmap/grid_map.cpp
@@ -191,65 +180,56 @@ msgstr "مكان الرصيÙ"
#: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp
#: scene/resources/style_box.cpp scene/resources/texture.cpp
#: scene/resources/visual_shader.cpp servers/visual_server.cpp
-#, fuzzy
msgid "Size"
-msgstr "الحجم:"
+msgstr "الحجم"
#: core/bind/core_bind.cpp
msgid "Endian Swap"
-msgstr ""
+msgstr "مبادلة Endian"
#: core/bind/core_bind.cpp
-#, fuzzy
msgid "Editor Hint"
-msgstr "المحرّر"
+msgstr "تلميح المحرر"
#: core/bind/core_bind.cpp
msgid "Print Error Messages"
-msgstr ""
+msgstr "طباعة رسائل الخطأ"
#: core/bind/core_bind.cpp
-#, fuzzy
msgid "Iterations Per Second"
-msgstr "وضعية Ø§Ù„Ø£Ø³ØªÙŠÙØ§Ø¡"
+msgstr "التكرارات ÙÙŠ الثانية"
#: core/bind/core_bind.cpp
-#, fuzzy
msgid "Target FPS"
-msgstr "الهدÙ"
+msgstr "FPS Ø§Ù„Ù…Ø³ØªÙ‡Ø¯ÙØ©"
#: core/bind/core_bind.cpp
-#, fuzzy
msgid "Time Scale"
-msgstr "عقدة التكبير الزمني"
+msgstr "مقياس الوقت"
#: core/bind/core_bind.cpp main/main.cpp
-#, fuzzy
msgid "Physics Jitter Fix"
-msgstr "نسبة الإطار الÙيزيائي %"
+msgstr "إصلاح Ø§Ù„Ø±Ø¬ÙØ§Ù† الÙيزيائي"
#: core/bind/core_bind.cpp editor/plugins/version_control_editor_plugin.cpp
msgid "Error"
msgstr "خطأ"
#: core/bind/core_bind.cpp
-#, fuzzy
msgid "Error String"
-msgstr "خطأ ÙÙŠ Ø§Ù„Ø­ÙØ¸"
+msgstr "سلسلة الخطأ"
#: core/bind/core_bind.cpp
-#, fuzzy
msgid "Error Line"
-msgstr "خطأ ÙÙŠ Ø§Ù„Ø­ÙØ¸"
+msgstr "سطر الخطأ"
#: core/bind/core_bind.cpp
-#, fuzzy
msgid "Result"
-msgstr "نتائج البحث"
+msgstr "النتيجة"
#: core/command_queue_mt.cpp core/message_queue.cpp main/main.cpp
msgid "Memory"
-msgstr ""
+msgstr "الذاكرة"
#: core/command_queue_mt.cpp core/message_queue.cpp
#: core/register_core_types.cpp drivers/gles2/rasterizer_canvas_base_gles2.cpp
@@ -260,132 +240,119 @@ msgstr ""
#: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h
#: servers/visual_server.cpp
msgid "Limits"
-msgstr ""
+msgstr "الحدود"
#: core/command_queue_mt.cpp
-#, fuzzy
msgid "Command Queue"
-msgstr "Command: استدارة"
+msgstr "قائمة انتظار الأوامر"
#: core/command_queue_mt.cpp
msgid "Multithreading Queue Size (KB)"
-msgstr ""
+msgstr "حجم قائمة انتظار Multithreading (كيلو بايت)"
#: core/func_ref.cpp modules/visual_script/visual_script_builtin_funcs.cpp
#: modules/visual_script/visual_script_func_nodes.cpp
#: modules/visual_script/visual_script_nodes.cpp
#: scene/resources/visual_shader_nodes.cpp
-#, fuzzy
msgid "Function"
msgstr "الوظائ٠البرمجية"
#: core/image.cpp core/packed_data_container.cpp scene/2d/polygon_2d.cpp
#: scene/3d/baked_lightmap.cpp scene/3d/gi_probe.cpp
-#, fuzzy
msgid "Data"
-msgstr "مع البيانات"
+msgstr "بيانات"
#: core/io/file_access_network.cpp core/register_core_types.cpp
-#: editor/editor_settings.cpp main/main.cpp
+#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
#: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h
-#, fuzzy
+#: scene/gui/file_dialog.cpp
msgid "Network"
-msgstr "مل٠تعري٠الشبكة Network Profiler"
+msgstr "الشبكة"
#: core/io/file_access_network.cpp
-#, fuzzy
msgid "Remote FS"
-msgstr "من بعد "
+msgstr "FS من بعد"
#: core/io/file_access_network.cpp
-#, fuzzy
msgid "Page Size"
-msgstr "Ø§Ù„ØµÙØ­Ø©: "
+msgstr "حجم Ø§Ù„ØµÙØ­Ø©"
#: core/io/file_access_network.cpp
msgid "Page Read Ahead"
-msgstr ""
+msgstr "قراءة Ø§Ù„ØµÙØ­Ø© مسبقا"
#: core/io/http_client.cpp
msgid "Blocking Mode Enabled"
-msgstr ""
+msgstr "تمكين وضع الحظر"
#: core/io/http_client.cpp
-#, fuzzy
msgid "Connection"
-msgstr "وصل"
+msgstr "إتصال"
#: core/io/http_client.cpp
msgid "Read Chunk Size"
-msgstr ""
+msgstr "حجم قطعة القراءة"
#: core/io/marshalls.cpp
-#, fuzzy
msgid "Object ID"
-msgstr "كائنات مرسومة:"
+msgstr "معر٠الكائن"
#: core/io/multiplayer_api.cpp core/io/packet_peer.cpp
-#, fuzzy
msgid "Allow Object Decoding"
-msgstr "ØªÙØ¹ÙŠÙ„ تقشير البصل"
+msgstr "السماح بÙÙƒ ترميز الكائن"
#: core/io/multiplayer_api.cpp scene/main/scene_tree.cpp
msgid "Refuse New Network Connections"
-msgstr ""
+msgstr "Ø±ÙØ¶ اتصالات الشبكة الجديدة"
#: core/io/multiplayer_api.cpp scene/main/scene_tree.cpp
-#, fuzzy
msgid "Network Peer"
-msgstr "مل٠تعري٠الشبكة Network Profiler"
+msgstr "نظير الشبكة"
#: core/io/multiplayer_api.cpp scene/animation/animation_player.cpp
-#, fuzzy
msgid "Root Node"
-msgstr "اسم العÙقدة الرئيسة (الجذر)"
+msgstr "العÙقدة الرئيسة (الجذر)"
#: core/io/networked_multiplayer_peer.cpp
-#, fuzzy
msgid "Refuse New Connections"
-msgstr "وصل"
+msgstr "Ø±ÙØ¶ الإتصالات الجديدة"
#: core/io/networked_multiplayer_peer.cpp
-#, fuzzy
msgid "Transfer Mode"
-msgstr "نوع التحوّل"
+msgstr "وضع التحويل"
#: core/io/packet_peer.cpp
msgid "Encode Buffer Max Size"
-msgstr ""
+msgstr "الحجم الأقصى لمخزن التشÙير المؤقت"
#: core/io/packet_peer.cpp
msgid "Input Buffer Max Size"
-msgstr ""
+msgstr "الحجم الأقصى لمخزن المدخلات المؤقت"
#: core/io/packet_peer.cpp
msgid "Output Buffer Max Size"
-msgstr ""
+msgstr "الحجم الأقصى لمخزن المخرجات المؤقت"
#: core/io/packet_peer.cpp
msgid "Stream Peer"
-msgstr ""
+msgstr "قرين التسلسل"
#: core/io/stream_peer.cpp
msgid "Big Endian"
-msgstr ""
+msgstr "Endian الكبيرة"
#: core/io/stream_peer.cpp
msgid "Data Array"
-msgstr ""
+msgstr "مصÙÙˆÙØ© البيانات"
#: core/io/stream_peer_ssl.cpp
msgid "Blocking Handshake"
-msgstr ""
+msgstr "حظر Ø§Ù„Ù…ØµØ§ÙØ­Ø©"
#: core/io/udp_server.cpp
-#, fuzzy
msgid "Max Pending Connections"
-msgstr "تعديل الإتصال:"
+msgstr "الحد الأقصى للاتصالات المعلقة"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -403,9 +370,8 @@ msgid "Not enough bytes for decoding bytes, or invalid format."
msgstr "ليس هنالك بايتات كاÙية من أجل ÙÙƒ البايتات، أو الصيغة غير صحيحة."
#: core/math/expression.cpp
-#, fuzzy
msgid "Invalid input %d (not passed) in expression"
-msgstr "مدخلات خاطئة %i (لم يتم تمريره) ÙÙŠ التعبير"
+msgstr "مدخلات خاطئة %d (لم يتم تمريرها) ÙÙŠ التعبير"
#: core/math/expression.cpp
msgid "self can't be used because instance is null (not passed)"
@@ -413,7 +379,7 @@ msgstr "لا يمكن استخدام self لأن النموذج ÙØ§Ø±Øº (لم Ù
#: core/math/expression.cpp
msgid "Invalid operands to operator %s, %s and %s."
-msgstr "معامل غير صالحة للمشغل ٪s و٪s و٪s."
+msgstr "معامل غير صالحة للمشغل %s و %s و %s."
#: core/math/expression.cpp
msgid "Invalid index of type %s for base type %s"
@@ -434,20 +400,27 @@ msgstr "عند استدعاء '%s':"
#: core/math/random_number_generator.cpp
#: modules/opensimplex/open_simplex_noise.cpp
msgid "Seed"
-msgstr ""
+msgstr "Seed"
#: core/math/random_number_generator.cpp
-#, fuzzy
msgid "State"
msgstr "الحالة"
#: core/message_queue.cpp
msgid "Message Queue"
-msgstr ""
+msgstr "قائمة انتظار الرسائل"
#: core/message_queue.cpp
msgid "Max Size (KB)"
-msgstr ""
+msgstr "الحجم الأقصى (كيلو بايت)"
+
+#: core/os/input.cpp
+msgid "Mouse Mode"
+msgstr "وضع Ø§Ù„ÙØ£Ø±Ø©"
+
+#: core/os/input.cpp
+msgid "Use Accumulated Input"
+msgstr "استخدم المدخلات المتراكمة"
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: servers/audio_server.cpp
@@ -455,98 +428,85 @@ msgid "Device"
msgstr "الجهاز"
#: core/os/input_event.cpp
-#, fuzzy
msgid "Alt"
-msgstr "الكل"
+msgstr "Ù…ÙØªØ§Ø­ Alt"
#: core/os/input_event.cpp
msgid "Shift"
-msgstr ""
+msgstr "Ù…ÙØªØ§Ø­ Shift"
#: core/os/input_event.cpp
-#, fuzzy
msgid "Control"
-msgstr "إدارة الإصدارات (Version Control)"
+msgstr "Ù…ÙØªØ§Ø­ Control"
#: core/os/input_event.cpp
msgid "Meta"
-msgstr ""
+msgstr "المرجعية الذاتية (Meta)"
#: core/os/input_event.cpp
-#, fuzzy
msgid "Command"
-msgstr "المجتمع"
+msgstr "Ù…ÙØªØ§Ø­ Command"
#: core/os/input_event.cpp scene/2d/touch_screen_button.cpp
#: scene/gui/base_button.cpp scene/gui/texture_button.cpp
#: scene/resources/default_theme/default_theme.cpp
-#, fuzzy
msgid "Pressed"
-msgstr "إعداد Ù…ÙØ³Ø¨Ù‚"
+msgstr "ضٌغط (الزر)"
#: core/os/input_event.cpp
-#, fuzzy
msgid "Scancode"
-msgstr "ÙØ­Øµ"
+msgstr "رمز Ø§Ù„Ù…ÙØªØ§Ø­"
#: core/os/input_event.cpp
-#, fuzzy
msgid "Physical Scancode"
-msgstr "الزر الÙيزيائي"
+msgstr "رمز Ø§Ù„Ù…ÙØªØ§Ø­ الÙيزيائي"
#: core/os/input_event.cpp
msgid "Unicode"
-msgstr ""
+msgstr "يونيكود"
#: core/os/input_event.cpp
msgid "Echo"
-msgstr ""
+msgstr "صدى"
#: core/os/input_event.cpp scene/gui/base_button.cpp
-#, fuzzy
msgid "Button Mask"
-msgstr "زر"
+msgstr "قناع الزر"
#: core/os/input_event.cpp scene/2d/node_2d.cpp scene/gui/control.cpp
-#, fuzzy
msgid "Global Position"
-msgstr "ثابت"
+msgstr "الموقع العالمي"
#: core/os/input_event.cpp
-#, fuzzy
msgid "Factor"
-msgstr "Ù…ÙØªØ¬Ù‡"
+msgstr "المعامل"
#: core/os/input_event.cpp
-#, fuzzy
msgid "Button Index"
-msgstr "مؤشر Index زر Ø§Ù„ÙØ£Ø±Ø©:"
+msgstr "مؤشر الزر"
#: core/os/input_event.cpp
msgid "Doubleclick"
-msgstr ""
+msgstr "نقرتين متتاليتين"
#: core/os/input_event.cpp
msgid "Tilt"
-msgstr ""
+msgstr "إمالة"
#: core/os/input_event.cpp
-#, fuzzy
msgid "Pressure"
-msgstr "إعداد Ù…ÙØ³Ø¨Ù‚"
+msgstr "الضغط"
#: core/os/input_event.cpp
-#, fuzzy
msgid "Relative"
-msgstr "نسبية المحاذاة"
+msgstr "نسبي"
#: core/os/input_event.cpp scene/2d/camera_2d.cpp scene/2d/cpu_particles_2d.cpp
#: scene/3d/cpu_particles.cpp scene/3d/interpolated_camera.cpp
#: scene/animation/animation_player.cpp scene/resources/environment.cpp
#: scene/resources/particles_material.cpp
-#, fuzzy
msgid "Speed"
-msgstr "السرعة:"
+msgstr "السرعة"
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: scene/3d/sprite_3d.cpp
@@ -554,14 +514,12 @@ msgid "Axis"
msgstr "محاور"
#: core/os/input_event.cpp
-#, fuzzy
msgid "Axis Value"
-msgstr "القيمة المثبتة"
+msgstr "قيمة المحور"
#: core/os/input_event.cpp modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "Index"
-msgstr "الÙهرس:"
+msgstr "المؤشر"
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: modules/visual_script/visual_script_nodes.cpp
@@ -572,63 +530,55 @@ msgstr "إجراء"
#: core/os/input_event.cpp scene/resources/environment.cpp
#: scene/resources/material.cpp
msgid "Strength"
-msgstr ""
+msgstr "القوة"
#: core/os/input_event.cpp
msgid "Delta"
-msgstr ""
+msgstr "دلتا"
#: core/os/input_event.cpp
-#, fuzzy
msgid "Channel"
-msgstr "تغير"
+msgstr "قناة"
#: core/os/input_event.cpp main/main.cpp
-#, fuzzy
msgid "Message"
-msgstr "اقترا٠التعديلا"
+msgstr "الرسالة"
#: core/os/input_event.cpp
-#, fuzzy
msgid "Pitch"
-msgstr "حدّة:"
+msgstr "الحدّة"
#: core/os/input_event.cpp scene/2d/cpu_particles_2d.cpp
#: scene/2d/physics_body_2d.cpp scene/3d/cpu_particles.cpp
#: scene/3d/physics_body.cpp scene/resources/particles_material.cpp
-#, fuzzy
msgid "Velocity"
-msgstr "تحريك المسار لليمين"
+msgstr "التسارع"
#: core/os/input_event.cpp
msgid "Instrument"
-msgstr ""
+msgstr "أداة"
#: core/os/input_event.cpp
-#, fuzzy
msgid "Controller Number"
-msgstr "رقم الخط:"
+msgstr "رقم وحدة التحكم"
#: core/os/input_event.cpp
msgid "Controller Value"
-msgstr ""
+msgstr "قيمة/(رقم تعريÙ) وحدة التحكم"
#: core/project_settings.cpp editor/editor_node.cpp main/main.cpp
#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
#: platform/windows/export/export.cpp
-#, fuzzy
msgid "Application"
-msgstr "إجراء"
+msgstr "التطبيق"
#: core/project_settings.cpp main/main.cpp
-#, fuzzy
msgid "Config"
-msgstr "تعديل اللقطة"
+msgstr "تعديل"
#: core/project_settings.cpp
-#, fuzzy
msgid "Project Settings Override"
-msgstr "إعدادات المشروع..."
+msgstr "تجاوز إعدادات المشروع"
#: core/project_settings.cpp core/resource.cpp
#: editor/animation_track_editor.cpp editor/editor_autoload_settings.cpp
@@ -651,7 +601,8 @@ msgstr "الوصÙ"
#: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
-#: main/main.cpp
+#: main/main.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp
msgid "Run"
msgstr "تشغيل"
@@ -661,39 +612,36 @@ msgid "Main Scene"
msgstr "المشهد الرئيس"
#: core/project_settings.cpp
-#, fuzzy
msgid "Disable stdout"
-msgstr "تعطيل البلاط التلقائي Autotile"
+msgstr "تعطيل stdout"
#: core/project_settings.cpp
-#, fuzzy
msgid "Disable stderr"
-msgstr "عنصر معطّل"
+msgstr "تعطيل stderr"
#: core/project_settings.cpp
msgid "Use Hidden Project Data Directory"
-msgstr ""
+msgstr "استخدم دليل بيانات المشروع المخÙية"
#: core/project_settings.cpp
msgid "Use Custom User Dir"
-msgstr ""
+msgstr "استخدم دليل المستخدم المخصص"
#: core/project_settings.cpp
msgid "Custom User Dir Name"
-msgstr ""
+msgstr "اسم دليل المستخدم المخصص"
#: core/project_settings.cpp main/main.cpp
#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
#: platform/uwp/os_uwp.cpp
-#, fuzzy
msgid "Display"
-msgstr "إظهار الكل"
+msgstr "عرض"
#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp
#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp
#: scene/3d/label_3d.cpp scene/gui/text_edit.cpp scene/resources/texture.cpp
msgid "Width"
-msgstr ""
+msgstr "العرض"
#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp
#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp
@@ -701,23 +649,20 @@ msgstr ""
#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp
#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp
#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp
-#, fuzzy
msgid "Height"
-msgstr "ضوء"
+msgstr "Ø§Ù„Ø§Ø±ØªÙØ§Ø¹"
#: core/project_settings.cpp
msgid "Always On Top"
-msgstr ""
+msgstr "عرض Ù†Ø§ÙØ°Ø© المشروع امام كل Ø§Ù„Ù†ÙˆØ§ÙØ°"
#: core/project_settings.cpp
-#, fuzzy
msgid "Test Width"
-msgstr "بالعرض يساراً"
+msgstr "عرض الاختبار"
#: core/project_settings.cpp
-#, fuzzy
msgid "Test Height"
-msgstr "أختبار"
+msgstr "Ø§Ø±ØªÙØ§Ø¹ الاختبار"
#: core/project_settings.cpp editor/animation_track_editor.cpp
#: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp
@@ -725,9 +670,8 @@ msgid "Audio"
msgstr "الصوت"
#: core/project_settings.cpp
-#, fuzzy
msgid "Default Bus Layout"
-msgstr "تحميل نسق المسار Ø§Ù„Ø¥ÙØªØ±Ø§Ø¶ÙŠ."
+msgstr "تنسيق الناقل Ø§Ù„Ø§ÙØªØ±Ø§Ø¶ÙŠ"
#: core/project_settings.cpp editor/editor_export.cpp
#: editor/editor_file_system.cpp editor/editor_node.cpp
@@ -737,98 +681,86 @@ msgid "Editor"
msgstr "المحرّر"
#: core/project_settings.cpp
-#, fuzzy
msgid "Main Run Args"
-msgstr "معاملات المشهد الرئيس:"
+msgstr "معاملات المشهد الرئيس"
+
+#: core/project_settings.cpp
+msgid "Scene Naming"
+msgstr "تسمية المشهد"
#: core/project_settings.cpp
msgid "Search In File Extensions"
-msgstr ""
+msgstr "البحث ÙÙŠ امتدادات الملÙ"
#: core/project_settings.cpp
msgid "Script Templates Search Path"
-msgstr ""
-
-#: core/project_settings.cpp editor/editor_node.cpp
-#: editor/plugins/version_control_editor_plugin.cpp
-msgid "Version Control"
-msgstr "إدارة الإصدارات (Version Control)"
+msgstr "مسار البحث ÙÙŠ قوالب النص البرمجي"
#: core/project_settings.cpp
-msgid "Autoload On Startup"
-msgstr ""
+msgid "Version Control Autoload On Startup"
+msgstr "التحميل التلقائي للتحكم ÙÙŠ الإصدار عند بدء التشغيل"
#: core/project_settings.cpp
#, fuzzy
-msgid "Plugin Name"
-msgstr "اسم Ø§Ù„Ø¥Ø¶Ø§ÙØ©:"
+msgid "Version Control Plugin Name"
+msgstr "إدارة الإصدارات (Version Control)"
#: core/project_settings.cpp scene/2d/collision_object_2d.cpp
#: scene/3d/collision_object.cpp scene/gui/control.cpp
-#, fuzzy
msgid "Input"
-msgstr "أض٠مدخله"
+msgstr "إدخال"
#: core/project_settings.cpp
msgid "UI Accept"
-msgstr ""
+msgstr "قبول"
#: core/project_settings.cpp
-#, fuzzy
msgid "UI Select"
-msgstr "حدد"
+msgstr "تحديد"
#: core/project_settings.cpp
-#, fuzzy
msgid "UI Cancel"
msgstr "إلغاء"
#: core/project_settings.cpp
-#, fuzzy
msgid "UI Focus Next"
-msgstr "مسار التركيز"
+msgstr "حدد التالي"
#: core/project_settings.cpp
-#, fuzzy
msgid "UI Focus Prev"
-msgstr "مسار التركيز"
+msgstr "حدد السابق"
#: core/project_settings.cpp
-#, fuzzy
msgid "UI Left"
-msgstr "ÙÙŠ الأعلى يساراً"
+msgstr "يسار"
#: core/project_settings.cpp
-#, fuzzy
msgid "UI Right"
-msgstr "ÙÙŠ الأعلى يميناً"
+msgstr "يمين"
#: core/project_settings.cpp
msgid "UI Up"
-msgstr ""
+msgstr "أعلى"
#: core/project_settings.cpp
-#, fuzzy
msgid "UI Down"
msgstr "أسÙÙ„"
#: core/project_settings.cpp
-#, fuzzy
msgid "UI Page Up"
-msgstr "Ø§Ù„ØµÙØ­Ø©: "
+msgstr "Ø§Ù„ØµÙØ­Ø© السابقة / up"
#: core/project_settings.cpp
msgid "UI Page Down"
-msgstr ""
+msgstr "Ø§Ù„ØµÙØ­Ø© التالية / down"
#: core/project_settings.cpp
msgid "UI Home"
-msgstr ""
+msgstr "الرئيسي (home)"
#: core/project_settings.cpp
-#, fuzzy
msgid "UI End"
-msgstr "ÙÙŠ النهاية"
+msgstr "النهاية"
#: core/project_settings.cpp main/main.cpp modules/bullet/register_types.cpp
#: modules/bullet/space_bullet.cpp scene/2d/physics_body_2d.cpp
@@ -838,9 +770,8 @@ msgstr "ÙÙŠ النهاية"
#: servers/physics_2d/physics_2d_server_wrap_mt.h
#: servers/physics_2d/space_2d_sw.cpp servers/physics_2d_server.cpp
#: servers/physics_server.cpp
-#, fuzzy
msgid "Physics"
-msgstr " (Ùيزيائي)"
+msgstr "الÙيزياء"
#: core/project_settings.cpp editor/editor_settings.cpp
#: editor/import/resource_importer_layered_texture.cpp
@@ -850,7 +781,7 @@ msgstr " (Ùيزيائي)"
#: scene/3d/physics_body.cpp scene/resources/world.cpp
#: servers/physics/space_sw.cpp servers/physics_server.cpp
msgid "3D"
-msgstr ""
+msgstr "ثلاثي الأبعاد 3D"
#: core/project_settings.cpp
#, fuzzy
@@ -866,9 +797,8 @@ msgstr "إنشاء متصادم تراميش قريب"
#: modules/lightmapper_cpu/register_types.cpp scene/main/scene_tree.cpp
#: scene/main/viewport.cpp servers/visual/visual_server_scene.cpp
#: servers/visual_server.cpp
-#, fuzzy
msgid "Rendering"
-msgstr "Ù…ÙØ­Ø±Ùƒ الإخراج البصري:"
+msgstr "استدعاء"
#: core/project_settings.cpp drivers/gles2/rasterizer_storage_gles2.cpp
#: drivers/gles3/rasterizer_scene_gles3.cpp
@@ -878,17 +808,17 @@ msgstr "Ù…ÙØ­Ø±Ùƒ الإخراج البصري:"
#: scene/resources/multimesh.cpp servers/visual/visual_server_scene.cpp
#: servers/visual_server.cpp
msgid "Quality"
-msgstr ""
+msgstr "جودة"
#: core/project_settings.cpp scene/gui/file_dialog.cpp
-#: scene/main/scene_tree.cpp servers/visual_server.cpp
-#, fuzzy
+#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp
+#: servers/visual_server.cpp
msgid "Filters"
-msgstr "مرشحات:"
+msgstr "مرشحات"
#: core/project_settings.cpp scene/main/viewport.cpp
msgid "Sharpen Intensity"
-msgstr ""
+msgstr "شحذ Ø§Ù„ÙƒØ«Ø§ÙØ©"
#: core/project_settings.cpp editor/editor_export.cpp editor/editor_node.cpp
#: editor/editor_settings.cpp editor/plugins/script_editor_plugin.cpp
@@ -904,9 +834,8 @@ msgstr "تصحيح الأخطاء"
#: core/project_settings.cpp main/main.cpp modules/gdscript/gdscript.cpp
#: modules/visual_script/visual_script.cpp scene/resources/dynamic_font.cpp
-#, fuzzy
msgid "Settings"
-msgstr "الإعدادات:"
+msgstr "الإعدادات"
#: core/project_settings.cpp editor/script_editor_debugger.cpp main/main.cpp
#: modules/mono/mono_gd/gd_mono.cpp
@@ -914,14 +843,12 @@ msgid "Profiler"
msgstr "Ù…Ùنشئ Ø§Ù„Ù…Ù„ÙØ§Øª التعريÙية Profiler"
#: core/project_settings.cpp
-#, fuzzy
msgid "Max Functions"
-msgstr "عمل دالة"
+msgstr "أقصى عمل"
#: core/project_settings.cpp scene/3d/vehicle_body.cpp
-#, fuzzy
msgid "Compression"
-msgstr "تحديد التعبير"
+msgstr "ضغط"
#: core/project_settings.cpp
#, fuzzy
@@ -929,62 +856,63 @@ msgid "Formats"
msgstr "البنية (اللاحقة)"
#: core/project_settings.cpp
+#, fuzzy
msgid "Zstd"
-msgstr ""
+msgstr "Zstd"
#: core/project_settings.cpp
msgid "Long Distance Matching"
-msgstr ""
+msgstr "مطابقة Ø§Ù„Ù…Ø³Ø§ÙØ§Øª الطويلة"
#: core/project_settings.cpp
msgid "Compression Level"
-msgstr ""
+msgstr "ضغط المستوى"
#: core/project_settings.cpp
msgid "Window Log Size"
-msgstr ""
+msgstr "حجم Ù†Ø§ÙØ°Ø© سجل"
#: core/project_settings.cpp
+#, fuzzy
msgid "Zlib"
-msgstr ""
+msgstr "Zlib"
#: core/project_settings.cpp
+#, fuzzy
msgid "Gzip"
-msgstr ""
+msgstr "Gzip"
#: core/project_settings.cpp platform/android/export/export.cpp
msgid "Android"
-msgstr ""
+msgstr "أندرويد"
#: core/project_settings.cpp
msgid "Modules"
-msgstr ""
+msgstr "وحدات"
#: core/register_core_types.cpp
msgid "TCP"
-msgstr ""
+msgstr "بروتوكول التحكم بالإرسال (TCP)"
#: core/register_core_types.cpp
-#, fuzzy
msgid "Connect Timeout Seconds"
-msgstr "الاتصالات لدالة:"
+msgstr "Ù†ÙØ° وقت الإتصال"
#: core/register_core_types.cpp
msgid "Packet Peer Stream"
-msgstr ""
+msgstr "حزمة تيار الأقران"
#: core/register_core_types.cpp
msgid "Max Buffer (Power of 2)"
-msgstr ""
+msgstr "الحد الأقصى للمخزن المؤقت (قوة 2)"
#: core/register_core_types.cpp editor/editor_settings.cpp main/main.cpp
msgid "SSL"
-msgstr ""
+msgstr "SSL"
#: core/register_core_types.cpp main/main.cpp
-#, fuzzy
msgid "Certificates"
-msgstr "القمم:"
+msgstr "الشهادات"
#: core/resource.cpp editor/dependency_editor.cpp
#: editor/editor_resource_picker.cpp
@@ -993,9 +921,8 @@ msgid "Resource"
msgstr "مورد"
#: core/resource.cpp
-#, fuzzy
msgid "Local To Scene"
-msgstr "اغلاق المشهد"
+msgstr "مشهد محلي"
#: core/resource.cpp editor/dependency_editor.cpp
#: editor/editor_autoload_settings.cpp editor/plugins/path_editor_plugin.cpp
@@ -1005,22 +932,20 @@ msgid "Path"
msgstr "المسار"
#: core/script_language.cpp
-#, fuzzy
msgid "Source Code"
-msgstr "مصدر"
+msgstr "مصدر الرمز"
#: core/translation.cpp editor/project_settings_editor.cpp
msgid "Locale"
msgstr "محلي"
#: core/translation.cpp
-#, fuzzy
msgid "Test"
-msgstr "أختبار"
+msgstr "إختبار"
#: core/translation.cpp scene/resources/font.cpp
msgid "Fallback"
-msgstr ""
+msgstr "تقهقر"
#: core/ustring.cpp scene/resources/segment_shape_2d.cpp
msgid "B"
@@ -1056,17 +981,17 @@ msgstr "إكسي بايت (EiB)"
#: drivers/gles3/rasterizer_scene_gles3.cpp
#: drivers/gles3/rasterizer_storage_gles3.cpp modules/gltf/gltf_state.cpp
msgid "Buffers"
-msgstr ""
+msgstr "المخازن المؤقته"
#: drivers/gles2/rasterizer_canvas_base_gles2.cpp
#: drivers/gles3/rasterizer_canvas_base_gles3.cpp
msgid "Canvas Polygon Buffer Size (KB)"
-msgstr ""
+msgstr "حجم المخزن المؤقت للوحة المضلعات (KB)"
#: drivers/gles2/rasterizer_canvas_base_gles2.cpp
#: drivers/gles3/rasterizer_canvas_base_gles3.cpp
msgid "Canvas Polygon Index Buffer Size (KB)"
-msgstr ""
+msgstr "حجم Ùهرس المخزن المؤقت للوحة المضلعات (KB)"
#: drivers/gles2/rasterizer_canvas_base_gles2.cpp
#: drivers/gles3/rasterizer_canvas_base_gles3.cpp editor/editor_settings.cpp
@@ -1078,7 +1003,7 @@ msgstr ""
#: servers/physics_2d/space_2d_sw.cpp servers/physics_2d_server.cpp
#: servers/visual_server.cpp
msgid "2D"
-msgstr ""
+msgstr "2D"
#: drivers/gles2/rasterizer_canvas_base_gles2.cpp
#: drivers/gles3/rasterizer_canvas_base_gles3.cpp
@@ -1095,7 +1020,7 @@ msgstr "إستخدام كبس البكسل"
#: drivers/gles2/rasterizer_scene_gles2.cpp
#: drivers/gles3/rasterizer_scene_gles3.cpp
msgid "Immediate Buffer Size (KB)"
-msgstr ""
+msgstr "حجم المخزن المؤقت الÙوري (KB)"
#: drivers/gles2/rasterizer_storage_gles2.cpp
#: drivers/gles3/rasterizer_storage_gles3.cpp
@@ -1106,15 +1031,15 @@ msgstr "طبخ (إعداد) خرائط الضوء"
#: drivers/gles2/rasterizer_storage_gles2.cpp
#: drivers/gles3/rasterizer_storage_gles3.cpp
msgid "Use Bicubic Sampling"
-msgstr ""
+msgstr "استخدم طريقة Bicubic Sampling"
#: drivers/gles3/rasterizer_scene_gles3.cpp
msgid "Max Renderable Elements"
-msgstr ""
+msgstr "الحد الأقصى للعناصر القابلة للعرض"
#: drivers/gles3/rasterizer_scene_gles3.cpp
msgid "Max Renderable Lights"
-msgstr ""
+msgstr "الحجم الأقصى للأضواء القابلة للعرض"
#: drivers/gles3/rasterizer_scene_gles3.cpp
#, fuzzy
@@ -1123,11 +1048,11 @@ msgstr "Ù†ØµÙ Ø§Ù„Ù…ÙØ­Ø¯Ø¯"
#: drivers/gles3/rasterizer_scene_gles3.cpp
msgid "Max Lights Per Object"
-msgstr ""
+msgstr "الحد الأقصى للأضواء لكل كائن"
#: drivers/gles3/rasterizer_scene_gles3.cpp
msgid "Subsurface Scattering"
-msgstr ""
+msgstr "التشتت تحت السطح"
#: drivers/gles3/rasterizer_scene_gles3.cpp editor/animation_track_editor.cpp
#: editor/import/resource_importer_texture.cpp
@@ -1149,19 +1074,19 @@ msgstr "تزويد السطح"
#: drivers/gles3/rasterizer_scene_gles3.cpp
msgid "Weight Samples"
-msgstr ""
+msgstr "عينات الوزن"
#: drivers/gles3/rasterizer_scene_gles3.cpp
msgid "Voxel Cone Tracing"
-msgstr ""
+msgstr "تتبع مخروط Ùوكسل (Voxel)"
#: drivers/gles3/rasterizer_scene_gles3.cpp scene/resources/environment.cpp
msgid "High Quality"
-msgstr ""
+msgstr "جودة عالية"
#: drivers/gles3/rasterizer_storage_gles3.cpp
msgid "Blend Shape Max Buffer Size (KB)"
-msgstr ""
+msgstr "الحد الأقصى لحجم المخزن المؤقت لشكل المزج (كيلو بايت)"
#. TRANSLATORS: Adjective, refers to the mode for Bezier handles (Free, Balanced, Mirror).
#: editor/animation_bezier_editor.cpp
@@ -1272,7 +1197,7 @@ msgstr "الكمية:"
#: editor/animation_track_editor.cpp main/main.cpp
#: modules/mono/mono_gd/gd_mono.cpp
msgid "Args"
-msgstr ""
+msgstr "المعاملات (Args)"
#: editor/animation_track_editor.cpp editor/editor_settings.cpp
#: editor/script_editor_debugger.cpp modules/gltf/gltf_accessor.cpp
@@ -1296,7 +1221,7 @@ msgstr "حدد المعامل"
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/audio/audio_stream_player.cpp scene/gui/video_player.cpp
msgid "Stream"
-msgstr ""
+msgstr "المجرى (Stream)"
#: editor/animation_track_editor.cpp
#, fuzzy
@@ -1406,9 +1331,8 @@ msgid "Anim Clips:"
msgstr "مقاطع الرسوم المتحركة:"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Change Track Path"
-msgstr "تغيير مسار الطريق/المقطع"
+msgstr "تغيير مسار مقطع الحركة/الانيميشن"
#: editor/animation_track_editor.cpp
msgid "Toggle this track on/off."
@@ -1424,16 +1348,15 @@ msgstr "وضعية Ø§Ù„Ø£Ø³ØªÙŠÙØ§Ø¡"
#: editor/animation_track_editor.cpp
msgid "Loop Wrap Mode (Interpolate end with beginning on loop)"
-msgstr "وضع Ø§Ù„ØªÙØ§Ù الحلقة (استكمال النهاية مع البداية ÙÙŠ الحلقة)"
+msgstr "وضع Ø§Ù„ØªÙØ§Ù الحلقة (مزج النهاية مع البداية ÙÙŠ الحلقة)"
#: editor/animation_track_editor.cpp
msgid "Remove this track."
msgstr "إزالة هذا المسار."
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Time (s):"
-msgstr "الوقت(ثواني): "
+msgstr "الوقت(ثواني):"
#: editor/animation_track_editor.cpp
#, fuzzy
@@ -1713,9 +1636,8 @@ msgid "Add Method Track Key"
msgstr "Ø£Ø¶Ù’Ù Ù…ÙØªØ§Ø­ لمقطع الدالة (Method Track)"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Method not found in object:"
-msgstr "دالة لم توجد ÙÙŠ الكائن: "
+msgstr "دالة لم توجد ÙÙŠ الكائن:"
#: editor/animation_track_editor.cpp
msgid "Anim Move Keys"
@@ -1735,7 +1657,7 @@ msgstr "دوال"
#: editor/animation_track_editor.cpp
msgid "Bezier"
-msgstr ""
+msgstr "منحنى بيزر (Bezier)"
#: editor/animation_track_editor.cpp
#: modules/visual_script/visual_script_editor.cpp
@@ -2320,8 +2242,8 @@ msgid "Open"
msgstr "Ø¥ÙØªØ­"
#: editor/dependency_editor.cpp
-msgid "Owners Of:"
-msgstr "ملاك:"
+msgid "Owners of: %s (Total: %d)"
+msgstr "مالكو: %s (المجموع: %d)"
#: editor/dependency_editor.cpp
msgid ""
@@ -2539,7 +2461,7 @@ msgstr "ÙØ´Ù„ استخراج Ø§Ù„Ù…Ù„ÙØ§Øª التالية من الحزمة \"
#: editor/editor_asset_installer.cpp
msgid "(and %s more files)"
-msgstr "(Ùˆ %s Ù…Ù„ÙØ§Øª اكثر)"
+msgstr "(Ùˆ %s Ù…Ù„ÙØ§Øª اخرى)"
#: editor/editor_asset_installer.cpp
msgid "Asset \"%s\" installed successfully!"
@@ -2623,7 +2545,7 @@ msgid "Bus Options"
msgstr "‎خيارات مسار الصوت (BUS)"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/scene_tree_dock.cpp
+#: editor/project_export.cpp editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "تكرير"
@@ -2880,6 +2802,25 @@ msgid "Choose"
msgstr "إختر"
#: editor/editor_export.cpp
+msgid "Project export for platform:"
+msgstr "تصدير المشروع لمنصة:"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Completed with errors."
+msgstr "نسخ مسار العÙقدة"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Completed successfully."
+msgstr "اكتمل بنجاح."
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed."
+msgstr "ÙØ´Ù„:"
+
+#: editor/editor_export.cpp
msgid "Storing File:"
msgstr "تخزين الملÙ:"
@@ -2892,6 +2833,31 @@ msgid "Packing"
msgstr "يَحزم\"ينتج المل٠المضغوط\""
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save PCK"
+msgstr "Ø­ÙØ¸ بأسم"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Cannot create file \"%s\"."
+msgstr "لا يمكن إنشاء المجلد."
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to export project files."
+msgstr "لم نتمكن من تصدير Ù…Ù„ÙØ§Øª المشروع"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Can't open file to read from path \"%s\"."
+msgstr "لا يمكن ÙØªØ­ المل٠للكتابة:"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save ZIP"
+msgstr "Ø­ÙØ¸ بأسم"
+
+#: editor/editor_export.cpp
msgid ""
"Target platform requires 'ETC' texture compression for GLES2. Enable 'Import "
"Etc' in Project Settings."
@@ -2962,17 +2928,16 @@ msgid "Release"
msgstr "الإصدار"
#: editor/editor_export.cpp
-#, fuzzy
msgid "Binary Format"
-msgstr "Ù…ÙØ´ØºÙ‘Ù„ اللون."
+msgstr "تنسيق ثنائي"
#: editor/editor_export.cpp
msgid "64 Bits"
-msgstr ""
+msgstr "64 بت"
#: editor/editor_export.cpp
msgid "Embed PCK"
-msgstr ""
+msgstr "تضمين PCK"
#: editor/editor_export.cpp platform/osx/export/export.cpp
#, fuzzy
@@ -2981,19 +2946,19 @@ msgstr "منطقة النقش TextureRegion"
#: editor/editor_export.cpp
msgid "BPTC"
-msgstr ""
+msgstr "BPTC"
#: editor/editor_export.cpp platform/osx/export/export.cpp
msgid "S3TC"
-msgstr ""
+msgstr "S3TC"
#: editor/editor_export.cpp platform/osx/export/export.cpp
msgid "ETC"
-msgstr ""
+msgstr "ETC"
#: editor/editor_export.cpp platform/osx/export/export.cpp
msgid "ETC2"
-msgstr ""
+msgstr "ETC2"
#: editor/editor_export.cpp
#, fuzzy
@@ -3012,17 +2977,39 @@ msgstr "نمودج تصحيح الأخطاء غير موجود."
msgid "Custom release template not found."
msgstr "قالب الإصدار المخصص ليس موجود."
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Prepare Template"
+msgstr "إدارة القوالب"
+
+#: editor/editor_export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "The given export path doesn't exist."
+msgstr "مسار التصدير Ø§Ù„Ù…ÙØ²ÙˆØ¯ غير موجود:"
+
#: editor/editor_export.cpp platform/javascript/export/export.cpp
-msgid "Template file not found:"
+#, fuzzy
+msgid "Template file not found: \"%s\"."
msgstr "مل٠النموذج غير موجود:"
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to copy export template."
+msgstr "إدارة قوالب التصدير:"
+
+#: editor/editor_export.cpp platform/windows/export/export.cpp
+#: platform/x11/export/export.cpp
+#, fuzzy
+msgid "PCK Embedding"
+msgstr "الحوا٠Padding"
+
+#: editor/editor_export.cpp
msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB."
msgstr "لا يمكن Ù„Ù…ÙØµØ¯Ø±Ø§Øª 32-bit التي تتضمن PCK أن تكون أكبر من 4 GiB."
#: editor/editor_export.cpp
msgid "Convert Text Resources To Binary On Export"
-msgstr ""
+msgstr "تحويل الموارد النصية إلى صيغة ثنائية عند التصدير"
#: editor/editor_feature_profile.cpp
msgid "3D Editor"
@@ -3185,9 +3172,9 @@ msgid "Import"
msgstr "استيراد"
#: editor/editor_feature_profile.cpp editor/project_export.cpp
-#: platform/android/export/export.cpp platform/javascript/export/export.cpp
-#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
-#: platform/windows/export/export.cpp
+#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#: platform/uwp/export/export.cpp platform/windows/export/export.cpp
msgid "Export"
msgstr "تصدير"
@@ -3298,9 +3285,8 @@ msgid "Save a File"
msgstr "Ø­ÙØ¸ ملÙ"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
-#, fuzzy
msgid "Access"
-msgstr "تم بشكل ناجح!"
+msgstr "الوصول (للملÙ)"
#: editor/editor_file_dialog.cpp editor/editor_settings.cpp
#, fuzzy
@@ -3345,7 +3331,7 @@ msgstr "أظهر Ø§Ù„Ù…Ù„ÙØ§Øª المخÙية"
#: editor/editor_file_dialog.cpp
msgid "Disable Overwrite Warning"
-msgstr ""
+msgstr "تعطيل تحذير الإستبدال"
#: editor/editor_file_dialog.cpp
msgid "Go Back"
@@ -3446,7 +3432,7 @@ msgstr "إعادة إستيراد الأصول"
#: editor/editor_file_system.cpp
msgid "Reimport Missing Imported Files"
-msgstr ""
+msgstr "إعادة استيراد Ø§Ù„Ù…Ù„ÙØ§Øª المستوردة المÙقودة"
#: editor/editor_help.cpp scene/2d/camera_2d.cpp scene/gui/control.cpp
#: scene/gui/nine_patch_rect.cpp scene/resources/dynamic_font.cpp
@@ -3558,7 +3544,7 @@ msgstr "مساعدة"
#: editor/editor_help.cpp
msgid "Sort Functions Alphabetically"
-msgstr ""
+msgstr "ترتيب الدوال أبجديا"
#: editor/editor_help_search.cpp editor/editor_node.cpp
#: editor/plugins/script_editor_plugin.cpp
@@ -3874,7 +3860,7 @@ msgstr "ينشئ الصورة المصغرة"
#: editor/editor_node.cpp
msgid "This operation can't be done without a tree root."
-msgstr "هذه العميلة لا يمكن إجرائها من غير جذر/اساس رئيسي للشجرة."
+msgstr "هذه العميلة لا يمكن إجرائها من غير جذر رئيسي للشجرة."
#: editor/editor_node.cpp
msgid ""
@@ -4337,15 +4323,8 @@ msgstr "%d مزيد من Ø§Ù„Ù…Ù„ÙØ§Øª"
msgid ""
"Unable to write to file '%s', file in use, locked or lacking permissions."
msgstr ""
-
-#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
-msgid "Scene"
-msgstr "مشهد"
-
-#: editor/editor_node.cpp
-#, fuzzy
-msgid "Scene Naming"
-msgstr "المسار للمشهد:"
+"غير قادر على الكتابة إلى المل٠'% s' ، المل٠قيد الاستخدام ، مؤمن أو ينقصه "
+"الأذونات."
#: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp
#: servers/arvr/arvr_interface.cpp
@@ -4365,11 +4344,11 @@ msgstr "إظهار الشبكة دوماً"
#: editor/editor_node.cpp editor/editor_settings.cpp
msgid "Resize If Many Tabs"
-msgstr ""
+msgstr "تغيير الحجم ÙÙŠ حالة وجود العديد من علامات التبويب"
#: editor/editor_node.cpp editor/editor_settings.cpp
msgid "Minimum Width"
-msgstr ""
+msgstr "الحد الأدنى للعرض"
#: editor/editor_node.cpp editor/editor_settings.cpp
msgid "Output"
@@ -4382,15 +4361,15 @@ msgstr "مسح Ø§Ù„Ù…ÙØ®Ø±Ø¬Ø§Øª"
#: editor/editor_node.cpp editor/editor_settings.cpp
msgid "Always Open Output On Play"
-msgstr ""
+msgstr "دائما Ø§ÙØªØ­ Ù†Ø§ÙØ°Ø© الإخراج أثناء التشغيل"
#: editor/editor_node.cpp editor/editor_settings.cpp
msgid "Always Close Output On Stop"
-msgstr ""
+msgstr "دائما أغلق Ù†Ø§ÙØ°Ø© الإخراج عند إيقا٠التشغيل"
#: editor/editor_node.cpp
msgid "Save On Focus Loss"
-msgstr ""
+msgstr "Ø­ÙØ¸ عند Ùقدان التركيز"
#: editor/editor_node.cpp editor/editor_settings.cpp
#, fuzzy
@@ -4428,7 +4407,7 @@ msgstr "عقدة التنقل الزمني"
#: editor/editor_node.cpp editor/editor_settings.cpp
msgid "Show Thumbnail On Hover"
-msgstr ""
+msgstr "إظهار الصورة المصغرة عند التمرير"
#: editor/editor_node.cpp editor/editor_settings.cpp
msgid "Inspector"
@@ -4441,7 +4420,7 @@ msgstr "مسار المشروع:"
#: editor/editor_node.cpp
msgid "Default Float Step"
-msgstr ""
+msgstr "خطوة الfloat Ø§Ù„Ø§ÙØªØ±Ø§Ø¶ÙŠØ©"
#: editor/editor_node.cpp scene/gui/tree.cpp
#, fuzzy
@@ -4450,15 +4429,15 @@ msgstr "زر معطّل"
#: editor/editor_node.cpp
msgid "Auto Unfold Foreign Scenes"
-msgstr ""
+msgstr "إكش٠المشاهد الأجنبية تلقائيا"
#: editor/editor_node.cpp
msgid "Horizontal Vector2 Editing"
-msgstr ""
+msgstr "تحرير Vector2 الأÙقي"
#: editor/editor_node.cpp
msgid "Horizontal Vector Types Editing"
-msgstr ""
+msgstr "تحرير أنواع المتجهات الأÙقية"
#: editor/editor_node.cpp
#, fuzzy
@@ -4472,7 +4451,11 @@ msgstr "Ø§ÙØªØ­ ÙÙŠ Ø§Ù„Ù…ÙØªØµÙØ­"
#: editor/editor_node.cpp
msgid "Default Color Picker Mode"
-msgstr ""
+msgstr "وضع منتقي الألوان Ø§Ù„Ø§ÙØªØ±Ø§Ø¶ÙŠ"
+
+#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
+msgid "Version Control"
+msgstr "إدارة الإصدارات (Version Control)"
#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
#, fuzzy
@@ -4503,6 +4486,10 @@ msgstr "تمكين/إيقا٠الوضع الخالي من الإلهاء."
msgid "Add a new scene."
msgstr "Ø¥Ø¶Ø§ÙØ© مشهد جديد."
+#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
+msgid "Scene"
+msgstr "مشهد"
+
#: editor/editor_node.cpp
msgid "Go to previously opened scene."
msgstr "اذهب الي المشهد Ø§Ù„Ù…ÙØªÙˆØ­ مسبقا."
@@ -5094,6 +5081,12 @@ msgid ""
"functions called by that function.\n"
"Use this to find individual functions to optimize."
msgstr ""
+"شامل: يشمل الوقت من الدوال الأخرى التي تستدعيها هذه الدالة.\n"
+"استخدم هذا لتحديد الاختناقات (bottlenecks).\n"
+"\n"
+"ذاتي: احسب Ùقط الوقت المستغرق ÙÙŠ الدالة Ù†ÙØ³Ù‡Ø§ ØŒ وليس ÙÙŠ الدوال الأخرى التي "
+"تستدعيها تلك الدالة.\n"
+"استخدم هذا للعثور على دوال محددة لتحسينها."
#: editor/editor_profiler.cpp
msgid "Frame #:"
@@ -5110,7 +5103,7 @@ msgstr "Ù…Ùنقح الأخطاء"
#: editor/editor_profiler.cpp
msgid "Profiler Frame History Size"
-msgstr ""
+msgstr "حجم تاريخ إطار المحلل"
#: editor/editor_profiler.cpp
#, fuzzy
@@ -5184,9 +5177,8 @@ msgid "Size:"
msgstr "الحجم:"
#: editor/editor_properties_array_dict.cpp
-#, fuzzy
msgid "Page:"
-msgstr "Ø§Ù„ØµÙØ­Ø©: "
+msgstr "Ø§Ù„ØµÙØ­Ø©:"
#: editor/editor_properties_array_dict.cpp
#: editor/plugins/theme_editor_plugin.cpp
@@ -5284,6 +5276,11 @@ msgstr ""
"من ÙØ¶Ù„Ùƒ أضÙÙ’ إعداد تصدير ÙÙŠ قائمة التصدير أو عر٠إعداد تصدير موجود كقابل "
"للتشغيل(عامل)."
+#: editor/editor_run_native.cpp
+#, fuzzy
+msgid "Project Run"
+msgstr "مشروع"
+
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
msgstr "أكتب منطقك ÙÙŠ الطريقة ()run_."
@@ -5320,23 +5317,23 @@ msgstr "إظهار الكل"
#: editor/editor_settings.cpp
msgid "Custom Display Scale"
-msgstr ""
+msgstr "مقياس العرض المخصص"
#: editor/editor_settings.cpp
msgid "Main Font Size"
-msgstr ""
+msgstr "حجم الخط الرئيسي"
#: editor/editor_settings.cpp
msgid "Code Font Size"
-msgstr ""
+msgstr "حجم خط الشÙÙØ±Ø©"
#: editor/editor_settings.cpp
msgid "Font Antialiased"
-msgstr ""
+msgstr "الخط Antialiased"
#: editor/editor_settings.cpp
msgid "Font Hinting"
-msgstr ""
+msgstr "تلميح الخط (Hinting)"
#: editor/editor_settings.cpp
#, fuzzy
@@ -5345,7 +5342,7 @@ msgstr "المشهد الرئيس"
#: editor/editor_settings.cpp
msgid "Main Font Bold"
-msgstr ""
+msgstr "الخط الرئيسي غامق"
#: editor/editor_settings.cpp
#, fuzzy
@@ -5354,15 +5351,15 @@ msgstr "Ø¥Ø¶Ø§ÙØ© نقطة العقدة"
#: editor/editor_settings.cpp
msgid "Dim Editor On Dialog Popup"
-msgstr ""
+msgstr "Ø§Ø®ÙØª المحرر عند انبثاق Ù†Ø§ÙØ°Ø© الحوار"
#: editor/editor_settings.cpp main/main.cpp
msgid "Low Processor Mode Sleep (µsec)"
-msgstr ""
+msgstr "وضع السكون Ø§Ù„Ù…Ù†Ø®ÙØ¶ للمعالج (µsec)"
#: editor/editor_settings.cpp
msgid "Unfocused Low Processor Mode Sleep (µsec)"
-msgstr ""
+msgstr "وضع السكون Ø§Ù„Ù…Ù†Ø®ÙØ¶ للمعالج غير المركّز (µsec)"
#: editor/editor_settings.cpp
#, fuzzy
@@ -5371,11 +5368,11 @@ msgstr "وضع خالي من الإلهاء"
#: editor/editor_settings.cpp
msgid "Automatically Open Screenshots"
-msgstr ""
+msgstr "ÙØªØ­ لقطات الشاشة تلقائيًا"
#: editor/editor_settings.cpp
msgid "Max Array Dictionary Items Per Page"
-msgstr ""
+msgstr "الحد الأقصى لعناصر قاموس المصÙÙˆÙØ© ÙÙŠ كل ØµÙØ­Ø©"
#: editor/editor_settings.cpp editor/plugins/script_editor_plugin.cpp
#: editor/plugins/theme_editor_plugin.cpp scene/gui/control.cpp
@@ -5389,7 +5386,7 @@ msgstr "إعداد Ù…ÙØ³Ø¨Ù‚"
#: editor/editor_settings.cpp
msgid "Icon And Font Color"
-msgstr ""
+msgstr "لون الأيقونة والخط"
#: editor/editor_settings.cpp
#, fuzzy
@@ -5403,11 +5400,11 @@ msgstr "اختر لوناً"
#: editor/editor_settings.cpp scene/resources/environment.cpp
msgid "Contrast"
-msgstr ""
+msgstr "التباين"
#: editor/editor_settings.cpp
msgid "Relationship Line Opacity"
-msgstr ""
+msgstr "عتامة خط العلاقة"
#: editor/editor_settings.cpp
#, fuzzy
@@ -5421,7 +5418,7 @@ msgstr "البكسلات المحيطية (الحدودية)"
#: editor/editor_settings.cpp
msgid "Use Graph Node Headers"
-msgstr ""
+msgstr "استخدم رؤوس وحدات الرسم البياني"
#: editor/editor_settings.cpp
#, fuzzy
@@ -5465,7 +5462,7 @@ msgstr "نسخ الموارد"
#: editor/editor_settings.cpp
msgid "Safe Save On Backup Then Rename"
-msgstr ""
+msgstr "Ø­ÙØ¸ آمن على النسخ الاحتياطي ثم إعادة التسمية"
#: editor/editor_settings.cpp
#, fuzzy
@@ -5479,7 +5476,7 @@ msgstr "الصورة المصغرة..."
#: editor/editor_settings.cpp
msgid "Docks"
-msgstr ""
+msgstr "Ø§Ù„Ù†ÙˆØ§ÙØ° المثبتة (Docked)"
#: editor/editor_settings.cpp
#, fuzzy
@@ -5488,7 +5485,7 @@ msgstr "تعديل شجرة المشهد"
#: editor/editor_settings.cpp
msgid "Start Create Dialog Fully Expanded"
-msgstr ""
+msgstr "بدء Ù†Ø§ÙØ°Ø© حوار الإنشاء موسعة بالكامل"
#: editor/editor_settings.cpp
#, fuzzy
@@ -5502,7 +5499,7 @@ msgstr "محرر المجموعات"
#: editor/editor_settings.cpp
msgid "Auto Refresh Interval"
-msgstr ""
+msgstr "Ø§Ù„ÙØ§ØµÙ„ الزمني للتحديث التلقائي"
#: editor/editor_settings.cpp
#, fuzzy
@@ -5517,7 +5514,7 @@ msgstr "مظهر المحرر/برنامج-جودوه"
#: editor/editor_settings.cpp scene/3d/label_3d.cpp
#: scene/resources/default_theme/default_theme.cpp
msgid "Line Spacing"
-msgstr ""
+msgstr "تباعد الأسطر"
#: editor/editor_settings.cpp editor/plugins/script_text_editor.cpp
#: modules/gdscript/editor/gdscript_highlighter.cpp
@@ -5532,15 +5529,15 @@ msgstr "Ù…ÙØ¹Ù„ّم التركيب Syntax"
#: editor/editor_settings.cpp scene/gui/text_edit.cpp
msgid "Highlight All Occurrences"
-msgstr ""
+msgstr "قم بتمييز جميع التكرارات"
#: editor/editor_settings.cpp scene/gui/text_edit.cpp
msgid "Highlight Current Line"
-msgstr ""
+msgstr "تمييز السطر الحالي"
#: editor/editor_settings.cpp editor/plugins/script_text_editor.cpp
msgid "Highlight Type Safe Lines"
-msgstr ""
+msgstr "تمييز سطور الأنواع الآمنة"
#: editor/editor_settings.cpp
#, fuzzy
@@ -5567,17 +5564,19 @@ msgid "Draw Spaces"
msgstr "استدعاءات الرسم:"
#: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp
-#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp
+#: scene/main/scene_tree.cpp scene/resources/world.cpp
+#: scene/resources/world_2d.cpp
msgid "Navigation"
msgstr "تنقل"
#: editor/editor_settings.cpp scene/gui/text_edit.cpp
msgid "Smooth Scrolling"
-msgstr ""
+msgstr "التمرير السلس"
#: editor/editor_settings.cpp scene/gui/text_edit.cpp
msgid "V Scroll Speed"
-msgstr ""
+msgstr "سرعة التمرير العمودي"
#: editor/editor_settings.cpp
#, fuzzy
@@ -5586,15 +5585,15 @@ msgstr "إظهار المركز"
#: editor/editor_settings.cpp
msgid "Minimap Width"
-msgstr ""
+msgstr "عرض الخريطة المصغرة"
#: editor/editor_settings.cpp
msgid "Mouse Extra Buttons Navigate History"
-msgstr ""
+msgstr "تنقل ÙÙŠ سجل أزرار الماوس الإضاÙية"
#: editor/editor_settings.cpp
msgid "Appearance"
-msgstr ""
+msgstr "المظهر"
#: editor/editor_settings.cpp scene/gui/text_edit.cpp
#, fuzzy
@@ -5608,7 +5607,7 @@ msgstr "رقم الخط:"
#: editor/editor_settings.cpp
msgid "Show Bookmark Gutter"
-msgstr ""
+msgstr "إظهار مزراب الإشارة المرجعية"
#: editor/editor_settings.cpp
#, fuzzy
@@ -5617,27 +5616,27 @@ msgstr "تخطي نقاط التكسّر"
#: editor/editor_settings.cpp
msgid "Show Info Gutter"
-msgstr ""
+msgstr "إظهار معلومات المزراب"
#: editor/editor_settings.cpp
msgid "Code Folding"
-msgstr ""
+msgstr "طي الكود"
#: editor/editor_settings.cpp
msgid "Word Wrap"
-msgstr ""
+msgstr "Ø§Ù„ØªÙØ§Ù الكلمات"
#: editor/editor_settings.cpp
msgid "Show Line Length Guidelines"
-msgstr ""
+msgstr "إظهار إرشادات طول السطر"
#: editor/editor_settings.cpp
msgid "Line Length Guideline Soft Column"
-msgstr ""
+msgstr "عمود ناعم لتوجيه طول السطر"
#: editor/editor_settings.cpp
msgid "Line Length Guideline Hard Column"
-msgstr ""
+msgstr "عمود غامق لتوجيه طول السطر"
#: editor/editor_settings.cpp editor/plugins/script_editor_plugin.cpp
#, fuzzy
@@ -5646,7 +5645,7 @@ msgstr "محرر النص البرمجي"
#: editor/editor_settings.cpp
msgid "Show Members Overview"
-msgstr ""
+msgstr "عرض نظرة عامة على الأعضاء"
#: editor/editor_settings.cpp editor/plugins/script_editor_plugin.cpp
#, fuzzy
@@ -5660,19 +5659,19 @@ msgstr "تشذيب Ø§Ù„ÙØ±Ø§ØºØ§Øª البيضاء الزائدة"
#: editor/editor_settings.cpp
msgid "Autosave Interval Secs"
-msgstr ""
+msgstr "Ø§Ù„ÙØ§ØµÙ„ الزمني Ù„Ù„Ø­ÙØ¸ التلقائي بالثواني"
#: editor/editor_settings.cpp editor/plugins/script_editor_plugin.cpp
msgid "Restore Scripts On Load"
-msgstr ""
+msgstr "استعادة البرامج النصية عند التحميل"
#: editor/editor_settings.cpp
msgid "Auto Reload And Parse Scripts On Save"
-msgstr ""
+msgstr "إعادة تحميل البرامج النصية تلقائيا وتحليلها عند Ø§Ù„Ø­ÙØ¸"
#: editor/editor_settings.cpp
msgid "Auto Reload Scripts On External Change"
-msgstr ""
+msgstr "إعادة تحميل البرامج النصية تلقائيا عند تغييرها من الخارج"
#: editor/editor_settings.cpp
#, fuzzy
@@ -5681,27 +5680,27 @@ msgstr "اجبار ارتداد(احتياط) التظليل"
#: editor/editor_settings.cpp
msgid "Sort Members Outline Alphabetically"
-msgstr ""
+msgstr "ÙØ±Ø² الخطوط العريضة للأعضاء أبجدياً"
#: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp
msgid "Cursor"
-msgstr ""
+msgstr "المؤشر"
#: editor/editor_settings.cpp
msgid "Scroll Past End Of File"
-msgstr ""
+msgstr "التمرير إلى ما بعد نهاية الملÙ"
#: editor/editor_settings.cpp
msgid "Block Caret"
-msgstr ""
+msgstr "علامة الإقحام"
#: editor/editor_settings.cpp
msgid "Caret Blink"
-msgstr ""
+msgstr "وميض علامة الإقحام"
#: editor/editor_settings.cpp
msgid "Caret Blink Speed"
-msgstr ""
+msgstr "سرعة وميض علامة الإقحام"
#: editor/editor_settings.cpp
#, fuzzy
@@ -5717,23 +5716,23 @@ msgstr "نسخ Ø§Ù„Ù…ÙØ­Ø¯Ø¯"
#: editor/editor_settings.cpp
msgid "Idle Parse Delay"
-msgstr ""
+msgstr "تأخير التحليل الخامل"
#: editor/editor_settings.cpp
msgid "Auto Brace Complete"
-msgstr ""
+msgstr "اكمال القوس التلقائي"
#: editor/editor_settings.cpp
msgid "Code Complete Delay"
-msgstr ""
+msgstr "تأخير الإكمال التلقائي للكود"
#: editor/editor_settings.cpp
msgid "Put Callhint Tooltip Below Current Line"
-msgstr ""
+msgstr "ضع تلميح أداة Callhint أسÙÙ„ السطر الحالي"
#: editor/editor_settings.cpp
msgid "Callhint Tooltip Offset"
-msgstr ""
+msgstr "إزاحة تلميح أداة Callhint"
#: editor/editor_settings.cpp
#, fuzzy
@@ -5757,15 +5756,15 @@ msgstr "أظهر المساعدات"
#: editor/editor_settings.cpp
msgid "Help Font Size"
-msgstr ""
+msgstr "حجم خط المساعدة"
#: editor/editor_settings.cpp
msgid "Help Source Font Size"
-msgstr ""
+msgstr "حجم خط مصدر المساعدة"
#: editor/editor_settings.cpp
msgid "Help Title Font Size"
-msgstr ""
+msgstr "حجم خط عنوان المساعدة"
#: editor/editor_settings.cpp modules/gridmap/grid_map_editor_plugin.cpp
msgid "Grid Map"
@@ -5783,11 +5782,11 @@ msgstr "عرض"
#: editor/editor_settings.cpp
msgid "Primary Grid Color"
-msgstr ""
+msgstr "لون الشبكة الأساسي"
#: editor/editor_settings.cpp
msgid "Secondary Grid Color"
-msgstr ""
+msgstr "لون الشبكة الثانوي"
#: editor/editor_settings.cpp
#, fuzzy
@@ -5824,7 +5823,7 @@ msgstr "نقطة"
#: scene/resources/particles_material.cpp servers/physics_2d_server.cpp
#: servers/physics_server.cpp
msgid "Shape"
-msgstr ""
+msgstr "شكل"
#: editor/editor_settings.cpp
#, fuzzy
@@ -5838,15 +5837,15 @@ msgstr "خطوة الشبكة:"
#: editor/editor_settings.cpp
msgid "Grid Division Level Max"
-msgstr ""
+msgstr "الحد الأقصى لمستوى تقسيم الشبكة"
#: editor/editor_settings.cpp
msgid "Grid Division Level Min"
-msgstr ""
+msgstr "الحد الأدنى لمستوى تقسيم الشبكة"
#: editor/editor_settings.cpp
msgid "Grid Division Level Bias"
-msgstr ""
+msgstr "التحيز على مستوى تقسيم الشبكة"
#: editor/editor_settings.cpp
#, fuzzy
@@ -5880,7 +5879,7 @@ msgstr "Ø§ÙØªØ±Ø§Ø¶ÙŠ"
#: editor/editor_settings.cpp
msgid "Lightmap Baking Number Of CPU Threads"
-msgstr ""
+msgstr "عدد خطوط المعالجة Ù„Ø­ÙØ¸ خرائط الإضاءة"
#: editor/editor_settings.cpp
#, fuzzy
@@ -5904,11 +5903,11 @@ msgstr "تصغير"
#: editor/editor_settings.cpp
msgid "Emulate Numpad"
-msgstr ""
+msgstr "محاكاة لوحة Ù…ÙØ§ØªÙŠØ­ الأرقام"
#: editor/editor_settings.cpp
msgid "Emulate 3 Button Mouse"
-msgstr ""
+msgstr "محاكاة الماوس ذو الثلاثة أزرار"
#: editor/editor_settings.cpp
#, fuzzy
@@ -5927,7 +5926,7 @@ msgstr "Ù…ÙØ¹Ø¯Ù‘Ù„"
#: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp
msgid "Warped Mouse Panning"
-msgstr ""
+msgstr "Ø§Ù„ØªÙØ§Ù الحركة بالماوس"
#: editor/editor_settings.cpp
#, fuzzy
@@ -5936,11 +5935,11 @@ msgstr "وضع التنقل"
#: editor/editor_settings.cpp
msgid "Orbit Sensitivity"
-msgstr ""
+msgstr "حساسية التدوير"
#: editor/editor_settings.cpp
msgid "Orbit Inertia"
-msgstr ""
+msgstr "القصور الذاتي المداري"
#: editor/editor_settings.cpp
#, fuzzy
@@ -6004,7 +6003,7 @@ msgstr "المحاذاة الذكية"
#: editor/editor_settings.cpp
msgid "Bone Width"
-msgstr ""
+msgstr "عرض العظام"
#: editor/editor_settings.cpp
#, fuzzy
@@ -6023,11 +6022,11 @@ msgstr "عدل على الحساب الحالي:"
#: editor/editor_settings.cpp
msgid "Bone IK Color"
-msgstr ""
+msgstr "لون IK العظام"
#: editor/editor_settings.cpp
msgid "Bone Outline Color"
-msgstr ""
+msgstr "لون حدود العظام"
#: editor/editor_settings.cpp
#, fuzzy
@@ -6036,19 +6035,19 @@ msgstr "حجم الخطوط:"
#: editor/editor_settings.cpp
msgid "Viewport Border Color"
-msgstr ""
+msgstr "لون حدود إطار العرض"
#: editor/editor_settings.cpp
msgid "Constrain Editor View"
-msgstr ""
+msgstr "تقييد عرض المحرر"
#: editor/editor_settings.cpp
msgid "Simple Panning"
-msgstr ""
+msgstr "التحريك البسيط"
#: editor/editor_settings.cpp
msgid "Scroll To Pan"
-msgstr ""
+msgstr "التمرير للتحريك"
#: editor/editor_settings.cpp
#, fuzzy
@@ -6062,7 +6061,7 @@ msgstr "Ù…ÙØ­Ø±Ø± UV الخاص Ø¨Ø§Ù„Ù…ÙØ¶Ù„عات ثنائية Ø§Ù„Ø¨ÙØ¹Ø¯"
#: editor/editor_settings.cpp
msgid "Point Grab Radius"
-msgstr ""
+msgstr "قطر نقطة الإنتزاع"
#: editor/editor_settings.cpp editor/plugins/polygon_2d_editor_plugin.cpp
#, fuzzy
@@ -6076,7 +6075,7 @@ msgstr "إعادة تسمية الرسم المتحرك"
#: editor/editor_settings.cpp
msgid "Default Create Bezier Tracks"
-msgstr ""
+msgstr "إنشاء مسارات Bezier Ø§Ù„Ø¥ÙØªØ±Ø§Ø¶ÙŠØ©"
#: editor/editor_settings.cpp
#, fuzzy
@@ -6085,11 +6084,11 @@ msgstr "إنشاء مسار(ات) إعادة التعيين (RESET)"
#: editor/editor_settings.cpp
msgid "Onion Layers Past Color"
-msgstr ""
+msgstr "لون Onion Layers ÙÙŠ الماضي"
#: editor/editor_settings.cpp
msgid "Onion Layers Future Color"
-msgstr ""
+msgstr "لون Onion Layers ÙÙŠ المستقبل"
#: editor/editor_settings.cpp
#, fuzzy
@@ -6098,11 +6097,11 @@ msgstr "محرر المجموعات"
#: editor/editor_settings.cpp
msgid "Minimap Opacity"
-msgstr ""
+msgstr "عتامة الخريطة المصغرة"
#: editor/editor_settings.cpp
msgid "Window Placement"
-msgstr ""
+msgstr "موضع Ø§Ù„Ù†Ø§ÙØ°Ø©"
#: editor/editor_settings.cpp scene/2d/back_buffer_copy.cpp scene/2d/sprite.cpp
#: scene/2d/visibility_notifier_2d.cpp scene/3d/sprite_3d.cpp
@@ -6118,7 +6117,7 @@ msgstr "حدد موقع خروج الإنحناء"
#: editor/editor_settings.cpp platform/android/export/export_plugin.cpp
msgid "Screen"
-msgstr ""
+msgstr "شاشة"
#: editor/editor_settings.cpp
#, fuzzy
@@ -6137,9 +6136,8 @@ msgstr "الواجهة View الأمامية"
#: editor/editor_settings.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
-#, fuzzy
msgid "Remote Host"
-msgstr "من بعد "
+msgstr "المضي٠عن بعد"
#: editor/editor_settings.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
@@ -6154,17 +6152,17 @@ msgstr "إعدادات Ø§Ù„Ù…ÙØ¹Ø¯Ù„"
#: editor/editor_settings.cpp
msgid "HTTP Proxy"
-msgstr ""
+msgstr "وكيل (Proxy) HTTP"
#: editor/editor_settings.cpp
msgid "Host"
-msgstr ""
+msgstr "المضيÙ"
#: editor/editor_settings.cpp editor/fileserver/editor_file_server.cpp
#: main/main.cpp modules/mono/mono_gd/gd_mono.cpp
#: scene/resources/default_theme/default_theme.cpp
msgid "Port"
-msgstr ""
+msgstr "Ù…Ù†ÙØ°"
#. TRANSLATORS: Project Manager here refers to the tool used to create/manage Godot projects.
#: editor/editor_settings.cpp
@@ -6179,15 +6177,15 @@ msgstr "إعادة تسمية مجلد:"
#: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp
msgid "Symbol Color"
-msgstr ""
+msgstr "لون الرمز"
#: editor/editor_settings.cpp
msgid "Keyword Color"
-msgstr ""
+msgstr "لون الكلمة Ø§Ù„Ù…ÙØªØ§Ø­ÙŠØ©"
#: editor/editor_settings.cpp
msgid "Control Flow Keyword Color"
-msgstr ""
+msgstr "لون الكلمة Ø§Ù„Ù…ÙØªØ§Ø­ÙŠØ© لتدÙÙ‚ التحكم"
#: editor/editor_settings.cpp
#, fuzzy
@@ -6196,15 +6194,15 @@ msgstr "النوع الأساسي"
#: editor/editor_settings.cpp
msgid "Engine Type Color"
-msgstr ""
+msgstr "لون نوع المحرك"
#: editor/editor_settings.cpp
msgid "User Type Color"
-msgstr ""
+msgstr "لون نوع المستخدم"
#: editor/editor_settings.cpp
msgid "Comment Color"
-msgstr ""
+msgstr "لون التعليق"
#: editor/editor_settings.cpp
#, fuzzy
@@ -6230,15 +6228,15 @@ msgstr "إستيراد المحدد"
#: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp
msgid "Completion Existing Color"
-msgstr ""
+msgstr "لون الإكمال الموجود"
#: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp
msgid "Completion Scroll Color"
-msgstr ""
+msgstr "لون تمرير الإكمال"
#: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp
msgid "Completion Font Color"
-msgstr ""
+msgstr "لون خط الإكمال"
#: editor/editor_settings.cpp
#, fuzzy
@@ -6257,7 +6255,7 @@ msgstr "رقم الخط:"
#: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp
msgid "Caret Color"
-msgstr ""
+msgstr "لون علامة الإقحام"
#: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp
#, fuzzy
@@ -6276,7 +6274,7 @@ msgstr "المحدد Ùقط"
#: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp
msgid "Brace Mismatch Color"
-msgstr ""
+msgstr "لون عدم تطابق الأقواس"
#: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp
#, fuzzy
@@ -6285,7 +6283,7 @@ msgstr "المشهد الحالي"
#: editor/editor_settings.cpp
msgid "Line Length Guideline Color"
-msgstr ""
+msgstr "لون إرشاد طول السطر"
#: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp
#, fuzzy
@@ -6294,7 +6292,7 @@ msgstr "Ù…ÙØ¹Ù„ّم التركيب Syntax"
#: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp
msgid "Number Color"
-msgstr ""
+msgstr "لون الرقم"
#: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp
#, fuzzy
@@ -6323,11 +6321,11 @@ msgstr "نقاط التكسّر"
#: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp
msgid "Executing Line Color"
-msgstr ""
+msgstr "لون سطر التنÙيذ"
#: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp
msgid "Code Folding Color"
-msgstr ""
+msgstr "لون الكود القابل للطي"
#: editor/editor_settings.cpp
#, fuzzy
@@ -6642,7 +6640,7 @@ msgstr ""
#: editor/fileserver/editor_file_server.cpp
msgid "File Server"
-msgstr ""
+msgstr "خادم Ø§Ù„Ù…Ù„ÙØ§Øª"
#: editor/fileserver/editor_file_server.cpp
#: editor/plugins/version_control_editor_plugin.cpp
@@ -7008,11 +7006,11 @@ msgstr "إدارة المجموعات"
#: editor/import/editor_import_collada.cpp
msgid "Collada"
-msgstr ""
+msgstr "كولادا (Collada)"
#: editor/import/editor_import_collada.cpp
msgid "Use Ambient"
-msgstr ""
+msgstr "استخدم Ambient"
#: editor/import/resource_importer_bitmask.cpp
#, fuzzy
@@ -7022,7 +7020,7 @@ msgstr "أنشئ مجلد"
#: editor/import/resource_importer_bitmask.cpp
#: servers/audio/effects/audio_effect_compressor.cpp
msgid "Threshold"
-msgstr ""
+msgstr "عتبة"
#: editor/import/resource_importer_csv_translation.cpp
#: editor/import/resource_importer_layered_texture.cpp
@@ -7035,7 +7033,7 @@ msgstr "مكونات"
#: editor/import/resource_importer_csv_translation.cpp
msgid "Delimiter"
-msgstr ""
+msgstr "محدد"
#: editor/import/resource_importer_layered_texture.cpp
#, fuzzy
@@ -7044,7 +7042,7 @@ msgstr "Ø§Ù„ÙˆØ¸ÙŠÙØ© البرمجية للون."
#: editor/import/resource_importer_layered_texture.cpp
msgid "No BPTC If RGB"
-msgstr ""
+msgstr "لا BPTC إذا RGB"
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp scene/2d/cpu_particles_2d.cpp
@@ -7052,17 +7050,17 @@ msgstr ""
#: scene/resources/material.cpp scene/resources/particles_material.cpp
#: scene/resources/texture.cpp scene/resources/visual_shader.cpp
msgid "Flags"
-msgstr ""
+msgstr "أعلام"
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp scene/animation/tween.cpp
#: scene/resources/texture.cpp
msgid "Repeat"
-msgstr ""
+msgstr "كرر"
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp
-#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp
+#: scene/gui/control.cpp
#, fuzzy
msgid "Filter"
msgstr "مرشحات:"
@@ -7076,12 +7074,12 @@ msgstr "الإشارات"
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp
msgid "Anisotropic"
-msgstr ""
+msgstr "تباين الخواص"
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp
msgid "sRGB"
-msgstr ""
+msgstr "sRGB (قياسي)"
#: editor/import/resource_importer_layered_texture.cpp
#, fuzzy
@@ -7126,9 +7124,8 @@ msgid "Octahedral Compression"
msgstr "تحديد التعبير"
#: editor/import/resource_importer_obj.cpp
-#, fuzzy
msgid "Optimize Mesh Flags"
-msgstr "الحجم: "
+msgstr "تحسين أعلام المجسّم"
#: editor/import/resource_importer_scene.cpp
msgid "Import as Single Scene"
@@ -7203,7 +7200,7 @@ msgstr "تخزين الملÙ:"
#: editor/import/resource_importer_scene.cpp
msgid "Use Legacy Names"
-msgstr ""
+msgstr "استخدم الأسماء القديمة"
#: editor/import/resource_importer_scene.cpp modules/gltf/gltf_state.cpp
#, fuzzy
@@ -7236,8 +7233,9 @@ msgid "Lightmap Texel Size"
msgstr "طبخ/تجهيز-خريطة-الاضاءة"
#: editor/import/resource_importer_scene.cpp modules/gltf/gltf_state.cpp
+#, fuzzy
msgid "Skins"
-msgstr ""
+msgstr "سكينس (Skins)"
#: editor/import/resource_importer_scene.cpp
#, fuzzy
@@ -7251,7 +7249,7 @@ msgstr "Ø¥ÙØªØ­ ملÙ"
#: editor/import/resource_importer_scene.cpp
msgid "Store In Subdir"
-msgstr ""
+msgstr "خزن ÙÙŠ مجلد ÙØ±Ø¹ÙŠ"
#: editor/import/resource_importer_scene.cpp
#, fuzzy
@@ -7330,9 +7328,8 @@ msgid "Generating Lightmaps"
msgstr "انشاء خارطة الضوء"
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Generating for Mesh:"
-msgstr "انشاء من اجل المجسم: "
+msgstr "توليد للمجسّم:"
#: editor/import/resource_importer_scene.cpp
msgid "Running Custom Script..."
@@ -7359,8 +7356,24 @@ msgid "Saving..."
msgstr "جاري Ø§Ù„Ø­ÙØ¸..."
#: editor/import/resource_importer_texture.cpp
-msgid "2D, Detect 3D"
+msgid ""
+"%s: Texture detected as used as a normal map in 3D. Enabling red-green "
+"texture compression to reduce memory usage (blue channel is discarded)."
msgstr ""
+"%s: تم الكش٠عن نقش مستخدم كخريطة نورمال (NormalMap) ÙÙŠ 3D. تمكين ضغط نقش "
+"الأحمر والأخضر لتقليل استخدام الذاكرة (يتم تجاهل القناة الزرقاء)."
+
+#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap "
+"generation and VRAM texture compression."
+msgstr ""
+"%s: تم الكش٠عن نقش مستخدم ÙÙŠ 3D. تمكين المرشح والتكرار وتوليد خريطة-الرسمة-"
+"بدقات-متعددة (mipmap) وضغط نقش VRAM."
+
+#: editor/import/resource_importer_texture.cpp
+msgid "2D, Detect 3D"
+msgstr "2D، والكش٠عن 3D"
#: editor/import/resource_importer_texture.cpp
#, fuzzy
@@ -7369,7 +7382,7 @@ msgstr "البكسيلات الأساسية (Solid Pixels)"
#: editor/import/resource_importer_texture.cpp scene/resources/texture.cpp
msgid "Lossy Quality"
-msgstr ""
+msgstr "جودة ضائعة (Lossy)"
#: editor/import/resource_importer_texture.cpp
#, fuzzy
@@ -7378,14 +7391,14 @@ msgstr "تحديد الوضع"
#: editor/import/resource_importer_texture.cpp
msgid "BPTC LDR"
-msgstr ""
+msgstr "BPTC LDR"
#: editor/import/resource_importer_texture.cpp
#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/cpu_particles_2d.cpp
#: scene/2d/mesh_instance_2d.cpp scene/2d/multimesh_instance_2d.cpp
#: scene/2d/particles_2d.cpp scene/2d/sprite.cpp scene/resources/style_box.cpp
msgid "Normal Map"
-msgstr ""
+msgstr "خريطة عادية"
#: editor/import/resource_importer_texture.cpp
#, fuzzy
@@ -7394,7 +7407,7 @@ msgstr "المعالجة-اللاحقة Post-Process"
#: editor/import/resource_importer_texture.cpp
msgid "Fix Alpha Border"
-msgstr ""
+msgstr "إصلاح حدود Ø£Ù„ÙØ§"
#: editor/import/resource_importer_texture.cpp
#, fuzzy
@@ -7403,7 +7416,7 @@ msgstr "تعديل Ù…ÙØªØ¹Ø¯Ø¯ السطوح"
#: editor/import/resource_importer_texture.cpp
msgid "Hdr As Srgb"
-msgstr ""
+msgstr "Hdr As Srgb"
#: editor/import/resource_importer_texture.cpp
#, fuzzy
@@ -7416,13 +7429,12 @@ msgid "Normal Map Invert Y"
msgstr "حجم عشوائي:"
#: editor/import/resource_importer_texture.cpp
-#, fuzzy
msgid "Size Limit"
-msgstr "الحجم: "
+msgstr "الحد الأقصى للحجم"
#: editor/import/resource_importer_texture.cpp
msgid "Detect 3D"
-msgstr ""
+msgstr "كش٠3D"
#: editor/import/resource_importer_texture.cpp
#, fuzzy
@@ -7434,6 +7446,8 @@ msgid ""
"Warning, no suitable PC VRAM compression enabled in Project Settings. This "
"texture will not display correctly on PC."
msgstr ""
+"تحذير، لم يتم تمكين ضغط VRAM مناسب للكمبيوتر الشخصي ÙÙŠ إعدادات المشروع. لن "
+"يتم عرض هذا النقش بشكل صحيح على جهاز الكمبيوتر."
#: editor/import/resource_importer_texture_atlas.cpp
#, fuzzy
@@ -7452,7 +7466,7 @@ msgstr "تحديد منطقة البلاط"
#: editor/import/resource_importer_texture_atlas.cpp
msgid "Trim Alpha Border From Region"
-msgstr ""
+msgstr "تقليم حدود Ø£Ù„ÙØ§ من المنطقة"
#: editor/import/resource_importer_wav.cpp scene/2d/physics_body_2d.cpp
#, fuzzy
@@ -7461,12 +7475,12 @@ msgstr "أنشر بإجبار"
#: editor/import/resource_importer_wav.cpp
msgid "8 Bit"
-msgstr ""
+msgstr "8 بت"
#: editor/import/resource_importer_wav.cpp main/main.cpp
#: modules/mono/editor/csharp_project.cpp modules/mono/mono_gd/gd_mono.cpp
msgid "Mono"
-msgstr ""
+msgstr "احاديه"
#: editor/import/resource_importer_wav.cpp
#, fuzzy
@@ -7480,7 +7494,7 @@ msgstr "عقدة الخلط"
#: editor/import/resource_importer_wav.cpp
msgid "Trim"
-msgstr ""
+msgstr "تقليم"
#: editor/import/resource_importer_wav.cpp
#, fuzzy
@@ -7597,7 +7611,7 @@ msgstr "محلي"
#: editor/inspector_dock.cpp
msgid "Localization not available for current language."
-msgstr ""
+msgstr "الترجمة غير Ù…ØªÙˆÙØ±Ø© للغة الحالية."
#: editor/inspector_dock.cpp
msgid "Copy Properties"
@@ -8046,11 +8060,20 @@ msgid "New Anim"
msgstr "رسم متحرك جديدة"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+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 "Rename Animation"
+msgstr "إعادة تسمية الرسم المتحرك"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Delete Animation?"
msgstr "مسح الرسم المتحرك؟"
@@ -8068,11 +8091,6 @@ 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 "Duplicate Animation"
msgstr "تكرار الرسم المتحرك"
@@ -8216,10 +8234,6 @@ msgid "Pin AnimationPlayer"
msgstr "تثبيت Ù…ÙØ´ØºÙ‘Ù„ الرسوميات المتحركة"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Create New Animation"
-msgstr "إنشاء رسوم متحركة جديدة"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Name:"
msgstr "إسم الرسم المتحرك:"
@@ -8336,9 +8350,8 @@ msgstr ""
"تحديد الرسومية المتحركة الخاصة بالنهاية. سيكون ذلك Ù…Ùيداً للحركات Ø§Ù„ÙØ±Ø¹ÙŠØ©."
#: editor/plugins/animation_state_machine_editor.cpp
-#, fuzzy
msgid "Transition:"
-msgstr "الانتقال: "
+msgstr "المراحل الانتقالية:"
#: editor/plugins/animation_state_machine_editor.cpp
msgid "Play Mode:"
@@ -8475,7 +8488,7 @@ msgstr "الÙلترة..."
#: editor/plugins/asset_library_editor_plugin.cpp scene/main/http_request.cpp
msgid "Use Threads"
-msgstr ""
+msgstr "استخدم خطوط المعالجة"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Contents:"
@@ -8708,7 +8721,7 @@ msgstr "أختبار"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Failed to get repository configuration."
-msgstr ""
+msgstr "ÙØ´Ù„ الحصول على إعدادات الأرشيÙ."
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Assets ZIP File"
@@ -9517,7 +9530,7 @@ msgstr "قناع الانبعاث"
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
msgid "Solid Pixels"
-msgstr "البكسيلات الأساسية (Solid Pixels)"
+msgstr "البكسلات غير Ø§Ù„Ø´ÙØ§ÙØ©"
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
@@ -10042,9 +10055,8 @@ msgid "Generate Visibility Rect"
msgstr "توليد Rect الرؤية"
#: editor/plugins/particles_2d_editor_plugin.cpp
-#, fuzzy
msgid "Can only set point into a ParticlesMaterial process material"
-msgstr "لا يمكن إنشاء سوى نقطة وحيدة داخل معالج المواد لـ ParticlesMaterial"
+msgstr "لا يمكن تحديد نقطة سوى ÙÙŠ الParticlesMaterial لمعالج المواد"
#: editor/plugins/particles_2d_editor_plugin.cpp
msgid "Convert to CPUParticles2D"
@@ -10096,9 +10108,8 @@ msgid "Volume"
msgstr "حجم"
#: editor/plugins/particles_editor_plugin.cpp
-#, fuzzy
msgid "Emission Source:"
-msgstr "مصدر الانبعاث: "
+msgstr "مصدر الانبعاث:"
#: editor/plugins/particles_editor_plugin.cpp
msgid "A processor material of type 'ParticlesMaterial' is required."
@@ -10333,6 +10344,7 @@ msgid "Points"
msgstr "النقاط"
#: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp
+#: scene/resources/navigation_mesh.cpp
msgid "Polygons"
msgstr "Ø§Ù„Ù…ÙØ¶Ù„عات"
@@ -11196,15 +11208,13 @@ msgstr "ترجم"
#. TRANSLATORS: Refers to changing the scale of a node in the 3D editor.
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Scaling:"
-msgstr "ÙŠÙØ­Ø¬Ù…: "
+msgstr "تحجيم:"
#. TRANSLATORS: Refers to changing the position of a node in the 3D editor.
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Translating:"
-msgstr "يترجم: "
+msgstr "التحريك:"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rotating %s degrees."
@@ -11252,7 +11262,7 @@ msgstr "القمم:"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "FPS: %d (%s ms)"
-msgstr "FPS: %d (%s جزء من الثانية)"
+msgstr "عدد الإطارات ÙÙŠ الثانية: %d (%s ميلي ثانية)"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Top View."
@@ -11716,7 +11726,8 @@ msgid "Invalid geometry, can't replace by mesh."
msgstr "هندسياً غير صالح، لا يمكن استبداله بسطح (mesh)."
#: editor/plugins/sprite_editor_plugin.cpp
-msgid "Convert to Mesh2D"
+#, fuzzy
+msgid "Convert to MeshInstance2D"
msgstr "تحويل إلى Mesh2D"
#: editor/plugins/sprite_editor_plugin.cpp
@@ -11748,19 +11759,16 @@ msgid "Sprite"
msgstr "رسومية"
#: editor/plugins/sprite_editor_plugin.cpp
-#, fuzzy
msgid "Simplification:"
-msgstr "التبسيط: "
+msgstr "التبسيط:"
#: editor/plugins/sprite_editor_plugin.cpp
-#, fuzzy
msgid "Shrink (Pixels):"
-msgstr "التقلص (Pixels): "
+msgstr "التقلص (Pixels):"
#: editor/plugins/sprite_editor_plugin.cpp
-#, fuzzy
msgid "Grow (Pixels):"
-msgstr "التكبير (Pixels): "
+msgstr "التكبير (Pixels):"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Update Preview"
@@ -11955,7 +11963,7 @@ msgstr "{num} خط (خطوط)"
#: editor/plugins/theme_editor_plugin.cpp
msgid "No fonts found."
-msgstr "لم يتم العثور على الخطوط."
+msgstr "لا توجد خطوط."
#: editor/plugins/theme_editor_plugin.cpp
msgid "{num} icon(s)"
@@ -12712,8 +12720,7 @@ msgid "Select the previous shape, subtile, or Tile."
msgstr "اختر الشكل أو البلاط Ø§Ù„ÙØ±Ø¹ÙŠ Ø£Ùˆ البلاط، السابق."
#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp
-#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp
-#: scene/resources/texture.cpp
+#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp
msgid "Region"
msgstr "الإقليم"
@@ -14257,36 +14264,10 @@ msgid "Delete preset '%s'?"
msgstr "Ø­Ø°Ù Ø§Ù„Ù…ÙØ¹Ø¯ Ù…ÙØ³Ø¨Ù‚اً '%s'ØŸ"
#: editor/project_export.cpp
-msgid ""
-"Failed to export the project for platform '%s'.\n"
-"Export templates seem to be missing or invalid."
-msgstr ""
-"أخÙÙ‚ تصدير المشروع لمنصة '%s'.\n"
-"على ما يبدو قوالب التصدير Ù…Ùقودة أو غير صالحة."
-
-#: 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 ""
-"أخÙÙ‚ تصدير المشروع لمنصة '%s'.\n"
-"قد يعود ذلك إلى خلل تهيئة ÙÙŠ الإعدادات Ø§Ù„Ù…ÙØ¹Ø¯Ù‘Ø© Ø³Ù„ÙØ§Ù‹ أو إعدادات التصدير الخاصة "
-"بك."
-
-#: 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 "Export Path"
msgstr "مسار التصدير"
@@ -14434,6 +14415,11 @@ msgid "Export templates for this platform are missing:"
msgstr "قوالب التصدير لهذه المنصة Ù…Ùقودة:"
#: editor/project_export.cpp
+#, fuzzy
+msgid "Project Export"
+msgstr "مؤسسون المشروع"
+
+#: editor/project_export.cpp
msgid "Manage Export Templates"
msgstr "إدارة قوالب التصدير"
@@ -15971,9 +15957,8 @@ msgid "Attach Node Script"
msgstr "ألحق نص برمجي للعÙقدة"
#: editor/script_editor_debugger.cpp
-#, fuzzy
msgid "Remote %s:"
-msgstr "من بعد "
+msgstr "من بعد %s:"
#: editor/script_editor_debugger.cpp
msgid "Bytes:"
@@ -16859,7 +16844,7 @@ msgstr ""
#: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp
#: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp
-#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp
+#: scene/3d/collision_polygon.cpp
#, fuzzy
msgid "Polygon"
msgstr "Ø§Ù„Ù…ÙØ¶Ù„عات"
@@ -17037,9 +17022,8 @@ msgid "Disabled GDNative Singleton"
msgstr "تعطيل نمط البرمجة Singleton ل GDNative"
#: modules/gdnative/gdnative_library_singleton_editor.cpp
-#, fuzzy
msgid "Libraries:"
-msgstr "مكتبات: "
+msgstr "مكتبات:"
#: modules/gdnative/nativescript/nativescript.cpp
#, fuzzy
@@ -17105,7 +17089,7 @@ msgstr "لا تستند الى نص برمجي"
#: modules/gdscript/gdscript_functions.cpp
msgid "Not based on a resource file"
-msgstr "لا تستند على مل٠مورد"
+msgstr "لا يعتمد على مل٠موارد"
#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (missing @path)"
@@ -17484,7 +17468,6 @@ msgid "Use In Baked Light"
msgstr "طبخ (إعداد) خرائط الضوء"
#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
-#: scene/resources/navigation_mesh.cpp
msgid "Cell"
msgstr ""
@@ -17514,6 +17497,19 @@ msgstr "المنتصÙ"
msgid "Mask"
msgstr ""
+#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
+#, fuzzy
+msgid "Bake Navigation"
+msgstr "تنقل"
+
+#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp
+#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp
+#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp
+#: scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Navigation Layers"
+msgstr "وضع التنقل"
+
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Plane"
msgstr "التبويب التالي"
@@ -17935,18 +17931,16 @@ msgstr ""
"أصلح العقدة من ÙØ¶Ù„Ùƒ."
#: modules/visual_script/visual_script.cpp
-#, fuzzy
msgid "Node returned an invalid sequence output:"
-msgstr "أرجعت العÙقدة تسلسلاً Ù…ÙØ®Ø±Ø¬Ø§Ù‹ غير صالح: "
+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
-#, fuzzy
msgid "Stack overflow with stack depth:"
-msgstr "حدوث تجاوز للتكدس ( Stack overflow) مع عمق التكدس: "
+msgstr "حدوث تجاوز للتكدس ( Stack overflow) مع عمق التكدس:"
#: modules/visual_script/visual_script.cpp
#, fuzzy
@@ -18320,18 +18314,16 @@ msgid "for (elem) in (input):"
msgstr "لكل (عنصر) ÙÙŠ (معلومات-الإدخال):"
#: modules/visual_script/visual_script_flow_control.cpp
-#, fuzzy
msgid "Input type not iterable:"
-msgstr "نوع الإدخال غير متوقع: "
+msgstr "نوع الإدخال لا يمكن التكرار عليه:"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Iterator became invalid"
msgstr "أصبح المÙكرر غير صالحاً"
#: modules/visual_script/visual_script_flow_control.cpp
-#, fuzzy
msgid "Iterator became invalid:"
-msgstr "أصبح المÙكرر غير صالحاً: "
+msgstr "أصبح المÙكرر غير صالحاً:"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Sequence"
@@ -18503,14 +18495,12 @@ msgid "Operator"
msgstr "Ù…ÙØ´ØºÙ„ التراكم."
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Invalid argument of type:"
-msgstr ": معامل النوع غير صحيح: "
+msgstr "معامل غير صحيح من النوع:"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Invalid arguments:"
-msgstr ": معاملات غير صالحة: "
+msgstr "معاملات غير صالحة:"
#: modules/visual_script/visual_script_nodes.cpp
msgid "a if cond, else b"
@@ -18522,14 +18512,12 @@ msgid "Var Name"
msgstr "الأسم"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "VariableGet not found in script:"
-msgstr "لم يتم إيجاد VariableGet ÙÙŠ النص البرمجي: "
+msgstr "لم يتم إيجاد VariableGet ÙÙŠ النص البرمجي:"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "VariableSet not found in script:"
-msgstr "لم يتم إيجاد (Ù…ÙØ­Ø¯Ø¯ Ø§Ù„Ù…ÙØªØºÙŠØ±) VariableSet ÙÙŠ النص البرمجي: "
+msgstr "لم يتم إيجاد VariableSet ÙÙŠ النص البرمجي:"
#: modules/visual_script/visual_script_nodes.cpp
#, fuzzy
@@ -19083,10 +19071,6 @@ msgid "Could not execute on device."
msgstr "لا يمكن إنشاء المجلد."
#: platform/android/export/export_plugin.cpp
-msgid "Unable to find the 'apksigner' tool."
-msgstr "تعذر العثور على أداة توقيع تطبيق اندرويد\"apksigner\"."
-
-#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -19222,17 +19206,20 @@ msgstr ""
"إصدار \"حزمة التطوير البرمجية Ø§Ù„Ù…Ø³ØªÙ‡Ø¯ÙØ©\" يجب أن يكون أعلى من أو يساوي إصدار "
"\"Min Sdk\"."
+#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Code Signing"
+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."
+"'apksigner' could not be found. Please check that the command is available "
+"in the Android SDK build-tools directory. The resulting %s is unsigned."
msgstr ""
-"تعذر العثور على 'apksigner'.\n"
-"تأكد من ÙØ¶Ù„Ùƒ إن كان الأمر موجوداً ÙÙŠ دليل Ù…Ù„ÙØ§Øª أدوات-بناء الأندرويد Android "
-"SDK build-tools.\n"
-"لم يتم توقيع الناتج %s."
+"تعذر العثور على 'apksigner'. تأكد من ÙØ¶Ù„Ùƒ إن كان الأمر موجوداً ÙÙŠ دليل Ù…Ù„ÙØ§Øª "
+"أدوات-بناء حزمة تطوير الأندرويد Android SDK build-tools. لم يتم توقيع الناتج "
+"%s."
#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
@@ -19247,6 +19234,10 @@ msgid "Could not find keystore, unable to export."
msgstr "لا يمكن العثور على Ù…ÙØªØ§Ø­ المتجر، لا يمكن التصدير."
#: platform/android/export/export_plugin.cpp
+msgid "Could not start apksigner executable."
+msgstr "تعذر بدء تشغيل apksigner ."
+
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr "أعاد 'apksigner' الخطأ التالي #%d"
@@ -19277,8 +19268,8 @@ msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr "أسم المل٠غير صالح! يتطلب مل٠اندرويد APK أمتداد *.apk لتعمل."
#: platform/android/export/export_plugin.cpp
-msgid "Unsupported export format!\n"
-msgstr "صيغة تصدير غير مدعومة!\n"
+msgid "Unsupported export format!"
+msgstr "تنسيق تصدير غير مدعوم!"
#: platform/android/export/export_plugin.cpp
msgid ""
@@ -19290,25 +19281,22 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Android build version mismatch:\n"
-" Template installed: %s\n"
-" Godot Version: %s\n"
+"Android build version mismatch: Template installed: %s, Godot version: %s. "
"Please reinstall Android build template from 'Project' menu."
msgstr ""
-"نسخ بناء Android غير متواÙقة:\n"
-"\tقوالب Ù…Ùنصبة: %s\n"
-"\tإصدار غودوت: %s\n"
-"من ÙØ¶Ù„Ùƒ أعد تنصيب قالب بناء الأندرويد Android من قائمة \"المشروع\"."
+"نسخ بناء Android غير متواÙقة: قوالب Ù…Ùنصبة: %s إصدار غودوت: %s. من ÙØ¶Ù„Ùƒ أعد "
+"تنصيب قالب بناء الأندرويد من قائمة 'المشروع'."
#: platform/android/export/export_plugin.cpp
+#, fuzzy
msgid ""
-"Unable to overwrite res://android/build/res/*.xml files with project name"
+"Unable to overwrite res://android/build/res/*.xml files with project name."
msgstr ""
"تعذرت كتابة overwrite Ù…Ù„ÙØ§Øª res://android/build/res/*.xml مع اسم المشروع"
#: platform/android/export/export_plugin.cpp
-msgid "Could not export project files to gradle project\n"
-msgstr "لم يتمكن من تصدير Ù…Ù„ÙØ§Øª المشروع إلى مشروع gradle\n"
+msgid "Could not export project files to gradle project."
+msgstr "لم يتمكن من تصدير Ù…Ù„ÙØ§Øª المشروع إلى مشروع gradle."
#: platform/android/export/export_plugin.cpp
msgid "Could not write expansion package file!"
@@ -19320,15 +19308,15 @@ msgstr "بناء مشروع الأندرويد (gradle)"
#: platform/android/export/export_plugin.cpp
msgid ""
-"Building of Android project failed, check output for the error.\n"
+"Building of Android project failed, check output for the error. "
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
-"أخÙÙ‚ بناء مشروع الأندرويد، تÙقد Ø§Ù„Ù…ÙØ®Ø±Ø¬Ø§Øª للإطلاع على الخطأ.\n"
-"بصورة بديلة يمكنك زيارة docs.godotengine.org لأجل مستندات البناء للأندرويد."
+"أخÙÙ‚ بناء مشروع الأندرويد، تÙقد Ø§Ù„Ù…ÙØ®Ø±Ø¬Ø§Øª للإطلاع على الخطأ. بصورة بديلة "
+"يمكنك زيارة docs.godotengine.org لأجل مستندات البناء للأندرويد."
#: platform/android/export/export_plugin.cpp
msgid "Moving output"
-msgstr "نقل المخرجات"
+msgstr "جاري تحريك المخرجات"
#: platform/android/export/export_plugin.cpp
msgid ""
@@ -19338,7 +19326,7 @@ msgstr "تعذر نسخ وإعادة تسمية المل٠المصدر، تÙÙ‚
#: platform/android/export/export_plugin.cpp
#, fuzzy
-msgid "Package not found: %s"
+msgid "Package not found: \"%s\"."
msgstr "لم يتم إيجاد الرسم المتحرك: '%s'"
#: platform/android/export/export_plugin.cpp
@@ -19347,23 +19335,18 @@ msgid "Creating APK..."
msgstr "إنشاء المحيط..."
#: platform/android/export/export_plugin.cpp
-msgid ""
-"Could not find template APK to export:\n"
-"%s"
-msgstr ""
-"لم يتم إيجاد قالب APK للتصدير:\n"
-"%s"
+msgid "Could not find template APK to export: \"%s\"."
+msgstr "لم يتم إيجاد قالب APK للتصدير: \"%s\"."
#: platform/android/export/export_plugin.cpp
msgid ""
-"Missing libraries in the export template for the selected architectures: "
-"%s.\n"
+"Missing libraries in the export template for the selected architectures: %s. "
"Please build a template with all required libraries, or uncheck the missing "
"architectures in the export preset."
msgstr ""
-"هنالك مكاتب قوالب تصدير ناقصة بالنسبة للمعمارية المختارة: %s.\n"
-"ابن قالب التصدير متضمناً جميع المكتبات الضرورية، أو أزال اختيار المعماريات "
-"الناقصة من خيارات التصدير المعدّة مسبقاً."
+"هنالك مكاتب قوالب تصدير ناقصة بالنسبة للمعمارية المختارة: %s.ابن قالب "
+"التصدير متضمناً جميع المكتبات الضرورية، أو أزال اختيار المعماريات الناقصة من "
+"خيارات التصدير المعدّة مسبقاً."
#: platform/android/export/export_plugin.cpp
#, fuzzy
@@ -19371,7 +19354,8 @@ msgid "Adding files..."
msgstr "Ø¥Ø¶Ø§ÙØ© %s..."
#: platform/android/export/export_plugin.cpp
-msgid "Could not export project files"
+#, fuzzy
+msgid "Could not export project files."
msgstr "لم نتمكن من تصدير Ù…Ù„ÙØ§Øª المشروع"
#: platform/android/export/export_plugin.cpp
@@ -19507,9 +19491,8 @@ msgid "Capabilities"
msgstr "إلصق الخاصيات"
#: platform/iphone/export/export.cpp
-#, fuzzy
msgid "Access Wi-Fi"
-msgstr "تم بشكل ناجح!"
+msgstr "الوصول للواي-ÙØ§ÙŠ"
#: platform/iphone/export/export.cpp
#, fuzzy
@@ -19614,6 +19597,17 @@ msgstr "قص العÙقد"
msgid "Custom BG Color"
msgstr "قص العÙقد"
+#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Prepare Templates"
+msgstr "إدارة القوالب"
+
+#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Export template not found."
+msgstr "قالب الإصدار المخصص ليس موجود."
+
#: platform/iphone/export/export.cpp
msgid "App Store Team ID not specified - cannot configure the project."
msgstr ""
@@ -19637,23 +19631,35 @@ msgid "Run exported HTML in the system's default browser."
msgstr "شغل مل٠HTML Ø§Ù„Ù…ÙØµØ¯Ø± ÙÙŠ Ø§Ù„Ù…ØªØµÙØ­ Ø§Ù„Ø¥ÙØªØ±Ø§Ø¶ÙŠ Ù„Ù„Ù†Ø¸Ø§Ù…."
#: platform/javascript/export/export.cpp
-msgid "Could not open template for export:"
+#, fuzzy
+msgid "Could not open template for export: \"%s\"."
msgstr "لا يمكن ÙØªØ­ القالب من أجل التصدير:"
#: platform/javascript/export/export.cpp
-msgid "Invalid export template:"
+#, fuzzy
+msgid "Invalid export template: \"%s\"."
msgstr "إدارة قوالب التصدير:"
#: platform/javascript/export/export.cpp
-msgid "Could not write file:"
+#, fuzzy
+msgid "Could not write file: \"%s\"."
msgstr "لا يمكن كتابة الملÙ:"
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Icon Creation"
+msgstr "تحديد الهامش"
+
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not read file:"
+msgid "Could not read file: \"%s\"."
msgstr "لا يمكن كتابة الملÙ:"
#: platform/javascript/export/export.cpp
+msgid "PWA"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
#, fuzzy
msgid "Variant"
msgstr "Ø§Ù„ØªØ¨Ø§Ø¹ÙØ¯Ø§Øª:"
@@ -19729,15 +19735,17 @@ msgstr ""
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not read HTML shell:"
+msgid "Could not read HTML shell: \"%s\"."
msgstr "لا يمكن قراءة مل٠HTML مخصص:"
#: platform/javascript/export/export.cpp
-msgid "Could not create HTTP server directory:"
+#, fuzzy
+msgid "Could not create HTTP server directory: %s."
msgstr "لا يمكن إنشاء مجلد خادم ال HTTP:"
#: platform/javascript/export/export.cpp
-msgid "Error starting HTTP server:"
+#, fuzzy
+msgid "Error starting HTTP server: %d."
msgstr "خطأ ÙÙŠ بدء تشغيل خادم HTTP:"
#: platform/javascript/export/export.cpp
@@ -20038,9 +20046,27 @@ msgid "Apple Team ID"
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open icon file \"%s\"."
+msgstr "لم نتمكن من تصدير Ù…Ù„ÙØ§Øª المشروع"
+
+#: platform/osx/export/export.cpp
+msgid "Could not start xcrun executable."
+msgstr "تعذر بدء تشغيل xcrun."
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization failed."
+msgstr "توطين"
+
+#: platform/osx/export/export.cpp
+msgid "Notarization request UUID: \"%s\""
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid ""
-"Note: The notarization process generally takes less than an hour. When the "
-"process is completed, you'll receive an email."
+"The notarization process generally takes less than an hour. When the process "
+"is completed, you'll receive an email."
msgstr ""
#: platform/osx/export/export.cpp
@@ -20056,20 +20082,75 @@ msgid ""
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign failed with error \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign require regex module."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Could not start codesign executable, make sure Xcode command line tools are "
+"installed."
+msgstr ""
+
+#: platform/osx/export/export.cpp platform/windows/export/export.cpp
#, fuzzy
msgid "No identity found."
msgstr "لم توجد ايقونات."
#: platform/osx/export/export.cpp
#, fuzzy
+msgid "Cannot sign file %s."
+msgstr "خطأ ÙÙŠ تحميل الملÙ: %s"
+
+#: platform/osx/export/export.cpp
+msgid "Relative symlinks are not supported, exported \"%s\" might be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "DMG Creation"
+msgstr "الاتجاهات"
+
+#: platform/osx/export/export.cpp
+msgid "Could not start hdiutil executable."
+msgstr "تعذر بدء المل٠التنÙيذي hdiutil."
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed - file exists."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
msgid "Creating app bundle"
msgstr "ينشئ الصورة المصغرة"
#: platform/osx/export/export.cpp
-msgid "Could not find template app to export:"
+#, fuzzy
+msgid "Could not find template app to export: \"%s\"."
msgstr "لم يتم إيجاد قالب التطبيق (Template app) للتصدير:"
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid export format."
+msgstr "إدارة قوالب التصدير:"
+
+#: platform/osx/export/export.cpp
msgid ""
"Relative symlinks are not supported on this OS, the exported project might "
"be broken!"
@@ -20077,7 +20158,7 @@ msgstr ""
#: platform/osx/export/export.cpp
msgid ""
-"Requested template binary '%s' not found. It might be missing from your "
+"Requested template binary \"%s\" not found. It might be missing from your "
"template archive."
msgstr ""
@@ -20119,6 +20200,15 @@ msgstr ""
#: platform/osx/export/export.cpp
#, fuzzy
+msgid "ZIP Creation"
+msgstr "مشروع"
+
+#: platform/osx/export/export.cpp
+msgid "Could not open file to read from path \"%s\"."
+msgstr "تعذر ÙØªØ­ المل٠للقراءة من المسار \"%s\"."
+
+#: platform/osx/export/export.cpp
+#, fuzzy
msgid "Invalid bundle identifier:"
msgstr "Ù…ÙØ­Ø¯Ø¯ غير صالح:"
@@ -20434,6 +20524,11 @@ msgid "Debug Algorithm"
msgstr "Ù…Ùنقح الأخطاء"
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to rename temporary file \"%s\"."
+msgstr "لا يمكن حذ٠مل٠مؤقت:"
+
+#: platform/windows/export/export.cpp
msgid "Identity Type"
msgstr ""
@@ -20481,6 +20576,70 @@ msgid "Trademarks"
msgstr ""
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Resources Modification"
+msgstr "دوران عشوائي:"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find rcedit executable at \"%s\"."
+msgstr "لا يمكن العثور على Ù…ÙØªØ§Ø­ المتجر، لا يمكن التصدير."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find wine executable at \"%s\"."
+msgstr "لا يمكن العثور على Ù…ÙØªØ§Ø­ المتجر، لا يمكن التصدير."
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start rcedit executable, configure rcedit path in the Editor "
+"Settings (Export > Windows > Rcedit)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"rcedit failed to modify executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find signtool executable at \"%s\"."
+msgstr "لا يمكن العثور على Ù…ÙØªØ§Ø­ المتجر، لا يمكن التصدير."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find osslsigncode executable at \"%s\"."
+msgstr "لا يمكن العثور على Ù…ÙØªØ§Ø­ المتجر، لا يمكن التصدير."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid identity type."
+msgstr "Ù…ÙØ­Ø¯Ø¯ غير صالح:"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid timestamp server."
+msgstr "اسم غير صالح."
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start signtool executable, configure signtool path in the Editor "
+"Settings (Export > Windows > Signtool)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Signtool failed to sign executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to remove temporary file \"%s\"."
+msgstr "لا يمكن حذ٠مل٠مؤقت:"
+
+#: platform/windows/export/export.cpp
msgid ""
"The rcedit tool must be configured in the Editor Settings (Export > Windows "
"> Rcedit) to change the icon or app information data."
@@ -20499,6 +20658,23 @@ msgid "Invalid product version:"
msgstr "Ù…ÙØ¹Ø±Ù GUID (Ø§Ù„Ù…ÙØ¹Ø±Ù‘Ù Ø§Ù„ÙØ±ÙŠØ¯ العالمي) للمنتج غير صالح:"
#: platform/windows/export/export.cpp
+msgid "Windows executables cannot be >= 4 GiB."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+#, fuzzy
+msgid "Failed to open executable file \"%s\"."
+msgstr "صيغة غير صالحة."
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable file header corrupted."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable \"pck\" section not found."
+msgstr ""
+
+#: platform/windows/export/export.cpp
#, fuzzy
msgid "Windows"
msgstr "Ù†Ø§ÙØ°Ø© جديدة"
@@ -20515,6 +20691,10 @@ msgstr ""
msgid "Wine"
msgstr ""
+#: platform/x11/export/export.cpp
+msgid "32-bit executables cannot have embedded data >= 4 GiB."
+msgstr ""
+
#: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp
#: scene/resources/texture.cpp
#, fuzzy
@@ -20642,7 +20822,8 @@ msgstr ""
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/3d/light.cpp scene/3d/reflection_probe.cpp
-#: scene/3d/visual_instance.cpp scene/resources/material.cpp
+#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp
+#: scene/resources/material.cpp
#, fuzzy
msgid "Max Distance"
msgstr "اختر Ø§Ù„Ù…Ø³Ø§ÙØ©:"
@@ -21037,9 +21218,8 @@ msgstr "قناع الانبعاث"
#: scene/2d/cpu_particles_2d.cpp scene/3d/cpu_particles.cpp
#: scene/resources/particles_material.cpp
-#, fuzzy
msgid "Sphere Radius"
-msgstr "مصدر الانبعاث: "
+msgstr "قطر الجسم الكروى"
#: scene/2d/cpu_particles_2d.cpp
#, fuzzy
@@ -21107,9 +21287,8 @@ msgstr "خطي"
#: scene/2d/cpu_particles_2d.cpp scene/3d/cpu_particles.cpp
#: scene/resources/particles_material.cpp
-#, fuzzy
msgid "Accel"
-msgstr "تم بشكل ناجح!"
+msgstr "التسارع"
#: scene/2d/cpu_particles_2d.cpp scene/3d/cpu_particles.cpp
#: scene/resources/particles_material.cpp
@@ -21467,6 +21646,18 @@ msgstr ""
msgid "Edge Connection Margin"
msgstr "تعديل الإتصال:"
+#: scene/2d/navigation_2d.cpp
+msgid ""
+"'Navigation2D' node and 'Navigation2D.get_simple_path()' are deprecated and "
+"will be removed in a future version. Use 'Navigation2DServer.map_get_path()' "
+"instead."
+msgstr ""
+
+#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
+#, fuzzy
+msgid "Path Desired Distance"
+msgstr "اختر Ø§Ù„Ù…Ø³Ø§ÙØ©:"
+
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
msgid "Target Desired Distance"
msgstr ""
@@ -21524,17 +21715,19 @@ msgstr ""
"العقدة. ÙŠÙØ±Ø¬Ù‰ تعيين خاصية أو رسم مضلع."
#: scene/2d/navigation_polygon.cpp
-msgid ""
-"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
-"node. It only provides navigation data."
-msgstr ""
-"يجب أن يكون نموذج-المضلع-المتنقل (NavigationPolygonInstance) تابعًا أو Ø­Ùيدًا "
-"لعقدة التنقل-ثنائي-الأبعاد (Navigation2D). انه Ùقط ÙŠÙˆÙØ± بيانات التنقل."
-
-#: scene/2d/navigation_polygon.cpp
msgid "Navpoly"
msgstr ""
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Enter Cost"
+msgstr "ÙÙŠ أسÙÙ„ المنتصÙ"
+
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Travel Cost"
+msgstr "Ø§Ù„Ø³ÙØ±"
+
#: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp
#: scene/main/canvas_layer.cpp
#, fuzzy
@@ -21809,9 +22002,8 @@ msgid "Safe Margin"
msgstr "تحديد الهامش"
#: scene/2d/physics_body_2d.cpp scene/3d/physics_body.cpp
-#, fuzzy
msgid "Sync To Physics"
-msgstr " (Ùيزيائي)"
+msgstr "تزامن مع الÙيزياء"
#: scene/2d/physics_body_2d.cpp scene/3d/physics_body.cpp
#, fuzzy
@@ -22764,6 +22956,13 @@ msgstr ""
msgid "Transform Normals"
msgstr "أجهض التحول."
+#: scene/3d/navigation.cpp
+msgid ""
+"'Navigation' node and 'Navigation.get_simple_path()' are deprecated and will "
+"be removed in a future version. Use 'NavigationServer.map_get_path()' "
+"instead."
+msgstr ""
+
#: scene/3d/navigation.cpp scene/resources/curve.cpp
#, fuzzy
msgid "Up Vector"
@@ -22788,14 +22987,6 @@ msgid ""
"The NavigationAgent can be used only under a Spatial inheriting parent node."
msgstr ""
-#: scene/3d/navigation_mesh_instance.cpp
-msgid ""
-"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
-"It only provides navigation data."
-msgstr ""
-"يجب أن يكون نموذج-مجسم-التنقل (NavigationMeshInstance) تابعًا أو Ø­Ùيدًا لعقدة "
-"التنقل (Navigation node). انه ÙŠÙˆÙØ± Ùقط بيانات التنقل."
-
#: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp
#, fuzzy
msgid "NavMesh"
@@ -23324,9 +23515,8 @@ msgid "A RoomGroup should not be a child or grandchild of a Portal."
msgstr ""
#: scene/3d/portal.cpp
-#, fuzzy
msgid "Portal Active"
-msgstr " [البوابات Ù…ÙØ¹Ù„Ø©]"
+msgstr "البوابة نشطة"
#: scene/3d/portal.cpp scene/resources/occluder_shape_polygon.cpp
msgid "Two Way"
@@ -24342,9 +24532,8 @@ msgid "Pass On Modal Close Click"
msgstr ""
#: scene/gui/control.cpp
-#, fuzzy
msgid "Size Flags"
-msgstr "الحجم: "
+msgstr "أعلام الحجم"
#: scene/gui/control.cpp
#, fuzzy
@@ -24707,9 +24896,8 @@ msgid "Max Value"
msgstr "القيمة"
#: scene/gui/range.cpp
-#, fuzzy
msgid "Page"
-msgstr "Ø§Ù„ØµÙØ­Ø©: "
+msgstr "ØµÙØ­Ø©"
#: scene/gui/range.cpp
#, fuzzy
@@ -25127,9 +25315,8 @@ msgid "Download File"
msgstr "تنزيل"
#: scene/main/http_request.cpp
-#, fuzzy
msgid "Download Chunk Size"
-msgstr "جاري التنزيل"
+msgstr "حجم جزء التنزيل"
#: scene/main/http_request.cpp
msgid "Body Size Limit"
@@ -25200,9 +25387,8 @@ msgid "Custom Multiplayer"
msgstr "تحديد التكرار:"
#: scene/main/node.cpp
-#, fuzzy
msgid "Process Priority"
-msgstr "تمكين الأولوية"
+msgstr "أولوية العملية"
#: scene/main/scene_tree.cpp scene/main/timer.cpp
#, fuzzy
@@ -25270,9 +25456,8 @@ msgid "Draw 2D Outlines"
msgstr "أنشئ الحد"
#: scene/main/scene_tree.cpp servers/visual_server.cpp
-#, fuzzy
msgid "Reflections"
-msgstr "الاتجاهات"
+msgstr "الانعكاسات"
#: scene/main/scene_tree.cpp
#, fuzzy
@@ -25436,84 +25621,82 @@ msgid "Enable 2D"
msgstr "ØªÙØ¹ÙŠÙ„"
#: scene/main/viewport.cpp
-#, fuzzy
msgid "Enable 3D"
-msgstr "ØªÙØ¹ÙŠÙ„"
+msgstr "ØªÙØ¹ÙŠÙ„ 3D"
#: scene/main/viewport.cpp
-#, fuzzy
msgid "Object Picking"
-msgstr "ØªÙØ¹ÙŠÙ„ تقشير البصل"
+msgstr "اختيار الكائن"
#: scene/main/viewport.cpp
-#, fuzzy
msgid "Disable Input"
-msgstr "عنصر معطّل"
+msgstr "تعطيل الإدخال"
#: scene/main/viewport.cpp servers/visual_server.cpp
-#, fuzzy
msgid "Shadow Atlas"
-msgstr "أطلس جديد"
+msgstr "أطلس الظل"
#: scene/main/viewport.cpp
msgid "Quad 0"
-msgstr ""
+msgstr "رباعي 0"
#: scene/main/viewport.cpp
msgid "Quad 1"
-msgstr ""
+msgstr "رباعية 1"
#: scene/main/viewport.cpp
msgid "Quad 2"
-msgstr ""
+msgstr "رباعية 2"
#: scene/main/viewport.cpp
msgid "Quad 3"
-msgstr ""
+msgstr "رباعية 3"
#: scene/main/viewport.cpp
-#, fuzzy
msgid "Canvas Transform"
-msgstr "محو التَحَوّل"
+msgstr "تحويل اللوحة"
#: scene/main/viewport.cpp
-#, fuzzy
msgid "Global Canvas Transform"
-msgstr "Ø§Ù„Ø§Ø­ØªÙØ§Ø¸ بالتحوّل الشمولي Global"
+msgstr "تحويل اللوحة الشامل (global)"
#: scene/main/viewport.cpp
msgid "Tooltip Delay (sec)"
-msgstr ""
+msgstr "تأخير تلميح الأدوات (ثانية)"
#: scene/register_scene_types.cpp
-#, fuzzy
msgid "Swap OK Cancel"
-msgstr "إلغاء"
+msgstr "مبادلة مواÙÙ‚ إلغاء"
#: scene/register_scene_types.cpp
-#, fuzzy
msgid "Layer Names"
-msgstr "الأسم"
+msgstr "أسماء الطبقات"
#: scene/register_scene_types.cpp
-#, fuzzy
msgid "2D Render"
-msgstr "Ù…ÙØ­Ø±Ùƒ الإخراج البصري:"
+msgstr "إنشاء صورة 2D"
#: scene/register_scene_types.cpp
-#, fuzzy
msgid "3D Render"
-msgstr "Ù…ÙØ­Ø±Ùƒ الإخراج البصري:"
+msgstr "إنشاء صورة 3D"
#: scene/register_scene_types.cpp
-#, fuzzy
msgid "2D Physics"
-msgstr " (Ùيزيائي)"
+msgstr "Ùيزياء 2D"
#: scene/register_scene_types.cpp
-#, fuzzy
msgid "3D Physics"
-msgstr " (Ùيزيائي)"
+msgstr "Ùيزياء 3D"
+
+#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "2D Navigation"
+msgstr "تنقل"
+
+#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "3D Navigation"
+msgstr "تنقل"
#: scene/register_scene_types.cpp
msgid "Use hiDPI"
@@ -26596,9 +26779,8 @@ msgid "Distance"
msgstr "اختر Ø§Ù„Ù…Ø³Ø§ÙØ©:"
#: scene/resources/environment.cpp
-#, fuzzy
msgid "Transition"
-msgstr "الانتقال: "
+msgstr "الانتقال"
#: scene/resources/environment.cpp
msgid "DOF Near Blur"
@@ -26621,7 +26803,7 @@ msgstr ""
#: scene/resources/environment.cpp
#: servers/audio/effects/audio_effect_chorus.cpp
msgid "2"
-msgstr ""
+msgstr "2"
#: scene/resources/environment.cpp
#: servers/audio/effects/audio_effect_chorus.cpp
@@ -26934,16 +27116,15 @@ msgid "Subsurf Scatter"
msgstr ""
#: scene/resources/material.cpp
-#, fuzzy
msgid "Transmission"
-msgstr "الانتقال: "
+msgstr "الإنتقال"
#: scene/resources/material.cpp
#, fuzzy
msgid "Refraction"
msgstr "Ø§Ù„ØªØ¨Ø§Ø¹ÙØ¯Ø§Øª:"
-#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp
+#: scene/resources/material.cpp
msgid "Detail"
msgstr ""
@@ -27028,7 +27209,12 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
-msgid "Sample Partition Type"
+msgid "Sampling"
+msgstr "تحجيم:"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Partition Type"
msgstr "حدد نوع المتغير"
#: scene/resources/navigation_mesh.cpp
@@ -27046,10 +27232,15 @@ msgid "Source Group Name"
msgstr "مصدر"
#: scene/resources/navigation_mesh.cpp
-msgid "Agent"
+msgid "Cells"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Agents"
+msgstr "معاملات المشهد الرئيس:"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Max Climb"
msgstr ""
@@ -27059,11 +27250,16 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
+msgid "Regions"
+msgstr "الإقليم"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
msgid "Merge Size"
msgstr "دمج من المشهد"
#: scene/resources/navigation_mesh.cpp
-msgid "Edge"
+msgid "Edges"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -27077,6 +27273,11 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
+msgid "Details"
+msgstr "أظهر Ø§Ù„Ø¥ÙØªØ±Ø§Ø¶ÙŠ"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
msgid "Sample Distance"
msgstr "اختر Ø§Ù„Ù…Ø³Ø§ÙØ©:"
@@ -27094,9 +27295,19 @@ msgid "Ledge Spans"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Filter Walkable Low Height Spans"
+msgid "Walkable Low Height Spans"
msgstr ""
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB"
+msgstr "توليد AABB"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB Offset"
+msgstr "Ø§Ù„Ù…ÙØ¹Ø§Ø¯Ù„:"
+
#: scene/resources/occluder_shape.cpp
msgid "Spheres"
msgstr ""
@@ -27143,9 +27354,8 @@ msgid "Point Texture"
msgstr "نقاط الانبعاث:"
#: scene/resources/particles_material.cpp
-#, fuzzy
msgid "Normal Texture"
-msgstr "مصدر الانبعاث: "
+msgstr "نقش طبيعي"
#: scene/resources/particles_material.cpp
#, fuzzy
@@ -27349,9 +27559,8 @@ msgid "Base Texture"
msgstr "إزالة النقش"
#: scene/resources/texture.cpp
-#, fuzzy
msgid "Image Size"
-msgstr "Ø§Ù„ØµÙØ­Ø©: "
+msgstr "حجم الصورة"
#: scene/resources/texture.cpp
#, fuzzy
@@ -27509,6 +27718,11 @@ msgid "Scenario"
msgstr "مشهد"
#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Navigation Map"
+msgstr "تنقل"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
msgid "Direct Space State"
msgstr ""
@@ -27526,6 +27740,26 @@ msgstr "الخط اليساري"
msgid "Default Angular Damp"
msgstr ""
+#: scene/resources/world.cpp
+#, fuzzy
+msgid "Default Map Up"
+msgstr "Ø§ÙØªØ±Ø§Ø¶ÙŠ"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Size"
+msgstr "تحديث Ø§Ù„Ù…ÙØ¹Ø§ÙŠÙ†Ø©"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Height"
+msgstr "أختبار"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Edge Connection Margin"
+msgstr "تعديل الإتصال:"
+
#: scene/resources/world_2d.cpp
msgid "Canvas"
msgstr ""
diff --git a/editor/translations/az.po b/editor/translations/az.po
index f6269e61aa..f8d5d96a7e 100644
--- a/editor/translations/az.po
+++ b/editor/translations/az.po
@@ -210,9 +210,10 @@ msgid "Data"
msgstr ""
#: core/io/file_access_network.cpp core/register_core_types.cpp
-#: editor/editor_settings.cpp main/main.cpp
+#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
#: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h
+#: scene/gui/file_dialog.cpp
msgid "Network"
msgstr ""
@@ -372,6 +373,15 @@ msgstr ""
msgid "Max Size (KB)"
msgstr ""
+#: core/os/input.cpp
+#, fuzzy
+msgid "Mouse Mode"
+msgstr "Metod çağırma izi"
+
+#: core/os/input.cpp
+msgid "Use Accumulated Input"
+msgstr ""
+
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: servers/audio_server.cpp
msgid "Device"
@@ -556,7 +566,8 @@ msgstr ""
#: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
-#: main/main.cpp
+#: main/main.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp
msgid "Run"
msgstr ""
@@ -639,24 +650,23 @@ msgid "Main Run Args"
msgstr ""
#: core/project_settings.cpp
-msgid "Search In File Extensions"
+msgid "Scene Naming"
msgstr ""
#: core/project_settings.cpp
-msgid "Script Templates Search Path"
+msgid "Search In File Extensions"
msgstr ""
-#: core/project_settings.cpp editor/editor_node.cpp
-#: editor/plugins/version_control_editor_plugin.cpp
-msgid "Version Control"
+#: core/project_settings.cpp
+msgid "Script Templates Search Path"
msgstr ""
#: core/project_settings.cpp
-msgid "Autoload On Startup"
+msgid "Version Control Autoload On Startup"
msgstr ""
#: core/project_settings.cpp
-msgid "Plugin Name"
+msgid "Version Control Plugin Name"
msgstr ""
#: core/project_settings.cpp scene/2d/collision_object_2d.cpp
@@ -764,7 +774,8 @@ msgid "Quality"
msgstr ""
#: core/project_settings.cpp scene/gui/file_dialog.cpp
-#: scene/main/scene_tree.cpp servers/visual_server.cpp
+#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp
+#: servers/visual_server.cpp
#, fuzzy
msgid "Filters"
msgstr "Siqnalları filtirlə"
@@ -2219,8 +2230,8 @@ msgid "Open"
msgstr "Aç"
#: editor/dependency_editor.cpp
-msgid "Owners Of:"
-msgstr "Bunların Sahibləri:"
+msgid "Owners of: %s (Total: %d)"
+msgstr ""
#: editor/dependency_editor.cpp
#, fuzzy
@@ -2529,7 +2540,7 @@ msgid "Bus Options"
msgstr ""
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/scene_tree_dock.cpp
+#: editor/project_export.cpp editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr ""
@@ -2785,6 +2796,22 @@ msgid "Choose"
msgstr ""
#: editor/editor_export.cpp
+msgid "Project export for platform:"
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Completed with errors."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Completed successfully."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Failed."
+msgstr ""
+
+#: editor/editor_export.cpp
msgid "Storing File:"
msgstr ""
@@ -2797,6 +2824,26 @@ msgid "Packing"
msgstr ""
#: editor/editor_export.cpp
+msgid "Save PCK"
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Cannot create file \"%s\"."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Failed to export project files."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Can't open file to read from path \"%s\"."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Save ZIP"
+msgstr ""
+
+#: editor/editor_export.cpp
msgid ""
"Target platform requires 'ETC' texture compression for GLES2. Enable 'Import "
"Etc' in Project Settings."
@@ -2899,8 +2946,25 @@ msgstr ""
msgid "Custom release template not found."
msgstr ""
+#: editor/editor_export.cpp
+msgid "Prepare Template"
+msgstr ""
+
+#: editor/editor_export.cpp platform/osx/export/export.cpp
+msgid "The given export path doesn't exist."
+msgstr ""
+
#: editor/editor_export.cpp platform/javascript/export/export.cpp
-msgid "Template file not found:"
+msgid "Template file not found: \"%s\"."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Failed to copy export template."
+msgstr ""
+
+#: editor/editor_export.cpp platform/windows/export/export.cpp
+#: platform/x11/export/export.cpp
+msgid "PCK Embedding"
msgstr ""
#: editor/editor_export.cpp
@@ -3072,9 +3136,9 @@ msgid "Import"
msgstr ""
#: editor/editor_feature_profile.cpp editor/project_export.cpp
-#: platform/android/export/export.cpp platform/javascript/export/export.cpp
-#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
-#: platform/windows/export/export.cpp
+#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#: platform/uwp/export/export.cpp platform/windows/export/export.cpp
msgid "Export"
msgstr ""
@@ -4157,14 +4221,6 @@ msgid ""
"Unable to write to file '%s', file in use, locked or lacking permissions."
msgstr ""
-#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
-msgid "Scene"
-msgstr ""
-
-#: editor/editor_node.cpp
-msgid "Scene Naming"
-msgstr ""
-
#: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp
#: servers/arvr/arvr_interface.cpp
msgid "Interface"
@@ -4281,6 +4337,10 @@ msgid "Default Color Picker Mode"
msgstr ""
#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
+msgid "Version Control"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
msgid "Username"
msgstr ""
@@ -4308,6 +4368,10 @@ msgstr ""
msgid "Add a new scene."
msgstr ""
+#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
+msgid "Scene"
+msgstr ""
+
#: editor/editor_node.cpp
msgid "Go to previously opened scene."
msgstr ""
@@ -5042,6 +5106,11 @@ msgid ""
"as runnable."
msgstr ""
+#: editor/editor_run_native.cpp
+#, fuzzy
+msgid "Project Run"
+msgstr "Layihə Qurucuları"
+
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
msgstr ""
@@ -5300,7 +5369,9 @@ msgid "Draw Spaces"
msgstr ""
#: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp
-#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp
+#: scene/main/scene_tree.cpp scene/resources/world.cpp
+#: scene/resources/world_2d.cpp
msgid "Navigation"
msgstr ""
@@ -6709,7 +6780,7 @@ msgstr ""
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp
-#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp
+#: scene/gui/control.cpp
#, fuzzy
msgid "Filter"
msgstr "Siqnalları filtirlə"
@@ -6987,6 +7058,18 @@ msgid "Saving..."
msgstr ""
#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used as a normal map in 3D. Enabling red-green "
+"texture compression to reduce memory usage (blue channel is discarded)."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap "
+"generation and VRAM texture compression."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
msgid "2D, Detect 3D"
msgstr ""
@@ -7648,11 +7731,20 @@ msgid "New Anim"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+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 "Rename Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Delete Animation?"
msgstr ""
@@ -7670,11 +7762,6 @@ 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 "Duplicate Animation"
msgstr ""
@@ -7817,10 +7904,6 @@ msgid "Pin AnimationPlayer"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Create New Animation"
-msgstr ""
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Name:"
msgstr ""
@@ -9882,6 +9965,7 @@ msgid "Points"
msgstr ""
#: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp
+#: scene/resources/navigation_mesh.cpp
msgid "Polygons"
msgstr ""
@@ -11241,8 +11325,9 @@ msgid "Invalid geometry, can't replace by mesh."
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
-msgid "Convert to Mesh2D"
-msgstr ""
+#, fuzzy
+msgid "Convert to MeshInstance2D"
+msgstr "'%s' ilÉ™ '%s' qoÅŸ"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Invalid geometry, can't create polygon."
@@ -12210,8 +12295,7 @@ msgid "Select the previous shape, subtile, or Tile."
msgstr ""
#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp
-#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp
-#: scene/resources/texture.cpp
+#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp
msgid "Region"
msgstr ""
@@ -13647,31 +13731,10 @@ 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 "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 "Export Path"
msgstr ""
@@ -13806,6 +13869,11 @@ msgid "Export templates for this platform are missing:"
msgstr ""
#: editor/project_export.cpp
+#, fuzzy
+msgid "Project Export"
+msgstr "Layihə Qurucuları"
+
+#: editor/project_export.cpp
msgid "Manage Export Templates"
msgstr ""
@@ -16069,7 +16137,7 @@ msgstr ""
#: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp
#: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp
-#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp
+#: scene/3d/collision_polygon.cpp
msgid "Polygon"
msgstr ""
@@ -16638,7 +16706,6 @@ msgid "Use In Baked Light"
msgstr ""
#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
-#: scene/resources/navigation_mesh.cpp
msgid "Cell"
msgstr ""
@@ -16664,6 +16731,19 @@ msgstr ""
msgid "Mask"
msgstr ""
+#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
+#, fuzzy
+msgid "Bake Navigation"
+msgstr "Hamısını Seç/Seçmə"
+
+#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp
+#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp
+#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp
+#: scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Navigation Layers"
+msgstr "%s növünü dəyişdirin"
+
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Plane"
msgstr ""
@@ -18123,10 +18203,6 @@ 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."
@@ -18230,12 +18306,15 @@ msgstr ""
msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version."
msgstr ""
+#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp
+#: platform/windows/export/export.cpp
+msgid "Code Signing"
+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."
+"'apksigner' could not be found. Please check that the command is available "
+"in the Android SDK build-tools directory. The resulting %s is unsigned."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18251,6 +18330,10 @@ msgid "Could not find keystore, unable to export."
msgstr ""
#: platform/android/export/export_plugin.cpp
+msgid "Could not start apksigner executable."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
@@ -18279,7 +18362,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Unsupported export format!\n"
+msgid "Unsupported export format!"
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18290,19 +18373,17 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Android build version mismatch:\n"
-" Template installed: %s\n"
-" Godot Version: %s\n"
+"Android build version mismatch: Template installed: %s, Godot version: %s. "
"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"
+"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"
+msgid "Could not export project files to gradle project."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18315,7 +18396,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Building of Android project failed, check output for the error.\n"
+"Building of Android project failed, check output for the error. "
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
@@ -18330,7 +18411,7 @@ msgid ""
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Package not found: %s"
+msgid "Package not found: \"%s\"."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18338,15 +18419,12 @@ msgid "Creating APK..."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid ""
-"Could not find template APK to export:\n"
-"%s"
+msgid "Could not find template APK to export: \"%s\"."
msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Missing libraries in the export template for the selected architectures: "
-"%s.\n"
+"Missing libraries in the export template for the selected architectures: %s. "
"Please build a template with all required libraries, or uncheck the missing "
"architectures in the export preset."
msgstr ""
@@ -18356,7 +18434,7 @@ msgid "Adding files..."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Could not export project files"
+msgid "Could not export project files."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18590,6 +18668,15 @@ msgstr "Funksiyalar:"
msgid "Custom BG Color"
msgstr "Funksiyalar:"
+#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
+#: platform/osx/export/export.cpp
+msgid "Prepare Templates"
+msgstr ""
+
+#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
+msgid "Export template not found."
+msgstr ""
+
#: platform/iphone/export/export.cpp
msgid "App Store Team ID not specified - cannot configure the project."
msgstr ""
@@ -18611,19 +18698,29 @@ msgid "Run exported HTML in the system's default browser."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not open template for export:"
+msgid "Could not open template for export: \"%s\"."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Invalid export template:"
+#, fuzzy
+msgid "Invalid export template: \"%s\"."
+msgstr "%s baza növü üçün %s növünün səhv indeksi"
+
+#: platform/javascript/export/export.cpp
+msgid "Could not write file: \"%s\"."
msgstr ""
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Icon Creation"
+msgstr "ÆlaqÉ™ni redaktÉ™ edin:"
+
#: platform/javascript/export/export.cpp
-msgid "Could not write file:"
+msgid "Could not read file: \"%s\"."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not read file:"
+msgid "PWA"
msgstr ""
#: platform/javascript/export/export.cpp
@@ -18698,15 +18795,15 @@ msgid "Icon 512 X 512"
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not read HTML shell:"
+msgid "Could not read HTML shell: \"%s\"."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not create HTTP server directory:"
+msgid "Could not create HTTP server directory: %s."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Error starting HTTP server:"
+msgid "Error starting HTTP server: %d."
msgstr ""
#: platform/javascript/export/export.cpp
@@ -18982,9 +19079,26 @@ msgid "Apple Team ID"
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Could not open icon file \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Could not start xcrun executable."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization failed."
+msgstr "Animasiyanı Təmizləmə"
+
+#: platform/osx/export/export.cpp
+msgid "Notarization request UUID: \"%s\""
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid ""
-"Note: The notarization process generally takes less than an hour. When the "
-"process is completed, you'll receive an email."
+"The notarization process generally takes less than an hour. When the process "
+"is completed, you'll receive an email."
msgstr ""
#: platform/osx/export/export.cpp
@@ -19000,18 +19114,71 @@ msgid ""
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign failed with error \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign require regex module."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Could not start codesign executable, make sure Xcode command line tools are "
+"installed."
+msgstr ""
+
+#: platform/osx/export/export.cpp platform/windows/export/export.cpp
msgid "No identity found."
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Cannot sign file %s."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Relative symlinks are not supported, exported \"%s\" might be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "DMG Creation"
+msgstr "İzah:"
+
+#: platform/osx/export/export.cpp
+msgid "Could not start hdiutil executable."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed - file exists."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed."
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid "Creating app bundle"
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Could not find template app to export:"
+msgid "Could not find template app to export: \"%s\"."
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid export format."
+msgstr "3D Transformasya izi"
+
+#: platform/osx/export/export.cpp
msgid ""
"Relative symlinks are not supported on this OS, the exported project might "
"be broken!"
@@ -19019,7 +19186,7 @@ msgstr ""
#: platform/osx/export/export.cpp
msgid ""
-"Requested template binary '%s' not found. It might be missing from your "
+"Requested template binary \"%s\" not found. It might be missing from your "
"template archive."
msgstr ""
@@ -19060,6 +19227,15 @@ msgid "Sending archive for notarization"
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "ZIP Creation"
+msgstr "Layihə Qurucuları"
+
+#: platform/osx/export/export.cpp
+msgid "Could not open file to read from path \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr ""
@@ -19357,6 +19533,10 @@ msgid "Debug Algorithm"
msgstr ""
#: platform/windows/export/export.cpp
+msgid "Failed to rename temporary file \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
msgid "Identity Type"
msgstr ""
@@ -19399,6 +19579,63 @@ msgid "Trademarks"
msgstr ""
#: platform/windows/export/export.cpp
+msgid "Resources Modification"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find rcedit executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find wine executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start rcedit executable, configure rcedit path in the Editor "
+"Settings (Export > Windows > Rcedit)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"rcedit failed to modify executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find signtool executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find osslsigncode executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid identity type."
+msgstr "'%s' qurmaq üçün etibarsız arqumentlər"
+
+#: platform/windows/export/export.cpp
+msgid "Invalid timestamp server."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start signtool executable, configure signtool path in the Editor "
+"Settings (Export > Windows > Signtool)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Signtool failed to sign executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Failed to remove temporary file \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
msgid ""
"The rcedit tool must be configured in the Editor Settings (Export > Windows "
"> Rcedit) to change the icon or app information data."
@@ -19417,6 +19654,22 @@ msgid "Invalid product version:"
msgstr ""
#: platform/windows/export/export.cpp
+msgid "Windows executables cannot be >= 4 GiB."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Failed to open executable file \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable file header corrupted."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable \"pck\" section not found."
+msgstr ""
+
+#: platform/windows/export/export.cpp
msgid "Windows"
msgstr ""
@@ -19432,6 +19685,10 @@ msgstr ""
msgid "Wine"
msgstr ""
+#: platform/x11/export/export.cpp
+msgid "32-bit executables cannot have embedded data >= 4 GiB."
+msgstr ""
+
#: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp
#: scene/resources/texture.cpp
msgid "Frames"
@@ -19543,7 +19800,8 @@ msgstr ""
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/3d/light.cpp scene/3d/reflection_probe.cpp
-#: scene/3d/visual_instance.cpp scene/resources/material.cpp
+#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp
+#: scene/resources/material.cpp
msgid "Max Distance"
msgstr ""
@@ -20263,6 +20521,18 @@ msgstr ""
msgid "Edge Connection Margin"
msgstr "ÆlaqÉ™ni redaktÉ™ edin:"
+#: scene/2d/navigation_2d.cpp
+msgid ""
+"'Navigation2D' node and 'Navigation2D.get_simple_path()' are deprecated and "
+"will be removed in a future version. Use 'Navigation2DServer.map_get_path()' "
+"instead."
+msgstr ""
+
+#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
+#, fuzzy
+msgid "Path Desired Distance"
+msgstr "Quraşdır"
+
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
msgid "Target Desired Distance"
msgstr ""
@@ -20314,13 +20584,15 @@ msgid ""
msgstr ""
#: scene/2d/navigation_polygon.cpp
-msgid ""
-"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
-"node. It only provides navigation data."
+msgid "Navpoly"
msgstr ""
-#: scene/2d/navigation_polygon.cpp
-msgid "Navpoly"
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+msgid "Enter Cost"
+msgstr ""
+
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+msgid "Travel Cost"
msgstr ""
#: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp
@@ -21390,6 +21662,13 @@ msgstr ""
msgid "Transform Normals"
msgstr "3D Transformasya izi"
+#: scene/3d/navigation.cpp
+msgid ""
+"'Navigation' node and 'Navigation.get_simple_path()' are deprecated and will "
+"be removed in a future version. Use 'NavigationServer.map_get_path()' "
+"instead."
+msgstr ""
+
#: scene/3d/navigation.cpp scene/resources/curve.cpp
msgid "Up Vector"
msgstr ""
@@ -21411,12 +21690,6 @@ msgid ""
"The NavigationAgent can be used only under a Spatial inheriting parent node."
msgstr ""
-#: scene/3d/navigation_mesh_instance.cpp
-msgid ""
-"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
-"It only provides navigation data."
-msgstr ""
-
#: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp
msgid "NavMesh"
msgstr ""
@@ -23882,6 +24155,16 @@ msgid "3D Physics"
msgstr ""
#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "2D Navigation"
+msgstr "Hamısını Seç/Seçmə"
+
+#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "3D Navigation"
+msgstr "Hamısını Seç/Seçmə"
+
+#: scene/register_scene_types.cpp
msgid "Use hiDPI"
msgstr ""
@@ -25186,7 +25469,7 @@ msgstr ""
msgid "Refraction"
msgstr "İzah:"
-#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp
+#: scene/resources/material.cpp
msgid "Detail"
msgstr ""
@@ -25263,8 +25546,14 @@ msgid "Visible Instance Count"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Sample Partition Type"
-msgstr ""
+#, fuzzy
+msgid "Sampling"
+msgstr "Ölçüm Nisbəti:"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Partition Type"
+msgstr "İzah:"
#: scene/resources/navigation_mesh.cpp
msgid "Parsed Geometry Type"
@@ -25279,7 +25568,11 @@ msgid "Source Group Name"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Agent"
+msgid "Cells"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
+msgid "Agents"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -25291,11 +25584,16 @@ msgid "Max Slope"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Regions"
+msgstr "Yalnız Seçim"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Merge Size"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Edge"
+msgid "Edges"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -25308,6 +25606,10 @@ msgid "Verts Per Poly"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+msgid "Details"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
msgid "Sample Distance"
msgstr ""
@@ -25324,9 +25626,18 @@ msgid "Ledge Spans"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Filter Walkable Low Height Spans"
+msgid "Walkable Low Height Spans"
msgstr ""
+#: scene/resources/navigation_mesh.cpp
+msgid "Baking AABB"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB Offset"
+msgstr "%s növünü dəyişdirin"
+
#: scene/resources/occluder_shape.cpp
msgid "Spheres"
msgstr ""
@@ -25702,6 +26013,11 @@ msgid "Scenario"
msgstr ""
#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Navigation Map"
+msgstr "%s növünü dəyişdirin"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
msgid "Direct Space State"
msgstr ""
@@ -25717,6 +26033,26 @@ msgstr ""
msgid "Default Angular Damp"
msgstr ""
+#: scene/resources/world.cpp
+#, fuzzy
+msgid "Default Map Up"
+msgstr "Dəyər:"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Size"
+msgstr "Bunun üçün Dəyişdirmə Axtar:"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Height"
+msgstr "Bunun üçün Dəyişdirmə Axtar:"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Edge Connection Margin"
+msgstr "ÆlaqÉ™ni redaktÉ™ edin:"
+
#: scene/resources/world_2d.cpp
msgid "Canvas"
msgstr ""
diff --git a/editor/translations/bg.po b/editor/translations/bg.po
index b7dc36f666..aa0fac6038 100644
--- a/editor/translations/bg.po
+++ b/editor/translations/bg.po
@@ -232,9 +232,10 @@ msgid "Data"
msgstr "Данни"
#: core/io/file_access_network.cpp core/register_core_types.cpp
-#: editor/editor_settings.cpp main/main.cpp
+#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
#: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h
+#: scene/gui/file_dialog.cpp
#, fuzzy
msgid "Network"
msgstr "Профилиране на мрежата"
@@ -396,6 +397,15 @@ msgstr ""
msgid "Max Size (KB)"
msgstr "МакÑимален размер (KB)"
+#: core/os/input.cpp
+#, fuzzy
+msgid "Mouse Mode"
+msgstr "Режим на премеÑтване"
+
+#: core/os/input.cpp
+msgid "Use Accumulated Input"
+msgstr ""
+
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: servers/audio_server.cpp
msgid "Device"
@@ -591,7 +601,8 @@ msgstr "ОпиÑание"
#: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
-#: main/main.cpp
+#: main/main.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp
msgid "Run"
msgstr "ПуÑкане"
@@ -678,6 +689,11 @@ msgid "Main Run Args"
msgstr ""
#: core/project_settings.cpp
+#, fuzzy
+msgid "Scene Naming"
+msgstr "Път на Ñцената:"
+
+#: core/project_settings.cpp
msgid "Search In File Extensions"
msgstr ""
@@ -685,19 +701,15 @@ msgstr ""
msgid "Script Templates Search Path"
msgstr ""
-#: core/project_settings.cpp editor/editor_node.cpp
-#: editor/plugins/version_control_editor_plugin.cpp
-msgid "Version Control"
-msgstr "Контрол на верÑиите"
-
#: core/project_settings.cpp
-msgid "Autoload On Startup"
-msgstr ""
+#, fuzzy
+msgid "Version Control Autoload On Startup"
+msgstr "Контрол на верÑиите"
#: core/project_settings.cpp
#, fuzzy
-msgid "Plugin Name"
-msgstr "Име на приÑтавката:"
+msgid "Version Control Plugin Name"
+msgstr "Контрол на верÑиите"
#: core/project_settings.cpp scene/2d/collision_object_2d.cpp
#: scene/3d/collision_object.cpp scene/gui/control.cpp
@@ -810,7 +822,8 @@ msgid "Quality"
msgstr ""
#: core/project_settings.cpp scene/gui/file_dialog.cpp
-#: scene/main/scene_tree.cpp servers/visual_server.cpp
+#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp
+#: servers/visual_server.cpp
#, fuzzy
msgid "Filters"
msgstr "Филтри:"
@@ -2231,8 +2244,8 @@ msgid "Open"
msgstr "ОтварÑне"
#: editor/dependency_editor.cpp
-msgid "Owners Of:"
-msgstr "СобÑтвеници на:"
+msgid "Owners of: %s (Total: %d)"
+msgstr ""
#: editor/dependency_editor.cpp
msgid ""
@@ -2530,7 +2543,7 @@ msgid "Bus Options"
msgstr "ÐаÑтройки на шината"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/scene_tree_dock.cpp
+#: editor/project_export.cpp editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr ""
@@ -2787,6 +2800,22 @@ msgid "Choose"
msgstr "Избиране"
#: editor/editor_export.cpp
+msgid "Project export for platform:"
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Completed with errors."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Completed successfully."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Failed."
+msgstr ""
+
+#: editor/editor_export.cpp
msgid "Storing File:"
msgstr ""
@@ -2799,6 +2828,31 @@ msgid "Packing"
msgstr ""
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save PCK"
+msgstr "Запазване"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Cannot create file \"%s\"."
+msgstr "Папката не може да бъде Ñъздадена."
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to export project files."
+msgstr "Файловете на проекта не могат да бъдат изнеÑени"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Can't open file to read from path \"%s\"."
+msgstr "Файлът не може да бъде отворен за запиÑ:"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save ZIP"
+msgstr "Запазване"
+
+#: editor/editor_export.cpp
msgid ""
"Target platform requires 'ETC' texture compression for GLES2. Enable 'Import "
"Etc' in Project Settings."
@@ -2901,9 +2955,31 @@ msgstr ""
msgid "Custom release template not found."
msgstr ""
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Prepare Template"
+msgstr "Управление на шаблоните"
+
+#: editor/editor_export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "The given export path doesn't exist."
+msgstr "ПоÑочениÑÑ‚ път не ÑъщеÑтвува."
+
#: editor/editor_export.cpp platform/javascript/export/export.cpp
-msgid "Template file not found:"
-msgstr ""
+#, fuzzy
+msgid "Template file not found: \"%s\"."
+msgstr "Пакетът не е намерен: %s"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to copy export template."
+msgstr "Файлът Ñ ÑˆÐ°Ð±Ð»Ð¾Ð½Ð¸Ñ‚Ðµ за изнаÑÑне не може да Ñе отвори."
+
+#: editor/editor_export.cpp platform/windows/export/export.cpp
+#: platform/x11/export/export.cpp
+#, fuzzy
+msgid "PCK Embedding"
+msgstr "ОтÑтъп"
#: editor/editor_export.cpp
msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB."
@@ -3072,9 +3148,9 @@ msgid "Import"
msgstr "ВнаÑÑне"
#: editor/editor_feature_profile.cpp editor/project_export.cpp
-#: platform/android/export/export.cpp platform/javascript/export/export.cpp
-#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
-#: platform/windows/export/export.cpp
+#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#: platform/uwp/export/export.cpp platform/windows/export/export.cpp
msgid "Export"
msgstr "ИзнаÑÑне"
@@ -4186,15 +4262,6 @@ msgid ""
"Unable to write to file '%s', file in use, locked or lacking permissions."
msgstr ""
-#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
-msgid "Scene"
-msgstr "Сцена"
-
-#: editor/editor_node.cpp
-#, fuzzy
-msgid "Scene Naming"
-msgstr "Път на Ñцената:"
-
#: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp
#: servers/arvr/arvr_interface.cpp
msgid "Interface"
@@ -4321,6 +4388,10 @@ msgid "Default Color Picker Mode"
msgstr ""
#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
+msgid "Version Control"
+msgstr "Контрол на верÑиите"
+
+#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
msgid "Username"
msgstr "ПотребителÑко име"
@@ -4348,6 +4419,10 @@ msgstr ""
msgid "Add a new scene."
msgstr "ДобавÑне на нови нова Ñцена."
+#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
+msgid "Scene"
+msgstr "Сцена"
+
#: editor/editor_node.cpp
msgid "Go to previously opened scene."
msgstr ""
@@ -5098,6 +5173,11 @@ msgid ""
"as runnable."
msgstr ""
+#: editor/editor_run_native.cpp
+#, fuzzy
+msgid "Project Run"
+msgstr "Проект"
+
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
msgstr ""
@@ -5372,7 +5452,9 @@ msgid "Draw Spaces"
msgstr "Ð˜Ð·Ð²Ð¸ÐºÐ²Ð°Ð½Ð¸Ñ Ð·Ð° изчертаване:"
#: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp
-#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp
+#: scene/main/scene_tree.cpp scene/resources/world.cpp
+#: scene/resources/world_2d.cpp
msgid "Navigation"
msgstr "ÐавигациÑ"
@@ -6828,7 +6910,7 @@ msgstr ""
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp
-#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp
+#: scene/gui/control.cpp
#, fuzzy
msgid "Filter"
msgstr "Филтри:"
@@ -7121,6 +7203,18 @@ msgid "Saving..."
msgstr "Запазване..."
#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used as a normal map in 3D. Enabling red-green "
+"texture compression to reduce memory usage (blue channel is discarded)."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap "
+"generation and VRAM texture compression."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
msgid "2D, Detect 3D"
msgstr ""
@@ -7795,11 +7889,20 @@ msgid "New Anim"
msgstr "Ðова анимациÑ"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+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 "Rename Animation"
+msgstr "Преименуване на анимациÑта"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Delete Animation?"
msgstr "Изтриване на анимациÑта?"
@@ -7817,11 +7920,6 @@ 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 "Duplicate Animation"
msgstr "Дублиране на анимациÑта"
@@ -7966,10 +8064,6 @@ msgid "Pin AnimationPlayer"
msgstr "Закачане на AnimationPlayer"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Create New Animation"
-msgstr "Създаване на нова анимациÑ"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Name:"
msgstr "Име на анимациÑта:"
@@ -10061,6 +10155,7 @@ msgid "Points"
msgstr "Точки"
#: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp
+#: scene/resources/navigation_mesh.cpp
msgid "Polygons"
msgstr "Полигони"
@@ -11442,7 +11537,8 @@ msgid "Invalid geometry, can't replace by mesh."
msgstr "Ðеправилна геометриÑ. Ðе може да Ñе замени Ñ Ð¿Ð¾Ð»Ð¸Ð³Ð¾Ð½Ð½Ð° мрежа."
#: editor/plugins/sprite_editor_plugin.cpp
-msgid "Convert to Mesh2D"
+#, fuzzy
+msgid "Convert to MeshInstance2D"
msgstr "Преобразуване в Mesh2D"
#: editor/plugins/sprite_editor_plugin.cpp
@@ -12416,8 +12512,7 @@ msgid "Select the previous shape, subtile, or Tile."
msgstr ""
#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp
-#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp
-#: scene/resources/texture.cpp
+#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp
msgid "Region"
msgstr "Регион"
@@ -13858,31 +13953,10 @@ 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 "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 "Export Path"
msgstr "Път за изнаÑÑне"
@@ -14026,6 +14100,11 @@ msgid "Export templates for this platform are missing:"
msgstr "Шаблоните за изнаÑÑне за тази ÑиÑтема липÑват:"
#: editor/project_export.cpp
+#, fuzzy
+msgid "Project Export"
+msgstr "ОÑнователи на проекта"
+
+#: editor/project_export.cpp
msgid "Manage Export Templates"
msgstr "Управление на шаблоните за изнаÑÑне"
@@ -16333,7 +16412,7 @@ msgstr ""
#: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp
#: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp
-#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp
+#: scene/3d/collision_polygon.cpp
#, fuzzy
msgid "Polygon"
msgstr "Полигони"
@@ -16944,7 +17023,6 @@ msgid "Use In Baked Light"
msgstr "Изпичане на карти на оÑветеноÑÑ‚"
#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
-#: scene/resources/navigation_mesh.cpp
msgid "Cell"
msgstr ""
@@ -16974,6 +17052,19 @@ msgstr "По Ñредата горе"
msgid "Mask"
msgstr ""
+#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
+#, fuzzy
+msgid "Bake Navigation"
+msgstr "ÐавигациÑ"
+
+#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp
+#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp
+#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp
+#: scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Navigation Layers"
+msgstr "Режим на навигациÑ"
+
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Plane"
msgstr "Следваща равнина"
@@ -18474,10 +18565,6 @@ msgid "Could not execute on device."
msgstr "Изпълнението на уÑтройÑтвото е невъзможно."
#: platform/android/export/export_plugin.cpp
-msgid "Unable to find the 'apksigner' tool."
-msgstr "ИнÑтрументът „apksigner“ не може да бъде намерен."
-
-#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -18595,12 +18682,17 @@ msgstr ""
"„Целева верÑÐ¸Ñ Ð½Ð° SDK“ трÑбва да бъде по-голÑма или равна на „Мин. верÑÐ¸Ñ Ð½Ð° "
"SDK“."
+#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Code Signing"
+msgstr "Сигнал"
+
#: platform/android/export/export_plugin.cpp
+#, fuzzy
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."
+"'apksigner' could not be found. Please check that the command is available "
+"in the Android SDK build-tools directory. The resulting %s is unsigned."
msgstr ""
"Командата „apksigner“ не може да бъде намерена.\n"
"Проверете дали командата е налична в папката „build-tools“ на Android SDK.\n"
@@ -18619,6 +18711,10 @@ msgid "Could not find keystore, unable to export."
msgstr "Ðе е намерено хранилище за ключове. ИзнаÑÑнето е невъзможно."
#: platform/android/export/export_plugin.cpp
+msgid "Could not start apksigner executable."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr "„apksigner“ завърши Ñ Ð³Ñ€ÐµÑˆÐºÐ° #%d"
@@ -18647,7 +18743,8 @@ msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr "Ðеправилно име! Android APK изиÑква разширение *.apk."
#: platform/android/export/export_plugin.cpp
-msgid "Unsupported export format!\n"
+#, fuzzy
+msgid "Unsupported export format!"
msgstr "Ðеподдържан формат за изнаÑÑне!\n"
#: platform/android/export/export_plugin.cpp
@@ -18658,21 +18755,21 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Android build version mismatch:\n"
-" Template installed: %s\n"
-" Godot Version: %s\n"
+"Android build version mismatch: Template installed: %s, Godot version: %s. "
"Please reinstall Android build template from 'Project' menu."
msgstr ""
#: platform/android/export/export_plugin.cpp
+#, fuzzy
msgid ""
-"Unable to overwrite res://android/build/res/*.xml files with project name"
+"Unable to overwrite res://android/build/res/*.xml files with project name."
msgstr ""
"файловете res://android/build/res/*.xml не могат да бъдат презапиÑани Ñ "
"името на проекта"
#: platform/android/export/export_plugin.cpp
-msgid "Could not export project files to gradle project\n"
+#, fuzzy
+msgid "Could not export project files to gradle project."
msgstr ""
"Файловете на проекта не могат да бъдат изнеÑени като проект на gradle.\n"
@@ -18685,8 +18782,9 @@ msgid "Building Android Project (gradle)"
msgstr "Компилиране на проект за Android (gradle)"
#: platform/android/export/export_plugin.cpp
+#, fuzzy
msgid ""
-"Building of Android project failed, check output for the error.\n"
+"Building of Android project failed, check output for the error. "
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
"Компилирането на проекта за Android беше неуÑпешно. Вижте изхода за "
@@ -18707,7 +18805,8 @@ msgstr ""
"в папката на проекта на gradle."
#: platform/android/export/export_plugin.cpp
-msgid "Package not found: %s"
+#, fuzzy
+msgid "Package not found: \"%s\"."
msgstr "Пакетът не е намерен: %s"
#: platform/android/export/export_plugin.cpp
@@ -18715,17 +18814,16 @@ msgid "Creating APK..."
msgstr "Създаване на APK…"
#: platform/android/export/export_plugin.cpp
-msgid ""
-"Could not find template APK to export:\n"
-"%s"
+#, fuzzy
+msgid "Could not find template APK to export: \"%s\"."
msgstr ""
"Ðе е намерен шаблонен файл APK за изнаÑÑне:\n"
"%s"
#: platform/android/export/export_plugin.cpp
+#, fuzzy
msgid ""
-"Missing libraries in the export template for the selected architectures: "
-"%s.\n"
+"Missing libraries in the export template for the selected architectures: %s. "
"Please build a template with all required libraries, or uncheck the missing "
"architectures in the export preset."
msgstr ""
@@ -18738,7 +18836,8 @@ msgid "Adding files..."
msgstr "ДобавÑне на файлове..."
#: platform/android/export/export_plugin.cpp
-msgid "Could not export project files"
+#, fuzzy
+msgid "Could not export project files."
msgstr "Файловете на проекта не могат да бъдат изнеÑени"
#: platform/android/export/export_plugin.cpp
@@ -18974,6 +19073,17 @@ msgstr "ПерÑонализиран обект"
msgid "Custom BG Color"
msgstr "ПерÑонализиран обект"
+#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Prepare Templates"
+msgstr "Управление на шаблоните"
+
+#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Export template not found."
+msgstr "Шаблоните за изнаÑÑне за тази ÑиÑтема липÑват:"
+
#: platform/iphone/export/export.cpp
msgid "App Store Team ID not specified - cannot configure the project."
msgstr ""
@@ -18995,22 +19105,35 @@ msgid "Run exported HTML in the system's default browser."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not open template for export:"
+#, fuzzy
+msgid "Could not open template for export: \"%s\"."
msgstr "Шаблонът не може да Ñе отвори за изнаÑÑне:"
#: platform/javascript/export/export.cpp
-msgid "Invalid export template:"
-msgstr ""
+#, fuzzy
+msgid "Invalid export template: \"%s\"."
+msgstr "Ðеправилно разширение."
#: platform/javascript/export/export.cpp
-msgid "Could not write file:"
+#, fuzzy
+msgid "Could not write file: \"%s\"."
msgstr "Файлът не може да бъде запиÑан:"
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Icon Creation"
+msgstr "Задаване на отÑтъп"
+
#: platform/javascript/export/export.cpp
-msgid "Could not read file:"
+#, fuzzy
+msgid "Could not read file: \"%s\"."
msgstr "Файлът не може да бъде прочетен:"
#: platform/javascript/export/export.cpp
+msgid "PWA"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
#, fuzzy
msgid "Variant"
msgstr "Разделение:"
@@ -19085,15 +19208,18 @@ msgid "Icon 512 X 512"
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not read HTML shell:"
+#, fuzzy
+msgid "Could not read HTML shell: \"%s\"."
msgstr "ПерÑонализираната HTML-обвивка не може да бъде прочетена:"
#: platform/javascript/export/export.cpp
-msgid "Could not create HTTP server directory:"
+#, fuzzy
+msgid "Could not create HTTP server directory: %s."
msgstr "Папката на HTTP-Ñървъра не може да бъде Ñъздадена:"
#: platform/javascript/export/export.cpp
-msgid "Error starting HTTP server:"
+#, fuzzy
+msgid "Error starting HTTP server: %d."
msgstr "Грешка при Ñтартирането на HTTP-Ñървър:"
#: platform/javascript/export/export.cpp
@@ -19393,9 +19519,28 @@ msgid "Apple Team ID"
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open icon file \"%s\"."
+msgstr "Файловете на проекта не могат да бъдат изнеÑени"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start xcrun executable."
+msgstr "Изпълнението на уÑтройÑтвото е невъзможно."
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization failed."
+msgstr "ÐавигациÑ"
+
+#: platform/osx/export/export.cpp
+msgid "Notarization request UUID: \"%s\""
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid ""
-"Note: The notarization process generally takes less than an hour. When the "
-"process is completed, you'll receive an email."
+"The notarization process generally takes less than an hour. When the process "
+"is completed, you'll receive an email."
msgstr ""
#: platform/osx/export/export.cpp
@@ -19411,19 +19556,74 @@ msgid ""
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign failed with error \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign require regex module."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Could not start codesign executable, make sure Xcode command line tools are "
+"installed."
+msgstr ""
+
+#: platform/osx/export/export.cpp platform/windows/export/export.cpp
#, fuzzy
msgid "No identity found."
msgstr "ÐÑма намерени конÑтанти."
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Cannot sign file %s."
+msgstr "Грешка при запазването на файла: %s"
+
+#: platform/osx/export/export.cpp
+msgid "Relative symlinks are not supported, exported \"%s\" might be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "DMG Creation"
+msgstr "ÐаправлениÑ"
+
+#: platform/osx/export/export.cpp
+msgid "Could not start hdiutil executable."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed - file exists."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed."
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid "Creating app bundle"
msgstr "Създаване на пакета на приложението"
#: platform/osx/export/export.cpp
-msgid "Could not find template app to export:"
+#, fuzzy
+msgid "Could not find template app to export: \"%s\"."
msgstr "Ðе е намерено шаблонно приложение за изнаÑÑне:"
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid export format."
+msgstr "Ðеправилен базов път."
+
+#: platform/osx/export/export.cpp
msgid ""
"Relative symlinks are not supported on this OS, the exported project might "
"be broken!"
@@ -19431,7 +19631,7 @@ msgstr ""
#: platform/osx/export/export.cpp
msgid ""
-"Requested template binary '%s' not found. It might be missing from your "
+"Requested template binary \"%s\" not found. It might be missing from your "
"template archive."
msgstr ""
@@ -19472,6 +19672,17 @@ msgid "Sending archive for notarization"
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "ZIP Creation"
+msgstr "Проект"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open file to read from path \"%s\"."
+msgstr ""
+"Файловете на проекта не могат да бъдат изнеÑени като проект на gradle.\n"
+
+#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr "Ðеправилен идентификатор на пакета:"
@@ -19780,6 +19991,11 @@ msgid "Debug Algorithm"
msgstr "Дебъгер"
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to rename temporary file \"%s\"."
+msgstr "ВременниÑÑ‚ файл не може да бъде премахнат:"
+
+#: platform/windows/export/export.cpp
msgid "Identity Type"
msgstr ""
@@ -19826,6 +20042,70 @@ msgid "Trademarks"
msgstr ""
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Resources Modification"
+msgstr "ИзвеÑтиÑ"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find rcedit executable at \"%s\"."
+msgstr "Ðе е намерено хранилище за ключове. ИзнаÑÑнето е невъзможно."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find wine executable at \"%s\"."
+msgstr "Ðе е намерено хранилище за ключове. ИзнаÑÑнето е невъзможно."
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start rcedit executable, configure rcedit path in the Editor "
+"Settings (Export > Windows > Rcedit)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"rcedit failed to modify executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find signtool executable at \"%s\"."
+msgstr "Ðе е намерено хранилище за ключове. ИзнаÑÑнето е невъзможно."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find osslsigncode executable at \"%s\"."
+msgstr "Ðе е намерено хранилище за ключове. ИзнаÑÑнето е невъзможно."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid identity type."
+msgstr "Ðеправилни аргументи за изграждане на „%s“"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid timestamp server."
+msgstr "Ðеправилно име."
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start signtool executable, configure signtool path in the Editor "
+"Settings (Export > Windows > Signtool)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Signtool failed to sign executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to remove temporary file \"%s\"."
+msgstr "ВременниÑÑ‚ файл не може да бъде премахнат:"
+
+#: platform/windows/export/export.cpp
msgid ""
"The rcedit tool must be configured in the Editor Settings (Export > Windows "
"> Rcedit) to change the icon or app information data."
@@ -19844,6 +20124,23 @@ msgid "Invalid product version:"
msgstr "Ðеправилна верÑÐ¸Ñ Ð½Ð° продукта:"
#: platform/windows/export/export.cpp
+msgid "Windows executables cannot be >= 4 GiB."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+#, fuzzy
+msgid "Failed to open executable file \"%s\"."
+msgstr "Ðеправилно разширение."
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable file header corrupted."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable \"pck\" section not found."
+msgstr ""
+
+#: platform/windows/export/export.cpp
msgid "Windows"
msgstr ""
@@ -19859,6 +20156,10 @@ msgstr ""
msgid "Wine"
msgstr ""
+#: platform/x11/export/export.cpp
+msgid "32-bit executables cannot have embedded data >= 4 GiB."
+msgstr ""
+
#: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp
#: scene/resources/texture.cpp
#, fuzzy
@@ -19982,7 +20283,8 @@ msgstr ""
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/3d/light.cpp scene/3d/reflection_probe.cpp
-#: scene/3d/visual_instance.cpp scene/resources/material.cpp
+#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp
+#: scene/resources/material.cpp
msgid "Max Distance"
msgstr ""
@@ -20770,6 +21072,18 @@ msgstr ""
msgid "Edge Connection Margin"
msgstr "Редактиране на Връзката:"
+#: scene/2d/navigation_2d.cpp
+msgid ""
+"'Navigation2D' node and 'Navigation2D.get_simple_path()' are deprecated and "
+"will be removed in a future version. Use 'Navigation2DServer.map_get_path()' "
+"instead."
+msgstr ""
+
+#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
+#, fuzzy
+msgid "Path Desired Distance"
+msgstr "Изберете главна Ñцена"
+
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
msgid "Target Desired Distance"
msgstr ""
@@ -20826,15 +21140,16 @@ msgstr ""
"МолÑ, задайте ÑвойÑтво или нариÑувайте полигон."
#: scene/2d/navigation_polygon.cpp
-msgid ""
-"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
-"node. It only provides navigation data."
+msgid "Navpoly"
msgstr ""
-"NavigationPolygonInstance трÑбва да бъде дъщерен или под-дъщерен на обект от "
-"тип Navigation2D. Той дава Ñамо навигационна информациÑ."
-#: scene/2d/navigation_polygon.cpp
-msgid "Navpoly"
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Enter Cost"
+msgstr "По Ñредата долу"
+
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+msgid "Travel Cost"
msgstr ""
#: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp
@@ -21991,6 +22306,13 @@ msgstr ""
msgid "Transform Normals"
msgstr "КонÑтанта за транÑформациÑ."
+#: scene/3d/navigation.cpp
+msgid ""
+"'Navigation' node and 'Navigation.get_simple_path()' are deprecated and will "
+"be removed in a future version. Use 'NavigationServer.map_get_path()' "
+"instead."
+msgstr ""
+
#: scene/3d/navigation.cpp scene/resources/curve.cpp
#, fuzzy
msgid "Up Vector"
@@ -22014,14 +22336,6 @@ msgid ""
"The NavigationAgent can be used only under a Spatial inheriting parent node."
msgstr ""
-#: scene/3d/navigation_mesh_instance.cpp
-msgid ""
-"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
-"It only provides navigation data."
-msgstr ""
-"NavigationMeshInstance трÑбва да бъде дъщерен или под-дъщерен на обект от "
-"тип Navigation. Той Ñамо предоÑÑ‚Ð°Ð²Ñ Ð´Ð°Ð½Ð½Ð¸Ñ‚Ðµ за навигирането."
-
#: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp
#, fuzzy
msgid "NavMesh"
@@ -24641,6 +24955,16 @@ msgid "3D Physics"
msgstr "Следващ кадър на физичната ÑиÑтема"
#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "2D Navigation"
+msgstr "ÐавигациÑ"
+
+#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "3D Navigation"
+msgstr "ÐавигациÑ"
+
+#: scene/register_scene_types.cpp
msgid "Use hiDPI"
msgstr ""
@@ -26040,7 +26364,7 @@ msgstr "Преход"
msgid "Refraction"
msgstr "Пречупване"
-#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp
+#: scene/resources/material.cpp
msgid "Detail"
msgstr ""
@@ -26119,8 +26443,14 @@ msgid "Visible Instance Count"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Sample Partition Type"
-msgstr ""
+#, fuzzy
+msgid "Sampling"
+msgstr "Скалиране: "
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Partition Type"
+msgstr "Разделение:"
#: scene/resources/navigation_mesh.cpp
msgid "Parsed Geometry Type"
@@ -26136,10 +26466,15 @@ msgid "Source Group Name"
msgstr "Източник за полигонна мрежа:"
#: scene/resources/navigation_mesh.cpp
-msgid "Agent"
+msgid "Cells"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Agents"
+msgstr "Гизмота"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Max Climb"
msgstr ""
@@ -26148,11 +26483,16 @@ msgid "Max Slope"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Regions"
+msgstr "Регион"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Merge Size"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Edge"
+msgid "Edges"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -26165,6 +26505,11 @@ msgid "Verts Per Poly"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Details"
+msgstr "Показване на Ñтандартните"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Sample Distance"
msgstr ""
@@ -26181,9 +26526,18 @@ msgid "Ledge Spans"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Filter Walkable Low Height Spans"
+msgid "Walkable Low Height Spans"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
+msgid "Baking AABB"
msgstr ""
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB Offset"
+msgstr "ОтмеÑтване:"
+
#: scene/resources/occluder_shape.cpp
msgid "Spheres"
msgstr ""
@@ -26589,6 +26943,11 @@ msgid "Scenario"
msgstr "Сцена"
#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Navigation Map"
+msgstr "ÐавигациÑ"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
msgid "Direct Space State"
msgstr ""
@@ -26606,6 +26965,26 @@ msgstr "Линейно отлÑво"
msgid "Default Angular Damp"
msgstr ""
+#: scene/resources/world.cpp
+#, fuzzy
+msgid "Default Map Up"
+msgstr "Стандартен предварителен преглед"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Size"
+msgstr "Стандартен предварителен преглед"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Height"
+msgstr "ТеÑтово"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Edge Connection Margin"
+msgstr "Редактиране на Връзката:"
+
#: scene/resources/world_2d.cpp
msgid "Canvas"
msgstr ""
diff --git a/editor/translations/bn.po b/editor/translations/bn.po
index 21de62a1af..b3c338168c 100644
--- a/editor/translations/bn.po
+++ b/editor/translations/bn.po
@@ -11,13 +11,15 @@
# Mokarrom Hossain <mhb2016.bzs@gmail.com>, 2020, 2021.
# Sagen Soren <sagensoren03@gmail.com>, 2020.
# Hasibul Hasan <d1hasib@yahoo.com>, 2020.
+# saitama <atik.wowspace@gmail.com>, 2022.
+# Joysankar Majumdar <joymajumdar15828@gmail.com>, 2022.
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-03 06:20+0000\n"
-"Last-Translator: Oymate <dhruboadittya96@gmail.com>\n"
+"PO-Revision-Date: 2022-06-29 10:04+0000\n"
+"Last-Translator: Joysankar Majumdar <joymajumdar15828@gmail.com>\n"
"Language-Team: Bengali <https://hosted.weblate.org/projects/godot-engine/"
"godot/bn/>\n"
"Language: bn\n"
@@ -25,67 +27,62 @@ 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.13.1-dev\n"
#: core/bind/core_bind.cpp main/main.cpp
msgid "Tablet Driver"
-msgstr ""
+msgstr "টà§à¦¯à¦¾à¦¬à¦²à§‡à¦Ÿ ডà§à¦°à¦¾à¦‡à¦­à¦¾à¦°"
#: core/bind/core_bind.cpp
-#, fuzzy
msgid "Clipboard"
-msgstr "রিসোরà§à¦¸à§‡à¦° কà§à¦²à§€à¦ªà¦¬à§‹à¦°à§à¦¡ খালি!"
+msgstr "কà§à¦²à§€à¦ªà¦¬à§‹à¦°à§à¦¡"
#: core/bind/core_bind.cpp
-#, fuzzy
msgid "Current Screen"
-msgstr "বরà§à¦¤à¦®à¦¾à¦¨ দৃশà§à¦¯"
+msgstr "বরà§à¦¤à¦®à¦¾à¦¨ পরà§à¦¦à¦¾"
#: core/bind/core_bind.cpp
msgid "Exit Code"
-msgstr ""
+msgstr "ফেরত সংকেত"
#: core/bind/core_bind.cpp
-#, fuzzy
msgid "V-Sync Enabled"
-msgstr "সকà§à¦°à¦¿à¦¯à¦¼ করà§à¦¨"
+msgstr "ভি-সিঙà§à¦• সকà§à¦°à¦¿à¦¯à¦¼ করà§à¦¨"
#: core/bind/core_bind.cpp main/main.cpp
+#, fuzzy
msgid "V-Sync Via Compositor"
-msgstr ""
+msgstr "কমà§à¦ªà¦¸à¦¿à¦Ÿà¦° দà§à¦¬à¦¾à¦°à¦¾ ভি-সিঙà§à¦• করা"
#: core/bind/core_bind.cpp main/main.cpp
+#, fuzzy
msgid "Delta Smoothing"
-msgstr ""
+msgstr "ডেলà§à¦Ÿà¦¾ মসৃণ করন"
#: core/bind/core_bind.cpp
#, fuzzy
msgid "Low Processor Usage Mode"
-msgstr "মোড (Mode) সরান"
+msgstr "পà§à¦°à¦¸à§‡à¦¸à¦° à¦à¦° কম বà§à¦¯à¦¾à¦¬à¦¹à¦¾à¦° Mode"
#: core/bind/core_bind.cpp
msgid "Low Processor Usage Mode Sleep (µsec)"
-msgstr ""
+msgstr "কম পà§à¦°à¦¸à§‡à¦¸à¦° বà§à¦¯à¦¾à¦¬à¦¹à¦¾à¦° মোড বিরতি (sec)"
#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp
-#, fuzzy
msgid "Keep Screen On"
-msgstr "ডিবাগার খোলা রাখà§à¦¨"
+msgstr "পরà§à¦¦à¦¾ চালৠরাখà§à¦¨"
#: core/bind/core_bind.cpp
-#, fuzzy
msgid "Min Window Size"
-msgstr "পà§à¦°à¦¾à¦¨à§à¦¤à¦°à§‡à¦–ার আকার:"
+msgstr "সরà§à¦¬à¦¨à¦¿à¦®à§à¦¨ উইনà§à¦¡à§‹ আকার"
#: core/bind/core_bind.cpp
-#, fuzzy
msgid "Max Window Size"
-msgstr "পà§à¦°à¦¾à¦¨à§à¦¤à¦°à§‡à¦–ার আকার:"
+msgstr "সরà§à¦¬à§‹à¦šà§à¦š উইনà§à¦¡à§‹ আকার"
#: core/bind/core_bind.cpp
-#, fuzzy
msgid "Screen Orientation"
-msgstr "রেফারেনà§à¦¸à§‡à¦° ডকà§à¦®à§‡à¦¨à§à¦Ÿà§‡à¦¶à¦¨à§‡ খà§à¦à¦œà§à¦¨à¥¤"
+msgstr "পরà§à¦¦à¦¾ à¦à§‹à¦à¦•/ উপসà§à¦¥à¦¾à¦ªà¦¨"
#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp
#: platform/uwp/os_uwp.cpp
@@ -95,39 +92,36 @@ msgstr "উইনà§à¦¡à§‹"
#: core/bind/core_bind.cpp core/project_settings.cpp
msgid "Borderless"
-msgstr ""
+msgstr "সিমানà§à¦¤à¦¬à¦¿à¦¹à§€à¦¨"
#: core/bind/core_bind.cpp
msgid "Per Pixel Transparency Enabled"
-msgstr ""
+msgstr "পà§à¦°à¦¤à¦¿ পিকà§à¦¸à§‡à¦² সà§à¦¬à¦šà§à¦›à¦¤à¦¾ চালৠকরà§à¦¨"
#: core/bind/core_bind.cpp core/project_settings.cpp
-#, fuzzy
msgid "Fullscreen"
-msgstr "পূরà§à¦£-পরà§à¦¦à¦¾ অদলবদল/টগল করà§à¦¨"
+msgstr "পূরà§à¦£-পরà§à¦¦à¦¾"
#: core/bind/core_bind.cpp
msgid "Maximized"
-msgstr ""
+msgstr "সরà§à¦¬à§‹à¦šà§à¦šà¦•ৃত"
#: core/bind/core_bind.cpp
-#, fuzzy
msgid "Minimized"
-msgstr "বড় হাতের অকà§à¦·à¦°à§‡ পরিবরà§à¦¤à¦¨à§‡ করà§à¦¨"
+msgstr "সরà§à¦¬à¦¨à¦¿à¦®à§à¦¨"
#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp
#: scene/gui/graph_node.cpp
msgid "Resizable"
-msgstr ""
+msgstr "আকার-পরিবরà§à¦¤à¦¨à¦¯à§‹à¦—à§à¦¯"
#: core/bind/core_bind.cpp core/os/input_event.cpp scene/2d/node_2d.cpp
#: scene/2d/physics_body_2d.cpp scene/2d/remote_transform_2d.cpp
#: scene/3d/physics_body.cpp scene/3d/remote_transform.cpp
#: scene/gui/control.cpp scene/gui/line_edit.cpp
#: scene/resources/default_theme/default_theme.cpp
-#, fuzzy
msgid "Position"
-msgstr "ডà§à¦• পজিশন"
+msgstr "অবসà§à¦¥à¦¾à¦¨"
#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp
#: main/main.cpp modules/gridmap/grid_map.cpp
@@ -138,32 +132,28 @@ msgstr "ডà§à¦• পজিশন"
#: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp
#: scene/resources/style_box.cpp scene/resources/texture.cpp
#: scene/resources/visual_shader.cpp servers/visual_server.cpp
-#, fuzzy
msgid "Size"
-msgstr "সেল (Cell)-à¦à¦° আকার:"
+msgstr "আকার"
#: core/bind/core_bind.cpp
msgid "Endian Swap"
-msgstr ""
+msgstr "à¦à¦¨à§à¦¡à¦¿à§Ÿà¦¾à¦¨ সোয়াপ"
#: core/bind/core_bind.cpp
-#, fuzzy
msgid "Editor Hint"
-msgstr "সমà§à¦ªà¦¾à¦¦à¦¨ করà§à¦¨ (Edit)"
+msgstr "সমà§à¦ªà¦¾à¦¦à¦¨à¦¾à¦•রন আভাস"
#: core/bind/core_bind.cpp
msgid "Print Error Messages"
-msgstr ""
+msgstr "তà§à¦°à§à¦Ÿà¦¿ বারà§à¦¤à¦¾à¦—à§à¦²à§‹ ছাপান"
#: core/bind/core_bind.cpp
-#, fuzzy
msgid "Iterations Per Second"
-msgstr "ইনà§à¦Ÿà¦¾à¦°à¦ªà§‹à¦²à§‡à¦¶à¦¨ মোড"
+msgstr "পà§à¦°à¦¤à¦¿ সেকেনà§à¦¡à§‡ চকà§à¦°"
#: core/bind/core_bind.cpp
-#, fuzzy
msgid "Target FPS"
-msgstr "টারà§à¦—েট"
+msgstr "লকà§à¦·à§à¦¯-à¦à¦«à¦ªà¦¿à¦à¦¸(ফà§à¦°à§‡à¦®-পà§à¦°à¦¤à¦¿-সেকেনà§à¦¡)"
#: core/bind/core_bind.cpp
#, fuzzy
@@ -190,13 +180,12 @@ msgid "Error Line"
msgstr "সংরকà§à¦·à¦£à§‡ সমসà§à¦¯à¦¾ হয়েছে"
#: core/bind/core_bind.cpp
-#, fuzzy
msgid "Result"
-msgstr "সাহাযà§à¦¯ অনà§à¦¸à¦¨à§à¦§à¦¾à¦¨ করà§à¦¨"
+msgstr "ফলাফল"
#: core/command_queue_mt.cpp core/message_queue.cpp main/main.cpp
msgid "Memory"
-msgstr ""
+msgstr "সà§à¦®à§ƒà¦¤à¦¿"
#: core/command_queue_mt.cpp core/message_queue.cpp
#: core/register_core_types.cpp drivers/gles2/rasterizer_canvas_base_gles2.cpp
@@ -207,7 +196,7 @@ msgstr ""
#: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h
#: servers/visual_server.cpp
msgid "Limits"
-msgstr ""
+msgstr "সীমাগà§à¦²à§‹"
#: core/command_queue_mt.cpp
#, fuzzy
@@ -216,7 +205,7 @@ msgstr "টান: ঘূরà§à¦£à¦¨"
#: core/command_queue_mt.cpp
msgid "Multithreading Queue Size (KB)"
-msgstr ""
+msgstr "মালà§à¦Ÿà¦¿à¦¥à§à¦°à§‡à¦¡à¦¿à¦‚ সারি আকার (KB)"
#: core/func_ref.cpp modules/visual_script/visual_script_builtin_funcs.cpp
#: modules/visual_script/visual_script_func_nodes.cpp
@@ -229,12 +218,13 @@ msgstr "ফাংশনগà§à¦²à¦¿:"
#: core/image.cpp core/packed_data_container.cpp scene/2d/polygon_2d.cpp
#: scene/3d/baked_lightmap.cpp scene/3d/gi_probe.cpp
msgid "Data"
-msgstr ""
+msgstr "তথà§à¦¯"
#: core/io/file_access_network.cpp core/register_core_types.cpp
-#: editor/editor_settings.cpp main/main.cpp
+#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
#: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h
+#: scene/gui/file_dialog.cpp
#, fuzzy
msgid "Network"
msgstr "পà§à¦°à¦•লà§à¦ª à¦à¦•à§à¦¸à¦ªà§‹à¦°à§à¦Ÿ করà§à¦¨"
@@ -245,9 +235,8 @@ msgid "Remote FS"
msgstr "অপসারণ করà§à¦¨"
#: core/io/file_access_network.cpp
-#, fuzzy
msgid "Page Size"
-msgstr "পাতা: "
+msgstr "পাতা"
#: core/io/file_access_network.cpp
msgid "Page Read Ahead"
@@ -394,6 +383,16 @@ msgstr ""
msgid "Max Size (KB)"
msgstr ""
+#: core/os/input.cpp
+#, fuzzy
+msgid "Mouse Mode"
+msgstr "মোড (Mode) সরান"
+
+#: core/os/input.cpp
+#, fuzzy
+msgid "Use Accumulated Input"
+msgstr "ইনপà§à¦Ÿ অপসারণ করà§à¦¨"
+
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: servers/audio_server.cpp
msgid "Device"
@@ -596,7 +595,8 @@ msgstr "বরà§à¦£à¦¨à¦¾:"
#: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
-#: main/main.cpp
+#: main/main.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp
msgid "Run"
msgstr "চালান"
@@ -688,6 +688,11 @@ msgid "Main Run Args"
msgstr "পà§à¦°à¦§à¦¾à¦¨ দৃশà§à¦¯à§‡à¦° মান/আরà§à¦—à§à¦®à§‡à¦¨à§à¦Ÿ-সমূহ:"
#: core/project_settings.cpp
+#, fuzzy
+msgid "Scene Naming"
+msgstr "দৃশà§à¦¯à§‡à¦° পথ:"
+
+#: core/project_settings.cpp
msgid "Search In File Extensions"
msgstr ""
@@ -695,20 +700,15 @@ msgstr ""
msgid "Script Templates Search Path"
msgstr ""
-#: core/project_settings.cpp editor/editor_node.cpp
-#: editor/plugins/version_control_editor_plugin.cpp
+#: core/project_settings.cpp
#, fuzzy
-msgid "Version Control"
+msgid "Version Control Autoload On Startup"
msgstr "সংসà§à¦•রণ:"
#: core/project_settings.cpp
-msgid "Autoload On Startup"
-msgstr ""
-
-#: core/project_settings.cpp
#, fuzzy
-msgid "Plugin Name"
-msgstr "পà§à¦²à¦¾à¦—ইন-সমূহ"
+msgid "Version Control Plugin Name"
+msgstr "সংসà§à¦•রণ:"
#: core/project_settings.cpp scene/2d/collision_object_2d.cpp
#: scene/3d/collision_object.cpp scene/gui/control.cpp
@@ -826,7 +826,8 @@ msgid "Quality"
msgstr ""
#: core/project_settings.cpp scene/gui/file_dialog.cpp
-#: scene/main/scene_tree.cpp servers/visual_server.cpp
+#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp
+#: servers/visual_server.cpp
#, fuzzy
msgid "Filters"
msgstr "ফিলà§à¦Ÿà¦¾à¦°à¦¸à¦®à§‚হ"
@@ -2301,8 +2302,8 @@ msgid "Open"
msgstr "খà§à¦²à§à¦¨"
#: editor/dependency_editor.cpp
-msgid "Owners Of:"
-msgstr "সà§à¦¬à¦¤à§à¦¬à¦¾à¦§à¦¿à¦•ারীসমূহ:"
+msgid "Owners of: %s (Total: %d)"
+msgstr ""
#: editor/dependency_editor.cpp
#, fuzzy
@@ -2617,7 +2618,7 @@ msgid "Bus Options"
msgstr "বাস অপশন"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/scene_tree_dock.cpp
+#: editor/project_export.cpp editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "ডà§à¦ªà§à¦²à¦¿à¦•েট"
@@ -2888,6 +2889,25 @@ msgid "Choose"
msgstr "পছনà§à¦¦ করà§à¦¨"
#: editor/editor_export.cpp
+msgid "Project export for platform:"
+msgstr ""
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Completed with errors."
+msgstr "পথ পà§à¦°à¦¤à¦¿à¦²à¦¿à¦ªà¦¿/কপি করà§à¦¨"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Completed successfully."
+msgstr "পà§à¦¯à¦¾à¦•েজ ইনà§à¦¸à¦Ÿà¦² সমà§à¦ªà¦¨à§à¦¨ হয়েছে!"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed."
+msgstr "বà§à¦¯à¦°à§à¦¥:"
+
+#: editor/editor_export.cpp
msgid "Storing File:"
msgstr "সংরকà§à¦·à¦¿à¦¤ ফাইল:"
@@ -2903,6 +2923,31 @@ msgid "Packing"
msgstr "পà§à¦¯à¦¾à¦•/গà§à¦šà§à¦›à¦¿à¦¤ করা"
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save PCK"
+msgstr "à¦à¦‡à¦°à§‚পে সংরকà§à¦·à¦£ করà§à¦¨"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Cannot create file \"%s\"."
+msgstr "ফোলà§à¦¡à¦¾à¦° তৈরী করা সমà§à¦­à¦¬ হয়নি।"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to export project files."
+msgstr "টাইলটি খà§à¦à¦œà§‡ পাওয়া যায়নি:"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Can't open file to read from path \"%s\"."
+msgstr "লেখার জনà§à¦¯ ফাইলটি খোলায় সমসà§à¦¯à¦¾ হয়েছে:"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save ZIP"
+msgstr "à¦à¦‡à¦°à§‚পে সংরকà§à¦·à¦£ করà§à¦¨"
+
+#: editor/editor_export.cpp
msgid ""
"Target platform requires 'ETC' texture compression for GLES2. Enable 'Import "
"Etc' in Project Settings."
@@ -3009,12 +3054,32 @@ msgstr "সà§à¦¬à¦¨à¦¿à¦°à§à¦®à¦¿à¦¤ ডিবাগ (debug) পà§à¦¯à¦¾à¦•à§
msgid "Custom release template not found."
msgstr "সà§à¦¬à¦¨à¦¿à¦°à§à¦®à¦¿à¦¤ রিলিস (release) পà§à¦¯à¦¾à¦•েজ খà§à¦à¦œà§‡ পাওয়া যায়নি।"
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Prepare Template"
+msgstr "à¦à¦•à§à¦¸à¦ªà§‹à¦°à§à¦Ÿ টেমপà§à¦²à§‡à¦Ÿà¦¸à¦®à§‚হ লোড হচà§à¦›à§‡"
+
+#: editor/editor_export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "The given export path doesn't exist."
+msgstr "ফাইলটি বিদà§à¦¯à¦®à¦¾à¦¨ নয়।"
+
#: editor/editor_export.cpp platform/javascript/export/export.cpp
#, fuzzy
-msgid "Template file not found:"
+msgid "Template file not found: \"%s\"."
msgstr "টেমপà§à¦²à§‡à¦Ÿ ফাইল পাওয়া যায়নি:\n"
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to copy export template."
+msgstr "à¦à¦•à§à¦¸à¦ªà§‹à¦°à§à¦Ÿà§‡à¦° টেমপà§à¦²à§‡à¦Ÿà¦¸à¦®à§‚হ ইনà§à¦¸à¦Ÿà¦² করà§à¦¨"
+
+#: editor/editor_export.cpp platform/windows/export/export.cpp
+#: platform/x11/export/export.cpp
+msgid "PCK Embedding"
+msgstr ""
+
+#: editor/editor_export.cpp
msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB."
msgstr ""
@@ -3204,9 +3269,9 @@ msgid "Import"
msgstr "ইমà§à¦ªà§‹à¦°à§à¦Ÿ"
#: editor/editor_feature_profile.cpp editor/project_export.cpp
-#: platform/android/export/export.cpp platform/javascript/export/export.cpp
-#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
-#: platform/windows/export/export.cpp
+#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#: platform/uwp/export/export.cpp platform/windows/export/export.cpp
msgid "Export"
msgstr "à¦à¦•à§à¦¸à¦ªà§‹à¦°à§à¦Ÿ"
@@ -4431,15 +4496,6 @@ msgid ""
"Unable to write to file '%s', file in use, locked or lacking permissions."
msgstr ""
-#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
-msgid "Scene"
-msgstr "দৃশà§à¦¯"
-
-#: editor/editor_node.cpp
-#, fuzzy
-msgid "Scene Naming"
-msgstr "দৃশà§à¦¯à§‡à¦° পথ:"
-
#: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp
#: servers/arvr/arvr_interface.cpp
#, fuzzy
@@ -4570,6 +4626,11 @@ msgstr ""
#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
#, fuzzy
+msgid "Version Control"
+msgstr "সংসà§à¦•রণ:"
+
+#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
+#, fuzzy
msgid "Username"
msgstr "পà§à¦¨à¦ƒà¦¨à¦¾à¦®à¦•রণ করà§à¦¨"
@@ -4599,6 +4660,10 @@ msgstr "বিকà§à¦·à§‡à¦ª-হীন মোড"
msgid "Add a new scene."
msgstr "নতà§à¦¨ টà§à¦°à§à¦¯à¦¾à¦•/পথ-সমূহ যোগ করà§à¦¨à¥¤"
+#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
+msgid "Scene"
+msgstr "দৃশà§à¦¯"
+
#: editor/editor_node.cpp
msgid "Go to previously opened scene."
msgstr "পূরà§à¦¬à§‡ খোলা দৃশà§à¦¯à§‡ যান।"
@@ -5425,6 +5490,11 @@ msgstr ""
"কাংখিত পà§à¦²à§à¦¯à¦¾à¦Ÿà¦«à¦°à§à¦®à§‡à¦° জনà§à¦¯ গà§à¦°à¦¹à¦£à¦¯à§‹à¦—à§à¦¯ কোন à¦à¦•à§à¦¸à¦ªà§‹à¦°à§à¦Ÿ পà§à¦°à¦¿à¦¸à§‡à¦Ÿ খà§à¦à¦œà§‡ পাওয়া যায়নি।\n"
"অনà§à¦—à§à¦°à¦¹ করে à¦à¦•à§à¦¸à¦ªà§‹à¦°à§à¦Ÿ মেনà§à¦¤à§‡ à¦à¦•টি সঠিক পà§à¦°à¦¿à¦¸à§‡à¦Ÿ যোগ করà§à¦¨à¥¤"
+#: editor/editor_run_native.cpp
+#, fuzzy
+msgid "Project Run"
+msgstr "নতà§à¦¨ পà§à¦°à¦•লà§à¦ª"
+
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
msgstr "আপনার লজিক/যà§à¦•à§à¦¤à¦¿-সমূহ _run() মেথডে লিখà§à¦¨à¥¤"
@@ -5708,7 +5778,9 @@ msgid "Draw Spaces"
msgstr "ডà§à¦° কলস"
#: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp
-#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp
+#: scene/main/scene_tree.cpp scene/resources/world.cpp
+#: scene/resources/world_2d.cpp
#, fuzzy
msgid "Navigation"
msgstr "Navigation Mesh তৈরি করà§à¦¨"
@@ -7281,7 +7353,7 @@ msgstr ""
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp
-#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp
+#: scene/gui/control.cpp
#, fuzzy
msgid "Filter"
msgstr "ফিলà§à¦Ÿà¦¾à¦°à¦¸à¦®à§‚হ"
@@ -7582,6 +7654,18 @@ msgid "Saving..."
msgstr "সংরকà§à¦·à¦¿à¦¤ হচà§à¦›à§‡..."
#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used as a normal map in 3D. Enabling red-green "
+"texture compression to reduce memory usage (blue channel is discarded)."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap "
+"generation and VRAM texture compression."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
msgid "2D, Detect 3D"
msgstr ""
@@ -8320,11 +8404,20 @@ msgid "New Anim"
msgstr "নতà§à¦¨ অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+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 "Rename Animation"
+msgstr "অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨ পà§à¦¨à¦ƒà¦¨à¦¾à¦®à¦•রণ করà§à¦¨"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Delete Animation?"
msgstr "Delete অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨?"
@@ -8344,11 +8437,6 @@ 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 "Duplicate Animation"
msgstr "অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨ পà§à¦°à¦¤à¦¿à¦²à¦¿à¦ªà¦¿ করà§à¦¨"
@@ -8500,10 +8588,6 @@ msgid "Pin AnimationPlayer"
msgstr "অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨ পà§à¦°à¦¤à¦¿à¦²à§‡à¦ªà¦¨ করà§à¦¨"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Create New Animation"
-msgstr "নতà§à¦¨ অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨ তৈরি করà§à¦¨"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Name:"
msgstr "অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨à§‡à¦° নাম:"
@@ -10760,6 +10844,7 @@ msgid "Points"
msgstr "বিনà§à¦¦à§ সরান"
#: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp
+#: scene/resources/navigation_mesh.cpp
#, fuzzy
msgid "Polygons"
msgstr "পলিগন->UV"
@@ -12263,7 +12348,7 @@ msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
#, fuzzy
-msgid "Convert to Mesh2D"
+msgid "Convert to MeshInstance2D"
msgstr "à¦à¦¤à§‡ রূপানà§à¦¤à¦° করà§à¦¨..."
#: editor/plugins/sprite_editor_plugin.cpp
@@ -13367,8 +13452,7 @@ msgid "Select the previous shape, subtile, or Tile."
msgstr ""
#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp
-#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp
-#: scene/resources/texture.cpp
+#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp
#, fuzzy
msgid "Region"
msgstr "চালানোর মোড:"
@@ -14929,36 +15013,12 @@ 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
#, fuzzy
msgid "Exporting All"
msgstr "%s à¦à¦° জনà§à¦¯ à¦à¦•à§à¦¸à¦ªà§‹à¦°à§à¦Ÿ (export) হচà§à¦›à§‡"
#: editor/project_export.cpp
#, fuzzy
-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
-#, fuzzy
msgid "Export Path"
msgstr "à¦à¦•à§à¦¸à¦ªà§‹à¦°à§à¦Ÿà§‡à¦° পà§à¦°à¦¿à¦¸à§‡à¦Ÿ:"
@@ -15115,6 +15175,11 @@ msgstr "à¦à¦‡ পà§à¦²à§à¦¯à¦¾à¦Ÿà¦«à¦°à§à¦®à§‡à¦° জনà§à¦¯ দরকা
#: editor/project_export.cpp
#, fuzzy
+msgid "Project Export"
+msgstr "পà§à¦°à¦œà§‡à¦•à§à¦Ÿ ফাউনà§à¦¡à¦¾à¦°"
+
+#: editor/project_export.cpp
+#, fuzzy
msgid "Manage Export Templates"
msgstr "à¦à¦•à§à¦¸à¦ªà§‹à¦°à§à¦Ÿ টেমপà§à¦²à§‡à¦Ÿà¦¸à¦®à§‚হ লোড হচà§à¦›à§‡"
@@ -17628,7 +17693,7 @@ msgstr ""
#: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp
#: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp
-#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp
+#: scene/3d/collision_polygon.cpp
#, fuzzy
msgid "Polygon"
msgstr "পলিগন->UV"
@@ -18260,7 +18325,6 @@ msgid "Use In Baked Light"
msgstr "লাইটà§à¦®à§à¦¯à¦¾à¦ªà§‡ হসà§à¦¤à¦¾à¦¨à§à¦¤à¦° করà§à¦¨:"
#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
-#: scene/resources/navigation_mesh.cpp
msgid "Cell"
msgstr ""
@@ -18290,6 +18354,19 @@ msgstr "নিরà§à¦¬à¦¾à¦šà¦¨à¦•ে কেনà§à¦¦à§à¦°à§€à¦­à§‚ত করà
msgid "Mask"
msgstr ""
+#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
+#, fuzzy
+msgid "Bake Navigation"
+msgstr "Navigation Mesh তৈরি করà§à¦¨"
+
+#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp
+#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp
+#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp
+#: scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Navigation Layers"
+msgstr "Navigation Mesh তৈরি করà§à¦¨"
+
#: modules/gridmap/grid_map_editor_plugin.cpp
#, fuzzy
msgid "Next Plane"
@@ -19929,10 +20006,6 @@ 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."
@@ -20037,12 +20110,16 @@ msgstr ""
msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version."
msgstr ""
+#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Code Signing"
+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."
+"'apksigner' could not be found. Please check that the command is available "
+"in the Android SDK build-tools directory. The resulting %s is unsigned."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -20062,6 +20139,11 @@ msgid "Could not find keystore, unable to export."
msgstr "ফোলà§à¦¡à¦¾à¦° তৈরী করা সমà§à¦­à¦¬ হয়নি।"
#: platform/android/export/export_plugin.cpp
+#, fuzzy
+msgid "Could not start apksigner executable."
+msgstr "উপ-পà§à¦°à¦•à§à¦°à¦¿à¦¯à¦¼à¦¾à¦•ে শà§à¦°à§ করা সমà§à¦­à¦¬ হয়নি!"
+
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
@@ -20092,7 +20174,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Unsupported export format!\n"
+msgid "Unsupported export format!"
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -20103,20 +20185,18 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Android build version mismatch:\n"
-" Template installed: %s\n"
-" Godot Version: %s\n"
+"Android build version mismatch: Template installed: %s, Godot version: %s. "
"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"
+"Unable to overwrite res://android/build/res/*.xml files with project name."
msgstr ""
#: platform/android/export/export_plugin.cpp
#, fuzzy
-msgid "Could not export project files to gradle project\n"
+msgid "Could not export project files to gradle project."
msgstr "পà§à¦°à¦•লà§à¦ªà§‡à¦° পথে engine.cfg তৈরি করা সমà§à¦­à¦¬ হয়নি।"
#: platform/android/export/export_plugin.cpp
@@ -20130,7 +20210,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Building of Android project failed, check output for the error.\n"
+"Building of Android project failed, check output for the error. "
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
@@ -20146,7 +20226,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
#, fuzzy
-msgid "Package not found: %s"
+msgid "Package not found: \"%s\"."
msgstr "অà§à¦¯à¦¾à¦¨à¦¿à¦®à§‡à¦¶à¦¨à§‡à¦° সরঞà§à¦œà¦¾à¦®à¦¸à¦®à§‚হ"
#: platform/android/export/export_plugin.cpp
@@ -20156,15 +20236,12 @@ msgstr "ওকটà§à¦°à§€ (octree) গঠনবিনà§à¦¯à¦¾à¦¸ তৈরি
#: platform/android/export/export_plugin.cpp
#, fuzzy
-msgid ""
-"Could not find template APK to export:\n"
-"%s"
+msgid "Could not find template APK to export: \"%s\"."
msgstr "ফোলà§à¦¡à¦¾à¦° তৈরী করা সমà§à¦­à¦¬ হয়নি।"
#: platform/android/export/export_plugin.cpp
msgid ""
-"Missing libraries in the export template for the selected architectures: "
-"%s.\n"
+"Missing libraries in the export template for the selected architectures: %s. "
"Please build a template with all required libraries, or uncheck the missing "
"architectures in the export preset."
msgstr ""
@@ -20176,7 +20253,7 @@ msgstr "%s সংযà§à¦•à§à¦¤ হচà§à¦›à§‡..."
#: platform/android/export/export_plugin.cpp
#, fuzzy
-msgid "Could not export project files"
+msgid "Could not export project files."
msgstr "টাইলটি খà§à¦à¦œà§‡ পাওয়া যায়নি:"
#: platform/android/export/export_plugin.cpp
@@ -20419,6 +20496,17 @@ msgstr "নোড-সমূহ করà§à¦¤à¦¨/কাট করà§à¦¨"
msgid "Custom BG Color"
msgstr "নোড-সমূহ করà§à¦¤à¦¨/কাট করà§à¦¨"
+#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Prepare Templates"
+msgstr "à¦à¦•à§à¦¸à¦ªà§‹à¦°à§à¦Ÿ টেমপà§à¦²à§‡à¦Ÿà¦¸à¦®à§‚হ লোড হচà§à¦›à§‡"
+
+#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Export template not found."
+msgstr "সà§à¦¬à¦¨à¦¿à¦°à§à¦®à¦¿à¦¤ রিলিস (release) পà§à¦¯à¦¾à¦•েজ খà§à¦à¦œà§‡ পাওয়া যায়নি।"
+
#: platform/iphone/export/export.cpp
msgid "App Store Team ID not specified - cannot configure the project."
msgstr ""
@@ -20443,25 +20531,34 @@ msgstr ""
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not open template for export:"
+msgid "Could not open template for export: \"%s\"."
msgstr "ফোলà§à¦¡à¦¾à¦° তৈরী করা সমà§à¦­à¦¬ হয়নি।"
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Invalid export template:"
+msgid "Invalid export template: \"%s\"."
msgstr "à¦à¦•à§à¦¸à¦ªà§‹à¦°à§à¦Ÿà§‡à¦° টেমপà§à¦²à§‡à¦Ÿà¦¸à¦®à§‚হ ইনà§à¦¸à¦Ÿà¦² করà§à¦¨"
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not write file:"
+msgid "Could not write file: \"%s\"."
msgstr "টাইলটি খà§à¦à¦œà§‡ পাওয়া যায়নি:"
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Icon Creation"
+msgstr "হà§à¦¯à¦¾à¦¨à§à¦¡à§‡à¦² সà§à¦¥à¦¾à¦ªà¦¨ করà§à¦¨"
+
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not read file:"
+msgid "Could not read file: \"%s\"."
msgstr "টাইলটি খà§à¦à¦œà§‡ পাওয়া যায়নি:"
#: platform/javascript/export/export.cpp
+msgid "PWA"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
#, fuzzy
msgid "Variant"
msgstr "বিচà§à¦›à§‡à¦¦:"
@@ -20537,17 +20634,17 @@ msgstr ""
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not read HTML shell:"
+msgid "Could not read HTML shell: \"%s\"."
msgstr "টাইলটি খà§à¦à¦œà§‡ পাওয়া যায়নি:"
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not create HTTP server directory:"
+msgid "Could not create HTTP server directory: %s."
msgstr "ফোলà§à¦¡à¦¾à¦° তৈরী করা সমà§à¦­à¦¬ হয়নি।"
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Error starting HTTP server:"
+msgid "Error starting HTTP server: %d."
msgstr "দৃশà§à¦¯ সংরকà§à¦·à¦£à§‡ সমসà§à¦¯à¦¾ হয়েছে।"
#: platform/javascript/export/export.cpp
@@ -20846,9 +20943,28 @@ msgid "Apple Team ID"
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open icon file \"%s\"."
+msgstr "টাইলটি খà§à¦à¦œà§‡ পাওয়া যায়নি:"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start xcrun executable."
+msgstr "উপ-পà§à¦°à¦•à§à¦°à¦¿à¦¯à¦¼à¦¾à¦•ে শà§à¦°à§ করা সমà§à¦­à¦¬ হয়নি!"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization failed."
+msgstr "সà§à¦¥à¦¾à¦¨à§€à¦¯à¦¼à¦•রণ"
+
+#: platform/osx/export/export.cpp
+msgid "Notarization request UUID: \"%s\""
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid ""
-"Note: The notarization process generally takes less than an hour. When the "
-"process is completed, you'll receive an email."
+"The notarization process generally takes less than an hour. When the process "
+"is completed, you'll receive an email."
msgstr ""
#: platform/osx/export/export.cpp
@@ -20864,21 +20980,76 @@ msgid ""
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign failed with error \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign require regex module."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Could not start codesign executable, make sure Xcode command line tools are "
+"installed."
+msgstr ""
+
+#: platform/osx/export/export.cpp platform/windows/export/export.cpp
#, fuzzy
msgid "No identity found."
msgstr "খà§à¦à¦œà§‡ পাওয়া যায়নি!"
#: platform/osx/export/export.cpp
#, fuzzy
+msgid "Cannot sign file %s."
+msgstr "TileSet সংরকà§à¦·à¦£à§‡ সমসà§à¦¯à¦¾ হয়েছে!"
+
+#: platform/osx/export/export.cpp
+msgid "Relative symlinks are not supported, exported \"%s\" might be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "DMG Creation"
+msgstr "অংশাদি:"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start hdiutil executable."
+msgstr "উপ-পà§à¦°à¦•à§à¦°à¦¿à¦¯à¦¼à¦¾à¦•ে শà§à¦°à§ করা সমà§à¦­à¦¬ হয়নি!"
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed - file exists."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
msgid "Creating app bundle"
msgstr "থামà§à¦¬à¦¨à§‡à¦‡à¦² তৈরি হচà§à¦›à§‡"
#: platform/osx/export/export.cpp
#, fuzzy
-msgid "Could not find template app to export:"
+msgid "Could not find template app to export: \"%s\"."
msgstr "ফোলà§à¦¡à¦¾à¦° তৈরী করা সমà§à¦­à¦¬ হয়নি।"
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid export format."
+msgstr "à¦à¦•à§à¦¸à¦ªà§‹à¦°à§à¦Ÿà§‡à¦° টেমপà§à¦²à§‡à¦Ÿà¦¸à¦®à§‚হ ইনà§à¦¸à¦Ÿà¦² করà§à¦¨"
+
+#: platform/osx/export/export.cpp
msgid ""
"Relative symlinks are not supported on this OS, the exported project might "
"be broken!"
@@ -20886,7 +21057,7 @@ msgstr ""
#: platform/osx/export/export.cpp
msgid ""
-"Requested template binary '%s' not found. It might be missing from your "
+"Requested template binary \"%s\" not found. It might be missing from your "
"template archive."
msgstr ""
@@ -20928,6 +21099,16 @@ msgstr ""
#: platform/osx/export/export.cpp
#, fuzzy
+msgid "ZIP Creation"
+msgstr "নতà§à¦¨ পà§à¦°à¦•লà§à¦ª"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open file to read from path \"%s\"."
+msgstr "পà§à¦°à¦•লà§à¦ªà§‡à¦° পথে engine.cfg তৈরি করা সমà§à¦­à¦¬ হয়নি।"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
msgid "Invalid bundle identifier:"
msgstr "নামটি কারà§à¦¯à¦•র সনাকà§à¦¤à¦•ারী নয়:"
@@ -21241,6 +21422,11 @@ msgid "Debug Algorithm"
msgstr "ডিবাগার"
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to rename temporary file \"%s\"."
+msgstr "থিমটি ফাইলে সংরকà§à¦·à¦£ করা সমà§à¦­à¦¬ হয়নি:"
+
+#: platform/windows/export/export.cpp
msgid "Identity Type"
msgstr ""
@@ -21288,6 +21474,70 @@ msgid "Trademarks"
msgstr ""
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Resources Modification"
+msgstr "যথেচà§à¦› ঘূরà§à¦£à¦¾à§Ÿà¦¨:"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find rcedit executable at \"%s\"."
+msgstr "ফোলà§à¦¡à¦¾à¦° তৈরী করা সমà§à¦­à¦¬ হয়নি।"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find wine executable at \"%s\"."
+msgstr "ফোলà§à¦¡à¦¾à¦° তৈরী করা সমà§à¦­à¦¬ হয়নি।"
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start rcedit executable, configure rcedit path in the Editor "
+"Settings (Export > Windows > Rcedit)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"rcedit failed to modify executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find signtool executable at \"%s\"."
+msgstr "ফোলà§à¦¡à¦¾à¦° তৈরী করা সমà§à¦­à¦¬ হয়নি।"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find osslsigncode executable at \"%s\"."
+msgstr "ফোলà§à¦¡à¦¾à¦° তৈরী করা সমà§à¦­à¦¬ হয়নি।"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid identity type."
+msgstr "নামটি কারà§à¦¯à¦•র সনাকà§à¦¤à¦•ারী নয়:"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid timestamp server."
+msgstr "অগà§à¦°à¦¹à¦¨à¦¯à§‹à¦—à§à¦¯ নাম।"
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start signtool executable, configure signtool path in the Editor "
+"Settings (Export > Windows > Signtool)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Signtool failed to sign executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to remove temporary file \"%s\"."
+msgstr "থিমটি ফাইলে সংরকà§à¦·à¦£ করা সমà§à¦­à¦¬ হয়নি:"
+
+#: platform/windows/export/export.cpp
msgid ""
"The rcedit tool must be configured in the Editor Settings (Export > Windows "
"> Rcedit) to change the icon or app information data."
@@ -21309,6 +21559,23 @@ msgid "Invalid product version:"
msgstr "পণà§à¦¯à§‡à¦° অগà§à¦°à¦¹à¦¨à¦¯à§‹à¦—à§à¦¯ GUID।"
#: platform/windows/export/export.cpp
+msgid "Windows executables cannot be >= 4 GiB."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+#, fuzzy
+msgid "Failed to open executable file \"%s\"."
+msgstr "অগà§à¦°à¦¹à¦£à¦¯à§‹à¦—à§à¦¯ à¦à¦•à§à¦¸à¦Ÿà§‡à¦¨à¦¶à¦¨"
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable file header corrupted."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable \"pck\" section not found."
+msgstr ""
+
+#: platform/windows/export/export.cpp
#, fuzzy
msgid "Windows"
msgstr "উইনà§à¦¡à§‹"
@@ -21325,6 +21592,10 @@ msgstr ""
msgid "Wine"
msgstr ""
+#: platform/x11/export/export.cpp
+msgid "32-bit executables cannot have embedded data >= 4 GiB."
+msgstr ""
+
#: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp
#: scene/resources/texture.cpp
#, fuzzy
@@ -21453,7 +21724,8 @@ msgstr ""
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/3d/light.cpp scene/3d/reflection_probe.cpp
-#: scene/3d/visual_instance.cpp scene/resources/material.cpp
+#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp
+#: scene/resources/material.cpp
#, fuzzy
msgid "Max Distance"
msgstr "ইনà§à¦¸à¦Ÿà§à¦¯à¦¾à¦¨à§à¦¸:"
@@ -22254,6 +22526,18 @@ msgstr ""
msgid "Edge Connection Margin"
msgstr "সংযোগসমূহ সমà§à¦ªà¦¾à¦¦à¦¨ করà§à¦¨"
+#: scene/2d/navigation_2d.cpp
+msgid ""
+"'Navigation2D' node and 'Navigation2D.get_simple_path()' are deprecated and "
+"will be removed in a future version. Use 'Navigation2DServer.map_get_path()' "
+"instead."
+msgstr ""
+
+#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
+#, fuzzy
+msgid "Path Desired Distance"
+msgstr "ইনà§à¦¸à¦Ÿà§à¦¯à¦¾à¦¨à§à¦¸:"
+
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
msgid "Target Desired Distance"
msgstr ""
@@ -22310,17 +22594,19 @@ msgstr ""
"করতে হবে। অনà§à¦—à§à¦°à¦¹ করে à¦à¦•টি বৈশিষà§à¦Ÿà§à¦¯ নিরà§à¦§à¦¾à¦°à¦¨ করà§à¦¨ বা à¦à¦•টি পলিগন/বহà§à¦­à§à¦œ আà¦à¦•à§à¦¨à¥¤"
#: scene/2d/navigation_polygon.cpp
-msgid ""
-"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
-"node. It only provides navigation data."
-msgstr ""
-"NavigationPolygonInstance-কে অবশà§à¦¯à¦‡ Navigation2D-à¦à¦° অংশ অথবা অংশের অংশ হতে "
-"হবে। à¦à¦Ÿà¦¾ শà§à¦§à§à¦®à¦¾à¦¤à§à¦° নà§à¦¯à¦¾à¦­à¦¿à¦—েশনের তথà§à¦¯ পà§à¦°à¦¦à¦¾à¦¨ করে।"
-
-#: scene/2d/navigation_polygon.cpp
msgid "Navpoly"
msgstr ""
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Enter Cost"
+msgstr "নিমà§à¦¨"
+
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Travel Cost"
+msgstr "ভà§à¦°à¦®à¦£"
+
#: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp
#: scene/main/canvas_layer.cpp
#, fuzzy
@@ -23505,6 +23791,13 @@ msgstr ""
msgid "Transform Normals"
msgstr "রà§à¦ªà¦¾à¦¨à§à¦¤à¦° নিষà§à¦«à¦²à¦¾ করা হয়েছে।"
+#: scene/3d/navigation.cpp
+msgid ""
+"'Navigation' node and 'Navigation.get_simple_path()' are deprecated and will "
+"be removed in a future version. Use 'NavigationServer.map_get_path()' "
+"instead."
+msgstr ""
+
#: scene/3d/navigation.cpp scene/resources/curve.cpp
#, fuzzy
msgid "Up Vector"
@@ -23528,14 +23821,6 @@ msgid ""
"The NavigationAgent can be used only under a Spatial inheriting parent node."
msgstr ""
-#: scene/3d/navigation_mesh_instance.cpp
-msgid ""
-"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
-"It only provides navigation data."
-msgstr ""
-"NavigationMeshInstance-কে অবশà§à¦¯à¦‡ Navigation-à¦à¦° অংশ অথবা অংশের অংশ হতে হবে। "
-"à¦à¦Ÿà¦¾ শà§à¦§à§à¦®à¦¾à¦¤à§à¦° নà§à¦¯à¦¾à¦­à¦¿à¦—েশনের তথà§à¦¯ পà§à¦°à¦¦à¦¾à¦¨ করে।"
-
#: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp
#, fuzzy
msgid "NavMesh"
@@ -26214,6 +26499,16 @@ msgid "3D Physics"
msgstr "সà§à¦¥à¦¿à¦°/বদà§à¦§ ফà§à¦°à§‡à¦® %"
#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "2D Navigation"
+msgstr "Navigation Mesh তৈরি করà§à¦¨"
+
+#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "3D Navigation"
+msgstr "Navigation Mesh তৈরি করà§à¦¨"
+
+#: scene/register_scene_types.cpp
msgid "Use hiDPI"
msgstr ""
@@ -27637,7 +27932,7 @@ msgstr "টà§à¦°à§à¦¯à¦¾à¦¨à¦œà¦¿à¦¶à¦¨/সà§à¦¥à¦¾à¦¨à¦¾à¦¨à§à¦¤à¦°à¦£"
msgid "Refraction"
msgstr "বিচà§à¦›à§‡à¦¦:"
-#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp
+#: scene/resources/material.cpp
msgid "Detail"
msgstr ""
@@ -27722,7 +28017,12 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
-msgid "Sample Partition Type"
+msgid "Sampling"
+msgstr "সà§à¦•েল/মাপ:"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Partition Type"
msgstr "চলক/ভেরিয়েবল সমà§à¦ªà¦¾à¦¦à¦¨ করà§à¦¨:"
#: scene/resources/navigation_mesh.cpp
@@ -27740,10 +28040,15 @@ msgid "Source Group Name"
msgstr "উৎস:"
#: scene/resources/navigation_mesh.cpp
-msgid "Agent"
+msgid "Cells"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Agents"
+msgstr "পà§à¦°à¦§à¦¾à¦¨ দৃশà§à¦¯à§‡à¦° মান/আরà§à¦—à§à¦®à§‡à¦¨à§à¦Ÿ-সমূহ:"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Max Climb"
msgstr ""
@@ -27753,11 +28058,16 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
+msgid "Regions"
+msgstr "চালানোর মোড:"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
msgid "Merge Size"
msgstr "দৃশà§à¦¯ হতে à¦à¦•তà§à¦°à¦¿à¦¤ করবেন"
#: scene/resources/navigation_mesh.cpp
-msgid "Edge"
+msgid "Edges"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -27771,6 +28081,11 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
+msgid "Details"
+msgstr "লোড ডিফলà§à¦Ÿ"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
msgid "Sample Distance"
msgstr "ইনà§à¦¸à¦Ÿà§à¦¯à¦¾à¦¨à§à¦¸:"
@@ -27788,9 +28103,19 @@ msgid "Ledge Spans"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Filter Walkable Low Height Spans"
+msgid "Walkable Low Height Spans"
msgstr ""
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB"
+msgstr "AABB উৎপনà§à¦¨ করà§à¦¨"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB Offset"
+msgstr "অফসেট/ভারসামà§à¦¯:"
+
#: scene/resources/occluder_shape.cpp
msgid "Spheres"
msgstr ""
@@ -28204,6 +28529,11 @@ msgid "Scenario"
msgstr "দৃশà§à¦¯"
#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Navigation Map"
+msgstr "Navigation Mesh তৈরি করà§à¦¨"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
msgid "Direct Space State"
msgstr ""
@@ -28221,6 +28551,26 @@ msgstr "রৈখিক/লিনিয়ার"
msgid "Default Angular Damp"
msgstr ""
+#: scene/resources/world.cpp
+#, fuzzy
+msgid "Default Map Up"
+msgstr "সাধারণ/ডিফলà§à¦Ÿ"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Size"
+msgstr "à¦à¦Ÿà¦²à¦¾à¦¸/মানচিতà§à¦°à¦¾à¦¬à¦²à§€ পà§à¦°à¦¿à¦­à¦¿à¦‰"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Height"
+msgstr "পরীকà§à¦·à¦¾à¦®à§‚লক উৎস"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Edge Connection Margin"
+msgstr "সংযোগসমূহ সমà§à¦ªà¦¾à¦¦à¦¨ করà§à¦¨"
+
#: scene/resources/world_2d.cpp
msgid "Canvas"
msgstr ""
@@ -28948,6 +29298,5 @@ msgid "Log Active Async Compiles Count"
msgstr ""
#: servers/visual_server.cpp
-#, fuzzy
msgid "Shader Cache Size (MB)"
-msgstr "Camera à¦à¦° আকার পরিবরà§à¦¤à¦¨ করà§à¦¨"
+msgstr "শেডার কà§à¦¯à¦¾à¦¸à§‡ আকার (MB)"
diff --git a/editor/translations/br.po b/editor/translations/br.po
index c98db2ab4a..c5d979fe2f 100644
--- a/editor/translations/br.po
+++ b/editor/translations/br.po
@@ -209,9 +209,10 @@ msgid "Data"
msgstr ""
#: core/io/file_access_network.cpp core/register_core_types.cpp
-#: editor/editor_settings.cpp main/main.cpp
+#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
#: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h
+#: scene/gui/file_dialog.cpp
msgid "Network"
msgstr ""
@@ -362,6 +363,15 @@ msgstr ""
msgid "Max Size (KB)"
msgstr ""
+#: core/os/input.cpp
+#, fuzzy
+msgid "Mouse Mode"
+msgstr "Roudenn Galv Metodenn"
+
+#: core/os/input.cpp
+msgid "Use Accumulated Input"
+msgstr ""
+
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: servers/audio_server.cpp
msgid "Device"
@@ -544,7 +554,8 @@ msgstr ""
#: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
-#: main/main.cpp
+#: main/main.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp
msgid "Run"
msgstr ""
@@ -627,24 +638,23 @@ msgid "Main Run Args"
msgstr ""
#: core/project_settings.cpp
-msgid "Search In File Extensions"
+msgid "Scene Naming"
msgstr ""
#: core/project_settings.cpp
-msgid "Script Templates Search Path"
+msgid "Search In File Extensions"
msgstr ""
-#: core/project_settings.cpp editor/editor_node.cpp
-#: editor/plugins/version_control_editor_plugin.cpp
-msgid "Version Control"
+#: core/project_settings.cpp
+msgid "Script Templates Search Path"
msgstr ""
#: core/project_settings.cpp
-msgid "Autoload On Startup"
+msgid "Version Control Autoload On Startup"
msgstr ""
#: core/project_settings.cpp
-msgid "Plugin Name"
+msgid "Version Control Plugin Name"
msgstr ""
#: core/project_settings.cpp scene/2d/collision_object_2d.cpp
@@ -752,7 +762,8 @@ msgid "Quality"
msgstr ""
#: core/project_settings.cpp scene/gui/file_dialog.cpp
-#: scene/main/scene_tree.cpp servers/visual_server.cpp
+#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp
+#: servers/visual_server.cpp
msgid "Filters"
msgstr ""
@@ -2160,7 +2171,7 @@ msgid "Open"
msgstr ""
#: editor/dependency_editor.cpp
-msgid "Owners Of:"
+msgid "Owners of: %s (Total: %d)"
msgstr ""
#: editor/dependency_editor.cpp
@@ -2451,7 +2462,7 @@ msgid "Bus Options"
msgstr ""
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/scene_tree_dock.cpp
+#: editor/project_export.cpp editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr ""
@@ -2707,6 +2718,22 @@ msgid "Choose"
msgstr ""
#: editor/editor_export.cpp
+msgid "Project export for platform:"
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Completed with errors."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Completed successfully."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Failed."
+msgstr ""
+
+#: editor/editor_export.cpp
msgid "Storing File:"
msgstr ""
@@ -2719,6 +2746,26 @@ msgid "Packing"
msgstr ""
#: editor/editor_export.cpp
+msgid "Save PCK"
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Cannot create file \"%s\"."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Failed to export project files."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Can't open file to read from path \"%s\"."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Save ZIP"
+msgstr ""
+
+#: editor/editor_export.cpp
msgid ""
"Target platform requires 'ETC' texture compression for GLES2. Enable 'Import "
"Etc' in Project Settings."
@@ -2821,8 +2868,25 @@ msgstr ""
msgid "Custom release template not found."
msgstr ""
+#: editor/editor_export.cpp
+msgid "Prepare Template"
+msgstr ""
+
+#: editor/editor_export.cpp platform/osx/export/export.cpp
+msgid "The given export path doesn't exist."
+msgstr ""
+
#: editor/editor_export.cpp platform/javascript/export/export.cpp
-msgid "Template file not found:"
+msgid "Template file not found: \"%s\"."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Failed to copy export template."
+msgstr ""
+
+#: editor/editor_export.cpp platform/windows/export/export.cpp
+#: platform/x11/export/export.cpp
+msgid "PCK Embedding"
msgstr ""
#: editor/editor_export.cpp
@@ -2993,9 +3057,9 @@ msgid "Import"
msgstr ""
#: editor/editor_feature_profile.cpp editor/project_export.cpp
-#: platform/android/export/export.cpp platform/javascript/export/export.cpp
-#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
-#: platform/windows/export/export.cpp
+#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#: platform/uwp/export/export.cpp platform/windows/export/export.cpp
msgid "Export"
msgstr ""
@@ -4074,14 +4138,6 @@ msgid ""
"Unable to write to file '%s', file in use, locked or lacking permissions."
msgstr ""
-#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
-msgid "Scene"
-msgstr ""
-
-#: editor/editor_node.cpp
-msgid "Scene Naming"
-msgstr ""
-
#: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp
#: servers/arvr/arvr_interface.cpp
msgid "Interface"
@@ -4197,6 +4253,10 @@ msgid "Default Color Picker Mode"
msgstr ""
#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
+msgid "Version Control"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
msgid "Username"
msgstr ""
@@ -4224,6 +4284,10 @@ msgstr ""
msgid "Add a new scene."
msgstr ""
+#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
+msgid "Scene"
+msgstr ""
+
#: editor/editor_node.cpp
msgid "Go to previously opened scene."
msgstr ""
@@ -4952,6 +5016,10 @@ msgid ""
"as runnable."
msgstr ""
+#: editor/editor_run_native.cpp
+msgid "Project Run"
+msgstr ""
+
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
msgstr ""
@@ -5210,7 +5278,9 @@ msgid "Draw Spaces"
msgstr ""
#: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp
-#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp
+#: scene/main/scene_tree.cpp scene/resources/world.cpp
+#: scene/resources/world_2d.cpp
msgid "Navigation"
msgstr ""
@@ -6600,7 +6670,7 @@ msgstr ""
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp
-#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp
+#: scene/gui/control.cpp
#, fuzzy
msgid "Filter"
msgstr "Aktivañ ar Roudenn"
@@ -6874,6 +6944,18 @@ msgid "Saving..."
msgstr ""
#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used as a normal map in 3D. Enabling red-green "
+"texture compression to reduce memory usage (blue channel is discarded)."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap "
+"generation and VRAM texture compression."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
msgid "2D, Detect 3D"
msgstr ""
@@ -7529,11 +7611,20 @@ msgid "New Anim"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+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 "Rename Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Delete Animation?"
msgstr ""
@@ -7551,11 +7642,6 @@ 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 "Duplicate Animation"
msgstr ""
@@ -7698,10 +7784,6 @@ msgid "Pin AnimationPlayer"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Create New Animation"
-msgstr ""
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Name:"
msgstr ""
@@ -9755,6 +9837,7 @@ msgid "Points"
msgstr ""
#: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp
+#: scene/resources/navigation_mesh.cpp
msgid "Polygons"
msgstr ""
@@ -11108,7 +11191,7 @@ msgid "Invalid geometry, can't replace by mesh."
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
-msgid "Convert to Mesh2D"
+msgid "Convert to MeshInstance2D"
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
@@ -12068,8 +12151,7 @@ msgid "Select the previous shape, subtile, or Tile."
msgstr ""
#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp
-#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp
-#: scene/resources/texture.cpp
+#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp
msgid "Region"
msgstr ""
@@ -13491,31 +13573,10 @@ 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 "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 "Export Path"
msgstr ""
@@ -13650,6 +13711,10 @@ msgid "Export templates for this platform are missing:"
msgstr ""
#: editor/project_export.cpp
+msgid "Project Export"
+msgstr ""
+
+#: editor/project_export.cpp
msgid "Manage Export Templates"
msgstr ""
@@ -15902,7 +15967,7 @@ msgstr ""
#: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp
#: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp
-#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp
+#: scene/3d/collision_polygon.cpp
msgid "Polygon"
msgstr ""
@@ -16466,7 +16531,6 @@ msgid "Use In Baked Light"
msgstr ""
#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
-#: scene/resources/navigation_mesh.cpp
msgid "Cell"
msgstr ""
@@ -16492,6 +16556,19 @@ msgstr ""
msgid "Mask"
msgstr ""
+#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
+#, fuzzy
+msgid "Bake Navigation"
+msgstr "Eilskoueriañ an Alc'whezh(ioù) Uhelsklaeriet"
+
+#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp
+#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp
+#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp
+#: scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Navigation Layers"
+msgstr "Talvoud :"
+
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Plane"
msgstr ""
@@ -17935,10 +18012,6 @@ 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."
@@ -18042,12 +18115,15 @@ msgstr ""
msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version."
msgstr ""
+#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp
+#: platform/windows/export/export.cpp
+msgid "Code Signing"
+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."
+"'apksigner' could not be found. Please check that the command is available "
+"in the Android SDK build-tools directory. The resulting %s is unsigned."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18063,6 +18139,10 @@ msgid "Could not find keystore, unable to export."
msgstr ""
#: platform/android/export/export_plugin.cpp
+msgid "Could not start apksigner executable."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
@@ -18091,7 +18171,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Unsupported export format!\n"
+msgid "Unsupported export format!"
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18102,19 +18182,17 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Android build version mismatch:\n"
-" Template installed: %s\n"
-" Godot Version: %s\n"
+"Android build version mismatch: Template installed: %s, Godot version: %s. "
"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"
+"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"
+msgid "Could not export project files to gradle project."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18127,7 +18205,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Building of Android project failed, check output for the error.\n"
+"Building of Android project failed, check output for the error. "
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
@@ -18142,7 +18220,7 @@ msgid ""
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Package not found: %s"
+msgid "Package not found: \"%s\"."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18150,15 +18228,12 @@ msgid "Creating APK..."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid ""
-"Could not find template APK to export:\n"
-"%s"
+msgid "Could not find template APK to export: \"%s\"."
msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Missing libraries in the export template for the selected architectures: "
-"%s.\n"
+"Missing libraries in the export template for the selected architectures: %s. "
"Please build a template with all required libraries, or uncheck the missing "
"architectures in the export preset."
msgstr ""
@@ -18168,7 +18243,7 @@ msgid "Adding files..."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Could not export project files"
+msgid "Could not export project files."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18396,6 +18471,15 @@ msgstr "Fonksionoù :"
msgid "Custom BG Color"
msgstr "Fonksionoù :"
+#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
+#: platform/osx/export/export.cpp
+msgid "Prepare Templates"
+msgstr ""
+
+#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
+msgid "Export template not found."
+msgstr ""
+
#: platform/iphone/export/export.cpp
msgid "App Store Team ID not specified - cannot configure the project."
msgstr ""
@@ -18417,19 +18501,29 @@ msgid "Run exported HTML in the system's default browser."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not open template for export:"
+msgid "Could not open template for export: \"%s\"."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Invalid export template:"
+#, fuzzy
+msgid "Invalid export template: \"%s\"."
+msgstr "Indeks fall a dip %s evit an tip diazez %s"
+
+#: platform/javascript/export/export.cpp
+msgid "Could not write file: \"%s\"."
msgstr ""
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Icon Creation"
+msgstr "Tro Fiñvskeudenn"
+
#: platform/javascript/export/export.cpp
-msgid "Could not write file:"
+msgid "Could not read file: \"%s\"."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not read file:"
+msgid "PWA"
msgstr ""
#: platform/javascript/export/export.cpp
@@ -18503,15 +18597,15 @@ msgid "Icon 512 X 512"
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not read HTML shell:"
+msgid "Could not read HTML shell: \"%s\"."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not create HTTP server directory:"
+msgid "Could not create HTTP server directory: %s."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Error starting HTTP server:"
+msgid "Error starting HTTP server: %d."
msgstr ""
#: platform/javascript/export/export.cpp
@@ -18781,9 +18875,26 @@ msgid "Apple Team ID"
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Could not open icon file \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Could not start xcrun executable."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization failed."
+msgstr "Tro Fiñvskeudenn"
+
+#: platform/osx/export/export.cpp
+msgid "Notarization request UUID: \"%s\""
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid ""
-"Note: The notarization process generally takes less than an hour. When the "
-"process is completed, you'll receive an email."
+"The notarization process generally takes less than an hour. When the process "
+"is completed, you'll receive an email."
msgstr ""
#: platform/osx/export/export.cpp
@@ -18799,18 +18910,71 @@ msgid ""
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign failed with error \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign require regex module."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Could not start codesign executable, make sure Xcode command line tools are "
+"installed."
+msgstr ""
+
+#: platform/osx/export/export.cpp platform/windows/export/export.cpp
msgid "No identity found."
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Cannot sign file %s."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Relative symlinks are not supported, exported \"%s\" might be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "DMG Creation"
+msgstr "Fonksionoù :"
+
+#: platform/osx/export/export.cpp
+msgid "Could not start hdiutil executable."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed - file exists."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed."
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid "Creating app bundle"
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Could not find template app to export:"
+msgid "Could not find template app to export: \"%s\"."
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid export format."
+msgstr "Roudenn Treuzfurmadur 3D"
+
+#: platform/osx/export/export.cpp
msgid ""
"Relative symlinks are not supported on this OS, the exported project might "
"be broken!"
@@ -18818,7 +18982,7 @@ msgstr ""
#: platform/osx/export/export.cpp
msgid ""
-"Requested template binary '%s' not found. It might be missing from your "
+"Requested template binary \"%s\" not found. It might be missing from your "
"template archive."
msgstr ""
@@ -18859,6 +19023,15 @@ msgid "Sending archive for notarization"
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "ZIP Creation"
+msgstr "Tro Fiñvskeudenn"
+
+#: platform/osx/export/export.cpp
+msgid "Could not open file to read from path \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr ""
@@ -19155,6 +19328,10 @@ msgid "Debug Algorithm"
msgstr ""
#: platform/windows/export/export.cpp
+msgid "Failed to rename temporary file \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
msgid "Identity Type"
msgstr ""
@@ -19195,6 +19372,63 @@ msgid "Trademarks"
msgstr ""
#: platform/windows/export/export.cpp
+msgid "Resources Modification"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find rcedit executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find wine executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start rcedit executable, configure rcedit path in the Editor "
+"Settings (Export > Windows > Rcedit)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"rcedit failed to modify executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find signtool executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find osslsigncode executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid identity type."
+msgstr "Argumant fall evit sevel '%s'"
+
+#: platform/windows/export/export.cpp
+msgid "Invalid timestamp server."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start signtool executable, configure signtool path in the Editor "
+"Settings (Export > Windows > Signtool)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Signtool failed to sign executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Failed to remove temporary file \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
msgid ""
"The rcedit tool must be configured in the Editor Settings (Export > Windows "
"> Rcedit) to change the icon or app information data."
@@ -19213,6 +19447,22 @@ msgid "Invalid product version:"
msgstr ""
#: platform/windows/export/export.cpp
+msgid "Windows executables cannot be >= 4 GiB."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Failed to open executable file \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable file header corrupted."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable \"pck\" section not found."
+msgstr ""
+
+#: platform/windows/export/export.cpp
msgid "Windows"
msgstr ""
@@ -19228,6 +19478,10 @@ msgstr ""
msgid "Wine"
msgstr ""
+#: platform/x11/export/export.cpp
+msgid "32-bit executables cannot have embedded data >= 4 GiB."
+msgstr ""
+
#: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp
#: scene/resources/texture.cpp
msgid "Frames"
@@ -19339,7 +19593,8 @@ msgstr ""
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/3d/light.cpp scene/3d/reflection_probe.cpp
-#: scene/3d/visual_instance.cpp scene/resources/material.cpp
+#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp
+#: scene/resources/material.cpp
msgid "Max Distance"
msgstr ""
@@ -20048,6 +20303,17 @@ msgstr ""
msgid "Edge Connection Margin"
msgstr "Tro Fiñvskeudenn"
+#: scene/2d/navigation_2d.cpp
+msgid ""
+"'Navigation2D' node and 'Navigation2D.get_simple_path()' are deprecated and "
+"will be removed in a future version. Use 'Navigation2DServer.map_get_path()' "
+"instead."
+msgstr ""
+
+#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
+msgid "Path Desired Distance"
+msgstr ""
+
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
msgid "Target Desired Distance"
msgstr ""
@@ -20099,13 +20365,15 @@ msgid ""
msgstr ""
#: scene/2d/navigation_polygon.cpp
-msgid ""
-"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
-"node. It only provides navigation data."
+msgid "Navpoly"
msgstr ""
-#: scene/2d/navigation_polygon.cpp
-msgid "Navpoly"
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+msgid "Enter Cost"
+msgstr ""
+
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+msgid "Travel Cost"
msgstr ""
#: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp
@@ -21164,6 +21432,13 @@ msgstr ""
msgid "Transform Normals"
msgstr "Roudenn Treuzfurmadur 3D"
+#: scene/3d/navigation.cpp
+msgid ""
+"'Navigation' node and 'Navigation.get_simple_path()' are deprecated and will "
+"be removed in a future version. Use 'NavigationServer.map_get_path()' "
+"instead."
+msgstr ""
+
#: scene/3d/navigation.cpp scene/resources/curve.cpp
msgid "Up Vector"
msgstr ""
@@ -21185,12 +21460,6 @@ msgid ""
"The NavigationAgent can be used only under a Spatial inheriting parent node."
msgstr ""
-#: scene/3d/navigation_mesh_instance.cpp
-msgid ""
-"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
-"It only provides navigation data."
-msgstr ""
-
#: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp
msgid "NavMesh"
msgstr ""
@@ -23621,6 +23890,16 @@ msgid "3D Physics"
msgstr ""
#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "2D Navigation"
+msgstr "Eilskoueriañ an Alc'whezh(ioù) Uhelsklaeriet"
+
+#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "3D Navigation"
+msgstr "Eilskoueriañ an Alc'whezh(ioù) Uhelsklaeriet"
+
+#: scene/register_scene_types.cpp
msgid "Use hiDPI"
msgstr ""
@@ -24894,7 +25173,7 @@ msgstr ""
msgid "Refraction"
msgstr ""
-#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp
+#: scene/resources/material.cpp
msgid "Detail"
msgstr ""
@@ -24971,10 +25250,15 @@ msgid "Visible Instance Count"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Sample Partition Type"
+msgid "Sampling"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Partition Type"
+msgstr "Tro Fiñvskeudenn"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Parsed Geometry Type"
msgstr ""
@@ -24987,7 +25271,11 @@ msgid "Source Group Name"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Agent"
+msgid "Cells"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
+msgid "Agents"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -24999,11 +25287,16 @@ msgid "Max Slope"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Regions"
+msgstr "Fonksionoù :"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Merge Size"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Edge"
+msgid "Edges"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -25016,6 +25309,10 @@ msgid "Verts Per Poly"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+msgid "Details"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
msgid "Sample Distance"
msgstr ""
@@ -25032,7 +25329,15 @@ msgid "Ledge Spans"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Filter Walkable Low Height Spans"
+msgid "Walkable Low Height Spans"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
+msgid "Baking AABB"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
+msgid "Baking AABB Offset"
msgstr ""
#: scene/resources/occluder_shape.cpp
@@ -25402,6 +25707,11 @@ msgid "Scenario"
msgstr ""
#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Navigation Map"
+msgstr "Tro Fiñvskeudenn"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
msgid "Direct Space State"
msgstr ""
@@ -25417,6 +25727,26 @@ msgstr ""
msgid "Default Angular Damp"
msgstr ""
+#: scene/resources/world.cpp
+#, fuzzy
+msgid "Default Map Up"
+msgstr "Talvoud :"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Size"
+msgstr "Talvoud :"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Height"
+msgstr "Talvoud :"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Edge Connection Margin"
+msgstr "Tro Fiñvskeudenn"
+
#: scene/resources/world_2d.cpp
msgid "Canvas"
msgstr ""
diff --git a/editor/translations/ca.po b/editor/translations/ca.po
index 142ea75e28..1e1ec84901 100644
--- a/editor/translations/ca.po
+++ b/editor/translations/ca.po
@@ -16,13 +16,14 @@
# Roberto Pérez <djleizar@gmail.com>, 2021.
# Joel Garcia Cascalló <jocsencat@gmail.com>, 2021.
# DFC <damiafluixacanals28@gmail.com>, 2021.
+# Roger VC <rogervilarasau@gmail.com>, 2022.
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: 2022-04-03 13:13+0000\n"
-"Last-Translator: roger <616steam@gmail.com>\n"
+"PO-Revision-Date: 2022-06-26 16:15+0000\n"
+"Last-Translator: Roger VC <rogervilarasau@gmail.com>\n"
"Language-Team: Catalan <https://hosted.weblate.org/projects/godot-engine/"
"godot/ca/>\n"
"Language: ca\n"
@@ -30,11 +31,11 @@ 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.12-dev\n"
+"X-Generator: Weblate 4.13.1-dev\n"
#: core/bind/core_bind.cpp main/main.cpp
msgid "Tablet Driver"
-msgstr ""
+msgstr "Controlador de tauleta"
#: core/bind/core_bind.cpp
msgid "Clipboard"
@@ -46,20 +47,19 @@ msgstr "Escena Actual"
#: core/bind/core_bind.cpp
msgid "Exit Code"
-msgstr ""
+msgstr "Codi de sortida"
#: core/bind/core_bind.cpp
-#, fuzzy
msgid "V-Sync Enabled"
-msgstr "V-Sync Activat"
+msgstr "Sincronització Vertical habilitada"
#: core/bind/core_bind.cpp main/main.cpp
msgid "V-Sync Via Compositor"
-msgstr ""
+msgstr "V-Sync mitjançant Compositor"
#: core/bind/core_bind.cpp main/main.cpp
msgid "Delta Smoothing"
-msgstr ""
+msgstr "Suavitzat delta"
#: core/bind/core_bind.cpp
msgid "Low Processor Usage Mode"
@@ -91,13 +91,12 @@ msgid "Window"
msgstr "Finestra"
#: core/bind/core_bind.cpp core/project_settings.cpp
-#, fuzzy
msgid "Borderless"
msgstr "Sense Vores"
#: core/bind/core_bind.cpp
msgid "Per Pixel Transparency Enabled"
-msgstr ""
+msgstr "Transparència per píxel activada"
#: core/bind/core_bind.cpp core/project_settings.cpp
msgid "Fullscreen"
@@ -105,7 +104,7 @@ msgstr "Pantalla Completa"
#: core/bind/core_bind.cpp
msgid "Maximized"
-msgstr ""
+msgstr "Maximitzat"
#: core/bind/core_bind.cpp
msgid "Minimized"
@@ -114,7 +113,7 @@ msgstr "Minimitzat"
#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp
#: scene/gui/graph_node.cpp
msgid "Resizable"
-msgstr ""
+msgstr "Redimensionable"
#: core/bind/core_bind.cpp core/os/input_event.cpp scene/2d/node_2d.cpp
#: scene/2d/physics_body_2d.cpp scene/2d/remote_transform_2d.cpp
@@ -146,7 +145,7 @@ msgstr "Suggeriment de l'Editor"
#: core/bind/core_bind.cpp
msgid "Print Error Messages"
-msgstr ""
+msgstr "Imprimeix missatges d'error"
#: core/bind/core_bind.cpp
msgid "Iterations Per Second"
@@ -184,7 +183,7 @@ msgstr "Resultat"
#: core/command_queue_mt.cpp core/message_queue.cpp main/main.cpp
msgid "Memory"
-msgstr ""
+msgstr "Memòria"
#: core/command_queue_mt.cpp core/message_queue.cpp
#: core/register_core_types.cpp drivers/gles2/rasterizer_canvas_base_gles2.cpp
@@ -195,7 +194,7 @@ msgstr ""
#: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h
#: servers/visual_server.cpp
msgid "Limits"
-msgstr ""
+msgstr "Límits"
#: core/command_queue_mt.cpp
msgid "Command Queue"
@@ -203,7 +202,7 @@ msgstr "Cua de Comandes"
#: core/command_queue_mt.cpp
msgid "Multithreading Queue Size (KB)"
-msgstr ""
+msgstr "Mida de la cua de multiprocés (KB)"
#: core/func_ref.cpp modules/visual_script/visual_script_builtin_funcs.cpp
#: modules/visual_script/visual_script_func_nodes.cpp
@@ -215,19 +214,19 @@ msgstr "Funció"
#: core/image.cpp core/packed_data_container.cpp scene/2d/polygon_2d.cpp
#: scene/3d/baked_lightmap.cpp scene/3d/gi_probe.cpp
msgid "Data"
-msgstr ""
+msgstr "Dades"
#: core/io/file_access_network.cpp core/register_core_types.cpp
-#: editor/editor_settings.cpp main/main.cpp
+#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
#: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h
+#: scene/gui/file_dialog.cpp
msgid "Network"
msgstr "Xarxa"
#: core/io/file_access_network.cpp
-#, fuzzy
msgid "Remote FS"
-msgstr "Remot "
+msgstr "FS remot"
#: core/io/file_access_network.cpp
msgid "Page Size"
@@ -239,7 +238,7 @@ msgstr ""
#: core/io/http_client.cpp
msgid "Blocking Mode Enabled"
-msgstr ""
+msgstr "Mode de bloqueig activat"
#: core/io/http_client.cpp
msgid "Connection"
@@ -260,7 +259,7 @@ msgstr "Activa l'Efecte Paper Ceba"
#: core/io/multiplayer_api.cpp scene/main/scene_tree.cpp
msgid "Refuse New Network Connections"
-msgstr ""
+msgstr "Rebutja les noves connexions de xarxa"
#: core/io/multiplayer_api.cpp scene/main/scene_tree.cpp
#, fuzzy
@@ -286,11 +285,11 @@ msgstr ""
#: core/io/packet_peer.cpp
msgid "Input Buffer Max Size"
-msgstr ""
+msgstr "Mida màxima del buffer d'entrada"
#: core/io/packet_peer.cpp
msgid "Output Buffer Max Size"
-msgstr ""
+msgstr "Mida màxima del buffer de sortida"
#: core/io/packet_peer.cpp
msgid "Stream Peer"
@@ -302,16 +301,15 @@ msgstr ""
#: core/io/stream_peer.cpp
msgid "Data Array"
-msgstr ""
+msgstr "Matriu de dades"
#: core/io/stream_peer_ssl.cpp
msgid "Blocking Handshake"
msgstr ""
#: core/io/udp_server.cpp
-#, fuzzy
msgid "Max Pending Connections"
-msgstr "Editar Connexió:"
+msgstr "Màxim de connexions pendents"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -360,7 +358,7 @@ msgstr "En la crida a '%s':"
#: core/math/random_number_generator.cpp
#: modules/opensimplex/open_simplex_noise.cpp
msgid "Seed"
-msgstr ""
+msgstr "Llavor"
#: core/math/random_number_generator.cpp
msgid "State"
@@ -368,11 +366,21 @@ msgstr "Estat"
#: core/message_queue.cpp
msgid "Message Queue"
-msgstr ""
+msgstr "Cua de missatges"
#: core/message_queue.cpp
msgid "Max Size (KB)"
-msgstr ""
+msgstr "Mida màxima (KB)"
+
+#: core/os/input.cpp
+#, fuzzy
+msgid "Mouse Mode"
+msgstr "Mode de moviment"
+
+#: core/os/input.cpp
+#, fuzzy
+msgid "Use Accumulated Input"
+msgstr "Elimina l'Entrada"
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: servers/audio_server.cpp
@@ -386,7 +394,7 @@ msgstr "Tot"
#: core/os/input_event.cpp
msgid "Shift"
-msgstr ""
+msgstr "Shift"
#: core/os/input_event.cpp
msgid "Control"
@@ -394,7 +402,7 @@ msgstr "Control"
#: core/os/input_event.cpp
msgid "Meta"
-msgstr ""
+msgstr "Meta"
#: core/os/input_event.cpp
#, fuzzy
@@ -414,11 +422,11 @@ msgstr "Explora"
#: core/os/input_event.cpp
msgid "Physical Scancode"
-msgstr ""
+msgstr "Codi d'escaneig físic"
#: core/os/input_event.cpp
msgid "Unicode"
-msgstr ""
+msgstr "Unicode"
#: core/os/input_event.cpp
msgid "Echo"
@@ -438,13 +446,12 @@ msgid "Factor"
msgstr "Factor"
#: core/os/input_event.cpp
-#, fuzzy
msgid "Button Index"
-msgstr "Ãndex del Botó del ratolí:"
+msgstr "Ãndex de botons"
#: core/os/input_event.cpp
msgid "Doubleclick"
-msgstr ""
+msgstr "Doble clic"
#: core/os/input_event.cpp
msgid "Tilt"
@@ -520,9 +527,8 @@ msgid "Instrument"
msgstr ""
#: core/os/input_event.cpp
-#, fuzzy
msgid "Controller Number"
-msgstr "Nombre de controlador"
+msgstr "Número de controlador"
#: core/os/input_event.cpp
msgid "Controller Value"
@@ -539,9 +545,8 @@ msgid "Config"
msgstr "Configuració"
#: core/project_settings.cpp
-#, fuzzy
msgid "Project Settings Override"
-msgstr "Configuració del Projecte..."
+msgstr "Anul·lació de la configuració del projecte"
#: core/project_settings.cpp core/resource.cpp
#: editor/animation_track_editor.cpp editor/editor_autoload_settings.cpp
@@ -564,7 +569,8 @@ msgstr "Descripció"
#: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
-#: main/main.cpp
+#: main/main.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp
msgid "Run"
msgstr "Executar"
@@ -650,9 +656,12 @@ msgid "Editor"
msgstr "Editor"
#: core/project_settings.cpp
-#, fuzzy
msgid "Main Run Args"
-msgstr "Arguments de l'Escena Principal:"
+msgstr "Arguments d'execució principal"
+
+#: core/project_settings.cpp
+msgid "Scene Naming"
+msgstr "Nomenclatura de l'escena"
#: core/project_settings.cpp
msgid "Search In File Extensions"
@@ -662,18 +671,15 @@ msgstr ""
msgid "Script Templates Search Path"
msgstr ""
-#: core/project_settings.cpp editor/editor_node.cpp
-#: editor/plugins/version_control_editor_plugin.cpp
-msgid "Version Control"
-msgstr "Control de Versions"
-
#: core/project_settings.cpp
-msgid "Autoload On Startup"
-msgstr ""
+#, fuzzy
+msgid "Version Control Autoload On Startup"
+msgstr "Sistema de control de versions"
#: core/project_settings.cpp
-msgid "Plugin Name"
-msgstr "Nom del Connector"
+#, fuzzy
+msgid "Version Control Plugin Name"
+msgstr "Control de Versions"
#: core/project_settings.cpp scene/2d/collision_object_2d.cpp
#: scene/3d/collision_object.cpp scene/gui/control.cpp
@@ -791,7 +797,8 @@ msgid "Quality"
msgstr ""
#: core/project_settings.cpp scene/gui/file_dialog.cpp
-#: scene/main/scene_tree.cpp servers/visual_server.cpp
+#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp
+#: servers/visual_server.cpp
msgid "Filters"
msgstr "Filtres"
@@ -871,9 +878,8 @@ msgid "TCP"
msgstr ""
#: core/register_core_types.cpp
-#, fuzzy
msgid "Connect Timeout Seconds"
-msgstr "Connexions al mètode:"
+msgstr "Segons de temps d'espera de connexió"
#: core/register_core_types.cpp
msgid "Packet Peer Stream"
@@ -1158,9 +1164,8 @@ msgstr "Localització"
#: editor/animation_track_editor.cpp modules/gltf/gltf_node.cpp
#: scene/2d/polygon_2d.cpp scene/2d/remote_transform_2d.cpp
#: scene/3d/remote_transform.cpp scene/3d/spatial.cpp scene/gui/control.cpp
-#, fuzzy
msgid "Rotation"
-msgstr "Pas de la Rotació:"
+msgstr "Rotació"
#: editor/animation_track_editor.cpp editor/script_editor_debugger.cpp
#: modules/visual_script/visual_script_nodes.cpp scene/gui/range.cpp
@@ -1168,9 +1173,8 @@ msgid "Value"
msgstr "Valor"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Arg Count"
-msgstr "Quantitat:"
+msgstr "Quantitat d'arguments"
#: editor/animation_track_editor.cpp main/main.cpp
#: modules/mono/mono_gd/gd_mono.cpp
@@ -1202,14 +1206,12 @@ msgid "Stream"
msgstr ""
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Start Offset"
-msgstr "òfset de la quadrícula:"
+msgstr "Desplaçament d'inici"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "End Offset"
-msgstr "òfset:"
+msgstr "Desplaçament final"
#: editor/animation_track_editor.cpp editor/editor_settings.cpp
#: editor/import/resource_importer_scene.cpp
@@ -1333,14 +1335,12 @@ msgid "Remove this track."
msgstr "Treu la Pista."
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Time (s):"
-msgstr "Temps (s): "
+msgstr "Temps (s):"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Position:"
-msgstr "Posició"
+msgstr "Posició:"
#: editor/animation_track_editor.cpp
#, fuzzy
@@ -1362,9 +1362,8 @@ msgid "Type:"
msgstr "Tipus:"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "(Invalid, expected type: %s)"
-msgstr "Plantilla d'exportació no vàlida:"
+msgstr "(No vàlid, tipus esperat: %s)"
#: editor/animation_track_editor.cpp
#, fuzzy
@@ -1617,9 +1616,8 @@ msgid "Add Method Track Key"
msgstr "Afegir Clau de Pista de Mètode"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Method not found in object:"
-msgstr "No s'ha trobat el mètode en l'objecte: "
+msgstr "Mètode no trobat a l'objecte:"
#: editor/animation_track_editor.cpp
msgid "Anim Move Keys"
@@ -2232,8 +2230,8 @@ msgid "Open"
msgstr "Obre"
#: editor/dependency_editor.cpp
-msgid "Owners Of:"
-msgstr "Propietaris de:"
+msgid "Owners of: %s (Total: %d)"
+msgstr ""
#: editor/dependency_editor.cpp
msgid ""
@@ -2437,17 +2435,15 @@ msgid "%s (already exists)"
msgstr "%s (ja existeix)"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "Contents of asset \"%s\" - %d file(s) conflict with your project:"
msgstr ""
-"El contingut del(s) fitxer(s) d'asset \"%s\" - %d entra en conflicte amb el "
-"vostre project:"
+"El contingut del recurs \"%s\" - %d fitxer(s) entra en conflicte amb el "
+"vostre projecte:"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "Contents of asset \"%s\" - No files conflict with your project:"
msgstr ""
-"Continguts de l'asset \"%s\" - Cap fitxer entra en conflicte amb el vostre "
+"Contingut del recurs \"%s\": no hi ha cap fitxer en conflicte amb el vostre "
"projecte:"
#: editor/editor_asset_installer.cpp
@@ -2464,9 +2460,8 @@ msgid "(and %s more files)"
msgstr "(i %s fitxer(s) més)"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "Asset \"%s\" installed successfully!"
-msgstr "El asset \"%s\" s'ha instal·lat exitosament!"
+msgstr "El recurs \"%s\" s'ha instal·lat correctament!"
#: editor/editor_asset_installer.cpp
#: editor/plugins/asset_library_editor_plugin.cpp
@@ -2547,7 +2542,7 @@ msgid "Bus Options"
msgstr "Opcions del Bus"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/scene_tree_dock.cpp
+#: editor/project_export.cpp editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "Duplica"
@@ -2600,9 +2595,8 @@ msgid "There is no '%s' file."
msgstr "No hi ha cap fitxer '%s'."
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Layout:"
-msgstr "Desar Disseny"
+msgstr "Disseny:"
#: editor/editor_audio_buses.cpp
msgid "Invalid file, not an audio bus layout."
@@ -2725,9 +2719,8 @@ msgid "%s is an invalid path. File does not exist."
msgstr "%s es un camí no vàlid. El fitxer no existeix."
#: editor/editor_autoload_settings.cpp
-#, fuzzy
msgid "%s is an invalid path. Not in resource path (res://)."
-msgstr "%s es un camí no vàlid. No està en el camí del recurs (res://)."
+msgstr "%s no és un camí vàlid. No a la ruta del recurs (res://)."
#: editor/editor_autoload_settings.cpp
msgid "Add AutoLoad"
@@ -2806,6 +2799,23 @@ msgid "Choose"
msgstr "Tria"
#: editor/editor_export.cpp
+msgid "Project export for platform:"
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Completed with errors."
+msgstr "Completat amb errors."
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Completed successfully."
+msgstr "Completat amb èxit."
+
+#: editor/editor_export.cpp
+msgid "Failed."
+msgstr "Ha fallat:"
+
+#: editor/editor_export.cpp
msgid "Storing File:"
msgstr "Emmagatzemant Fitxer:"
@@ -2818,6 +2828,29 @@ msgid "Packing"
msgstr "Compressió"
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save PCK"
+msgstr "Anomena i Desa"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Cannot create file \"%s\"."
+msgstr "No s'ha pogut crear el directori."
+
+#: editor/editor_export.cpp
+msgid "Failed to export project files."
+msgstr "No s'han pogut exportar els fitxers del projecte."
+
+#: editor/editor_export.cpp
+msgid "Can't open file to read from path \"%s\"."
+msgstr "No es pot obrir el fitxer per llegir-lo des del camí \"%s\"."
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save ZIP"
+msgstr "Anomena i Desa"
+
+#: editor/editor_export.cpp
msgid ""
"Target platform requires 'ETC' texture compression for GLES2. Enable 'Import "
"Etc' in Project Settings."
@@ -2892,9 +2925,8 @@ msgid "Release"
msgstr "alliberat"
#: editor/editor_export.cpp
-#, fuzzy
msgid "Binary Format"
-msgstr "Operador Color."
+msgstr "Format binari"
#: editor/editor_export.cpp
msgid "64 Bits"
@@ -2941,9 +2973,28 @@ msgstr "No s'ha trobat cap plantilla de depuració personalitzada."
msgid "Custom release template not found."
msgstr "No s'ha trobat cap plantilla de publicació personalitzada."
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Prepare Template"
+msgstr "Administrar Plantilles"
+
+#: editor/editor_export.cpp platform/osx/export/export.cpp
+msgid "The given export path doesn't exist."
+msgstr "El camí d'exportació donat no existeix:"
+
#: editor/editor_export.cpp platform/javascript/export/export.cpp
-msgid "Template file not found:"
-msgstr "No s'ha trobat la Plantilla:"
+msgid "Template file not found: \"%s\"."
+msgstr "No s'ha trobat el fitxer de plantilla: \"%s\"."
+
+#: editor/editor_export.cpp
+msgid "Failed to copy export template."
+msgstr "No s'ha pogut copiar la plantilla d'exportació."
+
+#: editor/editor_export.cpp platform/windows/export/export.cpp
+#: platform/x11/export/export.cpp
+#, fuzzy
+msgid "PCK Embedding"
+msgstr "Farciment"
#: editor/editor_export.cpp
msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB."
@@ -2992,9 +3043,8 @@ msgid "Allows to edit scripts using the integrated script editor."
msgstr "Permet editar scripts utilitzant l'editor de scripts integrat."
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Provides built-in access to the Asset Library."
-msgstr "Proveeix accés integrat a la Llibreria de Assets."
+msgstr "Proporciona accés integrat a la Biblioteca de Recursos."
#: editor/editor_feature_profile.cpp
msgid "Allows editing the node hierarchy in the Scene dock."
@@ -3124,9 +3174,9 @@ msgid "Import"
msgstr "Importar"
#: editor/editor_feature_profile.cpp editor/project_export.cpp
-#: platform/android/export/export.cpp platform/javascript/export/export.cpp
-#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
-#: platform/windows/export/export.cpp
+#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#: platform/uwp/export/export.cpp platform/windows/export/export.cpp
msgid "Export"
msgstr "Exportar"
@@ -3240,14 +3290,12 @@ msgid "Save a File"
msgstr "Desa un Fitxer"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
-#, fuzzy
msgid "Access"
-msgstr "Èxit!"
+msgstr "Accés"
#: editor/editor_file_dialog.cpp editor/editor_settings.cpp
-#, fuzzy
msgid "Display Mode"
-msgstr "Mode de Reproducció:"
+msgstr "Mode de visualització"
#: editor/editor_file_dialog.cpp
#: editor/import/resource_importer_layered_texture.cpp
@@ -3265,19 +3313,16 @@ msgid "Mode"
msgstr "Mode d'Escombratge lateral"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
-#, fuzzy
msgid "Current Dir"
-msgstr "Actual:"
+msgstr "Directori actual"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
-#, fuzzy
msgid "Current File"
-msgstr "Perfil Actual:"
+msgstr "Fitxer actual"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
-#, fuzzy
msgid "Current Path"
-msgstr "Actual:"
+msgstr "Camí actual"
#: editor/editor_file_dialog.cpp editor/editor_settings.cpp
#: scene/gui/file_dialog.cpp
@@ -3608,9 +3653,8 @@ msgid "Checked"
msgstr "Element validat"
#: editor/editor_inspector.cpp
-#, fuzzy
msgid "Draw Red"
-msgstr "Crides de Dibuix:"
+msgstr "Dibuixa en vermell"
#: editor/editor_inspector.cpp
#, fuzzy
@@ -3999,10 +4043,9 @@ msgid "Save changes to '%s' before closing?"
msgstr "Desar els canvis a '%s' abans de tancar?"
#: editor/editor_node.cpp
-#, fuzzy
msgid "%s no longer exists! Please specify a new save location."
msgstr ""
-"%s ja no existeix! Si us plau especifiqueu una nova localització de guardat."
+"%s ja no existeix! Si us plau especifiqueu una nova ubicació per desar."
#: editor/editor_node.cpp
msgid ""
@@ -4303,15 +4346,6 @@ msgid ""
"Unable to write to file '%s', file in use, locked or lacking permissions."
msgstr ""
-#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
-msgid "Scene"
-msgstr "Escena"
-
-#: editor/editor_node.cpp
-#, fuzzy
-msgid "Scene Naming"
-msgstr "Camí de l'Escena:"
-
#: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp
#: servers/arvr/arvr_interface.cpp
#, fuzzy
@@ -4400,9 +4434,8 @@ msgid "Inspector"
msgstr "Inspector"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Default Property Name Style"
-msgstr "Camí del Projecte:"
+msgstr "Estil de nom de propietat per defecte"
#: editor/editor_node.cpp
msgid "Default Float Step"
@@ -4440,6 +4473,10 @@ msgid "Default Color Picker Mode"
msgstr ""
#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
+msgid "Version Control"
+msgstr "Control de Versions"
+
+#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
#, fuzzy
msgid "Username"
msgstr "Reanomena"
@@ -4468,6 +4505,10 @@ msgstr "Commutar el Mode Lliure de Distraccions."
msgid "Add a new scene."
msgstr "Afegeix una escena nova."
+#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
+msgid "Scene"
+msgstr "Escena"
+
#: editor/editor_node.cpp
msgid "Go to previously opened scene."
msgstr "Vés a l'escena oberta anteriorment."
@@ -4824,9 +4865,8 @@ msgid "Update All Changes"
msgstr "Actualitzar quan es canvia"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Update Vital Changes"
-msgstr "Canvis de Material:"
+msgstr "Actualitza els canvis vitals"
#: editor/editor_node.cpp
msgid "Hide Update Spinner"
@@ -5162,9 +5202,8 @@ msgid "Size:"
msgstr "Mida:"
#: editor/editor_properties_array_dict.cpp
-#, fuzzy
msgid "Page:"
-msgstr "Pàgina: "
+msgstr "Pàgina:"
#: editor/editor_properties_array_dict.cpp
#: editor/plugins/theme_editor_plugin.cpp
@@ -5251,9 +5290,8 @@ msgid "Extend Script"
msgstr "Estendre l'script"
#: editor/editor_resource_picker.cpp
-#, fuzzy
msgid "Script Owner"
-msgstr "Nom de l'script:"
+msgstr "Propietari de l'script"
#: editor/editor_run_native.cpp
#, fuzzy
@@ -5265,6 +5303,11 @@ msgstr ""
"No s'ha trobat cap patró d'exportació executable per aquesta plataforma. \n"
"Afegiu un patró predeterminat en el menú d'exportació."
+#: editor/editor_run_native.cpp
+#, fuzzy
+msgid "Project Run"
+msgstr "Projecte"
+
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
msgstr "Escriu la lògica en el mètode _run()."
@@ -5426,14 +5469,12 @@ msgid "Directories"
msgstr "Direccions"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Autoscan Project Path"
-msgstr "Camí del Projecte:"
+msgstr "Escaneja automàticament la ruta del projecte"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Default Project Path"
-msgstr "Camí del Projecte:"
+msgstr "Camí del projecte per defecte"
#: editor/editor_settings.cpp
#, fuzzy
@@ -5455,9 +5496,8 @@ msgid "File Dialog"
msgstr "Diàleg XForm"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Thumbnail Size"
-msgstr "Miniatura..."
+msgstr "Mida de la miniatura"
#: editor/editor_settings.cpp
msgid "Docks"
@@ -5539,17 +5579,17 @@ msgid "Convert Indent On Save"
msgstr "Converteix la Sagnia en Espais"
#: editor/editor_settings.cpp scene/gui/text_edit.cpp
-#, fuzzy
msgid "Draw Tabs"
-msgstr "Crides de Dibuix:"
+msgstr "Dibuixa pestanyes"
#: editor/editor_settings.cpp scene/gui/text_edit.cpp
-#, fuzzy
msgid "Draw Spaces"
-msgstr "Crides de Dibuix:"
+msgstr "Dibuixa espais"
#: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp
-#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp
+#: scene/main/scene_tree.cpp scene/resources/world.cpp
+#: scene/resources/world_2d.cpp
#, fuzzy
msgid "Navigation"
msgstr "Mode Navegació"
@@ -5580,9 +5620,8 @@ msgid "Appearance"
msgstr ""
#: editor/editor_settings.cpp scene/gui/text_edit.cpp
-#, fuzzy
msgid "Show Line Numbers"
-msgstr "Línia:"
+msgstr "Mostra els números de línia"
#: editor/editor_settings.cpp
#, fuzzy
@@ -5728,9 +5767,8 @@ msgid "Add Type Hints"
msgstr "Tipus"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Use Single Quotes"
-msgstr "Utilitzar Cometes Simples"
+msgstr "Utilitza cometes simples"
#: editor/editor_settings.cpp
#, fuzzy
@@ -5754,9 +5792,8 @@ msgid "Grid Map"
msgstr "Mapa de Graella"
#: editor/editor_settings.cpp modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
msgid "Pick Distance"
-msgstr "Trieu la distància:"
+msgstr "Trieu la distància"
#: editor/editor_settings.cpp editor/plugins/tile_map_editor_plugin.cpp
#, fuzzy
@@ -5809,14 +5846,12 @@ msgid "Shape"
msgstr ""
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Primary Grid Steps"
-msgstr "Pas de la Quadrícula:"
+msgstr "Passos de la quadrícula primària"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Grid Size"
-msgstr "Pas de la Quadrícula:"
+msgstr "Mida de la quadrícula"
#: editor/editor_settings.cpp
msgid "Grid Division Level Max"
@@ -6001,7 +6036,7 @@ msgstr "Elimina Elements de Classe"
#: editor/editor_settings.cpp
#, fuzzy
msgid "Bone Selected Color"
-msgstr "Perfil Actual:"
+msgstr "Color seleccionat de l'os"
#: editor/editor_settings.cpp
msgid "Bone IK Color"
@@ -6012,9 +6047,8 @@ msgid "Bone Outline Color"
msgstr ""
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Bone Outline Size"
-msgstr "Mida del Contorn:"
+msgstr "Mida del contorn de l'os"
#: editor/editor_settings.cpp
msgid "Viewport Border Color"
@@ -6108,9 +6142,8 @@ msgid "Auto Save"
msgstr "Auto Tall"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Save Before Running"
-msgstr "Desar l'escena abans de executar-la..."
+msgstr "Desa abans d'executar-lo"
#: editor/editor_settings.cpp
#, fuzzy
@@ -6119,9 +6152,8 @@ msgstr "Vista Frontal"
#: editor/editor_settings.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
-#, fuzzy
msgid "Remote Host"
-msgstr "Remot "
+msgstr "Amfitrió remot"
#: editor/editor_settings.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
@@ -6155,9 +6187,8 @@ msgstr "Gestor del Projecte"
#. TRANSLATORS: Project Manager here refers to the tool used to create/manage Godot projects.
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Sorting Order"
-msgstr "Reanomenant directori:"
+msgstr "Ordre d'ordenació"
#: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp
msgid "Symbol Color"
@@ -6189,16 +6220,14 @@ msgid "Comment Color"
msgstr ""
#: editor/editor_settings.cpp
-#, fuzzy
msgid "String Color"
-msgstr "Emmagatzemant Fitxer:"
+msgstr "Color de la cadena"
#: editor/editor_settings.cpp platform/javascript/export/export.cpp
#: platform/uwp/export/export.cpp
#: scene/resources/default_theme/default_theme.cpp
-#, fuzzy
msgid "Background Color"
-msgstr "Color de fons no vàlid."
+msgstr "Color de fons"
#: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp
#, fuzzy
@@ -6228,14 +6257,12 @@ msgid "Text Color"
msgstr "Planta Següent"
#: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp
-#, fuzzy
msgid "Line Number Color"
-msgstr "Línia:"
+msgstr "Color del número de línia"
#: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp
-#, fuzzy
msgid "Safe Line Number Color"
-msgstr "Línia:"
+msgstr "Color del número de línia segura"
#: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp
msgid "Caret Color"
@@ -6361,9 +6388,8 @@ msgid "%s Error"
msgstr "Error"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Open the folder containing these templates."
-msgstr "Obrir la carpeta que conte aquestes plantilles."
+msgstr "Obriu la carpeta que conté aquestes plantilles."
#: editor/export_template_manager.cpp
msgid "Uninstall these templates."
@@ -6380,9 +6406,8 @@ msgid "Retrieving the mirror list..."
msgstr "S'estan buscant rèpliques..."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Starting the download..."
-msgstr "Començant la descarrega..."
+msgstr "S'està iniciant la baixada..."
#: editor/export_template_manager.cpp
msgid "Error requesting URL:"
@@ -6411,18 +6436,16 @@ msgid "Request failed."
msgstr "Ha fallat la sol·licitud."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Request ended up in a redirect loop."
-msgstr "La sol·licitud a acabat en un bucle de redirecció."
+msgstr "La sol·licitud ha acabat en un bucle de redirecció."
#: editor/export_template_manager.cpp
msgid "Request failed:"
msgstr "La Sol·licitud ha fallat:"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Download complete; extracting templates..."
-msgstr "Descarrega completa; extraient plantilles..."
+msgstr "S'ha completat la baixada; s'estan extraient les plantilles..."
#: editor/export_template_manager.cpp
#, fuzzy
@@ -6449,7 +6472,6 @@ msgstr ""
"informeu d'aquest problema!"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Best available mirror"
msgstr "Millor mirall disponible"
@@ -6575,9 +6597,8 @@ msgid "Uninstall"
msgstr "Desinstal·lar"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Uninstall templates for the current version."
-msgstr "Valor inicial per al comptador."
+msgstr "Desinstal·la les plantilles de la versió actual."
#: editor/export_template_manager.cpp
msgid "Download from:"
@@ -6617,9 +6638,8 @@ msgid "Install from File"
msgstr "Instal·lar des d'un Fitxer"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Install templates from a local file."
-msgstr "Instal·lar plantilles des d'un fitxer local."
+msgstr "Instal·la plantilles des d'un fitxer local."
#: editor/export_template_manager.cpp editor/find_in_files.cpp
#: editor/progress_dialog.cpp scene/gui/dialogs.cpp
@@ -7091,10 +7111,9 @@ msgstr ""
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp
-#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp
-#, fuzzy
+#: scene/gui/control.cpp
msgid "Filter"
-msgstr "Filtres:"
+msgstr "Filtre"
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp
@@ -7121,17 +7140,15 @@ msgstr "Auto Tall"
#: scene/gui/aspect_ratio_container.cpp scene/gui/control.cpp
#: scene/gui/nine_patch_rect.cpp scene/gui/scroll_container.cpp
#: scene/resources/style_box.cpp
-#, fuzzy
msgid "Horizontal"
-msgstr "Horitzontal:"
+msgstr "Horitzontal"
#: editor/import/resource_importer_layered_texture.cpp
#: scene/gui/aspect_ratio_container.cpp scene/gui/control.cpp
#: scene/gui/nine_patch_rect.cpp scene/gui/scroll_container.cpp
#: scene/resources/style_box.cpp
-#, fuzzy
msgid "Vertical"
-msgstr "Vertical:"
+msgstr "Vertical"
#: editor/import/resource_importer_obj.cpp
#, fuzzy
@@ -7211,9 +7228,8 @@ msgid "Root Type"
msgstr "Tipus de Membre"
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Root Name"
-msgstr "Remot "
+msgstr "Nom de l'arrel"
#: editor/import/resource_importer_scene.cpp
#, fuzzy
@@ -7226,18 +7242,16 @@ msgid "Custom Script"
msgstr "Talla els Nodes"
#: editor/import/resource_importer_scene.cpp scene/resources/texture.cpp
-#, fuzzy
msgid "Storage"
-msgstr "Emmagatzemant Fitxer:"
+msgstr "Emmagatzematge"
#: editor/import/resource_importer_scene.cpp
msgid "Use Legacy Names"
msgstr ""
#: editor/import/resource_importer_scene.cpp modules/gltf/gltf_state.cpp
-#, fuzzy
msgid "Materials"
-msgstr "Canvis de Material:"
+msgstr "Materials"
#: editor/import/resource_importer_scene.cpp
#, fuzzy
@@ -7314,14 +7328,12 @@ msgid "Enabled"
msgstr "Activar"
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Max Linear Error"
-msgstr "Error Lineal Max.:"
+msgstr "Error lineal màxim"
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Max Angular Error"
-msgstr "Error Angular Max.:"
+msgstr "Error angular màxim"
#: editor/import/resource_importer_scene.cpp
#, fuzzy
@@ -7341,9 +7353,8 @@ msgstr "Talls d'Animació"
#: editor/import/resource_importer_scene.cpp scene/2d/cpu_particles_2d.cpp
#: scene/2d/particles_2d.cpp scene/3d/area.cpp scene/3d/cpu_particles.cpp
#: scene/3d/particles.cpp scene/resources/environment.cpp
-#, fuzzy
msgid "Amount"
-msgstr "Quantitat:"
+msgstr "Quantitat"
#: editor/import/resource_importer_scene.cpp
#: editor/plugins/mesh_library_editor_plugin.cpp
@@ -7359,9 +7370,8 @@ msgid "Generating Lightmaps"
msgstr "S'estan generant els Lightmaps"
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Generating for Mesh:"
-msgstr "S'està generant per a la Malla: "
+msgstr "S'està generant per malla:"
#: editor/import/resource_importer_scene.cpp
msgid "Running Custom Script..."
@@ -7388,6 +7398,18 @@ msgid "Saving..."
msgstr "Desant..."
#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used as a normal map in 3D. Enabling red-green "
+"texture compression to reduce memory usage (blue channel is discarded)."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap "
+"generation and VRAM texture compression."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
msgid "2D, Detect 3D"
msgstr ""
@@ -7445,9 +7467,8 @@ msgid "Normal Map Invert Y"
msgstr "Escala aleatòria:"
#: editor/import/resource_importer_texture.cpp
-#, fuzzy
msgid "Size Limit"
-msgstr "Mida: "
+msgstr "Límit de mida"
#: editor/import/resource_importer_texture.cpp
msgid "Detect 3D"
@@ -7465,14 +7486,12 @@ msgid ""
msgstr ""
#: editor/import/resource_importer_texture_atlas.cpp
-#, fuzzy
msgid "Atlas File"
-msgstr "Mida del Contorn:"
+msgstr "Fitxer Atles"
#: editor/import/resource_importer_texture_atlas.cpp
-#, fuzzy
msgid "Import Mode"
-msgstr "Mode d'Exportació:"
+msgstr "Mode d'importació"
#: editor/import/resource_importer_texture_atlas.cpp
#, fuzzy
@@ -7484,9 +7503,8 @@ msgid "Trim Alpha Border From Region"
msgstr ""
#: editor/import/resource_importer_wav.cpp scene/2d/physics_body_2d.cpp
-#, fuzzy
msgid "Force"
-msgstr "Malla d'Origen:"
+msgstr "Força"
#: editor/import/resource_importer_wav.cpp
msgid "8 Bit"
@@ -7607,9 +7625,8 @@ msgid "Failed to load resource."
msgstr "No s'ha pogut carregar el recurs."
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Property Name Style"
-msgstr "Nom del Projecte:"
+msgstr "Estil del nom de la propietat"
#: editor/inspector_dock.cpp scene/gui/color_picker.cpp
msgid "Raw"
@@ -7961,9 +7978,8 @@ msgid "Blend:"
msgstr "Mescla:"
#: editor/plugins/animation_blend_tree_editor_plugin.cpp
-#, fuzzy
msgid "Parameter Changed:"
-msgstr "Paràmetre Canviat:"
+msgstr "Paràmetre canviat:"
#: editor/plugins/animation_blend_tree_editor_plugin.cpp
#: editor/plugins/animation_tree_player_editor_plugin.cpp
@@ -8041,14 +8057,12 @@ msgstr ""
"que no es poden recuperar els noms de les pistes."
#: editor/plugins/animation_blend_tree_editor_plugin.cpp
-#, fuzzy
msgid "Anim Clips"
-msgstr "Talls d'Animació"
+msgstr "Clips d'animació"
#: editor/plugins/animation_blend_tree_editor_plugin.cpp
-#, fuzzy
msgid "Audio Clips"
-msgstr "Talls d'Àudio"
+msgstr "Clips d'àudio"
#: editor/plugins/animation_blend_tree_editor_plugin.cpp
msgid "Functions"
@@ -8086,11 +8100,20 @@ msgid "New Anim"
msgstr "Nova Animació"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+msgstr "Crea una Nova Animació"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Change Animation Name:"
msgstr "Modifica el Nom de l'Animació:"
#: editor/plugins/animation_player_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Rename Animation"
+msgstr "Reanomena l'Animació"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Delete Animation?"
msgstr "Eliminar l'Animació?"
@@ -8108,11 +8131,6 @@ msgid "Animation name already exists!"
msgstr "El nom d'animació ja existeix!"
#: editor/plugins/animation_player_editor_plugin.cpp
-#: editor/plugins/sprite_frames_editor_plugin.cpp
-msgid "Rename Animation"
-msgstr "Reanomena l'Animació"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate Animation"
msgstr "Duplica l'Animació"
@@ -8257,10 +8275,6 @@ msgid "Pin AnimationPlayer"
msgstr "Fixar AnimationPlayer"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Create New Animation"
-msgstr "Crea una Nova Animació"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Name:"
msgstr "Nom de l'Animació:"
@@ -8376,9 +8390,8 @@ msgid "Set the end animation. This is useful for sub-transitions."
msgstr "Definiu l'animació final. Això és útil per a sub-transicions."
#: editor/plugins/animation_state_machine_editor.cpp
-#, fuzzy
msgid "Transition:"
-msgstr "Transició: "
+msgstr "Transició:"
#: editor/plugins/animation_state_machine_editor.cpp
msgid "Play Mode:"
@@ -8645,9 +8658,8 @@ msgid "Download Error"
msgstr "Error en la Baixada"
#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
msgid "Available URLs"
-msgstr "Perfils Disponibles:"
+msgstr "URL disponibles"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Download for this asset is already in progress!"
@@ -8710,9 +8722,8 @@ msgid "All"
msgstr "Tot"
#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
msgid "Search templates, projects, and demos"
-msgstr "Buscar plantilles, projectes i demos."
+msgstr "Cerca plantilles, projectes i demostracions"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Search assets (excluding templates, projects, and demos)"
@@ -9760,9 +9771,8 @@ msgstr ""
#: editor/plugins/item_list_editor_plugin.cpp
#: scene/resources/default_theme/default_theme.cpp
-#, fuzzy
msgid "Separator"
-msgstr "Separació:"
+msgstr "Separador"
#: editor/plugins/item_list_editor_plugin.cpp
msgid "Item %d"
@@ -9853,9 +9863,8 @@ msgid "No mesh to debug."
msgstr "Cap malla per depurar."
#: editor/plugins/mesh_instance_editor_plugin.cpp
-#, fuzzy
msgid "Mesh has no UV in layer %d."
-msgstr "El model no té UVs en aquesta capa."
+msgstr "La malla no té UV a la capa %d."
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "MeshInstance lacks a Mesh!"
@@ -10195,9 +10204,8 @@ msgid "Volume"
msgstr "Volum"
#: editor/plugins/particles_editor_plugin.cpp
-#, fuzzy
msgid "Emission Source:"
-msgstr "Font d'Emissió: "
+msgstr "Font d'emissió:"
#: editor/plugins/particles_editor_plugin.cpp
msgid "A processor material of type 'ParticlesMaterial' is required."
@@ -10430,6 +10438,7 @@ msgid "Points"
msgstr "Punts"
#: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp
+#: scene/resources/navigation_mesh.cpp
msgid "Polygons"
msgstr "Polígons"
@@ -10610,9 +10619,8 @@ msgid "Room Generate Points"
msgstr "Recompte de punts generats"
#: editor/plugins/room_manager_editor_plugin.cpp
-#, fuzzy
msgid "Generate Points"
-msgstr "Recompte de punts generats"
+msgstr "Generar punts"
#: editor/plugins/room_manager_editor_plugin.cpp
#, fuzzy
@@ -10929,9 +10937,8 @@ msgid "Script Temperature History Size"
msgstr ""
#: editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid "Current Script Background Color"
-msgstr "Color de fons no vàlid."
+msgstr "Color de fons de l'script actual"
#: editor/plugins/script_editor_plugin.cpp
#, fuzzy
@@ -10944,9 +10951,8 @@ msgid "Sort Scripts By"
msgstr "Crea un Script"
#: editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid "List Script Names As"
-msgstr "Nom de l'script:"
+msgstr "Llista els noms dels scripts com a"
#: editor/plugins/script_editor_plugin.cpp
msgid "Exec Flags"
@@ -11330,9 +11336,8 @@ msgstr "Translació"
#. TRANSLATORS: Refers to changing the scale of a node in the 3D editor.
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Scaling:"
-msgstr "Escala: "
+msgstr "Escalat:"
#. TRANSLATORS: Refers to changing the position of a node in the 3D editor.
#: editor/plugins/spatial_editor_plugin.cpp
@@ -11362,27 +11367,22 @@ msgid "Yaw:"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Objects Drawn:"
-msgstr "Objectes Dibuixats:"
+msgstr "Objectes dibuixats:"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Material Changes:"
-msgstr "Canvis de Material:"
+msgstr "Canvis del Material:"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Shader Changes:"
-msgstr "Canvis de Shader:"
+msgstr "Canvis del Shader:"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Surface Changes:"
-msgstr "Canvis de superfície:"
+msgstr "Canvis de la superfície:"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Draw Calls:"
msgstr "Crides de Dibuix:"
@@ -11862,7 +11862,8 @@ msgid "Invalid geometry, can't replace by mesh."
msgstr "La geometria no és vàlida, no es pot substituir per una malla."
#: editor/plugins/sprite_editor_plugin.cpp
-msgid "Convert to Mesh2D"
+#, fuzzy
+msgid "Convert to MeshInstance2D"
msgstr "Convertir a Malla2D"
#: editor/plugins/sprite_editor_plugin.cpp
@@ -11896,19 +11897,16 @@ msgid "Sprite"
msgstr "Sprite"
#: editor/plugins/sprite_editor_plugin.cpp
-#, fuzzy
msgid "Simplification:"
-msgstr "Simplificació: "
+msgstr "Simplificació:"
#: editor/plugins/sprite_editor_plugin.cpp
-#, fuzzy
msgid "Shrink (Pixels):"
-msgstr "Redueix (Píxels): "
+msgstr "Redueix (Píxels):"
#: editor/plugins/sprite_editor_plugin.cpp
-#, fuzzy
msgid "Grow (Pixels):"
-msgstr "Engrandeix (Píxels): "
+msgstr "Engrandeix (Píxels):"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Update Preview"
@@ -12166,9 +12164,8 @@ msgid "With Data"
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select by data type:"
-msgstr "Selecciona un Node:"
+msgstr "Seleccioneu per tipus de dades:"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all visible color items."
@@ -12237,19 +12234,16 @@ msgid ""
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Collapse types."
-msgstr "Col·lapsar tot."
+msgstr "Col·lapsar els tipus."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Expand types."
-msgstr "Expandir tot."
+msgstr "Expandir els tipus."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select all Theme items."
-msgstr "Seleccioneu un Fitxer de Plantilla."
+msgstr "Seleccioneu tots els elements del tema."
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -12418,9 +12412,8 @@ msgid "Add Type:"
msgstr "Tipus:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Item:"
-msgstr "Afegeix un Element:"
+msgstr "Afegeix un element:"
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -12428,9 +12421,8 @@ msgid "Add StyleBox Item"
msgstr "Afegeix tots els Elements"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove Items:"
-msgstr "Elimina Element:"
+msgstr "Suprimeix els elements:"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Remove Class Items"
@@ -12471,9 +12463,8 @@ msgid "Editor Theme"
msgstr "Editar Tema"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select Another Theme Resource:"
-msgstr "Elimina el Recurs:"
+msgstr "Seleccioneu un altre recurs de tema:"
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -12500,9 +12491,8 @@ msgid "Available Node-based types:"
msgstr "Perfils Disponibles:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Type name is empty!"
-msgstr "El nom del fitxer és buit."
+msgstr "El nom del tipus és buit!"
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -12918,8 +12908,7 @@ msgid "Select the previous shape, subtile, or Tile."
msgstr "Seleccioneu la forma, el subtile o el Tile anterior."
#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp
-#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp
-#: scene/resources/texture.cpp
+#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp
#, fuzzy
msgid "Region"
msgstr "Mode Regió"
@@ -12952,9 +12941,8 @@ msgid "Priority"
msgstr "Mode Prioritat"
#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/node_2d.cpp
-#, fuzzy
msgid "Z Index"
-msgstr "Ãndex"
+msgstr "Ãndex Z"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Region Mode"
@@ -14537,34 +14525,10 @@ msgstr "Esborrar la configuració '%s' ?"
#: editor/project_export.cpp
#, fuzzy
-msgid ""
-"Failed to export the project for platform '%s'.\n"
-"Export templates seem to be missing or invalid."
-msgstr ""
-"No s'ha pogut exportar el projecte per la plataforma '%s'.\n"
-"Les plantilles d'exportació semblen absents o son invalides."
-
-#: 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
-#, fuzzy
msgid "Exporting All"
msgstr "Exportant tot"
#: editor/project_export.cpp
-msgid "The given export path doesn't exist:"
-msgstr "El camí d'exportació donat no existeix:"
-
-#: editor/project_export.cpp
-msgid "Export templates for this platform are missing/corrupted:"
-msgstr "Manquen d'exportació per aquesta plataforma o s'han malmès:"
-
-#: editor/project_export.cpp
msgid "Export Path"
msgstr "Camí d'exportació"
@@ -14711,6 +14675,11 @@ msgid "Export templates for this platform are missing:"
msgstr "Manquen les plantilles d'exportació per aquesta plataforma:"
#: editor/project_export.cpp
+#, fuzzy
+msgid "Project Export"
+msgstr "Fundadors del Projecte"
+
+#: editor/project_export.cpp
msgid "Manage Export Templates"
msgstr "Gestor de Plantilles d'Exportació"
@@ -17186,7 +17155,7 @@ msgstr ""
#: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp
#: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp
-#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp
+#: scene/3d/collision_polygon.cpp
#, fuzzy
msgid "Polygon"
msgstr "Polígons"
@@ -17816,7 +17785,6 @@ msgid "Use In Baked Light"
msgstr "Precalcular Lightmaps"
#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
-#: scene/resources/navigation_mesh.cpp
msgid "Cell"
msgstr ""
@@ -17846,6 +17814,19 @@ msgstr "Centre"
msgid "Mask"
msgstr ""
+#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
+#, fuzzy
+msgid "Bake Navigation"
+msgstr "Mode Navegació"
+
+#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp
+#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp
+#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp
+#: scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Navigation Layers"
+msgstr "Mode Navegació"
+
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Plane"
msgstr "Pla següent"
@@ -19454,10 +19435,6 @@ msgid "Could not execute on device."
msgstr "No s'ha pogut crear el directori."
#: platform/android/export/export_plugin.cpp
-msgid "Unable to find the 'apksigner' tool."
-msgstr ""
-
-#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid ""
"Android build template not installed in the project. Install it from the "
@@ -19573,12 +19550,16 @@ msgstr ""
msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version."
msgstr ""
+#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Code Signing"
+msgstr "Senyal"
+
#: 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."
+"'apksigner' could not be found. Please check that the command is available "
+"in the Android SDK build-tools directory. The resulting %s is unsigned."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -19595,6 +19576,11 @@ msgid "Could not find keystore, unable to export."
msgstr "No es pot obrir la plantilla per exportar."
#: platform/android/export/export_plugin.cpp
+#, fuzzy
+msgid "Could not start apksigner executable."
+msgstr "No s'ha pogut començar el subprocés!"
+
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
@@ -19625,7 +19611,8 @@ msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Unsupported export format!\n"
+#, fuzzy
+msgid "Unsupported export format!"
msgstr "Format d'exportació no suportat.\n"
#: platform/android/export/export_plugin.cpp
@@ -19640,9 +19627,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid ""
-"Android build version mismatch:\n"
-" Template installed: %s\n"
-" Godot Version: %s\n"
+"Android build version mismatch: Template installed: %s, Godot version: %s. "
"Please reinstall Android build template from 'Project' menu."
msgstr ""
"La versió de compilació d'Android no coincideix:\n"
@@ -19653,11 +19638,12 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Unable to overwrite res://android/build/res/*.xml files with project name"
+"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"
+#, fuzzy
+msgid "Could not export project files to gradle project."
msgstr "No s'han pogut exportar fitxers de projecte a gradle project\n"
#: platform/android/export/export_plugin.cpp
@@ -19672,7 +19658,7 @@ msgstr "Construint Projecte Android (gradle)"
#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid ""
-"Building of Android project failed, check output for the error.\n"
+"Building of Android project failed, check output for the error. "
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
"La construcció del projecte Android ha fallat, comproveu la sortida per "
@@ -19692,7 +19678,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
#, fuzzy
-msgid "Package not found: %s"
+msgid "Package not found: \"%s\"."
msgstr "Animació no trobada: '%s'"
#: platform/android/export/export_plugin.cpp
@@ -19701,17 +19687,15 @@ msgid "Creating APK..."
msgstr "Creant els contorns..."
#: platform/android/export/export_plugin.cpp
-msgid ""
-"Could not find template APK to export:\n"
-"%s"
+#, fuzzy
+msgid "Could not find template APK to export: \"%s\"."
msgstr ""
"No s'ha trobat la plantilla APK per a exportar:\n"
"%s"
#: platform/android/export/export_plugin.cpp
msgid ""
-"Missing libraries in the export template for the selected architectures: "
-"%s.\n"
+"Missing libraries in the export template for the selected architectures: %s. "
"Please build a template with all required libraries, or uncheck the missing "
"architectures in the export preset."
msgstr ""
@@ -19723,7 +19707,7 @@ msgstr "Afegint %s..."
#: platform/android/export/export_plugin.cpp
#, fuzzy
-msgid "Could not export project files"
+msgid "Could not export project files."
msgstr "No s'ha pogut escriure el fitxer"
#: platform/android/export/export_plugin.cpp
@@ -19965,6 +19949,17 @@ msgstr "Talla els Nodes"
msgid "Custom BG Color"
msgstr "Talla els Nodes"
+#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Prepare Templates"
+msgstr "Administrar Plantilles"
+
+#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Export template not found."
+msgstr "No s'ha trobat cap plantilla de publicació personalitzada."
+
#: platform/iphone/export/export.cpp
msgid "App Store Team ID not specified - cannot configure the project."
msgstr ""
@@ -19986,23 +19981,35 @@ msgid "Run exported HTML in the system's default browser."
msgstr "Executa l'HTML exportat en el navegador per defecte."
#: platform/javascript/export/export.cpp
-msgid "Could not open template for export:"
+#, fuzzy
+msgid "Could not open template for export: \"%s\"."
msgstr "No es pot obrir la plantilla per exportar:"
#: platform/javascript/export/export.cpp
-msgid "Invalid export template:"
+#, fuzzy
+msgid "Invalid export template: \"%s\"."
msgstr "Plantilla d'exportació no vàlida:"
#: platform/javascript/export/export.cpp
-msgid "Could not write file:"
+#, fuzzy
+msgid "Could not write file: \"%s\"."
msgstr "No s'ha pogut escriure el fitxer:"
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Icon Creation"
+msgstr "Establir Marge"
+
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not read file:"
+msgid "Could not read file: \"%s\"."
msgstr "No s'ha pogut escriure el fitxer:"
#: platform/javascript/export/export.cpp
+msgid "PWA"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
#, fuzzy
msgid "Variant"
msgstr "Separació:"
@@ -20078,17 +20085,17 @@ msgstr ""
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not read HTML shell:"
+msgid "Could not read HTML shell: \"%s\"."
msgstr "No es pot llegir l'intèrpret personalitzat d’ordres HTML:"
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not create HTTP server directory:"
+msgid "Could not create HTTP server directory: %s."
msgstr "No s'ha pogut crear el directori:"
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Error starting HTTP server:"
+msgid "Error starting HTTP server: %d."
msgstr "Error en desar l'escena:"
#: platform/javascript/export/export.cpp
@@ -20388,9 +20395,28 @@ msgid "Apple Team ID"
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open icon file \"%s\"."
+msgstr "No s'ha pogut escriure el fitxer"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start xcrun executable."
+msgstr "No s'ha pogut començar el subprocés!"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization failed."
+msgstr "Localització"
+
+#: platform/osx/export/export.cpp
+msgid "Notarization request UUID: \"%s\""
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid ""
-"Note: The notarization process generally takes less than an hour. When the "
-"process is completed, you'll receive an email."
+"The notarization process generally takes less than an hour. When the process "
+"is completed, you'll receive an email."
msgstr ""
#: platform/osx/export/export.cpp
@@ -20406,23 +20432,78 @@ msgid ""
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign failed with error \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign require regex module."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Could not start codesign executable, make sure Xcode command line tools are "
+"installed."
+msgstr ""
+
+#: platform/osx/export/export.cpp platform/windows/export/export.cpp
#, fuzzy
msgid "No identity found."
msgstr "No s'ha trobat cap icona."
#: platform/osx/export/export.cpp
#, fuzzy
+msgid "Cannot sign file %s."
+msgstr "S'ha produit un error al desar el fitxer! %s"
+
+#: platform/osx/export/export.cpp
+msgid "Relative symlinks are not supported, exported \"%s\" might be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "DMG Creation"
+msgstr "Direccions"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start hdiutil executable."
+msgstr "No s'ha pogut començar el subprocés!"
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed - file exists."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
msgid "Creating app bundle"
msgstr "Creant Miniatura"
#: platform/osx/export/export.cpp
#, fuzzy
-msgid "Could not find template app to export:"
+msgid "Could not find template app to export: \"%s\"."
msgstr ""
"No s'ha trobat la plantilla APK per a exportar:\n"
"%s"
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid export format."
+msgstr "Plantilla d'exportació no vàlida:"
+
+#: platform/osx/export/export.cpp
msgid ""
"Relative symlinks are not supported on this OS, the exported project might "
"be broken!"
@@ -20430,7 +20511,7 @@ msgstr ""
#: platform/osx/export/export.cpp
msgid ""
-"Requested template binary '%s' not found. It might be missing from your "
+"Requested template binary \"%s\" not found. It might be missing from your "
"template archive."
msgstr ""
@@ -20472,6 +20553,16 @@ msgstr ""
#: platform/osx/export/export.cpp
#, fuzzy
+msgid "ZIP Creation"
+msgstr "Projecte"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open file to read from path \"%s\"."
+msgstr "No s'han pogut exportar fitxers de projecte a gradle project\n"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
msgid "Invalid bundle identifier:"
msgstr "Identificador no vàlid:"
@@ -20788,6 +20879,11 @@ msgid "Debug Algorithm"
msgstr "Depurador"
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to rename temporary file \"%s\"."
+msgstr "No es pot desar el Tema:"
+
+#: platform/windows/export/export.cpp
msgid "Identity Type"
msgstr ""
@@ -20835,6 +20931,70 @@ msgid "Trademarks"
msgstr ""
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Resources Modification"
+msgstr "Rotació aleatòria:"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find rcedit executable at \"%s\"."
+msgstr "No es pot obrir la plantilla per exportar."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find wine executable at \"%s\"."
+msgstr "No es pot obrir la plantilla per exportar."
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start rcedit executable, configure rcedit path in the Editor "
+"Settings (Export > Windows > Rcedit)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"rcedit failed to modify executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find signtool executable at \"%s\"."
+msgstr "No es pot obrir la plantilla per exportar."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find osslsigncode executable at \"%s\"."
+msgstr "No es pot obrir la plantilla per exportar."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid identity type."
+msgstr "Identificador no vàlid:"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid timestamp server."
+msgstr "Nom no vàlid."
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start signtool executable, configure signtool path in the Editor "
+"Settings (Export > Windows > Signtool)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Signtool failed to sign executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to remove temporary file \"%s\"."
+msgstr "No es pot desar el Tema:"
+
+#: platform/windows/export/export.cpp
msgid ""
"The rcedit tool must be configured in the Editor Settings (Export > Windows "
"> Rcedit) to change the icon or app information data."
@@ -20856,6 +21016,23 @@ msgid "Invalid product version:"
msgstr "GUID del producte no vàlid."
#: platform/windows/export/export.cpp
+msgid "Windows executables cannot be >= 4 GiB."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+#, fuzzy
+msgid "Failed to open executable file \"%s\"."
+msgstr "L'extensió no és vàlida."
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable file header corrupted."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable \"pck\" section not found."
+msgstr ""
+
+#: platform/windows/export/export.cpp
#, fuzzy
msgid "Windows"
msgstr "Finestra nova"
@@ -20872,6 +21049,10 @@ msgstr ""
msgid "Wine"
msgstr ""
+#: platform/x11/export/export.cpp
+msgid "32-bit executables cannot have embedded data >= 4 GiB."
+msgstr ""
+
#: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp
#: scene/resources/texture.cpp
#, fuzzy
@@ -21001,7 +21182,8 @@ msgstr ""
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/3d/light.cpp scene/3d/reflection_probe.cpp
-#: scene/3d/visual_instance.cpp scene/resources/material.cpp
+#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp
+#: scene/resources/material.cpp
#, fuzzy
msgid "Max Distance"
msgstr "Trieu la distància:"
@@ -21810,6 +21992,18 @@ msgstr ""
msgid "Edge Connection Margin"
msgstr "Editar Connexió:"
+#: scene/2d/navigation_2d.cpp
+msgid ""
+"'Navigation2D' node and 'Navigation2D.get_simple_path()' are deprecated and "
+"will be removed in a future version. Use 'Navigation2DServer.map_get_path()' "
+"instead."
+msgstr ""
+
+#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
+#, fuzzy
+msgid "Path Desired Distance"
+msgstr "Trieu la distància:"
+
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
msgid "Target Desired Distance"
msgstr ""
@@ -21868,17 +22062,19 @@ msgstr ""
"polígon."
#: scene/2d/navigation_polygon.cpp
-msgid ""
-"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
-"node. It only provides navigation data."
-msgstr ""
-"NavigationPolygonInstance ha de ser fill o nét d'un node Navigation2D. Només "
-"proporciona dades de navegació."
-
-#: scene/2d/navigation_polygon.cpp
msgid "Navpoly"
msgstr ""
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Enter Cost"
+msgstr "Part inferior"
+
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Travel Cost"
+msgstr "Viatge"
+
#: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp
#: scene/main/canvas_layer.cpp
#, fuzzy
@@ -23094,6 +23290,13 @@ msgstr ""
msgid "Transform Normals"
msgstr "S'ha interromput la Transformació ."
+#: scene/3d/navigation.cpp
+msgid ""
+"'Navigation' node and 'Navigation.get_simple_path()' are deprecated and will "
+"be removed in a future version. Use 'NavigationServer.map_get_path()' "
+"instead."
+msgstr ""
+
#: scene/3d/navigation.cpp scene/resources/curve.cpp
#, fuzzy
msgid "Up Vector"
@@ -23118,14 +23321,6 @@ msgid ""
"The NavigationAgent can be used only under a Spatial inheriting parent node."
msgstr ""
-#: scene/3d/navigation_mesh_instance.cpp
-msgid ""
-"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
-"It only provides navigation data."
-msgstr ""
-"NavigationMeshInstance ha de ser fill o nét d'un node Navigation. Només "
-"proporciona dades de navegació."
-
#: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp
#, fuzzy
msgid "NavMesh"
@@ -25838,6 +26033,16 @@ msgid "3D Physics"
msgstr "Fotograma de Física %"
#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "2D Navigation"
+msgstr "Mode Navegació"
+
+#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "3D Navigation"
+msgstr "Mode Navegació"
+
+#: scene/register_scene_types.cpp
msgid "Use hiDPI"
msgstr ""
@@ -27265,7 +27470,7 @@ msgstr "Transició: "
msgid "Refraction"
msgstr "Separació:"
-#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp
+#: scene/resources/material.cpp
msgid "Detail"
msgstr ""
@@ -27350,7 +27555,12 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
-msgid "Sample Partition Type"
+msgid "Sampling"
+msgstr "Escala: "
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Partition Type"
msgstr "Estableix el Tipus de Variable"
#: scene/resources/navigation_mesh.cpp
@@ -27368,10 +27578,15 @@ msgid "Source Group Name"
msgstr "Font"
#: scene/resources/navigation_mesh.cpp
-msgid "Agent"
+msgid "Cells"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Agents"
+msgstr "Arguments de l'Escena Principal:"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Max Climb"
msgstr ""
@@ -27381,11 +27596,16 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
+msgid "Regions"
+msgstr "Mode Regió"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
msgid "Merge Size"
msgstr "Combina-ho a partir de l'Escena"
#: scene/resources/navigation_mesh.cpp
-msgid "Edge"
+msgid "Edges"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -27399,6 +27619,11 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
+msgid "Details"
+msgstr "Carrega Valors predeterminats"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
msgid "Sample Distance"
msgstr "Trieu la distància:"
@@ -27416,9 +27641,19 @@ msgid "Ledge Spans"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Filter Walkable Low Height Spans"
+msgid "Walkable Low Height Spans"
msgstr ""
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB"
+msgstr "Generant AABB"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB Offset"
+msgstr "òfset:"
+
#: scene/resources/occluder_shape.cpp
msgid "Spheres"
msgstr ""
@@ -27833,6 +28068,11 @@ msgid "Scenario"
msgstr "Escena"
#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Navigation Map"
+msgstr "Mode Navegació"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
msgid "Direct Space State"
msgstr ""
@@ -27850,6 +28090,26 @@ msgstr "Lineal Esquerra"
msgid "Default Angular Damp"
msgstr ""
+#: scene/resources/world.cpp
+#, fuzzy
+msgid "Default Map Up"
+msgstr "Predeterminat"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Size"
+msgstr "Actualitzar Previsualització"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Height"
+msgstr "Provant"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Edge Connection Margin"
+msgstr "Editar Connexió:"
+
#: scene/resources/world_2d.cpp
msgid "Canvas"
msgstr ""
diff --git a/editor/translations/cs.po b/editor/translations/cs.po
index 2a02b432f7..ade3299077 100644
--- a/editor/translations/cs.po
+++ b/editor/translations/cs.po
@@ -249,9 +249,10 @@ msgid "Data"
msgstr "Data"
#: core/io/file_access_network.cpp core/register_core_types.cpp
-#: editor/editor_settings.cpp main/main.cpp
+#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
#: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h
+#: scene/gui/file_dialog.cpp
#, fuzzy
msgid "Network"
msgstr "Síťový profiler"
@@ -413,6 +414,16 @@ msgstr ""
msgid "Max Size (KB)"
msgstr ""
+#: core/os/input.cpp
+#, fuzzy
+msgid "Mouse Mode"
+msgstr "Režim přesouvání"
+
+#: core/os/input.cpp
+#, fuzzy
+msgid "Use Accumulated Input"
+msgstr "Odstranit vstup"
+
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: servers/audio_server.cpp
msgid "Device"
@@ -615,7 +626,8 @@ msgstr "Popis"
#: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
-#: main/main.cpp
+#: main/main.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp
msgid "Run"
msgstr "Spustit"
@@ -706,6 +718,11 @@ msgid "Main Run Args"
msgstr "Argumenty hlavní scény:"
#: core/project_settings.cpp
+#, fuzzy
+msgid "Scene Naming"
+msgstr "Cesta ke scéně:"
+
+#: core/project_settings.cpp
msgid "Search In File Extensions"
msgstr ""
@@ -713,19 +730,15 @@ msgstr ""
msgid "Script Templates Search Path"
msgstr ""
-#: core/project_settings.cpp editor/editor_node.cpp
-#: editor/plugins/version_control_editor_plugin.cpp
-msgid "Version Control"
-msgstr "Správa verzí"
-
#: core/project_settings.cpp
-msgid "Autoload On Startup"
-msgstr ""
+#, fuzzy
+msgid "Version Control Autoload On Startup"
+msgstr "Verzování (VCS)"
#: core/project_settings.cpp
#, fuzzy
-msgid "Plugin Name"
-msgstr "Název pluginu:"
+msgid "Version Control Plugin Name"
+msgstr "Správa verzí"
#: core/project_settings.cpp scene/2d/collision_object_2d.cpp
#: scene/3d/collision_object.cpp scene/gui/control.cpp
@@ -845,7 +858,8 @@ msgid "Quality"
msgstr ""
#: core/project_settings.cpp scene/gui/file_dialog.cpp
-#: scene/main/scene_tree.cpp servers/visual_server.cpp
+#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp
+#: servers/visual_server.cpp
#, fuzzy
msgid "Filters"
msgstr "Filtry:"
@@ -2291,8 +2305,8 @@ msgid "Open"
msgstr "Otevřít"
#: editor/dependency_editor.cpp
-msgid "Owners Of:"
-msgstr "Vlastníci:"
+msgid "Owners of: %s (Total: %d)"
+msgstr ""
#: editor/dependency_editor.cpp
msgid ""
@@ -2595,7 +2609,7 @@ msgid "Bus Options"
msgstr "Možnosti sběrnice"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/scene_tree_dock.cpp
+#: editor/project_export.cpp editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "Duplikovat"
@@ -2853,6 +2867,25 @@ msgid "Choose"
msgstr "Vyberte"
#: editor/editor_export.cpp
+msgid "Project export for platform:"
+msgstr ""
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Completed with errors."
+msgstr "Kopírovat cestu k uzlu"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Completed successfully."
+msgstr "BalíÄek byl úspěšnÄ› nainstalován!"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed."
+msgstr "Selhalo:"
+
+#: editor/editor_export.cpp
msgid "Storing File:"
msgstr "Ukládám soubor:"
@@ -2865,6 +2898,31 @@ msgid "Packing"
msgstr "Balím"
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save PCK"
+msgstr "Uložit jako"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Cannot create file \"%s\"."
+msgstr "Nelze vytvořit složku."
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to export project files."
+msgstr "Nelze exportovat soubory projektu"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Can't open file to read from path \"%s\"."
+msgstr "Nelze otevřít soubor pro zápis:"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save ZIP"
+msgstr "Uložit jako"
+
+#: editor/editor_export.cpp
msgid ""
"Target platform requires 'ETC' texture compression for GLES2. Enable 'Import "
"Etc' in Project Settings."
@@ -2984,11 +3042,33 @@ msgstr "Vlastní ladící šablona nebyla nalezena."
msgid "Custom release template not found."
msgstr "Vlastní šablona k uveřejnění nebyla nalezena."
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Prepare Template"
+msgstr "Spravovat šablony"
+
+#: editor/editor_export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "The given export path doesn't exist."
+msgstr "Zadaná cesta pro export neexistuje:"
+
#: editor/editor_export.cpp platform/javascript/export/export.cpp
-msgid "Template file not found:"
+#, fuzzy
+msgid "Template file not found: \"%s\"."
msgstr "Soubor šablony nenalezen:"
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to copy export template."
+msgstr "Neplatná šablona pro export:"
+
+#: editor/editor_export.cpp platform/windows/export/export.cpp
+#: platform/x11/export/export.cpp
+#, fuzzy
+msgid "PCK Embedding"
+msgstr "Zarovnávání"
+
+#: editor/editor_export.cpp
msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB."
msgstr "Při 32-bitovým exportu vestavěné PCK nemůže být větší než 4 GiB."
@@ -3158,9 +3238,9 @@ msgid "Import"
msgstr "Import"
#: editor/editor_feature_profile.cpp editor/project_export.cpp
-#: platform/android/export/export.cpp platform/javascript/export/export.cpp
-#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
-#: platform/windows/export/export.cpp
+#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#: platform/uwp/export/export.cpp platform/windows/export/export.cpp
msgid "Export"
msgstr "Export"
@@ -4319,15 +4399,6 @@ msgid ""
"Unable to write to file '%s', file in use, locked or lacking permissions."
msgstr ""
-#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
-msgid "Scene"
-msgstr "Scéna"
-
-#: editor/editor_node.cpp
-#, fuzzy
-msgid "Scene Naming"
-msgstr "Cesta ke scéně:"
-
#: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp
#: servers/arvr/arvr_interface.cpp
#, fuzzy
@@ -4456,6 +4527,10 @@ msgid "Default Color Picker Mode"
msgstr ""
#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
+msgid "Version Control"
+msgstr "Správa verzí"
+
+#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
#, fuzzy
msgid "Username"
msgstr "Přejmenovat"
@@ -4484,6 +4559,10 @@ msgstr "Zapnout nerozptylující režim."
msgid "Add a new scene."
msgstr "Přidat novou scénu."
+#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
+msgid "Scene"
+msgstr "Scéna"
+
#: editor/editor_node.cpp
msgid "Go to previously opened scene."
msgstr "Přejít na předchozí scénu."
@@ -5272,6 +5351,11 @@ msgstr ""
"Přidejte prosím spustitelné přednastavení v exportovacím menu nebo definujte "
"existující přednastavení jako spustitelné."
+#: editor/editor_run_native.cpp
+#, fuzzy
+msgid "Project Run"
+msgstr "Projekt"
+
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
msgstr "Napište svůj kód v _run() metodě."
@@ -5555,7 +5639,9 @@ msgid "Draw Spaces"
msgstr "Vykreslovací volání:"
#: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp
-#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp
+#: scene/main/scene_tree.cpp scene/resources/world.cpp
+#: scene/resources/world_2d.cpp
msgid "Navigation"
msgstr "Navigace"
@@ -7057,7 +7143,7 @@ msgstr ""
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp
-#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp
+#: scene/gui/control.cpp
#, fuzzy
msgid "Filter"
msgstr "Filtry:"
@@ -7354,6 +7440,18 @@ msgid "Saving..."
msgstr "Ukládání..."
#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used as a normal map in 3D. Enabling red-green "
+"texture compression to reduce memory usage (blue channel is discarded)."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap "
+"generation and VRAM texture compression."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
msgid "2D, Detect 3D"
msgstr ""
@@ -8038,11 +8136,20 @@ msgid "New Anim"
msgstr "Nová animace"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+msgstr "Vytvořit novou animaci"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Change Animation Name:"
msgstr "Změnit název animace:"
#: editor/plugins/animation_player_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Rename Animation"
+msgstr "Přejmenovat animaci"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Delete Animation?"
msgstr "Smazat animaci?"
@@ -8060,11 +8167,6 @@ msgid "Animation name already exists!"
msgstr "Jméno animace už existuje!"
#: editor/plugins/animation_player_editor_plugin.cpp
-#: editor/plugins/sprite_frames_editor_plugin.cpp
-msgid "Rename Animation"
-msgstr "Přejmenovat animaci"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate Animation"
msgstr "Duplikovat animaci"
@@ -8208,10 +8310,6 @@ msgid "Pin AnimationPlayer"
msgstr "Připnout AnimationPlayer"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Create New Animation"
-msgstr "Vytvořit novou animaci"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Name:"
msgstr "Jméno animace:"
@@ -10335,6 +10433,7 @@ msgid "Points"
msgstr "Body"
#: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp
+#: scene/resources/navigation_mesh.cpp
msgid "Polygons"
msgstr "Polygony"
@@ -11732,7 +11831,8 @@ msgid "Invalid geometry, can't replace by mesh."
msgstr "Neplatná geometrie, nelze nahradit sítí."
#: editor/plugins/sprite_editor_plugin.cpp
-msgid "Convert to Mesh2D"
+#, fuzzy
+msgid "Convert to MeshInstance2D"
msgstr "Konvertovat na Mesh2D"
#: editor/plugins/sprite_editor_plugin.cpp
@@ -12754,8 +12854,7 @@ msgid "Select the previous shape, subtile, or Tile."
msgstr "Vybrat pÅ™edchozí tvar, dílÄí dlaždici nebo dlaždici."
#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp
-#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp
-#: scene/resources/texture.cpp
+#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp
msgid "Region"
msgstr "Oblast"
@@ -14289,36 +14388,10 @@ msgid "Delete preset '%s'?"
msgstr "Odstranit předvolbu '%s'?"
#: editor/project_export.cpp
-msgid ""
-"Failed to export the project for platform '%s'.\n"
-"Export templates seem to be missing or invalid."
-msgstr ""
-"Export projektu pro platformu \"%s\" se nezdařil.\n"
-"Zdá se, že šablony exportu chybí nebo jsou neplatné."
-
-#: 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 ""
-"Export projektu pro platformu \"%s\" se nezdařil.\n"
-"Může to být způsobeno problémem s konfigurací v export profilu nebo v "
-"nastavení exportu."
-
-#: editor/project_export.cpp
msgid "Exporting All"
msgstr "Exportování všeho"
#: editor/project_export.cpp
-msgid "The given export path doesn't exist:"
-msgstr "Zadaná cesta pro export neexistuje:"
-
-#: editor/project_export.cpp
-msgid "Export templates for this platform are missing/corrupted:"
-msgstr "Šablony exportu pro tuto platformu chybí nebo jsou poškozené:"
-
-#: editor/project_export.cpp
msgid "Export Path"
msgstr "Exportovat cestu"
@@ -14466,6 +14539,11 @@ msgid "Export templates for this platform are missing:"
msgstr "Šablony exportu pro tuto platformu chybí:"
#: editor/project_export.cpp
+#, fuzzy
+msgid "Project Export"
+msgstr "Zakladatelé projektu"
+
+#: editor/project_export.cpp
msgid "Manage Export Templates"
msgstr "Spravovat šablony exportu"
@@ -16873,7 +16951,7 @@ msgstr ""
#: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp
#: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp
-#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp
+#: scene/3d/collision_polygon.cpp
#, fuzzy
msgid "Polygon"
msgstr "Polygony"
@@ -17497,7 +17575,6 @@ msgid "Use In Baked Light"
msgstr "Zapéct lightmapy"
#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
-#: scene/resources/navigation_mesh.cpp
msgid "Cell"
msgstr ""
@@ -17527,6 +17604,19 @@ msgstr "Uprostřed"
msgid "Mask"
msgstr ""
+#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
+#, fuzzy
+msgid "Bake Navigation"
+msgstr "Navigace"
+
+#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp
+#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp
+#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp
+#: scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Navigation Layers"
+msgstr "NavigaÄní režim"
+
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Plane"
msgstr "Další rovina"
@@ -19088,10 +19178,6 @@ msgid "Could not execute on device."
msgstr "Nelze vytvořit složku."
#: platform/android/export/export_plugin.cpp
-msgid "Unable to find the 'apksigner' tool."
-msgstr "Nelze najít nástroj 'apksigner'."
-
-#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -19215,12 +19301,16 @@ msgstr ""
msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version."
msgstr ""
+#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Code Signing"
+msgstr "Signál"
+
#: 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."
+"'apksigner' could not be found. Please check that the command is available "
+"in the Android SDK build-tools directory. The resulting %s is unsigned."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -19236,6 +19326,11 @@ msgid "Could not find keystore, unable to export."
msgstr "NepodaÅ™ilo se najít úložiÅ¡tÄ› klíÄů, nelze exportovat."
#: platform/android/export/export_plugin.cpp
+#, fuzzy
+msgid "Could not start apksigner executable."
+msgstr "Nelze spustit podproces!"
+
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
@@ -19264,7 +19359,8 @@ msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr "Neplatné jméno souboru! Android APK vyžaduje příponu *.apk."
#: platform/android/export/export_plugin.cpp
-msgid "Unsupported export format!\n"
+#, fuzzy
+msgid "Unsupported export format!"
msgstr "Nepodporovaný formát exportu!\n"
#: platform/android/export/export_plugin.cpp
@@ -19276,10 +19372,9 @@ msgstr ""
"verzi. Přeinstalujte jej z nabídky \"Projekt\"."
#: platform/android/export/export_plugin.cpp
+#, fuzzy
msgid ""
-"Android build version mismatch:\n"
-" Template installed: %s\n"
-" Godot Version: %s\n"
+"Android build version mismatch: Template installed: %s, Godot version: %s. "
"Please reinstall Android build template from 'Project' menu."
msgstr ""
"Neshoda verzí Android buildu:\n"
@@ -19289,11 +19384,12 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Unable to overwrite res://android/build/res/*.xml files with project name"
+"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"
+#, fuzzy
+msgid "Could not export project files to gradle project."
msgstr "Nelze exportovat soubory projektu do projektu gradle\n"
#: platform/android/export/export_plugin.cpp
@@ -19305,8 +19401,9 @@ msgid "Building Android Project (gradle)"
msgstr "Buildování projektu pro Android (gradle)"
#: platform/android/export/export_plugin.cpp
+#, fuzzy
msgid ""
-"Building of Android project failed, check output for the error.\n"
+"Building of Android project failed, check output for the error. "
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
"Buildování projektu pro Android se nezdařilo, zkontrolujte chybový výstup.\n"
@@ -19326,7 +19423,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
#, fuzzy
-msgid "Package not found: %s"
+msgid "Package not found: \"%s\"."
msgstr "Animace nenalezena: '%s'"
#: platform/android/export/export_plugin.cpp
@@ -19334,17 +19431,15 @@ msgid "Creating APK..."
msgstr "Vytvářím APK..."
#: platform/android/export/export_plugin.cpp
-msgid ""
-"Could not find template APK to export:\n"
-"%s"
+#, fuzzy
+msgid "Could not find template APK to export: \"%s\"."
msgstr ""
"Nepodařilo se najít šablonu APK pro export:\n"
"%s"
#: platform/android/export/export_plugin.cpp
msgid ""
-"Missing libraries in the export template for the selected architectures: "
-"%s.\n"
+"Missing libraries in the export template for the selected architectures: %s. "
"Please build a template with all required libraries, or uncheck the missing "
"architectures in the export preset."
msgstr ""
@@ -19354,7 +19449,8 @@ msgid "Adding files..."
msgstr "Přidávám soubory..."
#: platform/android/export/export_plugin.cpp
-msgid "Could not export project files"
+#, fuzzy
+msgid "Could not export project files."
msgstr "Nelze exportovat soubory projektu"
#: platform/android/export/export_plugin.cpp
@@ -19597,6 +19693,17 @@ msgstr "Vyjmout uzly"
msgid "Custom BG Color"
msgstr "Vyjmout uzly"
+#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Prepare Templates"
+msgstr "Spravovat šablony"
+
+#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Export template not found."
+msgstr "Vlastní šablona k uveřejnění nebyla nalezena."
+
#: platform/iphone/export/export.cpp
msgid "App Store Team ID not specified - cannot configure the project."
msgstr "App Store Team ID nebyla poskytnuta - projekt nelze konfigurovat."
@@ -19618,22 +19725,35 @@ msgid "Run exported HTML in the system's default browser."
msgstr "Spustit vyexportované HTML ve výchozím prohlížeÄi."
#: platform/javascript/export/export.cpp
-msgid "Could not open template for export:"
+#, fuzzy
+msgid "Could not open template for export: \"%s\"."
msgstr "Nelze otevřít šablonu pro export:"
#: platform/javascript/export/export.cpp
-msgid "Invalid export template:"
+#, fuzzy
+msgid "Invalid export template: \"%s\"."
msgstr "Neplatná šablona pro export:"
#: platform/javascript/export/export.cpp
-msgid "Could not write file:"
+#, fuzzy
+msgid "Could not write file: \"%s\"."
msgstr "Nelze zapsat soubor:"
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Icon Creation"
+msgstr "Nastavit okraj"
+
#: platform/javascript/export/export.cpp
-msgid "Could not read file:"
+#, fuzzy
+msgid "Could not read file: \"%s\"."
msgstr "Nelze pÅ™eÄíst soubor:"
#: platform/javascript/export/export.cpp
+msgid "PWA"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
#, fuzzy
msgid "Variant"
msgstr "Oddělení:"
@@ -19709,15 +19829,17 @@ msgstr ""
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not read HTML shell:"
+msgid "Could not read HTML shell: \"%s\"."
msgstr "Nebylo možné pÅ™eÄíst HTML shell:"
#: platform/javascript/export/export.cpp
-msgid "Could not create HTTP server directory:"
+#, fuzzy
+msgid "Could not create HTTP server directory: %s."
msgstr "Nepodařilo se vytvořit adresář serveru HTTP:"
#: platform/javascript/export/export.cpp
-msgid "Error starting HTTP server:"
+#, fuzzy
+msgid "Error starting HTTP server: %d."
msgstr "Chyba při spuštění serveru HTTP:"
#: platform/javascript/export/export.cpp
@@ -20017,9 +20139,28 @@ msgid "Apple Team ID"
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open icon file \"%s\"."
+msgstr "Nelze exportovat soubory projektu"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start xcrun executable."
+msgstr "Nelze spustit podproces!"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization failed."
+msgstr "Lokalizace"
+
+#: platform/osx/export/export.cpp
+msgid "Notarization request UUID: \"%s\""
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid ""
-"Note: The notarization process generally takes less than an hour. When the "
-"process is completed, you'll receive an email."
+"The notarization process generally takes less than an hour. When the process "
+"is completed, you'll receive an email."
msgstr ""
#: platform/osx/export/export.cpp
@@ -20035,20 +20176,76 @@ msgid ""
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign failed with error \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign require regex module."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Could not start codesign executable, make sure Xcode command line tools are "
+"installed."
+msgstr ""
+
+#: platform/osx/export/export.cpp platform/windows/export/export.cpp
#, fuzzy
msgid "No identity found."
msgstr "Nebyly nalezeny žádné ikony."
#: platform/osx/export/export.cpp
#, fuzzy
+msgid "Cannot sign file %s."
+msgstr "Chyba při ukládání souboru: %s"
+
+#: platform/osx/export/export.cpp
+msgid "Relative symlinks are not supported, exported \"%s\" might be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "DMG Creation"
+msgstr "Směry"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start hdiutil executable."
+msgstr "Nelze spustit podproces!"
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed - file exists."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
msgid "Creating app bundle"
msgstr "Vytvářím náhled"
#: platform/osx/export/export.cpp
-msgid "Could not find template app to export:"
+#, fuzzy
+msgid "Could not find template app to export: \"%s\"."
msgstr "Nepodařilo se najít šablonu APK pro export:"
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid export format."
+msgstr "Neplatná šablona pro export:"
+
+#: platform/osx/export/export.cpp
msgid ""
"Relative symlinks are not supported on this OS, the exported project might "
"be broken!"
@@ -20056,7 +20253,7 @@ msgstr ""
#: platform/osx/export/export.cpp
msgid ""
-"Requested template binary '%s' not found. It might be missing from your "
+"Requested template binary \"%s\" not found. It might be missing from your "
"template archive."
msgstr ""
@@ -20098,6 +20295,16 @@ msgstr ""
#: platform/osx/export/export.cpp
#, fuzzy
+msgid "ZIP Creation"
+msgstr "Projekt"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open file to read from path \"%s\"."
+msgstr "Nelze exportovat soubory projektu do projektu gradle\n"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
msgid "Invalid bundle identifier:"
msgstr "Neplatný identifikátor:"
@@ -20410,6 +20617,11 @@ msgid "Debug Algorithm"
msgstr "Ladicí program"
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to rename temporary file \"%s\"."
+msgstr "Nelze odstranit doÄasný soubor:"
+
+#: platform/windows/export/export.cpp
msgid "Identity Type"
msgstr ""
@@ -20457,6 +20669,70 @@ msgid "Trademarks"
msgstr ""
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Resources Modification"
+msgstr "Náhodná rotace:"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find rcedit executable at \"%s\"."
+msgstr "NepodaÅ™ilo se najít úložiÅ¡tÄ› klíÄů, nelze exportovat."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find wine executable at \"%s\"."
+msgstr "NepodaÅ™ilo se najít úložiÅ¡tÄ› klíÄů, nelze exportovat."
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start rcedit executable, configure rcedit path in the Editor "
+"Settings (Export > Windows > Rcedit)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"rcedit failed to modify executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find signtool executable at \"%s\"."
+msgstr "NepodaÅ™ilo se najít úložiÅ¡tÄ› klíÄů, nelze exportovat."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find osslsigncode executable at \"%s\"."
+msgstr "NepodaÅ™ilo se najít úložiÅ¡tÄ› klíÄů, nelze exportovat."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid identity type."
+msgstr "Neplatný identifikátor:"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid timestamp server."
+msgstr "Neplatný název."
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start signtool executable, configure signtool path in the Editor "
+"Settings (Export > Windows > Signtool)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Signtool failed to sign executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to remove temporary file \"%s\"."
+msgstr "Nelze odstranit doÄasný soubor:"
+
+#: platform/windows/export/export.cpp
msgid ""
"The rcedit tool must be configured in the Editor Settings (Export > Windows "
"> Rcedit) to change the icon or app information data."
@@ -20476,6 +20752,23 @@ msgid "Invalid product version:"
msgstr "Neplatné GUID produktu."
#: platform/windows/export/export.cpp
+msgid "Windows executables cannot be >= 4 GiB."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+#, fuzzy
+msgid "Failed to open executable file \"%s\"."
+msgstr "Neplatná přípona."
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable file header corrupted."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable \"pck\" section not found."
+msgstr ""
+
+#: platform/windows/export/export.cpp
#, fuzzy
msgid "Windows"
msgstr "Nové okno"
@@ -20492,6 +20785,10 @@ msgstr ""
msgid "Wine"
msgstr ""
+#: platform/x11/export/export.cpp
+msgid "32-bit executables cannot have embedded data >= 4 GiB."
+msgstr ""
+
#: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp
#: scene/resources/texture.cpp
#, fuzzy
@@ -20619,7 +20916,8 @@ msgstr ""
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/3d/light.cpp scene/3d/reflection_probe.cpp
-#: scene/3d/visual_instance.cpp scene/resources/material.cpp
+#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp
+#: scene/resources/material.cpp
#, fuzzy
msgid "Max Distance"
msgstr "Vybrat vzdálenost:"
@@ -21429,6 +21727,18 @@ msgstr ""
msgid "Edge Connection Margin"
msgstr "Upravit spojení:"
+#: scene/2d/navigation_2d.cpp
+msgid ""
+"'Navigation2D' node and 'Navigation2D.get_simple_path()' are deprecated and "
+"will be removed in a future version. Use 'Navigation2DServer.map_get_path()' "
+"instead."
+msgstr ""
+
+#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
+#, fuzzy
+msgid "Path Desired Distance"
+msgstr "Vybrat vzdálenost:"
+
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
msgid "Target Desired Distance"
msgstr ""
@@ -21486,17 +21796,19 @@ msgstr ""
"NavigationPolygon. Nastavte prosím vlastnost nebo nakreslete mnohoúhelník."
#: scene/2d/navigation_polygon.cpp
-msgid ""
-"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
-"node. It only provides navigation data."
-msgstr ""
-"NavigationPolygonInstance musí být dítÄ›tem nebo vnouÄetem uzlu Navigation2D. "
-"Poskytuje pouze data pro navigaci."
-
-#: scene/2d/navigation_polygon.cpp
msgid "Navpoly"
msgstr ""
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Enter Cost"
+msgstr "Uprostřed dole"
+
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Travel Cost"
+msgstr "Cestovat"
+
#: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp
#: scene/main/canvas_layer.cpp
#, fuzzy
@@ -22703,6 +23015,13 @@ msgstr ""
msgid "Transform Normals"
msgstr "Transformace zrušena."
+#: scene/3d/navigation.cpp
+msgid ""
+"'Navigation' node and 'Navigation.get_simple_path()' are deprecated and will "
+"be removed in a future version. Use 'NavigationServer.map_get_path()' "
+"instead."
+msgstr ""
+
#: scene/3d/navigation.cpp scene/resources/curve.cpp
#, fuzzy
msgid "Up Vector"
@@ -22727,14 +23046,6 @@ msgid ""
"The NavigationAgent can be used only under a Spatial inheriting parent node."
msgstr ""
-#: scene/3d/navigation_mesh_instance.cpp
-msgid ""
-"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
-"It only provides navigation data."
-msgstr ""
-"NavigationMeshInstance musí být dítÄ›tem nebo vnouÄetem uzlu Navigation. "
-"Poskytuje pouze data pro navigaci."
-
#: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp
#, fuzzy
msgid "NavMesh"
@@ -25452,6 +25763,16 @@ msgid "3D Physics"
msgstr "Fyzikální snímek %"
#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "2D Navigation"
+msgstr "Navigace"
+
+#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "3D Navigation"
+msgstr "Navigace"
+
+#: scene/register_scene_types.cpp
msgid "Use hiDPI"
msgstr ""
@@ -26879,7 +27200,7 @@ msgstr "Přechod: "
msgid "Refraction"
msgstr "Oddělení:"
-#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp
+#: scene/resources/material.cpp
msgid "Detail"
msgstr ""
@@ -26964,7 +27285,12 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
-msgid "Sample Partition Type"
+msgid "Sampling"
+msgstr "Škálování: "
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Partition Type"
msgstr "Nastavit typ proměnné"
#: scene/resources/navigation_mesh.cpp
@@ -26982,10 +27308,15 @@ msgid "Source Group Name"
msgstr "Zdroj"
#: scene/resources/navigation_mesh.cpp
-msgid "Agent"
+msgid "Cells"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Agents"
+msgstr "Argumenty hlavní scény:"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Max Climb"
msgstr ""
@@ -26995,11 +27326,16 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
+msgid "Regions"
+msgstr "Oblast"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
msgid "Merge Size"
msgstr "SlouÄit ze scény"
#: scene/resources/navigation_mesh.cpp
-msgid "Edge"
+msgid "Edges"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -27013,6 +27349,11 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
+msgid "Details"
+msgstr "Zobrazit výchozí"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
msgid "Sample Distance"
msgstr "Vybrat vzdálenost:"
@@ -27030,9 +27371,19 @@ msgid "Ledge Spans"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Filter Walkable Low Height Spans"
+msgid "Walkable Low Height Spans"
msgstr ""
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB"
+msgstr "Generování AABB"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB Offset"
+msgstr "Offset(Posun):"
+
#: scene/resources/occluder_shape.cpp
msgid "Spheres"
msgstr ""
@@ -27448,6 +27799,11 @@ msgid "Scenario"
msgstr "Scéna"
#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Navigation Map"
+msgstr "Navigace"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
msgid "Direct Space State"
msgstr ""
@@ -27465,6 +27821,26 @@ msgstr "Levé lineární"
msgid "Default Angular Damp"
msgstr ""
+#: scene/resources/world.cpp
+#, fuzzy
+msgid "Default Map Up"
+msgstr "Výchozí"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Size"
+msgstr "Výchozí náhled"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Height"
+msgstr "Testované"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Edge Connection Margin"
+msgstr "Upravit spojení:"
+
#: scene/resources/world_2d.cpp
msgid "Canvas"
msgstr ""
diff --git a/editor/translations/da.po b/editor/translations/da.po
index 73819a0c91..168f98fbf1 100644
--- a/editor/translations/da.po
+++ b/editor/translations/da.po
@@ -224,9 +224,10 @@ msgid "Data"
msgstr ""
#: core/io/file_access_network.cpp core/register_core_types.cpp
-#: editor/editor_settings.cpp main/main.cpp
+#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
#: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h
+#: scene/gui/file_dialog.cpp
#, fuzzy
msgid "Network"
msgstr "Eksporter Projekt"
@@ -384,6 +385,16 @@ msgstr ""
msgid "Max Size (KB)"
msgstr ""
+#: core/os/input.cpp
+#, fuzzy
+msgid "Mouse Mode"
+msgstr "Skifter Modus"
+
+#: core/os/input.cpp
+#, fuzzy
+msgid "Use Accumulated Input"
+msgstr "Fjern Input"
+
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: servers/audio_server.cpp
msgid "Device"
@@ -582,7 +593,8 @@ msgstr "Beskrivelse"
#: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
-#: main/main.cpp
+#: main/main.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp
msgid "Run"
msgstr ""
@@ -671,6 +683,11 @@ msgid "Main Run Args"
msgstr ""
#: core/project_settings.cpp
+#, fuzzy
+msgid "Scene Naming"
+msgstr "Scene Sti:"
+
+#: core/project_settings.cpp
msgid "Search In File Extensions"
msgstr ""
@@ -678,20 +695,15 @@ msgstr ""
msgid "Script Templates Search Path"
msgstr ""
-#: core/project_settings.cpp editor/editor_node.cpp
-#: editor/plugins/version_control_editor_plugin.cpp
+#: core/project_settings.cpp
#, fuzzy
-msgid "Version Control"
+msgid "Version Control Autoload On Startup"
msgstr "Versionskontrol"
#: core/project_settings.cpp
-msgid "Autoload On Startup"
-msgstr ""
-
-#: core/project_settings.cpp
#, fuzzy
-msgid "Plugin Name"
-msgstr "Node Navn:"
+msgid "Version Control Plugin Name"
+msgstr "Versionskontrol"
#: core/project_settings.cpp scene/2d/collision_object_2d.cpp
#: scene/3d/collision_object.cpp scene/gui/control.cpp
@@ -806,7 +818,8 @@ msgid "Quality"
msgstr ""
#: core/project_settings.cpp scene/gui/file_dialog.cpp
-#: scene/main/scene_tree.cpp servers/visual_server.cpp
+#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp
+#: servers/visual_server.cpp
#, fuzzy
msgid "Filters"
msgstr "Filter:"
@@ -2283,8 +2296,8 @@ msgid "Open"
msgstr "Ã…ben"
#: editor/dependency_editor.cpp
-msgid "Owners Of:"
-msgstr "Ejere af:"
+msgid "Owners of: %s (Total: %d)"
+msgstr ""
#: editor/dependency_editor.cpp
#, fuzzy
@@ -2598,7 +2611,7 @@ msgid "Bus Options"
msgstr "Bus muligheder"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/scene_tree_dock.cpp
+#: editor/project_export.cpp editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "Duplikér"
@@ -2868,6 +2881,24 @@ msgid "Choose"
msgstr "Vælg"
#: editor/editor_export.cpp
+msgid "Project export for platform:"
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Completed with errors."
+msgstr ""
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Completed successfully."
+msgstr "Pakke installeret med succes!"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed."
+msgstr "Fejlet:"
+
+#: editor/editor_export.cpp
msgid "Storing File:"
msgstr "Lagrings Fil:"
@@ -2880,6 +2911,31 @@ msgid "Packing"
msgstr "Pakker"
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save PCK"
+msgstr "Gem som"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Cannot create file \"%s\"."
+msgstr "Kunne ikke oprette mappe."
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to export project files."
+msgstr "Kunne ikke skrive til fil:\n"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Can't open file to read from path \"%s\"."
+msgstr "Kan ikke åbne fil til skrivning:"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save ZIP"
+msgstr "Gem som"
+
+#: editor/editor_export.cpp
msgid ""
"Target platform requires 'ETC' texture compression for GLES2. Enable 'Import "
"Etc' in Project Settings."
@@ -2998,11 +3054,32 @@ msgstr "Brugerdefineret debug skabelonfil ikke fundet."
msgid "Custom release template not found."
msgstr "Brugerdefineret release skabelonfil ikke fundet."
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Prepare Template"
+msgstr "Organiser Eksport Skabeloner"
+
+#: editor/editor_export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "The given export path doesn't exist."
+msgstr "Fil eksisterer ikke."
+
#: editor/editor_export.cpp platform/javascript/export/export.cpp
-msgid "Template file not found:"
+#, fuzzy
+msgid "Template file not found: \"%s\"."
msgstr "Skabelonfil ikke fundet:"
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to copy export template."
+msgstr "Ugyldigt eksport skabelon:\n"
+
+#: editor/editor_export.cpp platform/windows/export/export.cpp
+#: platform/x11/export/export.cpp
+msgid "PCK Embedding"
+msgstr ""
+
+#: editor/editor_export.cpp
msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB."
msgstr "Den indlejrede PCK kan ikke overstige 4 GiB ved 32-bit eksport."
@@ -3191,9 +3268,9 @@ msgid "Import"
msgstr "Importer"
#: editor/editor_feature_profile.cpp editor/project_export.cpp
-#: platform/android/export/export.cpp platform/javascript/export/export.cpp
-#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
-#: platform/windows/export/export.cpp
+#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#: platform/uwp/export/export.cpp platform/windows/export/export.cpp
msgid "Export"
msgstr "Eksport"
@@ -4372,15 +4449,6 @@ msgid ""
"Unable to write to file '%s', file in use, locked or lacking permissions."
msgstr ""
-#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
-msgid "Scene"
-msgstr "Scene"
-
-#: editor/editor_node.cpp
-#, fuzzy
-msgid "Scene Naming"
-msgstr "Scene Sti:"
-
#: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp
#: servers/arvr/arvr_interface.cpp
msgid "Interface"
@@ -4509,6 +4577,11 @@ msgstr ""
#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
#, fuzzy
+msgid "Version Control"
+msgstr "Versionskontrol"
+
+#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
+#, fuzzy
msgid "Username"
msgstr "Omdøb"
@@ -4536,6 +4609,10 @@ msgstr "Skift distraktions-fri modus."
msgid "Add a new scene."
msgstr "Tilføj en ny scene."
+#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
+msgid "Scene"
+msgstr "Scene"
+
#: editor/editor_node.cpp
msgid "Go to previously opened scene."
msgstr "Gå til den forrige åbnede scene."
@@ -5332,6 +5409,11 @@ msgstr ""
"Ingen kørbare eksport forudindstillinger fundet til denne platform.\n"
"Tilføj venligst en kørbar forudindstilling i eksportmenuen."
+#: editor/editor_run_native.cpp
+#, fuzzy
+msgid "Project Run"
+msgstr "Projekt"
+
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
msgstr "Skriv din logik i metoden _run ()."
@@ -5609,7 +5691,9 @@ msgid "Draw Spaces"
msgstr "Kald"
#: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp
-#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp
+#: scene/main/scene_tree.cpp scene/resources/world.cpp
+#: scene/resources/world_2d.cpp
#, fuzzy
msgid "Navigation"
msgstr "Rediger Poly"
@@ -7127,7 +7211,7 @@ msgstr ""
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp
-#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp
+#: scene/gui/control.cpp
#, fuzzy
msgid "Filter"
msgstr "Filter:"
@@ -7419,6 +7503,18 @@ msgid "Saving..."
msgstr "Gemmer..."
#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used as a normal map in 3D. Enabling red-green "
+"texture compression to reduce memory usage (blue channel is discarded)."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap "
+"generation and VRAM texture compression."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
msgid "2D, Detect 3D"
msgstr ""
@@ -8137,11 +8233,20 @@ msgid "New Anim"
msgstr "Ny Animation"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+msgstr "Opret Ny Animation"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Change Animation Name:"
msgstr "Ændre Animation Navn:"
#: editor/plugins/animation_player_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Rename Animation"
+msgstr "Omdøb animation"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Delete Animation?"
msgstr "Slet Animation?"
@@ -8161,11 +8266,6 @@ msgid "Animation name already exists!"
msgstr "FEJL: Animationsnavn eksisterer allerede!"
#: editor/plugins/animation_player_editor_plugin.cpp
-#: editor/plugins/sprite_frames_editor_plugin.cpp
-msgid "Rename Animation"
-msgstr "Omdøb animation"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate Animation"
msgstr "Lav en kopi af animation"
@@ -8313,10 +8413,6 @@ msgid "Pin AnimationPlayer"
msgstr "Fastgør AnimationPlayer"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Create New Animation"
-msgstr "Opret Ny Animation"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Name:"
msgstr "Animations Navn:"
@@ -10481,6 +10577,7 @@ msgid "Points"
msgstr "Fjern punkt"
#: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp
+#: scene/resources/navigation_mesh.cpp
#, fuzzy
msgid "Polygons"
msgstr "Rediger Poly"
@@ -11920,7 +12017,7 @@ msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
#, fuzzy
-msgid "Convert to Mesh2D"
+msgid "Convert to MeshInstance2D"
msgstr "Konverter Til %s"
#: editor/plugins/sprite_editor_plugin.cpp
@@ -12980,8 +13077,7 @@ msgid "Select the previous shape, subtile, or Tile."
msgstr ""
#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp
-#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp
-#: scene/resources/texture.cpp
+#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp
#, fuzzy
msgid "Region"
msgstr "Interpolationsmetode"
@@ -14514,32 +14610,11 @@ 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
#, fuzzy
msgid "Exporting All"
msgstr "Eksporter"
#: 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
#, fuzzy
msgid "Export Path"
msgstr "Eksporter Projekt"
@@ -14682,6 +14757,11 @@ msgid "Export templates for this platform are missing:"
msgstr ""
#: editor/project_export.cpp
+#, fuzzy
+msgid "Project Export"
+msgstr "Projekt grundlæggere"
+
+#: editor/project_export.cpp
msgid "Manage Export Templates"
msgstr "Organiser Eksport Skabeloner"
@@ -17080,7 +17160,7 @@ msgstr ""
#: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp
#: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp
-#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp
+#: scene/3d/collision_polygon.cpp
#, fuzzy
msgid "Polygon"
msgstr "Rediger Poly"
@@ -17685,7 +17765,6 @@ msgid "Use In Baked Light"
msgstr ""
#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
-#: scene/resources/navigation_mesh.cpp
msgid "Cell"
msgstr ""
@@ -17715,6 +17794,19 @@ msgstr "Vælg Node"
msgid "Mask"
msgstr ""
+#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
+#, fuzzy
+msgid "Bake Navigation"
+msgstr "Rediger Poly"
+
+#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp
+#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp
+#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp
+#: scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Navigation Layers"
+msgstr "Rediger Poly"
+
#: modules/gridmap/grid_map_editor_plugin.cpp
#, fuzzy
msgid "Next Plane"
@@ -19289,10 +19381,6 @@ msgid "Could not execute on device."
msgstr "Kunne ikke oprette mappe."
#: 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."
@@ -19397,12 +19485,16 @@ msgstr ""
msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version."
msgstr ""
+#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Code Signing"
+msgstr "Signaler"
+
#: 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."
+"'apksigner' could not be found. Please check that the command is available "
+"in the Android SDK build-tools directory. The resulting %s is unsigned."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -19422,6 +19514,11 @@ msgid "Could not find keystore, unable to export."
msgstr "Kan ikke åbne skabelon til eksport:\n"
#: platform/android/export/export_plugin.cpp
+#, fuzzy
+msgid "Could not start apksigner executable."
+msgstr "Kunne ikke starte underproces!"
+
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
@@ -19452,7 +19549,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Unsupported export format!\n"
+msgid "Unsupported export format!"
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -19463,20 +19560,19 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Android build version mismatch:\n"
-" Template installed: %s\n"
-" Godot Version: %s\n"
+"Android build version mismatch: Template installed: %s, Godot version: %s. "
"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"
+"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 ""
+#, fuzzy
+msgid "Could not export project files to gradle project."
+msgstr "Kunne ikke skrive til fil:\n"
#: platform/android/export/export_plugin.cpp
#, fuzzy
@@ -19489,7 +19585,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Building of Android project failed, check output for the error.\n"
+"Building of Android project failed, check output for the error. "
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
@@ -19505,7 +19601,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
#, fuzzy
-msgid "Package not found: %s"
+msgid "Package not found: \"%s\"."
msgstr "Animations Længde (i sekunder)."
#: platform/android/export/export_plugin.cpp
@@ -19515,15 +19611,12 @@ msgstr "Forbinder..."
#: platform/android/export/export_plugin.cpp
#, fuzzy
-msgid ""
-"Could not find template APK to export:\n"
-"%s"
+msgid "Could not find template APK to export: \"%s\"."
msgstr "Kan ikke åbne skabelon til eksport:\n"
#: platform/android/export/export_plugin.cpp
msgid ""
-"Missing libraries in the export template for the selected architectures: "
-"%s.\n"
+"Missing libraries in the export template for the selected architectures: %s. "
"Please build a template with all required libraries, or uncheck the missing "
"architectures in the export preset."
msgstr ""
@@ -19535,7 +19628,7 @@ msgstr "Filtrer filer..."
#: platform/android/export/export_plugin.cpp
#, fuzzy
-msgid "Could not export project files"
+msgid "Could not export project files."
msgstr "Kunne ikke skrive til fil:\n"
#: platform/android/export/export_plugin.cpp
@@ -19778,6 +19871,17 @@ msgstr "Indsæt Node"
msgid "Custom BG Color"
msgstr "Indsæt Node"
+#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Prepare Templates"
+msgstr "Organiser Eksport Skabeloner"
+
+#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Export template not found."
+msgstr "Brugerdefineret release skabelonfil ikke fundet."
+
#: platform/iphone/export/export.cpp
msgid "App Store Team ID not specified - cannot configure the project."
msgstr ""
@@ -19801,25 +19905,34 @@ msgstr ""
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not open template for export:"
+msgid "Could not open template for export: \"%s\"."
msgstr "Kan ikke åbne skabelon til eksport:\n"
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Invalid export template:"
+msgid "Invalid export template: \"%s\"."
msgstr "Ugyldigt eksport skabelon:\n"
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not write file:"
+msgid "Could not write file: \"%s\"."
msgstr "Kunne ikke skrive til fil:\n"
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Icon Creation"
+msgstr "Indhold:"
+
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not read file:"
+msgid "Could not read file: \"%s\"."
msgstr "Kunne ikke skrive til fil:\n"
#: platform/javascript/export/export.cpp
+msgid "PWA"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
#, fuzzy
msgid "Variant"
msgstr "Tællinger:"
@@ -19895,17 +20008,17 @@ msgstr ""
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not read HTML shell:"
+msgid "Could not read HTML shell: \"%s\"."
msgstr "Kan ikke læse brugerdefineret HTML shell:\n"
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not create HTTP server directory:"
+msgid "Could not create HTTP server directory: %s."
msgstr "Kunne ikke oprette mappe."
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Error starting HTTP server:"
+msgid "Error starting HTTP server: %d."
msgstr "Error loading skrifttype."
#: platform/javascript/export/export.cpp
@@ -20202,9 +20315,28 @@ msgid "Apple Team ID"
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open icon file \"%s\"."
+msgstr "Kunne ikke skrive til fil:\n"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start xcrun executable."
+msgstr "Kunne ikke starte underproces!"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization failed."
+msgstr "Rediger Poly"
+
+#: platform/osx/export/export.cpp
+msgid "Notarization request UUID: \"%s\""
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid ""
-"Note: The notarization process generally takes less than an hour. When the "
-"process is completed, you'll receive an email."
+"The notarization process generally takes less than an hour. When the process "
+"is completed, you'll receive an email."
msgstr ""
#: platform/osx/export/export.cpp
@@ -20220,21 +20352,76 @@ msgid ""
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign failed with error \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign require regex module."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Could not start codesign executable, make sure Xcode command line tools are "
+"installed."
+msgstr ""
+
+#: platform/osx/export/export.cpp platform/windows/export/export.cpp
#, fuzzy
msgid "No identity found."
msgstr "Ikke fundet!"
#: platform/osx/export/export.cpp
#, fuzzy
+msgid "Cannot sign file %s."
+msgstr "Fejl, kan ikke gemme TileSet!"
+
+#: platform/osx/export/export.cpp
+msgid "Relative symlinks are not supported, exported \"%s\" might be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "DMG Creation"
+msgstr "Retninger"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start hdiutil executable."
+msgstr "Kunne ikke starte underproces!"
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed - file exists."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
msgid "Creating app bundle"
msgstr "Opretter Thumbnail"
#: platform/osx/export/export.cpp
#, fuzzy
-msgid "Could not find template app to export:"
+msgid "Could not find template app to export: \"%s\"."
msgstr "Kan ikke åbne skabelon til eksport:\n"
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid export format."
+msgstr "Ugyldigt eksport skabelon:\n"
+
+#: platform/osx/export/export.cpp
msgid ""
"Relative symlinks are not supported on this OS, the exported project might "
"be broken!"
@@ -20242,7 +20429,7 @@ msgstr ""
#: platform/osx/export/export.cpp
msgid ""
-"Requested template binary '%s' not found. It might be missing from your "
+"Requested template binary \"%s\" not found. It might be missing from your "
"template archive."
msgstr ""
@@ -20284,6 +20471,16 @@ msgstr ""
#: platform/osx/export/export.cpp
#, fuzzy
+msgid "ZIP Creation"
+msgstr "Projekt"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open file to read from path \"%s\"."
+msgstr "Kan ikke åbne skabelon til eksport:\n"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
msgid "Invalid bundle identifier:"
msgstr "Navnet er ikke et gyldigt id:"
@@ -20598,6 +20795,11 @@ msgid "Debug Algorithm"
msgstr ""
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to rename temporary file \"%s\"."
+msgstr "Kan ikke fjerne:"
+
+#: platform/windows/export/export.cpp
msgid "Identity Type"
msgstr ""
@@ -20644,6 +20846,70 @@ msgid "Trademarks"
msgstr ""
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Resources Modification"
+msgstr "Konstant"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find rcedit executable at \"%s\"."
+msgstr "Kan ikke åbne skabelon til eksport:\n"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find wine executable at \"%s\"."
+msgstr "Kan ikke åbne skabelon til eksport:\n"
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start rcedit executable, configure rcedit path in the Editor "
+"Settings (Export > Windows > Rcedit)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"rcedit failed to modify executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find signtool executable at \"%s\"."
+msgstr "Kan ikke åbne skabelon til eksport:\n"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find osslsigncode executable at \"%s\"."
+msgstr "Kan ikke åbne skabelon til eksport:\n"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid identity type."
+msgstr "Navnet er ikke et gyldigt id:"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid timestamp server."
+msgstr "Ugyldigt navn."
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start signtool executable, configure signtool path in the Editor "
+"Settings (Export > Windows > Signtool)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Signtool failed to sign executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to remove temporary file \"%s\"."
+msgstr "Kan ikke fjerne:"
+
+#: platform/windows/export/export.cpp
msgid ""
"The rcedit tool must be configured in the Editor Settings (Export > Windows "
"> Rcedit) to change the icon or app information data."
@@ -20665,6 +20931,23 @@ msgid "Invalid product version:"
msgstr "Ugyldig skriftstørrelse."
#: platform/windows/export/export.cpp
+msgid "Windows executables cannot be >= 4 GiB."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+#, fuzzy
+msgid "Failed to open executable file \"%s\"."
+msgstr "Du skal bruge en gyldig udvidelse."
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable file header corrupted."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable \"pck\" section not found."
+msgstr ""
+
+#: platform/windows/export/export.cpp
msgid "Windows"
msgstr ""
@@ -20680,6 +20963,10 @@ msgstr ""
msgid "Wine"
msgstr ""
+#: platform/x11/export/export.cpp
+msgid "32-bit executables cannot have embedded data >= 4 GiB."
+msgstr ""
+
#: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp
#: scene/resources/texture.cpp
#, fuzzy
@@ -20804,7 +21091,8 @@ msgstr ""
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/3d/light.cpp scene/3d/reflection_probe.cpp
-#: scene/3d/visual_instance.cpp scene/resources/material.cpp
+#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp
+#: scene/resources/material.cpp
#, fuzzy
msgid "Max Distance"
msgstr "Instans"
@@ -21578,6 +21866,18 @@ msgstr ""
msgid "Edge Connection Margin"
msgstr "Redigér Forbindelse:"
+#: scene/2d/navigation_2d.cpp
+msgid ""
+"'Navigation2D' node and 'Navigation2D.get_simple_path()' are deprecated and "
+"will be removed in a future version. Use 'Navigation2DServer.map_get_path()' "
+"instead."
+msgstr ""
+
+#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
+#, fuzzy
+msgid "Path Desired Distance"
+msgstr "Vælg en Main Scene"
+
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
msgid "Target Desired Distance"
msgstr ""
@@ -21631,17 +21931,19 @@ msgstr ""
"virke. Sæt venligst en egenskab eller tegn en polygon."
#: scene/2d/navigation_polygon.cpp
-msgid ""
-"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
-"node. It only provides navigation data."
-msgstr ""
-"NavigationPolygonInstance skal være et barn eller barnebarn til en "
-"Navigation2D node. Det giver kun navigationsdata."
-
-#: scene/2d/navigation_polygon.cpp
msgid "Navpoly"
msgstr ""
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Enter Cost"
+msgstr "Vælg Node"
+
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Travel Cost"
+msgstr "Rejse"
+
#: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp
#: scene/main/canvas_layer.cpp
msgid "Rotation Degrees"
@@ -22788,6 +23090,13 @@ msgstr ""
msgid "Transform Normals"
msgstr "Opret Poly"
+#: scene/3d/navigation.cpp
+msgid ""
+"'Navigation' node and 'Navigation.get_simple_path()' are deprecated and will "
+"be removed in a future version. Use 'NavigationServer.map_get_path()' "
+"instead."
+msgstr ""
+
#: scene/3d/navigation.cpp scene/resources/curve.cpp
#, fuzzy
msgid "Up Vector"
@@ -22811,14 +23120,6 @@ msgid ""
"The NavigationAgent can be used only under a Spatial inheriting parent node."
msgstr ""
-#: scene/3d/navigation_mesh_instance.cpp
-msgid ""
-"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
-"It only provides navigation data."
-msgstr ""
-"NavigationMeshInstance skal være et barn eller barnebarn til en Navigation "
-"node. Det giver kun navigationsdata."
-
#: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp
msgid "NavMesh"
msgstr ""
@@ -25441,6 +25742,16 @@ msgid "3D Physics"
msgstr "Fysik Frame %"
#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "2D Navigation"
+msgstr "Rediger Poly"
+
+#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "3D Navigation"
+msgstr "Rediger Poly"
+
+#: scene/register_scene_types.cpp
msgid "Use hiDPI"
msgstr ""
@@ -26840,7 +27151,7 @@ msgstr "Overgang: "
msgid "Refraction"
msgstr "Tællinger:"
-#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp
+#: scene/resources/material.cpp
msgid "Detail"
msgstr ""
@@ -26921,7 +27232,12 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
-msgid "Sample Partition Type"
+msgid "Sampling"
+msgstr "Skalér:"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Partition Type"
msgstr "Sæt Variabel Type"
#: scene/resources/navigation_mesh.cpp
@@ -26938,10 +27254,15 @@ msgid "Source Group Name"
msgstr "Ressource"
#: scene/resources/navigation_mesh.cpp
-msgid "Agent"
+msgid "Cells"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Agents"
+msgstr "Argumenter:"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Max Climb"
msgstr ""
@@ -26950,11 +27271,16 @@ msgid "Max Slope"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Regions"
+msgstr "Interpolationsmetode"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Merge Size"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Edge"
+msgid "Edges"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -26967,6 +27293,11 @@ msgid "Verts Per Poly"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Details"
+msgstr "Indlæs Default"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Sample Distance"
msgstr ""
@@ -26983,9 +27314,18 @@ msgid "Ledge Spans"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Filter Walkable Low Height Spans"
+msgid "Walkable Low Height Spans"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
+msgid "Baking AABB"
msgstr ""
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB Offset"
+msgstr "Fjern Template"
+
#: scene/resources/occluder_shape.cpp
msgid "Spheres"
msgstr ""
@@ -27388,6 +27728,11 @@ msgid "Scenario"
msgstr "Scene"
#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Navigation Map"
+msgstr "Rediger Poly"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
msgid "Direct Space State"
msgstr ""
@@ -27405,6 +27750,26 @@ msgstr "Lineær"
msgid "Default Angular Damp"
msgstr ""
+#: scene/resources/world.cpp
+#, fuzzy
+msgid "Default Map Up"
+msgstr "Standard"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Size"
+msgstr "Forhåndsvisning:"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Height"
+msgstr "Tester"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Edge Connection Margin"
+msgstr "Redigér Forbindelse:"
+
#: scene/resources/world_2d.cpp
msgid "Canvas"
msgstr ""
diff --git a/editor/translations/de.po b/editor/translations/de.po
index 3e5f75a75d..61cfb48184 100644
--- a/editor/translations/de.po
+++ b/editor/translations/de.po
@@ -87,7 +87,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: 2022-06-03 02:51+0000\n"
+"PO-Revision-Date: 2022-06-26 16:16+0000\n"
"Last-Translator: So Wieso <sowieso@dukun.de>\n"
"Language-Team: German <https://hosted.weblate.org/projects/godot-engine/"
"godot/de/>\n"
@@ -96,7 +96,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.13-dev\n"
+"X-Generator: Weblate 4.13.1-dev\n"
#: core/bind/core_bind.cpp main/main.cpp
msgid "Tablet Driver"
@@ -280,9 +280,10 @@ msgid "Data"
msgstr "Daten"
#: core/io/file_access_network.cpp core/register_core_types.cpp
-#: editor/editor_settings.cpp main/main.cpp
+#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
#: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h
+#: scene/gui/file_dialog.cpp
msgid "Network"
msgstr "Netzwerk"
@@ -386,9 +387,8 @@ msgid "Not enough bytes for decoding bytes, or invalid format."
msgstr "Nicht genügend Bytes zur Dekodierung oder ungültiges Format."
#: core/math/expression.cpp
-#, fuzzy
msgid "Invalid input %d (not passed) in expression"
-msgstr "Ungültige Eingabe %i (nicht übergeben) im Ausdruck"
+msgstr "Ungültige Eingabe %d (nicht übergeben) im Ausdruck"
#: core/math/expression.cpp
msgid "self can't be used because instance is null (not passed)"
@@ -432,6 +432,14 @@ msgstr "Nachrichtenwarteschlange"
msgid "Max Size (KB)"
msgstr "Maximalgröße (KB)"
+#: core/os/input.cpp
+msgid "Mouse Mode"
+msgstr "Mausmodus"
+
+#: core/os/input.cpp
+msgid "Use Accumulated Input"
+msgstr "Kumulierte Eingabe verwenden"
+
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: servers/audio_server.cpp
msgid "Device"
@@ -611,7 +619,8 @@ msgstr "Beschreibung"
#: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
-#: main/main.cpp
+#: main/main.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp
msgid "Run"
msgstr "Ausführen"
@@ -694,6 +703,10 @@ msgid "Main Run Args"
msgstr "Laufzeitargumente für Main"
#: core/project_settings.cpp
+msgid "Scene Naming"
+msgstr "Szenenbenennung"
+
+#: core/project_settings.cpp
msgid "Search In File Extensions"
msgstr "In Dateierweiterungen suchen"
@@ -701,18 +714,13 @@ msgstr "In Dateierweiterungen suchen"
msgid "Script Templates Search Path"
msgstr "Suchpfad für Skriptvorlagen"
-#: core/project_settings.cpp editor/editor_node.cpp
-#: editor/plugins/version_control_editor_plugin.cpp
-msgid "Version Control"
-msgstr "Versionsverwaltung"
-
#: core/project_settings.cpp
-msgid "Autoload On Startup"
-msgstr "Autoladen beim Start"
+msgid "Version Control Autoload On Startup"
+msgstr "Automatisches Laden der Versionskontrolle beim Start"
#: core/project_settings.cpp
-msgid "Plugin Name"
-msgstr "Pluginname"
+msgid "Version Control Plugin Name"
+msgstr "Name des Plugins zur Versionskontrolle"
#: core/project_settings.cpp scene/2d/collision_object_2d.cpp
#: scene/3d/collision_object.cpp scene/gui/control.cpp
@@ -819,7 +827,8 @@ msgid "Quality"
msgstr "Qualität"
#: core/project_settings.cpp scene/gui/file_dialog.cpp
-#: scene/main/scene_tree.cpp servers/visual_server.cpp
+#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp
+#: servers/visual_server.cpp
msgid "Filters"
msgstr "Filter"
@@ -1344,19 +1353,16 @@ msgid "Remove this track."
msgstr "Diese Spur entfernen."
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Time (s):"
-msgstr "Zeit (s): "
+msgstr "Zeit (s):"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Position:"
-msgstr "Position"
+msgstr "Position:"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Rotation:"
-msgstr "Rotation"
+msgstr "Rotation:"
#: editor/animation_track_editor.cpp
#: editor/plugins/animation_tree_player_editor_plugin.cpp
@@ -1373,44 +1379,36 @@ msgid "Type:"
msgstr "Typ:"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "(Invalid, expected type: %s)"
-msgstr "Ungültige Exportvorlage:"
+msgstr "(Ungültig, erwarteter Typ: %s)"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Easing:"
-msgstr "Glätten Ein-Aus"
+msgstr "Glätten:"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "In-Handle:"
-msgstr "Eingehender Handle"
+msgstr "Eingehender Handle:"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Out-Handle:"
-msgstr "Ausgehender Handle"
+msgstr "Ausgehender Handle:"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Stream:"
-msgstr "Stream"
+msgstr "Stream:"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Start (s):"
-msgstr "Neu starten (s):"
+msgstr "Start (s):"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "End (s):"
-msgstr "Einblenden (s):"
+msgstr "Ende (s):"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Animation Clip:"
-msgstr "Animationen:"
+msgstr "Animations-Clip:"
#: editor/animation_track_editor.cpp
msgid "Toggle Track Enabled"
@@ -1625,9 +1623,8 @@ msgid "Add Method Track Key"
msgstr "Methodenaufrufsspurschlüssel hinzufügen"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Method not found in object:"
-msgstr "Methode nicht im Objekt gefunden: "
+msgstr "Methode nicht in Objekt gefunden:"
#: editor/animation_track_editor.cpp
msgid "Anim Move Keys"
@@ -2239,8 +2236,8 @@ msgid "Open"
msgstr "Öffnen"
#: editor/dependency_editor.cpp
-msgid "Owners Of:"
-msgstr "Besitzer von:"
+msgid "Owners of: %s (Total: %d)"
+msgstr "Besitzer von: %s (Insgesamt: %d)"
#: editor/dependency_editor.cpp
msgid ""
@@ -2548,7 +2545,7 @@ msgid "Bus Options"
msgstr "Audiobusoptionen"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/scene_tree_dock.cpp
+#: editor/project_export.cpp editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "Duplizieren"
@@ -2601,9 +2598,8 @@ msgid "There is no '%s' file."
msgstr "Datei ‚%s‘ existiert nicht."
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Layout:"
-msgstr "Layout"
+msgstr "Layout:"
#: editor/editor_audio_buses.cpp
msgid "Invalid file, not an audio bus layout."
@@ -2805,6 +2801,22 @@ msgid "Choose"
msgstr "Wählen"
#: editor/editor_export.cpp
+msgid "Project export for platform:"
+msgstr "Projektexport für Plattform:"
+
+#: editor/editor_export.cpp
+msgid "Completed with errors."
+msgstr "Fertiggestellt mit Fehlern."
+
+#: editor/editor_export.cpp
+msgid "Completed successfully."
+msgstr "Erfolgreich fertiggestellt."
+
+#: editor/editor_export.cpp
+msgid "Failed."
+msgstr "Fehlgeschlagen."
+
+#: editor/editor_export.cpp
msgid "Storing File:"
msgstr "Speichere Datei:"
@@ -2817,6 +2829,26 @@ msgid "Packing"
msgstr "Packe"
#: editor/editor_export.cpp
+msgid "Save PCK"
+msgstr "PCK speichern"
+
+#: editor/editor_export.cpp
+msgid "Cannot create file \"%s\"."
+msgstr "Datei „%s“ konnte nicht erstellt werden."
+
+#: editor/editor_export.cpp
+msgid "Failed to export project files."
+msgstr "Projektdateien konnten nicht exportiert werden."
+
+#: editor/editor_export.cpp
+msgid "Can't open file to read from path \"%s\"."
+msgstr "Datei im Pfad „%s“kann nicht zum Lesen geöffnet werden."
+
+#: editor/editor_export.cpp
+msgid "Save ZIP"
+msgstr "ZIP speichern"
+
+#: editor/editor_export.cpp
msgid ""
"Target platform requires 'ETC' texture compression for GLES2. Enable 'Import "
"Etc' in Project Settings."
@@ -2934,9 +2966,26 @@ msgstr "Selbst konfigurierte Debug-Exportvorlage nicht gefunden."
msgid "Custom release template not found."
msgstr "Selbst konfigurierte Release-Exportvorlage nicht gefunden."
+#: editor/editor_export.cpp
+msgid "Prepare Template"
+msgstr "Vorlage vorbereiten"
+
+#: editor/editor_export.cpp platform/osx/export/export.cpp
+msgid "The given export path doesn't exist."
+msgstr "Der angegebene Export-Pfad existiert nicht."
+
#: editor/editor_export.cpp platform/javascript/export/export.cpp
-msgid "Template file not found:"
-msgstr "Vorlagendatei nicht gefunden:"
+msgid "Template file not found: \"%s\"."
+msgstr "Vorlagendatei nicht gefunden: „%s“."
+
+#: editor/editor_export.cpp
+msgid "Failed to copy export template."
+msgstr "Fehler beim Kopieren der Exportvorlage."
+
+#: editor/editor_export.cpp platform/windows/export/export.cpp
+#: platform/x11/export/export.cpp
+msgid "PCK Embedding"
+msgstr "PCK-Einbettung"
#: editor/editor_export.cpp
msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB."
@@ -3118,9 +3167,9 @@ msgid "Import"
msgstr "Importieren"
#: editor/editor_feature_profile.cpp editor/project_export.cpp
-#: platform/android/export/export.cpp platform/javascript/export/export.cpp
-#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
-#: platform/windows/export/export.cpp
+#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#: platform/uwp/export/export.cpp platform/windows/export/export.cpp
msgid "Export"
msgstr "Exportieren"
@@ -4283,14 +4332,6 @@ msgstr ""
"In Datei ‚%s‘ kann nicht geschrieben werden. Die Datei wird bereits "
"verwendet, sie ist gesperrt, oder es ist keine Schreibberechtigung vorhanden."
-#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
-msgid "Scene"
-msgstr "Szene"
-
-#: editor/editor_node.cpp
-msgid "Scene Naming"
-msgstr "Szenenbenennung"
-
#: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp
#: servers/arvr/arvr_interface.cpp
msgid "Interface"
@@ -4405,6 +4446,10 @@ msgid "Default Color Picker Mode"
msgstr "Standard Farbwahlmodus"
#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
+msgid "Version Control"
+msgstr "Versionsverwaltung"
+
+#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
msgid "Username"
msgstr "Nutzername"
@@ -4432,6 +4477,10 @@ msgstr "Ablenkungsfreien Modus umschalten."
msgid "Add a new scene."
msgstr "Eine neue Szene hinzufügen."
+#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
+msgid "Scene"
+msgstr "Szene"
+
#: editor/editor_node.cpp
msgid "Go to previously opened scene."
msgstr "Gehe zu vorher geöffneter Szene."
@@ -5126,9 +5175,8 @@ msgid "Size:"
msgstr "Größe:"
#: editor/editor_properties_array_dict.cpp
-#, fuzzy
msgid "Page:"
-msgstr "Seite: "
+msgstr "Seite:"
#: editor/editor_properties_array_dict.cpp
#: editor/plugins/theme_editor_plugin.cpp
@@ -5223,6 +5271,10 @@ msgstr ""
"Keine ausführbare Exportvorlage für diese Plattform gefunden.\n"
"Im Exportmenü kann eine Vorlage als ausführbar erstellt oder markiert werden."
+#: editor/editor_run_native.cpp
+msgid "Project Run"
+msgstr "Projektdurchlauf"
+
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
msgstr "Spiellogik sollte mit der _run()-Methode beginnen."
@@ -5476,7 +5528,9 @@ msgid "Draw Spaces"
msgstr "Leerzeichen anzeigen"
#: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp
-#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp
+#: scene/main/scene_tree.cpp scene/resources/world.cpp
+#: scene/resources/world_2d.cpp
msgid "Navigation"
msgstr "Navigation"
@@ -6889,7 +6943,7 @@ msgstr "Wiederholen"
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp
-#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp
+#: scene/gui/control.cpp
msgid "Filter"
msgstr "Filter"
@@ -7123,9 +7177,8 @@ msgid "Generating Lightmaps"
msgstr "Generiere Lightmaps"
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Generating for Mesh:"
-msgstr "Generierung für Mesh: "
+msgstr "Generierung für Mesh:"
#: editor/import/resource_importer_scene.cpp
msgid "Running Custom Script..."
@@ -7154,6 +7207,23 @@ msgid "Saving..."
msgstr "Speichere..."
#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used as a normal map in 3D. Enabling red-green "
+"texture compression to reduce memory usage (blue channel is discarded)."
+msgstr ""
+"%s: Verwendung der Textur als Normalen-Map in 3D festgestellt. Rot-Grün-"
+"Texturkompression wurde aktiviert um Speicherverbrauch zu reduzieren (der "
+"blaue Kanal wird verworfen)."
+
+#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap "
+"generation and VRAM texture compression."
+msgstr ""
+"%s: Verwendung der Textur in 3D festgestellt. Filter, Wiederholung, Mipmap-"
+"Erzeugung und VRAM-Texturkompression wurden aktiviert."
+
+#: editor/import/resource_importer_texture.cpp
msgid "2D, Detect 3D"
msgstr "2D, 3D erkennen"
@@ -7832,11 +7902,20 @@ msgid "New Anim"
msgstr "Neue Animation"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+msgstr "Neue Animation erstellen"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Change Animation Name:"
msgstr "Animationsname ändern:"
#: editor/plugins/animation_player_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Rename Animation"
+msgstr "Animation umbenennen"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Delete Animation?"
msgstr "Animation löschen?"
@@ -7854,11 +7933,6 @@ msgid "Animation name already exists!"
msgstr "Animationsname existiert bereits!"
#: editor/plugins/animation_player_editor_plugin.cpp
-#: editor/plugins/sprite_frames_editor_plugin.cpp
-msgid "Rename Animation"
-msgstr "Animation umbenennen"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate Animation"
msgstr "Animation duplizieren"
@@ -8001,10 +8075,6 @@ msgid "Pin AnimationPlayer"
msgstr "Animationsspieler anheften"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Create New Animation"
-msgstr "Neue Animation erstellen"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Name:"
msgstr "Animationsname:"
@@ -8120,9 +8190,8 @@ msgid "Set the end animation. This is useful for sub-transitions."
msgstr "End-Animation festlegen. Hilfreich bei Sub-Transitionen."
#: editor/plugins/animation_state_machine_editor.cpp
-#, fuzzy
msgid "Transition:"
-msgstr "Übergang: "
+msgstr "Übergang:"
#: editor/plugins/animation_state_machine_editor.cpp
msgid "Play Mode:"
@@ -9890,9 +9959,8 @@ msgid "Volume"
msgstr "Volumen"
#: editor/plugins/particles_editor_plugin.cpp
-#, fuzzy
msgid "Emission Source:"
-msgstr "Emissionsquelle: "
+msgstr "Emissionsquelle:"
#: editor/plugins/particles_editor_plugin.cpp
msgid "A processor material of type 'ParticlesMaterial' is required."
@@ -10126,6 +10194,7 @@ msgid "Points"
msgstr "Punkte"
#: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp
+#: scene/resources/navigation_mesh.cpp
msgid "Polygons"
msgstr "Polygone"
@@ -10987,15 +11056,13 @@ msgstr "Verschiebung"
#. TRANSLATORS: Refers to changing the scale of a node in the 3D editor.
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Scaling:"
-msgstr "Skalierung: "
+msgstr "Skalierung:"
#. TRANSLATORS: Refers to changing the position of a node in the 3D editor.
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Translating:"
-msgstr "Verschiebe: "
+msgstr "Verschiebung:"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rotating %s degrees."
@@ -11509,8 +11576,8 @@ msgid "Invalid geometry, can't replace by mesh."
msgstr "Ungültige Geometrie, Mesh kann nicht ersetzt werden."
#: editor/plugins/sprite_editor_plugin.cpp
-msgid "Convert to Mesh2D"
-msgstr "Zu Mesh2D umwandeln"
+msgid "Convert to MeshInstance2D"
+msgstr "Zu MeshInstance2D umwandeln"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Invalid geometry, can't create polygon."
@@ -11541,19 +11608,16 @@ msgid "Sprite"
msgstr "Bild"
#: editor/plugins/sprite_editor_plugin.cpp
-#, fuzzy
msgid "Simplification:"
-msgstr "Vereinfachung: "
+msgstr "Vereinfachung:"
#: editor/plugins/sprite_editor_plugin.cpp
-#, fuzzy
msgid "Shrink (Pixels):"
-msgstr "Schrumpfen (Pixel): "
+msgstr "Schrumpfen (Pixel):"
#: editor/plugins/sprite_editor_plugin.cpp
-#, fuzzy
msgid "Grow (Pixels):"
-msgstr "Wachsen (Pixel): "
+msgstr "Wachsen (Pixel):"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Update Preview"
@@ -12496,8 +12560,7 @@ msgid "Select the previous shape, subtile, or Tile."
msgstr "Die vorherige Form oder (Unter-)Kachel auswählen."
#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp
-#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp
-#: scene/resources/texture.cpp
+#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp
msgid "Region"
msgstr "Bereich"
@@ -14004,36 +14067,10 @@ msgid "Delete preset '%s'?"
msgstr "Vorlage ‚%s‘ löschen?"
#: editor/project_export.cpp
-msgid ""
-"Failed to export the project for platform '%s'.\n"
-"Export templates seem to be missing or invalid."
-msgstr ""
-"Export des Projekts für die Plattform ‚%s‘ fehlgeschlagen.\n"
-"Exportvorlagen scheinen zu fehlen oder ungültig zu sein."
-
-#: 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 ""
-"Export des Projekts für die Plattform ‚%s‘ fehlgeschlagen.\n"
-"Es könnte an einen fehlerhaften Einstellung in den Voreinstellungen oder den "
-"individuellen Exporteinstellugen liegen."
-
-#: editor/project_export.cpp
msgid "Exporting All"
msgstr "Exportiere alles"
#: editor/project_export.cpp
-msgid "The given export path doesn't exist:"
-msgstr "Der angegebene Export-Pfad existiert nicht:"
-
-#: editor/project_export.cpp
-msgid "Export templates for this platform are missing/corrupted:"
-msgstr "Export-Vorlagen für dieses Systeme fehlen / sind fehlerhaft:"
-
-#: editor/project_export.cpp
msgid "Export Path"
msgstr "Exportpfad"
@@ -14176,6 +14213,10 @@ msgid "Export templates for this platform are missing:"
msgstr "Export-Templates für diese Systeme fehlen:"
#: editor/project_export.cpp
+msgid "Project Export"
+msgstr "Projektexport"
+
+#: editor/project_export.cpp
msgid "Manage Export Templates"
msgstr "Verwalte Exportvorlagen"
@@ -15732,9 +15773,8 @@ msgid "Attach Node Script"
msgstr "Node-Skript hinzufügen"
#: editor/script_editor_debugger.cpp
-#, fuzzy
msgid "Remote %s:"
-msgstr "Fern "
+msgstr "Fern %s:"
#: editor/script_editor_debugger.cpp
msgid "Bytes:"
@@ -16549,7 +16589,7 @@ msgstr "Ringseiten"
#: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp
#: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp
-#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp
+#: scene/3d/collision_polygon.cpp
msgid "Polygon"
msgstr "Polygon"
@@ -16709,9 +16749,8 @@ msgid "Disabled GDNative Singleton"
msgstr "GDNative Singleton wurde deaktiviert"
#: modules/gdnative/gdnative_library_singleton_editor.cpp
-#, fuzzy
msgid "Libraries:"
-msgstr "Bibliotheken: "
+msgstr "Bibliotheken:"
#: modules/gdnative/nativescript/nativescript.cpp
msgid "Class Name"
@@ -17106,7 +17145,6 @@ msgid "Use In Baked Light"
msgstr "In Baked-Light verwenden"
#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
-#: scene/resources/navigation_mesh.cpp
msgid "Cell"
msgstr "Zelle"
@@ -17132,6 +17170,17 @@ msgstr "Z zentrieren"
msgid "Mask"
msgstr "Maske"
+#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
+msgid "Bake Navigation"
+msgstr "Navigation backen"
+
+#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp
+#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp
+#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp
+#: scene/3d/navigation_mesh_instance.cpp
+msgid "Navigation Layers"
+msgstr "Navigationsschichten"
+
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Plane"
msgstr "Nächste Ebene"
@@ -17535,9 +17584,8 @@ msgstr ""
"sein! Bitte entsprechendes Node anpassen."
#: modules/visual_script/visual_script.cpp
-#, fuzzy
msgid "Node returned an invalid sequence output:"
-msgstr "Node gab ungültige Sequenzausgabe zurück: "
+msgstr "Node gab ungültige Sequenzausgabe zurück:"
#: modules/visual_script/visual_script.cpp
msgid "Found sequence bit but not the node in the stack, report bug!"
@@ -17546,9 +17594,8 @@ msgstr ""
"melden Sie den Bug!"
#: modules/visual_script/visual_script.cpp
-#, fuzzy
msgid "Stack overflow with stack depth:"
-msgstr "Stack-Overflow mit Stack-Tiefe: "
+msgstr "Stack-Overflow mit Stack-Tiefe:"
#: modules/visual_script/visual_script.cpp
msgid "Visual Script"
@@ -17917,18 +17964,16 @@ msgid "for (elem) in (input):"
msgstr "for (Element) in (Eingabe):"
#: modules/visual_script/visual_script_flow_control.cpp
-#, fuzzy
msgid "Input type not iterable:"
-msgstr "Eingabetyp nicht wiederholbar: "
+msgstr "Eingabetyp nicht iterierbar:"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Iterator became invalid"
msgstr "Iterator wurde ungültig"
#: modules/visual_script/visual_script_flow_control.cpp
-#, fuzzy
msgid "Iterator became invalid:"
-msgstr "Iterator wurde ungültig: "
+msgstr "Iterator wurde ungültig:"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Sequence"
@@ -18079,14 +18124,12 @@ msgid "Operator"
msgstr "Operator"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Invalid argument of type:"
-msgstr ": Ungültiger Parameter vom Typ: "
+msgstr "Ungültiges Argument vom Typ:"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Invalid arguments:"
-msgstr ": Ungültige Parameter: "
+msgstr "Ungültige Argumente:"
#: modules/visual_script/visual_script_nodes.cpp
msgid "a if cond, else b"
@@ -18097,14 +18140,12 @@ msgid "Var Name"
msgstr "Variablenname"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "VariableGet not found in script:"
-msgstr "VariableGet nicht im Skript gefunden: "
+msgstr "VariableGet nicht im Skript gefunden:"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "VariableSet not found in script:"
-msgstr "VariableSet nicht im Skript gefunden: "
+msgstr "VariableSet nicht im Skript gefunden:"
#: modules/visual_script/visual_script_nodes.cpp
msgid "Preload"
@@ -18590,10 +18631,6 @@ msgid "Could not execute on device."
msgstr "Ließ sich nicht auf Gerät ausführen."
#: platform/android/export/export_plugin.cpp
-msgid "Unable to find the 'apksigner' tool."
-msgstr "Das ‚apksigner‘-Hilfswerkzeug konnte nicht gefunden werden."
-
-#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -18727,16 +18764,18 @@ msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version."
msgstr ""
"Die Version des „Target Sdk“ muss größer gleich der des „Min Sdk“ sein."
+#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp
+#: platform/windows/export/export.cpp
+msgid "Code Signing"
+msgstr "Code-Signieren"
+
#: 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."
+"'apksigner' could not be found. Please check that the command is available "
+"in the Android SDK build-tools directory. The resulting %s is unsigned."
msgstr ""
-"‚apksigner‘ konnte nicht gefunden werden.\n"
-"Ist das Programm im Android SDK build-tools-Verzeichnis vorhanden?\n"
-"Das resultierende %s ist nicht signiert."
+"‚apksigner‘ konnte nicht gefunden werden. Ist die Anwendung im Android-SDK "
+"build-tools-Verzeichnis vorhanden? Das resultierende %s ist nicht signiert."
#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
@@ -18751,6 +18790,10 @@ msgid "Could not find keystore, unable to export."
msgstr "Keystore konnte nicht gefunden werden, Export fehlgeschlagen."
#: platform/android/export/export_plugin.cpp
+msgid "Could not start apksigner executable."
+msgstr "Apksigner-Anwendung konnte nicht gestartet werden."
+
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr "‚apksigner‘ gab Fehlercode #%d zurück"
@@ -18782,8 +18825,8 @@ msgstr ""
"Ungültiger Dateiname. Android APKs benötigen .apk als Dateinamenendung."
#: platform/android/export/export_plugin.cpp
-msgid "Unsupported export format!\n"
-msgstr "Nicht unterstütztes Exportformat!\n"
+msgid "Unsupported export format!"
+msgstr "Nicht unterstütztes Exportformat!"
#: platform/android/export/export_plugin.cpp
msgid ""
@@ -18796,26 +18839,23 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Android build version mismatch:\n"
-" Template installed: %s\n"
-" Godot Version: %s\n"
+"Android build version mismatch: Template installed: %s, Godot version: %s. "
"Please reinstall Android build template from 'Project' menu."
msgstr ""
-"Android-Build-Versionsinkompatibilität:\n"
-" Installierte Vorlage: %s\n"
-" Godot-Version: %s\n"
-"Bitte Android-Build-Vorlage im ‚Projekt‘-Menü neu installieren."
+"Android-Build-Versionsinkompatibilität: Installierte Vorlage: %s, Godot-"
+"Version: %s. Bitte Android-Build-Vorlage über das ‚Projekt‘-Menü neu "
+"installieren."
#: platform/android/export/export_plugin.cpp
msgid ""
-"Unable to overwrite res://android/build/res/*.xml files with project name"
+"Unable to overwrite res://android/build/res/*.xml files with project name."
msgstr ""
-"Kann res://android/build/res/*.xml Dateien nicht mit Projektnamen "
-"überschreiben"
+"res://android/build/res/*.xml-Dateien können nicht mit Projektnamen "
+"überschrieben werden."
#: platform/android/export/export_plugin.cpp
-msgid "Could not export project files to gradle project\n"
-msgstr "Konnte Projektdateien nicht als Gradle-Projekt exportieren\n"
+msgid "Could not export project files to gradle project."
+msgstr "Projektdateien konnten nicht als Gradle-Projekt exportiert werden."
#: platform/android/export/export_plugin.cpp
msgid "Could not write expansion package file!"
@@ -18827,13 +18867,12 @@ msgstr "Baue Android-Projekt (gradle)"
#: platform/android/export/export_plugin.cpp
msgid ""
-"Building of Android project failed, check output for the error.\n"
+"Building of Android project failed, check output for the error. "
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
"Bauen des Android-Projekts fehlgeschlagen, Fehlerdetails befinden ich in der "
-"Textausgabe.\n"
-"Alternativ befindet sich die Android-Build-Dokumentation auf docs."
-"godotengine.org."
+"Textausgabe. Alternativ befindet sich die Android-Build-Dokumentation auf "
+"docs.godotengine.org."
#: platform/android/export/export_plugin.cpp
msgid "Moving output"
@@ -18848,31 +18887,25 @@ msgstr ""
"im Gradle Projektverzeichnis erscheinen."
#: platform/android/export/export_plugin.cpp
-msgid "Package not found: %s"
-msgstr "Paket nicht gefunden: %s"
+msgid "Package not found: \"%s\"."
+msgstr "Paket nicht gefunden: „%s“."
#: platform/android/export/export_plugin.cpp
msgid "Creating APK..."
msgstr "Erzeuge APK…"
#: platform/android/export/export_plugin.cpp
-msgid ""
-"Could not find template APK to export:\n"
-"%s"
-msgstr ""
-"Konnte keine APK-Vorlage zum Exportieren finden:\n"
-"%s"
+msgid "Could not find template APK to export: \"%s\"."
+msgstr "Keine APK-Vorlage zum Exportieren gefunden: „%s“."
#: platform/android/export/export_plugin.cpp
msgid ""
-"Missing libraries in the export template for the selected architectures: "
-"%s.\n"
+"Missing libraries in the export template for the selected architectures: %s. "
"Please build a template with all required libraries, or uncheck the missing "
"architectures in the export preset."
msgstr ""
"Fehlende Bibliotheken in Exportvorlage für die ausgewählten Architekturen: "
-"%s.\n"
-"Es muss entweder eine Exportvorlage mit den allen benötigten Bibliotheken "
+"%s. Es muss entweder eine Exportvorlage mit allen benötigten Bibliotheken "
"gebaut werden oder die angegebenen Architekturen müssen abgewählt werden."
#: platform/android/export/export_plugin.cpp
@@ -18880,8 +18913,8 @@ msgid "Adding files..."
msgstr "Füge Dateien hinzu…"
#: platform/android/export/export_plugin.cpp
-msgid "Could not export project files"
-msgstr "Projektdateien konnten nicht exportiert werden"
+msgid "Could not export project files."
+msgstr "Projektdateien konnten nicht exportiert werden."
#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
@@ -19104,6 +19137,15 @@ msgstr "Eigene Hintergrundfarbe verwenden"
msgid "Custom BG Color"
msgstr "Eigene Hintergrundfarbe"
+#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
+#: platform/osx/export/export.cpp
+msgid "Prepare Templates"
+msgstr "Vorlagen vorbereiten"
+
+#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
+msgid "Export template not found."
+msgstr "Exportvorlage wurde nicht gefunden."
+
#: platform/iphone/export/export.cpp
msgid "App Store Team ID not specified - cannot configure the project."
msgstr ""
@@ -19126,20 +19168,28 @@ msgid "Run exported HTML in the system's default browser."
msgstr "Führe exportiertes HTML im Standard-Browser des Betriebssystems aus."
#: platform/javascript/export/export.cpp
-msgid "Could not open template for export:"
-msgstr "Konnte Vorlage nicht zum Export öffnen:"
+msgid "Could not open template for export: \"%s\"."
+msgstr "Vorlage zum Export konnte nicht geöffnet werden: „%s“."
#: platform/javascript/export/export.cpp
-msgid "Invalid export template:"
-msgstr "Ungültige Exportvorlage:"
+msgid "Invalid export template: \"%s\"."
+msgstr "Ungültige Exportvorlage: „%s“."
+
+#: platform/javascript/export/export.cpp
+msgid "Could not write file: \"%s\"."
+msgstr "Datei konnte nicht geschrieben werden: „%s“."
+
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+msgid "Icon Creation"
+msgstr "Symbolbilderzeugung"
#: platform/javascript/export/export.cpp
-msgid "Could not write file:"
-msgstr "Konnte Datei nicht schreiben:"
+msgid "Could not read file: \"%s\"."
+msgstr "Datei konnte nicht gelesen werden: „%s“."
#: platform/javascript/export/export.cpp
-msgid "Could not read file:"
-msgstr "Konnte Datei nicht lesen:"
+msgid "PWA"
+msgstr "PWA"
#: platform/javascript/export/export.cpp
msgid "Variant"
@@ -19210,16 +19260,16 @@ msgid "Icon 512 X 512"
msgstr "Symbol 512 X 512"
#: platform/javascript/export/export.cpp
-msgid "Could not read HTML shell:"
-msgstr "Konnte HTML-Shell nicht lesen:"
+msgid "Could not read HTML shell: \"%s\"."
+msgstr "HTML-Shell konnte nicht gelesen werden „%s“."
#: platform/javascript/export/export.cpp
-msgid "Could not create HTTP server directory:"
-msgstr "Konnte HTTP-Server-Verzeichnis nicht erstellen:"
+msgid "Could not create HTTP server directory: %s."
+msgstr "HTTP-Server-Verzeichnis konnte nicht erstellt werden: %s."
#: platform/javascript/export/export.cpp
-msgid "Error starting HTTP server:"
-msgstr "Fehler beim Starten des HTTP-Servers:"
+msgid "Error starting HTTP server: %d."
+msgstr "Fehler beim Starten des HTTP-Servers: %d."
#: platform/javascript/export/export.cpp
msgid "Web"
@@ -19483,12 +19533,28 @@ msgid "Apple Team ID"
msgstr "Apple-Team-ID"
#: platform/osx/export/export.cpp
+msgid "Could not open icon file \"%s\"."
+msgstr "Symbolbilddatei „%s“ konnte nicht geöffnet werden."
+
+#: platform/osx/export/export.cpp
+msgid "Could not start xcrun executable."
+msgstr "Xcrun-Anwendung konnte nicht gestartet werden."
+
+#: platform/osx/export/export.cpp
+msgid "Notarization failed."
+msgstr "Beglaubigung fehlgeschlagen."
+
+#: platform/osx/export/export.cpp
+msgid "Notarization request UUID: \"%s\""
+msgstr "Beglaubigungsanfrage-UUID: „%s“"
+
+#: platform/osx/export/export.cpp
msgid ""
-"Note: The notarization process generally takes less than an hour. When the "
-"process is completed, you'll receive an email."
+"The notarization process generally takes less than an hour. When the process "
+"is completed, you'll receive an email."
msgstr ""
-"Hinweis: Der Beglaubigungsprozess dauert gewöhnlich weniger als eine Stunde. "
-"Nach Ablauf wird eine Bestätigungsmail versandt."
+"Der Beglaubigungsprozess dauert gewöhnlich weniger als eine Stunde. Nach "
+"Ablauf wird eine Bestätigungsmail versandt."
#: platform/osx/export/export.cpp
msgid ""
@@ -19507,16 +19573,75 @@ msgstr ""
"Anwendung geheftet werden (optional):"
#: platform/osx/export/export.cpp
+msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+"Zeitstempel sind nicht mit Ad-hoc-Signaturen kompatibel, und wurden "
+"deaktiviert!"
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+"Die abgehärtete Laufzeitumgebung ist nicht mit Ad-hoc-Signaturen kompatibel, "
+"und wurde deaktiviert!"
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign failed with error \"%s\"."
+msgstr "Eingebettetes CodeSign fehlgeschlagen mit Fehler „%s“."
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign require regex module."
+msgstr "Eingebettetes CodeSign benötigt Regex-Modul."
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Could not start codesign executable, make sure Xcode command line tools are "
+"installed."
+msgstr ""
+"Codesign-Anwendung konnte nicht gestartet werden. Wurden die Xcode-"
+"Kommandozeilen-Hilfsprogramme installiert?"
+
+#: platform/osx/export/export.cpp platform/windows/export/export.cpp
msgid "No identity found."
msgstr "Keine Identität gefunden."
#: platform/osx/export/export.cpp
+msgid "Cannot sign file %s."
+msgstr "Datei %s konnte nicht signiert werden."
+
+#: platform/osx/export/export.cpp
+msgid "Relative symlinks are not supported, exported \"%s\" might be broken!"
+msgstr ""
+"Relative symbolische Links werden nicht unterstützt, exportiertes „%s“ "
+"könnte fehlerhaft sein!"
+
+#: platform/osx/export/export.cpp
+msgid "DMG Creation"
+msgstr "DMG-Erzeugung"
+
+#: platform/osx/export/export.cpp
+msgid "Could not start hdiutil executable."
+msgstr "Hdiutil-Anwendung konnte nicht gestartet werden."
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed - file exists."
+msgstr "„hdiutil create“ ist fehlgeschlagen - Datei existiert bereits."
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed."
+msgstr "„hdiutil create“ ist fehlgeschlagen."
+
+#: platform/osx/export/export.cpp
msgid "Creating app bundle"
msgstr "Erzeuge App-Bundle"
#: platform/osx/export/export.cpp
-msgid "Could not find template app to export:"
-msgstr "Es konnte keine Vorlagen-App zum Exportieren gefunden werden:"
+msgid "Could not find template app to export: \"%s\"."
+msgstr "Es konnte keine Vorlagen-App zum Exportieren gefunden werden: „%s“."
+
+#: platform/osx/export/export.cpp
+msgid "Invalid export format."
+msgstr "Ungültiges Exportformat."
#: platform/osx/export/export.cpp
msgid ""
@@ -19528,10 +19653,10 @@ msgstr ""
#: platform/osx/export/export.cpp
msgid ""
-"Requested template binary '%s' not found. It might be missing from your "
+"Requested template binary \"%s\" not found. It might be missing from your "
"template archive."
msgstr ""
-"Benötigte Vorlagen-Binary ‚%s‘ nicht gefunden. Es könnte im Vorlagen-Archiv "
+"Benötigte Vorlagen-Binary „%s“ nicht gefunden. Es könnte im Vorlagen-Archiv "
"fehlen."
#: platform/osx/export/export.cpp
@@ -19575,6 +19700,14 @@ msgid "Sending archive for notarization"
msgstr "Sende Archiv zur Beglaubigung"
#: platform/osx/export/export.cpp
+msgid "ZIP Creation"
+msgstr "ZIP-Erstellung"
+
+#: platform/osx/export/export.cpp
+msgid "Could not open file to read from path \"%s\"."
+msgstr "Datei im Pfad „%s“ konnte nicht zum Lesen geöffnet werden."
+
+#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr "Ungültiger Bundle-Bezeichner:"
@@ -19902,6 +20035,10 @@ msgid "Debug Algorithm"
msgstr "Debug-Algorithmus"
#: platform/windows/export/export.cpp
+msgid "Failed to rename temporary file \"%s\"."
+msgstr "Temporäre Datei „%s“ konnte nicht umbenannt werden."
+
+#: platform/windows/export/export.cpp
msgid "Identity Type"
msgstr "Identitäts-Typ"
@@ -19942,6 +20079,70 @@ msgid "Trademarks"
msgstr "Handelsmarken"
#: platform/windows/export/export.cpp
+msgid "Resources Modification"
+msgstr "Ressourcen-Modifikationen"
+
+#: platform/windows/export/export.cpp
+msgid "Could not find rcedit executable at \"%s\"."
+msgstr "Anwendung rcedit konnte nicht gefunden werden in „%s“."
+
+#: platform/windows/export/export.cpp
+msgid "Could not find wine executable at \"%s\"."
+msgstr "Anwendung wine konnte nicht gefunden werden in „%s“."
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start rcedit executable, configure rcedit path in the Editor "
+"Settings (Export > Windows > Rcedit)."
+msgstr ""
+"Anwendung rcedit konnte nicht gestartet werden. Bitte rcedit-Pfad in "
+"Editoreinstellungen festlegen (Export > Windows > Rcedit)."
+
+#: platform/windows/export/export.cpp
+msgid ""
+"rcedit failed to modify executable:\n"
+"%s"
+msgstr ""
+"Modifikation der Anwendung durch rcedit fehlgeschlagen:\n"
+"%s"
+
+#: platform/windows/export/export.cpp
+msgid "Could not find signtool executable at \"%s\"."
+msgstr "Anwendung signtool konnte nicht gefunden werden in: „%s“."
+
+#: platform/windows/export/export.cpp
+msgid "Could not find osslsigncode executable at \"%s\"."
+msgstr "Anwendung osslsigncode konnte nicht gefunden werden in: „%s“."
+
+#: platform/windows/export/export.cpp
+msgid "Invalid identity type."
+msgstr "Ungültiger Identitäts-Typ."
+
+#: platform/windows/export/export.cpp
+msgid "Invalid timestamp server."
+msgstr "Ungültiger Zeitstempelserver."
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start signtool executable, configure signtool path in the Editor "
+"Settings (Export > Windows > Signtool)."
+msgstr ""
+"Anwendung signtool konnte nicht gestartet werden. Bitte signtool-Pfad in "
+"Editoreinstellungen festlegen (Export > Windows > Signtool)."
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Signtool failed to sign executable:\n"
+"%s"
+msgstr ""
+"Signieren der Anwendung durch Signtool ist fehlgeschlagen:\n"
+"%s"
+
+#: platform/windows/export/export.cpp
+msgid "Failed to remove temporary file \"%s\"."
+msgstr "Fehler beim entfernen temporärer Datei „%s“."
+
+#: platform/windows/export/export.cpp
msgid ""
"The rcedit tool must be configured in the Editor Settings (Export > Windows "
"> Rcedit) to change the icon or app information data."
@@ -19963,6 +20164,22 @@ msgid "Invalid product version:"
msgstr "Ungültige Produktversion:"
#: platform/windows/export/export.cpp
+msgid "Windows executables cannot be >= 4 GiB."
+msgstr "Windows-Anwendungen können nicht größer als 4 GiB sein."
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Failed to open executable file \"%s\"."
+msgstr "Fehler beim Öffnen von ausführbarer Datei „%s“."
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable file header corrupted."
+msgstr "Header von ausführbarer Datei beschädigt."
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable \"pck\" section not found."
+msgstr "„pck“-Sektor von ausführbarer Datei nicht gefunden."
+
+#: platform/windows/export/export.cpp
msgid "Windows"
msgstr "Windows"
@@ -19978,6 +20195,12 @@ msgstr "Osslsigncode"
msgid "Wine"
msgstr "Wine"
+#: platform/x11/export/export.cpp
+msgid "32-bit executables cannot have embedded data >= 4 GiB."
+msgstr ""
+"32-bit-Anwendungen können keine eingebetteten Daten größer als 4 GiB "
+"beinhalten."
+
#: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp
#: scene/resources/texture.cpp
msgid "Frames"
@@ -20088,7 +20311,8 @@ msgstr "Abspielen pausiert"
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/3d/light.cpp scene/3d/reflection_probe.cpp
-#: scene/3d/visual_instance.cpp scene/resources/material.cpp
+#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp
+#: scene/resources/material.cpp
msgid "Max Distance"
msgstr "Max Distanz"
@@ -20818,6 +21042,18 @@ msgstr "Zellen Größe"
msgid "Edge Connection Margin"
msgstr "Kantenverbindungsbegrenzung"
+#: scene/2d/navigation_2d.cpp
+msgid ""
+"'Navigation2D' node and 'Navigation2D.get_simple_path()' are deprecated and "
+"will be removed in a future version. Use 'Navigation2DServer.map_get_path()' "
+"instead."
+msgstr ""
+
+#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
+#, fuzzy
+msgid "Path Desired Distance"
+msgstr "Gewünschte Zieldistanz"
+
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
msgid "Target Desired Distance"
msgstr "Gewünschte Zieldistanz"
@@ -20873,18 +21109,17 @@ msgstr ""
"Polygon zeichnen."
#: scene/2d/navigation_polygon.cpp
-msgid ""
-"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
-"node. It only provides navigation data."
-msgstr ""
-"NavigationPolygonInstance muss ein Unterobjekt erster oder zweiter Ordnung "
-"unterhalb eines Navigation2D-Node sein. Es liefert nur "
-"Navigationsinformationen."
-
-#: scene/2d/navigation_polygon.cpp
msgid "Navpoly"
msgstr "Navpolygon"
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+msgid "Enter Cost"
+msgstr "Eintrittskosten"
+
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+msgid "Travel Cost"
+msgstr "Reisekosten"
+
#: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp
#: scene/main/canvas_layer.cpp
msgid "Rotation Degrees"
@@ -21976,6 +22211,13 @@ msgstr "Software-Skinning"
msgid "Transform Normals"
msgstr "Normalen transformieren"
+#: scene/3d/navigation.cpp
+msgid ""
+"'Navigation' node and 'Navigation.get_simple_path()' are deprecated and will "
+"be removed in a future version. Use 'NavigationServer.map_get_path()' "
+"instead."
+msgstr ""
+
#: scene/3d/navigation.cpp scene/resources/curve.cpp
msgid "Up Vector"
msgstr "Hoch-Vektor"
@@ -21997,14 +22239,6 @@ msgid ""
"The NavigationAgent can be used only under a Spatial inheriting parent node."
msgstr "NavigationAgent kann nur unter einem Spatial-Node genutzt werden."
-#: scene/3d/navigation_mesh_instance.cpp
-msgid ""
-"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
-"It only provides navigation data."
-msgstr ""
-"NavigationMeshInstance muss ein Unterobjekt erster oder zweiter Ordnung "
-"eines Navigation-Nodes sein. Es liefert nur Navigationsinformationen."
-
#: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp
msgid "NavMesh"
msgstr "NavMesh"
@@ -24440,6 +24674,14 @@ msgid "3D Physics"
msgstr "3D-Physik"
#: scene/register_scene_types.cpp
+msgid "2D Navigation"
+msgstr "2D-Navigation"
+
+#: scene/register_scene_types.cpp
+msgid "3D Navigation"
+msgstr "3D-Navigation"
+
+#: scene/register_scene_types.cpp
msgid "Use hiDPI"
msgstr "hiDPI verwenden"
@@ -25650,7 +25892,7 @@ msgstr "Übertragung"
msgid "Refraction"
msgstr "Brechung"
-#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp
+#: scene/resources/material.cpp
msgid "Detail"
msgstr "Details"
@@ -25723,8 +25965,12 @@ msgid "Visible Instance Count"
msgstr "Sichtbare Instanzen Anzahl"
#: scene/resources/navigation_mesh.cpp
-msgid "Sample Partition Type"
-msgstr "Probeneinteilunstyp"
+msgid "Sampling"
+msgstr "Abtastung"
+
+#: scene/resources/navigation_mesh.cpp
+msgid "Partition Type"
+msgstr "Einteilungstyp"
#: scene/resources/navigation_mesh.cpp
msgid "Parsed Geometry Type"
@@ -25739,8 +25985,12 @@ msgid "Source Group Name"
msgstr "Quellen-Gruppenname"
#: scene/resources/navigation_mesh.cpp
-msgid "Agent"
-msgstr "Agent"
+msgid "Cells"
+msgstr "Zellen"
+
+#: scene/resources/navigation_mesh.cpp
+msgid "Agents"
+msgstr "Agenten"
#: scene/resources/navigation_mesh.cpp
msgid "Max Climb"
@@ -25751,12 +26001,16 @@ msgid "Max Slope"
msgstr "Maximale Neigung"
#: scene/resources/navigation_mesh.cpp
+msgid "Regions"
+msgstr "Bereiche"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Merge Size"
msgstr "Größe der Zusammenführung"
#: scene/resources/navigation_mesh.cpp
-msgid "Edge"
-msgstr "Kante"
+msgid "Edges"
+msgstr "Kanten"
#: scene/resources/navigation_mesh.cpp
msgid "Max Error"
@@ -25767,6 +26021,10 @@ msgid "Verts Per Poly"
msgstr "Vert per Poly"
#: scene/resources/navigation_mesh.cpp
+msgid "Details"
+msgstr "Details"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Sample Distance"
msgstr "Probendistanz"
@@ -25783,8 +26041,18 @@ msgid "Ledge Spans"
msgstr "Vorsprünge"
#: scene/resources/navigation_mesh.cpp
-msgid "Filter Walkable Low Height Spans"
-msgstr "Ablaufbare Abstände niedriger Höhe aussortiern"
+msgid "Walkable Low Height Spans"
+msgstr "Ablaufbare Abstände niedriger Höhe"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB"
+msgstr "Erzeuge AABB"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB Offset"
+msgstr "Grundversatz"
#: scene/resources/occluder_shape.cpp
msgid "Spheres"
@@ -26143,6 +26411,10 @@ msgid "Scenario"
msgstr "Szenario"
#: scene/resources/world.cpp scene/resources/world_2d.cpp
+msgid "Navigation Map"
+msgstr "Navigationskarte"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
msgid "Direct Space State"
msgstr "Direkter Raum Zustand"
@@ -26158,6 +26430,22 @@ msgstr "Standard lineare Dämpfung"
msgid "Default Angular Damp"
msgstr "Standard Winkeldämpfung"
+#: scene/resources/world.cpp
+msgid "Default Map Up"
+msgstr "Standard Kartenhoch"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+msgid "Default Cell Size"
+msgstr "Standardzellgröße"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+msgid "Default Cell Height"
+msgstr "Standardzellhöhe"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+msgid "Default Edge Connection Margin"
+msgstr "Standard Kantenverbinungsabstand"
+
#: scene/resources/world_2d.cpp
msgid "Canvas"
msgstr "Canvas/ Leinwand"
diff --git a/editor/translations/editor.pot b/editor/translations/editor.pot
index e3c129d482..2682db8c4b 100644
--- a/editor/translations/editor.pot
+++ b/editor/translations/editor.pot
@@ -196,9 +196,10 @@ msgid "Data"
msgstr ""
#: core/io/file_access_network.cpp core/register_core_types.cpp
-#: editor/editor_settings.cpp main/main.cpp
+#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
#: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h
+#: scene/gui/file_dialog.cpp
msgid "Network"
msgstr ""
@@ -346,6 +347,14 @@ msgstr ""
msgid "Max Size (KB)"
msgstr ""
+#: core/os/input.cpp
+msgid "Mouse Mode"
+msgstr ""
+
+#: core/os/input.cpp
+msgid "Use Accumulated Input"
+msgstr ""
+
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: servers/audio_server.cpp
msgid "Device"
@@ -525,7 +534,8 @@ msgstr ""
#: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
-#: main/main.cpp
+#: main/main.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp
msgid "Run"
msgstr ""
@@ -608,24 +618,23 @@ msgid "Main Run Args"
msgstr ""
#: core/project_settings.cpp
-msgid "Search In File Extensions"
+msgid "Scene Naming"
msgstr ""
#: core/project_settings.cpp
-msgid "Script Templates Search Path"
+msgid "Search In File Extensions"
msgstr ""
-#: core/project_settings.cpp editor/editor_node.cpp
-#: editor/plugins/version_control_editor_plugin.cpp
-msgid "Version Control"
+#: core/project_settings.cpp
+msgid "Script Templates Search Path"
msgstr ""
#: core/project_settings.cpp
-msgid "Autoload On Startup"
+msgid "Version Control Autoload On Startup"
msgstr ""
#: core/project_settings.cpp
-msgid "Plugin Name"
+msgid "Version Control Plugin Name"
msgstr ""
#: core/project_settings.cpp scene/2d/collision_object_2d.cpp
@@ -733,7 +742,8 @@ msgid "Quality"
msgstr ""
#: core/project_settings.cpp scene/gui/file_dialog.cpp
-#: scene/main/scene_tree.cpp servers/visual_server.cpp
+#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp
+#: servers/visual_server.cpp
msgid "Filters"
msgstr ""
@@ -2114,7 +2124,7 @@ msgid "Open"
msgstr ""
#: editor/dependency_editor.cpp
-msgid "Owners Of:"
+msgid "Owners of: %s (Total: %d)"
msgstr ""
#: editor/dependency_editor.cpp
@@ -2405,7 +2415,7 @@ msgid "Bus Options"
msgstr ""
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/scene_tree_dock.cpp
+#: editor/project_export.cpp editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr ""
@@ -2661,6 +2671,22 @@ msgid "Choose"
msgstr ""
#: editor/editor_export.cpp
+msgid "Project export for platform:"
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Completed with errors."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Completed successfully."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Failed."
+msgstr ""
+
+#: editor/editor_export.cpp
msgid "Storing File:"
msgstr ""
@@ -2673,6 +2699,26 @@ msgid "Packing"
msgstr ""
#: editor/editor_export.cpp
+msgid "Save PCK"
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Cannot create file \"%s\"."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Failed to export project files."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Can't open file to read from path \"%s\"."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Save ZIP"
+msgstr ""
+
+#: editor/editor_export.cpp
msgid ""
"Target platform requires 'ETC' texture compression for GLES2. Enable 'Import "
"Etc' in Project Settings."
@@ -2773,8 +2819,25 @@ msgstr ""
msgid "Custom release template not found."
msgstr ""
+#: editor/editor_export.cpp
+msgid "Prepare Template"
+msgstr ""
+
+#: editor/editor_export.cpp platform/osx/export/export.cpp
+msgid "The given export path doesn't exist."
+msgstr ""
+
#: editor/editor_export.cpp platform/javascript/export/export.cpp
-msgid "Template file not found:"
+msgid "Template file not found: \"%s\"."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Failed to copy export template."
+msgstr ""
+
+#: editor/editor_export.cpp platform/windows/export/export.cpp
+#: platform/x11/export/export.cpp
+msgid "PCK Embedding"
msgstr ""
#: editor/editor_export.cpp
@@ -2944,9 +3007,9 @@ msgid "Import"
msgstr ""
#: editor/editor_feature_profile.cpp editor/project_export.cpp
-#: platform/android/export/export.cpp platform/javascript/export/export.cpp
-#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
-#: platform/windows/export/export.cpp
+#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#: platform/uwp/export/export.cpp platform/windows/export/export.cpp
msgid "Export"
msgstr ""
@@ -4022,14 +4085,6 @@ msgid ""
"Unable to write to file '%s', file in use, locked or lacking permissions."
msgstr ""
-#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
-msgid "Scene"
-msgstr ""
-
-#: editor/editor_node.cpp
-msgid "Scene Naming"
-msgstr ""
-
#: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp
#: servers/arvr/arvr_interface.cpp
msgid "Interface"
@@ -4144,6 +4199,10 @@ msgid "Default Color Picker Mode"
msgstr ""
#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
+msgid "Version Control"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
msgid "Username"
msgstr ""
@@ -4171,6 +4230,10 @@ msgstr ""
msgid "Add a new scene."
msgstr ""
+#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
+msgid "Scene"
+msgstr ""
+
#: editor/editor_node.cpp
msgid "Go to previously opened scene."
msgstr ""
@@ -4897,6 +4960,10 @@ msgid ""
"as runnable."
msgstr ""
+#: editor/editor_run_native.cpp
+msgid "Project Run"
+msgstr ""
+
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
msgstr ""
@@ -5150,7 +5217,9 @@ msgid "Draw Spaces"
msgstr ""
#: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp
-#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp
+#: scene/main/scene_tree.cpp scene/resources/world.cpp
+#: scene/resources/world_2d.cpp
msgid "Navigation"
msgstr ""
@@ -6530,7 +6599,7 @@ msgstr ""
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp
-#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp
+#: scene/gui/control.cpp
msgid "Filter"
msgstr ""
@@ -6792,6 +6861,18 @@ msgid "Saving..."
msgstr ""
#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used as a normal map in 3D. Enabling red-green "
+"texture compression to reduce memory usage (blue channel is discarded)."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap "
+"generation and VRAM texture compression."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
msgid "2D, Detect 3D"
msgstr ""
@@ -7441,11 +7522,20 @@ msgid "New Anim"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+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 "Rename Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Delete Animation?"
msgstr ""
@@ -7463,11 +7553,6 @@ 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 "Duplicate Animation"
msgstr ""
@@ -7610,10 +7695,6 @@ msgid "Pin AnimationPlayer"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Create New Animation"
-msgstr ""
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Name:"
msgstr ""
@@ -9658,6 +9739,7 @@ msgid "Points"
msgstr ""
#: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp
+#: scene/resources/navigation_mesh.cpp
msgid "Polygons"
msgstr ""
@@ -11008,7 +11090,7 @@ msgid "Invalid geometry, can't replace by mesh."
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
-msgid "Convert to Mesh2D"
+msgid "Convert to MeshInstance2D"
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
@@ -11966,8 +12048,7 @@ msgid "Select the previous shape, subtile, or Tile."
msgstr ""
#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp
-#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp
-#: scene/resources/texture.cpp
+#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp
msgid "Region"
msgstr ""
@@ -13377,31 +13458,10 @@ 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 "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 "Export Path"
msgstr ""
@@ -13534,6 +13594,10 @@ msgid "Export templates for this platform are missing:"
msgstr ""
#: editor/project_export.cpp
+msgid "Project Export"
+msgstr ""
+
+#: editor/project_export.cpp
msgid "Manage Export Templates"
msgstr ""
@@ -15779,7 +15843,7 @@ msgstr ""
#: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp
#: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp
-#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp
+#: scene/3d/collision_polygon.cpp
msgid "Polygon"
msgstr ""
@@ -16333,7 +16397,6 @@ msgid "Use In Baked Light"
msgstr ""
#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
-#: scene/resources/navigation_mesh.cpp
msgid "Cell"
msgstr ""
@@ -16359,6 +16422,17 @@ msgstr ""
msgid "Mask"
msgstr ""
+#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
+msgid "Bake Navigation"
+msgstr ""
+
+#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp
+#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp
+#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp
+#: scene/3d/navigation_mesh_instance.cpp
+msgid "Navigation Layers"
+msgstr ""
+
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Plane"
msgstr ""
@@ -17784,10 +17858,6 @@ 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."
@@ -17891,12 +17961,15 @@ msgstr ""
msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version."
msgstr ""
+#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp
+#: platform/windows/export/export.cpp
+msgid "Code Signing"
+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."
+"'apksigner' could not be found. Please check that the command is available "
+"in the Android SDK build-tools directory. The resulting %s is unsigned."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -17912,6 +17985,10 @@ msgid "Could not find keystore, unable to export."
msgstr ""
#: platform/android/export/export_plugin.cpp
+msgid "Could not start apksigner executable."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
@@ -17940,7 +18017,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Unsupported export format!\n"
+msgid "Unsupported export format!"
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -17951,19 +18028,17 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Android build version mismatch:\n"
-" Template installed: %s\n"
-" Godot Version: %s\n"
+"Android build version mismatch: Template installed: %s, Godot version: %s. "
"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"
+"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"
+msgid "Could not export project files to gradle project."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -17976,7 +18051,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Building of Android project failed, check output for the error.\n"
+"Building of Android project failed, check output for the error. "
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
@@ -17991,7 +18066,7 @@ msgid ""
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Package not found: %s"
+msgid "Package not found: \"%s\"."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -17999,15 +18074,12 @@ msgid "Creating APK..."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid ""
-"Could not find template APK to export:\n"
-"%s"
+msgid "Could not find template APK to export: \"%s\"."
msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Missing libraries in the export template for the selected architectures: "
-"%s.\n"
+"Missing libraries in the export template for the selected architectures: %s. "
"Please build a template with all required libraries, or uncheck the missing "
"architectures in the export preset."
msgstr ""
@@ -18017,7 +18089,7 @@ msgid "Adding files..."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Could not export project files"
+msgid "Could not export project files."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18241,6 +18313,15 @@ msgstr ""
msgid "Custom BG Color"
msgstr ""
+#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
+#: platform/osx/export/export.cpp
+msgid "Prepare Templates"
+msgstr ""
+
+#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
+msgid "Export template not found."
+msgstr ""
+
#: platform/iphone/export/export.cpp
msgid "App Store Team ID not specified - cannot configure the project."
msgstr ""
@@ -18262,19 +18343,27 @@ msgid "Run exported HTML in the system's default browser."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not open template for export:"
+msgid "Could not open template for export: \"%s\"."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Invalid export template:"
+msgid "Invalid export template: \"%s\"."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not write file:"
+msgid "Could not write file: \"%s\"."
+msgstr ""
+
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+msgid "Icon Creation"
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not read file:"
+msgid "Could not read file: \"%s\"."
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "PWA"
msgstr ""
#: platform/javascript/export/export.cpp
@@ -18346,15 +18435,15 @@ msgid "Icon 512 X 512"
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not read HTML shell:"
+msgid "Could not read HTML shell: \"%s\"."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not create HTTP server directory:"
+msgid "Could not create HTTP server directory: %s."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Error starting HTTP server:"
+msgid "Error starting HTTP server: %d."
msgstr ""
#: platform/javascript/export/export.cpp
@@ -18619,9 +18708,25 @@ msgid "Apple Team ID"
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Could not open icon file \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Could not start xcrun executable."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization failed."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization request UUID: \"%s\""
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid ""
-"Note: The notarization process generally takes less than an hour. When the "
-"process is completed, you'll receive an email."
+"The notarization process generally takes less than an hour. When the process "
+"is completed, you'll receive an email."
msgstr ""
#: platform/osx/export/export.cpp
@@ -18637,15 +18742,66 @@ msgid ""
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign failed with error \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign require regex module."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Could not start codesign executable, make sure Xcode command line tools are "
+"installed."
+msgstr ""
+
+#: platform/osx/export/export.cpp platform/windows/export/export.cpp
msgid "No identity found."
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Cannot sign file %s."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Relative symlinks are not supported, exported \"%s\" might be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "DMG Creation"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Could not start hdiutil executable."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed - file exists."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed."
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid "Creating app bundle"
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Could not find template app to export:"
+msgid "Could not find template app to export: \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Invalid export format."
msgstr ""
#: platform/osx/export/export.cpp
@@ -18656,7 +18812,7 @@ msgstr ""
#: platform/osx/export/export.cpp
msgid ""
-"Requested template binary '%s' not found. It might be missing from your "
+"Requested template binary \"%s\" not found. It might be missing from your "
"template archive."
msgstr ""
@@ -18697,6 +18853,14 @@ msgid "Sending archive for notarization"
msgstr ""
#: platform/osx/export/export.cpp
+msgid "ZIP Creation"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Could not open file to read from path \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr ""
@@ -18992,6 +19156,10 @@ msgid "Debug Algorithm"
msgstr ""
#: platform/windows/export/export.cpp
+msgid "Failed to rename temporary file \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
msgid "Identity Type"
msgstr ""
@@ -19032,6 +19200,62 @@ msgid "Trademarks"
msgstr ""
#: platform/windows/export/export.cpp
+msgid "Resources Modification"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find rcedit executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find wine executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start rcedit executable, configure rcedit path in the Editor "
+"Settings (Export > Windows > Rcedit)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"rcedit failed to modify executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find signtool executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find osslsigncode executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Invalid identity type."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Invalid timestamp server."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start signtool executable, configure signtool path in the Editor "
+"Settings (Export > Windows > Signtool)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Signtool failed to sign executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Failed to remove temporary file \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
msgid ""
"The rcedit tool must be configured in the Editor Settings (Export > Windows "
"> Rcedit) to change the icon or app information data."
@@ -19050,6 +19274,22 @@ msgid "Invalid product version:"
msgstr ""
#: platform/windows/export/export.cpp
+msgid "Windows executables cannot be >= 4 GiB."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Failed to open executable file \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable file header corrupted."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable \"pck\" section not found."
+msgstr ""
+
+#: platform/windows/export/export.cpp
msgid "Windows"
msgstr ""
@@ -19065,6 +19305,10 @@ msgstr ""
msgid "Wine"
msgstr ""
+#: platform/x11/export/export.cpp
+msgid "32-bit executables cannot have embedded data >= 4 GiB."
+msgstr ""
+
#: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp
#: scene/resources/texture.cpp
msgid "Frames"
@@ -19173,7 +19417,8 @@ msgstr ""
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/3d/light.cpp scene/3d/reflection_probe.cpp
-#: scene/3d/visual_instance.cpp scene/resources/material.cpp
+#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp
+#: scene/resources/material.cpp
msgid "Max Distance"
msgstr ""
@@ -19869,6 +20114,17 @@ msgstr ""
msgid "Edge Connection Margin"
msgstr ""
+#: scene/2d/navigation_2d.cpp
+msgid ""
+"'Navigation2D' node and 'Navigation2D.get_simple_path()' are deprecated and "
+"will be removed in a future version. Use 'Navigation2DServer.map_get_path()' "
+"instead."
+msgstr ""
+
+#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
+msgid "Path Desired Distance"
+msgstr ""
+
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
msgid "Target Desired Distance"
msgstr ""
@@ -19919,13 +20175,15 @@ msgid ""
msgstr ""
#: scene/2d/navigation_polygon.cpp
-msgid ""
-"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
-"node. It only provides navigation data."
+msgid "Navpoly"
msgstr ""
-#: scene/2d/navigation_polygon.cpp
-msgid "Navpoly"
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+msgid "Enter Cost"
+msgstr ""
+
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+msgid "Travel Cost"
msgstr ""
#: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp
@@ -20957,6 +21215,13 @@ msgstr ""
msgid "Transform Normals"
msgstr ""
+#: scene/3d/navigation.cpp
+msgid ""
+"'Navigation' node and 'Navigation.get_simple_path()' are deprecated and will "
+"be removed in a future version. Use 'NavigationServer.map_get_path()' "
+"instead."
+msgstr ""
+
#: scene/3d/navigation.cpp scene/resources/curve.cpp
msgid "Up Vector"
msgstr ""
@@ -20978,12 +21243,6 @@ msgid ""
"The NavigationAgent can be used only under a Spatial inheriting parent node."
msgstr ""
-#: scene/3d/navigation_mesh_instance.cpp
-msgid ""
-"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
-"It only provides navigation data."
-msgstr ""
-
#: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp
msgid "NavMesh"
msgstr ""
@@ -23315,6 +23574,14 @@ msgid "3D Physics"
msgstr ""
#: scene/register_scene_types.cpp
+msgid "2D Navigation"
+msgstr ""
+
+#: scene/register_scene_types.cpp
+msgid "3D Navigation"
+msgstr ""
+
+#: scene/register_scene_types.cpp
msgid "Use hiDPI"
msgstr ""
@@ -24525,7 +24792,7 @@ msgstr ""
msgid "Refraction"
msgstr ""
-#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp
+#: scene/resources/material.cpp
msgid "Detail"
msgstr ""
@@ -24598,7 +24865,11 @@ msgid "Visible Instance Count"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Sample Partition Type"
+msgid "Sampling"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
+msgid "Partition Type"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -24614,7 +24885,11 @@ msgid "Source Group Name"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Agent"
+msgid "Cells"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
+msgid "Agents"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -24626,11 +24901,15 @@ msgid "Max Slope"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+msgid "Regions"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
msgid "Merge Size"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Edge"
+msgid "Edges"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -24642,6 +24921,10 @@ msgid "Verts Per Poly"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+msgid "Details"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
msgid "Sample Distance"
msgstr ""
@@ -24658,7 +24941,15 @@ msgid "Ledge Spans"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Filter Walkable Low Height Spans"
+msgid "Walkable Low Height Spans"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
+msgid "Baking AABB"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
+msgid "Baking AABB Offset"
msgstr ""
#: scene/resources/occluder_shape.cpp
@@ -25016,6 +25307,10 @@ msgid "Scenario"
msgstr ""
#: scene/resources/world.cpp scene/resources/world_2d.cpp
+msgid "Navigation Map"
+msgstr ""
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
msgid "Direct Space State"
msgstr ""
@@ -25031,6 +25326,22 @@ msgstr ""
msgid "Default Angular Damp"
msgstr ""
+#: scene/resources/world.cpp
+msgid "Default Map Up"
+msgstr ""
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+msgid "Default Cell Size"
+msgstr ""
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+msgid "Default Cell Height"
+msgstr ""
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+msgid "Default Edge Connection Margin"
+msgstr ""
+
#: scene/resources/world_2d.cpp
msgid "Canvas"
msgstr ""
diff --git a/editor/translations/el.po b/editor/translations/el.po
index fba8b485a6..21f118d442 100644
--- a/editor/translations/el.po
+++ b/editor/translations/el.po
@@ -218,9 +218,10 @@ msgid "Data"
msgstr "Δεδομένα"
#: core/io/file_access_network.cpp core/register_core_types.cpp
-#: editor/editor_settings.cpp main/main.cpp
+#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
#: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h
+#: scene/gui/file_dialog.cpp
msgid "Network"
msgstr "Δίκτυο"
@@ -375,6 +376,16 @@ msgstr "ΟυÏά Μηνυμάτων"
msgid "Max Size (KB)"
msgstr "Μέγιστο Μέγεθος (KB)"
+#: core/os/input.cpp
+#, fuzzy
+msgid "Mouse Mode"
+msgstr "ΛειτουÏγία Μετακίνησης"
+
+#: core/os/input.cpp
+#, fuzzy
+msgid "Use Accumulated Input"
+msgstr "ΔιαγÏαφή εισόδου"
+
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: servers/audio_server.cpp
msgid "Device"
@@ -560,7 +571,8 @@ msgstr "ΠεÏιγÏαφή"
#: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
-#: main/main.cpp
+#: main/main.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp
msgid "Run"
msgstr "Εκτέλεση"
@@ -648,6 +660,10 @@ msgid "Main Run Args"
msgstr "ΟÏίσματα κÏÏιας σκηνής"
#: core/project_settings.cpp
+msgid "Scene Naming"
+msgstr "Όνομα Σκηνής"
+
+#: core/project_settings.cpp
msgid "Search In File Extensions"
msgstr "Αναζήτηση στις Επεκτάσεις ΑÏχείων"
@@ -655,18 +671,15 @@ msgstr "Αναζήτηση στις Επεκτάσεις ΑÏχείων"
msgid "Script Templates Search Path"
msgstr ""
-#: core/project_settings.cpp editor/editor_node.cpp
-#: editor/plugins/version_control_editor_plugin.cpp
-msgid "Version Control"
-msgstr "Έλεγχος έκδοσης"
-
#: core/project_settings.cpp
-msgid "Autoload On Startup"
-msgstr ""
+#, fuzzy
+msgid "Version Control Autoload On Startup"
+msgstr "ΣÏστημα Ελέγχου Έκδοσης"
#: core/project_settings.cpp
-msgid "Plugin Name"
-msgstr "Όνομα ΠÏοσθέτου"
+#, fuzzy
+msgid "Version Control Plugin Name"
+msgstr "Έλεγχος έκδοσης"
#: core/project_settings.cpp scene/2d/collision_object_2d.cpp
#: scene/3d/collision_object.cpp scene/gui/control.cpp
@@ -785,7 +798,8 @@ msgid "Quality"
msgstr ""
#: core/project_settings.cpp scene/gui/file_dialog.cpp
-#: scene/main/scene_tree.cpp servers/visual_server.cpp
+#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp
+#: servers/visual_server.cpp
msgid "Filters"
msgstr "ΦίλτÏα"
@@ -2237,8 +2251,8 @@ msgid "Open"
msgstr "Άνοιγμα"
#: editor/dependency_editor.cpp
-msgid "Owners Of:"
-msgstr "Ιδιοκτήτες του:"
+msgid "Owners of: %s (Total: %d)"
+msgstr ""
#: editor/dependency_editor.cpp
#, fuzzy
@@ -2551,7 +2565,7 @@ msgid "Bus Options"
msgstr "Επιλογές διαÏλου"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/scene_tree_dock.cpp
+#: editor/project_export.cpp editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "ΑναπαÏαγωγή"
@@ -2812,6 +2826,25 @@ msgid "Choose"
msgstr "Επιλέξτε"
#: editor/editor_export.cpp
+msgid "Project export for platform:"
+msgstr ""
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Completed with errors."
+msgstr "ΑντιγÏαφή διαδÏομής κόμβου"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Completed successfully."
+msgstr "Το πακέτο εγκαταστάθηκε επιτυχώς!"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed."
+msgstr "Απέτυχε:"
+
+#: editor/editor_export.cpp
msgid "Storing File:"
msgstr "ΑÏχείο αποθήκευσης:"
@@ -2824,6 +2857,31 @@ msgid "Packing"
msgstr "ΠακετάÏισμα"
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save PCK"
+msgstr "Αποθήκευση ώς"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Cannot create file \"%s\"."
+msgstr "ΑδÏνατη η δημιουÏγία φακέλου."
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to export project files."
+msgstr "Απέτυχε η εγγÏαφή σε αÏχείο:"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Can't open file to read from path \"%s\"."
+msgstr "ΑδÏνατο το άνοιγμα αÏχείου για εγγÏαφή:"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save ZIP"
+msgstr "Αποθήκευση ώς"
+
+#: editor/editor_export.cpp
msgid ""
"Target platform requires 'ETC' texture compression for GLES2. Enable 'Import "
"Etc' in Project Settings."
@@ -2943,11 +3001,33 @@ msgstr "Δεν βÏέθηκε Ï€ÏοσαÏμοσμένο πακέτο αποσφ
msgid "Custom release template not found."
msgstr "Δεν βÏέθηκε Ï€ÏοσαÏμοσμένο πακέτο διανομής."
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Prepare Template"
+msgstr "ΔιαχείÏιση ΠÏοτÏπων"
+
+#: editor/editor_export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "The given export path doesn't exist."
+msgstr "Η δεδομένη διαδÏομή εξαγωγής δεν υπάÏχει:"
+
#: editor/editor_export.cpp platform/javascript/export/export.cpp
-msgid "Template file not found:"
+#, fuzzy
+msgid "Template file not found: \"%s\"."
msgstr "Δεν βÏέθηκε αÏχείο Ï€ÏοτÏπου:"
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to copy export template."
+msgstr "ΆκυÏο Ï€ÏοτÏπο εξαγωγής:"
+
+#: editor/editor_export.cpp platform/windows/export/export.cpp
+#: platform/x11/export/export.cpp
+#, fuzzy
+msgid "PCK Embedding"
+msgstr "ΑναπλήÏωση"
+
+#: editor/editor_export.cpp
msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB."
msgstr ""
"Σε εξαγωγές 32-bit, το ενσωματωμένο PCK δεν μποÏεί να υπεÏβαίνει τα 4 GiB."
@@ -3122,9 +3202,9 @@ msgid "Import"
msgstr "Εισαγωγή"
#: editor/editor_feature_profile.cpp editor/project_export.cpp
-#: platform/android/export/export.cpp platform/javascript/export/export.cpp
-#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
-#: platform/windows/export/export.cpp
+#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#: platform/uwp/export/export.cpp platform/windows/export/export.cpp
msgid "Export"
msgstr "Εξαγωγή"
@@ -4298,14 +4378,6 @@ msgid ""
"Unable to write to file '%s', file in use, locked or lacking permissions."
msgstr ""
-#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
-msgid "Scene"
-msgstr "Σκηνή"
-
-#: editor/editor_node.cpp
-msgid "Scene Naming"
-msgstr "Όνομα Σκηνής"
-
#: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp
#: servers/arvr/arvr_interface.cpp
#, fuzzy
@@ -4423,6 +4495,10 @@ msgid "Default Color Picker Mode"
msgstr "ΠÏοεπιλεγμένη ΛειτουÏγία Επιλογέα ΧÏώματος"
#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
+msgid "Version Control"
+msgstr "Έλεγχος έκδοσης"
+
+#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
msgid "Username"
msgstr "Ψευδώνυμο"
@@ -4450,6 +4526,10 @@ msgstr "Εναλλαγή λειτουÏγίας χωÏίς πεÏισπασμοÏ
msgid "Add a new scene."
msgstr "ΠÏοσθήκη νέας σκηνής."
+#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
+msgid "Scene"
+msgstr "Σκηνή"
+
#: editor/editor_node.cpp
msgid "Go to previously opened scene."
msgstr "ΕπιστÏοφή στην Ï€Ïοηγουμένως ανοιγμένη σκηνή."
@@ -5253,6 +5333,11 @@ msgstr ""
"Δεν βÏέθηκε εκτελέσιμη διαμόÏφωση εξαγωγής για αυτή την πλατφόÏμα.\n"
"ΠαÏακαλοÏμε Ï€Ïοσθέστε μία εκτελέσιμη διαμόÏφωση στο Î¼ÎµÎ½Î¿Ï ÎµÎ¾Î±Î³Ï‰Î³Î®Ï‚."
+#: editor/editor_run_native.cpp
+#, fuzzy
+msgid "Project Run"
+msgstr "ΈÏγο"
+
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
msgstr "ΓÏάψτε τη λογική σας στη μέθοδο _run()."
@@ -5536,7 +5621,9 @@ msgid "Draw Spaces"
msgstr "Κλήσεις σχεδίασης"
#: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp
-#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp
+#: scene/main/scene_tree.cpp scene/resources/world.cpp
+#: scene/resources/world_2d.cpp
msgid "Navigation"
msgstr "Πλοήγηση"
@@ -7060,7 +7147,7 @@ msgstr ""
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp
-#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp
+#: scene/gui/control.cpp
#, fuzzy
msgid "Filter"
msgstr "ΦίλτÏα:"
@@ -7360,6 +7447,18 @@ msgid "Saving..."
msgstr "Αποθήκευση..."
#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used as a normal map in 3D. Enabling red-green "
+"texture compression to reduce memory usage (blue channel is discarded)."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap "
+"generation and VRAM texture compression."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
msgid "2D, Detect 3D"
msgstr ""
@@ -8055,11 +8154,20 @@ msgid "New Anim"
msgstr "Îέα κίνηση"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+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 "Rename Animation"
+msgstr "Μετονομασία κίνησης"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Delete Animation?"
msgstr "ΔιαγÏαφή κίνησης;"
@@ -8077,11 +8185,6 @@ 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 "Duplicate Animation"
msgstr "ΑναπαÏαγωγή κίνησης"
@@ -8225,10 +8328,6 @@ msgid "Pin AnimationPlayer"
msgstr "ΚαÏφίτσωμα AnimationPlayer"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Create New Animation"
-msgstr "ΔημιουÏγία νέας κίνησης"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Name:"
msgstr "Όνομα κίνησης:"
@@ -10387,6 +10486,7 @@ msgid "Points"
msgstr "Σημεία"
#: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp
+#: scene/resources/navigation_mesh.cpp
msgid "Polygons"
msgstr "ΠολÏγωνα"
@@ -11822,7 +11922,8 @@ msgid "Invalid geometry, can't replace by mesh."
msgstr "ΆκυÏη γεωμετÏία, αδÏνατη η αντικατάσταση με πλέγμα."
#: editor/plugins/sprite_editor_plugin.cpp
-msgid "Convert to Mesh2D"
+#, fuzzy
+msgid "Convert to MeshInstance2D"
msgstr "ΜετατÏοπή σε Mesh2D"
#: editor/plugins/sprite_editor_plugin.cpp
@@ -12848,8 +12949,7 @@ msgid "Select the previous shape, subtile, or Tile."
msgstr "Επιλογή Ï€ÏοηγοÏμενου σχήματος, υπό-πλακιδίου, ή πλακιδίου."
#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp
-#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp
-#: scene/resources/texture.cpp
+#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp
msgid "Region"
msgstr "ΠεÏιοχή"
@@ -14402,37 +14502,10 @@ msgid "Delete preset '%s'?"
msgstr "ΔιαγÏαφή διαμόÏφωσης '%s';"
#: editor/project_export.cpp
-msgid ""
-"Failed to export the project for platform '%s'.\n"
-"Export templates seem to be missing or invalid."
-msgstr ""
-"Αποτυχία εξαγωγής έÏγου στην πλατφόÏμα «%s».\n"
-"Τα Ï€Ïότυπα εξαγωγής λείπουν ή είναι άκυÏα."
-
-#: 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 ""
-"Αποτυχία εξαγωγής έÏγου στην πλατφόÏμα «%s».\n"
-"Αυτό μποÏεί να οφείλεται σε λάθος της διαμόÏφωσης εξαγωγής ή στις Ïυθμίσεις "
-"εξαγωγής σας."
-
-#: 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 "Export Path"
msgstr "ΔιαδÏομή Εξαγωγής"
@@ -14581,6 +14654,11 @@ msgid "Export templates for this platform are missing:"
msgstr "Τα Ï€Ïότυπα εξαγωγής για αυτή την πλατφόÏτμα λείπουν:"
#: editor/project_export.cpp
+#, fuzzy
+msgid "Project Export"
+msgstr "ΙδÏυτές του έÏγου"
+
+#: editor/project_export.cpp
msgid "Manage Export Templates"
msgstr "ΔιαχείÏιση Ï€ÏοτÏπων εξαγωγής"
@@ -17013,7 +17091,7 @@ msgstr ""
#: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp
#: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp
-#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp
+#: scene/3d/collision_polygon.cpp
#, fuzzy
msgid "Polygon"
msgstr "ΠολÏγωνα"
@@ -17640,7 +17718,6 @@ msgid "Use In Baked Light"
msgstr "ΠÏοετοιμασία Lightmaps"
#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
-#: scene/resources/navigation_mesh.cpp
msgid "Cell"
msgstr ""
@@ -17670,6 +17747,19 @@ msgstr "ΚέντÏο"
msgid "Mask"
msgstr ""
+#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
+#, fuzzy
+msgid "Bake Navigation"
+msgstr "Πλοήγηση"
+
+#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp
+#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp
+#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp
+#: scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Navigation Layers"
+msgstr "ΔημιουÏγία Πλοήγησης"
+
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Plane"
msgstr "Επόμενο επίπεδο"
@@ -19255,10 +19345,6 @@ 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."
@@ -19383,12 +19469,16 @@ msgstr ""
msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version."
msgstr ""
+#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Code Signing"
+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."
+"'apksigner' could not be found. Please check that the command is available "
+"in the Android SDK build-tools directory. The resulting %s is unsigned."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -19405,6 +19495,11 @@ msgid "Could not find keystore, unable to export."
msgstr "Σφάλμα κατά το άνοιγμα Ï€ÏοτÏπου για εξαγωγή:"
#: platform/android/export/export_plugin.cpp
+#, fuzzy
+msgid "Could not start apksigner executable."
+msgstr "ΑδÏνατη η εκκίνηση της υπό-εÏγασίας!"
+
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
@@ -19435,7 +19530,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Unsupported export format!\n"
+msgid "Unsupported export format!"
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -19447,10 +19542,9 @@ msgstr ""
"πληÏοφοÏίες έκδοσης. ΠαÏακαλοÏμε κάντε επανεγκατάσταση από το Î¼ÎµÎ½Î¿Ï Â«ÎˆÏγο»."
#: platform/android/export/export_plugin.cpp
+#, fuzzy
msgid ""
-"Android build version mismatch:\n"
-" Template installed: %s\n"
-" Godot Version: %s\n"
+"Android build version mismatch: Template installed: %s, Godot version: %s. "
"Please reinstall Android build template from 'Project' menu."
msgstr ""
"Ασυμφωνία εκδόσεων δόμησης Android:\n"
@@ -19461,11 +19555,12 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Unable to overwrite res://android/build/res/*.xml files with project name"
+"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"
+#, fuzzy
+msgid "Could not export project files to gradle project."
msgstr "Δεν ήταν δυνατή η εξαγωγή των αÏχείων έÏγου στο gradle έÏγο\n"
#: platform/android/export/export_plugin.cpp
@@ -19478,8 +19573,9 @@ msgid "Building Android Project (gradle)"
msgstr "Δόμηση ΈÏγου Android (gradle)"
#: platform/android/export/export_plugin.cpp
+#, fuzzy
msgid ""
-"Building of Android project failed, check output for the error.\n"
+"Building of Android project failed, check output for the error. "
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
"Αποτυχία δόμησης έÏγου Android, ελέγξτε την έξοδο για το σφάλμα.\n"
@@ -19498,7 +19594,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
#, fuzzy
-msgid "Package not found: %s"
+msgid "Package not found: \"%s\"."
msgstr "Δεν βÏέθηκε η κίνηση: «%s»"
#: platform/android/export/export_plugin.cpp
@@ -19507,17 +19603,15 @@ msgid "Creating APK..."
msgstr "ΔημιουÏγία πεÏιγÏαμμάτων..."
#: platform/android/export/export_plugin.cpp
-msgid ""
-"Could not find template APK to export:\n"
-"%s"
+#, fuzzy
+msgid "Could not find template APK to export: \"%s\"."
msgstr ""
"Δεν βÏέθηκε Ï€Ïότυπο APK για εξαγωγή:\n"
"%s"
#: platform/android/export/export_plugin.cpp
msgid ""
-"Missing libraries in the export template for the selected architectures: "
-"%s.\n"
+"Missing libraries in the export template for the selected architectures: %s. "
"Please build a template with all required libraries, or uncheck the missing "
"architectures in the export preset."
msgstr ""
@@ -19529,7 +19623,7 @@ msgstr "ΠÏοσθήκη %s..."
#: platform/android/export/export_plugin.cpp
#, fuzzy
-msgid "Could not export project files"
+msgid "Could not export project files."
msgstr "Απέτυχε η εγγÏαφή σε αÏχείο:"
#: platform/android/export/export_plugin.cpp
@@ -19770,6 +19864,17 @@ msgstr "Αποκοπή κόμβων"
msgid "Custom BG Color"
msgstr "Αποκοπή κόμβων"
+#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Prepare Templates"
+msgstr "ΔιαχείÏιση ΠÏοτÏπων"
+
+#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Export template not found."
+msgstr "Δεν βÏέθηκε Ï€ÏοσαÏμοσμένο πακέτο διανομής."
+
#: platform/iphone/export/export.cpp
msgid "App Store Team ID not specified - cannot configure the project."
msgstr ""
@@ -19793,23 +19898,35 @@ msgid "Run exported HTML in the system's default browser."
msgstr "Εκτέλεση εξαγόμενης HTMP στον Ï€Ïοεπιλεγμένο πεÏιηγητή του συστήματος."
#: platform/javascript/export/export.cpp
-msgid "Could not open template for export:"
+#, fuzzy
+msgid "Could not open template for export: \"%s\"."
msgstr "Σφάλμα κατά το άνοιγμα Ï€ÏοτÏπου για εξαγωγή:"
#: platform/javascript/export/export.cpp
-msgid "Invalid export template:"
+#, fuzzy
+msgid "Invalid export template: \"%s\"."
msgstr "ΆκυÏο Ï€ÏοτÏπο εξαγωγής:"
#: platform/javascript/export/export.cpp
-msgid "Could not write file:"
+#, fuzzy
+msgid "Could not write file: \"%s\"."
msgstr "Απέτυχε η εγγÏαφή σε αÏχείο:"
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Icon Creation"
+msgstr "ΟÏισμός ΠεÏιθωÏίου"
+
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not read file:"
+msgid "Could not read file: \"%s\"."
msgstr "Απέτυχε η εγγÏαφή σε αÏχείο:"
#: platform/javascript/export/export.cpp
+msgid "PWA"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
#, fuzzy
msgid "Variant"
msgstr "ΔιαχωÏισμός:"
@@ -19885,17 +20002,17 @@ msgstr ""
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not read HTML shell:"
+msgid "Could not read HTML shell: \"%s\"."
msgstr "Σφάλμα κατά την ανάγνωση Ï€ÏοσαÏμοσμένου κελÏφους HTML:"
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not create HTTP server directory:"
+msgid "Could not create HTTP server directory: %s."
msgstr "ΑδÏνατη η δημιουÏγία φακέλου."
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Error starting HTTP server:"
+msgid "Error starting HTTP server: %d."
msgstr "Σφάλμα κατά την αποθήκευση σκηνής."
#: platform/javascript/export/export.cpp
@@ -20195,9 +20312,28 @@ msgid "Apple Team ID"
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open icon file \"%s\"."
+msgstr "Απέτυχε η εγγÏαφή σε αÏχείο:"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start xcrun executable."
+msgstr "ΑδÏνατη η εκκίνηση της υπό-εÏγασίας!"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization failed."
+msgstr "Τοπική Ï€ÏοσαÏμογή"
+
+#: platform/osx/export/export.cpp
+msgid "Notarization request UUID: \"%s\""
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid ""
-"Note: The notarization process generally takes less than an hour. When the "
-"process is completed, you'll receive an email."
+"The notarization process generally takes less than an hour. When the process "
+"is completed, you'll receive an email."
msgstr ""
#: platform/osx/export/export.cpp
@@ -20213,21 +20349,76 @@ msgid ""
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign failed with error \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign require regex module."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Could not start codesign executable, make sure Xcode command line tools are "
+"installed."
+msgstr ""
+
+#: platform/osx/export/export.cpp platform/windows/export/export.cpp
#, fuzzy
msgid "No identity found."
msgstr "Δεν βÏέθηκε!"
#: platform/osx/export/export.cpp
#, fuzzy
+msgid "Cannot sign file %s."
+msgstr "Σφάλμα αποθήκευσης αÏχείου: %s"
+
+#: platform/osx/export/export.cpp
+msgid "Relative symlinks are not supported, exported \"%s\" might be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "DMG Creation"
+msgstr "Κατευθήνσεις"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start hdiutil executable."
+msgstr "ΑδÏνατη η εκκίνηση της υπό-εÏγασίας!"
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed - file exists."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
msgid "Creating app bundle"
msgstr "ΔημιουÏγία μικÏογÏαφίας"
#: platform/osx/export/export.cpp
#, fuzzy
-msgid "Could not find template app to export:"
+msgid "Could not find template app to export: \"%s\"."
msgstr "Σφάλμα κατά το άνοιγμα Ï€ÏοτÏπου για εξαγωγή:"
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid export format."
+msgstr "ΆκυÏο Ï€ÏοτÏπο εξαγωγής:"
+
+#: platform/osx/export/export.cpp
msgid ""
"Relative symlinks are not supported on this OS, the exported project might "
"be broken!"
@@ -20235,7 +20426,7 @@ msgstr ""
#: platform/osx/export/export.cpp
msgid ""
-"Requested template binary '%s' not found. It might be missing from your "
+"Requested template binary \"%s\" not found. It might be missing from your "
"template archive."
msgstr ""
@@ -20277,6 +20468,16 @@ msgstr ""
#: platform/osx/export/export.cpp
#, fuzzy
+msgid "ZIP Creation"
+msgstr "ΈÏγο"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open file to read from path \"%s\"."
+msgstr "Δεν ήταν δυνατή η εξαγωγή των αÏχείων έÏγου στο gradle έÏγο\n"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
msgid "Invalid bundle identifier:"
msgstr "ΆκυÏο ΑναγνωÏιστικό:"
@@ -20589,6 +20790,11 @@ msgid "Debug Algorithm"
msgstr "Αποσφαλματωτής"
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to rename temporary file \"%s\"."
+msgstr "Αδυναμία αφαίÏεσης Ï€ÏοσωÏÎ¹Î½Î¿Ï Î±Ïχείου:"
+
+#: platform/windows/export/export.cpp
msgid "Identity Type"
msgstr ""
@@ -20636,6 +20842,70 @@ msgid "Trademarks"
msgstr ""
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Resources Modification"
+msgstr "Τυχαία πεÏιστÏοφή:"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find rcedit executable at \"%s\"."
+msgstr "Σφάλμα κατά το άνοιγμα Ï€ÏοτÏπου για εξαγωγή:"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find wine executable at \"%s\"."
+msgstr "Σφάλμα κατά το άνοιγμα Ï€ÏοτÏπου για εξαγωγή:"
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start rcedit executable, configure rcedit path in the Editor "
+"Settings (Export > Windows > Rcedit)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"rcedit failed to modify executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find signtool executable at \"%s\"."
+msgstr "Σφάλμα κατά το άνοιγμα Ï€ÏοτÏπου για εξαγωγή:"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find osslsigncode executable at \"%s\"."
+msgstr "Σφάλμα κατά το άνοιγμα Ï€ÏοτÏπου για εξαγωγή:"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid identity type."
+msgstr "ΆκυÏο ΑναγνωÏιστικό:"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid timestamp server."
+msgstr "Μη έγκυÏο όνομα."
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start signtool executable, configure signtool path in the Editor "
+"Settings (Export > Windows > Signtool)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Signtool failed to sign executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to remove temporary file \"%s\"."
+msgstr "Αδυναμία αφαίÏεσης Ï€ÏοσωÏÎ¹Î½Î¿Ï Î±Ïχείου:"
+
+#: platform/windows/export/export.cpp
msgid ""
"The rcedit tool must be configured in the Editor Settings (Export > Windows "
"> Rcedit) to change the icon or app information data."
@@ -20657,6 +20927,23 @@ msgid "Invalid product version:"
msgstr "ΆκυÏο GUID Ï€Ïοϊόντος."
#: platform/windows/export/export.cpp
+msgid "Windows executables cannot be >= 4 GiB."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+#, fuzzy
+msgid "Failed to open executable file \"%s\"."
+msgstr "ΆκυÏη επέκταση."
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable file header corrupted."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable \"pck\" section not found."
+msgstr ""
+
+#: platform/windows/export/export.cpp
#, fuzzy
msgid "Windows"
msgstr "Îέο ΠαÏάθυÏο"
@@ -20673,6 +20960,10 @@ msgstr ""
msgid "Wine"
msgstr ""
+#: platform/x11/export/export.cpp
+msgid "32-bit executables cannot have embedded data >= 4 GiB."
+msgstr ""
+
#: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp
#: scene/resources/texture.cpp
#, fuzzy
@@ -20800,7 +21091,8 @@ msgstr ""
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/3d/light.cpp scene/3d/reflection_probe.cpp
-#: scene/3d/visual_instance.cpp scene/resources/material.cpp
+#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp
+#: scene/resources/material.cpp
#, fuzzy
msgid "Max Distance"
msgstr "Επιλογή απόστασης:"
@@ -21613,6 +21905,18 @@ msgstr ""
msgid "Edge Connection Margin"
msgstr "ΕπεξεÏγασία ΣÏνδεσης:"
+#: scene/2d/navigation_2d.cpp
+msgid ""
+"'Navigation2D' node and 'Navigation2D.get_simple_path()' are deprecated and "
+"will be removed in a future version. Use 'Navigation2DServer.map_get_path()' "
+"instead."
+msgstr ""
+
+#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
+#, fuzzy
+msgid "Path Desired Distance"
+msgstr "Επιλογή απόστασης:"
+
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
msgid "Target Desired Distance"
msgstr ""
@@ -21670,17 +21974,19 @@ msgstr ""
"λειτουÏγήσει αυτός ο κόμβος. ΟÏίστε μία ιδιότητα ή ζωγÏαφίστε ένα πολÏγωνο."
#: scene/2d/navigation_polygon.cpp
-msgid ""
-"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
-"node. It only provides navigation data."
-msgstr ""
-"Το NavigationPolygonInstance Ï€Ïέπει να κληÏονομεί έναν κόμβο Ï„Ïπου "
-"Navigation2D, διότι διαθέτει μόνο δεδομένα πλοήγησης."
-
-#: scene/2d/navigation_polygon.cpp
msgid "Navpoly"
msgstr ""
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Enter Cost"
+msgstr "ΚέντÏο Κάτω"
+
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Travel Cost"
+msgstr "Ταξίδι"
+
#: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp
#: scene/main/canvas_layer.cpp
#, fuzzy
@@ -22901,6 +23207,13 @@ msgstr ""
msgid "Transform Normals"
msgstr "Ο μετασχηματισμός ματαιώθηκε."
+#: scene/3d/navigation.cpp
+msgid ""
+"'Navigation' node and 'Navigation.get_simple_path()' are deprecated and will "
+"be removed in a future version. Use 'NavigationServer.map_get_path()' "
+"instead."
+msgstr ""
+
#: scene/3d/navigation.cpp scene/resources/curve.cpp
#, fuzzy
msgid "Up Vector"
@@ -22925,14 +23238,6 @@ msgid ""
"The NavigationAgent can be used only under a Spatial inheriting parent node."
msgstr ""
-#: scene/3d/navigation_mesh_instance.cpp
-msgid ""
-"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
-"It only provides navigation data."
-msgstr ""
-"Ένας κόμβος Ï„Ïπου στιγμιοτÏπου πλέγματος πλοήγησης Ï€Ïέπει να κληÏονομεί έναν "
-"κόμβο Ï„Ïπου πλοήγηση, διότι διαθέτει μόνο δεδομένα πλοήγησης."
-
#: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp
#, fuzzy
msgid "NavMesh"
@@ -25655,6 +25960,16 @@ msgid "3D Physics"
msgstr "KαÏέ φυσικής %"
#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "2D Navigation"
+msgstr "Πλοήγηση"
+
+#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "3D Navigation"
+msgstr "Πλοήγηση"
+
+#: scene/register_scene_types.cpp
msgid "Use hiDPI"
msgstr ""
@@ -27081,7 +27396,7 @@ msgstr "Μετάβαση: "
msgid "Refraction"
msgstr "Διάθλαση"
-#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp
+#: scene/resources/material.cpp
msgid "Detail"
msgstr ""
@@ -27166,7 +27481,12 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
-msgid "Sample Partition Type"
+msgid "Sampling"
+msgstr "Κλιμάκωση: "
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Partition Type"
msgstr "ΟÏισμός Ï„Ïπου μεταβλητής"
#: scene/resources/navigation_mesh.cpp
@@ -27184,10 +27504,15 @@ msgid "Source Group Name"
msgstr "Πηγή"
#: scene/resources/navigation_mesh.cpp
-msgid "Agent"
+msgid "Cells"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Agents"
+msgstr "ΟÏίσματα κÏÏιας σκηνής:"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Max Climb"
msgstr ""
@@ -27197,11 +27522,16 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
+msgid "Regions"
+msgstr "ΠεÏιοχή"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
msgid "Merge Size"
msgstr "Συγχώνευση από σκηνή"
#: scene/resources/navigation_mesh.cpp
-msgid "Edge"
+msgid "Edges"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -27215,6 +27545,11 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
+msgid "Details"
+msgstr "ΦόÏτωση Ï€Ïοεπιλογής"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
msgid "Sample Distance"
msgstr "Επιλογή απόστασης:"
@@ -27232,9 +27567,19 @@ msgid "Ledge Spans"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Filter Walkable Low Height Spans"
+msgid "Walkable Low Height Spans"
msgstr ""
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB"
+msgstr "ΔημιουÏία AABB"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB Offset"
+msgstr "Μετατόπιση:"
+
#: scene/resources/occluder_shape.cpp
msgid "Spheres"
msgstr ""
@@ -27647,6 +27992,11 @@ msgid "Scenario"
msgstr "Σκηνή"
#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Navigation Map"
+msgstr "Πλοήγηση"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
msgid "Direct Space State"
msgstr ""
@@ -27664,6 +28014,26 @@ msgstr "ΑÏιστεÏή ΓÏαμμική"
msgid "Default Angular Damp"
msgstr ""
+#: scene/resources/world.cpp
+#, fuzzy
+msgid "Default Map Up"
+msgstr "ΠÏοεπιλεγμένο Βήμα Κινητής Υποδιαστολής"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Size"
+msgstr "Ανανέωση ΠÏοεπισκόπησης"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Height"
+msgstr "Δοκιμαστικά"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Edge Connection Margin"
+msgstr "ΕπεξεÏγασία ΣÏνδεσης:"
+
#: scene/resources/world_2d.cpp
msgid "Canvas"
msgstr ""
diff --git a/editor/translations/en_Shaw.po b/editor/translations/en_Shaw.po
index 174dfff1aa..bf2aa9d387 100644
--- a/editor/translations/en_Shaw.po
+++ b/editor/translations/en_Shaw.po
@@ -203,9 +203,10 @@ msgid "Data"
msgstr ""
#: core/io/file_access_network.cpp core/register_core_types.cpp
-#: editor/editor_settings.cpp main/main.cpp
+#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
#: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h
+#: scene/gui/file_dialog.cpp
msgid "Network"
msgstr ""
@@ -356,6 +357,15 @@ msgstr ""
msgid "Max Size (KB)"
msgstr ""
+#: core/os/input.cpp
+#, fuzzy
+msgid "Mouse Mode"
+msgstr "ð‘’ð‘·ð‘¤ ð‘¥ð‘§ð‘”ð‘©ð‘› ð‘‘ð‘®ð‘¨ð‘’"
+
+#: core/os/input.cpp
+msgid "Use Accumulated Input"
+msgstr ""
+
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: servers/audio_server.cpp
msgid "Device"
@@ -536,7 +546,8 @@ msgstr ""
#: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
-#: main/main.cpp
+#: main/main.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp
msgid "Run"
msgstr ""
@@ -619,24 +630,23 @@ msgid "Main Run Args"
msgstr ""
#: core/project_settings.cpp
-msgid "Search In File Extensions"
+msgid "Scene Naming"
msgstr ""
#: core/project_settings.cpp
-msgid "Script Templates Search Path"
+msgid "Search In File Extensions"
msgstr ""
-#: core/project_settings.cpp editor/editor_node.cpp
-#: editor/plugins/version_control_editor_plugin.cpp
-msgid "Version Control"
+#: core/project_settings.cpp
+msgid "Script Templates Search Path"
msgstr ""
#: core/project_settings.cpp
-msgid "Autoload On Startup"
+msgid "Version Control Autoload On Startup"
msgstr ""
#: core/project_settings.cpp
-msgid "Plugin Name"
+msgid "Version Control Plugin Name"
msgstr ""
#: core/project_settings.cpp scene/2d/collision_object_2d.cpp
@@ -744,7 +754,8 @@ msgid "Quality"
msgstr ""
#: core/project_settings.cpp scene/gui/file_dialog.cpp
-#: scene/main/scene_tree.cpp servers/visual_server.cpp
+#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp
+#: servers/visual_server.cpp
msgid "Filters"
msgstr ""
@@ -2135,7 +2146,7 @@ msgid "Open"
msgstr ""
#: editor/dependency_editor.cpp
-msgid "Owners Of:"
+msgid "Owners of: %s (Total: %d)"
msgstr ""
#: editor/dependency_editor.cpp
@@ -2426,7 +2437,7 @@ msgid "Bus Options"
msgstr ""
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/scene_tree_dock.cpp
+#: editor/project_export.cpp editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr ""
@@ -2682,6 +2693,22 @@ msgid "Choose"
msgstr ""
#: editor/editor_export.cpp
+msgid "Project export for platform:"
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Completed with errors."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Completed successfully."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Failed."
+msgstr ""
+
+#: editor/editor_export.cpp
msgid "Storing File:"
msgstr ""
@@ -2694,6 +2721,26 @@ msgid "Packing"
msgstr ""
#: editor/editor_export.cpp
+msgid "Save PCK"
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Cannot create file \"%s\"."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Failed to export project files."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Can't open file to read from path \"%s\"."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Save ZIP"
+msgstr ""
+
+#: editor/editor_export.cpp
msgid ""
"Target platform requires 'ETC' texture compression for GLES2. Enable 'Import "
"Etc' in Project Settings."
@@ -2796,8 +2843,25 @@ msgstr ""
msgid "Custom release template not found."
msgstr ""
+#: editor/editor_export.cpp
+msgid "Prepare Template"
+msgstr ""
+
+#: editor/editor_export.cpp platform/osx/export/export.cpp
+msgid "The given export path doesn't exist."
+msgstr ""
+
#: editor/editor_export.cpp platform/javascript/export/export.cpp
-msgid "Template file not found:"
+msgid "Template file not found: \"%s\"."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Failed to copy export template."
+msgstr ""
+
+#: editor/editor_export.cpp platform/windows/export/export.cpp
+#: platform/x11/export/export.cpp
+msgid "PCK Embedding"
msgstr ""
#: editor/editor_export.cpp
@@ -2967,9 +3031,9 @@ msgid "Import"
msgstr ""
#: editor/editor_feature_profile.cpp editor/project_export.cpp
-#: platform/android/export/export.cpp platform/javascript/export/export.cpp
-#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
-#: platform/windows/export/export.cpp
+#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#: platform/uwp/export/export.cpp platform/windows/export/export.cpp
msgid "Export"
msgstr ""
@@ -4045,14 +4109,6 @@ msgid ""
"Unable to write to file '%s', file in use, locked or lacking permissions."
msgstr ""
-#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
-msgid "Scene"
-msgstr ""
-
-#: editor/editor_node.cpp
-msgid "Scene Naming"
-msgstr ""
-
#: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp
#: servers/arvr/arvr_interface.cpp
msgid "Interface"
@@ -4167,6 +4223,10 @@ msgid "Default Color Picker Mode"
msgstr ""
#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
+msgid "Version Control"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
msgid "Username"
msgstr ""
@@ -4194,6 +4254,10 @@ msgstr ""
msgid "Add a new scene."
msgstr ""
+#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
+msgid "Scene"
+msgstr ""
+
#: editor/editor_node.cpp
msgid "Go to previously opened scene."
msgstr ""
@@ -4920,6 +4984,10 @@ msgid ""
"as runnable."
msgstr ""
+#: editor/editor_run_native.cpp
+msgid "Project Run"
+msgstr ""
+
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
msgstr ""
@@ -5176,7 +5244,9 @@ msgid "Draw Spaces"
msgstr ""
#: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp
-#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp
+#: scene/main/scene_tree.cpp scene/resources/world.cpp
+#: scene/resources/world_2d.cpp
msgid "Navigation"
msgstr ""
@@ -6560,7 +6630,7 @@ msgstr ""
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp
-#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp
+#: scene/gui/control.cpp
#, fuzzy
msgid "Filter"
msgstr "ð‘‘ð‘ªð‘œð‘©ð‘¤ ð‘‘ð‘®ð‘¨ð‘’ ð‘¦ð‘¯ð‘±ð‘šð‘©ð‘¤ð‘›"
@@ -6831,6 +6901,18 @@ msgid "Saving..."
msgstr ""
#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used as a normal map in 3D. Enabling red-green "
+"texture compression to reduce memory usage (blue channel is discarded)."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap "
+"generation and VRAM texture compression."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
msgid "2D, Detect 3D"
msgstr ""
@@ -7486,11 +7568,20 @@ msgid "New Anim"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+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 "Rename Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Delete Animation?"
msgstr ""
@@ -7508,11 +7599,6 @@ 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 "Duplicate Animation"
msgstr ""
@@ -7655,10 +7741,6 @@ msgid "Pin AnimationPlayer"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Create New Animation"
-msgstr ""
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Name:"
msgstr ""
@@ -9706,6 +9788,7 @@ msgid "Points"
msgstr ""
#: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp
+#: scene/resources/navigation_mesh.cpp
msgid "Polygons"
msgstr ""
@@ -11057,7 +11140,7 @@ msgid "Invalid geometry, can't replace by mesh."
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
-msgid "Convert to Mesh2D"
+msgid "Convert to MeshInstance2D"
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
@@ -12015,8 +12098,7 @@ msgid "Select the previous shape, subtile, or Tile."
msgstr ""
#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp
-#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp
-#: scene/resources/texture.cpp
+#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp
msgid "Region"
msgstr ""
@@ -13434,31 +13516,10 @@ 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 "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 "Export Path"
msgstr ""
@@ -13592,6 +13653,10 @@ msgid "Export templates for this platform are missing:"
msgstr ""
#: editor/project_export.cpp
+msgid "Project Export"
+msgstr ""
+
+#: editor/project_export.cpp
msgid "Manage Export Templates"
msgstr ""
@@ -15840,7 +15905,7 @@ msgstr ""
#: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp
#: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp
-#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp
+#: scene/3d/collision_polygon.cpp
msgid "Polygon"
msgstr ""
@@ -16398,7 +16463,6 @@ msgid "Use In Baked Light"
msgstr ""
#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
-#: scene/resources/navigation_mesh.cpp
msgid "Cell"
msgstr ""
@@ -16424,6 +16488,18 @@ msgstr ""
msgid "Mask"
msgstr ""
+#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
+msgid "Bake Navigation"
+msgstr ""
+
+#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp
+#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp
+#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp
+#: scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Navigation Layers"
+msgstr "ð‘ð‘¨ð‘¤ð‘¿:"
+
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Plane"
msgstr ""
@@ -17860,10 +17936,6 @@ 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."
@@ -17967,12 +18039,15 @@ msgstr ""
msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version."
msgstr ""
+#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp
+#: platform/windows/export/export.cpp
+msgid "Code Signing"
+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."
+"'apksigner' could not be found. Please check that the command is available "
+"in the Android SDK build-tools directory. The resulting %s is unsigned."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -17988,6 +18063,10 @@ msgid "Could not find keystore, unable to export."
msgstr ""
#: platform/android/export/export_plugin.cpp
+msgid "Could not start apksigner executable."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
@@ -18016,7 +18095,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Unsupported export format!\n"
+msgid "Unsupported export format!"
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18027,19 +18106,17 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Android build version mismatch:\n"
-" Template installed: %s\n"
-" Godot Version: %s\n"
+"Android build version mismatch: Template installed: %s, Godot version: %s. "
"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"
+"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"
+msgid "Could not export project files to gradle project."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18052,7 +18129,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Building of Android project failed, check output for the error.\n"
+"Building of Android project failed, check output for the error. "
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
@@ -18067,7 +18144,7 @@ msgid ""
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Package not found: %s"
+msgid "Package not found: \"%s\"."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18075,15 +18152,12 @@ msgid "Creating APK..."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid ""
-"Could not find template APK to export:\n"
-"%s"
+msgid "Could not find template APK to export: \"%s\"."
msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Missing libraries in the export template for the selected architectures: "
-"%s.\n"
+"Missing libraries in the export template for the selected architectures: %s. "
"Please build a template with all required libraries, or uncheck the missing "
"architectures in the export preset."
msgstr ""
@@ -18093,7 +18167,7 @@ msgid "Adding files..."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Could not export project files"
+msgid "Could not export project files."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18320,6 +18394,15 @@ msgstr "ð‘“ð‘³ð‘™ð‘’ð‘–ð‘©ð‘¯ð‘Ÿ:"
msgid "Custom BG Color"
msgstr "ð‘“ð‘³ð‘™ð‘’ð‘–ð‘©ð‘¯ð‘Ÿ:"
+#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
+#: platform/osx/export/export.cpp
+msgid "Prepare Templates"
+msgstr ""
+
+#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
+msgid "Export template not found."
+msgstr ""
+
#: platform/iphone/export/export.cpp
msgid "App Store Team ID not specified - cannot configure the project."
msgstr ""
@@ -18341,19 +18424,29 @@ msgid "Run exported HTML in the system's default browser."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not open template for export:"
+msgid "Could not open template for export: \"%s\"."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Invalid export template:"
+#, fuzzy
+msgid "Invalid export template: \"%s\"."
+msgstr "ð‘¦ð‘¯ð‘ð‘¨ð‘¤ð‘¦ð‘› ð‘¦ð‘¯ð‘›ð‘§ð‘’ð‘• ð‘ ð‘‘ð‘²ð‘ %s ð‘“ ð‘šð‘±ð‘• ð‘‘ð‘²ð‘ %s"
+
+#: platform/javascript/export/export.cpp
+msgid "Could not write file: \"%s\"."
msgstr ""
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Icon Creation"
+msgstr "ð‘“ð‘³ð‘™ð‘’ð‘–ð‘©ð‘¯ð‘Ÿ:"
+
#: platform/javascript/export/export.cpp
-msgid "Could not write file:"
+msgid "Could not read file: \"%s\"."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not read file:"
+msgid "PWA"
msgstr ""
#: platform/javascript/export/export.cpp
@@ -18426,15 +18519,15 @@ msgid "Icon 512 X 512"
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not read HTML shell:"
+msgid "Could not read HTML shell: \"%s\"."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not create HTTP server directory:"
+msgid "Could not create HTTP server directory: %s."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Error starting HTTP server:"
+msgid "Error starting HTTP server: %d."
msgstr ""
#: platform/javascript/export/export.cpp
@@ -18704,9 +18797,26 @@ msgid "Apple Team ID"
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Could not open icon file \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Could not start xcrun executable."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization failed."
+msgstr "ð‘¦ð‘¯ð‘‘ð‘»ð‘ð‘©ð‘¤ð‘±ð‘–ð‘©ð‘¯ ð‘¥ð‘´ð‘›"
+
+#: platform/osx/export/export.cpp
+msgid "Notarization request UUID: \"%s\""
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid ""
-"Note: The notarization process generally takes less than an hour. When the "
-"process is completed, you'll receive an email."
+"The notarization process generally takes less than an hour. When the process "
+"is completed, you'll receive an email."
msgstr ""
#: platform/osx/export/export.cpp
@@ -18722,18 +18832,71 @@ msgid ""
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign failed with error \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign require regex module."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Could not start codesign executable, make sure Xcode command line tools are "
+"installed."
+msgstr ""
+
+#: platform/osx/export/export.cpp platform/windows/export/export.cpp
msgid "No identity found."
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Cannot sign file %s."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Relative symlinks are not supported, exported \"%s\" might be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "DMG Creation"
+msgstr "ð‘“ð‘³ð‘™ð‘’ð‘–ð‘©ð‘¯ð‘Ÿ:"
+
+#: platform/osx/export/export.cpp
+msgid "Could not start hdiutil executable."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed - file exists."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed."
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid "Creating app bundle"
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Could not find template app to export:"
+msgid "Could not find template app to export: \"%s\"."
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid export format."
+msgstr "3-ð‘› ð‘‘ð‘®ð‘¨ð‘¯ð‘•ð‘“ð‘¹ð‘¥ ð‘‘ð‘®ð‘¨ð‘’"
+
+#: platform/osx/export/export.cpp
msgid ""
"Relative symlinks are not supported on this OS, the exported project might "
"be broken!"
@@ -18741,7 +18904,7 @@ msgstr ""
#: platform/osx/export/export.cpp
msgid ""
-"Requested template binary '%s' not found. It might be missing from your "
+"Requested template binary \"%s\" not found. It might be missing from your "
"template archive."
msgstr ""
@@ -18782,6 +18945,14 @@ msgid "Sending archive for notarization"
msgstr ""
#: platform/osx/export/export.cpp
+msgid "ZIP Creation"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Could not open file to read from path \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr ""
@@ -19077,6 +19248,10 @@ msgid "Debug Algorithm"
msgstr ""
#: platform/windows/export/export.cpp
+msgid "Failed to rename temporary file \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
msgid "Identity Type"
msgstr ""
@@ -19117,6 +19292,63 @@ msgid "Trademarks"
msgstr ""
#: platform/windows/export/export.cpp
+msgid "Resources Modification"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find rcedit executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find wine executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start rcedit executable, configure rcedit path in the Editor "
+"Settings (Export > Windows > Rcedit)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"rcedit failed to modify executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find signtool executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find osslsigncode executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid identity type."
+msgstr "ð‘¦ð‘¯ð‘ð‘¨ð‘¤ð‘¦ð‘› ð‘¸ð‘œð‘˜ð‘©ð‘¥ð‘©ð‘¯ð‘‘ð‘• ð‘‘ ð‘’ð‘©ð‘¯ð‘•ð‘‘ð‘®ð‘³ð‘’ð‘‘ '%s'"
+
+#: platform/windows/export/export.cpp
+msgid "Invalid timestamp server."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start signtool executable, configure signtool path in the Editor "
+"Settings (Export > Windows > Signtool)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Signtool failed to sign executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Failed to remove temporary file \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
msgid ""
"The rcedit tool must be configured in the Editor Settings (Export > Windows "
"> Rcedit) to change the icon or app information data."
@@ -19135,6 +19367,22 @@ msgid "Invalid product version:"
msgstr ""
#: platform/windows/export/export.cpp
+msgid "Windows executables cannot be >= 4 GiB."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Failed to open executable file \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable file header corrupted."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable \"pck\" section not found."
+msgstr ""
+
+#: platform/windows/export/export.cpp
msgid "Windows"
msgstr ""
@@ -19150,6 +19398,10 @@ msgstr ""
msgid "Wine"
msgstr ""
+#: platform/x11/export/export.cpp
+msgid "32-bit executables cannot have embedded data >= 4 GiB."
+msgstr ""
+
#: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp
#: scene/resources/texture.cpp
msgid "Frames"
@@ -19260,7 +19512,8 @@ msgstr ""
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/3d/light.cpp scene/3d/reflection_probe.cpp
-#: scene/3d/visual_instance.cpp scene/resources/material.cpp
+#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp
+#: scene/resources/material.cpp
msgid "Max Distance"
msgstr ""
@@ -19963,6 +20216,17 @@ msgstr ""
msgid "Edge Connection Margin"
msgstr "ð‘“ð‘³ð‘™ð‘’ð‘–ð‘©ð‘¯ð‘Ÿ:"
+#: scene/2d/navigation_2d.cpp
+msgid ""
+"'Navigation2D' node and 'Navigation2D.get_simple_path()' are deprecated and "
+"will be removed in a future version. Use 'Navigation2DServer.map_get_path()' "
+"instead."
+msgstr ""
+
+#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
+msgid "Path Desired Distance"
+msgstr ""
+
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
msgid "Target Desired Distance"
msgstr ""
@@ -20014,13 +20278,15 @@ msgid ""
msgstr ""
#: scene/2d/navigation_polygon.cpp
-msgid ""
-"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
-"node. It only provides navigation data."
+msgid "Navpoly"
msgstr ""
-#: scene/2d/navigation_polygon.cpp
-msgid "Navpoly"
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+msgid "Enter Cost"
+msgstr ""
+
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+msgid "Travel Cost"
msgstr ""
#: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp
@@ -21073,6 +21339,13 @@ msgstr ""
msgid "Transform Normals"
msgstr "3-ð‘› ð‘‘ð‘®ð‘¨ð‘¯ð‘•ð‘“ð‘¹ð‘¥ ð‘‘ð‘®ð‘¨ð‘’"
+#: scene/3d/navigation.cpp
+msgid ""
+"'Navigation' node and 'Navigation.get_simple_path()' are deprecated and will "
+"be removed in a future version. Use 'NavigationServer.map_get_path()' "
+"instead."
+msgstr ""
+
#: scene/3d/navigation.cpp scene/resources/curve.cpp
msgid "Up Vector"
msgstr ""
@@ -21094,12 +21367,6 @@ msgid ""
"The NavigationAgent can be used only under a Spatial inheriting parent node."
msgstr ""
-#: scene/3d/navigation_mesh_instance.cpp
-msgid ""
-"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
-"It only provides navigation data."
-msgstr ""
-
#: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp
msgid "NavMesh"
msgstr ""
@@ -23512,6 +23779,16 @@ msgid "3D Physics"
msgstr ""
#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "2D Navigation"
+msgstr "ð‘¦ð‘¯ð‘‘ð‘»ð‘ð‘©ð‘¤ð‘±ð‘–ð‘©ð‘¯ ð‘¥ð‘´ð‘›"
+
+#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "3D Navigation"
+msgstr "ð‘¦ð‘¯ð‘‘ð‘»ð‘ð‘©ð‘¤ð‘±ð‘–ð‘©ð‘¯ ð‘¥ð‘´ð‘›"
+
+#: scene/register_scene_types.cpp
msgid "Use hiDPI"
msgstr ""
@@ -24776,7 +25053,7 @@ msgstr ""
msgid "Refraction"
msgstr ""
-#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp
+#: scene/resources/material.cpp
msgid "Detail"
msgstr ""
@@ -24852,10 +25129,15 @@ msgid "Visible Instance Count"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Sample Partition Type"
+msgid "Sampling"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Partition Type"
+msgstr "ð‘¦ð‘¯ð‘‘ð‘»ð‘ð‘©ð‘¤ð‘±ð‘–ð‘©ð‘¯ ð‘¥ð‘´ð‘›"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Parsed Geometry Type"
msgstr ""
@@ -24868,7 +25150,11 @@ msgid "Source Group Name"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Agent"
+msgid "Cells"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
+msgid "Agents"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -24880,11 +25166,15 @@ msgid "Max Slope"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+msgid "Regions"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
msgid "Merge Size"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Edge"
+msgid "Edges"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -24897,6 +25187,10 @@ msgid "Verts Per Poly"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+msgid "Details"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
msgid "Sample Distance"
msgstr ""
@@ -24913,7 +25207,15 @@ msgid "Ledge Spans"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Filter Walkable Low Height Spans"
+msgid "Walkable Low Height Spans"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
+msgid "Baking AABB"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
+msgid "Baking AABB Offset"
msgstr ""
#: scene/resources/occluder_shape.cpp
@@ -25281,6 +25583,11 @@ msgid "Scenario"
msgstr ""
#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Navigation Map"
+msgstr "ð‘¦ð‘¯ð‘‘ð‘»ð‘ð‘©ð‘¤ð‘±ð‘–ð‘©ð‘¯ ð‘¥ð‘´ð‘›"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
msgid "Direct Space State"
msgstr ""
@@ -25296,6 +25603,26 @@ msgstr ""
msgid "Default Angular Damp"
msgstr ""
+#: scene/resources/world.cpp
+#, fuzzy
+msgid "Default Map Up"
+msgstr "ð‘ð‘¨ð‘¤ð‘¿:"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Size"
+msgstr "ð‘ð‘¨ð‘¤ð‘¿:"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Height"
+msgstr "ð‘ð‘¨ð‘¤ð‘¿:"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Edge Connection Margin"
+msgstr "ð‘“ð‘³ð‘™ð‘’ð‘–ð‘©ð‘¯ð‘Ÿ:"
+
#: scene/resources/world_2d.cpp
msgid "Canvas"
msgstr ""
diff --git a/editor/translations/eo.po b/editor/translations/eo.po
index ac769e5242..27aeb13ce0 100644
--- a/editor/translations/eo.po
+++ b/editor/translations/eo.po
@@ -231,9 +231,10 @@ msgid "Data"
msgstr ""
#: core/io/file_access_network.cpp core/register_core_types.cpp
-#: editor/editor_settings.cpp main/main.cpp
+#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
#: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h
+#: scene/gui/file_dialog.cpp
#, fuzzy
msgid "Network"
msgstr "Reta Profililo"
@@ -393,6 +394,15 @@ msgstr ""
msgid "Max Size (KB)"
msgstr ""
+#: core/os/input.cpp
+#, fuzzy
+msgid "Mouse Mode"
+msgstr "Movada reÄimo"
+
+#: core/os/input.cpp
+msgid "Use Accumulated Input"
+msgstr ""
+
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: servers/audio_server.cpp
msgid "Device"
@@ -592,7 +602,8 @@ msgstr "Priskribo"
#: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
-#: main/main.cpp
+#: main/main.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp
msgid "Run"
msgstr "Ruli"
@@ -680,6 +691,11 @@ msgid "Main Run Args"
msgstr "Parametroj de ĉefa sceno:"
#: core/project_settings.cpp
+#, fuzzy
+msgid "Scene Naming"
+msgstr "Scena dosierindiko:"
+
+#: core/project_settings.cpp
msgid "Search In File Extensions"
msgstr ""
@@ -687,19 +703,15 @@ msgstr ""
msgid "Script Templates Search Path"
msgstr ""
-#: core/project_settings.cpp editor/editor_node.cpp
-#: editor/plugins/version_control_editor_plugin.cpp
-msgid "Version Control"
-msgstr "Versikontrolo"
-
#: core/project_settings.cpp
-msgid "Autoload On Startup"
-msgstr ""
+#, fuzzy
+msgid "Version Control Autoload On Startup"
+msgstr "Versikontrolo"
#: core/project_settings.cpp
#, fuzzy
-msgid "Plugin Name"
-msgstr "Nomo de kromprogramon:"
+msgid "Version Control Plugin Name"
+msgstr "Versikontrolo"
#: core/project_settings.cpp scene/2d/collision_object_2d.cpp
#: scene/3d/collision_object.cpp scene/gui/control.cpp
@@ -819,7 +831,8 @@ msgid "Quality"
msgstr ""
#: core/project_settings.cpp scene/gui/file_dialog.cpp
-#: scene/main/scene_tree.cpp servers/visual_server.cpp
+#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp
+#: servers/visual_server.cpp
#, fuzzy
msgid "Filters"
msgstr "Filtriloj:"
@@ -2260,8 +2273,8 @@ msgid "Open"
msgstr "Malfermi"
#: editor/dependency_editor.cpp
-msgid "Owners Of:"
-msgstr "Proprietuloj de:"
+msgid "Owners of: %s (Total: %d)"
+msgstr ""
#: editor/dependency_editor.cpp
msgid ""
@@ -2566,7 +2579,7 @@ msgid "Bus Options"
msgstr "Agordoj de buso"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/scene_tree_dock.cpp
+#: editor/project_export.cpp editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "Duobligi"
@@ -2825,6 +2838,24 @@ msgid "Choose"
msgstr "Elekti"
#: editor/editor_export.cpp
+msgid "Project export for platform:"
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Completed with errors."
+msgstr ""
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Completed successfully."
+msgstr "Pakaĵo instalis sukcese!"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed."
+msgstr "Eraris:"
+
+#: editor/editor_export.cpp
msgid "Storing File:"
msgstr "Memoras dosieron:"
@@ -2837,6 +2868,31 @@ msgid "Packing"
msgstr "Pakas"
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save PCK"
+msgstr "Konservi kiel"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Cannot create file \"%s\"."
+msgstr "Ne povis krei dosierujon."
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to export project files."
+msgstr "Ne eble komencas subprocezon!"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Can't open file to read from path \"%s\"."
+msgstr "Ne malfermeblas dosieron por skribi:"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save ZIP"
+msgstr "Konservi kiel"
+
+#: editor/editor_export.cpp
msgid ""
"Target platform requires 'ETC' texture compression for GLES2. Enable 'Import "
"Etc' in Project Settings."
@@ -2956,11 +3012,32 @@ msgstr "Propra sencimiga Åablonon ne trovitis."
msgid "Custom release template not found."
msgstr "Propra eldona Åablono ne trovitis."
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Prepare Template"
+msgstr "Åœablono:"
+
+#: editor/editor_export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "The given export path doesn't exist."
+msgstr "La provizinta dosierindiko ne ekzistas."
+
#: editor/editor_export.cpp platform/javascript/export/export.cpp
-msgid "Template file not found:"
+#, fuzzy
+msgid "Template file not found: \"%s\"."
msgstr "Åœablonan dosieron ne trovis:"
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to copy export template."
+msgstr "Ne eblas malfermi ZIP de eksportaj Åablonoj."
+
+#: editor/editor_export.cpp platform/windows/export/export.cpp
+#: platform/x11/export/export.cpp
+msgid "PCK Embedding"
+msgstr ""
+
+#: editor/editor_export.cpp
msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB."
msgstr ""
"Sur 32-bita eksportoj la enigita PCK ne eblas esti pli granda ol 4 GiB."
@@ -3132,9 +3209,9 @@ msgid "Import"
msgstr "Enporti"
#: editor/editor_feature_profile.cpp editor/project_export.cpp
-#: platform/android/export/export.cpp platform/javascript/export/export.cpp
-#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
-#: platform/windows/export/export.cpp
+#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#: platform/uwp/export/export.cpp platform/windows/export/export.cpp
msgid "Export"
msgstr "Eksporti"
@@ -4299,15 +4376,6 @@ msgid ""
"Unable to write to file '%s', file in use, locked or lacking permissions."
msgstr ""
-#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
-msgid "Scene"
-msgstr "Sceno"
-
-#: editor/editor_node.cpp
-#, fuzzy
-msgid "Scene Naming"
-msgstr "Scena dosierindiko:"
-
#: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp
#: servers/arvr/arvr_interface.cpp
#, fuzzy
@@ -4436,6 +4504,10 @@ msgid "Default Color Picker Mode"
msgstr ""
#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
+msgid "Version Control"
+msgstr "Versikontrolo"
+
+#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
#, fuzzy
msgid "Username"
msgstr "Renomi"
@@ -4464,6 +4536,10 @@ msgstr "Baskuli sendistran reÄimon."
msgid "Add a new scene."
msgstr "Aldoni novan scenon."
+#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
+msgid "Scene"
+msgstr "Sceno"
+
#: editor/editor_node.cpp
msgid "Go to previously opened scene."
msgstr "Iri al antaÅ­e malfermitan scenon."
@@ -5251,6 +5327,11 @@ msgstr ""
"Bonvolu aldoni ruleblan antaÅ­agordon per la Eksporto menuo aÅ­ defini "
"ekzistantan antaÅ­agordon kiel rulebla."
+#: editor/editor_run_native.cpp
+#, fuzzy
+msgid "Project Run"
+msgstr "Projekto"
+
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
msgstr "Skribu vian logikon en la _run() metodo."
@@ -5532,7 +5613,9 @@ msgid "Draw Spaces"
msgstr "Alvokoj"
#: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp
-#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp
+#: scene/main/scene_tree.cpp scene/resources/world.cpp
+#: scene/resources/world_2d.cpp
#, fuzzy
msgid "Navigation"
msgstr "Videbla navigacio"
@@ -7042,7 +7125,7 @@ msgstr ""
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp
-#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp
+#: scene/gui/control.cpp
#, fuzzy
msgid "Filter"
msgstr "Filtriloj:"
@@ -7338,6 +7421,18 @@ msgid "Saving..."
msgstr "Konservas..."
#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used as a normal map in 3D. Enabling red-green "
+"texture compression to reduce memory usage (blue channel is discarded)."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap "
+"generation and VRAM texture compression."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
msgid "2D, Detect 3D"
msgstr ""
@@ -8031,11 +8126,21 @@ msgid "New Anim"
msgstr "Nova animacio"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+msgstr "Krei novan animacion"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Change Animation Name:"
msgstr "ÅœanÄi nomon de animacio:"
#: editor/plugins/animation_player_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp
+#, fuzzy
+msgid "Rename Animation"
+msgstr "Renomi animaĵon"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Delete Animation?"
msgstr "Forigi animacion?"
@@ -8053,12 +8158,6 @@ msgid "Animation name already exists!"
msgstr "Nomo de animacio jam ekzistas!"
#: editor/plugins/animation_player_editor_plugin.cpp
-#: editor/plugins/sprite_frames_editor_plugin.cpp
-#, fuzzy
-msgid "Rename Animation"
-msgstr "Renomi animaĵon"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate Animation"
msgstr "Duplikati animacion"
@@ -8201,10 +8300,6 @@ msgid "Pin AnimationPlayer"
msgstr "Fiksi AnimationPlayer"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Create New Animation"
-msgstr "Krei novan animacion"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Name:"
msgstr "Nomo de animacio:"
@@ -10329,6 +10424,7 @@ msgid "Points"
msgstr ""
#: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp
+#: scene/resources/navigation_mesh.cpp
msgid "Polygons"
msgstr ""
@@ -11721,8 +11817,9 @@ msgid "Invalid geometry, can't replace by mesh."
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
-msgid "Convert to Mesh2D"
-msgstr ""
+#, fuzzy
+msgid "Convert to MeshInstance2D"
+msgstr "Konverti al CPUParticles2D"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Invalid geometry, can't create polygon."
@@ -12753,8 +12850,7 @@ msgid "Select the previous shape, subtile, or Tile."
msgstr ""
#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp
-#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp
-#: scene/resources/texture.cpp
+#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp
msgid "Region"
msgstr ""
@@ -14213,31 +14309,10 @@ 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 "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 "Export Path"
msgstr ""
@@ -14376,6 +14451,11 @@ msgid "Export templates for this platform are missing:"
msgstr ""
#: editor/project_export.cpp
+#, fuzzy
+msgid "Project Export"
+msgstr "Fondintoj de la Projekto"
+
+#: editor/project_export.cpp
msgid "Manage Export Templates"
msgstr "Mastrumi eksportaj Åablonoj"
@@ -16755,7 +16835,7 @@ msgstr ""
#: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp
#: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp
-#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp
+#: scene/3d/collision_polygon.cpp
#, fuzzy
msgid "Polygon"
msgstr "Redakti plurlateron"
@@ -17368,7 +17448,6 @@ msgid "Use In Baked Light"
msgstr "Baki lummapojn"
#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
-#: scene/resources/navigation_mesh.cpp
msgid "Cell"
msgstr ""
@@ -17398,6 +17477,19 @@ msgstr "Centre"
msgid "Mask"
msgstr ""
+#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
+#, fuzzy
+msgid "Bake Navigation"
+msgstr "Videbla navigacio"
+
+#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp
+#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp
+#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp
+#: scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Navigation Layers"
+msgstr "Videbla navigacio"
+
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Plane"
msgstr ""
@@ -18945,10 +19037,6 @@ msgid "Could not execute on device."
msgstr "Ne povis krei dosierujon."
#: 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."
@@ -19052,12 +19140,16 @@ msgstr ""
msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version."
msgstr ""
+#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Code Signing"
+msgstr "Signalo"
+
#: 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."
+"'apksigner' could not be found. Please check that the command is available "
+"in the Android SDK build-tools directory. The resulting %s is unsigned."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -19076,6 +19168,11 @@ msgid "Could not find keystore, unable to export."
msgstr ""
#: platform/android/export/export_plugin.cpp
+#, fuzzy
+msgid "Could not start apksigner executable."
+msgstr "Ne eble komencas subprocezon!"
+
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
@@ -19105,7 +19202,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Unsupported export format!\n"
+msgid "Unsupported export format!"
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -19116,20 +19213,18 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Android build version mismatch:\n"
-" Template installed: %s\n"
-" Godot Version: %s\n"
+"Android build version mismatch: Template installed: %s, Godot version: %s. "
"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"
+"Unable to overwrite res://android/build/res/*.xml files with project name."
msgstr ""
#: platform/android/export/export_plugin.cpp
#, fuzzy
-msgid "Could not export project files to gradle project\n"
+msgid "Could not export project files to gradle project."
msgstr "Ne eblas redakti project.godot en projekta dosierindiko."
#: platform/android/export/export_plugin.cpp
@@ -19142,7 +19237,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Building of Android project failed, check output for the error.\n"
+"Building of Android project failed, check output for the error. "
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
@@ -19158,7 +19253,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
#, fuzzy
-msgid "Package not found: %s"
+msgid "Package not found: \"%s\"."
msgstr "Enhavo de pakaĵo:"
#: platform/android/export/export_plugin.cpp
@@ -19167,15 +19262,13 @@ msgid "Creating APK..."
msgstr "Konektas..."
#: platform/android/export/export_plugin.cpp
-msgid ""
-"Could not find template APK to export:\n"
-"%s"
-msgstr ""
+#, fuzzy
+msgid "Could not find template APK to export: \"%s\"."
+msgstr "Ne eble komencas subprocezon!"
#: platform/android/export/export_plugin.cpp
msgid ""
-"Missing libraries in the export template for the selected architectures: "
-"%s.\n"
+"Missing libraries in the export template for the selected architectures: %s. "
"Please build a template with all required libraries, or uncheck the missing "
"architectures in the export preset."
msgstr ""
@@ -19187,7 +19280,7 @@ msgstr "Aldonas %s..."
#: platform/android/export/export_plugin.cpp
#, fuzzy
-msgid "Could not export project files"
+msgid "Could not export project files."
msgstr "Ne eble komencas subprocezon!"
#: platform/android/export/export_plugin.cpp
@@ -19429,6 +19522,17 @@ msgstr "Eltondi nodo(j)n"
msgid "Custom BG Color"
msgstr "Eltondi nodo(j)n"
+#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Prepare Templates"
+msgstr "Mastrumi eksportaj Åablonoj"
+
+#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Export template not found."
+msgstr "Propra eldona Åablono ne trovitis."
+
#: platform/iphone/export/export.cpp
msgid "App Store Team ID not specified - cannot configure the project."
msgstr ""
@@ -19450,23 +19554,35 @@ msgid "Run exported HTML in the system's default browser."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not open template for export:"
-msgstr ""
+#, fuzzy
+msgid "Could not open template for export: \"%s\"."
+msgstr "Ne povis krei dosierujon."
#: platform/javascript/export/export.cpp
-msgid "Invalid export template:"
-msgstr ""
+#, fuzzy
+msgid "Invalid export template: \"%s\"."
+msgstr "Nevalida kromprogramo."
#: platform/javascript/export/export.cpp
-msgid "Could not write file:"
-msgstr ""
+#, fuzzy
+msgid "Could not write file: \"%s\"."
+msgstr "Ne povis krei dosierujon."
+
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Icon Creation"
+msgstr "Enhavo:"
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not read file:"
+msgid "Could not read file: \"%s\"."
msgstr "Ne povis krei dosierujon."
#: platform/javascript/export/export.cpp
+msgid "PWA"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
#, fuzzy
msgid "Variant"
msgstr "Versio:"
@@ -19542,17 +19658,17 @@ msgstr ""
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not read HTML shell:"
+msgid "Could not read HTML shell: \"%s\"."
msgstr "Ne povis krei dosierujon."
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not create HTTP server directory:"
+msgid "Could not create HTTP server directory: %s."
msgstr "Ne povis krei dosierujon."
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Error starting HTTP server:"
+msgid "Error starting HTTP server: %d."
msgstr "Eraras konservi TileSet!"
#: platform/javascript/export/export.cpp
@@ -19849,9 +19965,28 @@ msgid "Apple Team ID"
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open icon file \"%s\"."
+msgstr "Ne eble komencas subprocezon!"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start xcrun executable."
+msgstr "Ne eble komencas subprocezon!"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization failed."
+msgstr "Lokaĵigado"
+
+#: platform/osx/export/export.cpp
+msgid "Notarization request UUID: \"%s\""
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid ""
-"Note: The notarization process generally takes less than an hour. When the "
-"process is completed, you'll receive an email."
+"The notarization process generally takes less than an hour. When the process "
+"is completed, you'll receive an email."
msgstr ""
#: platform/osx/export/export.cpp
@@ -19867,18 +20002,74 @@ msgid ""
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign failed with error \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign require regex module."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Could not start codesign executable, make sure Xcode command line tools are "
+"installed."
+msgstr ""
+
+#: platform/osx/export/export.cpp platform/windows/export/export.cpp
#, fuzzy
msgid "No identity found."
msgstr "Ne sub-risurcojn trovis."
#: platform/osx/export/export.cpp
#, fuzzy
+msgid "Cannot sign file %s."
+msgstr "Eraris konservi dosieron: %s"
+
+#: platform/osx/export/export.cpp
+msgid "Relative symlinks are not supported, exported \"%s\" might be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "DMG Creation"
+msgstr "Direktoj"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start hdiutil executable."
+msgstr "Ne eble komencas subprocezon!"
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed - file exists."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
msgid "Creating app bundle"
msgstr "Kreas bildeton"
#: platform/osx/export/export.cpp
-msgid "Could not find template app to export:"
-msgstr ""
+#, fuzzy
+msgid "Could not find template app to export: \"%s\"."
+msgstr "Ne eble komencas subprocezon!"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid export format."
+msgstr "Malvalida baza dosierindiko."
#: platform/osx/export/export.cpp
msgid ""
@@ -19888,7 +20079,7 @@ msgstr ""
#: platform/osx/export/export.cpp
msgid ""
-"Requested template binary '%s' not found. It might be missing from your "
+"Requested template binary \"%s\" not found. It might be missing from your "
"template archive."
msgstr ""
@@ -19929,6 +20120,16 @@ msgid "Sending archive for notarization"
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "ZIP Creation"
+msgstr "Projekto"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open file to read from path \"%s\"."
+msgstr "Ne eblas redakti project.godot en projekta dosierindiko."
+
+#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr ""
@@ -20239,6 +20440,11 @@ msgid "Debug Algorithm"
msgstr "Sencimigilo"
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to rename temporary file \"%s\"."
+msgstr "Ne eblas forigi provizoran dosieron:"
+
+#: platform/windows/export/export.cpp
msgid "Identity Type"
msgstr ""
@@ -20286,6 +20492,66 @@ msgid "Trademarks"
msgstr ""
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Resources Modification"
+msgstr "Alglui animacion"
+
+#: platform/windows/export/export.cpp
+msgid "Could not find rcedit executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find wine executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start rcedit executable, configure rcedit path in the Editor "
+"Settings (Export > Windows > Rcedit)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"rcedit failed to modify executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find signtool executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find osslsigncode executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid identity type."
+msgstr "Malvalidaj argumentoj por konstrui '%s'"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid timestamp server."
+msgstr "Malvalida nomo."
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start signtool executable, configure signtool path in the Editor "
+"Settings (Export > Windows > Signtool)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Signtool failed to sign executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to remove temporary file \"%s\"."
+msgstr "Ne eblas forigi provizoran dosieron:"
+
+#: platform/windows/export/export.cpp
msgid ""
"The rcedit tool must be configured in the Editor Settings (Export > Windows "
"> Rcedit) to change the icon or app information data."
@@ -20307,6 +20573,23 @@ msgid "Invalid product version:"
msgstr "Nevalida nomo de projekto."
#: platform/windows/export/export.cpp
+msgid "Windows executables cannot be >= 4 GiB."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+#, fuzzy
+msgid "Failed to open executable file \"%s\"."
+msgstr "Nevalida kromprogramo."
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable file header corrupted."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable \"pck\" section not found."
+msgstr ""
+
+#: platform/windows/export/export.cpp
#, fuzzy
msgid "Windows"
msgstr "Nova Fenestro"
@@ -20323,6 +20606,10 @@ msgstr ""
msgid "Wine"
msgstr ""
+#: platform/x11/export/export.cpp
+msgid "32-bit executables cannot have embedded data >= 4 GiB."
+msgstr ""
+
#: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp
#: scene/resources/texture.cpp
#, fuzzy
@@ -20447,7 +20734,8 @@ msgstr ""
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/3d/light.cpp scene/3d/reflection_probe.cpp
-#: scene/3d/visual_instance.cpp scene/resources/material.cpp
+#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp
+#: scene/resources/material.cpp
#, fuzzy
msgid "Max Distance"
msgstr "Ekzemplodoni"
@@ -21216,6 +21504,18 @@ msgstr ""
msgid "Edge Connection Margin"
msgstr "Redakti Konekton:"
+#: scene/2d/navigation_2d.cpp
+msgid ""
+"'Navigation2D' node and 'Navigation2D.get_simple_path()' are deprecated and "
+"will be removed in a future version. Use 'Navigation2DServer.map_get_path()' "
+"instead."
+msgstr ""
+
+#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
+#, fuzzy
+msgid "Path Desired Distance"
+msgstr "Elektu ĉefan scenon"
+
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
msgid "Target Desired Distance"
msgstr ""
@@ -21268,15 +21568,19 @@ msgid ""
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/navigation_polygon.cpp
msgid "Navpoly"
msgstr ""
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Enter Cost"
+msgstr "Centre malsupre"
+
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Travel Cost"
+msgstr "VojaÄa"
+
#: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp
#: scene/main/canvas_layer.cpp
#, fuzzy
@@ -22416,6 +22720,13 @@ msgstr ""
msgid "Transform Normals"
msgstr "Transformo"
+#: scene/3d/navigation.cpp
+msgid ""
+"'Navigation' node and 'Navigation.get_simple_path()' are deprecated and will "
+"be removed in a future version. Use 'NavigationServer.map_get_path()' "
+"instead."
+msgstr ""
+
#: scene/3d/navigation.cpp scene/resources/curve.cpp
#, fuzzy
msgid "Up Vector"
@@ -22439,12 +22750,6 @@ msgid ""
"The NavigationAgent can be used only under a Spatial inheriting parent node."
msgstr ""
-#: scene/3d/navigation_mesh_instance.cpp
-msgid ""
-"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
-"It only provides navigation data."
-msgstr ""
-
#: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp
#, fuzzy
msgid "NavMesh"
@@ -25089,6 +25394,16 @@ msgid "3D Physics"
msgstr "Fiziko-kadro %"
#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "2D Navigation"
+msgstr "Videbla navigacio"
+
+#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "3D Navigation"
+msgstr "Videbla navigacio"
+
+#: scene/register_scene_types.cpp
msgid "Use hiDPI"
msgstr ""
@@ -26501,7 +26816,7 @@ msgstr "Transpaso: "
msgid "Refraction"
msgstr "Versio:"
-#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp
+#: scene/resources/material.cpp
msgid "Detail"
msgstr ""
@@ -26583,7 +26898,12 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
-msgid "Sample Partition Type"
+msgid "Sampling"
+msgstr "Skalo:"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Partition Type"
msgstr "ÅœanÄu la tipon de %s"
#: scene/resources/navigation_mesh.cpp
@@ -26600,10 +26920,15 @@ msgid "Source Group Name"
msgstr "Fonto"
#: scene/resources/navigation_mesh.cpp
-msgid "Agent"
+msgid "Cells"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Agents"
+msgstr "Parametroj de ĉefa sceno:"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Max Climb"
msgstr ""
@@ -26613,11 +26938,16 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
+msgid "Regions"
+msgstr "Malfermi lastaj"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
msgid "Merge Size"
msgstr "Kunigi el sceno"
#: scene/resources/navigation_mesh.cpp
-msgid "Edge"
+msgid "Edges"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -26630,6 +26960,11 @@ msgid "Verts Per Poly"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Details"
+msgstr "Åœargi defaÅ­lton"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Sample Distance"
msgstr ""
@@ -26646,9 +26981,18 @@ msgid "Ledge Spans"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Filter Walkable Low Height Spans"
+msgid "Walkable Low Height Spans"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
+msgid "Baking AABB"
msgstr ""
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB Offset"
+msgstr "Krada deÅovo:"
+
#: scene/resources/occluder_shape.cpp
msgid "Spheres"
msgstr ""
@@ -27056,6 +27400,11 @@ msgid "Scenario"
msgstr "Sceno"
#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Navigation Map"
+msgstr "Videbla navigacio"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
msgid "Direct Space State"
msgstr ""
@@ -27073,6 +27422,26 @@ msgstr "Lineara maldekstro"
msgid "Default Angular Damp"
msgstr ""
+#: scene/resources/world.cpp
+#, fuzzy
+msgid "Default Map Up"
+msgstr "DefaÅ­lto"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Size"
+msgstr "DefaÅ­lto"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Height"
+msgstr "Testada"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Edge Connection Margin"
+msgstr "Redakti Konekton:"
+
#: scene/resources/world_2d.cpp
msgid "Canvas"
msgstr ""
diff --git a/editor/translations/es.po b/editor/translations/es.po
index 7b51bbe077..41b1e32779 100644
--- a/editor/translations/es.po
+++ b/editor/translations/es.po
@@ -79,13 +79,15 @@
# losfroger <emilioranita@gmail.com>, 2022.
# Ventura Pérez García <vetu@protonmail.com>, 2022.
# David Martínez <goddrinksjava@gmail.com>, 2022.
+# Nagamine-j <jimmy.kochi@unmsm.edu.pe>, 2022.
+# Esdras Caleb Oliveira Silva <acheicaleb@gmail.com>, 2022.
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: 2022-06-08 06:48+0000\n"
-"Last-Translator: David Martínez <goddrinksjava@gmail.com>\n"
+"PO-Revision-Date: 2022-06-29 10:04+0000\n"
+"Last-Translator: Esdras Caleb Oliveira Silva <acheicaleb@gmail.com>\n"
"Language-Team: Spanish <https://hosted.weblate.org/projects/godot-engine/"
"godot/es/>\n"
"Language: es\n"
@@ -93,7 +95,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.13-dev\n"
+"X-Generator: Weblate 4.13.1-dev\n"
#: core/bind/core_bind.cpp main/main.cpp
msgid "Tablet Driver"
@@ -277,9 +279,10 @@ msgid "Data"
msgstr "Datos"
#: core/io/file_access_network.cpp core/register_core_types.cpp
-#: editor/editor_settings.cpp main/main.cpp
+#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
#: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h
+#: scene/gui/file_dialog.cpp
msgid "Network"
msgstr "Red"
@@ -349,7 +352,7 @@ msgstr "Tamaño Máximo del Buffer de Salida"
#: core/io/packet_peer.cpp
msgid "Stream Peer"
-msgstr "Stream Peer"
+msgstr "Stream de Pares"
#: core/io/stream_peer.cpp
msgid "Big Endian"
@@ -386,9 +389,8 @@ msgstr ""
"inválido."
#: core/math/expression.cpp
-#, fuzzy
msgid "Invalid input %d (not passed) in expression"
-msgstr "Entrada inválida %i (no aprobada) en la expresión"
+msgstr "Entrada inválida %d (no aprobada) en la expresión"
#: core/math/expression.cpp
msgid "self can't be used because instance is null (not passed)"
@@ -431,6 +433,14 @@ msgstr "Cola de Mensajes"
msgid "Max Size (KB)"
msgstr "Tamaño Máximo (KB)"
+#: core/os/input.cpp
+msgid "Mouse Mode"
+msgstr "Modo de Mouse"
+
+#: core/os/input.cpp
+msgid "Use Accumulated Input"
+msgstr "Usar entrada acumulada"
+
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: servers/audio_server.cpp
msgid "Device"
@@ -476,7 +486,7 @@ msgstr "Unicode"
#: core/os/input_event.cpp
msgid "Echo"
-msgstr "Echo"
+msgstr "Eco"
#: core/os/input_event.cpp scene/gui/base_button.cpp
msgid "Button Mask"
@@ -500,7 +510,7 @@ msgstr "Dobleclick"
#: core/os/input_event.cpp
msgid "Tilt"
-msgstr "Tilt"
+msgstr "Inclinar"
#: core/os/input_event.cpp
msgid "Pressure"
@@ -579,11 +589,11 @@ msgstr "Valor del Controlador"
#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
#: platform/windows/export/export.cpp
msgid "Application"
-msgstr "Aplicación"
+msgstr "Aplicação"
#: core/project_settings.cpp main/main.cpp
msgid "Config"
-msgstr "Configurar"
+msgstr "Configuração"
#: core/project_settings.cpp
msgid "Project Settings Override"
@@ -610,7 +620,8 @@ msgstr "Descripción"
#: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
-#: main/main.cpp
+#: main/main.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp
msgid "Run"
msgstr "Ejecutar"
@@ -693,6 +704,10 @@ msgid "Main Run Args"
msgstr "Argumentos de la Ejecución Principal"
#: core/project_settings.cpp
+msgid "Scene Naming"
+msgstr "Nombres de Escenas"
+
+#: core/project_settings.cpp
msgid "Search In File Extensions"
msgstr "Buscar En Extensiones de Archivos"
@@ -700,18 +715,15 @@ msgstr "Buscar En Extensiones de Archivos"
msgid "Script Templates Search Path"
msgstr "Ruta de Búsqueda de Plantillas de Scripts"
-#: core/project_settings.cpp editor/editor_node.cpp
-#: editor/plugins/version_control_editor_plugin.cpp
-msgid "Version Control"
-msgstr "Control de Versiones"
-
#: core/project_settings.cpp
-msgid "Autoload On Startup"
+#, fuzzy
+msgid "Version Control Autoload On Startup"
msgstr "Cargar automáticamente al inicio"
#: core/project_settings.cpp
-msgid "Plugin Name"
-msgstr "Nombre del Plugin"
+#, fuzzy
+msgid "Version Control Plugin Name"
+msgstr "Control de Versiones"
#: core/project_settings.cpp scene/2d/collision_object_2d.cpp
#: scene/3d/collision_object.cpp scene/gui/control.cpp
@@ -818,7 +830,8 @@ msgid "Quality"
msgstr "Calidad"
#: core/project_settings.cpp scene/gui/file_dialog.cpp
-#: scene/main/scene_tree.cpp servers/visual_server.cpp
+#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp
+#: servers/visual_server.cpp
msgid "Filters"
msgstr "Filtros"
@@ -902,7 +915,7 @@ msgstr "Tiempo de Espera de Conexión en Segundos"
#: core/register_core_types.cpp
msgid "Packet Peer Stream"
-msgstr "Packet Peer Stream"
+msgstr "Stream de Paquetes de Pares"
#: core/register_core_types.cpp
msgid "Max Buffer (Power of 2)"
@@ -1075,7 +1088,7 @@ msgstr "Ponderar Muestras"
#: drivers/gles3/rasterizer_scene_gles3.cpp
msgid "Voxel Cone Tracing"
-msgstr "Voxel Cone Tracing"
+msgstr "Trazado de Conos de Vóxeles"
#: drivers/gles3/rasterizer_scene_gles3.cpp scene/resources/environment.cpp
msgid "High Quality"
@@ -1184,9 +1197,8 @@ msgid "Value"
msgstr "Valor"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Arg Count"
-msgstr "Cuenta"
+msgstr "Conteo de Argumentos"
#: editor/animation_track_editor.cpp main/main.cpp
#: modules/mono/mono_gd/gd_mono.cpp
@@ -1347,19 +1359,16 @@ msgid "Remove this track."
msgstr "Eliminar esta pista."
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Time (s):"
-msgstr "Tiempo (s): "
+msgstr "Tiempo (s):"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Position:"
-msgstr "Posición"
+msgstr "Posición:"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Rotation:"
-msgstr "Rotación"
+msgstr "Rotación:"
#: editor/animation_track_editor.cpp
#: editor/plugins/animation_tree_player_editor_plugin.cpp
@@ -1376,29 +1385,24 @@ msgid "Type:"
msgstr "Tipo:"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "(Invalid, expected type: %s)"
-msgstr "Plantilla de exportación inválida:"
+msgstr "(Inválido, tipo esperado: %s)"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Easing:"
-msgstr "Entrada-Salida Suave"
+msgstr "Relajación:"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "In-Handle:"
-msgstr "Establecer Manipulador"
+msgstr "In-Handle:"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Out-Handle:"
-msgstr "Establecer Manipulador"
+msgstr "Out-Handle:"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Stream:"
-msgstr "Stream Peer"
+msgstr "Stream:"
#: editor/animation_track_editor.cpp
#, fuzzy
@@ -1630,9 +1634,8 @@ msgid "Add Method Track Key"
msgstr "Añadir Clave de Pista de Método"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Method not found in object:"
-msgstr "Método no encontrado en el objeto: "
+msgstr "Método no encontrado en el objeto:"
#: editor/animation_track_editor.cpp
msgid "Anim Move Keys"
@@ -2244,8 +2247,8 @@ msgid "Open"
msgstr "Abrir"
#: editor/dependency_editor.cpp
-msgid "Owners Of:"
-msgstr "Propietarios De:"
+msgid "Owners of: %s (Total: %d)"
+msgstr ""
#: editor/dependency_editor.cpp
msgid ""
@@ -2549,7 +2552,7 @@ msgid "Bus Options"
msgstr "Opciones de Bus"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/scene_tree_dock.cpp
+#: editor/project_export.cpp editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "Duplicar"
@@ -2602,9 +2605,8 @@ msgid "There is no '%s' file."
msgstr "No hay ningún archivo `%s'."
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Layout:"
-msgstr "Layout"
+msgstr "Layout:"
#: editor/editor_audio_buses.cpp
msgid "Invalid file, not an audio bus layout."
@@ -2746,7 +2748,7 @@ msgstr "Nombre del Nodo:"
#: editor/editor_autoload_settings.cpp
msgid "Global Variable"
-msgstr "Variable"
+msgstr "Variable global"
#: editor/editor_data.cpp
msgid "Paste Params"
@@ -2806,6 +2808,22 @@ msgid "Choose"
msgstr "Elegir"
#: editor/editor_export.cpp
+msgid "Project export for platform:"
+msgstr "Exportar proyecto para la plataforma:"
+
+#: editor/editor_export.cpp
+msgid "Completed with errors."
+msgstr "Completado con errores."
+
+#: editor/editor_export.cpp
+msgid "Completed successfully."
+msgstr "Completado exitosamente."
+
+#: editor/editor_export.cpp
+msgid "Failed."
+msgstr "Falló."
+
+#: editor/editor_export.cpp
msgid "Storing File:"
msgstr "Archivo de Almacenamiento:"
@@ -2819,6 +2837,26 @@ msgid "Packing"
msgstr "Empaquetando"
#: editor/editor_export.cpp
+msgid "Save PCK"
+msgstr "Guardar como PCK"
+
+#: editor/editor_export.cpp
+msgid "Cannot create file \"%s\"."
+msgstr "No se pudo crear el archivo \"%s\"."
+
+#: editor/editor_export.cpp
+msgid "Failed to export project files."
+msgstr "Fallo en la exportación de los archivos del proyecto."
+
+#: editor/editor_export.cpp
+msgid "Can't open file to read from path \"%s\"."
+msgstr "No se puede abrir el archivo a leer de la ruta \"%s\"."
+
+#: editor/editor_export.cpp
+msgid "Save ZIP"
+msgstr "Guardar como ZIP"
+
+#: editor/editor_export.cpp
msgid ""
"Target platform requires 'ETC' texture compression for GLES2. Enable 'Import "
"Etc' in Project Settings."
@@ -2936,9 +2974,28 @@ msgstr "No se encontró la plantilla de depuración personalizada."
msgid "Custom release template not found."
msgstr "Plantilla release personalizada no encontrada."
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Prepare Template"
+msgstr "Administrar Plantillas"
+
+#: editor/editor_export.cpp platform/osx/export/export.cpp
+msgid "The given export path doesn't exist."
+msgstr "La ruta de exportación proporcionada no existe."
+
#: editor/editor_export.cpp platform/javascript/export/export.cpp
-msgid "Template file not found:"
-msgstr "Archivo de plantilla no encontrado:"
+msgid "Template file not found: \"%s\"."
+msgstr "Archivo de plantilla no encontrado: \"%s\"."
+
+#: editor/editor_export.cpp
+msgid "Failed to copy export template."
+msgstr "Fallo al copiar la plantilla de exportación."
+
+#: editor/editor_export.cpp platform/windows/export/export.cpp
+#: platform/x11/export/export.cpp
+#, fuzzy
+msgid "PCK Embedding"
+msgstr "Relleno"
#: editor/editor_export.cpp
msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB."
@@ -3119,9 +3176,9 @@ msgid "Import"
msgstr "Importar"
#: editor/editor_feature_profile.cpp editor/project_export.cpp
-#: platform/android/export/export.cpp platform/javascript/export/export.cpp
-#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
-#: platform/windows/export/export.cpp
+#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#: platform/uwp/export/export.cpp platform/windows/export/export.cpp
msgid "Export"
msgstr "Exportar"
@@ -4275,14 +4332,6 @@ msgstr ""
"No se puede escribir en el archivo '%s', archivo en uso, bloqueado o sin "
"permisos."
-#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
-msgid "Scene"
-msgstr "Escena"
-
-#: editor/editor_node.cpp
-msgid "Scene Naming"
-msgstr "Nombres de Escenas"
-
#: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp
#: servers/arvr/arvr_interface.cpp
msgid "Interface"
@@ -4397,6 +4446,10 @@ msgid "Default Color Picker Mode"
msgstr "Modo De Selección De Color Por Defecto"
#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
+msgid "Version Control"
+msgstr "Control de Versiones"
+
+#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
msgid "Username"
msgstr "Nombre de usuario"
@@ -4424,6 +4477,10 @@ msgstr "Act./Desact. modo sin distracciones."
msgid "Add a new scene."
msgstr "Añadir nueva escena."
+#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
+msgid "Scene"
+msgstr "Escena"
+
#: editor/editor_node.cpp
msgid "Go to previously opened scene."
msgstr "Ir a la escena abierta previamente."
@@ -5120,9 +5177,8 @@ msgid "Size:"
msgstr "Tamaño:"
#: editor/editor_properties_array_dict.cpp
-#, fuzzy
msgid "Page:"
-msgstr "Página: "
+msgstr "Página:"
#: editor/editor_properties_array_dict.cpp
#: editor/plugins/theme_editor_plugin.cpp
@@ -5219,6 +5275,11 @@ msgstr ""
"Por favor, añade un preset ejecutable en el menú de exportación o define un "
"preset existente como ejecutable."
+#: editor/editor_run_native.cpp
+#, fuzzy
+msgid "Project Run"
+msgstr "Proyecto"
+
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
msgstr "Escribe tu lógica en el método _run()."
@@ -5473,7 +5534,9 @@ msgid "Draw Spaces"
msgstr "Dibujar Espacios"
#: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp
-#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp
+#: scene/main/scene_tree.cpp scene/resources/world.cpp
+#: scene/resources/world_2d.cpp
msgid "Navigation"
msgstr "Navegación"
@@ -5527,7 +5590,7 @@ msgstr "Plegado de Código"
#: editor/editor_settings.cpp
msgid "Word Wrap"
-msgstr ""
+msgstr "Ajuste de Palabras"
#: editor/editor_settings.cpp
msgid "Show Line Length Guidelines"
@@ -5535,7 +5598,7 @@ msgstr "Mostrar Guías de Longitud de Línea"
#: editor/editor_settings.cpp
msgid "Line Length Guideline Soft Column"
-msgstr ""
+msgstr "Directriz de longitud de Línea de Columna Flexible"
#: editor/editor_settings.cpp
msgid "Line Length Guideline Hard Column"
@@ -5636,9 +5699,8 @@ msgid "Complete File Paths"
msgstr "Completar Rutas de Archivos"
#: editor/editor_settings.cpp modules/gdscript/gdscript_editor.cpp
-#, fuzzy
msgid "Add Type Hints"
-msgstr "Añadir Tipo"
+msgstr "Añadir Sugerencias de Tipo"
#: editor/editor_settings.cpp
msgid "Use Single Quotes"
@@ -5757,9 +5819,8 @@ msgid "Default Z Far"
msgstr "Z Lejana por Defecto"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Lightmap Baking Number Of CPU Threads"
-msgstr "Número de Hilos de la CPU para Baking de Mapa de Luz"
+msgstr "Número de hilos de la CPU para el Lightmap Baking"
#: editor/editor_settings.cpp
msgid "Navigation Scheme"
@@ -5882,9 +5943,8 @@ msgid "Bone Selected Color"
msgstr "Selección del Color de los Huesos"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Bone IK Color"
-msgstr "Color IK Hueso"
+msgstr "Color del hueso IK"
#: editor/editor_settings.cpp
msgid "Bone Outline Color"
@@ -6913,7 +6973,7 @@ msgstr "Repetir"
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp
-#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp
+#: scene/gui/control.cpp
msgid "Filter"
msgstr "Filtro"
@@ -7171,9 +7231,8 @@ msgid "Generating Lightmaps"
msgstr "Generando Lightmaps"
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Generating for Mesh:"
-msgstr "Generando para la Malla: "
+msgstr "Generar para el Mesh:"
#: editor/import/resource_importer_scene.cpp
msgid "Running Custom Script..."
@@ -7201,6 +7260,18 @@ msgid "Saving..."
msgstr "Guardando..."
#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used as a normal map in 3D. Enabling red-green "
+"texture compression to reduce memory usage (blue channel is discarded)."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap "
+"generation and VRAM texture compression."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
msgid "2D, Detect 3D"
msgstr ""
@@ -7892,11 +7963,20 @@ msgid "New Anim"
msgstr "Nueva Animación"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+msgstr "Crear Animación Nueva"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Change Animation Name:"
msgstr "Cambiar nombre de animación:"
#: editor/plugins/animation_player_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Rename Animation"
+msgstr "Renombrar Animación"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Delete Animation?"
msgstr "¿Eliminar Animación?"
@@ -7914,11 +7994,6 @@ msgid "Animation name already exists!"
msgstr "¡El nombre de animación ya existe!"
#: editor/plugins/animation_player_editor_plugin.cpp
-#: editor/plugins/sprite_frames_editor_plugin.cpp
-msgid "Rename Animation"
-msgstr "Renombrar Animación"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate Animation"
msgstr "Duplicar Animación"
@@ -8064,10 +8139,6 @@ msgid "Pin AnimationPlayer"
msgstr "Fijar AnimationPlayer"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Create New Animation"
-msgstr "Crear Animación Nueva"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Name:"
msgstr "Nombre de Animación:"
@@ -8183,9 +8254,8 @@ msgid "Set the end animation. This is useful for sub-transitions."
msgstr "Asignar la animación de fin. Esto es útil para sub-transiciones."
#: editor/plugins/animation_state_machine_editor.cpp
-#, fuzzy
msgid "Transition:"
-msgstr "Transición: "
+msgstr "Transición:"
#: editor/plugins/animation_state_machine_editor.cpp
msgid "Play Mode:"
@@ -9963,9 +10033,8 @@ msgid "Volume"
msgstr "Volumen"
#: editor/plugins/particles_editor_plugin.cpp
-#, fuzzy
msgid "Emission Source:"
-msgstr "Fuente de Emisión: "
+msgstr "Fuente de Emisión:"
#: editor/plugins/particles_editor_plugin.cpp
msgid "A processor material of type 'ParticlesMaterial' is required."
@@ -10198,6 +10267,7 @@ msgid "Points"
msgstr "Puntos"
#: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp
+#: scene/resources/navigation_mesh.cpp
msgid "Polygons"
msgstr "Polígonos"
@@ -11063,15 +11133,13 @@ msgstr "Mover"
#. TRANSLATORS: Refers to changing the scale of a node in the 3D editor.
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Scaling:"
-msgstr "Escalado: "
+msgstr "Escala:"
#. TRANSLATORS: Refers to changing the position of a node in the 3D editor.
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Translating:"
-msgstr "Trasladar: "
+msgstr "Trasladar:"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rotating %s degrees."
@@ -11582,7 +11650,8 @@ msgid "Invalid geometry, can't replace by mesh."
msgstr "Geometría inválida, no puede ser reemplazada por una malla."
#: editor/plugins/sprite_editor_plugin.cpp
-msgid "Convert to Mesh2D"
+#, fuzzy
+msgid "Convert to MeshInstance2D"
msgstr "Convertir a Mesh2D"
#: editor/plugins/sprite_editor_plugin.cpp
@@ -11614,19 +11683,16 @@ msgid "Sprite"
msgstr "Sprite"
#: editor/plugins/sprite_editor_plugin.cpp
-#, fuzzy
msgid "Simplification:"
-msgstr "Simplificación: "
+msgstr "Simplificación:"
#: editor/plugins/sprite_editor_plugin.cpp
-#, fuzzy
msgid "Shrink (Pixels):"
-msgstr "Encoger (Píxeles): "
+msgstr "Reducción (Píxeles):"
#: editor/plugins/sprite_editor_plugin.cpp
-#, fuzzy
msgid "Grow (Pixels):"
-msgstr "Crecer (Pixeles): "
+msgstr "Crecimiento (Píxeles):"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Update Preview"
@@ -12581,8 +12647,7 @@ msgid "Select the previous shape, subtile, or Tile."
msgstr "Seleccionar la anterior forma, subtile, o Tile."
#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp
-#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp
-#: scene/resources/texture.cpp
+#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp
msgid "Region"
msgstr "Región"
@@ -14106,37 +14171,10 @@ msgid "Delete preset '%s'?"
msgstr "¿Eliminar preajuste '%s'?"
#: editor/project_export.cpp
-msgid ""
-"Failed to export the project for platform '%s'.\n"
-"Export templates seem to be missing or invalid."
-msgstr ""
-"No se pudo exportar el proyecto para la plataforma '%s'.\n"
-"Las plantillas de exportación parecen faltar o ser inválidas."
-
-#: 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 ""
-"No se pudo exportar el proyecto para la plataforma '%s'.\n"
-"Esto puede ser debido a un problema de configuración en el preset de "
-"exportación o en la configuración de exportación."
-
-#: editor/project_export.cpp
msgid "Exporting All"
msgstr "Exportar Todo"
#: editor/project_export.cpp
-msgid "The given export path doesn't exist:"
-msgstr "La ruta de exportación especificada no existe:"
-
-#: editor/project_export.cpp
-msgid "Export templates for this platform are missing/corrupted:"
-msgstr ""
-"Las plantillas de exportación para esta plataforma faltan/están corruptas:"
-
-#: editor/project_export.cpp
msgid "Export Path"
msgstr "Ruta de Exportación"
@@ -14279,6 +14317,11 @@ msgid "Export templates for this platform are missing:"
msgstr "Faltan plantillas de exportación para esta plataforma:"
#: editor/project_export.cpp
+#, fuzzy
+msgid "Project Export"
+msgstr "Fundadores del Proyecto"
+
+#: editor/project_export.cpp
msgid "Manage Export Templates"
msgstr "Administrar Plantillas de Exportación"
@@ -15831,9 +15874,8 @@ msgid "Attach Node Script"
msgstr "Añadir Script de Nodo"
#: editor/script_editor_debugger.cpp
-#, fuzzy
msgid "Remote %s:"
-msgstr "Remoto "
+msgstr "Remoto %s:"
#: editor/script_editor_debugger.cpp
msgid "Bytes:"
@@ -16706,7 +16748,7 @@ msgstr ""
#: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp
#: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp
-#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp
+#: scene/3d/collision_polygon.cpp
#, fuzzy
msgid "Polygon"
msgstr "Polígonos"
@@ -16879,9 +16921,8 @@ msgid "Disabled GDNative Singleton"
msgstr "GDNative Singleton desactivado"
#: modules/gdnative/gdnative_library_singleton_editor.cpp
-#, fuzzy
msgid "Libraries:"
-msgstr "Bibliotecas: "
+msgstr "Librerías:"
#: modules/gdnative/nativescript/nativescript.cpp
msgid "Class Name"
@@ -17316,7 +17357,6 @@ msgid "Use In Baked Light"
msgstr "Calcular Lightmaps"
#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
-#: scene/resources/navigation_mesh.cpp
msgid "Cell"
msgstr ""
@@ -17346,6 +17386,19 @@ msgstr "Centro"
msgid "Mask"
msgstr ""
+#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
+#, fuzzy
+msgid "Bake Navigation"
+msgstr "Navegación"
+
+#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp
+#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp
+#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp
+#: scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Navigation Layers"
+msgstr "Modo de Navegación"
+
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Plane"
msgstr "Siguiente Plano"
@@ -17760,9 +17813,8 @@ msgstr ""
"trabajo de nodos. Prueba arreglando el nodo."
#: modules/visual_script/visual_script.cpp
-#, fuzzy
msgid "Node returned an invalid sequence output:"
-msgstr "El nodo devolvió una secuencia de salida incorrecta: "
+msgstr "El nodo ha devuelto una secuencia de salida inválida:"
#: modules/visual_script/visual_script.cpp
msgid "Found sequence bit but not the node in the stack, report bug!"
@@ -17771,9 +17823,8 @@ msgstr ""
"problema!"
#: modules/visual_script/visual_script.cpp
-#, fuzzy
msgid "Stack overflow with stack depth:"
-msgstr "Desbordamiento de pila en el nivel: "
+msgstr "Desbordamiento de pila con profundidad de pila:"
#: modules/visual_script/visual_script.cpp
#, fuzzy
@@ -18143,18 +18194,16 @@ msgid "for (elem) in (input):"
msgstr "for (elem) in (input):"
#: modules/visual_script/visual_script_flow_control.cpp
-#, fuzzy
msgid "Input type not iterable:"
-msgstr "El tipo de entrada no es iterable: "
+msgstr "Tipo de entrada no iterable:"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Iterator became invalid"
msgstr "El iterador ya no es correcto"
#: modules/visual_script/visual_script_flow_control.cpp
-#, fuzzy
msgid "Iterator became invalid:"
-msgstr "El iterador ya no es correcto: "
+msgstr "El iterador es inválido:"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Sequence"
@@ -18316,14 +18365,12 @@ msgid "Operator"
msgstr "Iterador"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Invalid argument of type:"
-msgstr ": Argumento incorrecto de tipo: "
+msgstr "Argumento inválido de tipo:"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Invalid arguments:"
-msgstr ": Argumentos incorrectos: "
+msgstr "Argumentos inválidos:"
#: modules/visual_script/visual_script_nodes.cpp
msgid "a if cond, else b"
@@ -18335,14 +18382,12 @@ msgid "Var Name"
msgstr "Nombre"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "VariableGet not found in script:"
-msgstr "VariableGet no encontrado en el script: "
+msgstr "VariableGet no encontrada en el script:"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "VariableSet not found in script:"
-msgstr "VariableSet no encontrado en el script: "
+msgstr "VariableSet no encontrada en el script:"
#: modules/visual_script/visual_script_nodes.cpp
msgid "Preload"
@@ -18871,10 +18916,6 @@ msgid "Could not execute on device."
msgstr "No se ha podido ejecutar en el dispositivo."
#: platform/android/export/export_plugin.cpp
-msgid "Unable to find the 'apksigner' tool."
-msgstr "No se pudo encontrar la herramienta 'apksigner'."
-
-#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -19009,17 +19050,20 @@ msgstr ""
"La versión de \"Target Sdk\" debe ser mayor o igual que la versión de \"Min "
"Sdk\"."
+#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Code Signing"
+msgstr "Firma de código DMG"
+
#: 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."
+"'apksigner' could not be found. Please check that the command is available "
+"in the Android SDK build-tools directory. The resulting %s is unsigned."
msgstr ""
-"No se ha encontrado 'apksigner'.\n"
-"Por favor, compruebe que el comando está disponible en el directorio Android "
-"SDK build-tools.\n"
-"El resultado %s es sin firma."
+"No se ha encontrado el 'apksigner'. Por favor, comprueba que el comando está "
+"disponible en el directorio Android SDK build-tools. El resultado %s es sin "
+"firma."
#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
@@ -19034,6 +19078,10 @@ msgid "Could not find keystore, unable to export."
msgstr "No se pudo encontrar la keystore, no se puedo exportar."
#: platform/android/export/export_plugin.cpp
+msgid "Could not start apksigner executable."
+msgstr "No se ha podido iniciar el ejecutable apksigner."
+
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr "'apksigner' ha retornado con error #%d"
@@ -19063,8 +19111,8 @@ msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr "¡Nombre de archivo inválido! Android APK requiere la extensión *.apk."
#: platform/android/export/export_plugin.cpp
-msgid "Unsupported export format!\n"
-msgstr "¡Formato de exportación no compatible!\n"
+msgid "Unsupported export format!"
+msgstr "¡Formato de exportación no compatible!"
#: platform/android/export/export_plugin.cpp
msgid ""
@@ -19077,27 +19125,23 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Android build version mismatch:\n"
-" Template installed: %s\n"
-" Godot Version: %s\n"
+"Android build version mismatch: Template installed: %s, Godot version: %s. "
"Please reinstall Android build template from 'Project' menu."
msgstr ""
-"La versión de compilación de Android no coincide:\n"
-" Plantilla instalada: %s\n"
-" Versión de Godot: %s\n"
-"Por favor, reinstala la plantilla de compilación de Android desde el menú "
-"'Proyecto'."
+"La versión de compilación de Android no coincide: Plantilla instalada: %s, "
+"versión de Godot: %s. Reinstala la plantilla de compilación de Android desde "
+"el menú \"Proyecto\"."
#: platform/android/export/export_plugin.cpp
msgid ""
-"Unable to overwrite res://android/build/res/*.xml files with project name"
+"Unable to overwrite res://android/build/res/*.xml files with project name."
msgstr ""
"No se puede sobrescribir los archivos res://android/build/res/*.xml con el "
-"nombre del proyecto"
+"mismo nombre del proyecto."
#: platform/android/export/export_plugin.cpp
-msgid "Could not export project files to gradle project\n"
-msgstr "No se pueden exportar los archivos del proyecto a un proyecto gradle\n"
+msgid "Could not export project files to gradle project."
+msgstr "No se pueden exportar los archivos del proyecto a un proyecto gradle."
#: platform/android/export/export_plugin.cpp
msgid "Could not write expansion package file!"
@@ -19109,11 +19153,11 @@ msgstr "Construir Proyecto Android (gradle)"
#: platform/android/export/export_plugin.cpp
msgid ""
-"Building of Android project failed, check output for the error.\n"
+"Building of Android project failed, check output for the error. "
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
-"La construcción del proyecto Android falló, comprueba la salida del error.\n"
-"También puedes visitar docs.godotengine.org para consultar la documentación "
+"La compilación del proyecto Android ha fallado, comprueba la salida del "
+"error. También puedes visitar docs.godotengine.org para ver la documentación "
"de compilación de Android."
#: platform/android/export/export_plugin.cpp
@@ -19129,40 +19173,35 @@ msgstr ""
"directorio del proyecto de gradle para ver los resultados."
#: platform/android/export/export_plugin.cpp
-msgid "Package not found: %s"
-msgstr "Paquete no encontrado:% s"
+msgid "Package not found: \"%s\"."
+msgstr "Paquete no encontrado: \"%s\"."
#: platform/android/export/export_plugin.cpp
msgid "Creating APK..."
msgstr "Creando APK..."
#: platform/android/export/export_plugin.cpp
-msgid ""
-"Could not find template APK to export:\n"
-"%s"
-msgstr ""
-"No se pudo encontrar la plantilla APK para exportar:\n"
-"%s"
+msgid "Could not find template APK to export: \"%s\"."
+msgstr "No se pudo encontrar la plantilla APK para exportar: \"%s\"."
#: platform/android/export/export_plugin.cpp
msgid ""
-"Missing libraries in the export template for the selected architectures: "
-"%s.\n"
+"Missing libraries in the export template for the selected architectures: %s. "
"Please build a template with all required libraries, or uncheck the missing "
"architectures in the export preset."
msgstr ""
-"Faltan bibliotecas en la plantilla de exportación para las arquitecturas "
-"seleccionadas: %s.\n"
-"Por favor, construya una plantilla con todas las bibliotecas necesarias, o "
-"desmarque las arquitecturas que faltan en el preajuste de exportación."
+"Faltan librerías en la plantilla de exportación para las arquitecturas "
+"seleccionadas: %s. Por favor, crea una plantilla con todas las librerías "
+"necesarias, o desmarca las arquitecturas que faltan en el preset de "
+"exportación."
#: platform/android/export/export_plugin.cpp
msgid "Adding files..."
msgstr "Añadiendo archivos ..."
#: platform/android/export/export_plugin.cpp
-msgid "Could not export project files"
-msgstr "No se pudieron exportar los archivos del proyecto"
+msgid "Could not export project files."
+msgstr "No se han podido exportar los archivos del proyecto."
#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
@@ -19401,6 +19440,17 @@ msgstr "CustomNode"
msgid "Custom BG Color"
msgstr "CustomNode"
+#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Prepare Templates"
+msgstr "Administrar Plantillas"
+
+#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Export template not found."
+msgstr "Plantilla release personalizada no encontrada."
+
#: platform/iphone/export/export.cpp
msgid "App Store Team ID not specified - cannot configure the project."
msgstr ""
@@ -19423,20 +19473,29 @@ msgid "Run exported HTML in the system's default browser."
msgstr "Ejecutar HTML exportado en el navegador predeterminado del sistema."
#: platform/javascript/export/export.cpp
-msgid "Could not open template for export:"
-msgstr "No se pudo abrir la plantilla para exportar:"
+msgid "Could not open template for export: \"%s\"."
+msgstr "No se pudo abrir la plantilla para la exportación: \"%s\"."
#: platform/javascript/export/export.cpp
-msgid "Invalid export template:"
-msgstr "Plantilla de exportación inválida:"
+msgid "Invalid export template: \"%s\"."
+msgstr "Plantilla de exportación inválida: \"%s\"."
#: platform/javascript/export/export.cpp
-msgid "Could not write file:"
-msgstr "No se puede escribir en el archivo:"
+msgid "Could not write file: \"%s\"."
+msgstr "No se pudo escribir el archivo: \"%s\"."
+
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Icon Creation"
+msgstr "Asignar Margen"
#: platform/javascript/export/export.cpp
-msgid "Could not read file:"
-msgstr "No se pudo leer el archivo:"
+msgid "Could not read file: \"%s\"."
+msgstr "No se pudo leer el archivo: \"%s\"."
+
+#: platform/javascript/export/export.cpp
+msgid "PWA"
+msgstr ""
#: platform/javascript/export/export.cpp
msgid "Variant"
@@ -19512,16 +19571,16 @@ msgid "Icon 512 X 512"
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not read HTML shell:"
-msgstr "No se pudo leer el shell HTML:"
+msgid "Could not read HTML shell: \"%s\"."
+msgstr "No se ha podido leer el HTML shell: \"%s\"."
#: platform/javascript/export/export.cpp
-msgid "Could not create HTTP server directory:"
-msgstr "No se pudo crear el directorio del servidor HTTP:"
+msgid "Could not create HTTP server directory: %s."
+msgstr "No se ha podido crear el directorio del servidor HTTP: %s."
#: platform/javascript/export/export.cpp
-msgid "Error starting HTTP server:"
-msgstr "Error al iniciar el servidor HTTP:"
+msgid "Error starting HTTP server: %d."
+msgstr "Error al iniciar el servidor HTTP: %d."
#: platform/javascript/export/export.cpp
msgid "Web"
@@ -19812,9 +19871,26 @@ msgid "Apple Team ID"
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Could not open icon file \"%s\"."
+msgstr "No se ha podido abrir el archivo de icono \"%s\"."
+
+#: platform/osx/export/export.cpp
+msgid "Could not start xcrun executable."
+msgstr "No se ha podido iniciar el ejecutable xcrun."
+
+#: platform/osx/export/export.cpp
+msgid "Notarization failed."
+msgstr "La notarización ha fallado."
+
+#: platform/osx/export/export.cpp
+msgid "Notarization request UUID: \"%s\""
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
msgid ""
-"Note: The notarization process generally takes less than an hour. When the "
-"process is completed, you'll receive an email."
+"The notarization process generally takes less than an hour. When the process "
+"is completed, you'll receive an email."
msgstr ""
"Nota: El proceso de notarización generalmente toma menos de una hora. Cuando "
"se complete el proceso, recibirá un correo electrónico."
@@ -19836,16 +19912,76 @@ msgstr ""
"notarial a la aplicación exportada (opcional):"
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+"El sellado de tiempo no es compatible con la firma ad-hoc, y se desactivará!"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+"Hardened Runtime no es compatible con la firma ad-hoc, y se desactivará!"
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign failed with error \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign require regex module."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Could not start codesign executable, make sure Xcode command line tools are "
+"installed."
+msgstr ""
+
+#: platform/osx/export/export.cpp platform/windows/export/export.cpp
msgid "No identity found."
msgstr "No se encontró identidad."
#: platform/osx/export/export.cpp
+msgid "Cannot sign file %s."
+msgstr "No se puede firmar el archivo %s."
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Relative symlinks are not supported, exported \"%s\" might be broken!"
+msgstr ""
+"Los enlaces simbólicos relativos no son compatibles con este sistema "
+"operativo, ¡el proyecto exportado podría estar dañado!"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "DMG Creation"
+msgstr "Direcciones"
+
+#: platform/osx/export/export.cpp
+msgid "Could not start hdiutil executable."
+msgstr "No se ha podido iniciar el ejecutable hdiutil."
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed - file exists."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed."
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid "Creating app bundle"
msgstr "Crear paquete de aplicaciones"
#: platform/osx/export/export.cpp
-msgid "Could not find template app to export:"
-msgstr "No se pudo encontrar la aplicación de plantilla para exportar:"
+msgid "Could not find template app to export: \"%s\"."
+msgstr ""
+"No se ha podido encontrar la plantilla de la aplicación a exportar: \"%s\"."
+
+#: platform/osx/export/export.cpp
+msgid "Invalid export format."
+msgstr "Formato de exportación inválido."
#: platform/osx/export/export.cpp
msgid ""
@@ -19856,8 +19992,9 @@ msgstr ""
"operativo, ¡el proyecto exportado podría estar dañado!"
#: platform/osx/export/export.cpp
+#, fuzzy
msgid ""
-"Requested template binary '%s' not found. It might be missing from your "
+"Requested template binary \"%s\" not found. It might be missing from your "
"template archive."
msgstr ""
"Plantilla binaria solicitada '%s' no encontrada. Es posible que falte en el "
@@ -19904,6 +20041,15 @@ msgid "Sending archive for notarization"
msgstr "Enviando archivo para notarización"
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "ZIP Creation"
+msgstr "Proyecto"
+
+#: platform/osx/export/export.cpp
+msgid "Could not open file to read from path \"%s\"."
+msgstr "No se pudo abrir el archivo a leer de la ruta \"%s\"."
+
+#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr "Identificador de paquete no válido:"
@@ -20257,6 +20403,10 @@ msgid "Debug Algorithm"
msgstr "Depurador"
#: platform/windows/export/export.cpp
+msgid "Failed to rename temporary file \"%s\"."
+msgstr "Fallo al renombrar el archivo temporal \"%s\"."
+
+#: platform/windows/export/export.cpp
msgid "Identity Type"
msgstr ""
@@ -20301,6 +20451,76 @@ msgid "Trademarks"
msgstr ""
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Resources Modification"
+msgstr "Notificaciones Push"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find rcedit executable at \"%s\"."
+msgstr "No se pudo encontrar la keystore, no se puedo exportar."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find wine executable at \"%s\"."
+msgstr "No se pudo encontrar la keystore, no se puedo exportar."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid ""
+"Could not start rcedit executable, configure rcedit path in the Editor "
+"Settings (Export > Windows > Rcedit)."
+msgstr ""
+"La herramienta rcedit debe configurarse en la configuración del editor "
+"(Exportar > Windows > Rcedit) para cambiar los datos de información del "
+"ícono o la aplicación."
+
+#: platform/windows/export/export.cpp
+msgid ""
+"rcedit failed to modify executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find signtool executable at \"%s\"."
+msgstr "No se pudo encontrar la keystore, no se puedo exportar."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find osslsigncode executable at \"%s\"."
+msgstr "No se pudo encontrar la keystore, no se puedo exportar."
+
+#: platform/windows/export/export.cpp
+msgid "Invalid identity type."
+msgstr "Tipo de identificador inválido."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid timestamp server."
+msgstr "Nombre inválido."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid ""
+"Could not start signtool executable, configure signtool path in the Editor "
+"Settings (Export > Windows > Signtool)."
+msgstr ""
+"La herramienta rcedit debe configurarse en la configuración del editor "
+"(Exportar > Windows > Rcedit) para cambiar los datos de información del "
+"ícono o la aplicación."
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Signtool failed to sign executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Failed to remove temporary file \"%s\"."
+msgstr "No se ha podido eliminar el archivo temporal \"%s\"."
+
+#: platform/windows/export/export.cpp
msgid ""
"The rcedit tool must be configured in the Editor Settings (Export > Windows "
"> Rcedit) to change the icon or app information data."
@@ -20322,6 +20542,23 @@ msgid "Invalid product version:"
msgstr "Versión de producto no válida:"
#: platform/windows/export/export.cpp
+msgid "Windows executables cannot be >= 4 GiB."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+#, fuzzy
+msgid "Failed to open executable file \"%s\"."
+msgstr "Archivo ejecutable no válido."
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable file header corrupted."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable \"pck\" section not found."
+msgstr ""
+
+#: platform/windows/export/export.cpp
#, fuzzy
msgid "Windows"
msgstr "Nueva Ventana"
@@ -20338,6 +20575,10 @@ msgstr ""
msgid "Wine"
msgstr ""
+#: platform/x11/export/export.cpp
+msgid "32-bit executables cannot have embedded data >= 4 GiB."
+msgstr ""
+
#: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp
#: scene/resources/texture.cpp
#, fuzzy
@@ -20465,7 +20706,8 @@ msgstr ""
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/3d/light.cpp scene/3d/reflection_probe.cpp
-#: scene/3d/visual_instance.cpp scene/resources/material.cpp
+#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp
+#: scene/resources/material.cpp
msgid "Max Distance"
msgstr "Distancia Maxima"
@@ -21270,6 +21512,18 @@ msgstr ""
msgid "Edge Connection Margin"
msgstr "Margen de Conexión de Bordes"
+#: scene/2d/navigation_2d.cpp
+msgid ""
+"'Navigation2D' node and 'Navigation2D.get_simple_path()' are deprecated and "
+"will be removed in a future version. Use 'Navigation2DServer.map_get_path()' "
+"instead."
+msgstr ""
+
+#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
+#, fuzzy
+msgid "Path Desired Distance"
+msgstr "Distancia de la Ruta U"
+
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
msgid "Target Desired Distance"
msgstr ""
@@ -21328,17 +21582,19 @@ msgstr ""
"funcione. Por favor, establece la propiedad o dibuja un polígono."
#: scene/2d/navigation_polygon.cpp
-msgid ""
-"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
-"node. It only provides navigation data."
-msgstr ""
-"NavigationPolygonInstance debe ser hijo o nieto de un nodo Navigation2D. "
-"Solo provee datos de navegación."
-
-#: scene/2d/navigation_polygon.cpp
msgid "Navpoly"
msgstr ""
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Enter Cost"
+msgstr "Centro Inferior"
+
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Travel Cost"
+msgstr "Viaje"
+
#: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp
#: scene/main/canvas_layer.cpp
msgid "Rotation Degrees"
@@ -22538,6 +22794,13 @@ msgstr ""
msgid "Transform Normals"
msgstr "Transformar Normales"
+#: scene/3d/navigation.cpp
+msgid ""
+"'Navigation' node and 'Navigation.get_simple_path()' are deprecated and will "
+"be removed in a future version. Use 'NavigationServer.map_get_path()' "
+"instead."
+msgstr ""
+
#: scene/3d/navigation.cpp scene/resources/curve.cpp
#, fuzzy
msgid "Up Vector"
@@ -22563,14 +22826,6 @@ msgid ""
"The NavigationAgent can be used only under a Spatial inheriting parent node."
msgstr "El NavigationAgent sólo puede utilizarse bajo un nodo spatial."
-#: scene/3d/navigation_mesh_instance.cpp
-msgid ""
-"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
-"It only provides navigation data."
-msgstr ""
-"NavigationMeshInstance debe ser hijo o nieto de un nodo Navigation. Ya que "
-"sólo proporciona los datos de navegación."
-
#: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp
#, fuzzy
msgid "NavMesh"
@@ -23581,9 +23836,8 @@ msgid "Cast Shadow"
msgstr "Sombra Proyectada"
#: scene/3d/visual_instance.cpp
-#, fuzzy
msgid "Extra Cull Margin"
-msgstr "Argumentos extras de llamada:"
+msgstr "Margen de Sacrificio Extra"
#: scene/3d/visual_instance.cpp
#, fuzzy
@@ -23674,9 +23928,8 @@ msgid "Delay"
msgstr ""
#: scene/animation/animation_blend_tree.cpp
-#, fuzzy
msgid "Random Delay"
-msgstr "Inclinación al azar:"
+msgstr "Retraso Aleatorio"
#: scene/animation/animation_blend_tree.cpp
#, fuzzy
@@ -24161,9 +24414,8 @@ msgid "Right Disconnects"
msgstr "Desconectar"
#: scene/gui/graph_edit.cpp
-#, fuzzy
msgid "Scroll Offset"
-msgstr "Desplazamiento de Cuadrícula:"
+msgstr "Desplazamiento de Scroll"
#: scene/gui/graph_edit.cpp
msgid "Snap Distance"
@@ -25267,6 +25519,16 @@ msgid "3D Physics"
msgstr "Física"
#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "2D Navigation"
+msgstr "Navegación"
+
+#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "3D Navigation"
+msgstr "Navegación"
+
+#: scene/register_scene_types.cpp
msgid "Use hiDPI"
msgstr ""
@@ -26001,12 +26263,11 @@ msgstr "Fuente Principal"
#: scene/resources/default_theme/default_theme.cpp
#, fuzzy
msgid "Table H Separation"
-msgstr "Separación:"
+msgstr "Separación de Tabla H"
#: scene/resources/default_theme/default_theme.cpp
-#, fuzzy
msgid "Table V Separation"
-msgstr "Separación:"
+msgstr "Separación de Tabla V"
#: scene/resources/default_theme/default_theme.cpp
msgid "Margin Left"
@@ -26265,9 +26526,8 @@ msgid "Max Steps"
msgstr "Paso"
#: scene/resources/environment.cpp
-#, fuzzy
msgid "Fade In"
-msgstr "Fundido de entrada (s):"
+msgstr "Fundido de Entrada"
#: scene/resources/environment.cpp
msgid "Fade Out"
@@ -26409,9 +26669,8 @@ msgid "Color Correction"
msgstr "Corrección del Color"
#: scene/resources/font.cpp
-#, fuzzy
msgid "Ascent"
-msgstr "Recientes:"
+msgstr "Aumento"
#: scene/resources/font.cpp
#, fuzzy
@@ -26424,9 +26683,8 @@ msgid "Raw Data"
msgstr "Profundidad"
#: scene/resources/gradient.cpp
-#, fuzzy
msgid "Offsets"
-msgstr "Offset:"
+msgstr "Desplazamientos"
#: scene/resources/height_map_shape.cpp
msgid "Map Width"
@@ -26662,7 +26920,7 @@ msgstr "Transmisión"
msgid "Refraction"
msgstr "Refracción"
-#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp
+#: scene/resources/material.cpp
msgid "Detail"
msgstr ""
@@ -26744,8 +27002,12 @@ msgid "Visible Instance Count"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+msgid "Sampling"
+msgstr "Muestreo"
+
+#: scene/resources/navigation_mesh.cpp
#, fuzzy
-msgid "Sample Partition Type"
+msgid "Partition Type"
msgstr "Establecer tipo de base de variación"
#: scene/resources/navigation_mesh.cpp
@@ -26762,10 +27024,15 @@ msgid "Source Group Name"
msgstr "Fuente"
#: scene/resources/navigation_mesh.cpp
-msgid "Agent"
+msgid "Cells"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Agents"
+msgstr "Segmentos"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Max Climb"
msgstr ""
@@ -26775,11 +27042,16 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
+msgid "Regions"
+msgstr "Región"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
msgid "Merge Size"
msgstr "Unir desde escena"
#: scene/resources/navigation_mesh.cpp
-msgid "Edge"
+msgid "Edges"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -26791,6 +27063,11 @@ msgid "Verts Per Poly"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Details"
+msgstr "Mostrar Por Defecto"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Sample Distance"
msgstr "Distancia de Muestreo"
@@ -26807,9 +27084,19 @@ msgid "Ledge Spans"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Filter Walkable Low Height Spans"
+msgid "Walkable Low Height Spans"
msgstr ""
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB"
+msgstr "Generando AABB"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB Offset"
+msgstr "Desplazamiento Base"
+
#: scene/resources/occluder_shape.cpp
msgid "Spheres"
msgstr ""
@@ -27209,6 +27496,11 @@ msgid "Scenario"
msgstr "Escena"
#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Navigation Map"
+msgstr "Navegación"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
msgid "Direct Space State"
msgstr ""
@@ -27226,6 +27518,26 @@ msgstr "Izquierda Lineal"
msgid "Default Angular Damp"
msgstr ""
+#: scene/resources/world.cpp
+#, fuzzy
+msgid "Default Map Up"
+msgstr "Escalonado de Flotantes por Defecto"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Size"
+msgstr "Vista Previa Por Defecto"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Height"
+msgstr "Prueba"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Edge Connection Margin"
+msgstr "Margen de Conexión de Bordes"
+
#: scene/resources/world_2d.cpp
msgid "Canvas"
msgstr ""
@@ -27309,9 +27621,8 @@ msgstr ""
#: servers/audio/effects/audio_effect_chorus.cpp
#: servers/audio/effects/audio_effect_delay.cpp
#: servers/audio/effects/audio_effect_panner.cpp
-#, fuzzy
msgid "Pan"
-msgstr "Plano:"
+msgstr "Pan"
#: servers/audio/effects/audio_effect_compressor.cpp
#: servers/audio/effects/audio_effect_filter.cpp
@@ -27929,7 +28240,7 @@ msgstr "Ver Eliminación de Oclusión"
#: servers/visual_server.cpp
msgid "Max Active Spheres"
-msgstr ""
+msgstr "Esferas Activas Máximas"
#: servers/visual_server.cpp
msgid "Max Active Polygons"
diff --git a/editor/translations/es_AR.po b/editor/translations/es_AR.po
index 0ee8ba09ff..aa0a7c6258 100644
--- a/editor/translations/es_AR.po
+++ b/editor/translations/es_AR.po
@@ -19,13 +19,14 @@
# Joakker <joaquinandresleon108@gmail.com>, 2020.
# M3CG <cgmario1999@gmail.com>, 2021, 2022.
# Manuel González <mgoopazo@gmail.com>, 2021.
+# emnrx <emanuelermancia@gmail.com>, 2022.
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: 2022-02-28 13:54+0000\n"
-"Last-Translator: M3CG <cgmario1999@gmail.com>\n"
+"PO-Revision-Date: 2022-06-21 15:56+0000\n"
+"Last-Translator: Lisandro Lorea <lisandrolorea@gmail.com>\n"
"Language-Team: Spanish (Argentina) <https://hosted.weblate.org/projects/"
"godot-engine/godot/es_AR/>\n"
"Language: es_AR\n"
@@ -33,110 +34,97 @@ 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.11.1-dev\n"
+"X-Generator: Weblate 4.13.1-dev\n"
#: core/bind/core_bind.cpp main/main.cpp
msgid "Tablet Driver"
-msgstr ""
+msgstr "Controlador de Tableta"
#: core/bind/core_bind.cpp
-#, fuzzy
msgid "Clipboard"
-msgstr "El portapapeles está vacío!"
+msgstr "Portapapeles"
#: core/bind/core_bind.cpp
-#, fuzzy
msgid "Current Screen"
msgstr "Escena Actual"
#: core/bind/core_bind.cpp
msgid "Exit Code"
-msgstr ""
+msgstr "Código de Salida"
#: core/bind/core_bind.cpp
-#, fuzzy
msgid "V-Sync Enabled"
-msgstr "Activar"
+msgstr "V-Sync Activado"
#: core/bind/core_bind.cpp main/main.cpp
msgid "V-Sync Via Compositor"
-msgstr ""
+msgstr "V-Sync Via Compositor"
#: core/bind/core_bind.cpp main/main.cpp
msgid "Delta Smoothing"
-msgstr ""
+msgstr "Suavizado Delta"
#: core/bind/core_bind.cpp
-#, fuzzy
msgid "Low Processor Usage Mode"
-msgstr "Modo Mover"
+msgstr "Modo de Bajo Uso del Procesador"
#: core/bind/core_bind.cpp
msgid "Low Processor Usage Mode Sleep (µsec)"
msgstr ""
#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp
-#, fuzzy
msgid "Keep Screen On"
-msgstr "Mantener el Depurador Abierto"
+msgstr "Mantener Pantalla Encendida"
#: core/bind/core_bind.cpp
-#, fuzzy
msgid "Min Window Size"
-msgstr "Tamaño de Outline:"
+msgstr "Tamaño Mínimo de Ventana"
#: core/bind/core_bind.cpp
-#, fuzzy
msgid "Max Window Size"
-msgstr "Tamaño de Outline:"
+msgstr "Tamaño Máximo de Ventana"
#: core/bind/core_bind.cpp
-#, fuzzy
msgid "Screen Orientation"
-msgstr "Operador Screen(trama)."
+msgstr "Orientación de Pantalla"
#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp
#: platform/uwp/os_uwp.cpp
-#, fuzzy
msgid "Window"
-msgstr "Nueva Ventana"
+msgstr "Ventana"
#: core/bind/core_bind.cpp core/project_settings.cpp
-#, fuzzy
msgid "Borderless"
-msgstr "Píxeles del Borde"
+msgstr "Sin Bordes"
#: core/bind/core_bind.cpp
msgid "Per Pixel Transparency Enabled"
-msgstr ""
+msgstr "Transparencia Por Píxel Activada"
#: core/bind/core_bind.cpp core/project_settings.cpp
-#, fuzzy
msgid "Fullscreen"
-msgstr "Act./Desact. Pantalla Completa"
+msgstr "Pantalla Completa"
#: core/bind/core_bind.cpp
msgid "Maximized"
-msgstr ""
+msgstr "Maximizada"
#: core/bind/core_bind.cpp
-#, fuzzy
msgid "Minimized"
-msgstr "Inicializar"
+msgstr "Minimizada"
#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp
#: scene/gui/graph_node.cpp
msgid "Resizable"
-msgstr ""
+msgstr "Redimensionable"
#: core/bind/core_bind.cpp core/os/input_event.cpp scene/2d/node_2d.cpp
#: scene/2d/physics_body_2d.cpp scene/2d/remote_transform_2d.cpp
#: scene/3d/physics_body.cpp scene/3d/remote_transform.cpp
#: scene/gui/control.cpp scene/gui/line_edit.cpp
#: scene/resources/default_theme/default_theme.cpp
-#, fuzzy
msgid "Position"
-msgstr "Posición del Panel"
+msgstr "Posición"
#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp
#: main/main.cpp modules/gridmap/grid_map.cpp
@@ -147,65 +135,56 @@ msgstr "Posición del Panel"
#: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp
#: scene/resources/style_box.cpp scene/resources/texture.cpp
#: scene/resources/visual_shader.cpp servers/visual_server.cpp
-#, fuzzy
msgid "Size"
-msgstr "Tamaño:"
+msgstr "Tamaño"
#: core/bind/core_bind.cpp
msgid "Endian Swap"
msgstr ""
#: core/bind/core_bind.cpp
-#, fuzzy
msgid "Editor Hint"
-msgstr "Editor"
+msgstr "Sugerencia del Editor"
#: core/bind/core_bind.cpp
msgid "Print Error Messages"
-msgstr ""
+msgstr "Imprimir Mensajes de Error"
#: core/bind/core_bind.cpp
-#, fuzzy
msgid "Iterations Per Second"
-msgstr "Modo de Interpolación"
+msgstr "Iteraciones Por Segundo"
#: core/bind/core_bind.cpp
-#, fuzzy
msgid "Target FPS"
-msgstr "Objetivo"
+msgstr "Objetivo de FPS"
#: core/bind/core_bind.cpp
-#, fuzzy
msgid "Time Scale"
-msgstr "Nodo TimeScale"
+msgstr "Escala de Tiempo"
#: core/bind/core_bind.cpp main/main.cpp
-#, fuzzy
msgid "Physics Jitter Fix"
-msgstr "Frames de Física %"
+msgstr "Corrección de Fluctuaciones(Jitter) de Física"
#: core/bind/core_bind.cpp editor/plugins/version_control_editor_plugin.cpp
msgid "Error"
msgstr "Error"
#: core/bind/core_bind.cpp
-#, fuzzy
msgid "Error String"
-msgstr "Error al Guardar"
+msgstr "String de Error"
#: core/bind/core_bind.cpp
-#, fuzzy
msgid "Error Line"
-msgstr "Error al Guardar"
+msgstr "Línea de Error"
#: core/bind/core_bind.cpp
-#, fuzzy
msgid "Result"
-msgstr "Resultados de la Búsqueda"
+msgstr "Resultado"
#: core/command_queue_mt.cpp core/message_queue.cpp main/main.cpp
msgid "Memory"
-msgstr ""
+msgstr "Memoria"
#: core/command_queue_mt.cpp core/message_queue.cpp
#: core/register_core_types.cpp drivers/gles2/rasterizer_canvas_base_gles2.cpp
@@ -216,16 +195,15 @@ msgstr ""
#: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h
#: servers/visual_server.cpp
msgid "Limits"
-msgstr ""
+msgstr "Límites"
#: core/command_queue_mt.cpp
-#, fuzzy
msgid "Command Queue"
-msgstr "Command: Rotar"
+msgstr "Cola de comando"
#: core/command_queue_mt.cpp
msgid "Multithreading Queue Size (KB)"
-msgstr ""
+msgstr "Tamaño de la Cola de Multithreading (KB)"
#: core/func_ref.cpp modules/visual_script/visual_script_builtin_funcs.cpp
#: modules/visual_script/visual_script_func_nodes.cpp
@@ -236,27 +214,24 @@ msgstr "Función"
#: core/image.cpp core/packed_data_container.cpp scene/2d/polygon_2d.cpp
#: scene/3d/baked_lightmap.cpp scene/3d/gi_probe.cpp
-#, fuzzy
msgid "Data"
-msgstr "Con Data"
+msgstr "Datos"
#: core/io/file_access_network.cpp core/register_core_types.cpp
-#: editor/editor_settings.cpp main/main.cpp
+#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
#: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h
-#, fuzzy
+#: scene/gui/file_dialog.cpp
msgid "Network"
-msgstr "Profiler de Red"
+msgstr "Red"
#: core/io/file_access_network.cpp
-#, fuzzy
msgid "Remote FS"
-msgstr "Remoto "
+msgstr "FS Remoto"
#: core/io/file_access_network.cpp
-#, fuzzy
msgid "Page Size"
-msgstr "Página: "
+msgstr "Tamaño de Página"
#: core/io/file_access_network.cpp
msgid "Page Read Ahead"
@@ -264,21 +239,19 @@ msgstr ""
#: core/io/http_client.cpp
msgid "Blocking Mode Enabled"
-msgstr ""
+msgstr "Modo Bloqueante Activado"
#: core/io/http_client.cpp
-#, fuzzy
msgid "Connection"
-msgstr "Conectar"
+msgstr "Conección"
#: core/io/http_client.cpp
msgid "Read Chunk Size"
msgstr ""
#: core/io/marshalls.cpp
-#, fuzzy
msgid "Object ID"
-msgstr "Objetos Dibujados:"
+msgstr "ID de Objeto"
#: core/io/multiplayer_api.cpp core/io/packet_peer.cpp
#, fuzzy
@@ -300,14 +273,12 @@ msgid "Root Node"
msgstr "Nombre del nodo raíz"
#: core/io/networked_multiplayer_peer.cpp
-#, fuzzy
msgid "Refuse New Connections"
-msgstr "Conectar"
+msgstr "Rechazar Nuevas Conexiones"
#: core/io/networked_multiplayer_peer.cpp
-#, fuzzy
msgid "Transfer Mode"
-msgstr "Tipo de Transformación"
+msgstr "Modo de Transferencia"
#: core/io/packet_peer.cpp
msgid "Encode Buffer Max Size"
@@ -406,28 +377,36 @@ msgstr ""
msgid "Max Size (KB)"
msgstr ""
+#: core/os/input.cpp
+#, fuzzy
+msgid "Mouse Mode"
+msgstr "Modo Mover"
+
+#: core/os/input.cpp
+#, fuzzy
+msgid "Use Accumulated Input"
+msgstr "Eliminar Entrada"
+
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: servers/audio_server.cpp
msgid "Device"
msgstr "Dispositivo"
#: core/os/input_event.cpp
-#, fuzzy
msgid "Alt"
-msgstr "Todos"
+msgstr "Alt"
#: core/os/input_event.cpp
msgid "Shift"
-msgstr ""
+msgstr "Shift"
#: core/os/input_event.cpp
-#, fuzzy
msgid "Control"
-msgstr "Control de Versiones"
+msgstr "Control"
#: core/os/input_event.cpp
msgid "Meta"
-msgstr ""
+msgstr "Meta"
#: core/os/input_event.cpp
#, fuzzy
@@ -437,9 +416,8 @@ msgstr "Comunidad"
#: core/os/input_event.cpp scene/2d/touch_screen_button.cpp
#: scene/gui/base_button.cpp scene/gui/texture_button.cpp
#: scene/resources/default_theme/default_theme.cpp
-#, fuzzy
msgid "Pressed"
-msgstr "Preset"
+msgstr "Presionado"
#: core/os/input_event.cpp
#, fuzzy
@@ -453,35 +431,31 @@ msgstr "Tecla Física"
#: core/os/input_event.cpp
msgid "Unicode"
-msgstr ""
+msgstr "Unicode"
#: core/os/input_event.cpp
msgid "Echo"
msgstr ""
#: core/os/input_event.cpp scene/gui/base_button.cpp
-#, fuzzy
msgid "Button Mask"
-msgstr "Botón"
+msgstr "Máscara de Botón"
#: core/os/input_event.cpp scene/2d/node_2d.cpp scene/gui/control.cpp
-#, fuzzy
msgid "Global Position"
-msgstr "Constante Global"
+msgstr "Posición Global"
#: core/os/input_event.cpp
-#, fuzzy
msgid "Factor"
-msgstr "Vector"
+msgstr "Factor"
#: core/os/input_event.cpp
-#, fuzzy
msgid "Button Index"
-msgstr "Indice de Botones de Mouse:"
+msgstr "Ãndice de Botones"
#: core/os/input_event.cpp
msgid "Doubleclick"
-msgstr ""
+msgstr "Dobleclick"
#: core/os/input_event.cpp
msgid "Tilt"
@@ -501,9 +475,8 @@ msgstr "Ajuste Relativo"
#: scene/3d/cpu_particles.cpp scene/3d/interpolated_camera.cpp
#: scene/animation/animation_player.cpp scene/resources/environment.cpp
#: scene/resources/particles_material.cpp
-#, fuzzy
msgid "Speed"
-msgstr "Velocidad:"
+msgstr "Velocidad"
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: scene/3d/sprite_3d.cpp
@@ -511,14 +484,12 @@ msgid "Axis"
msgstr "Eje"
#: core/os/input_event.cpp
-#, fuzzy
msgid "Axis Value"
-msgstr "Fijar Valor"
+msgstr "Valor de Eje"
#: core/os/input_event.cpp modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "Index"
-msgstr "Indice:"
+msgstr "Ãndice"
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: modules/visual_script/visual_script_nodes.cpp
@@ -529,42 +500,38 @@ msgstr "Acción"
#: core/os/input_event.cpp scene/resources/environment.cpp
#: scene/resources/material.cpp
msgid "Strength"
-msgstr ""
+msgstr "Fuerza"
#: core/os/input_event.cpp
msgid "Delta"
msgstr ""
#: core/os/input_event.cpp
-#, fuzzy
msgid "Channel"
-msgstr "Cambiar"
+msgstr "Canal"
#: core/os/input_event.cpp main/main.cpp
-#, fuzzy
msgid "Message"
-msgstr "Mensaje de Commit"
+msgstr "Mensaje"
#: core/os/input_event.cpp
-#, fuzzy
msgid "Pitch"
-msgstr "Cabeceo:"
+msgstr "Tono"
#: core/os/input_event.cpp scene/2d/cpu_particles_2d.cpp
#: scene/2d/physics_body_2d.cpp scene/3d/cpu_particles.cpp
#: scene/3d/physics_body.cpp scene/resources/particles_material.cpp
#, fuzzy
msgid "Velocity"
-msgstr "Orbitar Vista Hacia La Derecha"
+msgstr "Velocidad"
#: core/os/input_event.cpp
msgid "Instrument"
msgstr ""
#: core/os/input_event.cpp
-#, fuzzy
msgid "Controller Number"
-msgstr "Numero de Línea:"
+msgstr "Número de Controlador"
#: core/os/input_event.cpp
msgid "Controller Value"
@@ -573,9 +540,8 @@ msgstr ""
#: core/project_settings.cpp editor/editor_node.cpp main/main.cpp
#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
#: platform/windows/export/export.cpp
-#, fuzzy
msgid "Application"
-msgstr "Acción"
+msgstr "Aplicación"
#: core/project_settings.cpp main/main.cpp
#, fuzzy
@@ -608,7 +574,8 @@ msgstr "Descripción"
#: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
-#: main/main.cpp
+#: main/main.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp
msgid "Run"
msgstr "Ejecutar"
@@ -618,26 +585,24 @@ msgid "Main Scene"
msgstr "Escena Principal"
#: core/project_settings.cpp
-#, fuzzy
msgid "Disable stdout"
-msgstr "Desactivar Autotile"
+msgstr "Desactivar stdout"
#: core/project_settings.cpp
-#, fuzzy
msgid "Disable stderr"
-msgstr "Desactivar Ãtem"
+msgstr "Desactivar stderr"
#: core/project_settings.cpp
msgid "Use Hidden Project Data Directory"
-msgstr ""
+msgstr "Utilizar el Directorio de Datos Ocultos del Proyecto"
#: core/project_settings.cpp
msgid "Use Custom User Dir"
-msgstr ""
+msgstr "Utilizar Directorio de Usuario Personalizado"
#: core/project_settings.cpp
msgid "Custom User Dir Name"
-msgstr ""
+msgstr "Nombre de Directorio de Usuario Personalizado"
#: core/project_settings.cpp main/main.cpp
#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
@@ -650,7 +615,7 @@ msgstr "Mostrar Todo"
#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp
#: scene/3d/label_3d.cpp scene/gui/text_edit.cpp scene/resources/texture.cpp
msgid "Width"
-msgstr ""
+msgstr "Ancho"
#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp
#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp
@@ -658,9 +623,8 @@ msgstr ""
#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp
#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp
#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp
-#, fuzzy
msgid "Height"
-msgstr "Luz"
+msgstr "Altura"
#: core/project_settings.cpp
msgid "Always On Top"
@@ -699,32 +663,32 @@ msgid "Main Run Args"
msgstr "Argumentos de Escena Principal:"
#: core/project_settings.cpp
+#, fuzzy
+msgid "Scene Naming"
+msgstr "Ruta a la Escena:"
+
+#: core/project_settings.cpp
msgid "Search In File Extensions"
-msgstr ""
+msgstr "Buscar En Extensiones de Archivos"
#: core/project_settings.cpp
msgid "Script Templates Search Path"
-msgstr ""
-
-#: core/project_settings.cpp editor/editor_node.cpp
-#: editor/plugins/version_control_editor_plugin.cpp
-msgid "Version Control"
-msgstr "Control de Versiones"
+msgstr "Ruta de Búsqueda de Plantillas de Scripts"
#: core/project_settings.cpp
-msgid "Autoload On Startup"
-msgstr ""
+#, fuzzy
+msgid "Version Control Autoload On Startup"
+msgstr "Sistema de Control de Versiones"
#: core/project_settings.cpp
#, fuzzy
-msgid "Plugin Name"
-msgstr "Nombre del Plugin:"
+msgid "Version Control Plugin Name"
+msgstr "Control de Versiones"
#: core/project_settings.cpp scene/2d/collision_object_2d.cpp
#: scene/3d/collision_object.cpp scene/gui/control.cpp
-#, fuzzy
msgid "Input"
-msgstr "Agregar Entrada"
+msgstr "Entrada"
#: core/project_settings.cpp
msgid "UI Accept"
@@ -807,12 +771,11 @@ msgstr " (Física)"
#: scene/3d/physics_body.cpp scene/resources/world.cpp
#: servers/physics/space_sw.cpp servers/physics_server.cpp
msgid "3D"
-msgstr ""
+msgstr "3D"
#: core/project_settings.cpp
-#, fuzzy
msgid "Smooth Trimesh Collision"
-msgstr "Crear Collider Triangular Hermano"
+msgstr "Colisión Suave de Trimesh"
#: core/project_settings.cpp drivers/gles2/rasterizer_canvas_base_gles2.cpp
#: drivers/gles2/rasterizer_scene_gles2.cpp
@@ -823,9 +786,8 @@ msgstr "Crear Collider Triangular Hermano"
#: modules/lightmapper_cpu/register_types.cpp scene/main/scene_tree.cpp
#: scene/main/viewport.cpp servers/visual/visual_server_scene.cpp
#: servers/visual_server.cpp
-#, fuzzy
msgid "Rendering"
-msgstr "Renderizador:"
+msgstr "Renderización"
#: core/project_settings.cpp drivers/gles2/rasterizer_storage_gles2.cpp
#: drivers/gles3/rasterizer_scene_gles3.cpp
@@ -835,13 +797,13 @@ msgstr "Renderizador:"
#: scene/resources/multimesh.cpp servers/visual/visual_server_scene.cpp
#: servers/visual_server.cpp
msgid "Quality"
-msgstr ""
+msgstr "Calidad"
#: core/project_settings.cpp scene/gui/file_dialog.cpp
-#: scene/main/scene_tree.cpp servers/visual_server.cpp
-#, fuzzy
+#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp
+#: servers/visual_server.cpp
msgid "Filters"
-msgstr "Filtros:"
+msgstr "Filtros"
#: core/project_settings.cpp scene/main/viewport.cpp
msgid "Sharpen Intensity"
@@ -861,9 +823,8 @@ msgstr "Depurar"
#: core/project_settings.cpp main/main.cpp modules/gdscript/gdscript.cpp
#: modules/visual_script/visual_script.cpp scene/resources/dynamic_font.cpp
-#, fuzzy
msgid "Settings"
-msgstr "Configuración:"
+msgstr "Configuración"
#: core/project_settings.cpp editor/script_editor_debugger.cpp main/main.cpp
#: modules/mono/mono_gd/gd_mono.cpp
@@ -871,23 +832,20 @@ msgid "Profiler"
msgstr "Profiler"
#: core/project_settings.cpp
-#, fuzzy
msgid "Max Functions"
-msgstr "Crear Función"
+msgstr "Funciones Máximas"
#: core/project_settings.cpp scene/3d/vehicle_body.cpp
-#, fuzzy
msgid "Compression"
-msgstr "Expresión"
+msgstr "Compresión"
#: core/project_settings.cpp
-#, fuzzy
msgid "Formats"
-msgstr "Formato"
+msgstr "Formatos"
#: core/project_settings.cpp
msgid "Zstd"
-msgstr ""
+msgstr "Zstd"
#: core/project_settings.cpp
msgid "Long Distance Matching"
@@ -895,7 +853,7 @@ msgstr ""
#: core/project_settings.cpp
msgid "Compression Level"
-msgstr ""
+msgstr "Nivel de Compresión"
#: core/project_settings.cpp
msgid "Window Log Size"
@@ -903,23 +861,23 @@ msgstr ""
#: core/project_settings.cpp
msgid "Zlib"
-msgstr ""
+msgstr "Zlib"
#: core/project_settings.cpp
msgid "Gzip"
-msgstr ""
+msgstr "Gzip"
#: core/project_settings.cpp platform/android/export/export.cpp
msgid "Android"
-msgstr ""
+msgstr "Android"
#: core/project_settings.cpp
msgid "Modules"
-msgstr ""
+msgstr "Módulos"
#: core/register_core_types.cpp
msgid "TCP"
-msgstr ""
+msgstr "TCP"
#: core/register_core_types.cpp
#, fuzzy
@@ -932,16 +890,15 @@ msgstr ""
#: core/register_core_types.cpp
msgid "Max Buffer (Power of 2)"
-msgstr ""
+msgstr "Búfer Máximo (Potencia de 2)"
#: core/register_core_types.cpp editor/editor_settings.cpp main/main.cpp
msgid "SSL"
-msgstr ""
+msgstr "SSL"
#: core/register_core_types.cpp main/main.cpp
-#, fuzzy
msgid "Certificates"
-msgstr "Vértices:"
+msgstr "Certificados"
#: core/resource.cpp editor/dependency_editor.cpp
#: editor/editor_resource_picker.cpp
@@ -962,9 +919,8 @@ msgid "Path"
msgstr "Ruta"
#: core/script_language.cpp
-#, fuzzy
msgid "Source Code"
-msgstr "Fuente"
+msgstr "Código Fuente"
#: core/translation.cpp editor/project_settings_editor.cpp
msgid "Locale"
@@ -1013,7 +969,7 @@ msgstr "EiB"
#: drivers/gles3/rasterizer_scene_gles3.cpp
#: drivers/gles3/rasterizer_storage_gles3.cpp modules/gltf/gltf_state.cpp
msgid "Buffers"
-msgstr ""
+msgstr "Búferes"
#: drivers/gles2/rasterizer_canvas_base_gles2.cpp
#: drivers/gles3/rasterizer_canvas_base_gles3.cpp
@@ -1035,7 +991,7 @@ msgstr ""
#: servers/physics_2d/space_2d_sw.cpp servers/physics_2d_server.cpp
#: servers/visual_server.cpp
msgid "2D"
-msgstr ""
+msgstr "2D"
#: drivers/gles2/rasterizer_canvas_base_gles2.cpp
#: drivers/gles3/rasterizer_canvas_base_gles3.cpp
@@ -1052,18 +1008,17 @@ msgstr "Usar Ajuste a Pixeles"
#: drivers/gles2/rasterizer_scene_gles2.cpp
#: drivers/gles3/rasterizer_scene_gles3.cpp
msgid "Immediate Buffer Size (KB)"
-msgstr ""
+msgstr "Tamaño de Búfer Inmediato (KB)"
#: drivers/gles2/rasterizer_storage_gles2.cpp
#: drivers/gles3/rasterizer_storage_gles3.cpp
-#, fuzzy
msgid "Lightmapping"
-msgstr "Bake Lightmaps"
+msgstr "Mapeo de Luz"
#: drivers/gles2/rasterizer_storage_gles2.cpp
#: drivers/gles3/rasterizer_storage_gles3.cpp
msgid "Use Bicubic Sampling"
-msgstr ""
+msgstr "Usar Muestreo Bicúbico"
#: drivers/gles3/rasterizer_scene_gles3.cpp
msgid "Max Renderable Elements"
@@ -1080,11 +1035,11 @@ msgstr "Centrar Selección"
#: drivers/gles3/rasterizer_scene_gles3.cpp
msgid "Max Lights Per Object"
-msgstr ""
+msgstr "Luces Máximas Por Objeto"
#: drivers/gles3/rasterizer_scene_gles3.cpp
msgid "Subsurface Scattering"
-msgstr ""
+msgstr "Dispersión Subsuperficial"
#: drivers/gles3/rasterizer_scene_gles3.cpp editor/animation_track_editor.cpp
#: editor/import/resource_importer_texture.cpp
@@ -1100,9 +1055,8 @@ msgid "Scale"
msgstr "Escalar"
#: drivers/gles3/rasterizer_scene_gles3.cpp
-#, fuzzy
msgid "Follow Surface"
-msgstr "Poblar Superficie"
+msgstr "Seguir Superficie"
#: drivers/gles3/rasterizer_scene_gles3.cpp
msgid "Weight Samples"
@@ -1114,7 +1068,7 @@ msgstr ""
#: drivers/gles3/rasterizer_scene_gles3.cpp scene/resources/environment.cpp
msgid "High Quality"
-msgstr ""
+msgstr "Alta Calidad"
#: drivers/gles3/rasterizer_storage_gles3.cpp
msgid "Blend Shape Max Buffer Size (KB)"
@@ -1192,9 +1146,8 @@ msgstr "Cambiar Call de Anim"
#: editor/animation_track_editor.cpp scene/2d/animated_sprite.cpp
#: scene/2d/sprite.cpp scene/3d/sprite_3d.cpp
#: scene/resources/default_theme/default_theme.cpp
-#, fuzzy
msgid "Frame"
-msgstr "Frame %"
+msgstr "Fotograma"
#: editor/animation_track_editor.cpp editor/editor_profiler.cpp
#: scene/2d/cpu_particles_2d.cpp scene/2d/particles_2d.cpp
@@ -1212,9 +1165,8 @@ msgstr "Localización"
#: editor/animation_track_editor.cpp modules/gltf/gltf_node.cpp
#: scene/2d/polygon_2d.cpp scene/2d/remote_transform_2d.cpp
#: scene/3d/remote_transform.cpp scene/3d/spatial.cpp scene/gui/control.cpp
-#, fuzzy
msgid "Rotation"
-msgstr "Step de Rotación:"
+msgstr "Rotación"
#: editor/animation_track_editor.cpp editor/script_editor_debugger.cpp
#: modules/visual_script/visual_script_nodes.cpp scene/gui/range.cpp
@@ -1222,14 +1174,13 @@ msgid "Value"
msgstr "Valor"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Arg Count"
-msgstr "Cantidad:"
+msgstr "Cantidad de Argumentos"
#: editor/animation_track_editor.cpp main/main.cpp
#: modules/mono/mono_gd/gd_mono.cpp
msgid "Args"
-msgstr ""
+msgstr "Argumentos"
#: editor/animation_track_editor.cpp editor/editor_settings.cpp
#: editor/script_editor_debugger.cpp modules/gltf/gltf_accessor.cpp
@@ -2283,8 +2234,8 @@ msgid "Open"
msgstr "Abrir"
#: editor/dependency_editor.cpp
-msgid "Owners Of:"
-msgstr "Dueños De:"
+msgid "Owners of: %s (Total: %d)"
+msgstr ""
#: editor/dependency_editor.cpp
msgid ""
@@ -2591,7 +2542,7 @@ msgid "Bus Options"
msgstr "Opciones de Bus"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/scene_tree_dock.cpp
+#: editor/project_export.cpp editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "Duplicar"
@@ -2849,6 +2800,25 @@ msgid "Choose"
msgstr "Elegir"
#: editor/editor_export.cpp
+msgid "Project export for platform:"
+msgstr ""
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Completed with errors."
+msgstr "Copiar Ruta del Nodo"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Completed successfully."
+msgstr "El Paquete se instaló exitosamente!"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed."
+msgstr "Fallido:"
+
+#: editor/editor_export.cpp
msgid "Storing File:"
msgstr "Almacenando Archivo:"
@@ -2861,6 +2831,31 @@ msgid "Packing"
msgstr "Empaquetando"
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save PCK"
+msgstr "Guardar Como"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Cannot create file \"%s\"."
+msgstr "No se pudo crear la carpeta."
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to export project files."
+msgstr "No se pudieron exportar los archivos del proyecto"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Can't open file to read from path \"%s\"."
+msgstr "No se puede abrir el archivo para escribir:"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save ZIP"
+msgstr "Guardar Como"
+
+#: editor/editor_export.cpp
msgid ""
"Target platform requires 'ETC' texture compression for GLES2. Enable 'Import "
"Etc' in Project Settings."
@@ -2982,11 +2977,33 @@ msgstr "Plantilla debug personalizada no encontrada."
msgid "Custom release template not found."
msgstr "Plantilla release personalizada no encontrada."
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Prepare Template"
+msgstr "Administrar Plantillas"
+
+#: editor/editor_export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "The given export path doesn't exist."
+msgstr "La ruta de exportación especificada no existe:"
+
#: editor/editor_export.cpp platform/javascript/export/export.cpp
-msgid "Template file not found:"
+#, fuzzy
+msgid "Template file not found: \"%s\"."
msgstr "Plantilla no encontrada:"
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to copy export template."
+msgstr "Plantilla de exportación inválida:"
+
+#: editor/editor_export.cpp platform/windows/export/export.cpp
+#: platform/x11/export/export.cpp
+#, fuzzy
+msgid "PCK Embedding"
+msgstr "Relleno"
+
+#: editor/editor_export.cpp
msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB."
msgstr ""
"En la exportación de 32 bits el PCK embebido no puede ser mayor de 4 GiB."
@@ -3163,9 +3180,9 @@ msgid "Import"
msgstr "Importar"
#: editor/editor_feature_profile.cpp editor/project_export.cpp
-#: platform/android/export/export.cpp platform/javascript/export/export.cpp
-#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
-#: platform/windows/export/export.cpp
+#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#: platform/uwp/export/export.cpp platform/windows/export/export.cpp
msgid "Export"
msgstr "Exportar"
@@ -4337,15 +4354,6 @@ msgid ""
"Unable to write to file '%s', file in use, locked or lacking permissions."
msgstr ""
-#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
-msgid "Scene"
-msgstr "Escena"
-
-#: editor/editor_node.cpp
-#, fuzzy
-msgid "Scene Naming"
-msgstr "Ruta a la Escena:"
-
#: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp
#: servers/arvr/arvr_interface.cpp
#, fuzzy
@@ -4474,6 +4482,10 @@ msgid "Default Color Picker Mode"
msgstr ""
#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
+msgid "Version Control"
+msgstr "Control de Versiones"
+
+#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
msgid "Username"
msgstr "Nombre de usuario"
@@ -4501,6 +4513,10 @@ msgstr "Act./Desact. modo sin distracciones."
msgid "Add a new scene."
msgstr "Agregar nueva escena."
+#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
+msgid "Scene"
+msgstr "Escena"
+
#: editor/editor_node.cpp
msgid "Go to previously opened scene."
msgstr "Ir a la escena abierta previamente."
@@ -5298,6 +5314,11 @@ msgstr ""
"Por favor agregá un preset ejecutable en el menú Exportar o definí un preset "
"como ejecutable."
+#: editor/editor_run_native.cpp
+#, fuzzy
+msgid "Project Run"
+msgstr "Proyecto"
+
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
msgstr "Escribir tu lógica en el método _run()."
@@ -5581,7 +5602,9 @@ msgid "Draw Spaces"
msgstr "Llamadas de Dibujado:"
#: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp
-#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp
+#: scene/main/scene_tree.cpp scene/resources/world.cpp
+#: scene/resources/world_2d.cpp
msgid "Navigation"
msgstr "Navegación"
@@ -7060,9 +7083,8 @@ msgstr ""
#: editor/import/resource_importer_scene.cpp
#: editor/import/resource_importer_texture.cpp
#: editor/import/resource_importer_wav.cpp scene/3d/gi_probe.cpp
-#, fuzzy
msgid "Compress"
-msgstr "Componentes"
+msgstr "Comprimir"
#: editor/import/resource_importer_csv_translation.cpp
msgid "Delimiter"
@@ -7093,7 +7115,7 @@ msgstr ""
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp
-#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp
+#: scene/gui/control.cpp
#, fuzzy
msgid "Filter"
msgstr "Filtros:"
@@ -7390,6 +7412,18 @@ msgid "Saving..."
msgstr "Guardando..."
#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used as a normal map in 3D. Enabling red-green "
+"texture compression to reduce memory usage (blue channel is discarded)."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap "
+"generation and VRAM texture compression."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
msgid "2D, Detect 3D"
msgstr ""
@@ -8086,11 +8120,20 @@ msgid "New Anim"
msgstr "Nueva Animación"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+msgstr "Crear Nueva Animación"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Change Animation Name:"
msgstr "Cambiar Nombre de Animación:"
#: editor/plugins/animation_player_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Rename Animation"
+msgstr "Renombrar Animación"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Delete Animation?"
msgstr "Eliminar Animación?"
@@ -8108,11 +8151,6 @@ msgid "Animation name already exists!"
msgstr "El nombre de animación ya existe!"
#: editor/plugins/animation_player_editor_plugin.cpp
-#: editor/plugins/sprite_frames_editor_plugin.cpp
-msgid "Rename Animation"
-msgstr "Renombrar Animación"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate Animation"
msgstr "Duplicar Animación"
@@ -8258,10 +8296,6 @@ msgid "Pin AnimationPlayer"
msgstr "Fijar AnimationPlayer"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Create New Animation"
-msgstr "Crear Nueva Animación"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Name:"
msgstr "Nombre de Animación:"
@@ -10390,6 +10424,7 @@ msgid "Points"
msgstr "Puntos"
#: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp
+#: scene/resources/navigation_mesh.cpp
msgid "Polygons"
msgstr "Polígonos"
@@ -11774,7 +11809,8 @@ msgid "Invalid geometry, can't replace by mesh."
msgstr "Geometría inválida, no se puede reemplazar por mesh."
#: editor/plugins/sprite_editor_plugin.cpp
-msgid "Convert to Mesh2D"
+#, fuzzy
+msgid "Convert to MeshInstance2D"
msgstr "Convertir a Mesh2D"
#: editor/plugins/sprite_editor_plugin.cpp
@@ -12772,8 +12808,7 @@ msgid "Select the previous shape, subtile, or Tile."
msgstr "Seleccionar la forma, subtile o Tile anterior."
#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp
-#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp
-#: scene/resources/texture.cpp
+#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp
msgid "Region"
msgstr "Región"
@@ -14298,38 +14333,10 @@ msgid "Delete preset '%s'?"
msgstr "Eliminar preset '%s'?"
#: editor/project_export.cpp
-msgid ""
-"Failed to export the project for platform '%s'.\n"
-"Export templates seem to be missing or invalid."
-msgstr ""
-"No se pudo exportar el proyecto para la plataforma '%s'.\n"
-"Las plantillas de exportación parecen faltar o ser inválidas."
-
-#: 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 ""
-"No se pudo exportar el proyecto para la plataforma '%s'.\n"
-"Esto puede ser debido a un problema de configuración en el preset de "
-"exportación o en los ajustes de exportación."
-
-#: editor/project_export.cpp
msgid "Exporting All"
msgstr "Exportar Todo"
#: editor/project_export.cpp
-msgid "The given export path doesn't exist:"
-msgstr "La ruta de exportación especificada no existe:"
-
-#: editor/project_export.cpp
-msgid "Export templates for this platform are missing/corrupted:"
-msgstr ""
-"Las plantillas de exportación para esta plataforma están faltando o "
-"corruptas:"
-
-#: editor/project_export.cpp
msgid "Export Path"
msgstr "Ruta de Exportación"
@@ -14477,6 +14484,11 @@ msgid "Export templates for this platform are missing:"
msgstr "Faltan las plantillas de exportación para esta plataforma:"
#: editor/project_export.cpp
+#, fuzzy
+msgid "Project Export"
+msgstr "Fundadores del Proyecto"
+
+#: editor/project_export.cpp
msgid "Manage Export Templates"
msgstr "Gestionar Plantillas de Exportación"
@@ -16913,7 +16925,7 @@ msgstr ""
#: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp
#: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp
-#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp
+#: scene/3d/collision_polygon.cpp
#, fuzzy
msgid "Polygon"
msgstr "Polígonos"
@@ -17319,7 +17331,7 @@ msgstr "Colores"
#: modules/gltf/gltf_light.cpp scene/3d/reflection_probe.cpp
#: scene/resources/environment.cpp
msgid "Intensity"
-msgstr ""
+msgstr "Intensidad"
#: modules/gltf/gltf_light.cpp scene/2d/light_2d.cpp scene/3d/light.cpp
#, fuzzy
@@ -17539,7 +17551,6 @@ msgid "Use In Baked Light"
msgstr "Bake Lightmaps"
#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
-#: scene/resources/navigation_mesh.cpp
msgid "Cell"
msgstr ""
@@ -17569,6 +17580,19 @@ msgstr "Centro"
msgid "Mask"
msgstr ""
+#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
+#, fuzzy
+msgid "Bake Navigation"
+msgstr "Navegación"
+
+#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp
+#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp
+#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp
+#: scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Navigation Layers"
+msgstr "Modo Navegación"
+
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Plane"
msgstr "Plano siguiente"
@@ -19101,10 +19125,6 @@ msgid "Could not execute on device."
msgstr "No se ha podido ejecutar en el dispositivo."
#: platform/android/export/export_plugin.cpp
-msgid "Unable to find the 'apksigner' tool."
-msgstr "No se pudo encontrar la herramienta 'apksigner'."
-
-#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -19230,12 +19250,17 @@ msgstr ""
"La versión de \"Target Sdk\" debe ser mayor o igual a la versión de \"Min "
"Sdk\"."
+#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Code Signing"
+msgstr "Firmando código de DMG"
+
#: platform/android/export/export_plugin.cpp
+#, fuzzy
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."
+"'apksigner' could not be found. Please check that the command is available "
+"in the Android SDK build-tools directory. The resulting %s is unsigned."
msgstr ""
"No se ha encontrado 'apksigner'.\n"
"Por favor, comprobá que el comando esté disponible en el directorio Android "
@@ -19255,6 +19280,11 @@ msgid "Could not find keystore, unable to export."
msgstr "No se pudo encontrar la keystore, no se puedo exportar."
#: platform/android/export/export_plugin.cpp
+#, fuzzy
+msgid "Could not start apksigner executable."
+msgstr "No se pudo comenzar el subproceso!"
+
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr "'apksigner' ha retornado con error #%d"
@@ -19284,7 +19314,8 @@ msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr "¡Nombre de archivo inválido! Android APK requiere la extensión *.apk."
#: platform/android/export/export_plugin.cpp
-msgid "Unsupported export format!\n"
+#, fuzzy
+msgid "Unsupported export format!"
msgstr "¡Formato de exportación no soportado!\n"
#: platform/android/export/export_plugin.cpp
@@ -19297,10 +19328,9 @@ msgstr ""
"'Proyecto'."
#: platform/android/export/export_plugin.cpp
+#, fuzzy
msgid ""
-"Android build version mismatch:\n"
-" Template installed: %s\n"
-" Godot Version: %s\n"
+"Android build version mismatch: Template installed: %s, Godot version: %s. "
"Please reinstall Android build template from 'Project' menu."
msgstr ""
"La versión de compilación de Android no coincide:\n"
@@ -19310,14 +19340,16 @@ msgstr ""
"'Proyecto'."
#: platform/android/export/export_plugin.cpp
+#, fuzzy
msgid ""
-"Unable to overwrite res://android/build/res/*.xml files with project name"
+"Unable to overwrite res://android/build/res/*.xml files with project name."
msgstr ""
"No se pudieron sobrescribir los archivos res://android/build/res/*.xml con "
"el nombre del proyecto"
#: platform/android/export/export_plugin.cpp
-msgid "Could not export project files to gradle project\n"
+#, fuzzy
+msgid "Could not export project files to gradle project."
msgstr ""
"No se pudieron exportar los archivos del proyecto a un proyecto gradle\n"
@@ -19330,8 +19362,9 @@ msgid "Building Android Project (gradle)"
msgstr "Construir Proyecto Android (gradle)"
#: platform/android/export/export_plugin.cpp
+#, fuzzy
msgid ""
-"Building of Android project failed, check output for the error.\n"
+"Building of Android project failed, check output for the error. "
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
"La construcción del proyecto Android falló, comprueba la salida del error.\n"
@@ -19351,7 +19384,8 @@ msgstr ""
"directorio del proyecto de gradle para ver los resultados."
#: platform/android/export/export_plugin.cpp
-msgid "Package not found: %s"
+#, fuzzy
+msgid "Package not found: \"%s\"."
msgstr "Paquete no encontrado:% s"
#: platform/android/export/export_plugin.cpp
@@ -19359,17 +19393,16 @@ msgid "Creating APK..."
msgstr "Creando APK..."
#: platform/android/export/export_plugin.cpp
-msgid ""
-"Could not find template APK to export:\n"
-"%s"
+#, fuzzy
+msgid "Could not find template APK to export: \"%s\"."
msgstr ""
"No se pudo encontrar la plantilla APK para exportar:\n"
"%s"
#: platform/android/export/export_plugin.cpp
+#, fuzzy
msgid ""
-"Missing libraries in the export template for the selected architectures: "
-"%s.\n"
+"Missing libraries in the export template for the selected architectures: %s. "
"Please build a template with all required libraries, or uncheck the missing "
"architectures in the export preset."
msgstr ""
@@ -19383,7 +19416,8 @@ msgid "Adding files..."
msgstr "Agregando archivos..."
#: platform/android/export/export_plugin.cpp
-msgid "Could not export project files"
+#, fuzzy
+msgid "Could not export project files."
msgstr "No se pudieron exportar los archivos del proyecto"
#: platform/android/export/export_plugin.cpp
@@ -19529,9 +19563,8 @@ msgid "Push Notifications"
msgstr "Rotación al Azar:"
#: platform/iphone/export/export.cpp
-#, fuzzy
msgid "User Data"
-msgstr "Interfaz de Usuario"
+msgstr "Datos de Usuario"
#: platform/iphone/export/export.cpp
msgid "Accessible From Files App"
@@ -19626,6 +19659,17 @@ msgstr "CustomNode"
msgid "Custom BG Color"
msgstr "CustomNode"
+#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Prepare Templates"
+msgstr "Administrar Plantillas"
+
+#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Export template not found."
+msgstr "Plantilla release personalizada no encontrada."
+
#: platform/iphone/export/export.cpp
msgid "App Store Team ID not specified - cannot configure the project."
msgstr ""
@@ -19648,22 +19692,35 @@ msgid "Run exported HTML in the system's default browser."
msgstr "Ejecutar HTML exportado en el navegador por defecto del sistema."
#: platform/javascript/export/export.cpp
-msgid "Could not open template for export:"
+#, fuzzy
+msgid "Could not open template for export: \"%s\"."
msgstr "No se pudo abrir la plantilla para exportar:"
#: platform/javascript/export/export.cpp
-msgid "Invalid export template:"
+#, fuzzy
+msgid "Invalid export template: \"%s\"."
msgstr "Plantilla de exportación inválida:"
#: platform/javascript/export/export.cpp
-msgid "Could not write file:"
+#, fuzzy
+msgid "Could not write file: \"%s\"."
msgstr "No se pudo escribir el archivo:"
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Icon Creation"
+msgstr "Asignar Margen"
+
#: platform/javascript/export/export.cpp
-msgid "Could not read file:"
+#, fuzzy
+msgid "Could not read file: \"%s\"."
msgstr "No se pudo leer el archivo:"
#: platform/javascript/export/export.cpp
+msgid "PWA"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
#, fuzzy
msgid "Variant"
msgstr "Separación:"
@@ -19738,15 +19795,18 @@ msgid "Icon 512 X 512"
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not read HTML shell:"
+#, fuzzy
+msgid "Could not read HTML shell: \"%s\"."
msgstr "No se pudo leer el shell HTML:"
#: platform/javascript/export/export.cpp
-msgid "Could not create HTTP server directory:"
+#, fuzzy
+msgid "Could not create HTTP server directory: %s."
msgstr "No se pudo crear el directorio del servidor HTTP:"
#: platform/javascript/export/export.cpp
-msgid "Error starting HTTP server:"
+#, fuzzy
+msgid "Error starting HTTP server: %d."
msgstr "Error al iniciar el servidor HTTP:"
#: platform/javascript/export/export.cpp
@@ -20039,9 +20099,29 @@ msgid "Apple Team ID"
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open icon file \"%s\"."
+msgstr "No se pudieron exportar los archivos del proyecto"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start xcrun executable."
+msgstr "No se pudo comenzar el subproceso!"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization failed."
+msgstr "Localización"
+
+#: platform/osx/export/export.cpp
+msgid "Notarization request UUID: \"%s\""
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
msgid ""
-"Note: The notarization process generally takes less than an hour. When the "
-"process is completed, you'll receive an email."
+"The notarization process generally takes less than an hour. When the process "
+"is completed, you'll receive an email."
msgstr ""
"Nota: El proceso de notarización generalmente toma menos de una hora. Cuando "
"se complete el proceso, recibirás un correo electrónico."
@@ -20063,18 +20143,80 @@ msgstr ""
"notarial a la aplicación exportada (opcional):"
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!"
+msgstr "Timestamping no es compatible con la firma ad-hoc y se desactivará!"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+"Hardened Runtime no es compatible con la firma ad-hoc y se desactivará!"
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign failed with error \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign require regex module."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Could not start codesign executable, make sure Xcode command line tools are "
+"installed."
+msgstr ""
+
+#: platform/osx/export/export.cpp platform/windows/export/export.cpp
msgid "No identity found."
msgstr "No se encontró identidad."
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Cannot sign file %s."
+msgstr "Error guardando el archivo: %s"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Relative symlinks are not supported, exported \"%s\" might be broken!"
+msgstr ""
+"Los enlaces simbólicos relativos no son compatibles con este sistema "
+"operativo, ¡el proyecto exportado podría estar dañado!"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "DMG Creation"
+msgstr "Direcciones"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start hdiutil executable."
+msgstr "No se pudo comenzar el subproceso!"
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed - file exists."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed."
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid "Creating app bundle"
msgstr "Crearndo paquete de aplicaciones"
#: platform/osx/export/export.cpp
-msgid "Could not find template app to export:"
+#, fuzzy
+msgid "Could not find template app to export: \"%s\"."
msgstr "No se pudo encontrar la aplicación de plantilla para exportar:"
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid export format."
+msgstr "Plantilla de exportación inválida:"
+
+#: platform/osx/export/export.cpp
msgid ""
"Relative symlinks are not supported on this OS, the exported project might "
"be broken!"
@@ -20083,8 +20225,9 @@ msgstr ""
"operativo, ¡el proyecto exportado podría estar dañado!"
#: platform/osx/export/export.cpp
+#, fuzzy
msgid ""
-"Requested template binary '%s' not found. It might be missing from your "
+"Requested template binary \"%s\" not found. It might be missing from your "
"template archive."
msgstr ""
"Plantilla binaria solicitada '%s' no encontrada. Es posible que falte en el "
@@ -20131,6 +20274,17 @@ msgid "Sending archive for notarization"
msgstr "Enviando archivo para notarización"
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "ZIP Creation"
+msgstr "Proyección"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open file to read from path \"%s\"."
+msgstr ""
+"No se pudieron exportar los archivos del proyecto a un proyecto gradle\n"
+
+#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr "Identificador de paquete no válido:"
@@ -20481,6 +20635,11 @@ msgid "Debug Algorithm"
msgstr "Depurador"
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to rename temporary file \"%s\"."
+msgstr "No se puede eliminar el archivo temporal:"
+
+#: platform/windows/export/export.cpp
msgid "Identity Type"
msgstr ""
@@ -20528,6 +20687,70 @@ msgid "Trademarks"
msgstr ""
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Resources Modification"
+msgstr "Rotación al Azar:"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find rcedit executable at \"%s\"."
+msgstr "No se pudo encontrar la keystore, no se puedo exportar."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find wine executable at \"%s\"."
+msgstr "No se pudo encontrar la keystore, no se puedo exportar."
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start rcedit executable, configure rcedit path in the Editor "
+"Settings (Export > Windows > Rcedit)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"rcedit failed to modify executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find signtool executable at \"%s\"."
+msgstr "No se pudo encontrar la keystore, no se puedo exportar."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find osslsigncode executable at \"%s\"."
+msgstr "No se pudo encontrar la keystore, no se puedo exportar."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid identity type."
+msgstr "Identificador inválido:"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid timestamp server."
+msgstr "Nombre inválido."
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start signtool executable, configure signtool path in the Editor "
+"Settings (Export > Windows > Signtool)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Signtool failed to sign executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to remove temporary file \"%s\"."
+msgstr "No se puede eliminar el archivo temporal:"
+
+#: platform/windows/export/export.cpp
msgid ""
"The rcedit tool must be configured in the Editor Settings (Export > Windows "
"> Rcedit) to change the icon or app information data."
@@ -20546,6 +20769,23 @@ msgid "Invalid product version:"
msgstr "versión de producto inválida."
#: platform/windows/export/export.cpp
+msgid "Windows executables cannot be >= 4 GiB."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+#, fuzzy
+msgid "Failed to open executable file \"%s\"."
+msgstr "Archivo ejecutable no válido."
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable file header corrupted."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable \"pck\" section not found."
+msgstr ""
+
+#: platform/windows/export/export.cpp
#, fuzzy
msgid "Windows"
msgstr "Nueva Ventana"
@@ -20562,6 +20802,10 @@ msgstr ""
msgid "Wine"
msgstr ""
+#: platform/x11/export/export.cpp
+msgid "32-bit executables cannot have embedded data >= 4 GiB."
+msgstr ""
+
#: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp
#: scene/resources/texture.cpp
#, fuzzy
@@ -20678,9 +20922,8 @@ msgstr "Escalar"
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/audio/audio_stream_player.cpp scene/gui/video_player.cpp
-#, fuzzy
msgid "Autoplay"
-msgstr "Activar/Desact. Autoplay"
+msgstr "Autoreproducción"
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/audio/audio_stream_player.cpp
@@ -20689,7 +20932,8 @@ msgstr ""
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/3d/light.cpp scene/3d/reflection_probe.cpp
-#: scene/3d/visual_instance.cpp scene/resources/material.cpp
+#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp
+#: scene/resources/material.cpp
#, fuzzy
msgid "Max Distance"
msgstr "Elegir Instancia:"
@@ -21502,13 +21746,25 @@ msgstr "Multiplicar %s"
#: scene/3d/navigation.cpp scene/animation/root_motion_view.cpp
#: scene/resources/world_2d.cpp servers/physics_2d/physics_2d_server_sw.cpp
msgid "Cell Size"
-msgstr ""
+msgstr "Tamaño de Celda"
#: scene/2d/navigation_2d.cpp scene/3d/navigation.cpp
#, fuzzy
msgid "Edge Connection Margin"
msgstr "Editar Conexión:"
+#: scene/2d/navigation_2d.cpp
+msgid ""
+"'Navigation2D' node and 'Navigation2D.get_simple_path()' are deprecated and "
+"will be removed in a future version. Use 'Navigation2DServer.map_get_path()' "
+"instead."
+msgstr ""
+
+#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
+#, fuzzy
+msgid "Path Desired Distance"
+msgstr "Elegir Instancia:"
+
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
msgid "Target Desired Distance"
msgstr ""
@@ -21519,7 +21775,7 @@ msgstr ""
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
msgid "Max Neighbors"
-msgstr ""
+msgstr "Vecinos Máximos"
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
#, fuzzy
@@ -21527,9 +21783,8 @@ msgid "Time Horizon"
msgstr "Espejar Horizontalmente"
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
-#, fuzzy
msgid "Max Speed"
-msgstr "Velocidad:"
+msgstr "Velocidad Máxima"
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
#, fuzzy
@@ -21566,17 +21821,19 @@ msgstr ""
"funcione. Por favor creá una propiedad o dibujá un polígono."
#: scene/2d/navigation_polygon.cpp
-msgid ""
-"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
-"node. It only provides navigation data."
-msgstr ""
-"NavigationPolygonInstance debe ser un hijo o nieto de un nodo Navigation2D. "
-"Solo provee datos de navegación."
-
-#: scene/2d/navigation_polygon.cpp
msgid "Navpoly"
msgstr ""
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Enter Cost"
+msgstr "Centro Inferior"
+
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Travel Cost"
+msgstr "Viaje"
+
#: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp
#: scene/main/canvas_layer.cpp
#, fuzzy
@@ -21646,9 +21903,8 @@ msgstr ""
#: scene/2d/parallax_layer.cpp scene/2d/physics_body_2d.cpp
#: scene/3d/physics_body.cpp scene/3d/vehicle_body.cpp
#: servers/physics_2d_server.cpp servers/physics_server.cpp
-#, fuzzy
msgid "Motion"
-msgstr "Acción"
+msgstr "Movimiento"
#: scene/2d/parallax_layer.cpp
#, fuzzy
@@ -21703,9 +21959,8 @@ msgstr ""
#: scene/2d/path_2d.cpp scene/3d/path.cpp scene/resources/sky.cpp
#: scene/resources/texture.cpp
-#, fuzzy
msgid "Curve"
-msgstr "Partir Curva"
+msgstr "Curva"
#: scene/2d/path_2d.cpp
msgid "PathFollow2D only works when set as a child of a Path2D node."
@@ -21713,9 +21968,8 @@ msgstr ""
"PathFollow2D sólo funciona cuando está seteado como hijo de un nodo Path2D."
#: scene/2d/path_2d.cpp scene/3d/path.cpp
-#, fuzzy
msgid "Unit Offset"
-msgstr "Offset de Grilla:"
+msgstr "Desplazamiento de Unidad"
#: scene/2d/path_2d.cpp scene/3d/camera.cpp scene/3d/path.cpp
#, fuzzy
@@ -21736,9 +21990,8 @@ msgid "Lookahead"
msgstr ""
#: scene/2d/physics_body_2d.cpp scene/3d/visual_instance.cpp
-#, fuzzy
msgid "Layers"
-msgstr "Capa"
+msgstr "Capas"
#: scene/2d/physics_body_2d.cpp scene/3d/physics_body.cpp
#, fuzzy
@@ -21752,14 +22005,13 @@ msgstr "Inicializar"
#: scene/2d/physics_body_2d.cpp scene/2d/tile_map.cpp scene/3d/physics_body.cpp
#: scene/resources/physics_material.cpp
-#, fuzzy
msgid "Friction"
-msgstr "Función"
+msgstr "Fricción"
#: scene/2d/physics_body_2d.cpp scene/2d/tile_map.cpp scene/3d/physics_body.cpp
#: scene/resources/physics_material.cpp
msgid "Bounce"
-msgstr ""
+msgstr "Rebote"
#: scene/2d/physics_body_2d.cpp scene/3d/physics_body.cpp
msgid "Physics Material Override"
@@ -21767,9 +22019,8 @@ msgstr ""
#: scene/2d/physics_body_2d.cpp scene/3d/physics_body.cpp
#: scene/resources/world.cpp scene/resources/world_2d.cpp
-#, fuzzy
msgid "Default Gravity"
-msgstr "Vista Previa Por Defecto"
+msgstr "Gravedad Predeterminada"
#: scene/2d/physics_body_2d.cpp
msgid ""
@@ -21783,21 +22034,19 @@ msgstr ""
#: scene/2d/physics_body_2d.cpp scene/3d/physics_body.cpp
msgid "Mass"
-msgstr ""
+msgstr "Masa"
#: scene/2d/physics_body_2d.cpp
-#, fuzzy
msgid "Inertia"
-msgstr "Vertical:"
+msgstr "Inercia"
#: scene/2d/physics_body_2d.cpp scene/3d/physics_body.cpp
-#, fuzzy
msgid "Weight"
-msgstr "Luz"
+msgstr "Peso"
#: scene/2d/physics_body_2d.cpp scene/3d/physics_body.cpp
msgid "Gravity Scale"
-msgstr ""
+msgstr "Escala de Gravedad"
#: scene/2d/physics_body_2d.cpp scene/3d/physics_body.cpp
#, fuzzy
@@ -21835,20 +22084,19 @@ msgstr ""
#: scene/2d/physics_body_2d.cpp scene/3d/physics_body.cpp
msgid "Angular"
-msgstr ""
+msgstr "Angular"
#: scene/2d/physics_body_2d.cpp
msgid "Applied Forces"
-msgstr ""
+msgstr "Fuerzas Aplicadas"
#: scene/2d/physics_body_2d.cpp
msgid "Torque"
msgstr ""
#: scene/2d/physics_body_2d.cpp scene/3d/physics_body.cpp
-#, fuzzy
msgid "Safe Margin"
-msgstr "Asignar Margen"
+msgstr "Margen Seguro"
#: scene/2d/physics_body_2d.cpp scene/3d/physics_body.cpp
#, fuzzy
@@ -21922,7 +22170,7 @@ msgstr ""
#: scene/2d/polygon_2d.cpp
msgid "Invert"
-msgstr ""
+msgstr "Invertir"
#: scene/2d/polygon_2d.cpp
#, fuzzy
@@ -21930,9 +22178,8 @@ msgid "Vertex Colors"
msgstr "Vértice"
#: scene/2d/polygon_2d.cpp
-#, fuzzy
msgid "Internal Vertex Count"
-msgstr "Crear Vértice Interno"
+msgstr "Recuento de Vértices Internos"
#: scene/2d/position_2d.cpp
#, fuzzy
@@ -21950,7 +22197,7 @@ msgstr "Crear Nodo Shader"
#: scene/2d/ray_cast_2d.cpp scene/3d/ray_cast.cpp
msgid "Collide With"
-msgstr ""
+msgstr "Colisionar Con"
#: scene/2d/ray_cast_2d.cpp scene/3d/camera.cpp scene/3d/ray_cast.cpp
msgid "Areas"
@@ -21980,9 +22227,8 @@ msgid "Rest"
msgstr "Reiniciar"
#: scene/2d/skeleton_2d.cpp
-#, fuzzy
msgid "Default Length"
-msgstr "Theme Predeterminado"
+msgstr "Longitud Predeterminada"
#: scene/2d/skeleton_2d.cpp
msgid "This Bone2D chain should end at a Skeleton2D node."
@@ -22002,11 +22248,11 @@ msgstr ""
#: scene/2d/sprite.cpp scene/3d/sprite_3d.cpp
msgid "Hframes"
-msgstr ""
+msgstr "FotogramasH"
#: scene/2d/sprite.cpp scene/3d/sprite_3d.cpp
msgid "Vframes"
-msgstr ""
+msgstr "FotogramasV"
#: scene/2d/sprite.cpp scene/3d/sprite_3d.cpp
#, fuzzy
@@ -22101,9 +22347,8 @@ msgid "Passby Press"
msgstr ""
#: scene/2d/touch_screen_button.cpp
-#, fuzzy
msgid "Visibility Mode"
-msgstr "Modo Prioridad"
+msgstr "Modo de Visibilidad"
#: scene/2d/visibility_notifier_2d.cpp
msgid ""
@@ -22143,7 +22388,7 @@ msgstr ""
#: scene/3d/area.cpp
msgid "Reverb Bus"
-msgstr ""
+msgstr "Bus de Reverberación"
#: scene/3d/area.cpp
#, fuzzy
@@ -22201,9 +22446,8 @@ msgid "World Scale"
msgstr "Escala al Azar:"
#: scene/3d/audio_stream_player_3d.cpp
-#, fuzzy
msgid "Attenuation Model"
-msgstr "Nodo de Animación"
+msgstr "Modelo de Atenuación"
#: scene/3d/audio_stream_player_3d.cpp
msgid "Unit dB"
@@ -22211,20 +22455,19 @@ msgstr ""
#: scene/3d/audio_stream_player_3d.cpp
msgid "Unit Size"
-msgstr ""
+msgstr "Tamaño de Unidad"
#: scene/3d/audio_stream_player_3d.cpp
msgid "Max dB"
-msgstr ""
+msgstr "dB Máximos"
#: scene/3d/audio_stream_player_3d.cpp
msgid "Out Of Range Mode"
-msgstr ""
+msgstr "Modo Fuera de Rango"
#: scene/3d/audio_stream_player_3d.cpp
-#, fuzzy
msgid "Emission Angle"
-msgstr "Colores de Emisión"
+msgstr "Ãngulo de Emisión"
#: scene/3d/audio_stream_player_3d.cpp
#, fuzzy
@@ -22238,7 +22481,7 @@ msgstr "Animación"
#: scene/3d/audio_stream_player_3d.cpp
msgid "Attenuation Filter"
-msgstr ""
+msgstr "Filtro de Atenuación"
#: scene/3d/audio_stream_player_3d.cpp
#: servers/audio/effects/audio_effect_chorus.cpp
@@ -22253,9 +22496,8 @@ msgid "dB"
msgstr "B"
#: scene/3d/audio_stream_player_3d.cpp
-#, fuzzy
msgid "Doppler"
-msgstr "Activar Doppler"
+msgstr "Doppler"
#: scene/3d/audio_stream_player_3d.cpp
#, fuzzy
@@ -22265,7 +22507,7 @@ msgstr "Empaquetando"
#: scene/3d/baked_lightmap.cpp scene/3d/gi_probe.cpp
#: scene/3d/reflection_probe.cpp
msgid "Interior"
-msgstr ""
+msgstr "Interior"
#: scene/3d/baked_lightmap.cpp
msgid "Finding meshes and lights"
@@ -22300,15 +22542,15 @@ msgstr "Gizmos"
#: scene/3d/baked_lightmap.cpp
msgid "Tweaks"
-msgstr ""
+msgstr "Ajustes"
#: scene/3d/baked_lightmap.cpp
msgid "Bounces"
-msgstr ""
+msgstr "Rebotes"
#: scene/3d/baked_lightmap.cpp
msgid "Bounce Indirect Energy"
-msgstr ""
+msgstr "Energía Indirecta de Rebotes"
#: scene/3d/baked_lightmap.cpp
#, fuzzy
@@ -22330,9 +22572,8 @@ msgid "Default Texels Per Unit"
msgstr "Theme Predeterminado"
#: scene/3d/baked_lightmap.cpp scene/resources/texture.cpp
-#, fuzzy
msgid "Atlas"
-msgstr "Nuevo Atlas"
+msgstr "Atlas"
#: scene/3d/baked_lightmap.cpp
#, fuzzy
@@ -22370,18 +22611,16 @@ msgid "Min Light"
msgstr "Indentar a la Der"
#: scene/3d/baked_lightmap.cpp scene/3d/gi_probe.cpp
-#, fuzzy
msgid "Propagation"
-msgstr "Navegación"
+msgstr "Propagación"
#: scene/3d/baked_lightmap.cpp
msgid "Image Path"
-msgstr ""
+msgstr "Ruta de la Imagen"
#: scene/3d/baked_lightmap.cpp
-#, fuzzy
msgid "Light Data"
-msgstr "Con Data"
+msgstr "Datos de Luz"
#: scene/3d/bone_attachment.cpp scene/3d/physics_body.cpp
#, fuzzy
@@ -22390,7 +22629,7 @@ msgstr "Nombre de Nodo:"
#: scene/3d/camera.cpp
msgid "Keep Aspect"
-msgstr ""
+msgstr "Mantener Aspecto"
#: scene/3d/camera.cpp scene/3d/light.cpp scene/3d/reflection_probe.cpp
msgid "Cull Mask"
@@ -22402,13 +22641,12 @@ msgid "Doppler Tracking"
msgstr "Pista de Propiedades"
#: scene/3d/camera.cpp
-#, fuzzy
msgid "Projection"
-msgstr "Proyecto"
+msgstr "Proyección"
#: scene/3d/camera.cpp
msgid "FOV"
-msgstr ""
+msgstr "FOV"
#: scene/3d/camera.cpp
#, fuzzy
@@ -22416,22 +22654,20 @@ msgid "Frustum Offset"
msgstr "Offset de Grilla:"
#: scene/3d/camera.cpp
-#, fuzzy
msgid "Near"
-msgstr "Mas Cercano"
+msgstr "Cercano"
#: scene/3d/camera.cpp
msgid "Far"
-msgstr ""
+msgstr "Lejano"
#: scene/3d/camera.cpp scene/3d/collision_polygon.cpp scene/3d/spring_arm.cpp
#: scene/gui/control.cpp scene/resources/default_theme/default_theme.cpp
#: scene/resources/shape.cpp scene/resources/style_box.cpp
#: scene/resources/texture.cpp servers/physics_2d_server.cpp
#: servers/physics_server.cpp
-#, fuzzy
msgid "Margin"
-msgstr "Asignar Margen"
+msgstr "Margen"
#: scene/3d/camera.cpp
#, fuzzy
@@ -22556,9 +22792,8 @@ msgid "Flatness"
msgstr ""
#: scene/3d/cull_instance.cpp servers/visual_server.cpp
-#, fuzzy
msgid "Portals"
-msgstr "Invertir Portales"
+msgstr "Portales"
#: scene/3d/cull_instance.cpp
#, fuzzy
@@ -22606,12 +22841,11 @@ msgstr ""
#: scene/3d/gi_probe.cpp
msgid "Subdiv"
-msgstr ""
+msgstr "Subdivisiones"
#: scene/3d/gi_probe.cpp
-#, fuzzy
msgid "Dynamic Range"
-msgstr "Biblioteca Dinámica"
+msgstr "Rango Dinámico"
#: scene/3d/gi_probe.cpp scene/3d/light.cpp
msgid "Normal Bias"
@@ -22619,9 +22853,8 @@ msgstr ""
#: scene/3d/label_3d.cpp scene/3d/sprite_3d.cpp
#: scene/resources/primitive_meshes.cpp
-#, fuzzy
msgid "Pixel Size"
-msgstr "Ajustar a Pixeles"
+msgstr "Tamaño de Píxel"
#: scene/3d/label_3d.cpp scene/3d/sprite_3d.cpp
msgid "Billboard"
@@ -22793,6 +23026,13 @@ msgstr ""
msgid "Transform Normals"
msgstr "Transformación Abortada."
+#: scene/3d/navigation.cpp
+msgid ""
+"'Navigation' node and 'Navigation.get_simple_path()' are deprecated and will "
+"be removed in a future version. Use 'NavigationServer.map_get_path()' "
+"instead."
+msgstr ""
+
#: scene/3d/navigation.cpp scene/resources/curve.cpp
#, fuzzy
msgid "Up Vector"
@@ -22817,14 +23057,6 @@ msgid ""
"The NavigationAgent can be used only under a Spatial inheriting parent node."
msgstr ""
-#: scene/3d/navigation_mesh_instance.cpp
-msgid ""
-"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
-"It only provides navigation data."
-msgstr ""
-"NavigationMeshInstance debe ser un hijo o nieto de un nodo Navigation. Solo "
-"provee datos de navegación."
-
#: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp
#, fuzzy
msgid "NavMesh"
@@ -22883,9 +23115,8 @@ msgid "Visibility AABB"
msgstr "Act/Desact. Visibilidad"
#: scene/3d/particles.cpp
-#, fuzzy
msgid "Draw Passes"
-msgstr "Llamadas de Dibujado:"
+msgstr "Pases de Dibujo"
#: scene/3d/particles.cpp
#, fuzzy
@@ -22906,9 +23137,8 @@ msgstr ""
"el recurso Curve de su Path padre."
#: scene/3d/path.cpp
-#, fuzzy
msgid "Rotation Mode"
-msgstr "Modo Rotar"
+msgstr "Modo de Rotación"
#: scene/3d/physics_body.cpp
msgid ""
@@ -23175,17 +23405,15 @@ msgstr "Parámetro Modificado:"
#: scene/3d/physics_joint.cpp
msgid "Angular Limit"
-msgstr ""
+msgstr "Límite Angular"
#: scene/3d/physics_joint.cpp
-#, fuzzy
msgid "Upper"
-msgstr "Mayúsculas"
+msgstr "Superior"
#: scene/3d/physics_joint.cpp
-#, fuzzy
msgid "Lower"
-msgstr "Minúsculas"
+msgstr "Inferior"
#: scene/3d/physics_joint.cpp
msgid "Motor"
@@ -23232,14 +23460,12 @@ msgid "Linear Ortho"
msgstr "Ortogonal Trasera"
#: scene/3d/physics_joint.cpp
-#, fuzzy
msgid "Upper Angle"
-msgstr "Mayúsculas"
+msgstr "Ãngulo Superior"
#: scene/3d/physics_joint.cpp
-#, fuzzy
msgid "Lower Angle"
-msgstr "Minúsculas"
+msgstr "Ãngulo Inferior"
#: scene/3d/physics_joint.cpp
#, fuzzy
@@ -23277,7 +23503,7 @@ msgstr ""
#: scene/3d/physics_joint.cpp
msgid "Angular Limit X"
-msgstr ""
+msgstr "Límite Angular X"
#: scene/3d/physics_joint.cpp
msgid "Angular Motor X"
@@ -23304,7 +23530,7 @@ msgstr "Lineal"
#: scene/3d/physics_joint.cpp
msgid "Angular Limit Y"
-msgstr ""
+msgstr "Límite Angular Y"
#: scene/3d/physics_joint.cpp
msgid "Angular Motor Y"
@@ -23387,18 +23613,16 @@ msgid "Grid Radius"
msgstr "Radio:"
#: scene/3d/ray_cast.cpp
-#, fuzzy
msgid "Debug Shape"
-msgstr "Depurador"
+msgstr "Forma de Depuración"
#: scene/3d/ray_cast.cpp scene/resources/style_box.cpp
msgid "Thickness"
msgstr ""
#: scene/3d/reflection_probe.cpp scene/main/viewport.cpp
-#, fuzzy
msgid "Update Mode"
-msgstr "Modo Rotar"
+msgstr "Modo de Actualización"
#: scene/3d/reflection_probe.cpp
#, fuzzy
@@ -23465,11 +23689,11 @@ msgstr ""
#: scene/3d/room.cpp scene/3d/room_manager.cpp
msgid "Room Simplify"
-msgstr ""
+msgstr "Simplificación de Habitación"
#: scene/3d/room.cpp
msgid "Bound"
-msgstr ""
+msgstr "Límite"
#: scene/3d/room_group.cpp
#, fuzzy
@@ -23502,7 +23726,7 @@ msgstr "Sólo debe haber un RoomManager en el SceneTree."
#: scene/3d/room_manager.cpp
msgid "Main"
-msgstr ""
+msgstr "Principal"
#: scene/3d/room_manager.cpp scene/animation/animation_blend_tree.cpp
#: scene/animation/animation_player.cpp scene/animation/animation_tree.cpp
@@ -23522,14 +23746,12 @@ msgid "PVS"
msgstr "FPS"
#: scene/3d/room_manager.cpp
-#, fuzzy
msgid "PVS Mode"
-msgstr "Modo Paneo"
+msgstr "Modo de CPV"
#: scene/3d/room_manager.cpp
-#, fuzzy
msgid "PVS Filename"
-msgstr "Archivo ZIP"
+msgstr "Nombre de CPV"
#: scene/3d/room_manager.cpp servers/visual_server.cpp
msgid "Gameplay"
@@ -23673,14 +23895,12 @@ msgid "Parent Collision Ignore"
msgstr "Crear Polígono de Colisión"
#: scene/3d/soft_body.cpp
-#, fuzzy
msgid "Simulation Precision"
-msgstr "El árbol de animación es inválido."
+msgstr "Precisión de Simulación"
#: scene/3d/soft_body.cpp
-#, fuzzy
msgid "Total Mass"
-msgstr "Total:"
+msgstr "Masa Total"
#: scene/3d/soft_body.cpp
msgid "Linear Stiffness"
@@ -23700,7 +23920,7 @@ msgstr ""
#: scene/3d/soft_body.cpp
msgid "Damping Coefficient"
-msgstr ""
+msgstr "Coeficiente de Amortiguación"
#: scene/3d/soft_body.cpp
msgid "Drag Coefficient"
@@ -23726,7 +23946,7 @@ msgstr ""
#: scene/3d/spatial.cpp
msgid "Matrix"
-msgstr ""
+msgstr "Matriz"
#: scene/3d/spatial.cpp
#, fuzzy
@@ -23744,7 +23964,7 @@ msgstr ""
#: scene/3d/sprite_3d.cpp scene/gui/graph_edit.cpp
msgid "Opacity"
-msgstr ""
+msgstr "Opacidad"
#: scene/3d/sprite_3d.cpp scene/resources/material.cpp
#, fuzzy
@@ -23773,9 +23993,8 @@ msgid "Per-Wheel Motion"
msgstr "Botón Rueda Abajo"
#: scene/3d/vehicle_body.cpp
-#, fuzzy
msgid "Engine Force"
-msgstr "Documentación Online"
+msgstr "Fuerza del Motor"
#: scene/3d/vehicle_body.cpp
msgid "Brake"
@@ -23799,9 +24018,8 @@ msgid "Use As Steering"
msgstr ""
#: scene/3d/vehicle_body.cpp
-#, fuzzy
msgid "Wheel"
-msgstr "Rueda Arriba."
+msgstr "Rueda"
#: scene/3d/vehicle_body.cpp
msgid "Roll Influence"
@@ -23813,9 +24031,8 @@ msgid "Friction Slip"
msgstr "Función"
#: scene/3d/vehicle_body.cpp
-#, fuzzy
msgid "Suspension"
-msgstr "Expresión"
+msgstr "Suspensión"
#: scene/3d/vehicle_body.cpp
#, fuzzy
@@ -23827,9 +24044,8 @@ msgid "AABB"
msgstr ""
#: scene/3d/visual_instance.cpp scene/resources/navigation_mesh.cpp
-#, fuzzy
msgid "Geometry"
-msgstr "Reintentar"
+msgstr "Geometría"
#: scene/3d/visual_instance.cpp
#, fuzzy
@@ -23867,7 +24083,7 @@ msgstr ""
#: scene/3d/visual_instance.cpp
msgid "LOD"
-msgstr ""
+msgstr "LOD"
#: scene/3d/visual_instance.cpp scene/animation/skeleton_ik.cpp
#: scene/resources/material.cpp
@@ -23916,19 +24132,16 @@ msgid "Animation not found: '%s'"
msgstr "No se encontró la animación: '%s'"
#: scene/animation/animation_blend_tree.cpp
-#, fuzzy
msgid "Mix Mode"
-msgstr "Nodo Mix"
+msgstr "Modo de Mezcla"
#: scene/animation/animation_blend_tree.cpp
-#, fuzzy
msgid "Fadein Time"
-msgstr "Tiempo de Crossfade (s):"
+msgstr "Tiempo de Fundido"
#: scene/animation/animation_blend_tree.cpp
-#, fuzzy
msgid "Fadeout Time"
-msgstr "Tiempo de Crossfade (s):"
+msgstr "Tiempo de Desvanecimiento"
#: scene/animation/animation_blend_tree.cpp
#, fuzzy
@@ -23971,9 +24184,8 @@ msgstr "Agregar Puerto de Entrada"
#: scene/animation/animation_blend_tree.cpp
#: scene/animation/animation_node_state_machine.cpp
-#, fuzzy
msgid "Xfade Time"
-msgstr "Tiempo de Crossfade (s):"
+msgstr "Tiempo de Fundido Cruzado"
#: scene/animation/animation_node_state_machine.cpp
#, fuzzy
@@ -23995,23 +24207,20 @@ msgid "Anim Apply Reset"
msgstr "Aplicar Reset de Animación"
#: scene/animation/animation_player.cpp
-#, fuzzy
msgid "Current Animation"
-msgstr "Establecer Animación"
+msgstr "Animación Actual"
#: scene/animation/animation_player.cpp
-#, fuzzy
msgid "Assigned Animation"
-msgstr "Agregar Animación"
+msgstr "Animación Asignada"
#: scene/animation/animation_player.cpp
msgid "Reset On Save"
-msgstr ""
+msgstr "Reiniciar al Guardar"
#: scene/animation/animation_player.cpp
-#, fuzzy
msgid "Current Animation Length"
-msgstr "Cambiar Duración de la Animación"
+msgstr "Duración de la Animación Actual"
#: scene/animation/animation_player.cpp
#, fuzzy
@@ -24019,9 +24228,8 @@ msgid "Current Animation Position"
msgstr "Añadir Punto de Animación"
#: scene/animation/animation_player.cpp
-#, fuzzy
msgid "Playback Options"
-msgstr "Opciones de Clase:"
+msgstr "Opciones de Reproducción"
#: scene/animation/animation_player.cpp
#, fuzzy
@@ -24030,7 +24238,7 @@ msgstr "Theme Predeterminado"
#: scene/animation/animation_player.cpp
msgid "Method Call Mode"
-msgstr ""
+msgstr "Modo de Llamada del Método"
#: scene/animation/animation_tree.cpp
msgid "In node '%s', invalid animation: '%s'."
@@ -24121,9 +24329,8 @@ msgid "Tip Bone"
msgstr "Huesos"
#: scene/animation/skeleton_ik.cpp
-#, fuzzy
msgid "Interpolation"
-msgstr "Modo de Interpolación"
+msgstr "Interpolación"
#: scene/animation/skeleton_ik.cpp
#, fuzzy
@@ -24153,9 +24360,8 @@ msgid "Playback Process Mode"
msgstr ""
#: scene/animation/tween.cpp
-#, fuzzy
msgid "Playback Speed"
-msgstr "Reproducir Escena"
+msgstr "Velocidad de Reproducción"
#: scene/audio/audio_stream_player.cpp
#, fuzzy
@@ -24170,13 +24376,12 @@ msgstr "Mantener Proporciones"
#: scene/gui/aspect_ratio_container.cpp scene/gui/texture_button.cpp
#: scene/gui/texture_rect.cpp
-#, fuzzy
msgid "Stretch Mode"
-msgstr "Modo Seleccionar"
+msgstr "Modo de Estiramiento"
#: scene/gui/aspect_ratio_container.cpp scene/gui/box_container.cpp
msgid "Alignment"
-msgstr ""
+msgstr "Alineación"
#: scene/gui/base_button.cpp
#, fuzzy
@@ -24184,9 +24389,8 @@ msgid "Shortcut In Tooltip"
msgstr "Mostrar Orígen"
#: scene/gui/base_button.cpp
-#, fuzzy
msgid "Action Mode"
-msgstr "Modo Icono"
+msgstr "Modo de Acción"
#: scene/gui/base_button.cpp
msgid "Enabled Focus Mode"
@@ -24197,9 +24401,8 @@ msgid "Keep Pressed Outside"
msgstr ""
#: scene/gui/base_button.cpp scene/gui/shortcut.cpp
-#, fuzzy
msgid "Shortcut"
-msgstr "Atajos"
+msgstr "Atajo"
#: scene/gui/base_button.cpp
#, fuzzy
@@ -24214,7 +24417,7 @@ msgstr "Copiar Texto"
#: scene/gui/button.cpp scene/gui/label.cpp scene/gui/line_edit.cpp
#: scene/gui/spin_box.cpp
msgid "Align"
-msgstr ""
+msgstr "Alinear"
#: scene/gui/button.cpp
msgid "Icon Align"
@@ -24378,7 +24581,7 @@ msgstr "Anterior"
#: scene/gui/control.cpp
msgid "Mouse"
-msgstr ""
+msgstr "Ratón"
#: scene/gui/control.cpp
#, fuzzy
@@ -25576,6 +25779,16 @@ msgid "3D Physics"
msgstr " (Física)"
#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "2D Navigation"
+msgstr "Navegación"
+
+#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "3D Navigation"
+msgstr "Navegación"
+
+#: scene/register_scene_types.cpp
msgid "Use hiDPI"
msgstr ""
@@ -27003,7 +27216,7 @@ msgstr "Transición: "
msgid "Refraction"
msgstr "Separación:"
-#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp
+#: scene/resources/material.cpp
msgid "Detail"
msgstr ""
@@ -27088,7 +27301,12 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
-msgid "Sample Partition Type"
+msgid "Sampling"
+msgstr "Escalando: "
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Partition Type"
msgstr "Editar Tipo de Variable"
#: scene/resources/navigation_mesh.cpp
@@ -27106,10 +27324,15 @@ msgid "Source Group Name"
msgstr "Fuente"
#: scene/resources/navigation_mesh.cpp
-msgid "Agent"
+msgid "Cells"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Agents"
+msgstr "Argumentos de Escena Principal:"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Max Climb"
msgstr ""
@@ -27119,11 +27342,16 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
+msgid "Regions"
+msgstr "Región"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
msgid "Merge Size"
msgstr "Mergear desde Escena"
#: scene/resources/navigation_mesh.cpp
-msgid "Edge"
+msgid "Edges"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -27137,6 +27365,11 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
+msgid "Details"
+msgstr "Mostrar Valores por Defecto"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
msgid "Sample Distance"
msgstr "Elegir Instancia:"
@@ -27154,9 +27387,19 @@ msgid "Ledge Spans"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Filter Walkable Low Height Spans"
+msgid "Walkable Low Height Spans"
msgstr ""
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB"
+msgstr "Generando AABB"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB Offset"
+msgstr "Offset:"
+
#: scene/resources/occluder_shape.cpp
msgid "Spheres"
msgstr ""
@@ -27572,6 +27815,11 @@ msgid "Scenario"
msgstr "Escena"
#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Navigation Map"
+msgstr "Navegación"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
msgid "Direct Space State"
msgstr ""
@@ -27589,6 +27837,26 @@ msgstr "Lineal Izquierda"
msgid "Default Angular Damp"
msgstr ""
+#: scene/resources/world.cpp
+#, fuzzy
+msgid "Default Map Up"
+msgstr "Por Defecto"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Size"
+msgstr "Tamaño de Celda"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Height"
+msgstr "Prueba"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Edge Connection Margin"
+msgstr "Editar Conexión:"
+
#: scene/resources/world_2d.cpp
msgid "Canvas"
msgstr ""
diff --git a/editor/translations/et.po b/editor/translations/et.po
index daf3807192..f90543b559 100644
--- a/editor/translations/et.po
+++ b/editor/translations/et.po
@@ -219,9 +219,10 @@ msgid "Data"
msgstr ""
#: core/io/file_access_network.cpp core/register_core_types.cpp
-#: editor/editor_settings.cpp main/main.cpp
+#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
#: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h
+#: scene/gui/file_dialog.cpp
#, fuzzy
msgid "Network"
msgstr "Võrgu profileerija"
@@ -380,6 +381,15 @@ msgstr ""
msgid "Max Size (KB)"
msgstr ""
+#: core/os/input.cpp
+#, fuzzy
+msgid "Mouse Mode"
+msgstr "Liigutamisrežiim"
+
+#: core/os/input.cpp
+msgid "Use Accumulated Input"
+msgstr ""
+
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: servers/audio_server.cpp
msgid "Device"
@@ -572,7 +582,8 @@ msgstr "Kirjeldus"
#: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
-#: main/main.cpp
+#: main/main.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp
msgid "Run"
msgstr "Käivita"
@@ -658,6 +669,11 @@ msgid "Main Run Args"
msgstr ""
#: core/project_settings.cpp
+#, fuzzy
+msgid "Scene Naming"
+msgstr "Stseeni tee:"
+
+#: core/project_settings.cpp
msgid "Search In File Extensions"
msgstr ""
@@ -665,19 +681,13 @@ msgstr ""
msgid "Script Templates Search Path"
msgstr ""
-#: core/project_settings.cpp editor/editor_node.cpp
-#: editor/plugins/version_control_editor_plugin.cpp
-msgid "Version Control"
-msgstr ""
-
#: core/project_settings.cpp
-msgid "Autoload On Startup"
+msgid "Version Control Autoload On Startup"
msgstr ""
#: core/project_settings.cpp
-#, fuzzy
-msgid "Plugin Name"
-msgstr "Pistikprogrammi nimi:"
+msgid "Version Control Plugin Name"
+msgstr ""
#: core/project_settings.cpp scene/2d/collision_object_2d.cpp
#: scene/3d/collision_object.cpp scene/gui/control.cpp
@@ -789,7 +799,8 @@ msgid "Quality"
msgstr ""
#: core/project_settings.cpp scene/gui/file_dialog.cpp
-#: scene/main/scene_tree.cpp servers/visual_server.cpp
+#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp
+#: servers/visual_server.cpp
#, fuzzy
msgid "Filters"
msgstr "Filtreeri sõlmed"
@@ -2206,7 +2217,7 @@ msgid "Open"
msgstr "Ava"
#: editor/dependency_editor.cpp
-msgid "Owners Of:"
+msgid "Owners of: %s (Total: %d)"
msgstr ""
#: editor/dependency_editor.cpp
@@ -2504,7 +2515,7 @@ msgid "Bus Options"
msgstr "Klassi valikud"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/scene_tree_dock.cpp
+#: editor/project_export.cpp editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "Duplikeeri"
@@ -2763,6 +2774,23 @@ msgid "Choose"
msgstr "Vali"
#: editor/editor_export.cpp
+msgid "Project export for platform:"
+msgstr ""
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Completed with errors."
+msgstr "Kopeeri sõlme tee"
+
+#: editor/editor_export.cpp
+msgid "Completed successfully."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Failed."
+msgstr ""
+
+#: editor/editor_export.cpp
msgid "Storing File:"
msgstr "Salvestan faili:"
@@ -2775,6 +2803,31 @@ msgid "Packing"
msgstr "Pakin"
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save PCK"
+msgstr "Salvesta kui"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Cannot create file \"%s\"."
+msgstr "Ei saanud luua kausta."
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to export project files."
+msgstr "Ei saanud luua kausta."
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Can't open file to read from path \"%s\"."
+msgstr "Faili ei saa kirjutamiseks avada:"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save ZIP"
+msgstr "Salvesta kui"
+
+#: editor/editor_export.cpp
msgid ""
"Target platform requires 'ETC' texture compression for GLES2. Enable 'Import "
"Etc' in Project Settings."
@@ -2895,11 +2948,29 @@ msgstr ""
msgid "Custom release template not found."
msgstr ""
+#: editor/editor_export.cpp
+msgid "Prepare Template"
+msgstr ""
+
+#: editor/editor_export.cpp platform/osx/export/export.cpp
+msgid "The given export path doesn't exist."
+msgstr ""
+
#: editor/editor_export.cpp platform/javascript/export/export.cpp
-msgid "Template file not found:"
+#, fuzzy
+msgid "Template file not found: \"%s\"."
msgstr "Mallifaili ei leitud:"
#: editor/editor_export.cpp
+msgid "Failed to copy export template."
+msgstr ""
+
+#: editor/editor_export.cpp platform/windows/export/export.cpp
+#: platform/x11/export/export.cpp
+msgid "PCK Embedding"
+msgstr ""
+
+#: editor/editor_export.cpp
msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB."
msgstr ""
@@ -3077,9 +3148,9 @@ msgid "Import"
msgstr "Impordi"
#: editor/editor_feature_profile.cpp editor/project_export.cpp
-#: platform/android/export/export.cpp platform/javascript/export/export.cpp
-#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
-#: platform/windows/export/export.cpp
+#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#: platform/uwp/export/export.cpp platform/windows/export/export.cpp
msgid "Export"
msgstr "Ekspordi"
@@ -4193,15 +4264,6 @@ msgid ""
"Unable to write to file '%s', file in use, locked or lacking permissions."
msgstr ""
-#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
-msgid "Scene"
-msgstr "Stseen"
-
-#: editor/editor_node.cpp
-#, fuzzy
-msgid "Scene Naming"
-msgstr "Stseeni tee:"
-
#: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp
#: servers/arvr/arvr_interface.cpp
#, fuzzy
@@ -4327,6 +4389,10 @@ msgid "Default Color Picker Mode"
msgstr ""
#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
+msgid "Version Control"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
#, fuzzy
msgid "Username"
msgstr "Nimeta ümber"
@@ -4355,6 +4421,10 @@ msgstr ""
msgid "Add a new scene."
msgstr "Lisa uus stseen."
+#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
+msgid "Scene"
+msgstr "Stseen"
+
#: editor/editor_node.cpp
msgid "Go to previously opened scene."
msgstr ""
@@ -5100,6 +5170,11 @@ msgid ""
"as runnable."
msgstr ""
+#: editor/editor_run_native.cpp
+#, fuzzy
+msgid "Project Run"
+msgstr "Projekt"
+
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
msgstr ""
@@ -5370,7 +5445,9 @@ msgid "Draw Spaces"
msgstr "Kuvamise kutsungid"
#: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp
-#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp
+#: scene/main/scene_tree.cpp scene/resources/world.cpp
+#: scene/resources/world_2d.cpp
msgid "Navigation"
msgstr ""
@@ -6801,7 +6878,7 @@ msgstr ""
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp
-#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp
+#: scene/gui/control.cpp
#, fuzzy
msgid "Filter"
msgstr "Filtreeri sõlmed"
@@ -7090,6 +7167,18 @@ msgid "Saving..."
msgstr ""
#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used as a normal map in 3D. Enabling red-green "
+"texture compression to reduce memory usage (blue channel is discarded)."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap "
+"generation and VRAM texture compression."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
msgid "2D, Detect 3D"
msgstr ""
@@ -7765,11 +7854,20 @@ msgid "New Anim"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+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 "Rename Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Delete Animation?"
msgstr "Kustuta animatsioon?"
@@ -7787,11 +7885,6 @@ 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 "Duplicate Animation"
msgstr ""
@@ -7934,10 +8027,6 @@ msgid "Pin AnimationPlayer"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Create New Animation"
-msgstr ""
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Name:"
msgstr ""
@@ -9996,6 +10085,7 @@ msgid "Points"
msgstr ""
#: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp
+#: scene/resources/navigation_mesh.cpp
msgid "Polygons"
msgstr ""
@@ -11379,8 +11469,9 @@ msgid "Invalid geometry, can't replace by mesh."
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
-msgid "Convert to Mesh2D"
-msgstr ""
+#, fuzzy
+msgid "Convert to MeshInstance2D"
+msgstr "Teisenda..."
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Invalid geometry, can't create polygon."
@@ -12383,8 +12474,7 @@ msgid "Select the previous shape, subtile, or Tile."
msgstr ""
#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp
-#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp
-#: scene/resources/texture.cpp
+#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp
msgid "Region"
msgstr ""
@@ -13831,31 +13921,10 @@ 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 "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 "Export Path"
msgstr ""
@@ -13994,6 +14063,11 @@ msgid "Export templates for this platform are missing:"
msgstr ""
#: editor/project_export.cpp
+#, fuzzy
+msgid "Project Export"
+msgstr "Projekti asutajad"
+
+#: editor/project_export.cpp
msgid "Manage Export Templates"
msgstr ""
@@ -16290,7 +16364,7 @@ msgstr ""
#: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp
#: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp
-#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp
+#: scene/3d/collision_polygon.cpp
msgid "Polygon"
msgstr ""
@@ -16887,7 +16961,6 @@ msgid "Use In Baked Light"
msgstr ""
#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
-#: scene/resources/navigation_mesh.cpp
msgid "Cell"
msgstr ""
@@ -16917,6 +16990,19 @@ msgstr "Kustuta sõlm(ed)"
msgid "Mask"
msgstr ""
+#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
+#, fuzzy
+msgid "Bake Navigation"
+msgstr "Kustuta animatsioon?"
+
+#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp
+#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp
+#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp
+#: scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Navigation Layers"
+msgstr "Kustuta sõlm(ed)"
+
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Plane"
msgstr ""
@@ -18429,10 +18515,6 @@ msgid "Could not execute on device."
msgstr "Ei saanud luua kausta."
#: 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."
@@ -18536,12 +18618,16 @@ msgstr ""
msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version."
msgstr ""
+#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Code Signing"
+msgstr "Signaal"
+
#: 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."
+"'apksigner' could not be found. Please check that the command is available "
+"in the Android SDK build-tools directory. The resulting %s is unsigned."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18557,6 +18643,10 @@ msgid "Could not find keystore, unable to export."
msgstr ""
#: platform/android/export/export_plugin.cpp
+msgid "Could not start apksigner executable."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
@@ -18586,7 +18676,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Unsupported export format!\n"
+msgid "Unsupported export format!"
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18597,20 +18687,19 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Android build version mismatch:\n"
-" Template installed: %s\n"
-" Godot Version: %s\n"
+"Android build version mismatch: Template installed: %s, Godot version: %s. "
"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"
+"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 ""
+#, fuzzy
+msgid "Could not export project files to gradle project."
+msgstr "Ei saanud luua kausta."
#: platform/android/export/export_plugin.cpp
msgid "Could not write expansion package file!"
@@ -18622,7 +18711,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Building of Android project failed, check output for the error.\n"
+"Building of Android project failed, check output for the error. "
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
@@ -18638,7 +18727,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
#, fuzzy
-msgid "Package not found: %s"
+msgid "Package not found: \"%s\"."
msgstr "Paigutuse nime ei leitud!"
#: platform/android/export/export_plugin.cpp
@@ -18647,15 +18736,12 @@ msgid "Creating APK..."
msgstr "Sätted..."
#: platform/android/export/export_plugin.cpp
-msgid ""
-"Could not find template APK to export:\n"
-"%s"
+msgid "Could not find template APK to export: \"%s\"."
msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Missing libraries in the export template for the selected architectures: "
-"%s.\n"
+"Missing libraries in the export template for the selected architectures: %s. "
"Please build a template with all required libraries, or uncheck the missing "
"architectures in the export preset."
msgstr ""
@@ -18666,7 +18752,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
#, fuzzy
-msgid "Could not export project files"
+msgid "Could not export project files."
msgstr "Ei saanud luua kausta."
#: platform/android/export/export_plugin.cpp
@@ -18907,6 +18993,16 @@ msgstr "Kustuta sõlm(ed)"
msgid "Custom BG Color"
msgstr "Kustuta sõlm(ed)"
+#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
+#: platform/osx/export/export.cpp
+msgid "Prepare Templates"
+msgstr ""
+
+#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Export template not found."
+msgstr "Mallifaili ei leitud:"
+
#: platform/iphone/export/export.cpp
msgid "App Store Team ID not specified - cannot configure the project."
msgstr ""
@@ -18928,23 +19024,35 @@ msgid "Run exported HTML in the system's default browser."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not open template for export:"
-msgstr ""
+#, fuzzy
+msgid "Could not open template for export: \"%s\"."
+msgstr "Ei saanud luua kausta."
#: platform/javascript/export/export.cpp
-msgid "Invalid export template:"
-msgstr ""
+#, fuzzy
+msgid "Invalid export template: \"%s\"."
+msgstr "Vigane nimi."
#: platform/javascript/export/export.cpp
-msgid "Could not write file:"
-msgstr ""
+#, fuzzy
+msgid "Could not write file: \"%s\"."
+msgstr "Ei saanud luua kausta."
+
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Icon Creation"
+msgstr "Kuva failikuvajas"
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not read file:"
+msgid "Could not read file: \"%s\"."
msgstr "Ei saanud luua kausta."
#: platform/javascript/export/export.cpp
+msgid "PWA"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
#, fuzzy
msgid "Variant"
msgstr "Versioon:"
@@ -19019,17 +19127,17 @@ msgstr ""
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not read HTML shell:"
+msgid "Could not read HTML shell: \"%s\"."
msgstr "Ei saanud luua kausta."
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not create HTTP server directory:"
+msgid "Could not create HTTP server directory: %s."
msgstr "Ei saanud luua kausta."
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Error starting HTTP server:"
+msgid "Error starting HTTP server: %d."
msgstr "Viga TileSeti salvestamisel!"
#: platform/javascript/export/export.cpp
@@ -19320,9 +19428,28 @@ msgid "Apple Team ID"
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open icon file \"%s\"."
+msgstr "Ei saanud luua kausta."
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start xcrun executable."
+msgstr "Ei saanud luua kausta."
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization failed."
+msgstr "Tõlked"
+
+#: platform/osx/export/export.cpp
+msgid "Notarization request UUID: \"%s\""
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid ""
-"Note: The notarization process generally takes less than an hour. When the "
-"process is completed, you'll receive an email."
+"The notarization process generally takes less than an hour. When the process "
+"is completed, you'll receive an email."
msgstr ""
#: platform/osx/export/export.cpp
@@ -19338,20 +19465,74 @@ msgid ""
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign failed with error \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign require regex module."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Could not start codesign executable, make sure Xcode command line tools are "
+"installed."
+msgstr ""
+
+#: platform/osx/export/export.cpp platform/windows/export/export.cpp
#, fuzzy
msgid "No identity found."
msgstr "Ainult konstandid"
#: platform/osx/export/export.cpp
#, fuzzy
+msgid "Cannot sign file %s."
+msgstr "Tõrge faili '%s' salvestamisel"
+
+#: platform/osx/export/export.cpp
+msgid "Relative symlinks are not supported, exported \"%s\" might be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "DMG Creation"
+msgstr "Kirjeldus"
+
+#: platform/osx/export/export.cpp
+msgid "Could not start hdiutil executable."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed - file exists."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
msgid "Creating app bundle"
msgstr "Loon pisipilti"
#: platform/osx/export/export.cpp
-msgid "Could not find template app to export:"
+msgid "Could not find template app to export: \"%s\"."
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid export format."
+msgstr "Vigane nimi."
+
+#: platform/osx/export/export.cpp
msgid ""
"Relative symlinks are not supported on this OS, the exported project might "
"be broken!"
@@ -19359,7 +19540,7 @@ msgstr ""
#: platform/osx/export/export.cpp
msgid ""
-"Requested template binary '%s' not found. It might be missing from your "
+"Requested template binary \"%s\" not found. It might be missing from your "
"template archive."
msgstr ""
@@ -19400,6 +19581,15 @@ msgid "Sending archive for notarization"
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "ZIP Creation"
+msgstr "Projekt"
+
+#: platform/osx/export/export.cpp
+msgid "Could not open file to read from path \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr ""
@@ -19708,6 +19898,11 @@ msgid "Debug Algorithm"
msgstr "Siluja"
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to rename temporary file \"%s\"."
+msgstr "Ei saanud luua kausta."
+
+#: platform/windows/export/export.cpp
msgid "Identity Type"
msgstr ""
@@ -19755,6 +19950,65 @@ msgid "Trademarks"
msgstr ""
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Resources Modification"
+msgstr "Konstant"
+
+#: platform/windows/export/export.cpp
+msgid "Could not find rcedit executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find wine executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start rcedit executable, configure rcedit path in the Editor "
+"Settings (Export > Windows > Rcedit)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"rcedit failed to modify executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find signtool executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find osslsigncode executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid identity type."
+msgstr "Kehtetud argumendid '%s' ehitamise jaoks"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid timestamp server."
+msgstr "Vigane nimi."
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start signtool executable, configure signtool path in the Editor "
+"Settings (Export > Windows > Signtool)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Signtool failed to sign executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Failed to remove temporary file \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
msgid ""
"The rcedit tool must be configured in the Editor Settings (Export > Windows "
"> Rcedit) to change the icon or app information data."
@@ -19776,6 +20030,23 @@ msgid "Invalid product version:"
msgstr "Vigane nimi."
#: platform/windows/export/export.cpp
+msgid "Windows executables cannot be >= 4 GiB."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+#, fuzzy
+msgid "Failed to open executable file \"%s\"."
+msgstr "Vigane nimi."
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable file header corrupted."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable \"pck\" section not found."
+msgstr ""
+
+#: platform/windows/export/export.cpp
#, fuzzy
msgid "Windows"
msgstr "Uus aken"
@@ -19792,6 +20063,10 @@ msgstr ""
msgid "Wine"
msgstr ""
+#: platform/x11/export/export.cpp
+msgid "32-bit executables cannot have embedded data >= 4 GiB."
+msgstr ""
+
#: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp
#: scene/resources/texture.cpp
#, fuzzy
@@ -19913,7 +20188,8 @@ msgstr ""
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/3d/light.cpp scene/3d/reflection_probe.cpp
-#: scene/3d/visual_instance.cpp scene/resources/material.cpp
+#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp
+#: scene/resources/material.cpp
msgid "Max Distance"
msgstr ""
@@ -20666,6 +20942,18 @@ msgstr ""
msgid "Edge Connection Margin"
msgstr "Ühenda"
+#: scene/2d/navigation_2d.cpp
+msgid ""
+"'Navigation2D' node and 'Navigation2D.get_simple_path()' are deprecated and "
+"will be removed in a future version. Use 'Navigation2DServer.map_get_path()' "
+"instead."
+msgstr ""
+
+#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
+#, fuzzy
+msgid "Path Desired Distance"
+msgstr "Paigalda"
+
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
msgid "Target Desired Distance"
msgstr ""
@@ -20718,13 +21006,16 @@ msgid ""
msgstr ""
#: scene/2d/navigation_polygon.cpp
-msgid ""
-"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
-"node. It only provides navigation data."
+msgid "Navpoly"
msgstr ""
-#: scene/2d/navigation_polygon.cpp
-msgid "Navpoly"
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Enter Cost"
+msgstr "Kustuta sõlm(ed)"
+
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+msgid "Travel Cost"
msgstr ""
#: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp
@@ -21834,6 +22125,13 @@ msgstr ""
msgid "Transform Normals"
msgstr "3D muundus rada"
+#: scene/3d/navigation.cpp
+msgid ""
+"'Navigation' node and 'Navigation.get_simple_path()' are deprecated and will "
+"be removed in a future version. Use 'NavigationServer.map_get_path()' "
+"instead."
+msgstr ""
+
#: scene/3d/navigation.cpp scene/resources/curve.cpp
#, fuzzy
msgid "Up Vector"
@@ -21857,12 +22155,6 @@ msgid ""
"The NavigationAgent can be used only under a Spatial inheriting parent node."
msgstr ""
-#: scene/3d/navigation_mesh_instance.cpp
-msgid ""
-"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
-"It only provides navigation data."
-msgstr ""
-
#: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp
msgid "NavMesh"
msgstr ""
@@ -24426,6 +24718,16 @@ msgid "3D Physics"
msgstr ""
#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "2D Navigation"
+msgstr "Kustuta animatsioon?"
+
+#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "3D Navigation"
+msgstr "Kustuta animatsioon?"
+
+#: scene/register_scene_types.cpp
msgid "Use hiDPI"
msgstr ""
@@ -25802,7 +26104,7 @@ msgstr "Tõlked"
msgid "Refraction"
msgstr "Versioon:"
-#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp
+#: scene/resources/material.cpp
msgid "Detail"
msgstr ""
@@ -25882,8 +26184,14 @@ msgid "Visible Instance Count"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Sample Partition Type"
-msgstr ""
+#, fuzzy
+msgid "Sampling"
+msgstr "Skaleerimisrežiim"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Partition Type"
+msgstr "Versioon:"
#: scene/resources/navigation_mesh.cpp
msgid "Parsed Geometry Type"
@@ -25899,10 +26207,15 @@ msgid "Source Group Name"
msgstr "Skripti nimi:"
#: scene/resources/navigation_mesh.cpp
-msgid "Agent"
+msgid "Cells"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Agents"
+msgstr "Vidinad"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Max Climb"
msgstr ""
@@ -25912,11 +26225,16 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
+msgid "Regions"
+msgstr "Hiljuti avatud"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
msgid "Merge Size"
msgstr "Liida stseenist"
#: scene/resources/navigation_mesh.cpp
-msgid "Edge"
+msgid "Edges"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -25929,6 +26247,11 @@ msgid "Verts Per Poly"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Details"
+msgstr "Laadi vaikimisi"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Sample Distance"
msgstr ""
@@ -25945,9 +26268,18 @@ msgid "Ledge Spans"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Filter Walkable Low Height Spans"
+msgid "Walkable Low Height Spans"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
+msgid "Baking AABB"
msgstr ""
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB Offset"
+msgstr "Muuda tüüpi"
+
#: scene/resources/occluder_shape.cpp
msgid "Spheres"
msgstr ""
@@ -26348,6 +26680,11 @@ msgid "Scenario"
msgstr "Stseen"
#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Navigation Map"
+msgstr "Kustuta sõlm(ed)"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
msgid "Direct Space State"
msgstr ""
@@ -26365,6 +26702,26 @@ msgstr "Vaikimisi"
msgid "Default Angular Damp"
msgstr ""
+#: scene/resources/world.cpp
+#, fuzzy
+msgid "Default Map Up"
+msgstr "Vaikimisi"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Size"
+msgstr "Kinemaatiline eelvaade"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Height"
+msgstr "Testimine"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Edge Connection Margin"
+msgstr "Ühenda"
+
#: scene/resources/world_2d.cpp
msgid "Canvas"
msgstr ""
diff --git a/editor/translations/eu.po b/editor/translations/eu.po
index ce0906409e..9ffd16f336 100644
--- a/editor/translations/eu.po
+++ b/editor/translations/eu.po
@@ -204,9 +204,10 @@ msgid "Data"
msgstr "Datuak"
#: core/io/file_access_network.cpp core/register_core_types.cpp
-#: editor/editor_settings.cpp main/main.cpp
+#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
#: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h
+#: scene/gui/file_dialog.cpp
msgid "Network"
msgstr "Sarea"
@@ -357,6 +358,15 @@ msgstr ""
msgid "Max Size (KB)"
msgstr ""
+#: core/os/input.cpp
+#, fuzzy
+msgid "Mouse Mode"
+msgstr "Atxikitze modua:"
+
+#: core/os/input.cpp
+msgid "Use Accumulated Input"
+msgstr ""
+
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: servers/audio_server.cpp
msgid "Device"
@@ -544,7 +554,8 @@ msgstr "Deskripzioa"
#: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
-#: main/main.cpp
+#: main/main.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp
msgid "Run"
msgstr ""
@@ -628,6 +639,11 @@ msgid "Main Run Args"
msgstr ""
#: core/project_settings.cpp
+#, fuzzy
+msgid "Scene Naming"
+msgstr "Eszenaren bidea:"
+
+#: core/project_settings.cpp
msgid "Search In File Extensions"
msgstr ""
@@ -635,18 +651,15 @@ msgstr ""
msgid "Script Templates Search Path"
msgstr ""
-#: core/project_settings.cpp editor/editor_node.cpp
-#: editor/plugins/version_control_editor_plugin.cpp
-msgid "Version Control"
-msgstr "Bertsio kontrola"
-
#: core/project_settings.cpp
-msgid "Autoload On Startup"
-msgstr ""
+#, fuzzy
+msgid "Version Control Autoload On Startup"
+msgstr "Bertsio kontrola"
#: core/project_settings.cpp
-msgid "Plugin Name"
-msgstr ""
+#, fuzzy
+msgid "Version Control Plugin Name"
+msgstr "Bertsio kontrola"
#: core/project_settings.cpp scene/2d/collision_object_2d.cpp
#: scene/3d/collision_object.cpp scene/gui/control.cpp
@@ -754,7 +767,8 @@ msgid "Quality"
msgstr ""
#: core/project_settings.cpp scene/gui/file_dialog.cpp
-#: scene/main/scene_tree.cpp servers/visual_server.cpp
+#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp
+#: servers/visual_server.cpp
#, fuzzy
msgid "Filters"
msgstr "Iragazkiak..."
@@ -2165,8 +2179,8 @@ msgid "Open"
msgstr "Ireki"
#: editor/dependency_editor.cpp
-msgid "Owners Of:"
-msgstr "Hauen jabeak:"
+msgid "Owners of: %s (Total: %d)"
+msgstr ""
#: editor/dependency_editor.cpp
#, fuzzy
@@ -2472,7 +2486,7 @@ msgid "Bus Options"
msgstr "Klaseko aukerak"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/scene_tree_dock.cpp
+#: editor/project_export.cpp editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "Bikoiztu"
@@ -2728,6 +2742,23 @@ msgid "Choose"
msgstr ""
#: editor/editor_export.cpp
+msgid "Project export for platform:"
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Completed with errors."
+msgstr ""
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Completed successfully."
+msgstr "Paketea ondo instalatu da!"
+
+#: editor/editor_export.cpp
+msgid "Failed."
+msgstr ""
+
+#: editor/editor_export.cpp
msgid "Storing File:"
msgstr ""
@@ -2740,6 +2771,28 @@ msgid "Packing"
msgstr ""
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save PCK"
+msgstr "Gorde honela"
+
+#: editor/editor_export.cpp
+msgid "Cannot create file \"%s\"."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Failed to export project files."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Can't open file to read from path \"%s\"."
+msgstr ""
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save ZIP"
+msgstr "Gorde honela"
+
+#: editor/editor_export.cpp
msgid ""
"Target platform requires 'ETC' texture compression for GLES2. Enable 'Import "
"Etc' in Project Settings."
@@ -2843,8 +2896,28 @@ msgstr ""
msgid "Custom release template not found."
msgstr ""
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Prepare Template"
+msgstr "Hautatu txantiloi fitxategia"
+
+#: editor/editor_export.cpp platform/osx/export/export.cpp
+msgid "The given export path doesn't exist."
+msgstr ""
+
#: editor/editor_export.cpp platform/javascript/export/export.cpp
-msgid "Template file not found:"
+#, fuzzy
+msgid "Template file not found: \"%s\"."
+msgstr "Paketearen edukia:"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to copy export template."
+msgstr "Kudeatu esportazio txantiloiak..."
+
+#: editor/editor_export.cpp platform/windows/export/export.cpp
+#: platform/x11/export/export.cpp
+msgid "PCK Embedding"
msgstr ""
#: editor/editor_export.cpp
@@ -3019,9 +3092,9 @@ msgid "Import"
msgstr ""
#: editor/editor_feature_profile.cpp editor/project_export.cpp
-#: platform/android/export/export.cpp platform/javascript/export/export.cpp
-#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
-#: platform/windows/export/export.cpp
+#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#: platform/uwp/export/export.cpp platform/windows/export/export.cpp
msgid "Export"
msgstr "Esportatu"
@@ -4115,15 +4188,6 @@ msgid ""
"Unable to write to file '%s', file in use, locked or lacking permissions."
msgstr ""
-#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
-msgid "Scene"
-msgstr ""
-
-#: editor/editor_node.cpp
-#, fuzzy
-msgid "Scene Naming"
-msgstr "Eszenaren bidea:"
-
#: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp
#: servers/arvr/arvr_interface.cpp
msgid "Interface"
@@ -4244,6 +4308,10 @@ msgid "Default Color Picker Mode"
msgstr ""
#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
+msgid "Version Control"
+msgstr "Bertsio kontrola"
+
+#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
msgid "Username"
msgstr ""
@@ -4271,6 +4339,10 @@ msgstr ""
msgid "Add a new scene."
msgstr ""
+#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
+msgid "Scene"
+msgstr ""
+
#: editor/editor_node.cpp
msgid "Go to previously opened scene."
msgstr ""
@@ -5011,6 +5083,11 @@ msgid ""
"as runnable."
msgstr ""
+#: editor/editor_run_native.cpp
+#, fuzzy
+msgid "Project Run"
+msgstr "Proiektua"
+
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
msgstr ""
@@ -5276,7 +5353,9 @@ msgid "Draw Spaces"
msgstr ""
#: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp
-#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp
+#: scene/main/scene_tree.cpp scene/resources/world.cpp
+#: scene/resources/world_2d.cpp
msgid "Navigation"
msgstr ""
@@ -6706,7 +6785,7 @@ msgstr ""
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp
-#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp
+#: scene/gui/control.cpp
#, fuzzy
msgid "Filter"
msgstr "Iragazkiak..."
@@ -6988,6 +7067,18 @@ msgid "Saving..."
msgstr ""
#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used as a normal map in 3D. Enabling red-green "
+"texture compression to reduce memory usage (blue channel is discarded)."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap "
+"generation and VRAM texture compression."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
msgid "2D, Detect 3D"
msgstr ""
@@ -7658,11 +7749,20 @@ msgid "New Anim"
msgstr "Animazio berria"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Change Animation Name:"
msgstr "Aldatu animazioaren izena:"
#: editor/plugins/animation_player_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Rename Animation"
+msgstr "Aldatu izena animazioari"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Delete Animation?"
msgstr "Ezabatu animazioa?"
@@ -7680,11 +7780,6 @@ msgid "Animation name already exists!"
msgstr "Animazio izena existitzen da jada!"
#: editor/plugins/animation_player_editor_plugin.cpp
-#: editor/plugins/sprite_frames_editor_plugin.cpp
-msgid "Rename Animation"
-msgstr "Aldatu izena animazioari"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate Animation"
msgstr "Bikoiztu animazioa"
@@ -7827,10 +7922,6 @@ msgid "Pin AnimationPlayer"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Create New Animation"
-msgstr ""
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Name:"
msgstr ""
@@ -9894,6 +9985,7 @@ msgid "Points"
msgstr ""
#: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp
+#: scene/resources/navigation_mesh.cpp
msgid "Polygons"
msgstr ""
@@ -11257,7 +11349,7 @@ msgid "Invalid geometry, can't replace by mesh."
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
-msgid "Convert to Mesh2D"
+msgid "Convert to MeshInstance2D"
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
@@ -12260,8 +12352,7 @@ msgid "Select the previous shape, subtile, or Tile."
msgstr ""
#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp
-#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp
-#: scene/resources/texture.cpp
+#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp
msgid "Region"
msgstr ""
@@ -13697,31 +13788,10 @@ 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 "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 "Export Path"
msgstr ""
@@ -13858,6 +13928,11 @@ msgid "Export templates for this platform are missing:"
msgstr ""
#: editor/project_export.cpp
+#, fuzzy
+msgid "Project Export"
+msgstr "Proiektuaren sortzaileak"
+
+#: editor/project_export.cpp
msgid "Manage Export Templates"
msgstr ""
@@ -16147,7 +16222,7 @@ msgstr ""
#: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp
#: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp
-#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp
+#: scene/3d/collision_polygon.cpp
msgid "Polygon"
msgstr ""
@@ -16735,7 +16810,6 @@ msgid "Use In Baked Light"
msgstr ""
#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
-#: scene/resources/navigation_mesh.cpp
msgid "Cell"
msgstr ""
@@ -16764,6 +16838,19 @@ msgstr "Blend4 nodoa"
msgid "Mask"
msgstr ""
+#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
+#, fuzzy
+msgid "Bake Navigation"
+msgstr "Ezabatu animazioa?"
+
+#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp
+#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp
+#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp
+#: scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Navigation Layers"
+msgstr "Trantsizio nodoa"
+
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Plane"
msgstr ""
@@ -18250,10 +18337,6 @@ 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."
@@ -18357,12 +18440,16 @@ msgstr ""
msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version."
msgstr ""
+#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Code Signing"
+msgstr "Seinalea"
+
#: 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."
+"'apksigner' could not be found. Please check that the command is available "
+"in the Android SDK build-tools directory. The resulting %s is unsigned."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18381,6 +18468,10 @@ msgid "Could not find keystore, unable to export."
msgstr ""
#: platform/android/export/export_plugin.cpp
+msgid "Could not start apksigner executable."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
@@ -18409,7 +18500,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Unsupported export format!\n"
+msgid "Unsupported export format!"
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18420,19 +18511,17 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Android build version mismatch:\n"
-" Template installed: %s\n"
-" Godot Version: %s\n"
+"Android build version mismatch: Template installed: %s, Godot version: %s. "
"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"
+"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"
+msgid "Could not export project files to gradle project."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18445,7 +18534,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Building of Android project failed, check output for the error.\n"
+"Building of Android project failed, check output for the error. "
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
@@ -18461,7 +18550,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
#, fuzzy
-msgid "Package not found: %s"
+msgid "Package not found: \"%s\"."
msgstr "Paketearen edukia:"
#: platform/android/export/export_plugin.cpp
@@ -18469,15 +18558,12 @@ msgid "Creating APK..."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid ""
-"Could not find template APK to export:\n"
-"%s"
+msgid "Could not find template APK to export: \"%s\"."
msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Missing libraries in the export template for the selected architectures: "
-"%s.\n"
+"Missing libraries in the export template for the selected architectures: %s. "
"Please build a template with all required libraries, or uncheck the missing "
"architectures in the export preset."
msgstr ""
@@ -18487,8 +18573,9 @@ msgid "Adding files..."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Could not export project files"
-msgstr ""
+#, fuzzy
+msgid "Could not export project files."
+msgstr "Ezin izan da scripta exekutatu:"
#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
@@ -18725,6 +18812,17 @@ msgstr "Funtzioak:"
msgid "Custom BG Color"
msgstr "Funtzioak:"
+#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Prepare Templates"
+msgstr "Godot esportazio-txantiloiak"
+
+#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Export template not found."
+msgstr "Esportazio-txantiloi kudeatzailea"
+
#: platform/iphone/export/export.cpp
msgid "App Store Team ID not specified - cannot configure the project."
msgstr ""
@@ -18746,23 +18844,34 @@ msgid "Run exported HTML in the system's default browser."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not open template for export:"
+msgid "Could not open template for export: \"%s\"."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Invalid export template:"
-msgstr ""
+#, fuzzy
+msgid "Invalid export template: \"%s\"."
+msgstr "Animazio izen baliogabea!"
#: platform/javascript/export/export.cpp
-msgid "Could not write file:"
-msgstr ""
+#, fuzzy
+msgid "Could not write file: \"%s\"."
+msgstr "Ezin izan da scripta exekutatu:"
+
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Icon Creation"
+msgstr "Edukiak:"
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not read file:"
+msgid "Could not read file: \"%s\"."
msgstr "Ezin izan da scripta exekutatu:"
#: platform/javascript/export/export.cpp
+msgid "PWA"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
#, fuzzy
msgid "Variant"
msgstr "Enumerazioak"
@@ -18837,15 +18946,16 @@ msgid "Icon 512 X 512"
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not read HTML shell:"
-msgstr ""
+#, fuzzy
+msgid "Could not read HTML shell: \"%s\"."
+msgstr "Ezin izan da scripta exekutatu:"
#: platform/javascript/export/export.cpp
-msgid "Could not create HTTP server directory:"
+msgid "Could not create HTTP server directory: %s."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Error starting HTTP server:"
+msgid "Error starting HTTP server: %d."
msgstr ""
#: platform/javascript/export/export.cpp
@@ -19131,9 +19241,27 @@ msgid "Apple Team ID"
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open icon file \"%s\"."
+msgstr "Ezin izan da scripta exekutatu:"
+
+#: platform/osx/export/export.cpp
+msgid "Could not start xcrun executable."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization failed."
+msgstr "Erabili biraketa atxikitzea"
+
+#: platform/osx/export/export.cpp
+msgid "Notarization request UUID: \"%s\""
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid ""
-"Note: The notarization process generally takes less than an hour. When the "
-"process is completed, you'll receive an email."
+"The notarization process generally takes less than an hour. When the process "
+"is completed, you'll receive an email."
msgstr ""
#: platform/osx/export/export.cpp
@@ -19149,19 +19277,72 @@ msgid ""
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign failed with error \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign require regex module."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Could not start codesign executable, make sure Xcode command line tools are "
+"installed."
+msgstr ""
+
+#: platform/osx/export/export.cpp platform/windows/export/export.cpp
#, fuzzy
msgid "No identity found."
msgstr "Konstanteak bakarrik"
#: platform/osx/export/export.cpp
+msgid "Cannot sign file %s."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Relative symlinks are not supported, exported \"%s\" might be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "DMG Creation"
+msgstr "Deskripzioa"
+
+#: platform/osx/export/export.cpp
+msgid "Could not start hdiutil executable."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed - file exists."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed."
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid "Creating app bundle"
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Could not find template app to export:"
+msgid "Could not find template app to export: \"%s\"."
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid export format."
+msgstr "Animazio izen baliogabea!"
+
+#: platform/osx/export/export.cpp
msgid ""
"Relative symlinks are not supported on this OS, the exported project might "
"be broken!"
@@ -19169,7 +19350,7 @@ msgstr ""
#: platform/osx/export/export.cpp
msgid ""
-"Requested template binary '%s' not found. It might be missing from your "
+"Requested template binary \"%s\" not found. It might be missing from your "
"template archive."
msgstr ""
@@ -19210,6 +19391,15 @@ msgid "Sending archive for notarization"
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "ZIP Creation"
+msgstr "Proiektua"
+
+#: platform/osx/export/export.cpp
+msgid "Could not open file to read from path \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr ""
@@ -19514,6 +19704,10 @@ msgid "Debug Algorithm"
msgstr ""
#: platform/windows/export/export.cpp
+msgid "Failed to rename temporary file \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
msgid "Identity Type"
msgstr ""
@@ -19559,6 +19753,65 @@ msgid "Trademarks"
msgstr ""
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Resources Modification"
+msgstr "Itsatsi animazioa"
+
+#: platform/windows/export/export.cpp
+msgid "Could not find rcedit executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find wine executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start rcedit executable, configure rcedit path in the Editor "
+"Settings (Export > Windows > Rcedit)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"rcedit failed to modify executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find signtool executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find osslsigncode executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid identity type."
+msgstr "'%s' eraikitzeko argumentu baliogabeak"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid timestamp server."
+msgstr "Animazio izen baliogabea!"
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start signtool executable, configure signtool path in the Editor "
+"Settings (Export > Windows > Signtool)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Signtool failed to sign executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Failed to remove temporary file \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
msgid ""
"The rcedit tool must be configured in the Editor Settings (Export > Windows "
"> Rcedit) to change the icon or app information data."
@@ -19580,6 +19833,23 @@ msgid "Invalid product version:"
msgstr "Animazio izen baliogabea!"
#: platform/windows/export/export.cpp
+msgid "Windows executables cannot be >= 4 GiB."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+#, fuzzy
+msgid "Failed to open executable file \"%s\"."
+msgstr "Animazio izen baliogabea!"
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable file header corrupted."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable \"pck\" section not found."
+msgstr ""
+
+#: platform/windows/export/export.cpp
msgid "Windows"
msgstr ""
@@ -19595,6 +19865,10 @@ msgstr ""
msgid "Wine"
msgstr ""
+#: platform/x11/export/export.cpp
+msgid "32-bit executables cannot have embedded data >= 4 GiB."
+msgstr ""
+
#: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp
#: scene/resources/texture.cpp
#, fuzzy
@@ -19711,7 +19985,8 @@ msgstr ""
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/3d/light.cpp scene/3d/reflection_probe.cpp
-#: scene/3d/visual_instance.cpp scene/resources/material.cpp
+#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp
+#: scene/resources/material.cpp
msgid "Max Distance"
msgstr ""
@@ -20445,6 +20720,18 @@ msgstr ""
msgid "Edge Connection Margin"
msgstr "Edukiak:"
+#: scene/2d/navigation_2d.cpp
+msgid ""
+"'Navigation2D' node and 'Navigation2D.get_simple_path()' are deprecated and "
+"will be removed in a future version. Use 'Navigation2DServer.map_get_path()' "
+"instead."
+msgstr ""
+
+#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
+#, fuzzy
+msgid "Path Desired Distance"
+msgstr "Instalatu"
+
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
msgid "Target Desired Distance"
msgstr ""
@@ -20496,13 +20783,16 @@ msgid ""
msgstr ""
#: scene/2d/navigation_polygon.cpp
-msgid ""
-"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
-"node. It only provides navigation data."
+msgid "Navpoly"
msgstr ""
-#: scene/2d/navigation_polygon.cpp
-msgid "Navpoly"
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Enter Cost"
+msgstr "Blend4 nodoa"
+
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+msgid "Travel Cost"
msgstr ""
#: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp
@@ -21599,6 +21889,13 @@ msgstr ""
msgid "Transform Normals"
msgstr "3D Transformazioaren pista"
+#: scene/3d/navigation.cpp
+msgid ""
+"'Navigation' node and 'Navigation.get_simple_path()' are deprecated and will "
+"be removed in a future version. Use 'NavigationServer.map_get_path()' "
+"instead."
+msgstr ""
+
#: scene/3d/navigation.cpp scene/resources/curve.cpp
msgid "Up Vector"
msgstr ""
@@ -21620,12 +21917,6 @@ msgid ""
"The NavigationAgent can be used only under a Spatial inheriting parent node."
msgstr ""
-#: scene/3d/navigation_mesh_instance.cpp
-msgid ""
-"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
-"It only provides navigation data."
-msgstr ""
-
#: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp
msgid "NavMesh"
msgstr ""
@@ -24137,6 +24428,16 @@ msgid "3D Physics"
msgstr ""
#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "2D Navigation"
+msgstr "Trantsizio nodoa"
+
+#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "3D Navigation"
+msgstr "Trantsizio nodoa"
+
+#: scene/register_scene_types.cpp
msgid "Use hiDPI"
msgstr ""
@@ -25488,7 +25789,7 @@ msgstr "Trantsizio nodoa"
msgid "Refraction"
msgstr "Enumerazioak"
-#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp
+#: scene/resources/material.cpp
msgid "Detail"
msgstr ""
@@ -25566,10 +25867,15 @@ msgid "Visible Instance Count"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Sample Partition Type"
+msgid "Sampling"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Partition Type"
+msgstr "Enumerazioak"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Parsed Geometry Type"
msgstr ""
@@ -25582,10 +25888,15 @@ msgid "Source Group Name"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Agent"
+msgid "Cells"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Agents"
+msgstr "Edukiak:"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Max Climb"
msgstr ""
@@ -25594,11 +25905,16 @@ msgid "Max Slope"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Regions"
+msgstr "Funtzioak:"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Merge Size"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Edge"
+msgid "Edges"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -25611,6 +25927,11 @@ msgid "Verts Per Poly"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Details"
+msgstr "Inportatu profila(k)"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Sample Distance"
msgstr ""
@@ -25627,9 +25948,18 @@ msgid "Ledge Spans"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Filter Walkable Low Height Spans"
+msgid "Walkable Low Height Spans"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
+msgid "Baking AABB"
msgstr ""
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB Offset"
+msgstr "Kide mota"
+
#: scene/resources/occluder_shape.cpp
msgid "Spheres"
msgstr ""
@@ -26022,6 +26352,11 @@ msgid "Scenario"
msgstr "Eszenaren bidea:"
#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Navigation Map"
+msgstr "Trantsizio nodoa"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
msgid "Direct Space State"
msgstr ""
@@ -26039,6 +26374,26 @@ msgstr "Birkargatu azala"
msgid "Default Angular Damp"
msgstr ""
+#: scene/resources/world.cpp
+#, fuzzy
+msgid "Default Map Up"
+msgstr "Aurrebista:"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Size"
+msgstr "Aurrebista:"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Height"
+msgstr "Birkargatu azala"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Edge Connection Margin"
+msgstr "Edukiak:"
+
#: scene/resources/world_2d.cpp
msgid "Canvas"
msgstr ""
diff --git a/editor/translations/fa.po b/editor/translations/fa.po
index f28fc02819..0b7bd8cdb1 100644
--- a/editor/translations/fa.po
+++ b/editor/translations/fa.po
@@ -25,13 +25,14 @@
# Alireza Khodabande <alirezakhodabande74@gmail.com>, 2021.
# Seyed Fazel Alavi <fazel8195@gmail.com>, 2022.
# Giga hertz <gigahertzyt@gmail.com>, 2022.
+# Aryan Azadeh <aryan@azadeh.email>, 2022.
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: 2022-04-03 13:13+0000\n"
-"Last-Translator: Giga hertz <gigahertzyt@gmail.com>\n"
+"PO-Revision-Date: 2022-06-20 06:44+0000\n"
+"Last-Translator: Aryan Azadeh <aryan@azadeh.email>\n"
"Language-Team: Persian <https://hosted.weblate.org/projects/godot-engine/"
"godot/fa/>\n"
"Language: fa\n"
@@ -39,7 +40,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.12-dev\n"
+"X-Generator: Weblate 4.13.1-dev\n"
#: core/bind/core_bind.cpp main/main.cpp
msgid "Tablet Driver"
@@ -240,9 +241,10 @@ msgid "Data"
msgstr ""
#: core/io/file_access_network.cpp core/register_core_types.cpp
-#: editor/editor_settings.cpp main/main.cpp
+#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
#: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h
+#: scene/gui/file_dialog.cpp
#, fuzzy
msgid "Network"
msgstr "صدور پروژه"
@@ -402,6 +404,15 @@ msgstr ""
msgid "Max Size (KB)"
msgstr ""
+#: core/os/input.cpp
+#, fuzzy
+msgid "Mouse Mode"
+msgstr "انتخاب حالت"
+
+#: core/os/input.cpp
+msgid "Use Accumulated Input"
+msgstr ""
+
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: servers/audio_server.cpp
msgid "Device"
@@ -601,7 +612,8 @@ msgstr "تعریÙ"
#: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
-#: main/main.cpp
+#: main/main.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp
msgid "Run"
msgstr "اجرا"
@@ -683,13 +695,17 @@ msgstr "طرح پیش ÙØ±Ø¶ اتوبوس را بارگیری کنید."
#: editor/editor_settings.cpp editor/script_create_dialog.cpp
#: scene/2d/camera_2d.cpp scene/3d/light.cpp scene/main/node.cpp
msgid "Editor"
-msgstr "ویرایشگر"
+msgstr "ÙˆÛŒØ±Ø§ÛŒÙØ´Ú¯ÙŽØ±"
#: core/project_settings.cpp
msgid "Main Run Args"
msgstr ""
#: core/project_settings.cpp
+msgid "Scene Naming"
+msgstr ""
+
+#: core/project_settings.cpp
msgid "Search In File Extensions"
msgstr ""
@@ -697,19 +713,15 @@ msgstr ""
msgid "Script Templates Search Path"
msgstr ""
-#: core/project_settings.cpp editor/editor_node.cpp
-#: editor/plugins/version_control_editor_plugin.cpp
-msgid "Version Control"
-msgstr "مهار نسخه"
-
#: core/project_settings.cpp
-msgid "Autoload On Startup"
-msgstr ""
+#, fuzzy
+msgid "Version Control Autoload On Startup"
+msgstr "مهار نسخه"
#: core/project_settings.cpp
#, fuzzy
-msgid "Plugin Name"
-msgstr "Ø§ÙØ²ÙˆÙ†Ù‡â€ŒÙ‡Ø§"
+msgid "Version Control Plugin Name"
+msgstr "مهار نسخه"
#: core/project_settings.cpp scene/2d/collision_object_2d.cpp
#: scene/3d/collision_object.cpp scene/gui/control.cpp
@@ -819,7 +831,8 @@ msgid "Quality"
msgstr ""
#: core/project_settings.cpp scene/gui/file_dialog.cpp
-#: scene/main/scene_tree.cpp servers/visual_server.cpp
+#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp
+#: servers/visual_server.cpp
#, fuzzy
msgid "Filters"
msgstr "صاÙÛŒ:"
@@ -2252,8 +2265,8 @@ msgid "Open"
msgstr "باز کن"
#: editor/dependency_editor.cpp
-msgid "Owners Of:"
-msgstr "مالکانÙ:"
+msgid "Owners of: %s (Total: %d)"
+msgstr ""
#: editor/dependency_editor.cpp
msgid ""
@@ -2554,7 +2567,7 @@ msgid "Bus Options"
msgstr "گزینه های اتوبوس"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/scene_tree_dock.cpp
+#: editor/project_export.cpp editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "تکثیر کردن"
@@ -2812,6 +2825,24 @@ msgid "Choose"
msgstr "انتخاب کنید"
#: editor/editor_export.cpp
+msgid "Project export for platform:"
+msgstr ""
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Completed with errors."
+msgstr "کپی کردن مسیر node"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Completed successfully."
+msgstr "بسته با موÙقیت نصب شد!"
+
+#: editor/editor_export.cpp
+msgid "Failed."
+msgstr ""
+
+#: editor/editor_export.cpp
msgid "Storing File:"
msgstr "ذخیره ÙØ§ÛŒÙ„:"
@@ -2824,6 +2855,31 @@ msgid "Packing"
msgstr "بسته بندی"
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save PCK"
+msgstr "ذخیره در"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Cannot create file \"%s\"."
+msgstr "ناتوان در ساختن پوشه."
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to export project files."
+msgstr "نمی‌تواند یک پوشه ایجاد شود."
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Can't open file to read from path \"%s\"."
+msgstr "ناتوان در گشودن پروژه"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save ZIP"
+msgstr "ذخیره در"
+
+#: editor/editor_export.cpp
msgid ""
"Target platform requires 'ETC' texture compression for GLES2. Enable 'Import "
"Etc' in Project Settings."
@@ -2939,8 +2995,29 @@ msgstr ""
msgid "Custom release template not found."
msgstr ""
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Prepare Template"
+msgstr "مدیریت صدور قالب ها"
+
+#: editor/editor_export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "The given export path doesn't exist."
+msgstr "پرونده موجود نیست."
+
#: editor/editor_export.cpp platform/javascript/export/export.cpp
-msgid "Template file not found:"
+#, fuzzy
+msgid "Template file not found: \"%s\"."
+msgstr "طول انیمیشن (به ثانیه)."
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to copy export template."
+msgstr "نام دارایی ایندکس نامعتبر."
+
+#: editor/editor_export.cpp platform/windows/export/export.cpp
+#: platform/x11/export/export.cpp
+msgid "PCK Embedding"
msgstr ""
#: editor/editor_export.cpp
@@ -3117,9 +3194,9 @@ msgid "Import"
msgstr "وارد کردن"
#: editor/editor_feature_profile.cpp editor/project_export.cpp
-#: platform/android/export/export.cpp platform/javascript/export/export.cpp
-#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
-#: platform/windows/export/export.cpp
+#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#: platform/uwp/export/export.cpp platform/windows/export/export.cpp
msgid "Export"
msgstr "خروجی"
@@ -4219,14 +4296,6 @@ msgid ""
"Unable to write to file '%s', file in use, locked or lacking permissions."
msgstr ""
-#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
-msgid "Scene"
-msgstr "صحنه"
-
-#: editor/editor_node.cpp
-msgid "Scene Naming"
-msgstr ""
-
#: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp
#: servers/arvr/arvr_interface.cpp
#, fuzzy
@@ -4354,6 +4423,10 @@ msgid "Default Color Picker Mode"
msgstr ""
#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
+msgid "Version Control"
+msgstr "مهار نسخه"
+
+#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
#, fuzzy
msgid "Username"
msgstr "تغییر نام"
@@ -4382,6 +4455,10 @@ msgstr ""
msgid "Add a new scene."
msgstr "Ø§ÙØ²ÙˆØ¯Ù† صحنه جدید."
+#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
+msgid "Scene"
+msgstr "صحنه"
+
#: editor/editor_node.cpp
msgid "Go to previously opened scene."
msgstr ""
@@ -4657,7 +4734,7 @@ msgstr ""
#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp
msgid "Community"
-msgstr "جامعه"
+msgstr "اَنجÙÙ…ÙŽÙ†"
#: editor/editor_node.cpp
#, fuzzy
@@ -5149,6 +5226,11 @@ msgid ""
"as runnable."
msgstr ""
+#: editor/editor_run_native.cpp
+#, fuzzy
+msgid "Project Run"
+msgstr "پروژه"
+
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
msgstr ""
@@ -5425,7 +5507,9 @@ msgid "Draw Spaces"
msgstr "ÙØ±Ø§Ø®ÙˆØ§Ù†ÛŒ"
#: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp
-#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp
+#: scene/main/scene_tree.cpp scene/resources/world.cpp
+#: scene/resources/world_2d.cpp
msgid "Navigation"
msgstr ""
@@ -6939,7 +7023,7 @@ msgstr ""
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp
-#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp
+#: scene/gui/control.cpp
#, fuzzy
msgid "Filter"
msgstr "صاÙÛŒ:"
@@ -7230,6 +7314,18 @@ msgid "Saving..."
msgstr ""
#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used as a normal map in 3D. Enabling red-green "
+"texture compression to reduce memory usage (blue channel is discarded)."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap "
+"generation and VRAM texture compression."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
msgid "2D, Detect 3D"
msgstr ""
@@ -7939,11 +8035,20 @@ msgid "New Anim"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+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 "Rename Animation"
+msgstr "تغییر نام انیمیشن"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Delete Animation?"
msgstr "انیمیشن حذ٠شود؟"
@@ -7963,11 +8068,6 @@ msgid "Animation name already exists!"
msgstr "بارگذاری خودکار '%s' هم اکنون موجود است!"
#: 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 "Duplicate Animation"
msgstr ""
@@ -8116,10 +8216,6 @@ msgid "Pin AnimationPlayer"
msgstr "تغییر نام انیمیشن"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Create New Animation"
-msgstr ""
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Name:"
msgstr ""
@@ -10286,6 +10382,7 @@ msgid "Points"
msgstr "برداشتن نقطه"
#: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp
+#: scene/resources/navigation_mesh.cpp
#, fuzzy
msgid "Polygons"
msgstr "ویرایش سیگنال"
@@ -10636,7 +10733,7 @@ msgstr "زبانه قبلی"
#: editor/plugins/script_editor_plugin.cpp
#: scene/resources/default_theme/default_theme.cpp
msgid "File"
-msgstr ""
+msgstr "پَروَندÙÙ‡"
#: editor/plugins/script_editor_plugin.cpp
#, fuzzy
@@ -11264,7 +11361,7 @@ msgstr "خصوصیات"
#: 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."
@@ -11737,7 +11834,7 @@ msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
#, fuzzy
-msgid "Convert to Mesh2D"
+msgid "Convert to MeshInstance2D"
msgstr "اتصال به گره:"
#: editor/plugins/sprite_editor_plugin.cpp
@@ -12808,8 +12905,7 @@ msgid "Select the previous shape, subtile, or Tile."
msgstr ""
#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp
-#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp
-#: scene/resources/texture.cpp
+#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp
#, fuzzy
msgid "Region"
msgstr "گره انیمیشن"
@@ -14341,34 +14437,12 @@ 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
#, fuzzy
msgid "Exporting All"
msgstr "صدور"
#: editor/project_export.cpp
#, fuzzy
-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
-#, fuzzy
msgid "Export Path"
msgstr "صدور پروژه"
@@ -14511,6 +14585,11 @@ msgid "Export templates for this platform are missing:"
msgstr ""
#: editor/project_export.cpp
+#, fuzzy
+msgid "Project Export"
+msgstr "بنیان‌گذاران پروژه"
+
+#: editor/project_export.cpp
msgid "Manage Export Templates"
msgstr "مدیریت صدور قالب ها"
@@ -15129,7 +15208,7 @@ msgstr "تنظیمات پروژه (پروژه.گودات)"
#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
msgid "General"
-msgstr "عمومی"
+msgstr "Ù‡ÙŽÙ…Ùگان"
#: editor/project_settings_editor.cpp
msgid "Override For..."
@@ -16913,7 +16992,7 @@ msgstr ""
#: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp
#: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp
-#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp
+#: scene/3d/collision_polygon.cpp
#, fuzzy
msgid "Polygon"
msgstr "ویرایش سیگنال"
@@ -17524,7 +17603,6 @@ msgid "Use In Baked Light"
msgstr ""
#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
-#: scene/resources/navigation_mesh.cpp
msgid "Cell"
msgstr ""
@@ -17554,6 +17632,19 @@ msgstr "ساختن گره"
msgid "Mask"
msgstr ""
+#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
+#, fuzzy
+msgid "Bake Navigation"
+msgstr "انیمیشن حذ٠شود؟"
+
+#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp
+#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp
+#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp
+#: scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Navigation Layers"
+msgstr "گره انیمیشن"
+
#: modules/gridmap/grid_map_editor_plugin.cpp
#, fuzzy
msgid "Next Plane"
@@ -19138,10 +19229,6 @@ 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."
@@ -19246,12 +19333,16 @@ msgstr ""
msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version."
msgstr ""
+#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Code Signing"
+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."
+"'apksigner' could not be found. Please check that the command is available "
+"in the Android SDK build-tools directory. The resulting %s is unsigned."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -19268,6 +19359,10 @@ msgid "Could not find keystore, unable to export."
msgstr "نمی‌تواند یک پوشه ایجاد شود."
#: platform/android/export/export_plugin.cpp
+msgid "Could not start apksigner executable."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
@@ -19298,7 +19393,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Unsupported export format!\n"
+msgid "Unsupported export format!"
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -19309,20 +19404,19 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Android build version mismatch:\n"
-" Template installed: %s\n"
-" Godot Version: %s\n"
+"Android build version mismatch: Template installed: %s, Godot version: %s. "
"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"
+"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 ""
+#, fuzzy
+msgid "Could not export project files to gradle project."
+msgstr "نمی‌تواند یک پوشه ایجاد شود."
#: platform/android/export/export_plugin.cpp
#, fuzzy
@@ -19335,7 +19429,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Building of Android project failed, check output for the error.\n"
+"Building of Android project failed, check output for the error. "
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
@@ -19351,7 +19445,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
#, fuzzy
-msgid "Package not found: %s"
+msgid "Package not found: \"%s\"."
msgstr "طول انیمیشن (به ثانیه)."
#: platform/android/export/export_plugin.cpp
@@ -19361,15 +19455,12 @@ msgstr "در حال اتصال..."
#: platform/android/export/export_plugin.cpp
#, fuzzy
-msgid ""
-"Could not find template APK to export:\n"
-"%s"
+msgid "Could not find template APK to export: \"%s\"."
msgstr "نمی‌تواند یک پوشه ایجاد شود."
#: platform/android/export/export_plugin.cpp
msgid ""
-"Missing libraries in the export template for the selected architectures: "
-"%s.\n"
+"Missing libraries in the export template for the selected architectures: %s. "
"Please build a template with all required libraries, or uncheck the missing "
"architectures in the export preset."
msgstr ""
@@ -19381,7 +19472,7 @@ msgstr "ÛŒØ§ÙØªÙ†"
#: platform/android/export/export_plugin.cpp
#, fuzzy
-msgid "Could not export project files"
+msgid "Could not export project files."
msgstr "نمی‌تواند یک پوشه ایجاد شود."
#: platform/android/export/export_plugin.cpp
@@ -19624,6 +19715,16 @@ msgstr "ساختن گره"
msgid "Custom BG Color"
msgstr "ساختن گره"
+#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Prepare Templates"
+msgstr "مدیریت صدور قالب ها"
+
+#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
+msgid "Export template not found."
+msgstr ""
+
#: platform/iphone/export/export.cpp
msgid "App Store Team ID not specified - cannot configure the project."
msgstr ""
@@ -19647,25 +19748,34 @@ msgstr ""
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not open template for export:"
+msgid "Could not open template for export: \"%s\"."
msgstr "نمی‌تواند یک پوشه ایجاد شود."
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Invalid export template:"
+msgid "Invalid export template: \"%s\"."
msgstr "نام دارایی ایندکس نامعتبر."
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not write file:"
+msgid "Could not write file: \"%s\"."
msgstr "نمی‌تواند یک پوشه ایجاد شود."
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Icon Creation"
+msgstr "محتواها:"
+
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not read file:"
+msgid "Could not read file: \"%s\"."
msgstr "نمی‌تواند یک پوشه ایجاد شود."
#: platform/javascript/export/export.cpp
+msgid "PWA"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
#, fuzzy
msgid "Variant"
msgstr "شمارش ها:"
@@ -19741,17 +19851,17 @@ msgstr ""
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not read HTML shell:"
+msgid "Could not read HTML shell: \"%s\"."
msgstr "نمی‌تواند یک پوشه ایجاد شود."
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not create HTTP server directory:"
+msgid "Could not create HTTP server directory: %s."
msgstr "ناتوان در ساختن پوشه."
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Error starting HTTP server:"
+msgid "Error starting HTTP server: %d."
msgstr "خطا در بارگذاری:"
#: platform/javascript/export/export.cpp
@@ -20048,9 +20158,28 @@ msgid "Apple Team ID"
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open icon file \"%s\"."
+msgstr "نمی‌تواند یک پوشه ایجاد شود."
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start xcrun executable."
+msgstr "ناتوان در ساختن پوشه."
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization failed."
+msgstr "بومی‌سازی"
+
+#: platform/osx/export/export.cpp
+msgid "Notarization request UUID: \"%s\""
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid ""
-"Note: The notarization process generally takes less than an hour. When the "
-"process is completed, you'll receive an email."
+"The notarization process generally takes less than an hour. When the process "
+"is completed, you'll receive an email."
msgstr ""
#: platform/osx/export/export.cpp
@@ -20066,20 +20195,74 @@ msgid ""
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign failed with error \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign require regex module."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Could not start codesign executable, make sure Xcode command line tools are "
+"installed."
+msgstr ""
+
+#: platform/osx/export/export.cpp platform/windows/export/export.cpp
#, fuzzy
msgid "No identity found."
msgstr "چیزی ÛŒØ§ÙØª نشد!"
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Cannot sign file %s."
+msgstr "خطای ذخیره کردن پرونده: %s"
+
+#: platform/osx/export/export.cpp
+msgid "Relative symlinks are not supported, exported \"%s\" might be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "DMG Creation"
+msgstr "توضیح"
+
+#: platform/osx/export/export.cpp
+msgid "Could not start hdiutil executable."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed - file exists."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed."
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid "Creating app bundle"
msgstr ""
#: platform/osx/export/export.cpp
#, fuzzy
-msgid "Could not find template app to export:"
+msgid "Could not find template app to export: \"%s\"."
msgstr "نمی‌تواند یک پوشه ایجاد شود."
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid export format."
+msgstr "نام دارایی ایندکس نامعتبر."
+
+#: platform/osx/export/export.cpp
msgid ""
"Relative symlinks are not supported on this OS, the exported project might "
"be broken!"
@@ -20087,7 +20270,7 @@ msgstr ""
#: platform/osx/export/export.cpp
msgid ""
-"Requested template binary '%s' not found. It might be missing from your "
+"Requested template binary \"%s\" not found. It might be missing from your "
"template archive."
msgstr ""
@@ -20129,6 +20312,16 @@ msgstr ""
#: platform/osx/export/export.cpp
#, fuzzy
+msgid "ZIP Creation"
+msgstr "پروژه"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open file to read from path \"%s\"."
+msgstr "نمی‌تواند یک پوشه ایجاد شود."
+
+#: platform/osx/export/export.cpp
+#, fuzzy
msgid "Invalid bundle identifier:"
msgstr "نام یک شناسه‌ی معتبر نیست:"
@@ -20443,6 +20636,11 @@ msgid "Debug Algorithm"
msgstr ""
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to rename temporary file \"%s\"."
+msgstr "امکان حذ٠وجود ندارد :"
+
+#: platform/windows/export/export.cpp
msgid "Identity Type"
msgstr ""
@@ -20489,6 +20687,70 @@ msgid "Trademarks"
msgstr ""
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Resources Modification"
+msgstr "ثابت"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find rcedit executable at \"%s\"."
+msgstr "نمی‌تواند یک پوشه ایجاد شود."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find wine executable at \"%s\"."
+msgstr "نمی‌تواند یک پوشه ایجاد شود."
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start rcedit executable, configure rcedit path in the Editor "
+"Settings (Export > Windows > Rcedit)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"rcedit failed to modify executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find signtool executable at \"%s\"."
+msgstr "نمی‌تواند یک پوشه ایجاد شود."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find osslsigncode executable at \"%s\"."
+msgstr "نمی‌تواند یک پوشه ایجاد شود."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid identity type."
+msgstr "نام یک شناسه‌ی معتبر نیست:"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid timestamp server."
+msgstr "نام نامعتبر."
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start signtool executable, configure signtool path in the Editor "
+"Settings (Export > Windows > Signtool)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Signtool failed to sign executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to remove temporary file \"%s\"."
+msgstr "امکان حذ٠وجود ندارد :"
+
+#: platform/windows/export/export.cpp
msgid ""
"The rcedit tool must be configured in the Editor Settings (Export > Windows "
"> Rcedit) to change the icon or app information data."
@@ -20510,6 +20772,23 @@ msgid "Invalid product version:"
msgstr "اندازه‌ی قلم نامعتبر."
#: platform/windows/export/export.cpp
+msgid "Windows executables cannot be >= 4 GiB."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+#, fuzzy
+msgid "Failed to open executable file \"%s\"."
+msgstr "باید از یک پسوند معتبر Ø§Ø³ØªÙØ§Ø¯Ù‡ شود."
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable file header corrupted."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable \"pck\" section not found."
+msgstr ""
+
+#: platform/windows/export/export.cpp
#, fuzzy
msgid "Windows"
msgstr "چارچوب جدید"
@@ -20526,6 +20805,10 @@ msgstr ""
msgid "Wine"
msgstr ""
+#: platform/x11/export/export.cpp
+msgid "32-bit executables cannot have embedded data >= 4 GiB."
+msgstr ""
+
#: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp
#: scene/resources/texture.cpp
#, fuzzy
@@ -20647,7 +20930,8 @@ msgstr ""
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/3d/light.cpp scene/3d/reflection_probe.cpp
-#: scene/3d/visual_instance.cpp scene/resources/material.cpp
+#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp
+#: scene/resources/material.cpp
msgid "Max Distance"
msgstr ""
@@ -21421,6 +21705,18 @@ msgstr ""
msgid "Edge Connection Margin"
msgstr "ویرایش اتصال:"
+#: scene/2d/navigation_2d.cpp
+msgid ""
+"'Navigation2D' node and 'Navigation2D.get_simple_path()' are deprecated and "
+"will be removed in a future version. Use 'Navigation2DServer.map_get_path()' "
+"instead."
+msgstr ""
+
+#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
+#, fuzzy
+msgid "Path Desired Distance"
+msgstr "نصب کردن"
+
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
msgid "Target Desired Distance"
msgstr ""
@@ -21474,15 +21770,16 @@ msgstr ""
"Ù„Ø·ÙØ§ یک دارایی تعیین یا یک چندضلعی ترسیم کنید."
#: scene/2d/navigation_polygon.cpp
-msgid ""
-"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
-"node. It only provides navigation data."
+msgid "Navpoly"
msgstr ""
-"NavigationPolygonInstance باید یک ÙØ±Ø²Ù†Ø¯ یا نوه‌ی یک گره Navigation2D باشد. "
-"این تنها یک داده‌ی پیمایش را ÙØ±Ø§Ù‡Ù… می‌کند."
-#: scene/2d/navigation_polygon.cpp
-msgid "Navpoly"
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Enter Cost"
+msgstr "ساختن گره"
+
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+msgid "Travel Cost"
msgstr ""
#: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp
@@ -22634,6 +22931,13 @@ msgstr ""
msgid "Transform Normals"
msgstr "انتخاب شده را تغییر مقیاس بده"
+#: scene/3d/navigation.cpp
+msgid ""
+"'Navigation' node and 'Navigation.get_simple_path()' are deprecated and will "
+"be removed in a future version. Use 'NavigationServer.map_get_path()' "
+"instead."
+msgstr ""
+
#: scene/3d/navigation.cpp scene/resources/curve.cpp
msgid "Up Vector"
msgstr ""
@@ -22656,14 +22960,6 @@ msgid ""
"The NavigationAgent can be used only under a Spatial inheriting parent node."
msgstr ""
-#: scene/3d/navigation_mesh_instance.cpp
-msgid ""
-"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
-"It only provides navigation data."
-msgstr ""
-"NavigationMeshInstance باید یک ÙØ±Ø²Ù†Ø¯ یا نوه‌ی یک گره Navigation باشد. این "
-"تنها داده‌ی پیمایش را ÙØ±Ø§Ù‡Ù… می‌کند."
-
#: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp
msgid "NavMesh"
msgstr ""
@@ -25280,6 +25576,16 @@ msgid "3D Physics"
msgstr ""
#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "2D Navigation"
+msgstr "گره انیمیشن"
+
+#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "3D Navigation"
+msgstr "گره انیمیشن"
+
+#: scene/register_scene_types.cpp
msgid "Use hiDPI"
msgstr ""
@@ -26674,7 +26980,7 @@ msgstr "انتقال"
msgid "Refraction"
msgstr "شمارش ها:"
-#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp
+#: scene/resources/material.cpp
msgid "Detail"
msgstr ""
@@ -26755,7 +27061,12 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
-msgid "Sample Partition Type"
+msgid "Sampling"
+msgstr "بومی"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Partition Type"
msgstr "متغیر را ویرایش کن:"
#: scene/resources/navigation_mesh.cpp
@@ -26772,10 +27083,15 @@ msgid "Source Group Name"
msgstr "منبع"
#: scene/resources/navigation_mesh.cpp
-msgid "Agent"
+msgid "Cells"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Agents"
+msgstr "نشانوندها:"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Max Climb"
msgstr ""
@@ -26785,11 +27101,16 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
+msgid "Regions"
+msgstr "گره انیمیشن"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
msgid "Merge Size"
msgstr "ادغام از صحنه"
#: scene/resources/navigation_mesh.cpp
-msgid "Edge"
+msgid "Edges"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -26802,6 +27123,11 @@ msgid "Verts Per Poly"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Details"
+msgstr "بارگیری پیش ÙØ±Ø¶"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Sample Distance"
msgstr ""
@@ -26819,9 +27145,18 @@ msgid "Ledge Spans"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Filter Walkable Low Height Spans"
+msgid "Walkable Low Height Spans"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
+msgid "Baking AABB"
msgstr ""
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB Offset"
+msgstr "حذ٠قالب"
+
#: scene/resources/occluder_shape.cpp
msgid "Spheres"
msgstr ""
@@ -27220,6 +27555,11 @@ msgid "Scenario"
msgstr "صحنه"
#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Navigation Map"
+msgstr "گره انیمیشن"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
msgid "Direct Space State"
msgstr ""
@@ -27237,6 +27577,26 @@ msgstr "خطی"
msgid "Default Angular Damp"
msgstr ""
+#: scene/resources/world.cpp
+#, fuzzy
+msgid "Default Map Up"
+msgstr "Ù¾ÛŒØ´ÙØ±Ø¶"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Size"
+msgstr "به‌روزرسانی از صحنه"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Height"
+msgstr "آزمودن"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Edge Connection Margin"
+msgstr "ویرایش اتصال:"
+
#: scene/resources/world_2d.cpp
msgid "Canvas"
msgstr ""
diff --git a/editor/translations/fi.po b/editor/translations/fi.po
index 20220ffecd..24d8fd66ab 100644
--- a/editor/translations/fi.po
+++ b/editor/translations/fi.po
@@ -234,9 +234,10 @@ msgid "Data"
msgstr "Datan kanssa"
#: core/io/file_access_network.cpp core/register_core_types.cpp
-#: editor/editor_settings.cpp main/main.cpp
+#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
#: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h
+#: scene/gui/file_dialog.cpp
#, fuzzy
msgid "Network"
msgstr "Verkkoprofiloija"
@@ -398,6 +399,16 @@ msgstr ""
msgid "Max Size (KB)"
msgstr ""
+#: core/os/input.cpp
+#, fuzzy
+msgid "Mouse Mode"
+msgstr "Siirtotila"
+
+#: core/os/input.cpp
+#, fuzzy
+msgid "Use Accumulated Input"
+msgstr "Poista syöte"
+
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: servers/audio_server.cpp
msgid "Device"
@@ -600,7 +611,8 @@ msgstr "Kuvaus"
#: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
-#: main/main.cpp
+#: main/main.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp
msgid "Run"
msgstr "Suorita"
@@ -691,6 +703,11 @@ msgid "Main Run Args"
msgstr "Pääkohtauksen argumentit:"
#: core/project_settings.cpp
+#, fuzzy
+msgid "Scene Naming"
+msgstr "Kohtauspolku:"
+
+#: core/project_settings.cpp
msgid "Search In File Extensions"
msgstr ""
@@ -698,19 +715,15 @@ msgstr ""
msgid "Script Templates Search Path"
msgstr ""
-#: core/project_settings.cpp editor/editor_node.cpp
-#: editor/plugins/version_control_editor_plugin.cpp
-msgid "Version Control"
-msgstr "Versionhallinta"
-
#: core/project_settings.cpp
-msgid "Autoload On Startup"
-msgstr ""
+#, fuzzy
+msgid "Version Control Autoload On Startup"
+msgstr "Versionhallintajärjestelmä"
#: core/project_settings.cpp
#, fuzzy
-msgid "Plugin Name"
-msgstr "Liitännäisen nimi:"
+msgid "Version Control Plugin Name"
+msgstr "Versionhallinta"
#: core/project_settings.cpp scene/2d/collision_object_2d.cpp
#: scene/3d/collision_object.cpp scene/gui/control.cpp
@@ -830,7 +843,8 @@ msgid "Quality"
msgstr ""
#: core/project_settings.cpp scene/gui/file_dialog.cpp
-#: scene/main/scene_tree.cpp servers/visual_server.cpp
+#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp
+#: servers/visual_server.cpp
#, fuzzy
msgid "Filters"
msgstr "Suodattimet:"
@@ -2269,8 +2283,8 @@ msgid "Open"
msgstr "Avaa"
#: editor/dependency_editor.cpp
-msgid "Owners Of:"
-msgstr "Omistajat kohteelle:"
+msgid "Owners of: %s (Total: %d)"
+msgstr ""
#: editor/dependency_editor.cpp
msgid ""
@@ -2575,7 +2589,7 @@ msgid "Bus Options"
msgstr "Väylän asetukset"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/scene_tree_dock.cpp
+#: editor/project_export.cpp editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "Monista"
@@ -2835,6 +2849,25 @@ msgid "Choose"
msgstr "Valitse"
#: editor/editor_export.cpp
+msgid "Project export for platform:"
+msgstr ""
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Completed with errors."
+msgstr "Kopioi solmun polku"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Completed successfully."
+msgstr "Paketti asennettu onnistuneesti!"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed."
+msgstr "Epäonnistui:"
+
+#: editor/editor_export.cpp
msgid "Storing File:"
msgstr "Varastoidaan tiedostoa:"
@@ -2847,6 +2880,31 @@ msgid "Packing"
msgstr "Pakataan"
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save PCK"
+msgstr "Tallenna nimellä"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Cannot create file \"%s\"."
+msgstr "Kansiota ei voitu luoda."
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to export project files."
+msgstr "Ei voitu viedä projektin tiedostoja"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Can't open file to read from path \"%s\"."
+msgstr "Ei voida avata tiedostoa kirjoitettavaksi:"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save ZIP"
+msgstr "Tallenna nimellä"
+
+#: editor/editor_export.cpp
msgid ""
"Target platform requires 'ETC' texture compression for GLES2. Enable 'Import "
"Etc' in Project Settings."
@@ -2965,11 +3023,33 @@ msgstr "Mukautettua debug-vientimallia ei löytynyt."
msgid "Custom release template not found."
msgstr "Mukautettua release-vientimallia ei löytynyt."
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Prepare Template"
+msgstr "Hallinnoi malleja"
+
+#: editor/editor_export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "The given export path doesn't exist."
+msgstr "Annettu vientipolku ei ole olemassa:"
+
#: editor/editor_export.cpp platform/javascript/export/export.cpp
-msgid "Template file not found:"
+#, fuzzy
+msgid "Template file not found: \"%s\"."
msgstr "Mallitiedostoa ei löytynyt:"
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to copy export template."
+msgstr "Virheellinen vientimalli:"
+
+#: editor/editor_export.cpp platform/windows/export/export.cpp
+#: platform/x11/export/export.cpp
+#, fuzzy
+msgid "PCK Embedding"
+msgstr "Täyte"
+
+#: editor/editor_export.cpp
msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB."
msgstr ""
"32-bittisissä vienneissä sisällytetty PCK ei voi olla suurempi kuin 4 Gt."
@@ -3145,9 +3225,9 @@ msgid "Import"
msgstr "Tuo"
#: editor/editor_feature_profile.cpp editor/project_export.cpp
-#: platform/android/export/export.cpp platform/javascript/export/export.cpp
-#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
-#: platform/windows/export/export.cpp
+#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#: platform/uwp/export/export.cpp platform/windows/export/export.cpp
msgid "Export"
msgstr "Vie"
@@ -4311,15 +4391,6 @@ msgid ""
"Unable to write to file '%s', file in use, locked or lacking permissions."
msgstr ""
-#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
-msgid "Scene"
-msgstr "Kohtaus"
-
-#: editor/editor_node.cpp
-#, fuzzy
-msgid "Scene Naming"
-msgstr "Kohtauspolku:"
-
#: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp
#: servers/arvr/arvr_interface.cpp
#, fuzzy
@@ -4448,6 +4519,10 @@ msgid "Default Color Picker Mode"
msgstr ""
#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
+msgid "Version Control"
+msgstr "Versionhallinta"
+
+#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
msgid "Username"
msgstr "Käyttäjänimi"
@@ -4475,6 +4550,10 @@ msgstr "Käytä häiriötöntä tilaa."
msgid "Add a new scene."
msgstr "Lisää uusi kohtaus."
+#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
+msgid "Scene"
+msgstr "Kohtaus"
+
#: editor/editor_node.cpp
msgid "Go to previously opened scene."
msgstr "Siirry aiemmin avattuun kohtaukseen."
@@ -5267,6 +5346,11 @@ msgstr ""
"Ole hyvä ja lisää ajettava esiasetus Vienti-valikosta tai määrittele "
"olemassa oleva esiasetus ajettavaksi."
+#: editor/editor_run_native.cpp
+#, fuzzy
+msgid "Project Run"
+msgstr "Projekti"
+
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
msgstr "Kirjoita logiikka _run() metodiin."
@@ -5550,7 +5634,9 @@ msgid "Draw Spaces"
msgstr "Piirtokutsuja:"
#: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp
-#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp
+#: scene/main/scene_tree.cpp scene/resources/world.cpp
+#: scene/resources/world_2d.cpp
msgid "Navigation"
msgstr "Navigointi"
@@ -7053,7 +7139,7 @@ msgstr ""
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp
-#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp
+#: scene/gui/control.cpp
#, fuzzy
msgid "Filter"
msgstr "Suodattimet:"
@@ -7352,6 +7438,18 @@ msgid "Saving..."
msgstr "Tallennetaan..."
#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used as a normal map in 3D. Enabling red-green "
+"texture compression to reduce memory usage (blue channel is discarded)."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap "
+"generation and VRAM texture compression."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
msgid "2D, Detect 3D"
msgstr ""
@@ -8045,11 +8143,20 @@ msgid "New Anim"
msgstr "Uusi animaatio"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+msgstr "Luo uusi animaatio"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Change Animation Name:"
msgstr "Vaihda animaation nimi:"
#: editor/plugins/animation_player_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Rename Animation"
+msgstr "Nimeä animaatio uudelleen"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Delete Animation?"
msgstr "Poista animaatio?"
@@ -8067,11 +8174,6 @@ msgid "Animation name already exists!"
msgstr "Samanniminen animaatio on jo olemassa!"
#: editor/plugins/animation_player_editor_plugin.cpp
-#: editor/plugins/sprite_frames_editor_plugin.cpp
-msgid "Rename Animation"
-msgstr "Nimeä animaatio uudelleen"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate Animation"
msgstr "Monista animaatio"
@@ -8215,10 +8317,6 @@ msgid "Pin AnimationPlayer"
msgstr "Kiinnitä AnimationPlayer"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Create New Animation"
-msgstr "Luo uusi animaatio"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Name:"
msgstr "Animaation nimi:"
@@ -10345,6 +10443,7 @@ msgid "Points"
msgstr "Pisteet"
#: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp
+#: scene/resources/navigation_mesh.cpp
msgid "Polygons"
msgstr "Polygonit"
@@ -11729,7 +11828,8 @@ msgid "Invalid geometry, can't replace by mesh."
msgstr "Virheellinen geometria, ei voida korvata meshillä."
#: editor/plugins/sprite_editor_plugin.cpp
-msgid "Convert to Mesh2D"
+#, fuzzy
+msgid "Convert to MeshInstance2D"
msgstr "Muunna Mesh2D resurssiksi"
#: editor/plugins/sprite_editor_plugin.cpp
@@ -12727,8 +12827,7 @@ msgid "Select the previous shape, subtile, or Tile."
msgstr "Valitse edellinen muoto, alilaatta tai laatta."
#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp
-#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp
-#: scene/resources/texture.cpp
+#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp
msgid "Region"
msgstr "Alue"
@@ -14247,36 +14346,10 @@ msgid "Delete preset '%s'?"
msgstr "Poista esiasetus '%s'?"
#: editor/project_export.cpp
-msgid ""
-"Failed to export the project for platform '%s'.\n"
-"Export templates seem to be missing or invalid."
-msgstr ""
-"Projektin vienti alustalle '%s' epäonnistui.\n"
-"Vientimallit näyttävät puuttuvan tai olevan virheellisiä."
-
-#: 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 ""
-"Projektin vienti alustalle '%s' epäonnistui.\n"
-"Tämä saattaa johtua asetusongelmista viennin esiasetuksissa tai vientisi "
-"asetuksissa."
-
-#: editor/project_export.cpp
msgid "Exporting All"
msgstr "Viedään kaikki"
#: editor/project_export.cpp
-msgid "The given export path doesn't exist:"
-msgstr "Annettu vientipolku ei ole olemassa:"
-
-#: editor/project_export.cpp
-msgid "Export templates for this platform are missing/corrupted:"
-msgstr "Vientimallit tälle alustalle puuttuvat tai ovat viallisia:"
-
-#: editor/project_export.cpp
msgid "Export Path"
msgstr "Vientipolku"
@@ -14422,6 +14495,11 @@ msgid "Export templates for this platform are missing:"
msgstr "Tälle alustalle ei löytynyt vientipohjia:"
#: editor/project_export.cpp
+#, fuzzy
+msgid "Project Export"
+msgstr "Projektin perustajat"
+
+#: editor/project_export.cpp
msgid "Manage Export Templates"
msgstr "Hallinnoi vientimalleja"
@@ -16850,7 +16928,7 @@ msgstr ""
#: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp
#: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp
-#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp
+#: scene/3d/collision_polygon.cpp
#, fuzzy
msgid "Polygon"
msgstr "Polygonit"
@@ -17477,7 +17555,6 @@ msgid "Use In Baked Light"
msgstr "Kehitä Lightmapit"
#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
-#: scene/resources/navigation_mesh.cpp
msgid "Cell"
msgstr ""
@@ -17507,6 +17584,19 @@ msgstr "Keskitä"
msgid "Mask"
msgstr ""
+#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
+#, fuzzy
+msgid "Bake Navigation"
+msgstr "Navigointi"
+
+#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp
+#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp
+#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp
+#: scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Navigation Layers"
+msgstr "Siirtymistila"
+
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Plane"
msgstr "Seuraava taso"
@@ -19036,10 +19126,6 @@ msgid "Could not execute on device."
msgstr "Ei voitu suorittaa laitteella."
#: platform/android/export/export_plugin.cpp
-msgid "Unable to find the 'apksigner' tool."
-msgstr "'apksigner' työkalua ei löydy."
-
-#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -19170,12 +19256,17 @@ msgstr ""
"\"Target Sdk\" versionumeron on oltava suurempi tai yhtä suuri kuin \"Min "
"Sdk\" versionumeron."
+#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Code Signing"
+msgstr "Allekirjoitetaan DMG-koodi"
+
#: platform/android/export/export_plugin.cpp
+#, fuzzy
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."
+"'apksigner' could not be found. Please check that the command is available "
+"in the Android SDK build-tools directory. The resulting %s is unsigned."
msgstr ""
"'apksigner' ei löydy.\n"
"Ole hyvä ja tarkista, että komento on saatavilla Android SDK build-tools "
@@ -19195,6 +19286,11 @@ msgid "Could not find keystore, unable to export."
msgstr "Keystorea ei löytynyt, ei voida viedä."
#: platform/android/export/export_plugin.cpp
+#, fuzzy
+msgid "Could not start apksigner executable."
+msgstr "Aliprosessia ei voitu käynnistää!"
+
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr "'apksigner' palautti virheen #%d"
@@ -19226,7 +19322,8 @@ msgstr ""
"Virheellinen tiedostonimi! Android APK tarvitsee *.apk tiedostopäätteen."
#: platform/android/export/export_plugin.cpp
-msgid "Unsupported export format!\n"
+#, fuzzy
+msgid "Unsupported export format!"
msgstr "Vientiformaatti ei ole tuettu!\n"
#: platform/android/export/export_plugin.cpp
@@ -19238,10 +19335,9 @@ msgstr ""
"versiotietoa. Ole hyvä ja uudelleenasenna se 'Projekti'-valikosta."
#: platform/android/export/export_plugin.cpp
+#, fuzzy
msgid ""
-"Android build version mismatch:\n"
-" Template installed: %s\n"
-" Godot Version: %s\n"
+"Android build version mismatch: Template installed: %s, Godot version: %s. "
"Please reinstall Android build template from 'Project' menu."
msgstr ""
"Androidin käännösversion epäyhteensopivuus:\n"
@@ -19250,14 +19346,16 @@ msgstr ""
"Ole hyvä ja uudelleenasenna Androidin käännösmalli 'Projekti'-valikosta."
#: platform/android/export/export_plugin.cpp
+#, fuzzy
msgid ""
-"Unable to overwrite res://android/build/res/*.xml files with project name"
+"Unable to overwrite res://android/build/res/*.xml files with project name."
msgstr ""
"Ei voitu ylikirjoittaa res://android/build/res/*.xml tiedostoja projektin "
"nimellä"
#: platform/android/export/export_plugin.cpp
-msgid "Could not export project files to gradle project\n"
+#, fuzzy
+msgid "Could not export project files to gradle project."
msgstr "Ei voitu viedä projektitiedostoja gradle-projektiksi.\n"
#: platform/android/export/export_plugin.cpp
@@ -19269,8 +19367,9 @@ msgid "Building Android Project (gradle)"
msgstr "Käännetään Android-projektia (gradle)"
#: platform/android/export/export_plugin.cpp
+#, fuzzy
msgid ""
-"Building of Android project failed, check output for the error.\n"
+"Building of Android project failed, check output for the error. "
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
"Android-projektin käännös epäonnistui, tarkista virhe tulosteesta.\n"
@@ -19290,7 +19389,8 @@ msgstr ""
"tulosteet gradle-projektin hakemistosta."
#: platform/android/export/export_plugin.cpp
-msgid "Package not found: %s"
+#, fuzzy
+msgid "Package not found: \"%s\"."
msgstr "Pakettia ei löytynyt: %s"
#: platform/android/export/export_plugin.cpp
@@ -19298,17 +19398,16 @@ msgid "Creating APK..."
msgstr "Luodaan APK:ta..."
#: platform/android/export/export_plugin.cpp
-msgid ""
-"Could not find template APK to export:\n"
-"%s"
+#, fuzzy
+msgid "Could not find template APK to export: \"%s\"."
msgstr ""
"Ei löydetty APK-vientimallia vientiä varten:\n"
"%s"
#: platform/android/export/export_plugin.cpp
+#, fuzzy
msgid ""
-"Missing libraries in the export template for the selected architectures: "
-"%s.\n"
+"Missing libraries in the export template for the selected architectures: %s. "
"Please build a template with all required libraries, or uncheck the missing "
"architectures in the export preset."
msgstr ""
@@ -19321,7 +19420,8 @@ msgid "Adding files..."
msgstr "Lisätään tiedostoja..."
#: platform/android/export/export_plugin.cpp
-msgid "Could not export project files"
+#, fuzzy
+msgid "Could not export project files."
msgstr "Ei voitu viedä projektin tiedostoja"
#: platform/android/export/export_plugin.cpp
@@ -19564,6 +19664,17 @@ msgstr "Mukautettu solmu"
msgid "Custom BG Color"
msgstr "Mukautettu solmu"
+#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Prepare Templates"
+msgstr "Hallinnoi malleja"
+
+#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Export template not found."
+msgstr "Mukautettua release-vientimallia ei löytynyt."
+
#: platform/iphone/export/export.cpp
msgid "App Store Team ID not specified - cannot configure the project."
msgstr "App Store Team ID ei ole määritetty - ei voida konfiguroida projektia."
@@ -19585,22 +19696,35 @@ msgid "Run exported HTML in the system's default browser."
msgstr "Suorita viety HTML järjestelmän oletusselaimessa."
#: platform/javascript/export/export.cpp
-msgid "Could not open template for export:"
+#, fuzzy
+msgid "Could not open template for export: \"%s\"."
msgstr "Mallin avaus vientiin epäonnistui:"
#: platform/javascript/export/export.cpp
-msgid "Invalid export template:"
+#, fuzzy
+msgid "Invalid export template: \"%s\"."
msgstr "Virheellinen vientimalli:"
#: platform/javascript/export/export.cpp
-msgid "Could not write file:"
+#, fuzzy
+msgid "Could not write file: \"%s\"."
msgstr "Ei voitu kirjoittaa tiedostoa:"
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Icon Creation"
+msgstr "Aseta marginaali"
+
#: platform/javascript/export/export.cpp
-msgid "Could not read file:"
+#, fuzzy
+msgid "Could not read file: \"%s\"."
msgstr "Ei voitu lukea tiedostoa:"
#: platform/javascript/export/export.cpp
+msgid "PWA"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
#, fuzzy
msgid "Variant"
msgstr "Erotus:"
@@ -19675,15 +19799,18 @@ msgid "Icon 512 X 512"
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not read HTML shell:"
+#, fuzzy
+msgid "Could not read HTML shell: \"%s\"."
msgstr "Ei voitu lukea HTML tulkkia:"
#: platform/javascript/export/export.cpp
-msgid "Could not create HTTP server directory:"
+#, fuzzy
+msgid "Could not create HTTP server directory: %s."
msgstr "Ei voitu luoda HTTP-palvelimen hakemistoa:"
#: platform/javascript/export/export.cpp
-msgid "Error starting HTTP server:"
+#, fuzzy
+msgid "Error starting HTTP server: %d."
msgstr "Virhe käynnistettäessä HTTP-palvelinta:"
#: platform/javascript/export/export.cpp
@@ -19976,9 +20103,29 @@ msgid "Apple Team ID"
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open icon file \"%s\"."
+msgstr "Ei voitu viedä projektin tiedostoja"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start xcrun executable."
+msgstr "Aliprosessia ei voitu käynnistää!"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization failed."
+msgstr "Kääntäminen"
+
+#: platform/osx/export/export.cpp
+msgid "Notarization request UUID: \"%s\""
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
msgid ""
-"Note: The notarization process generally takes less than an hour. When the "
-"process is completed, you'll receive an email."
+"The notarization process generally takes less than an hour. When the process "
+"is completed, you'll receive an email."
msgstr ""
"Huom: Notarisointiprosessi kestää yleensä alle tunnin. Kun käsittely on "
"valmis, saat sähköpostin."
@@ -20000,18 +20147,83 @@ msgstr ""
"sovellukseen (vapaavalintainen):"
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+"Timestamping ei ole yhteensopiva ad-hoc allekirjoituksen kanssa ja kytketään "
+"pois päältä!"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+"Hardened Runtime ei ole yhteensopiva ad-hoc allekirjoituksen kanssa ja "
+"kytketään pois päältä!"
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign failed with error \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign require regex module."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Could not start codesign executable, make sure Xcode command line tools are "
+"installed."
+msgstr ""
+
+#: platform/osx/export/export.cpp platform/windows/export/export.cpp
msgid "No identity found."
msgstr "Identiteettiä ei löytynyt."
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Cannot sign file %s."
+msgstr "Virhe tallennettaessa tiedostoa: %s"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Relative symlinks are not supported, exported \"%s\" might be broken!"
+msgstr ""
+"Suhteelliset symboliset linkit eivät ole tuettuja tässä "
+"käyttöjärjestelmässä, viety projekti saattaa olla rikkinäinen!"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "DMG Creation"
+msgstr "Suunnat"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start hdiutil executable."
+msgstr "Aliprosessia ei voitu käynnistää!"
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed - file exists."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed."
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid "Creating app bundle"
msgstr "Luodaan app bundlea"
#: platform/osx/export/export.cpp
-msgid "Could not find template app to export:"
+#, fuzzy
+msgid "Could not find template app to export: \"%s\"."
msgstr "Ei löydetty app-vientimallia vientiä varten:"
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid export format."
+msgstr "Virheellinen vientimalli:"
+
+#: platform/osx/export/export.cpp
msgid ""
"Relative symlinks are not supported on this OS, the exported project might "
"be broken!"
@@ -20020,8 +20232,9 @@ msgstr ""
"käyttöjärjestelmässä, viety projekti saattaa olla rikkinäinen!"
#: platform/osx/export/export.cpp
+#, fuzzy
msgid ""
-"Requested template binary '%s' not found. It might be missing from your "
+"Requested template binary \"%s\" not found. It might be missing from your "
"template archive."
msgstr ""
"Pyydettyä binäärivientimallia '%s' ei löydy. Se saattaa puuttua "
@@ -20068,6 +20281,16 @@ msgid "Sending archive for notarization"
msgstr "Lähetetään tiedostopaketti notarisointia varten"
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "ZIP Creation"
+msgstr "Projekti"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open file to read from path \"%s\"."
+msgstr "Ei voitu viedä projektitiedostoja gradle-projektiksi.\n"
+
+#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr "Virheellinen bundle-tunniste:"
@@ -20410,6 +20633,11 @@ msgid "Debug Algorithm"
msgstr "Debuggeri"
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to rename temporary file \"%s\"."
+msgstr "Väliaikaista tiedosta ei voida poistaa:"
+
+#: platform/windows/export/export.cpp
msgid "Identity Type"
msgstr ""
@@ -20457,6 +20685,76 @@ msgid "Trademarks"
msgstr ""
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Resources Modification"
+msgstr "Satunnainen kierto:"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find rcedit executable at \"%s\"."
+msgstr "Keystorea ei löytynyt, ei voida viedä."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find wine executable at \"%s\"."
+msgstr "Keystorea ei löytynyt, ei voida viedä."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid ""
+"Could not start rcedit executable, configure rcedit path in the Editor "
+"Settings (Export > Windows > Rcedit)."
+msgstr ""
+"rcedit-työkalu täytyy olla konfiguroituna editorin asetuksissa (Export > "
+"Windows > Rcedit) ikonin tai sovelluksen tietojen muuttamiseksi."
+
+#: platform/windows/export/export.cpp
+msgid ""
+"rcedit failed to modify executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find signtool executable at \"%s\"."
+msgstr "Keystorea ei löytynyt, ei voida viedä."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find osslsigncode executable at \"%s\"."
+msgstr "Keystorea ei löytynyt, ei voida viedä."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid identity type."
+msgstr "Virheellinen Identifier osio:"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid timestamp server."
+msgstr "Virheellinen nimi."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid ""
+"Could not start signtool executable, configure signtool path in the Editor "
+"Settings (Export > Windows > Signtool)."
+msgstr ""
+"rcedit-työkalu täytyy olla konfiguroituna editorin asetuksissa (Export > "
+"Windows > Rcedit) ikonin tai sovelluksen tietojen muuttamiseksi."
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Signtool failed to sign executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to remove temporary file \"%s\"."
+msgstr "Väliaikaista tiedosta ei voida poistaa:"
+
+#: platform/windows/export/export.cpp
msgid ""
"The rcedit tool must be configured in the Editor Settings (Export > Windows "
"> Rcedit) to change the icon or app information data."
@@ -20477,6 +20775,23 @@ msgid "Invalid product version:"
msgstr "Virheellinen tuotteen versio:"
#: platform/windows/export/export.cpp
+msgid "Windows executables cannot be >= 4 GiB."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+#, fuzzy
+msgid "Failed to open executable file \"%s\"."
+msgstr "Virheellinen käynnistystiedosto."
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable file header corrupted."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable \"pck\" section not found."
+msgstr ""
+
+#: platform/windows/export/export.cpp
#, fuzzy
msgid "Windows"
msgstr "Uusi ikkuna"
@@ -20493,6 +20808,10 @@ msgstr ""
msgid "Wine"
msgstr ""
+#: platform/x11/export/export.cpp
+msgid "32-bit executables cannot have embedded data >= 4 GiB."
+msgstr ""
+
#: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp
#: scene/resources/texture.cpp
#, fuzzy
@@ -20620,7 +20939,8 @@ msgstr ""
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/3d/light.cpp scene/3d/reflection_probe.cpp
-#: scene/3d/visual_instance.cpp scene/resources/material.cpp
+#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp
+#: scene/resources/material.cpp
#, fuzzy
msgid "Max Distance"
msgstr "Poimintaetäisyys:"
@@ -21437,6 +21757,18 @@ msgstr ""
msgid "Edge Connection Margin"
msgstr "Muokkaa yhteyttä:"
+#: scene/2d/navigation_2d.cpp
+msgid ""
+"'Navigation2D' node and 'Navigation2D.get_simple_path()' are deprecated and "
+"will be removed in a future version. Use 'Navigation2DServer.map_get_path()' "
+"instead."
+msgstr ""
+
+#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
+#, fuzzy
+msgid "Path Desired Distance"
+msgstr "Poimintaetäisyys:"
+
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
msgid "Target Desired Distance"
msgstr ""
@@ -21498,17 +21830,19 @@ msgstr ""
"se toimisi. Ole hyvä ja aseta ominaisuus tai piirrä monikulmio."
#: scene/2d/navigation_polygon.cpp
-msgid ""
-"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
-"node. It only provides navigation data."
-msgstr ""
-"NavigationPolygonInstance solmun täytyy olla Navigation2D solmun "
-"alaisuudessa. Se tarjoaa vain navigointidataa."
-
-#: scene/2d/navigation_polygon.cpp
msgid "Navpoly"
msgstr ""
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Enter Cost"
+msgstr "Keskitä alas"
+
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Travel Cost"
+msgstr "Matkaa"
+
#: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp
#: scene/main/canvas_layer.cpp
#, fuzzy
@@ -22729,6 +23063,13 @@ msgstr ""
msgid "Transform Normals"
msgstr "Muunnos keskeytetty."
+#: scene/3d/navigation.cpp
+msgid ""
+"'Navigation' node and 'Navigation.get_simple_path()' are deprecated and will "
+"be removed in a future version. Use 'NavigationServer.map_get_path()' "
+"instead."
+msgstr ""
+
#: scene/3d/navigation.cpp scene/resources/curve.cpp
#, fuzzy
msgid "Up Vector"
@@ -22754,14 +23095,6 @@ msgid ""
"The NavigationAgent can be used only under a Spatial inheriting parent node."
msgstr "NavigationAgent solmua voidaan käyttää ainoastaan Spatial solmun alla."
-#: scene/3d/navigation_mesh_instance.cpp
-msgid ""
-"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
-"It only provides navigation data."
-msgstr ""
-"NavigationMeshInstance solmun täytyy olla Navigation solmun alaisuudessa. Se "
-"tarjoaa vain navigointidataa."
-
#: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp
#, fuzzy
msgid "NavMesh"
@@ -25516,6 +25849,16 @@ msgid "3D Physics"
msgstr " (fyysinen)"
#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "2D Navigation"
+msgstr "Navigointi"
+
+#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "3D Navigation"
+msgstr "Navigointi"
+
+#: scene/register_scene_types.cpp
msgid "Use hiDPI"
msgstr ""
@@ -26943,7 +27286,7 @@ msgstr "Siirtymä: "
msgid "Refraction"
msgstr "Erotus:"
-#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp
+#: scene/resources/material.cpp
msgid "Detail"
msgstr ""
@@ -27028,7 +27371,12 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
-msgid "Sample Partition Type"
+msgid "Sampling"
+msgstr "Skaalataan: "
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Partition Type"
msgstr "Aseta muunnoksen kantatyyppi"
#: scene/resources/navigation_mesh.cpp
@@ -27046,10 +27394,15 @@ msgid "Source Group Name"
msgstr "Lähde"
#: scene/resources/navigation_mesh.cpp
-msgid "Agent"
+msgid "Cells"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Agents"
+msgstr "Pääkohtauksen argumentit:"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Max Climb"
msgstr ""
@@ -27059,11 +27412,16 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
+msgid "Regions"
+msgstr "Alue"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
msgid "Merge Size"
msgstr "Yhdistä kohtauksesta"
#: scene/resources/navigation_mesh.cpp
-msgid "Edge"
+msgid "Edges"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -27077,6 +27435,11 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
+msgid "Details"
+msgstr "Näytä oletus"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
msgid "Sample Distance"
msgstr "Poimintaetäisyys:"
@@ -27094,9 +27457,19 @@ msgid "Ledge Spans"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Filter Walkable Low Height Spans"
+msgid "Walkable Low Height Spans"
msgstr ""
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB"
+msgstr "Luodaan AABB"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB Offset"
+msgstr "Siirtymä:"
+
#: scene/resources/occluder_shape.cpp
msgid "Spheres"
msgstr ""
@@ -27512,6 +27885,11 @@ msgid "Scenario"
msgstr "Kohtaus"
#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Navigation Map"
+msgstr "Navigointi"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
msgid "Direct Space State"
msgstr ""
@@ -27529,6 +27907,26 @@ msgstr "Vasen lineaarinen"
msgid "Default Angular Damp"
msgstr ""
+#: scene/resources/world.cpp
+#, fuzzy
+msgid "Default Map Up"
+msgstr "Oletus"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Size"
+msgstr "Oletusesikatselu"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Height"
+msgstr "Testaus"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Edge Connection Margin"
+msgstr "Muokkaa yhteyttä:"
+
#: scene/resources/world_2d.cpp
msgid "Canvas"
msgstr ""
diff --git a/editor/translations/fil.po b/editor/translations/fil.po
index 54f9216a48..822a23a9b9 100644
--- a/editor/translations/fil.po
+++ b/editor/translations/fil.po
@@ -205,9 +205,10 @@ msgid "Data"
msgstr "Data"
#: core/io/file_access_network.cpp core/register_core_types.cpp
-#: editor/editor_settings.cpp main/main.cpp
+#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
#: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h
+#: scene/gui/file_dialog.cpp
msgid "Network"
msgstr "Network"
@@ -357,6 +358,15 @@ msgstr "Pila ng Mensahe"
msgid "Max Size (KB)"
msgstr "Max na Laki (KB)"
+#: core/os/input.cpp
+#, fuzzy
+msgid "Mouse Mode"
+msgstr "Kopya"
+
+#: core/os/input.cpp
+msgid "Use Accumulated Input"
+msgstr ""
+
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: servers/audio_server.cpp
msgid "Device"
@@ -536,7 +546,8 @@ msgstr "Paglalarawan"
#: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
-#: main/main.cpp
+#: main/main.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp
msgid "Run"
msgstr "Patakbuhin"
@@ -619,6 +630,10 @@ msgid "Main Run Args"
msgstr "Pangunahing Args sa Pagtakbo"
#: core/project_settings.cpp
+msgid "Scene Naming"
+msgstr ""
+
+#: core/project_settings.cpp
msgid "Search In File Extensions"
msgstr "Maghanap sa mga File Extension"
@@ -626,18 +641,15 @@ msgstr "Maghanap sa mga File Extension"
msgid "Script Templates Search Path"
msgstr "Path ng mga Hahanaping Script Template"
-#: core/project_settings.cpp editor/editor_node.cpp
-#: editor/plugins/version_control_editor_plugin.cpp
-msgid "Version Control"
-msgstr "Version Control"
-
#: core/project_settings.cpp
-msgid "Autoload On Startup"
+#, fuzzy
+msgid "Version Control Autoload On Startup"
msgstr "Kusang i-load sa Simula"
#: core/project_settings.cpp
-msgid "Plugin Name"
-msgstr "Pangalan ng Plugin"
+#, fuzzy
+msgid "Version Control Plugin Name"
+msgstr "Version Control"
#: core/project_settings.cpp scene/2d/collision_object_2d.cpp
#: scene/3d/collision_object.cpp scene/gui/control.cpp
@@ -744,7 +756,8 @@ msgid "Quality"
msgstr "Kalidad"
#: core/project_settings.cpp scene/gui/file_dialog.cpp
-#: scene/main/scene_tree.cpp servers/visual_server.cpp
+#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp
+#: servers/visual_server.cpp
msgid "Filters"
msgstr "Mga Filter"
@@ -2138,7 +2151,7 @@ msgid "Open"
msgstr "I-buksan"
#: editor/dependency_editor.cpp
-msgid "Owners Of:"
+msgid "Owners of: %s (Total: %d)"
msgstr ""
#: editor/dependency_editor.cpp
@@ -2429,7 +2442,7 @@ msgid "Bus Options"
msgstr ""
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/scene_tree_dock.cpp
+#: editor/project_export.cpp editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr ""
@@ -2685,6 +2698,22 @@ msgid "Choose"
msgstr ""
#: editor/editor_export.cpp
+msgid "Project export for platform:"
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Completed with errors."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Completed successfully."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Failed."
+msgstr ""
+
+#: editor/editor_export.cpp
msgid "Storing File:"
msgstr ""
@@ -2697,6 +2726,26 @@ msgid "Packing"
msgstr ""
#: editor/editor_export.cpp
+msgid "Save PCK"
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Cannot create file \"%s\"."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Failed to export project files."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Can't open file to read from path \"%s\"."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Save ZIP"
+msgstr ""
+
+#: editor/editor_export.cpp
msgid ""
"Target platform requires 'ETC' texture compression for GLES2. Enable 'Import "
"Etc' in Project Settings."
@@ -2800,8 +2849,25 @@ msgstr ""
msgid "Custom release template not found."
msgstr ""
+#: editor/editor_export.cpp
+msgid "Prepare Template"
+msgstr ""
+
+#: editor/editor_export.cpp platform/osx/export/export.cpp
+msgid "The given export path doesn't exist."
+msgstr ""
+
#: editor/editor_export.cpp platform/javascript/export/export.cpp
-msgid "Template file not found:"
+msgid "Template file not found: \"%s\"."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Failed to copy export template."
+msgstr ""
+
+#: editor/editor_export.cpp platform/windows/export/export.cpp
+#: platform/x11/export/export.cpp
+msgid "PCK Embedding"
msgstr ""
#: editor/editor_export.cpp
@@ -2973,9 +3039,9 @@ msgid "Import"
msgstr ""
#: editor/editor_feature_profile.cpp editor/project_export.cpp
-#: platform/android/export/export.cpp platform/javascript/export/export.cpp
-#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
-#: platform/windows/export/export.cpp
+#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#: platform/uwp/export/export.cpp platform/windows/export/export.cpp
msgid "Export"
msgstr ""
@@ -4057,14 +4123,6 @@ msgid ""
"Unable to write to file '%s', file in use, locked or lacking permissions."
msgstr ""
-#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
-msgid "Scene"
-msgstr ""
-
-#: editor/editor_node.cpp
-msgid "Scene Naming"
-msgstr ""
-
#: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp
#: servers/arvr/arvr_interface.cpp
msgid "Interface"
@@ -4182,6 +4240,10 @@ msgid "Default Color Picker Mode"
msgstr ""
#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
+msgid "Version Control"
+msgstr "Version Control"
+
+#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
msgid "Username"
msgstr ""
@@ -4209,6 +4271,10 @@ msgstr ""
msgid "Add a new scene."
msgstr ""
+#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
+msgid "Scene"
+msgstr ""
+
#: editor/editor_node.cpp
msgid "Go to previously opened scene."
msgstr ""
@@ -4942,6 +5008,11 @@ msgid ""
"as runnable."
msgstr ""
+#: editor/editor_run_native.cpp
+#, fuzzy
+msgid "Project Run"
+msgstr "Ilipat Ang Mga Bezier Points"
+
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
msgstr ""
@@ -5199,7 +5270,9 @@ msgid "Draw Spaces"
msgstr ""
#: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp
-#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp
+#: scene/main/scene_tree.cpp scene/resources/world.cpp
+#: scene/resources/world_2d.cpp
msgid "Navigation"
msgstr ""
@@ -6599,7 +6672,7 @@ msgstr ""
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp
-#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp
+#: scene/gui/control.cpp
msgid "Filter"
msgstr ""
@@ -6874,6 +6947,18 @@ msgid "Saving..."
msgstr ""
#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used as a normal map in 3D. Enabling red-green "
+"texture compression to reduce memory usage (blue channel is discarded)."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap "
+"generation and VRAM texture compression."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
msgid "2D, Detect 3D"
msgstr ""
@@ -7531,11 +7616,20 @@ msgid "New Anim"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+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 "Rename Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Delete Animation?"
msgstr ""
@@ -7553,11 +7647,6 @@ 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 "Duplicate Animation"
msgstr ""
@@ -7700,10 +7789,6 @@ msgid "Pin AnimationPlayer"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Create New Animation"
-msgstr ""
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Name:"
msgstr ""
@@ -9761,6 +9846,7 @@ msgid "Points"
msgstr ""
#: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp
+#: scene/resources/navigation_mesh.cpp
msgid "Polygons"
msgstr ""
@@ -11117,7 +11203,7 @@ msgid "Invalid geometry, can't replace by mesh."
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
-msgid "Convert to Mesh2D"
+msgid "Convert to MeshInstance2D"
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
@@ -12088,8 +12174,7 @@ msgid "Select the previous shape, subtile, or Tile."
msgstr ""
#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp
-#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp
-#: scene/resources/texture.cpp
+#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp
msgid "Region"
msgstr ""
@@ -13521,31 +13606,10 @@ 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 "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 "Export Path"
msgstr ""
@@ -13680,6 +13744,10 @@ msgid "Export templates for this platform are missing:"
msgstr ""
#: editor/project_export.cpp
+msgid "Project Export"
+msgstr ""
+
+#: editor/project_export.cpp
msgid "Manage Export Templates"
msgstr ""
@@ -15940,7 +16008,7 @@ msgstr ""
#: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp
#: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp
-#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp
+#: scene/3d/collision_polygon.cpp
msgid "Polygon"
msgstr ""
@@ -16511,7 +16579,6 @@ msgid "Use In Baked Light"
msgstr ""
#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
-#: scene/resources/navigation_mesh.cpp
msgid "Cell"
msgstr ""
@@ -16538,6 +16605,19 @@ msgstr ""
msgid "Mask"
msgstr ""
+#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
+#, fuzzy
+msgid "Bake Navigation"
+msgstr "Burahin ang (mga) Napiling Key"
+
+#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp
+#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp
+#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp
+#: scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Navigation Layers"
+msgstr "Halaga:"
+
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Plane"
msgstr ""
@@ -17987,10 +18067,6 @@ 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."
@@ -18094,12 +18170,16 @@ msgstr ""
msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version."
msgstr ""
+#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Code Signing"
+msgstr "Burahin ang (mga) Napiling Key"
+
#: 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."
+"'apksigner' could not be found. Please check that the command is available "
+"in the Android SDK build-tools directory. The resulting %s is unsigned."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18115,6 +18195,10 @@ msgid "Could not find keystore, unable to export."
msgstr ""
#: platform/android/export/export_plugin.cpp
+msgid "Could not start apksigner executable."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
@@ -18143,7 +18227,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Unsupported export format!\n"
+msgid "Unsupported export format!"
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18154,19 +18238,17 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Android build version mismatch:\n"
-" Template installed: %s\n"
-" Godot Version: %s\n"
+"Android build version mismatch: Template installed: %s, Godot version: %s. "
"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"
+"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"
+msgid "Could not export project files to gradle project."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18179,7 +18261,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Building of Android project failed, check output for the error.\n"
+"Building of Android project failed, check output for the error. "
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
@@ -18194,7 +18276,7 @@ msgid ""
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Package not found: %s"
+msgid "Package not found: \"%s\"."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18202,15 +18284,12 @@ msgid "Creating APK..."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid ""
-"Could not find template APK to export:\n"
-"%s"
+msgid "Could not find template APK to export: \"%s\"."
msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Missing libraries in the export template for the selected architectures: "
-"%s.\n"
+"Missing libraries in the export template for the selected architectures: %s. "
"Please build a template with all required libraries, or uncheck the missing "
"architectures in the export preset."
msgstr ""
@@ -18220,7 +18299,7 @@ msgid "Adding files..."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Could not export project files"
+msgid "Could not export project files."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18452,6 +18531,15 @@ msgstr "Mga Functions:"
msgid "Custom BG Color"
msgstr "Mga Functions:"
+#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
+#: platform/osx/export/export.cpp
+msgid "Prepare Templates"
+msgstr ""
+
+#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
+msgid "Export template not found."
+msgstr ""
+
#: platform/iphone/export/export.cpp
msgid "App Store Team ID not specified - cannot configure the project."
msgstr ""
@@ -18473,19 +18561,29 @@ msgid "Run exported HTML in the system's default browser."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not open template for export:"
+msgid "Could not open template for export: \"%s\"."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Invalid export template:"
+#, fuzzy
+msgid "Invalid export template: \"%s\"."
+msgstr "Invalid na index ng type na %s para sa base type na %s"
+
+#: platform/javascript/export/export.cpp
+msgid "Could not write file: \"%s\"."
msgstr ""
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Icon Creation"
+msgstr "Ikabit"
+
#: platform/javascript/export/export.cpp
-msgid "Could not write file:"
+msgid "Could not read file: \"%s\"."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not read file:"
+msgid "PWA"
msgstr ""
#: platform/javascript/export/export.cpp
@@ -18560,15 +18658,15 @@ msgid "Icon 512 X 512"
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not read HTML shell:"
+msgid "Could not read HTML shell: \"%s\"."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not create HTTP server directory:"
+msgid "Could not create HTTP server directory: %s."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Error starting HTTP server:"
+msgid "Error starting HTTP server: %d."
msgstr ""
#: platform/javascript/export/export.cpp
@@ -18844,9 +18942,26 @@ msgid "Apple Team ID"
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Could not open icon file \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Could not start xcrun executable."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization failed."
+msgstr "Pagulit ng Animation"
+
+#: platform/osx/export/export.cpp
+msgid "Notarization request UUID: \"%s\""
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid ""
-"Note: The notarization process generally takes less than an hour. When the "
-"process is completed, you'll receive an email."
+"The notarization process generally takes less than an hour. When the process "
+"is completed, you'll receive an email."
msgstr ""
#: platform/osx/export/export.cpp
@@ -18862,18 +18977,71 @@ msgid ""
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign failed with error \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign require regex module."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Could not start codesign executable, make sure Xcode command line tools are "
+"installed."
+msgstr ""
+
+#: platform/osx/export/export.cpp platform/windows/export/export.cpp
msgid "No identity found."
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Cannot sign file %s."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Relative symlinks are not supported, exported \"%s\" might be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "DMG Creation"
+msgstr "Paglalarawan"
+
+#: platform/osx/export/export.cpp
+msgid "Could not start hdiutil executable."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed - file exists."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed."
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid "Creating app bundle"
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Could not find template app to export:"
+msgid "Could not find template app to export: \"%s\"."
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid export format."
+msgstr "3D Transform Track"
+
+#: platform/osx/export/export.cpp
msgid ""
"Relative symlinks are not supported on this OS, the exported project might "
"be broken!"
@@ -18881,7 +19049,7 @@ msgstr ""
#: platform/osx/export/export.cpp
msgid ""
-"Requested template binary '%s' not found. It might be missing from your "
+"Requested template binary \"%s\" not found. It might be missing from your "
"template archive."
msgstr ""
@@ -18922,6 +19090,15 @@ msgid "Sending archive for notarization"
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "ZIP Creation"
+msgstr "Pagulit ng Animation"
+
+#: platform/osx/export/export.cpp
+msgid "Could not open file to read from path \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr ""
@@ -19218,6 +19395,10 @@ msgid "Debug Algorithm"
msgstr ""
#: platform/windows/export/export.cpp
+msgid "Failed to rename temporary file \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
msgid "Identity Type"
msgstr ""
@@ -19259,6 +19440,63 @@ msgid "Trademarks"
msgstr ""
#: platform/windows/export/export.cpp
+msgid "Resources Modification"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find rcedit executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find wine executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start rcedit executable, configure rcedit path in the Editor "
+"Settings (Export > Windows > Rcedit)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"rcedit failed to modify executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find signtool executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find osslsigncode executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid identity type."
+msgstr "Mga invalid na argumento para i-construct ang '%s'"
+
+#: platform/windows/export/export.cpp
+msgid "Invalid timestamp server."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start signtool executable, configure signtool path in the Editor "
+"Settings (Export > Windows > Signtool)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Signtool failed to sign executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Failed to remove temporary file \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
msgid ""
"The rcedit tool must be configured in the Editor Settings (Export > Windows "
"> Rcedit) to change the icon or app information data."
@@ -19277,6 +19515,22 @@ msgid "Invalid product version:"
msgstr ""
#: platform/windows/export/export.cpp
+msgid "Windows executables cannot be >= 4 GiB."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Failed to open executable file \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable file header corrupted."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable \"pck\" section not found."
+msgstr ""
+
+#: platform/windows/export/export.cpp
msgid "Windows"
msgstr ""
@@ -19292,6 +19546,10 @@ msgstr ""
msgid "Wine"
msgstr ""
+#: platform/x11/export/export.cpp
+msgid "32-bit executables cannot have embedded data >= 4 GiB."
+msgstr ""
+
#: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp
#: scene/resources/texture.cpp
msgid "Frames"
@@ -19402,7 +19660,8 @@ msgstr ""
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/3d/light.cpp scene/3d/reflection_probe.cpp
-#: scene/3d/visual_instance.cpp scene/resources/material.cpp
+#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp
+#: scene/resources/material.cpp
msgid "Max Distance"
msgstr ""
@@ -20116,6 +20375,17 @@ msgstr ""
msgid "Edge Connection Margin"
msgstr "Ikabit"
+#: scene/2d/navigation_2d.cpp
+msgid ""
+"'Navigation2D' node and 'Navigation2D.get_simple_path()' are deprecated and "
+"will be removed in a future version. Use 'Navigation2DServer.map_get_path()' "
+"instead."
+msgstr ""
+
+#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
+msgid "Path Desired Distance"
+msgstr ""
+
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
msgid "Target Desired Distance"
msgstr ""
@@ -20167,13 +20437,15 @@ msgid ""
msgstr ""
#: scene/2d/navigation_polygon.cpp
-msgid ""
-"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
-"node. It only provides navigation data."
+msgid "Navpoly"
msgstr ""
-#: scene/2d/navigation_polygon.cpp
-msgid "Navpoly"
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+msgid "Enter Cost"
+msgstr ""
+
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+msgid "Travel Cost"
msgstr ""
#: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp
@@ -21235,6 +21507,13 @@ msgstr ""
msgid "Transform Normals"
msgstr "3D Transform Track"
+#: scene/3d/navigation.cpp
+msgid ""
+"'Navigation' node and 'Navigation.get_simple_path()' are deprecated and will "
+"be removed in a future version. Use 'NavigationServer.map_get_path()' "
+"instead."
+msgstr ""
+
#: scene/3d/navigation.cpp scene/resources/curve.cpp
msgid "Up Vector"
msgstr ""
@@ -21256,12 +21535,6 @@ msgid ""
"The NavigationAgent can be used only under a Spatial inheriting parent node."
msgstr ""
-#: scene/3d/navigation_mesh_instance.cpp
-msgid ""
-"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
-"It only provides navigation data."
-msgstr ""
-
#: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp
msgid "NavMesh"
msgstr ""
@@ -23665,6 +23938,16 @@ msgid "3D Physics"
msgstr ""
#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "2D Navigation"
+msgstr "Burahin ang (mga) Napiling Key"
+
+#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "3D Navigation"
+msgstr "Burahin ang (mga) Napiling Key"
+
+#: scene/register_scene_types.cpp
msgid "Use hiDPI"
msgstr ""
@@ -24936,7 +25219,7 @@ msgstr ""
msgid "Refraction"
msgstr ""
-#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp
+#: scene/resources/material.cpp
msgid "Detail"
msgstr ""
@@ -25013,8 +25296,14 @@ msgid "Visible Instance Count"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Sample Partition Type"
-msgstr ""
+#, fuzzy
+msgid "Sampling"
+msgstr "Iskala"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Partition Type"
+msgstr "Pagulit ng Animation"
#: scene/resources/navigation_mesh.cpp
msgid "Parsed Geometry Type"
@@ -25029,7 +25318,11 @@ msgid "Source Group Name"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Agent"
+msgid "Cells"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
+msgid "Agents"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -25041,11 +25334,16 @@ msgid "Max Slope"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Regions"
+msgstr "Mga Functions:"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Merge Size"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Edge"
+msgid "Edges"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -25058,6 +25356,10 @@ msgid "Verts Per Poly"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+msgid "Details"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
msgid "Sample Distance"
msgstr ""
@@ -25074,7 +25376,15 @@ msgid "Ledge Spans"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Filter Walkable Low Height Spans"
+msgid "Walkable Low Height Spans"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
+msgid "Baking AABB"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
+msgid "Baking AABB Offset"
msgstr ""
#: scene/resources/occluder_shape.cpp
@@ -25445,6 +25755,11 @@ msgid "Scenario"
msgstr ""
#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Navigation Map"
+msgstr "Pagulit ng Animation"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
msgid "Direct Space State"
msgstr ""
@@ -25460,6 +25775,26 @@ msgstr ""
msgid "Default Angular Damp"
msgstr ""
+#: scene/resources/world.cpp
+#, fuzzy
+msgid "Default Map Up"
+msgstr "Halaga:"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Size"
+msgstr "Halaga:"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Height"
+msgstr "Halaga:"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Edge Connection Margin"
+msgstr "Ikabit"
+
#: scene/resources/world_2d.cpp
msgid "Canvas"
msgstr ""
diff --git a/editor/translations/fr.po b/editor/translations/fr.po
index 6bd4ffa0eb..5711d32f52 100644
--- a/editor/translations/fr.po
+++ b/editor/translations/fr.po
@@ -97,13 +97,15 @@
# Zachary Dionne <zachary.dionne.01@gmail.com>, 2022.
# Fares Setbel <fares.setbels@gmail.com>, 2022.
# Nathan Hamy <hamynathan92@gmail.com>, 2022.
+# HOUA <ninjacowzx@gmail.com>, 2022.
+# DinosaurHorseSword <ewenlandry@mailfence.com>, 2022.
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: 2022-05-31 22:33+0000\n"
-"Last-Translator: Maxime Leroy <lisacintosh@gmail.com>\n"
+"PO-Revision-Date: 2022-06-29 10:04+0000\n"
+"Last-Translator: DinosaurHorseSword <ewenlandry@mailfence.com>\n"
"Language-Team: French <https://hosted.weblate.org/projects/godot-engine/"
"godot/fr/>\n"
"Language: fr\n"
@@ -111,7 +113,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.13-dev\n"
+"X-Generator: Weblate 4.13.1-dev\n"
#: core/bind/core_bind.cpp main/main.cpp
msgid "Tablet Driver"
@@ -142,9 +144,8 @@ msgid "Delta Smoothing"
msgstr "Lissage de Delta"
#: core/bind/core_bind.cpp
-#, fuzzy
msgid "Low Processor Usage Mode"
-msgstr "Mode d'utilisation du processeur bas en ressources"
+msgstr "Mode d'Utilisation Faible du Processeur"
#: core/bind/core_bind.cpp
msgid "Low Processor Usage Mode Sleep (µsec)"
@@ -281,9 +282,8 @@ msgid "Command Queue"
msgstr "File d’Attente de Commandes"
#: core/command_queue_mt.cpp
-#, fuzzy
msgid "Multithreading Queue Size (KB)"
-msgstr "Taille de la file du Multi-tache (KB)"
+msgstr "Taille de la fille d'attente Multi-Tache (KB)"
#: core/func_ref.cpp modules/visual_script/visual_script_builtin_funcs.cpp
#: modules/visual_script/visual_script_func_nodes.cpp
@@ -298,9 +298,10 @@ msgid "Data"
msgstr "Données"
#: core/io/file_access_network.cpp core/register_core_types.cpp
-#: editor/editor_settings.cpp main/main.cpp
+#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
#: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h
+#: scene/gui/file_dialog.cpp
msgid "Network"
msgstr "Réseau"
@@ -318,7 +319,7 @@ msgstr ""
#: core/io/http_client.cpp
msgid "Blocking Mode Enabled"
-msgstr ""
+msgstr "Mode De Blocage Activé"
#: core/io/http_client.cpp
msgid "Connection"
@@ -378,11 +379,11 @@ msgstr ""
#: core/io/stream_peer.cpp
msgid "Data Array"
-msgstr ""
+msgstr "Tableau de données"
#: core/io/stream_peer_ssl.cpp
msgid "Blocking Handshake"
-msgstr ""
+msgstr "Blocage de la poignée de main"
#: core/io/udp_server.cpp
msgid "Max Pending Connections"
@@ -443,12 +444,20 @@ msgstr "État"
#: core/message_queue.cpp
msgid "Message Queue"
-msgstr ""
+msgstr "File d'Attente de Message"
#: core/message_queue.cpp
msgid "Max Size (KB)"
msgstr "Taille Maximale (KB)"
+#: core/os/input.cpp
+msgid "Mouse Mode"
+msgstr "Mode De Déplacement Souris"
+
+#: core/os/input.cpp
+msgid "Use Accumulated Input"
+msgstr "Utiliser l'entrée accumulée"
+
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: servers/audio_server.cpp
msgid "Device"
@@ -468,7 +477,7 @@ msgstr "Contrôle"
#: core/os/input_event.cpp
msgid "Meta"
-msgstr ""
+msgstr "Méta"
#: core/os/input_event.cpp
msgid "Command"
@@ -481,14 +490,12 @@ msgid "Pressed"
msgstr "Pressé"
#: core/os/input_event.cpp
-#, fuzzy
msgid "Scancode"
msgstr "Scancode"
#: core/os/input_event.cpp
-#, fuzzy
msgid "Physical Scancode"
-msgstr "Touche physique"
+msgstr "Code de Scan Physique"
#: core/os/input_event.cpp
msgid "Unicode"
@@ -496,12 +503,11 @@ msgstr "Unicode"
#: core/os/input_event.cpp
msgid "Echo"
-msgstr ""
+msgstr "Écho"
#: core/os/input_event.cpp scene/gui/base_button.cpp
-#, fuzzy
msgid "Button Mask"
-msgstr "Bouton"
+msgstr "Masque Bouton"
#: core/os/input_event.cpp scene/2d/node_2d.cpp scene/gui/control.cpp
msgid "Global Position"
@@ -520,7 +526,6 @@ msgid "Doubleclick"
msgstr "Double clique"
#: core/os/input_event.cpp
-#, fuzzy
msgid "Tilt"
msgstr "Inclinaison"
@@ -561,7 +566,7 @@ msgstr "Action"
#: core/os/input_event.cpp scene/resources/environment.cpp
#: scene/resources/material.cpp
msgid "Strength"
-msgstr ""
+msgstr "Force"
#: core/os/input_event.cpp
msgid "Delta"
@@ -595,7 +600,7 @@ msgstr "Numéro du contrôleur"
#: core/os/input_event.cpp
msgid "Controller Value"
-msgstr ""
+msgstr "Valeur du controller"
#: core/project_settings.cpp editor/editor_node.cpp main/main.cpp
#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
@@ -608,9 +613,8 @@ msgid "Config"
msgstr "Config"
#: core/project_settings.cpp
-#, fuzzy
msgid "Project Settings Override"
-msgstr "Paramètres du projet..."
+msgstr "Remplacement Des Paramètres du Projet"
#: core/project_settings.cpp core/resource.cpp
#: editor/animation_track_editor.cpp editor/editor_autoload_settings.cpp
@@ -633,7 +637,8 @@ msgstr "Description"
#: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
-#: main/main.cpp
+#: main/main.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp
msgid "Run"
msgstr "Lancer"
@@ -651,9 +656,8 @@ msgid "Disable stderr"
msgstr "Désactiver stderr"
#: core/project_settings.cpp
-#, fuzzy
msgid "Use Hidden Project Data Directory"
-msgstr "Utiliser un Répertoire de Données du Projet Caché"
+msgstr "Utiliser un Répertoire Caché Pour Les Données du Projet"
#: core/project_settings.cpp
msgid "Use Custom User Dir"
@@ -666,15 +670,14 @@ msgstr "Nom du Répertoire Utilisateur Personnalisé"
#: core/project_settings.cpp main/main.cpp
#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
#: platform/uwp/os_uwp.cpp
-#, fuzzy
msgid "Display"
-msgstr "Tout afficher"
+msgstr "Affichage"
#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp
#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp
#: scene/3d/label_3d.cpp scene/gui/text_edit.cpp scene/resources/texture.cpp
msgid "Width"
-msgstr ""
+msgstr "Largeur"
#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp
#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp
@@ -682,23 +685,20 @@ msgstr ""
#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp
#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp
#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp
-#, fuzzy
msgid "Height"
-msgstr "Lumière"
+msgstr "Hauteur"
#: core/project_settings.cpp
msgid "Always On Top"
-msgstr ""
+msgstr "Toujours Au Dessus"
#: core/project_settings.cpp
-#, fuzzy
msgid "Test Width"
-msgstr "Étendu à Gauche"
+msgstr "Tester la Largeur"
#: core/project_settings.cpp
-#, fuzzy
msgid "Test Height"
-msgstr "En période de test"
+msgstr "Tester la Hauteur"
#: core/project_settings.cpp editor/animation_track_editor.cpp
#: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp
@@ -722,6 +722,10 @@ msgid "Main Run Args"
msgstr "Arguments de la scène principale :"
#: core/project_settings.cpp
+msgid "Scene Naming"
+msgstr "Noms de scènes"
+
+#: core/project_settings.cpp
msgid "Search In File Extensions"
msgstr ""
@@ -729,18 +733,13 @@ msgstr ""
msgid "Script Templates Search Path"
msgstr ""
-#: core/project_settings.cpp editor/editor_node.cpp
-#: editor/plugins/version_control_editor_plugin.cpp
-msgid "Version Control"
-msgstr "Contrôle de version"
-
#: core/project_settings.cpp
-msgid "Autoload On Startup"
-msgstr ""
+msgid "Version Control Autoload On Startup"
+msgstr "Chargement automatique de la version de contrôle au démarrage"
#: core/project_settings.cpp
-msgid "Plugin Name"
-msgstr "Nom du Plugin"
+msgid "Version Control Plugin Name"
+msgstr "Nom de l'extension de version de contrôle"
#: core/project_settings.cpp scene/2d/collision_object_2d.cpp
#: scene/3d/collision_object.cpp scene/gui/control.cpp
@@ -762,38 +761,33 @@ msgid "UI Cancel"
msgstr "Annuler"
#: core/project_settings.cpp
-#, fuzzy
msgid "UI Focus Next"
-msgstr "Focaliser le chemin"
+msgstr "Focus suivant"
#: core/project_settings.cpp
-#, fuzzy
msgid "UI Focus Prev"
-msgstr "Focaliser le chemin"
+msgstr "Focus précédent"
#: core/project_settings.cpp
-#, fuzzy
msgid "UI Left"
-msgstr "En haut à gauche"
+msgstr "Gauche"
#: core/project_settings.cpp
-#, fuzzy
msgid "UI Right"
-msgstr "En haut à droite"
+msgstr "Droite"
#: core/project_settings.cpp
msgid "UI Up"
msgstr ""
#: core/project_settings.cpp
-#, fuzzy
msgid "UI Down"
-msgstr "Descendre"
+msgstr "Bas"
#: core/project_settings.cpp
#, fuzzy
msgid "UI Page Up"
-msgstr "Page :"
+msgstr "Page Haut"
#: core/project_settings.cpp
msgid "UI Page Down"
@@ -804,9 +798,8 @@ msgid "UI Home"
msgstr ""
#: core/project_settings.cpp
-#, fuzzy
msgid "UI End"
-msgstr "À la fin"
+msgstr "Fin"
#: core/project_settings.cpp main/main.cpp modules/bullet/register_types.cpp
#: modules/bullet/space_bullet.cpp scene/2d/physics_body_2d.cpp
@@ -832,7 +825,7 @@ msgstr "3D"
#: core/project_settings.cpp
#, fuzzy
msgid "Smooth Trimesh Collision"
-msgstr "Créer une collision Trimesh"
+msgstr "Collision Lisse Trimesh"
#: core/project_settings.cpp drivers/gles2/rasterizer_canvas_base_gles2.cpp
#: drivers/gles2/rasterizer_scene_gles2.cpp
@@ -857,7 +850,8 @@ msgid "Quality"
msgstr "Qualité"
#: core/project_settings.cpp scene/gui/file_dialog.cpp
-#: scene/main/scene_tree.cpp servers/visual_server.cpp
+#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp
+#: servers/visual_server.cpp
msgid "Filters"
msgstr "Filtres"
@@ -888,9 +882,8 @@ msgid "Profiler"
msgstr "Profileur"
#: core/project_settings.cpp
-#, fuzzy
msgid "Max Functions"
-msgstr "Faire fonction"
+msgstr "Nombre maximum de fonctions"
#: core/project_settings.cpp scene/3d/vehicle_body.cpp
msgid "Compression"
@@ -934,12 +927,11 @@ msgstr ""
#: core/register_core_types.cpp
msgid "TCP"
-msgstr "TCP"
+msgstr "PCT (Protocole de Contrôle de Transmissions)"
#: core/register_core_types.cpp
-#, fuzzy
msgid "Connect Timeout Seconds"
-msgstr "Connexions à la méthode :"
+msgstr "Délai d'expiration de la connexion en secondes"
#: core/register_core_types.cpp
msgid "Packet Peer Stream"
@@ -1111,9 +1103,8 @@ msgid "Scale"
msgstr "Mode mise à l'échelle"
#: drivers/gles3/rasterizer_scene_gles3.cpp
-#, fuzzy
msgid "Follow Surface"
-msgstr "Remplir la surface"
+msgstr "Suivre la surface"
#: drivers/gles3/rasterizer_scene_gles3.cpp
msgid "Weight Samples"
@@ -2292,8 +2283,8 @@ msgid "Open"
msgstr "Ouvrir"
#: editor/dependency_editor.cpp
-msgid "Owners Of:"
-msgstr "Propriétaires de :"
+msgid "Owners of: %s (Total: %d)"
+msgstr ""
#: editor/dependency_editor.cpp
msgid ""
@@ -2600,7 +2591,7 @@ msgid "Bus Options"
msgstr "Options de bus"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/scene_tree_dock.cpp
+#: editor/project_export.cpp editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "Dupliquer"
@@ -2860,6 +2851,25 @@ msgid "Choose"
msgstr "Choisir"
#: editor/editor_export.cpp
+msgid "Project export for platform:"
+msgstr ""
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Completed with errors."
+msgstr "Copier le chemin du nœud"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Completed successfully."
+msgstr "Paquetage installé avec succès !"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed."
+msgstr "Échec :"
+
+#: editor/editor_export.cpp
msgid "Storing File:"
msgstr "Stockage du fichier :"
@@ -2872,6 +2882,31 @@ msgid "Packing"
msgstr "Empaquetage"
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save PCK"
+msgstr "Enregistrer sous"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Cannot create file \"%s\"."
+msgstr "Impossible de créer le dossier."
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to export project files."
+msgstr "Impossible d'exporter les fichiers du projet"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Can't open file to read from path \"%s\"."
+msgstr "Impossible d'ouvrir le fichier pour écriture :"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save ZIP"
+msgstr "Enregistrer sous"
+
+#: editor/editor_export.cpp
msgid ""
"Target platform requires 'ETC' texture compression for GLES2. Enable 'Import "
"Etc' in Project Settings."
@@ -2989,11 +3024,33 @@ msgstr "Modèle de débogage personnalisé introuvable."
msgid "Custom release template not found."
msgstr "Modèle de version personnalisée introuvable."
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Prepare Template"
+msgstr "Gérer les modèles"
+
+#: editor/editor_export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "The given export path doesn't exist."
+msgstr "Le chemin de l'exportation donné n'existe pas :"
+
#: editor/editor_export.cpp platform/javascript/export/export.cpp
-msgid "Template file not found:"
+#, fuzzy
+msgid "Template file not found: \"%s\"."
msgstr "Fichier modèle introuvable :"
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to copy export template."
+msgstr "Modèle d'exportation non valide :"
+
+#: editor/editor_export.cpp platform/windows/export/export.cpp
+#: platform/x11/export/export.cpp
+#, fuzzy
+msgid "PCK Embedding"
+msgstr "Remplissage(Padding)"
+
+#: editor/editor_export.cpp
msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB."
msgstr "Le PCK inclus dans un export 32-bits ne peut dépasser 4 Go."
@@ -3171,9 +3228,9 @@ msgid "Import"
msgstr "Importer"
#: editor/editor_feature_profile.cpp editor/project_export.cpp
-#: platform/android/export/export.cpp platform/javascript/export/export.cpp
-#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
-#: platform/windows/export/export.cpp
+#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#: platform/uwp/export/export.cpp platform/windows/export/export.cpp
msgid "Export"
msgstr "Exporter"
@@ -4343,15 +4400,6 @@ msgid ""
"Unable to write to file '%s', file in use, locked or lacking permissions."
msgstr ""
-#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
-msgid "Scene"
-msgstr "Scène"
-
-#: editor/editor_node.cpp
-#, fuzzy
-msgid "Scene Naming"
-msgstr "Chemin de la scène :"
-
#: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp
#: servers/arvr/arvr_interface.cpp
msgid "Interface"
@@ -4479,6 +4527,10 @@ msgid "Default Color Picker Mode"
msgstr ""
#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
+msgid "Version Control"
+msgstr "Contrôle de version"
+
+#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
msgid "Username"
msgstr "Nom d'utilisateur"
@@ -4506,6 +4558,10 @@ msgstr "Basculer en mode sans distraction."
msgid "Add a new scene."
msgstr "Ajouter une nouvelle scène."
+#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
+msgid "Scene"
+msgstr "Scène"
+
#: editor/editor_node.cpp
msgid "Go to previously opened scene."
msgstr "Aller à la scène ouverte précédemment."
@@ -5303,6 +5359,11 @@ msgstr ""
"Aucun préréglage d'exportation exécutable trouvé pour cette plate-forme. \n"
"Ajoutez un préréglage exécutable dans le menu d'exportation."
+#: editor/editor_run_native.cpp
+#, fuzzy
+msgid "Project Run"
+msgstr "Projet"
+
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
msgstr "Écrivez votre code dans la méthode _run()."
@@ -5578,7 +5639,9 @@ msgid "Draw Spaces"
msgstr "Appels de dessin :"
#: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp
-#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp
+#: scene/main/scene_tree.cpp scene/resources/world.cpp
+#: scene/resources/world_2d.cpp
msgid "Navigation"
msgstr "Navigation"
@@ -7066,7 +7129,7 @@ msgstr ""
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp
-#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp
+#: scene/gui/control.cpp
msgid "Filter"
msgstr "Filtre"
@@ -7350,6 +7413,18 @@ msgid "Saving..."
msgstr "Enregistrement…"
#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used as a normal map in 3D. Enabling red-green "
+"texture compression to reduce memory usage (blue channel is discarded)."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap "
+"generation and VRAM texture compression."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
msgid "2D, Detect 3D"
msgstr ""
@@ -8047,11 +8122,20 @@ msgid "New Anim"
msgstr "Nouvelle animation"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+msgstr "Créer une nouvelle animation"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Change Animation Name:"
msgstr "Modifier le nom de l'animation :"
#: editor/plugins/animation_player_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Rename Animation"
+msgstr "Renommer l'animation"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Delete Animation?"
msgstr "Supprimer l'animation ?"
@@ -8069,11 +8153,6 @@ msgid "Animation name already exists!"
msgstr "Ce nom d'animation existe déjà !"
#: editor/plugins/animation_player_editor_plugin.cpp
-#: editor/plugins/sprite_frames_editor_plugin.cpp
-msgid "Rename Animation"
-msgstr "Renommer l'animation"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate Animation"
msgstr "Dupliquer l'animation"
@@ -8218,10 +8297,6 @@ msgid "Pin AnimationPlayer"
msgstr "Épingler AnimationPlayer"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Create New Animation"
-msgstr "Créer une nouvelle animation"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Name:"
msgstr "Nom de l'animation :"
@@ -9797,7 +9872,7 @@ msgstr "Créer le contour"
#: scene/resources/multimesh.cpp scene/resources/primitive_meshes.cpp
#: scene/resources/texture.cpp
msgid "Mesh"
-msgstr "Maillages"
+msgstr "Mesh"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Trimesh Static Body"
@@ -10360,6 +10435,7 @@ msgid "Points"
msgstr "Points"
#: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp
+#: scene/resources/navigation_mesh.cpp
msgid "Polygons"
msgstr "Polygones"
@@ -11746,7 +11822,8 @@ msgid "Invalid geometry, can't replace by mesh."
msgstr "Géométrie invalide, impossible de remplacer par un maillage."
#: editor/plugins/sprite_editor_plugin.cpp
-msgid "Convert to Mesh2D"
+#, fuzzy
+msgid "Convert to MeshInstance2D"
msgstr "Convertir en Mesh2D"
#: editor/plugins/sprite_editor_plugin.cpp
@@ -12750,8 +12827,7 @@ msgid "Select the previous shape, subtile, or Tile."
msgstr "Sélectionner la forme précédente, sous-tuile, ou tuile."
#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp
-#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp
-#: scene/resources/texture.cpp
+#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp
msgid "Region"
msgstr "Région"
@@ -14279,36 +14355,10 @@ msgid "Delete preset '%s'?"
msgstr "Supprimer le préréglage « %s » ?"
#: editor/project_export.cpp
-msgid ""
-"Failed to export the project for platform '%s'.\n"
-"Export templates seem to be missing or invalid."
-msgstr ""
-"Échec de l'exportation du projet pour la plate-forme « %s ».\n"
-"Les modèles d'exportation semblent être manquants ou invalides."
-
-#: 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 ""
-"Échec de l'exportation du projet pour la plate-forme « %s ».\n"
-"Cela peut être dû à un problème de configuration dans le préréglage "
-"d'exportation ou dans vos paramètres d'exportation."
-
-#: editor/project_export.cpp
msgid "Exporting All"
msgstr "Tout exporter"
#: editor/project_export.cpp
-msgid "The given export path doesn't exist:"
-msgstr "Le chemin de l'exportation donné n'existe pas :"
-
-#: editor/project_export.cpp
-msgid "Export templates for this platform are missing/corrupted:"
-msgstr "Modèles d'exportation manquants ou corrompus pour cette plateforme :"
-
-#: editor/project_export.cpp
msgid "Export Path"
msgstr "Chemin d'exportation"
@@ -14455,6 +14505,11 @@ msgid "Export templates for this platform are missing:"
msgstr "Modèles d'exportation manquants pour cette plateforme :"
#: editor/project_export.cpp
+#, fuzzy
+msgid "Project Export"
+msgstr "Fondateurs du projet"
+
+#: editor/project_export.cpp
msgid "Manage Export Templates"
msgstr "Gérer les modèles d'exportation"
@@ -16896,7 +16951,7 @@ msgstr ""
#: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp
#: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp
-#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp
+#: scene/3d/collision_polygon.cpp
#, fuzzy
msgid "Polygon"
msgstr "Polygones"
@@ -17513,7 +17568,6 @@ msgid "Use In Baked Light"
msgstr "Précalculer les lightmaps"
#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
-#: scene/resources/navigation_mesh.cpp
msgid "Cell"
msgstr ""
@@ -17543,6 +17597,19 @@ msgstr "Centre"
msgid "Mask"
msgstr ""
+#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
+#, fuzzy
+msgid "Bake Navigation"
+msgstr "Navigation"
+
+#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp
+#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp
+#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp
+#: scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Navigation Layers"
+msgstr "Mode Navigation"
+
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Plane"
msgstr "Plan suivant"
@@ -19067,10 +19134,6 @@ msgid "Could not execute on device."
msgstr "Impossible d'exécuter sur l'appareil."
#: platform/android/export/export_plugin.cpp
-msgid "Unable to find the 'apksigner' tool."
-msgstr "Impossible de trouver l'outil 'apksigner'."
-
-#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -19202,12 +19265,17 @@ msgstr ""
"La version « Target Sdk » doit être supérieure ou égale à la version « Min "
"Sdk »."
+#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Code Signing"
+msgstr "Signaux"
+
#: platform/android/export/export_plugin.cpp
+#, fuzzy
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."
+"'apksigner' could not be found. Please check that the command is available "
+"in the Android SDK build-tools directory. The resulting %s is unsigned."
msgstr ""
"Impossible de trouver 'apksigner'.\n"
"Veuillez vérifier que la commande est disponible dans le dossier build-tools "
@@ -19227,6 +19295,11 @@ msgid "Could not find keystore, unable to export."
msgstr "Impossible de trouver le keystore, impossible d'exporter."
#: platform/android/export/export_plugin.cpp
+#, fuzzy
+msgid "Could not start apksigner executable."
+msgstr "Impossible de démarrer le sous-processus !"
+
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr "'apksigner' est retourné avec l'erreur #%d"
@@ -19261,7 +19334,8 @@ msgstr ""
"*.apk."
#: platform/android/export/export_plugin.cpp
-msgid "Unsupported export format!\n"
+#, fuzzy
+msgid "Unsupported export format!"
msgstr "Format d'export non supporté !\n"
#: platform/android/export/export_plugin.cpp
@@ -19274,10 +19348,9 @@ msgstr ""
"menu 'Projet'."
#: platform/android/export/export_plugin.cpp
+#, fuzzy
msgid ""
-"Android build version mismatch:\n"
-" Template installed: %s\n"
-" Godot Version: %s\n"
+"Android build version mismatch: Template installed: %s, Godot version: %s. "
"Please reinstall Android build template from 'Project' menu."
msgstr ""
"La version d'Android ne correspond pas :\n"
@@ -19286,14 +19359,16 @@ msgstr ""
"Veuillez réinstaller la version d'Android depuis le menu 'Projet'."
#: platform/android/export/export_plugin.cpp
+#, fuzzy
msgid ""
-"Unable to overwrite res://android/build/res/*.xml files with project name"
+"Unable to overwrite res://android/build/res/*.xml files with project name."
msgstr ""
"Impossible d'écraser les fichiers res://android/build/res/*.xml avec le nom "
"du projet"
#: platform/android/export/export_plugin.cpp
-msgid "Could not export project files to gradle project\n"
+#, fuzzy
+msgid "Could not export project files to gradle project."
msgstr "Impossible d'exporter les fichiers du projet vers le projet gradle\n"
#: platform/android/export/export_plugin.cpp
@@ -19305,8 +19380,9 @@ msgid "Building Android Project (gradle)"
msgstr "Construire le Project Android (gradle)"
#: platform/android/export/export_plugin.cpp
+#, fuzzy
msgid ""
-"Building of Android project failed, check output for the error.\n"
+"Building of Android project failed, check output for the error. "
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
"La construction du projet Android a échoué, vérifiez la sortie pour "
@@ -19327,7 +19403,8 @@ msgstr ""
"du projet gradle pour les journaux."
#: platform/android/export/export_plugin.cpp
-msgid "Package not found: %s"
+#, fuzzy
+msgid "Package not found: \"%s\"."
msgstr "Paquet non trouvé : %s"
#: platform/android/export/export_plugin.cpp
@@ -19335,17 +19412,16 @@ msgid "Creating APK..."
msgstr "Création de l'APK..."
#: platform/android/export/export_plugin.cpp
-msgid ""
-"Could not find template APK to export:\n"
-"%s"
+#, fuzzy
+msgid "Could not find template APK to export: \"%s\"."
msgstr ""
"Impossible de trouver le modèle de l'APK à exporter :\n"
"%s"
#: platform/android/export/export_plugin.cpp
+#, fuzzy
msgid ""
-"Missing libraries in the export template for the selected architectures: "
-"%s.\n"
+"Missing libraries in the export template for the selected architectures: %s. "
"Please build a template with all required libraries, or uncheck the missing "
"architectures in the export preset."
msgstr ""
@@ -19359,7 +19435,8 @@ msgid "Adding files..."
msgstr "Ajout de fichiers..."
#: platform/android/export/export_plugin.cpp
-msgid "Could not export project files"
+#, fuzzy
+msgid "Could not export project files."
msgstr "Impossible d'exporter les fichiers du projet"
#: platform/android/export/export_plugin.cpp
@@ -19600,6 +19677,17 @@ msgstr "Nœud Personnalisé"
msgid "Custom BG Color"
msgstr "Nœud Personnalisé"
+#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Prepare Templates"
+msgstr "Gérer les modèles"
+
+#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Export template not found."
+msgstr "Modèle de version personnalisée introuvable."
+
#: platform/iphone/export/export.cpp
msgid "App Store Team ID not specified - cannot configure the project."
msgstr "App Store Team ID non spécifié - ne peut pas configurer le projet."
@@ -19621,22 +19709,35 @@ msgid "Run exported HTML in the system's default browser."
msgstr "Exécutez le HTML exporté dans le navigateur par défaut du système."
#: platform/javascript/export/export.cpp
-msgid "Could not open template for export:"
+#, fuzzy
+msgid "Could not open template for export: \"%s\"."
msgstr "Impossible d'ouvrir le modèle pour exportation :"
#: platform/javascript/export/export.cpp
-msgid "Invalid export template:"
+#, fuzzy
+msgid "Invalid export template: \"%s\"."
msgstr "Modèle d'exportation non valide :"
#: platform/javascript/export/export.cpp
-msgid "Could not write file:"
+#, fuzzy
+msgid "Could not write file: \"%s\"."
msgstr "Impossible d'écrire le fichier :"
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Icon Creation"
+msgstr "Définir la marge"
+
#: platform/javascript/export/export.cpp
-msgid "Could not read file:"
+#, fuzzy
+msgid "Could not read file: \"%s\"."
msgstr "Impossible de lire le fichier :"
#: platform/javascript/export/export.cpp
+msgid "PWA"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
msgid "Variant"
msgstr "Variant"
@@ -19710,15 +19811,18 @@ msgid "Icon 512 X 512"
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not read HTML shell:"
+#, fuzzy
+msgid "Could not read HTML shell: \"%s\"."
msgstr "Impossible de lire le shell HTML :"
#: platform/javascript/export/export.cpp
-msgid "Could not create HTTP server directory:"
+#, fuzzy
+msgid "Could not create HTTP server directory: %s."
msgstr "Impossible de créer le répertoire du serveur HTTP :"
#: platform/javascript/export/export.cpp
-msgid "Error starting HTTP server:"
+#, fuzzy
+msgid "Error starting HTTP server: %d."
msgstr "Erreur de démarrage du serveur HTTP :"
#: platform/javascript/export/export.cpp
@@ -20014,9 +20118,28 @@ msgid "Apple Team ID"
msgstr "Apple Team ID"
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open icon file \"%s\"."
+msgstr "Impossible d'exporter les fichiers du projet"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start xcrun executable."
+msgstr "Impossible de démarrer le sous-processus !"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization failed."
+msgstr "Localisation"
+
+#: platform/osx/export/export.cpp
+msgid "Notarization request UUID: \"%s\""
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid ""
-"Note: The notarization process generally takes less than an hour. When the "
-"process is completed, you'll receive an email."
+"The notarization process generally takes less than an hour. When the process "
+"is completed, you'll receive an email."
msgstr ""
#: platform/osx/export/export.cpp
@@ -20032,19 +20155,75 @@ msgid ""
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign failed with error \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign require regex module."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Could not start codesign executable, make sure Xcode command line tools are "
+"installed."
+msgstr ""
+
+#: platform/osx/export/export.cpp platform/windows/export/export.cpp
msgid "No identity found."
msgstr "Aucune identité trouvée."
#: platform/osx/export/export.cpp
#, fuzzy
+msgid "Cannot sign file %s."
+msgstr "Erreur lors de l'enregistrement du fichier : %s"
+
+#: platform/osx/export/export.cpp
+msgid "Relative symlinks are not supported, exported \"%s\" might be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "DMG Creation"
+msgstr "Directions"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start hdiutil executable."
+msgstr "Impossible de démarrer le sous-processus !"
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed - file exists."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
msgid "Creating app bundle"
msgstr "Création de l'aperçu"
#: platform/osx/export/export.cpp
-msgid "Could not find template app to export:"
+#, fuzzy
+msgid "Could not find template app to export: \"%s\"."
msgstr "Impossible de trouver le modèle de l'application à exporter :"
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid export format."
+msgstr "Modèle d'exportation non valide :"
+
+#: platform/osx/export/export.cpp
msgid ""
"Relative symlinks are not supported on this OS, the exported project might "
"be broken!"
@@ -20052,7 +20231,7 @@ msgstr ""
#: platform/osx/export/export.cpp
msgid ""
-"Requested template binary '%s' not found. It might be missing from your "
+"Requested template binary \"%s\" not found. It might be missing from your "
"template archive."
msgstr ""
@@ -20093,6 +20272,16 @@ msgid "Sending archive for notarization"
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "ZIP Creation"
+msgstr "Projet"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open file to read from path \"%s\"."
+msgstr "Impossible d'exporter les fichiers du projet vers le projet gradle\n"
+
+#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr "Identificateur de bundle non valide :"
@@ -20431,6 +20620,11 @@ msgid "Debug Algorithm"
msgstr "Débogueur"
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to rename temporary file \"%s\"."
+msgstr "Impossible de supprimer le fichier temporaire :"
+
+#: platform/windows/export/export.cpp
msgid "Identity Type"
msgstr ""
@@ -20475,6 +20669,78 @@ msgid "Trademarks"
msgstr ""
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Resources Modification"
+msgstr "Rotation aléatoire :"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find rcedit executable at \"%s\"."
+msgstr "Impossible de trouver le keystore, impossible d'exporter."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find wine executable at \"%s\"."
+msgstr "Impossible de trouver le keystore, impossible d'exporter."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid ""
+"Could not start rcedit executable, configure rcedit path in the Editor "
+"Settings (Export > Windows > Rcedit)."
+msgstr ""
+"L'outil « rcedit » doit être configuré dans les préférences de l'éditeur "
+"(Exporter > Windows > Rcedit) for modifier l'icône ou les informations de "
+"l'application."
+
+#: platform/windows/export/export.cpp
+msgid ""
+"rcedit failed to modify executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find signtool executable at \"%s\"."
+msgstr "Impossible de trouver le keystore, impossible d'exporter."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find osslsigncode executable at \"%s\"."
+msgstr "Impossible de trouver le keystore, impossible d'exporter."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid identity type."
+msgstr "Identifiant invalide :"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid timestamp server."
+msgstr "Nom invalide."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid ""
+"Could not start signtool executable, configure signtool path in the Editor "
+"Settings (Export > Windows > Signtool)."
+msgstr ""
+"L'outil « rcedit » doit être configuré dans les préférences de l'éditeur "
+"(Exporter > Windows > Rcedit) for modifier l'icône ou les informations de "
+"l'application."
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Signtool failed to sign executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to remove temporary file \"%s\"."
+msgstr "Impossible de supprimer le fichier temporaire :"
+
+#: platform/windows/export/export.cpp
msgid ""
"The rcedit tool must be configured in the Editor Settings (Export > Windows "
"> Rcedit) to change the icon or app information data."
@@ -20496,6 +20762,23 @@ msgid "Invalid product version:"
msgstr "Version du produit invalide :"
#: platform/windows/export/export.cpp
+msgid "Windows executables cannot be >= 4 GiB."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+#, fuzzy
+msgid "Failed to open executable file \"%s\"."
+msgstr "Fichier exécutable invalide."
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable file header corrupted."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable \"pck\" section not found."
+msgstr ""
+
+#: platform/windows/export/export.cpp
#, fuzzy
msgid "Windows"
msgstr "Nouvelle Fenêtre"
@@ -20512,6 +20795,10 @@ msgstr ""
msgid "Wine"
msgstr ""
+#: platform/x11/export/export.cpp
+msgid "32-bit executables cannot have embedded data >= 4 GiB."
+msgstr ""
+
#: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp
#: scene/resources/texture.cpp
#, fuzzy
@@ -20639,7 +20926,8 @@ msgstr ""
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/3d/light.cpp scene/3d/reflection_probe.cpp
-#: scene/3d/visual_instance.cpp scene/resources/material.cpp
+#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp
+#: scene/resources/material.cpp
msgid "Max Distance"
msgstr "Distance Maximale"
@@ -21450,6 +21738,18 @@ msgstr ""
msgid "Edge Connection Margin"
msgstr "Modifier la connexion :"
+#: scene/2d/navigation_2d.cpp
+msgid ""
+"'Navigation2D' node and 'Navigation2D.get_simple_path()' are deprecated and "
+"will be removed in a future version. Use 'Navigation2DServer.map_get_path()' "
+"instead."
+msgstr ""
+
+#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
+#, fuzzy
+msgid "Path Desired Distance"
+msgstr "Choisissez distance :"
+
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
msgid "Target Desired Distance"
msgstr ""
@@ -21511,17 +21811,19 @@ msgstr ""
"polygone."
#: scene/2d/navigation_polygon.cpp
-msgid ""
-"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
-"node. It only provides navigation data."
-msgstr ""
-"Un NavigationPolygonInstance doit être un enfant ou petit-enfant d'un nœud "
-"Navigation2D. Il fournit seulement des données de navigation."
-
-#: scene/2d/navigation_polygon.cpp
msgid "Navpoly"
msgstr ""
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Enter Cost"
+msgstr "Centrée en bas"
+
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Travel Cost"
+msgstr "Se déplacer"
+
#: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp
#: scene/main/canvas_layer.cpp
msgid "Rotation Degrees"
@@ -22742,6 +23044,13 @@ msgstr ""
msgid "Transform Normals"
msgstr "Transformation annulée."
+#: scene/3d/navigation.cpp
+msgid ""
+"'Navigation' node and 'Navigation.get_simple_path()' are deprecated and will "
+"be removed in a future version. Use 'NavigationServer.map_get_path()' "
+"instead."
+msgstr ""
+
#: scene/3d/navigation.cpp scene/resources/curve.cpp
#, fuzzy
msgid "Up Vector"
@@ -22767,14 +23076,6 @@ msgid ""
"The NavigationAgent can be used only under a Spatial inheriting parent node."
msgstr "Le NavigationAgent ne peut être utilisé que sous un nœud spatial."
-#: scene/3d/navigation_mesh_instance.cpp
-msgid ""
-"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
-"It only provides navigation data."
-msgstr ""
-"Un NavigationMeshInstance doit être enfant ou sous-enfant d'un nœud de type "
-"Navigation. Il fournit uniquement des données de navigation."
-
#: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp
#, fuzzy
msgid "NavMesh"
@@ -25503,6 +25804,16 @@ msgid "3D Physics"
msgstr "Physique"
#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "2D Navigation"
+msgstr "Navigation"
+
+#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "3D Navigation"
+msgstr "Navigation"
+
+#: scene/register_scene_types.cpp
msgid "Use hiDPI"
msgstr ""
@@ -26852,7 +27163,7 @@ msgstr ""
#: scene/resources/material.cpp
msgid "Rim"
-msgstr ""
+msgstr "Bordure"
#: scene/resources/material.cpp
#, fuzzy
@@ -26911,7 +27222,7 @@ msgstr "Transmission"
msgid "Refraction"
msgstr "Réfraction"
-#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp
+#: scene/resources/material.cpp
msgid "Detail"
msgstr ""
@@ -26995,7 +27306,12 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
-msgid "Sample Partition Type"
+msgid "Sampling"
+msgstr "Mise à l'échelle :"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Partition Type"
msgstr "Définir type de variable"
#: scene/resources/navigation_mesh.cpp
@@ -27013,10 +27329,15 @@ msgid "Source Group Name"
msgstr "Source"
#: scene/resources/navigation_mesh.cpp
-msgid "Agent"
+msgid "Cells"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Agents"
+msgstr "Segments"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Max Climb"
msgstr ""
@@ -27026,11 +27347,16 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
+msgid "Regions"
+msgstr "Région"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
msgid "Merge Size"
msgstr "Fusionner depuis la scène"
#: scene/resources/navigation_mesh.cpp
-msgid "Edge"
+msgid "Edges"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -27044,6 +27370,11 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
+msgid "Details"
+msgstr "Afficher par défaut"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
msgid "Sample Distance"
msgstr "Choisissez distance :"
@@ -27061,9 +27392,19 @@ msgid "Ledge Spans"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Filter Walkable Low Height Spans"
+msgid "Walkable Low Height Spans"
msgstr ""
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB"
+msgstr "Générer AABB"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB Offset"
+msgstr "Décalage :"
+
#: scene/resources/occluder_shape.cpp
msgid "Spheres"
msgstr ""
@@ -27475,6 +27816,11 @@ msgid "Scenario"
msgstr "Scène"
#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Navigation Map"
+msgstr "Navigation"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
msgid "Direct Space State"
msgstr ""
@@ -27492,6 +27838,26 @@ msgstr "Linéaire gauche"
msgid "Default Angular Damp"
msgstr ""
+#: scene/resources/world.cpp
+#, fuzzy
+msgid "Default Map Up"
+msgstr "Défaut"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Size"
+msgstr "Aperçu par défaut"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Height"
+msgstr "En période de test"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Edge Connection Margin"
+msgstr "Modifier la connexion :"
+
#: scene/resources/world_2d.cpp
msgid "Canvas"
msgstr ""
diff --git a/editor/translations/ga.po b/editor/translations/ga.po
index aad48c8156..04e014ed77 100644
--- a/editor/translations/ga.po
+++ b/editor/translations/ga.po
@@ -204,9 +204,10 @@ msgid "Data"
msgstr ""
#: core/io/file_access_network.cpp core/register_core_types.cpp
-#: editor/editor_settings.cpp main/main.cpp
+#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
#: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h
+#: scene/gui/file_dialog.cpp
msgid "Network"
msgstr ""
@@ -357,6 +358,16 @@ msgstr ""
msgid "Max Size (KB)"
msgstr ""
+#: core/os/input.cpp
+#, fuzzy
+msgid "Mouse Mode"
+msgstr "Scagairí..."
+
+#: core/os/input.cpp
+#, fuzzy
+msgid "Use Accumulated Input"
+msgstr "Scrios ionchur"
+
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: servers/audio_server.cpp
msgid "Device"
@@ -541,7 +552,8 @@ msgstr "Cuntas:"
#: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
-#: main/main.cpp
+#: main/main.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp
msgid "Run"
msgstr ""
@@ -624,24 +636,23 @@ msgid "Main Run Args"
msgstr ""
#: core/project_settings.cpp
-msgid "Search In File Extensions"
+msgid "Scene Naming"
msgstr ""
#: core/project_settings.cpp
-msgid "Script Templates Search Path"
+msgid "Search In File Extensions"
msgstr ""
-#: core/project_settings.cpp editor/editor_node.cpp
-#: editor/plugins/version_control_editor_plugin.cpp
-msgid "Version Control"
+#: core/project_settings.cpp
+msgid "Script Templates Search Path"
msgstr ""
#: core/project_settings.cpp
-msgid "Autoload On Startup"
+msgid "Version Control Autoload On Startup"
msgstr ""
#: core/project_settings.cpp
-msgid "Plugin Name"
+msgid "Version Control Plugin Name"
msgstr ""
#: core/project_settings.cpp scene/2d/collision_object_2d.cpp
@@ -750,7 +761,8 @@ msgid "Quality"
msgstr ""
#: core/project_settings.cpp scene/gui/file_dialog.cpp
-#: scene/main/scene_tree.cpp servers/visual_server.cpp
+#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp
+#: servers/visual_server.cpp
#, fuzzy
msgid "Filters"
msgstr "Scagairí..."
@@ -2146,7 +2158,7 @@ msgid "Open"
msgstr "Oscailte"
#: editor/dependency_editor.cpp
-msgid "Owners Of:"
+msgid "Owners of: %s (Total: %d)"
msgstr ""
#: editor/dependency_editor.cpp
@@ -2438,7 +2450,7 @@ msgid "Bus Options"
msgstr "Cruthaigh"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/scene_tree_dock.cpp
+#: editor/project_export.cpp editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr ""
@@ -2694,6 +2706,22 @@ msgid "Choose"
msgstr ""
#: editor/editor_export.cpp
+msgid "Project export for platform:"
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Completed with errors."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Completed successfully."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Failed."
+msgstr ""
+
+#: editor/editor_export.cpp
msgid "Storing File:"
msgstr ""
@@ -2706,6 +2734,27 @@ msgid "Packing"
msgstr ""
#: editor/editor_export.cpp
+msgid "Save PCK"
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Cannot create file \"%s\"."
+msgstr ""
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to export project files."
+msgstr "Scagairí..."
+
+#: editor/editor_export.cpp
+msgid "Can't open file to read from path \"%s\"."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Save ZIP"
+msgstr ""
+
+#: editor/editor_export.cpp
msgid ""
"Target platform requires 'ETC' texture compression for GLES2. Enable 'Import "
"Etc' in Project Settings."
@@ -2806,8 +2855,26 @@ msgstr ""
msgid "Custom release template not found."
msgstr ""
+#: editor/editor_export.cpp
+msgid "Prepare Template"
+msgstr ""
+
+#: editor/editor_export.cpp platform/osx/export/export.cpp
+msgid "The given export path doesn't exist."
+msgstr ""
+
#: editor/editor_export.cpp platform/javascript/export/export.cpp
-msgid "Template file not found:"
+#, fuzzy
+msgid "Template file not found: \"%s\"."
+msgstr "Ãbhar:"
+
+#: editor/editor_export.cpp
+msgid "Failed to copy export template."
+msgstr ""
+
+#: editor/editor_export.cpp platform/windows/export/export.cpp
+#: platform/x11/export/export.cpp
+msgid "PCK Embedding"
msgstr ""
#: editor/editor_export.cpp
@@ -2978,9 +3045,9 @@ msgid "Import"
msgstr ""
#: editor/editor_feature_profile.cpp editor/project_export.cpp
-#: platform/android/export/export.cpp platform/javascript/export/export.cpp
-#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
-#: platform/windows/export/export.cpp
+#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#: platform/uwp/export/export.cpp platform/windows/export/export.cpp
msgid "Export"
msgstr ""
@@ -4058,14 +4125,6 @@ msgid ""
"Unable to write to file '%s', file in use, locked or lacking permissions."
msgstr ""
-#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
-msgid "Scene"
-msgstr ""
-
-#: editor/editor_node.cpp
-msgid "Scene Naming"
-msgstr ""
-
#: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp
#: servers/arvr/arvr_interface.cpp
msgid "Interface"
@@ -4182,6 +4241,10 @@ msgid "Default Color Picker Mode"
msgstr ""
#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
+msgid "Version Control"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
#, fuzzy
msgid "Username"
msgstr "Ainm nua:"
@@ -4210,6 +4273,10 @@ msgstr ""
msgid "Add a new scene."
msgstr ""
+#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
+msgid "Scene"
+msgstr ""
+
#: editor/editor_node.cpp
msgid "Go to previously opened scene."
msgstr ""
@@ -4938,6 +5005,11 @@ msgid ""
"as runnable."
msgstr ""
+#: editor/editor_run_native.cpp
+#, fuzzy
+msgid "Project Run"
+msgstr "Cuntas:"
+
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
msgstr ""
@@ -5192,7 +5264,9 @@ msgid "Draw Spaces"
msgstr ""
#: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp
-#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp
+#: scene/main/scene_tree.cpp scene/resources/world.cpp
+#: scene/resources/world_2d.cpp
msgid "Navigation"
msgstr ""
@@ -6581,7 +6655,7 @@ msgstr ""
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp
-#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp
+#: scene/gui/control.cpp
#, fuzzy
msgid "Filter"
msgstr "Scagairí..."
@@ -6855,6 +6929,18 @@ msgid "Saving..."
msgstr ""
#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used as a normal map in 3D. Enabling red-green "
+"texture compression to reduce memory usage (blue channel is discarded)."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap "
+"generation and VRAM texture compression."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
msgid "2D, Detect 3D"
msgstr ""
@@ -7512,11 +7598,20 @@ msgid "New Anim"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+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 "Rename Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Delete Animation?"
msgstr ""
@@ -7534,11 +7629,6 @@ 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 "Duplicate Animation"
msgstr ""
@@ -7681,10 +7771,6 @@ msgid "Pin AnimationPlayer"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Create New Animation"
-msgstr ""
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Name:"
msgstr ""
@@ -9734,6 +9820,7 @@ msgid "Points"
msgstr ""
#: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp
+#: scene/resources/navigation_mesh.cpp
msgid "Polygons"
msgstr ""
@@ -11088,7 +11175,7 @@ msgid "Invalid geometry, can't replace by mesh."
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
-msgid "Convert to Mesh2D"
+msgid "Convert to MeshInstance2D"
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
@@ -12056,8 +12143,7 @@ msgid "Select the previous shape, subtile, or Tile."
msgstr ""
#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp
-#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp
-#: scene/resources/texture.cpp
+#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp
msgid "Region"
msgstr ""
@@ -13482,31 +13568,10 @@ 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 "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 "Export Path"
msgstr ""
@@ -13639,6 +13704,10 @@ msgid "Export templates for this platform are missing:"
msgstr ""
#: editor/project_export.cpp
+msgid "Project Export"
+msgstr ""
+
+#: editor/project_export.cpp
msgid "Manage Export Templates"
msgstr ""
@@ -15897,7 +15966,7 @@ msgstr ""
#: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp
#: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp
-#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp
+#: scene/3d/collision_polygon.cpp
msgid "Polygon"
msgstr ""
@@ -16465,7 +16534,6 @@ msgid "Use In Baked Light"
msgstr ""
#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
-#: scene/resources/navigation_mesh.cpp
msgid "Cell"
msgstr ""
@@ -16494,6 +16562,19 @@ msgstr "Nód Cumaisc2"
msgid "Mask"
msgstr ""
+#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
+#, fuzzy
+msgid "Bake Navigation"
+msgstr "Nód Beochana"
+
+#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp
+#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp
+#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp
+#: scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Navigation Layers"
+msgstr "Nód Beochana"
+
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Plane"
msgstr ""
@@ -17936,10 +18017,6 @@ 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."
@@ -18043,12 +18120,16 @@ msgstr ""
msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version."
msgstr ""
+#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Code Signing"
+msgstr "Nód Measc"
+
#: 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."
+"'apksigner' could not be found. Please check that the command is available "
+"in the Android SDK build-tools directory. The resulting %s is unsigned."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18064,6 +18145,10 @@ msgid "Could not find keystore, unable to export."
msgstr ""
#: platform/android/export/export_plugin.cpp
+msgid "Could not start apksigner executable."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
@@ -18092,7 +18177,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Unsupported export format!\n"
+msgid "Unsupported export format!"
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18103,19 +18188,17 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Android build version mismatch:\n"
-" Template installed: %s\n"
-" Godot Version: %s\n"
+"Android build version mismatch: Template installed: %s, Godot version: %s. "
"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"
+"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"
+msgid "Could not export project files to gradle project."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18128,7 +18211,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Building of Android project failed, check output for the error.\n"
+"Building of Android project failed, check output for the error. "
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
@@ -18144,7 +18227,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
#, fuzzy
-msgid "Package not found: %s"
+msgid "Package not found: \"%s\"."
msgstr "Ãbhar:"
#: platform/android/export/export_plugin.cpp
@@ -18152,15 +18235,12 @@ msgid "Creating APK..."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid ""
-"Could not find template APK to export:\n"
-"%s"
+msgid "Could not find template APK to export: \"%s\"."
msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Missing libraries in the export template for the selected architectures: "
-"%s.\n"
+"Missing libraries in the export template for the selected architectures: %s. "
"Please build a template with all required libraries, or uncheck the missing "
"architectures in the export preset."
msgstr ""
@@ -18170,7 +18250,7 @@ msgid "Adding files..."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Could not export project files"
+msgid "Could not export project files."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18401,6 +18481,15 @@ msgstr "Cruthaigh"
msgid "Custom BG Color"
msgstr "Cruthaigh"
+#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
+#: platform/osx/export/export.cpp
+msgid "Prepare Templates"
+msgstr ""
+
+#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
+msgid "Export template not found."
+msgstr ""
+
#: platform/iphone/export/export.cpp
msgid "App Store Team ID not specified - cannot configure the project."
msgstr ""
@@ -18422,19 +18511,28 @@ msgid "Run exported HTML in the system's default browser."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not open template for export:"
+msgid "Could not open template for export: \"%s\"."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Invalid export template:"
+msgid "Invalid export template: \"%s\"."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not write file:"
+msgid "Could not write file: \"%s\"."
msgstr ""
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Icon Creation"
+msgstr "Ãbhar:"
+
#: platform/javascript/export/export.cpp
-msgid "Could not read file:"
+msgid "Could not read file: \"%s\"."
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "PWA"
msgstr ""
#: platform/javascript/export/export.cpp
@@ -18508,15 +18606,15 @@ msgid "Icon 512 X 512"
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not read HTML shell:"
+msgid "Could not read HTML shell: \"%s\"."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not create HTTP server directory:"
+msgid "Could not create HTTP server directory: %s."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Error starting HTTP server:"
+msgid "Error starting HTTP server: %d."
msgstr ""
#: platform/javascript/export/export.cpp
@@ -18794,9 +18892,26 @@ msgid "Apple Team ID"
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Could not open icon file \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Could not start xcrun executable."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization failed."
+msgstr "CrannBeochan"
+
+#: platform/osx/export/export.cpp
+msgid "Notarization request UUID: \"%s\""
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid ""
-"Note: The notarization process generally takes less than an hour. When the "
-"process is completed, you'll receive an email."
+"The notarization process generally takes less than an hour. When the process "
+"is completed, you'll receive an email."
msgstr ""
#: platform/osx/export/export.cpp
@@ -18812,15 +18927,67 @@ msgid ""
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign failed with error \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign require regex module."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Could not start codesign executable, make sure Xcode command line tools are "
+"installed."
+msgstr ""
+
+#: platform/osx/export/export.cpp platform/windows/export/export.cpp
msgid "No identity found."
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Cannot sign file %s."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Relative symlinks are not supported, exported \"%s\" might be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "DMG Creation"
+msgstr "Cuntas:"
+
+#: platform/osx/export/export.cpp
+msgid "Could not start hdiutil executable."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed - file exists."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed."
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid "Creating app bundle"
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Could not find template app to export:"
+msgid "Could not find template app to export: \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Invalid export format."
msgstr ""
#: platform/osx/export/export.cpp
@@ -18831,7 +18998,7 @@ msgstr ""
#: platform/osx/export/export.cpp
msgid ""
-"Requested template binary '%s' not found. It might be missing from your "
+"Requested template binary \"%s\" not found. It might be missing from your "
"template archive."
msgstr ""
@@ -18872,6 +19039,15 @@ msgid "Sending archive for notarization"
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "ZIP Creation"
+msgstr "CrannBeochan"
+
+#: platform/osx/export/export.cpp
+msgid "Could not open file to read from path \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr ""
@@ -19169,6 +19345,10 @@ msgid "Debug Algorithm"
msgstr ""
#: platform/windows/export/export.cpp
+msgid "Failed to rename temporary file \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
msgid "Identity Type"
msgstr ""
@@ -19211,6 +19391,62 @@ msgid "Trademarks"
msgstr ""
#: platform/windows/export/export.cpp
+msgid "Resources Modification"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find rcedit executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find wine executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start rcedit executable, configure rcedit path in the Editor "
+"Settings (Export > Windows > Rcedit)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"rcedit failed to modify executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find signtool executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find osslsigncode executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Invalid identity type."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Invalid timestamp server."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start signtool executable, configure signtool path in the Editor "
+"Settings (Export > Windows > Signtool)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Signtool failed to sign executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Failed to remove temporary file \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
msgid ""
"The rcedit tool must be configured in the Editor Settings (Export > Windows "
"> Rcedit) to change the icon or app information data."
@@ -19229,6 +19465,22 @@ msgid "Invalid product version:"
msgstr ""
#: platform/windows/export/export.cpp
+msgid "Windows executables cannot be >= 4 GiB."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Failed to open executable file \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable file header corrupted."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable \"pck\" section not found."
+msgstr ""
+
+#: platform/windows/export/export.cpp
msgid "Windows"
msgstr ""
@@ -19244,6 +19496,10 @@ msgstr ""
msgid "Wine"
msgstr ""
+#: platform/x11/export/export.cpp
+msgid "32-bit executables cannot have embedded data >= 4 GiB."
+msgstr ""
+
#: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp
#: scene/resources/texture.cpp
msgid "Frames"
@@ -19355,7 +19611,8 @@ msgstr ""
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/3d/light.cpp scene/3d/reflection_probe.cpp
-#: scene/3d/visual_instance.cpp scene/resources/material.cpp
+#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp
+#: scene/resources/material.cpp
msgid "Max Distance"
msgstr ""
@@ -20074,6 +20331,17 @@ msgstr ""
msgid "Edge Connection Margin"
msgstr "Ãbhar:"
+#: scene/2d/navigation_2d.cpp
+msgid ""
+"'Navigation2D' node and 'Navigation2D.get_simple_path()' are deprecated and "
+"will be removed in a future version. Use 'Navigation2DServer.map_get_path()' "
+"instead."
+msgstr ""
+
+#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
+msgid "Path Desired Distance"
+msgstr ""
+
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
msgid "Target Desired Distance"
msgstr ""
@@ -20125,13 +20393,16 @@ msgid ""
msgstr ""
#: scene/2d/navigation_polygon.cpp
-msgid ""
-"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
-"node. It only provides navigation data."
+msgid "Navpoly"
msgstr ""
-#: scene/2d/navigation_polygon.cpp
-msgid "Navpoly"
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Enter Cost"
+msgstr "Nód Cumaisc2"
+
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+msgid "Travel Cost"
msgstr ""
#: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp
@@ -21192,6 +21463,13 @@ msgstr ""
msgid "Transform Normals"
msgstr ""
+#: scene/3d/navigation.cpp
+msgid ""
+"'Navigation' node and 'Navigation.get_simple_path()' are deprecated and will "
+"be removed in a future version. Use 'NavigationServer.map_get_path()' "
+"instead."
+msgstr ""
+
#: scene/3d/navigation.cpp scene/resources/curve.cpp
msgid "Up Vector"
msgstr ""
@@ -21213,12 +21491,6 @@ msgid ""
"The NavigationAgent can be used only under a Spatial inheriting parent node."
msgstr ""
-#: scene/3d/navigation_mesh_instance.cpp
-msgid ""
-"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
-"It only provides navigation data."
-msgstr ""
-
#: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp
msgid "NavMesh"
msgstr ""
@@ -23631,6 +23903,16 @@ msgid "3D Physics"
msgstr ""
#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "2D Navigation"
+msgstr "Nód Beochana"
+
+#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "3D Navigation"
+msgstr "Nód Beochana"
+
+#: scene/register_scene_types.cpp
msgid "Use hiDPI"
msgstr ""
@@ -24928,7 +25210,7 @@ msgstr "Athrú: "
msgid "Refraction"
msgstr "Cuntas:"
-#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp
+#: scene/resources/material.cpp
msgid "Detail"
msgstr ""
@@ -25001,8 +25283,14 @@ msgid "Visible Instance Count"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Sample Partition Type"
-msgstr ""
+#, fuzzy
+msgid "Sampling"
+msgstr "Scála:"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Partition Type"
+msgstr "Cuntas:"
#: scene/resources/navigation_mesh.cpp
msgid "Parsed Geometry Type"
@@ -25018,10 +25306,15 @@ msgid "Source Group Name"
msgstr "Acmhainn"
#: scene/resources/navigation_mesh.cpp
-msgid "Agent"
+msgid "Cells"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Agents"
+msgstr "Ãbhar:"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Max Climb"
msgstr ""
@@ -25030,11 +25323,16 @@ msgid "Max Slope"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Regions"
+msgstr "Cruthaigh"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Merge Size"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Edge"
+msgid "Edges"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -25046,6 +25344,11 @@ msgid "Verts Per Poly"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Details"
+msgstr "Scagairí..."
+
+#: scene/resources/navigation_mesh.cpp
msgid "Sample Distance"
msgstr ""
@@ -25062,7 +25365,15 @@ msgid "Ledge Spans"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Filter Walkable Low Height Spans"
+msgid "Walkable Low Height Spans"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
+msgid "Baking AABB"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
+msgid "Baking AABB Offset"
msgstr ""
#: scene/resources/occluder_shape.cpp
@@ -25434,6 +25745,11 @@ msgid "Scenario"
msgstr ""
#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Navigation Map"
+msgstr "Nód Beochana"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
msgid "Direct Space State"
msgstr ""
@@ -25449,6 +25765,26 @@ msgstr ""
msgid "Default Angular Damp"
msgstr ""
+#: scene/resources/world.cpp
+#, fuzzy
+msgid "Default Map Up"
+msgstr "Scrios ionchur"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Size"
+msgstr "Nód Cumaisc2"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Height"
+msgstr "Scrios ionchur"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Edge Connection Margin"
+msgstr "Ãbhar:"
+
#: scene/resources/world_2d.cpp
msgid "Canvas"
msgstr ""
diff --git a/editor/translations/gl.po b/editor/translations/gl.po
index de85fe0a68..27b15829fa 100644
--- a/editor/translations/gl.po
+++ b/editor/translations/gl.po
@@ -223,9 +223,10 @@ msgid "Data"
msgstr ""
#: core/io/file_access_network.cpp core/register_core_types.cpp
-#: editor/editor_settings.cpp main/main.cpp
+#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
#: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h
+#: scene/gui/file_dialog.cpp
#, fuzzy
msgid "Network"
msgstr "Analítica de Rendemento de Rede"
@@ -386,6 +387,16 @@ msgstr ""
msgid "Max Size (KB)"
msgstr ""
+#: core/os/input.cpp
+#, fuzzy
+msgid "Mouse Mode"
+msgstr "Mover Modo"
+
+#: core/os/input.cpp
+#, fuzzy
+msgid "Use Accumulated Input"
+msgstr "Eliminar Entrada"
+
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: servers/audio_server.cpp
msgid "Device"
@@ -587,7 +598,8 @@ msgstr "Descrición"
#: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
-#: main/main.cpp
+#: main/main.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp
msgid "Run"
msgstr "Executar"
@@ -674,6 +686,11 @@ msgid "Main Run Args"
msgstr ""
#: core/project_settings.cpp
+#, fuzzy
+msgid "Scene Naming"
+msgstr "Ruta da Escena:"
+
+#: core/project_settings.cpp
msgid "Search In File Extensions"
msgstr ""
@@ -681,19 +698,15 @@ msgstr ""
msgid "Script Templates Search Path"
msgstr ""
-#: core/project_settings.cpp editor/editor_node.cpp
-#: editor/plugins/version_control_editor_plugin.cpp
-msgid "Version Control"
-msgstr "Control de Versións"
-
#: core/project_settings.cpp
-msgid "Autoload On Startup"
-msgstr ""
+#, fuzzy
+msgid "Version Control Autoload On Startup"
+msgstr "Control de Versións"
#: core/project_settings.cpp
#, fuzzy
-msgid "Plugin Name"
-msgstr "Nome do Plugin:"
+msgid "Version Control Plugin Name"
+msgstr "Control de Versións"
#: core/project_settings.cpp scene/2d/collision_object_2d.cpp
#: scene/3d/collision_object.cpp scene/gui/control.cpp
@@ -810,7 +823,8 @@ msgid "Quality"
msgstr ""
#: core/project_settings.cpp scene/gui/file_dialog.cpp
-#: scene/main/scene_tree.cpp servers/visual_server.cpp
+#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp
+#: servers/visual_server.cpp
#, fuzzy
msgid "Filters"
msgstr "Filtros:"
@@ -2249,8 +2263,8 @@ msgid "Open"
msgstr "Abrir"
#: editor/dependency_editor.cpp
-msgid "Owners Of:"
-msgstr "Dono De:"
+msgid "Owners of: %s (Total: %d)"
+msgstr ""
#: editor/dependency_editor.cpp
#, fuzzy
@@ -2562,7 +2576,7 @@ msgid "Bus Options"
msgstr "Opcións de Bus"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/scene_tree_dock.cpp
+#: editor/project_export.cpp editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "Duplicar"
@@ -2822,6 +2836,25 @@ msgid "Choose"
msgstr "Elixir"
#: editor/editor_export.cpp
+msgid "Project export for platform:"
+msgstr ""
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Completed with errors."
+msgstr "Copiar Ruta do Nodo"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Completed successfully."
+msgstr "Paquete instalado correctamente!"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed."
+msgstr "Fracasado:"
+
+#: editor/editor_export.cpp
msgid "Storing File:"
msgstr "Almacenando Arquivo:"
@@ -2834,6 +2867,31 @@ msgid "Packing"
msgstr "Empaquetando"
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save PCK"
+msgstr "Gardar Como"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Cannot create file \"%s\"."
+msgstr "Non se puido crear cartafol."
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to export project files."
+msgstr "Non se puido iniciar subproceso!"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Can't open file to read from path \"%s\"."
+msgstr "Non se puido abrir o arquivo para escritura:"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save ZIP"
+msgstr "Gardar Como"
+
+#: editor/editor_export.cpp
msgid ""
"Target platform requires 'ETC' texture compression for GLES2. Enable 'Import "
"Etc' in Project Settings."
@@ -2954,11 +3012,31 @@ msgstr "Non se encontrou un modelo de depuración personalizado."
msgid "Custom release template not found."
msgstr "Non se encontrou un modelo release personalizado."
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Prepare Template"
+msgstr "Modelo:"
+
+#: editor/editor_export.cpp platform/osx/export/export.cpp
+msgid "The given export path doesn't exist."
+msgstr ""
+
#: editor/editor_export.cpp platform/javascript/export/export.cpp
-msgid "Template file not found:"
+#, fuzzy
+msgid "Template file not found: \"%s\"."
msgstr "Non se encontrou o arquivo do modelo:"
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to copy export template."
+msgstr "Fallou a carga do Recurso."
+
+#: editor/editor_export.cpp platform/windows/export/export.cpp
+#: platform/x11/export/export.cpp
+msgid "PCK Embedding"
+msgstr ""
+
+#: editor/editor_export.cpp
msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB."
msgstr "Na exportación de 32 bits o PCK integrado non pode ser maior de 4 GiB."
@@ -3133,9 +3211,9 @@ msgid "Import"
msgstr "Importar"
#: editor/editor_feature_profile.cpp editor/project_export.cpp
-#: platform/android/export/export.cpp platform/javascript/export/export.cpp
-#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
-#: platform/windows/export/export.cpp
+#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#: platform/uwp/export/export.cpp platform/windows/export/export.cpp
msgid "Export"
msgstr "Exportación"
@@ -4310,15 +4388,6 @@ msgid ""
"Unable to write to file '%s', file in use, locked or lacking permissions."
msgstr ""
-#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
-msgid "Scene"
-msgstr "Escena"
-
-#: editor/editor_node.cpp
-#, fuzzy
-msgid "Scene Naming"
-msgstr "Ruta da Escena:"
-
#: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp
#: servers/arvr/arvr_interface.cpp
msgid "Interface"
@@ -4444,6 +4513,10 @@ msgid "Default Color Picker Mode"
msgstr ""
#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
+msgid "Version Control"
+msgstr "Control de Versións"
+
+#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
#, fuzzy
msgid "Username"
msgstr "Renomear"
@@ -4472,6 +4545,10 @@ msgstr "Act./Desact. modo sen distraccións."
msgid "Add a new scene."
msgstr "Engadir unha nova escena."
+#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
+msgid "Scene"
+msgstr "Escena"
+
#: editor/editor_node.cpp
msgid "Go to previously opened scene."
msgstr "Ir á escena aberta previamente."
@@ -5253,6 +5330,11 @@ msgstr ""
"Engade uns axustes de exportación executables, ou define algún xa existente "
"como executable."
+#: editor/editor_run_native.cpp
+#, fuzzy
+msgid "Project Run"
+msgstr "Proxecto"
+
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
msgstr "Escribe a túa lóxica no método '_run()'."
@@ -5532,7 +5614,9 @@ msgid "Draw Spaces"
msgstr "Chamadas"
#: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp
-#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp
+#: scene/main/scene_tree.cpp scene/resources/world.cpp
+#: scene/resources/world_2d.cpp
msgid "Navigation"
msgstr "Navegación"
@@ -7018,7 +7102,7 @@ msgstr ""
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp
-#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp
+#: scene/gui/control.cpp
#, fuzzy
msgid "Filter"
msgstr "Filtros:"
@@ -7314,6 +7398,18 @@ msgid "Saving..."
msgstr "Gardando..."
#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used as a normal map in 3D. Enabling red-green "
+"texture compression to reduce memory usage (blue channel is discarded)."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap "
+"generation and VRAM texture compression."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
msgid "2D, Detect 3D"
msgstr ""
@@ -7995,11 +8091,20 @@ msgid "New Anim"
msgstr "Nova Animación"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+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 "Rename Animation"
+msgstr "Renomear Animación"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Delete Animation?"
msgstr "Eliminar Animación?"
@@ -8017,11 +8122,6 @@ msgid "Animation name already exists!"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-#: editor/plugins/sprite_frames_editor_plugin.cpp
-msgid "Rename Animation"
-msgstr "Renomear Animación"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate Animation"
msgstr "Duplicar Animación"
@@ -8165,10 +8265,6 @@ msgid "Pin AnimationPlayer"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Create New Animation"
-msgstr ""
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Name:"
msgstr "Nome da Animación:"
@@ -10281,6 +10377,7 @@ msgid "Points"
msgstr "Puntos"
#: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp
+#: scene/resources/navigation_mesh.cpp
msgid "Polygons"
msgstr "Polígonos"
@@ -11687,8 +11784,9 @@ msgid "Invalid geometry, can't replace by mesh."
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
-msgid "Convert to Mesh2D"
-msgstr ""
+#, fuzzy
+msgid "Convert to MeshInstance2D"
+msgstr "Converter a CPUParticles2D"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Invalid geometry, can't create polygon."
@@ -12728,8 +12826,7 @@ msgid "Select the previous shape, subtile, or Tile."
msgstr ""
#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp
-#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp
-#: scene/resources/texture.cpp
+#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp
msgid "Region"
msgstr "Rexión"
@@ -14222,33 +14319,10 @@ msgid "Delete preset '%s'?"
msgstr "Eliminar axustes de exportación '%s'?"
#: 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 ""
-"Fallou a exportación do proxecto á plataforma '%s'.\n"
-"Esto pode deberse a un problema cos axustes de exportación."
-
-#: 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 "Export Path"
msgstr ""
@@ -14392,6 +14466,11 @@ msgid "Export templates for this platform are missing:"
msgstr ""
#: editor/project_export.cpp
+#, fuzzy
+msgid "Project Export"
+msgstr "Fundadores do Proxecto"
+
+#: editor/project_export.cpp
msgid "Manage Export Templates"
msgstr ""
@@ -16751,7 +16830,7 @@ msgstr ""
#: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp
#: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp
-#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp
+#: scene/3d/collision_polygon.cpp
#, fuzzy
msgid "Polygon"
msgstr "Polígonos"
@@ -17367,7 +17446,6 @@ msgid "Use In Baked Light"
msgstr ""
#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
-#: scene/resources/navigation_mesh.cpp
msgid "Cell"
msgstr ""
@@ -17397,6 +17475,19 @@ msgstr "Centro"
msgid "Mask"
msgstr ""
+#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
+#, fuzzy
+msgid "Bake Navigation"
+msgstr "Navegación"
+
+#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp
+#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp
+#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp
+#: scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Navigation Layers"
+msgstr "Navegación"
+
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Plane"
msgstr ""
@@ -18929,10 +19020,6 @@ msgid "Could not execute on device."
msgstr "Non se puido crear cartafol."
#: 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."
@@ -19042,12 +19129,16 @@ msgstr ""
msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version."
msgstr ""
+#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Code Signing"
+msgstr "Sinal"
+
#: 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."
+"'apksigner' could not be found. Please check that the command is available "
+"in the Android SDK build-tools directory. The resulting %s is unsigned."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -19066,6 +19157,11 @@ msgid "Could not find keystore, unable to export."
msgstr ""
#: platform/android/export/export_plugin.cpp
+#, fuzzy
+msgid "Could not start apksigner executable."
+msgstr "Non se puido iniciar subproceso!"
+
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
@@ -19095,7 +19191,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Unsupported export format!\n"
+msgid "Unsupported export format!"
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -19106,20 +19202,18 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Android build version mismatch:\n"
-" Template installed: %s\n"
-" Godot Version: %s\n"
+"Android build version mismatch: Template installed: %s, Godot version: %s. "
"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"
+"Unable to overwrite res://android/build/res/*.xml files with project name."
msgstr ""
#: platform/android/export/export_plugin.cpp
#, fuzzy
-msgid "Could not export project files to gradle project\n"
+msgid "Could not export project files to gradle project."
msgstr "Non se pudo editar o arquivo 'project.godot' na ruta do proxecto."
#: platform/android/export/export_plugin.cpp
@@ -19131,8 +19225,9 @@ msgid "Building Android Project (gradle)"
msgstr "Construir Proxecto Android (gradle)"
#: platform/android/export/export_plugin.cpp
+#, fuzzy
msgid ""
-"Building of Android project failed, check output for the error.\n"
+"Building of Android project failed, check output for the error. "
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
"A creación do proxecto para Android fallou; comproba a saída para encontrar "
@@ -19152,7 +19247,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
#, fuzzy
-msgid "Package not found: %s"
+msgid "Package not found: \"%s\"."
msgstr "Contenido do Paquete:"
#: platform/android/export/export_plugin.cpp
@@ -19161,15 +19256,13 @@ msgid "Creating APK..."
msgstr "Conectando..."
#: platform/android/export/export_plugin.cpp
-msgid ""
-"Could not find template APK to export:\n"
-"%s"
-msgstr ""
+#, fuzzy
+msgid "Could not find template APK to export: \"%s\"."
+msgstr "Non se puido iniciar subproceso!"
#: platform/android/export/export_plugin.cpp
msgid ""
-"Missing libraries in the export template for the selected architectures: "
-"%s.\n"
+"Missing libraries in the export template for the selected architectures: %s. "
"Please build a template with all required libraries, or uncheck the missing "
"architectures in the export preset."
msgstr ""
@@ -19181,7 +19274,7 @@ msgstr "Engadindo %s..."
#: platform/android/export/export_plugin.cpp
#, fuzzy
-msgid "Could not export project files"
+msgid "Could not export project files."
msgstr "Non se puido iniciar subproceso!"
#: platform/android/export/export_plugin.cpp
@@ -19423,6 +19516,17 @@ msgstr "Cortar Nodos"
msgid "Custom BG Color"
msgstr "Cortar Nodos"
+#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Prepare Templates"
+msgstr "Modelo:"
+
+#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Export template not found."
+msgstr "Non se encontrou un modelo release personalizado."
+
#: platform/iphone/export/export.cpp
msgid "App Store Team ID not specified - cannot configure the project."
msgstr ""
@@ -19445,23 +19549,35 @@ msgid "Run exported HTML in the system's default browser."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not open template for export:"
-msgstr ""
+#, fuzzy
+msgid "Could not open template for export: \"%s\"."
+msgstr "Non se puido crear cartafol."
#: platform/javascript/export/export.cpp
-msgid "Invalid export template:"
-msgstr ""
+#, fuzzy
+msgid "Invalid export template: \"%s\"."
+msgstr "Extensión inválida."
#: platform/javascript/export/export.cpp
-msgid "Could not write file:"
-msgstr ""
+#, fuzzy
+msgid "Could not write file: \"%s\"."
+msgstr "Non se puido crear cartafol."
+
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Icon Creation"
+msgstr "Contidos:"
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not read file:"
+msgid "Could not read file: \"%s\"."
msgstr "Non se puido crear cartafol."
#: platform/javascript/export/export.cpp
+msgid "PWA"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
#, fuzzy
msgid "Variant"
msgstr "Escalar (Razón):"
@@ -19537,17 +19653,17 @@ msgstr ""
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not read HTML shell:"
+msgid "Could not read HTML shell: \"%s\"."
msgstr "Non se puido crear cartafol."
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not create HTTP server directory:"
+msgid "Could not create HTTP server directory: %s."
msgstr "Non se puido crear cartafol."
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Error starting HTTP server:"
+msgid "Error starting HTTP server: %d."
msgstr "Erro ao gardar TileSet!"
#: platform/javascript/export/export.cpp
@@ -19845,9 +19961,28 @@ msgid "Apple Team ID"
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open icon file \"%s\"."
+msgstr "Non se puido iniciar subproceso!"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start xcrun executable."
+msgstr "Non se puido iniciar subproceso!"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization failed."
+msgstr "Linguaxe"
+
+#: platform/osx/export/export.cpp
+msgid "Notarization request UUID: \"%s\""
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid ""
-"Note: The notarization process generally takes less than an hour. When the "
-"process is completed, you'll receive an email."
+"The notarization process generally takes less than an hour. When the process "
+"is completed, you'll receive an email."
msgstr ""
#: platform/osx/export/export.cpp
@@ -19863,18 +19998,74 @@ msgid ""
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign failed with error \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign require regex module."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Could not start codesign executable, make sure Xcode command line tools are "
+"installed."
+msgstr ""
+
+#: platform/osx/export/export.cpp platform/windows/export/export.cpp
#, fuzzy
msgid "No identity found."
msgstr "Non se atopou ningún sub-recurso."
#: platform/osx/export/export.cpp
#, fuzzy
+msgid "Cannot sign file %s."
+msgstr "Erro gardando o arquivo: %s"
+
+#: platform/osx/export/export.cpp
+msgid "Relative symlinks are not supported, exported \"%s\" might be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "DMG Creation"
+msgstr "Direccións"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start hdiutil executable."
+msgstr "Non se puido iniciar subproceso!"
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed - file exists."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
msgid "Creating app bundle"
msgstr "Creando Miniatura"
#: platform/osx/export/export.cpp
-msgid "Could not find template app to export:"
-msgstr ""
+#, fuzzy
+msgid "Could not find template app to export: \"%s\"."
+msgstr "Non se puido iniciar subproceso!"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid export format."
+msgstr "Ruta base inválida."
#: platform/osx/export/export.cpp
msgid ""
@@ -19884,7 +20075,7 @@ msgstr ""
#: platform/osx/export/export.cpp
msgid ""
-"Requested template binary '%s' not found. It might be missing from your "
+"Requested template binary \"%s\" not found. It might be missing from your "
"template archive."
msgstr ""
@@ -19925,6 +20116,16 @@ msgid "Sending archive for notarization"
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "ZIP Creation"
+msgstr "Proxecto"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open file to read from path \"%s\"."
+msgstr "Non se pudo editar o arquivo 'project.godot' na ruta do proxecto."
+
+#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr ""
@@ -20234,6 +20435,11 @@ msgid "Debug Algorithm"
msgstr "Depurador"
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to rename temporary file \"%s\"."
+msgstr "Non se pode eliminar o arquivo temporal:"
+
+#: platform/windows/export/export.cpp
msgid "Identity Type"
msgstr ""
@@ -20281,6 +20487,66 @@ msgid "Trademarks"
msgstr ""
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Resources Modification"
+msgstr "Pegar Animación"
+
+#: platform/windows/export/export.cpp
+msgid "Could not find rcedit executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find wine executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start rcedit executable, configure rcedit path in the Editor "
+"Settings (Export > Windows > Rcedit)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"rcedit failed to modify executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find signtool executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find osslsigncode executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid identity type."
+msgstr "Argumentos inválidos para construir '%s'"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid timestamp server."
+msgstr "Nome inválido."
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start signtool executable, configure signtool path in the Editor "
+"Settings (Export > Windows > Signtool)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Signtool failed to sign executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to remove temporary file \"%s\"."
+msgstr "Non se pode eliminar o arquivo temporal:"
+
+#: platform/windows/export/export.cpp
msgid ""
"The rcedit tool must be configured in the Editor Settings (Export > Windows "
"> Rcedit) to change the icon or app information data."
@@ -20302,6 +20568,23 @@ msgid "Invalid product version:"
msgstr "Nome de Proxecto Inválido."
#: platform/windows/export/export.cpp
+msgid "Windows executables cannot be >= 4 GiB."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+#, fuzzy
+msgid "Failed to open executable file \"%s\"."
+msgstr "Extensión inválida."
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable file header corrupted."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable \"pck\" section not found."
+msgstr ""
+
+#: platform/windows/export/export.cpp
#, fuzzy
msgid "Windows"
msgstr "Nova Xanela"
@@ -20318,6 +20601,10 @@ msgstr ""
msgid "Wine"
msgstr ""
+#: platform/x11/export/export.cpp
+msgid "32-bit executables cannot have embedded data >= 4 GiB."
+msgstr ""
+
#: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp
#: scene/resources/texture.cpp
#, fuzzy
@@ -20443,7 +20730,8 @@ msgstr ""
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/3d/light.cpp scene/3d/reflection_probe.cpp
-#: scene/3d/visual_instance.cpp scene/resources/material.cpp
+#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp
+#: scene/resources/material.cpp
#, fuzzy
msgid "Max Distance"
msgstr "Instanciar"
@@ -21227,6 +21515,18 @@ msgstr ""
msgid "Edge Connection Margin"
msgstr "Editar Conexión:"
+#: scene/2d/navigation_2d.cpp
+msgid ""
+"'Navigation2D' node and 'Navigation2D.get_simple_path()' are deprecated and "
+"will be removed in a future version. Use 'Navigation2DServer.map_get_path()' "
+"instead."
+msgstr ""
+
+#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
+#, fuzzy
+msgid "Path Desired Distance"
+msgstr "Elexir unha Escena Principal"
+
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
msgid "Target Desired Distance"
msgstr ""
@@ -21281,15 +21581,19 @@ msgid ""
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/navigation_polygon.cpp
msgid "Navpoly"
msgstr ""
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Enter Cost"
+msgstr "Centro Abaixo"
+
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Travel Cost"
+msgstr "Viaxe"
+
#: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp
#: scene/main/canvas_layer.cpp
#, fuzzy
@@ -22460,6 +22764,13 @@ msgstr ""
msgid "Transform Normals"
msgstr "Transformación"
+#: scene/3d/navigation.cpp
+msgid ""
+"'Navigation' node and 'Navigation.get_simple_path()' are deprecated and will "
+"be removed in a future version. Use 'NavigationServer.map_get_path()' "
+"instead."
+msgstr ""
+
#: scene/3d/navigation.cpp scene/resources/curve.cpp
#, fuzzy
msgid "Up Vector"
@@ -22484,12 +22795,6 @@ msgid ""
"The NavigationAgent can be used only under a Spatial inheriting parent node."
msgstr ""
-#: scene/3d/navigation_mesh_instance.cpp
-msgid ""
-"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
-"It only provides navigation data."
-msgstr ""
-
#: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp
#, fuzzy
msgid "NavMesh"
@@ -25155,6 +25460,16 @@ msgid "3D Physics"
msgstr "Fotograma de Física %"
#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "2D Navigation"
+msgstr "Navegación"
+
+#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "3D Navigation"
+msgstr "Navegación"
+
+#: scene/register_scene_types.cpp
msgid "Use hiDPI"
msgstr ""
@@ -26562,7 +26877,7 @@ msgstr "Transición: "
msgid "Refraction"
msgstr "Escalar (Razón):"
-#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp
+#: scene/resources/material.cpp
msgid "Detail"
msgstr ""
@@ -26645,7 +26960,12 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
-msgid "Sample Partition Type"
+msgid "Sampling"
+msgstr "Escalado: "
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Partition Type"
msgstr "Cambiar Tipo Base:"
#: scene/resources/navigation_mesh.cpp
@@ -26662,10 +26982,15 @@ msgid "Source Group Name"
msgstr "Fonte"
#: scene/resources/navigation_mesh.cpp
-msgid "Agent"
+msgid "Cells"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Agents"
+msgstr "Fragment"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Max Climb"
msgstr ""
@@ -26674,11 +26999,16 @@ msgid "Max Slope"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Regions"
+msgstr "Rexión"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Merge Size"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Edge"
+msgid "Edges"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -26691,6 +27021,11 @@ msgid "Verts Per Poly"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Details"
+msgstr "Cargar Valores por Defecto"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Sample Distance"
msgstr ""
@@ -26707,9 +27042,18 @@ msgid "Ledge Spans"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Filter Walkable Low Height Spans"
+msgid "Walkable Low Height Spans"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
+msgid "Baking AABB"
msgstr ""
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB Offset"
+msgstr "Offset:"
+
#: scene/resources/occluder_shape.cpp
msgid "Spheres"
msgstr ""
@@ -27118,6 +27462,11 @@ msgid "Scenario"
msgstr "Escena"
#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Navigation Map"
+msgstr "Navegación"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
msgid "Direct Space State"
msgstr ""
@@ -27135,6 +27484,26 @@ msgstr "Por Defecto"
msgid "Default Angular Damp"
msgstr ""
+#: scene/resources/world.cpp
+#, fuzzy
+msgid "Default Map Up"
+msgstr "Por Defecto"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Size"
+msgstr "Vista Previa Cinemática"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Height"
+msgstr "Probas"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Edge Connection Margin"
+msgstr "Editar Conexión:"
+
#: scene/resources/world_2d.cpp
msgid "Canvas"
msgstr ""
diff --git a/editor/translations/he.po b/editor/translations/he.po
index e1019a21f7..22cf33ba52 100644
--- a/editor/translations/he.po
+++ b/editor/translations/he.po
@@ -227,9 +227,10 @@ msgid "Data"
msgstr "מידע"
#: core/io/file_access_network.cpp core/register_core_types.cpp
-#: editor/editor_settings.cpp main/main.cpp
+#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
#: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h
+#: scene/gui/file_dialog.cpp
msgid "Network"
msgstr "רשת"
@@ -385,6 +386,16 @@ msgstr "תור הור×ות"
msgid "Max Size (KB)"
msgstr "גודל מקסימלי (KB)"
+#: core/os/input.cpp
+#, fuzzy
+msgid "Mouse Mode"
+msgstr "מצב שינוי קנה מידה (R)"
+
+#: core/os/input.cpp
+#, fuzzy
+msgid "Use Accumulated Input"
+msgstr "מחיקת קלט"
+
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: servers/audio_server.cpp
msgid "Device"
@@ -576,7 +587,8 @@ msgstr "תי×ור"
#: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
-#: main/main.cpp
+#: main/main.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp
msgid "Run"
msgstr "הרצה"
@@ -663,6 +675,11 @@ msgid "Main Run Args"
msgstr ""
#: core/project_settings.cpp
+#, fuzzy
+msgid "Scene Naming"
+msgstr "נתיב סצנות:"
+
+#: core/project_settings.cpp
msgid "Search In File Extensions"
msgstr ""
@@ -670,19 +687,15 @@ msgstr ""
msgid "Script Templates Search Path"
msgstr ""
-#: core/project_settings.cpp editor/editor_node.cpp
-#: editor/plugins/version_control_editor_plugin.cpp
-msgid "Version Control"
-msgstr "בקרת גירס×ות"
-
#: core/project_settings.cpp
-msgid "Autoload On Startup"
-msgstr ""
+#, fuzzy
+msgid "Version Control Autoload On Startup"
+msgstr "בקרת גירס×ות"
#: core/project_settings.cpp
#, fuzzy
-msgid "Plugin Name"
-msgstr "×©× ×”×ž×¤×¨×§:"
+msgid "Version Control Plugin Name"
+msgstr "בקרת גירס×ות"
#: core/project_settings.cpp scene/2d/collision_object_2d.cpp
#: scene/3d/collision_object.cpp scene/gui/control.cpp
@@ -796,7 +809,8 @@ msgid "Quality"
msgstr "×יכות"
#: core/project_settings.cpp scene/gui/file_dialog.cpp
-#: scene/main/scene_tree.cpp servers/visual_server.cpp
+#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp
+#: servers/visual_server.cpp
msgid "Filters"
msgstr "מסנני×"
@@ -2220,8 +2234,8 @@ msgid "Open"
msgstr "פתיחה"
#: editor/dependency_editor.cpp
-msgid "Owners Of:"
-msgstr "×‘×¢×œ×™× ×©×œ:"
+msgid "Owners of: %s (Total: %d)"
+msgstr ""
#: editor/dependency_editor.cpp
msgid ""
@@ -2520,7 +2534,7 @@ msgid "Bus Options"
msgstr "×פשרויות ×פיק"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/scene_tree_dock.cpp
+#: editor/project_export.cpp editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "שכפול"
@@ -2778,6 +2792,25 @@ msgid "Choose"
msgstr "בחירה"
#: editor/editor_export.cpp
+msgid "Project export for platform:"
+msgstr ""
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Completed with errors."
+msgstr "העתקת נתיב המפרק"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Completed successfully."
+msgstr "החבילה הותקנה בהצלחה!"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed."
+msgstr "נכשל:"
+
+#: editor/editor_export.cpp
msgid "Storing File:"
msgstr "קובץ ×חסון:"
@@ -2790,6 +2823,31 @@ msgid "Packing"
msgstr "×ורז"
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save PCK"
+msgstr "שמירה בש×"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Cannot create file \"%s\"."
+msgstr "×œ× × ×™×ª×Ÿ ליצור תיקייה."
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to export project files."
+msgstr "×œ× × ×™×ª×Ÿ לכתוב קובץ:"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Can't open file to read from path \"%s\"."
+msgstr "×œ× × ×™×ª×Ÿ לפתוח קובץ לכתיבה:"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save ZIP"
+msgstr "שמירה בש×"
+
+#: editor/editor_export.cpp
msgid ""
"Target platform requires 'ETC' texture compression for GLES2. Enable 'Import "
"Etc' in Project Settings."
@@ -2905,11 +2963,32 @@ msgstr "תבנית ניפוי שגי×ות מות×מת ×ישית ×œ× × ×ž×¦×
msgid "Custom release template not found."
msgstr "תבנית שחרור מות×מת-×ישית ×œ× × ×ž×¦××”."
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Prepare Template"
+msgstr "ניהול תבניות"
+
+#: editor/editor_export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "The given export path doesn't exist."
+msgstr "הקובץ ×œ× ×§×™×™×."
+
#: editor/editor_export.cpp platform/javascript/export/export.cpp
-msgid "Template file not found:"
+#, fuzzy
+msgid "Template file not found: \"%s\"."
msgstr "קובץ התבנית ×œ× × ×ž×¦×:"
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to copy export template."
+msgstr "תבנית ×™×¦×•× ×©×’×•×™×”:"
+
+#: editor/editor_export.cpp platform/windows/export/export.cpp
+#: platform/x11/export/export.cpp
+msgid "PCK Embedding"
+msgstr ""
+
+#: editor/editor_export.cpp
msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB."
msgstr "×‘×™×™×¦×•× ×רכיטקטורת 32 ביט, ×” PCK המובנה ×œ× ×™×›×•×œ לחרוג מעבר ל 4 GiB."
@@ -3078,9 +3157,9 @@ msgid "Import"
msgstr "ייבו×"
#: editor/editor_feature_profile.cpp editor/project_export.cpp
-#: platform/android/export/export.cpp platform/javascript/export/export.cpp
-#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
-#: platform/windows/export/export.cpp
+#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#: platform/uwp/export/export.cpp platform/windows/export/export.cpp
msgid "Export"
msgstr "ייצו×"
@@ -4221,15 +4300,6 @@ msgid ""
"Unable to write to file '%s', file in use, locked or lacking permissions."
msgstr ""
-#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
-msgid "Scene"
-msgstr "סצנה"
-
-#: editor/editor_node.cpp
-#, fuzzy
-msgid "Scene Naming"
-msgstr "נתיב סצנות:"
-
#: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp
#: servers/arvr/arvr_interface.cpp
#, fuzzy
@@ -4357,6 +4427,10 @@ msgid "Default Color Picker Mode"
msgstr ""
#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
+msgid "Version Control"
+msgstr "בקרת גירס×ות"
+
+#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
#, fuzzy
msgid "Username"
msgstr "שינוי ש×"
@@ -4385,6 +4459,10 @@ msgstr "הפעל/בטל מצב ×œ×œ× ×”×¡×—×•×ª דעת."
msgid "Add a new scene."
msgstr "הוספת סצנה חדשה."
+#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
+msgid "Scene"
+msgstr "סצנה"
+
#: editor/editor_node.cpp
msgid "Go to previously opened scene."
msgstr "מעבר לסצנה הקודמת."
@@ -5164,6 +5242,11 @@ msgid ""
"as runnable."
msgstr ""
+#: editor/editor_run_native.cpp
+#, fuzzy
+msgid "Project Run"
+msgstr "מיז×"
+
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
msgstr "ניתן לכתוב ×ת הלוגיקה שלך בשיטה ‎_run()‎."
@@ -5445,7 +5528,9 @@ msgid "Draw Spaces"
msgstr "קרי×ות"
#: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp
-#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp
+#: scene/main/scene_tree.cpp scene/resources/world.cpp
+#: scene/resources/world_2d.cpp
#, fuzzy
msgid "Navigation"
msgstr "עריכת מצולע"
@@ -6960,7 +7045,7 @@ msgstr ""
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp
-#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp
+#: scene/gui/control.cpp
#, fuzzy
msgid "Filter"
msgstr "מסנני×..."
@@ -7254,6 +7339,18 @@ msgid "Saving..."
msgstr "שמירה…"
#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used as a normal map in 3D. Enabling red-green "
+"texture compression to reduce memory usage (blue channel is discarded)."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap "
+"generation and VRAM texture compression."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
msgid "2D, Detect 3D"
msgstr ""
@@ -7962,11 +8059,20 @@ msgid "New Anim"
msgstr "הנפשה חדשה"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+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 "Rename Animation"
+msgstr "שינוי ×©× ×”× ×¤×©×”"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Delete Animation?"
msgstr "מחיקת ×נימציה?"
@@ -7984,11 +8090,6 @@ 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 "Duplicate Animation"
msgstr "שכפול הנפשה"
@@ -8132,10 +8233,6 @@ msgid "Pin AnimationPlayer"
msgstr "הצמדת AnimationPlayer"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Create New Animation"
-msgstr "יצירת הנפשה חדשה"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Name:"
msgstr "×©× ×”× ×¤×©×”:"
@@ -10288,6 +10385,7 @@ msgid "Points"
msgstr "הזזת נקודה"
#: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp
+#: scene/resources/navigation_mesh.cpp
#, fuzzy
msgid "Polygons"
msgstr "עריכת מצולע"
@@ -11732,7 +11830,7 @@ msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
#, fuzzy
-msgid "Convert to Mesh2D"
+msgid "Convert to MeshInstance2D"
msgstr "המרה ל×ותיות גדולות"
#: editor/plugins/sprite_editor_plugin.cpp
@@ -12799,8 +12897,7 @@ msgid "Select the previous shape, subtile, or Tile."
msgstr ""
#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp
-#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp
-#: scene/resources/texture.cpp
+#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp
#, fuzzy
msgid "Region"
msgstr "מצב גולמי"
@@ -14328,32 +14425,11 @@ 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
#, fuzzy
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
#, fuzzy
msgid "Export Path"
msgstr "×™×™×¦×•× ×ž×™×–×"
@@ -14495,6 +14571,11 @@ msgid "Export templates for this platform are missing:"
msgstr ""
#: editor/project_export.cpp
+#, fuzzy
+msgid "Project Export"
+msgstr "מקימי המיז×"
+
+#: editor/project_export.cpp
msgid "Manage Export Templates"
msgstr "ניהול תבניות ייצו×"
@@ -16865,7 +16946,7 @@ msgstr ""
#: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp
#: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp
-#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp
+#: scene/3d/collision_polygon.cpp
#, fuzzy
msgid "Polygon"
msgstr "עריכת מצולע"
@@ -17483,7 +17564,6 @@ msgid "Use In Baked Light"
msgstr "×פיית Lightmaps"
#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
-#: scene/resources/navigation_mesh.cpp
msgid "Cell"
msgstr ""
@@ -17513,6 +17593,19 @@ msgstr "×”×–×—×” משמ×ל"
msgid "Mask"
msgstr ""
+#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
+#, fuzzy
+msgid "Bake Navigation"
+msgstr "עריכת מצולע"
+
+#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp
+#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp
+#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp
+#: scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Navigation Layers"
+msgstr "עריכת מצולע"
+
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Plane"
msgstr "המישור הב×"
@@ -19068,10 +19161,6 @@ 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."
@@ -19183,12 +19272,16 @@ msgstr ""
msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version."
msgstr ""
+#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Code Signing"
+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."
+"'apksigner' could not be found. Please check that the command is available "
+"in the Android SDK build-tools directory. The resulting %s is unsigned."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -19208,6 +19301,11 @@ msgid "Could not find keystore, unable to export."
msgstr "×œ× × ×™×ª×Ÿ לפתוח תבנית לייצו×:"
#: platform/android/export/export_plugin.cpp
+#, fuzzy
+msgid "Could not start apksigner executable."
+msgstr "×œ× × ×™×ª×Ÿ להפעיל תהליך משנה!"
+
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
@@ -19238,7 +19336,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Unsupported export format!\n"
+msgid "Unsupported export format!"
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -19252,9 +19350,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid ""
-"Android build version mismatch:\n"
-" Template installed: %s\n"
-" Godot Version: %s\n"
+"Android build version mismatch: Template installed: %s, Godot version: %s. "
"Please reinstall Android build template from 'Project' menu."
msgstr ""
"חוסר הת×מה בגירסת ×נדרו×יד:\n"
@@ -19264,12 +19360,13 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Unable to overwrite res://android/build/res/*.xml files with project name"
+"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 ""
+#, fuzzy
+msgid "Could not export project files to gradle project."
+msgstr "×œ× × ×™×ª×Ÿ לכתוב קובץ:"
#: platform/android/export/export_plugin.cpp
#, fuzzy
@@ -19281,8 +19378,9 @@ msgid "Building Android Project (gradle)"
msgstr "בניית ×ž×™×–× ×נדרו×יד (gradle)"
#: platform/android/export/export_plugin.cpp
+#, fuzzy
msgid ""
-"Building of Android project failed, check output for the error.\n"
+"Building of Android project failed, check output for the error. "
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
"בניית ×ž×™×–× ×נדרו×יד נכשלה, ניתן לבדוק ×ת הפלט ל×יתור השגי××”.\n"
@@ -19300,7 +19398,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
#, fuzzy
-msgid "Package not found: %s"
+msgid "Package not found: \"%s\"."
msgstr "הנפשה ×œ× × ×ž×¦××”: '%s'"
#: platform/android/export/export_plugin.cpp
@@ -19310,15 +19408,12 @@ msgstr "יצירת קווי מת×ר..."
#: platform/android/export/export_plugin.cpp
#, fuzzy
-msgid ""
-"Could not find template APK to export:\n"
-"%s"
+msgid "Could not find template APK to export: \"%s\"."
msgstr "×œ× × ×™×ª×Ÿ לפתוח תבנית לייצו×:"
#: platform/android/export/export_plugin.cpp
msgid ""
-"Missing libraries in the export template for the selected architectures: "
-"%s.\n"
+"Missing libraries in the export template for the selected architectures: %s. "
"Please build a template with all required libraries, or uncheck the missing "
"architectures in the export preset."
msgstr ""
@@ -19330,7 +19425,7 @@ msgstr "×יתור…"
#: platform/android/export/export_plugin.cpp
#, fuzzy
-msgid "Could not export project files"
+msgid "Could not export project files."
msgstr "×œ× × ×™×ª×Ÿ לכתוב קובץ:"
#: platform/android/export/export_plugin.cpp
@@ -19572,6 +19667,17 @@ msgstr "גזירת מפרקי×"
msgid "Custom BG Color"
msgstr "גזירת מפרקי×"
+#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Prepare Templates"
+msgstr "ניהול תבניות"
+
+#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Export template not found."
+msgstr "תבנית שחרור מות×מת-×ישית ×œ× × ×ž×¦××”."
+
#: platform/iphone/export/export.cpp
msgid "App Store Team ID not specified - cannot configure the project."
msgstr "×œ× ×¦×•×™×Ÿ App Store Team ID - ×œ× × ×™×ª×Ÿ להגדיר ×ת המיז×."
@@ -19593,23 +19699,35 @@ msgid "Run exported HTML in the system's default browser."
msgstr "הפעלת ×”Ö¾HTML ×”×ž×™×•×¦× ×‘×“×¤×“×¤×Ÿ בררת המחדל של המערכת."
#: platform/javascript/export/export.cpp
-msgid "Could not open template for export:"
+#, fuzzy
+msgid "Could not open template for export: \"%s\"."
msgstr "×œ× × ×™×ª×Ÿ לפתוח תבנית לייצו×:"
#: platform/javascript/export/export.cpp
-msgid "Invalid export template:"
+#, fuzzy
+msgid "Invalid export template: \"%s\"."
msgstr "תבנית ×™×¦×•× ×©×’×•×™×”:"
#: platform/javascript/export/export.cpp
-msgid "Could not write file:"
+#, fuzzy
+msgid "Could not write file: \"%s\"."
msgstr "×œ× × ×™×ª×Ÿ לכתוב קובץ:"
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Icon Creation"
+msgstr "תוכן:"
+
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not read file:"
+msgid "Could not read file: \"%s\"."
msgstr "×œ× × ×™×ª×Ÿ לכתוב קובץ:"
#: platform/javascript/export/export.cpp
+msgid "PWA"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
#, fuzzy
msgid "Variant"
msgstr "מוני×:"
@@ -19685,17 +19803,17 @@ msgstr ""
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not read HTML shell:"
+msgid "Could not read HTML shell: \"%s\"."
msgstr "×œ× × ×™×ª×Ÿ ×œ×§×¨×•× ×ž×¢×˜×¤×ª HTML מות×מת:"
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not create HTTP server directory:"
+msgid "Could not create HTTP server directory: %s."
msgstr "×œ× × ×™×ª×Ÿ ליצור תיקייה."
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Error starting HTTP server:"
+msgid "Error starting HTTP server: %d."
msgstr "שגי××” בשמירת הסצנה."
#: platform/javascript/export/export.cpp
@@ -19993,9 +20111,28 @@ msgid "Apple Team ID"
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open icon file \"%s\"."
+msgstr "×œ× × ×™×ª×Ÿ לכתוב קובץ:"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start xcrun executable."
+msgstr "×œ× × ×™×ª×Ÿ להפעיל תהליך משנה!"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization failed."
+msgstr "עריכת מצולע"
+
+#: platform/osx/export/export.cpp
+msgid "Notarization request UUID: \"%s\""
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid ""
-"Note: The notarization process generally takes less than an hour. When the "
-"process is completed, you'll receive an email."
+"The notarization process generally takes less than an hour. When the process "
+"is completed, you'll receive an email."
msgstr ""
#: platform/osx/export/export.cpp
@@ -20011,21 +20148,76 @@ msgid ""
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign failed with error \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign require regex module."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Could not start codesign executable, make sure Xcode command line tools are "
+"installed."
+msgstr ""
+
+#: platform/osx/export/export.cpp platform/windows/export/export.cpp
#, fuzzy
msgid "No identity found."
msgstr "×œ× × ×ž×¦×!"
#: platform/osx/export/export.cpp
#, fuzzy
+msgid "Cannot sign file %s."
+msgstr "שגי××” בשמירת קובץ: %s"
+
+#: platform/osx/export/export.cpp
+msgid "Relative symlinks are not supported, exported \"%s\" might be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "DMG Creation"
+msgstr "כיווני×"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start hdiutil executable."
+msgstr "×œ× × ×™×ª×Ÿ להפעיל תהליך משנה!"
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed - file exists."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
msgid "Creating app bundle"
msgstr "יצירת תמונה ממוזערת"
#: platform/osx/export/export.cpp
#, fuzzy
-msgid "Could not find template app to export:"
+msgid "Could not find template app to export: \"%s\"."
msgstr "×œ× × ×™×ª×Ÿ לפתוח תבנית לייצו×:"
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid export format."
+msgstr "תבנית ×™×¦×•× ×©×’×•×™×”:"
+
+#: platform/osx/export/export.cpp
msgid ""
"Relative symlinks are not supported on this OS, the exported project might "
"be broken!"
@@ -20033,7 +20225,7 @@ msgstr ""
#: platform/osx/export/export.cpp
msgid ""
-"Requested template binary '%s' not found. It might be missing from your "
+"Requested template binary \"%s\" not found. It might be missing from your "
"template archive."
msgstr ""
@@ -20075,6 +20267,16 @@ msgstr ""
#: platform/osx/export/export.cpp
#, fuzzy
+msgid "ZIP Creation"
+msgstr "מיז×"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open file to read from path \"%s\"."
+msgstr "×œ× × ×™×ª×Ÿ לפתוח תבנית לייצו×:"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
msgid "Invalid bundle identifier:"
msgstr "מזהה ×œ× ×—×•×§×™:"
@@ -20388,6 +20590,11 @@ msgid "Debug Algorithm"
msgstr "ניפוי שגי×ות"
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to rename temporary file \"%s\"."
+msgstr "×œ× × ×™×ª×Ÿ להסיר:"
+
+#: platform/windows/export/export.cpp
msgid "Identity Type"
msgstr ""
@@ -20435,6 +20642,70 @@ msgid "Trademarks"
msgstr ""
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Resources Modification"
+msgstr "הדבקת הנפשה"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find rcedit executable at \"%s\"."
+msgstr "×œ× × ×™×ª×Ÿ לפתוח תבנית לייצו×:"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find wine executable at \"%s\"."
+msgstr "×œ× × ×™×ª×Ÿ לפתוח תבנית לייצו×:"
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start rcedit executable, configure rcedit path in the Editor "
+"Settings (Export > Windows > Rcedit)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"rcedit failed to modify executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find signtool executable at \"%s\"."
+msgstr "×œ× × ×™×ª×Ÿ לפתוח תבנית לייצו×:"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find osslsigncode executable at \"%s\"."
+msgstr "×œ× × ×™×ª×Ÿ לפתוח תבנית לייצו×:"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid identity type."
+msgstr "מזהה ×œ× ×—×•×§×™:"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid timestamp server."
+msgstr "×©× ×©×’×•×™."
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start signtool executable, configure signtool path in the Editor "
+"Settings (Export > Windows > Signtool)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Signtool failed to sign executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to remove temporary file \"%s\"."
+msgstr "×œ× × ×™×ª×Ÿ להסיר:"
+
+#: platform/windows/export/export.cpp
msgid ""
"The rcedit tool must be configured in the Editor Settings (Export > Windows "
"> Rcedit) to change the icon or app information data."
@@ -20456,6 +20727,23 @@ msgid "Invalid product version:"
msgstr "GUID מוצר ×œ× ×—×•×§×™."
#: platform/windows/export/export.cpp
+msgid "Windows executables cannot be >= 4 GiB."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+#, fuzzy
+msgid "Failed to open executable file \"%s\"."
+msgstr "סיומת ×œ× ×—×•×§×™×ª."
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable file header corrupted."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable \"pck\" section not found."
+msgstr ""
+
+#: platform/windows/export/export.cpp
#, fuzzy
msgid "Windows"
msgstr "חלון חדש"
@@ -20472,6 +20760,10 @@ msgstr ""
msgid "Wine"
msgstr ""
+#: platform/x11/export/export.cpp
+msgid "32-bit executables cannot have embedded data >= 4 GiB."
+msgstr ""
+
#: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp
#: scene/resources/texture.cpp
#, fuzzy
@@ -20598,7 +20890,8 @@ msgstr ""
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/3d/light.cpp scene/3d/reflection_probe.cpp
-#: scene/3d/visual_instance.cpp scene/resources/material.cpp
+#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp
+#: scene/resources/material.cpp
#, fuzzy
msgid "Max Distance"
msgstr "בחירת מרחק:"
@@ -21383,6 +21676,18 @@ msgstr ""
msgid "Edge Connection Margin"
msgstr "עריכת חיבור:"
+#: scene/2d/navigation_2d.cpp
+msgid ""
+"'Navigation2D' node and 'Navigation2D.get_simple_path()' are deprecated and "
+"will be removed in a future version. Use 'Navigation2DServer.map_get_path()' "
+"instead."
+msgstr ""
+
+#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
+#, fuzzy
+msgid "Path Desired Distance"
+msgstr "בחירת מרחק:"
+
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
msgid "Target Desired Distance"
msgstr ""
@@ -21439,17 +21744,19 @@ msgstr ""
"מ×פיין ×ו לצייר מצולע."
#: scene/2d/navigation_polygon.cpp
-msgid ""
-"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
-"node. It only provides navigation data."
-msgstr ""
-"NavigationPolygonInstance חייב להיות ילד ×ו נכד למפרק Navigation2D. ×”×•× ×ž×¡×¤×§ "
-"רק נתוני ניווט."
-
-#: scene/2d/navigation_polygon.cpp
msgid "Navpoly"
msgstr ""
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Enter Cost"
+msgstr "מתחת"
+
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Travel Cost"
+msgstr "טיול"
+
#: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp
#: scene/main/canvas_layer.cpp
#, fuzzy
@@ -22632,6 +22939,13 @@ msgstr ""
msgid "Transform Normals"
msgstr "התמרה"
+#: scene/3d/navigation.cpp
+msgid ""
+"'Navigation' node and 'Navigation.get_simple_path()' are deprecated and will "
+"be removed in a future version. Use 'NavigationServer.map_get_path()' "
+"instead."
+msgstr ""
+
#: scene/3d/navigation.cpp scene/resources/curve.cpp
#, fuzzy
msgid "Up Vector"
@@ -22655,14 +22969,6 @@ msgid ""
"The NavigationAgent can be used only under a Spatial inheriting parent node."
msgstr ""
-#: scene/3d/navigation_mesh_instance.cpp
-msgid ""
-"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
-"It only provides navigation data."
-msgstr ""
-"NavigationMeshInstance חייב להיות ילד ×ו נכד למפרק Navigation. ×”×•× ×ž×¡×¤×§ רק "
-"נתוני ניווט."
-
#: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp
#, fuzzy
msgid "NavMesh"
@@ -25341,6 +25647,16 @@ msgid "3D Physics"
msgstr "שקופית פיזיקלית %"
#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "2D Navigation"
+msgstr "עריכת מצולע"
+
+#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "3D Navigation"
+msgstr "עריכת מצולע"
+
+#: scene/register_scene_types.cpp
msgid "Use hiDPI"
msgstr ""
@@ -26753,7 +27069,7 @@ msgstr "מעברון: "
msgid "Refraction"
msgstr "מוני×:"
-#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp
+#: scene/resources/material.cpp
msgid "Detail"
msgstr ""
@@ -26835,7 +27151,12 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
-msgid "Sample Partition Type"
+msgid "Sampling"
+msgstr "קנה מידה:"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Partition Type"
msgstr "קביעת סוג משתנה"
#: scene/resources/navigation_mesh.cpp
@@ -26853,10 +27174,15 @@ msgid "Source Group Name"
msgstr "מש×ב"
#: scene/resources/navigation_mesh.cpp
-msgid "Agent"
+msgid "Cells"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Agents"
+msgstr "תוכן:"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Max Climb"
msgstr ""
@@ -26866,11 +27192,16 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
+msgid "Regions"
+msgstr "מצב גולמי"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
msgid "Merge Size"
msgstr "מיזוג מסצנה"
#: scene/resources/navigation_mesh.cpp
-msgid "Edge"
+msgid "Edges"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -26884,6 +27215,11 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
+msgid "Details"
+msgstr "טעינת בררת המחדל"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
msgid "Sample Distance"
msgstr "בחירת מרחק:"
@@ -26900,9 +27236,18 @@ msgid "Ledge Spans"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Filter Walkable Low Height Spans"
+msgid "Walkable Low Height Spans"
msgstr ""
+#: scene/resources/navigation_mesh.cpp
+msgid "Baking AABB"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB Offset"
+msgstr "היסט רשת:"
+
#: scene/resources/occluder_shape.cpp
msgid "Spheres"
msgstr ""
@@ -27310,6 +27655,11 @@ msgid "Scenario"
msgstr "סצנה"
#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Navigation Map"
+msgstr "עריכת מצולע"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
msgid "Direct Space State"
msgstr ""
@@ -27327,6 +27677,26 @@ msgstr "ליני×רי"
msgid "Default Angular Damp"
msgstr ""
+#: scene/resources/world.cpp
+#, fuzzy
+msgid "Default Map Up"
+msgstr "בחירת מחדל"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Size"
+msgstr "תצוגה מקדימה:"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Height"
+msgstr "בבדיקה"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Edge Connection Margin"
+msgstr "עריכת חיבור:"
+
#: scene/resources/world_2d.cpp
msgid "Canvas"
msgstr ""
diff --git a/editor/translations/hi.po b/editor/translations/hi.po
index ec193d7f2d..a14fd36f4a 100644
--- a/editor/translations/hi.po
+++ b/editor/translations/hi.po
@@ -214,9 +214,10 @@ msgid "Data"
msgstr "डेटा"
#: core/io/file_access_network.cpp core/register_core_types.cpp
-#: editor/editor_settings.cpp main/main.cpp
+#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
#: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h
+#: scene/gui/file_dialog.cpp
msgid "Network"
msgstr "संजाल"
@@ -369,6 +370,15 @@ msgstr ""
msgid "Max Size (KB)"
msgstr ""
+#: core/os/input.cpp
+#, fuzzy
+msgid "Mouse Mode"
+msgstr "दृशà¥à¤¯ रोकें"
+
+#: core/os/input.cpp
+msgid "Use Accumulated Input"
+msgstr ""
+
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: servers/audio_server.cpp
msgid "Device"
@@ -560,7 +570,8 @@ msgstr "विवरण"
#: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
-#: main/main.cpp
+#: main/main.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp
msgid "Run"
msgstr ""
@@ -647,6 +658,11 @@ msgid "Main Run Args"
msgstr ""
#: core/project_settings.cpp
+#, fuzzy
+msgid "Scene Naming"
+msgstr "दृशà¥à¤¯ पथ:"
+
+#: core/project_settings.cpp
msgid "Search In File Extensions"
msgstr ""
@@ -654,19 +670,15 @@ msgstr ""
msgid "Script Templates Search Path"
msgstr ""
-#: core/project_settings.cpp editor/editor_node.cpp
-#: editor/plugins/version_control_editor_plugin.cpp
-msgid "Version Control"
-msgstr "वरà¥à¤œà¤¨ कंटà¥à¤°à¥‹à¤²"
-
#: core/project_settings.cpp
-msgid "Autoload On Startup"
-msgstr ""
+#, fuzzy
+msgid "Version Control Autoload On Startup"
+msgstr "वरà¥à¤œà¤¨ कंटà¥à¤°à¥‹à¤²"
#: core/project_settings.cpp
#, fuzzy
-msgid "Plugin Name"
-msgstr "पà¥à¤²à¤—इनà¥à¤¸"
+msgid "Version Control Plugin Name"
+msgstr "वरà¥à¤œà¤¨ कंटà¥à¤°à¥‹à¤²"
#: core/project_settings.cpp scene/2d/collision_object_2d.cpp
#: scene/3d/collision_object.cpp scene/gui/control.cpp
@@ -780,7 +792,8 @@ msgid "Quality"
msgstr ""
#: core/project_settings.cpp scene/gui/file_dialog.cpp
-#: scene/main/scene_tree.cpp servers/visual_server.cpp
+#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp
+#: servers/visual_server.cpp
#, fuzzy
msgid "Filters"
msgstr "फिलà¥à¤Ÿà¤°:"
@@ -2209,8 +2222,8 @@ msgid "Open"
msgstr "खोलो इसे"
#: editor/dependency_editor.cpp
-msgid "Owners Of:"
-msgstr "के सà¥à¤µà¤¾à¤®à¥€:"
+msgid "Owners of: %s (Total: %d)"
+msgstr ""
#: editor/dependency_editor.cpp
#, fuzzy
@@ -2518,7 +2531,7 @@ msgid "Bus Options"
msgstr "बस विकलà¥à¤ª"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/scene_tree_dock.cpp
+#: editor/project_export.cpp editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "पà¥à¤°à¤¤à¤¿à¤²à¤¿à¤ªà¤¿"
@@ -2777,6 +2790,24 @@ msgid "Choose"
msgstr "चà¥à¤¨à¥‡à¤‚"
#: editor/editor_export.cpp
+msgid "Project export for platform:"
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Completed with errors."
+msgstr ""
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Completed successfully."
+msgstr "पैकेज सफलतापूरà¥à¤µà¤• सà¥à¤¥à¤¾à¤ªà¤¿à¤¤!"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed."
+msgstr "विफल:"
+
+#: editor/editor_export.cpp
msgid "Storing File:"
msgstr "फ़ाइल सà¥à¤Ÿà¥‹à¤° कर रहा है:"
@@ -2789,6 +2820,31 @@ msgid "Packing"
msgstr "पैक कर रहा है"
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save PCK"
+msgstr "इस तरह बचा के रखिये"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Cannot create file \"%s\"."
+msgstr "फ़ोलà¥à¤¡à¤° नही बना सकते."
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to export project files."
+msgstr "उपपà¥à¤°à¤•à¥à¤°à¤¿à¤¯à¤¾ शà¥à¤°à¥‚ नहीं कर सका!"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Can't open file to read from path \"%s\"."
+msgstr "फ़ाइल रायटिंग के लिठनहीं खोल सकते:"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save ZIP"
+msgstr "इस तरह बचा के रखिये"
+
+#: editor/editor_export.cpp
msgid ""
"Target platform requires 'ETC' texture compression for GLES2. Enable 'Import "
"Etc' in Project Settings."
@@ -2906,11 +2962,31 @@ msgstr "कसà¥à¤Ÿà¤® डिबग टेमà¥à¤ªà¥à¤²à¥‡à¤Ÿ नहीं à¤
msgid "Custom release template not found."
msgstr "कसà¥à¤Ÿà¤® रिलिज टेमà¥à¤ªà¥à¤²à¥‡à¤Ÿ नहीं मिला."
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Prepare Template"
+msgstr "टेमà¥à¤ªà¤²à¥‡à¤Ÿà¥à¤¸ का पà¥à¤°à¤¬à¤‚धन करें"
+
+#: editor/editor_export.cpp platform/osx/export/export.cpp
+msgid "The given export path doesn't exist."
+msgstr ""
+
#: editor/editor_export.cpp platform/javascript/export/export.cpp
-msgid "Template file not found:"
+#, fuzzy
+msgid "Template file not found: \"%s\"."
msgstr "टेमà¥à¤ªà¥à¤²à¥‡à¤Ÿ फ़ाइल नहीं मिला:"
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to copy export template."
+msgstr "निरà¥à¤¯à¤¾à¤¤ टेमà¥à¤ªà¤²à¥‡à¤Ÿà¥à¤¸ ज़िप नहीं खोल सकते।"
+
+#: editor/editor_export.cpp platform/windows/export/export.cpp
+#: platform/x11/export/export.cpp
+msgid "PCK Embedding"
+msgstr ""
+
+#: editor/editor_export.cpp
msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB."
msgstr "32-बिट â€à¤à¤•à¥à¤¸à¤ªà¥‹à¤°à¥à¤Ÿ पर à¤à¤®à¤¬à¥‡à¤¡à¥à¤¡à¥‡à¤¡ PCK 4 GiB से बड़ी नहीं इसà¥à¤¤à¥‡à¤®à¤¾à¤² कर सकते."
@@ -3084,9 +3160,9 @@ msgid "Import"
msgstr "आयात"
#: editor/editor_feature_profile.cpp editor/project_export.cpp
-#: platform/android/export/export.cpp platform/javascript/export/export.cpp
-#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
-#: platform/windows/export/export.cpp
+#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#: platform/uwp/export/export.cpp platform/windows/export/export.cpp
msgid "Export"
msgstr "â€à¤à¤•à¥à¤¸à¤ªà¥‹à¤°à¥à¤Ÿ"
@@ -4230,15 +4306,6 @@ msgid ""
"Unable to write to file '%s', file in use, locked or lacking permissions."
msgstr ""
-#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
-msgid "Scene"
-msgstr "दृशà¥à¤¯"
-
-#: editor/editor_node.cpp
-#, fuzzy
-msgid "Scene Naming"
-msgstr "दृशà¥à¤¯ पथ:"
-
#: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp
#: servers/arvr/arvr_interface.cpp
msgid "Interface"
@@ -4363,6 +4430,10 @@ msgid "Default Color Picker Mode"
msgstr ""
#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
+msgid "Version Control"
+msgstr "वरà¥à¤œà¤¨ कंटà¥à¤°à¥‹à¤²"
+
+#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
#, fuzzy
msgid "Username"
msgstr "नाम बदली"
@@ -4391,6 +4462,10 @@ msgstr "वà¥à¤¯à¤¾à¤•à¥à¤²à¤¤à¤¾ मà¥à¤•à¥à¤¤ मोड टॉगल।"
msgid "Add a new scene."
msgstr "à¤à¤• नया दृशà¥à¤¯ जोड़ें।"
+#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
+msgid "Scene"
+msgstr "दृशà¥à¤¯"
+
#: editor/editor_node.cpp
msgid "Go to previously opened scene."
msgstr "पहले खोले गठदृशà¥à¤¯ में जाà¤à¤‚।"
@@ -5180,6 +5255,11 @@ msgstr ""
"कृपया निरà¥à¤¯à¤¾à¤¤ मेनू में à¤à¤• निषà¥à¤ªà¤¾à¤¦à¤¨ योगà¥à¤¯ पà¥à¤°à¥€à¤¸à¥‡à¤Ÿ जोड़ें, या मौजूदा पà¥à¤°à¥€à¤¸à¥‡à¤Ÿ को निषà¥à¤ªà¤¾à¤¦à¤¨ योगà¥à¤¯ के "
"रूप में सेट करें।"
+#: editor/editor_run_native.cpp
+#, fuzzy
+msgid "Project Run"
+msgstr "परियोजना"
+
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
msgstr "अपने तरà¥à¤• को _run () विधि में लिखें।"
@@ -5453,7 +5533,9 @@ msgid "Draw Spaces"
msgstr "कॉल"
#: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp
-#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp
+#: scene/main/scene_tree.cpp scene/resources/world.cpp
+#: scene/resources/world_2d.cpp
#, fuzzy
msgid "Navigation"
msgstr "सदसà¥à¤¯à¤¤à¤¾ बनाà¤à¤‚"
@@ -6928,7 +7010,7 @@ msgstr ""
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp
-#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp
+#: scene/gui/control.cpp
#, fuzzy
msgid "Filter"
msgstr "फिलà¥à¤Ÿà¤°:"
@@ -7217,6 +7299,18 @@ msgid "Saving..."
msgstr ""
#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used as a normal map in 3D. Enabling red-green "
+"texture compression to reduce memory usage (blue channel is discarded)."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap "
+"generation and VRAM texture compression."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
msgid "2D, Detect 3D"
msgstr ""
@@ -7888,11 +7982,20 @@ msgid "New Anim"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+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 "Rename Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Delete Animation?"
msgstr ""
@@ -7910,11 +8013,6 @@ 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 "Duplicate Animation"
msgstr ""
@@ -8057,10 +8155,6 @@ msgid "Pin AnimationPlayer"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Create New Animation"
-msgstr ""
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Name:"
msgstr ""
@@ -10146,6 +10240,7 @@ msgid "Points"
msgstr ""
#: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp
+#: scene/resources/navigation_mesh.cpp
#, fuzzy
msgid "Polygons"
msgstr "सदसà¥à¤¯à¤¤à¤¾ बनाà¤à¤‚"
@@ -11540,8 +11635,9 @@ msgid "Invalid geometry, can't replace by mesh."
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
-msgid "Convert to Mesh2D"
-msgstr ""
+#, fuzzy
+msgid "Convert to MeshInstance2D"
+msgstr "सदसà¥à¤¯à¤¤à¤¾ बनाà¤à¤‚"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Invalid geometry, can't create polygon."
@@ -12572,8 +12668,7 @@ msgid "Select the previous shape, subtile, or Tile."
msgstr ""
#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp
-#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp
-#: scene/resources/texture.cpp
+#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp
msgid "Region"
msgstr ""
@@ -14066,31 +14161,10 @@ 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 "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 "Export Path"
msgstr ""
@@ -14229,6 +14303,11 @@ msgid "Export templates for this platform are missing:"
msgstr ""
#: editor/project_export.cpp
+#, fuzzy
+msgid "Project Export"
+msgstr "परियोजना के संसà¥à¤¥à¤¾à¤ªà¤•"
+
+#: editor/project_export.cpp
msgid "Manage Export Templates"
msgstr ""
@@ -16552,7 +16631,7 @@ msgstr ""
#: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp
#: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp
-#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp
+#: scene/3d/collision_polygon.cpp
#, fuzzy
msgid "Polygon"
msgstr "सदसà¥à¤¯à¤¤à¤¾ बनाà¤à¤‚"
@@ -17146,7 +17225,6 @@ msgid "Use In Baked Light"
msgstr ""
#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
-#: scene/resources/navigation_mesh.cpp
msgid "Cell"
msgstr ""
@@ -17176,6 +17254,19 @@ msgstr "को हटा दें"
msgid "Mask"
msgstr ""
+#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
+#, fuzzy
+msgid "Bake Navigation"
+msgstr "सदसà¥à¤¯à¤¤à¤¾ बनाà¤à¤‚"
+
+#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp
+#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp
+#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp
+#: scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Navigation Layers"
+msgstr "सदसà¥à¤¯à¤¤à¤¾ बनाà¤à¤‚"
+
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Plane"
msgstr ""
@@ -18704,10 +18795,6 @@ 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."
@@ -18812,12 +18899,16 @@ msgstr ""
msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version."
msgstr ""
+#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Code Signing"
+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."
+"'apksigner' could not be found. Please check that the command is available "
+"in the Android SDK build-tools directory. The resulting %s is unsigned."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18836,6 +18927,11 @@ msgid "Could not find keystore, unable to export."
msgstr ""
#: platform/android/export/export_plugin.cpp
+#, fuzzy
+msgid "Could not start apksigner executable."
+msgstr "उपपà¥à¤°à¤•à¥à¤°à¤¿à¤¯à¤¾ शà¥à¤°à¥‚ नहीं कर सका!"
+
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
@@ -18864,7 +18960,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Unsupported export format!\n"
+msgid "Unsupported export format!"
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18875,20 +18971,19 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Android build version mismatch:\n"
-" Template installed: %s\n"
-" Godot Version: %s\n"
+"Android build version mismatch: Template installed: %s, Godot version: %s. "
"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"
+"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 ""
+#, fuzzy
+msgid "Could not export project files to gradle project."
+msgstr "उपपà¥à¤°à¤•à¥à¤°à¤¿à¤¯à¤¾ शà¥à¤°à¥‚ नहीं कर सका!"
#: platform/android/export/export_plugin.cpp
msgid "Could not write expansion package file!"
@@ -18900,7 +18995,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Building of Android project failed, check output for the error.\n"
+"Building of Android project failed, check output for the error. "
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
@@ -18916,7 +19011,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
#, fuzzy
-msgid "Package not found: %s"
+msgid "Package not found: \"%s\"."
msgstr "पैकेज में है:"
#: platform/android/export/export_plugin.cpp
@@ -18925,15 +19020,13 @@ msgid "Creating APK..."
msgstr "जोड़ने..."
#: platform/android/export/export_plugin.cpp
-msgid ""
-"Could not find template APK to export:\n"
-"%s"
-msgstr ""
+#, fuzzy
+msgid "Could not find template APK to export: \"%s\"."
+msgstr "उपपà¥à¤°à¤•à¥à¤°à¤¿à¤¯à¤¾ शà¥à¤°à¥‚ नहीं कर सका!"
#: platform/android/export/export_plugin.cpp
msgid ""
-"Missing libraries in the export template for the selected architectures: "
-"%s.\n"
+"Missing libraries in the export template for the selected architectures: %s. "
"Please build a template with all required libraries, or uncheck the missing "
"architectures in the export preset."
msgstr ""
@@ -18945,7 +19038,7 @@ msgstr "पसंदीदा:"
#: platform/android/export/export_plugin.cpp
#, fuzzy
-msgid "Could not export project files"
+msgid "Could not export project files."
msgstr "उपपà¥à¤°à¤•à¥à¤°à¤¿à¤¯à¤¾ शà¥à¤°à¥‚ नहीं कर सका!"
#: platform/android/export/export_plugin.cpp
@@ -19187,6 +19280,17 @@ msgstr "पà¥à¤°à¤¤à¤¿à¤²à¤¿à¤ªà¤¿"
msgid "Custom BG Color"
msgstr "पà¥à¤°à¤¤à¤¿à¤²à¤¿à¤ªà¤¿"
+#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Prepare Templates"
+msgstr "टेमà¥à¤ªà¤²à¥‡à¤Ÿà¥à¤¸ का पà¥à¤°à¤¬à¤‚धन करें"
+
+#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Export template not found."
+msgstr "कसà¥à¤Ÿà¤® रिलिज टेमà¥à¤ªà¥à¤²à¥‡à¤Ÿ नहीं मिला."
+
#: platform/iphone/export/export.cpp
msgid "App Store Team ID not specified - cannot configure the project."
msgstr ""
@@ -19209,23 +19313,35 @@ msgid "Run exported HTML in the system's default browser."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not open template for export:"
-msgstr ""
+#, fuzzy
+msgid "Could not open template for export: \"%s\"."
+msgstr "फ़ोलà¥à¤¡à¤° नही बना सकते."
#: platform/javascript/export/export.cpp
-msgid "Invalid export template:"
-msgstr ""
+#, fuzzy
+msgid "Invalid export template: \"%s\"."
+msgstr "गलत फॉणà¥à¤Ÿ का आकार |"
#: platform/javascript/export/export.cpp
-msgid "Could not write file:"
-msgstr ""
+#, fuzzy
+msgid "Could not write file: \"%s\"."
+msgstr "फ़ोलà¥à¤¡à¤° नही बना सकते."
+
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Icon Creation"
+msgstr "शो में फाइल सिसà¥à¤Ÿà¤®"
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not read file:"
+msgid "Could not read file: \"%s\"."
msgstr "फ़ोलà¥à¤¡à¤° नही बना सकते."
#: platform/javascript/export/export.cpp
+msgid "PWA"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
#, fuzzy
msgid "Variant"
msgstr "संसà¥à¤•रण:"
@@ -19301,17 +19417,17 @@ msgstr ""
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not read HTML shell:"
+msgid "Could not read HTML shell: \"%s\"."
msgstr "फ़ोलà¥à¤¡à¤° नही बना सकते."
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not create HTTP server directory:"
+msgid "Could not create HTTP server directory: %s."
msgstr "फ़ोलà¥à¤¡à¤° नही बना सकते."
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Error starting HTTP server:"
+msgid "Error starting HTTP server: %d."
msgstr "तà¥à¤°à¥à¤Ÿà¤¿ बचत टाइलसेट!"
#: platform/javascript/export/export.cpp
@@ -19602,9 +19718,28 @@ msgid "Apple Team ID"
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open icon file \"%s\"."
+msgstr "उपपà¥à¤°à¤•à¥à¤°à¤¿à¤¯à¤¾ शà¥à¤°à¥‚ नहीं कर सका!"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start xcrun executable."
+msgstr "उपपà¥à¤°à¤•à¥à¤°à¤¿à¤¯à¤¾ शà¥à¤°à¥‚ नहीं कर सका!"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization failed."
+msgstr "सदसà¥à¤¯à¤¤à¤¾ बनाà¤à¤‚"
+
+#: platform/osx/export/export.cpp
+msgid "Notarization request UUID: \"%s\""
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid ""
-"Note: The notarization process generally takes less than an hour. When the "
-"process is completed, you'll receive an email."
+"The notarization process generally takes less than an hour. When the process "
+"is completed, you'll receive an email."
msgstr ""
#: platform/osx/export/export.cpp
@@ -19620,18 +19755,74 @@ msgid ""
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign failed with error \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign require regex module."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Could not start codesign executable, make sure Xcode command line tools are "
+"installed."
+msgstr ""
+
+#: platform/osx/export/export.cpp platform/windows/export/export.cpp
#, fuzzy
msgid "No identity found."
msgstr "सब-रिसोरà¥à¤¸ नहीं मिला."
#: platform/osx/export/export.cpp
#, fuzzy
+msgid "Cannot sign file %s."
+msgstr "फ़ाइल बचाने में चूक: %s"
+
+#: platform/osx/export/export.cpp
+msgid "Relative symlinks are not supported, exported \"%s\" might be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "DMG Creation"
+msgstr "निरà¥à¤¦à¥‡à¤¶à¥‹à¤‚"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start hdiutil executable."
+msgstr "उपपà¥à¤°à¤•à¥à¤°à¤¿à¤¯à¤¾ शà¥à¤°à¥‚ नहीं कर सका!"
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed - file exists."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
msgid "Creating app bundle"
msgstr "थंबनेल बनाना"
#: platform/osx/export/export.cpp
-msgid "Could not find template app to export:"
-msgstr ""
+#, fuzzy
+msgid "Could not find template app to export: \"%s\"."
+msgstr "उपपà¥à¤°à¤•à¥à¤°à¤¿à¤¯à¤¾ शà¥à¤°à¥‚ नहीं कर सका!"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid export format."
+msgstr "गलत फॉणà¥à¤Ÿ का आकार |"
#: platform/osx/export/export.cpp
msgid ""
@@ -19641,7 +19832,7 @@ msgstr ""
#: platform/osx/export/export.cpp
msgid ""
-"Requested template binary '%s' not found. It might be missing from your "
+"Requested template binary \"%s\" not found. It might be missing from your "
"template archive."
msgstr ""
@@ -19683,6 +19874,15 @@ msgstr ""
#: platform/osx/export/export.cpp
#, fuzzy
+msgid "ZIP Creation"
+msgstr "परियोजना"
+
+#: platform/osx/export/export.cpp
+msgid "Could not open file to read from path \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
msgid "Invalid bundle identifier:"
msgstr "गलत फॉणà¥à¤Ÿ का आकार |"
@@ -19995,6 +20195,11 @@ msgid "Debug Algorithm"
msgstr ""
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to rename temporary file \"%s\"."
+msgstr "अलà¥à¤ªà¤•ालिक फ़ाइल निकाली नहीं जा सकà¥à¤¤à¥€:"
+
+#: platform/windows/export/export.cpp
msgid "Identity Type"
msgstr ""
@@ -20041,6 +20246,66 @@ msgid "Trademarks"
msgstr ""
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Resources Modification"
+msgstr "कोनà¥à¤¸à¥à¤Ÿà¤¨à¥à¤Ÿ"
+
+#: platform/windows/export/export.cpp
+msgid "Could not find rcedit executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find wine executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start rcedit executable, configure rcedit path in the Editor "
+"Settings (Export > Windows > Rcedit)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"rcedit failed to modify executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find signtool executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find osslsigncode executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid identity type."
+msgstr "गलत फॉणà¥à¤Ÿ का आकार |"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid timestamp server."
+msgstr "अमानà¥à¤¯ नाम."
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start signtool executable, configure signtool path in the Editor "
+"Settings (Export > Windows > Signtool)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Signtool failed to sign executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to remove temporary file \"%s\"."
+msgstr "अलà¥à¤ªà¤•ालिक फ़ाइल निकाली नहीं जा सकà¥à¤¤à¥€:"
+
+#: platform/windows/export/export.cpp
msgid ""
"The rcedit tool must be configured in the Editor Settings (Export > Windows "
"> Rcedit) to change the icon or app information data."
@@ -20062,6 +20327,23 @@ msgid "Invalid product version:"
msgstr "गलत फॉणà¥à¤Ÿ का आकार |"
#: platform/windows/export/export.cpp
+msgid "Windows executables cannot be >= 4 GiB."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+#, fuzzy
+msgid "Failed to open executable file \"%s\"."
+msgstr "गलत फॉणà¥à¤Ÿ का आकार |"
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable file header corrupted."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable \"pck\" section not found."
+msgstr ""
+
+#: platform/windows/export/export.cpp
#, fuzzy
msgid "Windows"
msgstr "नया विंडो"
@@ -20078,6 +20360,10 @@ msgstr ""
msgid "Wine"
msgstr ""
+#: platform/x11/export/export.cpp
+msgid "32-bit executables cannot have embedded data >= 4 GiB."
+msgstr ""
+
#: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp
#: scene/resources/texture.cpp
#, fuzzy
@@ -20197,7 +20483,8 @@ msgstr ""
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/3d/light.cpp scene/3d/reflection_probe.cpp
-#: scene/3d/visual_instance.cpp scene/resources/material.cpp
+#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp
+#: scene/resources/material.cpp
#, fuzzy
msgid "Max Distance"
msgstr "इनसà¥à¤Ÿà¤¨à¥à¤¸"
@@ -20951,6 +21238,18 @@ msgstr ""
msgid "Edge Connection Margin"
msgstr "कनेकà¥à¤¶à¤¨ संपादित करें:"
+#: scene/2d/navigation_2d.cpp
+msgid ""
+"'Navigation2D' node and 'Navigation2D.get_simple_path()' are deprecated and "
+"will be removed in a future version. Use 'Navigation2DServer.map_get_path()' "
+"instead."
+msgstr ""
+
+#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
+#, fuzzy
+msgid "Path Desired Distance"
+msgstr "à¤à¤• मà¥à¤–à¥à¤¯ दृशà¥à¤¯ चà¥à¤¨à¥‡à¤‚"
+
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
msgid "Target Desired Distance"
msgstr ""
@@ -21002,13 +21301,16 @@ msgid ""
msgstr ""
#: scene/2d/navigation_polygon.cpp
-msgid ""
-"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
-"node. It only provides navigation data."
+msgid "Navpoly"
msgstr ""
-#: scene/2d/navigation_polygon.cpp
-msgid "Navpoly"
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Enter Cost"
+msgstr "को हटा दें"
+
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+msgid "Travel Cost"
msgstr ""
#: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp
@@ -22120,6 +22422,13 @@ msgstr ""
msgid "Transform Normals"
msgstr "सदसà¥à¤¯à¤¤à¤¾ बनाà¤à¤‚"
+#: scene/3d/navigation.cpp
+msgid ""
+"'Navigation' node and 'Navigation.get_simple_path()' are deprecated and will "
+"be removed in a future version. Use 'NavigationServer.map_get_path()' "
+"instead."
+msgstr ""
+
#: scene/3d/navigation.cpp scene/resources/curve.cpp
#, fuzzy
msgid "Up Vector"
@@ -22142,12 +22451,6 @@ msgid ""
"The NavigationAgent can be used only under a Spatial inheriting parent node."
msgstr ""
-#: scene/3d/navigation_mesh_instance.cpp
-msgid ""
-"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
-"It only provides navigation data."
-msgstr ""
-
#: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp
msgid "NavMesh"
msgstr ""
@@ -24726,6 +25029,16 @@ msgid "3D Physics"
msgstr "फिजिकà¥à¤¸ फà¥à¤°à¥‡à¤® %"
#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "2D Navigation"
+msgstr "सदसà¥à¤¯à¤¤à¤¾ बनाà¤à¤‚"
+
+#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "3D Navigation"
+msgstr "सदसà¥à¤¯à¤¤à¤¾ बनाà¤à¤‚"
+
+#: scene/register_scene_types.cpp
msgid "Use hiDPI"
msgstr ""
@@ -26108,7 +26421,7 @@ msgstr "संकà¥à¤°à¤®à¤£: "
msgid "Refraction"
msgstr "संसà¥à¤•रण:"
-#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp
+#: scene/resources/material.cpp
msgid "Detail"
msgstr ""
@@ -26187,8 +26500,14 @@ msgid "Visible Instance Count"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Sample Partition Type"
-msgstr ""
+#, fuzzy
+msgid "Sampling"
+msgstr "सà¥à¤•ेल अनà¥à¤ªà¤¾à¤¤:"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Partition Type"
+msgstr "संसà¥à¤•रण:"
#: scene/resources/navigation_mesh.cpp
msgid "Parsed Geometry Type"
@@ -26204,10 +26523,15 @@ msgid "Source Group Name"
msgstr "संसाधन"
#: scene/resources/navigation_mesh.cpp
-msgid "Agent"
+msgid "Cells"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Agents"
+msgstr "सà¥à¤•à¥à¤°à¤¿à¤ªà¥à¤Ÿ बढ़ाà¤à¤"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Max Climb"
msgstr ""
@@ -26216,11 +26540,16 @@ msgid "Max Slope"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Regions"
+msgstr "खà¥à¤²à¤¾ हाल"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Merge Size"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Edge"
+msgid "Edges"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -26233,6 +26562,11 @@ msgid "Verts Per Poly"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Details"
+msgstr "पà¥à¤°à¤¾à¤¯à¤¿à¤• लोड कीजिये"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Sample Distance"
msgstr ""
@@ -26249,9 +26583,18 @@ msgid "Ledge Spans"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Filter Walkable Low Height Spans"
+msgid "Walkable Low Height Spans"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
+msgid "Baking AABB"
msgstr ""
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB Offset"
+msgstr "मिटाना"
+
#: scene/resources/occluder_shape.cpp
msgid "Spheres"
msgstr ""
@@ -26650,6 +26993,11 @@ msgid "Scenario"
msgstr "दृशà¥à¤¯"
#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Navigation Map"
+msgstr "सदसà¥à¤¯à¤¤à¤¾ बनाà¤à¤‚"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
msgid "Direct Space State"
msgstr ""
@@ -26667,6 +27015,26 @@ msgstr "चूक"
msgid "Default Angular Damp"
msgstr ""
+#: scene/resources/world.cpp
+#, fuzzy
+msgid "Default Map Up"
+msgstr "चूक"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Size"
+msgstr "चूक"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Height"
+msgstr "चूक"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Edge Connection Margin"
+msgstr "कनेकà¥à¤¶à¤¨ संपादित करें:"
+
#: scene/resources/world_2d.cpp
msgid "Canvas"
msgstr ""
diff --git a/editor/translations/hr.po b/editor/translations/hr.po
index 23e730f0a2..9a3dabefb3 100644
--- a/editor/translations/hr.po
+++ b/editor/translations/hr.po
@@ -214,9 +214,10 @@ msgid "Data"
msgstr ""
#: core/io/file_access_network.cpp core/register_core_types.cpp
-#: editor/editor_settings.cpp main/main.cpp
+#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
#: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h
+#: scene/gui/file_dialog.cpp
msgid "Network"
msgstr ""
@@ -372,6 +373,15 @@ msgstr ""
msgid "Max Size (KB)"
msgstr ""
+#: core/os/input.cpp
+#, fuzzy
+msgid "Mouse Mode"
+msgstr "NaÄin reprodukcije:"
+
+#: core/os/input.cpp
+msgid "Use Accumulated Input"
+msgstr ""
+
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: servers/audio_server.cpp
msgid "Device"
@@ -558,7 +568,8 @@ msgstr "Opis"
#: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
-#: main/main.cpp
+#: main/main.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp
msgid "Run"
msgstr ""
@@ -643,26 +654,24 @@ msgid "Main Run Args"
msgstr ""
#: core/project_settings.cpp
-msgid "Search In File Extensions"
+msgid "Scene Naming"
msgstr ""
#: core/project_settings.cpp
-msgid "Script Templates Search Path"
+msgid "Search In File Extensions"
msgstr ""
-#: core/project_settings.cpp editor/editor_node.cpp
-#: editor/plugins/version_control_editor_plugin.cpp
-msgid "Version Control"
+#: core/project_settings.cpp
+msgid "Script Templates Search Path"
msgstr ""
#: core/project_settings.cpp
-msgid "Autoload On Startup"
+msgid "Version Control Autoload On Startup"
msgstr ""
#: core/project_settings.cpp
-#, fuzzy
-msgid "Plugin Name"
-msgstr "Naziv ÄŒvora(node):"
+msgid "Version Control Plugin Name"
+msgstr ""
#: core/project_settings.cpp scene/2d/collision_object_2d.cpp
#: scene/3d/collision_object.cpp scene/gui/control.cpp
@@ -770,7 +779,8 @@ msgid "Quality"
msgstr ""
#: core/project_settings.cpp scene/gui/file_dialog.cpp
-#: scene/main/scene_tree.cpp servers/visual_server.cpp
+#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp
+#: servers/visual_server.cpp
#, fuzzy
msgid "Filters"
msgstr "Filtriraj signale"
@@ -2182,8 +2192,8 @@ msgid "Open"
msgstr "Otvori"
#: editor/dependency_editor.cpp
-msgid "Owners Of:"
-msgstr "Vlasnici:"
+msgid "Owners of: %s (Total: %d)"
+msgstr ""
#: editor/dependency_editor.cpp
#, fuzzy
@@ -2484,7 +2494,7 @@ msgid "Bus Options"
msgstr "Opcije Klase"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/scene_tree_dock.cpp
+#: editor/project_export.cpp editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "Dupliciraj"
@@ -2741,6 +2751,23 @@ msgid "Choose"
msgstr ""
#: editor/editor_export.cpp
+msgid "Project export for platform:"
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Completed with errors."
+msgstr ""
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Completed successfully."
+msgstr "Paket uspješno instaliran!"
+
+#: editor/editor_export.cpp
+msgid "Failed."
+msgstr ""
+
+#: editor/editor_export.cpp
msgid "Storing File:"
msgstr ""
@@ -2753,6 +2780,28 @@ msgid "Packing"
msgstr ""
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save PCK"
+msgstr "Spremi Kao"
+
+#: editor/editor_export.cpp
+msgid "Cannot create file \"%s\"."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Failed to export project files."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Can't open file to read from path \"%s\"."
+msgstr ""
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save ZIP"
+msgstr "Spremi Kao"
+
+#: editor/editor_export.cpp
msgid ""
"Target platform requires 'ETC' texture compression for GLES2. Enable 'Import "
"Etc' in Project Settings."
@@ -2856,8 +2905,25 @@ msgstr ""
msgid "Custom release template not found."
msgstr ""
+#: editor/editor_export.cpp
+msgid "Prepare Template"
+msgstr ""
+
+#: editor/editor_export.cpp platform/osx/export/export.cpp
+msgid "The given export path doesn't exist."
+msgstr ""
+
#: editor/editor_export.cpp platform/javascript/export/export.cpp
-msgid "Template file not found:"
+msgid "Template file not found: \"%s\"."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Failed to copy export template."
+msgstr ""
+
+#: editor/editor_export.cpp platform/windows/export/export.cpp
+#: platform/x11/export/export.cpp
+msgid "PCK Embedding"
msgstr ""
#: editor/editor_export.cpp
@@ -3033,9 +3099,9 @@ msgid "Import"
msgstr "Uvezi"
#: editor/editor_feature_profile.cpp editor/project_export.cpp
-#: platform/android/export/export.cpp platform/javascript/export/export.cpp
-#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
-#: platform/windows/export/export.cpp
+#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#: platform/uwp/export/export.cpp platform/windows/export/export.cpp
msgid "Export"
msgstr "Izvoz"
@@ -4124,14 +4190,6 @@ msgid ""
"Unable to write to file '%s', file in use, locked or lacking permissions."
msgstr ""
-#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
-msgid "Scene"
-msgstr ""
-
-#: editor/editor_node.cpp
-msgid "Scene Naming"
-msgstr ""
-
#: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp
#: servers/arvr/arvr_interface.cpp
msgid "Interface"
@@ -4252,6 +4310,10 @@ msgid "Default Color Picker Mode"
msgstr ""
#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
+msgid "Version Control"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
#, fuzzy
msgid "Username"
msgstr "Preimenuj zvuÄnu sabirnicu"
@@ -4280,6 +4342,10 @@ msgstr ""
msgid "Add a new scene."
msgstr ""
+#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
+msgid "Scene"
+msgstr ""
+
#: editor/editor_node.cpp
msgid "Go to previously opened scene."
msgstr ""
@@ -5020,6 +5086,11 @@ msgid ""
"as runnable."
msgstr ""
+#: editor/editor_run_native.cpp
+#, fuzzy
+msgid "Project Run"
+msgstr "Direkcije"
+
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
msgstr ""
@@ -5283,7 +5354,9 @@ msgid "Draw Spaces"
msgstr ""
#: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp
-#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp
+#: scene/main/scene_tree.cpp scene/resources/world.cpp
+#: scene/resources/world_2d.cpp
msgid "Navigation"
msgstr "Navigacija"
@@ -6716,7 +6789,7 @@ msgstr ""
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp
-#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp
+#: scene/gui/control.cpp
#, fuzzy
msgid "Filter"
msgstr "Filtriraj signale"
@@ -7001,6 +7074,18 @@ msgid "Saving..."
msgstr ""
#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used as a normal map in 3D. Enabling red-green "
+"texture compression to reduce memory usage (blue channel is discarded)."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap "
+"generation and VRAM texture compression."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
msgid "2D, Detect 3D"
msgstr ""
@@ -7669,11 +7754,20 @@ msgid "New Anim"
msgstr "Nova Animacija"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+msgstr "Kreiraj Novu Animaciju"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Change Animation Name:"
msgstr "Promijeni Ime Animacije:"
#: editor/plugins/animation_player_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Rename Animation"
+msgstr "Preimenuj animaciju"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Delete Animation?"
msgstr "Obrisati Animaciju?"
@@ -7691,11 +7785,6 @@ msgid "Animation name already exists!"
msgstr "Animacija sa ovim imenom već postoji!"
#: editor/plugins/animation_player_editor_plugin.cpp
-#: editor/plugins/sprite_frames_editor_plugin.cpp
-msgid "Rename Animation"
-msgstr "Preimenuj animaciju"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate Animation"
msgstr "Dupliciraj Animaciju"
@@ -7838,10 +7927,6 @@ msgid "Pin AnimationPlayer"
msgstr "Pinuj AnimationPlayer"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Create New Animation"
-msgstr "Kreiraj Novu Animaciju"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Name:"
msgstr "Ime Animacije:"
@@ -9907,6 +9992,7 @@ msgid "Points"
msgstr ""
#: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp
+#: scene/resources/navigation_mesh.cpp
msgid "Polygons"
msgstr ""
@@ -11273,8 +11359,9 @@ msgid "Invalid geometry, can't replace by mesh."
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
-msgid "Convert to Mesh2D"
-msgstr ""
+#, fuzzy
+msgid "Convert to MeshInstance2D"
+msgstr "Spoji '%s' na '%s'"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Invalid geometry, can't create polygon."
@@ -12261,8 +12348,7 @@ msgid "Select the previous shape, subtile, or Tile."
msgstr ""
#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp
-#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp
-#: scene/resources/texture.cpp
+#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp
msgid "Region"
msgstr "Regija"
@@ -13716,31 +13802,10 @@ 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 "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 "Export Path"
msgstr ""
@@ -13877,6 +13942,11 @@ msgid "Export templates for this platform are missing:"
msgstr ""
#: editor/project_export.cpp
+#, fuzzy
+msgid "Project Export"
+msgstr "OsnivaÄi projekta"
+
+#: editor/project_export.cpp
msgid "Manage Export Templates"
msgstr ""
@@ -16160,7 +16230,7 @@ msgstr ""
#: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp
#: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp
-#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp
+#: scene/3d/collision_polygon.cpp
msgid "Polygon"
msgstr ""
@@ -16745,7 +16815,6 @@ msgid "Use In Baked Light"
msgstr ""
#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
-#: scene/resources/navigation_mesh.cpp
msgid "Cell"
msgstr ""
@@ -16775,6 +16844,19 @@ msgstr "Premjesti Ävor(node)"
msgid "Mask"
msgstr ""
+#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
+#, fuzzy
+msgid "Bake Navigation"
+msgstr "Navigacija"
+
+#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp
+#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp
+#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp
+#: scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Navigation Layers"
+msgstr "NaÄin Navigacije"
+
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Plane"
msgstr ""
@@ -18261,10 +18343,6 @@ 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."
@@ -18368,12 +18446,16 @@ msgstr ""
msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version."
msgstr ""
+#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Code Signing"
+msgstr "Brisati odabrani kljuÄ/odabrane kljuÄeve"
+
#: 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."
+"'apksigner' could not be found. Please check that the command is available "
+"in the Android SDK build-tools directory. The resulting %s is unsigned."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18389,6 +18471,10 @@ msgid "Could not find keystore, unable to export."
msgstr ""
#: platform/android/export/export_plugin.cpp
+msgid "Could not start apksigner executable."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
@@ -18417,7 +18503,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Unsupported export format!\n"
+msgid "Unsupported export format!"
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18428,19 +18514,17 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Android build version mismatch:\n"
-" Template installed: %s\n"
-" Godot Version: %s\n"
+"Android build version mismatch: Template installed: %s, Godot version: %s. "
"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"
+"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"
+msgid "Could not export project files to gradle project."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18453,7 +18537,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Building of Android project failed, check output for the error.\n"
+"Building of Android project failed, check output for the error. "
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
@@ -18468,7 +18552,7 @@ msgid ""
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Package not found: %s"
+msgid "Package not found: \"%s\"."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18476,15 +18560,12 @@ msgid "Creating APK..."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid ""
-"Could not find template APK to export:\n"
-"%s"
+msgid "Could not find template APK to export: \"%s\"."
msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Missing libraries in the export template for the selected architectures: "
-"%s.\n"
+"Missing libraries in the export template for the selected architectures: %s. "
"Please build a template with all required libraries, or uncheck the missing "
"architectures in the export preset."
msgstr ""
@@ -18494,8 +18575,9 @@ msgid "Adding files..."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Could not export project files"
-msgstr ""
+#, fuzzy
+msgid "Could not export project files."
+msgstr "Trenutni Profil:"
#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
@@ -18731,6 +18813,15 @@ msgstr "Funkcije"
msgid "Custom BG Color"
msgstr "Funkcije"
+#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
+#: platform/osx/export/export.cpp
+msgid "Prepare Templates"
+msgstr ""
+
+#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
+msgid "Export template not found."
+msgstr ""
+
#: platform/iphone/export/export.cpp
msgid "App Store Team ID not specified - cannot configure the project."
msgstr ""
@@ -18752,23 +18843,34 @@ msgid "Run exported HTML in the system's default browser."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not open template for export:"
+msgid "Could not open template for export: \"%s\"."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Invalid export template:"
-msgstr ""
+#, fuzzy
+msgid "Invalid export template: \"%s\"."
+msgstr "Nevažeće ime."
#: platform/javascript/export/export.cpp
-msgid "Could not write file:"
-msgstr ""
+#, fuzzy
+msgid "Could not write file: \"%s\"."
+msgstr "Trenutni Profil:"
+
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Icon Creation"
+msgstr "Uredi vezu:"
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not read file:"
+msgid "Could not read file: \"%s\"."
msgstr "Trenutni Profil:"
#: platform/javascript/export/export.cpp
+msgid "PWA"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
#, fuzzy
msgid "Variant"
msgstr "Opis:"
@@ -18843,16 +18945,18 @@ msgid "Icon 512 X 512"
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not read HTML shell:"
-msgstr ""
+#, fuzzy
+msgid "Could not read HTML shell: \"%s\"."
+msgstr "Trenutni Profil:"
#: platform/javascript/export/export.cpp
-msgid "Could not create HTTP server directory:"
+msgid "Could not create HTTP server directory: %s."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Error starting HTTP server:"
-msgstr ""
+#, fuzzy
+msgid "Error starting HTTP server: %d."
+msgstr "Pogreška prilikom spremanja datoteke: %s"
#: platform/javascript/export/export.cpp
msgid "Web"
@@ -19133,9 +19237,27 @@ msgid "Apple Team ID"
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open icon file \"%s\"."
+msgstr "Trenutni Profil:"
+
+#: platform/osx/export/export.cpp
+msgid "Could not start xcrun executable."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization failed."
+msgstr "Navigacija"
+
+#: platform/osx/export/export.cpp
+msgid "Notarization request UUID: \"%s\""
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid ""
-"Note: The notarization process generally takes less than an hour. When the "
-"process is completed, you'll receive an email."
+"The notarization process generally takes less than an hour. When the process "
+"is completed, you'll receive an email."
msgstr ""
#: platform/osx/export/export.cpp
@@ -19151,18 +19273,72 @@ msgid ""
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign failed with error \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign require regex module."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Could not start codesign executable, make sure Xcode command line tools are "
+"installed."
+msgstr ""
+
+#: platform/osx/export/export.cpp platform/windows/export/export.cpp
msgid "No identity found."
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Cannot sign file %s."
+msgstr "Pogreška prilikom spremanja datoteke: %s"
+
+#: platform/osx/export/export.cpp
+msgid "Relative symlinks are not supported, exported \"%s\" might be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "DMG Creation"
+msgstr "Direkcije"
+
+#: platform/osx/export/export.cpp
+msgid "Could not start hdiutil executable."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed - file exists."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed."
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid "Creating app bundle"
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Could not find template app to export:"
+msgid "Could not find template app to export: \"%s\"."
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid export format."
+msgstr "Nevažeće ime."
+
+#: platform/osx/export/export.cpp
msgid ""
"Relative symlinks are not supported on this OS, the exported project might "
"be broken!"
@@ -19170,7 +19346,7 @@ msgstr ""
#: platform/osx/export/export.cpp
msgid ""
-"Requested template binary '%s' not found. It might be missing from your "
+"Requested template binary \"%s\" not found. It might be missing from your "
"template archive."
msgstr ""
@@ -19211,6 +19387,15 @@ msgid "Sending archive for notarization"
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "ZIP Creation"
+msgstr "Direkcije"
+
+#: platform/osx/export/export.cpp
+msgid "Could not open file to read from path \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr ""
@@ -19512,6 +19697,10 @@ msgid "Debug Algorithm"
msgstr ""
#: platform/windows/export/export.cpp
+msgid "Failed to rename temporary file \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
msgid "Identity Type"
msgstr ""
@@ -19557,6 +19746,65 @@ msgid "Trademarks"
msgstr ""
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Resources Modification"
+msgstr "Zalijepi Animaciju"
+
+#: platform/windows/export/export.cpp
+msgid "Could not find rcedit executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find wine executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start rcedit executable, configure rcedit path in the Editor "
+"Settings (Export > Windows > Rcedit)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"rcedit failed to modify executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find signtool executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find osslsigncode executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid identity type."
+msgstr "Neispravni argumenti za konstrukciju '%s'"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid timestamp server."
+msgstr "Nevažeće ime."
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start signtool executable, configure signtool path in the Editor "
+"Settings (Export > Windows > Signtool)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Signtool failed to sign executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Failed to remove temporary file \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
msgid ""
"The rcedit tool must be configured in the Editor Settings (Export > Windows "
"> Rcedit) to change the icon or app information data."
@@ -19577,6 +19825,23 @@ msgid "Invalid product version:"
msgstr "Nevažeće ime."
#: platform/windows/export/export.cpp
+msgid "Windows executables cannot be >= 4 GiB."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+#, fuzzy
+msgid "Failed to open executable file \"%s\"."
+msgstr "Nevažeće ime."
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable file header corrupted."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable \"pck\" section not found."
+msgstr ""
+
+#: platform/windows/export/export.cpp
msgid "Windows"
msgstr ""
@@ -19592,6 +19857,10 @@ msgstr ""
msgid "Wine"
msgstr ""
+#: platform/x11/export/export.cpp
+msgid "32-bit executables cannot have embedded data >= 4 GiB."
+msgstr ""
+
#: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp
#: scene/resources/texture.cpp
#, fuzzy
@@ -19707,7 +19976,8 @@ msgstr ""
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/3d/light.cpp scene/3d/reflection_probe.cpp
-#: scene/3d/visual_instance.cpp scene/resources/material.cpp
+#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp
+#: scene/resources/material.cpp
msgid "Max Distance"
msgstr ""
@@ -20449,6 +20719,18 @@ msgstr ""
msgid "Edge Connection Margin"
msgstr "Uredi vezu:"
+#: scene/2d/navigation_2d.cpp
+msgid ""
+"'Navigation2D' node and 'Navigation2D.get_simple_path()' are deprecated and "
+"will be removed in a future version. Use 'Navigation2DServer.map_get_path()' "
+"instead."
+msgstr ""
+
+#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
+#, fuzzy
+msgid "Path Desired Distance"
+msgstr "Instaliraj"
+
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
msgid "Target Desired Distance"
msgstr ""
@@ -20500,13 +20782,16 @@ msgid ""
msgstr ""
#: scene/2d/navigation_polygon.cpp
-msgid ""
-"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
-"node. It only provides navigation data."
+msgid "Navpoly"
msgstr ""
-#: scene/2d/navigation_polygon.cpp
-msgid "Navpoly"
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Enter Cost"
+msgstr "Premjesti Ävor(node)"
+
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+msgid "Travel Cost"
msgstr ""
#: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp
@@ -21596,6 +21881,13 @@ msgstr ""
msgid "Transform Normals"
msgstr "NaÄin Ravnala"
+#: scene/3d/navigation.cpp
+msgid ""
+"'Navigation' node and 'Navigation.get_simple_path()' are deprecated and will "
+"be removed in a future version. Use 'NavigationServer.map_get_path()' "
+"instead."
+msgstr ""
+
#: scene/3d/navigation.cpp scene/resources/curve.cpp
msgid "Up Vector"
msgstr ""
@@ -21617,12 +21909,6 @@ msgid ""
"The NavigationAgent can be used only under a Spatial inheriting parent node."
msgstr ""
-#: scene/3d/navigation_mesh_instance.cpp
-msgid ""
-"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
-"It only provides navigation data."
-msgstr ""
-
#: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp
msgid "NavMesh"
msgstr ""
@@ -24132,6 +24418,16 @@ msgid "3D Physics"
msgstr ""
#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "2D Navigation"
+msgstr "Navigacija"
+
+#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "3D Navigation"
+msgstr "Navigacija"
+
+#: scene/register_scene_types.cpp
msgid "Use hiDPI"
msgstr ""
@@ -25492,7 +25788,7 @@ msgstr ""
msgid "Refraction"
msgstr "Opis:"
-#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp
+#: scene/resources/material.cpp
msgid "Detail"
msgstr ""
@@ -25570,7 +25866,12 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
-msgid "Sample Partition Type"
+msgid "Sampling"
+msgstr "Upozorenje:"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Partition Type"
msgstr "Promijeni vrstu baze:"
#: scene/resources/navigation_mesh.cpp
@@ -25587,7 +25888,11 @@ msgid "Source Group Name"
msgstr "Izvor:"
#: scene/resources/navigation_mesh.cpp
-msgid "Agent"
+msgid "Cells"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
+msgid "Agents"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -25599,11 +25904,16 @@ msgid "Max Slope"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Regions"
+msgstr "Regija"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Merge Size"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Edge"
+msgid "Edges"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -25616,6 +25926,11 @@ msgid "Verts Per Poly"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Details"
+msgstr "UÄitaj Zadano"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Sample Distance"
msgstr ""
@@ -25632,9 +25947,18 @@ msgid "Ledge Spans"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Filter Walkable Low Height Spans"
+msgid "Walkable Low Height Spans"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
+msgid "Baking AABB"
msgstr ""
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB Offset"
+msgstr "Promijeni vrstu baze:"
+
#: scene/resources/occluder_shape.cpp
msgid "Spheres"
msgstr ""
@@ -26020,6 +26344,11 @@ msgid "Scenario"
msgstr ""
#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Navigation Map"
+msgstr "Navigacija"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
msgid "Direct Space State"
msgstr ""
@@ -26037,6 +26366,26 @@ msgstr "Lijevo Linearno"
msgid "Default Angular Damp"
msgstr ""
+#: scene/resources/world.cpp
+#, fuzzy
+msgid "Default Map Up"
+msgstr "Mesh2D Pregled"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Size"
+msgstr "Mesh2D Pregled"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Height"
+msgstr "Mesh2D Pregled"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Edge Connection Margin"
+msgstr "Uredi vezu:"
+
#: scene/resources/world_2d.cpp
msgid "Canvas"
msgstr ""
diff --git a/editor/translations/hu.po b/editor/translations/hu.po
index dc2f97cc7d..62f30698a3 100644
--- a/editor/translations/hu.po
+++ b/editor/translations/hu.po
@@ -23,13 +23,14 @@
# balintmaci <balintmaci@gmail.com>, 2021.
# Balázs Püspök-Kiss <pkblazsak@gmail.com>, 2021.
# Mr.Catfood <sipos22@msn.com>, 2022.
+# 6Leoo6 <leo.takacs@yahoo.com>, 2022.
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: 2022-06-03 02:51+0000\n"
-"Last-Translator: Mr.Catfood <sipos22@msn.com>\n"
+"PO-Revision-Date: 2022-06-19 11:52+0000\n"
+"Last-Translator: 6Leoo6 <leo.takacs@yahoo.com>\n"
"Language-Team: Hungarian <https://hosted.weblate.org/projects/godot-engine/"
"godot/hu/>\n"
"Language: hu\n"
@@ -37,7 +38,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.13-dev\n"
+"X-Generator: Weblate 4.13.1-dev\n"
#: core/bind/core_bind.cpp main/main.cpp
msgid "Tablet Driver"
@@ -241,9 +242,10 @@ msgid "Data"
msgstr ""
#: core/io/file_access_network.cpp core/register_core_types.cpp
-#: editor/editor_settings.cpp main/main.cpp
+#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
#: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h
+#: scene/gui/file_dialog.cpp
#, fuzzy
msgid "Network"
msgstr "Hálózati profilkészítő"
@@ -365,7 +367,7 @@ msgstr "Érvénytelen bemenet %i (nem átadott) a kifejezésben"
#: core/math/expression.cpp
msgid "self can't be used because instance is null (not passed)"
-msgstr "self nem használható, mert a példány null (nincs átadva)"
+msgstr "Nem használható self mivel nincs megadva"
#: core/math/expression.cpp
msgid "Invalid operands to operator %s, %s and %s."
@@ -405,6 +407,16 @@ msgstr ""
msgid "Max Size (KB)"
msgstr ""
+#: core/os/input.cpp
+#, fuzzy
+msgid "Mouse Mode"
+msgstr "Mozgató Mód"
+
+#: core/os/input.cpp
+#, fuzzy
+msgid "Use Accumulated Input"
+msgstr "Bemenet Törlése"
+
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: servers/audio_server.cpp
msgid "Device"
@@ -441,9 +453,8 @@ msgid "Pressed"
msgstr "Előre beállított"
#: core/os/input_event.cpp
-#, fuzzy
msgid "Scancode"
-msgstr "Keresés"
+msgstr "beolvasási kód"
#: core/os/input_event.cpp
msgid "Physical Scancode"
@@ -451,7 +462,7 @@ msgstr ""
#: core/os/input_event.cpp
msgid "Unicode"
-msgstr ""
+msgstr "Unicode"
#: core/os/input_event.cpp
msgid "Echo"
@@ -605,7 +616,8 @@ msgstr "Leírás"
#: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
-#: main/main.cpp
+#: main/main.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp
msgid "Run"
msgstr "Futtatás"
@@ -694,6 +706,11 @@ msgid "Main Run Args"
msgstr "FÅ‘ Jelenet Argumentumok:"
#: core/project_settings.cpp
+#, fuzzy
+msgid "Scene Naming"
+msgstr "Scene elérési Út:"
+
+#: core/project_settings.cpp
msgid "Search In File Extensions"
msgstr ""
@@ -701,19 +718,15 @@ msgstr ""
msgid "Script Templates Search Path"
msgstr ""
-#: core/project_settings.cpp editor/editor_node.cpp
-#: editor/plugins/version_control_editor_plugin.cpp
-msgid "Version Control"
-msgstr "Verziókezelés"
-
#: core/project_settings.cpp
-msgid "Autoload On Startup"
-msgstr ""
+#, fuzzy
+msgid "Version Control Autoload On Startup"
+msgstr "Verziókezelés"
#: core/project_settings.cpp
#, fuzzy
-msgid "Plugin Name"
-msgstr "Bővítmény neve:"
+msgid "Version Control Plugin Name"
+msgstr "Verziókezelés"
#: core/project_settings.cpp scene/2d/collision_object_2d.cpp
#: scene/3d/collision_object.cpp scene/gui/control.cpp
@@ -832,7 +845,8 @@ msgid "Quality"
msgstr ""
#: core/project_settings.cpp scene/gui/file_dialog.cpp
-#: scene/main/scene_tree.cpp servers/visual_server.cpp
+#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp
+#: servers/visual_server.cpp
#, fuzzy
msgid "Filters"
msgstr "Szűrők:"
@@ -2152,7 +2166,7 @@ msgstr "Biztosan eltávolítja az összes kapcsolatot a(z) \"%s\" jelzésről?"
#: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp
msgid "Signals"
-msgstr "Jelzések"
+msgstr "jelek"
#: editor/connections_dialog.cpp
msgid "Filter signals"
@@ -2279,8 +2293,8 @@ msgid "Open"
msgstr "Megnyitás"
#: editor/dependency_editor.cpp
-msgid "Owners Of:"
-msgstr "Tulajdonosai:"
+msgid "Owners of: %s (Total: %d)"
+msgstr ""
#: editor/dependency_editor.cpp
msgid ""
@@ -2582,7 +2596,7 @@ msgid "Bus Options"
msgstr "Busz Beállítások"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/scene_tree_dock.cpp
+#: editor/project_export.cpp editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "Megkettőzés"
@@ -2843,6 +2857,25 @@ msgid "Choose"
msgstr "Kiválaszt"
#: editor/editor_export.cpp
+msgid "Project export for platform:"
+msgstr ""
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Completed with errors."
+msgstr "Node Útvonal Másolása"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Completed successfully."
+msgstr "A csomag telepítése sikeres volt!"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed."
+msgstr "Sikertelen:"
+
+#: editor/editor_export.cpp
msgid "Storing File:"
msgstr "Tároló Fájl:"
@@ -2855,6 +2888,31 @@ msgid "Packing"
msgstr "Csomagolás"
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save PCK"
+msgstr "Mentés Másként"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Cannot create file \"%s\"."
+msgstr "Nem sikerült létrehozni a mappát."
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to export project files."
+msgstr "Az alprocesszt nem lehetett elindítani!"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Can't open file to read from path \"%s\"."
+msgstr "Nem lehet megnyitni a fájlt írásra:"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save ZIP"
+msgstr "Mentés Másként"
+
+#: editor/editor_export.cpp
msgid ""
"Target platform requires 'ETC' texture compression for GLES2. Enable 'Import "
"Etc' in Project Settings."
@@ -2974,11 +3032,32 @@ msgstr "Az egyéni hibakeresési sablon nem található."
msgid "Custom release template not found."
msgstr "Az egyéni kiadási sablon nem található."
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Prepare Template"
+msgstr "Sablonok kezelése"
+
+#: editor/editor_export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "The given export path doesn't exist."
+msgstr "A megadott útvonal nem létezik."
+
#: editor/editor_export.cpp platform/javascript/export/export.cpp
-msgid "Template file not found:"
+#, fuzzy
+msgid "Template file not found: \"%s\"."
msgstr "Sablon fájl nem található:"
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to copy export template."
+msgstr "Nem nyitható meg az export sablon zip."
+
+#: editor/editor_export.cpp platform/windows/export/export.cpp
+#: platform/x11/export/export.cpp
+msgid "PCK Embedding"
+msgstr ""
+
+#: editor/editor_export.cpp
msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB."
msgstr "32-bites exportokon a beágyazott PCK nem lehet nagyobb mint 4 GiB."
@@ -3157,9 +3236,9 @@ msgid "Import"
msgstr "Importálás"
#: editor/editor_feature_profile.cpp editor/project_export.cpp
-#: platform/android/export/export.cpp platform/javascript/export/export.cpp
-#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
-#: platform/windows/export/export.cpp
+#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#: platform/uwp/export/export.cpp platform/windows/export/export.cpp
msgid "Export"
msgstr "Exportálás"
@@ -4339,15 +4418,6 @@ msgid ""
"Unable to write to file '%s', file in use, locked or lacking permissions."
msgstr ""
-#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
-msgid "Scene"
-msgstr "Jelenet"
-
-#: editor/editor_node.cpp
-#, fuzzy
-msgid "Scene Naming"
-msgstr "Scene elérési Út:"
-
#: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp
#: servers/arvr/arvr_interface.cpp
#, fuzzy
@@ -4474,6 +4544,10 @@ msgid "Default Color Picker Mode"
msgstr ""
#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
+msgid "Version Control"
+msgstr "Verziókezelés"
+
+#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
#, fuzzy
msgid "Username"
msgstr "Ãtnevezés"
@@ -4502,6 +4576,10 @@ msgstr "Zavarmentes mód váltása."
msgid "Add a new scene."
msgstr "Hozzáad egy új jelenetet."
+#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
+msgid "Scene"
+msgstr "Jelenet"
+
#: editor/editor_node.cpp
msgid "Go to previously opened scene."
msgstr "Ugrás az előzőleg megnyitott jelenetre."
@@ -5279,6 +5357,11 @@ msgstr ""
"Nem található futtatható exportállomány ehhez a platformhoz.\n"
"Kérem adjon hozzá egy futtatható exportállományt az export menüben."
+#: editor/editor_run_native.cpp
+#, fuzzy
+msgid "Project Run"
+msgstr "Projekt"
+
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
msgstr "Ãrja a logikát a _run() metódusba."
@@ -5559,7 +5642,9 @@ msgid "Draw Spaces"
msgstr "Hívások"
#: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp
-#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp
+#: scene/main/scene_tree.cpp scene/resources/world.cpp
+#: scene/resources/world_2d.cpp
msgid "Navigation"
msgstr "Navigáció"
@@ -5813,7 +5898,7 @@ msgstr "Pont"
#: scene/resources/particles_material.cpp servers/physics_2d_server.cpp
#: servers/physics_server.cpp
msgid "Shape"
-msgstr ""
+msgstr "Alakzat"
#: editor/editor_settings.cpp
#, fuzzy
@@ -7053,7 +7138,7 @@ msgstr ""
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp
-#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp
+#: scene/gui/control.cpp
#, fuzzy
msgid "Filter"
msgstr "Szűrők:"
@@ -7072,7 +7157,7 @@ msgstr ""
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp
msgid "sRGB"
-msgstr ""
+msgstr "sRGB"
#: editor/import/resource_importer_layered_texture.cpp
#, fuzzy
@@ -7351,6 +7436,18 @@ msgid "Saving..."
msgstr "Mentés..."
#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used as a normal map in 3D. Enabling red-green "
+"texture compression to reduce memory usage (blue channel is discarded)."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap "
+"generation and VRAM texture compression."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
msgid "2D, Detect 3D"
msgstr ""
@@ -8033,11 +8130,20 @@ msgid "New Anim"
msgstr "Új Animáció"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+msgstr "Új Animáció Létrehozása"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Change Animation Name:"
msgstr "Animáció Nevének Megváltoztatása:"
#: editor/plugins/animation_player_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Rename Animation"
+msgstr "Animáció Ãtnevezése"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Delete Animation?"
msgstr "Animáció Törlése?"
@@ -8055,11 +8161,6 @@ msgid "Animation name already exists!"
msgstr "Az animáció név már létezik!"
#: editor/plugins/animation_player_editor_plugin.cpp
-#: editor/plugins/sprite_frames_editor_plugin.cpp
-msgid "Rename Animation"
-msgstr "Animáció Ãtnevezése"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate Animation"
msgstr "Animáció Megkettőzése"
@@ -8204,10 +8305,6 @@ msgid "Pin AnimationPlayer"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Create New Animation"
-msgstr "Új Animáció Létrehozása"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Name:"
msgstr "Animáció Neve:"
@@ -10319,6 +10416,7 @@ msgid "Points"
msgstr "Pontok"
#: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp
+#: scene/resources/navigation_mesh.cpp
msgid "Polygons"
msgstr "Sokszögek"
@@ -11715,8 +11813,9 @@ msgid "Invalid geometry, can't replace by mesh."
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
-msgid "Convert to Mesh2D"
-msgstr ""
+#, fuzzy
+msgid "Convert to MeshInstance2D"
+msgstr "Konvertálás CPUParticles2D-re"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Invalid geometry, can't create polygon."
@@ -12753,8 +12852,7 @@ msgid "Select the previous shape, subtile, or Tile."
msgstr ""
#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp
-#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp
-#: scene/resources/texture.cpp
+#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp
msgid "Region"
msgstr "Régió"
@@ -13241,7 +13339,7 @@ msgstr ""
#: editor/plugins/version_control_editor_plugin.cpp
msgid "SSH Passphrase"
-msgstr ""
+msgstr "SSH Passphrase"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Detect new changes"
@@ -14209,31 +14307,10 @@ 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 "Exporting All"
msgstr "Összes exportálása"
#: 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 "Export Path"
msgstr "Exportálási Útvonal"
@@ -14373,6 +14450,11 @@ msgid "Export templates for this platform are missing:"
msgstr ""
#: editor/project_export.cpp
+#, fuzzy
+msgid "Project Export"
+msgstr "Projekt Alapítói"
+
+#: editor/project_export.cpp
msgid "Manage Export Templates"
msgstr "Export Sablonok Kezelése"
@@ -16704,10 +16786,9 @@ msgstr ""
#: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp
#: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp
-#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp
-#, fuzzy
+#: scene/3d/collision_polygon.cpp
msgid "Polygon"
-msgstr "Sokszögek"
+msgstr "Sokszög"
#: modules/csg/csg_shape.cpp
msgid "Spin Degrees"
@@ -17321,7 +17402,6 @@ msgid "Use In Baked Light"
msgstr "Fény Besütése"
#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
-#: scene/resources/navigation_mesh.cpp
msgid "Cell"
msgstr ""
@@ -17351,6 +17431,19 @@ msgstr "Középre"
msgid "Mask"
msgstr ""
+#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
+#, fuzzy
+msgid "Bake Navigation"
+msgstr "Navigáció"
+
+#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp
+#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp
+#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp
+#: scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Navigation Layers"
+msgstr "Navigációs mód"
+
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Plane"
msgstr "Következő Síklap"
@@ -18128,7 +18221,7 @@ msgstr ""
#: modules/visual_script/visual_script_flow_control.cpp
msgid "While"
-msgstr ""
+msgstr "Amíg"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "while (cond):"
@@ -18457,7 +18550,7 @@ msgstr ""
#: modules/visual_script/visual_script_yield_nodes.cpp
msgid "Yield"
-msgstr ""
+msgstr "hozam"
#: modules/visual_script/visual_script_yield_nodes.cpp
msgid "Wait"
@@ -18896,10 +18989,6 @@ msgid "Could not execute on device."
msgstr "Nem sikerült létrehozni a mappát."
#: 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."
@@ -19003,12 +19092,16 @@ msgstr ""
msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version."
msgstr ""
+#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Code Signing"
+msgstr "Jelzés"
+
#: 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."
+"'apksigner' could not be found. Please check that the command is available "
+"in the Android SDK build-tools directory. The resulting %s is unsigned."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -19027,6 +19120,11 @@ msgid "Could not find keystore, unable to export."
msgstr ""
#: platform/android/export/export_plugin.cpp
+#, fuzzy
+msgid "Could not start apksigner executable."
+msgstr "Az alprocesszt nem lehetett elindítani!"
+
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
@@ -19057,7 +19155,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Unsupported export format!\n"
+msgid "Unsupported export format!"
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -19068,20 +19166,19 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Android build version mismatch:\n"
-" Template installed: %s\n"
-" Godot Version: %s\n"
+"Android build version mismatch: Template installed: %s, Godot version: %s. "
"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"
+"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 ""
+#, fuzzy
+msgid "Could not export project files to gradle project."
+msgstr "Az alprocesszt nem lehetett elindítani!"
#: platform/android/export/export_plugin.cpp
msgid "Could not write expansion package file!"
@@ -19093,7 +19190,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Building of Android project failed, check output for the error.\n"
+"Building of Android project failed, check output for the error. "
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
@@ -19109,7 +19206,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
#, fuzzy
-msgid "Package not found: %s"
+msgid "Package not found: \"%s\"."
msgstr "Az animáció nem található: '%s'"
#: platform/android/export/export_plugin.cpp
@@ -19118,15 +19215,13 @@ msgid "Creating APK..."
msgstr "Kontúrok létrehozása…"
#: platform/android/export/export_plugin.cpp
-msgid ""
-"Could not find template APK to export:\n"
-"%s"
-msgstr ""
+#, fuzzy
+msgid "Could not find template APK to export: \"%s\"."
+msgstr "Az alprocesszt nem lehetett elindítani!"
#: platform/android/export/export_plugin.cpp
msgid ""
-"Missing libraries in the export template for the selected architectures: "
-"%s.\n"
+"Missing libraries in the export template for the selected architectures: %s. "
"Please build a template with all required libraries, or uncheck the missing "
"architectures in the export preset."
msgstr ""
@@ -19138,7 +19233,7 @@ msgstr "%s Hozzáadása..."
#: platform/android/export/export_plugin.cpp
#, fuzzy
-msgid "Could not export project files"
+msgid "Could not export project files."
msgstr "Az alprocesszt nem lehetett elindítani!"
#: platform/android/export/export_plugin.cpp
@@ -19380,6 +19475,17 @@ msgstr "Node-ok kivágása"
msgid "Custom BG Color"
msgstr "Node-ok kivágása"
+#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Prepare Templates"
+msgstr "Sablonok kezelése"
+
+#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Export template not found."
+msgstr "Az egyéni kiadási sablon nem található."
+
#: platform/iphone/export/export.cpp
msgid "App Store Team ID not specified - cannot configure the project."
msgstr ""
@@ -19401,23 +19507,35 @@ msgid "Run exported HTML in the system's default browser."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not open template for export:"
-msgstr ""
+#, fuzzy
+msgid "Could not open template for export: \"%s\"."
+msgstr "Nem sikerült létrehozni a mappát."
#: platform/javascript/export/export.cpp
-msgid "Invalid export template:"
-msgstr ""
+#, fuzzy
+msgid "Invalid export template: \"%s\"."
+msgstr "Érvénytelen kiterjesztés."
#: platform/javascript/export/export.cpp
-msgid "Could not write file:"
-msgstr ""
+#, fuzzy
+msgid "Could not write file: \"%s\"."
+msgstr "Nem sikerült létrehozni a mappát."
+
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Icon Creation"
+msgstr "Margó Beállítása"
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not read file:"
+msgid "Could not read file: \"%s\"."
msgstr "Nem sikerült létrehozni a mappát."
#: platform/javascript/export/export.cpp
+msgid "PWA"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
#, fuzzy
msgid "Variant"
msgstr "Felsorolások:"
@@ -19493,17 +19611,17 @@ msgstr ""
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not read HTML shell:"
+msgid "Could not read HTML shell: \"%s\"."
msgstr "Nem sikerült létrehozni a mappát."
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not create HTTP server directory:"
+msgid "Could not create HTTP server directory: %s."
msgstr "Nem sikerült létrehozni a mappát."
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Error starting HTTP server:"
+msgid "Error starting HTTP server: %d."
msgstr "Hiba TileSet mentésekor!"
#: platform/javascript/export/export.cpp
@@ -19802,9 +19920,28 @@ msgid "Apple Team ID"
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open icon file \"%s\"."
+msgstr "Az alprocesszt nem lehetett elindítani!"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start xcrun executable."
+msgstr "Az alprocesszt nem lehetett elindítani!"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization failed."
+msgstr "Lokalizáció"
+
+#: platform/osx/export/export.cpp
+msgid "Notarization request UUID: \"%s\""
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid ""
-"Note: The notarization process generally takes less than an hour. When the "
-"process is completed, you'll receive an email."
+"The notarization process generally takes less than an hour. When the process "
+"is completed, you'll receive an email."
msgstr ""
#: platform/osx/export/export.cpp
@@ -19820,18 +19957,74 @@ msgid ""
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign failed with error \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign require regex module."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Could not start codesign executable, make sure Xcode command line tools are "
+"installed."
+msgstr ""
+
+#: platform/osx/export/export.cpp platform/windows/export/export.cpp
#, fuzzy
msgid "No identity found."
msgstr "Nincs Találat!"
#: platform/osx/export/export.cpp
#, fuzzy
+msgid "Cannot sign file %s."
+msgstr "Hiba a fájl mentésekor: %s"
+
+#: platform/osx/export/export.cpp
+msgid "Relative symlinks are not supported, exported \"%s\" might be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "DMG Creation"
+msgstr "Irányok"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start hdiutil executable."
+msgstr "Az alprocesszt nem lehetett elindítani!"
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed - file exists."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
msgid "Creating app bundle"
msgstr "Indexkép Létrehozása"
#: platform/osx/export/export.cpp
-msgid "Could not find template app to export:"
-msgstr ""
+#, fuzzy
+msgid "Could not find template app to export: \"%s\"."
+msgstr "Az alprocesszt nem lehetett elindítani!"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid export format."
+msgstr "Érvénytelen Alapútvonal."
#: platform/osx/export/export.cpp
msgid ""
@@ -19841,7 +20034,7 @@ msgstr ""
#: platform/osx/export/export.cpp
msgid ""
-"Requested template binary '%s' not found. It might be missing from your "
+"Requested template binary \"%s\" not found. It might be missing from your "
"template archive."
msgstr ""
@@ -19883,6 +20076,15 @@ msgstr ""
#: platform/osx/export/export.cpp
#, fuzzy
+msgid "ZIP Creation"
+msgstr "Projekt"
+
+#: platform/osx/export/export.cpp
+msgid "Could not open file to read from path \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
msgid "Invalid bundle identifier:"
msgstr "Érvénytelen azonosító:"
@@ -20193,6 +20395,11 @@ msgid "Debug Algorithm"
msgstr "Hibakereső"
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to rename temporary file \"%s\"."
+msgstr "Az ideiglenes fájl nem távolítható el:"
+
+#: platform/windows/export/export.cpp
msgid "Identity Type"
msgstr ""
@@ -20240,6 +20447,66 @@ msgid "Trademarks"
msgstr ""
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Resources Modification"
+msgstr "Véletlenszerű Forgatás:"
+
+#: platform/windows/export/export.cpp
+msgid "Could not find rcedit executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find wine executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start rcedit executable, configure rcedit path in the Editor "
+"Settings (Export > Windows > Rcedit)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"rcedit failed to modify executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find signtool executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find osslsigncode executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid identity type."
+msgstr "Érvénytelen azonosító:"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid timestamp server."
+msgstr "Érvénytelen név."
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start signtool executable, configure signtool path in the Editor "
+"Settings (Export > Windows > Signtool)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Signtool failed to sign executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to remove temporary file \"%s\"."
+msgstr "Az ideiglenes fájl nem távolítható el:"
+
+#: platform/windows/export/export.cpp
msgid ""
"The rcedit tool must be configured in the Editor Settings (Export > Windows "
"> Rcedit) to change the icon or app information data."
@@ -20261,6 +20528,23 @@ msgid "Invalid product version:"
msgstr "Érvénytelen termék GUID."
#: platform/windows/export/export.cpp
+msgid "Windows executables cannot be >= 4 GiB."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+#, fuzzy
+msgid "Failed to open executable file \"%s\"."
+msgstr "Érvénytelen kiterjesztés."
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable file header corrupted."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable \"pck\" section not found."
+msgstr ""
+
+#: platform/windows/export/export.cpp
#, fuzzy
msgid "Windows"
msgstr "Új ablak"
@@ -20277,6 +20561,10 @@ msgstr ""
msgid "Wine"
msgstr ""
+#: platform/x11/export/export.cpp
+msgid "32-bit executables cannot have embedded data >= 4 GiB."
+msgstr ""
+
#: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp
#: scene/resources/texture.cpp
#, fuzzy
@@ -20400,7 +20688,8 @@ msgstr ""
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/3d/light.cpp scene/3d/reflection_probe.cpp
-#: scene/3d/visual_instance.cpp scene/resources/material.cpp
+#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp
+#: scene/resources/material.cpp
#, fuzzy
msgid "Max Distance"
msgstr "Példány"
@@ -21178,6 +21467,18 @@ msgstr ""
msgid "Edge Connection Margin"
msgstr "Kapcsolat szerkesztése:"
+#: scene/2d/navigation_2d.cpp
+msgid ""
+"'Navigation2D' node and 'Navigation2D.get_simple_path()' are deprecated and "
+"will be removed in a future version. Use 'Navigation2DServer.map_get_path()' "
+"instead."
+msgstr ""
+
+#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
+#, fuzzy
+msgid "Path Desired Distance"
+msgstr "Válasszon egy Fő Jelenetet"
+
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
msgid "Target Desired Distance"
msgstr ""
@@ -21230,15 +21531,19 @@ msgid ""
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/navigation_polygon.cpp
msgid "Navpoly"
msgstr ""
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Enter Cost"
+msgstr "Középre lent"
+
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Travel Cost"
+msgstr "Utazás"
+
#: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp
#: scene/main/canvas_layer.cpp
#, fuzzy
@@ -22389,6 +22694,13 @@ msgstr ""
msgid "Transform Normals"
msgstr "Ãtalakítás Megszakítva."
+#: scene/3d/navigation.cpp
+msgid ""
+"'Navigation' node and 'Navigation.get_simple_path()' are deprecated and will "
+"be removed in a future version. Use 'NavigationServer.map_get_path()' "
+"instead."
+msgstr ""
+
#: scene/3d/navigation.cpp scene/resources/curve.cpp
#, fuzzy
msgid "Up Vector"
@@ -22412,12 +22724,6 @@ msgid ""
"The NavigationAgent can be used only under a Spatial inheriting parent node."
msgstr ""
-#: scene/3d/navigation_mesh_instance.cpp
-msgid ""
-"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
-"It only provides navigation data."
-msgstr ""
-
#: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp
#, fuzzy
msgid "NavMesh"
@@ -25063,6 +25369,16 @@ msgid "3D Physics"
msgstr "Fizika Keret %"
#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "2D Navigation"
+msgstr "Navigáció"
+
+#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "3D Navigation"
+msgstr "Navigáció"
+
+#: scene/register_scene_types.cpp
msgid "Use hiDPI"
msgstr ""
@@ -26475,7 +26791,7 @@ msgstr "Ãtmenet: "
msgid "Refraction"
msgstr "Felsorolások:"
-#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp
+#: scene/resources/material.cpp
msgid "Detail"
msgstr ""
@@ -26558,7 +26874,12 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
-msgid "Sample Partition Type"
+msgid "Sampling"
+msgstr "Skála:"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Partition Type"
msgstr "Alaptípus módosítása:"
#: scene/resources/navigation_mesh.cpp
@@ -26576,10 +26897,15 @@ msgid "Source Group Name"
msgstr "Forrás"
#: scene/resources/navigation_mesh.cpp
-msgid "Agent"
+msgid "Cells"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Agents"
+msgstr "FÅ‘ Jelenet Argumentumok:"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Max Climb"
msgstr ""
@@ -26588,11 +26914,16 @@ msgid "Max Slope"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Regions"
+msgstr "Régió"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Merge Size"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Edge"
+msgid "Edges"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -26605,6 +26936,11 @@ msgid "Verts Per Poly"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Details"
+msgstr "Alapértelmezett Betöltése"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Sample Distance"
msgstr ""
@@ -26621,9 +26957,19 @@ msgid "Ledge Spans"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Filter Walkable Low Height Spans"
+msgid "Walkable Low Height Spans"
msgstr ""
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB"
+msgstr "AABB Generálása"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB Offset"
+msgstr "Rács Eltolás:"
+
#: scene/resources/occluder_shape.cpp
msgid "Spheres"
msgstr ""
@@ -27030,6 +27376,11 @@ msgid "Scenario"
msgstr "Jelenet"
#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Navigation Map"
+msgstr "Navigáció"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
msgid "Direct Space State"
msgstr ""
@@ -27047,6 +27398,26 @@ msgstr "Bal lineáris"
msgid "Default Angular Damp"
msgstr ""
+#: scene/resources/world.cpp
+#, fuzzy
+msgid "Default Map Up"
+msgstr "Alapértelmezett"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Size"
+msgstr "Előnézet frissítése"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Height"
+msgstr "Tesztelés"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Edge Connection Margin"
+msgstr "Kapcsolat szerkesztése:"
+
#: scene/resources/world_2d.cpp
msgid "Canvas"
msgstr ""
diff --git a/editor/translations/id.po b/editor/translations/id.po
index c60a3ce184..4d71521032 100644
--- a/editor/translations/id.po
+++ b/editor/translations/id.po
@@ -237,9 +237,10 @@ msgid "Data"
msgstr "Data"
#: core/io/file_access_network.cpp core/register_core_types.cpp
-#: editor/editor_settings.cpp main/main.cpp
+#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
#: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h
+#: scene/gui/file_dialog.cpp
msgid "Network"
msgstr "Jaringan"
@@ -389,6 +390,16 @@ msgstr "Antrian Pesan"
msgid "Max Size (KB)"
msgstr "Ukuran Maksimum (KB)"
+#: core/os/input.cpp
+#, fuzzy
+msgid "Mouse Mode"
+msgstr "Mode Pindah"
+
+#: core/os/input.cpp
+#, fuzzy
+msgid "Use Accumulated Input"
+msgstr "Hapus Masukan"
+
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: servers/audio_server.cpp
msgid "Device"
@@ -568,7 +579,8 @@ msgstr "Deskripsi"
#: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
-#: main/main.cpp
+#: main/main.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp
msgid "Run"
msgstr "Jalankan"
@@ -654,6 +666,10 @@ msgid "Main Run Args"
msgstr "Jalan Utama Argumen"
#: core/project_settings.cpp
+msgid "Scene Naming"
+msgstr "Penamaan Skena"
+
+#: core/project_settings.cpp
msgid "Search In File Extensions"
msgstr "Cari dalam Ekstensi File"
@@ -661,18 +677,15 @@ msgstr "Cari dalam Ekstensi File"
msgid "Script Templates Search Path"
msgstr "Jalur Pencarian Template Skrip"
-#: core/project_settings.cpp editor/editor_node.cpp
-#: editor/plugins/version_control_editor_plugin.cpp
-msgid "Version Control"
-msgstr "Kontrol Versi"
-
#: core/project_settings.cpp
-msgid "Autoload On Startup"
+#, fuzzy
+msgid "Version Control Autoload On Startup"
msgstr "Muat Otomatis Saat Memulai"
#: core/project_settings.cpp
-msgid "Plugin Name"
-msgstr "Nama Plugin"
+#, fuzzy
+msgid "Version Control Plugin Name"
+msgstr "Kontrol Versi"
#: core/project_settings.cpp scene/2d/collision_object_2d.cpp
#: scene/3d/collision_object.cpp scene/gui/control.cpp
@@ -781,7 +794,8 @@ msgid "Quality"
msgstr "Kualitas"
#: core/project_settings.cpp scene/gui/file_dialog.cpp
-#: scene/main/scene_tree.cpp servers/visual_server.cpp
+#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp
+#: servers/visual_server.cpp
msgid "Filters"
msgstr "Filter"
@@ -2210,8 +2224,8 @@ msgid "Open"
msgstr "Buka"
#: editor/dependency_editor.cpp
-msgid "Owners Of:"
-msgstr "Pemilik Dari:"
+msgid "Owners of: %s (Total: %d)"
+msgstr ""
#: editor/dependency_editor.cpp
msgid ""
@@ -2514,7 +2528,7 @@ msgid "Bus Options"
msgstr "Pilihan Bus"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/scene_tree_dock.cpp
+#: editor/project_export.cpp editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "Gandakan"
@@ -2774,6 +2788,25 @@ msgid "Choose"
msgstr "Pilih"
#: editor/editor_export.cpp
+msgid "Project export for platform:"
+msgstr ""
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Completed with errors."
+msgstr "Salin Lokasi Node"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Completed successfully."
+msgstr "Paket Sukses Terpasang!"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed."
+msgstr "Gagal:"
+
+#: editor/editor_export.cpp
msgid "Storing File:"
msgstr "Menyimpan File:"
@@ -2786,6 +2819,31 @@ msgid "Packing"
msgstr "Mengemas"
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save PCK"
+msgstr "Simpan Sebagai"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Cannot create file \"%s\"."
+msgstr "Tidak dapat membuat folder."
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to export project files."
+msgstr "Tidak dapat ekspor berkas proyek"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Can't open file to read from path \"%s\"."
+msgstr "Tidak dapat membuka file untuk menulis:"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save ZIP"
+msgstr "Simpan Sebagai"
+
+#: editor/editor_export.cpp
msgid ""
"Target platform requires 'ETC' texture compression for GLES2. Enable 'Import "
"Etc' in Project Settings."
@@ -2905,11 +2963,33 @@ msgstr "Templat awakutu kustom tidak ditemukan."
msgid "Custom release template not found."
msgstr "Templat rilis kustom tidak ditemukan."
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Prepare Template"
+msgstr "Kelola Templat"
+
+#: editor/editor_export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "The given export path doesn't exist."
+msgstr "Lokasi ekspor yang diberikan tidak ada:"
+
#: editor/editor_export.cpp platform/javascript/export/export.cpp
-msgid "Template file not found:"
+#, fuzzy
+msgid "Template file not found: \"%s\"."
msgstr "Templat berkas tidak ditemukan:"
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to copy export template."
+msgstr "Templat ekspor tidak valid:"
+
+#: editor/editor_export.cpp platform/windows/export/export.cpp
+#: platform/x11/export/export.cpp
+#, fuzzy
+msgid "PCK Embedding"
+msgstr "Lapisan"
+
+#: editor/editor_export.cpp
msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB."
msgstr "Pada ekspor 32-bit PCK yang ditanamkan tidak boleh lebih dari 4GiB."
@@ -3084,9 +3164,9 @@ msgid "Import"
msgstr "Impor"
#: editor/editor_feature_profile.cpp editor/project_export.cpp
-#: platform/android/export/export.cpp platform/javascript/export/export.cpp
-#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
-#: platform/windows/export/export.cpp
+#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#: platform/uwp/export/export.cpp platform/windows/export/export.cpp
msgid "Export"
msgstr "Ekspor"
@@ -4251,14 +4331,6 @@ msgstr ""
"Tidak dapat menulis ke file '%s', file sedang digunakan, terkunci atau tidak "
"memiliki izin."
-#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
-msgid "Scene"
-msgstr "Scene"
-
-#: editor/editor_node.cpp
-msgid "Scene Naming"
-msgstr "Penamaan Skena"
-
#: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp
#: servers/arvr/arvr_interface.cpp
#, fuzzy
@@ -4387,6 +4459,10 @@ msgid "Default Color Picker Mode"
msgstr ""
#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
+msgid "Version Control"
+msgstr "Kontrol Versi"
+
+#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
#, fuzzy
msgid "Username"
msgstr "Ubah Nama"
@@ -4415,6 +4491,10 @@ msgstr "Toggle mode tanpa gangguan."
msgid "Add a new scene."
msgstr "Tambah skena baru."
+#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
+msgid "Scene"
+msgstr "Scene"
+
#: editor/editor_node.cpp
msgid "Go to previously opened scene."
msgstr "Pergi ke skena yang sebelumnya dibuka."
@@ -5209,6 +5289,11 @@ msgstr ""
"Tidak ada preset ekspor yang bisa digunakan untuk platform ini.\n"
"Mohon tambahkan preset yang bisa digunakan di menu ekspor."
+#: editor/editor_run_native.cpp
+#, fuzzy
+msgid "Project Run"
+msgstr "Proyek"
+
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
msgstr "Tulis logika di dalam fungsi _run()."
@@ -5489,7 +5574,9 @@ msgid "Draw Spaces"
msgstr "Gambarkan Spasi"
#: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp
-#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp
+#: scene/main/scene_tree.cpp scene/resources/world.cpp
+#: scene/resources/world_2d.cpp
msgid "Navigation"
msgstr "Navigasi"
@@ -6961,7 +7048,7 @@ msgstr "Ulang"
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp
-#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp
+#: scene/gui/control.cpp
#, fuzzy
msgid "Filter"
msgstr "Filter:"
@@ -7250,6 +7337,18 @@ msgid "Saving..."
msgstr "Menyimpan..."
#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used as a normal map in 3D. Enabling red-green "
+"texture compression to reduce memory usage (blue channel is discarded)."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap "
+"generation and VRAM texture compression."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
#, fuzzy
msgid "2D, Detect 3D"
msgstr "Deteksi 3D"
@@ -7937,11 +8036,20 @@ msgid "New Anim"
msgstr "Animasi Baru"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+msgstr "Buat Animasi Baru"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Change Animation Name:"
msgstr "Ubah Nama Animasi:"
#: editor/plugins/animation_player_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Rename Animation"
+msgstr "Ubah Nama Animasi"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Delete Animation?"
msgstr "Hapus Animasi?"
@@ -7959,11 +8067,6 @@ msgid "Animation name already exists!"
msgstr "Nama animasi sudah ada!"
#: editor/plugins/animation_player_editor_plugin.cpp
-#: editor/plugins/sprite_frames_editor_plugin.cpp
-msgid "Rename Animation"
-msgstr "Ubah Nama Animasi"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate Animation"
msgstr "Gandakan Animasi"
@@ -8107,10 +8210,6 @@ msgid "Pin AnimationPlayer"
msgstr "Sematkan AnimationPlayer"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Create New Animation"
-msgstr "Buat Animasi Baru"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Name:"
msgstr "Nama Animasi:"
@@ -10238,6 +10337,7 @@ msgid "Points"
msgstr "Titik"
#: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp
+#: scene/resources/navigation_mesh.cpp
msgid "Polygons"
msgstr "Poligon"
@@ -11626,7 +11726,8 @@ msgid "Invalid geometry, can't replace by mesh."
msgstr "Geometri tidak valid, tidak dapat diganti dengan mesh."
#: editor/plugins/sprite_editor_plugin.cpp
-msgid "Convert to Mesh2D"
+#, fuzzy
+msgid "Convert to MeshInstance2D"
msgstr "Konversikan menjadi Mesh2D"
#: editor/plugins/sprite_editor_plugin.cpp
@@ -12677,8 +12778,7 @@ msgid "Select the previous shape, subtile, or Tile."
msgstr "Pilih bentuk sebelumnya, subtile, atau Tile."
#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp
-#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp
-#: scene/resources/texture.cpp
+#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp
msgid "Region"
msgstr "Wilayah"
@@ -14222,36 +14322,10 @@ msgid "Delete preset '%s'?"
msgstr "Hapus preset '%s'?"
#: editor/project_export.cpp
-msgid ""
-"Failed to export the project for platform '%s'.\n"
-"Export templates seem to be missing or invalid."
-msgstr ""
-"Gagal mengekspor proyek untuk platform '%s'.\n"
-"Templat Ekspor kelihatannya belum terpasang atau tidak valid."
-
-#: 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 ""
-"Gagal mengekspor proyek untuk platform '%s'.\n"
-"Ini mungkin disebabkan oleh masalah konfigurasi dalam preset ekspor atau "
-"pengaturan ekspor Anda."
-
-#: editor/project_export.cpp
msgid "Exporting All"
msgstr "Mengekspor Semua"
#: editor/project_export.cpp
-msgid "The given export path doesn't exist:"
-msgstr "Lokasi ekspor yang diberikan tidak ada:"
-
-#: editor/project_export.cpp
-msgid "Export templates for this platform are missing/corrupted:"
-msgstr "Templat ekspor untuk platform ini tidak ada / rusak:"
-
-#: editor/project_export.cpp
msgid "Export Path"
msgstr "Lokasi Ekspor"
@@ -14402,6 +14476,11 @@ msgid "Export templates for this platform are missing:"
msgstr "Tidak ada templat ekspor untuk platform ini:"
#: editor/project_export.cpp
+#, fuzzy
+msgid "Project Export"
+msgstr "Penemu Proyek"
+
+#: editor/project_export.cpp
msgid "Manage Export Templates"
msgstr "Mengatur Templat Ekspor"
@@ -16826,7 +16905,7 @@ msgstr ""
#: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp
#: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp
-#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp
+#: scene/3d/collision_polygon.cpp
#, fuzzy
msgid "Polygon"
msgstr "Poligon"
@@ -17425,7 +17504,6 @@ msgid "Use In Baked Light"
msgstr "Panggang Lightmaps"
#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
-#: scene/resources/navigation_mesh.cpp
msgid "Cell"
msgstr "Sel"
@@ -17452,6 +17530,19 @@ msgstr "Pusat Z"
msgid "Mask"
msgstr ""
+#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
+#, fuzzy
+msgid "Bake Navigation"
+msgstr "Navigasi"
+
+#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp
+#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp
+#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp
+#: scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Navigation Layers"
+msgstr "Mode Navigasi"
+
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Plane"
msgstr "Dataran Selanjutnya"
@@ -19001,10 +19092,6 @@ msgid "Could not execute on device."
msgstr "Tidak dapat dijalankan di perangkat."
#: platform/android/export/export_plugin.cpp
-msgid "Unable to find the 'apksigner' tool."
-msgstr "Tak dapat menemukan perkakas 'apksigner'."
-
-#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -19125,12 +19212,16 @@ msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version."
msgstr ""
"Versi \"Target SDK\" harus lebih tinggi atau sama dengan versi \"Min SDK\"."
+#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Code Signing"
+msgstr "Sinyal"
+
#: 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."
+"'apksigner' could not be found. Please check that the command is available "
+"in the Android SDK build-tools directory. The resulting %s is unsigned."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -19146,6 +19237,11 @@ msgid "Could not find keystore, unable to export."
msgstr "Tidak dapat menemukan keystore, tidak bisa ekspor."
#: platform/android/export/export_plugin.cpp
+#, fuzzy
+msgid "Could not start apksigner executable."
+msgstr "Tidak dapat memulai subproses!"
+
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
@@ -19176,7 +19272,8 @@ msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr "Nama berkas tidak valid! APK Android memerlukan ekstensi *.apk ."
#: platform/android/export/export_plugin.cpp
-msgid "Unsupported export format!\n"
+#, fuzzy
+msgid "Unsupported export format!"
msgstr "Format ekspor tidak didukung!\n"
#: platform/android/export/export_plugin.cpp
@@ -19188,10 +19285,9 @@ msgstr ""
"versinya. Silakan pasang ulang dari menu 'Proyek'."
#: platform/android/export/export_plugin.cpp
+#, fuzzy
msgid ""
-"Android build version mismatch:\n"
-" Template installed: %s\n"
-" Godot Version: %s\n"
+"Android build version mismatch: Template installed: %s, Godot version: %s. "
"Please reinstall Android build template from 'Project' menu."
msgstr ""
"Versi build Android tidak cocok:\n"
@@ -19201,11 +19297,12 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Unable to overwrite res://android/build/res/*.xml files with project name"
+"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"
+#, fuzzy
+msgid "Could not export project files to gradle project."
msgstr "Tidak dapat menyunting proyek gradle dalam lokasi proyek\n"
#: platform/android/export/export_plugin.cpp
@@ -19217,8 +19314,9 @@ msgid "Building Android Project (gradle)"
msgstr "Membangun Proyek Android (gradle)"
#: platform/android/export/export_plugin.cpp
+#, fuzzy
msgid ""
-"Building of Android project failed, check output for the error.\n"
+"Building of Android project failed, check output for the error. "
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
"Pembangunan proyek Android gagal, periksa output untuk galatnya.\n"
@@ -19238,7 +19336,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
#, fuzzy
-msgid "Package not found: %s"
+msgid "Package not found: \"%s\"."
msgstr "Animasi tidak ditemukan: '%s'"
#: platform/android/export/export_plugin.cpp
@@ -19247,17 +19345,15 @@ msgid "Creating APK..."
msgstr "Membuat kontur..."
#: platform/android/export/export_plugin.cpp
-msgid ""
-"Could not find template APK to export:\n"
-"%s"
+#, fuzzy
+msgid "Could not find template APK to export: \"%s\"."
msgstr ""
"Tidak dapat menemukan contoh APK untuk ekspor:\n"
"%s"
#: platform/android/export/export_plugin.cpp
msgid ""
-"Missing libraries in the export template for the selected architectures: "
-"%s.\n"
+"Missing libraries in the export template for the selected architectures: %s. "
"Please build a template with all required libraries, or uncheck the missing "
"architectures in the export preset."
msgstr ""
@@ -19268,7 +19364,8 @@ msgid "Adding files..."
msgstr "Menambahkan %s..."
#: platform/android/export/export_plugin.cpp
-msgid "Could not export project files"
+#, fuzzy
+msgid "Could not export project files."
msgstr "Tidak dapat ekspor berkas proyek"
#: platform/android/export/export_plugin.cpp
@@ -19514,6 +19611,17 @@ msgstr "Potong Node"
msgid "Custom BG Color"
msgstr "Potong Node"
+#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Prepare Templates"
+msgstr "Kelola Templat"
+
+#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Export template not found."
+msgstr "Templat rilis kustom tidak ditemukan."
+
#: platform/iphone/export/export.cpp
msgid "App Store Team ID not specified - cannot configure the project."
msgstr ""
@@ -19536,22 +19644,35 @@ msgid "Run exported HTML in the system's default browser."
msgstr "Jalankan HTML yang diekspor dalam peramban baku sistem."
#: platform/javascript/export/export.cpp
-msgid "Could not open template for export:"
+#, fuzzy
+msgid "Could not open template for export: \"%s\"."
msgstr "Tidak dapat membuka templat untuk ekspor:"
#: platform/javascript/export/export.cpp
-msgid "Invalid export template:"
+#, fuzzy
+msgid "Invalid export template: \"%s\"."
msgstr "Templat ekspor tidak valid:"
#: platform/javascript/export/export.cpp
-msgid "Could not write file:"
+#, fuzzy
+msgid "Could not write file: \"%s\"."
msgstr "Tidak dapat menulis berkas:"
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Icon Creation"
+msgstr "Atur Batas"
+
#: platform/javascript/export/export.cpp
-msgid "Could not read file:"
+#, fuzzy
+msgid "Could not read file: \"%s\"."
msgstr "Tidak dapat membaca berkas:"
#: platform/javascript/export/export.cpp
+msgid "PWA"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
msgid "Variant"
msgstr "Varian"
@@ -19623,15 +19744,18 @@ msgid "Icon 512 X 512"
msgstr "Ikon 512 X 512"
#: platform/javascript/export/export.cpp
-msgid "Could not read HTML shell:"
+#, fuzzy
+msgid "Could not read HTML shell: \"%s\"."
msgstr "Tidak dapat membaca shell HTML:"
#: platform/javascript/export/export.cpp
-msgid "Could not create HTTP server directory:"
+#, fuzzy
+msgid "Could not create HTTP server directory: %s."
msgstr "Tidak dapat menciptakan direktori server HTTP:"
#: platform/javascript/export/export.cpp
-msgid "Error starting HTTP server:"
+#, fuzzy
+msgid "Error starting HTTP server: %d."
msgstr "Kesalahan memulai server HTTP:"
#: platform/javascript/export/export.cpp
@@ -19929,9 +20053,29 @@ msgid "Apple Team ID"
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open icon file \"%s\"."
+msgstr "Tidak dapat ekspor berkas proyek"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start xcrun executable."
+msgstr "Tidak dapat memulai subproses!"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization failed."
+msgstr "Notarisasi"
+
+#: platform/osx/export/export.cpp
+msgid "Notarization request UUID: \"%s\""
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
msgid ""
-"Note: The notarization process generally takes less than an hour. When the "
-"process is completed, you'll receive an email."
+"The notarization process generally takes less than an hour. When the process "
+"is completed, you'll receive an email."
msgstr ""
"Catatan: Proses notaris umumnya memakan waktu kurang dari satu jam. Ketika "
"proses selesai, Anda akan menerima email."
@@ -19953,18 +20097,74 @@ msgstr ""
"diekspor (opsional):"
#: platform/osx/export/export.cpp
+msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign failed with error \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign require regex module."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Could not start codesign executable, make sure Xcode command line tools are "
+"installed."
+msgstr ""
+
+#: platform/osx/export/export.cpp platform/windows/export/export.cpp
msgid "No identity found."
msgstr "Identitas tidak ditemukan."
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Cannot sign file %s."
+msgstr "Error menyimpan berkas: %s"
+
+#: platform/osx/export/export.cpp
+msgid "Relative symlinks are not supported, exported \"%s\" might be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "DMG Creation"
+msgstr "Arah"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start hdiutil executable."
+msgstr "Tidak dapat memulai subproses!"
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed - file exists."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed."
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid "Creating app bundle"
msgstr "Membuat bundel aplikasi"
#: platform/osx/export/export.cpp
-msgid "Could not find template app to export:"
+#, fuzzy
+msgid "Could not find template app to export: \"%s\"."
msgstr "Tidak dapat menemukan contoh APK untuk ekspor:"
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid export format."
+msgstr "Templat ekspor tidak valid:"
+
+#: platform/osx/export/export.cpp
msgid ""
"Relative symlinks are not supported on this OS, the exported project might "
"be broken!"
@@ -19972,7 +20172,7 @@ msgstr ""
#: platform/osx/export/export.cpp
msgid ""
-"Requested template binary '%s' not found. It might be missing from your "
+"Requested template binary \"%s\" not found. It might be missing from your "
"template archive."
msgstr ""
@@ -20015,6 +20215,16 @@ msgid "Sending archive for notarization"
msgstr "Mengirim arsip untuk notaris"
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "ZIP Creation"
+msgstr "Proyeksi"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open file to read from path \"%s\"."
+msgstr "Tidak dapat menyunting proyek gradle dalam lokasi proyek\n"
+
+#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr "Identifier bundel tidak valid:"
@@ -20334,6 +20544,11 @@ msgid "Debug Algorithm"
msgstr "Algoritma Awakutu"
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to rename temporary file \"%s\"."
+msgstr "Tidak dapat menghapus berkas sementara:"
+
+#: platform/windows/export/export.cpp
msgid "Identity Type"
msgstr "Tipe Identitas"
@@ -20376,6 +20591,70 @@ msgid "Trademarks"
msgstr "Merek Dagang"
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Resources Modification"
+msgstr "Perputaran Acak:"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find rcedit executable at \"%s\"."
+msgstr "Tidak dapat menemukan keystore, tidak bisa ekspor."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find wine executable at \"%s\"."
+msgstr "Tidak dapat menemukan keystore, tidak bisa ekspor."
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start rcedit executable, configure rcedit path in the Editor "
+"Settings (Export > Windows > Rcedit)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"rcedit failed to modify executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find signtool executable at \"%s\"."
+msgstr "Tidak dapat menemukan keystore, tidak bisa ekspor."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find osslsigncode executable at \"%s\"."
+msgstr "Tidak dapat menemukan keystore, tidak bisa ekspor."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid identity type."
+msgstr "Tipe Identitas"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid timestamp server."
+msgstr "Nama tidak sah."
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start signtool executable, configure signtool path in the Editor "
+"Settings (Export > Windows > Signtool)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Signtool failed to sign executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to remove temporary file \"%s\"."
+msgstr "Tidak dapat menghapus berkas sementara:"
+
+#: platform/windows/export/export.cpp
msgid ""
"The rcedit tool must be configured in the Editor Settings (Export > Windows "
"> Rcedit) to change the icon or app information data."
@@ -20394,6 +20673,23 @@ msgid "Invalid product version:"
msgstr "Versi produk tidak valid:"
#: platform/windows/export/export.cpp
+msgid "Windows executables cannot be >= 4 GiB."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+#, fuzzy
+msgid "Failed to open executable file \"%s\"."
+msgstr "Ekstensi tidak valid."
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable file header corrupted."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable \"pck\" section not found."
+msgstr ""
+
+#: platform/windows/export/export.cpp
#, fuzzy
msgid "Windows"
msgstr "Jendela Baru"
@@ -20410,6 +20706,10 @@ msgstr ""
msgid "Wine"
msgstr ""
+#: platform/x11/export/export.cpp
+msgid "32-bit executables cannot have embedded data >= 4 GiB."
+msgstr ""
+
#: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp
#: scene/resources/texture.cpp
msgid "Frames"
@@ -20533,7 +20833,8 @@ msgstr ""
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/3d/light.cpp scene/3d/reflection_probe.cpp
-#: scene/3d/visual_instance.cpp scene/resources/material.cpp
+#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp
+#: scene/resources/material.cpp
msgid "Max Distance"
msgstr "Jarak Maks"
@@ -21317,6 +21618,18 @@ msgstr ""
msgid "Edge Connection Margin"
msgstr "Sunting Koneksi:"
+#: scene/2d/navigation_2d.cpp
+msgid ""
+"'Navigation2D' node and 'Navigation2D.get_simple_path()' are deprecated and "
+"will be removed in a future version. Use 'Navigation2DServer.map_get_path()' "
+"instead."
+msgstr ""
+
+#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
+#, fuzzy
+msgid "Path Desired Distance"
+msgstr "Target Jarak yang Diinginkan"
+
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
msgid "Target Desired Distance"
msgstr "Target Jarak yang Diinginkan"
@@ -21376,17 +21689,19 @@ msgstr ""
"ini bekerja. Silakan atur sebuah properti atau gambar sebuah polygon."
#: scene/2d/navigation_polygon.cpp
-msgid ""
-"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
-"node. It only provides navigation data."
-msgstr ""
-"NavigationPolygonInstance harus menjadi sebuah child atau grandchild ke "
-"sebuah node Navigation2D. Ini hanya menyediakan data navigasi."
-
-#: scene/2d/navigation_polygon.cpp
msgid "Navpoly"
msgstr ""
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Enter Cost"
+msgstr "Bawah Tengah"
+
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Travel Cost"
+msgstr "Menjelajah"
+
#: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp
#: scene/main/canvas_layer.cpp
msgid "Rotation Degrees"
@@ -22546,6 +22861,13 @@ msgstr ""
msgid "Transform Normals"
msgstr "Transformasi Dibatalkan."
+#: scene/3d/navigation.cpp
+msgid ""
+"'Navigation' node and 'Navigation.get_simple_path()' are deprecated and will "
+"be removed in a future version. Use 'NavigationServer.map_get_path()' "
+"instead."
+msgstr ""
+
#: scene/3d/navigation.cpp scene/resources/curve.cpp
msgid "Up Vector"
msgstr "Vektor Atas"
@@ -22569,14 +22891,6 @@ msgid ""
"The NavigationAgent can be used only under a Spatial inheriting parent node."
msgstr "NavigationAgent hanya dapat digunakan di bawah node spasial."
-#: scene/3d/navigation_mesh_instance.cpp
-msgid ""
-"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
-"It only provides navigation data."
-msgstr ""
-"NavigationMeshInstance harus menjadi child atau grandchild untuk sebuah node "
-"Navigation. Ini hanya menyediakan data navigasi."
-
#: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp
#, fuzzy
msgid "NavMesh"
@@ -25307,6 +25621,16 @@ msgid "3D Physics"
msgstr "Fisika"
#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "2D Navigation"
+msgstr "Navigasi"
+
+#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "3D Navigation"
+msgstr "Navigasi"
+
+#: scene/register_scene_types.cpp
msgid "Use hiDPI"
msgstr ""
@@ -26736,7 +27060,7 @@ msgstr "Transisi: "
msgid "Refraction"
msgstr "Enumerasi:"
-#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp
+#: scene/resources/material.cpp
msgid "Detail"
msgstr ""
@@ -26821,7 +27145,12 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
-msgid "Sample Partition Type"
+msgid "Sampling"
+msgstr "Penskalaan: "
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Partition Type"
msgstr "Atur Jenis variabel"
#: scene/resources/navigation_mesh.cpp
@@ -26838,8 +27167,14 @@ msgid "Source Group Name"
msgstr "Sumber"
#: scene/resources/navigation_mesh.cpp
-msgid "Agent"
-msgstr ""
+#, fuzzy
+msgid "Cells"
+msgstr "Sel"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Agents"
+msgstr "Argumen Skena Utama:"
#: scene/resources/navigation_mesh.cpp
msgid "Max Climb"
@@ -26851,11 +27186,16 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
+msgid "Regions"
+msgstr "Wilayah"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
msgid "Merge Size"
msgstr "Gabung dari Skena"
#: scene/resources/navigation_mesh.cpp
-msgid "Edge"
+msgid "Edges"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -26868,6 +27208,11 @@ msgid "Verts Per Poly"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Details"
+msgstr "Detail Bayangan"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Sample Distance"
msgstr "Jarak sampel"
@@ -26885,9 +27230,19 @@ msgid "Ledge Spans"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Filter Walkable Low Height Spans"
+msgid "Walkable Low Height Spans"
msgstr ""
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB"
+msgstr "Membuat AABB"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB Offset"
+msgstr "Pengimbangan:"
+
#: scene/resources/occluder_shape.cpp
msgid "Spheres"
msgstr ""
@@ -27292,6 +27647,11 @@ msgid "Scenario"
msgstr "Skena"
#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Navigation Map"
+msgstr "Navigasi"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
msgid "Direct Space State"
msgstr ""
@@ -27309,6 +27669,26 @@ msgstr "Linier ke Kiri"
msgid "Default Angular Damp"
msgstr ""
+#: scene/resources/world.cpp
+#, fuzzy
+msgid "Default Map Up"
+msgstr "Langkah Desimal Baku"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Size"
+msgstr "Perbarui Pratinjau"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Height"
+msgstr "Menguji"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Edge Connection Margin"
+msgstr "Sunting Koneksi:"
+
#: scene/resources/world_2d.cpp
msgid "Canvas"
msgstr ""
diff --git a/editor/translations/is.po b/editor/translations/is.po
index c9cdcef9bb..105220c71e 100644
--- a/editor/translations/is.po
+++ b/editor/translations/is.po
@@ -209,9 +209,10 @@ msgid "Data"
msgstr ""
#: core/io/file_access_network.cpp core/register_core_types.cpp
-#: editor/editor_settings.cpp main/main.cpp
+#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
#: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h
+#: scene/gui/file_dialog.cpp
msgid "Network"
msgstr ""
@@ -366,6 +367,15 @@ msgstr ""
msgid "Max Size (KB)"
msgstr ""
+#: core/os/input.cpp
+#, fuzzy
+msgid "Mouse Mode"
+msgstr "Breyta Viðbót"
+
+#: core/os/input.cpp
+msgid "Use Accumulated Input"
+msgstr ""
+
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: servers/audio_server.cpp
msgid "Device"
@@ -551,7 +561,8 @@ msgstr ""
#: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
-#: main/main.cpp
+#: main/main.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp
msgid "Run"
msgstr ""
@@ -636,24 +647,23 @@ msgid "Main Run Args"
msgstr ""
#: core/project_settings.cpp
-msgid "Search In File Extensions"
+msgid "Scene Naming"
msgstr ""
#: core/project_settings.cpp
-msgid "Script Templates Search Path"
+msgid "Search In File Extensions"
msgstr ""
-#: core/project_settings.cpp editor/editor_node.cpp
-#: editor/plugins/version_control_editor_plugin.cpp
-msgid "Version Control"
+#: core/project_settings.cpp
+msgid "Script Templates Search Path"
msgstr ""
#: core/project_settings.cpp
-msgid "Autoload On Startup"
+msgid "Version Control Autoload On Startup"
msgstr ""
#: core/project_settings.cpp
-msgid "Plugin Name"
+msgid "Version Control Plugin Name"
msgstr ""
#: core/project_settings.cpp scene/2d/collision_object_2d.cpp
@@ -762,7 +772,8 @@ msgid "Quality"
msgstr ""
#: core/project_settings.cpp scene/gui/file_dialog.cpp
-#: scene/main/scene_tree.cpp servers/visual_server.cpp
+#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp
+#: servers/visual_server.cpp
#, fuzzy
msgid "Filters"
msgstr "Verkefna Stjóri"
@@ -2193,7 +2204,7 @@ msgid "Open"
msgstr ""
#: editor/dependency_editor.cpp
-msgid "Owners Of:"
+msgid "Owners of: %s (Total: %d)"
msgstr ""
#: editor/dependency_editor.cpp
@@ -2487,7 +2498,7 @@ msgid "Bus Options"
msgstr "Val á kvarða"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/scene_tree_dock.cpp
+#: editor/project_export.cpp editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr ""
@@ -2743,6 +2754,22 @@ msgid "Choose"
msgstr ""
#: editor/editor_export.cpp
+msgid "Project export for platform:"
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Completed with errors."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Completed successfully."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Failed."
+msgstr ""
+
+#: editor/editor_export.cpp
msgid "Storing File:"
msgstr ""
@@ -2755,6 +2782,27 @@ msgid "Packing"
msgstr ""
#: editor/editor_export.cpp
+msgid "Save PCK"
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Cannot create file \"%s\"."
+msgstr ""
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to export project files."
+msgstr "Verkefna Stjóri"
+
+#: editor/editor_export.cpp
+msgid "Can't open file to read from path \"%s\"."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Save ZIP"
+msgstr ""
+
+#: editor/editor_export.cpp
msgid ""
"Target platform requires 'ETC' texture compression for GLES2. Enable 'Import "
"Etc' in Project Settings."
@@ -2858,8 +2906,25 @@ msgstr ""
msgid "Custom release template not found."
msgstr ""
+#: editor/editor_export.cpp
+msgid "Prepare Template"
+msgstr ""
+
+#: editor/editor_export.cpp platform/osx/export/export.cpp
+msgid "The given export path doesn't exist."
+msgstr ""
+
#: editor/editor_export.cpp platform/javascript/export/export.cpp
-msgid "Template file not found:"
+msgid "Template file not found: \"%s\"."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Failed to copy export template."
+msgstr ""
+
+#: editor/editor_export.cpp platform/windows/export/export.cpp
+#: platform/x11/export/export.cpp
+msgid "PCK Embedding"
msgstr ""
#: editor/editor_export.cpp
@@ -3033,9 +3098,9 @@ msgid "Import"
msgstr ""
#: editor/editor_feature_profile.cpp editor/project_export.cpp
-#: platform/android/export/export.cpp platform/javascript/export/export.cpp
-#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
-#: platform/windows/export/export.cpp
+#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#: platform/uwp/export/export.cpp platform/windows/export/export.cpp
msgid "Export"
msgstr ""
@@ -4121,14 +4186,6 @@ msgid ""
"Unable to write to file '%s', file in use, locked or lacking permissions."
msgstr ""
-#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
-msgid "Scene"
-msgstr ""
-
-#: editor/editor_node.cpp
-msgid "Scene Naming"
-msgstr ""
-
#: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp
#: servers/arvr/arvr_interface.cpp
msgid "Interface"
@@ -4249,6 +4306,10 @@ msgid "Default Color Picker Mode"
msgstr ""
#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
+msgid "Version Control"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
#, fuzzy
msgid "Username"
msgstr "Endurnefning Anim track"
@@ -4277,6 +4338,10 @@ msgstr ""
msgid "Add a new scene."
msgstr ""
+#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
+msgid "Scene"
+msgstr ""
+
#: editor/editor_node.cpp
msgid "Go to previously opened scene."
msgstr ""
@@ -5012,6 +5077,11 @@ msgid ""
"as runnable."
msgstr ""
+#: editor/editor_run_native.cpp
+#, fuzzy
+msgid "Project Run"
+msgstr "Verkefna Stjóri"
+
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
msgstr ""
@@ -5270,7 +5340,9 @@ msgid "Draw Spaces"
msgstr ""
#: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp
-#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp
+#: scene/main/scene_tree.cpp scene/resources/world.cpp
+#: scene/resources/world_2d.cpp
#, fuzzy
msgid "Navigation"
msgstr "Breyta Viðbót"
@@ -6679,7 +6751,7 @@ msgstr ""
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp
-#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp
+#: scene/gui/control.cpp
#, fuzzy
msgid "Filter"
msgstr "Verkefna Stjóri"
@@ -6955,6 +7027,18 @@ msgid "Saving..."
msgstr ""
#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used as a normal map in 3D. Enabling red-green "
+"texture compression to reduce memory usage (blue channel is discarded)."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap "
+"generation and VRAM texture compression."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
msgid "2D, Detect 3D"
msgstr ""
@@ -7623,11 +7707,20 @@ msgid "New Anim"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+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 "Rename Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Delete Animation?"
msgstr ""
@@ -7645,11 +7738,6 @@ 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 "Duplicate Animation"
msgstr ""
@@ -7793,10 +7881,6 @@ msgid "Pin AnimationPlayer"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Create New Animation"
-msgstr ""
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Name:"
msgstr ""
@@ -9875,6 +9959,7 @@ msgid "Points"
msgstr ""
#: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp
+#: scene/resources/navigation_mesh.cpp
#, fuzzy
msgid "Polygons"
msgstr "Breyta Viðbót"
@@ -11237,8 +11322,9 @@ msgid "Invalid geometry, can't replace by mesh."
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
-msgid "Convert to Mesh2D"
-msgstr ""
+#, fuzzy
+msgid "Convert to MeshInstance2D"
+msgstr "Hreyfa Viðbótar Lykil"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Invalid geometry, can't create polygon."
@@ -12226,8 +12312,7 @@ msgid "Select the previous shape, subtile, or Tile."
msgstr ""
#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp
-#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp
-#: scene/resources/texture.cpp
+#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp
msgid "Region"
msgstr ""
@@ -13686,31 +13771,10 @@ 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 "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 "Export Path"
msgstr ""
@@ -13847,6 +13911,11 @@ msgid "Export templates for this platform are missing:"
msgstr ""
#: editor/project_export.cpp
+#, fuzzy
+msgid "Project Export"
+msgstr "Verkefna Stjóri"
+
+#: editor/project_export.cpp
msgid "Manage Export Templates"
msgstr ""
@@ -16132,7 +16201,7 @@ msgstr ""
#: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp
#: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp
-#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp
+#: scene/3d/collision_polygon.cpp
#, fuzzy
msgid "Polygon"
msgstr "Breyta Viðbót"
@@ -16705,7 +16774,6 @@ msgid "Use In Baked Light"
msgstr ""
#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
-#: scene/resources/navigation_mesh.cpp
msgid "Cell"
msgstr ""
@@ -16734,6 +16802,19 @@ msgstr "Anim DELETE-lyklar"
msgid "Mask"
msgstr ""
+#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
+#, fuzzy
+msgid "Bake Navigation"
+msgstr "Breyta Viðbót"
+
+#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp
+#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp
+#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp
+#: scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Navigation Layers"
+msgstr "Breyta Viðbót"
+
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Plane"
msgstr ""
@@ -18204,10 +18285,6 @@ 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."
@@ -18311,12 +18388,16 @@ msgstr ""
msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version."
msgstr ""
+#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Code Signing"
+msgstr "Tvíteknir lyklar"
+
#: 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."
+"'apksigner' could not be found. Please check that the command is available "
+"in the Android SDK build-tools directory. The resulting %s is unsigned."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18332,6 +18413,10 @@ msgid "Could not find keystore, unable to export."
msgstr ""
#: platform/android/export/export_plugin.cpp
+msgid "Could not start apksigner executable."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
@@ -18360,7 +18445,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Unsupported export format!\n"
+msgid "Unsupported export format!"
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18371,19 +18456,17 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Android build version mismatch:\n"
-" Template installed: %s\n"
-" Godot Version: %s\n"
+"Android build version mismatch: Template installed: %s, Godot version: %s. "
"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"
+"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"
+msgid "Could not export project files to gradle project."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18396,7 +18479,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Building of Android project failed, check output for the error.\n"
+"Building of Android project failed, check output for the error. "
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
@@ -18411,7 +18494,7 @@ msgid ""
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Package not found: %s"
+msgid "Package not found: \"%s\"."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18419,15 +18502,12 @@ msgid "Creating APK..."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid ""
-"Could not find template APK to export:\n"
-"%s"
+msgid "Could not find template APK to export: \"%s\"."
msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Missing libraries in the export template for the selected architectures: "
-"%s.\n"
+"Missing libraries in the export template for the selected architectures: %s. "
"Please build a template with all required libraries, or uncheck the missing "
"architectures in the export preset."
msgstr ""
@@ -18437,7 +18517,7 @@ msgid "Adding files..."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Could not export project files"
+msgid "Could not export project files."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18670,6 +18750,15 @@ msgstr "Tvíteknir lyklar"
msgid "Custom BG Color"
msgstr "Tvíteknir lyklar"
+#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
+#: platform/osx/export/export.cpp
+msgid "Prepare Templates"
+msgstr ""
+
+#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
+msgid "Export template not found."
+msgstr ""
+
#: platform/iphone/export/export.cpp
msgid "App Store Team ID not specified - cannot configure the project."
msgstr ""
@@ -18691,19 +18780,28 @@ msgid "Run exported HTML in the system's default browser."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not open template for export:"
+msgid "Could not open template for export: \"%s\"."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Invalid export template:"
+msgid "Invalid export template: \"%s\"."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not write file:"
+msgid "Could not write file: \"%s\"."
+msgstr ""
+
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Icon Creation"
+msgstr "Breyta Tengingu: "
+
+#: platform/javascript/export/export.cpp
+msgid "Could not read file: \"%s\"."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not read file:"
+msgid "PWA"
msgstr ""
#: platform/javascript/export/export.cpp
@@ -18780,15 +18878,15 @@ msgid "Icon 512 X 512"
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not read HTML shell:"
+msgid "Could not read HTML shell: \"%s\"."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not create HTTP server directory:"
+msgid "Could not create HTTP server directory: %s."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Error starting HTTP server:"
+msgid "Error starting HTTP server: %d."
msgstr ""
#: platform/javascript/export/export.cpp
@@ -19063,9 +19161,26 @@ msgid "Apple Team ID"
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Could not open icon file \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Could not start xcrun executable."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization failed."
+msgstr "Breyta Viðbót"
+
+#: platform/osx/export/export.cpp
+msgid "Notarization request UUID: \"%s\""
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid ""
-"Note: The notarization process generally takes less than an hour. When the "
-"process is completed, you'll receive an email."
+"The notarization process generally takes less than an hour. When the process "
+"is completed, you'll receive an email."
msgstr ""
#: platform/osx/export/export.cpp
@@ -19081,18 +19196,71 @@ msgid ""
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign failed with error \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign require regex module."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Could not start codesign executable, make sure Xcode command line tools are "
+"installed."
+msgstr ""
+
+#: platform/osx/export/export.cpp platform/windows/export/export.cpp
msgid "No identity found."
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Cannot sign file %s."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Relative symlinks are not supported, exported \"%s\" might be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "DMG Creation"
+msgstr "Allt úrvalið"
+
+#: platform/osx/export/export.cpp
+msgid "Could not start hdiutil executable."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed - file exists."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed."
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid "Creating app bundle"
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Could not find template app to export:"
+msgid "Could not find template app to export: \"%s\"."
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid export format."
+msgstr "Breyta umbreytingu"
+
+#: platform/osx/export/export.cpp
msgid ""
"Relative symlinks are not supported on this OS, the exported project might "
"be broken!"
@@ -19100,7 +19268,7 @@ msgstr ""
#: platform/osx/export/export.cpp
msgid ""
-"Requested template binary '%s' not found. It might be missing from your "
+"Requested template binary \"%s\" not found. It might be missing from your "
"template archive."
msgstr ""
@@ -19141,6 +19309,15 @@ msgid "Sending archive for notarization"
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "ZIP Creation"
+msgstr "Verkefna Stjóri"
+
+#: platform/osx/export/export.cpp
+msgid "Could not open file to read from path \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr ""
@@ -19439,6 +19616,10 @@ msgid "Debug Algorithm"
msgstr ""
#: platform/windows/export/export.cpp
+msgid "Failed to rename temporary file \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
msgid "Identity Type"
msgstr ""
@@ -19482,6 +19663,62 @@ msgid "Trademarks"
msgstr ""
#: platform/windows/export/export.cpp
+msgid "Resources Modification"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find rcedit executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find wine executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start rcedit executable, configure rcedit path in the Editor "
+"Settings (Export > Windows > Rcedit)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"rcedit failed to modify executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find signtool executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find osslsigncode executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Invalid identity type."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Invalid timestamp server."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start signtool executable, configure signtool path in the Editor "
+"Settings (Export > Windows > Signtool)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Signtool failed to sign executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Failed to remove temporary file \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
msgid ""
"The rcedit tool must be configured in the Editor Settings (Export > Windows "
"> Rcedit) to change the icon or app information data."
@@ -19500,6 +19737,22 @@ msgid "Invalid product version:"
msgstr ""
#: platform/windows/export/export.cpp
+msgid "Windows executables cannot be >= 4 GiB."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Failed to open executable file \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable file header corrupted."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable \"pck\" section not found."
+msgstr ""
+
+#: platform/windows/export/export.cpp
msgid "Windows"
msgstr ""
@@ -19515,6 +19768,10 @@ msgstr ""
msgid "Wine"
msgstr ""
+#: platform/x11/export/export.cpp
+msgid "32-bit executables cannot have embedded data >= 4 GiB."
+msgstr ""
+
#: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp
#: scene/resources/texture.cpp
#, fuzzy
@@ -19628,7 +19885,8 @@ msgstr ""
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/3d/light.cpp scene/3d/reflection_probe.cpp
-#: scene/3d/visual_instance.cpp scene/resources/material.cpp
+#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp
+#: scene/resources/material.cpp
msgid "Max Distance"
msgstr ""
@@ -20359,6 +20617,17 @@ msgstr ""
msgid "Edge Connection Margin"
msgstr "Breyta Tengingu: "
+#: scene/2d/navigation_2d.cpp
+msgid ""
+"'Navigation2D' node and 'Navigation2D.get_simple_path()' are deprecated and "
+"will be removed in a future version. Use 'Navigation2DServer.map_get_path()' "
+"instead."
+msgstr ""
+
+#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
+msgid "Path Desired Distance"
+msgstr ""
+
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
msgid "Target Desired Distance"
msgstr ""
@@ -20410,13 +20679,16 @@ msgid ""
msgstr ""
#: scene/2d/navigation_polygon.cpp
-msgid ""
-"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
-"node. It only provides navigation data."
+msgid "Navpoly"
msgstr ""
-#: scene/2d/navigation_polygon.cpp
-msgid "Navpoly"
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Enter Cost"
+msgstr "Anim DELETE-lyklar"
+
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+msgid "Travel Cost"
msgstr ""
#: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp
@@ -21494,6 +21766,13 @@ msgstr ""
msgid "Transform Normals"
msgstr ""
+#: scene/3d/navigation.cpp
+msgid ""
+"'Navigation' node and 'Navigation.get_simple_path()' are deprecated and will "
+"be removed in a future version. Use 'NavigationServer.map_get_path()' "
+"instead."
+msgstr ""
+
#: scene/3d/navigation.cpp scene/resources/curve.cpp
msgid "Up Vector"
msgstr ""
@@ -21515,12 +21794,6 @@ msgid ""
"The NavigationAgent can be used only under a Spatial inheriting parent node."
msgstr ""
-#: scene/3d/navigation_mesh_instance.cpp
-msgid ""
-"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
-"It only provides navigation data."
-msgstr ""
-
#: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp
msgid "NavMesh"
msgstr ""
@@ -23959,6 +24232,16 @@ msgid "3D Physics"
msgstr ""
#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "2D Navigation"
+msgstr "Breyta Viðbót"
+
+#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "3D Navigation"
+msgstr "Breyta Viðbót"
+
+#: scene/register_scene_types.cpp
msgid "Use hiDPI"
msgstr ""
@@ -25292,7 +25575,7 @@ msgstr "Stillið breyting á:"
msgid "Refraction"
msgstr "Stillið breyting á:"
-#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp
+#: scene/resources/material.cpp
msgid "Detail"
msgstr ""
@@ -25368,8 +25651,14 @@ msgid "Visible Instance Count"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Sample Partition Type"
-msgstr ""
+#, fuzzy
+msgid "Sampling"
+msgstr "Val á kvarða"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Partition Type"
+msgstr "Stillið breyting á:"
#: scene/resources/navigation_mesh.cpp
msgid "Parsed Geometry Type"
@@ -25384,7 +25673,11 @@ msgid "Source Group Name"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Agent"
+msgid "Cells"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
+msgid "Agents"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -25396,11 +25689,16 @@ msgid "Max Slope"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Regions"
+msgstr "Afrita val"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Merge Size"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Edge"
+msgid "Edges"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -25412,6 +25710,10 @@ msgid "Verts Per Poly"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+msgid "Details"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
msgid "Sample Distance"
msgstr ""
@@ -25428,9 +25730,18 @@ msgid "Ledge Spans"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Filter Walkable Low Height Spans"
+msgid "Walkable Low Height Spans"
msgstr ""
+#: scene/resources/navigation_mesh.cpp
+msgid "Baking AABB"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB Offset"
+msgstr "Fjarlægja val"
+
#: scene/resources/occluder_shape.cpp
msgid "Spheres"
msgstr ""
@@ -25810,6 +26121,11 @@ msgid "Scenario"
msgstr ""
#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Navigation Map"
+msgstr "Breyta Viðbót"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
msgid "Direct Space State"
msgstr ""
@@ -25825,6 +26141,26 @@ msgstr ""
msgid "Default Angular Damp"
msgstr ""
+#: scene/resources/world.cpp
+#, fuzzy
+msgid "Default Map Up"
+msgstr "Afrita val"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Size"
+msgstr "Afrita val"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Height"
+msgstr "Afrita val"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Edge Connection Margin"
+msgstr "Breyta Tengingu: "
+
#: scene/resources/world_2d.cpp
msgid "Canvas"
msgstr ""
diff --git a/editor/translations/it.po b/editor/translations/it.po
index e01ce11900..074bb4259d 100644
--- a/editor/translations/it.po
+++ b/editor/translations/it.po
@@ -73,7 +73,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: 2022-06-08 06:48+0000\n"
+"PO-Revision-Date: 2022-06-26 16:16+0000\n"
"Last-Translator: Mirko <miknsop@gmail.com>\n"
"Language-Team: Italian <https://hosted.weblate.org/projects/godot-engine/"
"godot/it/>\n"
@@ -82,7 +82,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.13-dev\n"
+"X-Generator: Weblate 4.13.1-dev\n"
#: core/bind/core_bind.cpp main/main.cpp
msgid "Tablet Driver"
@@ -266,9 +266,10 @@ msgid "Data"
msgstr "Dati"
#: core/io/file_access_network.cpp core/register_core_types.cpp
-#: editor/editor_settings.cpp main/main.cpp
+#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
#: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h
+#: scene/gui/file_dialog.cpp
msgid "Network"
msgstr "Reti"
@@ -374,7 +375,7 @@ msgstr "Byte insufficienti per decodificarli o formato non valido."
#: core/math/expression.cpp
#, fuzzy
msgid "Invalid input %d (not passed) in expression"
-msgstr "Input %i non valido (assente) nell'espressione"
+msgstr "Input %d non valido (assente) nell'espressione"
#: core/math/expression.cpp
msgid "self can't be used because instance is null (not passed)"
@@ -417,6 +418,16 @@ msgstr "Coda Messaggi"
msgid "Max Size (KB)"
msgstr "Dimensione Massima (KB)"
+#: core/os/input.cpp
+#, fuzzy
+msgid "Mouse Mode"
+msgstr "Modalità spostamento"
+
+#: core/os/input.cpp
+#, fuzzy
+msgid "Use Accumulated Input"
+msgstr "Elimina Input"
+
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: servers/audio_server.cpp
msgid "Device"
@@ -596,7 +607,8 @@ msgstr "Descrizione"
#: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
-#: main/main.cpp
+#: main/main.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp
msgid "Run"
msgstr "Esegui"
@@ -681,6 +693,10 @@ msgid "Main Run Args"
msgstr "Parametri Principali Eseguiti"
#: core/project_settings.cpp
+msgid "Scene Naming"
+msgstr "Nome Scena"
+
+#: core/project_settings.cpp
msgid "Search In File Extensions"
msgstr "Cerca nelle Estensioni dei File"
@@ -688,18 +704,15 @@ msgstr "Cerca nelle Estensioni dei File"
msgid "Script Templates Search Path"
msgstr "Percorso di Ricerca dei Template di Script"
-#: core/project_settings.cpp editor/editor_node.cpp
-#: editor/plugins/version_control_editor_plugin.cpp
-msgid "Version Control"
-msgstr "Controllo della versione"
-
#: core/project_settings.cpp
-msgid "Autoload On Startup"
+#, fuzzy
+msgid "Version Control Autoload On Startup"
msgstr "Autocaricamento all'Avvio"
#: core/project_settings.cpp
-msgid "Plugin Name"
-msgstr "Nome dell'estensione"
+#, fuzzy
+msgid "Version Control Plugin Name"
+msgstr "Controllo della versione"
#: core/project_settings.cpp scene/2d/collision_object_2d.cpp
#: scene/3d/collision_object.cpp scene/gui/control.cpp
@@ -806,7 +819,8 @@ msgid "Quality"
msgstr "Qualità"
#: core/project_settings.cpp scene/gui/file_dialog.cpp
-#: scene/main/scene_tree.cpp servers/visual_server.cpp
+#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp
+#: servers/visual_server.cpp
msgid "Filters"
msgstr "Filtri"
@@ -1336,7 +1350,7 @@ msgstr "Rimuovi questa traccia."
#: editor/animation_track_editor.cpp
#, fuzzy
msgid "Time (s):"
-msgstr "Tempo (s): "
+msgstr "Tempo (s):"
#: editor/animation_track_editor.cpp
#, fuzzy
@@ -1620,7 +1634,7 @@ msgstr "Aggiungi una chiave a una traccia di chiamate metodi"
#: editor/animation_track_editor.cpp
#, fuzzy
msgid "Method not found in object:"
-msgstr "Metodo non trovato nell'oggetto: "
+msgstr "Metodo non trovato nell'oggetto:"
#: editor/animation_track_editor.cpp
msgid "Anim Move Keys"
@@ -2231,8 +2245,8 @@ msgid "Open"
msgstr "Apri"
#: editor/dependency_editor.cpp
-msgid "Owners Of:"
-msgstr "Proprietari di:"
+msgid "Owners of: %s (Total: %d)"
+msgstr ""
#: editor/dependency_editor.cpp
msgid ""
@@ -2536,7 +2550,7 @@ msgid "Bus Options"
msgstr "Opzioni Bus"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/scene_tree_dock.cpp
+#: editor/project_export.cpp editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "Duplica"
@@ -2795,6 +2809,26 @@ msgid "Choose"
msgstr "Scegli"
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Project export for platform:"
+msgstr "Esportazione del progetto per la piattaforma:"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Completed with errors."
+msgstr "Completato con errori."
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Completed successfully."
+msgstr "Completato con successo."
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed."
+msgstr "Fallito."
+
+#: editor/editor_export.cpp
msgid "Storing File:"
msgstr "Memorizzazione file:"
@@ -2807,6 +2841,31 @@ msgid "Packing"
msgstr "Impacchettando"
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save PCK"
+msgstr "Salva PCK"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Cannot create file \"%s\"."
+msgstr "Impossibile creare la cartella."
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to export project files."
+msgstr "Impossibile esportare i file del progetto"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Can't open file to read from path \"%s\"."
+msgstr "Impossibile aprire il file in scrittura:"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save ZIP"
+msgstr "Salva ZIP"
+
+#: editor/editor_export.cpp
msgid ""
"Target platform requires 'ETC' texture compression for GLES2. Enable 'Import "
"Etc' in Project Settings."
@@ -2925,11 +2984,33 @@ msgstr "Modello di sviluppo personalizzato non trovato."
msgid "Custom release template not found."
msgstr "Modello di rilascio personalizzato non trovato."
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Prepare Template"
+msgstr "Gestisci i modelli d'esportazione"
+
+#: editor/editor_export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "The given export path doesn't exist."
+msgstr "Il percorso di esportazione specificato non esiste:"
+
#: editor/editor_export.cpp platform/javascript/export/export.cpp
-msgid "Template file not found:"
+#, fuzzy
+msgid "Template file not found: \"%s\"."
msgstr "File del modello non trovato:"
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to copy export template."
+msgstr "Template di esportazione non valido:"
+
+#: editor/editor_export.cpp platform/windows/export/export.cpp
+#: platform/x11/export/export.cpp
+#, fuzzy
+msgid "PCK Embedding"
+msgstr "Padding"
+
+#: editor/editor_export.cpp
msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB."
msgstr ""
"Il PCK integrato non può essere più grande di 4 GiB nelle esportazioni a 32 "
@@ -3107,9 +3188,9 @@ msgid "Import"
msgstr "Importa"
#: editor/editor_feature_profile.cpp editor/project_export.cpp
-#: platform/android/export/export.cpp platform/javascript/export/export.cpp
-#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
-#: platform/windows/export/export.cpp
+#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#: platform/uwp/export/export.cpp platform/windows/export/export.cpp
msgid "Export"
msgstr "Esporta"
@@ -4266,14 +4347,6 @@ msgid ""
msgstr ""
"Impossibile scrivere sul file '%s', file in uso, bloccato o mancano permessi."
-#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
-msgid "Scene"
-msgstr "Scena"
-
-#: editor/editor_node.cpp
-msgid "Scene Naming"
-msgstr "Nome Scena"
-
#: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp
#: servers/arvr/arvr_interface.cpp
msgid "Interface"
@@ -4388,6 +4461,10 @@ msgid "Default Color Picker Mode"
msgstr "Modalità di Scelta Colore Predefinita"
#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
+msgid "Version Control"
+msgstr "Controllo della versione"
+
+#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
msgid "Username"
msgstr "Nome Utente"
@@ -4415,6 +4492,10 @@ msgstr "Commuta la modalità senza distrazioni."
msgid "Add a new scene."
msgstr "Aggiungi una nuova scena."
+#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
+msgid "Scene"
+msgstr "Scena"
+
#: editor/editor_node.cpp
msgid "Go to previously opened scene."
msgstr "Va alla scena precedentemente aperta."
@@ -5110,7 +5191,7 @@ msgstr "Dimensione:"
#: editor/editor_properties_array_dict.cpp
#, fuzzy
msgid "Page:"
-msgstr "Pagina: "
+msgstr "Pagina:"
#: editor/editor_properties_array_dict.cpp
#: editor/plugins/theme_editor_plugin.cpp
@@ -5207,6 +5288,11 @@ msgstr ""
"Per favore, aggiungerne una nel menù di esportazione o impostarne una già "
"esistente come eseguibile."
+#: editor/editor_run_native.cpp
+#, fuzzy
+msgid "Project Run"
+msgstr "Progetto"
+
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
msgstr "Inserisci la logica dello script nel metodo _run()."
@@ -5460,7 +5546,9 @@ msgid "Draw Spaces"
msgstr "Disegna Spazi"
#: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp
-#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp
+#: scene/main/scene_tree.cpp scene/resources/world.cpp
+#: scene/resources/world_2d.cpp
msgid "Navigation"
msgstr "Navigazione"
@@ -5717,8 +5805,9 @@ msgid "Grid Division Level Min"
msgstr "Livello minimo di divisioni della griglia"
#: editor/editor_settings.cpp
+#, fuzzy
msgid "Grid Division Level Bias"
-msgstr ""
+msgstr "Livello di Bias di divisioni della griglia"
#: editor/editor_settings.cpp
msgid "Grid XZ Plane"
@@ -6019,8 +6108,9 @@ msgid "Keyword Color"
msgstr "Colore Parola Chiave"
#: editor/editor_settings.cpp
+#, fuzzy
msgid "Control Flow Keyword Color"
-msgstr ""
+msgstr "Colore Parola Chiave Controllo Flusso"
#: editor/editor_settings.cpp
msgid "Base Type Color"
@@ -6886,7 +6976,7 @@ msgstr "Ripeti"
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp
-#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp
+#: scene/gui/control.cpp
msgid "Filter"
msgstr "Filtro"
@@ -7122,7 +7212,7 @@ msgstr "Generando Lightmap"
#: editor/import/resource_importer_scene.cpp
#, fuzzy
msgid "Generating for Mesh:"
-msgstr "Generazione della Mesh: "
+msgstr "Generazione della Mesh:"
#: editor/import/resource_importer_scene.cpp
msgid "Running Custom Script..."
@@ -7150,6 +7240,18 @@ msgid "Saving..."
msgstr "Salvataggio..."
#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used as a normal map in 3D. Enabling red-green "
+"texture compression to reduce memory usage (blue channel is discarded)."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap "
+"generation and VRAM texture compression."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
msgid "2D, Detect 3D"
msgstr "2D, Rileva 3D"
@@ -7828,11 +7930,20 @@ msgid "New Anim"
msgstr "Nuova Animazione"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+msgstr "Crea Nuova Animazione"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Change Animation Name:"
msgstr "Cambia Nome Animazione:"
#: editor/plugins/animation_player_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Rename Animation"
+msgstr "Rinomina Animazione"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Delete Animation?"
msgstr "Eliminare Animazione?"
@@ -7850,11 +7961,6 @@ msgid "Animation name already exists!"
msgstr "Nome animazione già esistente!"
#: editor/plugins/animation_player_editor_plugin.cpp
-#: editor/plugins/sprite_frames_editor_plugin.cpp
-msgid "Rename Animation"
-msgstr "Rinomina Animazione"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate Animation"
msgstr "Duplica Animazione"
@@ -7998,10 +8104,6 @@ msgid "Pin AnimationPlayer"
msgstr "Fissa AnimationPlayer"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Create New Animation"
-msgstr "Crea Nuova Animazione"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Name:"
msgstr "Nome Animazione:"
@@ -8119,7 +8221,7 @@ msgstr "Assegna l'animazione finale. Utile per le sotto-transizioni."
#: editor/plugins/animation_state_machine_editor.cpp
#, fuzzy
msgid "Transition:"
-msgstr "Transizione: "
+msgstr "Transizione:"
#: editor/plugins/animation_state_machine_editor.cpp
msgid "Play Mode:"
@@ -9894,7 +9996,7 @@ msgstr "Volume"
#: editor/plugins/particles_editor_plugin.cpp
#, fuzzy
msgid "Emission Source:"
-msgstr "Sorgente Emissione: "
+msgstr "Sorgente Emissione:"
#: editor/plugins/particles_editor_plugin.cpp
msgid "A processor material of type 'ParticlesMaterial' is required."
@@ -10127,6 +10229,7 @@ msgid "Points"
msgstr "Punti"
#: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp
+#: scene/resources/navigation_mesh.cpp
msgid "Polygons"
msgstr "Poligoni"
@@ -10461,6 +10564,7 @@ msgstr "Script precedente"
#: editor/plugins/script_editor_plugin.cpp
#: scene/resources/default_theme/default_theme.cpp
+#, fuzzy
msgid "File"
msgstr "File"
@@ -10992,13 +11096,13 @@ msgstr "Trasla"
#: editor/plugins/spatial_editor_plugin.cpp
#, fuzzy
msgid "Scaling:"
-msgstr "Scalatura: "
+msgstr "Scalatura:"
#. TRANSLATORS: Refers to changing the position of a node in the 3D editor.
#: editor/plugins/spatial_editor_plugin.cpp
#, fuzzy
msgid "Translating:"
-msgstr "Traslazione: "
+msgstr "Traslazione:"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rotating %s degrees."
@@ -11045,6 +11149,7 @@ msgid "Vertices:"
msgstr "Vertici:"
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
msgid "FPS: %d (%s ms)"
msgstr "FPS: %d (%s ms)"
@@ -11298,8 +11403,9 @@ msgid "Orbit View Up"
msgstr "Orbita la visuale in sù"
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
msgid "Orbit View 180"
-msgstr ""
+msgstr "Orbita la visuale 180"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Switch Perspective/Orthogonal View"
@@ -11516,7 +11622,8 @@ msgid "Invalid geometry, can't replace by mesh."
msgstr "Geometria non valida, impossibile sostituirla con una mesh."
#: editor/plugins/sprite_editor_plugin.cpp
-msgid "Convert to Mesh2D"
+#, fuzzy
+msgid "Convert to MeshInstance2D"
msgstr "Converti in Mesh2D"
#: editor/plugins/sprite_editor_plugin.cpp
@@ -11550,17 +11657,17 @@ msgstr "Sprite"
#: editor/plugins/sprite_editor_plugin.cpp
#, fuzzy
msgid "Simplification:"
-msgstr "Semplificazione: "
+msgstr "Semplificazione:"
#: editor/plugins/sprite_editor_plugin.cpp
#, fuzzy
msgid "Shrink (Pixels):"
-msgstr "Rimpicciolisci (Pixels): "
+msgstr "Rimpicciolisci (Pixels):"
#: editor/plugins/sprite_editor_plugin.cpp
#, fuzzy
msgid "Grow (Pixels):"
-msgstr "Ingrandisci (Pixels): "
+msgstr "Ingrandisci (Pixels):"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Update Preview"
@@ -12501,8 +12608,7 @@ msgid "Select the previous shape, subtile, or Tile."
msgstr "Seleziona la precedente forma, sottotile, o Tile."
#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp
-#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp
-#: scene/resources/texture.cpp
+#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp
msgid "Region"
msgstr "Regione"
@@ -12987,8 +13093,9 @@ msgid "Select SSH private key path"
msgstr "Seleziona il percorso della chiave privata SSH"
#: editor/plugins/version_control_editor_plugin.cpp
+#, fuzzy
msgid "SSH Passphrase"
-msgstr ""
+msgstr "Frase di accesso SSH"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Detect new changes"
@@ -13067,8 +13174,9 @@ msgid "Pull"
msgstr ""
#: editor/plugins/version_control_editor_plugin.cpp
+#, fuzzy
msgid "Push"
-msgstr ""
+msgstr "Push"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Force Push"
@@ -13091,8 +13199,9 @@ msgid "Typechange"
msgstr "Cambio di tipo"
#: editor/plugins/version_control_editor_plugin.cpp
+#, fuzzy
msgid "Unmerged"
-msgstr ""
+msgstr "Non mescolato"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "View:"
@@ -14003,49 +14112,26 @@ msgid "Runnable"
msgstr "Eseguibile"
#: editor/project_export.cpp
+#, fuzzy
msgid "Export the project for all the presets defined."
-msgstr ""
+msgstr "Esporta il progetto per tutti i preset definiti."
#: editor/project_export.cpp
+#, fuzzy
msgid "All presets must have an export path defined for Export All to work."
msgstr ""
+"Tutti i preset devono avere un percorso di esportazione definito affinché "
+"\"Esporta tutto\" funzioni."
#: editor/project_export.cpp
msgid "Delete preset '%s'?"
msgstr "Eliminare preset \"%s\"?"
#: editor/project_export.cpp
-msgid ""
-"Failed to export the project for platform '%s'.\n"
-"Export templates seem to be missing or invalid."
-msgstr ""
-"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
-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 ""
-"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."
-
-#: editor/project_export.cpp
msgid "Exporting All"
msgstr "Esportando Tutto"
#: editor/project_export.cpp
-msgid "The given export path doesn't exist:"
-msgstr "Il percorso di esportazione specificato non esiste:"
-
-#: editor/project_export.cpp
-msgid "Export templates for this platform are missing/corrupted:"
-msgstr ""
-"I template di esportazione per questa piattaforma sono mancanti/corrotti:"
-
-#: editor/project_export.cpp
msgid "Export Path"
msgstr "Percorso di Esportazione"
@@ -14193,6 +14279,11 @@ msgid "Export templates for this platform are missing:"
msgstr "Le export templates per questa piattaforma sono mancanti:"
#: editor/project_export.cpp
+#, fuzzy
+msgid "Project Export"
+msgstr "Fondatori del progetto"
+
+#: editor/project_export.cpp
msgid "Manage Export Templates"
msgstr "Gestisci template d'esportazione"
@@ -15743,7 +15834,7 @@ msgstr "Allega Script Nodo"
#: editor/script_editor_debugger.cpp
#, fuzzy
msgid "Remote %s:"
-msgstr "Remoto "
+msgstr "Remoto %s:"
#: editor/script_editor_debugger.cpp
msgid "Bytes:"
@@ -16270,7 +16361,6 @@ msgid "Drop Mouse On GUI Input Disabled"
msgstr ""
#: main/main.cpp
-#, fuzzy
msgid "stdout"
msgstr "stdout"
@@ -16317,14 +16407,13 @@ msgstr "Dispositivi Input"
#: main/main.cpp
#, fuzzy
msgid "Pointing"
-msgstr "Punto"
+msgstr "Puntamento"
#: main/main.cpp
msgid "Touch Delay"
msgstr "Delay Tocco"
#: main/main.cpp servers/visual_server.cpp
-#, fuzzy
msgid "GLES3"
msgstr "GLES3"
@@ -16474,7 +16563,6 @@ msgid "Active Soft World"
msgstr ""
#: modules/csg/csg_gizmos.cpp
-#, fuzzy
msgid "CSG"
msgstr "CSG"
@@ -16565,7 +16653,7 @@ msgstr "Lati Anello"
#: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp
#: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp
-#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp
+#: scene/3d/collision_polygon.cpp
msgid "Polygon"
msgstr "Poligono"
@@ -16731,7 +16819,7 @@ msgstr "Singleton GDNative disabilitato"
#: modules/gdnative/gdnative_library_singleton_editor.cpp
#, fuzzy
msgid "Libraries:"
-msgstr "Librerie: "
+msgstr "Librerie:"
#: modules/gdnative/nativescript/nativescript.cpp
msgid "Class Name"
@@ -17130,7 +17218,6 @@ msgid "Use In Baked Light"
msgstr "Utilizza in Luce Preprocessata"
#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
-#: scene/resources/navigation_mesh.cpp
msgid "Cell"
msgstr "Cella"
@@ -17156,6 +17243,19 @@ msgstr "Centra Z"
msgid "Mask"
msgstr "Maschera"
+#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
+#, fuzzy
+msgid "Bake Navigation"
+msgstr "Navigazione"
+
+#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp
+#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp
+#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp
+#: scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Navigation Layers"
+msgstr "Sensazione Navigazione"
+
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Plane"
msgstr "Piano Successivo"
@@ -17365,12 +17465,14 @@ msgid "Oversample"
msgstr ""
#: modules/mobile_vr/mobile_vr_interface.cpp
+#, fuzzy
msgid "K1"
-msgstr ""
+msgstr "K1"
#: modules/mobile_vr/mobile_vr_interface.cpp
+#, fuzzy
msgid "K2"
-msgstr ""
+msgstr "K2"
#: modules/mono/csharp_script.cpp
msgid "Class name can't be a reserved keyword"
@@ -17569,7 +17671,7 @@ msgstr ""
#: modules/visual_script/visual_script.cpp
#, fuzzy
msgid "Node returned an invalid sequence output:"
-msgstr "Il nodo ha ritornato una sequenza di output invalida: "
+msgstr "Il nodo ha ritornato una sequenza di output invalida:"
#: modules/visual_script/visual_script.cpp
msgid "Found sequence bit but not the node in the stack, report bug!"
@@ -17578,7 +17680,7 @@ msgstr "Trovato bit di sequenza ma non il nodo nello stack, segnalare il bug!"
#: modules/visual_script/visual_script.cpp
#, fuzzy
msgid "Stack overflow with stack depth:"
-msgstr "Overflow dello stack con profondità dello stack: "
+msgstr "Overflow dello stack con profondità dello stack:"
#: modules/visual_script/visual_script.cpp
#, fuzzy
@@ -17906,11 +18008,12 @@ msgstr "Modifica membro"
#: scene/resources/visual_shader.cpp
#, fuzzy
msgid "Expression"
-msgstr "Cambia espressione"
+msgstr "Espressione"
#: modules/visual_script/visual_script_flow_control.cpp
+#, fuzzy
msgid "Return"
-msgstr ""
+msgstr "Ritorno"
#: modules/visual_script/visual_script_flow_control.cpp
#, fuzzy
@@ -17931,8 +18034,9 @@ msgid "if (cond) is:"
msgstr "if (cond) is:"
#: modules/visual_script/visual_script_flow_control.cpp
+#, fuzzy
msgid "While"
-msgstr ""
+msgstr "While"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "while (cond):"
@@ -17949,7 +18053,7 @@ msgstr ""
#: modules/visual_script/visual_script_flow_control.cpp
#, fuzzy
msgid "Input type not iterable:"
-msgstr "Il tipo di input non è iterabile: "
+msgstr "Il tipo di input non è iterabile:"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Iterator became invalid"
@@ -17958,7 +18062,7 @@ msgstr "L'iteratore è diventato invalido"
#: modules/visual_script/visual_script_flow_control.cpp
#, fuzzy
msgid "Iterator became invalid:"
-msgstr "L'iteratore è diventato invalido: "
+msgstr "L'iteratore è diventato invalido:"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Sequence"
@@ -18119,12 +18223,12 @@ msgstr "Operatore"
#: modules/visual_script/visual_script_nodes.cpp
#, fuzzy
msgid "Invalid argument of type:"
-msgstr ": Argomento invalido di tipo: "
+msgstr "Argomento invalido di tipo:"
#: modules/visual_script/visual_script_nodes.cpp
#, fuzzy
msgid "Invalid arguments:"
-msgstr ": Argomenti invalidi: "
+msgstr "Argomenti invalidi:"
#: modules/visual_script/visual_script_nodes.cpp
msgid "a if cond, else b"
@@ -18137,12 +18241,12 @@ msgstr "Var Nome"
#: modules/visual_script/visual_script_nodes.cpp
#, fuzzy
msgid "VariableGet not found in script:"
-msgstr "VariableGet non trovato nello script: "
+msgstr "VariableGet non trovato nello script:"
#: modules/visual_script/visual_script_nodes.cpp
#, fuzzy
msgid "VariableSet not found in script:"
-msgstr "VariableSet non trovato nello script: "
+msgstr "VariableSet non trovato nello script:"
#: modules/visual_script/visual_script_nodes.cpp
msgid "Preload"
@@ -18244,8 +18348,9 @@ msgid "Search VisualScript"
msgstr "Ricerca VisualScript"
#: modules/visual_script/visual_script_yield_nodes.cpp
+#, fuzzy
msgid "Yield"
-msgstr ""
+msgstr "Yield"
#: modules/visual_script/visual_script_yield_nodes.cpp
msgid "Wait"
@@ -18270,17 +18375,17 @@ msgstr "Tempo Di Attesa"
#: modules/visual_script/visual_script_yield_nodes.cpp
#, fuzzy
msgid "WaitSignal"
-msgstr "Segnale"
+msgstr "WaitSignal"
#: modules/visual_script/visual_script_yield_nodes.cpp
#, fuzzy
msgid "WaitNodeSignal"
-msgstr "Segnale"
+msgstr "WaitNodeSignal"
#: modules/visual_script/visual_script_yield_nodes.cpp
#, fuzzy
msgid "WaitInstanceSignal"
-msgstr "Istanza"
+msgstr "WaitInstanceSignal"
#: modules/webrtc/webrtc_data_channel.cpp
#, fuzzy
@@ -18659,10 +18764,6 @@ msgid "Could not execute on device."
msgstr "Impossibile eseguire sul dispositivo."
#: platform/android/export/export_plugin.cpp
-msgid "Unable to find the 'apksigner' tool."
-msgstr "Impossibile trovare lo strumento \"apksigner\"."
-
-#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -18792,17 +18893,20 @@ msgstr ""
msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version."
msgstr ""
+#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Code Signing"
+msgstr "Segnale"
+
#: platform/android/export/export_plugin.cpp
+#, fuzzy
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."
+"'apksigner' could not be found. Please check that the command is available "
+"in the Android SDK build-tools directory. 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."
+"'apksigner' non è stato trovato. Verificare che il comando sia disponibile "
+"nella directory build-tools di Android SDK. Il risultato %s non è firmato."
#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
@@ -18817,6 +18921,11 @@ msgid "Could not find keystore, unable to export."
msgstr "Non è stato possibile trovare keystore, impossible esportare."
#: platform/android/export/export_plugin.cpp
+#, fuzzy
+msgid "Could not start apksigner executable."
+msgstr "Non è stato possibile avviare l'eseguibile apksigner."
+
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr "'apksigner' ha restituito con errore #%d"
@@ -18847,8 +18956,8 @@ msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr "Nome file non valido! L'APK Android richiede l'estensione *.apk."
#: platform/android/export/export_plugin.cpp
-msgid "Unsupported export format!\n"
-msgstr "Formato d'esportazione non supportato!\n"
+msgid "Unsupported export format!"
+msgstr "Formato d'esportazione non supportato!"
#: platform/android/export/export_plugin.cpp
msgid ""
@@ -18860,27 +18969,27 @@ msgstr ""
"\"Progetto\"."
#: platform/android/export/export_plugin.cpp
+#, fuzzy
msgid ""
-"Android build version mismatch:\n"
-" Template installed: %s\n"
-" Godot Version: %s\n"
+"Android build version mismatch: Template installed: %s, Godot version: %s. "
"Please reinstall Android build template from 'Project' menu."
msgstr ""
-"Versione build di Android non coerente:\n"
-" Template installato: %s\n"
-" Versione Godot: %s\n"
-"Per favore, reinstalla il build template di Android dal menu \"Progetto\"."
+"Versione build di Android non coerente: Template installato: %s, Versione "
+"Godot: %s. Per favore, reinstalla il build template di Android dal menu "
+"\"Progetto\"."
#: platform/android/export/export_plugin.cpp
+#, fuzzy
msgid ""
-"Unable to overwrite res://android/build/res/*.xml files with project name"
+"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
-msgid "Could not export project files to gradle project\n"
-msgstr "Impossibile esportare i file del progetto in un progetto gradle\n"
+#, fuzzy
+msgid "Could not export project files to gradle project."
+msgstr "Impossibile esportare i file del progetto in un progetto gradle."
#: platform/android/export/export_plugin.cpp
msgid "Could not write expansion package file!"
@@ -18891,14 +19000,14 @@ msgid "Building Android Project (gradle)"
msgstr "Compilazione di un progetto Android (gradle)"
#: platform/android/export/export_plugin.cpp
+#, fuzzy
msgid ""
-"Building of Android project failed, check output for the error.\n"
+"Building of Android project failed, check output for the error. "
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
"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."
+"errori. In alternativa, visita docs.godotengine.org per la documentazione "
+"della build Android."
#: platform/android/export/export_plugin.cpp
msgid "Moving output"
@@ -18913,7 +19022,8 @@ msgstr ""
"directory del progetto gradle per gli output."
#: platform/android/export/export_plugin.cpp
-msgid "Package not found: %s"
+#, fuzzy
+msgid "Package not found: \"%s\"."
msgstr "Pacchetto non trovato: \"%s\""
#: platform/android/export/export_plugin.cpp
@@ -18921,31 +19031,28 @@ msgid "Creating APK..."
msgstr "Creazione APK..."
#: platform/android/export/export_plugin.cpp
-msgid ""
-"Could not find template APK to export:\n"
-"%s"
-msgstr ""
-"Impossibile trovare il template APK per l'esportazione:\n"
-"%s"
+#, fuzzy
+msgid "Could not find template APK to export: \"%s\"."
+msgstr "Impossibile trovare il template APK per l'esportazione: \"%s\"."
#: platform/android/export/export_plugin.cpp
+#, fuzzy
msgid ""
-"Missing libraries in the export template for the selected architectures: "
-"%s.\n"
+"Missing libraries in the export template for the selected architectures: %s. "
"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."
+"Librerie mancanti nel modello di esportazione per le architetture "
+"selezionate: %s. Creare un modello con tutte le librerie richieste o "
+"deselezionare le architetture mancanti nella preimpostazione di esportazione."
#: platform/android/export/export_plugin.cpp
msgid "Adding files..."
msgstr "Aggiungendo file..."
#: platform/android/export/export_plugin.cpp
-msgid "Could not export project files"
+#, fuzzy
+msgid "Could not export project files."
msgstr "Impossibile esportare i file del progetto"
#: platform/android/export/export_plugin.cpp
@@ -19188,6 +19295,17 @@ msgstr "Taglia nodi"
msgid "Custom BG Color"
msgstr "Taglia nodi"
+#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Prepare Templates"
+msgstr "Gestisci i modelli d'esportazione"
+
+#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Export template not found."
+msgstr "Modello di rilascio personalizzato non trovato."
+
#: platform/iphone/export/export.cpp
msgid "App Store Team ID not specified - cannot configure the project."
msgstr ""
@@ -19210,22 +19328,35 @@ msgid "Run exported HTML in the system's default browser."
msgstr "Esegui il codice HTML esportato nel browser di sistema predefinito."
#: platform/javascript/export/export.cpp
-msgid "Could not open template for export:"
+#, fuzzy
+msgid "Could not open template for export: \"%s\"."
msgstr "Impossibile aprire il template per l'esportazione:"
#: platform/javascript/export/export.cpp
-msgid "Invalid export template:"
+#, fuzzy
+msgid "Invalid export template: \"%s\"."
msgstr "Template di esportazione non valido:"
#: platform/javascript/export/export.cpp
-msgid "Could not write file:"
+#, fuzzy
+msgid "Could not write file: \"%s\"."
msgstr "Impossibile scrivere il file:"
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Icon Creation"
+msgstr "Imposta Margine"
+
#: platform/javascript/export/export.cpp
-msgid "Could not read file:"
+#, fuzzy
+msgid "Could not read file: \"%s\"."
msgstr "Impossibile leggere il file:"
#: platform/javascript/export/export.cpp
+msgid "PWA"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
#, fuzzy
msgid "Variant"
msgstr "Separazione:"
@@ -19300,15 +19431,18 @@ msgid "Icon 512 X 512"
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not read HTML shell:"
+#, fuzzy
+msgid "Could not read HTML shell: \"%s\"."
msgstr "Impossibile leggere la shell HTML:"
#: platform/javascript/export/export.cpp
-msgid "Could not create HTTP server directory:"
+#, fuzzy
+msgid "Could not create HTTP server directory: %s."
msgstr "Impossibile creare la directory per il server HTTP:"
#: platform/javascript/export/export.cpp
-msgid "Error starting HTTP server:"
+#, fuzzy
+msgid "Error starting HTTP server: %d."
msgstr "Errore all'avvio del server HTTP:"
#: platform/javascript/export/export.cpp
@@ -19609,9 +19743,28 @@ msgid "Apple Team ID"
msgstr "ID Apple Team"
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open icon file \"%s\"."
+msgstr "Impossibile esportare i file del progetto"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start xcrun executable."
+msgstr "Impossibile avviare l'eseguibile xcrun."
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization failed."
+msgstr "Localizzazione"
+
+#: platform/osx/export/export.cpp
+msgid "Notarization request UUID: \"%s\""
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid ""
-"Note: The notarization process generally takes less than an hour. When the "
-"process is completed, you'll receive an email."
+"The notarization process generally takes less than an hour. When the process "
+"is completed, you'll receive an email."
msgstr ""
#: platform/osx/export/export.cpp
@@ -19627,20 +19780,76 @@ msgid ""
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign failed with error \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign require regex module."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Could not start codesign executable, make sure Xcode command line tools are "
+"installed."
+msgstr ""
+
+#: platform/osx/export/export.cpp platform/windows/export/export.cpp
#, fuzzy
msgid "No identity found."
msgstr "Nessuna icona trovata."
#: platform/osx/export/export.cpp
#, fuzzy
+msgid "Cannot sign file %s."
+msgstr "Errore nel salvataggio del file: %s"
+
+#: platform/osx/export/export.cpp
+msgid "Relative symlinks are not supported, exported \"%s\" might be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "DMG Creation"
+msgstr "Direzione"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start hdiutil executable."
+msgstr "Impossibile avviare l'eseguibile hdiutil."
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed - file exists."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
msgid "Creating app bundle"
msgstr "Creando la miniatura"
#: platform/osx/export/export.cpp
-msgid "Could not find template app to export:"
+#, fuzzy
+msgid "Could not find template app to export: \"%s\"."
msgstr "Impossibile trovare il template dell'app per l'esportazione:"
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid export format."
+msgstr "Template di esportazione non valido:"
+
+#: platform/osx/export/export.cpp
msgid ""
"Relative symlinks are not supported on this OS, the exported project might "
"be broken!"
@@ -19648,7 +19857,7 @@ msgstr ""
#: platform/osx/export/export.cpp
msgid ""
-"Requested template binary '%s' not found. It might be missing from your "
+"Requested template binary \"%s\" not found. It might be missing from your "
"template archive."
msgstr ""
@@ -19689,6 +19898,16 @@ msgid "Sending archive for notarization"
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "ZIP Creation"
+msgstr "Proiezione"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open file to read from path \"%s\"."
+msgstr "Impossibile aprire il file da leggere dal percorso \"%s\"."
+
+#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr "Identificatore del bundle non valido:"
@@ -19997,14 +20216,13 @@ msgstr ""
"620x300)."
#: platform/uwp/export/export.cpp
-#, fuzzy
msgid "UWP"
msgstr "UWP"
#: platform/uwp/export/export.cpp platform/windows/export/export.cpp
#, fuzzy
msgid "Signtool"
-msgstr "Segnale"
+msgstr "Signtool"
#: platform/uwp/export/export.cpp
msgid "Debug Certificate"
@@ -20016,6 +20234,11 @@ msgid "Debug Algorithm"
msgstr "Debugger"
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to rename temporary file \"%s\"."
+msgstr "Impossibile rimuovere il file temporaneo:"
+
+#: platform/windows/export/export.cpp
msgid "Identity Type"
msgstr ""
@@ -20063,6 +20286,70 @@ msgid "Trademarks"
msgstr ""
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Resources Modification"
+msgstr "Rotazione Casuale:"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find rcedit executable at \"%s\"."
+msgstr "Non è stato possibile trovare keystore, impossible esportare."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find wine executable at \"%s\"."
+msgstr "Non è stato possibile trovare keystore, impossible esportare."
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start rcedit executable, configure rcedit path in the Editor "
+"Settings (Export > Windows > Rcedit)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"rcedit failed to modify executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find signtool executable at \"%s\"."
+msgstr "Non è stato possibile trovare keystore, impossible esportare."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find osslsigncode executable at \"%s\"."
+msgstr "Non è stato possibile trovare keystore, impossible esportare."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid identity type."
+msgstr "Identificatore non valido:"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid timestamp server."
+msgstr "Nome non valido."
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start signtool executable, configure signtool path in the Editor "
+"Settings (Export > Windows > Signtool)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Signtool failed to sign executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to remove temporary file \"%s\"."
+msgstr "Impossibile rimuovere il file temporaneo:"
+
+#: platform/windows/export/export.cpp
msgid ""
"The rcedit tool must be configured in the Editor Settings (Export > Windows "
"> Rcedit) to change the icon or app information data."
@@ -20081,29 +20368,47 @@ msgid "Invalid product version:"
msgstr "Versione prodotto non valida:"
#: platform/windows/export/export.cpp
+msgid "Windows executables cannot be >= 4 GiB."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+#, fuzzy
+msgid "Failed to open executable file \"%s\"."
+msgstr "Estensione non valida."
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable file header corrupted."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable \"pck\" section not found."
+msgstr ""
+
+#: platform/windows/export/export.cpp
msgid "Windows"
msgstr "Windows"
#: platform/windows/export/export.cpp
-#, fuzzy
msgid "Rcedit"
msgstr "Rcedit"
#: platform/windows/export/export.cpp
-#, fuzzy
msgid "Osslsigncode"
msgstr "Osslsigncode"
#: platform/windows/export/export.cpp
-#, fuzzy
msgid "Wine"
msgstr "Wine"
+#: platform/x11/export/export.cpp
+msgid "32-bit executables cannot have embedded data >= 4 GiB."
+msgstr ""
+
#: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp
#: scene/resources/texture.cpp
#, fuzzy
msgid "Frames"
-msgstr "Fotogramma %"
+msgstr "Fotogrammi"
#: scene/2d/animated_sprite.cpp
msgid ""
@@ -20178,8 +20483,9 @@ msgstr "Aggiorna Anteprima"
#: scene/2d/area_2d.cpp scene/2d/cpu_particles_2d.cpp scene/3d/area.cpp
#: scene/3d/cpu_particles.cpp scene/resources/particles_material.cpp
+#, fuzzy
msgid "Gravity"
-msgstr ""
+msgstr "Gravità"
#: scene/2d/area_2d.cpp scene/3d/area.cpp
#, fuzzy
@@ -20226,7 +20532,8 @@ msgstr ""
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/3d/light.cpp scene/3d/reflection_probe.cpp
-#: scene/3d/visual_instance.cpp scene/resources/material.cpp
+#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp
+#: scene/resources/material.cpp
#, fuzzy
msgid "Max Distance"
msgstr "Scegli la Distanza:"
@@ -20234,7 +20541,7 @@ msgstr "Scegli la Distanza:"
#: scene/2d/audio_stream_player_2d.cpp scene/3d/light.cpp
#, fuzzy
msgid "Attenuation"
-msgstr "Animazione"
+msgstr "Attenuazione"
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/audio/audio_stream_player.cpp scene/gui/video_player.cpp
@@ -20638,13 +20945,14 @@ msgstr "Assegna"
#: scene/resources/particles_material.cpp
#, fuzzy
msgid "Direction"
-msgstr "Direzioni"
+msgstr "Direzione"
#: scene/2d/cpu_particles_2d.cpp scene/3d/cpu_particles.cpp
#: scene/resources/particles_material.cpp
#: servers/audio/effects/audio_effect_reverb.cpp
+#, fuzzy
msgid "Spread"
-msgstr ""
+msgstr "Propagazione"
#: scene/2d/cpu_particles_2d.cpp scene/3d/cpu_particles.cpp
#: scene/resources/particles_material.cpp
@@ -20714,8 +21022,9 @@ msgstr ""
#: scene/3d/physics_joint.cpp scene/3d/vehicle_body.cpp
#: scene/resources/particles_material.cpp
#: servers/audio/effects/audio_effect_reverb.cpp
+#, fuzzy
msgid "Damping"
-msgstr ""
+msgstr "Smorzamento"
#: scene/2d/cpu_particles_2d.cpp scene/3d/cpu_particles.cpp
#: scene/resources/particles_material.cpp
@@ -20730,8 +21039,9 @@ msgstr "Dividi Curva"
#: scene/2d/cpu_particles_2d.cpp scene/3d/cpu_particles.cpp scene/3d/light.cpp
#: scene/resources/particles_material.cpp
+#, fuzzy
msgid "Angle"
-msgstr ""
+msgstr "Angolo"
#: scene/2d/cpu_particles_2d.cpp scene/3d/cpu_particles.cpp
#: scene/resources/particles_material.cpp
@@ -20864,8 +21174,9 @@ msgstr ""
#: scene/2d/joints_2d.cpp scene/resources/animation.cpp
#: scene/resources/ray_shape.cpp scene/resources/segment_shape_2d.cpp
+#, fuzzy
msgid "Length"
-msgstr ""
+msgstr "Lunghezza"
#: scene/2d/joints_2d.cpp
#, fuzzy
@@ -20901,8 +21212,9 @@ msgstr "TextureRegion"
#: scene/2d/light_2d.cpp scene/3d/baked_lightmap.cpp scene/3d/gi_probe.cpp
#: scene/3d/light.cpp scene/resources/environment.cpp
#: scene/resources/material.cpp scene/resources/sky.cpp
+#, fuzzy
msgid "Energy"
-msgstr ""
+msgstr "Energia"
#: scene/2d/light_2d.cpp
msgid "Z Min"
@@ -20929,7 +21241,7 @@ msgstr ""
#: scene/2d/light_2d.cpp scene/3d/light.cpp scene/resources/style_box.cpp
#, fuzzy
msgid "Shadow"
-msgstr "Shader"
+msgstr "Ombra"
#: scene/2d/light_2d.cpp
#, fuzzy
@@ -20979,13 +21291,14 @@ msgid "Default Color"
msgstr "Predefinito"
#: scene/2d/line_2d.cpp scene/resources/texture.cpp
+#, fuzzy
msgid "Fill"
-msgstr ""
+msgstr "Riempimento"
#: scene/2d/line_2d.cpp scene/resources/texture.cpp
#, fuzzy
msgid "Gradient"
-msgstr "Gradiente Modificato"
+msgstr "Gradiente"
#: scene/2d/line_2d.cpp
#, fuzzy
@@ -21031,8 +21344,9 @@ msgid "Antialiased"
msgstr "Inizializza"
#: scene/2d/multimesh_instance_2d.cpp scene/3d/multimesh_instance.cpp
+#, fuzzy
msgid "Multimesh"
-msgstr ""
+msgstr "Multimesh"
#: scene/2d/navigation_2d.cpp scene/3d/baked_lightmap.cpp
#: scene/3d/navigation.cpp scene/animation/root_motion_view.cpp
@@ -21045,6 +21359,18 @@ msgstr ""
msgid "Edge Connection Margin"
msgstr "Modifica una connessione:"
+#: scene/2d/navigation_2d.cpp
+msgid ""
+"'Navigation2D' node and 'Navigation2D.get_simple_path()' are deprecated and "
+"will be removed in a future version. Use 'Navigation2DServer.map_get_path()' "
+"instead."
+msgstr ""
+
+#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
+#, fuzzy
+msgid "Path Desired Distance"
+msgstr "Scegli la Distanza:"
+
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
msgid "Target Desired Distance"
msgstr ""
@@ -21103,16 +21429,19 @@ msgstr ""
"poligono."
#: scene/2d/navigation_polygon.cpp
-msgid ""
-"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
-"node. It only provides navigation data."
-msgstr ""
-"NavigationPolygonInstance deve essere figlio o nipote di un nodo "
-"Navigation2D. Esso fornisce solamente dati di navigazione."
-
-#: scene/2d/navigation_polygon.cpp
+#, fuzzy
msgid "Navpoly"
-msgstr ""
+msgstr "Navpoly"
+
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Enter Cost"
+msgstr "In Centro In Basso"
+
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Travel Cost"
+msgstr "Spostamento"
#: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp
#: scene/main/canvas_layer.cpp
@@ -21288,7 +21617,7 @@ msgstr "Inizializza"
#: scene/resources/physics_material.cpp
#, fuzzy
msgid "Friction"
-msgstr "Funzioni"
+msgstr "Frizione"
#: scene/2d/physics_body_2d.cpp scene/2d/tile_map.cpp scene/3d/physics_body.cpp
#: scene/resources/physics_material.cpp
@@ -21316,18 +21645,19 @@ msgstr ""
"Modifica invece la dimensione nelle forme di collisione figlie."
#: scene/2d/physics_body_2d.cpp scene/3d/physics_body.cpp
+#, fuzzy
msgid "Mass"
-msgstr ""
+msgstr "Massa"
#: scene/2d/physics_body_2d.cpp
#, fuzzy
msgid "Inertia"
-msgstr "Verticale:"
+msgstr "Inerzia"
#: scene/2d/physics_body_2d.cpp scene/3d/physics_body.cpp
#, fuzzy
msgid "Weight"
-msgstr "Luce"
+msgstr "Peso"
#: scene/2d/physics_body_2d.cpp scene/3d/physics_body.cpp
msgid "Gravity Scale"
@@ -21368,8 +21698,9 @@ msgid "Damp"
msgstr ""
#: scene/2d/physics_body_2d.cpp scene/3d/physics_body.cpp
+#, fuzzy
msgid "Angular"
-msgstr ""
+msgstr "Angolare"
#: scene/2d/physics_body_2d.cpp
msgid "Applied Forces"
@@ -21403,7 +21734,7 @@ msgstr ""
#: scene/resources/line_shape_2d.cpp scene/resources/material.cpp
#, fuzzy
msgid "Normal"
-msgstr "Formato"
+msgstr "Normale"
#: scene/2d/physics_body_2d.cpp scene/3d/physics_body.cpp
#, fuzzy
@@ -21784,7 +22115,7 @@ msgstr ""
#: servers/audio/effects/audio_effect_filter.cpp
#, fuzzy
msgid "dB"
-msgstr "B"
+msgstr "dB"
#: scene/3d/audio_stream_player_3d.cpp
#, fuzzy
@@ -21904,7 +22235,7 @@ msgstr "Indenta a destra"
#: scene/3d/baked_lightmap.cpp scene/3d/gi_probe.cpp
#, fuzzy
msgid "Propagation"
-msgstr "Navigazione"
+msgstr "Propagazione"
#: scene/3d/baked_lightmap.cpp
msgid "Image Path"
@@ -21936,7 +22267,7 @@ msgstr "Traccia di proprietà"
#: scene/3d/camera.cpp
#, fuzzy
msgid "Projection"
-msgstr "Progetto"
+msgstr "Proiezione"
#: scene/3d/camera.cpp
msgid "FOV"
@@ -21950,7 +22281,7 @@ msgstr "Scostamento della griglia:"
#: scene/3d/camera.cpp
#, fuzzy
msgid "Near"
-msgstr "Più vicino"
+msgstr "Vicino"
#: scene/3d/camera.cpp
msgid "Far"
@@ -21963,7 +22294,7 @@ msgstr ""
#: servers/physics_server.cpp
#, fuzzy
msgid "Margin"
-msgstr "Imposta Margine"
+msgstr "Margine"
#: scene/3d/camera.cpp
#, fuzzy
@@ -22092,7 +22423,7 @@ msgstr ""
#: scene/3d/cull_instance.cpp servers/visual_server.cpp
#, fuzzy
msgid "Portals"
-msgstr "Ribalta orizzontalmente"
+msgstr "Portali"
#: scene/3d/cull_instance.cpp
#, fuzzy
@@ -22326,6 +22657,13 @@ msgstr ""
msgid "Transform Normals"
msgstr "Trasforma Normals"
+#: scene/3d/navigation.cpp
+msgid ""
+"'Navigation' node and 'Navigation.get_simple_path()' are deprecated and will "
+"be removed in a future version. Use 'NavigationServer.map_get_path()' "
+"instead."
+msgstr ""
+
#: scene/3d/navigation.cpp scene/resources/curve.cpp
#, fuzzy
msgid "Up Vector"
@@ -22350,14 +22688,6 @@ msgid ""
"The NavigationAgent can be used only under a Spatial inheriting parent node."
msgstr ""
-#: scene/3d/navigation_mesh_instance.cpp
-msgid ""
-"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
-"It only provides navigation data."
-msgstr ""
-"NavigationMeshInstance deve essere un figlio o nipote di un nodo Navigation. "
-"Fornisce solamente dati per la navigazione."
-
#: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp
#, fuzzy
msgid "NavMesh"
@@ -22711,12 +23041,12 @@ msgstr ""
#: scene/3d/physics_joint.cpp
#, fuzzy
msgid "Upper"
-msgstr "Maiuscolo"
+msgstr "Superiore"
#: scene/3d/physics_joint.cpp
#, fuzzy
msgid "Lower"
-msgstr "Minuscolo"
+msgstr "Minore"
#: scene/3d/physics_joint.cpp
msgid "Motor"
@@ -23049,9 +23379,8 @@ msgid "Roomlist"
msgstr ""
#: scene/3d/room_manager.cpp servers/visual_server.cpp
-#, fuzzy
msgid "PVS"
-msgstr "FPS"
+msgstr "PVS"
#: scene/3d/room_manager.cpp
#, fuzzy
@@ -23349,7 +23678,7 @@ msgstr "Funzioni"
#: scene/3d/vehicle_body.cpp
#, fuzzy
msgid "Suspension"
-msgstr "Cambia espressione"
+msgstr "Sospensione"
#: scene/3d/vehicle_body.cpp
#, fuzzy
@@ -23363,7 +23692,7 @@ msgstr ""
#: scene/3d/visual_instance.cpp scene/resources/navigation_mesh.cpp
#, fuzzy
msgid "Geometry"
-msgstr "Riprova"
+msgstr "Geometria"
#: scene/3d/visual_instance.cpp
#, fuzzy
@@ -23736,7 +24065,7 @@ msgstr ""
#: scene/gui/base_button.cpp scene/gui/shortcut.cpp
#, fuzzy
msgid "Shortcut"
-msgstr "Scorciatoie"
+msgstr "Scorciatoia"
#: scene/gui/base_button.cpp
#, fuzzy
@@ -24576,11 +24905,12 @@ msgstr ""
#: scene/gui/texture_progress.cpp
#, fuzzy
msgid "Fill Mode"
-msgstr "Modalità Riproduzione:"
+msgstr "Modalità di riempimento"
#: scene/gui/texture_progress.cpp scene/resources/material.cpp
+#, fuzzy
msgid "Tint"
-msgstr ""
+msgstr "Tinta"
#: scene/gui/texture_progress.cpp
msgid "Radial Fill"
@@ -24594,7 +24924,7 @@ msgstr "Inizializza"
#: scene/gui/texture_progress.cpp
#, fuzzy
msgid "Fill Degrees"
-msgstr "Ruotando di %s gradi."
+msgstr "Gradi di Riempimento"
#: scene/gui/texture_progress.cpp scene/resources/primitive_meshes.cpp
#, fuzzy
@@ -25082,6 +25412,16 @@ msgid "3D Physics"
msgstr "Fisica"
#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "2D Navigation"
+msgstr "Navigazione"
+
+#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "3D Navigation"
+msgstr "Navigazione"
+
+#: scene/register_scene_types.cpp
msgid "Use hiDPI"
msgstr ""
@@ -26006,8 +26346,9 @@ msgid "Sky Contribution"
msgstr "Condizione"
#: scene/resources/environment.cpp
+#, fuzzy
msgid "Fog"
-msgstr ""
+msgstr "Nebbia"
#: scene/resources/environment.cpp
#, fuzzy
@@ -26510,7 +26851,7 @@ msgstr "Trasmissione"
msgid "Refraction"
msgstr "Separazione:"
-#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp
+#: scene/resources/material.cpp
msgid "Detail"
msgstr ""
@@ -26593,7 +26934,12 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
-msgid "Sample Partition Type"
+msgid "Sampling"
+msgstr "Scalatura:"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Partition Type"
msgstr "Imposta Tipo di Variabile"
#: scene/resources/navigation_mesh.cpp
@@ -26610,8 +26956,14 @@ msgid "Source Group Name"
msgstr "Sorgente"
#: scene/resources/navigation_mesh.cpp
-msgid "Agent"
-msgstr ""
+#, fuzzy
+msgid "Cells"
+msgstr "Cella"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Agents"
+msgstr "Argomenti Scena Principale:"
#: scene/resources/navigation_mesh.cpp
msgid "Max Climb"
@@ -26623,11 +26975,16 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
+msgid "Regions"
+msgstr "Regione"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
msgid "Merge Size"
msgstr "Unisci da Scena"
#: scene/resources/navigation_mesh.cpp
-msgid "Edge"
+msgid "Edges"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -26641,6 +26998,11 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
+msgid "Details"
+msgstr "Carica i predefiniti"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
msgid "Sample Distance"
msgstr "Scegli la Distanza:"
@@ -26658,9 +27020,19 @@ msgid "Ledge Spans"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Filter Walkable Low Height Spans"
+msgid "Walkable Low Height Spans"
msgstr ""
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB"
+msgstr "Generando AABB"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB Offset"
+msgstr "Scostamento:"
+
#: scene/resources/occluder_shape.cpp
msgid "Spheres"
msgstr ""
@@ -27074,6 +27446,11 @@ msgid "Scenario"
msgstr "Scena"
#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Navigation Map"
+msgstr "Navigazione"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
msgid "Direct Space State"
msgstr ""
@@ -27091,6 +27468,26 @@ msgstr "Lineare sinistra"
msgid "Default Angular Damp"
msgstr ""
+#: scene/resources/world.cpp
+#, fuzzy
+msgid "Default Map Up"
+msgstr "Passo Predefinito dei Float"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Size"
+msgstr "Anteprima Predefinita"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Height"
+msgstr "Testing"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Edge Connection Margin"
+msgstr "Modifica una connessione:"
+
#: scene/resources/world_2d.cpp
msgid "Canvas"
msgstr ""
@@ -27305,7 +27702,7 @@ msgstr ""
#: servers/audio/effects/audio_effect_stereo_enhance.cpp
#, fuzzy
msgid "Time Pullout (ms)"
-msgstr "Timeout."
+msgstr "Estrazione Temporale (ms)"
#: servers/audio/effects/audio_effect_stereo_enhance.cpp
msgid "Surround"
diff --git a/editor/translations/ja.po b/editor/translations/ja.po
index e3f760a17d..a699aeb597 100644
--- a/editor/translations/ja.po
+++ b/editor/translations/ja.po
@@ -242,9 +242,10 @@ msgid "Data"
msgstr "データ"
#: core/io/file_access_network.cpp core/register_core_types.cpp
-#: editor/editor_settings.cpp main/main.cpp
+#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
#: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h
+#: scene/gui/file_dialog.cpp
msgid "Network"
msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯"
@@ -394,6 +395,16 @@ msgstr "メッセージキュー"
msgid "Max Size (KB)"
msgstr "最大サイズ (KB)"
+#: core/os/input.cpp
+#, fuzzy
+msgid "Mouse Mode"
+msgstr "移動モード"
+
+#: core/os/input.cpp
+#, fuzzy
+msgid "Use Accumulated Input"
+msgstr "入力を削除"
+
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: servers/audio_server.cpp
msgid "Device"
@@ -575,7 +586,8 @@ msgstr "説明"
#: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
-#: main/main.cpp
+#: main/main.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp
msgid "Run"
msgstr "実行"
@@ -663,6 +675,10 @@ msgid "Main Run Args"
msgstr "メインシーンã®å¼•æ•°:"
#: core/project_settings.cpp
+msgid "Scene Naming"
+msgstr "シーンã®å‘½åè¦å‰‡"
+
+#: core/project_settings.cpp
msgid "Search In File Extensions"
msgstr "ファイル拡張å­ã§æ¤œç´¢"
@@ -670,18 +686,15 @@ msgstr "ファイル拡張å­ã§æ¤œç´¢"
msgid "Script Templates Search Path"
msgstr "ã‚¹ã‚¯ãƒªãƒ—ãƒˆãƒ†ãƒ³ãƒ—ãƒ¬ãƒ¼ãƒˆã®æ¤œç´¢ãƒ‘ス"
-#: core/project_settings.cpp editor/editor_node.cpp
-#: editor/plugins/version_control_editor_plugin.cpp
-msgid "Version Control"
-msgstr "ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«"
-
#: core/project_settings.cpp
-msgid "Autoload On Startup"
+#, fuzzy
+msgid "Version Control Autoload On Startup"
msgstr "起動時ã®è‡ªå‹•読ã¿è¾¼ã¿"
#: core/project_settings.cpp
-msgid "Plugin Name"
-msgstr "プラグインå"
+#, fuzzy
+msgid "Version Control Plugin Name"
+msgstr "ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«"
#: core/project_settings.cpp scene/2d/collision_object_2d.cpp
#: scene/3d/collision_object.cpp scene/gui/control.cpp
@@ -801,7 +814,8 @@ msgid "Quality"
msgstr "å“質"
#: core/project_settings.cpp scene/gui/file_dialog.cpp
-#: scene/main/scene_tree.cpp servers/visual_server.cpp
+#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp
+#: servers/visual_server.cpp
#, fuzzy
msgid "Filters"
msgstr "フィルター:"
@@ -2232,8 +2246,8 @@ msgid "Open"
msgstr "é–‹ã"
#: editor/dependency_editor.cpp
-msgid "Owners Of:"
-msgstr "次ã®ã‚ªãƒ¼ãƒŠãƒ¼:"
+msgid "Owners of: %s (Total: %d)"
+msgstr ""
#: editor/dependency_editor.cpp
msgid ""
@@ -2535,7 +2549,7 @@ msgid "Bus Options"
msgstr "ãƒã‚¹ オプション"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/scene_tree_dock.cpp
+#: editor/project_export.cpp editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "複製"
@@ -2792,6 +2806,25 @@ msgid "Choose"
msgstr "é¸ã¶"
#: editor/editor_export.cpp
+msgid "Project export for platform:"
+msgstr ""
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Completed with errors."
+msgstr "ノードã®ãƒ‘スをコピー"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Completed successfully."
+msgstr "パッケージã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã«æˆåŠŸã—ã¾ã—ãŸï¼"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed."
+msgstr "失敗:"
+
+#: editor/editor_export.cpp
msgid "Storing File:"
msgstr "ファイルã®ä¿å­˜:"
@@ -2804,6 +2837,31 @@ msgid "Packing"
msgstr "パック中"
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save PCK"
+msgstr "åå‰ã‚’付ã‘ã¦ä¿å­˜"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Cannot create file \"%s\"."
+msgstr "フォルダーを作æˆã§ãã¾ã›ã‚“ã§ã—ãŸã€‚"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to export project files."
+msgstr "プロジェクトファイルをエクスãƒãƒ¼ãƒˆã§ãã¾ã›ã‚“ã§ã—ãŸ"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Can't open file to read from path \"%s\"."
+msgstr "書ã込むファイルを開ã‘ã¾ã›ã‚“:"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save ZIP"
+msgstr "åå‰ã‚’付ã‘ã¦ä¿å­˜"
+
+#: editor/editor_export.cpp
msgid ""
"Target platform requires 'ETC' texture compression for GLES2. Enable 'Import "
"Etc' in Project Settings."
@@ -2924,11 +2982,33 @@ msgstr "カスタム デãƒãƒƒã‚°ãƒ†ãƒ³ãƒ—レートãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。"
msgid "Custom release template not found."
msgstr "カスタム リリーステンプレートãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。"
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Prepare Template"
+msgstr "テンプレートã®ç®¡ç†"
+
+#: editor/editor_export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "The given export path doesn't exist."
+msgstr "指定ã•れãŸã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆãƒ‘スãŒå­˜åœ¨ã—ã¾ã›ã‚“:"
+
#: editor/editor_export.cpp platform/javascript/export/export.cpp
-msgid "Template file not found:"
+#, fuzzy
+msgid "Template file not found: \"%s\"."
msgstr "テンプレートファイルãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“:"
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to copy export template."
+msgstr "無効ãªã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆ テンプレート:"
+
+#: editor/editor_export.cpp platform/windows/export/export.cpp
+#: platform/x11/export/export.cpp
+#, fuzzy
+msgid "PCK Embedding"
+msgstr "パディング"
+
+#: editor/editor_export.cpp
msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB."
msgstr ""
"32ビットã®ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã§ã¯ã€çµ„ã¿è¾¼ã¿PCKã¯4GiBã‚’è¶…ãˆã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。"
@@ -3102,9 +3182,9 @@ msgid "Import"
msgstr "インãƒãƒ¼ãƒˆ"
#: editor/editor_feature_profile.cpp editor/project_export.cpp
-#: platform/android/export/export.cpp platform/javascript/export/export.cpp
-#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
-#: platform/windows/export/export.cpp
+#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#: platform/uwp/export/export.cpp platform/windows/export/export.cpp
msgid "Export"
msgstr "エクスãƒãƒ¼ãƒˆ"
@@ -4250,14 +4330,6 @@ msgstr ""
"ファイル '%s'ã«æ›¸ãè¾¼ã‚ã¾ã›ã‚“。ファイルãŒä½¿ç”¨ä¸­ã‹ã€ãƒ­ãƒƒã‚¯ã•れã¦ã„ã‚‹ã‹ã€æ¨©é™ãŒ"
"ã‚りã¾ã›ã‚“。"
-#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
-msgid "Scene"
-msgstr "シーン"
-
-#: editor/editor_node.cpp
-msgid "Scene Naming"
-msgstr "シーンã®å‘½åè¦å‰‡"
-
#: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp
#: servers/arvr/arvr_interface.cpp
msgid "Interface"
@@ -4377,6 +4449,10 @@ msgid "Default Color Picker Mode"
msgstr "デフォルトã®ã‚«ãƒ©ãƒ¼ãƒ”ッカーモード"
#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
+msgid "Version Control"
+msgstr "ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«"
+
+#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
msgid "Username"
msgstr "ユーザーå"
@@ -4404,6 +4480,10 @@ msgstr "集中モードを切り替ãˆã‚‹ã€‚"
msgid "Add a new scene."
msgstr "æ–°è¦ã‚·ãƒ¼ãƒ³ã‚’追加ã™ã‚‹ã€‚"
+#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
+msgid "Scene"
+msgstr "シーン"
+
#: editor/editor_node.cpp
msgid "Go to previously opened scene."
msgstr "以å‰ã«é–‹ã„ãŸã‚·ãƒ¼ãƒ³ã«ç§»å‹•ã™ã‚‹ã€‚"
@@ -5196,6 +5276,11 @@ msgstr ""
"エクスãƒãƒ¼ãƒˆãƒ¡ãƒ‹ãƒ¥ãƒ¼ã«å®Ÿè¡Œå¯èƒ½ãªãƒ—リセットを追加ã™ã‚‹ã‹ã€æ—¢å­˜ã®ãƒ—リセットを実"
"行å¯èƒ½ã«ã—ã¦ãã ã•ã„。"
+#: editor/editor_run_native.cpp
+#, fuzzy
+msgid "Project Run"
+msgstr "プロジェクト"
+
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
msgstr "ロジックを _run() メソッドã«è¨˜è¿°ã™ã‚‹ã€‚"
@@ -5455,7 +5540,9 @@ msgid "Draw Spaces"
msgstr "スペースをæç”»"
#: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp
-#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp
+#: scene/main/scene_tree.cpp scene/resources/world.cpp
+#: scene/resources/world_2d.cpp
msgid "Navigation"
msgstr "ナビゲーション"
@@ -6902,7 +6989,7 @@ msgstr ""
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp
-#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp
+#: scene/gui/control.cpp
#, fuzzy
msgid "Filter"
msgstr "フィルター:"
@@ -7199,6 +7286,18 @@ msgid "Saving..."
msgstr "ä¿å­˜ä¸­..."
#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used as a normal map in 3D. Enabling red-green "
+"texture compression to reduce memory usage (blue channel is discarded)."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap "
+"generation and VRAM texture compression."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
msgid "2D, Detect 3D"
msgstr ""
@@ -7884,11 +7983,20 @@ msgid "New Anim"
msgstr "æ–°è¦ã‚¢ãƒ‹ãƒ¡ãƒ¼ã‚·ãƒ§ãƒ³"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+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 "Rename Animation"
+msgstr "アニメーションã®åå‰ã‚’変更"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Delete Animation?"
msgstr "アニメーションを削除ã—ã¾ã™ã‹ï¼Ÿ"
@@ -7906,11 +8014,6 @@ 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 "Duplicate Animation"
msgstr "アニメーションを複製"
@@ -8054,10 +8157,6 @@ msgid "Pin AnimationPlayer"
msgstr "アニメーションプレーヤーを固定"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Create New Animation"
-msgstr "アニメーションを新è¦ä½œæˆ"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Name:"
msgstr "アニメーションå:"
@@ -10175,6 +10274,7 @@ msgid "Points"
msgstr "点"
#: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp
+#: scene/resources/navigation_mesh.cpp
msgid "Polygons"
msgstr "ãƒãƒªã‚´ãƒ³"
@@ -11554,7 +11654,8 @@ msgid "Invalid geometry, can't replace by mesh."
msgstr "ジオメトリãŒç„¡åйã§ã™ã€‚メッシュã«ç½®ãæ›ãˆã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。"
#: editor/plugins/sprite_editor_plugin.cpp
-msgid "Convert to Mesh2D"
+#, fuzzy
+msgid "Convert to MeshInstance2D"
msgstr "Mesh2Dã«å¤‰æ›ã™ã‚‹"
#: editor/plugins/sprite_editor_plugin.cpp
@@ -12544,8 +12645,7 @@ msgid "Select the previous shape, subtile, or Tile."
msgstr "å‰ã®ã‚·ã‚§ã‚¤ãƒ—ã€ã‚µãƒ–タイルã€ã¾ãŸã¯ã‚¿ã‚¤ãƒ«ã‚’é¸æŠžã—ã¾ã™ã€‚"
#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp
-#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp
-#: scene/resources/texture.cpp
+#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp
msgid "Region"
msgstr "領域"
@@ -14055,38 +14155,10 @@ msgid "Delete preset '%s'?"
msgstr "プリセット '%s' を削除ã—ã¾ã™ã‹ï¼Ÿ"
#: editor/project_export.cpp
-msgid ""
-"Failed to export the project for platform '%s'.\n"
-"Export templates seem to be missing or invalid."
-msgstr ""
-"プラットフォーム '%s' ã¸ã®ãƒ—ロジェクトã®ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã«å¤±æ•—ã—ã¾ã—ãŸã€‚\n"
-"エクスãƒãƒ¼ãƒˆç”¨ãƒ†ãƒ³ãƒ—レートãŒå­˜åœ¨ã—ãªã„ã‹ã€ã‚ã‚‹ã„ã¯ç•°å¸¸ã§ã‚るよã†ã§ã™ã€‚"
-
-#: 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 ""
-"プラットフォーム '%s' ã¸ã®ãƒ—ロジェクトã®ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã«å¤±æ•—ã—ã¾ã—ãŸã€‚\n"
-"エクスãƒãƒ¼ãƒˆç”¨ãƒ—リセットã‚ã‚‹ã„ã¯ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆè¨­å®šã«å•題ãŒã‚ã‚‹å¯èƒ½æ€§ãŒã‚りã¾"
-"ã™ã€‚"
-
-#: 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 "Export Path"
msgstr "エクスãƒãƒ¼ãƒˆå…ˆã®ãƒ‘ス"
@@ -14233,6 +14305,11 @@ msgid "Export templates for this platform are missing:"
msgstr "ã“ã®ãƒ—ラットフォームã«å¯¾ã™ã‚‹ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆ テンプレートãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“:"
#: editor/project_export.cpp
+#, fuzzy
+msgid "Project Export"
+msgstr "プロジェクト創始者"
+
+#: editor/project_export.cpp
msgid "Manage Export Templates"
msgstr "エクスãƒãƒ¼ãƒˆãƒ†ãƒ³ãƒ—レートã®ç®¡ç†"
@@ -16619,7 +16696,7 @@ msgstr ""
#: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp
#: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp
-#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp
+#: scene/3d/collision_polygon.cpp
msgid "Polygon"
msgstr "ãƒãƒªã‚´ãƒ³"
@@ -17224,7 +17301,6 @@ msgid "Use In Baked Light"
msgstr "ライトマップを焼ã込む"
#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
-#: scene/resources/navigation_mesh.cpp
msgid "Cell"
msgstr ""
@@ -17254,6 +17330,19 @@ msgstr "中央"
msgid "Mask"
msgstr ""
+#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
+#, fuzzy
+msgid "Bake Navigation"
+msgstr "ナビゲーション"
+
+#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp
+#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp
+#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp
+#: scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Navigation Layers"
+msgstr "ナビゲーションモード"
+
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Plane"
msgstr "次ã®å¹³é¢"
@@ -18795,10 +18884,6 @@ msgid "Could not execute on device."
msgstr "デãƒã‚¤ã‚¹ã§å®Ÿè¡Œã§ãã¾ã›ã‚“ã§ã—ãŸã€‚"
#: platform/android/export/export_plugin.cpp
-msgid "Unable to find the 'apksigner' tool."
-msgstr "'apksigner' ツールãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。"
-
-#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -18917,12 +19002,17 @@ msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version."
msgstr ""
"\"Target Sdk\" ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¯ \"Min Sdk\" ãƒãƒ¼ã‚¸ãƒ§ãƒ³ä»¥ä¸Šã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。"
+#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Code Signing"
+msgstr "DMGをコード署å中"
+
#: platform/android/export/export_plugin.cpp
+#, fuzzy
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."
+"'apksigner' could not be found. Please check that the command is available "
+"in the Android SDK build-tools directory. The resulting %s is unsigned."
msgstr ""
"'apksigner' ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚\n"
"ã“ã®ã‚³ãƒžãƒ³ãƒ‰ãŒ Android SDK build-tools ディレクトリã«ã‚ã‚‹ã‹ç¢ºèªã—ã¦ãã ã•"
@@ -18942,6 +19032,11 @@ msgid "Could not find keystore, unable to export."
msgstr "キーストアãŒè¦‹ã¤ã‹ã‚‰ãªã„ãŸã‚ã€ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã§ãã¾ã›ã‚“。"
#: platform/android/export/export_plugin.cpp
+#, fuzzy
+msgid "Could not start apksigner executable."
+msgstr "サブプロセスを開始ã§ãã¾ã›ã‚“ã§ã—ãŸï¼"
+
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr "'apksigner' ãŒã‚¨ãƒ©ãƒ¼ #%d ã§çµ‚了ã—ã¾ã—ãŸ"
@@ -18970,7 +19065,8 @@ msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr "無効ãªãƒ•ァイルåã§ã™ï¼ Android APKã«ã¯æ‹¡å¼µå­ *.apk ãŒå¿…è¦ã§ã™ã€‚"
#: platform/android/export/export_plugin.cpp
-msgid "Unsupported export format!\n"
+#, fuzzy
+msgid "Unsupported export format!"
msgstr "サãƒãƒ¼ãƒˆã•れã¦ã„ãªã„エクスãƒãƒ¼ãƒˆãƒ•ォーマットã§ã™ï¼\n"
#: platform/android/export/export_plugin.cpp
@@ -18982,10 +19078,9 @@ msgstr ""
"情報ãŒå­˜åœ¨ã—ã¾ã›ã‚“。 「プロジェクトã€ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã‹ã‚‰å†ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã¦ãã ã•ã„。"
#: platform/android/export/export_plugin.cpp
+#, fuzzy
msgid ""
-"Android build version mismatch:\n"
-" Template installed: %s\n"
-" Godot Version: %s\n"
+"Android build version mismatch: Template installed: %s, Godot version: %s. "
"Please reinstall Android build template from 'Project' menu."
msgstr ""
"Androidビルド ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®ä¸ä¸€è‡´:\n"
@@ -18995,13 +19090,15 @@ msgstr ""
"ã ã•ã„。"
#: platform/android/export/export_plugin.cpp
+#, fuzzy
msgid ""
-"Unable to overwrite res://android/build/res/*.xml files with project name"
+"Unable to overwrite res://android/build/res/*.xml files with project name."
msgstr ""
"res://android/build/res/*.xml ファイルをプロジェクトåã§ä¸Šæ›¸ãã§ãã¾ã›ã‚“"
#: platform/android/export/export_plugin.cpp
-msgid "Could not export project files to gradle project\n"
+#, fuzzy
+msgid "Could not export project files to gradle project."
msgstr ""
"プロジェクトファイルをgladleプロジェクトã«ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã§ãã¾ã›ã‚“ã§ã—ãŸ\n"
@@ -19014,8 +19111,9 @@ msgid "Building Android Project (gradle)"
msgstr "Androidãƒ—ãƒ­ã‚¸ã‚§ã‚¯ãƒˆã®æ§‹ç¯‰(gradle)"
#: platform/android/export/export_plugin.cpp
+#, fuzzy
msgid ""
-"Building of Android project failed, check output for the error.\n"
+"Building of Android project failed, check output for the error. "
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
"Androidプロジェクトã®ãƒ“ルドã«å¤±æ•—ã—ã¾ã—ãŸã€‚エラーã®å‡ºåŠ›ã‚’ç¢ºèªã—ã¦ãã ã•ã„。\n"
@@ -19035,7 +19133,8 @@ msgstr ""
"gradleã®ãƒ—ロジェクトディレクトリを確èªã—ã¦ãã ã•ã„。"
#: platform/android/export/export_plugin.cpp
-msgid "Package not found: %s"
+#, fuzzy
+msgid "Package not found: \"%s\"."
msgstr "見ã¤ã‹ã‚‰ãªã„パッケージ: %s"
#: platform/android/export/export_plugin.cpp
@@ -19043,17 +19142,16 @@ msgid "Creating APK..."
msgstr "APK を作æˆã—ã¦ã„ã¾ã™..."
#: platform/android/export/export_plugin.cpp
-msgid ""
-"Could not find template APK to export:\n"
-"%s"
+#, fuzzy
+msgid "Could not find template APK to export: \"%s\"."
msgstr ""
"エクスãƒãƒ¼ãƒˆã™ã‚‹ãƒ†ãƒ³ãƒ—レートAPKãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ:\n"
"%s"
#: platform/android/export/export_plugin.cpp
+#, fuzzy
msgid ""
-"Missing libraries in the export template for the selected architectures: "
-"%s.\n"
+"Missing libraries in the export template for the selected architectures: %s. "
"Please build a template with all required libraries, or uncheck the missing "
"architectures in the export preset."
msgstr ""
@@ -19067,7 +19165,8 @@ msgid "Adding files..."
msgstr "ファイルを追加中..."
#: platform/android/export/export_plugin.cpp
-msgid "Could not export project files"
+#, fuzzy
+msgid "Could not export project files."
msgstr "プロジェクトファイルをエクスãƒãƒ¼ãƒˆã§ãã¾ã›ã‚“ã§ã—ãŸ"
#: platform/android/export/export_plugin.cpp
@@ -19309,6 +19408,17 @@ msgstr "ノードを切りå–ã‚‹"
msgid "Custom BG Color"
msgstr "ノードを切りå–ã‚‹"
+#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Prepare Templates"
+msgstr "テンプレートã®ç®¡ç†"
+
+#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Export template not found."
+msgstr "カスタム リリーステンプレートãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。"
+
#: platform/iphone/export/export.cpp
msgid "App Store Team ID not specified - cannot configure the project."
msgstr "App Store ãƒãƒ¼ãƒ ID ãŒæœªæŒ‡å®š - プロジェクトを構æˆã§ãã¾ã›ã‚“。"
@@ -19330,22 +19440,35 @@ msgid "Run exported HTML in the system's default browser."
msgstr "エクスãƒãƒ¼ãƒˆã—ãŸHTMLをシステム既定ã®ãƒ–ラウザã§å®Ÿè¡Œã™ã‚‹ã€‚"
#: platform/javascript/export/export.cpp
-msgid "Could not open template for export:"
+#, fuzzy
+msgid "Could not open template for export: \"%s\"."
msgstr "エクスãƒãƒ¼ãƒˆç”¨ã®ãƒ†ãƒ³ãƒ—レートを開ã‘ã¾ã›ã‚“ã§ã—ãŸ:"
#: platform/javascript/export/export.cpp
-msgid "Invalid export template:"
+#, fuzzy
+msgid "Invalid export template: \"%s\"."
msgstr "無効ãªã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆ テンプレート:"
#: platform/javascript/export/export.cpp
-msgid "Could not write file:"
+#, fuzzy
+msgid "Could not write file: \"%s\"."
msgstr "ファイルを書ãè¾¼ã‚ã¾ã›ã‚“ã§ã—ãŸ:"
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Icon Creation"
+msgstr "マージンを設定ã™ã‚‹"
+
#: platform/javascript/export/export.cpp
-msgid "Could not read file:"
+#, fuzzy
+msgid "Could not read file: \"%s\"."
msgstr "ファイルを読ã¿è¾¼ã‚ã¾ã›ã‚“ã§ã—ãŸ:"
#: platform/javascript/export/export.cpp
+msgid "PWA"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
#, fuzzy
msgid "Variant"
msgstr "分離:"
@@ -19420,15 +19543,18 @@ msgid "Icon 512 X 512"
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not read HTML shell:"
+#, fuzzy
+msgid "Could not read HTML shell: \"%s\"."
msgstr "HTMLシェルを読ã¿è¾¼ã‚ã¾ã›ã‚“ã§ã—ãŸ:"
#: platform/javascript/export/export.cpp
-msgid "Could not create HTTP server directory:"
+#, fuzzy
+msgid "Could not create HTTP server directory: %s."
msgstr "HTTPサーãƒãƒ¼ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã®ä½œæˆã«å¤±æ•—:"
#: platform/javascript/export/export.cpp
-msgid "Error starting HTTP server:"
+#, fuzzy
+msgid "Error starting HTTP server: %d."
msgstr "HTTPサーãƒãƒ¼ã®é–‹å§‹ã«å¤±æ•—:"
#: platform/javascript/export/export.cpp
@@ -19725,9 +19851,28 @@ msgid "Apple Team ID"
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open icon file \"%s\"."
+msgstr "プロジェクトファイルをエクスãƒãƒ¼ãƒˆã§ãã¾ã›ã‚“ã§ã—ãŸ"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start xcrun executable."
+msgstr "サブプロセスを開始ã§ãã¾ã›ã‚“ã§ã—ãŸï¼"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization failed."
+msgstr "ローカライズ"
+
+#: platform/osx/export/export.cpp
+msgid "Notarization request UUID: \"%s\""
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid ""
-"Note: The notarization process generally takes less than an hour. When the "
-"process is completed, you'll receive an email."
+"The notarization process generally takes less than an hour. When the process "
+"is completed, you'll receive an email."
msgstr ""
#: platform/osx/export/export.cpp
@@ -19743,21 +19888,76 @@ msgid ""
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign failed with error \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign require regex module."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Could not start codesign executable, make sure Xcode command line tools are "
+"installed."
+msgstr ""
+
+#: platform/osx/export/export.cpp platform/windows/export/export.cpp
#, fuzzy
msgid "No identity found."
msgstr "アイコンãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚"
#: platform/osx/export/export.cpp
#, fuzzy
+msgid "Cannot sign file %s."
+msgstr "ファイルã®ä¿å­˜ã‚¨ãƒ©ãƒ¼: %s"
+
+#: platform/osx/export/export.cpp
+msgid "Relative symlinks are not supported, exported \"%s\" might be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "DMG Creation"
+msgstr "æ–¹å‘"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start hdiutil executable."
+msgstr "サブプロセスを開始ã§ãã¾ã›ã‚“ã§ã—ãŸï¼"
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed - file exists."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
msgid "Creating app bundle"
msgstr "サムãƒã‚¤ãƒ«ã‚’作æˆä¸­"
#: platform/osx/export/export.cpp
#, fuzzy
-msgid "Could not find template app to export:"
+msgid "Could not find template app to export: \"%s\"."
msgstr "エクスãƒãƒ¼ãƒˆã™ã‚‹ãƒ†ãƒ³ãƒ—レートAPKãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ:"
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid export format."
+msgstr "無効ãªã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆ テンプレート:"
+
+#: platform/osx/export/export.cpp
msgid ""
"Relative symlinks are not supported on this OS, the exported project might "
"be broken!"
@@ -19765,7 +19965,7 @@ msgstr ""
#: platform/osx/export/export.cpp
msgid ""
-"Requested template binary '%s' not found. It might be missing from your "
+"Requested template binary \"%s\" not found. It might be missing from your "
"template archive."
msgstr ""
@@ -19806,6 +20006,17 @@ msgid "Sending archive for notarization"
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "ZIP Creation"
+msgstr "プロジェクト"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open file to read from path \"%s\"."
+msgstr ""
+"プロジェクトファイルをgladleプロジェクトã«ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã§ãã¾ã›ã‚“ã§ã—ãŸ\n"
+
+#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr "無効ãªãƒãƒ³ãƒ‰ãƒ«ID:"
@@ -20128,6 +20339,11 @@ msgid "Debug Algorithm"
msgstr "デãƒãƒƒã‚¬ãƒ¼"
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to rename temporary file \"%s\"."
+msgstr "一時ファイルを削除ã§ãã¾ã›ã‚“:"
+
+#: platform/windows/export/export.cpp
msgid "Identity Type"
msgstr ""
@@ -20175,6 +20391,70 @@ msgid "Trademarks"
msgstr ""
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Resources Modification"
+msgstr "ランダムãªå›žè»¢:"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find rcedit executable at \"%s\"."
+msgstr "キーストアãŒè¦‹ã¤ã‹ã‚‰ãªã„ãŸã‚ã€ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã§ãã¾ã›ã‚“。"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find wine executable at \"%s\"."
+msgstr "キーストアãŒè¦‹ã¤ã‹ã‚‰ãªã„ãŸã‚ã€ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã§ãã¾ã›ã‚“。"
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start rcedit executable, configure rcedit path in the Editor "
+"Settings (Export > Windows > Rcedit)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"rcedit failed to modify executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find signtool executable at \"%s\"."
+msgstr "キーストアãŒè¦‹ã¤ã‹ã‚‰ãªã„ãŸã‚ã€ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã§ãã¾ã›ã‚“。"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find osslsigncode executable at \"%s\"."
+msgstr "キーストアãŒè¦‹ã¤ã‹ã‚‰ãªã„ãŸã‚ã€ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã§ãã¾ã›ã‚“。"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid identity type."
+msgstr "無効ãªè­˜åˆ¥å­:"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid timestamp server."
+msgstr "無効ãªåå‰ã§ã™ã€‚"
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start signtool executable, configure signtool path in the Editor "
+"Settings (Export > Windows > Signtool)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Signtool failed to sign executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to remove temporary file \"%s\"."
+msgstr "一時ファイルを削除ã§ãã¾ã›ã‚“:"
+
+#: platform/windows/export/export.cpp
msgid ""
"The rcedit tool must be configured in the Editor Settings (Export > Windows "
"> Rcedit) to change the icon or app information data."
@@ -20193,6 +20473,23 @@ msgid "Invalid product version:"
msgstr "無効ãªè£½å“ãƒãƒ¼ã‚¸ãƒ§ãƒ³:"
#: platform/windows/export/export.cpp
+msgid "Windows executables cannot be >= 4 GiB."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+#, fuzzy
+msgid "Failed to open executable file \"%s\"."
+msgstr "無効ãªå®Ÿè¡Œå¯èƒ½ãƒ•ァイルã§ã™ã€‚"
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable file header corrupted."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable \"pck\" section not found."
+msgstr ""
+
+#: platform/windows/export/export.cpp
msgid "Windows"
msgstr "Windows"
@@ -20208,6 +20505,10 @@ msgstr "osslsigncode"
msgid "Wine"
msgstr "Wine"
+#: platform/x11/export/export.cpp
+msgid "32-bit executables cannot have embedded data >= 4 GiB."
+msgstr ""
+
#: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp
#: scene/resources/texture.cpp
#, fuzzy
@@ -20331,7 +20632,8 @@ msgstr ""
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/3d/light.cpp scene/3d/reflection_probe.cpp
-#: scene/3d/visual_instance.cpp scene/resources/material.cpp
+#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp
+#: scene/resources/material.cpp
msgid "Max Distance"
msgstr "最大è·é›¢"
@@ -21130,6 +21432,18 @@ msgstr ""
msgid "Edge Connection Margin"
msgstr "接続を編集:"
+#: scene/2d/navigation_2d.cpp
+msgid ""
+"'Navigation2D' node and 'Navigation2D.get_simple_path()' are deprecated and "
+"will be removed in a future version. Use 'Navigation2DServer.map_get_path()' "
+"instead."
+msgstr ""
+
+#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
+#, fuzzy
+msgid "Path Desired Distance"
+msgstr "è·é›¢ã‚’å–å¾—:"
+
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
msgid "Target Desired Distance"
msgstr ""
@@ -21190,17 +21504,19 @@ msgstr ""
"プロパティを設定ã™ã‚‹ã‹ã€ãƒãƒªã‚´ãƒ³ã‚’æç”»ã—ã¦ãã ã•ã„。"
#: scene/2d/navigation_polygon.cpp
-msgid ""
-"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
-"node. It only provides navigation data."
-msgstr ""
-"NavigationPolygonInstance ã¯ã€å­ã¾ãŸã¯å­« Navigation2D ノードã«ã‚ã‚‹å¿…è¦ãŒã‚り"
-"ã¾ã™ã€‚ナビゲーション データã®ã¿æä¾›ã—ã¾ã™ã€‚"
-
-#: scene/2d/navigation_polygon.cpp
msgid "Navpoly"
msgstr ""
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Enter Cost"
+msgstr "中央下"
+
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Travel Cost"
+msgstr "トラベル"
+
#: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp
#: scene/main/canvas_layer.cpp
#, fuzzy
@@ -22414,6 +22730,13 @@ msgstr "ソフトウェアスキニング"
msgid "Transform Normals"
msgstr "トランスフォームã¯ä¸­æ­¢ã•れã¾ã—ãŸã€‚"
+#: scene/3d/navigation.cpp
+msgid ""
+"'Navigation' node and 'Navigation.get_simple_path()' are deprecated and will "
+"be removed in a future version. Use 'NavigationServer.map_get_path()' "
+"instead."
+msgstr ""
+
#: scene/3d/navigation.cpp scene/resources/curve.cpp
#, fuzzy
msgid "Up Vector"
@@ -22439,14 +22762,6 @@ msgid ""
"The NavigationAgent can be used only under a Spatial inheriting parent node."
msgstr "NavigationAgent ã¯Spatialノードã®ä¸‹ã§ã®ã¿ä½¿ç”¨ã•れã¾ã™ã€‚"
-#: scene/3d/navigation_mesh_instance.cpp
-msgid ""
-"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
-"It only provides navigation data."
-msgstr ""
-"NavigationMeshInstance ã¯ã€ãƒŠãƒ“ゲーションノードã®å­ã‚„å­«ã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚"
-"ã“れã¯ãƒŠãƒ“ゲーションデータã®ã¿æä¾›ã—ã¾ã™ã€‚"
-
#: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp
#, fuzzy
msgid "NavMesh"
@@ -25188,6 +25503,16 @@ msgid "3D Physics"
msgstr " (物ç†çš„)"
#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "2D Navigation"
+msgstr "ナビゲーション"
+
+#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "3D Navigation"
+msgstr "ナビゲーション"
+
+#: scene/register_scene_types.cpp
msgid "Use hiDPI"
msgstr "hiDPIを使用"
@@ -26615,7 +26940,7 @@ msgstr "トランジション"
msgid "Refraction"
msgstr "分離:"
-#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp
+#: scene/resources/material.cpp
msgid "Detail"
msgstr ""
@@ -26700,7 +27025,12 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
-msgid "Sample Partition Type"
+msgid "Sampling"
+msgstr "縮尺: "
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Partition Type"
msgstr "変数ã®åž‹ã‚’設定"
#: scene/resources/navigation_mesh.cpp
@@ -26718,10 +27048,15 @@ msgid "Source Group Name"
msgstr "ソース"
#: scene/resources/navigation_mesh.cpp
-msgid "Agent"
+msgid "Cells"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Agents"
+msgstr "メインシーンã®å¼•æ•°:"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Max Climb"
msgstr ""
@@ -26731,11 +27066,16 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
+msgid "Regions"
+msgstr "領域"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
msgid "Merge Size"
msgstr "シーンã‹ã‚‰ãƒžãƒ¼ã‚¸"
#: scene/resources/navigation_mesh.cpp
-msgid "Edge"
+msgid "Edges"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -26749,6 +27089,11 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
+msgid "Details"
+msgstr "デフォルトを表示"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
msgid "Sample Distance"
msgstr "è·é›¢ã‚’å–å¾—:"
@@ -26766,9 +27111,19 @@ msgid "Ledge Spans"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Filter Walkable Low Height Spans"
+msgid "Walkable Low Height Spans"
msgstr ""
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB"
+msgstr "AABBを生æˆä¸­"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB Offset"
+msgstr "オフセット:"
+
#: scene/resources/occluder_shape.cpp
msgid "Spheres"
msgstr ""
@@ -27183,6 +27538,11 @@ msgid "Scenario"
msgstr "シーン"
#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Navigation Map"
+msgstr "ナビゲーション"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
msgid "Direct Space State"
msgstr ""
@@ -27200,6 +27560,26 @@ msgstr "左線形"
msgid "Default Angular Damp"
msgstr ""
+#: scene/resources/world.cpp
+#, fuzzy
+msgid "Default Map Up"
+msgstr "デフォルトã®Z Far"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Size"
+msgstr "デフォルトã®ãƒ—レビュー"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Height"
+msgstr "試験的"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Edge Connection Margin"
+msgstr "接続を編集:"
+
#: scene/resources/world_2d.cpp
msgid "Canvas"
msgstr ""
diff --git a/editor/translations/ka.po b/editor/translations/ka.po
index 875dfbd491..caf07e1063 100644
--- a/editor/translations/ka.po
+++ b/editor/translations/ka.po
@@ -216,9 +216,10 @@ msgid "Data"
msgstr ""
#: core/io/file_access_network.cpp core/register_core_types.cpp
-#: editor/editor_settings.cpp main/main.cpp
+#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
#: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h
+#: scene/gui/file_dialog.cpp
msgid "Network"
msgstr ""
@@ -372,6 +373,15 @@ msgstr ""
msgid "Max Size (KB)"
msgstr ""
+#: core/os/input.cpp
+#, fuzzy
+msgid "Mouse Mode"
+msgstr "მáƒáƒ¡áƒ¨áƒ¢áƒáƒ‘ის თáƒáƒœáƒáƒ¤áƒáƒ áƒ“áƒáƒ‘áƒ:"
+
+#: core/os/input.cpp
+msgid "Use Accumulated Input"
+msgstr ""
+
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: servers/audio_server.cpp
msgid "Device"
@@ -562,7 +572,8 @@ msgstr "áƒáƒ¦áƒ¬áƒ”რáƒ:"
#: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
-#: main/main.cpp
+#: main/main.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp
msgid "Run"
msgstr ""
@@ -650,24 +661,23 @@ msgid "Main Run Args"
msgstr ""
#: core/project_settings.cpp
-msgid "Search In File Extensions"
+msgid "Scene Naming"
msgstr ""
#: core/project_settings.cpp
-msgid "Script Templates Search Path"
+msgid "Search In File Extensions"
msgstr ""
-#: core/project_settings.cpp editor/editor_node.cpp
-#: editor/plugins/version_control_editor_plugin.cpp
-msgid "Version Control"
+#: core/project_settings.cpp
+msgid "Script Templates Search Path"
msgstr ""
#: core/project_settings.cpp
-msgid "Autoload On Startup"
+msgid "Version Control Autoload On Startup"
msgstr ""
#: core/project_settings.cpp
-msgid "Plugin Name"
+msgid "Version Control Plugin Name"
msgstr ""
#: core/project_settings.cpp scene/2d/collision_object_2d.cpp
@@ -776,7 +786,8 @@ msgid "Quality"
msgstr ""
#: core/project_settings.cpp scene/gui/file_dialog.cpp
-#: scene/main/scene_tree.cpp servers/visual_server.cpp
+#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp
+#: servers/visual_server.cpp
#, fuzzy
msgid "Filters"
msgstr "áƒáƒœáƒ˜áƒ› სიგრძის შეცვლáƒ"
@@ -2253,8 +2264,8 @@ msgid "Open"
msgstr "გáƒáƒ®áƒ¡áƒœáƒ˜áƒšáƒ˜"
#: editor/dependency_editor.cpp
-msgid "Owners Of:"
-msgstr "მფლáƒáƒ‘ელები:"
+msgid "Owners of: %s (Total: %d)"
+msgstr ""
#: editor/dependency_editor.cpp
#, fuzzy
@@ -2564,7 +2575,7 @@ msgid "Bus Options"
msgstr "áƒáƒ¦áƒ¬áƒ”რáƒ:"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/scene_tree_dock.cpp
+#: editor/project_export.cpp editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr ""
@@ -2822,6 +2833,23 @@ msgid "Choose"
msgstr ""
#: editor/editor_export.cpp
+msgid "Project export for platform:"
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Completed with errors."
+msgstr ""
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Completed successfully."
+msgstr "პáƒáƒ™áƒ”ტი დáƒáƒ§áƒ”ნდრწáƒáƒ áƒ›áƒáƒ¢áƒ”ბით!"
+
+#: editor/editor_export.cpp
+msgid "Failed."
+msgstr ""
+
+#: editor/editor_export.cpp
msgid "Storing File:"
msgstr ""
@@ -2834,6 +2862,28 @@ msgid "Packing"
msgstr ""
#: editor/editor_export.cpp
+msgid "Save PCK"
+msgstr ""
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Cannot create file \"%s\"."
+msgstr "ვერ წáƒáƒ•შლით:"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to export project files."
+msgstr "პრáƒáƒ”ქტის დáƒáƒ›áƒ¤áƒ£áƒ«áƒœáƒ”ბლები"
+
+#: editor/editor_export.cpp
+msgid "Can't open file to read from path \"%s\"."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Save ZIP"
+msgstr ""
+
+#: editor/editor_export.cpp
msgid ""
"Target platform requires 'ETC' texture compression for GLES2. Enable 'Import "
"Etc' in Project Settings."
@@ -2937,8 +2987,27 @@ msgstr ""
msgid "Custom release template not found."
msgstr ""
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Prepare Template"
+msgstr "წáƒáƒ•შáƒáƒšáƒáƒ— მáƒáƒœáƒ˜áƒ¨áƒœáƒ£áƒšáƒ˜ ფáƒáƒ˜áƒšáƒ”ბი?"
+
+#: editor/editor_export.cpp platform/osx/export/export.cpp
+msgid "The given export path doesn't exist."
+msgstr ""
+
#: editor/editor_export.cpp platform/javascript/export/export.cpp
-msgid "Template file not found:"
+#, fuzzy
+msgid "Template file not found: \"%s\"."
+msgstr "áƒáƒœáƒ˜áƒ›áƒáƒªáƒ˜áƒ˜áƒ¡ ხáƒáƒœáƒ’რძლივáƒáƒ‘რ(წáƒáƒ›áƒ”ბში)."
+
+#: editor/editor_export.cpp
+msgid "Failed to copy export template."
+msgstr ""
+
+#: editor/editor_export.cpp platform/windows/export/export.cpp
+#: platform/x11/export/export.cpp
+msgid "PCK Embedding"
msgstr ""
#: editor/editor_export.cpp
@@ -3118,9 +3187,9 @@ msgid "Import"
msgstr ""
#: editor/editor_feature_profile.cpp editor/project_export.cpp
-#: platform/android/export/export.cpp platform/javascript/export/export.cpp
-#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
-#: platform/windows/export/export.cpp
+#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#: platform/uwp/export/export.cpp platform/windows/export/export.cpp
msgid "Export"
msgstr ""
@@ -4230,14 +4299,6 @@ msgid ""
"Unable to write to file '%s', file in use, locked or lacking permissions."
msgstr ""
-#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
-msgid "Scene"
-msgstr ""
-
-#: editor/editor_node.cpp
-msgid "Scene Naming"
-msgstr ""
-
#: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp
#: servers/arvr/arvr_interface.cpp
msgid "Interface"
@@ -4358,6 +4419,10 @@ msgid "Default Color Picker Mode"
msgstr ""
#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
+msgid "Version Control"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
#, fuzzy
msgid "Username"
msgstr "áƒáƒ£áƒ“ირგáƒáƒ“áƒáƒ›áƒ¢áƒáƒœáƒ˜áƒ¡ სáƒáƒ®áƒ”ლის ცვლილებáƒ"
@@ -4386,6 +4451,10 @@ msgstr ""
msgid "Add a new scene."
msgstr ""
+#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
+msgid "Scene"
+msgstr ""
+
#: editor/editor_node.cpp
msgid "Go to previously opened scene."
msgstr ""
@@ -5131,6 +5200,11 @@ msgid ""
"as runnable."
msgstr ""
+#: editor/editor_run_native.cpp
+#, fuzzy
+msgid "Project Run"
+msgstr "პრáƒáƒ”ქტის დáƒáƒ›áƒ¤áƒ£áƒ«áƒœáƒ”ბლები"
+
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
msgstr ""
@@ -5394,7 +5468,9 @@ msgid "Draw Spaces"
msgstr ""
#: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp
-#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp
+#: scene/main/scene_tree.cpp scene/resources/world.cpp
+#: scene/resources/world_2d.cpp
#, fuzzy
msgid "Navigation"
msgstr "შექმნáƒ"
@@ -6851,7 +6927,7 @@ msgstr ""
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp
-#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp
+#: scene/gui/control.cpp
#, fuzzy
msgid "Filter"
msgstr "áƒáƒœáƒ˜áƒ› სიგრძის შეცვლáƒ"
@@ -7135,6 +7211,18 @@ msgid "Saving..."
msgstr ""
#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used as a normal map in 3D. Enabling red-green "
+"texture compression to reduce memory usage (blue channel is discarded)."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap "
+"generation and VRAM texture compression."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
msgid "2D, Detect 3D"
msgstr ""
@@ -7821,11 +7909,20 @@ msgid "New Anim"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+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 "Rename Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Delete Animation?"
msgstr ""
@@ -7843,11 +7940,6 @@ 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 "Duplicate Animation"
msgstr ""
@@ -7991,10 +8083,6 @@ msgid "Pin AnimationPlayer"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Create New Animation"
-msgstr ""
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Name:"
msgstr ""
@@ -10113,6 +10201,7 @@ msgid "Points"
msgstr ""
#: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp
+#: scene/resources/navigation_mesh.cpp
#, fuzzy
msgid "Polygons"
msgstr "შექმნáƒ"
@@ -11513,8 +11602,9 @@ msgid "Invalid geometry, can't replace by mesh."
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
-msgid "Convert to Mesh2D"
-msgstr ""
+#, fuzzy
+msgid "Convert to MeshInstance2D"
+msgstr "შექმნáƒ"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Invalid geometry, can't create polygon."
@@ -12525,8 +12615,7 @@ msgid "Select the previous shape, subtile, or Tile."
msgstr ""
#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp
-#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp
-#: scene/resources/texture.cpp
+#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp
#, fuzzy
msgid "Region"
msgstr "ინტერპáƒáƒšáƒáƒªáƒ˜áƒ˜áƒ¡ რეჟიმი"
@@ -14026,31 +14115,10 @@ 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 "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 "Export Path"
msgstr ""
@@ -14185,6 +14253,11 @@ msgid "Export templates for this platform are missing:"
msgstr ""
#: editor/project_export.cpp
+#, fuzzy
+msgid "Project Export"
+msgstr "პრáƒáƒ”ქტის დáƒáƒ›áƒ¤áƒ£áƒ«áƒœáƒ”ბლები"
+
+#: editor/project_export.cpp
msgid "Manage Export Templates"
msgstr ""
@@ -16505,7 +16578,7 @@ msgstr ""
#: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp
#: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp
-#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp
+#: scene/3d/collision_polygon.cpp
#, fuzzy
msgid "Polygon"
msgstr "შექმნáƒ"
@@ -17092,7 +17165,6 @@ msgid "Use In Baked Light"
msgstr ""
#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
-#: scene/resources/navigation_mesh.cpp
msgid "Cell"
msgstr ""
@@ -17122,6 +17194,19 @@ msgstr "წáƒáƒ¨áƒšáƒ"
msgid "Mask"
msgstr ""
+#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
+#, fuzzy
+msgid "Bake Navigation"
+msgstr "შექმნáƒ"
+
+#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp
+#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp
+#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp
+#: scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Navigation Layers"
+msgstr "შექმნáƒ"
+
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Plane"
msgstr ""
@@ -18629,10 +18714,6 @@ 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."
@@ -18737,12 +18818,16 @@ msgstr ""
msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version."
msgstr ""
+#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Code Signing"
+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."
+"'apksigner' could not be found. Please check that the command is available "
+"in the Android SDK build-tools directory. The resulting %s is unsigned."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18758,6 +18843,10 @@ msgid "Could not find keystore, unable to export."
msgstr ""
#: platform/android/export/export_plugin.cpp
+msgid "Could not start apksigner executable."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
@@ -18786,7 +18875,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Unsupported export format!\n"
+msgid "Unsupported export format!"
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18797,19 +18886,17 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Android build version mismatch:\n"
-" Template installed: %s\n"
-" Godot Version: %s\n"
+"Android build version mismatch: Template installed: %s, Godot version: %s. "
"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"
+"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"
+msgid "Could not export project files to gradle project."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18822,7 +18909,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Building of Android project failed, check output for the error.\n"
+"Building of Android project failed, check output for the error. "
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
@@ -18838,7 +18925,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
#, fuzzy
-msgid "Package not found: %s"
+msgid "Package not found: \"%s\"."
msgstr "áƒáƒœáƒ˜áƒ›áƒáƒªáƒ˜áƒ˜áƒ¡ ხáƒáƒœáƒ’რძლივáƒáƒ‘რ(წáƒáƒ›áƒ”ბში)."
#: platform/android/export/export_plugin.cpp
@@ -18846,15 +18933,12 @@ msgid "Creating APK..."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid ""
-"Could not find template APK to export:\n"
-"%s"
+msgid "Could not find template APK to export: \"%s\"."
msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Missing libraries in the export template for the selected architectures: "
-"%s.\n"
+"Missing libraries in the export template for the selected architectures: %s. "
"Please build a template with all required libraries, or uncheck the missing "
"architectures in the export preset."
msgstr ""
@@ -18865,7 +18949,7 @@ msgid "Adding files..."
msgstr "სáƒáƒ§áƒ•áƒáƒ áƒšáƒ”ბი:"
#: platform/android/export/export_plugin.cpp
-msgid "Could not export project files"
+msgid "Could not export project files."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -19104,6 +19188,15 @@ msgstr "áƒáƒœáƒ˜áƒ›áƒáƒªáƒ˜áƒ˜áƒ¡ გáƒáƒ¡áƒáƒ¦áƒ”ბების áƒáƒ¡áƒšá
msgid "Custom BG Color"
msgstr "áƒáƒœáƒ˜áƒ›áƒáƒªáƒ˜áƒ˜áƒ¡ გáƒáƒ¡áƒáƒ¦áƒ”ბების áƒáƒ¡áƒšáƒ˜áƒ¡ შექმნáƒ"
+#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
+#: platform/osx/export/export.cpp
+msgid "Prepare Templates"
+msgstr ""
+
+#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
+msgid "Export template not found."
+msgstr ""
+
#: platform/iphone/export/export.cpp
msgid "App Store Team ID not specified - cannot configure the project."
msgstr ""
@@ -19126,19 +19219,29 @@ msgid "Run exported HTML in the system's default browser."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not open template for export:"
+msgid "Could not open template for export: \"%s\"."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Invalid export template:"
+#, fuzzy
+msgid "Invalid export template: \"%s\"."
+msgstr "áƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒ˜ ფáƒáƒœáƒ¢áƒ˜áƒ¡ ზáƒáƒ›áƒ."
+
+#: platform/javascript/export/export.cpp
+msgid "Could not write file: \"%s\"."
msgstr ""
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Icon Creation"
+msgstr "მáƒáƒœáƒ˜áƒ¨áƒ•ნის მრუდის ცვლილებáƒ"
+
#: platform/javascript/export/export.cpp
-msgid "Could not write file:"
+msgid "Could not read file: \"%s\"."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not read file:"
+msgid "PWA"
msgstr ""
#: platform/javascript/export/export.cpp
@@ -19215,16 +19318,17 @@ msgid "Icon 512 X 512"
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not read HTML shell:"
+msgid "Could not read HTML shell: \"%s\"."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not create HTTP server directory:"
+msgid "Could not create HTTP server directory: %s."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Error starting HTTP server:"
-msgstr ""
+#, fuzzy
+msgid "Error starting HTTP server: %d."
+msgstr "ჩáƒáƒ¢áƒ•ირთვის შეცდáƒáƒ›áƒ”ბი!"
#: platform/javascript/export/export.cpp
msgid "Web"
@@ -19507,9 +19611,26 @@ msgid "Apple Team ID"
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Could not open icon file \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Could not start xcrun executable."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization failed."
+msgstr "შექმნáƒ"
+
+#: platform/osx/export/export.cpp
+msgid "Notarization request UUID: \"%s\""
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid ""
-"Note: The notarization process generally takes less than an hour. When the "
-"process is completed, you'll receive an email."
+"The notarization process generally takes less than an hour. When the process "
+"is completed, you'll receive an email."
msgstr ""
#: platform/osx/export/export.cpp
@@ -19525,19 +19646,73 @@ msgid ""
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign failed with error \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign require regex module."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Could not start codesign executable, make sure Xcode command line tools are "
+"installed."
+msgstr ""
+
+#: platform/osx/export/export.cpp platform/windows/export/export.cpp
#, fuzzy
msgid "No identity found."
msgstr "მუდმივი"
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Cannot sign file %s."
+msgstr "ჩáƒáƒ¢áƒ•ირთვის შეცდáƒáƒ›áƒ”ბი!"
+
+#: platform/osx/export/export.cpp
+msgid "Relative symlinks are not supported, exported \"%s\" might be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "DMG Creation"
+msgstr "áƒáƒ¦áƒ¬áƒ”რáƒ:"
+
+#: platform/osx/export/export.cpp
+msgid "Could not start hdiutil executable."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed - file exists."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed."
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid "Creating app bundle"
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Could not find template app to export:"
+msgid "Could not find template app to export: \"%s\"."
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid export format."
+msgstr "áƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒ˜ ფáƒáƒœáƒ¢áƒ˜áƒ¡ ზáƒáƒ›áƒ."
+
+#: platform/osx/export/export.cpp
msgid ""
"Relative symlinks are not supported on this OS, the exported project might "
"be broken!"
@@ -19545,7 +19720,7 @@ msgstr ""
#: platform/osx/export/export.cpp
msgid ""
-"Requested template binary '%s' not found. It might be missing from your "
+"Requested template binary \"%s\" not found. It might be missing from your "
"template archive."
msgstr ""
@@ -19587,6 +19762,15 @@ msgstr ""
#: platform/osx/export/export.cpp
#, fuzzy
+msgid "ZIP Creation"
+msgstr "პრáƒáƒ”ქტის დáƒáƒ›áƒ¤áƒ£áƒ«áƒœáƒ”ბლები"
+
+#: platform/osx/export/export.cpp
+msgid "Could not open file to read from path \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
msgid "Invalid bundle identifier:"
msgstr "áƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒ˜ ფáƒáƒœáƒ¢áƒ˜áƒ¡ ზáƒáƒ›áƒ."
@@ -19896,6 +20080,11 @@ msgid "Debug Algorithm"
msgstr ""
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to rename temporary file \"%s\"."
+msgstr "ვერ წáƒáƒ•შლით:"
+
+#: platform/windows/export/export.cpp
msgid "Identity Type"
msgstr ""
@@ -19942,6 +20131,66 @@ msgid "Trademarks"
msgstr ""
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Resources Modification"
+msgstr "მუდმივი"
+
+#: platform/windows/export/export.cpp
+msgid "Could not find rcedit executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find wine executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start rcedit executable, configure rcedit path in the Editor "
+"Settings (Export > Windows > Rcedit)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"rcedit failed to modify executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find signtool executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find osslsigncode executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid identity type."
+msgstr "áƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒ˜ ფáƒáƒœáƒ¢áƒ˜áƒ¡ ზáƒáƒ›áƒ."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid timestamp server."
+msgstr "áƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒ˜ ფáƒáƒœáƒ¢áƒ˜áƒ¡ ზáƒáƒ›áƒ."
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start signtool executable, configure signtool path in the Editor "
+"Settings (Export > Windows > Signtool)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Signtool failed to sign executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to remove temporary file \"%s\"."
+msgstr "ვერ წáƒáƒ•შლით:"
+
+#: platform/windows/export/export.cpp
msgid ""
"The rcedit tool must be configured in the Editor Settings (Export > Windows "
"> Rcedit) to change the icon or app information data."
@@ -19963,6 +20212,23 @@ msgid "Invalid product version:"
msgstr "áƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒ˜ ფáƒáƒœáƒ¢áƒ˜áƒ¡ ზáƒáƒ›áƒ."
#: platform/windows/export/export.cpp
+msgid "Windows executables cannot be >= 4 GiB."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+#, fuzzy
+msgid "Failed to open executable file \"%s\"."
+msgstr "áƒáƒ áƒáƒ¡áƒ¬áƒáƒ áƒ˜ ფáƒáƒœáƒ¢áƒ˜áƒ¡ ზáƒáƒ›áƒ."
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable file header corrupted."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable \"pck\" section not found."
+msgstr ""
+
+#: platform/windows/export/export.cpp
msgid "Windows"
msgstr ""
@@ -19978,6 +20244,10 @@ msgstr ""
msgid "Wine"
msgstr ""
+#: platform/x11/export/export.cpp
+msgid "32-bit executables cannot have embedded data >= 4 GiB."
+msgstr ""
+
#: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp
#: scene/resources/texture.cpp
msgid "Frames"
@@ -20092,7 +20362,8 @@ msgstr ""
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/3d/light.cpp scene/3d/reflection_probe.cpp
-#: scene/3d/visual_instance.cpp scene/resources/material.cpp
+#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp
+#: scene/resources/material.cpp
msgid "Max Distance"
msgstr ""
@@ -20839,6 +21110,18 @@ msgstr ""
msgid "Edge Connection Margin"
msgstr "მáƒáƒœáƒ˜áƒ¨áƒ•ნის მრუდის ცვლილებáƒ"
+#: scene/2d/navigation_2d.cpp
+msgid ""
+"'Navigation2D' node and 'Navigation2D.get_simple_path()' are deprecated and "
+"will be removed in a future version. Use 'Navigation2DServer.map_get_path()' "
+"instead."
+msgstr ""
+
+#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
+#, fuzzy
+msgid "Path Desired Distance"
+msgstr "დáƒáƒ§áƒ”ნებáƒ"
+
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
msgid "Target Desired Distance"
msgstr ""
@@ -20890,13 +21173,16 @@ msgid ""
msgstr ""
#: scene/2d/navigation_polygon.cpp
-msgid ""
-"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
-"node. It only provides navigation data."
+msgid "Navpoly"
msgstr ""
-#: scene/2d/navigation_polygon.cpp
-msgid "Navpoly"
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Enter Cost"
+msgstr "წáƒáƒ¨áƒšáƒ"
+
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+msgid "Travel Cost"
msgstr ""
#: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp
@@ -21999,6 +22285,13 @@ msgstr ""
msgid "Transform Normals"
msgstr "შექმნáƒ"
+#: scene/3d/navigation.cpp
+msgid ""
+"'Navigation' node and 'Navigation.get_simple_path()' are deprecated and will "
+"be removed in a future version. Use 'NavigationServer.map_get_path()' "
+"instead."
+msgstr ""
+
#: scene/3d/navigation.cpp scene/resources/curve.cpp
msgid "Up Vector"
msgstr ""
@@ -22020,12 +22313,6 @@ msgid ""
"The NavigationAgent can be used only under a Spatial inheriting parent node."
msgstr ""
-#: scene/3d/navigation_mesh_instance.cpp
-msgid ""
-"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
-"It only provides navigation data."
-msgstr ""
-
#: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp
msgid "NavMesh"
msgstr ""
@@ -24558,6 +24845,16 @@ msgid "3D Physics"
msgstr ""
#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "2D Navigation"
+msgstr "შექმნáƒ"
+
+#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "3D Navigation"
+msgstr "შექმნáƒ"
+
+#: scene/register_scene_types.cpp
msgid "Use hiDPI"
msgstr ""
@@ -25924,7 +26221,7 @@ msgstr "გáƒáƒ áƒ“áƒáƒ¡áƒ•ლáƒ"
msgid "Refraction"
msgstr "ფუნქციის შექმნáƒ"
-#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp
+#: scene/resources/material.cpp
msgid "Detail"
msgstr ""
@@ -26004,7 +26301,12 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
-msgid "Sample Partition Type"
+msgid "Sampling"
+msgstr "მáƒáƒ¡áƒ¨áƒ¢áƒáƒ‘ის თáƒáƒœáƒáƒ¤áƒáƒ áƒ“áƒáƒ‘áƒ:"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Partition Type"
msgstr "%s ტიპის ცვლილებáƒ"
#: scene/resources/navigation_mesh.cpp
@@ -26021,7 +26323,11 @@ msgid "Source Group Name"
msgstr "რესურსი"
#: scene/resources/navigation_mesh.cpp
-msgid "Agent"
+msgid "Cells"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
+msgid "Agents"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -26033,11 +26339,16 @@ msgid "Max Slope"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Regions"
+msgstr "ინტერპáƒáƒšáƒáƒªáƒ˜áƒ˜áƒ¡ რეჟიმი"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Merge Size"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Edge"
+msgid "Edges"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -26050,6 +26361,11 @@ msgid "Verts Per Poly"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Details"
+msgstr "áƒáƒœáƒ˜áƒ› სიგრძის შეცვლáƒ"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Sample Distance"
msgstr ""
@@ -26066,9 +26382,18 @@ msgid "Ledge Spans"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Filter Walkable Low Height Spans"
+msgid "Walkable Low Height Spans"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
+msgid "Baking AABB"
msgstr ""
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB Offset"
+msgstr "მáƒáƒœáƒ˜áƒ¨áƒ•ნის მáƒáƒ¨áƒáƒ áƒ”ბáƒ"
+
#: scene/resources/occluder_shape.cpp
msgid "Spheres"
msgstr ""
@@ -26461,6 +26786,11 @@ msgid "Scenario"
msgstr ""
#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Navigation Map"
+msgstr "შექმნáƒ"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
msgid "Direct Space State"
msgstr ""
@@ -26477,6 +26807,26 @@ msgstr "წრფივი"
msgid "Default Angular Damp"
msgstr ""
+#: scene/resources/world.cpp
+#, fuzzy
+msgid "Default Map Up"
+msgstr "%s ტიპის ცვლილებáƒ"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Size"
+msgstr "%s ტიპის ცვლილებáƒ"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Height"
+msgstr "%s ტიპის ცვლილებáƒ"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Edge Connection Margin"
+msgstr "მáƒáƒœáƒ˜áƒ¨áƒ•ნის მრუდის ცვლილებáƒ"
+
#: scene/resources/world_2d.cpp
msgid "Canvas"
msgstr ""
diff --git a/editor/translations/km.po b/editor/translations/km.po
index b08b57906d..b58578c50d 100644
--- a/editor/translations/km.po
+++ b/editor/translations/km.po
@@ -200,9 +200,10 @@ msgid "Data"
msgstr ""
#: core/io/file_access_network.cpp core/register_core_types.cpp
-#: editor/editor_settings.cpp main/main.cpp
+#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
#: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h
+#: scene/gui/file_dialog.cpp
msgid "Network"
msgstr ""
@@ -351,6 +352,14 @@ msgstr ""
msgid "Max Size (KB)"
msgstr ""
+#: core/os/input.cpp
+msgid "Mouse Mode"
+msgstr ""
+
+#: core/os/input.cpp
+msgid "Use Accumulated Input"
+msgstr ""
+
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: servers/audio_server.cpp
msgid "Device"
@@ -531,7 +540,8 @@ msgstr ""
#: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
-#: main/main.cpp
+#: main/main.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp
msgid "Run"
msgstr ""
@@ -614,24 +624,23 @@ msgid "Main Run Args"
msgstr ""
#: core/project_settings.cpp
-msgid "Search In File Extensions"
+msgid "Scene Naming"
msgstr ""
#: core/project_settings.cpp
-msgid "Script Templates Search Path"
+msgid "Search In File Extensions"
msgstr ""
-#: core/project_settings.cpp editor/editor_node.cpp
-#: editor/plugins/version_control_editor_plugin.cpp
-msgid "Version Control"
+#: core/project_settings.cpp
+msgid "Script Templates Search Path"
msgstr ""
#: core/project_settings.cpp
-msgid "Autoload On Startup"
+msgid "Version Control Autoload On Startup"
msgstr ""
#: core/project_settings.cpp
-msgid "Plugin Name"
+msgid "Version Control Plugin Name"
msgstr ""
#: core/project_settings.cpp scene/2d/collision_object_2d.cpp
@@ -739,7 +748,8 @@ msgid "Quality"
msgstr ""
#: core/project_settings.cpp scene/gui/file_dialog.cpp
-#: scene/main/scene_tree.cpp servers/visual_server.cpp
+#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp
+#: servers/visual_server.cpp
msgid "Filters"
msgstr ""
@@ -2125,7 +2135,7 @@ msgid "Open"
msgstr ""
#: editor/dependency_editor.cpp
-msgid "Owners Of:"
+msgid "Owners of: %s (Total: %d)"
msgstr ""
#: editor/dependency_editor.cpp
@@ -2416,7 +2426,7 @@ msgid "Bus Options"
msgstr ""
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/scene_tree_dock.cpp
+#: editor/project_export.cpp editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr ""
@@ -2672,6 +2682,22 @@ msgid "Choose"
msgstr ""
#: editor/editor_export.cpp
+msgid "Project export for platform:"
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Completed with errors."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Completed successfully."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Failed."
+msgstr ""
+
+#: editor/editor_export.cpp
msgid "Storing File:"
msgstr ""
@@ -2684,6 +2710,26 @@ msgid "Packing"
msgstr ""
#: editor/editor_export.cpp
+msgid "Save PCK"
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Cannot create file \"%s\"."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Failed to export project files."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Can't open file to read from path \"%s\"."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Save ZIP"
+msgstr ""
+
+#: editor/editor_export.cpp
msgid ""
"Target platform requires 'ETC' texture compression for GLES2. Enable 'Import "
"Etc' in Project Settings."
@@ -2784,8 +2830,25 @@ msgstr ""
msgid "Custom release template not found."
msgstr ""
+#: editor/editor_export.cpp
+msgid "Prepare Template"
+msgstr ""
+
+#: editor/editor_export.cpp platform/osx/export/export.cpp
+msgid "The given export path doesn't exist."
+msgstr ""
+
#: editor/editor_export.cpp platform/javascript/export/export.cpp
-msgid "Template file not found:"
+msgid "Template file not found: \"%s\"."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Failed to copy export template."
+msgstr ""
+
+#: editor/editor_export.cpp platform/windows/export/export.cpp
+#: platform/x11/export/export.cpp
+msgid "PCK Embedding"
msgstr ""
#: editor/editor_export.cpp
@@ -2955,9 +3018,9 @@ msgid "Import"
msgstr ""
#: editor/editor_feature_profile.cpp editor/project_export.cpp
-#: platform/android/export/export.cpp platform/javascript/export/export.cpp
-#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
-#: platform/windows/export/export.cpp
+#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#: platform/uwp/export/export.cpp platform/windows/export/export.cpp
msgid "Export"
msgstr ""
@@ -4033,14 +4096,6 @@ msgid ""
"Unable to write to file '%s', file in use, locked or lacking permissions."
msgstr ""
-#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
-msgid "Scene"
-msgstr ""
-
-#: editor/editor_node.cpp
-msgid "Scene Naming"
-msgstr ""
-
#: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp
#: servers/arvr/arvr_interface.cpp
msgid "Interface"
@@ -4155,6 +4210,10 @@ msgid "Default Color Picker Mode"
msgstr ""
#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
+msgid "Version Control"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
msgid "Username"
msgstr ""
@@ -4182,6 +4241,10 @@ msgstr ""
msgid "Add a new scene."
msgstr ""
+#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
+msgid "Scene"
+msgstr ""
+
#: editor/editor_node.cpp
msgid "Go to previously opened scene."
msgstr ""
@@ -4909,6 +4972,10 @@ msgid ""
"as runnable."
msgstr ""
+#: editor/editor_run_native.cpp
+msgid "Project Run"
+msgstr ""
+
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
msgstr ""
@@ -5163,7 +5230,9 @@ msgid "Draw Spaces"
msgstr ""
#: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp
-#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp
+#: scene/main/scene_tree.cpp scene/resources/world.cpp
+#: scene/resources/world_2d.cpp
msgid "Navigation"
msgstr ""
@@ -6546,7 +6615,7 @@ msgstr ""
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp
-#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp
+#: scene/gui/control.cpp
msgid "Filter"
msgstr ""
@@ -6813,6 +6882,18 @@ msgid "Saving..."
msgstr ""
#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used as a normal map in 3D. Enabling red-green "
+"texture compression to reduce memory usage (blue channel is discarded)."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap "
+"generation and VRAM texture compression."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
msgid "2D, Detect 3D"
msgstr ""
@@ -7464,11 +7545,20 @@ msgid "New Anim"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+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 "Rename Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Delete Animation?"
msgstr ""
@@ -7486,11 +7576,6 @@ 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 "Duplicate Animation"
msgstr ""
@@ -7633,10 +7718,6 @@ msgid "Pin AnimationPlayer"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Create New Animation"
-msgstr ""
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Name:"
msgstr ""
@@ -9689,6 +9770,7 @@ msgid "Points"
msgstr ""
#: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp
+#: scene/resources/navigation_mesh.cpp
msgid "Polygons"
msgstr ""
@@ -11042,7 +11124,7 @@ msgid "Invalid geometry, can't replace by mesh."
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
-msgid "Convert to Mesh2D"
+msgid "Convert to MeshInstance2D"
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
@@ -12000,8 +12082,7 @@ msgid "Select the previous shape, subtile, or Tile."
msgstr ""
#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp
-#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp
-#: scene/resources/texture.cpp
+#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp
msgid "Region"
msgstr ""
@@ -13418,31 +13499,10 @@ 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 "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 "Export Path"
msgstr ""
@@ -13575,6 +13635,10 @@ msgid "Export templates for this platform are missing:"
msgstr ""
#: editor/project_export.cpp
+msgid "Project Export"
+msgstr ""
+
+#: editor/project_export.cpp
msgid "Manage Export Templates"
msgstr ""
@@ -15822,7 +15886,7 @@ msgstr ""
#: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp
#: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp
-#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp
+#: scene/3d/collision_polygon.cpp
msgid "Polygon"
msgstr ""
@@ -16381,7 +16445,6 @@ msgid "Use In Baked Light"
msgstr ""
#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
-#: scene/resources/navigation_mesh.cpp
msgid "Cell"
msgstr ""
@@ -16407,6 +16470,19 @@ msgstr ""
msgid "Mask"
msgstr ""
+#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
+#, fuzzy
+msgid "Bake Navigation"
+msgstr "Key(s) ដែលបានជ្រើសស្ទួន"
+
+#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp
+#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp
+#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp
+#: scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Navigation Layers"
+msgstr "ážáž˜áŸ’លៃ:"
+
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Plane"
msgstr ""
@@ -17836,10 +17912,6 @@ 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."
@@ -17943,12 +18015,15 @@ msgstr ""
msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version."
msgstr ""
+#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp
+#: platform/windows/export/export.cpp
+msgid "Code Signing"
+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."
+"'apksigner' could not be found. Please check that the command is available "
+"in the Android SDK build-tools directory. The resulting %s is unsigned."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -17964,6 +18039,10 @@ msgid "Could not find keystore, unable to export."
msgstr ""
#: platform/android/export/export_plugin.cpp
+msgid "Could not start apksigner executable."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
@@ -17992,7 +18071,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Unsupported export format!\n"
+msgid "Unsupported export format!"
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18003,19 +18082,17 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Android build version mismatch:\n"
-" Template installed: %s\n"
-" Godot Version: %s\n"
+"Android build version mismatch: Template installed: %s, Godot version: %s. "
"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"
+"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"
+msgid "Could not export project files to gradle project."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18028,7 +18105,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Building of Android project failed, check output for the error.\n"
+"Building of Android project failed, check output for the error. "
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
@@ -18043,7 +18120,7 @@ msgid ""
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Package not found: %s"
+msgid "Package not found: \"%s\"."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18051,15 +18128,12 @@ msgid "Creating APK..."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid ""
-"Could not find template APK to export:\n"
-"%s"
+msgid "Could not find template APK to export: \"%s\"."
msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Missing libraries in the export template for the selected architectures: "
-"%s.\n"
+"Missing libraries in the export template for the selected architectures: %s. "
"Please build a template with all required libraries, or uncheck the missing "
"architectures in the export preset."
msgstr ""
@@ -18069,7 +18143,7 @@ msgid "Adding files..."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Could not export project files"
+msgid "Could not export project files."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18293,6 +18367,15 @@ msgstr ""
msgid "Custom BG Color"
msgstr ""
+#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
+#: platform/osx/export/export.cpp
+msgid "Prepare Templates"
+msgstr ""
+
+#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
+msgid "Export template not found."
+msgstr ""
+
#: platform/iphone/export/export.cpp
msgid "App Store Team ID not specified - cannot configure the project."
msgstr ""
@@ -18314,19 +18397,28 @@ msgid "Run exported HTML in the system's default browser."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not open template for export:"
+msgid "Could not open template for export: \"%s\"."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Invalid export template:"
+#, fuzzy
+msgid "Invalid export template: \"%s\"."
+msgstr "index នៃ type %s សម្រាប់ base type %s មិនážáŸ’រឺមážáŸ’រូវទáŸ"
+
+#: platform/javascript/export/export.cpp
+msgid "Could not write file: \"%s\"."
+msgstr ""
+
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+msgid "Icon Creation"
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not write file:"
+msgid "Could not read file: \"%s\"."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not read file:"
+msgid "PWA"
msgstr ""
#: platform/javascript/export/export.cpp
@@ -18398,15 +18490,15 @@ msgid "Icon 512 X 512"
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not read HTML shell:"
+msgid "Could not read HTML shell: \"%s\"."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not create HTTP server directory:"
+msgid "Could not create HTTP server directory: %s."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Error starting HTTP server:"
+msgid "Error starting HTTP server: %d."
msgstr ""
#: platform/javascript/export/export.cpp
@@ -18673,9 +18765,25 @@ msgid "Apple Team ID"
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Could not open icon file \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Could not start xcrun executable."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization failed."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization request UUID: \"%s\""
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid ""
-"Note: The notarization process generally takes less than an hour. When the "
-"process is completed, you'll receive an email."
+"The notarization process generally takes less than an hour. When the process "
+"is completed, you'll receive an email."
msgstr ""
#: platform/osx/export/export.cpp
@@ -18691,15 +18799,66 @@ msgid ""
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign failed with error \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign require regex module."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Could not start codesign executable, make sure Xcode command line tools are "
+"installed."
+msgstr ""
+
+#: platform/osx/export/export.cpp platform/windows/export/export.cpp
msgid "No identity found."
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Cannot sign file %s."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Relative symlinks are not supported, exported \"%s\" might be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "DMG Creation"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Could not start hdiutil executable."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed - file exists."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed."
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid "Creating app bundle"
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Could not find template app to export:"
+msgid "Could not find template app to export: \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Invalid export format."
msgstr ""
#: platform/osx/export/export.cpp
@@ -18710,7 +18869,7 @@ msgstr ""
#: platform/osx/export/export.cpp
msgid ""
-"Requested template binary '%s' not found. It might be missing from your "
+"Requested template binary \"%s\" not found. It might be missing from your "
"template archive."
msgstr ""
@@ -18751,6 +18910,14 @@ msgid "Sending archive for notarization"
msgstr ""
#: platform/osx/export/export.cpp
+msgid "ZIP Creation"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Could not open file to read from path \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr ""
@@ -19047,6 +19214,10 @@ msgid "Debug Algorithm"
msgstr ""
#: platform/windows/export/export.cpp
+msgid "Failed to rename temporary file \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
msgid "Identity Type"
msgstr ""
@@ -19087,6 +19258,63 @@ msgid "Trademarks"
msgstr ""
#: platform/windows/export/export.cpp
+msgid "Resources Modification"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find rcedit executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find wine executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start rcedit executable, configure rcedit path in the Editor "
+"Settings (Export > Windows > Rcedit)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"rcedit failed to modify executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find signtool executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find osslsigncode executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid identity type."
+msgstr "arguments ដែលប្រើសំរាប់រៀប '%s' មិនážáŸ’រឹមážáŸ’រូវទáŸ"
+
+#: platform/windows/export/export.cpp
+msgid "Invalid timestamp server."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start signtool executable, configure signtool path in the Editor "
+"Settings (Export > Windows > Signtool)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Signtool failed to sign executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Failed to remove temporary file \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
msgid ""
"The rcedit tool must be configured in the Editor Settings (Export > Windows "
"> Rcedit) to change the icon or app information data."
@@ -19105,6 +19333,22 @@ msgid "Invalid product version:"
msgstr ""
#: platform/windows/export/export.cpp
+msgid "Windows executables cannot be >= 4 GiB."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Failed to open executable file \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable file header corrupted."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable \"pck\" section not found."
+msgstr ""
+
+#: platform/windows/export/export.cpp
msgid "Windows"
msgstr ""
@@ -19120,6 +19364,10 @@ msgstr ""
msgid "Wine"
msgstr ""
+#: platform/x11/export/export.cpp
+msgid "32-bit executables cannot have embedded data >= 4 GiB."
+msgstr ""
+
#: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp
#: scene/resources/texture.cpp
msgid "Frames"
@@ -19229,7 +19477,8 @@ msgstr ""
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/3d/light.cpp scene/3d/reflection_probe.cpp
-#: scene/3d/visual_instance.cpp scene/resources/material.cpp
+#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp
+#: scene/resources/material.cpp
msgid "Max Distance"
msgstr ""
@@ -19927,6 +20176,17 @@ msgstr ""
msgid "Edge Connection Margin"
msgstr ""
+#: scene/2d/navigation_2d.cpp
+msgid ""
+"'Navigation2D' node and 'Navigation2D.get_simple_path()' are deprecated and "
+"will be removed in a future version. Use 'Navigation2DServer.map_get_path()' "
+"instead."
+msgstr ""
+
+#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
+msgid "Path Desired Distance"
+msgstr ""
+
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
msgid "Target Desired Distance"
msgstr ""
@@ -19977,13 +20237,15 @@ msgid ""
msgstr ""
#: scene/2d/navigation_polygon.cpp
-msgid ""
-"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
-"node. It only provides navigation data."
+msgid "Navpoly"
msgstr ""
-#: scene/2d/navigation_polygon.cpp
-msgid "Navpoly"
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+msgid "Enter Cost"
+msgstr ""
+
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+msgid "Travel Cost"
msgstr ""
#: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp
@@ -21019,6 +21281,13 @@ msgstr ""
msgid "Transform Normals"
msgstr ""
+#: scene/3d/navigation.cpp
+msgid ""
+"'Navigation' node and 'Navigation.get_simple_path()' are deprecated and will "
+"be removed in a future version. Use 'NavigationServer.map_get_path()' "
+"instead."
+msgstr ""
+
#: scene/3d/navigation.cpp scene/resources/curve.cpp
msgid "Up Vector"
msgstr ""
@@ -21040,12 +21309,6 @@ msgid ""
"The NavigationAgent can be used only under a Spatial inheriting parent node."
msgstr ""
-#: scene/3d/navigation_mesh_instance.cpp
-msgid ""
-"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
-"It only provides navigation data."
-msgstr ""
-
#: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp
msgid "NavMesh"
msgstr ""
@@ -23392,6 +23655,16 @@ msgid "3D Physics"
msgstr ""
#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "2D Navigation"
+msgstr "Key(s) ដែលបានជ្រើសស្ទួន"
+
+#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "3D Navigation"
+msgstr "Key(s) ដែលបានជ្រើសស្ទួន"
+
+#: scene/register_scene_types.cpp
msgid "Use hiDPI"
msgstr ""
@@ -24620,7 +24893,7 @@ msgstr ""
msgid "Refraction"
msgstr ""
-#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp
+#: scene/resources/material.cpp
msgid "Detail"
msgstr ""
@@ -24696,10 +24969,15 @@ msgid "Visible Instance Count"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Sample Partition Type"
+msgid "Sampling"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Partition Type"
+msgstr "Anim ផ្លាស់ប្ážáž¼ážš Transition"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Parsed Geometry Type"
msgstr ""
@@ -24712,7 +24990,11 @@ msgid "Source Group Name"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Agent"
+msgid "Cells"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
+msgid "Agents"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -24724,11 +25006,15 @@ msgid "Max Slope"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+msgid "Regions"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
msgid "Merge Size"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Edge"
+msgid "Edges"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -24741,6 +25027,10 @@ msgid "Verts Per Poly"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+msgid "Details"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
msgid "Sample Distance"
msgstr ""
@@ -24757,7 +25047,15 @@ msgid "Ledge Spans"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Filter Walkable Low Height Spans"
+msgid "Walkable Low Height Spans"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
+msgid "Baking AABB"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
+msgid "Baking AABB Offset"
msgstr ""
#: scene/resources/occluder_shape.cpp
@@ -25119,6 +25417,11 @@ msgid "Scenario"
msgstr ""
#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Navigation Map"
+msgstr "Anim ផ្លាស់ប្ážáž¼ážš Transition"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
msgid "Direct Space State"
msgstr ""
@@ -25134,6 +25437,25 @@ msgstr ""
msgid "Default Angular Damp"
msgstr ""
+#: scene/resources/world.cpp
+#, fuzzy
+msgid "Default Map Up"
+msgstr "ážáž˜áŸ’លៃ:"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Size"
+msgstr "ážáž˜áŸ’លៃ:"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Height"
+msgstr "ážáž˜áŸ’លៃ:"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+msgid "Default Edge Connection Margin"
+msgstr ""
+
#: scene/resources/world_2d.cpp
msgid "Canvas"
msgstr ""
diff --git a/editor/translations/ko.po b/editor/translations/ko.po
index 9dde50266e..fb4bf92e30 100644
--- a/editor/translations/ko.po
+++ b/editor/translations/ko.po
@@ -32,13 +32,17 @@
# Lee Minhak <minarihak@gmail.com>, 2022.
# 한수현 <shh1473@ajou.ac.kr>, 2022.
# Taehun Yun <yooontehoon@naver.com>, 2022.
+# vrSono <global.sonogong@gmail.com>, 2022.
+# Seonghyeon Cho <seonghyeoncho96@gmail.com>, 2022.
+# Haoyu Qiu <timothyqiu32@gmail.com>, 2022.
+# 김태우 <ogosengi3@gmail.com>, 2022.
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: 2022-05-30 16:17+0000\n"
-"Last-Translator: Myeongjin Lee <aranet100@gmail.com>\n"
+"PO-Revision-Date: 2022-06-26 16:16+0000\n"
+"Last-Translator: 김태우 <ogosengi3@gmail.com>\n"
"Language-Team: Korean <https://hosted.weblate.org/projects/godot-engine/"
"godot/ko/>\n"
"Language: ko\n"
@@ -46,7 +50,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.13-dev\n"
+"X-Generator: Weblate 4.13.1-dev\n"
#: core/bind/core_bind.cpp main/main.cpp
msgid "Tablet Driver"
@@ -230,9 +234,10 @@ msgid "Data"
msgstr "ë°ì´í„°"
#: core/io/file_access_network.cpp core/register_core_types.cpp
-#: editor/editor_settings.cpp main/main.cpp
+#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
#: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h
+#: scene/gui/file_dialog.cpp
msgid "Network"
msgstr "네트워í¬"
@@ -337,9 +342,8 @@ msgid "Not enough bytes for decoding bytes, or invalid format."
msgstr "디코딩할 ë°”ì´íŠ¸ê°€ 모ìžë¼ê±°ë‚˜ ìž˜ëª»ëœ í˜•ì‹ìž…니다."
#: core/math/expression.cpp
-#, fuzzy
msgid "Invalid input %d (not passed) in expression"
-msgstr "표현ì‹ì˜ ìž…ë ¥ %i (전달ë˜ì§€ 않ìŒ) ì´(ê°€) 올바르지 않습니다"
+msgstr "표현ì‹ì˜ ìž…ë ¥ %d (전달ë˜ì§€ 않ìŒ) ì´(ê°€) 올바르지 않습니다"
#: core/math/expression.cpp
msgid "self can't be used because instance is null (not passed)"
@@ -382,6 +386,16 @@ msgstr "메시지 대기열"
msgid "Max Size (KB)"
msgstr "최대 í¬ê¸°(KB)"
+#: core/os/input.cpp
+#, fuzzy
+msgid "Mouse Mode"
+msgstr "ì´ë™ 모드"
+
+#: core/os/input.cpp
+#, fuzzy
+msgid "Use Accumulated Input"
+msgstr "입력 삭제"
+
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: servers/audio_server.cpp
msgid "Device"
@@ -561,7 +575,8 @@ msgstr "서술"
#: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
-#: main/main.cpp
+#: main/main.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp
msgid "Run"
msgstr "실행"
@@ -644,6 +659,10 @@ msgid "Main Run Args"
msgstr "ë©”ì¸ ì‹¤í–‰ ì¸ìž"
#: core/project_settings.cpp
+msgid "Scene Naming"
+msgstr "씬 ì´ë¦„ 지정"
+
+#: core/project_settings.cpp
msgid "Search In File Extensions"
msgstr "íŒŒì¼ í™•ìž¥ìžë¡œ 찾기"
@@ -651,18 +670,15 @@ msgstr "íŒŒì¼ í™•ìž¥ìžë¡œ 찾기"
msgid "Script Templates Search Path"
msgstr "스í¬ë¦½íЏ 템플릿 검색 경로"
-#: core/project_settings.cpp editor/editor_node.cpp
-#: editor/plugins/version_control_editor_plugin.cpp
-msgid "Version Control"
-msgstr "버전 컨트롤"
-
#: core/project_settings.cpp
-msgid "Autoload On Startup"
+#, fuzzy
+msgid "Version Control Autoload On Startup"
msgstr "스타트업으로 ìžë™ 로드"
#: core/project_settings.cpp
-msgid "Plugin Name"
-msgstr "í”ŒëŸ¬ê·¸ì¸ ì´ë¦„"
+#, fuzzy
+msgid "Version Control Plugin Name"
+msgstr "버전 컨트롤"
#: core/project_settings.cpp scene/2d/collision_object_2d.cpp
#: scene/3d/collision_object.cpp scene/gui/control.cpp
@@ -769,7 +785,8 @@ msgid "Quality"
msgstr "품질"
#: core/project_settings.cpp scene/gui/file_dialog.cpp
-#: scene/main/scene_tree.cpp servers/visual_server.cpp
+#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp
+#: servers/visual_server.cpp
msgid "Filters"
msgstr "í•„í„°"
@@ -1294,19 +1311,16 @@ msgid "Remove this track."
msgstr "ì´ íŠ¸ëž™ì„ ì œê±°í•©ë‹ˆë‹¤."
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Time (s):"
-msgstr "시간 (초): "
+msgstr "시간 (초):"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Position:"
-msgstr "위치"
+msgstr "위치:"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Rotation:"
-msgstr "회전"
+msgstr "회전:"
#: editor/animation_track_editor.cpp
#: editor/plugins/animation_tree_player_editor_plugin.cpp
@@ -1323,44 +1337,36 @@ msgid "Type:"
msgstr "타입:"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "(Invalid, expected type: %s)"
-msgstr "ìž˜ëª»ëœ ë‚´ë³´ë‚´ê¸° 템플릿:"
+msgstr "(ì¸ì‹ë¶ˆê°€. 예ìƒí•œ 타입: %s)"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Easing:"
-msgstr "ì†ë„ 완화"
+msgstr "Easing:"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "In-Handle:"
-msgstr "입력 핸들"
+msgstr "입력 핸들:"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Out-Handle:"
-msgstr "출력 핸들"
+msgstr "출력 핸들:"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Stream:"
-msgstr "스트림"
+msgstr "스트림:"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Start (s):"
-msgstr "재시작 (초):"
+msgstr "시작 (초):"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "End (s):"
-msgstr "페ì´ë“œ ì¸ (ì´ˆ):"
+msgstr "종료 (초):"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Animation Clip:"
-msgstr "애니메ì´ì…˜:"
+msgstr "애니메ì´ì…˜ í´ë¦½:"
#: editor/animation_track_editor.cpp
msgid "Toggle Track Enabled"
@@ -1575,9 +1581,8 @@ msgid "Add Method Track Key"
msgstr "메서드 트랙 키 추가"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Method not found in object:"
-msgstr "오브ì íŠ¸ì— ë©”ì„œë“œê°€ ì—†ìŒ: "
+msgstr "오브ì íŠ¸ì— ë©”ì„œë“œê°€ ì—†ìŒ:"
#: editor/animation_track_editor.cpp
msgid "Anim Move Keys"
@@ -2185,8 +2190,8 @@ msgid "Open"
msgstr "열기"
#: editor/dependency_editor.cpp
-msgid "Owners Of:"
-msgstr "소유ìž:"
+msgid "Owners of: %s (Total: %d)"
+msgstr ""
#: editor/dependency_editor.cpp
msgid ""
@@ -2485,7 +2490,7 @@ msgid "Bus Options"
msgstr "버스 옵션"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/scene_tree_dock.cpp
+#: editor/project_export.cpp editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "복제"
@@ -2538,9 +2543,8 @@ msgid "There is no '%s' file."
msgstr "'%s' 파ì¼ì´ 없습니다."
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Layout:"
-msgstr "ë ˆì´ì•„웃"
+msgstr "ë ˆì´ì•„웃:"
#: editor/editor_audio_buses.cpp
msgid "Invalid file, not an audio bus layout."
@@ -2742,6 +2746,25 @@ msgid "Choose"
msgstr "ì„ íƒ"
#: editor/editor_export.cpp
+msgid "Project export for platform:"
+msgstr ""
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Completed with errors."
+msgstr "íŒŒì¼ ê²½ë¡œ 완성"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Completed successfully."
+msgstr "패키지를 성공ì ìœ¼ë¡œ 설치했습니다!"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed."
+msgstr "실패함:"
+
+#: editor/editor_export.cpp
msgid "Storing File:"
msgstr "저장하려는 파ì¼:"
@@ -2754,6 +2777,31 @@ msgid "Packing"
msgstr "패킹 중"
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save PCK"
+msgstr "다른 ì´ë¦„으로 저장"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Cannot create file \"%s\"."
+msgstr "í´ë”를 만들 수 없습니다."
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to export project files."
+msgstr "프로ì íЏ 파ì¼ì„ 내보낼 수 없었습니다"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Can't open file to read from path \"%s\"."
+msgstr "파ì¼ì„ 쓰기 모드로 ì—´ 수 ì—†ìŒ:"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save ZIP"
+msgstr "다른 ì´ë¦„으로 저장"
+
+#: editor/editor_export.cpp
msgid ""
"Target platform requires 'ETC' texture compression for GLES2. Enable 'Import "
"Etc' in Project Settings."
@@ -2870,11 +2918,33 @@ msgstr "커스텀 디버그 í…œí”Œë¦¿ì„ ì°¾ì„ ìˆ˜ 없습니다."
msgid "Custom release template not found."
msgstr "커스텀 릴리스 í…œí”Œë¦¿ì„ ì°¾ì„ ìˆ˜ 없습니다."
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Prepare Template"
+msgstr "템플릿 관리"
+
+#: editor/editor_export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "The given export path doesn't exist."
+msgstr "주어진 내보내기 경로가 ì—†ìŒ:"
+
#: editor/editor_export.cpp platform/javascript/export/export.cpp
-msgid "Template file not found:"
+#, fuzzy
+msgid "Template file not found: \"%s\"."
msgstr "템플릿 파ì¼ì„ ì°¾ì„ ìˆ˜ 없습니다:"
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to copy export template."
+msgstr "ìž˜ëª»ëœ ë‚´ë³´ë‚´ê¸° 템플릿:"
+
+#: editor/editor_export.cpp platform/windows/export/export.cpp
+#: platform/x11/export/export.cpp
+#, fuzzy
+msgid "PCK Embedding"
+msgstr "패딩"
+
+#: editor/editor_export.cpp
msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB."
msgstr "32비트 환경ì—서는 4 GiB보다 í° ë‚´ìž¥ PCK를 내보낼 수 없습니다."
@@ -3045,9 +3115,9 @@ msgid "Import"
msgstr "가져오기"
#: editor/editor_feature_profile.cpp editor/project_export.cpp
-#: platform/android/export/export.cpp platform/javascript/export/export.cpp
-#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
-#: platform/windows/export/export.cpp
+#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#: platform/uwp/export/export.cpp platform/windows/export/export.cpp
msgid "Export"
msgstr "내보내기"
@@ -4132,7 +4202,7 @@ msgstr "ë ˆì´ì•„웃 ì‚­ì œ"
#: editor/editor_node.cpp editor/import_dock.cpp
#: editor/script_create_dialog.cpp
msgid "Default"
-msgstr "ë””í´íЏ"
+msgstr "기본값"
#: editor/editor_node.cpp editor/editor_resource_picker.cpp
#: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp
@@ -4185,14 +4255,6 @@ msgid ""
msgstr ""
"íŒŒì¼ '%s'ì— ì“¸ 수 없습니다. 파ì¼ì´ 사용 중ì´ê±°ë‚˜ 잠겨 있거나 ê¶Œí•œì´ ì—†ìŠµë‹ˆë‹¤."
-#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
-msgid "Scene"
-msgstr "씬"
-
-#: editor/editor_node.cpp
-msgid "Scene Naming"
-msgstr "씬 ì´ë¦„ 지정"
-
#: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp
#: servers/arvr/arvr_interface.cpp
msgid "Interface"
@@ -4307,6 +4369,10 @@ msgid "Default Color Picker Mode"
msgstr "기본 색 고르기 모드"
#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
+msgid "Version Control"
+msgstr "버전 컨트롤"
+
+#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
msgid "Username"
msgstr "ì‚¬ìš©ìž ì´ë¦„"
@@ -4334,6 +4400,10 @@ msgstr "집중 모드를 토글합니다."
msgid "Add a new scene."
msgstr "새 ì”¬ì„ ì¶”ê°€í•©ë‹ˆë‹¤."
+#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
+msgid "Scene"
+msgstr "씬"
+
#: editor/editor_node.cpp
msgid "Go to previously opened scene."
msgstr "ì´ì „ì— ì—´ì—ˆë˜ ì”¬ìœ¼ë¡œ ì´ë™í•©ë‹ˆë‹¤."
@@ -5018,9 +5088,8 @@ msgid "Size:"
msgstr "í¬ê¸°:"
#: editor/editor_properties_array_dict.cpp
-#, fuzzy
msgid "Page:"
-msgstr "페ì´ì§€: "
+msgstr "페ì´ì§€:"
#: editor/editor_properties_array_dict.cpp
#: editor/plugins/theme_editor_plugin.cpp
@@ -5114,6 +5183,11 @@ msgstr ""
"내보내기 메뉴ì—서 실행할 수 있는 í”„ë¦¬ì…‹ì„ ì¶”ê°€í•˜ê±°ë‚˜ 기존 í”„ë¦¬ì…‹ì„ ì‹¤í–‰í•  수 "
"있ë„ë¡ ì •ì˜í•´ì£¼ì„¸ìš”."
+#: editor/editor_run_native.cpp
+#, fuzzy
+msgid "Project Run"
+msgstr "프로ì íЏ"
+
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
msgstr "_run() ë©”ì„œë“œì— ë‹¹ì‹ ì˜ ë…¼ë¦¬ë¥¼ 작성하세요."
@@ -5367,7 +5441,9 @@ msgid "Draw Spaces"
msgstr "공백 사용"
#: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp
-#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp
+#: scene/main/scene_tree.cpp scene/resources/world.cpp
+#: scene/resources/world_2d.cpp
msgid "Navigation"
msgstr "네비게ì´ì…˜"
@@ -5535,7 +5611,7 @@ msgstr "타입 힌트 추가"
#: editor/editor_settings.cpp
msgid "Use Single Quotes"
-msgstr "ë‹¨ì¼ ì¸ìš© 사용"
+msgstr "홑따옴표 사용"
#: editor/editor_settings.cpp
msgid "Show Help Index"
@@ -5694,9 +5770,8 @@ msgid "Warped Mouse Panning"
msgstr ""
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Navigation Feel"
-msgstr "내비게ì´ì…˜ 모드"
+msgstr "내비게ì´ì…˜ ê°ë„"
#: editor/editor_settings.cpp
msgid "Orbit Sensitivity"
@@ -5752,42 +5827,36 @@ msgid "Freelook Speed Zoom Link"
msgstr "ìžìœ  ì‹œì  ì†ë„ 수정ìž"
#: editor/editor_settings.cpp editor/plugins/tile_map_editor_plugin.cpp
-#, fuzzy
msgid "Grid Color"
-msgstr "ìƒ‰ìƒ ì„ íƒ"
+msgstr "ê²©ìž ìƒ‰ìƒ"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Guides Color"
-msgstr "ìƒ‰ìƒ ì„ íƒ"
+msgstr "ê°€ì´ë“œ 색ìƒ"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Smart Snapping Line Color"
-msgstr "스마트 스냅"
+msgstr "스마트 스냅 ë¼ì¸ 색ìƒ"
#: editor/editor_settings.cpp
msgid "Bone Width"
-msgstr ""
+msgstr "본 너비"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Bone Color 1"
-msgstr "ìƒ‰ìƒ í•­ëª© ì´ë¦„ 바꾸기"
+msgstr "본 ìƒ‰ìƒ 1"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Bone Color 2"
-msgstr "ìƒ‰ìƒ í•­ëª© ì´ë¦„ 바꾸기"
+msgstr "본 ìƒ‰ìƒ 2"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Bone Selected Color"
-msgstr "ì„ íƒëœ 프로필 구성:"
+msgstr "ì„ íƒëœ 본 색ìƒ"
#: editor/editor_settings.cpp
msgid "Bone IK Color"
-msgstr ""
+msgstr "본 IK 색ìƒ"
#: editor/editor_settings.cpp
msgid "Bone Outline Color"
@@ -5889,14 +5958,12 @@ msgid "Auto Save"
msgstr "ìžë™ 저장"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Save Before Running"
-msgstr "ì”¬ì„ ì‹¤í–‰í•˜ê¸° ì „ì— ì €ìž¥..."
+msgstr "실행하기 ì „ì— ì €ìž¥"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Font Size"
-msgstr "ì •ë©´ ë·°"
+msgstr "í°íЏ í¬ê¸°"
#: editor/editor_settings.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
@@ -6826,7 +6893,7 @@ msgstr ""
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp
-#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp
+#: scene/gui/control.cpp
#, fuzzy
msgid "Filter"
msgstr "í•„í„°:"
@@ -7123,6 +7190,18 @@ msgid "Saving..."
msgstr "저장 중..."
#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used as a normal map in 3D. Enabling red-green "
+"texture compression to reduce memory usage (blue channel is discarded)."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap "
+"generation and VRAM texture compression."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
msgid "2D, Detect 3D"
msgstr ""
@@ -7810,11 +7889,20 @@ msgid "New Anim"
msgstr "새 애니메ì´ì…˜"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+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 "Rename Animation"
+msgstr "애니메ì´ì…˜ ì´ë¦„ 바꾸기"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Delete Animation?"
msgstr "애니메ì´ì…˜ì„ 삭제할까요?"
@@ -7832,11 +7920,6 @@ 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 "Duplicate Animation"
msgstr "애니메ì´ì…˜ 복제"
@@ -7980,10 +8063,6 @@ msgid "Pin AnimationPlayer"
msgstr "AnimationPlayer ê³ ì •"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Create New Animation"
-msgstr "새 애니메ì´ì…˜ 만들기"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Name:"
msgstr "애니메ì´ì…˜ ì´ë¦„:"
@@ -10098,6 +10177,7 @@ msgid "Points"
msgstr "ì "
#: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp
+#: scene/resources/navigation_mesh.cpp
msgid "Polygons"
msgstr "í´ë¦¬ê³¤"
@@ -11479,7 +11559,8 @@ msgid "Invalid geometry, can't replace by mesh."
msgstr "ìž˜ëª»ëœ ì§€ì˜¤ë©”íŠ¸ë¦¬. 메시로 대체할 수 없습니다."
#: editor/plugins/sprite_editor_plugin.cpp
-msgid "Convert to Mesh2D"
+#, fuzzy
+msgid "Convert to MeshInstance2D"
msgstr "Mesh2D로 변환"
#: editor/plugins/sprite_editor_plugin.cpp
@@ -12474,8 +12555,7 @@ msgid "Select the previous shape, subtile, or Tile."
msgstr "ì´ì „ 모양, 하위 타ì¼, í˜¹ì€ íƒ€ì¼ì„ ì„ íƒí•˜ì„¸ìš”."
#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp
-#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp
-#: scene/resources/texture.cpp
+#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp
msgid "Region"
msgstr "ì˜ì—­"
@@ -13997,35 +14077,10 @@ msgid "Delete preset '%s'?"
msgstr "'%s' í”„ë¦¬ì…‹ì„ ì‚­ì œí•˜ì‹œê² ìŠµë‹ˆê¹Œ?"
#: editor/project_export.cpp
-msgid ""
-"Failed to export the project for platform '%s'.\n"
-"Export templates seem to be missing or invalid."
-msgstr ""
-"'%s' 플랫í¼ì— 프로ì íŠ¸ë¥¼ 내보낼 수 없습니다.\n"
-"내보내기 í…œí”Œë¦¿ì´ ëˆ„ë½ë˜ê±°ë‚˜ ìž˜ëª»ëœ ê²ƒ 같습니다."
-
-#: 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 ""
-"'%s' 플랫í¼ì— 프로ì íŠ¸ë¥¼ 내보낼 수 없습니다.\n"
-"내보내기 프리셋ì´ë‚˜ 내보내기 ì„¤ì •ì˜ ë¬¸ì œì¸ ê²ƒ 같습니다."
-
-#: 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 "Export Path"
msgstr "경로 내보내기"
@@ -14170,6 +14225,11 @@ msgid "Export templates for this platform are missing:"
msgstr "ì´ í”Œëž«í¼ì— 대한 내보내기 í…œí”Œë¦¿ì´ ëˆ„ë½ë¨:"
#: editor/project_export.cpp
+#, fuzzy
+msgid "Project Export"
+msgstr "프로ì íЏ 창립ìž"
+
+#: editor/project_export.cpp
msgid "Manage Export Templates"
msgstr "내보내기 템플릿 관리"
@@ -15504,8 +15564,8 @@ msgid ""
"Node is in %s group(s).\n"
"Click to show groups dock."
msgstr ""
-"노드가 그룹 ì•ˆì— ìžˆìŠµë‹ˆë‹¤.\n"
-"í´ë¦­í•˜ë©´ 그룹 ë…ì„ ë³´ì—¬ì¤˜ìš”."
+"노드가 %s 그룹 ì•ˆì— ìžˆìŠµë‹ˆë‹¤.\n"
+"í´ë¦­í•˜ì—¬ 그룹 ë…ì„ ë´…ë‹ˆë‹¤."
#: editor/scene_tree_editor.cpp
msgid "Open Script:"
@@ -16574,7 +16634,7 @@ msgstr ""
#: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp
#: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp
-#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp
+#: scene/3d/collision_polygon.cpp
#, fuzzy
msgid "Polygon"
msgstr "í´ë¦¬ê³¤"
@@ -17197,7 +17257,6 @@ msgid "Use In Baked Light"
msgstr "ë¼ì´íŠ¸ë§µ 굽기"
#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
-#: scene/resources/navigation_mesh.cpp
msgid "Cell"
msgstr ""
@@ -17227,6 +17286,19 @@ msgstr "중앙"
msgid "Mask"
msgstr ""
+#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
+#, fuzzy
+msgid "Bake Navigation"
+msgstr "네비게ì´ì…˜"
+
+#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp
+#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp
+#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp
+#: scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Navigation Layers"
+msgstr "내비게ì´ì…˜ ê°ë„"
+
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Plane"
msgstr "ë‹¤ìŒ í‰ë©´"
@@ -18785,10 +18857,6 @@ msgid "Could not execute on device."
msgstr "기기ì—서 실행할 수 없었습니다."
#: platform/android/export/export_plugin.cpp
-msgid "Unable to find the 'apksigner' tool."
-msgstr "'apksigner' íˆ´ì„ ì°¾ì„ ìˆ˜ 없습니다."
-
-#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -18904,12 +18972,17 @@ msgstr "\"Export AAB\"는 \"Use Custom Build\"ê°€ í™œì„±í™”ëœ ê²½ìš°ì—ë§Œ 유í
msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version."
msgstr ""
+#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Code Signing"
+msgstr "시그ë„"
+
#: platform/android/export/export_plugin.cpp
+#, fuzzy
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."
+"'apksigner' could not be found. Please check that the command is available "
+"in the Android SDK build-tools directory. The resulting %s is unsigned."
msgstr ""
"'apksigner'를 ì°¾ì„ ìˆ˜ 없었습니다.\n"
"ëª…ë ¹ì´ Android SDK build-tools 디렉토리ì—서 사용 가능한지 확ì¸í•´ì£¼ì„¸ìš”.\n"
@@ -18928,6 +19001,11 @@ msgid "Could not find keystore, unable to export."
msgstr "keystore를 ì°¾ì„ ìˆ˜ 없어, 내보낼 수 없었습니다."
#: platform/android/export/export_plugin.cpp
+#, fuzzy
+msgid "Could not start apksigner executable."
+msgstr "하위 프로세스를 시작할 수 없습니다!"
+
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr "'apksigner'ê°€ 오류 #%d로 반환ë˜ì—ˆìŠµë‹ˆë‹¤"
@@ -18956,7 +19034,8 @@ msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr "ìž˜ëª»ëœ íŒŒì¼ì´ë¦„입니다! Android APK는 *.apk 확장ìžê°€ 필요합니다."
#: platform/android/export/export_plugin.cpp
-msgid "Unsupported export format!\n"
+#, fuzzy
+msgid "Unsupported export format!"
msgstr "ì§€ì›ë˜ì§€ 않는 내보내기 형ì‹ìž…니다!\n"
#: platform/android/export/export_plugin.cpp
@@ -18968,10 +19047,9 @@ msgstr ""
"(Project)' 메뉴ì—서 다시 설치해주세요."
#: platform/android/export/export_plugin.cpp
+#, fuzzy
msgid ""
-"Android build version mismatch:\n"
-" Template installed: %s\n"
-" Godot Version: %s\n"
+"Android build version mismatch: Template installed: %s, Godot version: %s. "
"Please reinstall Android build template from 'Project' menu."
msgstr ""
"Android 빌드 ë²„ì „ì´ ë§žì§€ 않ìŒ:\n"
@@ -18980,13 +19058,15 @@ msgstr ""
"'프로ì íЏ' 메뉴ì—서 Android 빌드 í…œí”Œë¦¿ì„ ë‹¤ì‹œ 설치해주세요."
#: platform/android/export/export_plugin.cpp
+#, fuzzy
msgid ""
-"Unable to overwrite res://android/build/res/*.xml files with project name"
+"Unable to overwrite res://android/build/res/*.xml files with project name."
msgstr ""
"res://android/build/res/*.xml 파ì¼ì„ 프로ì íЏ ì´ë¦„으로 ë®ì–´ì“¸ 수 없습니다"
#: platform/android/export/export_plugin.cpp
-msgid "Could not export project files to gradle project\n"
+#, fuzzy
+msgid "Could not export project files to gradle project."
msgstr "프로ì íЏ 파ì¼ì„ gradle 프로ì íŠ¸ë¡œ 내보낼 수 없었습니다\n"
#: platform/android/export/export_plugin.cpp
@@ -18998,8 +19078,9 @@ msgid "Building Android Project (gradle)"
msgstr "Android 프로ì íЏ 빌드 중 (gradle)"
#: platform/android/export/export_plugin.cpp
+#, fuzzy
msgid ""
-"Building of Android project failed, check output for the error.\n"
+"Building of Android project failed, check output for the error. "
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
"Android 프로ì íŠ¸ì˜ ë¹Œë“œì— ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤, ì¶œë ¥ëœ ì˜¤ë¥˜ë¥¼ 확ì¸í•˜ì„¸ìš”.\n"
@@ -19018,7 +19099,8 @@ msgstr ""
"트 디렉토리를 확ì¸í•˜ì„¸ìš”."
#: platform/android/export/export_plugin.cpp
-msgid "Package not found: %s"
+#, fuzzy
+msgid "Package not found: \"%s\"."
msgstr "패키지를 ì°¾ì„ ìˆ˜ ì—†ìŒ: %s"
#: platform/android/export/export_plugin.cpp
@@ -19026,17 +19108,16 @@ msgid "Creating APK..."
msgstr "APK를 만드는 중..."
#: platform/android/export/export_plugin.cpp
-msgid ""
-"Could not find template APK to export:\n"
-"%s"
+#, fuzzy
+msgid "Could not find template APK to export: \"%s\"."
msgstr ""
"내보낼 템플릿 APK를 ì°¾ì„ ìˆ˜ ì—†ìŒ:\n"
"%s"
#: platform/android/export/export_plugin.cpp
+#, fuzzy
msgid ""
-"Missing libraries in the export template for the selected architectures: "
-"%s.\n"
+"Missing libraries in the export template for the selected architectures: %s. "
"Please build a template with all required libraries, or uncheck the missing "
"architectures in the export preset."
msgstr ""
@@ -19050,7 +19131,8 @@ msgid "Adding files..."
msgstr "파ì¼ì„ 추가하는 중..."
#: platform/android/export/export_plugin.cpp
-msgid "Could not export project files"
+#, fuzzy
+msgid "Could not export project files."
msgstr "프로ì íЏ 파ì¼ì„ 내보낼 수 없었습니다"
#: platform/android/export/export_plugin.cpp
@@ -19293,6 +19375,17 @@ msgstr "노드 잘ë¼ë‚´ê¸°"
msgid "Custom BG Color"
msgstr "노드 잘ë¼ë‚´ê¸°"
+#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Prepare Templates"
+msgstr "템플릿 관리"
+
+#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Export template not found."
+msgstr "커스텀 릴리스 í…œí”Œë¦¿ì„ ì°¾ì„ ìˆ˜ 없습니다."
+
#: platform/iphone/export/export.cpp
msgid "App Store Team ID not specified - cannot configure the project."
msgstr "App Store 팀 ID를 지정하지 않았습니다 - 프로ì íŠ¸ë¥¼ 구성할 수 없습니다."
@@ -19314,22 +19407,35 @@ msgid "Run exported HTML in the system's default browser."
msgstr "내보낸 HTMLì„ ì‹œìŠ¤í…œì˜ ê¸°ë³¸ 브ë¼ìš°ì €ë¥¼ 사용하여 실행합니다."
#: platform/javascript/export/export.cpp
-msgid "Could not open template for export:"
+#, fuzzy
+msgid "Could not open template for export: \"%s\"."
msgstr "내보내기 í…œí”Œë¦¿ì„ ì—´ 수 ì—†ìŒ:"
#: platform/javascript/export/export.cpp
-msgid "Invalid export template:"
+#, fuzzy
+msgid "Invalid export template: \"%s\"."
msgstr "ìž˜ëª»ëœ ë‚´ë³´ë‚´ê¸° 템플릿:"
#: platform/javascript/export/export.cpp
-msgid "Could not write file:"
+#, fuzzy
+msgid "Could not write file: \"%s\"."
msgstr "파ì¼ì— 쓸 수 ì—†ìŒ:"
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Icon Creation"
+msgstr "여백 설정"
+
#: platform/javascript/export/export.cpp
-msgid "Could not read file:"
+#, fuzzy
+msgid "Could not read file: \"%s\"."
msgstr "파ì¼ì„ ì½ì„ 수 ì—†ìŒ:"
#: platform/javascript/export/export.cpp
+msgid "PWA"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
#, fuzzy
msgid "Variant"
msgstr "간격:"
@@ -19404,15 +19510,18 @@ msgid "Icon 512 X 512"
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not read HTML shell:"
+#, fuzzy
+msgid "Could not read HTML shell: \"%s\"."
msgstr "HTML shellì„ ì½ì„ 수 ì—†ìŒ:"
#: platform/javascript/export/export.cpp
-msgid "Could not create HTTP server directory:"
+#, fuzzy
+msgid "Could not create HTTP server directory: %s."
msgstr "HTTP 서버 디렉토리를 만들 수 ì—†ìŒ:"
#: platform/javascript/export/export.cpp
-msgid "Error starting HTTP server:"
+#, fuzzy
+msgid "Error starting HTTP server: %d."
msgstr "HTTP 서버를 시작하는 중 오류:"
#: platform/javascript/export/export.cpp
@@ -19712,9 +19821,28 @@ msgid "Apple Team ID"
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open icon file \"%s\"."
+msgstr "프로ì íЏ 파ì¼ì„ 내보낼 수 없었습니다"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start xcrun executable."
+msgstr "하위 프로세스를 시작할 수 없습니다!"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization failed."
+msgstr "현지화"
+
+#: platform/osx/export/export.cpp
+msgid "Notarization request UUID: \"%s\""
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid ""
-"Note: The notarization process generally takes less than an hour. When the "
-"process is completed, you'll receive an email."
+"The notarization process generally takes less than an hour. When the process "
+"is completed, you'll receive an email."
msgstr ""
#: platform/osx/export/export.cpp
@@ -19730,23 +19858,78 @@ msgid ""
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign failed with error \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign require regex module."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Could not start codesign executable, make sure Xcode command line tools are "
+"installed."
+msgstr ""
+
+#: platform/osx/export/export.cpp platform/windows/export/export.cpp
#, fuzzy
msgid "No identity found."
msgstr "ì•„ì´ì½˜ì„ ì°¾ì„ ìˆ˜ 없습니다."
#: platform/osx/export/export.cpp
#, fuzzy
+msgid "Cannot sign file %s."
+msgstr "íŒŒì¼ ì €ìž¥ 중 오류: %s"
+
+#: platform/osx/export/export.cpp
+msgid "Relative symlinks are not supported, exported \"%s\" might be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "DMG Creation"
+msgstr "ë°©í–¥"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start hdiutil executable."
+msgstr "하위 프로세스를 시작할 수 없습니다!"
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed - file exists."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
msgid "Creating app bundle"
msgstr "ì¸ë„¤ì¼ 만드는 중"
#: platform/osx/export/export.cpp
#, fuzzy
-msgid "Could not find template app to export:"
+msgid "Could not find template app to export: \"%s\"."
msgstr ""
"내보낼 템플릿 APK를 ì°¾ì„ ìˆ˜ ì—†ìŒ:\n"
"%s"
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid export format."
+msgstr "ìž˜ëª»ëœ ë‚´ë³´ë‚´ê¸° 템플릿:"
+
+#: platform/osx/export/export.cpp
msgid ""
"Relative symlinks are not supported on this OS, the exported project might "
"be broken!"
@@ -19754,7 +19937,7 @@ msgstr ""
#: platform/osx/export/export.cpp
msgid ""
-"Requested template binary '%s' not found. It might be missing from your "
+"Requested template binary \"%s\" not found. It might be missing from your "
"template archive."
msgstr ""
@@ -19795,6 +19978,16 @@ msgid "Sending archive for notarization"
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "ZIP Creation"
+msgstr "프로ì íЏ"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open file to read from path \"%s\"."
+msgstr "프로ì íЏ 파ì¼ì„ gradle 프로ì íŠ¸ë¡œ 내보낼 수 없었습니다\n"
+
+#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr "ìž˜ëª»ëœ bundle ì‹ë³„ìž:"
@@ -20110,6 +20303,11 @@ msgid "Debug Algorithm"
msgstr "디버거"
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to rename temporary file \"%s\"."
+msgstr "임시 파ì¼ì„ 제거할 수 ì—†ìŒ:"
+
+#: platform/windows/export/export.cpp
msgid "Identity Type"
msgstr ""
@@ -20157,6 +20355,70 @@ msgid "Trademarks"
msgstr ""
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Resources Modification"
+msgstr "무작위 회전:"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find rcedit executable at \"%s\"."
+msgstr "keystore를 ì°¾ì„ ìˆ˜ 없어, 내보낼 수 없었습니다."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find wine executable at \"%s\"."
+msgstr "keystore를 ì°¾ì„ ìˆ˜ 없어, 내보낼 수 없었습니다."
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start rcedit executable, configure rcedit path in the Editor "
+"Settings (Export > Windows > Rcedit)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"rcedit failed to modify executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find signtool executable at \"%s\"."
+msgstr "keystore를 ì°¾ì„ ìˆ˜ 없어, 내보낼 수 없었습니다."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find osslsigncode executable at \"%s\"."
+msgstr "keystore를 ì°¾ì„ ìˆ˜ 없어, 내보낼 수 없었습니다."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid identity type."
+msgstr "ìž˜ëª»ëœ ì‹ë³„ìž:"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid timestamp server."
+msgstr "올바르지 ì•Šì€ ì´ë¦„입니다."
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start signtool executable, configure signtool path in the Editor "
+"Settings (Export > Windows > Signtool)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Signtool failed to sign executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to remove temporary file \"%s\"."
+msgstr "임시 파ì¼ì„ 제거할 수 ì—†ìŒ:"
+
+#: platform/windows/export/export.cpp
msgid ""
"The rcedit tool must be configured in the Editor Settings (Export > Windows "
"> Rcedit) to change the icon or app information data."
@@ -20178,6 +20440,23 @@ msgid "Invalid product version:"
msgstr "ìž˜ëª»ëœ ì œí’ˆ GUID."
#: platform/windows/export/export.cpp
+msgid "Windows executables cannot be >= 4 GiB."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+#, fuzzy
+msgid "Failed to open executable file \"%s\"."
+msgstr "ìž˜ëª»ëœ í™•ìž¥ìž."
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable file header corrupted."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable \"pck\" section not found."
+msgstr ""
+
+#: platform/windows/export/export.cpp
#, fuzzy
msgid "Windows"
msgstr "새 창"
@@ -20194,6 +20473,10 @@ msgstr ""
msgid "Wine"
msgstr ""
+#: platform/x11/export/export.cpp
+msgid "32-bit executables cannot have embedded data >= 4 GiB."
+msgstr ""
+
#: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp
#: scene/resources/texture.cpp
#, fuzzy
@@ -20318,7 +20601,8 @@ msgstr ""
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/3d/light.cpp scene/3d/reflection_probe.cpp
-#: scene/3d/visual_instance.cpp scene/resources/material.cpp
+#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp
+#: scene/resources/material.cpp
#, fuzzy
msgid "Max Distance"
msgstr "거리 ì„ íƒ:"
@@ -21125,6 +21409,18 @@ msgstr ""
msgid "Edge Connection Margin"
msgstr "연결 변경:"
+#: scene/2d/navigation_2d.cpp
+msgid ""
+"'Navigation2D' node and 'Navigation2D.get_simple_path()' are deprecated and "
+"will be removed in a future version. Use 'Navigation2DServer.map_get_path()' "
+"instead."
+msgstr ""
+
+#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
+#, fuzzy
+msgid "Path Desired Distance"
+msgstr "거리 ì„ íƒ:"
+
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
msgid "Target Desired Distance"
msgstr ""
@@ -21182,17 +21478,19 @@ msgstr ""
"ì†ì„±ì„ 설정하거나 í´ë¦¬ê³¤ì„ 그려주세요."
#: scene/2d/navigation_polygon.cpp
-msgid ""
-"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
-"node. It only provides navigation data."
-msgstr ""
-"NavigationPolygonInstance는 Navigation2D ë…¸ë“œì˜ ìžì‹ì´ë‚˜ ì†ì£¼ì— 있어야 합니"
-"다. ì´ê²ƒì€ 내비게ì´ì…˜ ë°ì´í„°ë§Œì„ 제공합니다."
-
-#: scene/2d/navigation_polygon.cpp
msgid "Navpoly"
msgstr ""
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Enter Cost"
+msgstr "아래쪽 중앙"
+
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Travel Cost"
+msgstr "ì§„í–‰"
+
#: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp
#: scene/main/canvas_layer.cpp
#, fuzzy
@@ -22400,6 +22698,13 @@ msgstr ""
msgid "Transform Normals"
msgstr "변형 중단ë¨."
+#: scene/3d/navigation.cpp
+msgid ""
+"'Navigation' node and 'Navigation.get_simple_path()' are deprecated and will "
+"be removed in a future version. Use 'NavigationServer.map_get_path()' "
+"instead."
+msgstr ""
+
#: scene/3d/navigation.cpp scene/resources/curve.cpp
#, fuzzy
msgid "Up Vector"
@@ -22424,14 +22729,6 @@ msgid ""
"The NavigationAgent can be used only under a Spatial inheriting parent node."
msgstr ""
-#: scene/3d/navigation_mesh_instance.cpp
-msgid ""
-"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
-"It only provides navigation data."
-msgstr ""
-"NavigationMeshInstance는 Navigation ë…¸ë“œì˜ ìžì‹ì´ë‚˜ ì†ì£¼ì— 있어야 합니다. ì´"
-"ê²ƒì€ ë‚´ë¹„ê²Œì´ì…˜ ë°ì´í„°ë§Œ 제공합니다."
-
#: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp
#, fuzzy
msgid "NavMesh"
@@ -24914,9 +25211,8 @@ msgid "Draw 2D Outlines"
msgstr "윤곽선 만들기"
#: scene/main/scene_tree.cpp servers/visual_server.cpp
-#, fuzzy
msgid "Reflections"
-msgstr "ë°©í–¥"
+msgstr "반사"
#: scene/main/scene_tree.cpp
#, fuzzy
@@ -25165,6 +25461,16 @@ msgid "3D Physics"
msgstr " (물리)"
#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "2D Navigation"
+msgstr "네비게ì´ì…˜"
+
+#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "3D Navigation"
+msgstr "네비게ì´ì…˜"
+
+#: scene/register_scene_types.cpp
msgid "Use hiDPI"
msgstr ""
@@ -26591,7 +26897,7 @@ msgstr "전환: "
msgid "Refraction"
msgstr "간격:"
-#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp
+#: scene/resources/material.cpp
msgid "Detail"
msgstr ""
@@ -26676,7 +26982,12 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
-msgid "Sample Partition Type"
+msgid "Sampling"
+msgstr "í¬ê¸° ì¡°ì ˆ 중: "
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Partition Type"
msgstr "변수 타입 설정"
#: scene/resources/navigation_mesh.cpp
@@ -26694,10 +27005,15 @@ msgid "Source Group Name"
msgstr "소스"
#: scene/resources/navigation_mesh.cpp
-msgid "Agent"
+msgid "Cells"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Agents"
+msgstr "ë©”ì¸ ì”¬ ì¸ìˆ˜:"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Max Climb"
msgstr ""
@@ -26707,11 +27023,16 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
+msgid "Regions"
+msgstr "ì˜ì—­"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
msgid "Merge Size"
msgstr "씬ì—서 병합하기"
#: scene/resources/navigation_mesh.cpp
-msgid "Edge"
+msgid "Edges"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -26725,6 +27046,11 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
+msgid "Details"
+msgstr "ë””í´íЏ ë³´ì´ê¸°"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
msgid "Sample Distance"
msgstr "거리 ì„ íƒ:"
@@ -26742,9 +27068,19 @@ msgid "Ledge Spans"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Filter Walkable Low Height Spans"
+msgid "Walkable Low Height Spans"
msgstr ""
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB"
+msgstr "AABB 만드는 중"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB Offset"
+msgstr "오프셋:"
+
#: scene/resources/occluder_shape.cpp
msgid "Spheres"
msgstr ""
@@ -27159,6 +27495,11 @@ msgid "Scenario"
msgstr "씬"
#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Navigation Map"
+msgstr "네비게ì´ì…˜"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
msgid "Direct Space State"
msgstr ""
@@ -27176,6 +27517,26 @@ msgstr "왼쪽 선형"
msgid "Default Angular Damp"
msgstr ""
+#: scene/resources/world.cpp
+#, fuzzy
+msgid "Default Map Up"
+msgstr "기본 ë¶€ë™ ì†Œìˆ˜ì  ë‹¨ê³„"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Size"
+msgstr "ë””í´íЏ 미리보기"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Height"
+msgstr "테스트"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Edge Connection Margin"
+msgstr "연결 변경:"
+
#: scene/resources/world_2d.cpp
msgid "Canvas"
msgstr ""
diff --git a/editor/translations/lt.po b/editor/translations/lt.po
index f611fab612..350bcb0352 100644
--- a/editor/translations/lt.po
+++ b/editor/translations/lt.po
@@ -220,9 +220,10 @@ msgid "Data"
msgstr ""
#: core/io/file_access_network.cpp core/register_core_types.cpp
-#: editor/editor_settings.cpp main/main.cpp
+#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
#: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h
+#: scene/gui/file_dialog.cpp
#, fuzzy
msgid "Network"
msgstr "Importuoti iš Nodo:"
@@ -379,6 +380,15 @@ msgstr ""
msgid "Max Size (KB)"
msgstr ""
+#: core/os/input.cpp
+#, fuzzy
+msgid "Mouse Mode"
+msgstr "TimeScale Nodas"
+
+#: core/os/input.cpp
+msgid "Use Accumulated Input"
+msgstr ""
+
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: servers/audio_server.cpp
msgid "Device"
@@ -572,7 +582,8 @@ msgstr "Aprašymas:"
#: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
-#: main/main.cpp
+#: main/main.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp
msgid "Run"
msgstr ""
@@ -657,6 +668,11 @@ msgid "Main Run Args"
msgstr ""
#: core/project_settings.cpp
+#, fuzzy
+msgid "Scene Naming"
+msgstr "Kelias iki Scenos:"
+
+#: core/project_settings.cpp
msgid "Search In File Extensions"
msgstr ""
@@ -664,20 +680,15 @@ msgstr ""
msgid "Script Templates Search Path"
msgstr ""
-#: core/project_settings.cpp editor/editor_node.cpp
-#: editor/plugins/version_control_editor_plugin.cpp
+#: core/project_settings.cpp
#, fuzzy
-msgid "Version Control"
+msgid "Version Control Autoload On Startup"
msgstr "Versija:"
#: core/project_settings.cpp
-msgid "Autoload On Startup"
-msgstr ""
-
-#: core/project_settings.cpp
#, fuzzy
-msgid "Plugin Name"
-msgstr "Priedai"
+msgid "Version Control Plugin Name"
+msgstr "Versija:"
#: core/project_settings.cpp scene/2d/collision_object_2d.cpp
#: scene/3d/collision_object.cpp scene/gui/control.cpp
@@ -788,7 +799,8 @@ msgid "Quality"
msgstr ""
#: core/project_settings.cpp scene/gui/file_dialog.cpp
-#: scene/main/scene_tree.cpp servers/visual_server.cpp
+#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp
+#: servers/visual_server.cpp
#, fuzzy
msgid "Filters"
msgstr "Filtrai..."
@@ -2229,7 +2241,7 @@ msgid "Open"
msgstr "Atidaryti"
#: editor/dependency_editor.cpp
-msgid "Owners Of:"
+msgid "Owners of: %s (Total: %d)"
msgstr ""
#: editor/dependency_editor.cpp
@@ -2523,7 +2535,7 @@ msgid "Bus Options"
msgstr "Aprašymas:"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/scene_tree_dock.cpp
+#: editor/project_export.cpp editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "Duplikuoti"
@@ -2780,6 +2792,22 @@ msgid "Choose"
msgstr "Pasirinkite"
#: editor/editor_export.cpp
+msgid "Project export for platform:"
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Completed with errors."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Completed successfully."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Failed."
+msgstr ""
+
+#: editor/editor_export.cpp
msgid "Storing File:"
msgstr ""
@@ -2792,6 +2820,28 @@ msgid "Packing"
msgstr ""
#: editor/editor_export.cpp
+msgid "Save PCK"
+msgstr ""
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Cannot create file \"%s\"."
+msgstr "Nepavyko pašalinti laikino failo:"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to export project files."
+msgstr "Filtrai..."
+
+#: editor/editor_export.cpp
+msgid "Can't open file to read from path \"%s\"."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Save ZIP"
+msgstr ""
+
+#: editor/editor_export.cpp
msgid ""
"Target platform requires 'ETC' texture compression for GLES2. Enable 'Import "
"Etc' in Project Settings."
@@ -2895,8 +2945,27 @@ msgstr ""
msgid "Custom release template not found."
msgstr ""
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Prepare Template"
+msgstr "Pasirinkite Nodus, kuriuos norite importuoti"
+
+#: editor/editor_export.cpp platform/osx/export/export.cpp
+msgid "The given export path doesn't exist."
+msgstr ""
+
#: editor/editor_export.cpp platform/javascript/export/export.cpp
-msgid "Template file not found:"
+#, fuzzy
+msgid "Template file not found: \"%s\"."
+msgstr "Animacijos Nodas"
+
+#: editor/editor_export.cpp
+msgid "Failed to copy export template."
+msgstr ""
+
+#: editor/editor_export.cpp platform/windows/export/export.cpp
+#: platform/x11/export/export.cpp
+msgid "PCK Embedding"
msgstr ""
#: editor/editor_export.cpp
@@ -3080,9 +3149,9 @@ msgid "Import"
msgstr ""
#: editor/editor_feature_profile.cpp editor/project_export.cpp
-#: platform/android/export/export.cpp platform/javascript/export/export.cpp
-#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
-#: platform/windows/export/export.cpp
+#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#: platform/uwp/export/export.cpp platform/windows/export/export.cpp
msgid "Export"
msgstr ""
@@ -4194,15 +4263,6 @@ msgid ""
"Unable to write to file '%s', file in use, locked or lacking permissions."
msgstr ""
-#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
-msgid "Scene"
-msgstr ""
-
-#: editor/editor_node.cpp
-#, fuzzy
-msgid "Scene Naming"
-msgstr "Kelias iki Scenos:"
-
#: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp
#: servers/arvr/arvr_interface.cpp
msgid "Interface"
@@ -4325,6 +4385,11 @@ msgstr ""
#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
#, fuzzy
+msgid "Version Control"
+msgstr "Versija:"
+
+#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
+#, fuzzy
msgid "Username"
msgstr "Naujas pavadinimas:"
@@ -4352,6 +4417,10 @@ msgstr ""
msgid "Add a new scene."
msgstr ""
+#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
+msgid "Scene"
+msgstr ""
+
#: editor/editor_node.cpp
msgid "Go to previously opened scene."
msgstr ""
@@ -5105,6 +5174,11 @@ msgid ""
"as runnable."
msgstr ""
+#: editor/editor_run_native.cpp
+#, fuzzy
+msgid "Project Run"
+msgstr "Aprašymas:"
+
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
msgstr ""
@@ -5371,7 +5445,9 @@ msgid "Draw Spaces"
msgstr ""
#: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp
-#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp
+#: scene/main/scene_tree.cpp scene/resources/world.cpp
+#: scene/resources/world_2d.cpp
#, fuzzy
msgid "Navigation"
msgstr "Animacijos Nodas"
@@ -6831,7 +6907,7 @@ msgstr ""
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp
-#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp
+#: scene/gui/control.cpp
#, fuzzy
msgid "Filter"
msgstr "Filtrai..."
@@ -7117,6 +7193,18 @@ msgid "Saving..."
msgstr ""
#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used as a normal map in 3D. Enabling red-green "
+"texture compression to reduce memory usage (blue channel is discarded)."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap "
+"generation and VRAM texture compression."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
msgid "2D, Detect 3D"
msgstr ""
@@ -7806,11 +7894,20 @@ msgid "New Anim"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+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 "Rename Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Delete Animation?"
msgstr ""
@@ -7828,11 +7925,6 @@ 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 "Duplicate Animation"
msgstr ""
@@ -7978,10 +8070,6 @@ msgid "Pin AnimationPlayer"
msgstr "Animacija"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Create New Animation"
-msgstr ""
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Name:"
msgstr ""
@@ -10102,6 +10190,7 @@ msgid "Points"
msgstr ""
#: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp
+#: scene/resources/navigation_mesh.cpp
#, fuzzy
msgid "Polygons"
msgstr "Priedai"
@@ -11501,8 +11590,9 @@ msgid "Invalid geometry, can't replace by mesh."
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
-msgid "Convert to Mesh2D"
-msgstr ""
+#, fuzzy
+msgid "Convert to MeshInstance2D"
+msgstr "Keisti Poligono SkalÄ™"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Invalid geometry, can't create polygon."
@@ -12517,8 +12607,7 @@ msgid "Select the previous shape, subtile, or Tile."
msgstr ""
#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp
-#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp
-#: scene/resources/texture.cpp
+#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp
#, fuzzy
msgid "Region"
msgstr "Animacijos Nodas"
@@ -14016,31 +14105,10 @@ 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 "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
#, fuzzy
msgid "Export Path"
msgstr "Importuoti iš Nodo:"
@@ -14180,6 +14248,11 @@ msgid "Export templates for this platform are missing:"
msgstr ""
#: editor/project_export.cpp
+#, fuzzy
+msgid "Project Export"
+msgstr "Aprašymas:"
+
+#: editor/project_export.cpp
msgid "Manage Export Templates"
msgstr ""
@@ -16495,7 +16568,7 @@ msgstr ""
#: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp
#: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp
-#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp
+#: scene/3d/collision_polygon.cpp
#, fuzzy
msgid "Polygon"
msgstr "Priedai"
@@ -17088,7 +17161,6 @@ msgid "Use In Baked Light"
msgstr ""
#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
-#: scene/resources/navigation_mesh.cpp
msgid "Cell"
msgstr ""
@@ -17118,6 +17190,19 @@ msgstr "Ištrinti Efektą"
msgid "Mask"
msgstr ""
+#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
+#, fuzzy
+msgid "Bake Navigation"
+msgstr "Animacijos Nodas"
+
+#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp
+#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp
+#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp
+#: scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Navigation Layers"
+msgstr "Animacijos Nodas"
+
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Plane"
msgstr ""
@@ -18631,10 +18716,6 @@ 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."
@@ -18739,12 +18820,16 @@ msgstr ""
msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version."
msgstr ""
+#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Code Signing"
+msgstr "Signalai"
+
#: 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."
+"'apksigner' could not be found. Please check that the command is available "
+"in the Android SDK build-tools directory. The resulting %s is unsigned."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18760,6 +18845,10 @@ msgid "Could not find keystore, unable to export."
msgstr ""
#: platform/android/export/export_plugin.cpp
+msgid "Could not start apksigner executable."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
@@ -18788,7 +18877,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Unsupported export format!\n"
+msgid "Unsupported export format!"
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18799,19 +18888,17 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Android build version mismatch:\n"
-" Template installed: %s\n"
-" Godot Version: %s\n"
+"Android build version mismatch: Template installed: %s, Godot version: %s. "
"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"
+"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"
+msgid "Could not export project files to gradle project."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18824,7 +18911,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Building of Android project failed, check output for the error.\n"
+"Building of Android project failed, check output for the error. "
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
@@ -18840,7 +18927,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
#, fuzzy
-msgid "Package not found: %s"
+msgid "Package not found: \"%s\"."
msgstr "Animacijos Nodas"
#: platform/android/export/export_plugin.cpp
@@ -18848,15 +18935,12 @@ msgid "Creating APK..."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid ""
-"Could not find template APK to export:\n"
-"%s"
+msgid "Could not find template APK to export: \"%s\"."
msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Missing libraries in the export template for the selected architectures: "
-"%s.\n"
+"Missing libraries in the export template for the selected architectures: %s. "
"Please build a template with all required libraries, or uncheck the missing "
"architectures in the export preset."
msgstr ""
@@ -18867,8 +18951,9 @@ msgid "Adding files..."
msgstr "Filtrai..."
#: platform/android/export/export_plugin.cpp
-msgid "Could not export project files"
-msgstr ""
+#, fuzzy
+msgid "Could not export project files."
+msgstr "PradÄ—ti ProfiliavimÄ…"
#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
@@ -19108,6 +19193,15 @@ msgstr "Transition Nodas"
msgid "Custom BG Color"
msgstr "Transition Nodas"
+#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
+#: platform/osx/export/export.cpp
+msgid "Prepare Templates"
+msgstr ""
+
+#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
+msgid "Export template not found."
+msgstr ""
+
#: platform/iphone/export/export.cpp
msgid "App Store Team ID not specified - cannot configure the project."
msgstr ""
@@ -19130,23 +19224,34 @@ msgid "Run exported HTML in the system's default browser."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not open template for export:"
+msgid "Could not open template for export: \"%s\"."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Invalid export template:"
-msgstr ""
+#, fuzzy
+msgid "Invalid export template: \"%s\"."
+msgstr "Netinkamas šrifto dydis."
#: platform/javascript/export/export.cpp
-msgid "Could not write file:"
-msgstr ""
+#, fuzzy
+msgid "Could not write file: \"%s\"."
+msgstr "PradÄ—ti ProfiliavimÄ…"
+
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Icon Creation"
+msgstr "Prijungti"
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not read file:"
+msgid "Could not read file: \"%s\"."
msgstr "PradÄ—ti ProfiliavimÄ…"
#: platform/javascript/export/export.cpp
+msgid "PWA"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
#, fuzzy
msgid "Variant"
msgstr "Versija:"
@@ -19221,16 +19326,18 @@ msgid "Icon 512 X 512"
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not read HTML shell:"
-msgstr ""
+#, fuzzy
+msgid "Could not read HTML shell: \"%s\"."
+msgstr "PradÄ—ti ProfiliavimÄ…"
#: platform/javascript/export/export.cpp
-msgid "Could not create HTTP server directory:"
+msgid "Could not create HTTP server directory: %s."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Error starting HTTP server:"
-msgstr ""
+#, fuzzy
+msgid "Error starting HTTP server: %d."
+msgstr "Įvyko klaida kraunant šriftą."
#: platform/javascript/export/export.cpp
msgid "Web"
@@ -19522,9 +19629,27 @@ msgid "Apple Team ID"
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open icon file \"%s\"."
+msgstr "PradÄ—ti ProfiliavimÄ…"
+
+#: platform/osx/export/export.cpp
+msgid "Could not start xcrun executable."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization failed."
+msgstr "Animacijos Nodas"
+
+#: platform/osx/export/export.cpp
+msgid "Notarization request UUID: \"%s\""
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid ""
-"Note: The notarization process generally takes less than an hour. When the "
-"process is completed, you'll receive an email."
+"The notarization process generally takes less than an hour. When the process "
+"is completed, you'll receive an email."
msgstr ""
#: platform/osx/export/export.cpp
@@ -19540,19 +19665,73 @@ msgid ""
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign failed with error \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign require regex module."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Could not start codesign executable, make sure Xcode command line tools are "
+"installed."
+msgstr ""
+
+#: platform/osx/export/export.cpp platform/windows/export/export.cpp
#, fuzzy
msgid "No identity found."
msgstr "Konstanta"
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Cannot sign file %s."
+msgstr "Įvyko klaida kraunant šriftą."
+
+#: platform/osx/export/export.cpp
+msgid "Relative symlinks are not supported, exported \"%s\" might be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "DMG Creation"
+msgstr "Aprašymas:"
+
+#: platform/osx/export/export.cpp
+msgid "Could not start hdiutil executable."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed - file exists."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed."
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid "Creating app bundle"
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Could not find template app to export:"
+msgid "Could not find template app to export: \"%s\"."
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid export format."
+msgstr "Netinkamas šrifto dydis."
+
+#: platform/osx/export/export.cpp
msgid ""
"Relative symlinks are not supported on this OS, the exported project might "
"be broken!"
@@ -19560,7 +19739,7 @@ msgstr ""
#: platform/osx/export/export.cpp
msgid ""
-"Requested template binary '%s' not found. It might be missing from your "
+"Requested template binary \"%s\" not found. It might be missing from your "
"template archive."
msgstr ""
@@ -19602,6 +19781,15 @@ msgstr ""
#: platform/osx/export/export.cpp
#, fuzzy
+msgid "ZIP Creation"
+msgstr "Aprašymas:"
+
+#: platform/osx/export/export.cpp
+msgid "Could not open file to read from path \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
msgid "Invalid bundle identifier:"
msgstr "Netinkamas šrifto dydis."
@@ -19913,6 +20101,11 @@ msgid "Debug Algorithm"
msgstr ""
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to rename temporary file \"%s\"."
+msgstr "Nepavyko pašalinti laikino failo:"
+
+#: platform/windows/export/export.cpp
msgid "Identity Type"
msgstr ""
@@ -19959,6 +20152,66 @@ msgid "Trademarks"
msgstr ""
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Resources Modification"
+msgstr "Konstanta"
+
+#: platform/windows/export/export.cpp
+msgid "Could not find rcedit executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find wine executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start rcedit executable, configure rcedit path in the Editor "
+"Settings (Export > Windows > Rcedit)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"rcedit failed to modify executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find signtool executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find osslsigncode executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid identity type."
+msgstr "Netinkamas šrifto dydis."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid timestamp server."
+msgstr "Netinkamas šrifto dydis."
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start signtool executable, configure signtool path in the Editor "
+"Settings (Export > Windows > Signtool)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Signtool failed to sign executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to remove temporary file \"%s\"."
+msgstr "Nepavyko pašalinti laikino failo:"
+
+#: platform/windows/export/export.cpp
msgid ""
"The rcedit tool must be configured in the Editor Settings (Export > Windows "
"> Rcedit) to change the icon or app information data."
@@ -19980,6 +20233,23 @@ msgid "Invalid product version:"
msgstr "Netinkamas šrifto dydis."
#: platform/windows/export/export.cpp
+msgid "Windows executables cannot be >= 4 GiB."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+#, fuzzy
+msgid "Failed to open executable file \"%s\"."
+msgstr "Netinkamas šrifto dydis."
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable file header corrupted."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable \"pck\" section not found."
+msgstr ""
+
+#: platform/windows/export/export.cpp
msgid "Windows"
msgstr ""
@@ -19995,6 +20265,10 @@ msgstr ""
msgid "Wine"
msgstr ""
+#: platform/x11/export/export.cpp
+msgid "32-bit executables cannot have embedded data >= 4 GiB."
+msgstr ""
+
#: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp
#: scene/resources/texture.cpp
#, fuzzy
@@ -20113,7 +20387,8 @@ msgstr ""
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/3d/light.cpp scene/3d/reflection_probe.cpp
-#: scene/3d/visual_instance.cpp scene/resources/material.cpp
+#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp
+#: scene/resources/material.cpp
msgid "Max Distance"
msgstr ""
@@ -20859,6 +21134,18 @@ msgstr ""
msgid "Edge Connection Margin"
msgstr "Prijungti"
+#: scene/2d/navigation_2d.cpp
+msgid ""
+"'Navigation2D' node and 'Navigation2D.get_simple_path()' are deprecated and "
+"will be removed in a future version. Use 'Navigation2DServer.map_get_path()' "
+"instead."
+msgstr ""
+
+#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
+#, fuzzy
+msgid "Path Desired Distance"
+msgstr "Diegti"
+
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
msgid "Target Desired Distance"
msgstr ""
@@ -20910,13 +21197,16 @@ msgid ""
msgstr ""
#: scene/2d/navigation_polygon.cpp
-msgid ""
-"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
-"node. It only provides navigation data."
+msgid "Navpoly"
msgstr ""
-#: scene/2d/navigation_polygon.cpp
-msgid "Navpoly"
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Enter Cost"
+msgstr "Ištrinti Efektą"
+
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+msgid "Travel Cost"
msgstr ""
#: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp
@@ -22025,6 +22315,13 @@ msgstr ""
msgid "Transform Normals"
msgstr "Keisti Poligono SkalÄ™"
+#: scene/3d/navigation.cpp
+msgid ""
+"'Navigation' node and 'Navigation.get_simple_path()' are deprecated and will "
+"be removed in a future version. Use 'NavigationServer.map_get_path()' "
+"instead."
+msgstr ""
+
#: scene/3d/navigation.cpp scene/resources/curve.cpp
msgid "Up Vector"
msgstr ""
@@ -22046,12 +22343,6 @@ msgid ""
"The NavigationAgent can be used only under a Spatial inheriting parent node."
msgstr ""
-#: scene/3d/navigation_mesh_instance.cpp
-msgid ""
-"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
-"It only provides navigation data."
-msgstr ""
-
#: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp
msgid "NavMesh"
msgstr ""
@@ -24592,6 +24883,16 @@ msgid "3D Physics"
msgstr "Fizikos Kadro %"
#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "2D Navigation"
+msgstr "Animacijos Nodas"
+
+#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "3D Navigation"
+msgstr "Animacijos Nodas"
+
+#: scene/register_scene_types.cpp
msgid "Use hiDPI"
msgstr ""
@@ -25963,7 +26264,7 @@ msgstr "Transition Nodas"
msgid "Refraction"
msgstr "Versija:"
-#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp
+#: scene/resources/material.cpp
msgid "Detail"
msgstr ""
@@ -26043,8 +26344,14 @@ msgid "Visible Instance Count"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Sample Partition Type"
-msgstr ""
+#, fuzzy
+msgid "Sampling"
+msgstr "SkalÄ—:"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Partition Type"
+msgstr "Versija:"
#: scene/resources/navigation_mesh.cpp
msgid "Parsed Geometry Type"
@@ -26059,10 +26366,15 @@ msgid "Source Group Name"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Agent"
+msgid "Cells"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Agents"
+msgstr "Atidaryti Skriptų Editorių"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Max Climb"
msgstr ""
@@ -26071,11 +26383,16 @@ msgid "Max Slope"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Regions"
+msgstr "Animacijos Nodas"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Merge Size"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Edge"
+msgid "Edges"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -26088,6 +26405,11 @@ msgid "Verts Per Poly"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Details"
+msgstr "Redaguoti Filtrus"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Sample Distance"
msgstr ""
@@ -26104,9 +26426,18 @@ msgid "Ledge Spans"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Filter Walkable Low Height Spans"
+msgid "Walkable Low Height Spans"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
+msgid "Baking AABB"
msgstr ""
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB Offset"
+msgstr "Panaikinti pasirinkimÄ…"
+
#: scene/resources/occluder_shape.cpp
msgid "Spheres"
msgstr ""
@@ -26499,6 +26830,11 @@ msgid "Scenario"
msgstr "Kelias iki Scenos:"
#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Navigation Map"
+msgstr "Animacijos Nodas"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
msgid "Direct Space State"
msgstr ""
@@ -26516,6 +26852,26 @@ msgstr "Redaguoti Filtrus"
msgid "Default Angular Damp"
msgstr ""
+#: scene/resources/world.cpp
+#, fuzzy
+msgid "Default Map Up"
+msgstr "Atnaujinti"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Size"
+msgstr "Atnaujinti"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Height"
+msgstr "Redaguoti Filtrus"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Edge Connection Margin"
+msgstr "Prijungti"
+
#: scene/resources/world_2d.cpp
msgid "Canvas"
msgstr ""
diff --git a/editor/translations/lv.po b/editor/translations/lv.po
index 8f5d1e471a..c80bd29122 100644
--- a/editor/translations/lv.po
+++ b/editor/translations/lv.po
@@ -222,9 +222,10 @@ msgid "Data"
msgstr ""
#: core/io/file_access_network.cpp core/register_core_types.cpp
-#: editor/editor_settings.cpp main/main.cpp
+#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
#: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h
+#: scene/gui/file_dialog.cpp
msgid "Network"
msgstr ""
@@ -381,6 +382,15 @@ msgstr ""
msgid "Max Size (KB)"
msgstr ""
+#: core/os/input.cpp
+#, fuzzy
+msgid "Mouse Mode"
+msgstr "Mēroga Režīms"
+
+#: core/os/input.cpp
+msgid "Use Accumulated Input"
+msgstr ""
+
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: servers/audio_server.cpp
msgid "Device"
@@ -575,7 +585,8 @@ msgstr "Apraksts"
#: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
-#: main/main.cpp
+#: main/main.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp
msgid "Run"
msgstr "Palaist"
@@ -664,6 +675,11 @@ msgid "Main Run Args"
msgstr ""
#: core/project_settings.cpp
+#, fuzzy
+msgid "Scene Naming"
+msgstr "Ainas ceļš:"
+
+#: core/project_settings.cpp
msgid "Search In File Extensions"
msgstr ""
@@ -671,19 +687,15 @@ msgstr ""
msgid "Script Templates Search Path"
msgstr ""
-#: core/project_settings.cpp editor/editor_node.cpp
-#: editor/plugins/version_control_editor_plugin.cpp
-msgid "Version Control"
-msgstr "Versiju Kontrole"
-
#: core/project_settings.cpp
-msgid "Autoload On Startup"
-msgstr ""
+#, fuzzy
+msgid "Version Control Autoload On Startup"
+msgstr "Versiju Kontrole"
#: core/project_settings.cpp
#, fuzzy
-msgid "Plugin Name"
-msgstr "Spraudņi"
+msgid "Version Control Plugin Name"
+msgstr "Versiju Kontrole"
#: core/project_settings.cpp scene/2d/collision_object_2d.cpp
#: scene/3d/collision_object.cpp scene/gui/control.cpp
@@ -798,7 +810,8 @@ msgid "Quality"
msgstr ""
#: core/project_settings.cpp scene/gui/file_dialog.cpp
-#: scene/main/scene_tree.cpp servers/visual_server.cpp
+#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp
+#: servers/visual_server.cpp
#, fuzzy
msgid "Filters"
msgstr "Filtrs:"
@@ -2227,8 +2240,8 @@ msgid "Open"
msgstr "Atvērt"
#: editor/dependency_editor.cpp
-msgid "Owners Of:"
-msgstr "Īpašnieki:"
+msgid "Owners of: %s (Total: %d)"
+msgstr ""
#: editor/dependency_editor.cpp
msgid ""
@@ -2531,7 +2544,7 @@ msgid "Bus Options"
msgstr "Kopnes Iestatījumi"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/scene_tree_dock.cpp
+#: editor/project_export.cpp editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "Izveidot dublikÄtu"
@@ -2791,6 +2804,25 @@ msgid "Choose"
msgstr "Izvēlaties"
#: editor/editor_export.cpp
+msgid "Project export for platform:"
+msgstr ""
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Completed with errors."
+msgstr "Kopēt mezgla ceļu"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Completed successfully."
+msgstr "Pakete instalēta sekmīgi!"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed."
+msgstr "NeizdevÄs:"
+
+#: editor/editor_export.cpp
msgid "Storing File:"
msgstr "Faila saglabÄÅ¡ana:"
@@ -2803,6 +2835,31 @@ msgid "Packing"
msgstr "Pako"
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save PCK"
+msgstr "SaglabÄt KÄ"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Cannot create file \"%s\"."
+msgstr "NeizdevÄs izveidot mapi."
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to export project files."
+msgstr "Filtrēt projektus"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Can't open file to read from path \"%s\"."
+msgstr "Nevar atvērt failu rakstīšanai:"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save ZIP"
+msgstr "SaglabÄt KÄ"
+
+#: editor/editor_export.cpp
msgid ""
"Target platform requires 'ETC' texture compression for GLES2. Enable 'Import "
"Etc' in Project Settings."
@@ -2922,11 +2979,30 @@ msgstr "PielÄgots atkļūdoÅ¡anas Å¡ablons nav atrasts."
msgid "Custom release template not found."
msgstr "PielÄgots relÄ«zes Å¡ablons nav atrasts."
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Prepare Template"
+msgstr "PÄrvaldÄ«t Å¡ablonus"
+
+#: editor/editor_export.cpp platform/osx/export/export.cpp
+msgid "The given export path doesn't exist."
+msgstr ""
+
#: editor/editor_export.cpp platform/javascript/export/export.cpp
-msgid "Template file not found:"
+#, fuzzy
+msgid "Template file not found: \"%s\"."
msgstr "Å ablona fails nav atrasts:"
#: editor/editor_export.cpp
+msgid "Failed to copy export template."
+msgstr ""
+
+#: editor/editor_export.cpp platform/windows/export/export.cpp
+#: platform/x11/export/export.cpp
+msgid "PCK Embedding"
+msgstr ""
+
+#: editor/editor_export.cpp
msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB."
msgstr "Pie 32-bitu eksportēšanas, iepakotais PCK nevar bÅ«t lielÄks par 4GB."
@@ -3098,9 +3174,9 @@ msgid "Import"
msgstr "Importēt"
#: editor/editor_feature_profile.cpp editor/project_export.cpp
-#: platform/android/export/export.cpp platform/javascript/export/export.cpp
-#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
-#: platform/windows/export/export.cpp
+#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#: platform/uwp/export/export.cpp platform/windows/export/export.cpp
msgid "Export"
msgstr "Eksportēt"
@@ -4252,15 +4328,6 @@ msgid ""
"Unable to write to file '%s', file in use, locked or lacking permissions."
msgstr ""
-#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
-msgid "Scene"
-msgstr "Aina"
-
-#: editor/editor_node.cpp
-#, fuzzy
-msgid "Scene Naming"
-msgstr "Ainas ceļš:"
-
#: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp
#: servers/arvr/arvr_interface.cpp
#, fuzzy
@@ -4385,6 +4452,10 @@ msgid "Default Color Picker Mode"
msgstr ""
#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
+msgid "Version Control"
+msgstr "Versiju Kontrole"
+
+#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
#, fuzzy
msgid "Username"
msgstr "PÄrsaukt"
@@ -4413,6 +4484,10 @@ msgstr "PÄrslÄ“gt traucÄ“jumu brÄ«vo režīmu."
msgid "Add a new scene."
msgstr "Pievienot jaunu ainu."
+#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
+msgid "Scene"
+msgstr "Aina"
+
#: editor/editor_node.cpp
msgid "Go to previously opened scene."
msgstr "Iet uz iepriekš atvērto ainu."
@@ -5166,6 +5241,11 @@ msgid ""
"as runnable."
msgstr ""
+#: editor/editor_run_native.cpp
+#, fuzzy
+msgid "Project Run"
+msgstr "Projekts"
+
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
msgstr "Raksti savu loģiku _run() metodē."
@@ -5436,7 +5516,9 @@ msgid "Draw Spaces"
msgstr ""
#: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp
-#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp
+#: scene/main/scene_tree.cpp scene/resources/world.cpp
+#: scene/resources/world_2d.cpp
msgid "Navigation"
msgstr "NavigÄcija"
@@ -6882,7 +6964,7 @@ msgstr ""
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp
-#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp
+#: scene/gui/control.cpp
#, fuzzy
msgid "Filter"
msgstr "Filtrs:"
@@ -7171,6 +7253,18 @@ msgid "Saving..."
msgstr "SaglabÄ..."
#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used as a normal map in 3D. Enabling red-green "
+"texture compression to reduce memory usage (blue channel is discarded)."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap "
+"generation and VRAM texture compression."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
msgid "2D, Detect 3D"
msgstr ""
@@ -7836,11 +7930,20 @@ msgid "New Anim"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+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 "Rename Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Delete Animation?"
msgstr ""
@@ -7858,11 +7961,6 @@ 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 "Duplicate Animation"
msgstr ""
@@ -8005,10 +8103,6 @@ msgid "Pin AnimationPlayer"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Create New Animation"
-msgstr ""
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Name:"
msgstr ""
@@ -10068,6 +10162,7 @@ msgid "Points"
msgstr ""
#: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp
+#: scene/resources/navigation_mesh.cpp
msgid "Polygons"
msgstr "Daudzstūri"
@@ -11429,8 +11524,9 @@ msgid "Invalid geometry, can't replace by mesh."
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
-msgid "Convert to Mesh2D"
-msgstr ""
+#, fuzzy
+msgid "Convert to MeshInstance2D"
+msgstr "Konvertēt uz CPUParticles2D"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Invalid geometry, can't create polygon."
@@ -12403,8 +12499,7 @@ msgid "Select the previous shape, subtile, or Tile."
msgstr ""
#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp
-#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp
-#: scene/resources/texture.cpp
+#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp
msgid "Region"
msgstr "Reģions"
@@ -13847,31 +13942,10 @@ 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 "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 "Export Path"
msgstr ""
@@ -14009,6 +14083,11 @@ msgid "Export templates for this platform are missing:"
msgstr ""
#: editor/project_export.cpp
+#, fuzzy
+msgid "Project Export"
+msgstr "Projekta DibinÄtÄji"
+
+#: editor/project_export.cpp
msgid "Manage Export Templates"
msgstr "PÄrvaldÄ«t Eksporta Å ablonus"
@@ -16300,7 +16379,7 @@ msgstr ""
#: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp
#: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp
-#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp
+#: scene/3d/collision_polygon.cpp
#, fuzzy
msgid "Polygon"
msgstr "Daudzstūri"
@@ -16896,7 +16975,6 @@ msgid "Use In Baked Light"
msgstr ""
#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
-#: scene/resources/navigation_mesh.cpp
msgid "Cell"
msgstr ""
@@ -16926,6 +17004,19 @@ msgstr "Centrēt mezglu"
msgid "Mask"
msgstr ""
+#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
+#, fuzzy
+msgid "Bake Navigation"
+msgstr "NavigÄcija"
+
+#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp
+#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp
+#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp
+#: scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Navigation Layers"
+msgstr "NavigÄcijas režīms"
+
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Plane"
msgstr ""
@@ -18432,10 +18523,6 @@ 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."
@@ -18539,12 +18626,16 @@ msgstr ""
msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version."
msgstr ""
+#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Code Signing"
+msgstr "SignÄls"
+
#: 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."
+"'apksigner' could not be found. Please check that the command is available "
+"in the Android SDK build-tools directory. The resulting %s is unsigned."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18560,6 +18651,11 @@ msgid "Could not find keystore, unable to export."
msgstr ""
#: platform/android/export/export_plugin.cpp
+#, fuzzy
+msgid "Could not start apksigner executable."
+msgstr "Nevar palaist sub-procesu!"
+
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
@@ -18588,7 +18684,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Unsupported export format!\n"
+msgid "Unsupported export format!"
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18599,19 +18695,17 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Android build version mismatch:\n"
-" Template installed: %s\n"
-" Godot Version: %s\n"
+"Android build version mismatch: Template installed: %s, Godot version: %s. "
"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"
+"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"
+msgid "Could not export project files to gradle project."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18624,7 +18718,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Building of Android project failed, check output for the error.\n"
+"Building of Android project failed, check output for the error. "
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
@@ -18639,7 +18733,8 @@ msgid ""
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Package not found: %s"
+#, fuzzy
+msgid "Package not found: \"%s\"."
msgstr "Paka nav atrasta: %s"
#: platform/android/export/export_plugin.cpp
@@ -18647,15 +18742,12 @@ msgid "Creating APK..."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid ""
-"Could not find template APK to export:\n"
-"%s"
+msgid "Could not find template APK to export: \"%s\"."
msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Missing libraries in the export template for the selected architectures: "
-"%s.\n"
+"Missing libraries in the export template for the selected architectures: %s. "
"Please build a template with all required libraries, or uncheck the missing "
"architectures in the export preset."
msgstr ""
@@ -18665,8 +18757,9 @@ msgid "Adding files..."
msgstr "Failu pievienošana..."
#: platform/android/export/export_plugin.cpp
-msgid "Could not export project files"
-msgstr ""
+#, fuzzy
+msgid "Could not export project files."
+msgstr "Nevar palaist sub-procesu!"
#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
@@ -18907,6 +19000,17 @@ msgstr "Izgriezt mezglu(s)"
msgid "Custom BG Color"
msgstr "Izgriezt mezglu(s)"
+#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Prepare Templates"
+msgstr "PÄrvaldÄ«t Å¡ablonus"
+
+#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Export template not found."
+msgstr "PielÄgots relÄ«zes Å¡ablons nav atrasts."
+
#: platform/iphone/export/export.cpp
msgid "App Store Team ID not specified - cannot configure the project."
msgstr ""
@@ -18928,19 +19032,32 @@ msgid "Run exported HTML in the system's default browser."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not open template for export:"
-msgstr ""
+#, fuzzy
+msgid "Could not open template for export: \"%s\"."
+msgstr "NeizdevÄs izveidot mapi."
#: platform/javascript/export/export.cpp
-msgid "Invalid export template:"
-msgstr ""
+#, fuzzy
+msgid "Invalid export template: \"%s\"."
+msgstr "NederÄ«gs paplaÅ¡inÄjums."
#: platform/javascript/export/export.cpp
-msgid "Could not write file:"
-msgstr ""
+#, fuzzy
+msgid "Could not write file: \"%s\"."
+msgstr "NeizdevÄs izveidot mapi."
+
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Icon Creation"
+msgstr "Saturs:"
+
+#: platform/javascript/export/export.cpp
+#, fuzzy
+msgid "Could not read file: \"%s\"."
+msgstr "NeizdevÄs izveidot mapi."
#: platform/javascript/export/export.cpp
-msgid "Could not read file:"
+msgid "PWA"
msgstr ""
#: platform/javascript/export/export.cpp
@@ -19018,16 +19135,18 @@ msgid "Icon 512 X 512"
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not read HTML shell:"
+msgid "Could not read HTML shell: \"%s\"."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not create HTTP server directory:"
-msgstr ""
+#, fuzzy
+msgid "Could not create HTTP server directory: %s."
+msgstr "NeizdevÄs izveidot mapi."
#: platform/javascript/export/export.cpp
-msgid "Error starting HTTP server:"
-msgstr ""
+#, fuzzy
+msgid "Error starting HTTP server: %d."
+msgstr "Kļūda saglabÄjot failu: %s"
#: platform/javascript/export/export.cpp
msgid "Web"
@@ -19317,9 +19436,27 @@ msgid "Apple Team ID"
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Could not open icon file \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start xcrun executable."
+msgstr "Nevar palaist sub-procesu!"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization failed."
+msgstr "LokalizÄcija"
+
+#: platform/osx/export/export.cpp
+msgid "Notarization request UUID: \"%s\""
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid ""
-"Note: The notarization process generally takes less than an hour. When the "
-"process is completed, you'll receive an email."
+"The notarization process generally takes less than an hour. When the process "
+"is completed, you'll receive an email."
msgstr ""
#: platform/osx/export/export.cpp
@@ -19335,19 +19472,74 @@ msgid ""
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign failed with error \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign require regex module."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Could not start codesign executable, make sure Xcode command line tools are "
+"installed."
+msgstr ""
+
+#: platform/osx/export/export.cpp platform/windows/export/export.cpp
msgid "No identity found."
msgstr ""
#: platform/osx/export/export.cpp
#, fuzzy
+msgid "Cannot sign file %s."
+msgstr "Kļūda saglabÄjot failu: %s"
+
+#: platform/osx/export/export.cpp
+msgid "Relative symlinks are not supported, exported \"%s\" might be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "DMG Creation"
+msgstr "Virzieni"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start hdiutil executable."
+msgstr "Nevar palaist sub-procesu!"
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed - file exists."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
msgid "Creating app bundle"
msgstr "Izveido sīktēlu"
#: platform/osx/export/export.cpp
-msgid "Could not find template app to export:"
+msgid "Could not find template app to export: \"%s\"."
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid export format."
+msgstr "NederÄ«gs bÄzes ceļš."
+
+#: platform/osx/export/export.cpp
msgid ""
"Relative symlinks are not supported on this OS, the exported project might "
"be broken!"
@@ -19355,7 +19547,7 @@ msgstr ""
#: platform/osx/export/export.cpp
msgid ""
-"Requested template binary '%s' not found. It might be missing from your "
+"Requested template binary \"%s\" not found. It might be missing from your "
"template archive."
msgstr ""
@@ -19396,6 +19588,15 @@ msgid "Sending archive for notarization"
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "ZIP Creation"
+msgstr "Projekts"
+
+#: platform/osx/export/export.cpp
+msgid "Could not open file to read from path \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr "Nederīgs bunduļa identifikators:"
@@ -19706,6 +19907,11 @@ msgid "Debug Algorithm"
msgstr "AtkļūdotÄjs"
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to rename temporary file \"%s\"."
+msgstr "Nevar noņemt pagaidu failu:"
+
+#: platform/windows/export/export.cpp
msgid "Identity Type"
msgstr ""
@@ -19753,6 +19959,66 @@ msgid "Trademarks"
msgstr ""
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Resources Modification"
+msgstr "Konstante"
+
+#: platform/windows/export/export.cpp
+msgid "Could not find rcedit executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find wine executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start rcedit executable, configure rcedit path in the Editor "
+"Settings (Export > Windows > Rcedit)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"rcedit failed to modify executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find signtool executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find osslsigncode executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid identity type."
+msgstr "Nederīgs Identifikators:"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid timestamp server."
+msgstr "Nederīgs nosaukums."
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start signtool executable, configure signtool path in the Editor "
+"Settings (Export > Windows > Signtool)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Signtool failed to sign executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to remove temporary file \"%s\"."
+msgstr "Nevar noņemt pagaidu failu:"
+
+#: platform/windows/export/export.cpp
msgid ""
"The rcedit tool must be configured in the Editor Settings (Export > Windows "
"> Rcedit) to change the icon or app information data."
@@ -19774,6 +20040,23 @@ msgid "Invalid product version:"
msgstr "Nederīgs produkta GUID."
#: platform/windows/export/export.cpp
+msgid "Windows executables cannot be >= 4 GiB."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+#, fuzzy
+msgid "Failed to open executable file \"%s\"."
+msgstr "NederÄ«gs paplaÅ¡inÄjums."
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable file header corrupted."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable \"pck\" section not found."
+msgstr ""
+
+#: platform/windows/export/export.cpp
#, fuzzy
msgid "Windows"
msgstr "Jauns logs"
@@ -19790,6 +20073,10 @@ msgstr ""
msgid "Wine"
msgstr ""
+#: platform/x11/export/export.cpp
+msgid "32-bit executables cannot have embedded data >= 4 GiB."
+msgstr ""
+
#: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp
#: scene/resources/texture.cpp
#, fuzzy
@@ -19911,7 +20198,8 @@ msgstr ""
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/3d/light.cpp scene/3d/reflection_probe.cpp
-#: scene/3d/visual_instance.cpp scene/resources/material.cpp
+#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp
+#: scene/resources/material.cpp
#, fuzzy
msgid "Max Distance"
msgstr "Å ablons"
@@ -20670,6 +20958,18 @@ msgstr ""
msgid "Edge Connection Margin"
msgstr "Izmainīt Savienojumu:"
+#: scene/2d/navigation_2d.cpp
+msgid ""
+"'Navigation2D' node and 'Navigation2D.get_simple_path()' are deprecated and "
+"will be removed in a future version. Use 'Navigation2DServer.map_get_path()' "
+"instead."
+msgstr ""
+
+#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
+#, fuzzy
+msgid "Path Desired Distance"
+msgstr "Izvēlēties galveno ainu"
+
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
msgid "Target Desired Distance"
msgstr ""
@@ -20721,13 +21021,16 @@ msgid ""
msgstr ""
#: scene/2d/navigation_polygon.cpp
-msgid ""
-"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
-"node. It only provides navigation data."
+msgid "Navpoly"
msgstr ""
-#: scene/2d/navigation_polygon.cpp
-msgid "Navpoly"
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Enter Cost"
+msgstr "Centrēt mezglu"
+
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+msgid "Travel Cost"
msgstr ""
#: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp
@@ -21844,6 +22147,13 @@ msgstr ""
msgid "Transform Normals"
msgstr "Transformēt vienmērīgo."
+#: scene/3d/navigation.cpp
+msgid ""
+"'Navigation' node and 'Navigation.get_simple_path()' are deprecated and will "
+"be removed in a future version. Use 'NavigationServer.map_get_path()' "
+"instead."
+msgstr ""
+
#: scene/3d/navigation.cpp scene/resources/curve.cpp
#, fuzzy
msgid "Up Vector"
@@ -21868,12 +22178,6 @@ msgid ""
"The NavigationAgent can be used only under a Spatial inheriting parent node."
msgstr ""
-#: scene/3d/navigation_mesh_instance.cpp
-msgid ""
-"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
-"It only provides navigation data."
-msgstr ""
-
#: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp
msgid "NavMesh"
msgstr ""
@@ -24458,6 +24762,16 @@ msgid "3D Physics"
msgstr "Fizikas kadrs %"
#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "2D Navigation"
+msgstr "NavigÄcija"
+
+#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "3D Navigation"
+msgstr "NavigÄcija"
+
+#: scene/register_scene_types.cpp
msgid "Use hiDPI"
msgstr ""
@@ -25841,7 +26155,7 @@ msgstr "Pievienot PÄreju"
msgid "Refraction"
msgstr "Atdalījums:"
-#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp
+#: scene/resources/material.cpp
msgid "Detail"
msgstr ""
@@ -25921,7 +26235,12 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
-msgid "Sample Partition Type"
+msgid "Sampling"
+msgstr "Mērogs: "
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Partition Type"
msgstr "NomainÄ«t BÄzes Tipu:"
#: scene/resources/navigation_mesh.cpp
@@ -25938,10 +26257,15 @@ msgid "Source Group Name"
msgstr "Avots"
#: scene/resources/navigation_mesh.cpp
-msgid "Agent"
+msgid "Cells"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Agents"
+msgstr "Saturs:"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Max Climb"
msgstr ""
@@ -25951,11 +26275,16 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
+msgid "Regions"
+msgstr "Reģions"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
msgid "Merge Size"
msgstr "SapludinÄt no ainas"
#: scene/resources/navigation_mesh.cpp
-msgid "Edge"
+msgid "Edges"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -25968,6 +26297,11 @@ msgid "Verts Per Poly"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Details"
+msgstr "RÄdÄ«t noklusÄ“jumu"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Sample Distance"
msgstr ""
@@ -25984,9 +26318,18 @@ msgid "Ledge Spans"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Filter Walkable Low Height Spans"
+msgid "Walkable Low Height Spans"
msgstr ""
+#: scene/resources/navigation_mesh.cpp
+msgid "Baking AABB"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB Offset"
+msgstr "Noņemt tekstūru"
+
#: scene/resources/occluder_shape.cpp
msgid "Spheres"
msgstr ""
@@ -26385,6 +26728,11 @@ msgid "Scenario"
msgstr "Aina"
#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Navigation Map"
+msgstr "NavigÄcija"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
msgid "Direct Space State"
msgstr ""
@@ -26401,6 +26749,26 @@ msgstr "Pa Kreisi, LineÄrs"
msgid "Default Angular Damp"
msgstr ""
+#: scene/resources/world.cpp
+#, fuzzy
+msgid "Default Map Up"
+msgstr "Noklusējuma"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Size"
+msgstr "Noklusējuma motīvs"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Height"
+msgstr "Testē"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Edge Connection Margin"
+msgstr "Izmainīt Savienojumu:"
+
#: scene/resources/world_2d.cpp
msgid "Canvas"
msgstr ""
diff --git a/editor/translations/mk.po b/editor/translations/mk.po
index c59b53c3e5..5c3bfc87ff 100644
--- a/editor/translations/mk.po
+++ b/editor/translations/mk.po
@@ -3,21 +3,21 @@
# Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md).
# This file is distributed under the same license as the Godot source code.
#
-# Kristijan Fremen Velkovski <me@krisfremen.com>, 2021.
+# Kristijan Fremen Velkovski <me@krisfremen.com>, 2021, 2022.
# 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-11-18 13:37+0000\n"
-"Last-Translator: Denis <densisman@gmail.com>\n"
+"PO-Revision-Date: 2022-06-29 10:04+0000\n"
+"Last-Translator: Kristijan Fremen Velkovski <me@krisfremen.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.9.1-dev\n"
+"X-Generator: Weblate 4.13.1-dev\n"
#: core/bind/core_bind.cpp main/main.cpp
msgid "Tablet Driver"
@@ -25,28 +25,27 @@ msgstr ""
#: core/bind/core_bind.cpp
msgid "Clipboard"
-msgstr ""
+msgstr "Табла Ñо иÑечоци"
#: core/bind/core_bind.cpp
-#, fuzzy
msgid "Current Screen"
-msgstr "СвојÑтва на анимацијата."
+msgstr "Тековен Екран"
#: core/bind/core_bind.cpp
msgid "Exit Code"
-msgstr ""
+msgstr "Излезен код"
#: core/bind/core_bind.cpp
msgid "V-Sync Enabled"
-msgstr ""
+msgstr "Вертикална Синхронизација е вклучена"
#: core/bind/core_bind.cpp main/main.cpp
msgid "V-Sync Via Compositor"
-msgstr ""
+msgstr "Вертикална Синхронизација преку композитор"
#: core/bind/core_bind.cpp main/main.cpp
msgid "Delta Smoothing"
-msgstr ""
+msgstr "Делта Измазнување"
#: core/bind/core_bind.cpp
msgid "Low Processor Usage Mode"
@@ -58,49 +57,49 @@ msgstr ""
#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp
msgid "Keep Screen On"
-msgstr ""
+msgstr "Чувај го екранот уклучен"
#: core/bind/core_bind.cpp
msgid "Min Window Size"
-msgstr ""
+msgstr "Минимална Големина на Прозорецот"
#: core/bind/core_bind.cpp
msgid "Max Window Size"
-msgstr ""
+msgstr "МакÑимална Големина на Прозорецот"
#: core/bind/core_bind.cpp
msgid "Screen Orientation"
-msgstr ""
+msgstr "Ориентација на Екран"
#: core/bind/core_bind.cpp core/project_settings.cpp main/main.cpp
#: platform/uwp/os_uwp.cpp
msgid "Window"
-msgstr ""
+msgstr "Прозорец"
#: core/bind/core_bind.cpp core/project_settings.cpp
msgid "Borderless"
-msgstr ""
+msgstr "Без граници"
#: core/bind/core_bind.cpp
msgid "Per Pixel Transparency Enabled"
-msgstr ""
+msgstr "Уклучена е ТранÑпарентоÑта По ПикÑел"
#: core/bind/core_bind.cpp core/project_settings.cpp
msgid "Fullscreen"
-msgstr ""
+msgstr "Цел екран"
#: core/bind/core_bind.cpp
msgid "Maximized"
-msgstr ""
+msgstr "МакÑимизирано"
#: core/bind/core_bind.cpp
msgid "Minimized"
-msgstr ""
+msgstr "Минимизирано"
#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp
#: scene/gui/graph_node.cpp
msgid "Resizable"
-msgstr ""
+msgstr "Променлива големина"
#: core/bind/core_bind.cpp core/os/input_event.cpp scene/2d/node_2d.cpp
#: scene/2d/physics_body_2d.cpp scene/2d/remote_transform_2d.cpp
@@ -108,7 +107,7 @@ msgstr ""
#: scene/gui/control.cpp scene/gui/line_edit.cpp
#: scene/resources/default_theme/default_theme.cpp
msgid "Position"
-msgstr ""
+msgstr "Позиција"
#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp
#: main/main.cpp modules/gridmap/grid_map.cpp
@@ -120,32 +119,31 @@ msgstr ""
#: scene/resources/style_box.cpp scene/resources/texture.cpp
#: scene/resources/visual_shader.cpp servers/visual_server.cpp
msgid "Size"
-msgstr ""
+msgstr "Големина"
#: core/bind/core_bind.cpp
msgid "Endian Swap"
-msgstr ""
+msgstr "ЕндијанÑка размена"
#: core/bind/core_bind.cpp
-#, fuzzy
msgid "Editor Hint"
-msgstr "Уреди"
+msgstr "Совет за уредник"
#: core/bind/core_bind.cpp
msgid "Print Error Messages"
-msgstr ""
+msgstr "Печати грешни пораки"
#: core/bind/core_bind.cpp
msgid "Iterations Per Second"
-msgstr ""
+msgstr "Итерации во Ñекунда"
#: core/bind/core_bind.cpp
msgid "Target FPS"
-msgstr ""
+msgstr "Цел на FPS"
#: core/bind/core_bind.cpp
msgid "Time Scale"
-msgstr ""
+msgstr "ВременÑка Ñкала"
#: core/bind/core_bind.cpp main/main.cpp
msgid "Physics Jitter Fix"
@@ -153,23 +151,23 @@ msgstr ""
#: core/bind/core_bind.cpp editor/plugins/version_control_editor_plugin.cpp
msgid "Error"
-msgstr ""
+msgstr "Грешка"
#: core/bind/core_bind.cpp
msgid "Error String"
-msgstr ""
+msgstr "ТекÑÑ‚ на Грешка"
#: core/bind/core_bind.cpp
msgid "Error Line"
-msgstr ""
+msgstr "Линија за грешка"
#: core/bind/core_bind.cpp
msgid "Result"
-msgstr ""
+msgstr "Резултат"
#: core/command_queue_mt.cpp core/message_queue.cpp main/main.cpp
msgid "Memory"
-msgstr ""
+msgstr "Меморија"
#: core/command_queue_mt.cpp core/message_queue.cpp
#: core/register_core_types.cpp drivers/gles2/rasterizer_canvas_base_gles2.cpp
@@ -180,11 +178,11 @@ msgstr ""
#: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h
#: servers/visual_server.cpp
msgid "Limits"
-msgstr ""
+msgstr "Граници"
#: core/command_queue_mt.cpp
msgid "Command Queue"
-msgstr ""
+msgstr "Ред за наредби"
#: core/command_queue_mt.cpp
msgid "Multithreading Queue Size (KB)"
@@ -203,9 +201,10 @@ msgid "Data"
msgstr ""
#: core/io/file_access_network.cpp core/register_core_types.cpp
-#: editor/editor_settings.cpp main/main.cpp
+#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
#: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h
+#: scene/gui/file_dialog.cpp
msgid "Network"
msgstr ""
@@ -356,6 +355,15 @@ msgstr ""
msgid "Max Size (KB)"
msgstr ""
+#: core/os/input.cpp
+#, fuzzy
+msgid "Mouse Mode"
+msgstr "СвојÑтва на анимацијата."
+
+#: core/os/input.cpp
+msgid "Use Accumulated Input"
+msgstr ""
+
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: servers/audio_server.cpp
msgid "Device"
@@ -537,7 +545,8 @@ msgstr ""
#: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
-#: main/main.cpp
+#: main/main.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp
msgid "Run"
msgstr ""
@@ -620,24 +629,23 @@ msgid "Main Run Args"
msgstr ""
#: core/project_settings.cpp
-msgid "Search In File Extensions"
+msgid "Scene Naming"
msgstr ""
#: core/project_settings.cpp
-msgid "Script Templates Search Path"
+msgid "Search In File Extensions"
msgstr ""
-#: core/project_settings.cpp editor/editor_node.cpp
-#: editor/plugins/version_control_editor_plugin.cpp
-msgid "Version Control"
+#: core/project_settings.cpp
+msgid "Script Templates Search Path"
msgstr ""
#: core/project_settings.cpp
-msgid "Autoload On Startup"
+msgid "Version Control Autoload On Startup"
msgstr ""
#: core/project_settings.cpp
-msgid "Plugin Name"
+msgid "Version Control Plugin Name"
msgstr ""
#: core/project_settings.cpp scene/2d/collision_object_2d.cpp
@@ -745,7 +753,8 @@ msgid "Quality"
msgstr ""
#: core/project_settings.cpp scene/gui/file_dialog.cpp
-#: scene/main/scene_tree.cpp servers/visual_server.cpp
+#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp
+#: servers/visual_server.cpp
msgid "Filters"
msgstr ""
@@ -2135,7 +2144,7 @@ msgid "Open"
msgstr ""
#: editor/dependency_editor.cpp
-msgid "Owners Of:"
+msgid "Owners of: %s (Total: %d)"
msgstr ""
#: editor/dependency_editor.cpp
@@ -2426,7 +2435,7 @@ msgid "Bus Options"
msgstr ""
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/scene_tree_dock.cpp
+#: editor/project_export.cpp editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr ""
@@ -2682,6 +2691,22 @@ msgid "Choose"
msgstr ""
#: editor/editor_export.cpp
+msgid "Project export for platform:"
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Completed with errors."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Completed successfully."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Failed."
+msgstr ""
+
+#: editor/editor_export.cpp
msgid "Storing File:"
msgstr ""
@@ -2694,6 +2719,26 @@ msgid "Packing"
msgstr ""
#: editor/editor_export.cpp
+msgid "Save PCK"
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Cannot create file \"%s\"."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Failed to export project files."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Can't open file to read from path \"%s\"."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Save ZIP"
+msgstr ""
+
+#: editor/editor_export.cpp
msgid ""
"Target platform requires 'ETC' texture compression for GLES2. Enable 'Import "
"Etc' in Project Settings."
@@ -2794,8 +2839,25 @@ msgstr ""
msgid "Custom release template not found."
msgstr ""
+#: editor/editor_export.cpp
+msgid "Prepare Template"
+msgstr ""
+
+#: editor/editor_export.cpp platform/osx/export/export.cpp
+msgid "The given export path doesn't exist."
+msgstr ""
+
#: editor/editor_export.cpp platform/javascript/export/export.cpp
-msgid "Template file not found:"
+msgid "Template file not found: \"%s\"."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Failed to copy export template."
+msgstr ""
+
+#: editor/editor_export.cpp platform/windows/export/export.cpp
+#: platform/x11/export/export.cpp
+msgid "PCK Embedding"
msgstr ""
#: editor/editor_export.cpp
@@ -2966,9 +3028,9 @@ msgid "Import"
msgstr "Импортирај"
#: editor/editor_feature_profile.cpp editor/project_export.cpp
-#: platform/android/export/export.cpp platform/javascript/export/export.cpp
-#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
-#: platform/windows/export/export.cpp
+#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#: platform/uwp/export/export.cpp platform/windows/export/export.cpp
msgid "Export"
msgstr ""
@@ -4048,14 +4110,6 @@ msgid ""
"Unable to write to file '%s', file in use, locked or lacking permissions."
msgstr ""
-#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
-msgid "Scene"
-msgstr ""
-
-#: editor/editor_node.cpp
-msgid "Scene Naming"
-msgstr ""
-
#: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp
#: servers/arvr/arvr_interface.cpp
msgid "Interface"
@@ -4170,6 +4224,10 @@ msgid "Default Color Picker Mode"
msgstr ""
#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
+msgid "Version Control"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
msgid "Username"
msgstr ""
@@ -4197,6 +4255,10 @@ msgstr ""
msgid "Add a new scene."
msgstr ""
+#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
+msgid "Scene"
+msgstr ""
+
#: editor/editor_node.cpp
msgid "Go to previously opened scene."
msgstr ""
@@ -4925,6 +4987,10 @@ msgid ""
"as runnable."
msgstr ""
+#: editor/editor_run_native.cpp
+msgid "Project Run"
+msgstr ""
+
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
msgstr ""
@@ -5181,7 +5247,9 @@ msgid "Draw Spaces"
msgstr ""
#: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp
-#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp
+#: scene/main/scene_tree.cpp scene/resources/world.cpp
+#: scene/resources/world_2d.cpp
msgid "Navigation"
msgstr ""
@@ -6566,7 +6634,7 @@ msgstr ""
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp
-#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp
+#: scene/gui/control.cpp
msgid "Filter"
msgstr ""
@@ -6839,6 +6907,18 @@ msgid "Saving..."
msgstr ""
#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used as a normal map in 3D. Enabling red-green "
+"texture compression to reduce memory usage (blue channel is discarded)."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap "
+"generation and VRAM texture compression."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
msgid "2D, Detect 3D"
msgstr ""
@@ -7495,11 +7575,20 @@ msgid "New Anim"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+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 "Rename Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Delete Animation?"
msgstr ""
@@ -7517,11 +7606,6 @@ 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 "Duplicate Animation"
msgstr ""
@@ -7664,10 +7748,6 @@ msgid "Pin AnimationPlayer"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Create New Animation"
-msgstr ""
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Name:"
msgstr ""
@@ -9718,6 +9798,7 @@ msgid "Points"
msgstr ""
#: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp
+#: scene/resources/navigation_mesh.cpp
msgid "Polygons"
msgstr ""
@@ -11071,7 +11152,7 @@ msgid "Invalid geometry, can't replace by mesh."
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
-msgid "Convert to Mesh2D"
+msgid "Convert to MeshInstance2D"
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
@@ -12031,8 +12112,7 @@ msgid "Select the previous shape, subtile, or Tile."
msgstr ""
#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp
-#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp
-#: scene/resources/texture.cpp
+#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp
msgid "Region"
msgstr ""
@@ -13452,31 +13532,10 @@ 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 "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 "Export Path"
msgstr ""
@@ -13610,6 +13669,10 @@ msgid "Export templates for this platform are missing:"
msgstr ""
#: editor/project_export.cpp
+msgid "Project Export"
+msgstr ""
+
+#: editor/project_export.cpp
msgid "Manage Export Templates"
msgstr ""
@@ -15858,7 +15921,7 @@ msgstr ""
#: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp
#: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp
-#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp
+#: scene/3d/collision_polygon.cpp
msgid "Polygon"
msgstr ""
@@ -16421,7 +16484,6 @@ msgid "Use In Baked Light"
msgstr ""
#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
-#: scene/resources/navigation_mesh.cpp
msgid "Cell"
msgstr ""
@@ -16447,6 +16509,19 @@ msgstr ""
msgid "Mask"
msgstr ""
+#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
+#, fuzzy
+msgid "Bake Navigation"
+msgstr "Дуплирај избран(и) клуч(еви)"
+
+#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp
+#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp
+#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp
+#: scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Navigation Layers"
+msgstr "ВредноÑÑ‚:"
+
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Plane"
msgstr ""
@@ -17880,10 +17955,6 @@ 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."
@@ -17987,12 +18058,16 @@ msgstr ""
msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version."
msgstr ""
+#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Code Signing"
+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."
+"'apksigner' could not be found. Please check that the command is available "
+"in the Android SDK build-tools directory. The resulting %s is unsigned."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18008,6 +18083,10 @@ msgid "Could not find keystore, unable to export."
msgstr ""
#: platform/android/export/export_plugin.cpp
+msgid "Could not start apksigner executable."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
@@ -18036,7 +18115,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Unsupported export format!\n"
+msgid "Unsupported export format!"
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18047,19 +18126,17 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Android build version mismatch:\n"
-" Template installed: %s\n"
-" Godot Version: %s\n"
+"Android build version mismatch: Template installed: %s, Godot version: %s. "
"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"
+"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"
+msgid "Could not export project files to gradle project."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18072,7 +18149,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Building of Android project failed, check output for the error.\n"
+"Building of Android project failed, check output for the error. "
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
@@ -18087,7 +18164,7 @@ msgid ""
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Package not found: %s"
+msgid "Package not found: \"%s\"."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18095,15 +18172,12 @@ msgid "Creating APK..."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid ""
-"Could not find template APK to export:\n"
-"%s"
+msgid "Could not find template APK to export: \"%s\"."
msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Missing libraries in the export template for the selected architectures: "
-"%s.\n"
+"Missing libraries in the export template for the selected architectures: %s. "
"Please build a template with all required libraries, or uncheck the missing "
"architectures in the export preset."
msgstr ""
@@ -18113,7 +18187,7 @@ msgid "Adding files..."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Could not export project files"
+msgid "Could not export project files."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18339,6 +18413,15 @@ msgstr ""
msgid "Custom BG Color"
msgstr ""
+#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
+#: platform/osx/export/export.cpp
+msgid "Prepare Templates"
+msgstr ""
+
+#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
+msgid "Export template not found."
+msgstr ""
+
#: platform/iphone/export/export.cpp
msgid "App Store Team ID not specified - cannot configure the project."
msgstr ""
@@ -18360,19 +18443,28 @@ msgid "Run exported HTML in the system's default browser."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not open template for export:"
+msgid "Could not open template for export: \"%s\"."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Invalid export template:"
+#, fuzzy
+msgid "Invalid export template: \"%s\"."
+msgstr "Ðевалиден Ð¸Ð½Ð´ÐµÐºÑ Ð¾Ð´ тип %s за оÑновен тип %s"
+
+#: platform/javascript/export/export.cpp
+msgid "Could not write file: \"%s\"."
+msgstr ""
+
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+msgid "Icon Creation"
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not write file:"
+msgid "Could not read file: \"%s\"."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not read file:"
+msgid "PWA"
msgstr ""
#: platform/javascript/export/export.cpp
@@ -18444,15 +18536,15 @@ msgid "Icon 512 X 512"
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not read HTML shell:"
+msgid "Could not read HTML shell: \"%s\"."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not create HTTP server directory:"
+msgid "Could not create HTTP server directory: %s."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Error starting HTTP server:"
+msgid "Error starting HTTP server: %d."
msgstr ""
#: platform/javascript/export/export.cpp
@@ -18719,9 +18811,25 @@ msgid "Apple Team ID"
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Could not open icon file \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Could not start xcrun executable."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization failed."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization request UUID: \"%s\""
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid ""
-"Note: The notarization process generally takes less than an hour. When the "
-"process is completed, you'll receive an email."
+"The notarization process generally takes less than an hour. When the process "
+"is completed, you'll receive an email."
msgstr ""
#: platform/osx/export/export.cpp
@@ -18737,15 +18845,66 @@ msgid ""
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign failed with error \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign require regex module."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Could not start codesign executable, make sure Xcode command line tools are "
+"installed."
+msgstr ""
+
+#: platform/osx/export/export.cpp platform/windows/export/export.cpp
msgid "No identity found."
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Cannot sign file %s."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Relative symlinks are not supported, exported \"%s\" might be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "DMG Creation"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Could not start hdiutil executable."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed - file exists."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed."
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid "Creating app bundle"
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Could not find template app to export:"
+msgid "Could not find template app to export: \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Invalid export format."
msgstr ""
#: platform/osx/export/export.cpp
@@ -18756,7 +18915,7 @@ msgstr ""
#: platform/osx/export/export.cpp
msgid ""
-"Requested template binary '%s' not found. It might be missing from your "
+"Requested template binary \"%s\" not found. It might be missing from your "
"template archive."
msgstr ""
@@ -18797,6 +18956,14 @@ msgid "Sending archive for notarization"
msgstr ""
#: platform/osx/export/export.cpp
+msgid "ZIP Creation"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Could not open file to read from path \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr ""
@@ -19093,6 +19260,10 @@ msgid "Debug Algorithm"
msgstr ""
#: platform/windows/export/export.cpp
+msgid "Failed to rename temporary file \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
msgid "Identity Type"
msgstr ""
@@ -19133,6 +19304,63 @@ msgid "Trademarks"
msgstr ""
#: platform/windows/export/export.cpp
+msgid "Resources Modification"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find rcedit executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find wine executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start rcedit executable, configure rcedit path in the Editor "
+"Settings (Export > Windows > Rcedit)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"rcedit failed to modify executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find signtool executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find osslsigncode executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid identity type."
+msgstr "Ðевалидни аргументи на конÑтрукт '%s'"
+
+#: platform/windows/export/export.cpp
+msgid "Invalid timestamp server."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start signtool executable, configure signtool path in the Editor "
+"Settings (Export > Windows > Signtool)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Signtool failed to sign executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Failed to remove temporary file \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
msgid ""
"The rcedit tool must be configured in the Editor Settings (Export > Windows "
"> Rcedit) to change the icon or app information data."
@@ -19151,6 +19379,22 @@ msgid "Invalid product version:"
msgstr ""
#: platform/windows/export/export.cpp
+msgid "Windows executables cannot be >= 4 GiB."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Failed to open executable file \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable file header corrupted."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable \"pck\" section not found."
+msgstr ""
+
+#: platform/windows/export/export.cpp
msgid "Windows"
msgstr ""
@@ -19166,6 +19410,10 @@ msgstr ""
msgid "Wine"
msgstr ""
+#: platform/x11/export/export.cpp
+msgid "32-bit executables cannot have embedded data >= 4 GiB."
+msgstr ""
+
#: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp
#: scene/resources/texture.cpp
msgid "Frames"
@@ -19275,7 +19523,8 @@ msgstr ""
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/3d/light.cpp scene/3d/reflection_probe.cpp
-#: scene/3d/visual_instance.cpp scene/resources/material.cpp
+#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp
+#: scene/resources/material.cpp
msgid "Max Distance"
msgstr ""
@@ -19979,6 +20228,17 @@ msgstr ""
msgid "Edge Connection Margin"
msgstr ""
+#: scene/2d/navigation_2d.cpp
+msgid ""
+"'Navigation2D' node and 'Navigation2D.get_simple_path()' are deprecated and "
+"will be removed in a future version. Use 'Navigation2DServer.map_get_path()' "
+"instead."
+msgstr ""
+
+#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
+msgid "Path Desired Distance"
+msgstr ""
+
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
msgid "Target Desired Distance"
msgstr ""
@@ -20029,13 +20289,15 @@ msgid ""
msgstr ""
#: scene/2d/navigation_polygon.cpp
-msgid ""
-"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
-"node. It only provides navigation data."
+msgid "Navpoly"
msgstr ""
-#: scene/2d/navigation_polygon.cpp
-msgid "Navpoly"
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+msgid "Enter Cost"
+msgstr ""
+
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+msgid "Travel Cost"
msgstr ""
#: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp
@@ -21075,6 +21337,13 @@ msgstr ""
msgid "Transform Normals"
msgstr ""
+#: scene/3d/navigation.cpp
+msgid ""
+"'Navigation' node and 'Navigation.get_simple_path()' are deprecated and will "
+"be removed in a future version. Use 'NavigationServer.map_get_path()' "
+"instead."
+msgstr ""
+
#: scene/3d/navigation.cpp scene/resources/curve.cpp
msgid "Up Vector"
msgstr ""
@@ -21096,12 +21365,6 @@ msgid ""
"The NavigationAgent can be used only under a Spatial inheriting parent node."
msgstr ""
-#: scene/3d/navigation_mesh_instance.cpp
-msgid ""
-"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
-"It only provides navigation data."
-msgstr ""
-
#: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp
msgid "NavMesh"
msgstr ""
@@ -23458,6 +23721,16 @@ msgid "3D Physics"
msgstr ""
#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "2D Navigation"
+msgstr "Дуплирај избран(и) клуч(еви)"
+
+#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "3D Navigation"
+msgstr "Дуплирај избран(и) клуч(еви)"
+
+#: scene/register_scene_types.cpp
msgid "Use hiDPI"
msgstr ""
@@ -24686,7 +24959,7 @@ msgstr ""
msgid "Refraction"
msgstr ""
-#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp
+#: scene/resources/material.cpp
msgid "Detail"
msgstr ""
@@ -24760,10 +25033,15 @@ msgid "Visible Instance Count"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Sample Partition Type"
+msgid "Sampling"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Partition Type"
+msgstr "СвојÑтва на анимацијата."
+
+#: scene/resources/navigation_mesh.cpp
msgid "Parsed Geometry Type"
msgstr ""
@@ -24776,7 +25054,11 @@ msgid "Source Group Name"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Agent"
+msgid "Cells"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
+msgid "Agents"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -24788,11 +25070,15 @@ msgid "Max Slope"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+msgid "Regions"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
msgid "Merge Size"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Edge"
+msgid "Edges"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -24805,6 +25091,10 @@ msgid "Verts Per Poly"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+msgid "Details"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
msgid "Sample Distance"
msgstr ""
@@ -24821,7 +25111,15 @@ msgid "Ledge Spans"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Filter Walkable Low Height Spans"
+msgid "Walkable Low Height Spans"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
+msgid "Baking AABB"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
+msgid "Baking AABB Offset"
msgstr ""
#: scene/resources/occluder_shape.cpp
@@ -25186,6 +25484,11 @@ msgid "Scenario"
msgstr ""
#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Navigation Map"
+msgstr "СвојÑтва на анимацијата."
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
msgid "Direct Space State"
msgstr ""
@@ -25201,6 +25504,25 @@ msgstr ""
msgid "Default Angular Damp"
msgstr ""
+#: scene/resources/world.cpp
+#, fuzzy
+msgid "Default Map Up"
+msgstr "ВредноÑÑ‚:"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Size"
+msgstr "ВредноÑÑ‚:"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Height"
+msgstr "ВредноÑÑ‚:"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+msgid "Default Edge Connection Margin"
+msgstr ""
+
#: scene/resources/world_2d.cpp
msgid "Canvas"
msgstr ""
diff --git a/editor/translations/ml.po b/editor/translations/ml.po
index f90d962f02..7b247d8f78 100644
--- a/editor/translations/ml.po
+++ b/editor/translations/ml.po
@@ -206,9 +206,10 @@ msgid "Data"
msgstr ""
#: core/io/file_access_network.cpp core/register_core_types.cpp
-#: editor/editor_settings.cpp main/main.cpp
+#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
#: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h
+#: scene/gui/file_dialog.cpp
msgid "Network"
msgstr ""
@@ -359,6 +360,15 @@ msgstr ""
msgid "Max Size (KB)"
msgstr ""
+#: core/os/input.cpp
+#, fuzzy
+msgid "Mouse Mode"
+msgstr "വിളി രീതി നോകàµà´•àµà´•"
+
+#: core/os/input.cpp
+msgid "Use Accumulated Input"
+msgstr ""
+
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: servers/audio_server.cpp
msgid "Device"
@@ -541,7 +551,8 @@ msgstr ""
#: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
-#: main/main.cpp
+#: main/main.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp
msgid "Run"
msgstr ""
@@ -624,24 +635,23 @@ msgid "Main Run Args"
msgstr ""
#: core/project_settings.cpp
-msgid "Search In File Extensions"
+msgid "Scene Naming"
msgstr ""
#: core/project_settings.cpp
-msgid "Script Templates Search Path"
+msgid "Search In File Extensions"
msgstr ""
-#: core/project_settings.cpp editor/editor_node.cpp
-#: editor/plugins/version_control_editor_plugin.cpp
-msgid "Version Control"
+#: core/project_settings.cpp
+msgid "Script Templates Search Path"
msgstr ""
#: core/project_settings.cpp
-msgid "Autoload On Startup"
+msgid "Version Control Autoload On Startup"
msgstr ""
#: core/project_settings.cpp
-msgid "Plugin Name"
+msgid "Version Control Plugin Name"
msgstr ""
#: core/project_settings.cpp scene/2d/collision_object_2d.cpp
@@ -749,7 +759,8 @@ msgid "Quality"
msgstr ""
#: core/project_settings.cpp scene/gui/file_dialog.cpp
-#: scene/main/scene_tree.cpp servers/visual_server.cpp
+#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp
+#: servers/visual_server.cpp
msgid "Filters"
msgstr ""
@@ -2143,7 +2154,7 @@ msgid "Open"
msgstr ""
#: editor/dependency_editor.cpp
-msgid "Owners Of:"
+msgid "Owners of: %s (Total: %d)"
msgstr ""
#: editor/dependency_editor.cpp
@@ -2435,7 +2446,7 @@ msgid "Bus Options"
msgstr "à´ªàµà´°à´µàµƒà´¤àµà´¤à´¿à´•ൾ:"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/scene_tree_dock.cpp
+#: editor/project_export.cpp editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr ""
@@ -2691,6 +2702,22 @@ msgid "Choose"
msgstr ""
#: editor/editor_export.cpp
+msgid "Project export for platform:"
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Completed with errors."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Completed successfully."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Failed."
+msgstr ""
+
+#: editor/editor_export.cpp
msgid "Storing File:"
msgstr ""
@@ -2703,6 +2730,26 @@ msgid "Packing"
msgstr ""
#: editor/editor_export.cpp
+msgid "Save PCK"
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Cannot create file \"%s\"."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Failed to export project files."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Can't open file to read from path \"%s\"."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Save ZIP"
+msgstr ""
+
+#: editor/editor_export.cpp
msgid ""
"Target platform requires 'ETC' texture compression for GLES2. Enable 'Import "
"Etc' in Project Settings."
@@ -2805,8 +2852,25 @@ msgstr ""
msgid "Custom release template not found."
msgstr ""
+#: editor/editor_export.cpp
+msgid "Prepare Template"
+msgstr ""
+
+#: editor/editor_export.cpp platform/osx/export/export.cpp
+msgid "The given export path doesn't exist."
+msgstr ""
+
#: editor/editor_export.cpp platform/javascript/export/export.cpp
-msgid "Template file not found:"
+msgid "Template file not found: \"%s\"."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Failed to copy export template."
+msgstr ""
+
+#: editor/editor_export.cpp platform/windows/export/export.cpp
+#: platform/x11/export/export.cpp
+msgid "PCK Embedding"
msgstr ""
#: editor/editor_export.cpp
@@ -2976,9 +3040,9 @@ msgid "Import"
msgstr ""
#: editor/editor_feature_profile.cpp editor/project_export.cpp
-#: platform/android/export/export.cpp platform/javascript/export/export.cpp
-#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
-#: platform/windows/export/export.cpp
+#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#: platform/uwp/export/export.cpp platform/windows/export/export.cpp
msgid "Export"
msgstr ""
@@ -4061,14 +4125,6 @@ msgid ""
"Unable to write to file '%s', file in use, locked or lacking permissions."
msgstr ""
-#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
-msgid "Scene"
-msgstr ""
-
-#: editor/editor_node.cpp
-msgid "Scene Naming"
-msgstr ""
-
#: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp
#: servers/arvr/arvr_interface.cpp
msgid "Interface"
@@ -4184,6 +4240,10 @@ msgid "Default Color Picker Mode"
msgstr ""
#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
+msgid "Version Control"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
msgid "Username"
msgstr ""
@@ -4211,6 +4271,10 @@ msgstr ""
msgid "Add a new scene."
msgstr ""
+#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
+msgid "Scene"
+msgstr ""
+
#: editor/editor_node.cpp
msgid "Go to previously opened scene."
msgstr ""
@@ -4938,6 +5002,10 @@ msgid ""
"as runnable."
msgstr ""
+#: editor/editor_run_native.cpp
+msgid "Project Run"
+msgstr ""
+
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
msgstr ""
@@ -5195,7 +5263,9 @@ msgid "Draw Spaces"
msgstr ""
#: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp
-#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp
+#: scene/main/scene_tree.cpp scene/resources/world.cpp
+#: scene/resources/world_2d.cpp
msgid "Navigation"
msgstr ""
@@ -6582,7 +6652,7 @@ msgstr ""
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp
-#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp
+#: scene/gui/control.cpp
msgid "Filter"
msgstr ""
@@ -6851,6 +6921,18 @@ msgid "Saving..."
msgstr ""
#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used as a normal map in 3D. Enabling red-green "
+"texture compression to reduce memory usage (blue channel is discarded)."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap "
+"generation and VRAM texture compression."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
msgid "2D, Detect 3D"
msgstr ""
@@ -7511,11 +7593,20 @@ msgid "New Anim"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+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 "Rename Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Delete Animation?"
msgstr ""
@@ -7533,11 +7624,6 @@ 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 "Duplicate Animation"
msgstr ""
@@ -7680,10 +7766,6 @@ msgid "Pin AnimationPlayer"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Create New Animation"
-msgstr ""
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Name:"
msgstr ""
@@ -9737,6 +9819,7 @@ msgid "Points"
msgstr ""
#: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp
+#: scene/resources/navigation_mesh.cpp
msgid "Polygons"
msgstr ""
@@ -11090,7 +11173,7 @@ msgid "Invalid geometry, can't replace by mesh."
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
-msgid "Convert to Mesh2D"
+msgid "Convert to MeshInstance2D"
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
@@ -12049,8 +12132,7 @@ msgid "Select the previous shape, subtile, or Tile."
msgstr ""
#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp
-#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp
-#: scene/resources/texture.cpp
+#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp
msgid "Region"
msgstr ""
@@ -13472,31 +13554,10 @@ 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 "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 "Export Path"
msgstr ""
@@ -13631,6 +13692,10 @@ msgid "Export templates for this platform are missing:"
msgstr ""
#: editor/project_export.cpp
+msgid "Project Export"
+msgstr ""
+
+#: editor/project_export.cpp
msgid "Manage Export Templates"
msgstr ""
@@ -15881,7 +15946,7 @@ msgstr ""
#: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp
#: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp
-#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp
+#: scene/3d/collision_polygon.cpp
msgid "Polygon"
msgstr ""
@@ -16443,7 +16508,6 @@ msgid "Use In Baked Light"
msgstr ""
#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
-#: scene/resources/navigation_mesh.cpp
msgid "Cell"
msgstr ""
@@ -16469,6 +16533,19 @@ msgstr ""
msgid "Mask"
msgstr ""
+#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
+#, fuzzy
+msgid "Bake Navigation"
+msgstr "സൂചികകൾ നീകàµà´•à´‚ ചെയàµà´¯àµà´•"
+
+#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp
+#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp
+#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp
+#: scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Navigation Layers"
+msgstr "വില:"
+
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Plane"
msgstr ""
@@ -17907,10 +17984,6 @@ 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."
@@ -18014,12 +18087,15 @@ msgstr ""
msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version."
msgstr ""
+#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp
+#: platform/windows/export/export.cpp
+msgid "Code Signing"
+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."
+"'apksigner' could not be found. Please check that the command is available "
+"in the Android SDK build-tools directory. The resulting %s is unsigned."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18035,6 +18111,10 @@ msgid "Could not find keystore, unable to export."
msgstr ""
#: platform/android/export/export_plugin.cpp
+msgid "Could not start apksigner executable."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
@@ -18063,7 +18143,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Unsupported export format!\n"
+msgid "Unsupported export format!"
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18074,19 +18154,17 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Android build version mismatch:\n"
-" Template installed: %s\n"
-" Godot Version: %s\n"
+"Android build version mismatch: Template installed: %s, Godot version: %s. "
"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"
+"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"
+msgid "Could not export project files to gradle project."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18099,7 +18177,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Building of Android project failed, check output for the error.\n"
+"Building of Android project failed, check output for the error. "
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
@@ -18114,7 +18192,7 @@ msgid ""
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Package not found: %s"
+msgid "Package not found: \"%s\"."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18122,15 +18200,12 @@ msgid "Creating APK..."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid ""
-"Could not find template APK to export:\n"
-"%s"
+msgid "Could not find template APK to export: \"%s\"."
msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Missing libraries in the export template for the selected architectures: "
-"%s.\n"
+"Missing libraries in the export template for the selected architectures: %s. "
"Please build a template with all required libraries, or uncheck the missing "
"architectures in the export preset."
msgstr ""
@@ -18140,7 +18215,7 @@ msgid "Adding files..."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Could not export project files"
+msgid "Could not export project files."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18367,6 +18442,15 @@ msgstr "à´ªàµà´°à´µàµƒà´¤àµà´¤à´¿à´•ൾ:"
msgid "Custom BG Color"
msgstr "à´ªàµà´°à´µàµƒà´¤àµà´¤à´¿à´•ൾ:"
+#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
+#: platform/osx/export/export.cpp
+msgid "Prepare Templates"
+msgstr ""
+
+#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
+msgid "Export template not found."
+msgstr ""
+
#: platform/iphone/export/export.cpp
msgid "App Store Team ID not specified - cannot configure the project."
msgstr ""
@@ -18388,19 +18472,29 @@ msgid "Run exported HTML in the system's default browser."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not open template for export:"
+msgid "Could not open template for export: \"%s\"."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Invalid export template:"
+#, fuzzy
+msgid "Invalid export template: \"%s\"."
+msgstr "à´…à´Ÿà´¿à´¸àµà´¥à´¾à´¨ തരം% sഇനൠഅസാധàµà´µà´¾à´¯ സൂചിക തരം"
+
+#: platform/javascript/export/export.cpp
+msgid "Could not write file: \"%s\"."
msgstr ""
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Icon Creation"
+msgstr "ചലനം à´šàµà´±àµà´±àµ½"
+
#: platform/javascript/export/export.cpp
-msgid "Could not write file:"
+msgid "Could not read file: \"%s\"."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not read file:"
+msgid "PWA"
msgstr ""
#: platform/javascript/export/export.cpp
@@ -18473,15 +18567,15 @@ msgid "Icon 512 X 512"
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not read HTML shell:"
+msgid "Could not read HTML shell: \"%s\"."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not create HTTP server directory:"
+msgid "Could not create HTTP server directory: %s."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Error starting HTTP server:"
+msgid "Error starting HTTP server: %d."
msgstr ""
#: platform/javascript/export/export.cpp
@@ -18751,9 +18845,26 @@ msgid "Apple Team ID"
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Could not open icon file \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Could not start xcrun executable."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization failed."
+msgstr "ചലനം à´šàµà´±àµà´±àµ½"
+
+#: platform/osx/export/export.cpp
+msgid "Notarization request UUID: \"%s\""
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid ""
-"Note: The notarization process generally takes less than an hour. When the "
-"process is completed, you'll receive an email."
+"The notarization process generally takes less than an hour. When the process "
+"is completed, you'll receive an email."
msgstr ""
#: platform/osx/export/export.cpp
@@ -18769,18 +18880,71 @@ msgid ""
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign failed with error \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign require regex module."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Could not start codesign executable, make sure Xcode command line tools are "
+"installed."
+msgstr ""
+
+#: platform/osx/export/export.cpp platform/windows/export/export.cpp
msgid "No identity found."
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Cannot sign file %s."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Relative symlinks are not supported, exported \"%s\" might be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "DMG Creation"
+msgstr "à´ªàµà´°à´µàµƒà´¤àµà´¤à´¿à´•ൾ:"
+
+#: platform/osx/export/export.cpp
+msgid "Could not start hdiutil executable."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed - file exists."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed."
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid "Creating app bundle"
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Could not find template app to export:"
+msgid "Could not find template app to export: \"%s\"."
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid export format."
+msgstr "à´¤àµà´°à´¿à´®à´¾à´¨ പരിവർതàµà´¤à´¨à´‚ നോകàµà´•àµà´•"
+
+#: platform/osx/export/export.cpp
msgid ""
"Relative symlinks are not supported on this OS, the exported project might "
"be broken!"
@@ -18788,7 +18952,7 @@ msgstr ""
#: platform/osx/export/export.cpp
msgid ""
-"Requested template binary '%s' not found. It might be missing from your "
+"Requested template binary \"%s\" not found. It might be missing from your "
"template archive."
msgstr ""
@@ -18829,6 +18993,15 @@ msgid "Sending archive for notarization"
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "ZIP Creation"
+msgstr "ചലനം à´šàµà´±àµà´±àµ½"
+
+#: platform/osx/export/export.cpp
+msgid "Could not open file to read from path \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr ""
@@ -19125,6 +19298,10 @@ msgid "Debug Algorithm"
msgstr ""
#: platform/windows/export/export.cpp
+msgid "Failed to rename temporary file \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
msgid "Identity Type"
msgstr ""
@@ -19165,6 +19342,63 @@ msgid "Trademarks"
msgstr ""
#: platform/windows/export/export.cpp
+msgid "Resources Modification"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find rcedit executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find wine executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start rcedit executable, configure rcedit path in the Editor "
+"Settings (Export > Windows > Rcedit)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"rcedit failed to modify executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find signtool executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find osslsigncode executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid identity type."
+msgstr "'%s' നിർമികàµà´•àµà´µà´¾àµ» à´•à´¿à´Ÿàµà´Ÿà´¿à´¯ വിവരങàµà´™àµ¾ തെറàµà´±à´¾à´£àµ"
+
+#: platform/windows/export/export.cpp
+msgid "Invalid timestamp server."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start signtool executable, configure signtool path in the Editor "
+"Settings (Export > Windows > Signtool)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Signtool failed to sign executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Failed to remove temporary file \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
msgid ""
"The rcedit tool must be configured in the Editor Settings (Export > Windows "
"> Rcedit) to change the icon or app information data."
@@ -19183,6 +19417,22 @@ msgid "Invalid product version:"
msgstr ""
#: platform/windows/export/export.cpp
+msgid "Windows executables cannot be >= 4 GiB."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Failed to open executable file \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable file header corrupted."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable \"pck\" section not found."
+msgstr ""
+
+#: platform/windows/export/export.cpp
msgid "Windows"
msgstr ""
@@ -19198,6 +19448,10 @@ msgstr ""
msgid "Wine"
msgstr ""
+#: platform/x11/export/export.cpp
+msgid "32-bit executables cannot have embedded data >= 4 GiB."
+msgstr ""
+
#: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp
#: scene/resources/texture.cpp
msgid "Frames"
@@ -19308,7 +19562,8 @@ msgstr ""
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/3d/light.cpp scene/3d/reflection_probe.cpp
-#: scene/3d/visual_instance.cpp scene/resources/material.cpp
+#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp
+#: scene/resources/material.cpp
msgid "Max Distance"
msgstr ""
@@ -20016,6 +20271,17 @@ msgstr ""
msgid "Edge Connection Margin"
msgstr "ചലനം à´šàµà´±àµà´±àµ½"
+#: scene/2d/navigation_2d.cpp
+msgid ""
+"'Navigation2D' node and 'Navigation2D.get_simple_path()' are deprecated and "
+"will be removed in a future version. Use 'Navigation2DServer.map_get_path()' "
+"instead."
+msgstr ""
+
+#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
+msgid "Path Desired Distance"
+msgstr ""
+
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
msgid "Target Desired Distance"
msgstr ""
@@ -20066,13 +20332,15 @@ msgid ""
msgstr ""
#: scene/2d/navigation_polygon.cpp
-msgid ""
-"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
-"node. It only provides navigation data."
+msgid "Navpoly"
msgstr ""
-#: scene/2d/navigation_polygon.cpp
-msgid "Navpoly"
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+msgid "Enter Cost"
+msgstr ""
+
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+msgid "Travel Cost"
msgstr ""
#: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp
@@ -21123,6 +21391,13 @@ msgstr ""
msgid "Transform Normals"
msgstr "à´¤àµà´°à´¿à´®à´¾à´¨ പരിവർതàµà´¤à´¨à´‚ നോകàµà´•àµà´•"
+#: scene/3d/navigation.cpp
+msgid ""
+"'Navigation' node and 'Navigation.get_simple_path()' are deprecated and will "
+"be removed in a future version. Use 'NavigationServer.map_get_path()' "
+"instead."
+msgstr ""
+
#: scene/3d/navigation.cpp scene/resources/curve.cpp
msgid "Up Vector"
msgstr ""
@@ -21144,12 +21419,6 @@ msgid ""
"The NavigationAgent can be used only under a Spatial inheriting parent node."
msgstr ""
-#: scene/3d/navigation_mesh_instance.cpp
-msgid ""
-"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
-"It only provides navigation data."
-msgstr ""
-
#: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp
msgid "NavMesh"
msgstr ""
@@ -23533,6 +23802,16 @@ msgid "3D Physics"
msgstr ""
#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "2D Navigation"
+msgstr "സൂചികകൾ നീകàµà´•à´‚ ചെയàµà´¯àµà´•"
+
+#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "3D Navigation"
+msgstr "സൂചികകൾ നീകàµà´•à´‚ ചെയàµà´¯àµà´•"
+
+#: scene/register_scene_types.cpp
msgid "Use hiDPI"
msgstr ""
@@ -24794,7 +25073,7 @@ msgstr ""
msgid "Refraction"
msgstr ""
-#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp
+#: scene/resources/material.cpp
msgid "Detail"
msgstr ""
@@ -24871,10 +25150,15 @@ msgid "Visible Instance Count"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Sample Partition Type"
+msgid "Sampling"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Partition Type"
+msgstr "ചലനം à´šàµà´±àµà´±àµ½"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Parsed Geometry Type"
msgstr ""
@@ -24887,7 +25171,11 @@ msgid "Source Group Name"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Agent"
+msgid "Cells"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
+msgid "Agents"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -24899,11 +25187,16 @@ msgid "Max Slope"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Regions"
+msgstr "à´ªàµà´°à´µàµƒà´¤àµà´¤à´¿à´•ൾ:"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Merge Size"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Edge"
+msgid "Edges"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -24916,6 +25209,10 @@ msgid "Verts Per Poly"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+msgid "Details"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
msgid "Sample Distance"
msgstr ""
@@ -24932,7 +25229,15 @@ msgid "Ledge Spans"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Filter Walkable Low Height Spans"
+msgid "Walkable Low Height Spans"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
+msgid "Baking AABB"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
+msgid "Baking AABB Offset"
msgstr ""
#: scene/resources/occluder_shape.cpp
@@ -25299,6 +25604,11 @@ msgid "Scenario"
msgstr ""
#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Navigation Map"
+msgstr "ചലനം à´šàµà´±àµà´±àµ½"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
msgid "Direct Space State"
msgstr ""
@@ -25314,6 +25624,26 @@ msgstr ""
msgid "Default Angular Damp"
msgstr ""
+#: scene/resources/world.cpp
+#, fuzzy
+msgid "Default Map Up"
+msgstr "വില:"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Size"
+msgstr "വില:"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Height"
+msgstr "വില:"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Edge Connection Margin"
+msgstr "ചലനം à´šàµà´±àµà´±àµ½"
+
#: scene/resources/world_2d.cpp
msgid "Canvas"
msgstr ""
diff --git a/editor/translations/mr.po b/editor/translations/mr.po
index 1ec7cdfc99..d7aa4bd1aa 100644
--- a/editor/translations/mr.po
+++ b/editor/translations/mr.po
@@ -204,9 +204,10 @@ msgid "Data"
msgstr ""
#: core/io/file_access_network.cpp core/register_core_types.cpp
-#: editor/editor_settings.cpp main/main.cpp
+#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
#: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h
+#: scene/gui/file_dialog.cpp
msgid "Network"
msgstr ""
@@ -358,6 +359,15 @@ msgstr ""
msgid "Max Size (KB)"
msgstr ""
+#: core/os/input.cpp
+#, fuzzy
+msgid "Mouse Mode"
+msgstr "पà¥à¤²à¥‡ मोड:"
+
+#: core/os/input.cpp
+msgid "Use Accumulated Input"
+msgstr ""
+
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: servers/audio_server.cpp
msgid "Device"
@@ -543,7 +553,8 @@ msgstr ""
#: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
-#: main/main.cpp
+#: main/main.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp
msgid "Run"
msgstr ""
@@ -626,24 +637,23 @@ msgid "Main Run Args"
msgstr ""
#: core/project_settings.cpp
-msgid "Search In File Extensions"
+msgid "Scene Naming"
msgstr ""
#: core/project_settings.cpp
-msgid "Script Templates Search Path"
+msgid "Search In File Extensions"
msgstr ""
-#: core/project_settings.cpp editor/editor_node.cpp
-#: editor/plugins/version_control_editor_plugin.cpp
-msgid "Version Control"
+#: core/project_settings.cpp
+msgid "Script Templates Search Path"
msgstr ""
#: core/project_settings.cpp
-msgid "Autoload On Startup"
+msgid "Version Control Autoload On Startup"
msgstr ""
#: core/project_settings.cpp
-msgid "Plugin Name"
+msgid "Version Control Plugin Name"
msgstr ""
#: core/project_settings.cpp scene/2d/collision_object_2d.cpp
@@ -752,7 +762,8 @@ msgid "Quality"
msgstr ""
#: core/project_settings.cpp scene/gui/file_dialog.cpp
-#: scene/main/scene_tree.cpp servers/visual_server.cpp
+#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp
+#: servers/visual_server.cpp
msgid "Filters"
msgstr ""
@@ -2144,7 +2155,7 @@ msgid "Open"
msgstr ""
#: editor/dependency_editor.cpp
-msgid "Owners Of:"
+msgid "Owners of: %s (Total: %d)"
msgstr ""
#: editor/dependency_editor.cpp
@@ -2435,7 +2446,7 @@ msgid "Bus Options"
msgstr ""
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/scene_tree_dock.cpp
+#: editor/project_export.cpp editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr ""
@@ -2691,6 +2702,22 @@ msgid "Choose"
msgstr ""
#: editor/editor_export.cpp
+msgid "Project export for platform:"
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Completed with errors."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Completed successfully."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Failed."
+msgstr ""
+
+#: editor/editor_export.cpp
msgid "Storing File:"
msgstr ""
@@ -2703,6 +2730,26 @@ msgid "Packing"
msgstr ""
#: editor/editor_export.cpp
+msgid "Save PCK"
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Cannot create file \"%s\"."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Failed to export project files."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Can't open file to read from path \"%s\"."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Save ZIP"
+msgstr ""
+
+#: editor/editor_export.cpp
msgid ""
"Target platform requires 'ETC' texture compression for GLES2. Enable 'Import "
"Etc' in Project Settings."
@@ -2803,8 +2850,25 @@ msgstr ""
msgid "Custom release template not found."
msgstr ""
+#: editor/editor_export.cpp
+msgid "Prepare Template"
+msgstr ""
+
+#: editor/editor_export.cpp platform/osx/export/export.cpp
+msgid "The given export path doesn't exist."
+msgstr ""
+
#: editor/editor_export.cpp platform/javascript/export/export.cpp
-msgid "Template file not found:"
+msgid "Template file not found: \"%s\"."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Failed to copy export template."
+msgstr ""
+
+#: editor/editor_export.cpp platform/windows/export/export.cpp
+#: platform/x11/export/export.cpp
+msgid "PCK Embedding"
msgstr ""
#: editor/editor_export.cpp
@@ -2974,9 +3038,9 @@ msgid "Import"
msgstr ""
#: editor/editor_feature_profile.cpp editor/project_export.cpp
-#: platform/android/export/export.cpp platform/javascript/export/export.cpp
-#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
-#: platform/windows/export/export.cpp
+#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#: platform/uwp/export/export.cpp platform/windows/export/export.cpp
msgid "Export"
msgstr ""
@@ -4054,14 +4118,6 @@ msgid ""
"Unable to write to file '%s', file in use, locked or lacking permissions."
msgstr ""
-#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
-msgid "Scene"
-msgstr ""
-
-#: editor/editor_node.cpp
-msgid "Scene Naming"
-msgstr ""
-
#: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp
#: servers/arvr/arvr_interface.cpp
msgid "Interface"
@@ -4178,6 +4234,10 @@ msgid "Default Color Picker Mode"
msgstr ""
#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
+msgid "Version Control"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
msgid "Username"
msgstr ""
@@ -4205,6 +4265,10 @@ msgstr ""
msgid "Add a new scene."
msgstr ""
+#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
+msgid "Scene"
+msgstr ""
+
#: editor/editor_node.cpp
msgid "Go to previously opened scene."
msgstr ""
@@ -4932,6 +4996,10 @@ msgid ""
"as runnable."
msgstr ""
+#: editor/editor_run_native.cpp
+msgid "Project Run"
+msgstr ""
+
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
msgstr ""
@@ -5185,7 +5253,9 @@ msgid "Draw Spaces"
msgstr ""
#: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp
-#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp
+#: scene/main/scene_tree.cpp scene/resources/world.cpp
+#: scene/resources/world_2d.cpp
msgid "Navigation"
msgstr ""
@@ -6575,7 +6645,7 @@ msgstr ""
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp
-#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp
+#: scene/gui/control.cpp
#, fuzzy
msgid "Filter"
msgstr "नोड हलवा"
@@ -6848,6 +6918,18 @@ msgid "Saving..."
msgstr ""
#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used as a normal map in 3D. Enabling red-green "
+"texture compression to reduce memory usage (blue channel is discarded)."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap "
+"generation and VRAM texture compression."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
msgid "2D, Detect 3D"
msgstr ""
@@ -7502,11 +7584,20 @@ msgid "New Anim"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+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 "Rename Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Delete Animation?"
msgstr ""
@@ -7524,11 +7615,6 @@ 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 "Duplicate Animation"
msgstr ""
@@ -7671,10 +7757,6 @@ msgid "Pin AnimationPlayer"
msgstr "अâ€à¥…निमेशनपà¥à¤²à¥‡à¤…र पिन करा"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Create New Animation"
-msgstr "नवीन अâ€à¥…निमेशन तयार करा"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Name:"
msgstr "अâ€à¥…निमेशन नाव:"
@@ -9725,6 +9807,7 @@ msgid "Points"
msgstr ""
#: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp
+#: scene/resources/navigation_mesh.cpp
msgid "Polygons"
msgstr ""
@@ -11078,7 +11161,7 @@ msgid "Invalid geometry, can't replace by mesh."
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
-msgid "Convert to Mesh2D"
+msgid "Convert to MeshInstance2D"
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
@@ -12042,8 +12125,7 @@ msgid "Select the previous shape, subtile, or Tile."
msgstr ""
#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp
-#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp
-#: scene/resources/texture.cpp
+#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp
msgid "Region"
msgstr ""
@@ -13467,31 +13549,10 @@ 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 "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 "Export Path"
msgstr ""
@@ -13624,6 +13685,10 @@ msgid "Export templates for this platform are missing:"
msgstr ""
#: editor/project_export.cpp
+msgid "Project Export"
+msgstr ""
+
+#: editor/project_export.cpp
msgid "Manage Export Templates"
msgstr ""
@@ -15878,7 +15943,7 @@ msgstr ""
#: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp
#: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp
-#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp
+#: scene/3d/collision_polygon.cpp
msgid "Polygon"
msgstr ""
@@ -16441,7 +16506,6 @@ msgid "Use In Baked Light"
msgstr ""
#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
-#: scene/resources/navigation_mesh.cpp
msgid "Cell"
msgstr ""
@@ -16470,6 +16534,19 @@ msgstr "नोड हलवा"
msgid "Mask"
msgstr ""
+#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
+#, fuzzy
+msgid "Bake Navigation"
+msgstr "संकà¥à¤°à¤®à¤£: "
+
+#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp
+#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp
+#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp
+#: scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Navigation Layers"
+msgstr "नोड हलवा"
+
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Plane"
msgstr ""
@@ -17908,10 +17985,6 @@ 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."
@@ -18015,12 +18088,16 @@ msgstr ""
msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version."
msgstr ""
+#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Code Signing"
+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."
+"'apksigner' could not be found. Please check that the command is available "
+"in the Android SDK build-tools directory. The resulting %s is unsigned."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18036,6 +18113,10 @@ msgid "Could not find keystore, unable to export."
msgstr ""
#: platform/android/export/export_plugin.cpp
+msgid "Could not start apksigner executable."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
@@ -18064,7 +18145,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Unsupported export format!\n"
+msgid "Unsupported export format!"
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18075,19 +18156,17 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Android build version mismatch:\n"
-" Template installed: %s\n"
-" Godot Version: %s\n"
+"Android build version mismatch: Template installed: %s, Godot version: %s. "
"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"
+"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"
+msgid "Could not export project files to gradle project."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18100,7 +18179,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Building of Android project failed, check output for the error.\n"
+"Building of Android project failed, check output for the error. "
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
@@ -18115,7 +18194,7 @@ msgid ""
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Package not found: %s"
+msgid "Package not found: \"%s\"."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18123,15 +18202,12 @@ msgid "Creating APK..."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid ""
-"Could not find template APK to export:\n"
-"%s"
+msgid "Could not find template APK to export: \"%s\"."
msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Missing libraries in the export template for the selected architectures: "
-"%s.\n"
+"Missing libraries in the export template for the selected architectures: %s. "
"Please build a template with all required libraries, or uncheck the missing "
"architectures in the export preset."
msgstr ""
@@ -18141,7 +18217,7 @@ msgid "Adding files..."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Could not export project files"
+msgid "Could not export project files."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18367,6 +18443,15 @@ msgstr ""
msgid "Custom BG Color"
msgstr ""
+#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
+#: platform/osx/export/export.cpp
+msgid "Prepare Templates"
+msgstr ""
+
+#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
+msgid "Export template not found."
+msgstr ""
+
#: platform/iphone/export/export.cpp
msgid "App Store Team ID not specified - cannot configure the project."
msgstr ""
@@ -18388,19 +18473,29 @@ msgid "Run exported HTML in the system's default browser."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not open template for export:"
+msgid "Could not open template for export: \"%s\"."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Invalid export template:"
+#, fuzzy
+msgid "Invalid export template: \"%s\"."
+msgstr "बेस पà¥à¤°à¤•ार %s साठी %s पà¥à¤°à¤•ाराची अवैध अनà¥à¤•à¥à¤°à¤®à¤£à¤¿à¤•ा"
+
+#: platform/javascript/export/export.cpp
+msgid "Could not write file: \"%s\"."
msgstr ""
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Icon Creation"
+msgstr "अâ€à¥…निमेशन टà¥à¤°à¥€"
+
#: platform/javascript/export/export.cpp
-msgid "Could not write file:"
+msgid "Could not read file: \"%s\"."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not read file:"
+msgid "PWA"
msgstr ""
#: platform/javascript/export/export.cpp
@@ -18473,15 +18568,15 @@ msgid "Icon 512 X 512"
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not read HTML shell:"
+msgid "Could not read HTML shell: \"%s\"."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not create HTTP server directory:"
+msgid "Could not create HTTP server directory: %s."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Error starting HTTP server:"
+msgid "Error starting HTTP server: %d."
msgstr ""
#: platform/javascript/export/export.cpp
@@ -18750,9 +18845,26 @@ msgid "Apple Team ID"
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Could not open icon file \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Could not start xcrun executable."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization failed."
+msgstr "अâ€à¥…निमेशन टà¥à¤°à¥€"
+
+#: platform/osx/export/export.cpp
+msgid "Notarization request UUID: \"%s\""
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid ""
-"Note: The notarization process generally takes less than an hour. When the "
-"process is completed, you'll receive an email."
+"The notarization process generally takes less than an hour. When the process "
+"is completed, you'll receive an email."
msgstr ""
#: platform/osx/export/export.cpp
@@ -18768,15 +18880,67 @@ msgid ""
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign failed with error \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign require regex module."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Could not start codesign executable, make sure Xcode command line tools are "
+"installed."
+msgstr ""
+
+#: platform/osx/export/export.cpp platform/windows/export/export.cpp
msgid "No identity found."
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Cannot sign file %s."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Relative symlinks are not supported, exported \"%s\" might be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "DMG Creation"
+msgstr "संकà¥à¤°à¤®à¤£: "
+
+#: platform/osx/export/export.cpp
+msgid "Could not start hdiutil executable."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed - file exists."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed."
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid "Creating app bundle"
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Could not find template app to export:"
+msgid "Could not find template app to export: \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Invalid export format."
msgstr ""
#: platform/osx/export/export.cpp
@@ -18787,7 +18951,7 @@ msgstr ""
#: platform/osx/export/export.cpp
msgid ""
-"Requested template binary '%s' not found. It might be missing from your "
+"Requested template binary \"%s\" not found. It might be missing from your "
"template archive."
msgstr ""
@@ -18828,6 +18992,15 @@ msgid "Sending archive for notarization"
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "ZIP Creation"
+msgstr "अâ€à¥…निमेशन टà¥à¤°à¥€"
+
+#: platform/osx/export/export.cpp
+msgid "Could not open file to read from path \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr ""
@@ -19126,6 +19299,10 @@ msgid "Debug Algorithm"
msgstr ""
#: platform/windows/export/export.cpp
+msgid "Failed to rename temporary file \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
msgid "Identity Type"
msgstr ""
@@ -19166,6 +19343,63 @@ msgid "Trademarks"
msgstr ""
#: platform/windows/export/export.cpp
+msgid "Resources Modification"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find rcedit executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find wine executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start rcedit executable, configure rcedit path in the Editor "
+"Settings (Export > Windows > Rcedit)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"rcedit failed to modify executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find signtool executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find osslsigncode executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid identity type."
+msgstr "बेस पà¥à¤°à¤•ार %s साठी %s पà¥à¤°à¤•ाराची अवैध अनà¥à¤•à¥à¤°à¤®à¤£à¤¿à¤•ा"
+
+#: platform/windows/export/export.cpp
+msgid "Invalid timestamp server."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start signtool executable, configure signtool path in the Editor "
+"Settings (Export > Windows > Signtool)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Signtool failed to sign executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Failed to remove temporary file \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
msgid ""
"The rcedit tool must be configured in the Editor Settings (Export > Windows "
"> Rcedit) to change the icon or app information data."
@@ -19184,6 +19418,22 @@ msgid "Invalid product version:"
msgstr ""
#: platform/windows/export/export.cpp
+msgid "Windows executables cannot be >= 4 GiB."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Failed to open executable file \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable file header corrupted."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable \"pck\" section not found."
+msgstr ""
+
+#: platform/windows/export/export.cpp
msgid "Windows"
msgstr ""
@@ -19199,6 +19449,10 @@ msgstr ""
msgid "Wine"
msgstr ""
+#: platform/x11/export/export.cpp
+msgid "32-bit executables cannot have embedded data >= 4 GiB."
+msgstr ""
+
#: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp
#: scene/resources/texture.cpp
msgid "Frames"
@@ -19310,7 +19564,8 @@ msgstr ""
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/3d/light.cpp scene/3d/reflection_probe.cpp
-#: scene/3d/visual_instance.cpp scene/resources/material.cpp
+#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp
+#: scene/resources/material.cpp
msgid "Max Distance"
msgstr ""
@@ -20029,6 +20284,17 @@ msgstr ""
msgid "Edge Connection Margin"
msgstr "अâ€à¥…निमेशन टà¥à¤°à¥€"
+#: scene/2d/navigation_2d.cpp
+msgid ""
+"'Navigation2D' node and 'Navigation2D.get_simple_path()' are deprecated and "
+"will be removed in a future version. Use 'Navigation2DServer.map_get_path()' "
+"instead."
+msgstr ""
+
+#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
+msgid "Path Desired Distance"
+msgstr ""
+
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
msgid "Target Desired Distance"
msgstr ""
@@ -20080,15 +20346,19 @@ msgid ""
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/navigation_polygon.cpp
msgid "Navpoly"
msgstr ""
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Enter Cost"
+msgstr "नोड हलवा"
+
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Travel Cost"
+msgstr "पà¥à¤°à¤µà¤¾à¤¸"
+
#: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp
#: scene/main/canvas_layer.cpp
msgid "Rotation Degrees"
@@ -21139,6 +21409,13 @@ msgstr ""
msgid "Transform Normals"
msgstr ""
+#: scene/3d/navigation.cpp
+msgid ""
+"'Navigation' node and 'Navigation.get_simple_path()' are deprecated and will "
+"be removed in a future version. Use 'NavigationServer.map_get_path()' "
+"instead."
+msgstr ""
+
#: scene/3d/navigation.cpp scene/resources/curve.cpp
msgid "Up Vector"
msgstr ""
@@ -21160,12 +21437,6 @@ msgid ""
"The NavigationAgent can be used only under a Spatial inheriting parent node."
msgstr ""
-#: scene/3d/navigation_mesh_instance.cpp
-msgid ""
-"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
-"It only provides navigation data."
-msgstr ""
-
#: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp
msgid "NavMesh"
msgstr ""
@@ -23558,6 +23829,16 @@ msgid "3D Physics"
msgstr ""
#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "2D Navigation"
+msgstr "नोड हलवा"
+
+#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "3D Navigation"
+msgstr "नोड हलवा"
+
+#: scene/register_scene_types.cpp
msgid "Use hiDPI"
msgstr ""
@@ -24820,7 +25101,7 @@ msgstr "संकà¥à¤°à¤®à¤£: "
msgid "Refraction"
msgstr "संकà¥à¤°à¤®à¤£: "
-#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp
+#: scene/resources/material.cpp
msgid "Detail"
msgstr ""
@@ -24894,8 +25175,14 @@ msgid "Visible Instance Count"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Sample Partition Type"
-msgstr ""
+#, fuzzy
+msgid "Sampling"
+msgstr "सà¥à¤•ेल:"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Partition Type"
+msgstr "संकà¥à¤°à¤®à¤£: "
#: scene/resources/navigation_mesh.cpp
msgid "Parsed Geometry Type"
@@ -24910,7 +25197,11 @@ msgid "Source Group Name"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Agent"
+msgid "Cells"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
+msgid "Agents"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -24922,11 +25213,15 @@ msgid "Max Slope"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+msgid "Regions"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
msgid "Merge Size"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Edge"
+msgid "Edges"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -24939,6 +25234,10 @@ msgid "Verts Per Poly"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+msgid "Details"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
msgid "Sample Distance"
msgstr ""
@@ -24955,7 +25254,15 @@ msgid "Ledge Spans"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Filter Walkable Low Height Spans"
+msgid "Walkable Low Height Spans"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
+msgid "Baking AABB"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
+msgid "Baking AABB Offset"
msgstr ""
#: scene/resources/occluder_shape.cpp
@@ -25325,6 +25632,11 @@ msgid "Scenario"
msgstr ""
#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Navigation Map"
+msgstr "नोड हलवा"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
msgid "Direct Space State"
msgstr ""
@@ -25340,6 +25652,26 @@ msgstr ""
msgid "Default Angular Damp"
msgstr ""
+#: scene/resources/world.cpp
+#, fuzzy
+msgid "Default Map Up"
+msgstr "मूलà¥à¤¯:"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Size"
+msgstr "बà¥à¤²à¥‡à¤‚ड टाइमà¥à¤¸:"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Height"
+msgstr "मूलà¥à¤¯:"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Edge Connection Margin"
+msgstr "अâ€à¥…निमेशन टà¥à¤°à¥€"
+
#: scene/resources/world_2d.cpp
msgid "Canvas"
msgstr ""
diff --git a/editor/translations/ms.po b/editor/translations/ms.po
index e7a893dcef..b297eb52a3 100644
--- a/editor/translations/ms.po
+++ b/editor/translations/ms.po
@@ -16,7 +16,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: 2022-05-31 22:33+0000\n"
+"PO-Revision-Date: 2022-06-12 13:19+0000\n"
"Last-Translator: Keviindran Ramachandran <keviinx@yahoo.com>\n"
"Language-Team: Malay <https://hosted.weblate.org/projects/godot-engine/godot/"
"ms/>\n"
@@ -28,7 +28,6 @@ msgstr ""
"X-Generator: Weblate 4.13-dev\n"
#: core/bind/core_bind.cpp main/main.cpp
-#, fuzzy
msgid "Tablet Driver"
msgstr "Pemacu Tablet"
@@ -91,34 +90,32 @@ msgstr "Tanpa sempadan"
#: core/bind/core_bind.cpp
msgid "Per Pixel Transparency Enabled"
-msgstr ""
+msgstr "Ketelusan Per Piksel Didayakan"
#: core/bind/core_bind.cpp core/project_settings.cpp
-#, fuzzy
msgid "Fullscreen"
-msgstr "Togol Skrin Penuh"
+msgstr "Skrin penuh"
#: core/bind/core_bind.cpp
msgid "Maximized"
-msgstr ""
+msgstr "Dimaksimumkan"
#: core/bind/core_bind.cpp
msgid "Minimized"
-msgstr ""
+msgstr "Diminimumkan"
#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp
#: scene/gui/graph_node.cpp
msgid "Resizable"
-msgstr ""
+msgstr "Boleh diubah saiz"
#: core/bind/core_bind.cpp core/os/input_event.cpp scene/2d/node_2d.cpp
#: scene/2d/physics_body_2d.cpp scene/2d/remote_transform_2d.cpp
#: scene/3d/physics_body.cpp scene/3d/remote_transform.cpp
#: scene/gui/control.cpp scene/gui/line_edit.cpp
#: scene/resources/default_theme/default_theme.cpp
-#, fuzzy
msgid "Position"
-msgstr "Kedudukan Dok"
+msgstr "Kedudukan"
#: core/bind/core_bind.cpp core/project_settings.cpp editor/editor_settings.cpp
#: main/main.cpp modules/gridmap/grid_map.cpp
@@ -129,63 +126,56 @@ msgstr "Kedudukan Dok"
#: scene/resources/primitive_meshes.cpp scene/resources/sky.cpp
#: scene/resources/style_box.cpp scene/resources/texture.cpp
#: scene/resources/visual_shader.cpp servers/visual_server.cpp
-#, fuzzy
msgid "Size"
-msgstr "Saiz:"
+msgstr "Saiz"
#: core/bind/core_bind.cpp
msgid "Endian Swap"
-msgstr ""
+msgstr "Endian Swap"
#: core/bind/core_bind.cpp
-#, fuzzy
msgid "Editor Hint"
-msgstr "Editor"
+msgstr "Petunjuk Editor"
#: core/bind/core_bind.cpp
msgid "Print Error Messages"
-msgstr ""
+msgstr "Cetak Mesej Ralat"
#: core/bind/core_bind.cpp
-#, fuzzy
msgid "Iterations Per Second"
-msgstr "Mod Interpolasi"
+msgstr "Lelaran Sesaat"
#: core/bind/core_bind.cpp
msgid "Target FPS"
-msgstr ""
+msgstr "FPS Sasaran"
#: core/bind/core_bind.cpp
-#, fuzzy
msgid "Time Scale"
-msgstr "Nod TimeScale"
+msgstr "Skala Masa"
#: core/bind/core_bind.cpp main/main.cpp
-#, fuzzy
msgid "Physics Jitter Fix"
-msgstr "Bingkai Fizik %"
+msgstr "Betulkan Fizik Jitter"
#: core/bind/core_bind.cpp editor/plugins/version_control_editor_plugin.cpp
msgid "Error"
-msgstr ""
+msgstr "Ralat"
#: core/bind/core_bind.cpp
-#, fuzzy
msgid "Error String"
-msgstr "Ralat semasa memindahkan:"
+msgstr "Ralat String"
#: core/bind/core_bind.cpp
-#, fuzzy
msgid "Error Line"
-msgstr "Ralat semasa memindahkan:"
+msgstr "Baris Ralat"
#: core/bind/core_bind.cpp
msgid "Result"
-msgstr ""
+msgstr "Hasil"
#: core/command_queue_mt.cpp core/message_queue.cpp main/main.cpp
msgid "Memory"
-msgstr ""
+msgstr "Memori"
#: core/command_queue_mt.cpp core/message_queue.cpp
#: core/register_core_types.cpp drivers/gles2/rasterizer_canvas_base_gles2.cpp
@@ -196,127 +186,119 @@ msgstr ""
#: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h
#: servers/visual_server.cpp
msgid "Limits"
-msgstr ""
+msgstr "Had-had"
#: core/command_queue_mt.cpp
msgid "Command Queue"
-msgstr ""
+msgstr "Barisan Perintah"
#: core/command_queue_mt.cpp
msgid "Multithreading Queue Size (KB)"
-msgstr ""
+msgstr "Saiz Baris Multithreading (KB)"
#: core/func_ref.cpp modules/visual_script/visual_script_builtin_funcs.cpp
#: modules/visual_script/visual_script_func_nodes.cpp
#: modules/visual_script/visual_script_nodes.cpp
#: scene/resources/visual_shader_nodes.cpp
-#, fuzzy
msgid "Function"
msgstr "Fungsi"
#: core/image.cpp core/packed_data_container.cpp scene/2d/polygon_2d.cpp
#: scene/3d/baked_lightmap.cpp scene/3d/gi_probe.cpp
msgid "Data"
-msgstr ""
+msgstr "Data"
#: core/io/file_access_network.cpp core/register_core_types.cpp
-#: editor/editor_settings.cpp main/main.cpp
+#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
#: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h
+#: scene/gui/file_dialog.cpp
msgid "Network"
-msgstr ""
+msgstr "Rangkaian"
#: core/io/file_access_network.cpp
-#, fuzzy
msgid "Remote FS"
-msgstr "Keluarkan"
+msgstr "FS Jauh"
#: core/io/file_access_network.cpp
-#, fuzzy
msgid "Page Size"
-msgstr "Halaman: "
+msgstr "Saiz Halaman"
#: core/io/file_access_network.cpp
msgid "Page Read Ahead"
-msgstr ""
+msgstr "Halaman Baca Di Hadapan"
#: core/io/http_client.cpp
msgid "Blocking Mode Enabled"
-msgstr ""
+msgstr "Mod Penyekatan Didayakan"
#: core/io/http_client.cpp
-#, fuzzy
msgid "Connection"
-msgstr "Sambung"
+msgstr "Sambungan"
#: core/io/http_client.cpp
msgid "Read Chunk Size"
-msgstr ""
+msgstr "Baca Saiz Chunk"
#: core/io/marshalls.cpp
msgid "Object ID"
-msgstr ""
+msgstr "ID Objek"
#: core/io/multiplayer_api.cpp core/io/packet_peer.cpp
-#, fuzzy
msgid "Allow Object Decoding"
-msgstr "Aktifkan Kulit Bawang"
+msgstr "Benarkan Penyahkodan Objek"
#: core/io/multiplayer_api.cpp scene/main/scene_tree.cpp
msgid "Refuse New Network Connections"
-msgstr ""
+msgstr "Tolak Sambungan Rangkaian Baharu"
#: core/io/multiplayer_api.cpp scene/main/scene_tree.cpp
msgid "Network Peer"
-msgstr ""
+msgstr "Rakan Rangkaian"
#: core/io/multiplayer_api.cpp scene/animation/animation_player.cpp
-#, fuzzy
msgid "Root Node"
-msgstr "Nod OneShot"
+msgstr "Nod Akar"
#: core/io/networked_multiplayer_peer.cpp
-#, fuzzy
msgid "Refuse New Connections"
-msgstr "Sambung"
+msgstr "Tolak Sambungan Baharu"
#: core/io/networked_multiplayer_peer.cpp
-#, fuzzy
msgid "Transfer Mode"
-msgstr "Mod Pan"
+msgstr "Mod Pemindahan"
#: core/io/packet_peer.cpp
msgid "Encode Buffer Max Size"
-msgstr ""
+msgstr "Saiz Maks Encode Buffer"
#: core/io/packet_peer.cpp
msgid "Input Buffer Max Size"
-msgstr ""
+msgstr "Saiz Maks Input Buffer"
#: core/io/packet_peer.cpp
msgid "Output Buffer Max Size"
-msgstr ""
+msgstr "Saiz Maks Output Buffer"
#: core/io/packet_peer.cpp
msgid "Stream Peer"
-msgstr ""
+msgstr "Rakan Strim"
#: core/io/stream_peer.cpp
msgid "Big Endian"
-msgstr ""
+msgstr "Endian Besar"
#: core/io/stream_peer.cpp
msgid "Data Array"
-msgstr ""
+msgstr "Data Array"
#: core/io/stream_peer_ssl.cpp
msgid "Blocking Handshake"
-msgstr ""
+msgstr "Menyekat Handshake"
#: core/io/udp_server.cpp
-#, fuzzy
msgid "Max Pending Connections"
-msgstr "Edit Sambungan:"
+msgstr "Sambungan Tertunda Maks"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -334,13 +316,12 @@ msgid "Not enough bytes for decoding bytes, or invalid format."
msgstr "Bait tidak mencukupi untuk menyahkod bait, atau format tidak sah."
#: core/math/expression.cpp
-#, fuzzy
msgid "Invalid input %d (not passed) in expression"
-msgstr "Input %i tidak sah (tidak lulus) dalam ungkapan"
+msgstr "Input %d tidak sah (tidak lulus) dalam ungkapan"
#: core/math/expression.cpp
msgid "self can't be used because instance is null (not passed)"
-msgstr "self tidak boleh digunakan kerana instance adalah null (tidak lulus)"
+msgstr "self tidak boleh digunakan kerana contol adalah null (tidak lulus)"
#: core/math/expression.cpp
msgid "Invalid operands to operator %s, %s and %s."
@@ -365,130 +346,128 @@ msgstr "Atas panggilan ke '%s':"
#: core/math/random_number_generator.cpp
#: modules/opensimplex/open_simplex_noise.cpp
msgid "Seed"
-msgstr ""
+msgstr "Benih"
#: core/math/random_number_generator.cpp
-#, fuzzy
msgid "State"
-msgstr "Status"
+msgstr "Keadaan"
#: core/message_queue.cpp
msgid "Message Queue"
-msgstr ""
+msgstr "Barisan Mesej"
#: core/message_queue.cpp
msgid "Max Size (KB)"
-msgstr ""
+msgstr "Saiz Maksimum (KB)"
+
+#: core/os/input.cpp
+#, fuzzy
+msgid "Mouse Mode"
+msgstr "Mod Alih"
+
+#: core/os/input.cpp
+#, fuzzy
+msgid "Use Accumulated Input"
+msgstr "Padam Input"
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: servers/audio_server.cpp
msgid "Device"
-msgstr ""
+msgstr "Peranti"
#: core/os/input_event.cpp
-#, fuzzy
msgid "Alt"
-msgstr "Semua"
+msgstr "Alt"
#: core/os/input_event.cpp
msgid "Shift"
-msgstr ""
+msgstr "Shift"
#: core/os/input_event.cpp
-#, fuzzy
msgid "Control"
-msgstr "Kawalan Versi"
+msgstr "Kawalan"
#: core/os/input_event.cpp
msgid "Meta"
-msgstr ""
+msgstr "Meta"
#: core/os/input_event.cpp
-#, fuzzy
msgid "Command"
-msgstr "Komuniti"
+msgstr "Perintah"
#: core/os/input_event.cpp scene/2d/touch_screen_button.cpp
#: scene/gui/base_button.cpp scene/gui/texture_button.cpp
#: scene/resources/default_theme/default_theme.cpp
-#, fuzzy
msgid "Pressed"
-msgstr "Pratetap"
+msgstr "Ditekan"
#: core/os/input_event.cpp
-#, fuzzy
msgid "Scancode"
-msgstr "Sumber Imbas"
+msgstr "Kod imbasan"
#: core/os/input_event.cpp
msgid "Physical Scancode"
-msgstr ""
+msgstr "Kod Imbasan Fizikal"
#: core/os/input_event.cpp
msgid "Unicode"
-msgstr ""
+msgstr "Unicode"
#: core/os/input_event.cpp
msgid "Echo"
-msgstr ""
+msgstr "Gema"
#: core/os/input_event.cpp scene/gui/base_button.cpp
-#, fuzzy
msgid "Button Mask"
-msgstr "Butang X 1"
+msgstr "Mask Butang"
#: core/os/input_event.cpp scene/2d/node_2d.cpp scene/gui/control.cpp
-#, fuzzy
msgid "Global Position"
-msgstr "Pemalar"
+msgstr "Kedudukan Global"
#: core/os/input_event.cpp
msgid "Factor"
-msgstr ""
+msgstr "Faktor"
#: core/os/input_event.cpp
-#, fuzzy
msgid "Button Index"
-msgstr "Butang X 1"
+msgstr "Indeks Butang"
#: core/os/input_event.cpp
msgid "Doubleclick"
-msgstr ""
+msgstr "Klik dua kali"
#: core/os/input_event.cpp
msgid "Tilt"
-msgstr ""
+msgstr "Tilt"
#: core/os/input_event.cpp
-#, fuzzy
msgid "Pressure"
-msgstr "Pratetap"
+msgstr "Tekanan"
#: core/os/input_event.cpp
-#, fuzzy
msgid "Relative"
-msgstr "Snap Relatif"
+msgstr "Relatif"
#: core/os/input_event.cpp scene/2d/camera_2d.cpp scene/2d/cpu_particles_2d.cpp
#: scene/3d/cpu_particles.cpp scene/3d/interpolated_camera.cpp
#: scene/animation/animation_player.cpp scene/resources/environment.cpp
#: scene/resources/particles_material.cpp
msgid "Speed"
-msgstr ""
+msgstr "Kelajuan"
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: scene/3d/sprite_3d.cpp
msgid "Axis"
-msgstr ""
+msgstr "Paksi"
#: core/os/input_event.cpp
-#, fuzzy
msgid "Axis Value"
-msgstr "Nilai pin"
+msgstr "Nilai Paksi"
#: core/os/input_event.cpp modules/visual_script/visual_script_func_nodes.cpp
msgid "Index"
-msgstr ""
+msgstr "Indeks"
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: modules/visual_script/visual_script_nodes.cpp
@@ -499,61 +478,55 @@ msgstr "Aksi"
#: core/os/input_event.cpp scene/resources/environment.cpp
#: scene/resources/material.cpp
msgid "Strength"
-msgstr ""
+msgstr "Kekuatan"
#: core/os/input_event.cpp
msgid "Delta"
-msgstr ""
+msgstr "Delta"
#: core/os/input_event.cpp
-#, fuzzy
msgid "Channel"
-msgstr "Ubah"
+msgstr "Saluran"
#: core/os/input_event.cpp main/main.cpp
-#, fuzzy
msgid "Message"
-msgstr "Komuniti"
+msgstr "Mesej"
#: core/os/input_event.cpp
msgid "Pitch"
-msgstr ""
+msgstr "Pitch"
#: core/os/input_event.cpp scene/2d/cpu_particles_2d.cpp
#: scene/2d/physics_body_2d.cpp scene/3d/cpu_particles.cpp
#: scene/3d/physics_body.cpp scene/resources/particles_material.cpp
msgid "Velocity"
-msgstr ""
+msgstr "Kelajuan"
#: core/os/input_event.cpp
msgid "Instrument"
-msgstr ""
+msgstr "Instrumen"
#: core/os/input_event.cpp
-#, fuzzy
msgid "Controller Number"
-msgstr "Nombor Baris:"
+msgstr "Nombor Pengawal"
#: core/os/input_event.cpp
msgid "Controller Value"
-msgstr ""
+msgstr "Nilai Pengawal"
#: core/project_settings.cpp editor/editor_node.cpp main/main.cpp
#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
#: platform/windows/export/export.cpp
-#, fuzzy
msgid "Application"
-msgstr "Aksi"
+msgstr "Aplikasi"
#: core/project_settings.cpp main/main.cpp
-#, fuzzy
msgid "Config"
-msgstr "Konfigurasikan Snap"
+msgstr "Konfigurasi"
#: core/project_settings.cpp
-#, fuzzy
msgid "Project Settings Override"
-msgstr "Tetapan Projek..."
+msgstr "Penggantian Tetapan Projek"
#: core/project_settings.cpp core/resource.cpp
#: editor/animation_track_editor.cpp editor/editor_autoload_settings.cpp
@@ -576,49 +549,47 @@ msgstr "Keterangan"
#: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
-#: main/main.cpp
+#: main/main.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp
msgid "Run"
-msgstr ""
+msgstr "Jalankan"
#: core/project_settings.cpp editor/editor_node.cpp
#: editor/run_settings_dialog.cpp main/main.cpp
msgid "Main Scene"
-msgstr ""
+msgstr "Adegan Utama"
#: core/project_settings.cpp
-#, fuzzy
msgid "Disable stdout"
-msgstr "Tidak Aktif"
+msgstr "Lumpuhkan stdout"
#: core/project_settings.cpp
-#, fuzzy
msgid "Disable stderr"
-msgstr "Tidak Aktif"
+msgstr "Lumpuhkan stderr"
#: core/project_settings.cpp
msgid "Use Hidden Project Data Directory"
-msgstr ""
+msgstr "Gunakan Direktori Data Projek Tersembunyi"
#: core/project_settings.cpp
msgid "Use Custom User Dir"
-msgstr ""
+msgstr "Guna Dir Pengguna Tersuai"
#: core/project_settings.cpp
msgid "Custom User Dir Name"
-msgstr ""
+msgstr "Nama Dir Pengguna Tersuai"
#: core/project_settings.cpp main/main.cpp
#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
#: platform/uwp/os_uwp.cpp
-#, fuzzy
msgid "Display"
-msgstr "Paparkan Semua"
+msgstr "Paparan"
#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp
#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp
#: scene/3d/label_3d.cpp scene/gui/text_edit.cpp scene/resources/texture.cpp
msgid "Width"
-msgstr ""
+msgstr "Lebar"
#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp
#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp
@@ -627,21 +598,19 @@ msgstr ""
#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp
#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp
msgid "Height"
-msgstr ""
+msgstr "Tinggi"
#: core/project_settings.cpp
msgid "Always On Top"
-msgstr ""
+msgstr "Sentiasa Di Atas"
#: core/project_settings.cpp
-#, fuzzy
msgid "Test Width"
-msgstr "Kiri Lebar"
+msgstr "Uji Lebar"
#: core/project_settings.cpp
-#, fuzzy
msgid "Test Height"
-msgstr "Menguji"
+msgstr "Uji Tinggi"
#: core/project_settings.cpp editor/animation_track_editor.cpp
#: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp
@@ -649,9 +618,8 @@ msgid "Audio"
msgstr "Audio"
#: core/project_settings.cpp
-#, fuzzy
msgid "Default Bus Layout"
-msgstr "Muatkan Susun Atur Bas lalai."
+msgstr "Susun Atur Bas Lalai"
#: core/project_settings.cpp editor/editor_export.cpp
#: editor/editor_file_system.cpp editor/editor_node.cpp
@@ -662,96 +630,87 @@ msgstr "Editor"
#: core/project_settings.cpp
msgid "Main Run Args"
-msgstr ""
+msgstr "Jalan Utama Args"
+
+#: core/project_settings.cpp
+#, fuzzy
+msgid "Scene Naming"
+msgstr "Laluan Adegan:"
#: core/project_settings.cpp
msgid "Search In File Extensions"
-msgstr ""
+msgstr "Cari Dalam Sambungan Fail"
#: core/project_settings.cpp
msgid "Script Templates Search Path"
-msgstr ""
-
-#: core/project_settings.cpp editor/editor_node.cpp
-#: editor/plugins/version_control_editor_plugin.cpp
-msgid "Version Control"
-msgstr "Kawalan Versi"
+msgstr "Laluan Carian Templat Skrip"
#: core/project_settings.cpp
-msgid "Autoload On Startup"
-msgstr ""
+#, fuzzy
+msgid "Version Control Autoload On Startup"
+msgstr "Muatkan Automatik Semasa Permulaan"
#: core/project_settings.cpp
#, fuzzy
-msgid "Plugin Name"
-msgstr "Nama Plugin:"
+msgid "Version Control Plugin Name"
+msgstr "Kawalan Versi"
#: core/project_settings.cpp scene/2d/collision_object_2d.cpp
#: scene/3d/collision_object.cpp scene/gui/control.cpp
-#, fuzzy
msgid "Input"
-msgstr "Tambah Input"
+msgstr "Input"
#: core/project_settings.cpp
msgid "UI Accept"
-msgstr ""
+msgstr "UI Terima"
#: core/project_settings.cpp
-#, fuzzy
msgid "UI Select"
-msgstr "Pilih"
+msgstr "UI Pilih"
#: core/project_settings.cpp
-#, fuzzy
msgid "UI Cancel"
-msgstr "Batal"
+msgstr "UI Batal"
#: core/project_settings.cpp
-#, fuzzy
msgid "UI Focus Next"
-msgstr "Laluan Fokus"
+msgstr "Fokus UI Seterusnya"
#: core/project_settings.cpp
-#, fuzzy
msgid "UI Focus Prev"
-msgstr "Laluan Fokus"
+msgstr "Fokus UI Sebelumnya"
#: core/project_settings.cpp
-#, fuzzy
msgid "UI Left"
-msgstr "Atas Kiri"
+msgstr "UI Kiri"
#: core/project_settings.cpp
-#, fuzzy
msgid "UI Right"
-msgstr "Atas Kanan"
+msgstr "UI Kanan"
#: core/project_settings.cpp
msgid "UI Up"
-msgstr ""
+msgstr "UI Atas"
#: core/project_settings.cpp
-#, fuzzy
msgid "UI Down"
-msgstr "Bawah"
+msgstr "UI Bawah"
#: core/project_settings.cpp
-#, fuzzy
msgid "UI Page Up"
-msgstr "Halaman: "
+msgstr "UI Halaman Atas"
#: core/project_settings.cpp
msgid "UI Page Down"
-msgstr ""
+msgstr "UI Halaman Bawah"
#: core/project_settings.cpp
msgid "UI Home"
-msgstr ""
+msgstr "UI Laman Utama"
#: core/project_settings.cpp
-#, fuzzy
msgid "UI End"
-msgstr "Pada Akhir"
+msgstr "UI Akhir"
#: core/project_settings.cpp main/main.cpp modules/bullet/register_types.cpp
#: modules/bullet/space_bullet.cpp scene/2d/physics_body_2d.cpp
@@ -761,9 +720,8 @@ msgstr "Pada Akhir"
#: servers/physics_2d/physics_2d_server_wrap_mt.h
#: servers/physics_2d/space_2d_sw.cpp servers/physics_2d_server.cpp
#: servers/physics_server.cpp
-#, fuzzy
msgid "Physics"
-msgstr "Bingkai Fizik %"
+msgstr "Fizik"
#: core/project_settings.cpp editor/editor_settings.cpp
#: editor/import/resource_importer_layered_texture.cpp
@@ -773,11 +731,11 @@ msgstr "Bingkai Fizik %"
#: scene/3d/physics_body.cpp scene/resources/world.cpp
#: servers/physics/space_sw.cpp servers/physics_server.cpp
msgid "3D"
-msgstr ""
+msgstr "3D"
#: core/project_settings.cpp
msgid "Smooth Trimesh Collision"
-msgstr ""
+msgstr "Perlanggaran Trimesh Lancar"
#: core/project_settings.cpp drivers/gles2/rasterizer_canvas_base_gles2.cpp
#: drivers/gles2/rasterizer_scene_gles2.cpp
@@ -789,7 +747,7 @@ msgstr ""
#: scene/main/viewport.cpp servers/visual/visual_server_scene.cpp
#: servers/visual_server.cpp
msgid "Rendering"
-msgstr ""
+msgstr "Render"
#: core/project_settings.cpp drivers/gles2/rasterizer_storage_gles2.cpp
#: drivers/gles3/rasterizer_scene_gles3.cpp
@@ -799,17 +757,17 @@ msgstr ""
#: scene/resources/multimesh.cpp servers/visual/visual_server_scene.cpp
#: servers/visual_server.cpp
msgid "Quality"
-msgstr ""
+msgstr "Kualiti"
#: core/project_settings.cpp scene/gui/file_dialog.cpp
-#: scene/main/scene_tree.cpp servers/visual_server.cpp
-#, fuzzy
+#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp
+#: servers/visual_server.cpp
msgid "Filters"
-msgstr "Penapis:"
+msgstr "Penapis"
#: core/project_settings.cpp scene/main/viewport.cpp
msgid "Sharpen Intensity"
-msgstr ""
+msgstr "Tajamkan Intensiti"
#: core/project_settings.cpp editor/editor_export.cpp editor/editor_node.cpp
#: editor/editor_settings.cpp editor/plugins/script_editor_plugin.cpp
@@ -825,85 +783,81 @@ msgstr "Nyahpepijat"
#: core/project_settings.cpp main/main.cpp modules/gdscript/gdscript.cpp
#: modules/visual_script/visual_script.cpp scene/resources/dynamic_font.cpp
-#, fuzzy
msgid "Settings"
-msgstr "Menguji"
+msgstr "Tetapan"
#: core/project_settings.cpp editor/script_editor_debugger.cpp main/main.cpp
#: modules/mono/mono_gd/gd_mono.cpp
msgid "Profiler"
-msgstr ""
+msgstr "Profiler"
#: core/project_settings.cpp
-#, fuzzy
msgid "Max Functions"
-msgstr "Buat Fungsi"
+msgstr "Fungsi Maks"
#: core/project_settings.cpp scene/3d/vehicle_body.cpp
msgid "Compression"
-msgstr ""
+msgstr "Mampatan"
#: core/project_settings.cpp
msgid "Formats"
-msgstr ""
+msgstr "Format"
#: core/project_settings.cpp
msgid "Zstd"
-msgstr ""
+msgstr "Zstd"
#: core/project_settings.cpp
msgid "Long Distance Matching"
-msgstr ""
+msgstr "Padanan Jarak Jauh"
#: core/project_settings.cpp
msgid "Compression Level"
-msgstr ""
+msgstr "Tahap Mampatan"
#: core/project_settings.cpp
msgid "Window Log Size"
-msgstr ""
+msgstr "Saiz Tetingkap Log"
#: core/project_settings.cpp
msgid "Zlib"
-msgstr ""
+msgstr "Zlib"
#: core/project_settings.cpp
msgid "Gzip"
-msgstr ""
+msgstr "Gzip"
#: core/project_settings.cpp platform/android/export/export.cpp
msgid "Android"
-msgstr ""
+msgstr "Android"
#: core/project_settings.cpp
msgid "Modules"
-msgstr ""
+msgstr "Modul"
#: core/register_core_types.cpp
msgid "TCP"
-msgstr ""
+msgstr "TCP"
#: core/register_core_types.cpp
-#, fuzzy
msgid "Connect Timeout Seconds"
-msgstr "Sambung ke Nod:"
+msgstr "Sambungkan Masa Tamat Saat"
#: core/register_core_types.cpp
msgid "Packet Peer Stream"
-msgstr ""
+msgstr "Aliran Rakan Sebaya Paket"
#: core/register_core_types.cpp
msgid "Max Buffer (Power of 2)"
-msgstr ""
+msgstr "Buffer Maksimum (Kuasa 2)"
#: core/register_core_types.cpp editor/editor_settings.cpp main/main.cpp
msgid "SSL"
-msgstr ""
+msgstr "SSL"
#: core/register_core_types.cpp main/main.cpp
-#, fuzzy
msgid "Certificates"
-msgstr "Bucu:"
+msgstr "Sijil"
#: core/resource.cpp editor/dependency_editor.cpp
#: editor/editor_resource_picker.cpp
@@ -912,9 +866,8 @@ msgid "Resource"
msgstr "Sumber"
#: core/resource.cpp
-#, fuzzy
msgid "Local To Scene"
-msgstr "Tutup Adegan"
+msgstr "Tempatan Ke Adegan"
#: core/resource.cpp editor/dependency_editor.cpp
#: editor/editor_autoload_settings.cpp editor/plugins/path_editor_plugin.cpp
@@ -925,20 +878,19 @@ msgstr "Laluan"
#: core/script_language.cpp
msgid "Source Code"
-msgstr ""
+msgstr "Kod Sumber"
#: core/translation.cpp editor/project_settings_editor.cpp
msgid "Locale"
-msgstr ""
+msgstr "Tempatan"
#: core/translation.cpp
-#, fuzzy
msgid "Test"
-msgstr "Menguji"
+msgstr "Ujian"
#: core/translation.cpp scene/resources/font.cpp
msgid "Fallback"
-msgstr ""
+msgstr "Fallback"
#: core/ustring.cpp scene/resources/segment_shape_2d.cpp
msgid "B"
@@ -974,17 +926,17 @@ msgstr "EiB"
#: drivers/gles3/rasterizer_scene_gles3.cpp
#: drivers/gles3/rasterizer_storage_gles3.cpp modules/gltf/gltf_state.cpp
msgid "Buffers"
-msgstr ""
+msgstr "Penampan"
#: drivers/gles2/rasterizer_canvas_base_gles2.cpp
#: drivers/gles3/rasterizer_canvas_base_gles3.cpp
msgid "Canvas Polygon Buffer Size (KB)"
-msgstr ""
+msgstr "Saiz Penampan Poligon Kanvas (KB)"
#: drivers/gles2/rasterizer_canvas_base_gles2.cpp
#: drivers/gles3/rasterizer_canvas_base_gles3.cpp
msgid "Canvas Polygon Index Buffer Size (KB)"
-msgstr ""
+msgstr "Saiz Penampan Indeks Poligon Kanvas (KB)"
#: drivers/gles2/rasterizer_canvas_base_gles2.cpp
#: drivers/gles3/rasterizer_canvas_base_gles3.cpp editor/editor_settings.cpp
@@ -996,56 +948,52 @@ msgstr ""
#: servers/physics_2d/space_2d_sw.cpp servers/physics_2d_server.cpp
#: servers/visual_server.cpp
msgid "2D"
-msgstr ""
+msgstr "2D"
#: drivers/gles2/rasterizer_canvas_base_gles2.cpp
#: drivers/gles3/rasterizer_canvas_base_gles3.cpp
-#, fuzzy
msgid "Snapping"
-msgstr "Snap Pintar"
+msgstr "Snapping"
#: drivers/gles2/rasterizer_canvas_base_gles2.cpp
#: drivers/gles3/rasterizer_canvas_base_gles3.cpp
-#, fuzzy
msgid "Use GPU Pixel Snap"
-msgstr "Gunakan Pixel Snap"
+msgstr "Gunakan Snap Piksel GPU"
#: drivers/gles2/rasterizer_scene_gles2.cpp
#: drivers/gles3/rasterizer_scene_gles3.cpp
msgid "Immediate Buffer Size (KB)"
-msgstr ""
+msgstr "Saiz Penampan Segera (KB)"
#: drivers/gles2/rasterizer_storage_gles2.cpp
#: drivers/gles3/rasterizer_storage_gles3.cpp
-#, fuzzy
msgid "Lightmapping"
-msgstr "Bake Lightmap"
+msgstr "Pemetaan cahaya"
#: drivers/gles2/rasterizer_storage_gles2.cpp
#: drivers/gles3/rasterizer_storage_gles3.cpp
msgid "Use Bicubic Sampling"
-msgstr ""
+msgstr "Gunakan Persampelan Bicubic"
#: drivers/gles3/rasterizer_scene_gles3.cpp
msgid "Max Renderable Elements"
-msgstr ""
+msgstr "Elemen Boleh Render Maks"
#: drivers/gles3/rasterizer_scene_gles3.cpp
msgid "Max Renderable Lights"
-msgstr ""
+msgstr "Lampu Boleh Render Maks"
#: drivers/gles3/rasterizer_scene_gles3.cpp
-#, fuzzy
msgid "Max Renderable Reflections"
-msgstr "Pemilihan Pusat"
+msgstr "Refleksi Maks Boleh Render"
#: drivers/gles3/rasterizer_scene_gles3.cpp
msgid "Max Lights Per Object"
-msgstr ""
+msgstr "Lampu Maks Setiap Objek"
#: drivers/gles3/rasterizer_scene_gles3.cpp
msgid "Subsurface Scattering"
-msgstr ""
+msgstr "Scattering Subpermukaan"
#: drivers/gles3/rasterizer_scene_gles3.cpp editor/animation_track_editor.cpp
#: editor/import/resource_importer_texture.cpp
@@ -1058,27 +1006,27 @@ msgstr ""
#: scene/main/canvas_layer.cpp scene/resources/environment.cpp
#: scene/resources/material.cpp scene/resources/particles_material.cpp
msgid "Scale"
-msgstr ""
+msgstr "Skala"
#: drivers/gles3/rasterizer_scene_gles3.cpp
msgid "Follow Surface"
-msgstr ""
+msgstr "Ikut Permukaan"
#: drivers/gles3/rasterizer_scene_gles3.cpp
msgid "Weight Samples"
-msgstr ""
+msgstr "Sampel Berat"
#: drivers/gles3/rasterizer_scene_gles3.cpp
msgid "Voxel Cone Tracing"
-msgstr ""
+msgstr "Pengesanan Kon Voxel"
#: drivers/gles3/rasterizer_scene_gles3.cpp scene/resources/environment.cpp
msgid "High Quality"
-msgstr ""
+msgstr "Kualiti Tinggi"
#: drivers/gles3/rasterizer_storage_gles3.cpp
msgid "Blend Shape Max Buffer Size (KB)"
-msgstr ""
+msgstr "Saiz Penampan Maks Bentuk Campuran (KB)"
#. TRANSLATORS: Adjective, refers to the mode for Bezier handles (Free, Balanced, Mirror).
#: editor/animation_bezier_editor.cpp
@@ -1152,9 +1100,8 @@ msgstr "Anim Ubah Panggilan"
#: editor/animation_track_editor.cpp scene/2d/animated_sprite.cpp
#: scene/2d/sprite.cpp scene/3d/sprite_3d.cpp
#: scene/resources/default_theme/default_theme.cpp
-#, fuzzy
msgid "Frame"
-msgstr "Bingkai %"
+msgstr "Bingkai"
#: editor/animation_track_editor.cpp editor/editor_profiler.cpp
#: scene/2d/cpu_particles_2d.cpp scene/2d/particles_2d.cpp
@@ -1165,65 +1112,58 @@ msgstr "Masa"
#: editor/animation_track_editor.cpp editor/import/resource_importer_scene.cpp
#: platform/osx/export/export.cpp
-#, fuzzy
msgid "Location"
-msgstr "Langkah Putaran:"
+msgstr "Lokasi"
#: editor/animation_track_editor.cpp modules/gltf/gltf_node.cpp
#: scene/2d/polygon_2d.cpp scene/2d/remote_transform_2d.cpp
#: scene/3d/remote_transform.cpp scene/3d/spatial.cpp scene/gui/control.cpp
-#, fuzzy
msgid "Rotation"
-msgstr "Langkah Putaran:"
+msgstr "Putaran"
#: editor/animation_track_editor.cpp editor/script_editor_debugger.cpp
#: modules/visual_script/visual_script_nodes.cpp scene/gui/range.cpp
msgid "Value"
-msgstr ""
+msgstr "Nilai"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Arg Count"
-msgstr "Jumlah:"
+msgstr "Kiraan Arg"
#: editor/animation_track_editor.cpp main/main.cpp
#: modules/mono/mono_gd/gd_mono.cpp
msgid "Args"
-msgstr ""
+msgstr "Args"
#: editor/animation_track_editor.cpp editor/editor_settings.cpp
#: editor/script_editor_debugger.cpp modules/gltf/gltf_accessor.cpp
#: modules/gltf/gltf_light.cpp modules/visual_script/visual_script_nodes.cpp
#: scene/3d/physics_body.cpp scene/resources/visual_shader_nodes.cpp
msgid "Type"
-msgstr ""
+msgstr "Jenis"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "In Handle"
-msgstr "Tetapkan Pemegang"
+msgstr "Dalam Pemegang"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Out Handle"
-msgstr "Tetapkan Pemegang"
+msgstr "Keluar Pemegang"
#: editor/animation_track_editor.cpp
#: editor/import/resource_importer_texture.cpp
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/audio/audio_stream_player.cpp scene/gui/video_player.cpp
msgid "Stream"
-msgstr ""
+msgstr "Aliran"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Start Offset"
-msgstr "Grid Offset:"
+msgstr "Mulakan Offset"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "End Offset"
-msgstr "Grid Offset:"
+msgstr "Tamat Offset"
#: editor/animation_track_editor.cpp editor/editor_settings.cpp
#: editor/import/resource_importer_scene.cpp
@@ -1237,7 +1177,7 @@ msgstr "Animasi"
#: editor/animation_track_editor.cpp
msgid "Easing"
-msgstr ""
+msgstr "Pelonggaran"
#: editor/animation_track_editor.cpp
msgid "Anim Multi Change Keyframe Time"
@@ -1346,19 +1286,16 @@ msgid "Remove this track."
msgstr "Keluarkan trek ini."
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Time (s):"
-msgstr "Masa (s): "
+msgstr "Masa (s):"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Position:"
-msgstr "Kedudukan Dok"
+msgstr "Kedudukan:"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Rotation:"
-msgstr "Langkah Putaran:"
+msgstr "Putaran:"
#: editor/animation_track_editor.cpp
#: editor/plugins/animation_tree_player_editor_plugin.cpp
@@ -1372,45 +1309,39 @@ msgstr "Skala:"
#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp
#: modules/visual_script/visual_script_editor.cpp
msgid "Type:"
-msgstr ""
+msgstr "Jenis:"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "(Invalid, expected type: %s)"
-msgstr "Nama kumpulan tidak sah."
+msgstr "(Tidak sah, jenis dijangka: %s)"
#: editor/animation_track_editor.cpp
msgid "Easing:"
-msgstr ""
+msgstr "Pelonggaran:"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "In-Handle:"
-msgstr "Tetapkan Pemegang"
+msgstr "Dalam-Pemegang:"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Out-Handle:"
-msgstr "Tetapkan Pemegang"
+msgstr "Keluar-Pemegang:"
#: editor/animation_track_editor.cpp
msgid "Stream:"
-msgstr ""
+msgstr "Aliran:"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Start (s):"
-msgstr "Mula Semula (s):"
+msgstr "Mula (s):"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "End (s):"
-msgstr "Pudar Masuk (s):"
+msgstr "Tamat (s):"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Animation Clip:"
-msgstr "Set Peralihan ke:"
+msgstr "Klip Animasi:"
#: editor/animation_track_editor.cpp
msgid "Toggle Track Enabled"
@@ -1494,14 +1425,12 @@ msgstr "Keluarkan Trek Anim"
#: editor/plugins/tile_map_editor_plugin.cpp editor/scene_tree_dock.cpp
#: editor/spatial_editor_gizmos.cpp modules/csg/csg_gizmos.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
msgid "Editors"
msgstr "Editor"
#: editor/animation_track_editor.cpp editor/editor_settings.cpp
-#, fuzzy
msgid "Confirm Insert Track"
-msgstr "Anim Masukkan Trek & Kunci"
+msgstr "Sahkan Sisipkan Trek"
#. TRANSLATORS: %s will be replaced by a phrase describing the target of track.
#: editor/animation_track_editor.cpp
@@ -1625,9 +1554,8 @@ msgid "Add Method Track Key"
msgstr "Tambah Kunci Trek Kaedah"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Method not found in object:"
-msgstr "Kaedah tidak ditemui dalam objek: "
+msgstr "Kaedah tidak ditemui dalam objek:"
#: editor/animation_track_editor.cpp
msgid "Anim Move Keys"
@@ -2240,8 +2168,8 @@ msgid "Open"
msgstr "Buka"
#: editor/dependency_editor.cpp
-msgid "Owners Of:"
-msgstr "Pemilik:"
+msgid "Owners of: %s (Total: %d)"
+msgstr ""
#: editor/dependency_editor.cpp
msgid ""
@@ -2544,7 +2472,7 @@ msgid "Bus Options"
msgstr "Pilihan Bas"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/scene_tree_dock.cpp
+#: editor/project_export.cpp editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "Pendua"
@@ -2803,6 +2731,24 @@ msgid "Choose"
msgstr "Pilih"
#: editor/editor_export.cpp
+msgid "Project export for platform:"
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Completed with errors."
+msgstr ""
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Completed successfully."
+msgstr "Pakej berjaya dipasang!"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed."
+msgstr "Gagal:"
+
+#: editor/editor_export.cpp
msgid "Storing File:"
msgstr "Menyimpan Fail:"
@@ -2815,6 +2761,31 @@ msgid "Packing"
msgstr "Pembungkusan"
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save PCK"
+msgstr "Simpan sebagai"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Cannot create file \"%s\"."
+msgstr "Tidak dapat mencipta folder."
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to export project files."
+msgstr "Tidak dapat mengeksport fail projek"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Can't open file to read from path \"%s\"."
+msgstr "Tidak dapat membuka fail untuk ditulis:"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save ZIP"
+msgstr "Simpan sebagai"
+
+#: editor/editor_export.cpp
msgid ""
"Target platform requires 'ETC' texture compression for GLES2. Enable 'Import "
"Etc' in Project Settings."
@@ -2935,11 +2906,31 @@ msgstr "Templat nyahpepijat tersuai tidak dijumpai."
msgid "Custom release template not found."
msgstr "Templat pelepasan tersuai tidak dijumpai."
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Prepare Template"
+msgstr "Urus Templat-templat"
+
+#: editor/editor_export.cpp platform/osx/export/export.cpp
+msgid "The given export path doesn't exist."
+msgstr ""
+
#: editor/editor_export.cpp platform/javascript/export/export.cpp
-msgid "Template file not found:"
+#, fuzzy
+msgid "Template file not found: \"%s\"."
msgstr "Fail templat tidak dijumpai:"
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to copy export template."
+msgstr "Tidak dapat membuka fail templat eksport."
+
+#: editor/editor_export.cpp platform/windows/export/export.cpp
+#: platform/x11/export/export.cpp
+msgid "PCK Embedding"
+msgstr ""
+
+#: editor/editor_export.cpp
msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB."
msgstr ""
"Pada eksport 32-bit PCK terbenam tidak boleh lebih besar daripada 4 GiB."
@@ -3111,12 +3102,12 @@ msgstr "Buat Semasa"
#: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp
#: modules/fbx/editor_scene_importer_fbx.cpp
msgid "Import"
-msgstr "import"
+msgstr "Import"
#: editor/editor_feature_profile.cpp editor/project_export.cpp
-#: platform/android/export/export.cpp platform/javascript/export/export.cpp
-#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
-#: platform/windows/export/export.cpp
+#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#: platform/uwp/export/export.cpp platform/windows/export/export.cpp
msgid "Export"
msgstr "Eksport"
@@ -4279,15 +4270,6 @@ msgid ""
"Unable to write to file '%s', file in use, locked or lacking permissions."
msgstr ""
-#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
-msgid "Scene"
-msgstr "Adegan"
-
-#: editor/editor_node.cpp
-#, fuzzy
-msgid "Scene Naming"
-msgstr "Laluan Adegan:"
-
#: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp
#: servers/arvr/arvr_interface.cpp
msgid "Interface"
@@ -4415,6 +4397,10 @@ msgid "Default Color Picker Mode"
msgstr ""
#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
+msgid "Version Control"
+msgstr "Kawalan Versi"
+
+#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
#, fuzzy
msgid "Username"
msgstr "Namakan Semula"
@@ -4443,6 +4429,10 @@ msgstr "Togol mod bebas gangguan."
msgid "Add a new scene."
msgstr "Tambah adegan baru."
+#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
+msgid "Scene"
+msgstr "Adegan"
+
#: editor/editor_node.cpp
msgid "Go to previously opened scene."
msgstr "Pergi ke adegan yang dibuka sebelum ini."
@@ -5239,6 +5229,11 @@ msgstr ""
"Sila tambah pratetap yang dapat dijalankan di menu Eksport atau tentukan "
"pratetap yang ada sebagai yang dapat dijalankan."
+#: editor/editor_run_native.cpp
+#, fuzzy
+msgid "Project Run"
+msgstr "Projek"
+
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
msgstr "Tulis logik anda dalam kaedah _run()."
@@ -5514,7 +5509,9 @@ msgid "Draw Spaces"
msgstr "Cabutan Panggilan:"
#: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp
-#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp
+#: scene/main/scene_tree.cpp scene/resources/world.cpp
+#: scene/resources/world_2d.cpp
msgid "Navigation"
msgstr ""
@@ -6979,7 +6976,7 @@ msgstr ""
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp
-#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp
+#: scene/gui/control.cpp
#, fuzzy
msgid "Filter"
msgstr "Penapis:"
@@ -7275,6 +7272,18 @@ msgid "Saving..."
msgstr "Menyimpan..."
#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used as a normal map in 3D. Enabling red-green "
+"texture compression to reduce memory usage (blue channel is discarded)."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap "
+"generation and VRAM texture compression."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
msgid "2D, Detect 3D"
msgstr ""
@@ -7962,11 +7971,20 @@ msgid "New Anim"
msgstr "Anim Baru"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+msgstr "Cipta Animasi Baru"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Change Animation Name:"
msgstr "Tukar Nama Animasi:"
#: editor/plugins/animation_player_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Rename Animation"
+msgstr "Namakan Semula Animasi"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Delete Animation?"
msgstr "Padam Animasi?"
@@ -7984,11 +8002,6 @@ msgid "Animation name already exists!"
msgstr "Nama animasi sudah wujud!"
#: editor/plugins/animation_player_editor_plugin.cpp
-#: editor/plugins/sprite_frames_editor_plugin.cpp
-msgid "Rename Animation"
-msgstr "Namakan Semula Animasi"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate Animation"
msgstr "Gandakan Animasi"
@@ -8131,10 +8144,6 @@ msgid "Pin AnimationPlayer"
msgstr "Pin AnimationPlayer"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Create New Animation"
-msgstr "Cipta Animasi Baru"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Name:"
msgstr "Nama Animasi:"
@@ -10227,6 +10236,7 @@ msgid "Points"
msgstr ""
#: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp
+#: scene/resources/navigation_mesh.cpp
msgid "Polygons"
msgstr ""
@@ -11600,8 +11610,9 @@ msgid "Invalid geometry, can't replace by mesh."
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
-msgid "Convert to Mesh2D"
-msgstr ""
+#, fuzzy
+msgid "Convert to MeshInstance2D"
+msgstr "Tukar ke %s"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Invalid geometry, can't create polygon."
@@ -12620,8 +12631,7 @@ msgid "Select the previous shape, subtile, or Tile."
msgstr ""
#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp
-#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp
-#: scene/resources/texture.cpp
+#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp
msgid "Region"
msgstr ""
@@ -14077,31 +14087,10 @@ 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 "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 "Export Path"
msgstr ""
@@ -14240,6 +14229,11 @@ msgid "Export templates for this platform are missing:"
msgstr ""
#: editor/project_export.cpp
+#, fuzzy
+msgid "Project Export"
+msgstr "Pengasas Projek"
+
+#: editor/project_export.cpp
msgid "Manage Export Templates"
msgstr ""
@@ -16551,7 +16545,7 @@ msgstr ""
#: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp
#: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp
-#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp
+#: scene/3d/collision_polygon.cpp
#, fuzzy
msgid "Polygon"
msgstr "Semua Pilihan"
@@ -17158,7 +17152,6 @@ msgid "Use In Baked Light"
msgstr "Bake Lightmap"
#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
-#: scene/resources/navigation_mesh.cpp
msgid "Cell"
msgstr ""
@@ -17188,6 +17181,19 @@ msgstr "Tengah"
msgid "Mask"
msgstr ""
+#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
+#, fuzzy
+msgid "Bake Navigation"
+msgstr "Navigasi Yang Boleh Dilihat"
+
+#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp
+#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp
+#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp
+#: scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Navigation Layers"
+msgstr "Navigasi Yang Boleh Dilihat"
+
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Plane"
msgstr ""
@@ -18718,10 +18724,6 @@ msgid "Could not execute on device."
msgstr "Tidak dapat mencipta folder."
#: 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."
@@ -18825,12 +18827,16 @@ msgstr ""
msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version."
msgstr ""
+#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Code Signing"
+msgstr "Isyarat"
+
#: 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."
+"'apksigner' could not be found. Please check that the command is available "
+"in the Android SDK build-tools directory. The resulting %s is unsigned."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18846,6 +18852,11 @@ msgid "Could not find keystore, unable to export."
msgstr ""
#: platform/android/export/export_plugin.cpp
+#, fuzzy
+msgid "Could not start apksigner executable."
+msgstr "Tidak dapat memulakan subproses!"
+
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
@@ -18874,7 +18885,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Unsupported export format!\n"
+msgid "Unsupported export format!"
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18885,20 +18896,19 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Android build version mismatch:\n"
-" Template installed: %s\n"
-" Godot Version: %s\n"
+"Android build version mismatch: Template installed: %s, Godot version: %s. "
"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"
+"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 ""
+#, fuzzy
+msgid "Could not export project files to gradle project."
+msgstr "Tidak dapat mengeksport fail projek"
#: platform/android/export/export_plugin.cpp
msgid "Could not write expansion package file!"
@@ -18910,7 +18920,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Building of Android project failed, check output for the error.\n"
+"Building of Android project failed, check output for the error. "
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
@@ -18925,7 +18935,8 @@ msgid ""
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Package not found: %s"
+#, fuzzy
+msgid "Package not found: \"%s\"."
msgstr "Pakej tidak ditemui: %s"
#: platform/android/export/export_plugin.cpp
@@ -18934,15 +18945,13 @@ msgid "Creating APK..."
msgstr "Menyambung..."
#: platform/android/export/export_plugin.cpp
-msgid ""
-"Could not find template APK to export:\n"
-"%s"
-msgstr ""
+#, fuzzy
+msgid "Could not find template APK to export: \"%s\"."
+msgstr "Tidak dapat memasang ke peranti: %s"
#: platform/android/export/export_plugin.cpp
msgid ""
-"Missing libraries in the export template for the selected architectures: "
-"%s.\n"
+"Missing libraries in the export template for the selected architectures: %s. "
"Please build a template with all required libraries, or uncheck the missing "
"architectures in the export preset."
msgstr ""
@@ -18953,7 +18962,8 @@ msgid "Adding files..."
msgstr "Tapis Fail-fail..."
#: platform/android/export/export_plugin.cpp
-msgid "Could not export project files"
+#, fuzzy
+msgid "Could not export project files."
msgstr "Tidak dapat mengeksport fail projek"
#: platform/android/export/export_plugin.cpp
@@ -19194,6 +19204,17 @@ msgstr "Potong Nod"
msgid "Custom BG Color"
msgstr "Potong Nod"
+#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Prepare Templates"
+msgstr "Urus Templat-templat"
+
+#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Export template not found."
+msgstr "Templat pelepasan tersuai tidak dijumpai."
+
#: platform/iphone/export/export.cpp
msgid "App Store Team ID not specified - cannot configure the project."
msgstr ""
@@ -19215,22 +19236,35 @@ msgid "Run exported HTML in the system's default browser."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not open template for export:"
-msgstr ""
+#, fuzzy
+msgid "Could not open template for export: \"%s\"."
+msgstr "Tidak dapat mencipta folder."
#: platform/javascript/export/export.cpp
-msgid "Invalid export template:"
-msgstr ""
+#, fuzzy
+msgid "Invalid export template: \"%s\"."
+msgstr "(Tidak sah, jenis dijangka: %s)"
#: platform/javascript/export/export.cpp
-msgid "Could not write file:"
-msgstr ""
+#, fuzzy
+msgid "Could not write file: \"%s\"."
+msgstr "Tidak dapat membaca fail:"
+
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Icon Creation"
+msgstr "Kandungan:"
#: platform/javascript/export/export.cpp
-msgid "Could not read file:"
+#, fuzzy
+msgid "Could not read file: \"%s\"."
msgstr "Tidak dapat membaca fail:"
#: platform/javascript/export/export.cpp
+msgid "PWA"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
#, fuzzy
msgid "Variant"
msgstr "Versi:"
@@ -19304,15 +19338,18 @@ msgid "Icon 512 X 512"
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not read HTML shell:"
+#, fuzzy
+msgid "Could not read HTML shell: \"%s\"."
msgstr "Tidak dapat membaca shell HTML:"
#: platform/javascript/export/export.cpp
-msgid "Could not create HTTP server directory:"
+#, fuzzy
+msgid "Could not create HTTP server directory: %s."
msgstr "Tidak dapat mencipta direktori server HTTP:"
#: platform/javascript/export/export.cpp
-msgid "Error starting HTTP server:"
+#, fuzzy
+msgid "Error starting HTTP server: %d."
msgstr "Ralat memulakan server HTTP:"
#: platform/javascript/export/export.cpp
@@ -19604,9 +19641,28 @@ msgid "Apple Team ID"
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open icon file \"%s\"."
+msgstr "Tidak dapat mengeksport fail projek"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start xcrun executable."
+msgstr "Tidak dapat memulakan subproses!"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization failed."
+msgstr "Langkah Putaran:"
+
+#: platform/osx/export/export.cpp
+msgid "Notarization request UUID: \"%s\""
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid ""
-"Note: The notarization process generally takes less than an hour. When the "
-"process is completed, you'll receive an email."
+"The notarization process generally takes less than an hour. When the process "
+"is completed, you'll receive an email."
msgstr ""
#: platform/osx/export/export.cpp
@@ -19622,18 +19678,74 @@ msgid ""
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign failed with error \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign require regex module."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Could not start codesign executable, make sure Xcode command line tools are "
+"installed."
+msgstr ""
+
+#: platform/osx/export/export.cpp platform/windows/export/export.cpp
#, fuzzy
msgid "No identity found."
msgstr "Tiada sub-sumber dijumpai."
#: platform/osx/export/export.cpp
#, fuzzy
+msgid "Cannot sign file %s."
+msgstr "Ralat semasa menyimpan fail: %s"
+
+#: platform/osx/export/export.cpp
+msgid "Relative symlinks are not supported, exported \"%s\" might be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "DMG Creation"
+msgstr "Arah"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start hdiutil executable."
+msgstr "Tidak dapat memulakan subproses!"
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed - file exists."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
msgid "Creating app bundle"
msgstr "Mencipta Gambar Kecil"
#: platform/osx/export/export.cpp
-msgid "Could not find template app to export:"
-msgstr ""
+#, fuzzy
+msgid "Could not find template app to export: \"%s\"."
+msgstr "Tidak dapat memasang ke peranti: %s"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid export format."
+msgstr "Nama tidak sah."
#: platform/osx/export/export.cpp
msgid ""
@@ -19643,7 +19755,7 @@ msgstr ""
#: platform/osx/export/export.cpp
msgid ""
-"Requested template binary '%s' not found. It might be missing from your "
+"Requested template binary \"%s\" not found. It might be missing from your "
"template archive."
msgstr ""
@@ -19684,6 +19796,15 @@ msgid "Sending archive for notarization"
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "ZIP Creation"
+msgstr "Projek"
+
+#: platform/osx/export/export.cpp
+msgid "Could not open file to read from path \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr ""
@@ -19991,6 +20112,11 @@ msgid "Debug Algorithm"
msgstr ""
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to rename temporary file \"%s\"."
+msgstr "Tidak dapat membuang fail sementara:"
+
+#: platform/windows/export/export.cpp
msgid "Identity Type"
msgstr ""
@@ -20037,6 +20163,66 @@ msgid "Trademarks"
msgstr ""
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Resources Modification"
+msgstr "Tampal Animasi"
+
+#: platform/windows/export/export.cpp
+msgid "Could not find rcedit executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find wine executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start rcedit executable, configure rcedit path in the Editor "
+"Settings (Export > Windows > Rcedit)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"rcedit failed to modify executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find signtool executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find osslsigncode executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid identity type."
+msgstr "Argumen tidak sah untuk binaan '%s'"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid timestamp server."
+msgstr "Nama tidak sah."
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start signtool executable, configure signtool path in the Editor "
+"Settings (Export > Windows > Signtool)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Signtool failed to sign executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to remove temporary file \"%s\"."
+msgstr "Tidak dapat membuang fail sementara:"
+
+#: platform/windows/export/export.cpp
msgid ""
"The rcedit tool must be configured in the Editor Settings (Export > Windows "
"> Rcedit) to change the icon or app information data."
@@ -20058,6 +20244,23 @@ msgid "Invalid product version:"
msgstr "Nama kumpulan tidak sah."
#: platform/windows/export/export.cpp
+msgid "Windows executables cannot be >= 4 GiB."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+#, fuzzy
+msgid "Failed to open executable file \"%s\"."
+msgstr "Nama kumpulan tidak sah."
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable file header corrupted."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable \"pck\" section not found."
+msgstr ""
+
+#: platform/windows/export/export.cpp
#, fuzzy
msgid "Windows"
msgstr "Tetingkap Baru"
@@ -20074,6 +20277,10 @@ msgstr ""
msgid "Wine"
msgstr ""
+#: platform/x11/export/export.cpp
+msgid "32-bit executables cannot have embedded data >= 4 GiB."
+msgstr ""
+
#: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp
#: scene/resources/texture.cpp
#, fuzzy
@@ -20194,7 +20401,8 @@ msgstr ""
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/3d/light.cpp scene/3d/reflection_probe.cpp
-#: scene/3d/visual_instance.cpp scene/resources/material.cpp
+#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp
+#: scene/resources/material.cpp
#, fuzzy
msgid "Max Distance"
msgstr "Contoh"
@@ -20959,6 +21167,18 @@ msgstr ""
msgid "Edge Connection Margin"
msgstr "Edit Sambungan:"
+#: scene/2d/navigation_2d.cpp
+msgid ""
+"'Navigation2D' node and 'Navigation2D.get_simple_path()' are deprecated and "
+"will be removed in a future version. Use 'Navigation2DServer.map_get_path()' "
+"instead."
+msgstr ""
+
+#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
+#, fuzzy
+msgid "Path Desired Distance"
+msgstr "Pilih Adegan Utama"
+
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
msgid "Target Desired Distance"
msgstr ""
@@ -21011,15 +21231,19 @@ msgid ""
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/navigation_polygon.cpp
msgid "Navpoly"
msgstr ""
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Enter Cost"
+msgstr "Tengah Bawah"
+
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Travel Cost"
+msgstr "Perjalanan"
+
#: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp
#: scene/main/canvas_layer.cpp
#, fuzzy
@@ -22150,6 +22374,13 @@ msgstr ""
msgid "Transform Normals"
msgstr "Trek Transformasi 3D"
+#: scene/3d/navigation.cpp
+msgid ""
+"'Navigation' node and 'Navigation.get_simple_path()' are deprecated and will "
+"be removed in a future version. Use 'NavigationServer.map_get_path()' "
+"instead."
+msgstr ""
+
#: scene/3d/navigation.cpp scene/resources/curve.cpp
#, fuzzy
msgid "Up Vector"
@@ -22173,12 +22404,6 @@ msgid ""
"The NavigationAgent can be used only under a Spatial inheriting parent node."
msgstr ""
-#: scene/3d/navigation_mesh_instance.cpp
-msgid ""
-"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
-"It only provides navigation data."
-msgstr ""
-
#: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp
msgid "NavMesh"
msgstr ""
@@ -24787,6 +25012,16 @@ msgid "3D Physics"
msgstr "Bingkai Fizik %"
#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "2D Navigation"
+msgstr "Navigasi Yang Boleh Dilihat"
+
+#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "3D Navigation"
+msgstr "Navigasi Yang Boleh Dilihat"
+
+#: scene/register_scene_types.cpp
msgid "Use hiDPI"
msgstr ""
@@ -26194,7 +26429,7 @@ msgstr "Peralihan: "
msgid "Refraction"
msgstr "Versi:"
-#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp
+#: scene/resources/material.cpp
msgid "Detail"
msgstr ""
@@ -26275,8 +26510,14 @@ msgid "Visible Instance Count"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Sample Partition Type"
-msgstr ""
+#, fuzzy
+msgid "Sampling"
+msgstr "Skala:"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Partition Type"
+msgstr "Versi:"
#: scene/resources/navigation_mesh.cpp
msgid "Parsed Geometry Type"
@@ -26292,10 +26533,15 @@ msgid "Source Group Name"
msgstr "Nama Skrip:"
#: scene/resources/navigation_mesh.cpp
-msgid "Agent"
+msgid "Cells"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Agents"
+msgstr "Kandungan:"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Max Climb"
msgstr ""
@@ -26304,11 +26550,16 @@ msgid "Max Slope"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Regions"
+msgstr "Buka Terkini"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Merge Size"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Edge"
+msgid "Edges"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -26321,6 +26572,11 @@ msgid "Verts Per Poly"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Details"
+msgstr "Muatkan Lalai"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Sample Distance"
msgstr ""
@@ -26337,9 +26593,18 @@ msgid "Ledge Spans"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Filter Walkable Low Height Spans"
+msgid "Walkable Low Height Spans"
msgstr ""
+#: scene/resources/navigation_mesh.cpp
+msgid "Baking AABB"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB Offset"
+msgstr "Grid Offset:"
+
#: scene/resources/occluder_shape.cpp
msgid "Spheres"
msgstr ""
@@ -26742,6 +27007,11 @@ msgid "Scenario"
msgstr "Adegan"
#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Navigation Map"
+msgstr "Navigasi Yang Boleh Dilihat"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
msgid "Direct Space State"
msgstr ""
@@ -26759,6 +27029,26 @@ msgstr "Linear Kiri"
msgid "Default Angular Damp"
msgstr ""
+#: scene/resources/world.cpp
+#, fuzzy
+msgid "Default Map Up"
+msgstr "Lalai"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Size"
+msgstr "Lalai"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Height"
+msgstr "Menguji"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Edge Connection Margin"
+msgstr "Edit Sambungan:"
+
#: scene/resources/world_2d.cpp
msgid "Canvas"
msgstr ""
diff --git a/editor/translations/nb.po b/editor/translations/nb.po
index 2099d61e1c..a545e4fc83 100644
--- a/editor/translations/nb.po
+++ b/editor/translations/nb.po
@@ -222,9 +222,10 @@ msgid "Data"
msgstr "Data"
#: core/io/file_access_network.cpp core/register_core_types.cpp
-#: editor/editor_settings.cpp main/main.cpp
+#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
#: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h
+#: scene/gui/file_dialog.cpp
msgid "Network"
msgstr "Nettverk"
@@ -376,6 +377,16 @@ msgstr "Melding Kø"
msgid "Max Size (KB)"
msgstr "Maks Størrelse (KB)"
+#: core/os/input.cpp
+#, fuzzy
+msgid "Mouse Mode"
+msgstr "Flytt Modus"
+
+#: core/os/input.cpp
+#, fuzzy
+msgid "Use Accumulated Input"
+msgstr "Slett Input"
+
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: servers/audio_server.cpp
msgid "Device"
@@ -569,7 +580,8 @@ msgstr "Beskrivelse"
#: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
-#: main/main.cpp
+#: main/main.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp
msgid "Run"
msgstr "Kjør"
@@ -658,6 +670,11 @@ msgid "Main Run Args"
msgstr "Hovedkjøringsargumenter"
#: core/project_settings.cpp
+#, fuzzy
+msgid "Scene Naming"
+msgstr "Scene-Sti:"
+
+#: core/project_settings.cpp
msgid "Search In File Extensions"
msgstr "Søk I Filetternavn"
@@ -665,18 +682,15 @@ msgstr "Søk I Filetternavn"
msgid "Script Templates Search Path"
msgstr "Skriptmaler Søkesti"
-#: core/project_settings.cpp editor/editor_node.cpp
-#: editor/plugins/version_control_editor_plugin.cpp
-msgid "Version Control"
-msgstr "Versjonskontroll"
-
#: core/project_settings.cpp
-msgid "Autoload On Startup"
+#, fuzzy
+msgid "Version Control Autoload On Startup"
msgstr "Automatisk Lasting Ved Oppstart"
#: core/project_settings.cpp
-msgid "Plugin Name"
-msgstr "Navn PÃ¥ Programvareutvidelse"
+#, fuzzy
+msgid "Version Control Plugin Name"
+msgstr "Versjonskontroll"
#: core/project_settings.cpp scene/2d/collision_object_2d.cpp
#: scene/3d/collision_object.cpp scene/gui/control.cpp
@@ -786,7 +800,8 @@ msgid "Quality"
msgstr "Kvalitet"
#: core/project_settings.cpp scene/gui/file_dialog.cpp
-#: scene/main/scene_tree.cpp servers/visual_server.cpp
+#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp
+#: servers/visual_server.cpp
msgid "Filters"
msgstr "Filter"
@@ -2259,8 +2274,8 @@ msgid "Open"
msgstr "Ã…pne"
#: editor/dependency_editor.cpp
-msgid "Owners Of:"
-msgstr "Eiere Av:"
+msgid "Owners of: %s (Total: %d)"
+msgstr ""
#: editor/dependency_editor.cpp
#, fuzzy
@@ -2578,7 +2593,7 @@ msgid "Bus Options"
msgstr "Bus valg"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/scene_tree_dock.cpp
+#: editor/project_export.cpp editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "Dupliser"
@@ -2846,6 +2861,25 @@ msgid "Choose"
msgstr "Velg"
#: editor/editor_export.cpp
+msgid "Project export for platform:"
+msgstr ""
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Completed with errors."
+msgstr "Kopier Node-bane"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Completed successfully."
+msgstr "Vellykket Installering av Pakke!"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed."
+msgstr "Feilet:"
+
+#: editor/editor_export.cpp
msgid "Storing File:"
msgstr "Lagrer Fil:"
@@ -2858,6 +2892,31 @@ msgid "Packing"
msgstr "Pakking"
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save PCK"
+msgstr "Lagre som"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Cannot create file \"%s\"."
+msgstr "Kunne ikke opprette mappe."
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to export project files."
+msgstr "Kunne ikke opprette mappe."
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Can't open file to read from path \"%s\"."
+msgstr "Kan ikke åpne fil for skriving:"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save ZIP"
+msgstr "Lagre som"
+
+#: editor/editor_export.cpp
msgid ""
"Target platform requires 'ETC' texture compression for GLES2. Enable 'Import "
"Etc' in Project Settings."
@@ -2982,11 +3041,33 @@ msgstr "Tilpasset feilsøkingsmal ble ikke funnet."
msgid "Custom release template not found."
msgstr "Fant ikke tilpasset utgivelsesmal."
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Prepare Template"
+msgstr "HÃ¥ndter Eksportmaler"
+
+#: editor/editor_export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "The given export path doesn't exist."
+msgstr "Fil eksisterer ikke."
+
#: editor/editor_export.cpp platform/javascript/export/export.cpp
-msgid "Template file not found:"
+#, fuzzy
+msgid "Template file not found: \"%s\"."
msgstr "Malfil ble ikke funnet:"
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to copy export template."
+msgstr "HÃ¥ndter Eksportmaler"
+
+#: editor/editor_export.cpp platform/windows/export/export.cpp
+#: platform/x11/export/export.cpp
+#, fuzzy
+msgid "PCK Embedding"
+msgstr "Fyll"
+
+#: editor/editor_export.cpp
msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB."
msgstr ""
@@ -3168,9 +3249,9 @@ msgid "Import"
msgstr "Importer"
#: editor/editor_feature_profile.cpp editor/project_export.cpp
-#: platform/android/export/export.cpp platform/javascript/export/export.cpp
-#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
-#: platform/windows/export/export.cpp
+#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#: platform/uwp/export/export.cpp platform/windows/export/export.cpp
msgid "Export"
msgstr "Eksporter"
@@ -4360,15 +4441,6 @@ msgid ""
"Unable to write to file '%s', file in use, locked or lacking permissions."
msgstr ""
-#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
-msgid "Scene"
-msgstr "Scene"
-
-#: editor/editor_node.cpp
-#, fuzzy
-msgid "Scene Naming"
-msgstr "Scene-Sti:"
-
#: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp
#: servers/arvr/arvr_interface.cpp
#, fuzzy
@@ -4498,6 +4570,10 @@ msgid "Default Color Picker Mode"
msgstr ""
#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
+msgid "Version Control"
+msgstr "Versjonskontroll"
+
+#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
#, fuzzy
msgid "Username"
msgstr "Gi nytt navn"
@@ -4526,6 +4602,10 @@ msgstr "Vis/skjul distraksjonsfri modus."
msgid "Add a new scene."
msgstr "Legg til ny scene."
+#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
+msgid "Scene"
+msgstr "Scene"
+
#: editor/editor_node.cpp
msgid "Go to previously opened scene."
msgstr "Gå til forrige åpne scene."
@@ -5327,6 +5407,11 @@ msgstr ""
"Ingen kjørbar eksport-preset funnet for denne plattformen.\n"
"Vennligst legg til en kjørbar preset i eksportmenyen."
+#: editor/editor_run_native.cpp
+#, fuzzy
+msgid "Project Run"
+msgstr "Prosjekt"
+
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
msgstr "Skriv logikken din i _run() metoden."
@@ -5608,7 +5693,9 @@ msgid "Draw Spaces"
msgstr "Ring"
#: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp
-#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp
+#: scene/main/scene_tree.cpp scene/resources/world.cpp
+#: scene/resources/world_2d.cpp
msgid "Navigation"
msgstr "Navigasjon"
@@ -7137,7 +7224,7 @@ msgstr ""
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp
-#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp
+#: scene/gui/control.cpp
#, fuzzy
msgid "Filter"
msgstr "Lim inn Noder"
@@ -7433,6 +7520,18 @@ msgid "Saving..."
msgstr "Lagrer..."
#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used as a normal map in 3D. Enabling red-green "
+"texture compression to reduce memory usage (blue channel is discarded)."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap "
+"generation and VRAM texture compression."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
msgid "2D, Detect 3D"
msgstr ""
@@ -8160,11 +8259,20 @@ msgid "New Anim"
msgstr "Ny Anim"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+msgstr "Lag Ny Animasjon"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Change Animation Name:"
msgstr "Endre Animasjonsnavn:"
#: editor/plugins/animation_player_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Rename Animation"
+msgstr "Endre navn på Animasjon"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Delete Animation?"
msgstr "Fjern Animasjon?"
@@ -8182,11 +8290,6 @@ msgid "Animation name already exists!"
msgstr "Animasjonsnavnet finnes allerede!"
#: editor/plugins/animation_player_editor_plugin.cpp
-#: editor/plugins/sprite_frames_editor_plugin.cpp
-msgid "Rename Animation"
-msgstr "Endre navn på Animasjon"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate Animation"
msgstr "Dupliser Animasjon"
@@ -8336,10 +8439,6 @@ msgid "Pin AnimationPlayer"
msgstr "Lim inn Animasjon"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Create New Animation"
-msgstr "Lag Ny Animasjon"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Name:"
msgstr "Animasjonsnavn:"
@@ -10547,6 +10646,7 @@ msgid "Points"
msgstr "Poeng"
#: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp
+#: scene/resources/navigation_mesh.cpp
#, fuzzy
msgid "Polygons"
msgstr "Rediger Poly"
@@ -11987,7 +12087,7 @@ msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
#, fuzzy
-msgid "Convert to Mesh2D"
+msgid "Convert to MeshInstance2D"
msgstr "Konverter til store versaler"
#: editor/plugins/sprite_editor_plugin.cpp
@@ -13051,8 +13151,7 @@ msgid "Select the previous shape, subtile, or Tile."
msgstr ""
#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp
-#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp
-#: scene/resources/texture.cpp
+#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp
msgid "Region"
msgstr "Region"
@@ -14585,32 +14684,11 @@ msgid "Delete preset '%s'?"
msgstr "Slett forhåndsinnstillingen «%s»?"
#: 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
#, fuzzy
msgid "Exporting All"
msgstr "Eksporter"
#: 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
#, fuzzy
msgid "Export Path"
msgstr "Eksporter Prosjekt"
@@ -14753,6 +14831,11 @@ msgstr ""
#: editor/project_export.cpp
#, fuzzy
+msgid "Project Export"
+msgstr "Prosjektgrunnleggere"
+
+#: editor/project_export.cpp
+#, fuzzy
msgid "Manage Export Templates"
msgstr "HÃ¥ndter Eksportmaler"
@@ -17170,7 +17253,7 @@ msgstr ""
#: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp
#: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp
-#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp
+#: scene/3d/collision_polygon.cpp
#, fuzzy
msgid "Polygon"
msgstr "Rediger Poly"
@@ -17793,7 +17876,6 @@ msgid "Use In Baked Light"
msgstr "Lys"
#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
-#: scene/resources/navigation_mesh.cpp
msgid "Cell"
msgstr ""
@@ -17823,6 +17905,19 @@ msgstr "I midten"
msgid "Mask"
msgstr ""
+#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
+#, fuzzy
+msgid "Bake Navigation"
+msgstr "Navigasjon"
+
+#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp
+#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp
+#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp
+#: scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Navigation Layers"
+msgstr "Navigasjon Modus"
+
#: modules/gridmap/grid_map_editor_plugin.cpp
#, fuzzy
msgid "Next Plane"
@@ -19419,10 +19514,6 @@ msgid "Could not execute on device."
msgstr "Kunne ikke opprette mappe."
#: 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."
@@ -19527,12 +19618,16 @@ msgstr ""
msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version."
msgstr ""
+#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Code Signing"
+msgstr "Signal"
+
#: 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."
+"'apksigner' could not be found. Please check that the command is available "
+"in the Android SDK build-tools directory. The resulting %s is unsigned."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -19552,6 +19647,11 @@ msgid "Could not find keystore, unable to export."
msgstr "Kunne ikke opprette mappe."
#: platform/android/export/export_plugin.cpp
+#, fuzzy
+msgid "Could not start apksigner executable."
+msgstr "Kunne ikke starta subprosess!"
+
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
@@ -19582,7 +19682,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Unsupported export format!\n"
+msgid "Unsupported export format!"
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -19593,19 +19693,18 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Android build version mismatch:\n"
-" Template installed: %s\n"
-" Godot Version: %s\n"
+"Android build version mismatch: Template installed: %s, Godot version: %s. "
"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"
+"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"
+#, fuzzy
+msgid "Could not export project files to gradle project."
msgstr "Klarte ikke eksportere prosjektfiler til gradle-prosjekt\n"
#: platform/android/export/export_plugin.cpp
@@ -19619,7 +19718,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Building of Android project failed, check output for the error.\n"
+"Building of Android project failed, check output for the error. "
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
@@ -19635,7 +19734,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
#, fuzzy
-msgid "Package not found: %s"
+msgid "Package not found: \"%s\"."
msgstr "Animasjonsverktøy"
#: platform/android/export/export_plugin.cpp
@@ -19645,15 +19744,12 @@ msgstr "Lager konturer..."
#: platform/android/export/export_plugin.cpp
#, fuzzy
-msgid ""
-"Could not find template APK to export:\n"
-"%s"
+msgid "Could not find template APK to export: \"%s\"."
msgstr "Kunne ikke opprette mappe."
#: platform/android/export/export_plugin.cpp
msgid ""
-"Missing libraries in the export template for the selected architectures: "
-"%s.\n"
+"Missing libraries in the export template for the selected architectures: %s. "
"Please build a template with all required libraries, or uncheck the missing "
"architectures in the export preset."
msgstr ""
@@ -19665,7 +19761,7 @@ msgstr "Legger til %s..."
#: platform/android/export/export_plugin.cpp
#, fuzzy
-msgid "Could not export project files"
+msgid "Could not export project files."
msgstr "Kunne ikke opprette mappe."
#: platform/android/export/export_plugin.cpp
@@ -19908,6 +20004,17 @@ msgstr "Klipp ut Noder"
msgid "Custom BG Color"
msgstr "Klipp ut Noder"
+#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Prepare Templates"
+msgstr "HÃ¥ndter Eksportmaler"
+
+#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Export template not found."
+msgstr "Fant ikke tilpasset utgivelsesmal."
+
#: platform/iphone/export/export.cpp
msgid "App Store Team ID not specified - cannot configure the project."
msgstr ""
@@ -19931,25 +20038,34 @@ msgstr ""
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not open template for export:"
+msgid "Could not open template for export: \"%s\"."
msgstr "Kunne ikke opprette mappe."
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Invalid export template:"
+msgid "Invalid export template: \"%s\"."
msgstr "HÃ¥ndter Eksportmaler"
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not write file:"
+msgid "Could not write file: \"%s\"."
msgstr "Kunne ikke opprette mappe."
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Icon Creation"
+msgstr "Sett Handle"
+
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not read file:"
+msgid "Could not read file: \"%s\"."
msgstr "Kunne ikke opprette mappe."
#: platform/javascript/export/export.cpp
+msgid "PWA"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
#, fuzzy
msgid "Variant"
msgstr "Nummereringer:"
@@ -20025,17 +20141,17 @@ msgstr ""
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not read HTML shell:"
+msgid "Could not read HTML shell: \"%s\"."
msgstr "Kunne ikke opprette mappe."
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not create HTTP server directory:"
+msgid "Could not create HTTP server directory: %s."
msgstr "Kunne ikke opprette mappe."
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Error starting HTTP server:"
+msgid "Error starting HTTP server: %d."
msgstr "Feil ved lagring av TextFile:"
#: platform/javascript/export/export.cpp
@@ -20334,9 +20450,28 @@ msgid "Apple Team ID"
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open icon file \"%s\"."
+msgstr "Kunne ikke opprette mappe."
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start xcrun executable."
+msgstr "Kunne ikke starta subprosess!"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization failed."
+msgstr "Lokalisering"
+
+#: platform/osx/export/export.cpp
+msgid "Notarization request UUID: \"%s\""
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid ""
-"Note: The notarization process generally takes less than an hour. When the "
-"process is completed, you'll receive an email."
+"The notarization process generally takes less than an hour. When the process "
+"is completed, you'll receive an email."
msgstr ""
#: platform/osx/export/export.cpp
@@ -20352,21 +20487,76 @@ msgid ""
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign failed with error \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign require regex module."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Could not start codesign executable, make sure Xcode command line tools are "
+"installed."
+msgstr ""
+
+#: platform/osx/export/export.cpp platform/windows/export/export.cpp
#, fuzzy
msgid "No identity found."
msgstr "Ikke funnet!"
#: platform/osx/export/export.cpp
#, fuzzy
+msgid "Cannot sign file %s."
+msgstr "Feil ved lagring av filen: %s"
+
+#: platform/osx/export/export.cpp
+msgid "Relative symlinks are not supported, exported \"%s\" might be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "DMG Creation"
+msgstr "Retninger"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start hdiutil executable."
+msgstr "Kunne ikke starta subprosess!"
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed - file exists."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
msgid "Creating app bundle"
msgstr "Lager Thumbnail"
#: platform/osx/export/export.cpp
#, fuzzy
-msgid "Could not find template app to export:"
+msgid "Could not find template app to export: \"%s\"."
msgstr "Kunne ikke opprette mappe."
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid export format."
+msgstr "HÃ¥ndter Eksportmaler"
+
+#: platform/osx/export/export.cpp
msgid ""
"Relative symlinks are not supported on this OS, the exported project might "
"be broken!"
@@ -20374,7 +20564,7 @@ msgstr ""
#: platform/osx/export/export.cpp
msgid ""
-"Requested template binary '%s' not found. It might be missing from your "
+"Requested template binary \"%s\" not found. It might be missing from your "
"template archive."
msgstr ""
@@ -20416,6 +20606,16 @@ msgstr ""
#: platform/osx/export/export.cpp
#, fuzzy
+msgid "ZIP Creation"
+msgstr "Prosjekt"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open file to read from path \"%s\"."
+msgstr "Klarte ikke eksportere prosjektfiler til gradle-prosjekt\n"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
msgid "Invalid bundle identifier:"
msgstr "Navn er ikke en gyldig identifikator:"
@@ -20732,6 +20932,11 @@ msgid "Debug Algorithm"
msgstr "Feilsøkingsprogram"
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to rename temporary file \"%s\"."
+msgstr "Kan ikke fjerne:"
+
+#: platform/windows/export/export.cpp
msgid "Identity Type"
msgstr ""
@@ -20779,6 +20984,70 @@ msgid "Trademarks"
msgstr ""
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Resources Modification"
+msgstr "Tilfeldig Rotasjon:"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find rcedit executable at \"%s\"."
+msgstr "Kunne ikke opprette mappe."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find wine executable at \"%s\"."
+msgstr "Kunne ikke opprette mappe."
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start rcedit executable, configure rcedit path in the Editor "
+"Settings (Export > Windows > Rcedit)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"rcedit failed to modify executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find signtool executable at \"%s\"."
+msgstr "Kunne ikke opprette mappe."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find osslsigncode executable at \"%s\"."
+msgstr "Kunne ikke opprette mappe."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid identity type."
+msgstr "Navn er ikke en gyldig identifikator:"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid timestamp server."
+msgstr "Ugyldig navn."
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start signtool executable, configure signtool path in the Editor "
+"Settings (Export > Windows > Signtool)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Signtool failed to sign executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to remove temporary file \"%s\"."
+msgstr "Kan ikke fjerne:"
+
+#: platform/windows/export/export.cpp
msgid ""
"The rcedit tool must be configured in the Editor Settings (Export > Windows "
"> Rcedit) to change the icon or app information data."
@@ -20800,6 +21069,23 @@ msgid "Invalid product version:"
msgstr "Prosjektnavn:"
#: platform/windows/export/export.cpp
+msgid "Windows executables cannot be >= 4 GiB."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+#, fuzzy
+msgid "Failed to open executable file \"%s\"."
+msgstr "MÃ¥ ha en gyldig filutvidelse."
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable file header corrupted."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable \"pck\" section not found."
+msgstr ""
+
+#: platform/windows/export/export.cpp
#, fuzzy
msgid "Windows"
msgstr "Nytt vindu"
@@ -20816,6 +21102,10 @@ msgstr ""
msgid "Wine"
msgstr ""
+#: platform/x11/export/export.cpp
+msgid "32-bit executables cannot have embedded data >= 4 GiB."
+msgstr ""
+
#: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp
#: scene/resources/texture.cpp
#, fuzzy
@@ -20941,7 +21231,8 @@ msgstr ""
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/3d/light.cpp scene/3d/reflection_probe.cpp
-#: scene/3d/visual_instance.cpp scene/resources/material.cpp
+#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp
+#: scene/resources/material.cpp
#, fuzzy
msgid "Max Distance"
msgstr "Instans"
@@ -21724,6 +22015,18 @@ msgstr ""
msgid "Edge Connection Margin"
msgstr "Tilkoblingsfeil"
+#: scene/2d/navigation_2d.cpp
+msgid ""
+"'Navigation2D' node and 'Navigation2D.get_simple_path()' are deprecated and "
+"will be removed in a future version. Use 'Navigation2DServer.map_get_path()' "
+"instead."
+msgstr ""
+
+#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
+#, fuzzy
+msgid "Path Desired Distance"
+msgstr "Velg en HovedScene"
+
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
msgid "Target Desired Distance"
msgstr ""
@@ -21778,15 +22081,19 @@ msgid ""
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/navigation_polygon.cpp
msgid "Navpoly"
msgstr ""
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Enter Cost"
+msgstr "Plasser Utvalg I Midten"
+
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Travel Cost"
+msgstr "Reise"
+
#: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp
#: scene/main/canvas_layer.cpp
#, fuzzy
@@ -22948,6 +23255,13 @@ msgstr ""
msgid "Transform Normals"
msgstr "Lag Poly"
+#: scene/3d/navigation.cpp
+msgid ""
+"'Navigation' node and 'Navigation.get_simple_path()' are deprecated and will "
+"be removed in a future version. Use 'NavigationServer.map_get_path()' "
+"instead."
+msgstr ""
+
#: scene/3d/navigation.cpp scene/resources/curve.cpp
#, fuzzy
msgid "Up Vector"
@@ -22971,12 +23285,6 @@ msgid ""
"The NavigationAgent can be used only under a Spatial inheriting parent node."
msgstr ""
-#: scene/3d/navigation_mesh_instance.cpp
-msgid ""
-"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
-"It only provides navigation data."
-msgstr ""
-
#: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp
msgid "NavMesh"
msgstr ""
@@ -25632,6 +25940,16 @@ msgid "3D Physics"
msgstr "Fysikk"
#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "2D Navigation"
+msgstr "Navigasjon"
+
+#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "3D Navigation"
+msgstr "Navigasjon"
+
+#: scene/register_scene_types.cpp
msgid "Use hiDPI"
msgstr ""
@@ -27050,7 +27368,7 @@ msgstr "Overgang: "
msgid "Refraction"
msgstr "Nummereringer:"
-#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp
+#: scene/resources/material.cpp
msgid "Detail"
msgstr ""
@@ -27132,7 +27450,12 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
-msgid "Sample Partition Type"
+msgid "Sampling"
+msgstr "Skalerer: "
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Partition Type"
msgstr "Rediger Variabel:"
#: scene/resources/navigation_mesh.cpp
@@ -27149,10 +27472,15 @@ msgid "Source Group Name"
msgstr "Kilde"
#: scene/resources/navigation_mesh.cpp
-msgid "Agent"
+msgid "Cells"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Agents"
+msgstr "Innhold:"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Max Climb"
msgstr ""
@@ -27161,11 +27489,16 @@ msgid "Max Slope"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Regions"
+msgstr "Region"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Merge Size"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Edge"
+msgid "Edges"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -27178,6 +27511,11 @@ msgid "Verts Per Poly"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Details"
+msgstr "Last Standard"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Sample Distance"
msgstr ""
@@ -27194,9 +27532,18 @@ msgid "Ledge Spans"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Filter Walkable Low Height Spans"
+msgid "Walkable Low Height Spans"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
+msgid "Baking AABB"
msgstr ""
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB Offset"
+msgstr "Avstand:"
+
#: scene/resources/occluder_shape.cpp
msgid "Spheres"
msgstr ""
@@ -27606,6 +27953,11 @@ msgid "Scenario"
msgstr "Scene"
#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Navigation Map"
+msgstr "Navigasjon"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
msgid "Direct Space State"
msgstr ""
@@ -27623,6 +27975,26 @@ msgstr "Venstrelineær"
msgid "Default Angular Damp"
msgstr ""
+#: scene/resources/world.cpp
+#, fuzzy
+msgid "Default Map Up"
+msgstr "Standard"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Size"
+msgstr "Forhåndsvis"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Height"
+msgstr "Tester"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Edge Connection Margin"
+msgstr "Tilkoblingsfeil"
+
#: scene/resources/world_2d.cpp
msgid "Canvas"
msgstr ""
diff --git a/editor/translations/nl.po b/editor/translations/nl.po
index 4daa1292b9..32d57b08b9 100644
--- a/editor/translations/nl.po
+++ b/editor/translations/nl.po
@@ -280,9 +280,10 @@ msgid "Data"
msgstr ""
#: core/io/file_access_network.cpp core/register_core_types.cpp
-#: editor/editor_settings.cpp main/main.cpp
+#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
#: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h
+#: scene/gui/file_dialog.cpp
#, fuzzy
msgid "Network"
msgstr "Netwerk Profiler"
@@ -445,6 +446,16 @@ msgstr ""
msgid "Max Size (KB)"
msgstr ""
+#: core/os/input.cpp
+#, fuzzy
+msgid "Mouse Mode"
+msgstr "Verplaatsingsmodus"
+
+#: core/os/input.cpp
+#, fuzzy
+msgid "Use Accumulated Input"
+msgstr "Invoer verwijderen"
+
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: servers/audio_server.cpp
msgid "Device"
@@ -646,7 +657,8 @@ msgstr "Beschrijving"
#: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
-#: main/main.cpp
+#: main/main.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp
msgid "Run"
msgstr "Uitvoeren"
@@ -737,6 +749,11 @@ msgid "Main Run Args"
msgstr "Startscène argumenten:"
#: core/project_settings.cpp
+#, fuzzy
+msgid "Scene Naming"
+msgstr "Scènepad:"
+
+#: core/project_settings.cpp
msgid "Search In File Extensions"
msgstr ""
@@ -744,19 +761,15 @@ msgstr ""
msgid "Script Templates Search Path"
msgstr ""
-#: core/project_settings.cpp editor/editor_node.cpp
-#: editor/plugins/version_control_editor_plugin.cpp
-msgid "Version Control"
-msgstr "Versiebeheer"
-
#: core/project_settings.cpp
-msgid "Autoload On Startup"
-msgstr ""
+#, fuzzy
+msgid "Version Control Autoload On Startup"
+msgstr "Versiebeheersysteem"
#: core/project_settings.cpp
#, fuzzy
-msgid "Plugin Name"
-msgstr "Pluginnaam:"
+msgid "Version Control Plugin Name"
+msgstr "Versiebeheer"
#: core/project_settings.cpp scene/2d/collision_object_2d.cpp
#: scene/3d/collision_object.cpp scene/gui/control.cpp
@@ -876,7 +889,8 @@ msgid "Quality"
msgstr ""
#: core/project_settings.cpp scene/gui/file_dialog.cpp
-#: scene/main/scene_tree.cpp servers/visual_server.cpp
+#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp
+#: servers/visual_server.cpp
#, fuzzy
msgid "Filters"
msgstr "Filters:"
@@ -2323,8 +2337,8 @@ msgid "Open"
msgstr "Openen"
#: editor/dependency_editor.cpp
-msgid "Owners Of:"
-msgstr "Eigenaren van:"
+msgid "Owners of: %s (Total: %d)"
+msgstr ""
#: editor/dependency_editor.cpp
msgid ""
@@ -2630,7 +2644,7 @@ msgid "Bus Options"
msgstr "Audiobusopties"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/scene_tree_dock.cpp
+#: editor/project_export.cpp editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "Dupliceren"
@@ -2887,6 +2901,25 @@ msgid "Choose"
msgstr "Kies"
#: editor/editor_export.cpp
+msgid "Project export for platform:"
+msgstr ""
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Completed with errors."
+msgstr "Knooppad kopiëren"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Completed successfully."
+msgstr "Pakket succesvol geïnstalleerd!"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed."
+msgstr "Mislukt:"
+
+#: editor/editor_export.cpp
msgid "Storing File:"
msgstr "Bestand Opslaan:"
@@ -2899,6 +2932,31 @@ msgid "Packing"
msgstr "Inpakken"
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save PCK"
+msgstr "Opslaan Als"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Cannot create file \"%s\"."
+msgstr "Map kon niet gemaakt worden."
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to export project files."
+msgstr "Kon bestand niet schrijven:"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Can't open file to read from path \"%s\"."
+msgstr "Kan bestand niet openen om te schrijven:"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save ZIP"
+msgstr "Opslaan Als"
+
+#: editor/editor_export.cpp
msgid ""
"Target platform requires 'ETC' texture compression for GLES2. Enable 'Import "
"Etc' in Project Settings."
@@ -3018,11 +3076,33 @@ msgstr "Aangepast debug pakket niet gevonden."
msgid "Custom release template not found."
msgstr "Aangepast release pakket niet gevonden."
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Prepare Template"
+msgstr "Sjablonen beheren"
+
+#: editor/editor_export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "The given export path doesn't exist."
+msgstr "Het gegeven exportpad bestaat niet:"
+
#: editor/editor_export.cpp platform/javascript/export/export.cpp
-msgid "Template file not found:"
+#, fuzzy
+msgid "Template file not found: \"%s\"."
msgstr "Template bestand niet gevonden:"
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to copy export template."
+msgstr "Ongeldige export template:"
+
+#: editor/editor_export.cpp platform/windows/export/export.cpp
+#: platform/x11/export/export.cpp
+#, fuzzy
+msgid "PCK Embedding"
+msgstr "Vulling"
+
+#: editor/editor_export.cpp
msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB."
msgstr "Bij 32-bit export mag de ingebouwde PCK niet groter zijn dan 4 GiB."
@@ -3200,9 +3280,9 @@ msgid "Import"
msgstr "Importeren"
#: editor/editor_feature_profile.cpp editor/project_export.cpp
-#: platform/android/export/export.cpp platform/javascript/export/export.cpp
-#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
-#: platform/windows/export/export.cpp
+#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#: platform/uwp/export/export.cpp platform/windows/export/export.cpp
msgid "Export"
msgstr "Exporteren"
@@ -4368,15 +4448,6 @@ msgid ""
"Unable to write to file '%s', file in use, locked or lacking permissions."
msgstr ""
-#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
-msgid "Scene"
-msgstr "Scène"
-
-#: editor/editor_node.cpp
-#, fuzzy
-msgid "Scene Naming"
-msgstr "Scènepad:"
-
#: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp
#: servers/arvr/arvr_interface.cpp
#, fuzzy
@@ -4505,6 +4576,10 @@ msgid "Default Color Picker Mode"
msgstr ""
#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
+msgid "Version Control"
+msgstr "Versiebeheer"
+
+#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
#, fuzzy
msgid "Username"
msgstr "Naam wijzigen"
@@ -4533,6 +4608,10 @@ msgstr "Afleidingsvrijemodus omschakelen."
msgid "Add a new scene."
msgstr "Nieuwe scène toevoegen."
+#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
+msgid "Scene"
+msgstr "Scène"
+
#: editor/editor_node.cpp
msgid "Go to previously opened scene."
msgstr "Ga naar de eerder geopende scène."
@@ -5319,6 +5398,11 @@ msgstr ""
"Geen uitvoerbare exporteer preset gevonden voor dit platform.\n"
"Voeg een uitvoerbare preset toe in het exportmenu."
+#: editor/editor_run_native.cpp
+#, fuzzy
+msgid "Project Run"
+msgstr "Project"
+
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
msgstr "Schrijf je logica in de _run() methode."
@@ -5602,7 +5686,9 @@ msgid "Draw Spaces"
msgstr "Teken Aanroepingen"
#: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp
-#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp
+#: scene/main/scene_tree.cpp scene/resources/world.cpp
+#: scene/resources/world_2d.cpp
msgid "Navigation"
msgstr "Navigatie"
@@ -7122,7 +7208,7 @@ msgstr ""
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp
-#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp
+#: scene/gui/control.cpp
#, fuzzy
msgid "Filter"
msgstr "Filters:"
@@ -7420,6 +7506,18 @@ msgid "Saving..."
msgstr "Opslaan..."
#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used as a normal map in 3D. Enabling red-green "
+"texture compression to reduce memory usage (blue channel is discarded)."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap "
+"generation and VRAM texture compression."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
msgid "2D, Detect 3D"
msgstr ""
@@ -8109,11 +8207,20 @@ msgid "New Anim"
msgstr "Nieuwe Anim"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+msgstr "Nieuwe Animatie Opstellen"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Change Animation Name:"
msgstr "Verander Animatie Naam:"
#: editor/plugins/animation_player_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Rename Animation"
+msgstr "Animatie Hernoemen"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Delete Animation?"
msgstr "Animatie wissen?"
@@ -8131,11 +8238,6 @@ msgid "Animation name already exists!"
msgstr "Animatienaam bestaat al!"
#: editor/plugins/animation_player_editor_plugin.cpp
-#: editor/plugins/sprite_frames_editor_plugin.cpp
-msgid "Rename Animation"
-msgstr "Animatie Hernoemen"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate Animation"
msgstr "Dupliceer Animatie"
@@ -8279,10 +8381,6 @@ msgid "Pin AnimationPlayer"
msgstr "Animatiespeler vastzetten"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Create New Animation"
-msgstr "Nieuwe Animatie Opstellen"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Name:"
msgstr "Animatienaam:"
@@ -10427,6 +10525,7 @@ msgid "Points"
msgstr "Punten"
#: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp
+#: scene/resources/navigation_mesh.cpp
msgid "Polygons"
msgstr "Polygonen"
@@ -11847,7 +11946,8 @@ msgid "Invalid geometry, can't replace by mesh."
msgstr "Ongeldige geometrie, kan niet worden vervangen door Mesh."
#: editor/plugins/sprite_editor_plugin.cpp
-msgid "Convert to Mesh2D"
+#, fuzzy
+msgid "Convert to MeshInstance2D"
msgstr "Converteren naar Mesh2D"
#: editor/plugins/sprite_editor_plugin.cpp
@@ -12899,8 +12999,7 @@ msgid "Select the previous shape, subtile, or Tile."
msgstr "Selecteer de vorige shape, subtegel of Tegel."
#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp
-#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp
-#: scene/resources/texture.cpp
+#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp
msgid "Region"
msgstr "Gebied"
@@ -14453,36 +14552,10 @@ msgid "Delete preset '%s'?"
msgstr "Verwijder voorinstelling '%s'?"
#: editor/project_export.cpp
-msgid ""
-"Failed to export the project for platform '%s'.\n"
-"Export templates seem to be missing or invalid."
-msgstr ""
-"Exporteren van project voor platform '%s' is mislukt.\n"
-"Exportsjablonen zijn mogelijk niet aanwezig of ongeldig."
-
-#: 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 ""
-"Exporteren van project voor platform '%s' is mislukt.\n"
-"Dit probleem wordt mogelijk veroorzaakt door een foutieve instelling in de "
-"vooraf ingestelde exportinstellingen of uw eigen exportinstellingen."
-
-#: editor/project_export.cpp
msgid "Exporting All"
msgstr "Exporteer alles"
#: editor/project_export.cpp
-msgid "The given export path doesn't exist:"
-msgstr "Het gegeven exportpad bestaat niet:"
-
-#: editor/project_export.cpp
-msgid "Export templates for this platform are missing/corrupted:"
-msgstr "Exportsjablonen voor dit platform zijn niet aanwezig of corrupt:"
-
-#: editor/project_export.cpp
msgid "Export Path"
msgstr "Export Pad"
@@ -14630,6 +14703,11 @@ msgid "Export templates for this platform are missing:"
msgstr "Vermiste Exportsjablonen voor dit platform:"
#: editor/project_export.cpp
+#, fuzzy
+msgid "Project Export"
+msgstr "Projectoprichters"
+
+#: editor/project_export.cpp
msgid "Manage Export Templates"
msgstr "Beheer Export Templates"
@@ -17052,7 +17130,7 @@ msgstr ""
#: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp
#: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp
-#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp
+#: scene/3d/collision_polygon.cpp
#, fuzzy
msgid "Polygon"
msgstr "Polygonen"
@@ -17678,7 +17756,6 @@ msgid "Use In Baked Light"
msgstr "Bak Lichtmappen"
#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
-#: scene/resources/navigation_mesh.cpp
msgid "Cell"
msgstr ""
@@ -17708,6 +17785,19 @@ msgstr "Center"
msgid "Mask"
msgstr ""
+#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
+#, fuzzy
+msgid "Bake Navigation"
+msgstr "Navigatie"
+
+#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp
+#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp
+#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp
+#: scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Navigation Layers"
+msgstr "Navigatiemodus"
+
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Plane"
msgstr "Volgend Blad"
@@ -19283,10 +19373,6 @@ msgid "Could not execute on device."
msgstr "Map kon niet gemaakt worden."
#: platform/android/export/export_plugin.cpp
-msgid "Unable to find the 'apksigner' tool."
-msgstr "Het hulpmiddel 'apksigner' kon niet gevonden worden."
-
-#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -19401,12 +19487,16 @@ msgstr "\"Export AAB\" is alleen geldig als \"Use Custom Build\" aan staat."
msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version."
msgstr ""
+#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Code Signing"
+msgstr "Signaal"
+
#: 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."
+"'apksigner' could not be found. Please check that the command is available "
+"in the Android SDK build-tools directory. The resulting %s is unsigned."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -19426,6 +19516,11 @@ msgid "Could not find keystore, unable to export."
msgstr "Kon template niet openen voor export:"
#: platform/android/export/export_plugin.cpp
+#, fuzzy
+msgid "Could not start apksigner executable."
+msgstr "Kon het subproces niet opstarten!"
+
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
@@ -19457,7 +19552,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr "Bestandsnaam niet toegestaan! Android APK vereist een *.apk extensie."
#: platform/android/export/export_plugin.cpp
-msgid "Unsupported export format!\n"
+msgid "Unsupported export format!"
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -19469,10 +19564,9 @@ msgstr ""
"Installeer alstublieft opnieuw vanuit het 'Project' menu."
#: platform/android/export/export_plugin.cpp
+#, fuzzy
msgid ""
-"Android build version mismatch:\n"
-" Template installed: %s\n"
-" Godot Version: %s\n"
+"Android build version mismatch: Template installed: %s, Godot version: %s. "
"Please reinstall Android build template from 'Project' menu."
msgstr ""
"Android buildversie onverenigbaar:\n"
@@ -19482,12 +19576,12 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Unable to overwrite res://android/build/res/*.xml files with project name"
+"Unable to overwrite res://android/build/res/*.xml files with project name."
msgstr ""
#: platform/android/export/export_plugin.cpp
#, fuzzy
-msgid "Could not export project files to gradle project\n"
+msgid "Could not export project files to gradle project."
msgstr "Kan project.godot niet bewerken in projectpad."
#: platform/android/export/export_plugin.cpp
@@ -19500,8 +19594,9 @@ msgid "Building Android Project (gradle)"
msgstr "Bouwen van Android Project (gradle)"
#: platform/android/export/export_plugin.cpp
+#, fuzzy
msgid ""
-"Building of Android project failed, check output for the error.\n"
+"Building of Android project failed, check output for the error. "
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
"Bouwen van Androidproject mislukt, bekijk de foutmelding in de uitvoer.\n"
@@ -19521,7 +19616,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
#, fuzzy
-msgid "Package not found: %s"
+msgid "Package not found: \"%s\"."
msgstr "Animatie niet gevonden: '%s'"
#: platform/android/export/export_plugin.cpp
@@ -19531,15 +19626,12 @@ msgstr "Contouren aan het creëeren..."
#: platform/android/export/export_plugin.cpp
#, fuzzy
-msgid ""
-"Could not find template APK to export:\n"
-"%s"
+msgid "Could not find template APK to export: \"%s\"."
msgstr "Kon template niet openen voor export:"
#: platform/android/export/export_plugin.cpp
msgid ""
-"Missing libraries in the export template for the selected architectures: "
-"%s.\n"
+"Missing libraries in the export template for the selected architectures: %s. "
"Please build a template with all required libraries, or uncheck the missing "
"architectures in the export preset."
msgstr ""
@@ -19551,7 +19643,7 @@ msgstr "%s aan het toevoegen..."
#: platform/android/export/export_plugin.cpp
#, fuzzy
-msgid "Could not export project files"
+msgid "Could not export project files."
msgstr "Kon bestand niet schrijven:"
#: platform/android/export/export_plugin.cpp
@@ -19793,6 +19885,17 @@ msgstr "Knopen knippen"
msgid "Custom BG Color"
msgstr "Knopen knippen"
+#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Prepare Templates"
+msgstr "Sjablonen beheren"
+
+#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Export template not found."
+msgstr "Aangepast release pakket niet gevonden."
+
#: platform/iphone/export/export.cpp
msgid "App Store Team ID not specified - cannot configure the project."
msgstr ""
@@ -19816,23 +19919,35 @@ msgstr ""
"Voer de geëxporteerde HTML uit in de standaard browser van het systeem."
#: platform/javascript/export/export.cpp
-msgid "Could not open template for export:"
+#, fuzzy
+msgid "Could not open template for export: \"%s\"."
msgstr "Kon template niet openen voor export:"
#: platform/javascript/export/export.cpp
-msgid "Invalid export template:"
+#, fuzzy
+msgid "Invalid export template: \"%s\"."
msgstr "Ongeldige export template:"
#: platform/javascript/export/export.cpp
-msgid "Could not write file:"
+#, fuzzy
+msgid "Could not write file: \"%s\"."
msgstr "Kon bestand niet schrijven:"
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Icon Creation"
+msgstr "Stel Marge In"
+
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not read file:"
+msgid "Could not read file: \"%s\"."
msgstr "Kon bestand niet schrijven:"
#: platform/javascript/export/export.cpp
+msgid "PWA"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
#, fuzzy
msgid "Variant"
msgstr "Afzondering:"
@@ -19908,17 +20023,17 @@ msgstr ""
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not read HTML shell:"
+msgid "Could not read HTML shell: \"%s\"."
msgstr "Kon de custom HTML shell niet lezen:"
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not create HTTP server directory:"
+msgid "Could not create HTTP server directory: %s."
msgstr "Map kon niet gemaakt worden."
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Error starting HTTP server:"
+msgid "Error starting HTTP server: %d."
msgstr "Fout bij het opslaan van de scène."
#: platform/javascript/export/export.cpp
@@ -20219,9 +20334,28 @@ msgid "Apple Team ID"
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open icon file \"%s\"."
+msgstr "Kon bestand niet schrijven:"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start xcrun executable."
+msgstr "Kon het subproces niet opstarten!"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization failed."
+msgstr "Lokalisatie"
+
+#: platform/osx/export/export.cpp
+msgid "Notarization request UUID: \"%s\""
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid ""
-"Note: The notarization process generally takes less than an hour. When the "
-"process is completed, you'll receive an email."
+"The notarization process generally takes less than an hour. When the process "
+"is completed, you'll receive an email."
msgstr ""
#: platform/osx/export/export.cpp
@@ -20237,21 +20371,76 @@ msgid ""
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign failed with error \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign require regex module."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Could not start codesign executable, make sure Xcode command line tools are "
+"installed."
+msgstr ""
+
+#: platform/osx/export/export.cpp platform/windows/export/export.cpp
#, fuzzy
msgid "No identity found."
msgstr "Niet gevonden!"
#: platform/osx/export/export.cpp
#, fuzzy
+msgid "Cannot sign file %s."
+msgstr "Fout bij het opslaan van bestand: %s"
+
+#: platform/osx/export/export.cpp
+msgid "Relative symlinks are not supported, exported \"%s\" might be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "DMG Creation"
+msgstr "Richtingen"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start hdiutil executable."
+msgstr "Kon het subproces niet opstarten!"
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed - file exists."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
msgid "Creating app bundle"
msgstr "Thumbnail Aan Het Maken"
#: platform/osx/export/export.cpp
#, fuzzy
-msgid "Could not find template app to export:"
+msgid "Could not find template app to export: \"%s\"."
msgstr "Kon template niet openen voor export:"
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid export format."
+msgstr "Ongeldige export template:"
+
+#: platform/osx/export/export.cpp
msgid ""
"Relative symlinks are not supported on this OS, the exported project might "
"be broken!"
@@ -20259,7 +20448,7 @@ msgstr ""
#: platform/osx/export/export.cpp
msgid ""
-"Requested template binary '%s' not found. It might be missing from your "
+"Requested template binary \"%s\" not found. It might be missing from your "
"template archive."
msgstr ""
@@ -20301,6 +20490,16 @@ msgstr ""
#: platform/osx/export/export.cpp
#, fuzzy
+msgid "ZIP Creation"
+msgstr "Project"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open file to read from path \"%s\"."
+msgstr "Kan project.godot niet bewerken in projectpad."
+
+#: platform/osx/export/export.cpp
+#, fuzzy
msgid "Invalid bundle identifier:"
msgstr "Ongeldige identifier:"
@@ -20620,6 +20819,11 @@ msgid "Debug Algorithm"
msgstr "Debugger"
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to rename temporary file \"%s\"."
+msgstr "Kan het tijdelijke bestand niet verwijderen:"
+
+#: platform/windows/export/export.cpp
msgid "Identity Type"
msgstr ""
@@ -20667,6 +20871,70 @@ msgid "Trademarks"
msgstr ""
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Resources Modification"
+msgstr "Willekeurige Rotatie:"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find rcedit executable at \"%s\"."
+msgstr "Kon template niet openen voor export:"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find wine executable at \"%s\"."
+msgstr "Kon template niet openen voor export:"
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start rcedit executable, configure rcedit path in the Editor "
+"Settings (Export > Windows > Rcedit)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"rcedit failed to modify executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find signtool executable at \"%s\"."
+msgstr "Kon template niet openen voor export:"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find osslsigncode executable at \"%s\"."
+msgstr "Kon template niet openen voor export:"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid identity type."
+msgstr "Ongeldige identifier:"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid timestamp server."
+msgstr "Ongeldige naam."
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start signtool executable, configure signtool path in the Editor "
+"Settings (Export > Windows > Signtool)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Signtool failed to sign executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to remove temporary file \"%s\"."
+msgstr "Kan het tijdelijke bestand niet verwijderen:"
+
+#: platform/windows/export/export.cpp
msgid ""
"The rcedit tool must be configured in the Editor Settings (Export > Windows "
"> Rcedit) to change the icon or app information data."
@@ -20688,6 +20956,23 @@ msgid "Invalid product version:"
msgstr "Ongeldig product GUID."
#: platform/windows/export/export.cpp
+msgid "Windows executables cannot be >= 4 GiB."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+#, fuzzy
+msgid "Failed to open executable file \"%s\"."
+msgstr "Ongeldige extentie."
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable file header corrupted."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable \"pck\" section not found."
+msgstr ""
+
+#: platform/windows/export/export.cpp
#, fuzzy
msgid "Windows"
msgstr "Nieuw Venster"
@@ -20704,6 +20989,10 @@ msgstr ""
msgid "Wine"
msgstr ""
+#: platform/x11/export/export.cpp
+msgid "32-bit executables cannot have embedded data >= 4 GiB."
+msgstr ""
+
#: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp
#: scene/resources/texture.cpp
#, fuzzy
@@ -20831,7 +21120,8 @@ msgstr ""
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/3d/light.cpp scene/3d/reflection_probe.cpp
-#: scene/3d/visual_instance.cpp scene/resources/material.cpp
+#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp
+#: scene/resources/material.cpp
#, fuzzy
msgid "Max Distance"
msgstr "Selecteerafstand:"
@@ -21645,6 +21935,18 @@ msgstr ""
msgid "Edge Connection Margin"
msgstr "Verbinding bewerken:"
+#: scene/2d/navigation_2d.cpp
+msgid ""
+"'Navigation2D' node and 'Navigation2D.get_simple_path()' are deprecated and "
+"will be removed in a future version. Use 'Navigation2DServer.map_get_path()' "
+"instead."
+msgstr ""
+
+#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
+#, fuzzy
+msgid "Path Desired Distance"
+msgstr "Selecteerafstand:"
+
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
msgid "Target Desired Distance"
msgstr ""
@@ -21703,17 +22005,19 @@ msgstr ""
"bron in de geschikte eigenschap in of teken een polygoon."
#: scene/2d/navigation_polygon.cpp
-msgid ""
-"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
-"node. It only provides navigation data."
-msgstr ""
-"NavigationPolygonInstance moet een (klein)kind zijn van een Navigation2D-"
-"knoop om navigatiegegevens door te geven."
-
-#: scene/2d/navigation_polygon.cpp
msgid "Navpoly"
msgstr ""
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Enter Cost"
+msgstr "Center onder"
+
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Travel Cost"
+msgstr "Verplaats"
+
#: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp
#: scene/main/canvas_layer.cpp
#, fuzzy
@@ -22922,6 +23226,13 @@ msgstr ""
msgid "Transform Normals"
msgstr "Transformatie Afgebroken."
+#: scene/3d/navigation.cpp
+msgid ""
+"'Navigation' node and 'Navigation.get_simple_path()' are deprecated and will "
+"be removed in a future version. Use 'NavigationServer.map_get_path()' "
+"instead."
+msgstr ""
+
#: scene/3d/navigation.cpp scene/resources/curve.cpp
#, fuzzy
msgid "Up Vector"
@@ -22947,14 +23258,6 @@ msgid ""
"The NavigationAgent can be used only under a Spatial inheriting parent node."
msgstr "De NavigationAgent2D kan alleen worden gebruikt als een Node2D Node."
-#: scene/3d/navigation_mesh_instance.cpp
-msgid ""
-"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
-"It only provides navigation data."
-msgstr ""
-"NavigationMeshInstance moet een (klein)kind zijn van een Navigation-knoop om "
-"navigatiegevens door te geven."
-
#: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp
#, fuzzy
msgid "NavMesh"
@@ -25676,6 +25979,16 @@ msgid "3D Physics"
msgstr "Physics Frame %"
#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "2D Navigation"
+msgstr "Navigatie"
+
+#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "3D Navigation"
+msgstr "Navigatie"
+
+#: scene/register_scene_types.cpp
msgid "Use hiDPI"
msgstr ""
@@ -27103,7 +27416,7 @@ msgstr "Overgang: "
msgid "Refraction"
msgstr "Afzondering:"
-#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp
+#: scene/resources/material.cpp
msgid "Detail"
msgstr ""
@@ -27188,7 +27501,12 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
-msgid "Sample Partition Type"
+msgid "Sampling"
+msgstr "Schaling: "
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Partition Type"
msgstr "Zet variabele type"
#: scene/resources/navigation_mesh.cpp
@@ -27206,10 +27524,15 @@ msgid "Source Group Name"
msgstr "Bron"
#: scene/resources/navigation_mesh.cpp
-msgid "Agent"
+msgid "Cells"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Agents"
+msgstr "Startscène argumenten:"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Max Climb"
msgstr ""
@@ -27219,11 +27542,16 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
+msgid "Regions"
+msgstr "Gebied"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
msgid "Merge Size"
msgstr "Vanuit scène samenvoegen"
#: scene/resources/navigation_mesh.cpp
-msgid "Edge"
+msgid "Edges"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -27237,6 +27565,11 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
+msgid "Details"
+msgstr "Laad standaard"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
msgid "Sample Distance"
msgstr "Selecteerafstand:"
@@ -27254,9 +27587,19 @@ msgid "Ledge Spans"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Filter Walkable Low Height Spans"
+msgid "Walkable Low Height Spans"
msgstr ""
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB"
+msgstr "AABB Genereren"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB Offset"
+msgstr "Afstand:"
+
#: scene/resources/occluder_shape.cpp
msgid "Spheres"
msgstr ""
@@ -27669,6 +28012,11 @@ msgid "Scenario"
msgstr "Scène"
#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Navigation Map"
+msgstr "Navigatie"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
msgid "Direct Space State"
msgstr ""
@@ -27686,6 +28034,26 @@ msgstr "Links Lineair"
msgid "Default Angular Damp"
msgstr ""
+#: scene/resources/world.cpp
+#, fuzzy
+msgid "Default Map Up"
+msgstr "Standaard"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Size"
+msgstr "Voorbeeld bijwerken"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Height"
+msgstr "Testen"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Edge Connection Margin"
+msgstr "Verbinding bewerken:"
+
#: scene/resources/world_2d.cpp
msgid "Canvas"
msgstr ""
diff --git a/editor/translations/pl.po b/editor/translations/pl.po
index 67f94391e2..e174b8a673 100644
--- a/editor/translations/pl.po
+++ b/editor/translations/pl.po
@@ -260,9 +260,10 @@ msgid "Data"
msgstr "Dane"
#: core/io/file_access_network.cpp core/register_core_types.cpp
-#: editor/editor_settings.cpp main/main.cpp
+#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
#: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h
+#: scene/gui/file_dialog.cpp
msgid "Network"
msgstr "Sieć"
@@ -412,6 +413,16 @@ msgstr "Kolejka komunikatów"
msgid "Max Size (KB)"
msgstr "Maks. rozmiar (KB)"
+#: core/os/input.cpp
+#, fuzzy
+msgid "Mouse Mode"
+msgstr "Tryb przesuwania"
+
+#: core/os/input.cpp
+#, fuzzy
+msgid "Use Accumulated Input"
+msgstr "Usuń Wejście"
+
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: servers/audio_server.cpp
msgid "Device"
@@ -591,7 +602,8 @@ msgstr "Opis"
#: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
-#: main/main.cpp
+#: main/main.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp
msgid "Run"
msgstr "Uruchom"
@@ -678,6 +690,11 @@ msgid "Main Run Args"
msgstr "Główne argumenty włączania"
#: core/project_settings.cpp
+#, fuzzy
+msgid "Scene Naming"
+msgstr "Ścieżka sceny:"
+
+#: core/project_settings.cpp
msgid "Search In File Extensions"
msgstr "Wyszukiwanie w rozszerzeniach plików"
@@ -685,18 +702,15 @@ msgstr "Wyszukiwanie w rozszerzeniach plików"
msgid "Script Templates Search Path"
msgstr "Ścieżka wyszukiwania szablonów skryptów"
-#: core/project_settings.cpp editor/editor_node.cpp
-#: editor/plugins/version_control_editor_plugin.cpp
-msgid "Version Control"
-msgstr "Kontrola wersji"
-
#: core/project_settings.cpp
-msgid "Autoload On Startup"
+#, fuzzy
+msgid "Version Control Autoload On Startup"
msgstr "Automatyczne ładowanie podczas uruchamiania"
#: core/project_settings.cpp
-msgid "Plugin Name"
-msgstr "Nazwa wtyczki"
+#, fuzzy
+msgid "Version Control Plugin Name"
+msgstr "Kontrola wersji"
#: core/project_settings.cpp scene/2d/collision_object_2d.cpp
#: scene/3d/collision_object.cpp scene/gui/control.cpp
@@ -804,7 +818,8 @@ msgid "Quality"
msgstr "Jakość"
#: core/project_settings.cpp scene/gui/file_dialog.cpp
-#: scene/main/scene_tree.cpp servers/visual_server.cpp
+#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp
+#: servers/visual_server.cpp
msgid "Filters"
msgstr "Filtry"
@@ -2229,8 +2244,8 @@ msgid "Open"
msgstr "Otwórz"
#: editor/dependency_editor.cpp
-msgid "Owners Of:"
-msgstr "Właściciele:"
+msgid "Owners of: %s (Total: %d)"
+msgstr ""
#: editor/dependency_editor.cpp
msgid ""
@@ -2532,7 +2547,7 @@ msgid "Bus Options"
msgstr "Opcje magistrali"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/scene_tree_dock.cpp
+#: editor/project_export.cpp editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "Duplikuj"
@@ -2789,6 +2804,25 @@ msgid "Choose"
msgstr "Wybierz"
#: editor/editor_export.cpp
+msgid "Project export for platform:"
+msgstr ""
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Completed with errors."
+msgstr "Skopiuj ścieżkę węzła"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Completed successfully."
+msgstr "Pakiet zainstalowano poprawnie!"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed."
+msgstr "Nie powiodło się:"
+
+#: editor/editor_export.cpp
msgid "Storing File:"
msgstr "Zapisywanie pliku:"
@@ -2801,6 +2835,31 @@ msgid "Packing"
msgstr "Pakowanie"
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save PCK"
+msgstr "Zapisz jako"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Cannot create file \"%s\"."
+msgstr "Nie można utworzyć katalogu."
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to export project files."
+msgstr "Nie udało się eksportować plików projektu"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Can't open file to read from path \"%s\"."
+msgstr "Nie można otworzyć pliku do zapisu:"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save ZIP"
+msgstr "Zapisz jako"
+
+#: editor/editor_export.cpp
msgid ""
"Target platform requires 'ETC' texture compression for GLES2. Enable 'Import "
"Etc' in Project Settings."
@@ -2923,11 +2982,33 @@ msgstr "Nie znaleziono własnego szablonu debugowania."
msgid "Custom release template not found."
msgstr "Nie znaleziono własnego szablonu wydania."
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Prepare Template"
+msgstr "ZarzÄ…dzaj szablonami"
+
+#: editor/editor_export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "The given export path doesn't exist."
+msgstr "Podana ścieżka eksportu nie istnieje:"
+
#: editor/editor_export.cpp platform/javascript/export/export.cpp
-msgid "Template file not found:"
+#, fuzzy
+msgid "Template file not found: \"%s\"."
msgstr "Nie znaleziono pliku szablonu:"
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to copy export template."
+msgstr "Szablon eksportu nieprawidłowy:"
+
+#: editor/editor_export.cpp platform/windows/export/export.cpp
+#: platform/x11/export/export.cpp
+#, fuzzy
+msgid "PCK Embedding"
+msgstr "Wyrównanie"
+
+#: editor/editor_export.cpp
msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB."
msgstr "W eksportach 32-bitowych dołączony PCK nie może być większy niż 4 GiB."
@@ -3098,9 +3179,9 @@ msgid "Import"
msgstr "Zaimportuj"
#: editor/editor_feature_profile.cpp editor/project_export.cpp
-#: platform/android/export/export.cpp platform/javascript/export/export.cpp
-#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
-#: platform/windows/export/export.cpp
+#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#: platform/uwp/export/export.cpp platform/windows/export/export.cpp
msgid "Export"
msgstr "Eksportuj"
@@ -4261,15 +4342,6 @@ msgstr ""
"Nie można zapisać do pliku '%s', plik jest w użyciu, zablokowany lub nie ma "
"wystarczających uprawnień."
-#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
-msgid "Scene"
-msgstr "Scena"
-
-#: editor/editor_node.cpp
-#, fuzzy
-msgid "Scene Naming"
-msgstr "Ścieżka sceny:"
-
#: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp
#: servers/arvr/arvr_interface.cpp
#, fuzzy
@@ -4401,6 +4473,10 @@ msgid "Default Color Picker Mode"
msgstr "Domyślny tryb pipety"
#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
+msgid "Version Control"
+msgstr "Kontrola wersji"
+
+#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
msgid "Username"
msgstr "Użytkownik"
@@ -4428,6 +4504,10 @@ msgstr "Tryb bez rozproszeń."
msgid "Add a new scene."
msgstr "Dodaj nowÄ… scenÄ™."
+#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
+msgid "Scene"
+msgstr "Scena"
+
#: editor/editor_node.cpp
msgid "Go to previously opened scene."
msgstr "Wróć do poprzednio otwartej sceny."
@@ -5219,6 +5299,11 @@ msgstr ""
"Dodaj uruchamialny profil w menu eksportu lub zdefiniuj istniejÄ…cy profil "
"jako uruchamialny."
+#: editor/editor_run_native.cpp
+#, fuzzy
+msgid "Project Run"
+msgstr "Projekt"
+
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
msgstr "Wpisz swojÄ… logikÄ™ w metodzie _run()."
@@ -5503,7 +5588,9 @@ msgid "Draw Spaces"
msgstr "Wywołania rysowania:"
#: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp
-#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp
+#: scene/main/scene_tree.cpp scene/resources/world.cpp
+#: scene/resources/world_2d.cpp
msgid "Navigation"
msgstr "Nawigacja"
@@ -7007,7 +7094,7 @@ msgstr ""
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp
-#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp
+#: scene/gui/control.cpp
#, fuzzy
msgid "Filter"
msgstr "Filtry:"
@@ -7306,6 +7393,18 @@ msgid "Saving..."
msgstr "Zapisywanie..."
#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used as a normal map in 3D. Enabling red-green "
+"texture compression to reduce memory usage (blue channel is discarded)."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap "
+"generation and VRAM texture compression."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
msgid "2D, Detect 3D"
msgstr ""
@@ -7996,11 +8095,20 @@ msgid "New Anim"
msgstr "Nowa animacja"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+msgstr "Utwórz nową animację"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Change Animation Name:"
msgstr "Zmień nazwę animacji:"
#: editor/plugins/animation_player_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Rename Animation"
+msgstr "Zmień nazwę animacji"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Delete Animation?"
msgstr "Usunąć animację?"
@@ -8018,11 +8126,6 @@ msgid "Animation name already exists!"
msgstr "Nazwa animacji już istnieje!"
#: editor/plugins/animation_player_editor_plugin.cpp
-#: editor/plugins/sprite_frames_editor_plugin.cpp
-msgid "Rename Animation"
-msgstr "Zmień nazwę animacji"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate Animation"
msgstr "Duplikuj animacjÄ™"
@@ -8166,10 +8269,6 @@ msgid "Pin AnimationPlayer"
msgstr "Przypnij AnimationPlayer"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Create New Animation"
-msgstr "Utwórz nową animację"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Name:"
msgstr "Nazwa animacji:"
@@ -10298,6 +10397,7 @@ msgid "Points"
msgstr "Punkty"
#: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp
+#: scene/resources/navigation_mesh.cpp
msgid "Polygons"
msgstr "WielokÄ…t"
@@ -11681,7 +11781,8 @@ msgid "Invalid geometry, can't replace by mesh."
msgstr "Nieprawidłowa geometria, nie można zastąpić przez siatkę."
#: editor/plugins/sprite_editor_plugin.cpp
-msgid "Convert to Mesh2D"
+#, fuzzy
+msgid "Convert to MeshInstance2D"
msgstr "Zamień na Mesh2D"
#: editor/plugins/sprite_editor_plugin.cpp
@@ -12679,8 +12780,7 @@ msgid "Select the previous shape, subtile, or Tile."
msgstr "Wybierz poprzedni kształt, podkafelek lub Kafelek."
#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp
-#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp
-#: scene/resources/texture.cpp
+#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp
msgid "Region"
msgstr "Obszar"
@@ -14203,36 +14303,10 @@ msgid "Delete preset '%s'?"
msgstr "Usunąć profil \"%s\"?"
#: editor/project_export.cpp
-msgid ""
-"Failed to export the project for platform '%s'.\n"
-"Export templates seem to be missing or invalid."
-msgstr ""
-"Nie udało się wyeksportować projektu dla platformy \"%s\".\n"
-"Brak szablonów eksportu lub są nieprawidłowe."
-
-#: 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 ""
-"Nie udało się wyeksportować projektu dla platformy \"%s\".\n"
-"Może to być przez problem z konfiguracją w profilu eksportu lub twoich "
-"ustawieniach eksportu."
-
-#: editor/project_export.cpp
msgid "Exporting All"
msgstr "Eksportowanie wszystkiego"
#: editor/project_export.cpp
-msgid "The given export path doesn't exist:"
-msgstr "Podana ścieżka eksportu nie istnieje:"
-
-#: editor/project_export.cpp
-msgid "Export templates for this platform are missing/corrupted:"
-msgstr "Brakuje szablonów eksportu dla tej platformy lub są uszkodzone:"
-
-#: editor/project_export.cpp
msgid "Export Path"
msgstr "Ścieżka eksportu"
@@ -14378,6 +14452,11 @@ msgid "Export templates for this platform are missing:"
msgstr "Brakuje eksportu szablonów dla tej platformy:"
#: editor/project_export.cpp
+#, fuzzy
+msgid "Project Export"
+msgstr "Założyciele projektu"
+
+#: editor/project_export.cpp
msgid "Manage Export Templates"
msgstr "ZarzÄ…dzaj szablonami eksportu"
@@ -16803,7 +16882,7 @@ msgstr ""
#: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp
#: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp
-#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp
+#: scene/3d/collision_polygon.cpp
#, fuzzy
msgid "Polygon"
msgstr "WielokÄ…t"
@@ -17428,7 +17507,6 @@ msgid "Use In Baked Light"
msgstr "Stwórz Lightmaps"
#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
-#: scene/resources/navigation_mesh.cpp
msgid "Cell"
msgstr ""
@@ -17458,6 +17536,19 @@ msgstr "Wyśrodkowane"
msgid "Mask"
msgstr ""
+#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
+#, fuzzy
+msgid "Bake Navigation"
+msgstr "Nawigacja"
+
+#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp
+#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp
+#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp
+#: scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Navigation Layers"
+msgstr "Tryb nawigacji"
+
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Plane"
msgstr "Następna płaszczyzna"
@@ -18990,10 +19081,6 @@ msgid "Could not execute on device."
msgstr "Nie udało się uruchomić na urządzeniu."
#: platform/android/export/export_plugin.cpp
-msgid "Unable to find the 'apksigner' tool."
-msgstr "Nie udało się znaleźć narzędzia \"apksigner\"."
-
-#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -19114,12 +19201,17 @@ msgstr ""
msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version."
msgstr "Wersja \"Target Sdk\" musi być większa lub równa wersji \"Min Sdk\"."
+#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Code Signing"
+msgstr "DMG podpisywania kodu"
+
#: platform/android/export/export_plugin.cpp
+#, fuzzy
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."
+"'apksigner' could not be found. Please check that the command is available "
+"in the Android SDK build-tools directory. The resulting %s is unsigned."
msgstr ""
"\"apksigner\" nie został znaleziony.\n"
"Sprawdź, czy komenda jest dostępna w folderze narzędzi SDK Androida.\n"
@@ -19138,6 +19230,11 @@ msgid "Could not find keystore, unable to export."
msgstr "Nie udało się znaleźć keystore, nie można eksportować."
#: platform/android/export/export_plugin.cpp
+#, fuzzy
+msgid "Could not start apksigner executable."
+msgstr "Nie można było uruchomić podprocesu!"
+
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr "\"apksigner\" zwrócił błąd #%d"
@@ -19167,7 +19264,8 @@ msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr "Nieprawidłowa nazwa pliku! APK Androida wymaga rozszerzenia *.apk."
#: platform/android/export/export_plugin.cpp
-msgid "Unsupported export format!\n"
+#, fuzzy
+msgid "Unsupported export format!"
msgstr "Nieobsługiwany format eksportu!\n"
#: platform/android/export/export_plugin.cpp
@@ -19179,10 +19277,9 @@ msgstr ""
"informacja o wersji. Zainstaluj ponownie z menu \"Projekt\"."
#: platform/android/export/export_plugin.cpp
+#, fuzzy
msgid ""
-"Android build version mismatch:\n"
-" Template installed: %s\n"
-" Godot Version: %s\n"
+"Android build version mismatch: Template installed: %s, Godot version: %s. "
"Please reinstall Android build template from 'Project' menu."
msgstr ""
"Niezgodna wersja buildu Androida:\n"
@@ -19191,14 +19288,16 @@ msgstr ""
"Zainstaluj ponownie szablon z menu \"Projekt\"."
#: platform/android/export/export_plugin.cpp
+#, fuzzy
msgid ""
-"Unable to overwrite res://android/build/res/*.xml files with project name"
+"Unable to overwrite res://android/build/res/*.xml files with project name."
msgstr ""
"Nie udało się nadpisać plików \"res://android/build/res/*.xml\" nazwą "
"projektu"
#: platform/android/export/export_plugin.cpp
-msgid "Could not export project files to gradle project\n"
+#, fuzzy
+msgid "Could not export project files to gradle project."
msgstr "Nie udało się eksportować plików projektu do projektu gradle\n"
#: platform/android/export/export_plugin.cpp
@@ -19210,8 +19309,9 @@ msgid "Building Android Project (gradle)"
msgstr "Budowanie projektu Androida (gradle)"
#: platform/android/export/export_plugin.cpp
+#, fuzzy
msgid ""
-"Building of Android project failed, check output for the error.\n"
+"Building of Android project failed, check output for the error. "
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
"Budowanie projektu Androida się nie powiodło, sprawdź wyjście błędu.\n"
@@ -19231,7 +19331,8 @@ msgstr ""
"projektu gradle po informacje."
#: platform/android/export/export_plugin.cpp
-msgid "Package not found: %s"
+#, fuzzy
+msgid "Package not found: \"%s\"."
msgstr "Pakiet nie znaleziony: %s"
#: platform/android/export/export_plugin.cpp
@@ -19239,17 +19340,16 @@ msgid "Creating APK..."
msgstr "Tworzenie APK..."
#: platform/android/export/export_plugin.cpp
-msgid ""
-"Could not find template APK to export:\n"
-"%s"
+#, fuzzy
+msgid "Could not find template APK to export: \"%s\"."
msgstr ""
"Nie udało się znaleźć szablonu APK do eksportu:\n"
"%s"
#: platform/android/export/export_plugin.cpp
+#, fuzzy
msgid ""
-"Missing libraries in the export template for the selected architectures: "
-"%s.\n"
+"Missing libraries in the export template for the selected architectures: %s. "
"Please build a template with all required libraries, or uncheck the missing "
"architectures in the export preset."
msgstr ""
@@ -19262,7 +19362,8 @@ msgid "Adding files..."
msgstr "Dodawanie plików..."
#: platform/android/export/export_plugin.cpp
-msgid "Could not export project files"
+#, fuzzy
+msgid "Could not export project files."
msgstr "Nie udało się eksportować plików projektu"
#: platform/android/export/export_plugin.cpp
@@ -19505,6 +19606,17 @@ msgstr "NiestandardowyWęzeł"
msgid "Custom BG Color"
msgstr "NiestandardowyWęzeł"
+#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Prepare Templates"
+msgstr "ZarzÄ…dzaj szablonami"
+
+#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Export template not found."
+msgstr "Nie znaleziono własnego szablonu wydania."
+
#: platform/iphone/export/export.cpp
msgid "App Store Team ID not specified - cannot configure the project."
msgstr "App Store Team ID nie podany - nie można skonfigurować projektu."
@@ -19526,22 +19638,35 @@ msgid "Run exported HTML in the system's default browser."
msgstr "Uruchom wyeksportowany dokument HTML w domyślnej przeglądarce."
#: platform/javascript/export/export.cpp
-msgid "Could not open template for export:"
+#, fuzzy
+msgid "Could not open template for export: \"%s\"."
msgstr "Nie można otworzyć szablonu dla eksportu:"
#: platform/javascript/export/export.cpp
-msgid "Invalid export template:"
+#, fuzzy
+msgid "Invalid export template: \"%s\"."
msgstr "Szablon eksportu nieprawidłowy:"
#: platform/javascript/export/export.cpp
-msgid "Could not write file:"
+#, fuzzy
+msgid "Could not write file: \"%s\"."
msgstr "Nie można zapisać pliku:"
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Icon Creation"
+msgstr "Ustaw margines"
+
#: platform/javascript/export/export.cpp
-msgid "Could not read file:"
+#, fuzzy
+msgid "Could not read file: \"%s\"."
msgstr "Nie udało się odczytać pliku:"
#: platform/javascript/export/export.cpp
+msgid "PWA"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
#, fuzzy
msgid "Variant"
msgstr "Separacja:"
@@ -19616,15 +19741,18 @@ msgid "Icon 512 X 512"
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not read HTML shell:"
+#, fuzzy
+msgid "Could not read HTML shell: \"%s\"."
msgstr "Nie udało się odczytać powłoki HTML:"
#: platform/javascript/export/export.cpp
-msgid "Could not create HTTP server directory:"
+#, fuzzy
+msgid "Could not create HTTP server directory: %s."
msgstr "Nie udało się utworzyć folderu serwera HTTP:"
#: platform/javascript/export/export.cpp
-msgid "Error starting HTTP server:"
+#, fuzzy
+msgid "Error starting HTTP server: %d."
msgstr "Błąd uruchamiania serwera HTTP:"
#: platform/javascript/export/export.cpp
@@ -19917,9 +20045,29 @@ msgid "Apple Team ID"
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open icon file \"%s\"."
+msgstr "Nie udało się eksportować plików projektu"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start xcrun executable."
+msgstr "Nie można było uruchomić podprocesu!"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization failed."
+msgstr "Lokalizacja"
+
+#: platform/osx/export/export.cpp
+msgid "Notarization request UUID: \"%s\""
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
msgid ""
-"Note: The notarization process generally takes less than an hour. When the "
-"process is completed, you'll receive an email."
+"The notarization process generally takes less than an hour. When the process "
+"is completed, you'll receive an email."
msgstr ""
"Uwaga: Proces poświadczania trwa zazwyczaj mniej niż godzinę. Gdy proces "
"zostanie zakończony, otrzymasz wiadomość e-mail."
@@ -19941,18 +20089,82 @@ msgstr ""
"eksportowanej aplikacji (opcjonalnie):"
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+"Timestamping nie jest kompatybilny z podpisem ad-hoc i będzie wyłączony!"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+"Hardened Runtime nie jest kompatybilny z podpisem ad-hoc i zostanie "
+"wyłączony!"
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign failed with error \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign require regex module."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Could not start codesign executable, make sure Xcode command line tools are "
+"installed."
+msgstr ""
+
+#: platform/osx/export/export.cpp platform/windows/export/export.cpp
msgid "No identity found."
msgstr "Nie znaleziono tożsamości."
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Cannot sign file %s."
+msgstr "Błąd zapisywania pliku: %s"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Relative symlinks are not supported, exported \"%s\" might be broken!"
+msgstr ""
+"Relatywne linki symboliczne nie są obsługiwane na tym systemie operacyjnym, "
+"wyeksportowany projekt może być uszkodzony!"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "DMG Creation"
+msgstr "Kierunki"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start hdiutil executable."
+msgstr "Nie można było uruchomić podprocesu!"
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed - file exists."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed."
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid "Creating app bundle"
msgstr "Tworzenie pakietu aplikacji"
#: platform/osx/export/export.cpp
-msgid "Could not find template app to export:"
+#, fuzzy
+msgid "Could not find template app to export: \"%s\"."
msgstr "Nie udało się znaleźć szablonu aplikacji do eksportu:"
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid export format."
+msgstr "Szablon eksportu nieprawidłowy:"
+
+#: platform/osx/export/export.cpp
msgid ""
"Relative symlinks are not supported on this OS, the exported project might "
"be broken!"
@@ -19961,8 +20173,9 @@ msgstr ""
"wyeksportowany projekt może być uszkodzony!"
#: platform/osx/export/export.cpp
+#, fuzzy
msgid ""
-"Requested template binary '%s' not found. It might be missing from your "
+"Requested template binary \"%s\" not found. It might be missing from your "
"template archive."
msgstr ""
"Nie znaleziono żądanego szablonu pliku binarnego '%s'. Być może brakuje go w "
@@ -20009,6 +20222,16 @@ msgid "Sending archive for notarization"
msgstr "Przesyłanie archiwum w celu poświadczenia"
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "ZIP Creation"
+msgstr "Projekt"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open file to read from path \"%s\"."
+msgstr "Nie udało się eksportować plików projektu do projektu gradle\n"
+
+#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr "Nieprawidłowy identyfikator paczki:"
@@ -20357,6 +20580,11 @@ msgid "Debug Algorithm"
msgstr "Debugger"
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to rename temporary file \"%s\"."
+msgstr "Nie można usunąć pliku tymczasowego:"
+
+#: platform/windows/export/export.cpp
msgid "Identity Type"
msgstr ""
@@ -20404,6 +20632,76 @@ msgid "Trademarks"
msgstr ""
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Resources Modification"
+msgstr "Obrót losowy:"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find rcedit executable at \"%s\"."
+msgstr "Nie udało się znaleźć keystore, nie można eksportować."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find wine executable at \"%s\"."
+msgstr "Nie udało się znaleźć keystore, nie można eksportować."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid ""
+"Could not start rcedit executable, configure rcedit path in the Editor "
+"Settings (Export > Windows > Rcedit)."
+msgstr ""
+"Narzędzie rcedit musi być skonfigurowane w Ustawieniach edytora (Eksport > "
+"Windows > Rcedit), aby zmienić ikonę lub dane informacji o aplikacji."
+
+#: platform/windows/export/export.cpp
+msgid ""
+"rcedit failed to modify executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find signtool executable at \"%s\"."
+msgstr "Nie udało się znaleźć keystore, nie można eksportować."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find osslsigncode executable at \"%s\"."
+msgstr "Nie udało się znaleźć keystore, nie można eksportować."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid identity type."
+msgstr "Niepoprawny identyfikator:"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid timestamp server."
+msgstr "Niewłaściwa nazwa."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid ""
+"Could not start signtool executable, configure signtool path in the Editor "
+"Settings (Export > Windows > Signtool)."
+msgstr ""
+"Narzędzie rcedit musi być skonfigurowane w Ustawieniach edytora (Eksport > "
+"Windows > Rcedit), aby zmienić ikonę lub dane informacji o aplikacji."
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Signtool failed to sign executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to remove temporary file \"%s\"."
+msgstr "Nie można usunąć pliku tymczasowego:"
+
+#: platform/windows/export/export.cpp
msgid ""
"The rcedit tool must be configured in the Editor Settings (Export > Windows "
"> Rcedit) to change the icon or app information data."
@@ -20424,6 +20722,23 @@ msgid "Invalid product version:"
msgstr "Nieprawidłowa wersja produktu:"
#: platform/windows/export/export.cpp
+msgid "Windows executables cannot be >= 4 GiB."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+#, fuzzy
+msgid "Failed to open executable file \"%s\"."
+msgstr "Niepoprawny plik wykonywalny."
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable file header corrupted."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable \"pck\" section not found."
+msgstr ""
+
+#: platform/windows/export/export.cpp
#, fuzzy
msgid "Windows"
msgstr "Nowe okno"
@@ -20440,6 +20755,10 @@ msgstr ""
msgid "Wine"
msgstr ""
+#: platform/x11/export/export.cpp
+msgid "32-bit executables cannot have embedded data >= 4 GiB."
+msgstr ""
+
#: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp
#: scene/resources/texture.cpp
#, fuzzy
@@ -20567,7 +20886,8 @@ msgstr ""
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/3d/light.cpp scene/3d/reflection_probe.cpp
-#: scene/3d/visual_instance.cpp scene/resources/material.cpp
+#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp
+#: scene/resources/material.cpp
#, fuzzy
msgid "Max Distance"
msgstr "Wybierz odległość:"
@@ -21388,6 +21708,18 @@ msgstr ""
msgid "Edge Connection Margin"
msgstr "Edytuj połączenie:"
+#: scene/2d/navigation_2d.cpp
+msgid ""
+"'Navigation2D' node and 'Navigation2D.get_simple_path()' are deprecated and "
+"will be removed in a future version. Use 'Navigation2DServer.map_get_path()' "
+"instead."
+msgstr ""
+
+#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
+#, fuzzy
+msgid "Path Desired Distance"
+msgstr "Wybierz odległość:"
+
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
msgid "Target Desired Distance"
msgstr ""
@@ -21448,17 +21780,19 @@ msgstr ""
"zadziałał."
#: scene/2d/navigation_polygon.cpp
-msgid ""
-"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
-"node. It only provides navigation data."
-msgstr ""
-"NavigationPolygonInstance musi być dzieckiem lub wnukiem węzła Navigation2D. "
-"Udostępnia on potrzebne dane nawigacyjne."
-
-#: scene/2d/navigation_polygon.cpp
msgid "Navpoly"
msgstr ""
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Enter Cost"
+msgstr "Wyśrodkowane na dole"
+
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Travel Cost"
+msgstr "Przejdź"
+
#: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp
#: scene/main/canvas_layer.cpp
#, fuzzy
@@ -22680,6 +23014,13 @@ msgstr ""
msgid "Transform Normals"
msgstr "Transformacja Zaniechana."
+#: scene/3d/navigation.cpp
+msgid ""
+"'Navigation' node and 'Navigation.get_simple_path()' are deprecated and will "
+"be removed in a future version. Use 'NavigationServer.map_get_path()' "
+"instead."
+msgstr ""
+
#: scene/3d/navigation.cpp scene/resources/curve.cpp
#, fuzzy
msgid "Up Vector"
@@ -22705,14 +23046,6 @@ msgid ""
"The NavigationAgent can be used only under a Spatial inheriting parent node."
msgstr "NavigationAgent może być stosowane wyłącznie pod węzłem przestrzennym."
-#: scene/3d/navigation_mesh_instance.cpp
-msgid ""
-"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
-"It only provides navigation data."
-msgstr ""
-"NavigationMeshInstance musi być dzieckiem lub wnukiem węzła typu Navigation. "
-"Udostępnia on tylko dane nawigacyjne."
-
#: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp
#, fuzzy
msgid "NavMesh"
@@ -25464,6 +25797,16 @@ msgid "3D Physics"
msgstr "Fizyka"
#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "2D Navigation"
+msgstr "Nawigacja"
+
+#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "3D Navigation"
+msgstr "Nawigacja"
+
+#: scene/register_scene_types.cpp
msgid "Use hiDPI"
msgstr ""
@@ -26894,7 +27237,7 @@ msgstr "Przejście: "
msgid "Refraction"
msgstr "Separacja:"
-#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp
+#: scene/resources/material.cpp
msgid "Detail"
msgstr ""
@@ -26979,7 +27322,12 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
-msgid "Sample Partition Type"
+msgid "Sampling"
+msgstr "Skalowanie: "
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Partition Type"
msgstr "Ustaw typ zmiennej"
#: scene/resources/navigation_mesh.cpp
@@ -26997,10 +27345,15 @@ msgid "Source Group Name"
msgstr "Źródło"
#: scene/resources/navigation_mesh.cpp
-msgid "Agent"
+msgid "Cells"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Agents"
+msgstr "Argumenty głównej sceny:"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Max Climb"
msgstr ""
@@ -27010,11 +27363,16 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
+msgid "Regions"
+msgstr "Obszar"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
msgid "Merge Size"
msgstr "Połącz ze sceny"
#: scene/resources/navigation_mesh.cpp
-msgid "Edge"
+msgid "Edges"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -27028,6 +27386,11 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
+msgid "Details"
+msgstr "Pokaż domyślne"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
msgid "Sample Distance"
msgstr "Wybierz odległość:"
@@ -27045,9 +27408,19 @@ msgid "Ledge Spans"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Filter Walkable Low Height Spans"
+msgid "Walkable Low Height Spans"
msgstr ""
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB"
+msgstr "Generowanie AABB"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB Offset"
+msgstr "Przesunięcie:"
+
#: scene/resources/occluder_shape.cpp
msgid "Spheres"
msgstr ""
@@ -27463,6 +27836,11 @@ msgid "Scenario"
msgstr "Scena"
#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Navigation Map"
+msgstr "Nawigacja"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
msgid "Direct Space State"
msgstr ""
@@ -27480,6 +27858,26 @@ msgstr "Lewe liniowe"
msgid "Default Angular Damp"
msgstr ""
+#: scene/resources/world.cpp
+#, fuzzy
+msgid "Default Map Up"
+msgstr "Domyślny"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Size"
+msgstr "Domyślny podgląd"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Height"
+msgstr "Testowanie"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Edge Connection Margin"
+msgstr "Edytuj połączenie:"
+
#: scene/resources/world_2d.cpp
msgid "Canvas"
msgstr ""
diff --git a/editor/translations/pr.po b/editor/translations/pr.po
index b9eef8716d..f60daf2f7b 100644
--- a/editor/translations/pr.po
+++ b/editor/translations/pr.po
@@ -217,9 +217,10 @@ msgid "Data"
msgstr ""
#: core/io/file_access_network.cpp core/register_core_types.cpp
-#: editor/editor_settings.cpp main/main.cpp
+#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
#: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h
+#: scene/gui/file_dialog.cpp
#, fuzzy
msgid "Network"
msgstr "Slit th' Node"
@@ -378,6 +379,15 @@ msgstr ""
msgid "Max Size (KB)"
msgstr ""
+#: core/os/input.cpp
+#, fuzzy
+msgid "Mouse Mode"
+msgstr "Slit th' Node"
+
+#: core/os/input.cpp
+msgid "Use Accumulated Input"
+msgstr ""
+
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: servers/audio_server.cpp
msgid "Device"
@@ -566,7 +576,8 @@ msgstr "Yar, Blow th' Selected Down!"
#: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
-#: main/main.cpp
+#: main/main.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp
msgid "Run"
msgstr ""
@@ -654,24 +665,23 @@ msgid "Main Run Args"
msgstr ""
#: core/project_settings.cpp
-msgid "Search In File Extensions"
+msgid "Scene Naming"
msgstr ""
#: core/project_settings.cpp
-msgid "Script Templates Search Path"
+msgid "Search In File Extensions"
msgstr ""
-#: core/project_settings.cpp editor/editor_node.cpp
-#: editor/plugins/version_control_editor_plugin.cpp
-msgid "Version Control"
+#: core/project_settings.cpp
+msgid "Script Templates Search Path"
msgstr ""
#: core/project_settings.cpp
-msgid "Autoload On Startup"
+msgid "Version Control Autoload On Startup"
msgstr ""
#: core/project_settings.cpp
-msgid "Plugin Name"
+msgid "Version Control Plugin Name"
msgstr ""
#: core/project_settings.cpp scene/2d/collision_object_2d.cpp
@@ -780,7 +790,8 @@ msgid "Quality"
msgstr ""
#: core/project_settings.cpp scene/gui/file_dialog.cpp
-#: scene/main/scene_tree.cpp servers/visual_server.cpp
+#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp
+#: servers/visual_server.cpp
#, fuzzy
msgid "Filters"
msgstr "Paste yer Node"
@@ -2217,7 +2228,7 @@ msgid "Open"
msgstr ""
#: editor/dependency_editor.cpp
-msgid "Owners Of:"
+msgid "Owners of: %s (Total: %d)"
msgstr ""
#: editor/dependency_editor.cpp
@@ -2513,7 +2524,7 @@ msgid "Bus Options"
msgstr "Yar, Blow th' Selected Down!"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/scene_tree_dock.cpp
+#: editor/project_export.cpp editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr ""
@@ -2773,6 +2784,23 @@ msgid "Choose"
msgstr ""
#: editor/editor_export.cpp
+msgid "Project export for platform:"
+msgstr ""
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Completed with errors."
+msgstr "Forge yer Node!"
+
+#: editor/editor_export.cpp
+msgid "Completed successfully."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Failed."
+msgstr ""
+
+#: editor/editor_export.cpp
msgid "Storing File:"
msgstr ""
@@ -2788,6 +2816,27 @@ msgid "Packing"
msgstr ""
#: editor/editor_export.cpp
+msgid "Save PCK"
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Cannot create file \"%s\"."
+msgstr ""
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to export project files."
+msgstr "Paste yer Node"
+
+#: editor/editor_export.cpp
+msgid "Can't open file to read from path \"%s\"."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Save ZIP"
+msgstr ""
+
+#: editor/editor_export.cpp
msgid ""
"Target platform requires 'ETC' texture compression for GLES2. Enable 'Import "
"Etc' in Project Settings."
@@ -2894,8 +2943,27 @@ msgstr "Yer fancy debug package be nowhere."
msgid "Custom release template not found."
msgstr "Yer fancy release package be nowhere."
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Prepare Template"
+msgstr "Discharge ye' Variable"
+
+#: editor/editor_export.cpp platform/osx/export/export.cpp
+msgid "The given export path doesn't exist."
+msgstr ""
+
#: editor/editor_export.cpp platform/javascript/export/export.cpp
-msgid "Template file not found:"
+msgid "Template file not found: \"%s\"."
+msgstr ""
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to copy export template."
+msgstr "Yer index property name be thrown overboard!"
+
+#: editor/editor_export.cpp platform/windows/export/export.cpp
+#: platform/x11/export/export.cpp
+msgid "PCK Embedding"
msgstr ""
#: editor/editor_export.cpp
@@ -3077,9 +3145,9 @@ msgid "Import"
msgstr ""
#: editor/editor_feature_profile.cpp editor/project_export.cpp
-#: platform/android/export/export.cpp platform/javascript/export/export.cpp
-#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
-#: platform/windows/export/export.cpp
+#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#: platform/uwp/export/export.cpp platform/windows/export/export.cpp
msgid "Export"
msgstr ""
@@ -4188,14 +4256,6 @@ msgid ""
"Unable to write to file '%s', file in use, locked or lacking permissions."
msgstr ""
-#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
-msgid "Scene"
-msgstr ""
-
-#: editor/editor_node.cpp
-msgid "Scene Naming"
-msgstr ""
-
#: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp
#: servers/arvr/arvr_interface.cpp
msgid "Interface"
@@ -4315,6 +4375,10 @@ msgid "Default Color Picker Mode"
msgstr ""
#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
+msgid "Version Control"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
#, fuzzy
msgid "Username"
msgstr "Rename Function"
@@ -4343,6 +4407,10 @@ msgstr ""
msgid "Add a new scene."
msgstr ""
+#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
+msgid "Scene"
+msgstr ""
+
#: editor/editor_node.cpp
msgid "Go to previously opened scene."
msgstr ""
@@ -5094,6 +5162,11 @@ msgid ""
"as runnable."
msgstr ""
+#: editor/editor_run_native.cpp
+#, fuzzy
+msgid "Project Run"
+msgstr "Yer functions:"
+
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
msgstr ""
@@ -5358,7 +5431,9 @@ msgid "Draw Spaces"
msgstr "Call"
#: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp
-#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp
+#: scene/main/scene_tree.cpp scene/resources/world.cpp
+#: scene/resources/world_2d.cpp
#, fuzzy
msgid "Navigation"
msgstr "Ye be fixin' Signal:"
@@ -6820,7 +6895,7 @@ msgstr ""
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp
-#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp
+#: scene/gui/control.cpp
#, fuzzy
msgid "Filter"
msgstr "Paste yer Node"
@@ -7104,6 +7179,18 @@ msgid "Saving..."
msgstr ""
#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used as a normal map in 3D. Enabling red-green "
+"texture compression to reduce memory usage (blue channel is discarded)."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap "
+"generation and VRAM texture compression."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
msgid "2D, Detect 3D"
msgstr ""
@@ -7798,11 +7885,20 @@ msgid "New Anim"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+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 "Rename Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Delete Animation?"
msgstr ""
@@ -7821,11 +7917,6 @@ 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 "Duplicate Animation"
msgstr ""
@@ -7969,10 +8060,6 @@ msgid "Pin AnimationPlayer"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Create New Animation"
-msgstr ""
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Name:"
msgstr ""
@@ -10084,6 +10171,7 @@ msgid "Points"
msgstr "Discharge ye' Signal"
#: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp
+#: scene/resources/navigation_mesh.cpp
#, fuzzy
msgid "Polygons"
msgstr "Ye be fixin' Signal:"
@@ -11492,8 +11580,9 @@ msgid "Invalid geometry, can't replace by mesh."
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
-msgid "Convert to Mesh2D"
-msgstr ""
+#, fuzzy
+msgid "Convert to MeshInstance2D"
+msgstr "Discharge ye' Function"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Invalid geometry, can't create polygon."
@@ -12517,8 +12606,7 @@ msgid "Select the previous shape, subtile, or Tile."
msgstr ""
#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp
-#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp
-#: scene/resources/texture.cpp
+#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp
msgid "Region"
msgstr ""
@@ -14019,31 +14107,10 @@ 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 "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 "Export Path"
msgstr ""
@@ -14180,6 +14247,11 @@ msgid "Export templates for this platform are missing:"
msgstr ""
#: editor/project_export.cpp
+#, fuzzy
+msgid "Project Export"
+msgstr "Yer functions:"
+
+#: editor/project_export.cpp
msgid "Manage Export Templates"
msgstr ""
@@ -16513,7 +16585,7 @@ msgstr ""
#: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp
#: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp
-#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp
+#: scene/3d/collision_polygon.cpp
#, fuzzy
msgid "Polygon"
msgstr "Ye be fixin' Signal:"
@@ -17107,7 +17179,6 @@ msgid "Use In Baked Light"
msgstr ""
#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
-#: scene/resources/navigation_mesh.cpp
msgid "Cell"
msgstr ""
@@ -17137,6 +17208,19 @@ msgstr "Slit th' Node"
msgid "Mask"
msgstr ""
+#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
+#, fuzzy
+msgid "Bake Navigation"
+msgstr "Ye be fixin' Signal:"
+
+#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp
+#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp
+#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp
+#: scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Navigation Layers"
+msgstr "Ye be fixin' Signal:"
+
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Plane"
msgstr ""
@@ -18688,10 +18772,6 @@ 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."
@@ -18796,12 +18876,16 @@ msgstr ""
msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version."
msgstr ""
+#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Code Signing"
+msgstr "Yer signals:"
+
#: 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."
+"'apksigner' could not be found. Please check that the command is available "
+"in the Android SDK build-tools directory. The resulting %s is unsigned."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18817,6 +18901,10 @@ msgid "Could not find keystore, unable to export."
msgstr ""
#: platform/android/export/export_plugin.cpp
+msgid "Could not start apksigner executable."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
@@ -18845,7 +18933,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Unsupported export format!\n"
+msgid "Unsupported export format!"
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18856,19 +18944,17 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Android build version mismatch:\n"
-" Template installed: %s\n"
-" Godot Version: %s\n"
+"Android build version mismatch: Template installed: %s, Godot version: %s. "
"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"
+"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"
+msgid "Could not export project files to gradle project."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18881,7 +18967,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Building of Android project failed, check output for the error.\n"
+"Building of Android project failed, check output for the error. "
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
@@ -18896,7 +18982,7 @@ msgid ""
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Package not found: %s"
+msgid "Package not found: \"%s\"."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18904,15 +18990,12 @@ msgid "Creating APK..."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid ""
-"Could not find template APK to export:\n"
-"%s"
+msgid "Could not find template APK to export: \"%s\"."
msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Missing libraries in the export template for the selected architectures: "
-"%s.\n"
+"Missing libraries in the export template for the selected architectures: %s. "
"Please build a template with all required libraries, or uncheck the missing "
"architectures in the export preset."
msgstr ""
@@ -18923,8 +19006,9 @@ msgid "Adding files..."
msgstr "Find ye Node Type"
#: platform/android/export/export_plugin.cpp
-msgid "Could not export project files"
-msgstr ""
+#, fuzzy
+msgid "Could not export project files."
+msgstr "Slit th' Node"
#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
@@ -19162,6 +19246,17 @@ msgstr "Slit th' Node"
msgid "Custom BG Color"
msgstr "Slit th' Node"
+#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Prepare Templates"
+msgstr "Discharge ye' Variable"
+
+#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Export template not found."
+msgstr "Yer fancy release package be nowhere."
+
#: platform/iphone/export/export.cpp
msgid "App Store Team ID not specified - cannot configure the project."
msgstr ""
@@ -19184,24 +19279,34 @@ msgid "Run exported HTML in the system's default browser."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not open template for export:"
+msgid "Could not open template for export: \"%s\"."
msgstr ""
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Invalid export template:"
+msgid "Invalid export template: \"%s\"."
msgstr "Yer index property name be thrown overboard!"
#: platform/javascript/export/export.cpp
-msgid "Could not write file:"
-msgstr ""
+#, fuzzy
+msgid "Could not write file: \"%s\"."
+msgstr "Slit th' Node"
+
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Icon Creation"
+msgstr "Rename Variable"
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not read file:"
+msgid "Could not read file: \"%s\"."
msgstr "Slit th' Node"
#: platform/javascript/export/export.cpp
+msgid "PWA"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
#, fuzzy
msgid "Variant"
msgstr "Yer functions:"
@@ -19276,16 +19381,18 @@ msgid "Icon 512 X 512"
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not read HTML shell:"
-msgstr ""
+#, fuzzy
+msgid "Could not read HTML shell: \"%s\"."
+msgstr "Slit th' Node"
#: platform/javascript/export/export.cpp
-msgid "Could not create HTTP server directory:"
+msgid "Could not create HTTP server directory: %s."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Error starting HTTP server:"
-msgstr ""
+#, fuzzy
+msgid "Error starting HTTP server: %d."
+msgstr "Error loading yer Calligraphy Pen."
#: platform/javascript/export/export.cpp
msgid "Web"
@@ -19572,9 +19679,27 @@ msgid "Apple Team ID"
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open icon file \"%s\"."
+msgstr "Slit th' Node"
+
+#: platform/osx/export/export.cpp
+msgid "Could not start xcrun executable."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization failed."
+msgstr "Ye be fixin' Signal:"
+
+#: platform/osx/export/export.cpp
+msgid "Notarization request UUID: \"%s\""
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid ""
-"Note: The notarization process generally takes less than an hour. When the "
-"process is completed, you'll receive an email."
+"The notarization process generally takes less than an hour. When the process "
+"is completed, you'll receive an email."
msgstr ""
#: platform/osx/export/export.cpp
@@ -19590,18 +19715,72 @@ msgid ""
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign failed with error \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign require regex module."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Could not start codesign executable, make sure Xcode command line tools are "
+"installed."
+msgstr ""
+
+#: platform/osx/export/export.cpp platform/windows/export/export.cpp
msgid "No identity found."
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Cannot sign file %s."
+msgstr "Error loading yer Calligraphy Pen."
+
+#: platform/osx/export/export.cpp
+msgid "Relative symlinks are not supported, exported \"%s\" might be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "DMG Creation"
+msgstr "Yer functions:"
+
+#: platform/osx/export/export.cpp
+msgid "Could not start hdiutil executable."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed - file exists."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed."
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid "Creating app bundle"
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Could not find template app to export:"
+msgid "Could not find template app to export: \"%s\"."
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid export format."
+msgstr "Yer index property name be thrown overboard!"
+
+#: platform/osx/export/export.cpp
msgid ""
"Relative symlinks are not supported on this OS, the exported project might "
"be broken!"
@@ -19609,7 +19788,7 @@ msgstr ""
#: platform/osx/export/export.cpp
msgid ""
-"Requested template binary '%s' not found. It might be missing from your "
+"Requested template binary \"%s\" not found. It might be missing from your "
"template archive."
msgstr ""
@@ -19651,6 +19830,15 @@ msgstr ""
#: platform/osx/export/export.cpp
#, fuzzy
+msgid "ZIP Creation"
+msgstr "Yer functions:"
+
+#: platform/osx/export/export.cpp
+msgid "Could not open file to read from path \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
msgid "Invalid bundle identifier:"
msgstr "Yer name's got no valid identifier:"
@@ -19962,6 +20150,10 @@ msgid "Debug Algorithm"
msgstr ""
#: platform/windows/export/export.cpp
+msgid "Failed to rename temporary file \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
msgid "Identity Type"
msgstr ""
@@ -20008,6 +20200,65 @@ msgid "Trademarks"
msgstr ""
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Resources Modification"
+msgstr "Slit th' Node"
+
+#: platform/windows/export/export.cpp
+msgid "Could not find rcedit executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find wine executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start rcedit executable, configure rcedit path in the Editor "
+"Settings (Export > Windows > Rcedit)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"rcedit failed to modify executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find signtool executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find osslsigncode executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid identity type."
+msgstr "Yer name's got no valid identifier:"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid timestamp server."
+msgstr "Yer Calligraphy be wrongly sized."
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start signtool executable, configure signtool path in the Editor "
+"Settings (Export > Windows > Signtool)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Signtool failed to sign executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Failed to remove temporary file \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
msgid ""
"The rcedit tool must be configured in the Editor Settings (Export > Windows "
"> Rcedit) to change the icon or app information data."
@@ -20029,6 +20280,23 @@ msgid "Invalid product version:"
msgstr "Yer product GUID be evil."
#: platform/windows/export/export.cpp
+msgid "Windows executables cannot be >= 4 GiB."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+#, fuzzy
+msgid "Failed to open executable file \"%s\"."
+msgstr "Yer Calligraphy be wrongly sized."
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable file header corrupted."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable \"pck\" section not found."
+msgstr ""
+
+#: platform/windows/export/export.cpp
msgid "Windows"
msgstr ""
@@ -20044,6 +20312,10 @@ msgstr ""
msgid "Wine"
msgstr ""
+#: platform/x11/export/export.cpp
+msgid "32-bit executables cannot have embedded data >= 4 GiB."
+msgstr ""
+
#: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp
#: scene/resources/texture.cpp
#, fuzzy
@@ -20158,7 +20430,8 @@ msgstr ""
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/3d/light.cpp scene/3d/reflection_probe.cpp
-#: scene/3d/visual_instance.cpp scene/resources/material.cpp
+#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp
+#: scene/resources/material.cpp
msgid "Max Distance"
msgstr ""
@@ -20902,6 +21175,18 @@ msgstr ""
msgid "Edge Connection Margin"
msgstr "Slit th' Node"
+#: scene/2d/navigation_2d.cpp
+msgid ""
+"'Navigation2D' node and 'Navigation2D.get_simple_path()' are deprecated and "
+"will be removed in a future version. Use 'Navigation2DServer.map_get_path()' "
+"instead."
+msgstr ""
+
+#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
+#, fuzzy
+msgid "Path Desired Distance"
+msgstr "Edit"
+
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
msgid "Target Desired Distance"
msgstr ""
@@ -20953,13 +21238,16 @@ msgid ""
msgstr ""
#: scene/2d/navigation_polygon.cpp
-msgid ""
-"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
-"node. It only provides navigation data."
+msgid "Navpoly"
msgstr ""
-#: scene/2d/navigation_polygon.cpp
-msgid "Navpoly"
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Enter Cost"
+msgstr "Slit th' Node"
+
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+msgid "Travel Cost"
msgstr ""
#: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp
@@ -22058,6 +22346,13 @@ msgstr ""
msgid "Transform Normals"
msgstr "Slit th' Node"
+#: scene/3d/navigation.cpp
+msgid ""
+"'Navigation' node and 'Navigation.get_simple_path()' are deprecated and will "
+"be removed in a future version. Use 'NavigationServer.map_get_path()' "
+"instead."
+msgstr ""
+
#: scene/3d/navigation.cpp scene/resources/curve.cpp
msgid "Up Vector"
msgstr ""
@@ -22079,12 +22374,6 @@ msgid ""
"The NavigationAgent can be used only under a Spatial inheriting parent node."
msgstr ""
-#: scene/3d/navigation_mesh_instance.cpp
-msgid ""
-"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
-"It only provides navigation data."
-msgstr ""
-
#: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp
msgid "NavMesh"
msgstr ""
@@ -24601,6 +24890,16 @@ msgid "3D Physics"
msgstr ""
#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "2D Navigation"
+msgstr "Ye be fixin' Signal:"
+
+#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "3D Navigation"
+msgstr "Ye be fixin' Signal:"
+
+#: scene/register_scene_types.cpp
msgid "Use hiDPI"
msgstr ""
@@ -25969,7 +26268,7 @@ msgstr "Add Function"
msgid "Refraction"
msgstr "Yer functions:"
-#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp
+#: scene/resources/material.cpp
msgid "Detail"
msgstr ""
@@ -26047,7 +26346,12 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
-msgid "Sample Partition Type"
+msgid "Sampling"
+msgstr "Slit th' Node"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Partition Type"
msgstr "Edit yer Variable:"
#: scene/resources/navigation_mesh.cpp
@@ -26063,7 +26367,11 @@ msgid "Source Group Name"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Agent"
+msgid "Cells"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
+msgid "Agents"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -26075,11 +26383,16 @@ msgid "Max Slope"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Regions"
+msgstr "Yer functions:"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Merge Size"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Edge"
+msgid "Edges"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -26092,6 +26405,11 @@ msgid "Verts Per Poly"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Details"
+msgstr "Change"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Sample Distance"
msgstr ""
@@ -26108,9 +26426,18 @@ msgid "Ledge Spans"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Filter Walkable Low Height Spans"
+msgid "Walkable Low Height Spans"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
+msgid "Baking AABB"
msgstr ""
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB Offset"
+msgstr "Discharge ye' Variable"
+
#: scene/resources/occluder_shape.cpp
msgid "Spheres"
msgstr ""
@@ -26504,6 +26831,11 @@ msgid "Scenario"
msgstr ""
#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Navigation Map"
+msgstr "Ye be fixin' Signal:"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
msgid "Direct Space State"
msgstr ""
@@ -26520,6 +26852,26 @@ msgstr "Yar, Blow th' Selected Down!"
msgid "Default Angular Damp"
msgstr ""
+#: scene/resources/world.cpp
+#, fuzzy
+msgid "Default Map Up"
+msgstr "th' Base Type:"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Size"
+msgstr "th' Base Type:"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Height"
+msgstr "th' Base Type:"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Edge Connection Margin"
+msgstr "Slit th' Node"
+
#: scene/resources/world_2d.cpp
msgid "Canvas"
msgstr ""
diff --git a/editor/translations/pt.po b/editor/translations/pt.po
index 8e8ce76454..7db8765ae3 100644
--- a/editor/translations/pt.po
+++ b/editor/translations/pt.po
@@ -16,19 +16,21 @@
# ssantos <ssantos@web.de>, 2018, 2019, 2020, 2021.
# Gonçalo Dinis Guerreiro João <goncalojoao205@gmail.com>, 2019.
# Manuela Silva <mmsrs@sky.com>, 2020.
-# Murilo Gama <murilovsky2030@gmail.com>, 2020.
+# Murilo Gama <murilovsky2030@gmail.com>, 2020, 2022.
# Ricardo Subtil <ricasubtil@gmail.com>, 2020.
# André Silva <andre.olivais@gmail.com>, 2021.
# Danilo Conceição Rosa <danilorosa@protonmail.com>, 2022.
# Kaycke <kaycke@ymail.com>, 2022.
# Renu <ifpilucas@gmail.com>, 2022.
+# El_ExpertPlayer <xpertnathan37@gmail.com>, 2022.
+# Esdras Caleb Oliveira Silva <acheicaleb@gmail.com>, 2022.
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: 2022-04-25 15:02+0000\n"
-"Last-Translator: Kaycke <kaycke@ymail.com>\n"
+"PO-Revision-Date: 2022-06-29 10:04+0000\n"
+"Last-Translator: Esdras Caleb Oliveira Silva <acheicaleb@gmail.com>\n"
"Language-Team: Portuguese <https://hosted.weblate.org/projects/godot-engine/"
"godot/pt/>\n"
"Language: pt\n"
@@ -36,7 +38,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.12.1-dev\n"
+"X-Generator: Weblate 4.13.1-dev\n"
#: core/bind/core_bind.cpp main/main.cpp
msgid "Tablet Driver"
@@ -60,7 +62,7 @@ msgstr "V-Sync ativado"
#: core/bind/core_bind.cpp main/main.cpp
msgid "V-Sync Via Compositor"
-msgstr "V-Sync Via Compositor"
+msgstr "V-Sync via Compositor"
#: core/bind/core_bind.cpp main/main.cpp
msgid "Delta Smoothing"
@@ -71,9 +73,8 @@ msgid "Low Processor Usage Mode"
msgstr "Modo de Baixa Utilização do Processador"
#: core/bind/core_bind.cpp
-#, fuzzy
msgid "Low Processor Usage Mode Sleep (µsec)"
-msgstr "Modo adormecer com Baixa Utilização do Processador (µsec)"
+msgstr "Suspensão do Modo de Baixa Utilização do Processador (µsec)"
#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp
msgid "Keep Screen On"
@@ -142,9 +143,8 @@ msgid "Size"
msgstr "Tamanho"
#: core/bind/core_bind.cpp
-#, fuzzy
msgid "Endian Swap"
-msgstr "Troca endiana"
+msgstr "Troca Endian"
#: core/bind/core_bind.cpp
msgid "Editor Hint"
@@ -167,9 +167,8 @@ msgid "Time Scale"
msgstr "Escala de Tempo"
#: core/bind/core_bind.cpp main/main.cpp
-#, fuzzy
msgid "Physics Jitter Fix"
-msgstr "Frame de Física %"
+msgstr "Arranjar Tremores nas Fisicas"
#: core/bind/core_bind.cpp editor/plugins/version_control_editor_plugin.cpp
msgid "Error"
@@ -180,9 +179,8 @@ msgid "Error String"
msgstr "Erro String"
#: core/bind/core_bind.cpp
-#, fuzzy
msgid "Error Line"
-msgstr "Erro Ao Gravar"
+msgstr "Erro na linha"
#: core/bind/core_bind.cpp
msgid "Result"
@@ -204,14 +202,12 @@ msgid "Limits"
msgstr "Limites"
#: core/command_queue_mt.cpp
-#, fuzzy
msgid "Command Queue"
-msgstr "Comando: Rodar"
+msgstr "Fila de Comando"
#: core/command_queue_mt.cpp
-#, fuzzy
msgid "Multithreading Queue Size (KB)"
-msgstr "Tamanho da Fila Multilinha (KB)"
+msgstr "Tamanho da Fila Multithreading (KB)"
#: core/func_ref.cpp modules/visual_script/visual_script_builtin_funcs.cpp
#: modules/visual_script/visual_script_func_nodes.cpp
@@ -222,21 +218,20 @@ msgstr "Função"
#: core/image.cpp core/packed_data_container.cpp scene/2d/polygon_2d.cpp
#: scene/3d/baked_lightmap.cpp scene/3d/gi_probe.cpp
-#, fuzzy
msgid "Data"
-msgstr "Com Dados"
+msgstr "Dados"
#: core/io/file_access_network.cpp core/register_core_types.cpp
-#: editor/editor_settings.cpp main/main.cpp
+#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
#: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h
-#, fuzzy
+#: scene/gui/file_dialog.cpp
msgid "Network"
-msgstr "Analisador de Rede"
+msgstr "Rede"
#: core/io/file_access_network.cpp
msgid "Remote FS"
-msgstr "SF Remoto"
+msgstr "FS Remoto"
#: core/io/file_access_network.cpp
msgid "Page Size"
@@ -244,11 +239,11 @@ msgstr "Tamanho da Página"
#: core/io/file_access_network.cpp
msgid "Page Read Ahead"
-msgstr "Leitura de página em frente"
+msgstr "Página Lida Adiante"
#: core/io/http_client.cpp
msgid "Blocking Mode Enabled"
-msgstr "Modo de blocagem ativado"
+msgstr "Modo de Bloqueio Ativado"
#: core/io/http_client.cpp
msgid "Connection"
@@ -287,26 +282,24 @@ msgid "Transfer Mode"
msgstr "Modo de Transferência"
#: core/io/packet_peer.cpp
-#, fuzzy
msgid "Encode Buffer Max Size"
-msgstr "Tamanho máximo do tampão de codificação"
+msgstr "Tamanho Máximo do Amortecedor de Codificação"
#: core/io/packet_peer.cpp
msgid "Input Buffer Max Size"
msgstr "Tamanho máximo do Buffer de entrada"
#: core/io/packet_peer.cpp
-#, fuzzy
msgid "Output Buffer Max Size"
-msgstr "Tamanho máximo do buffer de saída"
+msgstr "Tamanho Máximo do Amortecedor de OutPut"
#: core/io/packet_peer.cpp
msgid "Stream Peer"
-msgstr ""
+msgstr "Fluxo de pares"
#: core/io/stream_peer.cpp
msgid "Big Endian"
-msgstr ""
+msgstr "Grande Endian"
#: core/io/stream_peer.cpp
msgid "Data Array"
@@ -314,7 +307,7 @@ msgstr "Lista de dados"
#: core/io/stream_peer_ssl.cpp
msgid "Blocking Handshake"
-msgstr ""
+msgstr "Bloquear Handshake"
#: core/io/udp_server.cpp
msgid "Max Pending Connections"
@@ -337,9 +330,8 @@ msgstr ""
"Número de \"bytes\" insuficientes para descodificar, ou o formato é inválido."
#: core/math/expression.cpp
-#, fuzzy
msgid "Invalid input %d (not passed) in expression"
-msgstr "Entrada inválida %i (não passada) na expressão"
+msgstr "Entrada inválida %d (não passada) na expressão"
#: core/math/expression.cpp
msgid "self can't be used because instance is null (not passed)"
@@ -376,12 +368,20 @@ msgstr "Estado"
#: core/message_queue.cpp
msgid "Message Queue"
-msgstr ""
+msgstr "Fila de Mensagens"
#: core/message_queue.cpp
msgid "Max Size (KB)"
msgstr "Tamanho Máximo (KB)"
+#: core/os/input.cpp
+msgid "Mouse Mode"
+msgstr "Modo Mouse"
+
+#: core/os/input.cpp
+msgid "Use Accumulated Input"
+msgstr "Usar Entrada Acumulada"
+
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: servers/audio_server.cpp
msgid "Device"
@@ -393,60 +393,53 @@ msgstr "Alt"
#: core/os/input_event.cpp
msgid "Shift"
-msgstr ""
+msgstr "Shift"
#: core/os/input_event.cpp
-#, fuzzy
msgid "Control"
-msgstr "Controle de Versões"
+msgstr "Controle"
#: core/os/input_event.cpp
msgid "Meta"
-msgstr ""
+msgstr "Meta"
#: core/os/input_event.cpp
-#, fuzzy
msgid "Command"
-msgstr "Comunidade"
+msgstr "Comando"
#: core/os/input_event.cpp scene/2d/touch_screen_button.cpp
#: scene/gui/base_button.cpp scene/gui/texture_button.cpp
#: scene/resources/default_theme/default_theme.cpp
-#, fuzzy
msgid "Pressed"
-msgstr "Predefinições"
+msgstr "Pressionado"
#: core/os/input_event.cpp
-#, fuzzy
msgid "Scancode"
-msgstr "Pequisar"
+msgstr "Código de Digitalização"
#: core/os/input_event.cpp
-#, fuzzy
msgid "Physical Scancode"
-msgstr "Chave Física"
+msgstr "Código de Digitalização Físico"
#: core/os/input_event.cpp
msgid "Unicode"
-msgstr ""
+msgstr "Unicode"
#: core/os/input_event.cpp
msgid "Echo"
-msgstr ""
+msgstr "Eco"
#: core/os/input_event.cpp scene/gui/base_button.cpp
-#, fuzzy
msgid "Button Mask"
-msgstr "Botão"
+msgstr "Mascara de Botão"
#: core/os/input_event.cpp scene/2d/node_2d.cpp scene/gui/control.cpp
msgid "Global Position"
msgstr "Posição Global"
#: core/os/input_event.cpp
-#, fuzzy
msgid "Factor"
-msgstr "Vetor"
+msgstr "Fator"
#: core/os/input_event.cpp
msgid "Button Index"
@@ -458,12 +451,11 @@ msgstr "Clique duplo"
#: core/os/input_event.cpp
msgid "Tilt"
-msgstr ""
+msgstr "Inclinar"
#: core/os/input_event.cpp
-#, fuzzy
msgid "Pressure"
-msgstr "Predefinições"
+msgstr "Pressione"
#: core/os/input_event.cpp
msgid "Relative"
@@ -498,7 +490,7 @@ msgstr "Ação"
#: core/os/input_event.cpp scene/resources/environment.cpp
#: scene/resources/material.cpp
msgid "Strength"
-msgstr ""
+msgstr "Força"
#: core/os/input_event.cpp
msgid "Delta"
@@ -537,14 +529,12 @@ msgstr "Valor do Controlador"
#: core/project_settings.cpp editor/editor_node.cpp main/main.cpp
#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
#: platform/windows/export/export.cpp
-#, fuzzy
msgid "Application"
-msgstr "Ação"
+msgstr "Aplicação"
#: core/project_settings.cpp main/main.cpp
-#, fuzzy
msgid "Config"
-msgstr "Configurar Ajuste"
+msgstr "Configurações"
#: core/project_settings.cpp
msgid "Project Settings Override"
@@ -571,7 +561,8 @@ msgstr "Descrição"
#: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
-#: main/main.cpp
+#: main/main.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp
msgid "Run"
msgstr "Executar"
@@ -581,39 +572,36 @@ msgid "Main Scene"
msgstr "Cena Principal"
#: core/project_settings.cpp
-#, fuzzy
msgid "Disable stdout"
-msgstr "Desativar Autotile"
+msgstr "Desativar stdout"
#: core/project_settings.cpp
-#, fuzzy
msgid "Disable stderr"
-msgstr "Item Desativado"
+msgstr "Desativar stderr"
#: core/project_settings.cpp
msgid "Use Hidden Project Data Directory"
-msgstr ""
+msgstr "Use o diretório de dados ocultos do projeto"
#: core/project_settings.cpp
msgid "Use Custom User Dir"
-msgstr ""
+msgstr "Usar Diretório de Usuário Personalizado"
#: core/project_settings.cpp
msgid "Custom User Dir Name"
-msgstr ""
+msgstr "Nome de Diretório de Usuário Personalizado"
#: core/project_settings.cpp main/main.cpp
#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
#: platform/uwp/os_uwp.cpp
-#, fuzzy
msgid "Display"
-msgstr "Mostrar Tudo"
+msgstr "Exibição"
#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp
#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp
#: scene/3d/label_3d.cpp scene/gui/text_edit.cpp scene/resources/texture.cpp
msgid "Width"
-msgstr ""
+msgstr "Largura"
#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp
#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp
@@ -621,23 +609,20 @@ msgstr ""
#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp
#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp
#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp
-#, fuzzy
msgid "Height"
-msgstr "Luz"
+msgstr "Altura"
#: core/project_settings.cpp
msgid "Always On Top"
-msgstr ""
+msgstr "Sempre no topo"
#: core/project_settings.cpp
-#, fuzzy
msgid "Test Width"
-msgstr "Esquerda Wide"
+msgstr "Largura de Teste"
#: core/project_settings.cpp
-#, fuzzy
msgid "Test Height"
-msgstr "Em teste"
+msgstr "Altura de Teste"
#: core/project_settings.cpp editor/animation_track_editor.cpp
#: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp
@@ -660,74 +645,65 @@ msgid "Main Run Args"
msgstr "Argumentos da Execução Principal"
#: core/project_settings.cpp
+msgid "Scene Naming"
+msgstr "Nomear a Cena"
+
+#: core/project_settings.cpp
msgid "Search In File Extensions"
-msgstr ""
+msgstr "Pesquisar em Extensões de Arquivo"
#: core/project_settings.cpp
msgid "Script Templates Search Path"
-msgstr ""
-
-#: core/project_settings.cpp editor/editor_node.cpp
-#: editor/plugins/version_control_editor_plugin.cpp
-msgid "Version Control"
-msgstr "Controle de Versões"
+msgstr "Caminho de Pesquisa para Modelos de Script"
#: core/project_settings.cpp
-msgid "Autoload On Startup"
-msgstr ""
+msgid "Version Control Autoload On Startup"
+msgstr "Carregamento Automático de Controle de Versão na inicialização"
#: core/project_settings.cpp
-msgid "Plugin Name"
-msgstr "Nome do Plugin"
+msgid "Version Control Plugin Name"
+msgstr "Nome do Plug-in de Controle de Versão"
#: core/project_settings.cpp scene/2d/collision_object_2d.cpp
#: scene/3d/collision_object.cpp scene/gui/control.cpp
-#, fuzzy
msgid "Input"
-msgstr "Adicionar entrada"
+msgstr "Entrada"
#: core/project_settings.cpp
msgid "UI Accept"
-msgstr ""
+msgstr "Aceitar UI"
#: core/project_settings.cpp
-#, fuzzy
msgid "UI Select"
-msgstr "Selecionar"
+msgstr "Selecionar IU"
#: core/project_settings.cpp
-#, fuzzy
msgid "UI Cancel"
-msgstr "Cancelar"
+msgstr "Cancelar IU"
#: core/project_settings.cpp
-#, fuzzy
msgid "UI Focus Next"
-msgstr "Caminho de Foco"
+msgstr "Foco da IU em Seguida"
#: core/project_settings.cpp
-#, fuzzy
msgid "UI Focus Prev"
-msgstr "Caminho de Foco"
+msgstr "Foco da IU Anterior"
#: core/project_settings.cpp
-#, fuzzy
msgid "UI Left"
-msgstr "Topo Esquerda"
+msgstr "IU Esquerda"
#: core/project_settings.cpp
-#, fuzzy
msgid "UI Right"
-msgstr "Topo Direita"
+msgstr "IU Direita"
#: core/project_settings.cpp
msgid "UI Up"
-msgstr ""
+msgstr "UI Acima"
#: core/project_settings.cpp
-#, fuzzy
msgid "UI Down"
-msgstr "Para baixo"
+msgstr "IU Baixo"
#: core/project_settings.cpp
msgid "UI Page Up"
@@ -735,16 +711,15 @@ msgstr "UI Página Acima"
#: core/project_settings.cpp
msgid "UI Page Down"
-msgstr ""
+msgstr "UI Página Inferior"
#: core/project_settings.cpp
msgid "UI Home"
-msgstr ""
+msgstr "UI Inicio"
#: core/project_settings.cpp
-#, fuzzy
msgid "UI End"
-msgstr "No Fim"
+msgstr "IU Final"
#: core/project_settings.cpp main/main.cpp modules/bullet/register_types.cpp
#: modules/bullet/space_bullet.cpp scene/2d/physics_body_2d.cpp
@@ -765,12 +740,11 @@ msgstr "Física"
#: scene/3d/physics_body.cpp scene/resources/world.cpp
#: servers/physics/space_sw.cpp servers/physics_server.cpp
msgid "3D"
-msgstr ""
+msgstr "3D"
#: core/project_settings.cpp
-#, fuzzy
msgid "Smooth Trimesh Collision"
-msgstr "Criar Irmão de Colisão Trimesh"
+msgstr "Colisão Trimesh Suave"
#: core/project_settings.cpp drivers/gles2/rasterizer_canvas_base_gles2.cpp
#: drivers/gles2/rasterizer_scene_gles2.cpp
@@ -792,16 +766,17 @@ msgstr "Renderizar"
#: scene/resources/multimesh.cpp servers/visual/visual_server_scene.cpp
#: servers/visual_server.cpp
msgid "Quality"
-msgstr ""
+msgstr "Qualidade"
#: core/project_settings.cpp scene/gui/file_dialog.cpp
-#: scene/main/scene_tree.cpp servers/visual_server.cpp
+#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp
+#: servers/visual_server.cpp
msgid "Filters"
msgstr "Filtros"
#: core/project_settings.cpp scene/main/viewport.cpp
msgid "Sharpen Intensity"
-msgstr ""
+msgstr "Intensidade da Nitidez"
#: core/project_settings.cpp editor/editor_export.cpp editor/editor_node.cpp
#: editor/editor_settings.cpp editor/plugins/script_editor_plugin.cpp
@@ -826,55 +801,52 @@ msgid "Profiler"
msgstr "Analisador"
#: core/project_settings.cpp
-#, fuzzy
msgid "Max Functions"
-msgstr "Criar Função"
+msgstr "Funções Máximas"
#: core/project_settings.cpp scene/3d/vehicle_body.cpp
-#, fuzzy
msgid "Compression"
-msgstr "Expressão"
+msgstr "Compressão"
#: core/project_settings.cpp
-#, fuzzy
msgid "Formats"
-msgstr "Formato"
+msgstr "Formatos"
#: core/project_settings.cpp
msgid "Zstd"
-msgstr ""
+msgstr "Zstd"
#: core/project_settings.cpp
msgid "Long Distance Matching"
-msgstr ""
+msgstr "Correspondência de Longa Distância"
#: core/project_settings.cpp
msgid "Compression Level"
-msgstr ""
+msgstr "Nível de Compressão"
#: core/project_settings.cpp
msgid "Window Log Size"
-msgstr ""
+msgstr "Tamanho da Janela de Registro"
#: core/project_settings.cpp
msgid "Zlib"
-msgstr ""
+msgstr "Zlib"
#: core/project_settings.cpp
msgid "Gzip"
-msgstr ""
+msgstr "Gzip"
#: core/project_settings.cpp platform/android/export/export.cpp
msgid "Android"
-msgstr ""
+msgstr "Android"
#: core/project_settings.cpp
msgid "Modules"
-msgstr ""
+msgstr "Módulos"
#: core/register_core_types.cpp
msgid "TCP"
-msgstr ""
+msgstr "TCP"
#: core/register_core_types.cpp
msgid "Connect Timeout Seconds"
@@ -882,15 +854,15 @@ msgstr "Segundos de Timeout da Conexão"
#: core/register_core_types.cpp
msgid "Packet Peer Stream"
-msgstr ""
+msgstr "Fluxo de Pacotes de Pares"
#: core/register_core_types.cpp
msgid "Max Buffer (Power of 2)"
-msgstr ""
+msgstr "Buffer máximo (Potência de 2)"
#: core/register_core_types.cpp editor/editor_settings.cpp main/main.cpp
msgid "SSL"
-msgstr ""
+msgstr "SSL"
#: core/register_core_types.cpp main/main.cpp
msgid "Certificates"
@@ -903,9 +875,8 @@ msgid "Resource"
msgstr "Recurso"
#: core/resource.cpp
-#, fuzzy
msgid "Local To Scene"
-msgstr "Fechar Cena"
+msgstr "Local para Cena"
#: core/resource.cpp editor/dependency_editor.cpp
#: editor/editor_autoload_settings.cpp editor/plugins/path_editor_plugin.cpp
@@ -915,22 +886,20 @@ msgid "Path"
msgstr "Caminho"
#: core/script_language.cpp
-#, fuzzy
msgid "Source Code"
-msgstr "Fonte"
+msgstr "Código Fonte"
#: core/translation.cpp editor/project_settings_editor.cpp
msgid "Locale"
msgstr "Localização"
#: core/translation.cpp
-#, fuzzy
msgid "Test"
-msgstr "Em teste"
+msgstr "Testar"
#: core/translation.cpp scene/resources/font.cpp
msgid "Fallback"
-msgstr ""
+msgstr "Alternativa"
#: core/ustring.cpp scene/resources/segment_shape_2d.cpp
msgid "B"
@@ -966,17 +935,17 @@ msgstr "EiB"
#: drivers/gles3/rasterizer_scene_gles3.cpp
#: drivers/gles3/rasterizer_storage_gles3.cpp modules/gltf/gltf_state.cpp
msgid "Buffers"
-msgstr ""
+msgstr "Buffers"
#: drivers/gles2/rasterizer_canvas_base_gles2.cpp
#: drivers/gles3/rasterizer_canvas_base_gles3.cpp
msgid "Canvas Polygon Buffer Size (KB)"
-msgstr ""
+msgstr "Tamanho do Buffer do Polígono da Tela (KB)"
#: drivers/gles2/rasterizer_canvas_base_gles2.cpp
#: drivers/gles3/rasterizer_canvas_base_gles3.cpp
msgid "Canvas Polygon Index Buffer Size (KB)"
-msgstr ""
+msgstr "Tamanho do buffer do índice do polígono da tela (KB)"
#: drivers/gles2/rasterizer_canvas_base_gles2.cpp
#: drivers/gles3/rasterizer_canvas_base_gles3.cpp editor/editor_settings.cpp
@@ -988,56 +957,52 @@ msgstr ""
#: servers/physics_2d/space_2d_sw.cpp servers/physics_2d_server.cpp
#: servers/visual_server.cpp
msgid "2D"
-msgstr ""
+msgstr "2D"
#: drivers/gles2/rasterizer_canvas_base_gles2.cpp
#: drivers/gles3/rasterizer_canvas_base_gles3.cpp
-#, fuzzy
msgid "Snapping"
-msgstr "Ajuste Inteligente"
+msgstr "Encaixe"
#: drivers/gles2/rasterizer_canvas_base_gles2.cpp
#: drivers/gles3/rasterizer_canvas_base_gles3.cpp
-#, fuzzy
msgid "Use GPU Pixel Snap"
-msgstr "Usar Ajuste de Pixel"
+msgstr "Usar o Encaixe Pixel da GPU"
#: drivers/gles2/rasterizer_scene_gles2.cpp
#: drivers/gles3/rasterizer_scene_gles3.cpp
msgid "Immediate Buffer Size (KB)"
-msgstr ""
+msgstr "Tamanho de Buffer Imediato (KB)"
#: drivers/gles2/rasterizer_storage_gles2.cpp
#: drivers/gles3/rasterizer_storage_gles3.cpp
-#, fuzzy
msgid "Lightmapping"
-msgstr "Consolidar Lightmaps"
+msgstr "Mapeamento de Luz"
#: drivers/gles2/rasterizer_storage_gles2.cpp
#: drivers/gles3/rasterizer_storage_gles3.cpp
msgid "Use Bicubic Sampling"
-msgstr ""
+msgstr "Usar amostragem Bicúbica"
#: drivers/gles3/rasterizer_scene_gles3.cpp
msgid "Max Renderable Elements"
-msgstr ""
+msgstr "Máximo de Elementos Renderizáveis"
#: drivers/gles3/rasterizer_scene_gles3.cpp
msgid "Max Renderable Lights"
-msgstr ""
+msgstr "Máximo de Luzes Renderizáveis"
#: drivers/gles3/rasterizer_scene_gles3.cpp
-#, fuzzy
msgid "Max Renderable Reflections"
-msgstr "Centrar Seleção"
+msgstr "Máximo de Reflexões Renderizáveis"
#: drivers/gles3/rasterizer_scene_gles3.cpp
msgid "Max Lights Per Object"
-msgstr ""
+msgstr "Máximo de Luzes por Objeto"
#: drivers/gles3/rasterizer_scene_gles3.cpp
msgid "Subsurface Scattering"
-msgstr ""
+msgstr "Dispersão de Subsuperfície"
#: drivers/gles3/rasterizer_scene_gles3.cpp editor/animation_track_editor.cpp
#: editor/import/resource_importer_texture.cpp
@@ -1053,25 +1018,24 @@ msgid "Scale"
msgstr "Escala"
#: drivers/gles3/rasterizer_scene_gles3.cpp
-#, fuzzy
msgid "Follow Surface"
-msgstr "Povoar superfície"
+msgstr "Seguir a Superfície"
#: drivers/gles3/rasterizer_scene_gles3.cpp
msgid "Weight Samples"
-msgstr ""
+msgstr "Amostras de Peso"
#: drivers/gles3/rasterizer_scene_gles3.cpp
msgid "Voxel Cone Tracing"
-msgstr ""
+msgstr "Rastreamento de Cone de Voxel"
#: drivers/gles3/rasterizer_scene_gles3.cpp scene/resources/environment.cpp
msgid "High Quality"
-msgstr ""
+msgstr "Alta Qualidade"
#: drivers/gles3/rasterizer_storage_gles3.cpp
msgid "Blend Shape Max Buffer Size (KB)"
-msgstr ""
+msgstr "Tamanho Máximo do Buffer da Blend Shape (KB)"
#. TRANSLATORS: Adjective, refers to the mode for Bezier handles (Free, Balanced, Mirror).
#: editor/animation_bezier_editor.cpp
@@ -1145,9 +1109,8 @@ msgstr "Anim Mudar Chamada"
#: editor/animation_track_editor.cpp scene/2d/animated_sprite.cpp
#: scene/2d/sprite.cpp scene/3d/sprite_3d.cpp
#: scene/resources/default_theme/default_theme.cpp
-#, fuzzy
msgid "Frame"
-msgstr "Frame %"
+msgstr "Quadro"
#: editor/animation_track_editor.cpp editor/editor_profiler.cpp
#: scene/2d/cpu_particles_2d.cpp scene/2d/particles_2d.cpp
@@ -1158,16 +1121,14 @@ msgstr "Tempo"
#: editor/animation_track_editor.cpp editor/import/resource_importer_scene.cpp
#: platform/osx/export/export.cpp
-#, fuzzy
msgid "Location"
msgstr "Localização"
#: editor/animation_track_editor.cpp modules/gltf/gltf_node.cpp
#: scene/2d/polygon_2d.cpp scene/2d/remote_transform_2d.cpp
#: scene/3d/remote_transform.cpp scene/3d/spatial.cpp scene/gui/control.cpp
-#, fuzzy
msgid "Rotation"
-msgstr "Passo da rotação:"
+msgstr "Rotação"
#: editor/animation_track_editor.cpp editor/script_editor_debugger.cpp
#: modules/visual_script/visual_script_nodes.cpp scene/gui/range.cpp
@@ -1175,14 +1136,13 @@ msgid "Value"
msgstr "Valor"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Arg Count"
-msgstr "Valor:"
+msgstr "Contagem de Argumentos"
#: editor/animation_track_editor.cpp main/main.cpp
#: modules/mono/mono_gd/gd_mono.cpp
msgid "Args"
-msgstr ""
+msgstr "Argumentos"
#: editor/animation_track_editor.cpp editor/editor_settings.cpp
#: editor/script_editor_debugger.cpp modules/gltf/gltf_accessor.cpp
@@ -1192,31 +1152,27 @@ msgid "Type"
msgstr "Tipo"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "In Handle"
-msgstr "Definir Manipulador"
+msgstr "Dentro do Controle"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Out Handle"
-msgstr "Definir Manipulador"
+msgstr "Fora do Controle"
#: editor/animation_track_editor.cpp
#: editor/import/resource_importer_texture.cpp
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/audio/audio_stream_player.cpp scene/gui/video_player.cpp
msgid "Stream"
-msgstr ""
+msgstr "Fluxo"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Start Offset"
-msgstr "Compensação da grelha:"
+msgstr "Deslocamento Inicial"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "End Offset"
-msgstr "Compensação:"
+msgstr "Deslocamento Final"
#: editor/animation_track_editor.cpp editor/editor_settings.cpp
#: editor/import/resource_importer_scene.cpp
@@ -1229,9 +1185,8 @@ msgid "Animation"
msgstr "Animação"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Easing"
-msgstr "Easing In-Out"
+msgstr "Flexibilização"
#: editor/animation_track_editor.cpp
msgid "Anim Multi Change Keyframe Time"
@@ -1340,19 +1295,16 @@ msgid "Remove this track."
msgstr "Remover esta Pista."
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Time (s):"
-msgstr "Tempo (s): "
+msgstr "Tempo (s):"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Position:"
-msgstr "Posição"
+msgstr "Posição:"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Rotation:"
-msgstr "Passo da rotação:"
+msgstr "Rotação:"
#: editor/animation_track_editor.cpp
#: editor/plugins/animation_tree_player_editor_plugin.cpp
@@ -1369,44 +1321,36 @@ msgid "Type:"
msgstr "Tipo:"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "(Invalid, expected type: %s)"
-msgstr "Modelo de exportação inválido:"
+msgstr "(Inválido, tipo esperado: %s)"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Easing:"
-msgstr "Easing In-Out"
+msgstr "Flexibilização:"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "In-Handle:"
-msgstr "Definir Manipulador"
+msgstr "Em manuseio:"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Out-Handle:"
-msgstr "Definir Manipulador"
+msgstr "Fora de controle:"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Stream:"
-msgstr "Item Rádio"
+msgstr "Fluxo:"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Start (s):"
-msgstr "Reinício (s):"
+msgstr "Início (s):"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "End (s):"
-msgstr "Aparecer (s):"
+msgstr "Fim (s):"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Animation Clip:"
-msgstr "Animações:"
+msgstr "Clipe de Animação:"
#: editor/animation_track_editor.cpp
msgid "Toggle Track Enabled"
@@ -1490,14 +1434,12 @@ msgstr "Remover Pista de Animação"
#: editor/plugins/tile_map_editor_plugin.cpp editor/scene_tree_dock.cpp
#: editor/spatial_editor_gizmos.cpp modules/csg/csg_gizmos.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
msgid "Editors"
-msgstr "Editor"
+msgstr "Editores"
#: editor/animation_track_editor.cpp editor/editor_settings.cpp
-#, fuzzy
msgid "Confirm Insert Track"
-msgstr "Anim Inserir Pista & Chave"
+msgstr "Confirmar Inserir Faixa"
#. TRANSLATORS: %s will be replaced by a phrase describing the target of track.
#: editor/animation_track_editor.cpp
@@ -1623,9 +1565,8 @@ msgid "Add Method Track Key"
msgstr "Adicionar Chave da Pista Método"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Method not found in object:"
-msgstr "Método não encontrado no objeto: "
+msgstr "Método não encontrado no objeto:"
#: editor/animation_track_editor.cpp
msgid "Anim Move Keys"
@@ -1645,7 +1586,7 @@ msgstr "Métodos"
#: editor/animation_track_editor.cpp
msgid "Bezier"
-msgstr ""
+msgstr "Bezier"
#: editor/animation_track_editor.cpp
#: modules/visual_script/visual_script_editor.cpp
@@ -2234,8 +2175,8 @@ msgid "Open"
msgstr "Abrir"
#: editor/dependency_editor.cpp
-msgid "Owners Of:"
-msgstr "Proprietários de:"
+msgid "Owners of: %s (Total: %d)"
+msgstr "Proprietários de: %s (Total: %d)"
#: editor/dependency_editor.cpp
msgid ""
@@ -2541,7 +2482,7 @@ msgid "Bus Options"
msgstr "Opções de Barramento"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/scene_tree_dock.cpp
+#: editor/project_export.cpp editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "Duplicar"
@@ -2800,6 +2741,24 @@ msgid "Choose"
msgstr "Escolha"
#: editor/editor_export.cpp
+msgid "Project export for platform:"
+msgstr "Exportação do projeto para plataforma:"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Completed with errors."
+msgstr "Copiar Caminho do Nó"
+
+#: editor/editor_export.cpp
+msgid "Completed successfully."
+msgstr "Completado com sucesso."
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed."
+msgstr "Falhou:"
+
+#: editor/editor_export.cpp
msgid "Storing File:"
msgstr "Armazenar o Ficheiro:"
@@ -2812,6 +2771,31 @@ msgid "Packing"
msgstr "Empacotamento"
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save PCK"
+msgstr "Guardar Como"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Cannot create file \"%s\"."
+msgstr "Não consegui criar pasta."
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to export project files."
+msgstr "Incapaz de exportar ficheiros do projeto"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Can't open file to read from path \"%s\"."
+msgstr "Incapaz de abrir o ficheiro para escrita:"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save ZIP"
+msgstr "Guardar Como"
+
+#: editor/editor_export.cpp
msgid ""
"Target platform requires 'ETC' texture compression for GLES2. Enable 'Import "
"Etc' in Project Settings."
@@ -2887,11 +2871,11 @@ msgstr "Formato Binário"
#: editor/editor_export.cpp
msgid "64 Bits"
-msgstr ""
+msgstr "64 Bits"
#: editor/editor_export.cpp
msgid "Embed PCK"
-msgstr ""
+msgstr "Incorporar PCK"
#: editor/editor_export.cpp platform/osx/export/export.cpp
#, fuzzy
@@ -2900,19 +2884,19 @@ msgstr "TextureRegion"
#: editor/editor_export.cpp
msgid "BPTC"
-msgstr ""
+msgstr "BPTC"
#: editor/editor_export.cpp platform/osx/export/export.cpp
msgid "S3TC"
-msgstr ""
+msgstr "S3TC"
#: editor/editor_export.cpp platform/osx/export/export.cpp
msgid "ETC"
-msgstr ""
+msgstr "ETC"
#: editor/editor_export.cpp platform/osx/export/export.cpp
msgid "ETC2"
-msgstr ""
+msgstr "ETC2"
#: editor/editor_export.cpp
#, fuzzy
@@ -2931,18 +2915,40 @@ msgstr "Modelo de depuração personalizado não encontrado."
msgid "Custom release template not found."
msgstr "Modelo de lançamento personalizado não encontrado."
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Prepare Template"
+msgstr "Gerir Modelos"
+
+#: editor/editor_export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "The given export path doesn't exist."
+msgstr "O caminho de exportação não existe:"
+
#: editor/editor_export.cpp platform/javascript/export/export.cpp
-msgid "Template file not found:"
+#, fuzzy
+msgid "Template file not found: \"%s\"."
msgstr "Ficheiro Modelo não encontrado:"
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to copy export template."
+msgstr "Modelo de exportação inválido:"
+
+#: editor/editor_export.cpp platform/windows/export/export.cpp
+#: platform/x11/export/export.cpp
+#, fuzzy
+msgid "PCK Embedding"
+msgstr "Preenchimento"
+
+#: editor/editor_export.cpp
msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB."
msgstr ""
"Em exportações de 32 bits o PCK incorporado não pode ser maior do que 4 GiB."
#: editor/editor_export.cpp
msgid "Convert Text Resources To Binary On Export"
-msgstr ""
+msgstr "Converter Recursos de Texto em Binário na Exportação"
#: editor/editor_feature_profile.cpp
msgid "3D Editor"
@@ -3107,9 +3113,9 @@ msgid "Import"
msgstr "Importar"
#: editor/editor_feature_profile.cpp editor/project_export.cpp
-#: platform/android/export/export.cpp platform/javascript/export/export.cpp
-#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
-#: platform/windows/export/export.cpp
+#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#: platform/uwp/export/export.cpp platform/windows/export/export.cpp
msgid "Export"
msgstr "Exportar"
@@ -3263,7 +3269,7 @@ msgstr "Alternar Ficheiros Escondidos"
#: editor/editor_file_dialog.cpp
msgid "Disable Overwrite Warning"
-msgstr ""
+msgstr "Desativar Aviso de Sobrescrita"
#: editor/editor_file_dialog.cpp
msgid "Go Back"
@@ -3366,7 +3372,7 @@ msgstr "A (Re)Importar Recursos"
#: editor/editor_file_system.cpp
msgid "Reimport Missing Imported Files"
-msgstr ""
+msgstr "Reimportar Arquivos Importados Ausentes"
#: editor/editor_help.cpp scene/2d/camera_2d.cpp scene/gui/control.cpp
#: scene/gui/nine_patch_rect.cpp scene/resources/dynamic_font.cpp
@@ -3477,7 +3483,7 @@ msgstr "Ajuda"
#: editor/editor_help.cpp
msgid "Sort Functions Alphabetically"
-msgstr ""
+msgstr "Classificar Funções em Ordem Alfabética"
#: editor/editor_help_search.cpp editor/editor_node.cpp
#: editor/plugins/script_editor_plugin.cpp
@@ -4265,14 +4271,8 @@ msgstr "%d mais Ficheiros"
msgid ""
"Unable to write to file '%s', file in use, locked or lacking permissions."
msgstr ""
-
-#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
-msgid "Scene"
-msgstr "Cena"
-
-#: editor/editor_node.cpp
-msgid "Scene Naming"
-msgstr "Nomear a Cena"
+"Não foi possível gravar no arquivo '%s', arquivo em uso, bloqueado ou sem "
+"permissões."
#: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp
#: servers/arvr/arvr_interface.cpp
@@ -4292,11 +4292,11 @@ msgstr "Mostrar Grelha Sempre"
#: editor/editor_node.cpp editor/editor_settings.cpp
msgid "Resize If Many Tabs"
-msgstr ""
+msgstr "Redimensionar se Houver Muitas Guias"
#: editor/editor_node.cpp editor/editor_settings.cpp
msgid "Minimum Width"
-msgstr ""
+msgstr "Largura Mínima"
#: editor/editor_node.cpp editor/editor_settings.cpp
msgid "Output"
@@ -4309,15 +4309,15 @@ msgstr "Limpar Saída"
#: editor/editor_node.cpp editor/editor_settings.cpp
msgid "Always Open Output On Play"
-msgstr ""
+msgstr "Sempre Abra a Saída na Reprodução"
#: editor/editor_node.cpp editor/editor_settings.cpp
msgid "Always Close Output On Stop"
-msgstr ""
+msgstr "Sempre Feche a Saída na Parada"
#: editor/editor_node.cpp
msgid "Save On Focus Loss"
-msgstr ""
+msgstr "Salvar ao Perder o Foco"
#: editor/editor_node.cpp editor/editor_settings.cpp
#, fuzzy
@@ -4354,7 +4354,7 @@ msgstr "Obter Nó da Cena"
#: editor/editor_node.cpp editor/editor_settings.cpp
msgid "Show Thumbnail On Hover"
-msgstr ""
+msgstr "Mostrar Miniatura ao Passar o Mouse Por Cima"
#: editor/editor_node.cpp editor/editor_settings.cpp
msgid "Inspector"
@@ -4366,7 +4366,7 @@ msgstr "Estilo de Nome da Propriedade Predefinida"
#: editor/editor_node.cpp
msgid "Default Float Step"
-msgstr ""
+msgstr "FloatStep Padrão"
#: editor/editor_node.cpp scene/gui/tree.cpp
#, fuzzy
@@ -4375,15 +4375,15 @@ msgstr "Desativar Botão"
#: editor/editor_node.cpp
msgid "Auto Unfold Foreign Scenes"
-msgstr ""
+msgstr "Desdobramento Automático de Cenas Estrangeiras"
#: editor/editor_node.cpp
msgid "Horizontal Vector2 Editing"
-msgstr ""
+msgstr "Edição Horizontal do Vector2"
#: editor/editor_node.cpp
msgid "Horizontal Vector Types Editing"
-msgstr ""
+msgstr "Edição de Tipo de Vetor Horizontal"
#: editor/editor_node.cpp
#, fuzzy
@@ -4397,7 +4397,11 @@ msgstr "Abrir no Inspetor"
#: editor/editor_node.cpp
msgid "Default Color Picker Mode"
-msgstr ""
+msgstr "Modo Seletor de Cores Padrão"
+
+#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
+msgid "Version Control"
+msgstr "Controle de Versões"
#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
msgid "Username"
@@ -4427,6 +4431,10 @@ msgstr "Alternar modo livre de distrações."
msgid "Add a new scene."
msgstr "Adicionar nova cena."
+#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
+msgid "Scene"
+msgstr "Cena"
+
#: editor/editor_node.cpp
msgid "Go to previously opened scene."
msgstr "Ir para cena aberta anteriormente."
@@ -4556,12 +4564,12 @@ msgid ""
"mobile device).\n"
"You don't need to enable it to use the GDScript debugger locally."
msgstr ""
-"Quando esta opção é ativada, ao usar distribuição por um clique o executável "
-"irá tentar ligar-se ao endereço IP deste computador, para que o projeto "
-"possa ser depurado.\n"
-"Esta opção foi criada para ser usada pela depuração remota (tipicamente com "
-"um aparelho móvel).\n"
-"Não é necessário ativá-la para usar o depurador de GDScript localmente."
+"Quando esta opção está habilitada, Distribuição por um clique que fará o "
+"executável tentar se conectar ao IP deste computador e então o projeto atual "
+"pode ser depurado.\n"
+"Essa opção foi pensada para ser usada em depuração remota (normalmente com "
+"dispositivos móveis).\n"
+"Você não precisa habilitá-la para usar o depurador do GDScript localmente."
#: editor/editor_node.cpp
msgid "Small Deploy with Network Filesystem"
@@ -4578,9 +4586,9 @@ msgid ""
msgstr ""
"Quando esta opção é ativada, a distribuição por um clique para Android vai "
"exportar um executável sem os dados do projeto.\n"
-"O Sistema de Ficheiros será fornecido ao Projeto pelo Editor sobre a rede.\n"
-"Em Android, a distribuição irá usar a ligação USB para melhor performance. "
-"Esta opção acelera o teste de jogos pesados."
+"O sistema de arquivos será fornecido ao projeto pelo editor sobre a rede.\n"
+"Em Android, a distribuição irá usar o cabo USB para melhor performance. Esta "
+"opção acelera o teste para projetos com assets grandes ."
#: editor/editor_node.cpp
msgid "Visible Collision Shapes"
@@ -4591,8 +4599,8 @@ msgid ""
"When this option is enabled, collision shapes and raycast nodes (for 2D and "
"3D) will be visible in the running project."
msgstr ""
-"Quando esta opção está ativada, as formas de colisões e nós raycast (para 2D "
-"e 3D) serão visíveis no projeto em execução."
+"Quando esta opção está ativada, as formas de colisões e nós de raycast (para "
+"2D e 3D) serão visíveis no projeto em execução."
#: editor/editor_node.cpp
msgid "Visible Navigation"
@@ -5044,7 +5052,7 @@ msgstr "Depurador"
#: editor/editor_profiler.cpp
msgid "Profiler Frame History Size"
-msgstr ""
+msgstr "Tamanho do Histórico do Perfilador de Quadro"
#: editor/editor_profiler.cpp
#, fuzzy
@@ -5220,6 +5228,11 @@ msgstr ""
"Adicione um executável pré-definido no menu de exportação ou defina um pré-"
"definido existente como executável."
+#: editor/editor_run_native.cpp
+#, fuzzy
+msgid "Project Run"
+msgstr "Projeto"
+
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
msgstr "Escreva a sua lógica no Método _run()."
@@ -5256,23 +5269,23 @@ msgstr "Mostrar Tudo"
#: editor/editor_settings.cpp
msgid "Custom Display Scale"
-msgstr ""
+msgstr "Escala de Exibição Personalizada"
#: editor/editor_settings.cpp
msgid "Main Font Size"
-msgstr ""
+msgstr "Tamanho da Fonte Principal"
#: editor/editor_settings.cpp
msgid "Code Font Size"
-msgstr ""
+msgstr "Tamanho da Fonte do Código"
#: editor/editor_settings.cpp
msgid "Font Antialiased"
-msgstr ""
+msgstr "Fonte Suave"
#: editor/editor_settings.cpp
msgid "Font Hinting"
-msgstr ""
+msgstr "Alinhar Fonte"
#: editor/editor_settings.cpp
#, fuzzy
@@ -5281,7 +5294,7 @@ msgstr "Cena Principal"
#: editor/editor_settings.cpp
msgid "Main Font Bold"
-msgstr ""
+msgstr "Fonte Principal em Negrito"
#: editor/editor_settings.cpp
#, fuzzy
@@ -5290,15 +5303,15 @@ msgstr "Adicionar Ponto Nó"
#: editor/editor_settings.cpp
msgid "Dim Editor On Dialog Popup"
-msgstr ""
+msgstr "Atenuar Editor na Caixa de Diálogo de Popup"
#: editor/editor_settings.cpp main/main.cpp
msgid "Low Processor Mode Sleep (µsec)"
-msgstr ""
+msgstr "Duração do Modo de Baixo Consumo do Processador (µsec)"
#: editor/editor_settings.cpp
msgid "Unfocused Low Processor Mode Sleep (µsec)"
-msgstr ""
+msgstr "Duração do Modo de Baixo Consumo do Processador Fora de Foco (µsec)"
#: editor/editor_settings.cpp
#, fuzzy
@@ -5307,11 +5320,11 @@ msgstr "Modo Livre de Distrações"
#: editor/editor_settings.cpp
msgid "Automatically Open Screenshots"
-msgstr ""
+msgstr "Abrir Capturas de Tela Automaticamente"
#: editor/editor_settings.cpp
msgid "Max Array Dictionary Items Per Page"
-msgstr ""
+msgstr "Máximo de Itens de Dicionário de Array por Página"
#: editor/editor_settings.cpp editor/plugins/script_editor_plugin.cpp
#: editor/plugins/theme_editor_plugin.cpp scene/gui/control.cpp
@@ -5325,81 +5338,71 @@ msgstr "Predefinições"
#: editor/editor_settings.cpp
msgid "Icon And Font Color"
-msgstr ""
+msgstr "Ãcone e Cor da Fonte"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Base Color"
-msgstr "Cores"
+msgstr "Cor Base"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Accent Color"
-msgstr "Escolher cor"
+msgstr "Cor de Destaque"
#: editor/editor_settings.cpp scene/resources/environment.cpp
msgid "Contrast"
-msgstr ""
+msgstr "Contraste"
#: editor/editor_settings.cpp
msgid "Relationship Line Opacity"
-msgstr ""
+msgstr "Opacidade da Linha de Relacionamento"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Highlight Tabs"
-msgstr "A guardar lightmaps"
+msgstr "Destacar Guias"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Border Size"
-msgstr "Pixeis da Margem"
+msgstr "Tamanho da Borda"
#: editor/editor_settings.cpp
msgid "Use Graph Node Headers"
-msgstr ""
+msgstr "Usar Cabeçalhos de Nós de Gráficos"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Additional Spacing"
-msgstr "Loop da Animação"
+msgstr "Espaçamento Adicional"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Custom Theme"
-msgstr "Editor de Tema"
+msgstr "Tema Personalizado"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Show Script Button"
-msgstr "Roda Botão Direito"
+msgstr "Mostrar Botão de Script"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Directories"
-msgstr "Direções"
+msgstr "Diretórios"
#: editor/editor_settings.cpp
msgid "Autoscan Project Path"
-msgstr "Autoscan Caminho do Projeto"
+msgstr "Verificação Automática do Caminho do Projeto"
#: editor/editor_settings.cpp
msgid "Default Project Path"
-msgstr "Caminho do Projeto Predefinido"
+msgstr "Caminho Padrão do Projeto"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "On Save"
-msgstr "Guardar"
+msgstr "Ao Salvar"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Compress Binary Resources"
-msgstr "Copiar Recurso"
+msgstr "Comprimir Recursos Binários"
#: editor/editor_settings.cpp
msgid "Safe Save On Backup Then Rename"
-msgstr ""
+msgstr "Salvar com Segurança no Backup e Renomear"
#: editor/editor_settings.cpp
#, fuzzy
@@ -5412,7 +5415,7 @@ msgstr "Tamanho da Miniatura"
#: editor/editor_settings.cpp
msgid "Docks"
-msgstr ""
+msgstr "Painéis"
#: editor/editor_settings.cpp
#, fuzzy
@@ -5421,7 +5424,7 @@ msgstr "Obter Ãrvore da Cena"
#: editor/editor_settings.cpp
msgid "Start Create Dialog Fully Expanded"
-msgstr ""
+msgstr "Iniciar Diálogo de Criação Totalmente Expandido"
#: editor/editor_settings.cpp
#, fuzzy
@@ -5435,7 +5438,7 @@ msgstr "Editor de Grupo"
#: editor/editor_settings.cpp
msgid "Auto Refresh Interval"
-msgstr ""
+msgstr "Intervalo de Atualização Automática"
#: editor/editor_settings.cpp
#, fuzzy
@@ -5450,13 +5453,12 @@ msgstr "Editor de Tema"
#: editor/editor_settings.cpp scene/3d/label_3d.cpp
#: scene/resources/default_theme/default_theme.cpp
msgid "Line Spacing"
-msgstr ""
+msgstr "Espaçamento de Linha"
#: editor/editor_settings.cpp editor/plugins/script_text_editor.cpp
#: modules/gdscript/editor/gdscript_highlighter.cpp
-#, fuzzy
msgid "Highlighting"
-msgstr "Iluminação direta"
+msgstr "Destaque"
#: editor/editor_settings.cpp scene/gui/text_edit.cpp
#, fuzzy
@@ -5465,15 +5467,15 @@ msgstr "Destaque de Sintaxe"
#: editor/editor_settings.cpp scene/gui/text_edit.cpp
msgid "Highlight All Occurrences"
-msgstr ""
+msgstr "Destacar Todas as Ocorrências"
#: editor/editor_settings.cpp scene/gui/text_edit.cpp
msgid "Highlight Current Line"
-msgstr ""
+msgstr "Destacar Linha Atual"
#: editor/editor_settings.cpp editor/plugins/script_text_editor.cpp
msgid "Highlight Type Safe Lines"
-msgstr ""
+msgstr "Destacar Linhas com Tipo Seguro"
#: editor/editor_settings.cpp
#, fuzzy
@@ -5498,17 +5500,19 @@ msgid "Draw Spaces"
msgstr "Desenhar Espaços"
#: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp
-#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp
+#: scene/main/scene_tree.cpp scene/resources/world.cpp
+#: scene/resources/world_2d.cpp
msgid "Navigation"
msgstr "Navegação"
#: editor/editor_settings.cpp scene/gui/text_edit.cpp
msgid "Smooth Scrolling"
-msgstr ""
+msgstr "Rolagem Suave"
#: editor/editor_settings.cpp scene/gui/text_edit.cpp
msgid "V Scroll Speed"
-msgstr ""
+msgstr "Velocidade de Rolagem V"
#: editor/editor_settings.cpp
#, fuzzy
@@ -5517,15 +5521,15 @@ msgstr "Mostrar Origem"
#: editor/editor_settings.cpp
msgid "Minimap Width"
-msgstr ""
+msgstr "Largura do Minimapa"
#: editor/editor_settings.cpp
msgid "Mouse Extra Buttons Navigate History"
-msgstr ""
+msgstr "Botões extra do Mouse para Navegar no Histórico"
#: editor/editor_settings.cpp
msgid "Appearance"
-msgstr ""
+msgstr "Aparência"
#: editor/editor_settings.cpp scene/gui/text_edit.cpp
msgid "Show Line Numbers"
@@ -5537,7 +5541,7 @@ msgstr "Números da Linha Preenchidos com Zeros"
#: editor/editor_settings.cpp
msgid "Show Bookmark Gutter"
-msgstr ""
+msgstr "Mostrar Barra de Favoritos"
#: editor/editor_settings.cpp
#, fuzzy
@@ -5546,27 +5550,27 @@ msgstr "Saltar Pontos de Paragem"
#: editor/editor_settings.cpp
msgid "Show Info Gutter"
-msgstr ""
+msgstr "Mostrar Barra de Informações"
#: editor/editor_settings.cpp
msgid "Code Folding"
-msgstr ""
+msgstr "Agrupamento de Código"
#: editor/editor_settings.cpp
msgid "Word Wrap"
-msgstr ""
+msgstr "Quebra de Palavras"
#: editor/editor_settings.cpp
msgid "Show Line Length Guidelines"
-msgstr ""
+msgstr "Exibir Guias de Comprimento de Linha"
#: editor/editor_settings.cpp
msgid "Line Length Guideline Soft Column"
-msgstr ""
+msgstr "Diretriz de Comprimento de Linha de Coluna Flexível"
#: editor/editor_settings.cpp
msgid "Line Length Guideline Hard Column"
-msgstr ""
+msgstr "Diretriz de Comprimento de Linha de Coluna Rígida"
#: editor/editor_settings.cpp editor/plugins/script_editor_plugin.cpp
#, fuzzy
@@ -5575,7 +5579,7 @@ msgstr "Editor de Script"
#: editor/editor_settings.cpp
msgid "Show Members Overview"
-msgstr ""
+msgstr "Mostrar Visão Geral dos Membros"
#: editor/editor_settings.cpp editor/plugins/script_editor_plugin.cpp
#, fuzzy
@@ -5589,19 +5593,19 @@ msgstr "Apagar Espaços nos Limites"
#: editor/editor_settings.cpp
msgid "Autosave Interval Secs"
-msgstr ""
+msgstr "Segundos de Intervalo de Salvamento Automático"
#: editor/editor_settings.cpp editor/plugins/script_editor_plugin.cpp
msgid "Restore Scripts On Load"
-msgstr ""
+msgstr "Restaurar Scripts ao Carregar"
#: editor/editor_settings.cpp
msgid "Auto Reload And Parse Scripts On Save"
-msgstr ""
+msgstr "Auto Recarrega e Analisa de Scripts ao Salvar"
#: editor/editor_settings.cpp
msgid "Auto Reload Scripts On External Change"
-msgstr ""
+msgstr "Recarregamento Automático de Scripts em Caso de Mudança Externa"
#: editor/editor_settings.cpp
#, fuzzy
@@ -5610,27 +5614,27 @@ msgstr "Forçar Shader de Reserva"
#: editor/editor_settings.cpp
msgid "Sort Members Outline Alphabetically"
-msgstr ""
+msgstr "Ordenar Esquema de Membros em Ordem Alfabética"
#: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp
msgid "Cursor"
-msgstr ""
+msgstr "Cursor"
#: editor/editor_settings.cpp
msgid "Scroll Past End Of File"
-msgstr ""
+msgstr "Rolar Além do Final do Arquivo"
#: editor/editor_settings.cpp
msgid "Block Caret"
-msgstr ""
+msgstr "Cursor em Bloco"
#: editor/editor_settings.cpp
msgid "Caret Blink"
-msgstr ""
+msgstr "Cursor Piscando"
#: editor/editor_settings.cpp
msgid "Caret Blink Speed"
-msgstr ""
+msgstr "Velocidade do Piscamento do Cursor"
#: editor/editor_settings.cpp
#, fuzzy
@@ -5645,23 +5649,23 @@ msgstr "Conclusão"
#: editor/editor_settings.cpp
msgid "Idle Parse Delay"
-msgstr ""
+msgstr "Atraso de Análise de Inatividade"
#: editor/editor_settings.cpp
msgid "Auto Brace Complete"
-msgstr ""
+msgstr "Autocompletar Parênteses"
#: editor/editor_settings.cpp
msgid "Code Complete Delay"
-msgstr ""
+msgstr "Atraso no Auto Completar do Código"
#: editor/editor_settings.cpp
msgid "Put Callhint Tooltip Below Current Line"
-msgstr ""
+msgstr "Mostrar Sugestão de Chamada Abaixo da Linha Atual"
#: editor/editor_settings.cpp
msgid "Callhint Tooltip Offset"
-msgstr ""
+msgstr "Deslocamento da Sugestão de Chamada"
#: editor/editor_settings.cpp
#, fuzzy
@@ -5684,15 +5688,15 @@ msgstr "Mostrar Ajudantes"
#: editor/editor_settings.cpp
msgid "Help Font Size"
-msgstr ""
+msgstr "Tamanho da Fonte de Ajuda"
#: editor/editor_settings.cpp
msgid "Help Source Font Size"
-msgstr ""
+msgstr "Tamanho da Fonte de Código de Ajuda"
#: editor/editor_settings.cpp
msgid "Help Title Font Size"
-msgstr ""
+msgstr "Tamanho da Fonte do Título da Ajuda"
#: editor/editor_settings.cpp modules/gridmap/grid_map_editor_plugin.cpp
msgid "Grid Map"
@@ -5709,11 +5713,11 @@ msgstr "Pré-visualização"
#: editor/editor_settings.cpp
msgid "Primary Grid Color"
-msgstr ""
+msgstr "Cor da Grade Primária"
#: editor/editor_settings.cpp
msgid "Secondary Grid Color"
-msgstr ""
+msgstr "Cor da Grade Secundária"
#: editor/editor_settings.cpp
#, fuzzy
@@ -5750,7 +5754,7 @@ msgstr "Ponto"
#: scene/resources/particles_material.cpp servers/physics_2d_server.cpp
#: servers/physics_server.cpp
msgid "Shape"
-msgstr ""
+msgstr "Forma"
#: editor/editor_settings.cpp
msgid "Primary Grid Steps"
@@ -5762,15 +5766,15 @@ msgstr "Tamanho da Grelha"
#: editor/editor_settings.cpp
msgid "Grid Division Level Max"
-msgstr ""
+msgstr "Nível Máximo de Divisão de Grade"
#: editor/editor_settings.cpp
msgid "Grid Division Level Min"
-msgstr ""
+msgstr "Nível Mínimo de Divisão de Grade"
#: editor/editor_settings.cpp
msgid "Grid Division Level Bias"
-msgstr ""
+msgstr "Viés de Nível de Divisão de Grade"
#: editor/editor_settings.cpp
#, fuzzy
@@ -5804,7 +5808,7 @@ msgstr "Predefinição"
#: editor/editor_settings.cpp
msgid "Lightmap Baking Number Of CPU Threads"
-msgstr ""
+msgstr "Número de threads da CPU para Baking do Mapa de luz"
#: editor/editor_settings.cpp
#, fuzzy
@@ -5828,11 +5832,11 @@ msgstr "Diminuir Zoom"
#: editor/editor_settings.cpp
msgid "Emulate Numpad"
-msgstr ""
+msgstr "Emular Teclado Numérico"
#: editor/editor_settings.cpp
msgid "Emulate 3 Button Mouse"
-msgstr ""
+msgstr "Emular Mouse de 3 Botões"
#: editor/editor_settings.cpp
#, fuzzy
@@ -5851,7 +5855,7 @@ msgstr "Modificado"
#: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp
msgid "Warped Mouse Panning"
-msgstr ""
+msgstr "Panorama do Mouse Distorcido"
#: editor/editor_settings.cpp
#, fuzzy
@@ -5860,11 +5864,11 @@ msgstr "Modo Navegação"
#: editor/editor_settings.cpp
msgid "Orbit Sensitivity"
-msgstr ""
+msgstr "Sensibilidade da Órbita"
#: editor/editor_settings.cpp
msgid "Orbit Inertia"
-msgstr ""
+msgstr "Inércia da Órbita"
#: editor/editor_settings.cpp
#, fuzzy
@@ -5928,7 +5932,7 @@ msgstr "Ajuste Inteligente"
#: editor/editor_settings.cpp
msgid "Bone Width"
-msgstr ""
+msgstr "Largura do Osso"
#: editor/editor_settings.cpp
#, fuzzy
@@ -5946,11 +5950,11 @@ msgstr "Cor dos Ossos Selecionados"
#: editor/editor_settings.cpp
msgid "Bone IK Color"
-msgstr ""
+msgstr "Cor do Osso IK"
#: editor/editor_settings.cpp
msgid "Bone Outline Color"
-msgstr ""
+msgstr "Color do Contorno do Osso"
#: editor/editor_settings.cpp
msgid "Bone Outline Size"
@@ -5958,19 +5962,19 @@ msgstr "Tamanho do Contorno dos Ossos"
#: editor/editor_settings.cpp
msgid "Viewport Border Color"
-msgstr ""
+msgstr "Cor da borda do Viewport"
#: editor/editor_settings.cpp
msgid "Constrain Editor View"
-msgstr ""
+msgstr "Restringir a Visualização do Editor"
#: editor/editor_settings.cpp
msgid "Simple Panning"
-msgstr ""
+msgstr "Panorâmica Simples"
#: editor/editor_settings.cpp
msgid "Scroll To Pan"
-msgstr ""
+msgstr "Rolar para Arrastar"
#: editor/editor_settings.cpp
msgid "Pan Speed"
@@ -5983,7 +5987,7 @@ msgstr "Editor UV de Polígono 2D"
#: editor/editor_settings.cpp
msgid "Point Grab Radius"
-msgstr ""
+msgstr "Raio do Ponto de Captura"
#: editor/editor_settings.cpp editor/plugins/polygon_2d_editor_plugin.cpp
#, fuzzy
@@ -5997,7 +6001,7 @@ msgstr "Renomear Animação"
#: editor/editor_settings.cpp
msgid "Default Create Bezier Tracks"
-msgstr ""
+msgstr "Criar Faixas de Bézier Padrão"
#: editor/editor_settings.cpp
#, fuzzy
@@ -6006,84 +6010,77 @@ msgstr "Criar Pista(s) RESET"
#: editor/editor_settings.cpp
msgid "Onion Layers Past Color"
-msgstr ""
+msgstr "Camadas de Cebola Cor Passada"
#: editor/editor_settings.cpp
msgid "Onion Layers Future Color"
-msgstr ""
+msgstr "Camadas de Cebola Cor Futura"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Visual Editors"
-msgstr "Editor de Grupo"
+msgstr "Editor Visual"
#: editor/editor_settings.cpp
msgid "Minimap Opacity"
-msgstr ""
+msgstr "Opacidade do Minimapa"
#: editor/editor_settings.cpp
msgid "Window Placement"
-msgstr ""
+msgstr "Posicionamento da Janela"
#: editor/editor_settings.cpp scene/2d/back_buffer_copy.cpp scene/2d/sprite.cpp
#: scene/2d/visibility_notifier_2d.cpp scene/3d/sprite_3d.cpp
#: scene/gui/control.cpp
-#, fuzzy
msgid "Rect"
-msgstr "Rect Completo"
+msgstr "Retângulo"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Rect Custom Position"
-msgstr "Definir posição Curve Out"
+msgstr "Posição Personalizada do Retângulo"
#: editor/editor_settings.cpp platform/android/export/export_plugin.cpp
msgid "Screen"
-msgstr ""
+msgstr "Tela"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Auto Save"
-msgstr "Corte automático"
+msgstr "Salvamento Automático"
#: editor/editor_settings.cpp
msgid "Save Before Running"
-msgstr "Guardar Antes de Executar"
+msgstr "Salvar Antes de Executar"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Font Size"
-msgstr "Vista de Frente"
+msgstr "Tamanho da Fonte"
#: editor/editor_settings.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
msgid "Remote Host"
-msgstr "Hospedeiro Remoto"
+msgstr "Host Remoto"
#: editor/editor_settings.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
-#, fuzzy
msgid "Remote Port"
-msgstr "Remover Ponto"
+msgstr "Porta Remota"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Editor SSL Certificates"
-msgstr "Configurações do Editor"
+msgstr "Editor de Certificados SSL"
#: editor/editor_settings.cpp
msgid "HTTP Proxy"
-msgstr ""
+msgstr "Proxy HTTP"
#: editor/editor_settings.cpp
msgid "Host"
-msgstr ""
+msgstr "Host"
#: editor/editor_settings.cpp editor/fileserver/editor_file_server.cpp
#: main/main.cpp modules/mono/mono_gd/gd_mono.cpp
#: scene/resources/default_theme/default_theme.cpp
msgid "Port"
-msgstr ""
+msgstr "Porta"
#. TRANSLATORS: Project Manager here refers to the tool used to create/manage Godot projects.
#: editor/editor_settings.cpp
@@ -6097,36 +6094,35 @@ msgstr "Ordem de Classificação"
#: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp
msgid "Symbol Color"
-msgstr ""
+msgstr "Cor do Símbolo"
#: editor/editor_settings.cpp
msgid "Keyword Color"
-msgstr ""
+msgstr "Cor da Palavra-Chave"
#: editor/editor_settings.cpp
msgid "Control Flow Keyword Color"
-msgstr ""
+msgstr "Cor da Palavra-Chave do Fluxo de Controle"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Base Type Color"
-msgstr "Mudar tipo base"
+msgstr "Cor do Tipo Base"
#: editor/editor_settings.cpp
msgid "Engine Type Color"
-msgstr ""
+msgstr "Cor do Tipo de Motor"
#: editor/editor_settings.cpp
msgid "User Type Color"
-msgstr ""
+msgstr "Cor do Tipo de Usuário"
#: editor/editor_settings.cpp
msgid "Comment Color"
-msgstr ""
+msgstr "Cor do Comentário"
#: editor/editor_settings.cpp
msgid "String Color"
-msgstr "Cor da Cadeia"
+msgstr "Cor da String"
#: editor/editor_settings.cpp platform/javascript/export/export.cpp
#: platform/uwp/export/export.cpp
@@ -6136,29 +6132,27 @@ msgstr "Cor de Fundo"
#: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp
msgid "Completion Background Color"
-msgstr "Conclusão da Cor de Fundo"
+msgstr "Cor de Preenchimento de Fundo"
#: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp
-#, fuzzy
msgid "Completion Selected Color"
-msgstr "Importar Selecionado"
+msgstr "Cor de Preenchimento Selecionada"
#: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp
msgid "Completion Existing Color"
-msgstr ""
+msgstr "Cor de Preenchimento Existente"
#: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp
msgid "Completion Scroll Color"
-msgstr ""
+msgstr "Cor de Preenchimento de Rolagem"
#: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp
msgid "Completion Font Color"
-msgstr ""
+msgstr "Cor de Preenchimento de Fonte"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Text Color"
-msgstr "Próximo Piso"
+msgstr "Cor do Texto"
#: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp
msgid "Line Number Color"
@@ -6170,86 +6164,75 @@ msgstr "Cor do Número da Linha Segura"
#: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp
msgid "Caret Color"
-msgstr ""
+msgstr "Cor do Cursor"
#: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp
msgid "Caret Background Color"
msgstr "Cor de Fundo do Cursor"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Text Selected Color"
-msgstr "Apagar Selecionado"
+msgstr "Cor do Texto Selecionado"
#: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp
-#, fuzzy
msgid "Selection Color"
-msgstr "Apenas seleção"
+msgstr "Cor da Seleção"
#: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp
msgid "Brace Mismatch Color"
-msgstr ""
+msgstr "Cor da Incompatibilidade de Fechamento de Chaves"
#: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp
-#, fuzzy
msgid "Current Line Color"
-msgstr "Cena Atual"
+msgstr "Cor da Linha Atual"
#: editor/editor_settings.cpp
msgid "Line Length Guideline Color"
-msgstr ""
+msgstr "Cor da Diretriz do Comprimento da Linha"
#: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp
-#, fuzzy
msgid "Word Highlighted Color"
-msgstr "Destaque de Sintaxe"
+msgstr "Cor da Palavra Destacada"
#: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp
msgid "Number Color"
-msgstr ""
+msgstr "Cor do Número"
#: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp
-#, fuzzy
msgid "Function Color"
-msgstr "Função"
+msgstr "Cor da Função"
#: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp
-#, fuzzy
msgid "Member Variable Color"
-msgstr "Mudar nome da Variável"
+msgstr "Cor da Variável de Membro"
#: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp
-#, fuzzy
msgid "Mark Color"
-msgstr "Escolher cor"
+msgstr "Cor da Marca"
#: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp
-#, fuzzy
msgid "Bookmark Color"
-msgstr "Marcadores"
+msgstr "Cor dos Favoritos"
#: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp
-#, fuzzy
msgid "Breakpoint Color"
-msgstr "Pontos de paragem"
+msgstr "Color do Breakpoint"
#: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp
msgid "Executing Line Color"
-msgstr ""
+msgstr "Cor da Linha em Execução"
#: editor/editor_settings.cpp scene/resources/default_theme/default_theme.cpp
msgid "Code Folding Color"
-msgstr ""
+msgstr "Cor do Agrupamento de Código"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Search Result Color"
-msgstr "Resultados da Pesquisa"
+msgstr "Color dos Resultados da Pesquisa"
#: editor/editor_settings.cpp
-#, fuzzy
msgid "Search Result Border Color"
-msgstr "Resultados da Pesquisa"
+msgstr "Cor da Borda dos Resultados da Pesquisa"
#: editor/editor_spin_slider.cpp
msgid "Hold %s to round to integers. Hold Shift for more precise changes."
@@ -6258,14 +6241,12 @@ msgstr ""
"mais precisas."
#: editor/editor_spin_slider.cpp scene/gui/button.cpp
-#, fuzzy
msgid "Flat"
-msgstr "Plano 0"
+msgstr "Flat"
#: editor/editor_spin_slider.cpp
-#, fuzzy
msgid "Hide Slider"
-msgstr "Modo Colisão"
+msgstr "Ocultar Slider"
#: editor/editor_sub_scene.cpp
msgid "Select Node(s) to Import"
@@ -6561,7 +6542,7 @@ msgstr ""
#: editor/fileserver/editor_file_server.cpp
msgid "File Server"
-msgstr ""
+msgstr "Servidor de Arquivos"
#: editor/fileserver/editor_file_server.cpp
#: editor/plugins/version_control_editor_plugin.cpp
@@ -6629,6 +6610,11 @@ msgid ""
"After renaming to an unknown extension, the file won't be shown in the "
"editor anymore."
msgstr ""
+"Esta extensão de arquivo não é reconhecida pelo editor.\n"
+"Se você de qualquer maneira quiser renomeá-lo, use o gerenciador de arquivos "
+"do seu sistema operacional.\n"
+"Após renomear para uma extensão desconhecida, o arquivo não será mais "
+"exibido no editor."
#: editor/filesystem_dock.cpp
msgid ""
@@ -6929,11 +6915,11 @@ msgstr "Gerir Grupos"
#: editor/import/editor_import_collada.cpp
msgid "Collada"
-msgstr ""
+msgstr "Collada"
#: editor/import/editor_import_collada.cpp
msgid "Use Ambient"
-msgstr ""
+msgstr "Usar Ambiente"
#: editor/import/resource_importer_bitmask.cpp
#, fuzzy
@@ -6943,7 +6929,7 @@ msgstr "Criar Pasta"
#: editor/import/resource_importer_bitmask.cpp
#: servers/audio/effects/audio_effect_compressor.cpp
msgid "Threshold"
-msgstr ""
+msgstr "Limite"
#: editor/import/resource_importer_csv_translation.cpp
#: editor/import/resource_importer_layered_texture.cpp
@@ -6956,7 +6942,7 @@ msgstr "Componentes"
#: editor/import/resource_importer_csv_translation.cpp
msgid "Delimiter"
-msgstr ""
+msgstr "Delimitador"
#: editor/import/resource_importer_layered_texture.cpp
#, fuzzy
@@ -6965,7 +6951,7 @@ msgstr "Função Cor."
#: editor/import/resource_importer_layered_texture.cpp
msgid "No BPTC If RGB"
-msgstr ""
+msgstr "Sem BPTC Se RGB"
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp scene/2d/cpu_particles_2d.cpp
@@ -6973,17 +6959,17 @@ msgstr ""
#: scene/resources/material.cpp scene/resources/particles_material.cpp
#: scene/resources/texture.cpp scene/resources/visual_shader.cpp
msgid "Flags"
-msgstr ""
+msgstr "Flags"
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp scene/animation/tween.cpp
#: scene/resources/texture.cpp
msgid "Repeat"
-msgstr ""
+msgstr "Repetir"
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp
-#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp
+#: scene/gui/control.cpp
msgid "Filter"
msgstr "Filtro"
@@ -6996,12 +6982,12 @@ msgstr "Sinais"
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp
msgid "Anisotropic"
-msgstr ""
+msgstr "Anisotrópico"
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp
msgid "sRGB"
-msgstr ""
+msgstr "sRGB"
#: editor/import/resource_importer_layered_texture.cpp
#, fuzzy
@@ -7028,23 +7014,21 @@ msgid "Generate Tangents"
msgstr "Gerar Pontos"
#: editor/import/resource_importer_obj.cpp
-#, fuzzy
msgid "Scale Mesh"
-msgstr "Modo Escalar"
+msgstr "Escalar Forma"
#: editor/import/resource_importer_obj.cpp
msgid "Offset Mesh"
-msgstr "Malha de Compensação"
+msgstr "Forma de Compensação"
#: editor/import/resource_importer_obj.cpp
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Octahedral Compression"
-msgstr "Expressão"
+msgstr "Compressão Octaédrica"
#: editor/import/resource_importer_obj.cpp
msgid "Optimize Mesh Flags"
-msgstr "Otimizar Flags da Malha"
+msgstr "Otimizar Flags da Forma"
#: editor/import/resource_importer_scene.cpp
msgid "Import as Single Scene"
@@ -7088,29 +7072,24 @@ msgstr "Importar como Cenas Múltiplas + Materiais"
#: editor/import/resource_importer_scene.cpp modules/gltf/gltf_state.cpp
#: scene/3d/physics_joint.cpp
-#, fuzzy
msgid "Nodes"
-msgstr "Nó"
+msgstr "Nós"
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Root Type"
-msgstr "Voltar"
+msgstr "Tipo da Raiz"
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Root Name"
-msgstr "Nome do Remoto"
+msgstr "Nome da Raiz"
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Root Scale"
-msgstr "Escala"
+msgstr "Escala da Raiz"
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Custom Script"
-msgstr "CustomNode"
+msgstr "Script Personalizado"
#: editor/import/resource_importer_scene.cpp scene/resources/texture.cpp
msgid "Storage"
@@ -7118,54 +7097,47 @@ msgstr "Armazenamento"
#: editor/import/resource_importer_scene.cpp
msgid "Use Legacy Names"
-msgstr ""
+msgstr "Usar Nomes Legados"
#: editor/import/resource_importer_scene.cpp modules/gltf/gltf_state.cpp
msgid "Materials"
msgstr "Materiais"
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Keep On Reimport"
-msgstr "Reimportar"
+msgstr "Manter ao Reimportar"
#: editor/import/resource_importer_scene.cpp modules/gltf/gltf_state.cpp
-#, fuzzy
msgid "Meshes"
-msgstr "Malha"
+msgstr "Malhas"
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Ensure Tangents"
-msgstr "Modificar tangente da curva"
+msgstr "Assegurar Tangentes"
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Light Baking"
-msgstr "Consolidar Lightmaps"
+msgstr "Baking de Luz"
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Lightmap Texel Size"
-msgstr "Consolidar Lightmaps"
+msgstr "Tamanho do Texel do Mapa de Luz"
#: editor/import/resource_importer_scene.cpp modules/gltf/gltf_state.cpp
msgid "Skins"
-msgstr ""
+msgstr "Skins"
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Use Named Skins"
-msgstr "Usar Ajuste de Escala"
+msgstr "Usar Skins com Nome"
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "External Files"
-msgstr "Abrir um Ficheiro"
+msgstr "Arquivos Externos"
#: editor/import/resource_importer_scene.cpp
msgid "Store In Subdir"
-msgstr ""
+msgstr "Armazenar no Subdiretório"
#: editor/import/resource_importer_scene.cpp
#, fuzzy
@@ -7241,13 +7213,12 @@ msgid "Generating Lightmaps"
msgstr "A gerar Lightmaps"
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Generating for Mesh:"
-msgstr "A gerar para Malha: "
+msgstr "Gerar para Forma:"
#: editor/import/resource_importer_scene.cpp
msgid "Running Custom Script..."
-msgstr "A executar Script Customizado..."
+msgstr "A executar Script Personalizado..."
#: editor/import/resource_importer_scene.cpp
msgid "Couldn't load post-import script:"
@@ -7270,147 +7241,152 @@ msgid "Saving..."
msgstr "A guardar..."
#: editor/import/resource_importer_texture.cpp
-msgid "2D, Detect 3D"
+msgid ""
+"%s: Texture detected as used as a normal map in 3D. Enabling red-green "
+"texture compression to reduce memory usage (blue channel is discarded)."
msgstr ""
+"%s: Textura detectada como usada como mapa normal em 3D. Ativando a "
+"compactação de textura vermelho-verde para reduzir o uso de memória (o canal "
+"azul é descartado)."
+
+#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap "
+"generation and VRAM texture compression."
+msgstr ""
+"%s: Textura detectada como usada em 3D. Ativando filtro, repetição, geração "
+"de mapa MIP e compressão de textura VRAM."
+
+#: editor/import/resource_importer_texture.cpp
+msgid "2D, Detect 3D"
+msgstr "2D, Detectar 3D"
#: editor/import/resource_importer_texture.cpp
-#, fuzzy
msgid "2D Pixel"
-msgstr "Pixeis Sólidos"
+msgstr "Pixel 2D"
#: editor/import/resource_importer_texture.cpp scene/resources/texture.cpp
msgid "Lossy Quality"
-msgstr ""
+msgstr "Qualidade com Perdas"
#: editor/import/resource_importer_texture.cpp
-#, fuzzy
msgid "HDR Mode"
-msgstr "Modo Seleção"
+msgstr "Modo HDR"
#: editor/import/resource_importer_texture.cpp
msgid "BPTC LDR"
-msgstr ""
+msgstr "BPTC LDR"
#: editor/import/resource_importer_texture.cpp
#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/cpu_particles_2d.cpp
#: scene/2d/mesh_instance_2d.cpp scene/2d/multimesh_instance_2d.cpp
#: scene/2d/particles_2d.cpp scene/2d/sprite.cpp scene/resources/style_box.cpp
msgid "Normal Map"
-msgstr ""
+msgstr "Mapa Normal"
#: editor/import/resource_importer_texture.cpp
-#, fuzzy
msgid "Process"
-msgstr "Pós-processamento"
+msgstr "Processo"
#: editor/import/resource_importer_texture.cpp
msgid "Fix Alpha Border"
-msgstr ""
+msgstr "Corrigir Borda Alfa"
#: editor/import/resource_importer_texture.cpp
-#, fuzzy
msgid "Premult Alpha"
-msgstr "Editar Polígono"
+msgstr "Pré-multiplicar Alfa"
#: editor/import/resource_importer_texture.cpp
msgid "Hdr As Srgb"
-msgstr ""
+msgstr "Hdr como Srgb"
#: editor/import/resource_importer_texture.cpp
-#, fuzzy
msgid "Invert Color"
-msgstr "Vértice"
+msgstr "Inverter Cor"
#: editor/import/resource_importer_texture.cpp
msgid "Normal Map Invert Y"
-msgstr "Mapa Normal Inverter Y"
+msgstr "Inverter Y no Mapa Normal"
#: editor/import/resource_importer_texture.cpp
msgid "Size Limit"
-msgstr "Limite do Tamanho"
+msgstr "Tamanho Limite"
#: editor/import/resource_importer_texture.cpp
msgid "Detect 3D"
-msgstr ""
+msgstr "Detectar 3D"
#: editor/import/resource_importer_texture.cpp
-#, fuzzy
msgid "SVG"
-msgstr "HSV"
+msgstr "SVG"
#: editor/import/resource_importer_texture.cpp
msgid ""
"Warning, no suitable PC VRAM compression enabled in Project Settings. This "
"texture will not display correctly on PC."
msgstr ""
+"Aviso, nenhuma compactação de VRAM de PC adequada ativada nas configurações "
+"do projeto. Esta textura não será exibida corretamente no PC."
#: editor/import/resource_importer_texture_atlas.cpp
msgid "Atlas File"
-msgstr "Ficheiro Atlas"
+msgstr "Arquivo de Atlas"
#: editor/import/resource_importer_texture_atlas.cpp
msgid "Import Mode"
msgstr "Modo de Importação"
#: editor/import/resource_importer_texture_atlas.cpp
-#, fuzzy
msgid "Crop To Region"
-msgstr "Definir Região Tile"
+msgstr "Cortar Para Região"
#: editor/import/resource_importer_texture_atlas.cpp
msgid "Trim Alpha Border From Region"
-msgstr ""
+msgstr "Aparar Borda Alfa da Região"
#: editor/import/resource_importer_wav.cpp scene/2d/physics_body_2d.cpp
-#, fuzzy
msgid "Force"
-msgstr "Forçar Impulso"
+msgstr "Força"
#: editor/import/resource_importer_wav.cpp
msgid "8 Bit"
-msgstr ""
+msgstr "8 Bits"
#: editor/import/resource_importer_wav.cpp main/main.cpp
#: modules/mono/editor/csharp_project.cpp modules/mono/mono_gd/gd_mono.cpp
msgid "Mono"
-msgstr ""
+msgstr "Mono"
#: editor/import/resource_importer_wav.cpp
-#, fuzzy
msgid "Max Rate"
-msgstr "Nó Mix"
+msgstr "Taxa Máxima"
#: editor/import/resource_importer_wav.cpp
-#, fuzzy
msgid "Max Rate Hz"
-msgstr "Nó Mix"
+msgstr "Taxa Máxima Hz"
#: editor/import/resource_importer_wav.cpp
msgid "Trim"
-msgstr ""
+msgstr "Aparar"
#: editor/import/resource_importer_wav.cpp
-#, fuzzy
msgid "Normalize"
-msgstr "Formato"
+msgstr "Normalizar"
#: editor/import/resource_importer_wav.cpp
#: scene/resources/audio_stream_sample.cpp
-#, fuzzy
msgid "Loop Mode"
-msgstr "Modo Mover"
+msgstr "Modo de Loop"
#: editor/import/resource_importer_wav.cpp
#: scene/resources/audio_stream_sample.cpp
-#, fuzzy
msgid "Loop Begin"
-msgstr "Modo Mover"
+msgstr "Inicio do Loop"
#: editor/import/resource_importer_wav.cpp
#: scene/resources/audio_stream_sample.cpp
-#, fuzzy
msgid "Loop End"
-msgstr "Modo Mover"
+msgstr "Fim do Loop"
#: editor/import_defaults_editor.cpp
msgid "Select Importer"
@@ -7507,7 +7483,7 @@ msgstr "Localização"
#: editor/inspector_dock.cpp
msgid "Localization not available for current language."
-msgstr ""
+msgstr "Localização não disponível para o idioma atual."
#: editor/inspector_dock.cpp
msgid "Copy Properties"
@@ -7955,11 +7931,20 @@ msgid "New Anim"
msgstr "Nova Animação"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+msgstr "Criar Nova Animação"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Change Animation Name:"
msgstr "Mudar o Nome da Animação:"
#: editor/plugins/animation_player_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Rename Animation"
+msgstr "Renomear Animação"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Delete Animation?"
msgstr "Apagar Animação?"
@@ -7977,11 +7962,6 @@ msgid "Animation name already exists!"
msgstr "Já existe o nome da Animação!"
#: editor/plugins/animation_player_editor_plugin.cpp
-#: editor/plugins/sprite_frames_editor_plugin.cpp
-msgid "Rename Animation"
-msgstr "Renomear Animação"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate Animation"
msgstr "Duplicar Animação"
@@ -8126,10 +8106,6 @@ msgid "Pin AnimationPlayer"
msgstr "Pregar AnimationPlayer"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Create New Animation"
-msgstr "Criar Nova Animação"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Name:"
msgstr "Nome da Animação:"
@@ -8383,7 +8359,7 @@ msgstr "Filtros..."
#: editor/plugins/asset_library_editor_plugin.cpp scene/main/http_request.cpp
msgid "Use Threads"
-msgstr ""
+msgstr "Usar Threads"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Contents:"
@@ -8615,7 +8591,7 @@ msgstr "Em teste"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Failed to get repository configuration."
-msgstr ""
+msgstr "Falha ao obter a configuração do repositório."
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Assets ZIP File"
@@ -8672,7 +8648,7 @@ msgstr "Consolidar Lightmaps"
#: editor/plugins/baked_lightmap_editor_plugin.cpp
msgid "LightMap Bake"
-msgstr ""
+msgstr "Bake de Mapa de Luz"
#: editor/plugins/baked_lightmap_editor_plugin.cpp
msgid "Select lightmap bake file:"
@@ -9189,7 +9165,7 @@ msgstr "Ajuste Inteligente"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Hide"
-msgstr ""
+msgstr "Esconder"
#: editor/plugins/canvas_item_editor_plugin.cpp
#, fuzzy
@@ -9546,11 +9522,11 @@ msgstr "Gradiente Editado"
#: editor/plugins/gradient_texture_2d_editor_plugin.cpp
msgid "Swap GradientTexture2D Fill Points"
-msgstr ""
+msgstr "Trocar pontos de preenchimento do Gradiente de Textura 2D"
#: editor/plugins/gradient_texture_2d_editor_plugin.cpp
msgid "Swap Gradient Fill Points"
-msgstr ""
+msgstr "Trocar Pontos de Preenchimento de Gradiente"
#: editor/plugins/gradient_texture_2d_editor_plugin.cpp
#, fuzzy
@@ -9574,7 +9550,7 @@ msgstr "Ãcone"
#: editor/plugins/item_list_editor_plugin.cpp
msgid "ID"
-msgstr ""
+msgstr "ID"
#: editor/plugins/item_list_editor_plugin.cpp
#: scene/resources/default_theme/default_theme.cpp
@@ -10246,6 +10222,7 @@ msgid "Points"
msgstr "Pontos"
#: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp
+#: scene/resources/navigation_mesh.cpp
msgid "Polygons"
msgstr "Polígonos"
@@ -10370,7 +10347,7 @@ msgstr "Sincronizar Ossos com Polígono"
#: editor/plugins/ray_cast_2d_editor_plugin.cpp
msgid "Set cast_to"
-msgstr ""
+msgstr "Definir cast_to"
#: editor/plugins/resource_preloader_editor_plugin.cpp
msgid "ERROR: Couldn't load resource!"
@@ -10701,11 +10678,11 @@ msgstr "Resultados da Pesquisa"
#: editor/plugins/script_editor_plugin.cpp
msgid "Open Dominant Script On Scene Change"
-msgstr ""
+msgstr "Abrir Script Dominante na Mudança de Cena"
#: editor/plugins/script_editor_plugin.cpp
msgid "External"
-msgstr ""
+msgstr "Externo"
#: editor/plugins/script_editor_plugin.cpp
#, fuzzy
@@ -10724,11 +10701,11 @@ msgstr "Selecionar Ficheiro de Modelo"
#: editor/plugins/script_editor_plugin.cpp
msgid "Highlight Current Script"
-msgstr ""
+msgstr "Destacar Script Atual"
#: editor/plugins/script_editor_plugin.cpp
msgid "Script Temperature History Size"
-msgstr ""
+msgstr "Tamanho do Histórico de Temperatura do Script"
#: editor/plugins/script_editor_plugin.cpp
msgid "Current Script Background Color"
@@ -10751,7 +10728,7 @@ msgstr "Nome do Script:"
#: editor/plugins/script_editor_plugin.cpp
msgid "Exec Flags"
-msgstr ""
+msgstr "Flags de Execução"
#: editor/plugins/script_editor_plugin.cpp
msgid "Clear Recent Scripts"
@@ -11265,7 +11242,7 @@ msgstr "Pré-visualização Cinemática"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "(Not in GLES2)"
-msgstr ""
+msgstr "(Não em GLES2)"
#: editor/plugins/spatial_editor_plugin.cpp
#, fuzzy
@@ -11566,11 +11543,11 @@ msgstr "Pós"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Manipulator Gizmo Size"
-msgstr ""
+msgstr "Tamanho do Gizmo do Manipulador"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Manipulator Gizmo Opacity"
-msgstr ""
+msgstr "Opacidade do Gizmo do Manipulador"
#: editor/plugins/spatial_editor_plugin.cpp
#, fuzzy
@@ -11626,7 +11603,8 @@ msgid "Invalid geometry, can't replace by mesh."
msgstr "Geometria inválida, não substituível por malha."
#: editor/plugins/sprite_editor_plugin.cpp
-msgid "Convert to Mesh2D"
+#, fuzzy
+msgid "Convert to MeshInstance2D"
msgstr "Converter para Mesh2D"
#: editor/plugins/sprite_editor_plugin.cpp
@@ -12255,41 +12233,41 @@ msgid "Add Item Type"
msgstr "Adicionar Tipo de Item"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Set Variation Base Type"
-msgstr "Definir tipo de variável"
+msgstr "Definir Tipo Base da Variação"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Set Base Type"
-msgstr "Mudar tipo base"
+msgstr "Definir Tipo Base"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Show Default"
-msgstr "Mostrar Predefiniçã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 tipo predefinido ao lado de itens que foram sobrepostos."
+msgstr "Mostrar itens do tipo padrão ao lado de itens que foram sobrepostos."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Override All"
-msgstr "Sobrepor Tudo"
+msgstr "Substituir Tudo"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Override all default type items."
-msgstr "Sobrepõe todos os itens de tipo predefinido."
+msgstr "Substituir todos os itens de tipo padrão."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select the variation base type from a list of available types."
msgstr ""
+"Selecione o tipo de base de variação em uma lista de tipos disponíveis."
#: editor/plugins/theme_editor_plugin.cpp
msgid ""
"A type associated with a built-in class cannot be marked as a variation of "
"another type."
msgstr ""
+"Um tipo associado a uma classe integrada não pode ser marcado como uma "
+"variação de outro tipo."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Theme:"
@@ -12534,7 +12512,7 @@ msgstr "Pintar TileMap"
#: editor/plugins/tile_map_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Palette Min Width"
-msgstr ""
+msgstr "Largura Mínima da Paleta"
#: editor/plugins/tile_map_editor_plugin.cpp
#, fuzzy
@@ -12622,8 +12600,7 @@ msgid "Select the previous shape, subtile, or Tile."
msgstr "Selecione a forma, subtile ou Tile anterior."
#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp
-#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp
-#: scene/resources/texture.cpp
+#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp
msgid "Region"
msgstr "Região"
@@ -14128,48 +14105,23 @@ msgstr "Executável"
#: editor/project_export.cpp
msgid "Export the project for all the presets defined."
-msgstr ""
+msgstr "Exporte o projeto para todas as predefinições definidas."
#: editor/project_export.cpp
msgid "All presets must have an export path defined for Export All to work."
msgstr ""
+"Todas as predefinições devem ter um caminho de exportação definido para que "
+"Exportar Tudo funcione."
#: editor/project_export.cpp
msgid "Delete preset '%s'?"
msgstr "Apagar predefinição '%s'?"
#: editor/project_export.cpp
-msgid ""
-"Failed to export the project for platform '%s'.\n"
-"Export templates seem to be missing or invalid."
-msgstr ""
-"Falhou a exportação do projeto para a plataforma '%s'.\n"
-"O Modelo de exportação está ausente ou é inválido."
-
-#: 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 ""
-"Falhou a exportação do projeto para a plataforma '%s'.\n"
-"Pode ser provocado por um problema na predefinição ou configuração da "
-"exportação."
-
-#: editor/project_export.cpp
msgid "Exporting All"
msgstr "A Exportar Tudo"
#: editor/project_export.cpp
-msgid "The given export path doesn't exist:"
-msgstr "O caminho de exportação não existe:"
-
-#: editor/project_export.cpp
-msgid "Export templates for this platform are missing/corrupted:"
-msgstr ""
-"Modelos de exportação para esta plataforma estão ausentes/corrompidos :"
-
-#: editor/project_export.cpp
msgid "Export Path"
msgstr "Exportar Caminho"
@@ -14271,6 +14223,8 @@ msgid ""
"Note: Encryption key needs to be stored in the binary,\n"
"you need to build the export templates from source."
msgstr ""
+"Nota: A chave de criptografia precisa ser armazenada no binário,\n"
+"você precisa construir os modelos de exportação da fonte."
#: editor/project_export.cpp
#, fuzzy
@@ -14315,6 +14269,11 @@ msgid "Export templates for this platform are missing:"
msgstr "Não existem Modelos de exportação para esta plataforma:"
#: editor/project_export.cpp
+#, fuzzy
+msgid "Project Export"
+msgstr "Fundadores do Projeto"
+
+#: editor/project_export.cpp
msgid "Manage Export Templates"
msgstr "Gerir Modelos de Exportação"
@@ -15424,7 +15383,7 @@ msgstr "Tornar Local"
#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp
msgid "Another node already uses this unique name in the scene."
-msgstr ""
+msgstr "Outro nó já usa esse nome exclusivo na cena."
#: editor/scene_tree_dock.cpp
#, fuzzy
@@ -15510,7 +15469,7 @@ msgstr "Sub-recursos"
#: editor/scene_tree_dock.cpp
msgid "Access as Scene Unique Name"
-msgstr ""
+msgstr "Acesso como Nome Exclusivo da Cena"
#: editor/scene_tree_dock.cpp
msgid "Clear Inheritance"
@@ -15615,7 +15574,7 @@ msgstr "Centrar Seleção"
#: editor/scene_tree_dock.cpp
msgid "Derive Script Globals By Name"
-msgstr ""
+msgstr "Derivar Globais de Script Por Nome"
#: editor/scene_tree_dock.cpp
#, fuzzy
@@ -15648,6 +15607,9 @@ msgid ""
"with the '%s' prefix in a node path.\n"
"Click to disable this."
msgstr ""
+"Este nó pode ser acessado de qualquer lugar na cena, precedendo-o com o "
+"prefixo '%s' em um caminho de nó.\n"
+"Clique para desabilitar isso."
#: editor/scene_tree_editor.cpp
msgid ""
@@ -15941,15 +15903,15 @@ msgstr "Filtrar Tiles"
#: editor/script_editor_debugger.cpp
msgid "Auto Switch To Remote Scene Tree"
-msgstr ""
+msgstr "Mudar Automático para Ãrvore de Cena Remota"
#: editor/script_editor_debugger.cpp
msgid "Remote Scene Tree Refresh Interval"
-msgstr ""
+msgstr "Intervalo de Atualização da Ãrvore de Cena Remota"
#: editor/script_editor_debugger.cpp
msgid "Remote Inspect Refresh Interval"
-msgstr ""
+msgstr "Intervalo de Atualização de Inspeção Remota"
#: editor/script_editor_debugger.cpp
msgid "Network Profiler"
@@ -16047,7 +16009,7 @@ msgstr "Mudar raio da luz"
#: editor/spatial_editor_gizmos.cpp
msgid "Stream Player 3D"
-msgstr ""
+msgstr "Reprodutor de Fluxo 3D"
#: editor/spatial_editor_gizmos.cpp
msgid "Change AudioStreamPlayer3D Emission Angle"
@@ -16057,7 +16019,7 @@ msgstr "Mudar ângulo de emissão de AudioStreamPlayer3D"
#: platform/osx/export/export.cpp
#: scene/resources/default_theme/default_theme.cpp
msgid "Camera"
-msgstr ""
+msgstr "Câmera"
#: editor/spatial_editor_gizmos.cpp
msgid "Change Camera FOV"
@@ -16069,7 +16031,7 @@ msgstr "Mudar tamanho da Câmara"
#: editor/spatial_editor_gizmos.cpp
msgid "Visibility Notifier"
-msgstr ""
+msgstr "Notificador de Visibilidade"
#: editor/spatial_editor_gizmos.cpp
msgid "Change Notifier AABB"
@@ -16080,23 +16042,20 @@ msgid "Change Particles AABB"
msgstr "Mudar partículas AABB"
#: editor/spatial_editor_gizmos.cpp
-#, fuzzy
msgid "Reflection Probe"
-msgstr "Selecionar Propriedade"
+msgstr "Sonda de Reflexão"
#: editor/spatial_editor_gizmos.cpp
msgid "Change Probe Extents"
msgstr "Mudar Extensões de Sonda"
#: editor/spatial_editor_gizmos.cpp
-#, fuzzy
msgid "GI Probe"
-msgstr "Consolidar Sonda GI"
+msgstr "Sonda GI"
#: editor/spatial_editor_gizmos.cpp
-#, fuzzy
msgid "Baked Indirect Light"
-msgstr "Iluminação indireta"
+msgstr "Iluminação Indireta Pré-feita"
#: editor/spatial_editor_gizmos.cpp modules/csg/csg_gizmos.cpp
msgid "Change Sphere Shape Radius"
@@ -16127,57 +16086,52 @@ msgid "Change Ray Shape Length"
msgstr "Mudar comprimento da forma raio"
#: editor/spatial_editor_gizmos.cpp
-#, fuzzy
msgid "Navigation Edge"
-msgstr "Modo Navegação"
+msgstr "Borda de Navegação"
#: editor/spatial_editor_gizmos.cpp
-#, fuzzy
msgid "Navigation Edge Disabled"
-msgstr "Modo Navegação"
+msgstr "Borda de Navegação Desabilitada"
#: editor/spatial_editor_gizmos.cpp
-#, fuzzy
msgid "Navigation Solid"
-msgstr "Modo Navegação"
+msgstr "Sólido de Navegação"
#: editor/spatial_editor_gizmos.cpp
-#, fuzzy
msgid "Navigation Solid Disabled"
-msgstr "Modo Navegação"
+msgstr "Sólido de Navegação Desativado"
#: editor/spatial_editor_gizmos.cpp
msgid "Joint Body A"
-msgstr ""
+msgstr "Corpo de Articulação A"
#: editor/spatial_editor_gizmos.cpp
msgid "Joint Body B"
-msgstr ""
+msgstr "Corpo de Articulação B"
#: editor/spatial_editor_gizmos.cpp
msgid "Room Edge"
-msgstr ""
+msgstr "Borda da Sala"
#: editor/spatial_editor_gizmos.cpp
msgid "Room Overlap"
-msgstr ""
+msgstr "Sobreposição de Sala"
#: editor/spatial_editor_gizmos.cpp
msgid "Set Room Point Position"
msgstr "Definir Posição do Ponto do Room"
#: editor/spatial_editor_gizmos.cpp scene/3d/portal.cpp
-#, fuzzy
msgid "Portal Margin"
-msgstr "Definir Margem"
+msgstr "Margem do Portal"
#: editor/spatial_editor_gizmos.cpp
msgid "Portal Edge"
-msgstr ""
+msgstr "Borda do Portal"
#: editor/spatial_editor_gizmos.cpp
msgid "Portal Arrow"
-msgstr ""
+msgstr "Seta do Portal"
#: editor/spatial_editor_gizmos.cpp
msgid "Set Portal Point Position"
@@ -16185,18 +16139,16 @@ msgstr "Definir Posição do Ponto do Portal"
#: editor/spatial_editor_gizmos.cpp
msgid "Portal Front"
-msgstr ""
+msgstr "Portal Frente"
#: editor/spatial_editor_gizmos.cpp
-#, fuzzy
msgid "Portal Back"
-msgstr "Voltar"
+msgstr "Portal Atras"
#: editor/spatial_editor_gizmos.cpp scene/2d/light_occluder_2d.cpp
#: scene/2d/tile_map.cpp
-#, fuzzy
msgid "Occluder"
-msgstr "Modo Oclusão"
+msgstr "Oclusor"
#: editor/spatial_editor_gizmos.cpp
msgid "Set Occluder Sphere Radius"
@@ -16207,440 +16159,397 @@ msgid "Set Occluder Sphere Position"
msgstr "Definir Posição da Esfera do Oclusor"
#: editor/spatial_editor_gizmos.cpp
-#, fuzzy
msgid "Set Occluder Polygon Point Position"
-msgstr "Definir Posição do Ponto do Portal"
+msgstr "Definir a Posição do Ponto do Polígono Oclusor"
#: editor/spatial_editor_gizmos.cpp
-#, fuzzy
msgid "Set Occluder Hole Point Position"
-msgstr "Definir posição do Ponto da curva"
+msgstr "Definir a Posição do Ponto do Orifício do Oclusor"
#: editor/spatial_editor_gizmos.cpp
-#, fuzzy
msgid "Occluder Polygon Front"
-msgstr "Criar Polígono Oclusor"
+msgstr "Frente do Polígono Oclusor"
#: editor/spatial_editor_gizmos.cpp
-#, fuzzy
msgid "Occluder Polygon Back"
-msgstr "Criar Polígono Oclusor"
+msgstr "Parte de Trás do Polígono Oclusor"
#: editor/spatial_editor_gizmos.cpp
-#, fuzzy
msgid "Occluder Hole"
-msgstr "Criar Polígono Oclusor"
+msgstr "Buraco Oclusor"
#: main/main.cpp
msgid "Godot Physics"
-msgstr ""
+msgstr "Física do Godot"
#: main/main.cpp servers/physics_2d/physics_2d_server_sw.cpp
#: servers/visual/visual_server_scene.cpp
msgid "Use BVH"
-msgstr ""
+msgstr "Usar BVH"
#: main/main.cpp servers/physics_2d/physics_2d_server_sw.cpp
#: servers/visual/visual_server_scene.cpp
-#, fuzzy
msgid "BVH Collision Margin"
-msgstr "Modo Colisão"
+msgstr "Margem de Colisão BVH"
#: main/main.cpp
-#, fuzzy
msgid "Crash Handler"
-msgstr "Definir Manipulador"
+msgstr "Gerenciador de Falhas"
#: main/main.cpp
-#, fuzzy
msgid "Multithreaded Server"
-msgstr "Conjunto MultiNó"
+msgstr "Servidor com Multi-Thread"
#: main/main.cpp
msgid "RID Pool Prealloc"
-msgstr ""
+msgstr "Pré-alocação de pool RID"
#: main/main.cpp
-#, fuzzy
msgid "Debugger stdout"
-msgstr "Depurador"
+msgstr "Depurador stdout"
#: main/main.cpp
msgid "Max Chars Per Second"
-msgstr ""
+msgstr "Máximo de Caracteres Por Segundo"
#: main/main.cpp
msgid "Max Messages Per Frame"
-msgstr ""
+msgstr "Máximo de Mensagens Por Quadro"
#: main/main.cpp
msgid "Max Errors Per Second"
-msgstr ""
+msgstr "Máximo de Erros Por Segundo"
#: main/main.cpp
msgid "Max Warnings Per Second"
-msgstr ""
+msgstr "Máximo de Avisos Por Segundo"
#: main/main.cpp
msgid "Flush stdout On Print"
-msgstr ""
+msgstr "Esvaziar stdout Na Impressão"
#: main/main.cpp servers/visual_server.cpp
msgid "Logging"
-msgstr ""
+msgstr "Registro de Log"
#: main/main.cpp
msgid "File Logging"
-msgstr ""
+msgstr "Log de Arquivo"
#: main/main.cpp
-#, fuzzy
msgid "Enable File Logging"
-msgstr "Ativar Filtragem"
+msgstr "Ativar Log de Arquivos"
#: main/main.cpp
-#, fuzzy
msgid "Log Path"
-msgstr "Copiar Caminho"
+msgstr "Caminho de Log"
#: main/main.cpp
msgid "Max Log Files"
-msgstr ""
+msgstr "Máximo de Arquivos de Log"
#: main/main.cpp
msgid "Driver"
-msgstr ""
+msgstr "Driver"
#: main/main.cpp
-#, fuzzy
msgid "Driver Name"
-msgstr "Nome do Script:"
+msgstr "Nome do Driver"
#: main/main.cpp
msgid "Fallback To GLES2"
-msgstr ""
+msgstr "Alternar para GLES2"
#: main/main.cpp
msgid "Use Nvidia Rect Flicker Workaround"
-msgstr ""
+msgstr "Use a Solução Alternativa do Nvidia Rect Flicker"
#: main/main.cpp
msgid "DPI"
-msgstr ""
+msgstr "DPI"
#: main/main.cpp
msgid "Allow hiDPI"
-msgstr ""
+msgstr "Permitir hiDPI"
#: main/main.cpp
-#, fuzzy
msgid "V-Sync"
-msgstr "Sinc"
+msgstr "Sincronização Vertical"
#: main/main.cpp
-#, fuzzy
msgid "Use V-Sync"
-msgstr "Usar Ajuste"
+msgstr "Usar Sincronização Vertical"
#: main/main.cpp
msgid "Per Pixel Transparency"
-msgstr ""
+msgstr "Transparência Por Pixel"
#: main/main.cpp
msgid "Allowed"
-msgstr ""
+msgstr "Permitido"
#: main/main.cpp
msgid "Intended Usage"
-msgstr ""
+msgstr "Uso Pretendido"
#: main/main.cpp
-#, fuzzy
msgid "Framebuffer Allocation"
-msgstr "Seleção de Frame"
+msgstr "Alocação de Framebuffer"
#: main/main.cpp platform/uwp/os_uwp.cpp
-#, fuzzy
msgid "Energy Saving"
-msgstr "Erro Ao Gravar"
+msgstr "Economia de Energia"
#: main/main.cpp
msgid "Threads"
-msgstr ""
+msgstr "Threads"
#: main/main.cpp servers/physics_2d/physics_2d_server_wrap_mt.h
-#, fuzzy
msgid "Thread Model"
-msgstr "Alternar Modo"
+msgstr "Modelo de Thread"
#: main/main.cpp
msgid "Thread Safe BVH"
-msgstr ""
+msgstr "Thread Segura BVH"
#: main/main.cpp
msgid "Handheld"
-msgstr ""
+msgstr "Portátil"
#: main/main.cpp platform/javascript/export/export.cpp
#: platform/uwp/export/export.cpp
-#, fuzzy
msgid "Orientation"
-msgstr "Documentação Online"
+msgstr "Orientação"
#: main/main.cpp scene/gui/scroll_container.cpp scene/gui/text_edit.cpp
#: scene/main/scene_tree.cpp scene/register_scene_types.cpp
-#, fuzzy
msgid "Common"
-msgstr "Comunidade"
+msgstr "Comum"
#: main/main.cpp
-#, fuzzy
msgid "Physics FPS"
-msgstr "Frame de Física %"
+msgstr "Física FPS"
#: main/main.cpp
-#, fuzzy
msgid "Force FPS"
-msgstr "Forçar Impulso"
+msgstr "Forçar FPS"
#: main/main.cpp
msgid "Enable Pause Aware Picking"
-msgstr ""
+msgstr "Ativar a Seleção Consciente de Pausa"
#: main/main.cpp scene/gui/item_list.cpp scene/gui/popup_menu.cpp
#: scene/gui/scroll_container.cpp scene/gui/text_edit.cpp scene/gui/tree.cpp
#: scene/main/viewport.cpp scene/register_scene_types.cpp
msgid "GUI"
-msgstr ""
+msgstr "Interface Gráfica"
#: main/main.cpp
msgid "Drop Mouse On GUI Input Disabled"
-msgstr ""
+msgstr "Desabilitar Soltar o Mouse na Entrada da Interface Gráfica"
#: main/main.cpp
msgid "stdout"
-msgstr ""
+msgstr "stdout"
#: main/main.cpp
msgid "Print FPS"
-msgstr ""
+msgstr "Imprimir FPS"
#: main/main.cpp
msgid "Verbose stdout"
-msgstr ""
+msgstr "stdout Verboso"
#: main/main.cpp scene/main/scene_tree.cpp scene/resources/multimesh.cpp
-#, fuzzy
msgid "Physics Interpolation"
-msgstr "Modo de Interpolação"
+msgstr "Interpolação Física"
#: main/main.cpp
-#, fuzzy
msgid "Enable Warnings"
-msgstr "Ativar Filtragem"
+msgstr "Ativar Avisos"
#: main/main.cpp
-#, fuzzy
msgid "Frame Delay Msec"
-msgstr "Seleção de Frame"
+msgstr "Atraso de Quadro Msec"
#: main/main.cpp
msgid "Low Processor Mode"
-msgstr ""
+msgstr "Modo de Baixo Uso do Processador"
#: main/main.cpp
msgid "Delta Sync After Draw"
-msgstr ""
+msgstr "Sincronização Delta Após Desenhar"
#: main/main.cpp
msgid "iOS"
-msgstr ""
+msgstr "iOS"
#: main/main.cpp
msgid "Hide Home Indicator"
-msgstr ""
+msgstr "Esconder Indicador de Home"
#: main/main.cpp
-#, fuzzy
msgid "Input Devices"
-msgstr "Todos os Aparelhos"
+msgstr "Dispositivos de Entrada"
#: main/main.cpp
-#, fuzzy
msgid "Pointing"
-msgstr "Ponto"
+msgstr "Pontuação"
#: main/main.cpp
msgid "Touch Delay"
-msgstr ""
+msgstr "Atraso de Toque"
#: main/main.cpp servers/visual_server.cpp
msgid "GLES3"
-msgstr ""
+msgstr "GLES3"
#: main/main.cpp servers/visual_server.cpp
-#, fuzzy
msgid "Shaders"
-msgstr "Shader"
+msgstr "Shaders"
#: main/main.cpp
-#, fuzzy
msgid "Debug Shader Fallbacks"
-msgstr "Forçar Shader de Reserva"
+msgstr "Depurar Fallbacks do Shader"
#: main/main.cpp scene/3d/baked_lightmap.cpp scene/3d/camera.cpp
#: scene/3d/world_environment.cpp scene/main/scene_tree.cpp
#: scene/resources/world.cpp
-#, fuzzy
msgid "Environment"
-msgstr "Ver ambiente"
+msgstr "Ambiente"
#: main/main.cpp
msgid "Default Clear Color"
-msgstr ""
+msgstr "Cor Clara Padrão"
#: main/main.cpp
msgid "Boot Splash"
-msgstr ""
+msgstr "Plano de Fundo de Inicialização"
#: main/main.cpp
-#, fuzzy
msgid "Show Image"
-msgstr "Mostrar ossos"
+msgstr "Mostrar Imagem"
#: main/main.cpp
msgid "Image"
-msgstr ""
+msgstr "Imagem"
#: main/main.cpp
msgid "Fullsize"
-msgstr ""
+msgstr "Tamanho Máximo"
#: main/main.cpp scene/resources/dynamic_font.cpp
-#, fuzzy
msgid "Use Filter"
-msgstr "Filtro:"
+msgstr "Usar Filtro"
#: main/main.cpp scene/resources/style_box.cpp
-#, fuzzy
msgid "BG Color"
-msgstr "Cores"
+msgstr "Cor de Fundo"
#: main/main.cpp
-#, fuzzy
msgid "macOS Native Icon"
-msgstr "Definir Ãcone de Tile"
+msgstr "Ãcone Nativo do macOS"
#: main/main.cpp
msgid "Windows Native Icon"
-msgstr ""
+msgstr "Ãcone nativo do Windows"
#: main/main.cpp
msgid "Buffering"
-msgstr ""
+msgstr "Buffering"
#: main/main.cpp
msgid "Agile Event Flushing"
-msgstr ""
+msgstr "Liberação Ãgil de Eventos"
#: main/main.cpp
msgid "Emulate Touch From Mouse"
-msgstr ""
+msgstr "Emular Toque do Mouse"
#: main/main.cpp
msgid "Emulate Mouse From Touch"
-msgstr ""
+msgstr "Emular o Mouse do Toque"
#: main/main.cpp
-#, fuzzy
msgid "Mouse Cursor"
-msgstr "Botão do rato"
+msgstr "Cursor do Mouse"
#: main/main.cpp
-#, fuzzy
msgid "Custom Image"
-msgstr "CustomNode"
+msgstr "Imagem Personalizada"
#: main/main.cpp
msgid "Custom Image Hotspot"
-msgstr ""
+msgstr "Imagem de Ponto de Acesso Personalizada"
#: main/main.cpp
-#, fuzzy
msgid "Tooltip Position Offset"
-msgstr "Compensação da rotação:"
+msgstr "Deslocamento de Posição da Dica"
#: main/main.cpp modules/mono/mono_gd/gd_mono.cpp
-#, fuzzy
msgid "Debugger Agent"
-msgstr "Depurador"
+msgstr "Agente Depurador"
#: main/main.cpp modules/mono/mono_gd/gd_mono.cpp
-#, fuzzy
msgid "Wait For Debugger"
-msgstr "Depurador"
+msgstr "Esperar o Depurador"
#: main/main.cpp modules/mono/mono_gd/gd_mono.cpp
msgid "Wait Timeout"
-msgstr "Timeout de Espera"
+msgstr "Tempo Limite de Espera"
#: main/main.cpp
msgid "Runtime"
-msgstr ""
+msgstr "Execução"
#: main/main.cpp
msgid "Unhandled Exception Policy"
-msgstr ""
+msgstr "Política de Exceção não Tratada"
#: main/main.cpp
-#, fuzzy
msgid "Main Loop Type"
-msgstr "Localizar Tipo de Nó"
+msgstr "Tipo de Loop Principal"
#: main/main.cpp scene/gui/texture_progress.cpp
#: scene/gui/viewport_container.cpp
-#, fuzzy
msgid "Stretch"
-msgstr "Trazer"
+msgstr "Esticar"
#: main/main.cpp
-#, fuzzy
msgid "Aspect"
-msgstr "Inspetor"
+msgstr "Aspecto"
#: main/main.cpp
msgid "Shrink"
-msgstr ""
+msgstr "Encolher"
#: main/main.cpp scene/main/scene_tree.cpp
msgid "Auto Accept Quit"
-msgstr ""
+msgstr "Auto Aceitar Sair"
#: main/main.cpp scene/main/scene_tree.cpp
-#, fuzzy
msgid "Quit On Go Back"
-msgstr "Voltar"
+msgstr "Sair em Voltar"
#: main/main.cpp scene/main/viewport.cpp
-#, fuzzy
msgid "Snap Controls To Pixels"
-msgstr "Ajustar aos Lados do Nó"
+msgstr "Ajustar Controles aos Pixels"
#: main/main.cpp
msgid "Dynamic Fonts"
-msgstr ""
+msgstr "Fontes Dinâmicas"
#: main/main.cpp
msgid "Use Oversampling"
-msgstr ""
+msgstr "Usar Sobreamostragem"
#: modules/bullet/register_types.cpp modules/bullet/space_bullet.cpp
msgid "Active Soft World"
-msgstr ""
+msgstr "Mundo Suave Ativo"
#: modules/csg/csg_gizmos.cpp
msgid "CSG"
-msgstr ""
+msgstr "CSG"
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
@@ -16659,13 +16568,12 @@ msgid "Change Torus Outer Radius"
msgstr "Mudar Raio Externo do Toro"
#: modules/csg/csg_shape.cpp
-#, fuzzy
msgid "Operation"
-msgstr "Opções"
+msgstr "Operação"
#: modules/csg/csg_shape.cpp
msgid "Calculate Tangents"
-msgstr ""
+msgstr "Calcular Tangentes"
#: modules/csg/csg_shape.cpp
#, fuzzy
@@ -16723,7 +16631,7 @@ msgstr "Mostrar Guias"
#: modules/csg/csg_shape.cpp
msgid "Cone"
-msgstr ""
+msgstr "Cone"
#: modules/csg/csg_shape.cpp
#, fuzzy
@@ -16737,22 +16645,22 @@ msgstr "Mudar Raio Externo do Toro"
#: modules/csg/csg_shape.cpp
msgid "Ring Sides"
-msgstr ""
+msgstr "Lados do Anel"
#: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp
#: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp
-#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp
+#: scene/3d/collision_polygon.cpp
#, fuzzy
msgid "Polygon"
msgstr "Polígonos"
#: modules/csg/csg_shape.cpp
msgid "Spin Degrees"
-msgstr ""
+msgstr "Graus de Rotação"
#: modules/csg/csg_shape.cpp
msgid "Spin Sides"
-msgstr ""
+msgstr "Girar Lados"
#: modules/csg/csg_shape.cpp
#, fuzzy
@@ -16766,11 +16674,11 @@ msgstr "Criar vértice interno"
#: modules/csg/csg_shape.cpp
msgid "Path Interval"
-msgstr ""
+msgstr "Intervalo de Caminho"
#: modules/csg/csg_shape.cpp
msgid "Path Simplify Angle"
-msgstr ""
+msgstr "Simplifique o Ângulo do Caminho"
#: modules/csg/csg_shape.cpp
#, fuzzy
@@ -16819,15 +16727,15 @@ msgstr "Mostrar Grelha Sempre"
#: modules/enet/networked_multiplayer_enet.cpp
msgid "Server Relay"
-msgstr ""
+msgstr "Retransmissão do Servidor"
#: modules/enet/networked_multiplayer_enet.cpp
msgid "DTLS Verify"
-msgstr ""
+msgstr "Verificar DTLS"
#: modules/enet/networked_multiplayer_enet.cpp
msgid "DTLS Hostname"
-msgstr ""
+msgstr "Nome do Host DTLS"
#: modules/enet/networked_multiplayer_enet.cpp
#, fuzzy
@@ -16836,11 +16744,11 @@ msgstr "Usar Ajuste"
#: modules/fbx/editor_scene_importer_fbx.cpp
msgid "FBX"
-msgstr ""
+msgstr "FBX"
#: modules/fbx/editor_scene_importer_fbx.cpp
msgid "Use FBX"
-msgstr ""
+msgstr "Usar FBX"
#: modules/gdnative/gdnative.cpp
#, fuzzy
@@ -16950,7 +16858,7 @@ msgstr "Script"
#: modules/gdscript/editor/gdscript_highlighter.cpp
msgid "Function Definition Color"
-msgstr ""
+msgstr "Função de Definição de Cor"
#: modules/gdscript/editor/gdscript_highlighter.cpp
#, fuzzy
@@ -16959,19 +16867,19 @@ msgstr "Copiar Caminho do Nó"
#: modules/gdscript/gdscript.cpp modules/visual_script/visual_script.cpp
msgid "Max Call Stack"
-msgstr ""
+msgstr "Pilha Máxima de Chamadas"
#: modules/gdscript/gdscript.cpp
msgid "Treat Warnings As Errors"
-msgstr ""
+msgstr "Tratar Avisos como Erros"
#: modules/gdscript/gdscript.cpp
msgid "Exclude Addons"
-msgstr ""
+msgstr "Excluir Complementos"
#: modules/gdscript/gdscript.cpp
msgid "Autocomplete Setters And Getters"
-msgstr ""
+msgstr "Autocompletar Setters e Getters"
#: modules/gdscript/gdscript_functions.cpp
msgid "Step argument is zero!"
@@ -17026,7 +16934,7 @@ msgstr "Mostrar Símbolos Nativos No Editor"
#: modules/gdscript/language_server/gdscript_language_server.cpp
msgid "Use Thread"
-msgstr ""
+msgstr "Usar Thread"
#: modules/gltf/editor_scene_exporter_gltf_plugin.cpp
msgid "Export Mesh GLTF2"
@@ -17078,11 +16986,11 @@ msgstr "Instância"
#: modules/gltf/gltf_accessor.cpp
msgid "Sparse Indices Buffer View"
-msgstr ""
+msgstr "Visualização de Buffer de Ãndices Esparsos"
#: modules/gltf/gltf_accessor.cpp
msgid "Sparse Indices Byte Offset"
-msgstr ""
+msgstr "Deslocamento de Bytes de Ãndices Esparsos"
#: modules/gltf/gltf_accessor.cpp
#, fuzzy
@@ -17091,11 +16999,11 @@ msgstr "A analisar geometria..."
#: modules/gltf/gltf_accessor.cpp
msgid "Sparse Values Buffer View"
-msgstr ""
+msgstr "Visualização de Buffer de Valores Esparsos"
#: modules/gltf/gltf_accessor.cpp
msgid "Sparse Values Byte Offset"
-msgstr ""
+msgstr "Deslocamento de Bytes de Valores Esparsos"
#: modules/gltf/gltf_buffer_view.cpp
#, fuzzy
@@ -17109,7 +17017,7 @@ msgstr "Tema Predefinido"
#: modules/gltf/gltf_buffer_view.cpp
msgid "Byte Stride"
-msgstr ""
+msgstr "Passo de Byte"
#: modules/gltf/gltf_buffer_view.cpp
#, fuzzy
@@ -17123,7 +17031,7 @@ msgstr "Tamanho:"
#: modules/gltf/gltf_camera.cpp
msgid "Zfar"
-msgstr ""
+msgstr "Zfar"
#: modules/gltf/gltf_camera.cpp
#, fuzzy
@@ -17145,7 +17053,7 @@ msgstr "Cores"
#: modules/gltf/gltf_light.cpp scene/3d/reflection_probe.cpp
#: scene/resources/environment.cpp
msgid "Intensity"
-msgstr ""
+msgstr "Intensidade"
#: modules/gltf/gltf_light.cpp scene/2d/light_2d.cpp scene/3d/light.cpp
#, fuzzy
@@ -17154,11 +17062,11 @@ msgstr "Mudar"
#: modules/gltf/gltf_light.cpp
msgid "Inner Cone Angle"
-msgstr ""
+msgstr "Ângulo do Cone Interno"
#: modules/gltf/gltf_light.cpp
msgid "Outer Cone Angle"
-msgstr ""
+msgstr "Ângulo do Cone Externo"
#: modules/gltf/gltf_mesh.cpp
#, fuzzy
@@ -17182,7 +17090,7 @@ msgstr "Plataforma"
#: modules/gltf/gltf_node.cpp scene/3d/mesh_instance.cpp
msgid "Skin"
-msgstr ""
+msgstr "Skin"
#: modules/gltf/gltf_node.cpp scene/3d/spatial.cpp
#, fuzzy
@@ -17201,11 +17109,11 @@ msgstr "Ponto"
#: modules/gltf/gltf_skeleton.cpp modules/gltf/gltf_skin.cpp
msgid "Roots"
-msgstr ""
+msgstr "Raizes"
#: modules/gltf/gltf_skeleton.cpp modules/gltf/gltf_state.cpp
msgid "Unique Names"
-msgstr ""
+msgstr "Nomes Únicos"
#: modules/gltf/gltf_skeleton.cpp
#, fuzzy
@@ -17224,7 +17132,7 @@ msgstr "Focar na Origem"
#: modules/gltf/gltf_skin.cpp
msgid "Inverse Binds"
-msgstr ""
+msgstr "Inverter Ligações"
#: modules/gltf/gltf_skin.cpp
#, fuzzy
@@ -17233,27 +17141,27 @@ msgstr "Mover Junta"
#: modules/gltf/gltf_skin.cpp
msgid "Joint I To Bone I"
-msgstr ""
+msgstr "Articulação I ao Osso I"
#: modules/gltf/gltf_skin.cpp
msgid "Joint I To Name"
-msgstr ""
+msgstr "Junta I A Nomear"
#: modules/gltf/gltf_skin.cpp
msgid "Godot Skin"
-msgstr ""
+msgstr "Skin Godot"
#: modules/gltf/gltf_spec_gloss.cpp
msgid "Diffuse Img"
-msgstr ""
+msgstr "Imagem Difusa"
#: modules/gltf/gltf_spec_gloss.cpp
msgid "Diffuse Factor"
-msgstr ""
+msgstr "Fator Difuso"
#: modules/gltf/gltf_spec_gloss.cpp
msgid "Gloss Factor"
-msgstr ""
+msgstr "Fator de Brilho"
#: modules/gltf/gltf_spec_gloss.cpp
msgid "Specular Factor"
@@ -17261,11 +17169,11 @@ msgstr "Fator Especular"
#: modules/gltf/gltf_spec_gloss.cpp
msgid "Spec Gloss Img"
-msgstr ""
+msgstr "Imagem Brilhante Especular"
#: modules/gltf/gltf_state.cpp
msgid "Json"
-msgstr ""
+msgstr "Json"
#: modules/gltf/gltf_state.cpp
#, fuzzy
@@ -17284,7 +17192,7 @@ msgstr "Com Dados"
#: modules/gltf/gltf_state.cpp
msgid "Use Named Skin Binds"
-msgstr ""
+msgstr "Usar Ligações de Skin Nomeadas"
#: modules/gltf/gltf_state.cpp
#, fuzzy
@@ -17293,7 +17201,7 @@ msgstr "Vista de Trás"
#: modules/gltf/gltf_state.cpp
msgid "Accessors"
-msgstr ""
+msgstr "Assessores"
#: modules/gltf/gltf_state.cpp
#, fuzzy
@@ -17313,11 +17221,11 @@ msgstr "Funcionalidades"
#: modules/gltf/gltf_state.cpp platform/uwp/export/export.cpp
msgid "Images"
-msgstr ""
+msgstr "Imagens"
#: modules/gltf/gltf_state.cpp
msgid "Cameras"
-msgstr ""
+msgstr "Câmeras"
#: modules/gltf/gltf_state.cpp servers/visual_server.cpp
#, fuzzy
@@ -17364,9 +17272,8 @@ msgid "Use In Baked Light"
msgstr "Consolidar Lightmaps"
#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
-#: scene/resources/navigation_mesh.cpp
msgid "Cell"
-msgstr ""
+msgstr "Célula"
#: modules/gridmap/grid_map.cpp
#, fuzzy
@@ -17392,7 +17299,20 @@ msgstr "Centro"
#: scene/2d/tile_map.cpp scene/3d/collision_object.cpp scene/3d/soft_body.cpp
#: scene/resources/material.cpp
msgid "Mask"
-msgstr ""
+msgstr "Máscara"
+
+#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
+#, fuzzy
+msgid "Bake Navigation"
+msgstr "Navegação"
+
+#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp
+#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp
+#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp
+#: scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Navigation Layers"
+msgstr "Modo Navegação"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Plane"
@@ -17557,19 +17477,19 @@ msgstr "Consolidar Lightmaps"
#: modules/lightmapper_cpu/register_types.cpp
msgid "Low Quality Ray Count"
-msgstr ""
+msgstr "Contagem de Raios de Baixa Qualidade"
#: modules/lightmapper_cpu/register_types.cpp
msgid "Medium Quality Ray Count"
-msgstr ""
+msgstr "Contagem de Raios de Média Qualidade"
#: modules/lightmapper_cpu/register_types.cpp
msgid "High Quality Ray Count"
-msgstr ""
+msgstr "Contagem de Raios de Alta Qualidade"
#: modules/lightmapper_cpu/register_types.cpp
msgid "Ultra Quality Ray Count"
-msgstr ""
+msgstr "Contagem de Raios de Ultra Qualidade"
#: modules/minimp3/audio_stream_mp3.cpp
#: modules/minimp3/resource_importer_mp3.cpp
@@ -17581,11 +17501,11 @@ msgstr "Compensação:"
#: modules/mobile_vr/mobile_vr_interface.cpp
msgid "Eye Height"
-msgstr ""
+msgstr "Altura do Olho"
#: modules/mobile_vr/mobile_vr_interface.cpp
msgid "IOD"
-msgstr ""
+msgstr "IOD"
#: modules/mobile_vr/mobile_vr_interface.cpp
#, fuzzy
@@ -17599,15 +17519,15 @@ msgstr "Vista sem sombras"
#: modules/mobile_vr/mobile_vr_interface.cpp
msgid "Oversample"
-msgstr ""
+msgstr "Excesso de Amostra"
#: modules/mobile_vr/mobile_vr_interface.cpp
msgid "K1"
-msgstr ""
+msgstr "K1"
#: modules/mobile_vr/mobile_vr_interface.cpp
msgid "K2"
-msgstr ""
+msgstr "K2"
#: modules/mono/csharp_script.cpp
msgid "Class name can't be a reserved keyword"
@@ -17695,7 +17615,7 @@ msgstr "Feito!"
#: modules/opensimplex/noise_texture.cpp
msgid "Seamless"
-msgstr ""
+msgstr "Sem Emenda"
#: modules/opensimplex/noise_texture.cpp
#, fuzzy
@@ -17704,11 +17624,11 @@ msgstr "Escala aleatória:"
#: modules/opensimplex/noise_texture.cpp
msgid "Bump Strength"
-msgstr ""
+msgstr "Força da Colisão"
#: modules/opensimplex/noise_texture.cpp
msgid "Noise"
-msgstr ""
+msgstr "Ruido"
#: modules/opensimplex/noise_texture.cpp
#, fuzzy
@@ -17717,11 +17637,11 @@ msgstr "Compensação da grelha:"
#: modules/opensimplex/open_simplex_noise.cpp
msgid "Octaves"
-msgstr ""
+msgstr "Oitavas"
#: modules/opensimplex/open_simplex_noise.cpp
msgid "Period"
-msgstr ""
+msgstr "Periodo"
#: modules/opensimplex/open_simplex_noise.cpp
#, fuzzy
@@ -17730,11 +17650,11 @@ msgstr "Perspetiva"
#: modules/opensimplex/open_simplex_noise.cpp
msgid "Lacunarity"
-msgstr ""
+msgstr "Lacunaridade"
#: modules/regex/regex.cpp
msgid "Subject"
-msgstr ""
+msgstr "Sujeito"
#: modules/regex/regex.cpp
#, fuzzy
@@ -17748,15 +17668,15 @@ msgstr "Configuração:"
#: modules/upnp/upnp.cpp
msgid "Discover Multicast If"
-msgstr ""
+msgstr "Descobrir se Multicast"
#: modules/upnp/upnp.cpp
msgid "Discover Local Port"
-msgstr ""
+msgstr "Descobrir Porta Local"
#: modules/upnp/upnp.cpp
msgid "Discover IPv6"
-msgstr ""
+msgstr "Descobrir IPv6"
#: modules/upnp/upnp_device.cpp
#, fuzzy
@@ -17770,7 +17690,7 @@ msgstr "Definir tipo de variável"
#: modules/upnp/upnp_device.cpp
msgid "IGD Control URL"
-msgstr ""
+msgstr "URL de controle IGD"
#: modules/upnp/upnp_device.cpp
#, fuzzy
@@ -17779,7 +17699,7 @@ msgstr "Definir tipo de variável"
#: modules/upnp/upnp_device.cpp
msgid "IGD Our Addr"
-msgstr ""
+msgstr "IGD Nosso Endereço"
#: modules/upnp/upnp_device.cpp
#, fuzzy
@@ -18460,7 +18380,7 @@ msgstr "SubCall"
#: modules/visual_script/visual_script_nodes.cpp scene/gui/graph_node.cpp
msgid "Title"
-msgstr ""
+msgstr "Titulo"
#: modules/visual_script/visual_script_nodes.cpp
msgid "Construct %s"
@@ -18530,19 +18450,19 @@ msgstr "Modo Prioridade"
#: modules/webrtc/webrtc_data_channel.h
msgid "WebRTC"
-msgstr ""
+msgstr "WebRTC"
#: modules/webrtc/webrtc_data_channel.h
msgid "Max Channel In Buffer (KB)"
-msgstr ""
+msgstr "Buffer máximo de canal (KB)"
#: modules/websocket/websocket_client.cpp
msgid "Verify SSL"
-msgstr ""
+msgstr "Verificar SSL"
#: modules/websocket/websocket_client.cpp
msgid "Trusted SSL Certificate"
-msgstr ""
+msgstr "Certificado SSL Confiável"
#: modules/websocket/websocket_macros.h
#, fuzzy
@@ -18556,7 +18476,7 @@ msgstr "Tamanho Máximo (KB)"
#: modules/websocket/websocket_macros.h
msgid "Max In Packets"
-msgstr ""
+msgstr "Máximo de Pacotes de Entrada"
#: modules/websocket/websocket_macros.h
#, fuzzy
@@ -18565,7 +18485,7 @@ msgstr "Tamanho Máximo (KB)"
#: modules/websocket/websocket_macros.h
msgid "Max Out Packets"
-msgstr ""
+msgstr "Máximo de Pacotes de Saida"
#: modules/websocket/websocket_macros.h
#, fuzzy
@@ -18574,7 +18494,7 @@ msgstr "Analisador de Rede"
#: modules/websocket/websocket_server.cpp
msgid "Bind IP"
-msgstr ""
+msgstr "Associar IP"
#: modules/websocket/websocket_server.cpp
#, fuzzy
@@ -18583,7 +18503,7 @@ msgstr "Caminho da Chave Privada SSH"
#: modules/websocket/websocket_server.cpp platform/javascript/export/export.cpp
msgid "SSL Certificate"
-msgstr ""
+msgstr "Certificado SSL"
#: modules/websocket/websocket_server.cpp
#, fuzzy
@@ -18611,11 +18531,11 @@ msgstr "Funcionalidades Principais:"
#: modules/webxr/webxr_interface.cpp
msgid "Requested Reference Space Types"
-msgstr ""
+msgstr "Tipos de Espaço de Referência Solicitados"
#: modules/webxr/webxr_interface.cpp
msgid "Reference Space Type"
-msgstr ""
+msgstr "Tipo de Espaço de Referência"
#: modules/webxr/webxr_interface.cpp
#, fuzzy
@@ -18634,7 +18554,7 @@ msgstr "Ajuste Inteligente"
#: platform/android/export/export.cpp
msgid "Android SDK Path"
-msgstr ""
+msgstr "Caminho do SDK Android"
#: platform/android/export/export.cpp
#, fuzzy
@@ -18643,35 +18563,35 @@ msgstr "Depurador"
#: platform/android/export/export.cpp
msgid "Debug Keystore User"
-msgstr ""
+msgstr "Depuração do Usuário do Armazenamento de Chaves"
#: platform/android/export/export.cpp
msgid "Debug Keystore Pass"
-msgstr ""
+msgstr "Depurar Senha de Armazenamento de Chaves"
#: platform/android/export/export.cpp
msgid "Force System User"
-msgstr ""
+msgstr "Forçar Usuário do Sistema"
#: platform/android/export/export.cpp
msgid "Shutdown ADB On Exit"
-msgstr ""
+msgstr "Desligar o ADB na Saída"
#: platform/android/export/export_plugin.cpp
msgid "Launcher Icons"
-msgstr ""
+msgstr "Ãcones do Inicializador"
#: platform/android/export/export_plugin.cpp
msgid "Main 192 X 192"
-msgstr ""
+msgstr "Principal 192 X 192"
#: platform/android/export/export_plugin.cpp
msgid "Adaptive Foreground 432 X 432"
-msgstr ""
+msgstr "Primeiro Plano Adaptável 432 X 432"
#: platform/android/export/export_plugin.cpp
msgid "Adaptive Background 432 X 432"
-msgstr ""
+msgstr "Plano de Fundo Adaptável 432 X 432"
#: platform/android/export/export_plugin.cpp
msgid "Package name is missing."
@@ -18701,7 +18621,7 @@ msgstr "O pacote deve ter pelo menos um separador '.'."
#: platform/android/export/export_plugin.cpp
msgid "Use Custom Build"
-msgstr ""
+msgstr "Usar Compilação Personalizada"
#: platform/android/export/export_plugin.cpp
#, fuzzy
@@ -18740,7 +18660,7 @@ msgstr "Senha"
#: platform/android/export/export_plugin.cpp
msgid "One Click Deploy"
-msgstr ""
+msgstr "Implantação com Um Clique"
#: platform/android/export/export_plugin.cpp
#, fuzzy
@@ -18749,7 +18669,7 @@ msgstr "Inspecionar instância anterior"
#: platform/android/export/export_plugin.cpp
msgid "Code"
-msgstr ""
+msgstr "Código"
#: platform/android/export/export_plugin.cpp
#, fuzzy
@@ -18783,7 +18703,7 @@ msgstr "Nome de Classe:"
#: platform/android/export/export_plugin.cpp
msgid "Retain Data On Uninstall"
-msgstr ""
+msgstr "Reter Dados na Desinstalação"
#: platform/android/export/export_plugin.cpp
#, fuzzy
@@ -18817,11 +18737,11 @@ msgstr "Empacotamento"
#: platform/android/export/export_plugin.cpp
msgid "Hand Tracking Frequency"
-msgstr ""
+msgstr "Frequência de Rastreamento Manual"
#: platform/android/export/export_plugin.cpp
msgid "Passthrough"
-msgstr ""
+msgstr "Atravessar"
#: platform/android/export/export_plugin.cpp
#, fuzzy
@@ -18855,7 +18775,7 @@ msgstr "Interface do Utilizador"
#: platform/android/export/export_plugin.cpp
msgid "Allow"
-msgstr ""
+msgstr "Permitir"
#: platform/android/export/export_plugin.cpp platform/uwp/export/export.cpp
#, fuzzy
@@ -18874,7 +18794,7 @@ msgstr "Expressão"
#: platform/android/export/export_plugin.cpp
msgid "Salt"
-msgstr ""
+msgstr "Sal"
#: platform/android/export/export_plugin.cpp
#, fuzzy
@@ -18924,10 +18844,6 @@ msgid "Could not execute on device."
msgstr "Incapaz de executar no dispositivo."
#: platform/android/export/export_plugin.cpp
-msgid "Unable to find the 'apksigner' tool."
-msgstr "Incapaz de localizar a ferramenta 'apksigner'."
-
-#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -19009,6 +18925,11 @@ msgid ""
"Note that the singleton was also renamed from \"GodotPayments\" to "
"\"GodotGooglePlayBilling\"."
msgstr ""
+"Módulo \"GodotPaymentV3\" inválido incluído na configuração do projeto "
+"\"android/modules\" (alterado no Godot 3.2.2).\n"
+"Substitua-o pelo plug-in primário \"GodotGooglePlayBilling\".\n"
+"Observe que o singleton também foi renomeado de \"GodotPayments\" para "
+"\"GodotGooglePlayBilling\"."
#: platform/android/export/export_plugin.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
@@ -19048,17 +18969,19 @@ msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version."
msgstr ""
"Versão de \"Target Sdk\" tem de ser maior ou igual à versão de \"Min Sdk\"."
+#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Code Signing"
+msgstr "Sinal"
+
#: 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."
+"'apksigner' could not be found. Please check that the command is available "
+"in the Android SDK build-tools directory. The resulting %s is unsigned."
msgstr ""
-"'apksigner' não foi encontrado.\n"
-"Verifique se o comando está disponível na diretoria Android SDK build-"
-"tools.\n"
-"O % resultante não está assinado."
+"'apksigner' não foi encontrado. Verifique se o comando está disponível no "
+"diretório do Android SDK build-tools. O %s resultante não está assinado."
#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
@@ -19073,6 +18996,10 @@ msgid "Could not find keystore, unable to export."
msgstr "Incapaz de encontrar keystore e exportar."
#: platform/android/export/export_plugin.cpp
+msgid "Could not start apksigner executable."
+msgstr "Não foi possível iniciar o executável apksigner."
+
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr "'apksigner' devolvido com erro #%d"
@@ -19102,8 +19029,8 @@ msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr "Nome de ficheiro inválido! APK Android exige a extensão *.apk."
#: platform/android/export/export_plugin.cpp
-msgid "Unsupported export format!\n"
-msgstr "Formato de exportação não suportado!\n"
+msgid "Unsupported export format!"
+msgstr "Formato de exportação não suportado!"
#: platform/android/export/export_plugin.cpp
msgid ""
@@ -19115,26 +19042,24 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Android build version mismatch:\n"
-" Template installed: %s\n"
-" Godot Version: %s\n"
+"Android build version mismatch: Template installed: %s, Godot version: %s. "
"Please reinstall Android build template from 'Project' menu."
msgstr ""
-"Incompatibilidade da versão Android:\n"
-" Modelo instalado: %s\n"
-" Versão Godot: %s\n"
-"Reinstale o modelo de compilação Android no menu 'Projeto'."
+"Incompatibilidade de versão de compilação do Android: Modelo instalado: %s, "
+"versão Godot: %s. Por favor, reinstale o modelo de compilação do Android no "
+"menu 'Projeto'."
#: platform/android/export/export_plugin.cpp
+#, fuzzy
msgid ""
-"Unable to overwrite res://android/build/res/*.xml files with project name"
+"Unable to overwrite res://android/build/res/*.xml files with project name."
msgstr ""
"Incapaz de sobrescrever ficheiros 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"
-msgstr "Incapaz de exportar ficheiros do projeto para projeto gradle\n"
+msgid "Could not export project files to gradle project."
+msgstr "Incapaz de exportar ficheiros do projeto para projeto gradle."
#: platform/android/export/export_plugin.cpp
msgid "Could not write expansion package file!"
@@ -19146,12 +19071,12 @@ msgstr "A compilar Projeto Android (gradle)"
#: platform/android/export/export_plugin.cpp
msgid ""
-"Building of Android project failed, check output for the error.\n"
+"Building of Android project failed, check output for the error. "
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
-"Falhou a compilação do projeto Android, verifique o erro na saída.\n"
-"Em alternativa visite docs.godotengine.org para a documentação sobre "
-"compilação Android."
+"Falhou a compilação do projeto Android, verifique o erro na saída. Em "
+"alternativa visite docs.godotengine.org para a documentação sobre compilação "
+"Android."
#: platform/android/export/export_plugin.cpp
msgid "Moving output"
@@ -19166,7 +19091,8 @@ msgstr ""
"projeto gradle por resultados."
#: platform/android/export/export_plugin.cpp
-msgid "Package not found: %s"
+#, fuzzy
+msgid "Package not found: \"%s\"."
msgstr "Pacote não encontrado: '%s'"
#: platform/android/export/export_plugin.cpp
@@ -19174,31 +19100,26 @@ msgid "Creating APK..."
msgstr "A criar APK..."
#: platform/android/export/export_plugin.cpp
-msgid ""
-"Could not find template APK to export:\n"
-"%s"
-msgstr ""
-"Incapaz de encontrar modelo APK para exportar:\n"
-"%s"
+msgid "Could not find template APK to export: \"%s\"."
+msgstr "Incapaz de encontrar modelo APK para exportar: \"%s\"."
#: platform/android/export/export_plugin.cpp
msgid ""
-"Missing libraries in the export template for the selected architectures: "
-"%s.\n"
+"Missing libraries in the export template for the selected architectures: %s. "
"Please build a template with all required libraries, or uncheck the missing "
"architectures in the export preset."
msgstr ""
"Bibliotecas em falta no modelo de exportação para as arquiteturas "
-"selecionadas: %s.\n"
-"Construa um modelo com todas as bibliotecas necessárias, ou desmarque as "
-"arquiteturas em falta na predefinição de exportação."
+"selecionadas: %s. Construa um modelo com todas as bibliotecas necessárias, "
+"ou desmarque as arquiteturas em falta no preset de exportação."
#: platform/android/export/export_plugin.cpp
msgid "Adding files..."
msgstr "A adicionar ficheiros..."
#: platform/android/export/export_plugin.cpp
-msgid "Could not export project files"
+#, fuzzy
+msgid "Could not export project files."
msgstr "Incapaz de exportar ficheiros do projeto"
#: platform/android/export/export_plugin.cpp
@@ -19219,67 +19140,67 @@ msgstr "O carácter \"%s\" não é permitido no Identificador."
#: platform/iphone/export/export.cpp
msgid "Landscape Launch Screens"
-msgstr ""
+msgstr "Telas de Inicialização de Paisagem"
#: platform/iphone/export/export.cpp
msgid "iPhone 2436 X 1125"
-msgstr ""
+msgstr "iPhone 2436 X 1125"
#: platform/iphone/export/export.cpp
msgid "iPhone 2208 X 1242"
-msgstr ""
+msgstr "iPhone 2208 X 1242"
#: platform/iphone/export/export.cpp
msgid "iPad 1024 X 768"
-msgstr ""
+msgstr "iPad 1024 X 768"
#: platform/iphone/export/export.cpp
msgid "iPad 2048 X 1536"
-msgstr ""
+msgstr "iPad 2048 X 1536"
#: platform/iphone/export/export.cpp
msgid "Portrait Launch Screens"
-msgstr ""
+msgstr "Telas de Lançamento de Retrato"
#: platform/iphone/export/export.cpp
msgid "iPhone 640 X 960"
-msgstr ""
+msgstr "iPhone 640 X 960"
#: platform/iphone/export/export.cpp
msgid "iPhone 640 X 1136"
-msgstr ""
+msgstr "iPhone 640 X 1136"
#: platform/iphone/export/export.cpp
msgid "iPhone 750 X 1334"
-msgstr ""
+msgstr "iPhone 750 X 1334"
#: platform/iphone/export/export.cpp
msgid "iPhone 1125 X 2436"
-msgstr ""
+msgstr "iPhone 1125 X 2436"
#: platform/iphone/export/export.cpp
msgid "iPad 768 X 1024"
-msgstr ""
+msgstr "iPad 768 X 1024"
#: platform/iphone/export/export.cpp
msgid "iPad 1536 X 2048"
-msgstr ""
+msgstr "iPad 1536 X 2048"
#: platform/iphone/export/export.cpp
msgid "iPhone 1242 X 2208"
-msgstr ""
+msgstr "iPhone 1242 X 2208"
#: platform/iphone/export/export.cpp
msgid "App Store Team ID"
-msgstr ""
+msgstr "ID da Equipe na App Store"
#: platform/iphone/export/export.cpp
msgid "Provisioning Profile UUID Debug"
-msgstr ""
+msgstr "Depuração de UUID do Perfil de Provisionamento"
#: platform/iphone/export/export.cpp
msgid "Code Sign Identity Debug"
-msgstr ""
+msgstr "Depuração de Identidade de Sinal de Código"
#: platform/iphone/export/export.cpp
#, fuzzy
@@ -19288,11 +19209,11 @@ msgstr "Exportar com Depuração"
#: platform/iphone/export/export.cpp
msgid "Provisioning Profile UUID Release"
-msgstr ""
+msgstr "Liberação de UUID do Perfil de Provisionamento"
#: platform/iphone/export/export.cpp
msgid "Code Sign Identity Release"
-msgstr ""
+msgstr "Liberação de Identidade de Sinal de Código"
#: platform/iphone/export/export.cpp
#, fuzzy
@@ -19301,11 +19222,11 @@ msgstr "Modo exportação:"
#: platform/iphone/export/export.cpp
msgid "Targeted Device Family"
-msgstr ""
+msgstr "Família de Dispositivos Visados"
#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
msgid "Info"
-msgstr ""
+msgstr "Informações"
#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
#, fuzzy
@@ -19349,11 +19270,11 @@ msgstr "Interface do Utilizador"
#: platform/iphone/export/export.cpp
msgid "Accessible From Files App"
-msgstr ""
+msgstr "Acessível a partir do Aplicativo de Arquivos"
#: platform/iphone/export/export.cpp
msgid "Accessible From iTunes Sharing"
-msgstr ""
+msgstr "Acessível a partir do Compartilhamento do iTunes"
#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
#, fuzzy
@@ -19377,43 +19298,43 @@ msgstr "Descrições da Propriedade"
#: platform/iphone/export/export.cpp
msgid "iPhone 120 X 120"
-msgstr ""
+msgstr "iPhone 120 X 120"
#: platform/iphone/export/export.cpp
msgid "iPhone 180 X 180"
-msgstr ""
+msgstr "iPhone 180 X 180"
#: platform/iphone/export/export.cpp
msgid "iPad 76 X 76"
-msgstr ""
+msgstr "iPad 76 X 76"
#: platform/iphone/export/export.cpp
msgid "iPad 152 X 152"
-msgstr ""
+msgstr "iPad 152 X 152"
#: platform/iphone/export/export.cpp
msgid "iPad 167 X 167"
-msgstr ""
+msgstr "iPad 167 X 167"
#: platform/iphone/export/export.cpp
msgid "App Store 1024 X 1024"
-msgstr ""
+msgstr "App Store 1024 X 1024"
#: platform/iphone/export/export.cpp
msgid "Spotlight 40 X 40"
-msgstr ""
+msgstr "Destaque 40 X 40"
#: platform/iphone/export/export.cpp
msgid "Spotlight 80 X 80"
-msgstr ""
+msgstr "Destaque 80 X 80"
#: platform/iphone/export/export.cpp
msgid "Storyboard"
-msgstr ""
+msgstr "Storyboard"
#: platform/iphone/export/export.cpp
msgid "Use Launch Screen Storyboard"
-msgstr ""
+msgstr "Use o Storyboard da Tela de Inicialização"
#: platform/iphone/export/export.cpp
#, fuzzy
@@ -19440,6 +19361,17 @@ msgstr "CustomNode"
msgid "Custom BG Color"
msgstr "CustomNode"
+#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Prepare Templates"
+msgstr "Gerir Modelos"
+
+#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Export template not found."
+msgstr "Modelo de lançamento personalizado não encontrado."
+
#: platform/iphone/export/export.cpp
msgid "App Store Team ID not specified - cannot configure the project."
msgstr ""
@@ -19462,22 +19394,35 @@ msgid "Run exported HTML in the system's default browser."
msgstr "Executar HTML exportado no navegador predefinido do sistema."
#: platform/javascript/export/export.cpp
-msgid "Could not open template for export:"
+#, fuzzy
+msgid "Could not open template for export: \"%s\"."
msgstr "Incapaz de abrir modelo para exportação:"
#: platform/javascript/export/export.cpp
-msgid "Invalid export template:"
+#, fuzzy
+msgid "Invalid export template: \"%s\"."
msgstr "Modelo de exportação inválido:"
#: platform/javascript/export/export.cpp
-msgid "Could not write file:"
+#, fuzzy
+msgid "Could not write file: \"%s\"."
msgstr "Incapaz de escrever ficheiro:"
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Icon Creation"
+msgstr "Definir Margem"
+
#: platform/javascript/export/export.cpp
-msgid "Could not read file:"
+#, fuzzy
+msgid "Could not read file: \"%s\"."
msgstr "Incapaz de ler ficheiro:"
#: platform/javascript/export/export.cpp
+msgid "PWA"
+msgstr "PWA"
+
+#: platform/javascript/export/export.cpp
#, fuzzy
msgid "Variant"
msgstr "Separação:"
@@ -19494,15 +19439,15 @@ msgstr "Expressão"
#: platform/javascript/export/export.cpp
msgid "For Desktop"
-msgstr ""
+msgstr "Para Desktop"
#: platform/javascript/export/export.cpp
msgid "For Mobile"
-msgstr ""
+msgstr "Para Mobile"
#: platform/javascript/export/export.cpp
msgid "HTML"
-msgstr ""
+msgstr "HTML"
#: platform/javascript/export/export.cpp
#, fuzzy
@@ -19516,15 +19461,15 @@ msgstr "CustomNode"
#: platform/javascript/export/export.cpp
msgid "Head Include"
-msgstr ""
+msgstr "Incluir Cabeçalho"
#: platform/javascript/export/export.cpp
msgid "Canvas Resize Policy"
-msgstr ""
+msgstr "Política de Redimensionamento da Tela"
#: platform/javascript/export/export.cpp
msgid "Focus Canvas On Start"
-msgstr ""
+msgstr "Focar Tela ao Iniciar"
#: platform/javascript/export/export.cpp
#, fuzzy
@@ -19533,47 +19478,50 @@ msgstr "Filtrar sinais"
#: platform/javascript/export/export.cpp
msgid "Progressive Web App"
-msgstr ""
+msgstr "Aplicativo da Web Progressivo"
#: platform/javascript/export/export.cpp
msgid "Offline Page"
-msgstr ""
+msgstr "Pagina Offline"
#: platform/javascript/export/export.cpp
msgid "Icon 144 X 144"
-msgstr ""
+msgstr "Ãcone 144 X 144"
#: platform/javascript/export/export.cpp
msgid "Icon 180 X 180"
-msgstr ""
+msgstr "Ãcone 180 X 180"
#: platform/javascript/export/export.cpp
msgid "Icon 512 X 512"
-msgstr ""
+msgstr "Ãcone 512 X 512"
#: platform/javascript/export/export.cpp
-msgid "Could not read HTML shell:"
+#, fuzzy
+msgid "Could not read HTML shell: \"%s\"."
msgstr "Incapaz de ler shell HTML:"
#: platform/javascript/export/export.cpp
-msgid "Could not create HTTP server directory:"
+#, fuzzy
+msgid "Could not create HTTP server directory: %s."
msgstr "Incapaz de criar diretoria do servidor HTTP:"
#: platform/javascript/export/export.cpp
-msgid "Error starting HTTP server:"
+#, fuzzy
+msgid "Error starting HTTP server: %d."
msgstr "Erro ao iniciar servidor HTTP:"
#: platform/javascript/export/export.cpp
msgid "Web"
-msgstr ""
+msgstr "Web"
#: platform/javascript/export/export.cpp
msgid "HTTP Host"
-msgstr ""
+msgstr "Host HTTP"
#: platform/javascript/export/export.cpp
msgid "HTTP Port"
-msgstr ""
+msgstr "Porta HTTP"
#: platform/javascript/export/export.cpp
#, fuzzy
@@ -19582,15 +19530,15 @@ msgstr "Usar Ajuste"
#: platform/javascript/export/export.cpp
msgid "SSL Key"
-msgstr ""
+msgstr "Chave SSL"
#: platform/osx/export/codesign.cpp
msgid "Can't get filesystem access."
-msgstr ""
+msgstr "Não é possível obter acesso ao sistema de arquivos."
#: platform/osx/export/codesign.cpp
msgid "Failed to get Info.plist hash."
-msgstr ""
+msgstr "Falha ao obter o hash de Info.plist."
#: platform/osx/export/codesign.cpp
#, fuzzy
@@ -19599,7 +19547,7 @@ msgstr "Nome do projeto inválido."
#: platform/osx/export/codesign.cpp
msgid "Invalid Info.plist, no bundle id."
-msgstr ""
+msgstr "Info.plist inválido, sem ID de pacote."
#: platform/osx/export/codesign.cpp
#, fuzzy
@@ -19613,7 +19561,7 @@ msgstr "Não consegui criar pasta."
#: platform/osx/export/codesign.cpp
msgid "Failed to extract thin binary."
-msgstr ""
+msgstr "Falha ao extrair o binário fino."
#: platform/osx/export/codesign.cpp
#, fuzzy
@@ -19622,7 +19570,7 @@ msgstr "Caminho base inválido."
#: platform/osx/export/codesign.cpp
msgid "Already signed!"
-msgstr ""
+msgstr "Já assinado!"
#: platform/osx/export/codesign.cpp
#, fuzzy
@@ -19631,7 +19579,7 @@ msgstr "Falha ao carregar recurso."
#: platform/osx/export/codesign.cpp
msgid "Failed to create _CodeSignature subfolder."
-msgstr ""
+msgstr "Falha ao criar a subpasta _CodeSignature."
#: platform/osx/export/codesign.cpp
#, fuzzy
@@ -19650,19 +19598,19 @@ msgstr "Extensão inválida."
#: platform/osx/export/codesign.cpp
msgid "Can't resize signature load command."
-msgstr ""
+msgstr "Não é possível redimensionar o comando de carregamento de assinatura."
#: platform/osx/export/codesign.cpp
msgid "Failed to create fat binary."
-msgstr ""
+msgstr "Falha ao criar binário gordo."
#: platform/osx/export/codesign.cpp
msgid "Unknown bundle type."
-msgstr ""
+msgstr "Tipo de pacote desconhecido."
#: platform/osx/export/codesign.cpp
msgid "Unknown object type."
-msgstr ""
+msgstr "Tipo de objeto desconhecido."
#: platform/osx/export/export.cpp
#, fuzzy
@@ -19671,7 +19619,7 @@ msgstr "Categoria:"
#: platform/osx/export/export.cpp
msgid "High Res"
-msgstr ""
+msgstr "Alta resolução"
#: platform/osx/export/export.cpp
#, fuzzy
@@ -19680,7 +19628,7 @@ msgstr "Descrição"
#: platform/osx/export/export.cpp
msgid "Address Book Usage Description"
-msgstr ""
+msgstr "Descrição de Uso do Catálogo de Endereços"
#: platform/osx/export/export.cpp
#, fuzzy
@@ -19704,15 +19652,15 @@ msgstr "Descrições do Método"
#: platform/osx/export/export.cpp
msgid "Downloads Folder Usage Description"
-msgstr ""
+msgstr "Descrição do Uso da Pasta de Downloads"
#: platform/osx/export/export.cpp
msgid "Network Volumes Usage Description"
-msgstr ""
+msgstr "Descrição do Uso de Volumes de Rede"
#: platform/osx/export/export.cpp
msgid "Removable Volumes Usage Description"
-msgstr ""
+msgstr "Descrição de Uso de Volumes Removíveis"
#: platform/osx/export/export.cpp platform/windows/export/export.cpp
#, fuzzy
@@ -19732,7 +19680,7 @@ msgstr "Tempo"
#: platform/osx/export/export.cpp
msgid "Hardened Runtime"
-msgstr ""
+msgstr "Tempo de Execução Reforçado"
#: platform/osx/export/export.cpp
#, fuzzy
@@ -19861,9 +19809,27 @@ msgid "Apple Team ID"
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open icon file \"%s\"."
+msgstr "Incapaz de exportar ficheiros do projeto"
+
+#: platform/osx/export/export.cpp
+msgid "Could not start xcrun executable."
+msgstr "Não foi possível iniciar o executável xcrun."
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization failed."
+msgstr "Localização"
+
+#: platform/osx/export/export.cpp
+msgid "Notarization request UUID: \"%s\""
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid ""
-"Note: The notarization process generally takes less than an hour. When the "
-"process is completed, you'll receive an email."
+"The notarization process generally takes less than an hour. When the process "
+"is completed, you'll receive an email."
msgstr ""
#: platform/osx/export/export.cpp
@@ -19879,20 +19845,75 @@ msgid ""
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign failed with error \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign require regex module."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Could not start codesign executable, make sure Xcode command line tools are "
+"installed."
+msgstr ""
+
+#: platform/osx/export/export.cpp platform/windows/export/export.cpp
#, fuzzy
msgid "No identity found."
msgstr "Ãcones não encontrados."
#: platform/osx/export/export.cpp
#, fuzzy
+msgid "Cannot sign file %s."
+msgstr "Erro ao guardar ficheiro: %s"
+
+#: platform/osx/export/export.cpp
+msgid "Relative symlinks are not supported, exported \"%s\" might be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "DMG Creation"
+msgstr "Direções"
+
+#: platform/osx/export/export.cpp
+msgid "Could not start hdiutil executable."
+msgstr "Não foi possível iniciar o executável hdiutil."
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed - file exists."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
msgid "Creating app bundle"
msgstr "A criar miniatura"
#: platform/osx/export/export.cpp
-msgid "Could not find template app to export:"
+#, fuzzy
+msgid "Could not find template app to export: \"%s\"."
msgstr "Incapaz de encontrar modelo app para exportar:"
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid export format."
+msgstr "Modelo de exportação inválido:"
+
+#: platform/osx/export/export.cpp
msgid ""
"Relative symlinks are not supported on this OS, the exported project might "
"be broken!"
@@ -19900,7 +19921,7 @@ msgstr ""
#: platform/osx/export/export.cpp
msgid ""
-"Requested template binary '%s' not found. It might be missing from your "
+"Requested template binary \"%s\" not found. It might be missing from your "
"template archive."
msgstr ""
@@ -19941,6 +19962,15 @@ msgid "Sending archive for notarization"
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "ZIP Creation"
+msgstr "Projeto"
+
+#: platform/osx/export/export.cpp
+msgid "Could not open file to read from path \"%s\"."
+msgstr "Não foi possível abrir o arquivo para ler do caminho \"%s\"."
+
+#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr "Identificador de pacote inválido:"
@@ -20261,6 +20291,11 @@ msgid "Debug Algorithm"
msgstr "Depurador"
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to rename temporary file \"%s\"."
+msgstr "Incapaz de remover ficheiro temporário:"
+
+#: platform/windows/export/export.cpp
msgid "Identity Type"
msgstr ""
@@ -20307,6 +20342,70 @@ msgid "Trademarks"
msgstr ""
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Resources Modification"
+msgstr "Rotação aleatória:"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find rcedit executable at \"%s\"."
+msgstr "Incapaz de encontrar keystore e exportar."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find wine executable at \"%s\"."
+msgstr "Incapaz de encontrar keystore e exportar."
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start rcedit executable, configure rcedit path in the Editor "
+"Settings (Export > Windows > Rcedit)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"rcedit failed to modify executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find signtool executable at \"%s\"."
+msgstr "Incapaz de encontrar keystore e exportar."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find osslsigncode executable at \"%s\"."
+msgstr "Incapaz de encontrar keystore e exportar."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid identity type."
+msgstr "Identificador Inválido:"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid timestamp server."
+msgstr "Nome inválido."
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start signtool executable, configure signtool path in the Editor "
+"Settings (Export > Windows > Signtool)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Signtool failed to sign executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to remove temporary file \"%s\"."
+msgstr "Incapaz de remover ficheiro temporário:"
+
+#: platform/windows/export/export.cpp
msgid ""
"The rcedit tool must be configured in the Editor Settings (Export > Windows "
"> Rcedit) to change the icon or app information data."
@@ -20325,6 +20424,23 @@ msgid "Invalid product version:"
msgstr "Versão de produto inválida:"
#: platform/windows/export/export.cpp
+msgid "Windows executables cannot be >= 4 GiB."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+#, fuzzy
+msgid "Failed to open executable file \"%s\"."
+msgstr "Extensão inválida."
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable file header corrupted."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable \"pck\" section not found."
+msgstr ""
+
+#: platform/windows/export/export.cpp
#, fuzzy
msgid "Windows"
msgstr "Nova Janela"
@@ -20341,6 +20457,10 @@ msgstr ""
msgid "Wine"
msgstr ""
+#: platform/x11/export/export.cpp
+msgid "32-bit executables cannot have embedded data >= 4 GiB."
+msgstr ""
+
#: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp
#: scene/resources/texture.cpp
#, fuzzy
@@ -20468,7 +20588,8 @@ msgstr ""
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/3d/light.cpp scene/3d/reflection_probe.cpp
-#: scene/3d/visual_instance.cpp scene/resources/material.cpp
+#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp
+#: scene/resources/material.cpp
#, fuzzy
msgid "Max Distance"
msgstr "Distância de escolha:"
@@ -21282,6 +21403,18 @@ msgstr ""
msgid "Edge Connection Margin"
msgstr "Editar Conexão:"
+#: scene/2d/navigation_2d.cpp
+msgid ""
+"'Navigation2D' node and 'Navigation2D.get_simple_path()' are deprecated and "
+"will be removed in a future version. Use 'Navigation2DServer.map_get_path()' "
+"instead."
+msgstr ""
+
+#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
+#, fuzzy
+msgid "Path Desired Distance"
+msgstr "Distância de escolha:"
+
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
msgid "Target Desired Distance"
msgstr ""
@@ -21342,17 +21475,19 @@ msgstr ""
"funcionar. Defina a propriedade ou desenhe o polígono."
#: scene/2d/navigation_polygon.cpp
-msgid ""
-"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
-"node. It only provides navigation data."
-msgstr ""
-"NavigationPolygonInstance tem de ser filho ou neto de um nó Navigation2D. "
-"Apenas fornece dados de navegação."
-
-#: scene/2d/navigation_polygon.cpp
msgid "Navpoly"
msgstr ""
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Enter Cost"
+msgstr "Centro Fundo"
+
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Travel Cost"
+msgstr "Viagem"
+
#: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp
#: scene/main/canvas_layer.cpp
msgid "Rotation Degrees"
@@ -22562,6 +22697,13 @@ msgstr ""
msgid "Transform Normals"
msgstr "Normais da Transformação"
+#: scene/3d/navigation.cpp
+msgid ""
+"'Navigation' node and 'Navigation.get_simple_path()' are deprecated and will "
+"be removed in a future version. Use 'NavigationServer.map_get_path()' "
+"instead."
+msgstr ""
+
#: scene/3d/navigation.cpp scene/resources/curve.cpp
#, fuzzy
msgid "Up Vector"
@@ -22587,14 +22729,6 @@ msgid ""
"The NavigationAgent can be used only under a Spatial inheriting parent node."
msgstr "O NavigationAgent pode ser apenas usado dentro de um nó espacial."
-#: scene/3d/navigation_mesh_instance.cpp
-msgid ""
-"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
-"It only provides navigation data."
-msgstr ""
-"NavigationMeshInstance tem de ser filho ou neto de um nó Navigation. Apenas "
-"fornece dados de navegação."
-
#: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp
#, fuzzy
msgid "NavMesh"
@@ -25341,6 +25475,16 @@ msgid "3D Physics"
msgstr "Física"
#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "2D Navigation"
+msgstr "Navegação"
+
+#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "3D Navigation"
+msgstr "Navegação"
+
+#: scene/register_scene_types.cpp
msgid "Use hiDPI"
msgstr ""
@@ -26766,7 +26910,7 @@ msgstr "Transmissão"
msgid "Refraction"
msgstr "Separação:"
-#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp
+#: scene/resources/material.cpp
msgid "Detail"
msgstr ""
@@ -26851,7 +26995,12 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
-msgid "Sample Partition Type"
+msgid "Sampling"
+msgstr "A escalar: "
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Partition Type"
msgstr "Definir tipo de variável"
#: scene/resources/navigation_mesh.cpp
@@ -26869,10 +27018,15 @@ msgid "Source Group Name"
msgstr "Fonte"
#: scene/resources/navigation_mesh.cpp
-msgid "Agent"
+msgid "Cells"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Agents"
+msgstr "Argumentos da Cena Principal:"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Max Climb"
msgstr ""
@@ -26882,11 +27036,16 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
+msgid "Regions"
+msgstr "Região"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
msgid "Merge Size"
msgstr "Mesclar a partir da Cena"
#: scene/resources/navigation_mesh.cpp
-msgid "Edge"
+msgid "Edges"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -26900,6 +27059,11 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
+msgid "Details"
+msgstr "Mostrar Predefinição"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
msgid "Sample Distance"
msgstr "Distância de escolha:"
@@ -26917,9 +27081,19 @@ msgid "Ledge Spans"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Filter Walkable Low Height Spans"
+msgid "Walkable Low Height Spans"
msgstr ""
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB"
+msgstr "A gerar AABB"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB Offset"
+msgstr "Compensação:"
+
#: scene/resources/occluder_shape.cpp
msgid "Spheres"
msgstr ""
@@ -27333,6 +27507,11 @@ msgid "Scenario"
msgstr "Cena"
#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Navigation Map"
+msgstr "Navegação"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
msgid "Direct Space State"
msgstr ""
@@ -27350,6 +27529,26 @@ msgstr "Linear Esquerda"
msgid "Default Angular Damp"
msgstr ""
+#: scene/resources/world.cpp
+#, fuzzy
+msgid "Default Map Up"
+msgstr "Predefinição"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Size"
+msgstr "Pré-visualização Predefinida"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Height"
+msgstr "Em teste"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Edge Connection Margin"
+msgstr "Editar Conexão:"
+
#: scene/resources/world_2d.cpp
msgid "Canvas"
msgstr ""
diff --git a/editor/translations/pt_BR.po b/editor/translations/pt_BR.po
index 74e61e14bc..230c927086 100644
--- a/editor/translations/pt_BR.po
+++ b/editor/translations/pt_BR.po
@@ -129,7 +129,7 @@
# Henrique Darko <henridark00@gmail.com>, 2021.
# Cearaj <pmoraisleal@gmail.com>, 2021.
# Alefy San <alefyferreiradeoliveira@outlook.com>, 2021.
-# Joel Gomes da Silva <joelgomes1994@hotmail.com>, 2021.
+# Joel Gomes da Silva <joelgomes1994@hotmail.com>, 2021, 2022.
# Orangotango De tanga <luizinho0045@gmail.com>, 2021.
# Felipe SiFa <felipe@logus.digital>, 2022.
# Gabriel Gian <gabrielgian@live.com>, 2022.
@@ -139,12 +139,14 @@
# Daniel Abrante <danielabrante@protonmail.com>, 2022.
# blue wemes <bluewemes@gmail.com>, 2022.
# José Miranda Neto <dodimi95@gmail.com>, 2022.
+# lucas rossy brasil coelho <lucasrossy270@gmail.com>, 2022.
+# Kaycke <kaycke@ymail.com>, 2022.
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: 2022-06-08 06:48+0000\n"
+"PO-Revision-Date: 2022-06-29 10:04+0000\n"
"Last-Translator: Douglas Leão <djlsplays@gmail.com>\n"
"Language-Team: Portuguese (Brazil) <https://hosted.weblate.org/projects/"
"godot-engine/godot/pt_BR/>\n"
@@ -153,7 +155,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.13-dev\n"
+"X-Generator: Weblate 4.13.1-dev\n"
#: core/bind/core_bind.cpp main/main.cpp
msgid "Tablet Driver"
@@ -337,9 +339,10 @@ msgid "Data"
msgstr "Dados"
#: core/io/file_access_network.cpp core/register_core_types.cpp
-#: editor/editor_settings.cpp main/main.cpp
+#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
#: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h
+#: scene/gui/file_dialog.cpp
msgid "Network"
msgstr "Rede"
@@ -443,9 +446,8 @@ msgid "Not enough bytes for decoding bytes, or invalid format."
msgstr "Não há bytes suficientes para decodificar, ou o formato é inválido."
#: core/math/expression.cpp
-#, fuzzy
msgid "Invalid input %d (not passed) in expression"
-msgstr "Entrada inválida %i (não passada) na expressão"
+msgstr "Entrada inválida %d (não passada) na expressão"
#: core/math/expression.cpp
msgid "self can't be used because instance is null (not passed)"
@@ -488,6 +490,14 @@ msgstr "Fila de Mensagens"
msgid "Max Size (KB)"
msgstr "Tamanho Máximo (KB)"
+#: core/os/input.cpp
+msgid "Mouse Mode"
+msgstr "Modo do cursor"
+
+#: core/os/input.cpp
+msgid "Use Accumulated Input"
+msgstr "Usar entrada acumulada"
+
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: servers/audio_server.cpp
msgid "Device"
@@ -667,7 +677,8 @@ msgstr "Descrição"
#: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
-#: main/main.cpp
+#: main/main.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp
msgid "Run"
msgstr "Rodar"
@@ -701,13 +712,13 @@ msgstr "Nome do Diretório de Usuário Personalizado"
#: platform/uwp/os_uwp.cpp
#, fuzzy
msgid "Display"
-msgstr "Exibir Tudo"
+msgstr "Exibição"
#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp
#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp
#: scene/3d/label_3d.cpp scene/gui/text_edit.cpp scene/resources/texture.cpp
msgid "Width"
-msgstr ""
+msgstr "Largura"
#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp
#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp
@@ -715,23 +726,22 @@ msgstr ""
#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp
#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp
#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp
-#, fuzzy
msgid "Height"
-msgstr "Luz"
+msgstr "Altura"
#: core/project_settings.cpp
msgid "Always On Top"
-msgstr ""
+msgstr "Sempre no topo"
#: core/project_settings.cpp
#, fuzzy
msgid "Test Width"
-msgstr "Largura Esquerda"
+msgstr "Largura de teste"
#: core/project_settings.cpp
#, fuzzy
msgid "Test Height"
-msgstr "Testando"
+msgstr "Teste de altura"
#: core/project_settings.cpp editor/animation_track_editor.cpp
#: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp
@@ -754,6 +764,10 @@ msgid "Main Run Args"
msgstr "Argumentos de Execução Principais"
#: core/project_settings.cpp
+msgid "Scene Naming"
+msgstr "Nomeação de Cena"
+
+#: core/project_settings.cpp
msgid "Search In File Extensions"
msgstr "Pesquisar em Extensões de Arquivo"
@@ -761,18 +775,14 @@ msgstr "Pesquisar em Extensões de Arquivo"
msgid "Script Templates Search Path"
msgstr "Caminho de Pesquisa de Modelos de Script"
-#: core/project_settings.cpp editor/editor_node.cpp
-#: editor/plugins/version_control_editor_plugin.cpp
-msgid "Version Control"
-msgstr "Controle de Versão"
-
#: core/project_settings.cpp
-msgid "Autoload On Startup"
+#, fuzzy
+msgid "Version Control Autoload On Startup"
msgstr "Carregamento Automático na Inicialização"
#: core/project_settings.cpp
-msgid "Plugin Name"
-msgstr "Nome do Plugin"
+msgid "Version Control Plugin Name"
+msgstr "Nome do plugin de controle de Versão"
#: core/project_settings.cpp scene/2d/collision_object_2d.cpp
#: scene/3d/collision_object.cpp scene/gui/control.cpp
@@ -879,7 +889,8 @@ msgid "Quality"
msgstr "Qualidade"
#: core/project_settings.cpp scene/gui/file_dialog.cpp
-#: scene/main/scene_tree.cpp servers/visual_server.cpp
+#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp
+#: servers/visual_server.cpp
msgid "Filters"
msgstr "Filtros"
@@ -1008,7 +1019,7 @@ msgstr "Teste"
#: core/translation.cpp scene/resources/font.cpp
msgid "Fallback"
-msgstr ""
+msgstr "Fallback"
#: core/ustring.cpp scene/resources/segment_shape_2d.cpp
msgid "B"
@@ -1070,7 +1081,6 @@ msgstr "2D"
#: drivers/gles2/rasterizer_canvas_base_gles2.cpp
#: drivers/gles3/rasterizer_canvas_base_gles3.cpp
-#, fuzzy
msgid "Snapping"
msgstr "Encaixe inteligente"
@@ -1083,7 +1093,7 @@ msgstr "Usar Encaixe de Pixel"
#: drivers/gles2/rasterizer_scene_gles2.cpp
#: drivers/gles3/rasterizer_scene_gles3.cpp
msgid "Immediate Buffer Size (KB)"
-msgstr ""
+msgstr "Tamanho imediato do Buffer (KB)"
#: drivers/gles2/rasterizer_storage_gles2.cpp
#: drivers/gles3/rasterizer_storage_gles3.cpp
@@ -1093,28 +1103,27 @@ msgstr "Mapeamento de luz"
#: drivers/gles2/rasterizer_storage_gles2.cpp
#: drivers/gles3/rasterizer_storage_gles3.cpp
msgid "Use Bicubic Sampling"
-msgstr ""
+msgstr "Usar amostragem bicúbica"
#: drivers/gles3/rasterizer_scene_gles3.cpp
msgid "Max Renderable Elements"
-msgstr ""
+msgstr "Máximo de elementos renderizáveis"
#: drivers/gles3/rasterizer_scene_gles3.cpp
msgid "Max Renderable Lights"
-msgstr ""
+msgstr "Máximo de luzes renderizáveis"
#: drivers/gles3/rasterizer_scene_gles3.cpp
-#, fuzzy
msgid "Max Renderable Reflections"
-msgstr "Seleção Central"
+msgstr "Reflexões máximas renderizáveis"
#: drivers/gles3/rasterizer_scene_gles3.cpp
msgid "Max Lights Per Object"
-msgstr ""
+msgstr "Máximo de luzes por objeto"
#: drivers/gles3/rasterizer_scene_gles3.cpp
msgid "Subsurface Scattering"
-msgstr ""
+msgstr "Dispersão Subsuperficial"
#: drivers/gles3/rasterizer_scene_gles3.cpp editor/animation_track_editor.cpp
#: editor/import/resource_importer_texture.cpp
@@ -1135,11 +1144,11 @@ msgstr "Seguir Superfície"
#: drivers/gles3/rasterizer_scene_gles3.cpp
msgid "Weight Samples"
-msgstr ""
+msgstr "Amostras de Peso"
#: drivers/gles3/rasterizer_scene_gles3.cpp
msgid "Voxel Cone Tracing"
-msgstr ""
+msgstr "Rastreamento de Cone Voxel"
#: drivers/gles3/rasterizer_scene_gles3.cpp scene/resources/environment.cpp
msgid "High Quality"
@@ -1221,9 +1230,8 @@ msgstr "Alterar Chamada da Animação"
#: editor/animation_track_editor.cpp scene/2d/animated_sprite.cpp
#: scene/2d/sprite.cpp scene/3d/sprite_3d.cpp
#: scene/resources/default_theme/default_theme.cpp
-#, fuzzy
msgid "Frame"
-msgstr "Frame %"
+msgstr "Quadro"
#: editor/animation_track_editor.cpp editor/editor_profiler.cpp
#: scene/2d/cpu_particles_2d.cpp scene/2d/particles_2d.cpp
@@ -1234,7 +1242,6 @@ msgstr "Tempo"
#: editor/animation_track_editor.cpp editor/import/resource_importer_scene.cpp
#: platform/osx/export/export.cpp
-#, fuzzy
msgid "Location"
msgstr "Localização"
@@ -1250,14 +1257,13 @@ msgid "Value"
msgstr "Valor"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Arg Count"
-msgstr "Quantidade"
+msgstr "Quantia de argumentos"
#: editor/animation_track_editor.cpp main/main.cpp
#: modules/mono/mono_gd/gd_mono.cpp
msgid "Args"
-msgstr ""
+msgstr "Argumentos"
#: editor/animation_track_editor.cpp editor/editor_settings.cpp
#: editor/script_editor_debugger.cpp modules/gltf/gltf_accessor.cpp
@@ -1281,17 +1287,15 @@ msgstr "Definir Manipulador"
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/audio/audio_stream_player.cpp scene/gui/video_player.cpp
msgid "Stream"
-msgstr ""
+msgstr "Fluxo"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Start Offset"
-msgstr "Deslocamento da Grade:"
+msgstr "Iniciar deslocamento"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "End Offset"
-msgstr "Deslocamento H"
+msgstr "Terminar deslocamento"
#: editor/animation_track_editor.cpp editor/editor_settings.cpp
#: editor/import/resource_importer_scene.cpp
@@ -1415,19 +1419,16 @@ msgid "Remove this track."
msgstr "Remover esta faixa."
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Time (s):"
-msgstr "Tempo (s): "
+msgstr "Tempo (s):"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Position:"
-msgstr "Posição"
+msgstr "Posição:"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Rotation:"
-msgstr "Rotação"
+msgstr "Rotação:"
#: editor/animation_track_editor.cpp
#: editor/plugins/animation_tree_player_editor_plugin.cpp
@@ -1454,32 +1455,28 @@ msgid "Easing:"
msgstr "Facilitar Entrada-Saída"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "In-Handle:"
-msgstr "Definir Manipulador"
+msgstr "Definir Manipulador:"
#: editor/animation_track_editor.cpp
#, fuzzy
msgid "Out-Handle:"
-msgstr "Definir Manipulador"
+msgstr "Definir Manipulador:"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Stream:"
-msgstr "Par de stream"
+msgstr "Transmissão:"
#: editor/animation_track_editor.cpp
#, fuzzy
msgid "Start (s):"
-msgstr "Reinício(s):"
+msgstr "Início(s):"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "End (s):"
-msgstr "[i]Fade In[/i](s):"
+msgstr "Final (is):"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Animation Clip:"
msgstr "Animações:"
@@ -1697,9 +1694,8 @@ msgid "Add Method Track Key"
msgstr "Adicionar Chave de Trilha de Método"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Method not found in object:"
-msgstr "Método não encontrado no objeto: "
+msgstr "Método não encontrado no objeto:"
#: editor/animation_track_editor.cpp
msgid "Anim Move Keys"
@@ -1719,7 +1715,7 @@ msgstr "Métodos"
#: editor/animation_track_editor.cpp
msgid "Bezier"
-msgstr ""
+msgstr "Bézier"
#: editor/animation_track_editor.cpp
#: modules/visual_script/visual_script_editor.cpp
@@ -2308,8 +2304,8 @@ msgid "Open"
msgstr "Abrir"
#: editor/dependency_editor.cpp
-msgid "Owners Of:"
-msgstr "Donos De:"
+msgid "Owners of: %s (Total: %d)"
+msgstr "Proprietários de: %s (Total: %d)"
#: editor/dependency_editor.cpp
msgid ""
@@ -2613,7 +2609,7 @@ msgid "Bus Options"
msgstr "Opções do canal"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/scene_tree_dock.cpp
+#: editor/project_export.cpp editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "Duplicar"
@@ -2871,6 +2867,22 @@ msgid "Choose"
msgstr "Escolher"
#: editor/editor_export.cpp
+msgid "Project export for platform:"
+msgstr "Exportação do projeto para plataforma:"
+
+#: editor/editor_export.cpp
+msgid "Completed with errors."
+msgstr "Concluído com erros."
+
+#: editor/editor_export.cpp
+msgid "Completed successfully."
+msgstr "Concluído com sucesso."
+
+#: editor/editor_export.cpp
+msgid "Failed."
+msgstr "Falhou."
+
+#: editor/editor_export.cpp
msgid "Storing File:"
msgstr "Armazenando Arquivo:"
@@ -2883,6 +2895,29 @@ msgid "Packing"
msgstr "Empacotando"
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save PCK"
+msgstr "Salvar Como"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Cannot create file \"%s\"."
+msgstr "Não foi possível criar a pasta."
+
+#: editor/editor_export.cpp
+msgid "Failed to export project files."
+msgstr "Falha ao exportar arquivos do projeto."
+
+#: editor/editor_export.cpp
+msgid "Can't open file to read from path \"%s\"."
+msgstr "Não é possível abrir arquivo para leitura a partir do caminho \"%s\"."
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save ZIP"
+msgstr "Salvar Como"
+
+#: editor/editor_export.cpp
msgid ""
"Target platform requires 'ETC' texture compression for GLES2. Enable 'Import "
"Etc' in Project Settings."
@@ -2958,11 +2993,11 @@ msgstr "Formato Binário"
#: editor/editor_export.cpp
msgid "64 Bits"
-msgstr ""
+msgstr "64 Bits"
#: editor/editor_export.cpp
msgid "Embed PCK"
-msgstr ""
+msgstr "Incorporar PCK"
#: editor/editor_export.cpp platform/osx/export/export.cpp
#, fuzzy
@@ -2971,19 +3006,19 @@ msgstr "Região da Textura"
#: editor/editor_export.cpp
msgid "BPTC"
-msgstr ""
+msgstr "BPTC"
#: editor/editor_export.cpp platform/osx/export/export.cpp
msgid "S3TC"
-msgstr ""
+msgstr "S3TC"
#: editor/editor_export.cpp platform/osx/export/export.cpp
msgid "ETC"
-msgstr ""
+msgstr "ETC"
#: editor/editor_export.cpp platform/osx/export/export.cpp
msgid "ETC2"
-msgstr ""
+msgstr "ETC2"
#: editor/editor_export.cpp
#, fuzzy
@@ -3002,9 +3037,28 @@ msgstr "Modelo customizado de depuração não encontrado."
msgid "Custom release template not found."
msgstr "Template customizado de release não encontrado."
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Prepare Template"
+msgstr "Gerenciar Templates"
+
+#: editor/editor_export.cpp platform/osx/export/export.cpp
+msgid "The given export path doesn't exist."
+msgstr "O caminho de exportação informado não existe."
+
#: editor/editor_export.cpp platform/javascript/export/export.cpp
-msgid "Template file not found:"
-msgstr "Arquivo de modelo não encontrado:"
+msgid "Template file not found: \"%s\"."
+msgstr "Arquivo de modelo não encontrado: \"%s\"."
+
+#: editor/editor_export.cpp
+msgid "Failed to copy export template."
+msgstr "Falha ao copiar o modelo de exportação."
+
+#: editor/editor_export.cpp platform/windows/export/export.cpp
+#: platform/x11/export/export.cpp
+#, fuzzy
+msgid "PCK Embedding"
+msgstr "Preenchimento"
#: editor/editor_export.cpp
msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB."
@@ -3012,7 +3066,7 @@ msgstr "Em exportações de 32 bits, o PCK embutido não pode ser maior que 4GB.
#: editor/editor_export.cpp
msgid "Convert Text Resources To Binary On Export"
-msgstr ""
+msgstr "Converter Recursos de Texto para Binário na Exportação"
#: editor/editor_feature_profile.cpp
msgid "3D Editor"
@@ -3178,9 +3232,9 @@ msgid "Import"
msgstr "Importar"
#: editor/editor_feature_profile.cpp editor/project_export.cpp
-#: platform/android/export/export.cpp platform/javascript/export/export.cpp
-#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
-#: platform/windows/export/export.cpp
+#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#: platform/uwp/export/export.cpp platform/windows/export/export.cpp
msgid "Export"
msgstr "Exportação"
@@ -3333,7 +3387,7 @@ msgstr "Mostrar Arquivos Ocultos"
#: editor/editor_file_dialog.cpp
msgid "Disable Overwrite Warning"
-msgstr ""
+msgstr "Desativar Aviso de Substituição"
#: editor/editor_file_dialog.cpp
msgid "Go Back"
@@ -3436,7 +3490,7 @@ msgstr "(Re)Importando Assets"
#: editor/editor_file_system.cpp
msgid "Reimport Missing Imported Files"
-msgstr ""
+msgstr "Reimportar Arquivos Importados Ausentes"
#: editor/editor_help.cpp scene/2d/camera_2d.cpp scene/gui/control.cpp
#: scene/gui/nine_patch_rect.cpp scene/resources/dynamic_font.cpp
@@ -3451,7 +3505,7 @@ msgstr "Classe:"
#: editor/editor_help.cpp editor/scene_tree_editor.cpp
#: editor/script_create_dialog.cpp
msgid "Inherits:"
-msgstr "Herda de:"
+msgstr "Herda:"
#: editor/editor_help.cpp
msgid "Inherited by:"
@@ -3547,7 +3601,7 @@ msgstr "Ajuda"
#: editor/editor_help.cpp
msgid "Sort Functions Alphabetically"
-msgstr ""
+msgstr "Classificar Funções em Ordem Alfabética"
#: editor/editor_help_search.cpp editor/editor_node.cpp
#: editor/plugins/script_editor_plugin.cpp
@@ -4334,14 +4388,8 @@ msgstr "%d mais arquivo(s)"
msgid ""
"Unable to write to file '%s', file in use, locked or lacking permissions."
msgstr ""
-
-#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
-msgid "Scene"
-msgstr "Cena"
-
-#: editor/editor_node.cpp
-msgid "Scene Naming"
-msgstr "Nomeação de Cena"
+"Não foi possível gravar no arquivo '%s', arquivo em uso, bloqueado ou sem "
+"permissões."
#: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp
#: servers/arvr/arvr_interface.cpp
@@ -4359,11 +4407,11 @@ msgstr "Sempre Mostrar Grade"
#: editor/editor_node.cpp editor/editor_settings.cpp
msgid "Resize If Many Tabs"
-msgstr ""
+msgstr "Redimensionar se houver muitas guias"
#: editor/editor_node.cpp editor/editor_settings.cpp
msgid "Minimum Width"
-msgstr ""
+msgstr "Largura Mínima"
#: editor/editor_node.cpp editor/editor_settings.cpp
msgid "Output"
@@ -4376,15 +4424,15 @@ msgstr "Limpar Saída"
#: editor/editor_node.cpp editor/editor_settings.cpp
msgid "Always Open Output On Play"
-msgstr ""
+msgstr "Sempre abrir a saída ao jogar"
#: editor/editor_node.cpp editor/editor_settings.cpp
msgid "Always Close Output On Stop"
-msgstr ""
+msgstr "Sempre fechar a saída ao parar"
#: editor/editor_node.cpp
msgid "Save On Focus Loss"
-msgstr ""
+msgstr "Salvar em caso de perda de foco"
#: editor/editor_node.cpp editor/editor_settings.cpp
#, fuzzy
@@ -4419,7 +4467,7 @@ msgstr "Restaurar Cenas ao Carregar"
#: editor/editor_node.cpp editor/editor_settings.cpp
msgid "Show Thumbnail On Hover"
-msgstr ""
+msgstr "Mostrar miniatura ao passar o mouse"
#: editor/editor_node.cpp editor/editor_settings.cpp
msgid "Inspector"
@@ -4432,7 +4480,7 @@ msgstr "Caminho Padrão do Projeto"
#: editor/editor_node.cpp
msgid "Default Float Step"
-msgstr ""
+msgstr "Passo de ponto flutuante padrão"
#: editor/editor_node.cpp scene/gui/tree.cpp
#, fuzzy
@@ -4441,11 +4489,11 @@ msgstr "Botão Desativado"
#: editor/editor_node.cpp
msgid "Auto Unfold Foreign Scenes"
-msgstr ""
+msgstr "Desdobrar cenas estrangeiras automaticamente"
#: editor/editor_node.cpp
msgid "Horizontal Vector2 Editing"
-msgstr ""
+msgstr "Edição Horizontal do Vector2"
#: editor/editor_node.cpp
msgid "Horizontal Vector Types Editing"
@@ -4466,6 +4514,10 @@ msgid "Default Color Picker Mode"
msgstr ""
#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
+msgid "Version Control"
+msgstr "Controle de Versão"
+
+#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
msgid "Username"
msgstr "Nome do usuário"
@@ -4493,6 +4545,10 @@ msgstr "Alternar modo sem-distrações."
msgid "Add a new scene."
msgstr "Adicionar nova cena."
+#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
+msgid "Scene"
+msgstr "Cena"
+
#: editor/editor_node.cpp
msgid "Go to previously opened scene."
msgstr "Ir para cena aberta anteriormente."
@@ -4611,7 +4667,7 @@ msgstr "Sair para a Lista de Projetos"
#: editor/editor_node.cpp
msgid "Deploy with Remote Debug"
-msgstr "Distribuir com Depuragem Remota"
+msgstr "Implantar com Depuração Remota"
#: editor/editor_node.cpp
msgid ""
@@ -5186,9 +5242,8 @@ msgid "Size:"
msgstr "Tamanho:"
#: editor/editor_properties_array_dict.cpp
-#, fuzzy
msgid "Page:"
-msgstr "Página: "
+msgstr "Página:"
#: editor/editor_properties_array_dict.cpp
#: editor/plugins/theme_editor_plugin.cpp
@@ -5288,6 +5343,11 @@ msgstr ""
"Adicione uma predefinição executável no menu Exportar ou defina uma "
"predefinição existente como executável."
+#: editor/editor_run_native.cpp
+#, fuzzy
+msgid "Project Run"
+msgstr "Projeto"
+
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
msgstr "Escreva sua lógica no método _run()."
@@ -5566,7 +5626,9 @@ msgid "Draw Spaces"
msgstr "Desenhar Espaços"
#: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp
-#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp
+#: scene/main/scene_tree.cpp scene/resources/world.cpp
+#: scene/resources/world_2d.cpp
msgid "Navigation"
msgstr "Navegação"
@@ -7058,7 +7120,7 @@ msgstr ""
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp
-#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp
+#: scene/gui/control.cpp
msgid "Filter"
msgstr "Filtro"
@@ -7316,9 +7378,8 @@ msgid "Generating Lightmaps"
msgstr "Generando Lightmaps"
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Generating for Mesh:"
-msgstr "Generando para a Malha: "
+msgstr "Gerando para malha:"
#: editor/import/resource_importer_scene.cpp
msgid "Running Custom Script..."
@@ -7345,6 +7406,18 @@ msgid "Saving..."
msgstr "Salvando..."
#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used as a normal map in 3D. Enabling red-green "
+"texture compression to reduce memory usage (blue channel is discarded)."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap "
+"generation and VRAM texture compression."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
msgid "2D, Detect 3D"
msgstr ""
@@ -8035,11 +8108,20 @@ msgid "New Anim"
msgstr "Nova Animação"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+msgstr "Criar Nova Animação"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Change Animation Name:"
msgstr "Alterar Nome da Animação:"
#: editor/plugins/animation_player_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Rename Animation"
+msgstr "Renomear Animação"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Delete Animation?"
msgstr "Excluir Animação?"
@@ -8057,11 +8139,6 @@ msgid "Animation name already exists!"
msgstr "O nome da animação já existe!"
#: editor/plugins/animation_player_editor_plugin.cpp
-#: editor/plugins/sprite_frames_editor_plugin.cpp
-msgid "Rename Animation"
-msgstr "Renomear Animação"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate Animation"
msgstr "Duplicar Animação"
@@ -8208,10 +8285,6 @@ msgid "Pin AnimationPlayer"
msgstr "Fixar AnimationPlayer"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Create New Animation"
-msgstr "Criar Nova Animação"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Name:"
msgstr "Nome da Animação:"
@@ -8327,9 +8400,8 @@ msgid "Set the end animation. This is useful for sub-transitions."
msgstr "Definir a animação final. Isso é útil para sub-transições."
#: editor/plugins/animation_state_machine_editor.cpp
-#, fuzzy
msgid "Transition:"
-msgstr "Transição: "
+msgstr "Transição:"
#: editor/plugins/animation_state_machine_editor.cpp
msgid "Play Mode:"
@@ -9780,7 +9852,7 @@ msgstr "Criar Contorno"
#: scene/resources/multimesh.cpp scene/resources/primitive_meshes.cpp
#: scene/resources/texture.cpp
msgid "Mesh"
-msgstr "Malha"
+msgstr "Mesh"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Trimesh Static Body"
@@ -10102,9 +10174,8 @@ msgid "Volume"
msgstr "Volume"
#: editor/plugins/particles_editor_plugin.cpp
-#, fuzzy
msgid "Emission Source:"
-msgstr "Origem da Emissão: "
+msgstr "Fonte de emissão:"
#: editor/plugins/particles_editor_plugin.cpp
msgid "A processor material of type 'ParticlesMaterial' is required."
@@ -10337,6 +10408,7 @@ msgid "Points"
msgstr "Pontos"
#: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp
+#: scene/resources/navigation_mesh.cpp
msgid "Polygons"
msgstr "Polígonos"
@@ -10788,7 +10860,7 @@ msgstr ""
#: editor/plugins/script_editor_plugin.cpp
msgid "Search Results"
-msgstr "Pesquisar resultados"
+msgstr "Resultados de Pesquisa"
#: editor/plugins/script_editor_plugin.cpp
msgid "Open Dominant Script On Scene Change"
@@ -11200,15 +11272,13 @@ msgstr "Translação"
#. TRANSLATORS: Refers to changing the scale of a node in the 3D editor.
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Scaling:"
-msgstr "Escalonando: "
+msgstr "Escala:"
#. TRANSLATORS: Refers to changing the position of a node in the 3D editor.
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Translating:"
-msgstr "Transladando: "
+msgstr "Traduzir:"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rotating %s degrees."
@@ -11718,7 +11788,8 @@ msgid "Invalid geometry, can't replace by mesh."
msgstr "Geometria inválida, não é possível substituir por malha."
#: editor/plugins/sprite_editor_plugin.cpp
-msgid "Convert to Mesh2D"
+#, fuzzy
+msgid "Convert to MeshInstance2D"
msgstr "Converter para Malha2D"
#: editor/plugins/sprite_editor_plugin.cpp
@@ -11750,19 +11821,16 @@ msgid "Sprite"
msgstr "Sprite"
#: editor/plugins/sprite_editor_plugin.cpp
-#, fuzzy
msgid "Simplification:"
-msgstr "Simplificação: "
+msgstr "Simplificação:"
#: editor/plugins/sprite_editor_plugin.cpp
-#, fuzzy
msgid "Shrink (Pixels):"
-msgstr "Diminuir (Pixels): "
+msgstr "Encolher (Pixels):"
#: editor/plugins/sprite_editor_plugin.cpp
-#, fuzzy
msgid "Grow (Pixels):"
-msgstr "Produzir (Pixels): "
+msgstr "Crescer (Pixels):"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Update Preview"
@@ -12714,8 +12782,7 @@ msgid "Select the previous shape, subtile, or Tile."
msgstr "Selecione a forma, subtile ou tile anterior."
#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp
-#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp
-#: scene/resources/texture.cpp
+#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp
msgid "Region"
msgstr "Região"
@@ -13157,15 +13224,15 @@ msgstr "Nenhuma mensagem de commit foi fornecida."
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Commit"
-msgstr "Confirmação"
+msgstr "Commit"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Staged Changes"
-msgstr "Mudanças em fases"
+msgstr "Alterações Preparadas"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Unstaged Changes"
-msgstr "Mudanças Não Fásicas"
+msgstr "Alterações não Preparadas"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Commit:"
@@ -13229,7 +13296,7 @@ msgstr "Preparar todas as alterações"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Unstage all changes"
-msgstr "Desfaça todas as alterações"
+msgstr "Desfazer todas as alterações"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Commit Message"
@@ -13237,15 +13304,15 @@ msgstr "Mensagem de Commit"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Commit Changes"
-msgstr "Confirmar Mudanças"
+msgstr "Criar Commit"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Commit List"
-msgstr "Lista de compromissos"
+msgstr "Lista de Commit"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Commit list size"
-msgstr "Confirmar tamanho da lista"
+msgstr "Tamanho da lista de commit"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Branches"
@@ -14233,38 +14300,10 @@ msgid "Delete preset '%s'?"
msgstr "Excluir definição '%s'?"
#: editor/project_export.cpp
-msgid ""
-"Failed to export the project for platform '%s'.\n"
-"Export templates seem to be missing or invalid."
-msgstr ""
-"Falha ao exportar o projeto para a plataforma '%s'.\n"
-"Os modelos de exportação parecem estar ausentes ou inválidos."
-
-#: 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 ""
-"Falha ao exportar o projeto para a plataforma '%s'.\n"
-"Isto pode ser devido a um problema de configuração nas pré-configurações de "
-"exportação ou nas configurações de exportação."
-
-#: editor/project_export.cpp
msgid "Exporting All"
msgstr "Exportando tudo"
#: editor/project_export.cpp
-msgid "The given export path doesn't exist:"
-msgstr "O caminho de exportação informado não existe:"
-
-#: editor/project_export.cpp
-msgid "Export templates for this platform are missing/corrupted:"
-msgstr ""
-"Modelos de exportação para esta plataforma não foram encontrados/estão "
-"corrompidos:"
-
-#: editor/project_export.cpp
msgid "Export Path"
msgstr "Caminho de Exportação"
@@ -14374,28 +14413,24 @@ msgid "More Info..."
msgstr "Mover Para..."
#: editor/project_export.cpp
-#, fuzzy
msgid "Export PCK/Zip..."
-msgstr "Exportar PCK/Zip"
+msgstr "Exportar PCK/Zip..."
#: editor/project_export.cpp
-#, fuzzy
msgid "Export Project..."
-msgstr "Exportar Projeto"
+msgstr "Exportar Projeto…"
#: editor/project_export.cpp
msgid "Export All"
msgstr "Exportar tudo"
#: editor/project_export.cpp
-#, fuzzy
msgid "Choose an export mode:"
-msgstr "Por favor, escolha uma pasta vazia."
+msgstr "Escolha um modo de exportação:"
#: editor/project_export.cpp
-#, fuzzy
msgid "Export All..."
-msgstr "Exportar tudo"
+msgstr "Exportar tudo…"
#: editor/project_export.cpp editor/project_manager.cpp
msgid "ZIP File"
@@ -14411,6 +14446,11 @@ msgid "Export templates for this platform are missing:"
msgstr "Modelos de exportação para esta plataforma não foram encontrados:"
#: editor/project_export.cpp
+#, fuzzy
+msgid "Project Export"
+msgstr "Fundadores do Projeto"
+
+#: editor/project_export.cpp
msgid "Manage Export Templates"
msgstr "Gerenciar Modelos de Exportação"
@@ -15128,7 +15168,7 @@ msgstr "Plugins"
#: editor/project_settings_editor.cpp
msgid "Import Defaults"
-msgstr "Importar padrões"
+msgstr "Padrões de Importação"
#: editor/property_editor.cpp
msgid "Preset..."
@@ -15955,9 +15995,8 @@ msgid "Attach Node Script"
msgstr "Adicionar Script ao Nó"
#: editor/script_editor_debugger.cpp
-#, fuzzy
msgid "Remote %s:"
-msgstr "Remoto "
+msgstr "%s remoto:"
#: editor/script_editor_debugger.cpp
msgid "Bytes:"
@@ -16833,7 +16872,7 @@ msgstr ""
#: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp
#: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp
-#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp
+#: scene/3d/collision_polygon.cpp
#, fuzzy
msgid "Polygon"
msgstr "Polígonos"
@@ -17006,9 +17045,8 @@ msgid "Disabled GDNative Singleton"
msgstr "GDNative Singleton desativado"
#: modules/gdnative/gdnative_library_singleton_editor.cpp
-#, fuzzy
msgid "Libraries:"
-msgstr "Bibliotecas: "
+msgstr "Bibliotecas:"
#: modules/gdnative/nativescript/nativescript.cpp
msgid "Class Name"
@@ -17439,7 +17477,6 @@ msgid "Use In Baked Light"
msgstr "Faça mapas de luz"
#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
-#: scene/resources/navigation_mesh.cpp
msgid "Cell"
msgstr ""
@@ -17469,6 +17506,19 @@ msgstr "Centro"
msgid "Mask"
msgstr ""
+#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
+#, fuzzy
+msgid "Bake Navigation"
+msgstr "Navegação"
+
+#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp
+#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp
+#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp
+#: scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Navigation Layers"
+msgstr "Modo Navegação"
+
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Plane"
msgstr "Próximo Plano"
@@ -17882,18 +17932,16 @@ msgstr ""
"corrente do nó! Conserte seu nó, por favor."
#: modules/visual_script/visual_script.cpp
-#, fuzzy
msgid "Node returned an invalid sequence output:"
-msgstr "O nó retornou uma saída de sequência inválida: "
+msgstr "O nó retornou uma saída de sequência inválida:"
#: modules/visual_script/visual_script.cpp
msgid "Found sequence bit but not the node in the stack, report bug!"
msgstr "Sequência encontrada mas o nó não está na pilha, reporte um bug!"
#: modules/visual_script/visual_script.cpp
-#, fuzzy
msgid "Stack overflow with stack depth:"
-msgstr "Sobrecarga da pilha com profundidade: "
+msgstr "Sobrecarga da pilha com profundidade:"
#: modules/visual_script/visual_script.cpp
#, fuzzy
@@ -18263,18 +18311,16 @@ msgid "for (elem) in (input):"
msgstr ""
#: modules/visual_script/visual_script_flow_control.cpp
-#, fuzzy
msgid "Input type not iterable:"
-msgstr "Tipo de entrada não iterável: "
+msgstr "Tipo de entrada não iterável:"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Iterator became invalid"
msgstr "Iterador tornou-se inválido"
#: modules/visual_script/visual_script_flow_control.cpp
-#, fuzzy
msgid "Iterator became invalid:"
-msgstr "Iterador tornou-se inválido: "
+msgstr "Iterador tornou-se inválido:"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Sequence"
@@ -18439,19 +18485,16 @@ msgstr "Redimensionar Vetor"
#: modules/visual_script/visual_script_nodes.cpp scene/resources/material.cpp
#: scene/resources/visual_shader_nodes.cpp
-#, fuzzy
msgid "Operator"
-msgstr "Iterador"
+msgstr "Operador"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Invalid argument of type:"
-msgstr ": Argumento inválido do tipo: "
+msgstr "Argumento inválido do tipo:"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Invalid arguments:"
-msgstr ": Argumentos inválidos: "
+msgstr "Argumentos inválidos:"
#: modules/visual_script/visual_script_nodes.cpp
msgid "a if cond, else b"
@@ -18463,14 +18506,12 @@ msgid "Var Name"
msgstr "Nome"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "VariableGet not found in script:"
-msgstr "VariableGet não encontrada no script: "
+msgstr "VariableGet não encontrado no script:"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "VariableSet not found in script:"
-msgstr "VariableSet não encontrada no script: "
+msgstr "VariableSet não encontrado no script:"
#: modules/visual_script/visual_script_nodes.cpp
#, fuzzy
@@ -19022,10 +19063,6 @@ msgid "Could not execute on device."
msgstr "Não foi possível executar no dispositivo."
#: platform/android/export/export_plugin.cpp
-msgid "Unable to find the 'apksigner' tool."
-msgstr "Não foi possível encontrar a ferramenta 'apksigner'."
-
-#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -19156,17 +19193,20 @@ msgstr ""
"Versão do \"Target Sdk\" precisa ser igual ou maior que a versão do \"Min "
"Sdk\"."
+#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Code Signing"
+msgstr "Sinal"
+
#: 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."
+"'apksigner' could not be found. Please check that the command is available "
+"in the Android SDK build-tools directory. The resulting %s is unsigned."
msgstr ""
-"'apksigner' não foi encontrado.\n"
-"Verifique se o comando está disponível no diretório do Android SDK build-"
-"tools.\n"
-"O %s resultante está sem assinatura."
+"'apksigner' não foi encontrado. Verifique se o comando está disponível no "
+"diretório de ferramentas de compilação do Android SDK. O %s resultante não é "
+"assinado."
#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
@@ -19181,6 +19221,10 @@ msgid "Could not find keystore, unable to export."
msgstr "O keystore não foi encontrado, não foi possível exportar."
#: platform/android/export/export_plugin.cpp
+msgid "Could not start apksigner executable."
+msgstr "Não foi possível iniciar o executável apksigner."
+
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr "'apksigner' retornou com o erro #%d"
@@ -19209,8 +19253,8 @@ msgid "Invalid filename! Android APK requires the *.apk extension."
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 "Formato de Exportação Não Suportado\n"
+msgid "Unsupported export format!"
+msgstr "Formato de exportação não suportado!"
#: platform/android/export/export_plugin.cpp
msgid ""
@@ -19223,25 +19267,24 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Android build version mismatch:\n"
-" Template installed: %s\n"
-" Godot Version: %s\n"
+"Android build version mismatch: Template installed: %s, Godot version: %s. "
"Please reinstall Android build template from 'Project' menu."
msgstr ""
-"Diferença na versão da build do Android:\n"
-" Modelo instalado: %s\n"
-" Versão do Godot: %s\n"
-"Por favor reinstale o modelo de compilação do Android pelo menu 'Projeto'."
+"Diferença na versão da build do Android: Modelo instalado: %s, Versão do "
+"Godot: %s. Por favor reinstale o modelo de compilação do Android pelo menu "
+"'Projeto'."
#: platform/android/export/export_plugin.cpp
+#, fuzzy
msgid ""
-"Unable to overwrite res://android/build/res/*.xml files with project name"
+"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"
+#, fuzzy
+msgid "Could not export project files to gradle project."
msgstr ""
"Não foi possível exportar os arquivos do projeto ao projeto do gradle\n"
@@ -19255,12 +19298,12 @@ msgstr "Construindo Projeto Android (gradle)"
#: platform/android/export/export_plugin.cpp
msgid ""
-"Building of Android project failed, check output for the error.\n"
+"Building of Android project failed, check output for the error. "
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
-"A construção do projeto Android falhou, verifique a saída para detalhes.\n"
-"Alternativamente, visite docs.godotengine.org para ver a documentação de "
-"compilação do Android."
+"A compilação do projeto Android falhou, verifique a saída para detalhes. Ou "
+"então visite docs.godotengine.org para ver a documentação de compilação do "
+"Android."
#: platform/android/export/export_plugin.cpp
msgid "Moving output"
@@ -19275,40 +19318,35 @@ msgstr ""
"diretório do projeto gradle por saídas."
#: platform/android/export/export_plugin.cpp
-msgid "Package not found: %s"
-msgstr "Pacote não encontrado: '%s'"
+msgid "Package not found: \"%s\"."
+msgstr "Pacote não encontrado: \"%s\"."
#: platform/android/export/export_plugin.cpp
msgid "Creating APK..."
msgstr "Criando APK..."
#: platform/android/export/export_plugin.cpp
-msgid ""
-"Could not find template APK to export:\n"
-"%s"
-msgstr ""
-"Não foi possível encontrar o modelo de APK para exportar:\n"
-"%s"
+msgid "Could not find template APK to export: \"%s\"."
+msgstr "Não foi possível encontrar o modelo de APK para exportação: %s."
#: platform/android/export/export_plugin.cpp
msgid ""
-"Missing libraries in the export template for the selected architectures: "
-"%s.\n"
+"Missing libraries in the export template for the selected architectures: %s. "
"Please build a template with all required libraries, or uncheck the missing "
"architectures in the export preset."
msgstr ""
"Faltam bibliotecas no modelo de exportação para as arquiteturas "
-"selecionadas: %s.\n"
-"Crie um modelo com todas as bibliotecas necessárias ou desmarque as "
-"arquiteturas ausentes na predefinição de exportação."
+"selecionadas: %s. Por favor, crie um modelo com todas as bibliotecas "
+"necessárias ou desmarque as arquiteturas ausentes na predefinição de "
+"exportação."
#: platform/android/export/export_plugin.cpp
msgid "Adding files..."
msgstr "Adicionando arquivos..."
#: platform/android/export/export_plugin.cpp
-msgid "Could not export project files"
-msgstr "Não foi possível exportar os arquivos do projeto"
+msgid "Could not export project files."
+msgstr "Não foi possível exportar os arquivos do projeto."
#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
@@ -19546,6 +19584,17 @@ msgstr "Recortar Nós"
msgid "Custom BG Color"
msgstr "Recortar Nós"
+#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Prepare Templates"
+msgstr "Gerenciar Templates"
+
+#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Export template not found."
+msgstr "Template customizado de release não encontrado."
+
#: platform/iphone/export/export.cpp
msgid "App Store Team ID not specified - cannot configure the project."
msgstr ""
@@ -19568,20 +19617,31 @@ msgid "Run exported HTML in the system's default browser."
msgstr "Rodar HTML exportado no navegador padrão do sistema."
#: platform/javascript/export/export.cpp
-msgid "Could not open template for export:"
-msgstr "Não foi possível abrir o modelo para exportar:"
+msgid "Could not open template for export: \"%s\"."
+msgstr "Não foi possível abrir o modelo para exportação: \"%s\"."
#: platform/javascript/export/export.cpp
-msgid "Invalid export template:"
+#, fuzzy
+msgid "Invalid export template: \"%s\"."
msgstr "Template de exportação inválido:"
#: platform/javascript/export/export.cpp
-msgid "Could not write file:"
+#, fuzzy
+msgid "Could not write file: \"%s\"."
msgstr "Não foi possível escrever o arquivo:"
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Icon Creation"
+msgstr "Definir Margem"
+
+#: platform/javascript/export/export.cpp
+msgid "Could not read file: \"%s\"."
+msgstr "Não foi possível ler o arquivo: \"%s\"."
+
#: platform/javascript/export/export.cpp
-msgid "Could not read file:"
-msgstr "Não foi possível ler o arquivo:"
+msgid "PWA"
+msgstr ""
#: platform/javascript/export/export.cpp
msgid "Variant"
@@ -19657,16 +19717,17 @@ msgid "Icon 512 X 512"
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not read HTML shell:"
-msgstr "Não foi possível ler o shell HTML:"
+msgid "Could not read HTML shell: \"%s\"."
+msgstr "Não foi possível ler o shell HTML: \"%s\"."
#: platform/javascript/export/export.cpp
-msgid "Could not create HTTP server directory:"
+#, fuzzy
+msgid "Could not create HTTP server directory: %s."
msgstr "Não foi possível criar o diretório do servidor HTTP:"
#: platform/javascript/export/export.cpp
-msgid "Error starting HTTP server:"
-msgstr "Erro ao iniciar servidor HTTP:"
+msgid "Error starting HTTP server: %d."
+msgstr "Erro ao iniciar o servidor HTTP: %d."
#: platform/javascript/export/export.cpp
msgid "Web"
@@ -19965,9 +20026,25 @@ msgid "Apple Team ID"
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Could not open icon file \"%s\"."
+msgstr "Não foi possível abrir o arquivo de ícone \"%s\"."
+
+#: platform/osx/export/export.cpp
+msgid "Could not start xcrun executable."
+msgstr "Não foi possível iniciar o executável xcrun."
+
+#: platform/osx/export/export.cpp
+msgid "Notarization failed."
+msgstr "Falha na notarização."
+
+#: platform/osx/export/export.cpp
+msgid "Notarization request UUID: \"%s\""
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid ""
-"Note: The notarization process generally takes less than an hour. When the "
-"process is completed, you'll receive an email."
+"The notarization process generally takes less than an hour. When the process "
+"is completed, you'll receive an email."
msgstr ""
#: platform/osx/export/export.cpp
@@ -19983,18 +20060,72 @@ msgid ""
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign failed with error \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign require regex module."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Could not start codesign executable, make sure Xcode command line tools are "
+"installed."
+msgstr ""
+
+#: platform/osx/export/export.cpp platform/windows/export/export.cpp
#, fuzzy
msgid "No identity found."
msgstr "Ãcones não encontrados."
#: platform/osx/export/export.cpp
#, fuzzy
+msgid "Cannot sign file %s."
+msgstr "Erro ao salvar o arquivo: %s"
+
+#: platform/osx/export/export.cpp
+msgid "Relative symlinks are not supported, exported \"%s\" might be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "DMG Creation"
+msgstr "Direções"
+
+#: platform/osx/export/export.cpp
+msgid "Could not start hdiutil executable."
+msgstr "Não foi possível iniciar o executável hdiutil."
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed - file exists."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
msgid "Creating app bundle"
msgstr "Criando Miniatura"
#: platform/osx/export/export.cpp
-msgid "Could not find template app to export:"
-msgstr "Não foi possível encontrar o aplicativo de modelo para exportar:"
+msgid "Could not find template app to export: \"%s\"."
+msgstr ""
+"Não foi possível encontrar o aplicativo de modelo para exportar: \"%s\"."
+
+#: platform/osx/export/export.cpp
+msgid "Invalid export format."
+msgstr "Formato de exportação inválido."
#: platform/osx/export/export.cpp
msgid ""
@@ -20004,7 +20135,7 @@ msgstr ""
#: platform/osx/export/export.cpp
msgid ""
-"Requested template binary '%s' not found. It might be missing from your "
+"Requested template binary \"%s\" not found. It might be missing from your "
"template archive."
msgstr ""
@@ -20045,6 +20176,16 @@ msgid "Sending archive for notarization"
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "ZIP Creation"
+msgstr "Projeção"
+
+#: platform/osx/export/export.cpp
+msgid "Could not open file to read from path \"%s\"."
+msgstr ""
+"Não foi possível abrir o arquivo para leitura a partir do caminho \"%s\"."
+
+#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr "Identificador de pacote inválido:"
@@ -20192,9 +20333,8 @@ msgid "Publisher Display Name"
msgstr "Nome de Exibição da Publicadora"
#: platform/uwp/export/export.cpp
-#, fuzzy
msgid "Product GUID"
-msgstr "GUID de produto inválido."
+msgstr "GUID do produto"
#: platform/uwp/export/export.cpp
#, fuzzy
@@ -20366,6 +20506,11 @@ msgid "Debug Algorithm"
msgstr "Depurador"
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to rename temporary file \"%s\"."
+msgstr "Não é possível remover o arquivo temporário:"
+
+#: platform/windows/export/export.cpp
msgid "Identity Type"
msgstr ""
@@ -20410,6 +20555,68 @@ msgid "Trademarks"
msgstr ""
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Resources Modification"
+msgstr "Notificações Push"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find rcedit executable at \"%s\"."
+msgstr "O keystore não foi encontrado, não foi possível exportar."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find wine executable at \"%s\"."
+msgstr "O keystore não foi encontrado, não foi possível exportar."
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start rcedit executable, configure rcedit path in the Editor "
+"Settings (Export > Windows > Rcedit)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"rcedit failed to modify executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find signtool executable at \"%s\"."
+msgstr "O keystore não foi encontrado, não foi possível exportar."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find osslsigncode executable at \"%s\"."
+msgstr "O keystore não foi encontrado, não foi possível exportar."
+
+#: platform/windows/export/export.cpp
+msgid "Invalid identity type."
+msgstr "Tipo de identidade inválido."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid timestamp server."
+msgstr "Nome Inválido."
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start signtool executable, configure signtool path in the Editor "
+"Settings (Export > Windows > Signtool)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Signtool failed to sign executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Failed to remove temporary file \"%s\"."
+msgstr "Falha ao remover o arquivo temporário \"%s\"."
+
+#: platform/windows/export/export.cpp
msgid ""
"The rcedit tool must be configured in the Editor Settings (Export > Windows "
"> Rcedit) to change the icon or app information data."
@@ -20428,6 +20635,23 @@ msgid "Invalid product version:"
msgstr "Versão de produto inválida:"
#: platform/windows/export/export.cpp
+msgid "Windows executables cannot be >= 4 GiB."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+#, fuzzy
+msgid "Failed to open executable file \"%s\"."
+msgstr "Extensão inválida."
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable file header corrupted."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable \"pck\" section not found."
+msgstr ""
+
+#: platform/windows/export/export.cpp
#, fuzzy
msgid "Windows"
msgstr "Nova Janela"
@@ -20444,6 +20668,10 @@ msgstr ""
msgid "Wine"
msgstr ""
+#: platform/x11/export/export.cpp
+msgid "32-bit executables cannot have embedded data >= 4 GiB."
+msgstr ""
+
#: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp
#: scene/resources/texture.cpp
#, fuzzy
@@ -20571,7 +20799,8 @@ msgstr ""
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/3d/light.cpp scene/3d/reflection_probe.cpp
-#: scene/3d/visual_instance.cpp scene/resources/material.cpp
+#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp
+#: scene/resources/material.cpp
msgid "Max Distance"
msgstr "Distância Máxima"
@@ -21367,6 +21596,18 @@ msgstr ""
msgid "Edge Connection Margin"
msgstr "Margem de Ligação da Borda"
+#: scene/2d/navigation_2d.cpp
+msgid ""
+"'Navigation2D' node and 'Navigation2D.get_simple_path()' are deprecated and "
+"will be removed in a future version. Use 'Navigation2DServer.map_get_path()' "
+"instead."
+msgstr ""
+
+#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
+#, fuzzy
+msgid "Path Desired Distance"
+msgstr "Distância do Caminho U"
+
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
msgid "Target Desired Distance"
msgstr ""
@@ -21421,17 +21662,19 @@ msgstr ""
"este nó funcione. Por favor defina a propriedade ou desenhe um polígono."
#: scene/2d/navigation_polygon.cpp
-msgid ""
-"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
-"node. It only provides navigation data."
-msgstr ""
-"NavigationPolygonInstance deve ser filho ou neto de um nó Navigation2D. Ele "
-"apenas fornece dados de navegação."
-
-#: scene/2d/navigation_polygon.cpp
msgid "Navpoly"
msgstr ""
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Enter Cost"
+msgstr "Centro Inferior"
+
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Travel Cost"
+msgstr "Viagem"
+
#: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp
#: scene/main/canvas_layer.cpp
msgid "Rotation Degrees"
@@ -22603,6 +22846,13 @@ msgstr ""
msgid "Transform Normals"
msgstr "Normais de Transformação"
+#: scene/3d/navigation.cpp
+msgid ""
+"'Navigation' node and 'Navigation.get_simple_path()' are deprecated and will "
+"be removed in a future version. Use 'NavigationServer.map_get_path()' "
+"instead."
+msgstr ""
+
#: scene/3d/navigation.cpp scene/resources/curve.cpp
#, fuzzy
msgid "Up Vector"
@@ -22627,14 +22877,6 @@ msgid ""
"The NavigationAgent can be used only under a Spatial inheriting parent node."
msgstr ""
-#: scene/3d/navigation_mesh_instance.cpp
-msgid ""
-"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
-"It only provides navigation data."
-msgstr ""
-"NavigationMeshInstance deve ser filho ou neto de um nó Navigation. Ele "
-"apenas fornece dados de navegação."
-
#: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp
#, fuzzy
msgid "NavMesh"
@@ -25356,6 +25598,16 @@ msgid "3D Physics"
msgstr "Física"
#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "2D Navigation"
+msgstr "Navegação"
+
+#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "3D Navigation"
+msgstr "Navegação"
+
+#: scene/register_scene_types.cpp
msgid "Use hiDPI"
msgstr ""
@@ -26037,9 +26289,8 @@ msgid "Label Width"
msgstr "Largura Esquerda"
#: scene/resources/default_theme/default_theme.cpp
-#, fuzzy
msgid "Screen Picker"
-msgstr "Operador de tela."
+msgstr "Seletor de tela"
#: scene/resources/default_theme/default_theme.cpp
#, fuzzy
@@ -26775,7 +27026,7 @@ msgstr "Transmissão"
msgid "Refraction"
msgstr "Refração"
-#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp
+#: scene/resources/material.cpp
msgid "Detail"
msgstr "Detalhe"
@@ -26858,7 +27109,12 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
-msgid "Sample Partition Type"
+msgid "Sampling"
+msgstr "Escala:"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Partition Type"
msgstr "Definir o Tipo da Variável"
#: scene/resources/navigation_mesh.cpp
@@ -26870,15 +27126,19 @@ msgid "Source Geometry Mode"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-#, fuzzy
msgid "Source Group Name"
-msgstr "Origem"
+msgstr "Origem do Nome do Grupo"
#: scene/resources/navigation_mesh.cpp
-msgid "Agent"
+msgid "Cells"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Agents"
+msgstr "Argumentos da Cena Principal:"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Max Climb"
msgstr ""
@@ -26888,11 +27148,16 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
+msgid "Regions"
+msgstr "Região"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
msgid "Merge Size"
msgstr "Fundir a partir de Cena"
#: scene/resources/navigation_mesh.cpp
-msgid "Edge"
+msgid "Edges"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -26906,6 +27171,11 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
+msgid "Details"
+msgstr "Detalhe"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
msgid "Sample Distance"
msgstr "Escolha uma Distância:"
@@ -26923,9 +27193,19 @@ msgid "Ledge Spans"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Filter Walkable Low Height Spans"
+msgid "Walkable Low Height Spans"
msgstr ""
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB"
+msgstr "Gerando AABB"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB Offset"
+msgstr "Deslocamento Base"
+
#: scene/resources/occluder_shape.cpp
msgid "Spheres"
msgstr ""
@@ -27338,6 +27618,11 @@ msgid "Scenario"
msgstr "Cena"
#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Navigation Map"
+msgstr "Navegação"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
msgid "Direct Space State"
msgstr ""
@@ -27355,6 +27640,26 @@ msgstr "Linear Esquerda"
msgid "Default Angular Damp"
msgstr ""
+#: scene/resources/world.cpp
+#, fuzzy
+msgid "Default Map Up"
+msgstr "Padrão"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Size"
+msgstr "Prévia Padrão"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Height"
+msgstr "Testando"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Edge Connection Margin"
+msgstr "Margem de Ligação da Borda"
+
#: scene/resources/world_2d.cpp
msgid "Canvas"
msgstr ""
diff --git a/editor/translations/ro.po b/editor/translations/ro.po
index 032dacd5c6..ddc340697c 100644
--- a/editor/translations/ro.po
+++ b/editor/translations/ro.po
@@ -223,9 +223,10 @@ msgid "Data"
msgstr ""
#: core/io/file_access_network.cpp core/register_core_types.cpp
-#: editor/editor_settings.cpp main/main.cpp
+#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
#: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h
+#: scene/gui/file_dialog.cpp
#, fuzzy
msgid "Network"
msgstr "Analizator Network"
@@ -381,6 +382,16 @@ msgstr ""
msgid "Max Size (KB)"
msgstr ""
+#: core/os/input.cpp
+#, fuzzy
+msgid "Mouse Mode"
+msgstr "Mod Mutare"
+
+#: core/os/input.cpp
+#, fuzzy
+msgid "Use Accumulated Input"
+msgstr "Șterge Intrare(Input)"
+
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: servers/audio_server.cpp
msgid "Device"
@@ -572,7 +583,8 @@ msgstr "Descriere"
#: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
-#: main/main.cpp
+#: main/main.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp
msgid "Run"
msgstr "Execută"
@@ -661,6 +673,11 @@ msgid "Main Run Args"
msgstr ""
#: core/project_settings.cpp
+#, fuzzy
+msgid "Scene Naming"
+msgstr "Calea Scenei:"
+
+#: core/project_settings.cpp
msgid "Search In File Extensions"
msgstr ""
@@ -668,19 +685,15 @@ msgstr ""
msgid "Script Templates Search Path"
msgstr ""
-#: core/project_settings.cpp editor/editor_node.cpp
-#: editor/plugins/version_control_editor_plugin.cpp
-msgid "Version Control"
-msgstr "Control versiune"
-
#: core/project_settings.cpp
-msgid "Autoload On Startup"
-msgstr ""
+#, fuzzy
+msgid "Version Control Autoload On Startup"
+msgstr "Control versiune"
#: core/project_settings.cpp
#, fuzzy
-msgid "Plugin Name"
-msgstr "Nume plugin:"
+msgid "Version Control Plugin Name"
+msgstr "Control versiune"
#: core/project_settings.cpp scene/2d/collision_object_2d.cpp
#: scene/3d/collision_object.cpp scene/gui/control.cpp
@@ -796,7 +809,8 @@ msgid "Quality"
msgstr ""
#: core/project_settings.cpp scene/gui/file_dialog.cpp
-#: scene/main/scene_tree.cpp servers/visual_server.cpp
+#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp
+#: servers/visual_server.cpp
#, fuzzy
msgid "Filters"
msgstr "Filtre:"
@@ -2239,8 +2253,8 @@ msgid "Open"
msgstr "Deschide"
#: editor/dependency_editor.cpp
-msgid "Owners Of:"
-msgstr "Stăpâni La:"
+msgid "Owners of: %s (Total: %d)"
+msgstr ""
#: editor/dependency_editor.cpp
msgid ""
@@ -2546,7 +2560,7 @@ msgid "Bus Options"
msgstr "Opțiuni Pistă Audio"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/scene_tree_dock.cpp
+#: editor/project_export.cpp editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "Duplicat"
@@ -2808,6 +2822,24 @@ msgid "Choose"
msgstr "Alegeți"
#: editor/editor_export.cpp
+msgid "Project export for platform:"
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Completed with errors."
+msgstr ""
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Completed successfully."
+msgstr "Pachet instalat cu succes!"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed."
+msgstr "A Eșuat:"
+
+#: editor/editor_export.cpp
msgid "Storing File:"
msgstr "Fişierul se Stochează:"
@@ -2820,6 +2852,31 @@ msgid "Packing"
msgstr "Ambalare"
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save PCK"
+msgstr "Salvați Ca"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Cannot create file \"%s\"."
+msgstr "Directorul nu a putut fi creat."
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to export project files."
+msgstr "Nu s-a putut porni subprocesul!"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Can't open file to read from path \"%s\"."
+msgstr "Nu pot deschide fiÅŸierul pentru scris:"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save ZIP"
+msgstr "Salvați Ca"
+
+#: editor/editor_export.cpp
msgid ""
"Target platform requires 'ETC' texture compression for GLES2. Enable 'Import "
"Etc' in Project Settings."
@@ -2942,11 +2999,32 @@ msgstr "Fișierul șablon de depanare personalizat nu a fost găsit."
msgid "Custom release template not found."
msgstr "Șablonul personalizat de lansare nu a fost găsit."
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Prepare Template"
+msgstr "Gestionați șabloanele"
+
+#: editor/editor_export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "The given export path doesn't exist."
+msgstr "Fișierul nu există."
+
#: editor/editor_export.cpp platform/javascript/export/export.cpp
-msgid "Template file not found:"
+#, fuzzy
+msgid "Template file not found: \"%s\"."
msgstr "Fișierul șablon nu a fost găsit:"
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to copy export template."
+msgstr "Nu se pot deschide șabloanele de export zip."
+
+#: editor/editor_export.cpp platform/windows/export/export.cpp
+#: platform/x11/export/export.cpp
+msgid "PCK Embedding"
+msgstr ""
+
+#: editor/editor_export.cpp
msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB."
msgstr ""
"La exporturile pe 32 de biți PCK-ul încorporat nu poate fi mai mare de 4 GiB."
@@ -3120,9 +3198,9 @@ msgid "Import"
msgstr "Importare"
#: editor/editor_feature_profile.cpp editor/project_export.cpp
-#: platform/android/export/export.cpp platform/javascript/export/export.cpp
-#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
-#: platform/windows/export/export.cpp
+#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#: platform/uwp/export/export.cpp platform/windows/export/export.cpp
msgid "Export"
msgstr "Exportare"
@@ -4283,15 +4361,6 @@ msgid ""
"Unable to write to file '%s', file in use, locked or lacking permissions."
msgstr ""
-#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
-msgid "Scene"
-msgstr "Scenă"
-
-#: editor/editor_node.cpp
-#, fuzzy
-msgid "Scene Naming"
-msgstr "Calea Scenei:"
-
#: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp
#: servers/arvr/arvr_interface.cpp
#, fuzzy
@@ -4420,6 +4489,10 @@ msgid "Default Color Picker Mode"
msgstr ""
#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
+msgid "Version Control"
+msgstr "Control versiune"
+
+#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
#, fuzzy
msgid "Username"
msgstr "Redenumește"
@@ -4448,6 +4521,10 @@ msgstr "Comutează modul fără distrageri."
msgid "Add a new scene."
msgstr "Adaugă o nouă scenă."
+#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
+msgid "Scene"
+msgstr "Scenă"
+
#: editor/editor_node.cpp
msgid "Go to previously opened scene."
msgstr "Mergi la o scenă deschisă anterior."
@@ -5232,6 +5309,11 @@ msgstr ""
"platformă.\n"
"Te rog adaugă o presetare de rulare în meniul pentru export."
+#: editor/editor_run_native.cpp
+#, fuzzy
+msgid "Project Run"
+msgstr "Proiect"
+
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
msgstr "Scrie logica programului în metoda _run()."
@@ -5508,7 +5590,9 @@ msgid "Draw Spaces"
msgstr "Apeluri"
#: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp
-#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp
+#: scene/main/scene_tree.cpp scene/resources/world.cpp
+#: scene/resources/world_2d.cpp
#, fuzzy
msgid "Navigation"
msgstr "Creează un Mesh de Navigare"
@@ -6994,7 +7078,7 @@ msgstr ""
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp
-#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp
+#: scene/gui/control.cpp
#, fuzzy
msgid "Filter"
msgstr "Filtre:"
@@ -7289,6 +7373,18 @@ msgid "Saving..."
msgstr "Se Salvează..."
#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used as a normal map in 3D. Enabling red-green "
+"texture compression to reduce memory usage (blue channel is discarded)."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap "
+"generation and VRAM texture compression."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
msgid "2D, Detect 3D"
msgstr ""
@@ -7990,11 +8086,20 @@ msgid "New Anim"
msgstr "Anim Nouă"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+msgstr "Creează Animație Nouă"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Change Animation Name:"
msgstr "Schimbă Numele Animației:"
#: editor/plugins/animation_player_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Rename Animation"
+msgstr "Redenumește Animația"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Delete Animation?"
msgstr "Ștergi Animația?"
@@ -8014,11 +8119,6 @@ msgid "Animation name already exists!"
msgstr "EROARE: Numele animației există deja!"
#: editor/plugins/animation_player_editor_plugin.cpp
-#: editor/plugins/sprite_frames_editor_plugin.cpp
-msgid "Rename Animation"
-msgstr "Redenumește Animația"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate Animation"
msgstr "Duplicare Animație"
@@ -8166,10 +8266,6 @@ msgid "Pin AnimationPlayer"
msgstr "Lipește Animație"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Create New Animation"
-msgstr "Creează Animație Nouă"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Name:"
msgstr "Nume Animație:"
@@ -10363,6 +10459,7 @@ msgid "Points"
msgstr "Deplasare punct"
#: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp
+#: scene/resources/navigation_mesh.cpp
#, fuzzy
msgid "Polygons"
msgstr "Poligon->UV"
@@ -11800,7 +11897,8 @@ msgid "Invalid geometry, can't replace by mesh."
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
-msgid "Convert to Mesh2D"
+#, fuzzy
+msgid "Convert to MeshInstance2D"
msgstr "Conversie în Mesh2D"
#: editor/plugins/sprite_editor_plugin.cpp
@@ -12861,8 +12959,7 @@ msgid "Select the previous shape, subtile, or Tile."
msgstr ""
#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp
-#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp
-#: scene/resources/texture.cpp
+#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp
msgid "Region"
msgstr "Regiunea"
@@ -14373,32 +14470,11 @@ 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
#, fuzzy
msgid "Exporting All"
msgstr "Exportare"
#: 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
#, fuzzy
msgid "Export Path"
msgstr "Exportă Proiectul"
@@ -14541,6 +14617,11 @@ msgid "Export templates for this platform are missing:"
msgstr ""
#: editor/project_export.cpp
+#, fuzzy
+msgid "Project Export"
+msgstr "Fondatorii Proiectului"
+
+#: editor/project_export.cpp
msgid "Manage Export Templates"
msgstr "Administrează Șabloanele de Export"
@@ -16923,7 +17004,7 @@ msgstr ""
#: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp
#: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp
-#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp
+#: scene/3d/collision_polygon.cpp
#, fuzzy
msgid "Polygon"
msgstr "Poligon->UV"
@@ -17535,7 +17616,6 @@ msgid "Use In Baked Light"
msgstr "Procesează Lightmaps"
#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
-#: scene/resources/navigation_mesh.cpp
msgid "Cell"
msgstr ""
@@ -17565,6 +17645,19 @@ msgstr "Centrează Selecția"
msgid "Mask"
msgstr ""
+#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
+#, fuzzy
+msgid "Bake Navigation"
+msgstr "Creează un Mesh de Navigare"
+
+#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp
+#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp
+#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp
+#: scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Navigation Layers"
+msgstr "Creează un Mesh de Navigare"
+
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Plane"
msgstr "Planul următor"
@@ -19123,10 +19216,6 @@ msgid "Could not execute on device."
msgstr "Directorul nu a putut fi creat."
#: 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."
@@ -19230,12 +19319,16 @@ msgstr ""
msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version."
msgstr ""
+#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Code Signing"
+msgstr "Semnal"
+
#: 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."
+"'apksigner' could not be found. Please check that the command is available "
+"in the Android SDK build-tools directory. The resulting %s is unsigned."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -19254,6 +19347,11 @@ msgid "Could not find keystore, unable to export."
msgstr ""
#: platform/android/export/export_plugin.cpp
+#, fuzzy
+msgid "Could not start apksigner executable."
+msgstr "Nu s-a putut porni subprocesul!"
+
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
@@ -19284,7 +19382,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Unsupported export format!\n"
+msgid "Unsupported export format!"
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -19295,20 +19393,19 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Android build version mismatch:\n"
-" Template installed: %s\n"
-" Godot Version: %s\n"
+"Android build version mismatch: Template installed: %s, Godot version: %s. "
"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"
+"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 ""
+#, fuzzy
+msgid "Could not export project files to gradle project."
+msgstr "Nu s-a putut porni subprocesul!"
#: platform/android/export/export_plugin.cpp
msgid "Could not write expansion package file!"
@@ -19320,7 +19417,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Building of Android project failed, check output for the error.\n"
+"Building of Android project failed, check output for the error. "
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
@@ -19336,7 +19433,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
#, fuzzy
-msgid "Package not found: %s"
+msgid "Package not found: \"%s\"."
msgstr "Unelte Animație"
#: platform/android/export/export_plugin.cpp
@@ -19345,15 +19442,13 @@ msgid "Creating APK..."
msgstr "Crearea conturilor..."
#: platform/android/export/export_plugin.cpp
-msgid ""
-"Could not find template APK to export:\n"
-"%s"
-msgstr ""
+#, fuzzy
+msgid "Could not find template APK to export: \"%s\"."
+msgstr "Nu s-a putut porni subprocesul!"
#: platform/android/export/export_plugin.cpp
msgid ""
-"Missing libraries in the export template for the selected architectures: "
-"%s.\n"
+"Missing libraries in the export template for the selected architectures: %s. "
"Please build a template with all required libraries, or uncheck the missing "
"architectures in the export preset."
msgstr ""
@@ -19365,7 +19460,7 @@ msgstr "Se adaugă %s..."
#: platform/android/export/export_plugin.cpp
#, fuzzy
-msgid "Could not export project files"
+msgid "Could not export project files."
msgstr "Nu s-a putut porni subprocesul!"
#: platform/android/export/export_plugin.cpp
@@ -19607,6 +19702,17 @@ msgstr "Creează Nod"
msgid "Custom BG Color"
msgstr "Creează Nod"
+#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Prepare Templates"
+msgstr "Gestionați șabloanele"
+
+#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Export template not found."
+msgstr "Șablonul personalizat de lansare nu a fost găsit."
+
#: platform/iphone/export/export.cpp
msgid "App Store Team ID not specified - cannot configure the project."
msgstr ""
@@ -19628,23 +19734,35 @@ msgid "Run exported HTML in the system's default browser."
msgstr "Execută HTML-ul exportat în browserul prestabilit al sistemului."
#: platform/javascript/export/export.cpp
-msgid "Could not open template for export:"
-msgstr ""
+#, fuzzy
+msgid "Could not open template for export: \"%s\"."
+msgstr "Directorul nu a putut fi creat."
#: platform/javascript/export/export.cpp
-msgid "Invalid export template:"
-msgstr ""
+#, fuzzy
+msgid "Invalid export template: \"%s\"."
+msgstr "Trebuie să utilizaţi o extensie valida."
#: platform/javascript/export/export.cpp
-msgid "Could not write file:"
-msgstr ""
+#, fuzzy
+msgid "Could not write file: \"%s\"."
+msgstr "Nu s-a putut încărca fișierul la:"
+
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Icon Creation"
+msgstr "Setează Mâner"
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not read file:"
+msgid "Could not read file: \"%s\"."
msgstr "Nu s-a putut încărca fișierul la:"
#: platform/javascript/export/export.cpp
+msgid "PWA"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
#, fuzzy
msgid "Variant"
msgstr "Enumerări:"
@@ -19720,17 +19838,17 @@ msgstr ""
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not read HTML shell:"
+msgid "Could not read HTML shell: \"%s\"."
msgstr "Nu s-a putut încărca fișierul la:"
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not create HTTP server directory:"
+msgid "Could not create HTTP server directory: %s."
msgstr "Directorul nu a putut fi creat."
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Error starting HTTP server:"
+msgid "Error starting HTTP server: %d."
msgstr "Eroare la scrierea TextFile:"
#: platform/javascript/export/export.cpp
@@ -20028,9 +20146,28 @@ msgid "Apple Team ID"
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open icon file \"%s\"."
+msgstr "Nu s-a putut porni subprocesul!"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start xcrun executable."
+msgstr "Nu s-a putut porni subprocesul!"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization failed."
+msgstr "Creează un Mesh de Navigare"
+
+#: platform/osx/export/export.cpp
+msgid "Notarization request UUID: \"%s\""
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid ""
-"Note: The notarization process generally takes less than an hour. When the "
-"process is completed, you'll receive an email."
+"The notarization process generally takes less than an hour. When the process "
+"is completed, you'll receive an email."
msgstr ""
#: platform/osx/export/export.cpp
@@ -20046,18 +20183,74 @@ msgid ""
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign failed with error \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign require regex module."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Could not start codesign executable, make sure Xcode command line tools are "
+"installed."
+msgstr ""
+
+#: platform/osx/export/export.cpp platform/windows/export/export.cpp
#, fuzzy
msgid "No identity found."
msgstr "Nu s-a găsit nici o sub-resursă."
#: platform/osx/export/export.cpp
#, fuzzy
+msgid "Cannot sign file %s."
+msgstr "Eroare la salvarea filei: %s"
+
+#: platform/osx/export/export.cpp
+msgid "Relative symlinks are not supported, exported \"%s\" might be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "DMG Creation"
+msgstr "Direcții"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start hdiutil executable."
+msgstr "Nu s-a putut porni subprocesul!"
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed - file exists."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
msgid "Creating app bundle"
msgstr "Creând Thumbnail"
#: platform/osx/export/export.cpp
-msgid "Could not find template app to export:"
-msgstr ""
+#, fuzzy
+msgid "Could not find template app to export: \"%s\"."
+msgstr "Nu s-a putut porni subprocesul!"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid export format."
+msgstr "Cale nevalidă."
#: platform/osx/export/export.cpp
msgid ""
@@ -20067,7 +20260,7 @@ msgstr ""
#: platform/osx/export/export.cpp
msgid ""
-"Requested template binary '%s' not found. It might be missing from your "
+"Requested template binary \"%s\" not found. It might be missing from your "
"template archive."
msgstr ""
@@ -20109,6 +20302,15 @@ msgstr ""
#: platform/osx/export/export.cpp
#, fuzzy
+msgid "ZIP Creation"
+msgstr "Proiect"
+
+#: platform/osx/export/export.cpp
+msgid "Could not open file to read from path \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
msgid "Invalid bundle identifier:"
msgstr "Identificator nevalid:"
@@ -20423,6 +20625,11 @@ msgid "Debug Algorithm"
msgstr ""
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to rename temporary file \"%s\"."
+msgstr "Nu pot sterge fișierul temporar:"
+
+#: platform/windows/export/export.cpp
msgid "Identity Type"
msgstr ""
@@ -20469,6 +20676,66 @@ msgid "Trademarks"
msgstr ""
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Resources Modification"
+msgstr "Rotație aleatorie:"
+
+#: platform/windows/export/export.cpp
+msgid "Could not find rcedit executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find wine executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start rcedit executable, configure rcedit path in the Editor "
+"Settings (Export > Windows > Rcedit)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"rcedit failed to modify executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find signtool executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find osslsigncode executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid identity type."
+msgstr "Identificator nevalid:"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid timestamp server."
+msgstr "Nume nevalid."
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start signtool executable, configure signtool path in the Editor "
+"Settings (Export > Windows > Signtool)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Signtool failed to sign executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to remove temporary file \"%s\"."
+msgstr "Nu pot sterge fișierul temporar:"
+
+#: platform/windows/export/export.cpp
msgid ""
"The rcedit tool must be configured in the Editor Settings (Export > Windows "
"> Rcedit) to change the icon or app information data."
@@ -20490,6 +20757,23 @@ msgid "Invalid product version:"
msgstr "Nume de Proiect Nevalid."
#: platform/windows/export/export.cpp
+msgid "Windows executables cannot be >= 4 GiB."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+#, fuzzy
+msgid "Failed to open executable file \"%s\"."
+msgstr "Trebuie să utilizaţi o extensie valida."
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable file header corrupted."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable \"pck\" section not found."
+msgstr ""
+
+#: platform/windows/export/export.cpp
#, fuzzy
msgid "Windows"
msgstr "Fereastră Nouă"
@@ -20506,6 +20790,10 @@ msgstr ""
msgid "Wine"
msgstr ""
+#: platform/x11/export/export.cpp
+msgid "32-bit executables cannot have embedded data >= 4 GiB."
+msgstr ""
+
#: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp
#: scene/resources/texture.cpp
#, fuzzy
@@ -20628,7 +20916,8 @@ msgstr ""
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/3d/light.cpp scene/3d/reflection_probe.cpp
-#: scene/3d/visual_instance.cpp scene/resources/material.cpp
+#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp
+#: scene/resources/material.cpp
#, fuzzy
msgid "Max Distance"
msgstr "Instanță"
@@ -21399,6 +21688,18 @@ msgstr ""
msgid "Edge Connection Margin"
msgstr "Modifică Conexiunea:"
+#: scene/2d/navigation_2d.cpp
+msgid ""
+"'Navigation2D' node and 'Navigation2D.get_simple_path()' are deprecated and "
+"will be removed in a future version. Use 'Navigation2DServer.map_get_path()' "
+"instead."
+msgstr ""
+
+#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
+#, fuzzy
+msgid "Path Desired Distance"
+msgstr "Alege o Scenă Principală"
+
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
msgid "Target Desired Distance"
msgstr ""
@@ -21451,13 +21752,16 @@ msgid ""
msgstr ""
#: scene/2d/navigation_polygon.cpp
-msgid ""
-"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
-"node. It only provides navigation data."
+msgid "Navpoly"
msgstr ""
-#: scene/2d/navigation_polygon.cpp
-msgid "Navpoly"
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Enter Cost"
+msgstr "Centrează Selecția"
+
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+msgid "Travel Cost"
msgstr ""
#: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp
@@ -22607,6 +22911,13 @@ msgstr ""
msgid "Transform Normals"
msgstr "Transformare uniformă."
+#: scene/3d/navigation.cpp
+msgid ""
+"'Navigation' node and 'Navigation.get_simple_path()' are deprecated and will "
+"be removed in a future version. Use 'NavigationServer.map_get_path()' "
+"instead."
+msgstr ""
+
#: scene/3d/navigation.cpp scene/resources/curve.cpp
#, fuzzy
msgid "Up Vector"
@@ -22630,12 +22941,6 @@ msgid ""
"The NavigationAgent can be used only under a Spatial inheriting parent node."
msgstr ""
-#: scene/3d/navigation_mesh_instance.cpp
-msgid ""
-"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
-"It only provides navigation data."
-msgstr ""
-
#: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp
#, fuzzy
msgid "NavMesh"
@@ -25267,6 +25572,16 @@ msgid "3D Physics"
msgstr "Cadru Fizic %"
#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "2D Navigation"
+msgstr "Creează un Mesh de Navigare"
+
+#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "3D Navigation"
+msgstr "Creează un Mesh de Navigare"
+
+#: scene/register_scene_types.cpp
msgid "Use hiDPI"
msgstr ""
@@ -26675,7 +26990,7 @@ msgstr "Transmisie"
msgid "Refraction"
msgstr "Enumerări:"
-#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp
+#: scene/resources/material.cpp
msgid "Detail"
msgstr ""
@@ -26757,7 +27072,12 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
-msgid "Sample Partition Type"
+msgid "Sampling"
+msgstr "Dimensiune:"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Partition Type"
msgstr "Modificare tip bază:"
#: scene/resources/navigation_mesh.cpp
@@ -26775,10 +27095,15 @@ msgid "Source Group Name"
msgstr "Resursă"
#: scene/resources/navigation_mesh.cpp
-msgid "Agent"
+msgid "Cells"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Agents"
+msgstr "Conținut:"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Max Climb"
msgstr ""
@@ -26787,11 +27112,16 @@ msgid "Max Slope"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Regions"
+msgstr "Regiunea"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Merge Size"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Edge"
+msgid "Edges"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -26804,6 +27134,11 @@ msgid "Verts Per Poly"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Details"
+msgstr "Încărcați Implicit"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Sample Distance"
msgstr ""
@@ -26820,9 +27155,19 @@ msgid "Ledge Spans"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Filter Walkable Low Height Spans"
+msgid "Walkable Low Height Spans"
msgstr ""
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB"
+msgstr "Generare AABB"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB Offset"
+msgstr "Compensare Grilă:"
+
#: scene/resources/occluder_shape.cpp
msgid "Spheres"
msgstr ""
@@ -27228,6 +27573,11 @@ msgid "Scenario"
msgstr "Scenă"
#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Navigation Map"
+msgstr "Creează un Mesh de Navigare"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
msgid "Direct Space State"
msgstr ""
@@ -27245,6 +27595,26 @@ msgstr "Stânga liniară"
msgid "Default Angular Damp"
msgstr ""
+#: scene/resources/world.cpp
+#, fuzzy
+msgid "Default Map Up"
+msgstr "Implicit"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Size"
+msgstr "Previzualizare"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Height"
+msgstr "Se Testează"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Edge Connection Margin"
+msgstr "Modifică Conexiunea:"
+
#: scene/resources/world_2d.cpp
msgid "Canvas"
msgstr ""
diff --git a/editor/translations/ru.po b/editor/translations/ru.po
index 512d3f8caa..755683fdf0 100644
--- a/editor/translations/ru.po
+++ b/editor/translations/ru.po
@@ -120,7 +120,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: 2022-06-08 06:48+0000\n"
+"PO-Revision-Date: 2022-06-12 13:19+0000\n"
"Last-Translator: FuzzMix <fmwolfiechad@gmail.com>\n"
"Language-Team: Russian <https://hosted.weblate.org/projects/godot-engine/"
"godot/ru/>\n"
@@ -314,9 +314,10 @@ msgid "Data"
msgstr "Данные"
#: core/io/file_access_network.cpp core/register_core_types.cpp
-#: editor/editor_settings.cpp main/main.cpp
+#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
#: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h
+#: scene/gui/file_dialog.cpp
msgid "Network"
msgstr "Сеть"
@@ -422,9 +423,8 @@ msgid "Not enough bytes for decoding bytes, or invalid format."
msgstr "ÐедоÑтаточно байтов Ð´Ð»Ñ Ð´ÐµÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð±Ð°Ð¹Ñ‚Ð¾Ð² или неверный формат."
#: core/math/expression.cpp
-#, fuzzy
msgid "Invalid input %d (not passed) in expression"
-msgstr "Ðекорректный ввод %i (не подходит) в выражении"
+msgstr "Ðекорректный ввод %d (не подходит) в выражении"
#: core/math/expression.cpp
msgid "self can't be used because instance is null (not passed)"
@@ -468,6 +468,16 @@ msgstr "Очередь Ñообщений"
msgid "Max Size (KB)"
msgstr "МакÑимальный размер (КБ)"
+#: core/os/input.cpp
+#, fuzzy
+msgid "Mouse Mode"
+msgstr "Режим перемещениÑ"
+
+#: core/os/input.cpp
+#, fuzzy
+msgid "Use Accumulated Input"
+msgstr "Удалить вход"
+
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: servers/audio_server.cpp
msgid "Device"
@@ -647,7 +657,8 @@ msgstr "ОпиÑание"
#: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
-#: main/main.cpp
+#: main/main.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp
msgid "Run"
msgstr "ЗапуÑтить"
@@ -730,6 +741,10 @@ msgid "Main Run Args"
msgstr "ОÑновные аргументы запуÑка"
#: core/project_settings.cpp
+msgid "Scene Naming"
+msgstr "Именование Ñцен"
+
+#: core/project_settings.cpp
msgid "Search In File Extensions"
msgstr "ИÑкать в раÑширениÑÑ… файлов"
@@ -737,18 +752,15 @@ msgstr "ИÑкать в раÑширениÑÑ… файлов"
msgid "Script Templates Search Path"
msgstr "Путь поиÑка шаблонов Ñкриптов"
-#: core/project_settings.cpp editor/editor_node.cpp
-#: editor/plugins/version_control_editor_plugin.cpp
-msgid "Version Control"
-msgstr "Контроль верÑий"
-
#: core/project_settings.cpp
-msgid "Autoload On Startup"
+#, fuzzy
+msgid "Version Control Autoload On Startup"
msgstr "Ðвтозагрузка при запуÑке"
#: core/project_settings.cpp
-msgid "Plugin Name"
-msgstr "Ðазвание плагина"
+#, fuzzy
+msgid "Version Control Plugin Name"
+msgstr "Контроль верÑий"
#: core/project_settings.cpp scene/2d/collision_object_2d.cpp
#: scene/3d/collision_object.cpp scene/gui/control.cpp
@@ -855,7 +867,8 @@ msgid "Quality"
msgstr "КачеÑтво"
#: core/project_settings.cpp scene/gui/file_dialog.cpp
-#: scene/main/scene_tree.cpp servers/visual_server.cpp
+#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp
+#: servers/visual_server.cpp
msgid "Filters"
msgstr "Фильтры"
@@ -1255,14 +1268,12 @@ msgid "Stream"
msgstr "Поток"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Start Offset"
-msgstr "Смещение поворота"
+msgstr "Ðачальное Ñмещение"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "End Offset"
-msgstr "Г Ñмещение"
+msgstr "Конечное Ñмещение"
#: editor/animation_track_editor.cpp editor/editor_settings.cpp
#: editor/import/resource_importer_scene.cpp
@@ -1386,19 +1397,16 @@ msgid "Remove this track."
msgstr "Удалить Ñту дорожку."
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Time (s):"
-msgstr "Ð’Ñ€ÐµÐ¼Ñ (Ñек.): "
+msgstr "Ð’Ñ€ÐµÐ¼Ñ (Ñек.):"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Position:"
-msgstr "ПозициÑ"
+msgstr "ПозициÑ:"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Rotation:"
-msgstr "Поворот"
+msgstr "Поворот:"
#: editor/animation_track_editor.cpp
#: editor/plugins/animation_tree_player_editor_plugin.cpp
@@ -1415,9 +1423,8 @@ msgid "Type:"
msgstr "Тип:"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "(Invalid, expected type: %s)"
-msgstr "Ðеверный шаблон ÑкÑпорта:"
+msgstr "(Ðеверный, ожидаемый тип: %s)"
#: editor/animation_track_editor.cpp
#, fuzzy
@@ -1440,19 +1447,16 @@ msgid "Stream:"
msgstr "Поток"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Start (s):"
-msgstr "ПерезапуÑк (Ñек.):"
+msgstr "Ðачало (Ñек.):"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "End (s):"
-msgstr "ПроÑвление (Ñек.):"
+msgstr "Конец (Ñек.):"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Animation Clip:"
-msgstr "Ðнимации:"
+msgstr "Клип Ðнимации:"
#: editor/animation_track_editor.cpp
msgid "Toggle Track Enabled"
@@ -1666,9 +1670,8 @@ msgid "Add Method Track Key"
msgstr "Добавить ключ дорожки Ð´Ð»Ñ Ð¼ÐµÑ‚Ð¾Ð´Ð°"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Method not found in object:"
-msgstr "В объекте нет такого метода: "
+msgstr "В объекте нет такого метода:"
#: editor/animation_track_editor.cpp
msgid "Anim Move Keys"
@@ -2278,8 +2281,8 @@ msgid "Open"
msgstr "Открыть"
#: editor/dependency_editor.cpp
-msgid "Owners Of:"
-msgstr "Владельцы:"
+msgid "Owners of: %s (Total: %d)"
+msgstr ""
#: editor/dependency_editor.cpp
msgid ""
@@ -2580,7 +2583,7 @@ msgid "Bus Options"
msgstr "Параметры шины"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/scene_tree_dock.cpp
+#: editor/project_export.cpp editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "Дублировать"
@@ -2633,9 +2636,8 @@ msgid "There is no '%s' file."
msgstr "Файла «%s» не ÑущеÑтвует."
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Layout:"
-msgstr "Макет"
+msgstr "Макет:"
#: editor/editor_audio_buses.cpp
msgid "Invalid file, not an audio bus layout."
@@ -2837,6 +2839,25 @@ msgid "Choose"
msgstr "Выбрать"
#: editor/editor_export.cpp
+msgid "Project export for platform:"
+msgstr ""
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Completed with errors."
+msgstr "Завершать пути файлов"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Completed successfully."
+msgstr "Пакет уÑпешно уÑтановлен!"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed."
+msgstr "Ðе удалоÑÑŒ:"
+
+#: editor/editor_export.cpp
msgid "Storing File:"
msgstr "Сохранение файла:"
@@ -2849,6 +2870,31 @@ msgid "Packing"
msgstr "Упаковывание"
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save PCK"
+msgstr "Сохранить как"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Cannot create file \"%s\"."
+msgstr "Ðевозможно Ñоздать папку."
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to export project files."
+msgstr "Ðе удалоÑÑŒ ÑкÑпортировать файлы проекта"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Can't open file to read from path \"%s\"."
+msgstr "Ðевозможно открыть файл Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи:"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save ZIP"
+msgstr "Сохранить как"
+
+#: editor/editor_export.cpp
msgid ""
"Target platform requires 'ETC' texture compression for GLES2. Enable 'Import "
"Etc' in Project Settings."
@@ -2964,11 +3010,33 @@ msgstr "ПользовательÑкий отладочный шаблон не
msgid "Custom release template not found."
msgstr "ПользовательÑкий релизный шаблон не найден."
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Prepare Template"
+msgstr "Управление шаблонами"
+
+#: editor/editor_export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "The given export path doesn't exist."
+msgstr "Данный путь ÑкÑпорта не ÑущеÑтвует:"
+
#: editor/editor_export.cpp platform/javascript/export/export.cpp
-msgid "Template file not found:"
+#, fuzzy
+msgid "Template file not found: \"%s\"."
msgstr "Файл шаблона не найден:"
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to copy export template."
+msgstr "Ðеверный шаблон ÑкÑпорта:"
+
+#: editor/editor_export.cpp platform/windows/export/export.cpp
+#: platform/x11/export/export.cpp
+#, fuzzy
+msgid "PCK Embedding"
+msgstr "ОтÑтуп"
+
+#: editor/editor_export.cpp
msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB."
msgstr ""
"Ðа 32-Ñ… битных ÑиÑтемах вÑтроенный PCK файл не может быть больше 4 Гбит."
@@ -3144,9 +3212,9 @@ msgid "Import"
msgstr "Импорт"
#: editor/editor_feature_profile.cpp editor/project_export.cpp
-#: platform/android/export/export.cpp platform/javascript/export/export.cpp
-#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
-#: platform/windows/export/export.cpp
+#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#: platform/uwp/export/export.cpp platform/windows/export/export.cpp
msgid "Export"
msgstr "ЭкÑпорт"
@@ -4297,14 +4365,6 @@ msgstr ""
"Ðевозможно запиÑать в файл «%s», файл иÑпользуетÑÑ, заблокирован или "
"отÑутÑтвуют разрешениÑ."
-#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
-msgid "Scene"
-msgstr "Сцена"
-
-#: editor/editor_node.cpp
-msgid "Scene Naming"
-msgstr "Именование Ñцен"
-
#: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp
#: servers/arvr/arvr_interface.cpp
msgid "Interface"
@@ -4419,6 +4479,10 @@ msgid "Default Color Picker Mode"
msgstr "Режим выбора цвета по умолчанию"
#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
+msgid "Version Control"
+msgstr "Контроль верÑий"
+
+#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
msgid "Username"
msgstr "Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ"
@@ -4446,6 +4510,10 @@ msgstr "Переключить режим без отвлечениÑ."
msgid "Add a new scene."
msgstr "Добавить новую Ñцену."
+#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
+msgid "Scene"
+msgstr "Сцена"
+
#: editor/editor_node.cpp
msgid "Go to previously opened scene."
msgstr "Перейти к предыдущей открытой Ñцене."
@@ -5137,9 +5205,8 @@ msgid "Size:"
msgstr "Размер:"
#: editor/editor_properties_array_dict.cpp
-#, fuzzy
msgid "Page:"
-msgstr "Страница: "
+msgstr "Страница:"
#: editor/editor_properties_array_dict.cpp
#: editor/plugins/theme_editor_plugin.cpp
@@ -5235,6 +5302,11 @@ msgstr ""
"ПожалуйÑта, добавьте активный преÑет в меню ÑкÑпорта или пометьте "
"ÑущеÑтвующий преÑет как активный."
+#: editor/editor_run_native.cpp
+#, fuzzy
+msgid "Project Run"
+msgstr "Проект"
+
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
msgstr "Пишите ваш код в методе _run()."
@@ -5489,7 +5561,9 @@ msgid "Draw Spaces"
msgstr "РиÑовать пробелы"
#: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp
-#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp
+#: scene/main/scene_tree.cpp scene/resources/world.cpp
+#: scene/resources/world_2d.cpp
msgid "Navigation"
msgstr "ÐавигациÑ"
@@ -6901,7 +6975,7 @@ msgstr "Повторить"
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp
-#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp
+#: scene/gui/control.cpp
msgid "Filter"
msgstr "Фильтр"
@@ -7135,9 +7209,8 @@ msgid "Generating Lightmaps"
msgstr "Создание карт оÑвещениÑ"
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Generating for Mesh:"
-msgstr "Создание Ð´Ð»Ñ Ð¿Ð¾Ð»Ð¸Ñетки: "
+msgstr "Создание Ð´Ð»Ñ Ð¿Ð¾Ð»Ð¸Ñетки:"
#: editor/import/resource_importer_scene.cpp
msgid "Running Custom Script..."
@@ -7164,6 +7237,18 @@ msgid "Saving..."
msgstr "Сохранение..."
#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used as a normal map in 3D. Enabling red-green "
+"texture compression to reduce memory usage (blue channel is discarded)."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap "
+"generation and VRAM texture compression."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
msgid "2D, Detect 3D"
msgstr "2D, Обнаружение 3D"
@@ -7834,11 +7919,20 @@ msgid "New Anim"
msgstr "ÐÐ¾Ð²Ð°Ñ Ð°Ð½Ð¸Ð¼Ð°Ñ†Ð¸Ñ"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+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 "Rename Animation"
+msgstr "Переименовать анимацию"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Delete Animation?"
msgstr "Удалить анимацию?"
@@ -7856,11 +7950,6 @@ 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 "Duplicate Animation"
msgstr "Дублировать анимацию"
@@ -8006,10 +8095,6 @@ msgid "Pin AnimationPlayer"
msgstr "Закрепить анимацию игрока"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Create New Animation"
-msgstr "Создать новую анимацию"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Name:"
msgstr "Ðазвание анимации:"
@@ -8125,9 +8210,8 @@ msgid "Set the end animation. This is useful for sub-transitions."
msgstr "УÑтановите конец анимации. Полезно Ð´Ð»Ñ Ð²Ñпомогательных переходов."
#: editor/plugins/animation_state_machine_editor.cpp
-#, fuzzy
msgid "Transition:"
-msgstr "Переход: "
+msgstr "Переход:"
#: editor/plugins/animation_state_machine_editor.cpp
msgid "Play Mode:"
@@ -9881,9 +9965,8 @@ msgid "Volume"
msgstr "Объём"
#: editor/plugins/particles_editor_plugin.cpp
-#, fuzzy
msgid "Emission Source:"
-msgstr "ИÑточник излучениÑ: "
+msgstr "ИÑточник излучениÑ:"
#: editor/plugins/particles_editor_plugin.cpp
msgid "A processor material of type 'ParticlesMaterial' is required."
@@ -10116,6 +10199,7 @@ msgid "Points"
msgstr "Точки"
#: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp
+#: scene/resources/navigation_mesh.cpp
msgid "Polygons"
msgstr "Полигоны"
@@ -10976,15 +11060,13 @@ msgstr "Сдвинуть"
#. TRANSLATORS: Refers to changing the scale of a node in the 3D editor.
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Scaling:"
-msgstr "МаÑштаб: "
+msgstr "МаÑштаб:"
#. TRANSLATORS: Refers to changing the position of a node in the 3D editor.
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Translating:"
-msgstr "Перемещение: "
+msgstr "Перемещение:"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rotating %s degrees."
@@ -11495,7 +11577,8 @@ msgid "Invalid geometry, can't replace by mesh."
msgstr "ÐедопуÑÑ‚Ð¸Ð¼Ð°Ñ Ð³ÐµÐ¾Ð¼ÐµÑ‚Ñ€Ð¸Ñ, не может быть заменена полиÑеткой."
#: editor/plugins/sprite_editor_plugin.cpp
-msgid "Convert to Mesh2D"
+#, fuzzy
+msgid "Convert to MeshInstance2D"
msgstr "Преобразовать в Mesh2D"
#: editor/plugins/sprite_editor_plugin.cpp
@@ -11528,19 +11611,16 @@ msgid "Sprite"
msgstr "Спрайт"
#: editor/plugins/sprite_editor_plugin.cpp
-#, fuzzy
msgid "Simplification:"
-msgstr "Упрощение: "
+msgstr "Упрощение:"
#: editor/plugins/sprite_editor_plugin.cpp
-#, fuzzy
msgid "Shrink (Pixels):"
-msgstr "Сжатие (пикÑели): "
+msgstr "Сжатие (пикÑели):"
#: editor/plugins/sprite_editor_plugin.cpp
-#, fuzzy
msgid "Grow (Pixels):"
-msgstr "РоÑÑ‚ (пикÑели): "
+msgstr "РоÑÑ‚ (пикÑели):"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Update Preview"
@@ -12482,8 +12562,7 @@ msgid "Select the previous shape, subtile, or Tile."
msgstr "Выберите предыдущую форму, Ñлемент тайла или тайл."
#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp
-#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp
-#: scene/resources/texture.cpp
+#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp
msgid "Region"
msgstr "Регион"
@@ -12773,7 +12852,6 @@ msgid "This property can't be changed."
msgstr "Это ÑвойÑтво не может быть изменено."
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Snap Options"
msgstr "Параметры привÑзки"
@@ -12802,9 +12880,8 @@ msgid "Separation"
msgstr "Разделение"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Selected Tile"
-msgstr "Выделение"
+msgstr "Ð’Ñ‹Ð±Ñ€Ð°Ð½Ð½Ð°Ñ Ð¿Ð»Ð¸Ñ‚ÐºÐ°"
#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/cpu_particles_2d.cpp
#: scene/2d/light_2d.cpp scene/2d/line_2d.cpp scene/2d/mesh_instance_2d.cpp
@@ -12833,9 +12910,8 @@ msgid "Modulate"
msgstr "МодулÑциÑ"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Tile Mode"
-msgstr "Режим отображениÑ"
+msgstr "Режим плитки"
#: editor/plugins/tile_set_editor_plugin.cpp
#, fuzzy
@@ -13987,47 +14063,23 @@ msgstr "Ðктивный"
#: editor/project_export.cpp
msgid "Export the project for all the presets defined."
-msgstr ""
+msgstr "ЭкÑпортируйте проект Ð´Ð»Ñ Ð²Ñех заданных предуÑтановок."
#: editor/project_export.cpp
msgid "All presets must have an export path defined for Export All to work."
msgstr ""
+"Ð”Ð»Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ функции \"ЭкÑпортировать вÑе\" у вÑех предуÑтановок должен быть "
+"определен путь ÑкÑпорта."
#: editor/project_export.cpp
msgid "Delete preset '%s'?"
msgstr "Удалить преÑет «%s»?"
#: editor/project_export.cpp
-msgid ""
-"Failed to export the project for platform '%s'.\n"
-"Export templates seem to be missing or invalid."
-msgstr ""
-"Ðе удалоÑÑŒ ÑкÑпортировать проект Ð´Ð»Ñ Ð¿Ð»Ð°Ñ‚Ñ„Ð¾Ñ€Ð¼Ñ‹ «%s».\n"
-"Шаблоны ÑкÑпорта отÑутÑтвуют или недейÑтвительны."
-
-#: 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 ""
-"Ðе удалоÑÑŒ ÑкÑпортировать проект Ð´Ð»Ñ Ð¿Ð»Ð°Ñ‚Ñ„Ð¾Ñ€Ð¼Ñ‹ «%s».\n"
-"Это может быть ÑвÑзано Ñ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ð¾Ð¹ конфигурации в предуÑтановке ÑкÑпорта или "
-"наÑтройках ÑкÑпорта."
-
-#: 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 "Export Path"
msgstr "Путь ÑкÑпорта"
@@ -14175,6 +14227,11 @@ msgid "Export templates for this platform are missing:"
msgstr "Шаблоны ÑкÑпорта Ð´Ð»Ñ Ñтой платформы отÑутÑтвуют:"
#: editor/project_export.cpp
+#, fuzzy
+msgid "Project Export"
+msgstr "ОÑнователи проекта"
+
+#: editor/project_export.cpp
msgid "Manage Export Templates"
msgstr "Управление шаблонами ÑкÑпорта"
@@ -16539,7 +16596,7 @@ msgstr "Стороны кольца"
#: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp
#: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp
-#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp
+#: scene/3d/collision_polygon.cpp
msgid "Polygon"
msgstr "Полигон"
@@ -17105,7 +17162,6 @@ msgid "Use In Baked Light"
msgstr "ИÑпользовать в запечённом Ñвете"
#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
-#: scene/resources/navigation_mesh.cpp
msgid "Cell"
msgstr "Ячейка"
@@ -17134,6 +17190,19 @@ msgstr "По центру"
msgid "Mask"
msgstr "МаÑка"
+#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
+#, fuzzy
+msgid "Bake Navigation"
+msgstr "ÐавигациÑ"
+
+#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp
+#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp
+#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp
+#: scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Navigation Layers"
+msgstr "ЧувÑтвительноÑть навигации"
+
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Plane"
msgstr "Ð¡Ð»ÐµÐ´ÑƒÑŽÑ‰Ð°Ñ Ð¿Ð¾ÑкоÑть"
@@ -18641,10 +18710,6 @@ msgid "Could not execute on device."
msgstr "Ðе удалоÑÑŒ выполнить на уÑтройÑтве."
#: platform/android/export/export_plugin.cpp
-msgid "Unable to find the 'apksigner' tool."
-msgstr "Ðе удалоÑÑŒ найти инÑтрумент «apksigner»."
-
-#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -18773,12 +18838,17 @@ msgstr ""
msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version."
msgstr "ВерÑÐ¸Ñ Â«Target Sdk» должна быть больше или равна верÑии «Min Sdk»."
+#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Code Signing"
+msgstr "ПодпиÑÑŒ кода DMG"
+
#: platform/android/export/export_plugin.cpp
+#, fuzzy
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."
+"'apksigner' could not be found. Please check that the command is available "
+"in the Android SDK build-tools directory. The resulting %s is unsigned."
msgstr ""
"Ðе удалоÑÑŒ найти команду «apksigner».\n"
"ПожалуйÑта, проверьте наличие программы в каталоге Android SDK build-tools.\n"
@@ -18797,6 +18867,11 @@ msgid "Could not find keystore, unable to export."
msgstr "Ðе удалоÑÑŒ найти хранилище ключей, невозможно ÑкÑпортировать."
#: platform/android/export/export_plugin.cpp
+#, fuzzy
+msgid "Could not start apksigner executable."
+msgstr "Ðе удаётÑÑ Ð·Ð°Ð¿ÑƒÑтить подпроцеÑÑ!"
+
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr "«apksigner» завершилÑÑ Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ¾Ð¹ #%d"
@@ -18825,7 +18900,8 @@ msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr "Ðеверное Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð°! Android APK требует раÑÑˆÐ¸Ñ€ÐµÐ½Ð¸Ñ *.apk."
#: platform/android/export/export_plugin.cpp
-msgid "Unsupported export format!\n"
+#, fuzzy
+msgid "Unsupported export format!"
msgstr "Ðеподдерживаемый формат ÑкÑпорта!\n"
#: platform/android/export/export_plugin.cpp
@@ -18837,10 +18913,9 @@ msgstr ""
"не ÑущеÑтвует. ПожалуйÑта, переуÑтановите из меню «Проект»."
#: platform/android/export/export_plugin.cpp
+#, fuzzy
msgid ""
-"Android build version mismatch:\n"
-" Template installed: %s\n"
-" Godot Version: %s\n"
+"Android build version mismatch: Template installed: %s, Godot version: %s. "
"Please reinstall Android build template from 'Project' menu."
msgstr ""
"ÐеÑоответÑтвие верÑии Ñборки Android:\n"
@@ -18849,13 +18924,15 @@ msgstr ""
"ПожалуйÑта, переуÑтановите шаблон Ñборки Android из меню «Проект»."
#: platform/android/export/export_plugin.cpp
+#, fuzzy
msgid ""
-"Unable to overwrite res://android/build/res/*.xml files with project name"
+"Unable to overwrite res://android/build/res/*.xml files with project name."
msgstr ""
"Ðевозможно перезапиÑать файлы res://android/build/res/*.xml Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ проекта"
#: platform/android/export/export_plugin.cpp
-msgid "Could not export project files to gradle project\n"
+#, fuzzy
+msgid "Could not export project files to gradle project."
msgstr "Ðе удалоÑÑŒ ÑкÑпортировать файлы проекта в проект gradle\n"
#: platform/android/export/export_plugin.cpp
@@ -18867,8 +18944,9 @@ msgid "Building Android Project (gradle)"
msgstr "Сборка проекта Android (gradle)"
#: platform/android/export/export_plugin.cpp
+#, fuzzy
msgid ""
-"Building of Android project failed, check output for the error.\n"
+"Building of Android project failed, check output for the error. "
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
"Сборка проекта Android не удалаÑÑŒ, проверьте вывод на ошибки.\n"
@@ -18888,7 +18966,8 @@ msgstr ""
"проекта gradle на наличие выходных данных."
#: platform/android/export/export_plugin.cpp
-msgid "Package not found: %s"
+#, fuzzy
+msgid "Package not found: \"%s\"."
msgstr "Пакет не найден: %s"
#: platform/android/export/export_plugin.cpp
@@ -18896,17 +18975,16 @@ msgid "Creating APK..."
msgstr "Создание APK..."
#: platform/android/export/export_plugin.cpp
-msgid ""
-"Could not find template APK to export:\n"
-"%s"
+#, fuzzy
+msgid "Could not find template APK to export: \"%s\"."
msgstr ""
"Ðе удалоÑÑŒ найти шаблон APK Ð´Ð»Ñ ÑкÑпорта:\n"
"%s"
#: platform/android/export/export_plugin.cpp
+#, fuzzy
msgid ""
-"Missing libraries in the export template for the selected architectures: "
-"%s.\n"
+"Missing libraries in the export template for the selected architectures: %s. "
"Please build a template with all required libraries, or uncheck the missing "
"architectures in the export preset."
msgstr ""
@@ -18919,7 +18997,8 @@ msgid "Adding files..."
msgstr "Добавление файлов..."
#: platform/android/export/export_plugin.cpp
-msgid "Could not export project files"
+#, fuzzy
+msgid "Could not export project files."
msgstr "Ðе удалоÑÑŒ ÑкÑпортировать файлы проекта"
#: platform/android/export/export_plugin.cpp
@@ -19158,6 +19237,17 @@ msgstr "ПользовательÑкий цвет"
msgid "Custom BG Color"
msgstr "ПользовательÑкий цвет"
+#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Prepare Templates"
+msgstr "Управление шаблонами"
+
+#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Export template not found."
+msgstr "ПользовательÑкий релизный шаблон не найден."
+
#: platform/iphone/export/export.cpp
msgid "App Store Team ID not specified - cannot configure the project."
msgstr "App Store Team ID не указан - невозможно наÑтроить проект."
@@ -19179,22 +19269,35 @@ msgid "Run exported HTML in the system's default browser."
msgstr "ЗапуÑтить HTML в ÑиÑтемном браузере по умолчанию."
#: platform/javascript/export/export.cpp
-msgid "Could not open template for export:"
+#, fuzzy
+msgid "Could not open template for export: \"%s\"."
msgstr "Ðе удалоÑÑŒ открыть шаблон Ð´Ð»Ñ ÑкÑпорта:"
#: platform/javascript/export/export.cpp
-msgid "Invalid export template:"
+#, fuzzy
+msgid "Invalid export template: \"%s\"."
msgstr "Ðеверный шаблон ÑкÑпорта:"
#: platform/javascript/export/export.cpp
-msgid "Could not write file:"
+#, fuzzy
+msgid "Could not write file: \"%s\"."
msgstr "Ðе удалоÑÑŒ запиÑать файл:"
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Icon Creation"
+msgstr "Задать отÑтуп"
+
#: platform/javascript/export/export.cpp
-msgid "Could not read file:"
+#, fuzzy
+msgid "Could not read file: \"%s\"."
msgstr "Ðе удалоÑÑŒ прочитать файл:"
#: platform/javascript/export/export.cpp
+msgid "PWA"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
#, fuzzy
msgid "Variant"
msgstr "Ð’Ð°Ñ€Ð¸Ð°Ñ†Ð¸Ñ Ð¾Ñ‚Ñ‚ÐµÐ½ÐºÐ°"
@@ -19269,15 +19372,18 @@ msgid "Icon 512 X 512"
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not read HTML shell:"
+#, fuzzy
+msgid "Could not read HTML shell: \"%s\"."
msgstr "Ðе удалоÑÑŒ прочитать HTML-оболочку:"
#: platform/javascript/export/export.cpp
-msgid "Could not create HTTP server directory:"
+#, fuzzy
+msgid "Could not create HTTP server directory: %s."
msgstr "Ðе удалоÑÑŒ Ñоздать каталог HTTP-Ñервера:"
#: platform/javascript/export/export.cpp
-msgid "Error starting HTTP server:"
+#, fuzzy
+msgid "Error starting HTTP server: %d."
msgstr "Ошибка запуÑка HTTP-Ñервера:"
#: platform/javascript/export/export.cpp
@@ -19569,9 +19675,29 @@ msgid "Apple Team ID"
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open icon file \"%s\"."
+msgstr "Ðе удалоÑÑŒ ÑкÑпортировать файлы проекта"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start xcrun executable."
+msgstr "Ðе удаётÑÑ Ð·Ð°Ð¿ÑƒÑтить подпроцеÑÑ!"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization failed."
+msgstr "ЛокализациÑ"
+
+#: platform/osx/export/export.cpp
+msgid "Notarization request UUID: \"%s\""
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
msgid ""
-"Note: The notarization process generally takes less than an hour. When the "
-"process is completed, you'll receive an email."
+"The notarization process generally takes less than an hour. When the process "
+"is completed, you'll receive an email."
msgstr ""
"Примечание: ПроцеÑÑ Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ Ð¾Ð±Ñ‹Ñ‡Ð½Ð¾ занимает менее чаÑа. Когда процеÑÑ "
"завершитÑÑ, вы получите Ñлектронное пиÑьмо."
@@ -19593,18 +19719,80 @@ msgstr ""
"ÑкÑпортированному приложению (необÑзательно):"
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!"
+msgstr "Временные метки не ÑовмеÑтимы Ñ Ð¿Ð¾Ð´Ð¿Ð¸Ñью ad-hoc и будут отключены!"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+"Ð—Ð°Ñ‰Ð¸Ñ‰Ñ‘Ð½Ð½Ð°Ñ Ñреда Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð½ÐµÑовмеÑтима Ñ Ð¿Ð¾Ð´Ð¿Ð¸Ñью ad-hoc и будет отключена!"
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign failed with error \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign require regex module."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Could not start codesign executable, make sure Xcode command line tools are "
+"installed."
+msgstr ""
+
+#: platform/osx/export/export.cpp platform/windows/export/export.cpp
msgid "No identity found."
msgstr "Identity не найдена."
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Cannot sign file %s."
+msgstr "Ошибка при Ñохранении файла: %s"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Relative symlinks are not supported, exported \"%s\" might be broken!"
+msgstr ""
+"ОтноÑительные ÑимволичеÑкие ÑÑылки не поддерживаютÑÑ Ð² Ñтой ОС, "
+"ÑкÑпортируемый проект может быть повреждён!"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "DMG Creation"
+msgstr "Ðаправление"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start hdiutil executable."
+msgstr "Ðе удаётÑÑ Ð·Ð°Ð¿ÑƒÑтить подпроцеÑÑ!"
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed - file exists."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed."
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid "Creating app bundle"
msgstr "Создание пакета приложениÑ"
#: platform/osx/export/export.cpp
-msgid "Could not find template app to export:"
+#, fuzzy
+msgid "Could not find template app to export: \"%s\"."
msgstr "Ðе удалоÑÑŒ найти шаблон Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð´Ð»Ñ ÑкÑпорта:"
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid export format."
+msgstr "Ðеверный шаблон ÑкÑпорта:"
+
+#: platform/osx/export/export.cpp
msgid ""
"Relative symlinks are not supported on this OS, the exported project might "
"be broken!"
@@ -19613,8 +19801,9 @@ msgstr ""
"ÑкÑпортируемый проект может быть повреждён!"
#: platform/osx/export/export.cpp
+#, fuzzy
msgid ""
-"Requested template binary '%s' not found. It might be missing from your "
+"Requested template binary \"%s\" not found. It might be missing from your "
"template archive."
msgstr ""
"Запрошенный двоичный файл шаблона «%s» не найден. Он может отÑутÑтвовать в "
@@ -19661,6 +19850,16 @@ msgid "Sending archive for notarization"
msgstr "Отправка архива Ð´Ð»Ñ Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ"
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "ZIP Creation"
+msgstr "ПроекциÑ"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open file to read from path \"%s\"."
+msgstr "Ðе удалоÑÑŒ ÑкÑпортировать файлы проекта в проект gradle\n"
+
+#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr "Ðеверный идентификатор пакета:"
@@ -19998,6 +20197,11 @@ msgid "Debug Algorithm"
msgstr "Отладчик"
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to rename temporary file \"%s\"."
+msgstr "Ðевозможно удалить временный файл:"
+
+#: platform/windows/export/export.cpp
msgid "Identity Type"
msgstr ""
@@ -20043,6 +20247,76 @@ msgid "Trademarks"
msgstr ""
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Resources Modification"
+msgstr "Ð’Ñплывающее уведомление"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find rcedit executable at \"%s\"."
+msgstr "Ðе удалоÑÑŒ найти хранилище ключей, невозможно ÑкÑпортировать."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find wine executable at \"%s\"."
+msgstr "Ðе удалоÑÑŒ найти хранилище ключей, невозможно ÑкÑпортировать."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid ""
+"Could not start rcedit executable, configure rcedit path in the Editor "
+"Settings (Export > Windows > Rcedit)."
+msgstr ""
+"ИнÑтрумент rcedit должен быть наÑтроен в ÐаÑтройках редактора (Export > "
+"Windows > Rcedit) Ð´Ð»Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð·Ð½Ð°Ñ‡ÐºÐ° или информационных данных приложениÑ."
+
+#: platform/windows/export/export.cpp
+msgid ""
+"rcedit failed to modify executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find signtool executable at \"%s\"."
+msgstr "Ðе удалоÑÑŒ найти хранилище ключей, невозможно ÑкÑпортировать."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find osslsigncode executable at \"%s\"."
+msgstr "Ðе удалоÑÑŒ найти хранилище ключей, невозможно ÑкÑпортировать."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid identity type."
+msgstr "Ðеверный идентификатор:"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid timestamp server."
+msgstr "ÐедопуÑтимое имÑ."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid ""
+"Could not start signtool executable, configure signtool path in the Editor "
+"Settings (Export > Windows > Signtool)."
+msgstr ""
+"ИнÑтрумент rcedit должен быть наÑтроен в ÐаÑтройках редактора (Export > "
+"Windows > Rcedit) Ð´Ð»Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð·Ð½Ð°Ñ‡ÐºÐ° или информационных данных приложениÑ."
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Signtool failed to sign executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to remove temporary file \"%s\"."
+msgstr "Ðевозможно удалить временный файл:"
+
+#: platform/windows/export/export.cpp
msgid ""
"The rcedit tool must be configured in the Editor Settings (Export > Windows "
"> Rcedit) to change the icon or app information data."
@@ -20063,6 +20337,23 @@ msgid "Invalid product version:"
msgstr "ÐедопуÑÑ‚Ð¸Ð¼Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ Ð¿Ñ€Ð¾Ð´ÑƒÐºÑ‚Ð°:"
#: platform/windows/export/export.cpp
+msgid "Windows executables cannot be >= 4 GiB."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+#, fuzzy
+msgid "Failed to open executable file \"%s\"."
+msgstr "ÐедопуÑтимый иÑполнÑемый файл."
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable file header corrupted."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable \"pck\" section not found."
+msgstr ""
+
+#: platform/windows/export/export.cpp
msgid "Windows"
msgstr "Windows"
@@ -20078,6 +20369,10 @@ msgstr ""
msgid "Wine"
msgstr ""
+#: platform/x11/export/export.cpp
+msgid "32-bit executables cannot have embedded data >= 4 GiB."
+msgstr ""
+
#: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp
#: scene/resources/texture.cpp
msgid "Frames"
@@ -20201,7 +20496,8 @@ msgstr "Поток приоÑтановлен"
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/3d/light.cpp scene/3d/reflection_probe.cpp
-#: scene/3d/visual_instance.cpp scene/resources/material.cpp
+#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp
+#: scene/resources/material.cpp
msgid "Max Distance"
msgstr "МакÑимальное раÑÑтоÑние"
@@ -20988,6 +21284,18 @@ msgstr "Размер Ñчейки"
msgid "Edge Connection Margin"
msgstr "Пограничное Ñоединение"
+#: scene/2d/navigation_2d.cpp
+msgid ""
+"'Navigation2D' node and 'Navigation2D.get_simple_path()' are deprecated and "
+"will be removed in a future version. Use 'Navigation2DServer.map_get_path()' "
+"instead."
+msgstr ""
+
+#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
+#, fuzzy
+msgid "Path Desired Distance"
+msgstr "РаÑÑтоÑние пути U"
+
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
msgid "Target Desired Distance"
msgstr ""
@@ -21047,17 +21355,19 @@ msgstr ""
"ПожалуйÑта, уÑтановите ÑвойÑтво или нариÑуйте многоугольник."
#: scene/2d/navigation_polygon.cpp
-msgid ""
-"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
-"node. It only provides navigation data."
-msgstr ""
-"NavigationPolygonInstance должен быть ребёнком или внуком узла Navigation2D. "
-"Он предоÑтавлÑет только навигационные данные."
-
-#: scene/2d/navigation_polygon.cpp
msgid "Navpoly"
msgstr ""
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Enter Cost"
+msgstr "Внизу поÑередине"
+
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Travel Cost"
+msgstr "ПеремеÑтитÑÑ"
+
#: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp
#: scene/main/canvas_layer.cpp
#, fuzzy
@@ -21805,9 +22115,8 @@ msgid "Custom Sky"
msgstr "ПользовательÑкое небо"
#: scene/3d/baked_lightmap.cpp
-#, fuzzy
msgid "Custom Sky Rotation Degrees"
-msgstr "ПользовательÑкие градуÑÑ‹ Ð²Ñ€Ð°Ñ‰ÐµÐ½Ð¸Ñ Ð½ÐµÐ±Ð°"
+msgstr "ПользовательÑкие ГрадуÑÑ‹ Ð’Ñ€Ð°Ñ‰ÐµÐ½Ð¸Ñ Ðеба"
#: scene/3d/baked_lightmap.cpp scene/3d/ray_cast.cpp
msgid "Custom Color"
@@ -21818,9 +22127,8 @@ msgid "Custom Energy"
msgstr "ПользовательÑÐºÐ°Ñ ÑнергиÑ"
#: scene/3d/baked_lightmap.cpp
-#, fuzzy
msgid "Min Light"
-msgstr "ОтÑтуп вправо"
+msgstr "Минимальный Свет"
#: scene/3d/baked_lightmap.cpp scene/3d/gi_probe.cpp
#, fuzzy
@@ -21837,9 +22145,8 @@ msgid "Light Data"
msgstr "С данными"
#: scene/3d/bone_attachment.cpp scene/3d/physics_body.cpp
-#, fuzzy
msgid "Bone Name"
-msgstr "Ð˜Ð¼Ñ ÐºÐ¾Ñти"
+msgstr "Ð˜Ð¼Ñ ÐšÐ¾Ñти"
#: scene/3d/camera.cpp
msgid "Keep Aspect"
@@ -21855,9 +22162,8 @@ msgid "Doppler Tracking"
msgstr "Трек параметра"
#: scene/3d/camera.cpp
-#, fuzzy
msgid "Projection"
-msgstr "Проект"
+msgstr "ПроекциÑ"
#: scene/3d/camera.cpp
msgid "FOV"
@@ -21869,13 +22175,12 @@ msgid "Frustum Offset"
msgstr "Смещение уÑеченного конуÑа"
#: scene/3d/camera.cpp
-#, fuzzy
msgid "Near"
-msgstr "Ближайшие"
+msgstr "Близко"
#: scene/3d/camera.cpp
msgid "Far"
-msgstr ""
+msgstr "Далеко"
#: scene/3d/camera.cpp scene/3d/collision_polygon.cpp scene/3d/spring_arm.cpp
#: scene/gui/control.cpp scene/resources/default_theme/default_theme.cpp
@@ -21886,18 +22191,16 @@ msgid "Margin"
msgstr "ОтÑтуп"
#: scene/3d/camera.cpp
-#, fuzzy
msgid "Clip To"
-msgstr "Обрезать Ñверху"
+msgstr "Обрезать До"
#: scene/3d/collision_object.cpp scene/3d/soft_body.cpp
msgid "Ray Pickable"
msgstr ""
#: scene/3d/collision_object.cpp
-#, fuzzy
msgid "Capture On Drag"
-msgstr "Захват"
+msgstr "Захват При ПеретаÑкивании"
#: scene/3d/collision_object.cpp
msgid ""
@@ -21973,24 +22276,20 @@ msgid "Box Extents"
msgstr "Гизмо"
#: scene/3d/cpu_particles.cpp scene/resources/particles_material.cpp
-#, fuzzy
msgid "Ring Radius"
-msgstr "МаÑка излучениÑ"
+msgstr "Ð Ð°Ð´Ð¸ÑƒÑ ÐšÐ¾Ð»ÑŒÑ†Ð°"
#: scene/3d/cpu_particles.cpp scene/resources/particles_material.cpp
-#, fuzzy
msgid "Ring Inner Radius"
-msgstr "Изменение внутреннего радиуÑа полукруга"
+msgstr "Внутренний Ð Ð°Ð´Ð¸ÑƒÑ ÐšÐ¾Ð»ÑŒÑ†Ð°"
#: scene/3d/cpu_particles.cpp scene/resources/particles_material.cpp
-#, fuzzy
msgid "Ring Height"
-msgstr "Повернуть вправо"
+msgstr "Ð’Ñ‹Ñота Кольца"
#: scene/3d/cpu_particles.cpp scene/resources/particles_material.cpp
-#, fuzzy
msgid "Ring Axis"
-msgstr "ПредупреждениÑ"
+msgstr "ОÑÑŒ Кольца"
#: scene/3d/cpu_particles.cpp scene/resources/particles_material.cpp
#, fuzzy
@@ -22240,6 +22539,13 @@ msgstr ""
msgid "Transform Normals"
msgstr "Преобразование нормалей"
+#: scene/3d/navigation.cpp
+msgid ""
+"'Navigation' node and 'Navigation.get_simple_path()' are deprecated and will "
+"be removed in a future version. Use 'NavigationServer.map_get_path()' "
+"instead."
+msgstr ""
+
#: scene/3d/navigation.cpp scene/resources/curve.cpp
#, fuzzy
msgid "Up Vector"
@@ -22265,14 +22571,6 @@ msgid ""
"The NavigationAgent can be used only under a Spatial inheriting parent node."
msgstr "NavigationAgent можно иÑпользовать только под узлом Spatial."
-#: scene/3d/navigation_mesh_instance.cpp
-msgid ""
-"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
-"It only provides navigation data."
-msgstr ""
-"NavigationMeshInstance должен быть дочерним или под-дочерним узлом "
-"Navigation. Он предоÑтавлÑет только навигационные данные."
-
#: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp
#, fuzzy
msgid "NavMesh"
@@ -24979,6 +25277,16 @@ msgid "3D Physics"
msgstr "Физика"
#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "2D Navigation"
+msgstr "ÐавигациÑ"
+
+#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "3D Navigation"
+msgstr "ÐавигациÑ"
+
+#: scene/register_scene_types.cpp
msgid "Use hiDPI"
msgstr ""
@@ -26381,7 +26689,7 @@ msgstr "ПропуÑкание Ñвета"
msgid "Refraction"
msgstr "Преломление"
-#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp
+#: scene/resources/material.cpp
msgid "Detail"
msgstr "Деталь"
@@ -26466,7 +26774,12 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
-msgid "Sample Partition Type"
+msgid "Sampling"
+msgstr "МаÑштаб:"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Partition Type"
msgstr "Задать базовый тип вариации"
#: scene/resources/navigation_mesh.cpp
@@ -26483,8 +26796,14 @@ msgid "Source Group Name"
msgstr "Ðазвание группы-иÑточника"
#: scene/resources/navigation_mesh.cpp
-msgid "Agent"
-msgstr ""
+#, fuzzy
+msgid "Cells"
+msgstr "Ячейка"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Agents"
+msgstr "Сегменты"
#: scene/resources/navigation_mesh.cpp
msgid "Max Climb"
@@ -26496,11 +26815,17 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
+msgid "Regions"
+msgstr "Регион"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
msgid "Merge Size"
msgstr "СлиÑние из Сцены"
#: scene/resources/navigation_mesh.cpp
-msgid "Edge"
+#, fuzzy
+msgid "Edges"
msgstr "Край"
#: scene/resources/navigation_mesh.cpp
@@ -26514,6 +26839,11 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
+msgid "Details"
+msgstr "Деталь"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
msgid "Sample Distance"
msgstr "РаÑÑтоÑние образца"
@@ -26531,9 +26861,19 @@ msgid "Ledge Spans"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Filter Walkable Low Height Spans"
+msgid "Walkable Low Height Spans"
msgstr ""
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB"
+msgstr "Ð“ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ñ AABB"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB Offset"
+msgstr "Базовое Ñмещение"
+
#: scene/resources/occluder_shape.cpp
msgid "Spheres"
msgstr "Сферы"
@@ -26581,24 +26921,20 @@ msgid "Point Texture"
msgstr "ТекÑтура точки"
#: scene/resources/particles_material.cpp
-#, fuzzy
msgid "Normal Texture"
-msgstr "ÐžÐ±Ñ‹Ñ‡Ð½Ð°Ñ Ñ‚ÐµÐºÑтура"
+msgstr "Ðормаль ТекÑтура"
#: scene/resources/particles_material.cpp
-#, fuzzy
msgid "Color Texture"
-msgstr "Тема редактора"
+msgstr "ТекÑтура Цвета"
#: scene/resources/particles_material.cpp
-#, fuzzy
msgid "Point Count"
-msgstr "Добавить входной порт"
+msgstr "КоличеÑтво Точек"
#: scene/resources/particles_material.cpp
-#, fuzzy
msgid "Scale Random"
-msgstr "Случайный маÑштаб"
+msgstr "Случайный МаÑштаб"
#: scene/resources/particles_material.cpp
#, fuzzy
@@ -26931,6 +27267,11 @@ msgid "Scenario"
msgstr "Сцена"
#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Navigation Map"
+msgstr "ÐавигациÑ"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
msgid "Direct Space State"
msgstr ""
@@ -26947,6 +27288,26 @@ msgstr "Левый линейный"
msgid "Default Angular Damp"
msgstr ""
+#: scene/resources/world.cpp
+#, fuzzy
+msgid "Default Map Up"
+msgstr "Шаг по умолчанию плавающих чиÑел"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Size"
+msgstr "Размер Ñчейки"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Height"
+msgstr "ТеÑтируемые"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Edge Connection Margin"
+msgstr "Пограничное Ñоединение"
+
#: scene/resources/world_2d.cpp
msgid "Canvas"
msgstr "ХолÑÑ‚"
diff --git a/editor/translations/si.po b/editor/translations/si.po
index 7e8a0475ec..2e5042392f 100644
--- a/editor/translations/si.po
+++ b/editor/translations/si.po
@@ -207,9 +207,10 @@ msgid "Data"
msgstr ""
#: core/io/file_access_network.cpp core/register_core_types.cpp
-#: editor/editor_settings.cpp main/main.cpp
+#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
#: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h
+#: scene/gui/file_dialog.cpp
msgid "Network"
msgstr ""
@@ -363,6 +364,15 @@ msgstr ""
msgid "Max Size (KB)"
msgstr ""
+#: core/os/input.cpp
+#, fuzzy
+msgid "Mouse Mode"
+msgstr "නිවේà·à¶± මà·à¶¯à·’ලිය"
+
+#: core/os/input.cpp
+msgid "Use Accumulated Input"
+msgstr ""
+
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: servers/audio_server.cpp
msgid "Device"
@@ -545,7 +555,8 @@ msgstr ""
#: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
-#: main/main.cpp
+#: main/main.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp
msgid "Run"
msgstr ""
@@ -629,24 +640,23 @@ msgid "Main Run Args"
msgstr ""
#: core/project_settings.cpp
-msgid "Search In File Extensions"
+msgid "Scene Naming"
msgstr ""
#: core/project_settings.cpp
-msgid "Script Templates Search Path"
+msgid "Search In File Extensions"
msgstr ""
-#: core/project_settings.cpp editor/editor_node.cpp
-#: editor/plugins/version_control_editor_plugin.cpp
-msgid "Version Control"
+#: core/project_settings.cpp
+msgid "Script Templates Search Path"
msgstr ""
#: core/project_settings.cpp
-msgid "Autoload On Startup"
+msgid "Version Control Autoload On Startup"
msgstr ""
#: core/project_settings.cpp
-msgid "Plugin Name"
+msgid "Version Control Plugin Name"
msgstr ""
#: core/project_settings.cpp scene/2d/collision_object_2d.cpp
@@ -755,7 +765,8 @@ msgid "Quality"
msgstr ""
#: core/project_settings.cpp scene/gui/file_dialog.cpp
-#: scene/main/scene_tree.cpp servers/visual_server.cpp
+#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp
+#: servers/visual_server.cpp
msgid "Filters"
msgstr ""
@@ -2173,7 +2184,7 @@ msgid "Open"
msgstr ""
#: editor/dependency_editor.cpp
-msgid "Owners Of:"
+msgid "Owners of: %s (Total: %d)"
msgstr ""
#: editor/dependency_editor.cpp
@@ -2465,7 +2476,7 @@ msgid "Bus Options"
msgstr "à·à·Šâ€à¶»à·’à¶­:"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/scene_tree_dock.cpp
+#: editor/project_export.cpp editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr ""
@@ -2721,6 +2732,22 @@ msgid "Choose"
msgstr ""
#: editor/editor_export.cpp
+msgid "Project export for platform:"
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Completed with errors."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Completed successfully."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Failed."
+msgstr ""
+
+#: editor/editor_export.cpp
msgid "Storing File:"
msgstr ""
@@ -2733,6 +2760,26 @@ msgid "Packing"
msgstr ""
#: editor/editor_export.cpp
+msgid "Save PCK"
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Cannot create file \"%s\"."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Failed to export project files."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Can't open file to read from path \"%s\"."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Save ZIP"
+msgstr ""
+
+#: editor/editor_export.cpp
msgid ""
"Target platform requires 'ETC' texture compression for GLES2. Enable 'Import "
"Etc' in Project Settings."
@@ -2836,8 +2883,25 @@ msgstr ""
msgid "Custom release template not found."
msgstr ""
+#: editor/editor_export.cpp
+msgid "Prepare Template"
+msgstr ""
+
+#: editor/editor_export.cpp platform/osx/export/export.cpp
+msgid "The given export path doesn't exist."
+msgstr ""
+
#: editor/editor_export.cpp platform/javascript/export/export.cpp
-msgid "Template file not found:"
+msgid "Template file not found: \"%s\"."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Failed to copy export template."
+msgstr ""
+
+#: editor/editor_export.cpp platform/windows/export/export.cpp
+#: platform/x11/export/export.cpp
+msgid "PCK Embedding"
msgstr ""
#: editor/editor_export.cpp
@@ -3009,9 +3073,9 @@ msgid "Import"
msgstr ""
#: editor/editor_feature_profile.cpp editor/project_export.cpp
-#: platform/android/export/export.cpp platform/javascript/export/export.cpp
-#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
-#: platform/windows/export/export.cpp
+#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#: platform/uwp/export/export.cpp platform/windows/export/export.cpp
msgid "Export"
msgstr ""
@@ -4095,14 +4159,6 @@ msgid ""
"Unable to write to file '%s', file in use, locked or lacking permissions."
msgstr ""
-#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
-msgid "Scene"
-msgstr ""
-
-#: editor/editor_node.cpp
-msgid "Scene Naming"
-msgstr ""
-
#: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp
#: servers/arvr/arvr_interface.cpp
msgid "Interface"
@@ -4221,6 +4277,10 @@ msgid "Default Color Picker Mode"
msgstr ""
#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
+msgid "Version Control"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
msgid "Username"
msgstr ""
@@ -4248,6 +4308,10 @@ msgstr ""
msgid "Add a new scene."
msgstr ""
+#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
+msgid "Scene"
+msgstr ""
+
#: editor/editor_node.cpp
msgid "Go to previously opened scene."
msgstr ""
@@ -4977,6 +5041,11 @@ msgid ""
"as runnable."
msgstr ""
+#: editor/editor_run_native.cpp
+#, fuzzy
+msgid "Project Run"
+msgstr "මෙම ලුහුබදින්න෠ඉවත් කරන්න."
+
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
msgstr ""
@@ -5236,7 +5305,9 @@ msgid "Draw Spaces"
msgstr ""
#: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp
-#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp
+#: scene/main/scene_tree.cpp scene/resources/world.cpp
+#: scene/resources/world_2d.cpp
#, fuzzy
msgid "Navigation"
msgstr "නිවේà·à¶± මà·à¶¯à·’ලිය"
@@ -6639,7 +6710,7 @@ msgstr ""
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp
-#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp
+#: scene/gui/control.cpp
#, fuzzy
msgid "Filter"
msgstr "නිවේà·à¶± මà·à¶¯à·’ලිය"
@@ -6918,6 +6989,18 @@ msgid "Saving..."
msgstr ""
#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used as a normal map in 3D. Enabling red-green "
+"texture compression to reduce memory usage (blue channel is discarded)."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap "
+"generation and VRAM texture compression."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
msgid "2D, Detect 3D"
msgstr ""
@@ -7589,11 +7672,20 @@ msgid "New Anim"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+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 "Rename Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Delete Animation?"
msgstr ""
@@ -7611,11 +7703,6 @@ 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 "Duplicate Animation"
msgstr ""
@@ -7758,10 +7845,6 @@ msgid "Pin AnimationPlayer"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Create New Animation"
-msgstr ""
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Name:"
msgstr ""
@@ -9832,6 +9915,7 @@ msgid "Points"
msgstr ""
#: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp
+#: scene/resources/navigation_mesh.cpp
msgid "Polygons"
msgstr ""
@@ -11189,7 +11273,7 @@ msgid "Invalid geometry, can't replace by mesh."
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
-msgid "Convert to Mesh2D"
+msgid "Convert to MeshInstance2D"
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
@@ -12163,8 +12247,7 @@ msgid "Select the previous shape, subtile, or Tile."
msgstr ""
#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp
-#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp
-#: scene/resources/texture.cpp
+#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp
#, fuzzy
msgid "Region"
msgstr "නිවේà·à¶± මà·à¶¯à·’ලිය"
@@ -13614,31 +13697,10 @@ 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 "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 "Export Path"
msgstr ""
@@ -13773,6 +13835,10 @@ msgid "Export templates for this platform are missing:"
msgstr ""
#: editor/project_export.cpp
+msgid "Project Export"
+msgstr ""
+
+#: editor/project_export.cpp
msgid "Manage Export Templates"
msgstr ""
@@ -16045,7 +16111,7 @@ msgstr ""
#: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp
#: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp
-#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp
+#: scene/3d/collision_polygon.cpp
msgid "Polygon"
msgstr ""
@@ -16619,7 +16685,6 @@ msgid "Use In Baked Light"
msgstr ""
#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
-#: scene/resources/navigation_mesh.cpp
msgid "Cell"
msgstr ""
@@ -16648,6 +16713,19 @@ msgstr "යතුරු මක෠දමන්න"
msgid "Mask"
msgstr ""
+#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
+#, fuzzy
+msgid "Bake Navigation"
+msgstr "නිවේà·à¶± මà·à¶¯à·’ලිය"
+
+#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp
+#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp
+#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp
+#: scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Navigation Layers"
+msgstr "නිවේà·à¶± මà·à¶¯à·’ලිය"
+
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Plane"
msgstr ""
@@ -18112,10 +18190,6 @@ 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."
@@ -18219,12 +18293,16 @@ msgstr ""
msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version."
msgstr ""
+#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Code Signing"
+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."
+"'apksigner' could not be found. Please check that the command is available "
+"in the Android SDK build-tools directory. The resulting %s is unsigned."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18240,6 +18318,10 @@ msgid "Could not find keystore, unable to export."
msgstr ""
#: platform/android/export/export_plugin.cpp
+msgid "Could not start apksigner executable."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
@@ -18268,7 +18350,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Unsupported export format!\n"
+msgid "Unsupported export format!"
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18279,19 +18361,17 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Android build version mismatch:\n"
-" Template installed: %s\n"
-" Godot Version: %s\n"
+"Android build version mismatch: Template installed: %s, Godot version: %s. "
"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"
+"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"
+msgid "Could not export project files to gradle project."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18304,7 +18384,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Building of Android project failed, check output for the error.\n"
+"Building of Android project failed, check output for the error. "
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
@@ -18319,7 +18399,7 @@ msgid ""
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Package not found: %s"
+msgid "Package not found: \"%s\"."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18327,15 +18407,12 @@ msgid "Creating APK..."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid ""
-"Could not find template APK to export:\n"
-"%s"
+msgid "Could not find template APK to export: \"%s\"."
msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Missing libraries in the export template for the selected architectures: "
-"%s.\n"
+"Missing libraries in the export template for the selected architectures: %s. "
"Please build a template with all required libraries, or uncheck the missing "
"architectures in the export preset."
msgstr ""
@@ -18345,7 +18422,7 @@ msgid "Adding files..."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Could not export project files"
+msgid "Could not export project files."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18575,6 +18652,15 @@ msgstr "යතුරු පිටපත් කරන්න"
msgid "Custom BG Color"
msgstr "යතුරු පිටපත් කරන්න"
+#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
+#: platform/osx/export/export.cpp
+msgid "Prepare Templates"
+msgstr ""
+
+#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
+msgid "Export template not found."
+msgstr ""
+
#: platform/iphone/export/export.cpp
msgid "App Store Team ID not specified - cannot configure the project."
msgstr ""
@@ -18596,19 +18682,29 @@ msgid "Run exported HTML in the system's default browser."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not open template for export:"
+msgid "Could not open template for export: \"%s\"."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Invalid export template:"
+#, fuzzy
+msgid "Invalid export template: \"%s\"."
+msgstr "%s වර්ගය %s මූල වර්ගය සදහ෠වà·à¶»à¶¯à·’ සුචියක්"
+
+#: platform/javascript/export/export.cpp
+msgid "Could not write file: \"%s\"."
msgstr ""
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Icon Creation"
+msgstr "à·à·Šâ€à¶»à·’à¶­:"
+
#: platform/javascript/export/export.cpp
-msgid "Could not write file:"
+msgid "Could not read file: \"%s\"."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not read file:"
+msgid "PWA"
msgstr ""
#: platform/javascript/export/export.cpp
@@ -18684,15 +18780,15 @@ msgid "Icon 512 X 512"
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not read HTML shell:"
+msgid "Could not read HTML shell: \"%s\"."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not create HTTP server directory:"
+msgid "Could not create HTTP server directory: %s."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Error starting HTTP server:"
+msgid "Error starting HTTP server: %d."
msgstr ""
#: platform/javascript/export/export.cpp
@@ -18964,9 +19060,26 @@ msgid "Apple Team ID"
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Could not open icon file \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Could not start xcrun executable."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization failed."
+msgstr "නිවේà·à¶± මà·à¶¯à·’ලිය"
+
+#: platform/osx/export/export.cpp
+msgid "Notarization request UUID: \"%s\""
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid ""
-"Note: The notarization process generally takes less than an hour. When the "
-"process is completed, you'll receive an email."
+"The notarization process generally takes less than an hour. When the process "
+"is completed, you'll receive an email."
msgstr ""
#: platform/osx/export/export.cpp
@@ -18982,18 +19095,71 @@ msgid ""
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign failed with error \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign require regex module."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Could not start codesign executable, make sure Xcode command line tools are "
+"installed."
+msgstr ""
+
+#: platform/osx/export/export.cpp platform/windows/export/export.cpp
msgid "No identity found."
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Cannot sign file %s."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Relative symlinks are not supported, exported \"%s\" might be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "DMG Creation"
+msgstr "à·à·Šâ€à¶»à·’à¶­:"
+
+#: platform/osx/export/export.cpp
+msgid "Could not start hdiutil executable."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed - file exists."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed."
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid "Creating app bundle"
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Could not find template app to export:"
+msgid "Could not find template app to export: \"%s\"."
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid export format."
+msgstr "Anim පරිවර්තනය වෙනස් කරන්න"
+
+#: platform/osx/export/export.cpp
msgid ""
"Relative symlinks are not supported on this OS, the exported project might "
"be broken!"
@@ -19001,7 +19167,7 @@ msgstr ""
#: platform/osx/export/export.cpp
msgid ""
-"Requested template binary '%s' not found. It might be missing from your "
+"Requested template binary \"%s\" not found. It might be missing from your "
"template archive."
msgstr ""
@@ -19042,6 +19208,15 @@ msgid "Sending archive for notarization"
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "ZIP Creation"
+msgstr "à·à·Šâ€à¶»à·’à¶­:"
+
+#: platform/osx/export/export.cpp
+msgid "Could not open file to read from path \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr ""
@@ -19341,6 +19516,10 @@ msgid "Debug Algorithm"
msgstr ""
#: platform/windows/export/export.cpp
+msgid "Failed to rename temporary file \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
msgid "Identity Type"
msgstr ""
@@ -19381,6 +19560,63 @@ msgid "Trademarks"
msgstr ""
#: platform/windows/export/export.cpp
+msgid "Resources Modification"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find rcedit executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find wine executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start rcedit executable, configure rcedit path in the Editor "
+"Settings (Export > Windows > Rcedit)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"rcedit failed to modify executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find signtool executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find osslsigncode executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid identity type."
+msgstr "'%s' ගොඩනà·à¶œà·“මට à·€à·à¶»à¶¯à·’ තර්ක"
+
+#: platform/windows/export/export.cpp
+msgid "Invalid timestamp server."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start signtool executable, configure signtool path in the Editor "
+"Settings (Export > Windows > Signtool)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Signtool failed to sign executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Failed to remove temporary file \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
msgid ""
"The rcedit tool must be configured in the Editor Settings (Export > Windows "
"> Rcedit) to change the icon or app information data."
@@ -19399,6 +19635,22 @@ msgid "Invalid product version:"
msgstr ""
#: platform/windows/export/export.cpp
+msgid "Windows executables cannot be >= 4 GiB."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Failed to open executable file \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable file header corrupted."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable \"pck\" section not found."
+msgstr ""
+
+#: platform/windows/export/export.cpp
msgid "Windows"
msgstr ""
@@ -19414,6 +19666,10 @@ msgstr ""
msgid "Wine"
msgstr ""
+#: platform/x11/export/export.cpp
+msgid "32-bit executables cannot have embedded data >= 4 GiB."
+msgstr ""
+
#: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp
#: scene/resources/texture.cpp
msgid "Frames"
@@ -19525,7 +19781,8 @@ msgstr ""
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/3d/light.cpp scene/3d/reflection_probe.cpp
-#: scene/3d/visual_instance.cpp scene/resources/material.cpp
+#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp
+#: scene/resources/material.cpp
msgid "Max Distance"
msgstr ""
@@ -20250,6 +20507,17 @@ msgstr ""
msgid "Edge Connection Margin"
msgstr "à·à·Šâ€à¶»à·’à¶­:"
+#: scene/2d/navigation_2d.cpp
+msgid ""
+"'Navigation2D' node and 'Navigation2D.get_simple_path()' are deprecated and "
+"will be removed in a future version. Use 'Navigation2DServer.map_get_path()' "
+"instead."
+msgstr ""
+
+#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
+msgid "Path Desired Distance"
+msgstr ""
+
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
msgid "Target Desired Distance"
msgstr ""
@@ -20301,13 +20569,16 @@ msgid ""
msgstr ""
#: scene/2d/navigation_polygon.cpp
-msgid ""
-"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
-"node. It only provides navigation data."
+msgid "Navpoly"
msgstr ""
-#: scene/2d/navigation_polygon.cpp
-msgid "Navpoly"
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Enter Cost"
+msgstr "යතුරු මක෠දමන්න"
+
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+msgid "Travel Cost"
msgstr ""
#: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp
@@ -21378,6 +21649,13 @@ msgstr ""
msgid "Transform Normals"
msgstr "3D රූපà·à¶±à·Šà¶­à¶»à¶«à¶º ලුහුබදින්න"
+#: scene/3d/navigation.cpp
+msgid ""
+"'Navigation' node and 'Navigation.get_simple_path()' are deprecated and will "
+"be removed in a future version. Use 'NavigationServer.map_get_path()' "
+"instead."
+msgstr ""
+
#: scene/3d/navigation.cpp scene/resources/curve.cpp
msgid "Up Vector"
msgstr ""
@@ -21399,12 +21677,6 @@ msgid ""
"The NavigationAgent can be used only under a Spatial inheriting parent node."
msgstr ""
-#: scene/3d/navigation_mesh_instance.cpp
-msgid ""
-"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
-"It only provides navigation data."
-msgstr ""
-
#: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp
msgid "NavMesh"
msgstr ""
@@ -23863,6 +24135,16 @@ msgid "3D Physics"
msgstr ""
#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "2D Navigation"
+msgstr "නිවේà·à¶± මà·à¶¯à·’ලිය"
+
+#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "3D Navigation"
+msgstr "නිවේà·à¶± මà·à¶¯à·’ලිය"
+
+#: scene/register_scene_types.cpp
msgid "Use hiDPI"
msgstr ""
@@ -25181,7 +25463,7 @@ msgstr "Anim සංක්රමණය වෙනස් කරන්න"
msgid "Refraction"
msgstr ""
-#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp
+#: scene/resources/material.cpp
msgid "Detail"
msgstr ""
@@ -25260,10 +25542,15 @@ msgid "Visible Instance Count"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Sample Partition Type"
+msgid "Sampling"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Partition Type"
+msgstr "à·à·Šâ€à¶»à·’à¶­:"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Parsed Geometry Type"
msgstr ""
@@ -25276,7 +25563,11 @@ msgid "Source Group Name"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Agent"
+msgid "Cells"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
+msgid "Agents"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -25288,11 +25579,16 @@ msgid "Max Slope"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Regions"
+msgstr "නිවේà·à¶± මà·à¶¯à·’ලිය"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Merge Size"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Edge"
+msgid "Edges"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -25305,6 +25601,10 @@ msgid "Verts Per Poly"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+msgid "Details"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
msgid "Sample Distance"
msgstr ""
@@ -25321,7 +25621,15 @@ msgid "Ledge Spans"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Filter Walkable Low Height Spans"
+msgid "Walkable Low Height Spans"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
+msgid "Baking AABB"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
+msgid "Baking AABB Offset"
msgstr ""
#: scene/resources/occluder_shape.cpp
@@ -25701,6 +26009,11 @@ msgid "Scenario"
msgstr ""
#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Navigation Map"
+msgstr "නිවේà·à¶± මà·à¶¯à·’ලිය"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
msgid "Direct Space State"
msgstr ""
@@ -25717,6 +26030,26 @@ msgstr "රේඛීය"
msgid "Default Angular Damp"
msgstr ""
+#: scene/resources/world.cpp
+#, fuzzy
+msgid "Default Map Up"
+msgstr "වටිනà·à¶šà¶¸:"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Size"
+msgstr "වටිනà·à¶šà¶¸:"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Height"
+msgstr "වටිනà·à¶šà¶¸:"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Edge Connection Margin"
+msgstr "à·à·Šâ€à¶»à·’à¶­:"
+
#: scene/resources/world_2d.cpp
msgid "Canvas"
msgstr ""
diff --git a/editor/translations/sk.po b/editor/translations/sk.po
index f1c71845f8..9e18f67b73 100644
--- a/editor/translations/sk.po
+++ b/editor/translations/sk.po
@@ -230,9 +230,10 @@ msgid "Data"
msgstr ""
#: core/io/file_access_network.cpp core/register_core_types.cpp
-#: editor/editor_settings.cpp main/main.cpp
+#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
#: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h
+#: scene/gui/file_dialog.cpp
#, fuzzy
msgid "Network"
msgstr "Vytvoriť adresár"
@@ -392,6 +393,16 @@ msgstr ""
msgid "Max Size (KB)"
msgstr ""
+#: core/os/input.cpp
+#, fuzzy
+msgid "Mouse Mode"
+msgstr "Move Mode"
+
+#: core/os/input.cpp
+#, fuzzy
+msgid "Use Accumulated Input"
+msgstr "Zmazať Vstup"
+
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: servers/audio_server.cpp
msgid "Device"
@@ -592,7 +603,8 @@ msgstr "Popis"
#: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
-#: main/main.cpp
+#: main/main.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp
msgid "Run"
msgstr ""
@@ -681,6 +693,11 @@ msgid "Main Run Args"
msgstr ""
#: core/project_settings.cpp
+#, fuzzy
+msgid "Scene Naming"
+msgstr "Cesta Scény:"
+
+#: core/project_settings.cpp
msgid "Search In File Extensions"
msgstr ""
@@ -688,19 +705,15 @@ msgstr ""
msgid "Script Templates Search Path"
msgstr ""
-#: core/project_settings.cpp editor/editor_node.cpp
-#: editor/plugins/version_control_editor_plugin.cpp
-msgid "Version Control"
-msgstr "Kontrola Verzie"
-
#: core/project_settings.cpp
-msgid "Autoload On Startup"
-msgstr ""
+#, fuzzy
+msgid "Version Control Autoload On Startup"
+msgstr "Kontrola Verzie"
#: core/project_settings.cpp
#, fuzzy
-msgid "Plugin Name"
-msgstr "Meno Pluginu:"
+msgid "Version Control Plugin Name"
+msgstr "Kontrola Verzie"
#: core/project_settings.cpp scene/2d/collision_object_2d.cpp
#: scene/3d/collision_object.cpp scene/gui/control.cpp
@@ -818,7 +831,8 @@ msgid "Quality"
msgstr ""
#: core/project_settings.cpp scene/gui/file_dialog.cpp
-#: scene/main/scene_tree.cpp servers/visual_server.cpp
+#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp
+#: servers/visual_server.cpp
#, fuzzy
msgid "Filters"
msgstr "Filtre:"
@@ -2257,8 +2271,8 @@ msgid "Open"
msgstr "Otvoriť"
#: editor/dependency_editor.cpp
-msgid "Owners Of:"
-msgstr "Majitelia:"
+msgid "Owners of: %s (Total: %d)"
+msgstr ""
#: editor/dependency_editor.cpp
#, fuzzy
@@ -2567,7 +2581,7 @@ msgid "Bus Options"
msgstr "Možnosti pre Bus"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/scene_tree_dock.cpp
+#: editor/project_export.cpp editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "Duplikovať"
@@ -2826,6 +2840,24 @@ msgid "Choose"
msgstr "Vyberte"
#: editor/editor_export.cpp
+msgid "Project export for platform:"
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Completed with errors."
+msgstr ""
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Completed successfully."
+msgstr "Balík bol úspešne nainštalovaný!"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed."
+msgstr "Zlihalo:"
+
+#: editor/editor_export.cpp
msgid "Storing File:"
msgstr "Ukladanie súboru:"
@@ -2838,6 +2870,31 @@ msgid "Packing"
msgstr "Zabalovanie"
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save PCK"
+msgstr "Uložiť Ako"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Cannot create file \"%s\"."
+msgstr "PrieÄinok sa nepodarilo vytvoriÅ¥."
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to export project files."
+msgstr "Popis:"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Can't open file to read from path \"%s\"."
+msgstr "Nie je možné otvoriť súbor pre písanie:"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save ZIP"
+msgstr "Uložiť Ako"
+
+#: editor/editor_export.cpp
msgid ""
"Target platform requires 'ETC' texture compression for GLES2. Enable 'Import "
"Etc' in Project Settings."
@@ -2959,11 +3016,31 @@ msgstr "Vlastná debug šablóna sa nenašla."
msgid "Custom release template not found."
msgstr "Vlastná release šablóna sa nenašla."
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Prepare Template"
+msgstr "Spravovať Šablóny"
+
+#: editor/editor_export.cpp platform/osx/export/export.cpp
+msgid "The given export path doesn't exist."
+msgstr ""
+
#: editor/editor_export.cpp platform/javascript/export/export.cpp
-msgid "Template file not found:"
+#, fuzzy
+msgid "Template file not found: \"%s\"."
msgstr "Súbor Šablóny sa nenašiel:"
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to copy export template."
+msgstr "Nedá sa otvoriť export templates zip."
+
+#: editor/editor_export.cpp platform/windows/export/export.cpp
+#: platform/x11/export/export.cpp
+msgid "PCK Embedding"
+msgstr ""
+
+#: editor/editor_export.cpp
msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB."
msgstr "Pri 32-bitovom exporte nemôže byÅ¥ vložená PCK väÄÅ¡ia ako 4 GiB."
@@ -3139,9 +3216,9 @@ msgid "Import"
msgstr "Import"
#: editor/editor_feature_profile.cpp editor/project_export.cpp
-#: platform/android/export/export.cpp platform/javascript/export/export.cpp
-#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
-#: platform/windows/export/export.cpp
+#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#: platform/uwp/export/export.cpp platform/windows/export/export.cpp
msgid "Export"
msgstr "Export"
@@ -4300,15 +4377,6 @@ msgid ""
"Unable to write to file '%s', file in use, locked or lacking permissions."
msgstr ""
-#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
-msgid "Scene"
-msgstr "Scéna"
-
-#: editor/editor_node.cpp
-#, fuzzy
-msgid "Scene Naming"
-msgstr "Cesta Scény:"
-
#: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp
#: servers/arvr/arvr_interface.cpp
msgid "Interface"
@@ -4436,6 +4504,10 @@ msgid "Default Color Picker Mode"
msgstr ""
#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
+msgid "Version Control"
+msgstr "Kontrola Verzie"
+
+#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
#, fuzzy
msgid "Username"
msgstr "Premenovať"
@@ -4464,6 +4536,10 @@ msgstr "Prepnúť režim bez rozptyľovania."
msgid "Add a new scene."
msgstr "Pridať novú scénu."
+#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
+msgid "Scene"
+msgstr "Scéna"
+
#: editor/editor_node.cpp
msgid "Go to previously opened scene."
msgstr "ÃsÅ¥ do naposledy otvorenej scény."
@@ -5258,6 +5334,11 @@ msgstr ""
"Prosím pridajte spustiteľný \"preset\" v export menu alebo definujte "
"existujúci \"preset\" ako spustiteľný."
+#: editor/editor_run_native.cpp
+#, fuzzy
+msgid "Project Run"
+msgstr "Projekt"
+
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
msgstr "Napíšte svoju logiku v metóde _run()."
@@ -5534,7 +5615,9 @@ msgid "Draw Spaces"
msgstr "Volania"
#: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp
-#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp
+#: scene/main/scene_tree.cpp scene/resources/world.cpp
+#: scene/resources/world_2d.cpp
#, fuzzy
msgid "Navigation"
msgstr "Signály:"
@@ -7028,7 +7111,7 @@ msgstr ""
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp
-#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp
+#: scene/gui/control.cpp
#, fuzzy
msgid "Filter"
msgstr "Filtre:"
@@ -7324,6 +7407,18 @@ msgid "Saving..."
msgstr "Ukladám..."
#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used as a normal map in 3D. Enabling red-green "
+"texture compression to reduce memory usage (blue channel is discarded)."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap "
+"generation and VRAM texture compression."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
msgid "2D, Detect 3D"
msgstr ""
@@ -8012,11 +8107,20 @@ msgid "New Anim"
msgstr "Nová Animácia"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+msgstr "Vytvoriť Novú Animáciu"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Change Animation Name:"
msgstr "Zmeniť Meno Animácie:"
#: editor/plugins/animation_player_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Rename Animation"
+msgstr "Premenovať Animáciu"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Delete Animation?"
msgstr "Naozaj chcete vymazať Animáciu?"
@@ -8034,11 +8138,6 @@ msgid "Animation name already exists!"
msgstr "Toto meno Animácie už existuje!"
#: editor/plugins/animation_player_editor_plugin.cpp
-#: editor/plugins/sprite_frames_editor_plugin.cpp
-msgid "Rename Animation"
-msgstr "Premenovať Animáciu"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate Animation"
msgstr "Duplikovať Animáciu"
@@ -8181,10 +8280,6 @@ msgid "Pin AnimationPlayer"
msgstr "Pripnúť PrehrávaÄ Animácie"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Create New Animation"
-msgstr "Vytvoriť Novú Animáciu"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Name:"
msgstr "Meno Animácie:"
@@ -10323,6 +10418,7 @@ msgid "Points"
msgstr "Všetky vybrané"
#: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp
+#: scene/resources/navigation_mesh.cpp
#, fuzzy
msgid "Polygons"
msgstr "Signály:"
@@ -11740,8 +11836,9 @@ msgid "Invalid geometry, can't replace by mesh."
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
-msgid "Convert to Mesh2D"
-msgstr ""
+#, fuzzy
+msgid "Convert to MeshInstance2D"
+msgstr "Všetky vybrané"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Invalid geometry, can't create polygon."
@@ -12796,8 +12893,7 @@ msgid "Select the previous shape, subtile, or Tile."
msgstr ""
#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp
-#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp
-#: scene/resources/texture.cpp
+#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp
#, fuzzy
msgid "Region"
msgstr "Režim Interpolácie"
@@ -14321,31 +14417,10 @@ 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 "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 "Export Path"
msgstr ""
@@ -14486,6 +14561,11 @@ msgid "Export templates for this platform are missing:"
msgstr ""
#: editor/project_export.cpp
+#, fuzzy
+msgid "Project Export"
+msgstr "Zakladatelia Projektu"
+
+#: editor/project_export.cpp
msgid "Manage Export Templates"
msgstr ""
@@ -16847,7 +16927,7 @@ msgstr ""
#: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp
#: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp
-#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp
+#: scene/3d/collision_polygon.cpp
#, fuzzy
msgid "Polygon"
msgstr "Signály:"
@@ -17459,7 +17539,6 @@ msgid "Use In Baked Light"
msgstr "Bake Lightmaps"
#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
-#: scene/resources/navigation_mesh.cpp
msgid "Cell"
msgstr ""
@@ -17489,6 +17568,19 @@ msgstr "V Strede"
msgid "Mask"
msgstr ""
+#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
+#, fuzzy
+msgid "Bake Navigation"
+msgstr "Signály:"
+
+#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp
+#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp
+#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp
+#: scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Navigation Layers"
+msgstr "Signály:"
+
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Plane"
msgstr ""
@@ -19047,10 +19139,6 @@ msgid "Could not execute on device."
msgstr "PrieÄinok sa nepodarilo vytvoriÅ¥."
#: 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."
@@ -19155,12 +19243,16 @@ msgstr ""
msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version."
msgstr ""
+#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Code Signing"
+msgstr "Signál"
+
#: 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."
+"'apksigner' could not be found. Please check that the command is available "
+"in the Android SDK build-tools directory. The resulting %s is unsigned."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -19179,6 +19271,11 @@ msgid "Could not find keystore, unable to export."
msgstr ""
#: platform/android/export/export_plugin.cpp
+#, fuzzy
+msgid "Could not start apksigner executable."
+msgstr "Subprocess sa nedá spustiť!"
+
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
@@ -19208,7 +19305,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Unsupported export format!\n"
+msgid "Unsupported export format!"
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -19219,20 +19316,19 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Android build version mismatch:\n"
-" Template installed: %s\n"
-" Godot Version: %s\n"
+"Android build version mismatch: Template installed: %s, Godot version: %s. "
"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"
+"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 ""
+#, fuzzy
+msgid "Could not export project files to gradle project."
+msgstr "Popis:"
#: platform/android/export/export_plugin.cpp
#, fuzzy
@@ -19245,7 +19341,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Building of Android project failed, check output for the error.\n"
+"Building of Android project failed, check output for the error. "
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
@@ -19261,7 +19357,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
#, fuzzy
-msgid "Package not found: %s"
+msgid "Package not found: \"%s\"."
msgstr "BalíÄek Obsahu:"
#: platform/android/export/export_plugin.cpp
@@ -19270,15 +19366,13 @@ msgid "Creating APK..."
msgstr "Pripájanie..."
#: platform/android/export/export_plugin.cpp
-msgid ""
-"Could not find template APK to export:\n"
-"%s"
-msgstr ""
+#, fuzzy
+msgid "Could not find template APK to export: \"%s\"."
+msgstr "Subprocess sa nedá spustiť!"
#: platform/android/export/export_plugin.cpp
msgid ""
-"Missing libraries in the export template for the selected architectures: "
-"%s.\n"
+"Missing libraries in the export template for the selected architectures: %s. "
"Please build a template with all required libraries, or uncheck the missing "
"architectures in the export preset."
msgstr ""
@@ -19290,7 +19384,7 @@ msgstr "Pridávanie %s..."
#: platform/android/export/export_plugin.cpp
#, fuzzy
-msgid "Could not export project files"
+msgid "Could not export project files."
msgstr "Popis:"
#: platform/android/export/export_plugin.cpp
@@ -19532,6 +19626,17 @@ msgstr "Vložiť"
msgid "Custom BG Color"
msgstr "Vložiť"
+#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Prepare Templates"
+msgstr "Spravovať Šablóny"
+
+#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Export template not found."
+msgstr "Vlastná release šablóna sa nenašla."
+
#: platform/iphone/export/export.cpp
msgid "App Store Team ID not specified - cannot configure the project."
msgstr ""
@@ -19554,24 +19659,35 @@ msgid "Run exported HTML in the system's default browser."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not open template for export:"
-msgstr ""
+#, fuzzy
+msgid "Could not open template for export: \"%s\"."
+msgstr "PrieÄinok sa nepodarilo vytvoriÅ¥."
#: platform/javascript/export/export.cpp
-msgid "Invalid export template:"
-msgstr ""
+#, fuzzy
+msgid "Invalid export template: \"%s\"."
+msgstr "Nesprávna veľkosť písma."
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not write file:"
+msgid "Could not write file: \"%s\"."
msgstr "Popis:"
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Icon Creation"
+msgstr "Obsah:"
+
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not read file:"
+msgid "Could not read file: \"%s\"."
msgstr "Popis:"
#: platform/javascript/export/export.cpp
+msgid "PWA"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
#, fuzzy
msgid "Variant"
msgstr "Popis:"
@@ -19647,17 +19763,17 @@ msgstr ""
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not read HTML shell:"
+msgid "Could not read HTML shell: \"%s\"."
msgstr "Popis:"
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not create HTTP server directory:"
+msgid "Could not create HTTP server directory: %s."
msgstr "PrieÄinok sa nepodarilo vytvoriÅ¥."
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Error starting HTTP server:"
+msgid "Error starting HTTP server: %d."
msgstr "Error pri ukladaní TileSet-u!"
#: platform/javascript/export/export.cpp
@@ -19954,9 +20070,28 @@ msgid "Apple Team ID"
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open icon file \"%s\"."
+msgstr "Popis:"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start xcrun executable."
+msgstr "Subprocess sa nedá spustiť!"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization failed."
+msgstr "Signály:"
+
+#: platform/osx/export/export.cpp
+msgid "Notarization request UUID: \"%s\""
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid ""
-"Note: The notarization process generally takes less than an hour. When the "
-"process is completed, you'll receive an email."
+"The notarization process generally takes less than an hour. When the process "
+"is completed, you'll receive an email."
msgstr ""
#: platform/osx/export/export.cpp
@@ -19972,18 +20107,74 @@ msgid ""
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign failed with error \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign require regex module."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Could not start codesign executable, make sure Xcode command line tools are "
+"installed."
+msgstr ""
+
+#: platform/osx/export/export.cpp platform/windows/export/export.cpp
#, fuzzy
msgid "No identity found."
msgstr "Nenašli sa žiadne \"sub-resources\"."
#: platform/osx/export/export.cpp
#, fuzzy
+msgid "Cannot sign file %s."
+msgstr "Chyba uloženia súbora: %s"
+
+#: platform/osx/export/export.cpp
+msgid "Relative symlinks are not supported, exported \"%s\" might be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "DMG Creation"
+msgstr "Smery"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start hdiutil executable."
+msgstr "Subprocess sa nedá spustiť!"
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed - file exists."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
msgid "Creating app bundle"
msgstr "Vytváranie Náhľadu"
#: platform/osx/export/export.cpp
-msgid "Could not find template app to export:"
-msgstr ""
+#, fuzzy
+msgid "Could not find template app to export: \"%s\"."
+msgstr "Subprocess sa nedá spustiť!"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid export format."
+msgstr "Neplatný Názov."
#: platform/osx/export/export.cpp
msgid ""
@@ -19993,7 +20184,7 @@ msgstr ""
#: platform/osx/export/export.cpp
msgid ""
-"Requested template binary '%s' not found. It might be missing from your "
+"Requested template binary \"%s\" not found. It might be missing from your "
"template archive."
msgstr ""
@@ -20035,6 +20226,15 @@ msgstr ""
#: platform/osx/export/export.cpp
#, fuzzy
+msgid "ZIP Creation"
+msgstr "Projekt"
+
+#: platform/osx/export/export.cpp
+msgid "Could not open file to read from path \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
msgid "Invalid bundle identifier:"
msgstr "Nesprávna veľkosť písma."
@@ -20348,6 +20548,11 @@ msgid "Debug Algorithm"
msgstr ""
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to rename temporary file \"%s\"."
+msgstr "Nepodarilo sa vymazaÅ¥ doÄasné súbory:"
+
+#: platform/windows/export/export.cpp
msgid "Identity Type"
msgstr ""
@@ -20394,6 +20599,66 @@ msgid "Trademarks"
msgstr ""
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Resources Modification"
+msgstr "Prilepiť Animáciu"
+
+#: platform/windows/export/export.cpp
+msgid "Could not find rcedit executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find wine executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start rcedit executable, configure rcedit path in the Editor "
+"Settings (Export > Windows > Rcedit)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"rcedit failed to modify executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find signtool executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find osslsigncode executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid identity type."
+msgstr "Nesprávna veľkosť písma."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid timestamp server."
+msgstr "Neplatný Názov."
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start signtool executable, configure signtool path in the Editor "
+"Settings (Export > Windows > Signtool)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Signtool failed to sign executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to remove temporary file \"%s\"."
+msgstr "Nepodarilo sa vymazaÅ¥ doÄasné súbory:"
+
+#: platform/windows/export/export.cpp
msgid ""
"The rcedit tool must be configured in the Editor Settings (Export > Windows "
"> Rcedit) to change the icon or app information data."
@@ -20415,6 +20680,23 @@ msgid "Invalid product version:"
msgstr "Nesprávna veľkosť písma."
#: platform/windows/export/export.cpp
+msgid "Windows executables cannot be >= 4 GiB."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+#, fuzzy
+msgid "Failed to open executable file \"%s\"."
+msgstr "Nesprávna veľkosť písma."
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable file header corrupted."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable \"pck\" section not found."
+msgstr ""
+
+#: platform/windows/export/export.cpp
#, fuzzy
msgid "Windows"
msgstr "Nové Okno"
@@ -20431,6 +20713,10 @@ msgstr ""
msgid "Wine"
msgstr ""
+#: platform/x11/export/export.cpp
+msgid "32-bit executables cannot have embedded data >= 4 GiB."
+msgstr ""
+
#: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp
#: scene/resources/texture.cpp
#, fuzzy
@@ -20553,7 +20839,8 @@ msgstr ""
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/3d/light.cpp scene/3d/reflection_probe.cpp
-#: scene/3d/visual_instance.cpp scene/resources/material.cpp
+#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp
+#: scene/resources/material.cpp
#, fuzzy
msgid "Max Distance"
msgstr "Inštancie"
@@ -21331,6 +21618,18 @@ msgstr ""
msgid "Edge Connection Margin"
msgstr "Upraviť Pripojenie:"
+#: scene/2d/navigation_2d.cpp
+msgid ""
+"'Navigation2D' node and 'Navigation2D.get_simple_path()' are deprecated and "
+"will be removed in a future version. Use 'Navigation2DServer.map_get_path()' "
+"instead."
+msgstr ""
+
+#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
+#, fuzzy
+msgid "Path Desired Distance"
+msgstr "Vyberte hlavnú scénu"
+
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
msgid "Target Desired Distance"
msgstr ""
@@ -21383,15 +21682,19 @@ msgid ""
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/navigation_polygon.cpp
msgid "Navpoly"
msgstr ""
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Enter Cost"
+msgstr "Od Stredu Dole"
+
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Travel Cost"
+msgstr "Cestovať"
+
#: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp
#: scene/main/canvas_layer.cpp
#, fuzzy
@@ -22539,6 +22842,13 @@ msgstr ""
msgid "Transform Normals"
msgstr "Vytvoriť adresár"
+#: scene/3d/navigation.cpp
+msgid ""
+"'Navigation' node and 'Navigation.get_simple_path()' are deprecated and will "
+"be removed in a future version. Use 'NavigationServer.map_get_path()' "
+"instead."
+msgstr ""
+
#: scene/3d/navigation.cpp scene/resources/curve.cpp
#, fuzzy
msgid "Up Vector"
@@ -22562,12 +22872,6 @@ msgid ""
"The NavigationAgent can be used only under a Spatial inheriting parent node."
msgstr ""
-#: scene/3d/navigation_mesh_instance.cpp
-msgid ""
-"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
-"It only provides navigation data."
-msgstr ""
-
#: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp
msgid "NavMesh"
msgstr ""
@@ -25193,6 +25497,16 @@ msgid "3D Physics"
msgstr "Fyzická Snímka %"
#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "2D Navigation"
+msgstr "Signály:"
+
+#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "3D Navigation"
+msgstr "Signály:"
+
+#: scene/register_scene_types.cpp
msgid "Use hiDPI"
msgstr ""
@@ -26601,7 +26915,7 @@ msgstr "Prechody: "
msgid "Refraction"
msgstr "Popis:"
-#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp
+#: scene/resources/material.cpp
msgid "Detail"
msgstr ""
@@ -26683,7 +26997,12 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
-msgid "Sample Partition Type"
+msgid "Sampling"
+msgstr "Veľkosť:"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Partition Type"
msgstr "Zmeniť %s Typ"
#: scene/resources/navigation_mesh.cpp
@@ -26700,10 +27019,15 @@ msgid "Source Group Name"
msgstr "Prostriedok"
#: scene/resources/navigation_mesh.cpp
-msgid "Agent"
+msgid "Cells"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Agents"
+msgstr "Obsah:"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Max Climb"
msgstr ""
@@ -26712,11 +27036,16 @@ msgid "Max Slope"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Regions"
+msgstr "Režim Interpolácie"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Merge Size"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Edge"
+msgid "Edges"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -26729,6 +27058,11 @@ msgid "Verts Per Poly"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Details"
+msgstr "NaÄítaÅ¥ predvolené"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Sample Distance"
msgstr ""
@@ -26745,9 +27079,18 @@ msgid "Ledge Spans"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Filter Walkable Low Height Spans"
+msgid "Walkable Low Height Spans"
msgstr ""
+#: scene/resources/navigation_mesh.cpp
+msgid "Baking AABB"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB Offset"
+msgstr "Odchýlka Mriežky:"
+
#: scene/resources/occluder_shape.cpp
msgid "Spheres"
msgstr ""
@@ -27151,6 +27494,11 @@ msgid "Scenario"
msgstr "Scéna"
#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Navigation Map"
+msgstr "Signály:"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
msgid "Direct Space State"
msgstr ""
@@ -27168,6 +27516,26 @@ msgstr "Lineárne Vľavo"
msgid "Default Angular Damp"
msgstr ""
+#: scene/resources/world.cpp
+#, fuzzy
+msgid "Default Map Up"
+msgstr "Predvolené"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Size"
+msgstr "Predzobraziť Vylepšenie"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Height"
+msgstr "Testovanie"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Edge Connection Margin"
+msgstr "Upraviť Pripojenie:"
+
#: scene/resources/world_2d.cpp
msgid "Canvas"
msgstr ""
diff --git a/editor/translations/sl.po b/editor/translations/sl.po
index 35a8a11b06..b796c872f7 100644
--- a/editor/translations/sl.po
+++ b/editor/translations/sl.po
@@ -13,13 +13,14 @@
# Alex <alexrixhardson@gmail.com>, 2019.
# Andrew Poženel <andrej.pozenel@outlook.com>, 2020, 2022.
# Jakob Tadej VrtaÄnik <minecraftalka2@gmail.com>, 2021.
+# Andrew Poženel <andrew.pozenel@protonmail.com>, 2022.
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: 2022-06-04 10:56+0000\n"
-"Last-Translator: Andrew Poženel <andrej.pozenel@outlook.com>\n"
+"PO-Revision-Date: 2022-06-23 16:41+0000\n"
+"Last-Translator: Andrew Poženel <andrew.pozenel@protonmail.com>\n"
"Language-Team: Slovenian <https://hosted.weblate.org/projects/godot-engine/"
"godot/sl/>\n"
"Language: sl\n"
@@ -28,7 +29,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || "
"n%100==4 ? 2 : 3;\n"
-"X-Generator: Weblate 4.13-dev\n"
+"X-Generator: Weblate 4.13.1-dev\n"
#: core/bind/core_bind.cpp main/main.cpp
msgid "Tablet Driver"
@@ -212,9 +213,10 @@ msgid "Data"
msgstr "Podatki"
#: core/io/file_access_network.cpp core/register_core_types.cpp
-#: editor/editor_settings.cpp main/main.cpp
+#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
#: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h
+#: scene/gui/file_dialog.cpp
msgid "Network"
msgstr "Omrežje"
@@ -364,6 +366,16 @@ msgstr ""
msgid "Max Size (KB)"
msgstr ""
+#: core/os/input.cpp
+#, fuzzy
+msgid "Mouse Mode"
+msgstr "NaÄin Premika"
+
+#: core/os/input.cpp
+#, fuzzy
+msgid "Use Accumulated Input"
+msgstr "Izbriši Vnos"
+
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: servers/audio_server.cpp
msgid "Device"
@@ -400,9 +412,8 @@ msgid "Pressed"
msgstr "Prednastavitev..."
#: core/os/input_event.cpp
-#, fuzzy
msgid "Scancode"
-msgstr "Preglej"
+msgstr "Skenirna koda"
#: core/os/input_event.cpp
msgid "Physical Scancode"
@@ -410,7 +421,7 @@ msgstr ""
#: core/os/input_event.cpp
msgid "Unicode"
-msgstr ""
+msgstr "Unicode"
#: core/os/input_event.cpp
msgid "Echo"
@@ -566,7 +577,8 @@ msgstr "Opis:"
#: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
-#: main/main.cpp
+#: main/main.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp
msgid "Run"
msgstr "Zaženi"
@@ -655,6 +667,11 @@ msgid "Main Run Args"
msgstr ""
#: core/project_settings.cpp
+#, fuzzy
+msgid "Scene Naming"
+msgstr "Pot Prizora:"
+
+#: core/project_settings.cpp
msgid "Search In File Extensions"
msgstr ""
@@ -662,20 +679,15 @@ msgstr ""
msgid "Script Templates Search Path"
msgstr ""
-#: core/project_settings.cpp editor/editor_node.cpp
-#: editor/plugins/version_control_editor_plugin.cpp
+#: core/project_settings.cpp
#, fuzzy
-msgid "Version Control"
+msgid "Version Control Autoload On Startup"
msgstr "RazliÄica:"
#: core/project_settings.cpp
-msgid "Autoload On Startup"
-msgstr ""
-
-#: core/project_settings.cpp
#, fuzzy
-msgid "Plugin Name"
-msgstr "VtiÄniki"
+msgid "Version Control Plugin Name"
+msgstr "RazliÄica:"
#: core/project_settings.cpp scene/2d/collision_object_2d.cpp
#: scene/3d/collision_object.cpp scene/gui/control.cpp
@@ -791,7 +803,8 @@ msgid "Quality"
msgstr ""
#: core/project_settings.cpp scene/gui/file_dialog.cpp
-#: scene/main/scene_tree.cpp servers/visual_server.cpp
+#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp
+#: servers/visual_server.cpp
#, fuzzy
msgid "Filters"
msgstr "Filtri..."
@@ -871,7 +884,7 @@ msgstr ""
#: core/register_core_types.cpp
msgid "TCP"
-msgstr ""
+msgstr "TCP"
#: core/register_core_types.cpp
#, fuzzy
@@ -2279,8 +2292,8 @@ msgid "Open"
msgstr "Odpri"
#: editor/dependency_editor.cpp
-msgid "Owners Of:"
-msgstr "Lastniki:"
+msgid "Owners of: %s (Total: %d)"
+msgstr ""
#: editor/dependency_editor.cpp
#, fuzzy
@@ -2592,7 +2605,7 @@ msgid "Bus Options"
msgstr "Možnosti Vodila"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/scene_tree_dock.cpp
+#: editor/project_export.cpp editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "Podvoji"
@@ -2860,6 +2873,24 @@ msgid "Choose"
msgstr "Izberi"
#: editor/editor_export.cpp
+msgid "Project export for platform:"
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Completed with errors."
+msgstr ""
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Completed successfully."
+msgstr "Paket je UspeÅ¡no NameÅ¡Äen!"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed."
+msgstr "Spodletelo:"
+
+#: editor/editor_export.cpp
msgid "Storing File:"
msgstr "Shranjevanje Datoteke:"
@@ -2872,6 +2903,31 @@ msgid "Packing"
msgstr "Pakiranje"
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save PCK"
+msgstr "Shrani Kot"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Cannot create file \"%s\"."
+msgstr "Mape ni mogoÄe ustvariti."
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to export project files."
+msgstr "Nemorem zaÄeti podprocesa!"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Can't open file to read from path \"%s\"."
+msgstr "Datoteke ni mogoÄe odpreti za pisanje:"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save ZIP"
+msgstr "Shrani Kot"
+
+#: editor/editor_export.cpp
msgid ""
"Target platform requires 'ETC' texture compression for GLES2. Enable 'Import "
"Etc' in Project Settings."
@@ -2976,11 +3032,32 @@ msgstr "Predloge ni mogoÄe najti:"
msgid "Custom release template not found."
msgstr ""
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Prepare Template"
+msgstr "Upravljaj Izvozne Predloge"
+
+#: editor/editor_export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "The given export path doesn't exist."
+msgstr "Datoteka ne obstaja."
+
#: editor/editor_export.cpp platform/javascript/export/export.cpp
-msgid "Template file not found:"
+#, fuzzy
+msgid "Template file not found: \"%s\"."
msgstr "Predloge ni mogoÄe najti:"
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to copy export template."
+msgstr "Neveljavna izvozna predloga:"
+
+#: editor/editor_export.cpp platform/windows/export/export.cpp
+#: platform/x11/export/export.cpp
+msgid "PCK Embedding"
+msgstr ""
+
+#: editor/editor_export.cpp
msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB."
msgstr ""
@@ -3169,9 +3246,9 @@ msgid "Import"
msgstr "Uvozi"
#: editor/editor_feature_profile.cpp editor/project_export.cpp
-#: platform/android/export/export.cpp platform/javascript/export/export.cpp
-#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
-#: platform/windows/export/export.cpp
+#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#: platform/uwp/export/export.cpp platform/windows/export/export.cpp
msgid "Export"
msgstr "Izvozi"
@@ -3791,7 +3868,7 @@ msgstr ""
#: editor/editor_network_profiler.cpp editor/editor_node.cpp
#: scene/main/node.cpp scene/resources/default_theme/default_theme.cpp
msgid "Node"
-msgstr "Gradnik"
+msgstr "VozliÅ¡Äe"
#: editor/editor_network_profiler.cpp
msgid "Incoming RPC"
@@ -4369,15 +4446,6 @@ msgid ""
"Unable to write to file '%s', file in use, locked or lacking permissions."
msgstr ""
-#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
-msgid "Scene"
-msgstr "Prizor"
-
-#: editor/editor_node.cpp
-#, fuzzy
-msgid "Scene Naming"
-msgstr "Pot Prizora:"
-
#: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp
#: servers/arvr/arvr_interface.cpp
msgid "Interface"
@@ -4506,6 +4574,11 @@ msgstr ""
#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
#, fuzzy
+msgid "Version Control"
+msgstr "RazliÄica:"
+
+#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
+#, fuzzy
msgid "Username"
msgstr "Preimenuj"
@@ -4533,6 +4606,10 @@ msgstr "Preklop naÄin pisanja brez motenj."
msgid "Add a new scene."
msgstr "Dodaj nov Prizor."
+#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
+msgid "Scene"
+msgstr "Prizor"
+
#: editor/editor_node.cpp
msgid "Go to previously opened scene."
msgstr "Pojdi na predhodno odprti prizor."
@@ -5329,6 +5406,11 @@ msgstr ""
"Za to platformo ni mogoÄe najti obstojeÄih izvoznih nastavitev.\n"
"V izvoznem meniju dodajte svoje nastavitve."
+#: editor/editor_run_native.cpp
+#, fuzzy
+msgid "Project Run"
+msgstr "Projekt"
+
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
msgstr "Napišite svojo logiko v metodi _run() ."
@@ -5604,7 +5686,9 @@ msgid "Draw Spaces"
msgstr "Klici"
#: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp
-#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp
+#: scene/main/scene_tree.cpp scene/resources/world.cpp
+#: scene/resources/world_2d.cpp
#, fuzzy
msgid "Navigation"
msgstr "Animacijski Gradnik"
@@ -7117,7 +7201,7 @@ msgstr ""
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp
-#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp
+#: scene/gui/control.cpp
#, fuzzy
msgid "Filter"
msgstr "Filtri..."
@@ -7136,7 +7220,7 @@ msgstr ""
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp
msgid "sRGB"
-msgstr ""
+msgstr "sRGB"
#: editor/import/resource_importer_layered_texture.cpp
msgid "Slices"
@@ -7410,6 +7494,18 @@ msgid "Saving..."
msgstr "Shranjevanje..."
#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used as a normal map in 3D. Enabling red-green "
+"texture compression to reduce memory usage (blue channel is discarded)."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap "
+"generation and VRAM texture compression."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
msgid "2D, Detect 3D"
msgstr ""
@@ -8136,11 +8232,20 @@ msgid "New Anim"
msgstr "Nova Animacija"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+msgstr "Ustvari Novo Animacijo"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Change Animation Name:"
msgstr "Spremeni Ime Animacije:"
#: editor/plugins/animation_player_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Rename Animation"
+msgstr "Preimenuj Animacijo"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Delete Animation?"
msgstr "Izbrišem animacijo?"
@@ -8160,11 +8265,6 @@ msgid "Animation name already exists!"
msgstr "NAPAKA: Animacija s tem imenom že obstaja!"
#: editor/plugins/animation_player_editor_plugin.cpp
-#: editor/plugins/sprite_frames_editor_plugin.cpp
-msgid "Rename Animation"
-msgstr "Preimenuj Animacijo"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate Animation"
msgstr "Podvoji Animacijo"
@@ -8313,10 +8413,6 @@ msgid "Pin AnimationPlayer"
msgstr "Prilepi animacijo"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Create New Animation"
-msgstr "Ustvari Novo Animacijo"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Name:"
msgstr "Ime Animacije:"
@@ -9738,7 +9834,7 @@ msgstr ""
#: editor/plugins/curve_editor_plugin.cpp
msgid "Flat 1"
-msgstr ""
+msgstr "Raven 1"
#: editor/plugins/curve_editor_plugin.cpp editor/property_editor.cpp
msgid "Ease In"
@@ -9966,7 +10062,7 @@ msgstr ""
#: scene/resources/multimesh.cpp scene/resources/primitive_meshes.cpp
#: scene/resources/texture.cpp
msgid "Mesh"
-msgstr ""
+msgstr "Geometrijski objekt"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Trimesh Static Body"
@@ -10511,6 +10607,7 @@ msgid "Points"
msgstr "Odstrani toÄko"
#: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp
+#: scene/resources/navigation_mesh.cpp
#, fuzzy
msgid "Polygons"
msgstr "Uredi Poligon"
@@ -10868,7 +10965,7 @@ msgstr "Prejšnji zavihek"
#: editor/plugins/script_editor_plugin.cpp
#: scene/resources/default_theme/default_theme.cpp
msgid "File"
-msgstr ""
+msgstr "Datoteka"
#: editor/plugins/script_editor_plugin.cpp
#, fuzzy
@@ -11324,7 +11421,7 @@ msgstr "Zaženi"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Orthogonal"
-msgstr ""
+msgstr "Ortogonalno"
#: editor/plugins/spatial_editor_plugin.cpp modules/gltf/gltf_camera.cpp
msgid "Perspective"
@@ -11490,7 +11587,7 @@ msgstr "Lastnosti"
#: 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."
@@ -11958,7 +12055,7 @@ msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
#, fuzzy
-msgid "Convert to Mesh2D"
+msgid "Convert to MeshInstance2D"
msgstr "Pretvori V..."
#: editor/plugins/sprite_editor_plugin.cpp
@@ -13018,8 +13115,7 @@ msgid "Select the previous shape, subtile, or Tile."
msgstr ""
#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp
-#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp
-#: scene/resources/texture.cpp
+#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp
#, fuzzy
msgid "Region"
msgstr "NaÄin Vrtenja"
@@ -13553,7 +13649,7 @@ msgstr ""
#: editor/plugins/version_control_editor_plugin.cpp
msgid "SSH Passphrase"
-msgstr ""
+msgstr "geslo SSH"
#: editor/plugins/version_control_editor_plugin.cpp
#, fuzzy
@@ -14556,32 +14652,11 @@ 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
#, fuzzy
msgid "Exporting All"
msgstr "Izvozi"
#: 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
#, fuzzy
msgid "Export Path"
msgstr "Izvozi Projekt"
@@ -14725,6 +14800,11 @@ msgid "Export templates for this platform are missing:"
msgstr ""
#: editor/project_export.cpp
+#, fuzzy
+msgid "Project Export"
+msgstr "Ustanovitelji Projekta"
+
+#: editor/project_export.cpp
msgid "Manage Export Templates"
msgstr "Upravljaj Izvozne Predloge"
@@ -17123,7 +17203,7 @@ msgstr ""
#: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp
#: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp
-#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp
+#: scene/3d/collision_polygon.cpp
#, fuzzy
msgid "Polygon"
msgstr "Uredi Poligon"
@@ -17733,7 +17813,6 @@ msgid "Use In Baked Light"
msgstr "ZapeÄi Svetlobne karte"
#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
-#: scene/resources/navigation_mesh.cpp
msgid "Cell"
msgstr ""
@@ -17763,6 +17842,19 @@ msgstr "NaÄin Vrtenja"
msgid "Mask"
msgstr ""
+#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
+#, fuzzy
+msgid "Bake Navigation"
+msgstr "Animacijski Gradnik"
+
+#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp
+#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp
+#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp
+#: scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Navigation Layers"
+msgstr "Animacijski Gradnik"
+
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Plane"
msgstr ""
@@ -18572,7 +18664,7 @@ msgstr ""
#: modules/visual_script/visual_script_flow_control.cpp
msgid "While"
-msgstr ""
+msgstr "Medtem ko"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "while (cond):"
@@ -18903,7 +18995,7 @@ msgstr "Odstrani Gradnik VizualnaSkripta"
#: modules/visual_script/visual_script_yield_nodes.cpp
msgid "Yield"
-msgstr ""
+msgstr "Donos"
#: modules/visual_script/visual_script_yield_nodes.cpp
msgid "Wait"
@@ -19340,10 +19432,6 @@ msgid "Could not execute on device."
msgstr "Mape ni mogoÄe ustvariti."
#: 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."
@@ -19448,12 +19536,16 @@ msgstr ""
msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version."
msgstr ""
+#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Code Signing"
+msgstr "Signali"
+
#: 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."
+"'apksigner' could not be found. Please check that the command is available "
+"in the Android SDK build-tools directory. The resulting %s is unsigned."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -19472,6 +19564,11 @@ msgid "Could not find keystore, unable to export."
msgstr ""
#: platform/android/export/export_plugin.cpp
+#, fuzzy
+msgid "Could not start apksigner executable."
+msgstr "Nemorem zaÄeti podprocesa!"
+
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
@@ -19502,7 +19599,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Unsupported export format!\n"
+msgid "Unsupported export format!"
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -19513,20 +19610,19 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Android build version mismatch:\n"
-" Template installed: %s\n"
-" Godot Version: %s\n"
+"Android build version mismatch: Template installed: %s, Godot version: %s. "
"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"
+"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 ""
+#, fuzzy
+msgid "Could not export project files to gradle project."
+msgstr "Nemorem zaÄeti podprocesa!"
#: platform/android/export/export_plugin.cpp
msgid "Could not write expansion package file!"
@@ -19538,7 +19634,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Building of Android project failed, check output for the error.\n"
+"Building of Android project failed, check output for the error. "
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
@@ -19554,7 +19650,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
#, fuzzy
-msgid "Package not found: %s"
+msgid "Package not found: \"%s\"."
msgstr "Animacijska Orodja"
#: platform/android/export/export_plugin.cpp
@@ -19563,15 +19659,13 @@ msgid "Creating APK..."
msgstr "Povezovanje..."
#: platform/android/export/export_plugin.cpp
-msgid ""
-"Could not find template APK to export:\n"
-"%s"
-msgstr ""
+#, fuzzy
+msgid "Could not find template APK to export: \"%s\"."
+msgstr "Nemorem zaÄeti podprocesa!"
#: platform/android/export/export_plugin.cpp
msgid ""
-"Missing libraries in the export template for the selected architectures: "
-"%s.\n"
+"Missing libraries in the export template for the selected architectures: %s. "
"Please build a template with all required libraries, or uncheck the missing "
"architectures in the export preset."
msgstr ""
@@ -19583,7 +19677,7 @@ msgstr "Filtriraj datoteke..."
#: platform/android/export/export_plugin.cpp
#, fuzzy
-msgid "Could not export project files"
+msgid "Could not export project files."
msgstr "Nemorem zaÄeti podprocesa!"
#: platform/android/export/export_plugin.cpp
@@ -19826,6 +19920,17 @@ msgstr "Gradnik Prehod"
msgid "Custom BG Color"
msgstr "Gradnik Prehod"
+#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Prepare Templates"
+msgstr "Upravljaj Izvozne Predloge"
+
+#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Export template not found."
+msgstr "Predloge ni mogoÄe najti:"
+
#: platform/iphone/export/export.cpp
msgid "App Store Team ID not specified - cannot configure the project."
msgstr ""
@@ -19848,23 +19953,35 @@ msgid "Run exported HTML in the system's default browser."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not open template for export:"
-msgstr ""
+#, fuzzy
+msgid "Could not open template for export: \"%s\"."
+msgstr "Mape ni mogoÄe ustvariti."
#: platform/javascript/export/export.cpp
-msgid "Invalid export template:"
+#, fuzzy
+msgid "Invalid export template: \"%s\"."
msgstr "Neveljavna izvozna predloga:"
#: platform/javascript/export/export.cpp
-msgid "Could not write file:"
-msgstr ""
+#, fuzzy
+msgid "Could not write file: \"%s\"."
+msgstr "Mape ni mogoÄe ustvariti."
+
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Icon Creation"
+msgstr "Vsebina:"
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not read file:"
+msgid "Could not read file: \"%s\"."
msgstr "Mape ni mogoÄe ustvariti."
#: platform/javascript/export/export.cpp
+msgid "PWA"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
#, fuzzy
msgid "Variant"
msgstr "OÅ¡tevilÄenja:"
@@ -19940,17 +20057,17 @@ msgstr ""
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not read HTML shell:"
+msgid "Could not read HTML shell: \"%s\"."
msgstr "Mape ni mogoÄe ustvariti."
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not create HTTP server directory:"
+msgid "Could not create HTTP server directory: %s."
msgstr "Mape ni mogoÄe ustvariti."
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Error starting HTTP server:"
+msgid "Error starting HTTP server: %d."
msgstr "Napaka pri shranjevanju PloÅ¡ÄnegaNiza!"
#: platform/javascript/export/export.cpp
@@ -20248,9 +20365,28 @@ msgid "Apple Team ID"
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open icon file \"%s\"."
+msgstr "Nemorem zaÄeti podprocesa!"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start xcrun executable."
+msgstr "Nemorem zaÄeti podprocesa!"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization failed."
+msgstr "Animacijski Gradnik"
+
+#: platform/osx/export/export.cpp
+msgid "Notarization request UUID: \"%s\""
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid ""
-"Note: The notarization process generally takes less than an hour. When the "
-"process is completed, you'll receive an email."
+"The notarization process generally takes less than an hour. When the process "
+"is completed, you'll receive an email."
msgstr ""
#: platform/osx/export/export.cpp
@@ -20266,18 +20402,74 @@ msgid ""
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign failed with error \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign require regex module."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Could not start codesign executable, make sure Xcode command line tools are "
+"installed."
+msgstr ""
+
+#: platform/osx/export/export.cpp platform/windows/export/export.cpp
#, fuzzy
msgid "No identity found."
msgstr "Ni Zadetka!"
#: platform/osx/export/export.cpp
#, fuzzy
+msgid "Cannot sign file %s."
+msgstr "Napaka pri shranjevanju PloÅ¡ÄnegaNiza!"
+
+#: platform/osx/export/export.cpp
+msgid "Relative symlinks are not supported, exported \"%s\" might be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "DMG Creation"
+msgstr "Smeri"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start hdiutil executable."
+msgstr "Nemorem zaÄeti podprocesa!"
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed - file exists."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
msgid "Creating app bundle"
msgstr "Ustvarjanje SliÄic"
#: platform/osx/export/export.cpp
-msgid "Could not find template app to export:"
-msgstr ""
+#, fuzzy
+msgid "Could not find template app to export: \"%s\"."
+msgstr "Nemorem zaÄeti podprocesa!"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid export format."
+msgstr "Neveljavna izvozna predloga:"
#: platform/osx/export/export.cpp
msgid ""
@@ -20287,7 +20479,7 @@ msgstr ""
#: platform/osx/export/export.cpp
msgid ""
-"Requested template binary '%s' not found. It might be missing from your "
+"Requested template binary \"%s\" not found. It might be missing from your "
"template archive."
msgstr ""
@@ -20329,6 +20521,15 @@ msgstr ""
#: platform/osx/export/export.cpp
#, fuzzy
+msgid "ZIP Creation"
+msgstr "Projekt"
+
+#: platform/osx/export/export.cpp
+msgid "Could not open file to read from path \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
msgid "Invalid bundle identifier:"
msgstr "Ime ni pravilen identifikator:"
@@ -20645,6 +20846,11 @@ msgid "Debug Algorithm"
msgstr "RazhroÅ¡Äevalnik"
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to rename temporary file \"%s\"."
+msgstr "Ni mogoÄe odstraniti:"
+
+#: platform/windows/export/export.cpp
msgid "Identity Type"
msgstr ""
@@ -20692,6 +20898,66 @@ msgid "Trademarks"
msgstr ""
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Resources Modification"
+msgstr "Prilepi animacijo"
+
+#: platform/windows/export/export.cpp
+msgid "Could not find rcedit executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find wine executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start rcedit executable, configure rcedit path in the Editor "
+"Settings (Export > Windows > Rcedit)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"rcedit failed to modify executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find signtool executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find osslsigncode executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid identity type."
+msgstr "Ime ni pravilen identifikator:"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid timestamp server."
+msgstr "Neveljavno ime."
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start signtool executable, configure signtool path in the Editor "
+"Settings (Export > Windows > Signtool)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Signtool failed to sign executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to remove temporary file \"%s\"."
+msgstr "Ni mogoÄe odstraniti:"
+
+#: platform/windows/export/export.cpp
msgid ""
"The rcedit tool must be configured in the Editor Settings (Export > Windows "
"> Rcedit) to change the icon or app information data."
@@ -20713,6 +20979,23 @@ msgid "Invalid product version:"
msgstr "Neveljavno Ime Projekta."
#: platform/windows/export/export.cpp
+msgid "Windows executables cannot be >= 4 GiB."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+#, fuzzy
+msgid "Failed to open executable file \"%s\"."
+msgstr "Uporabiti moraš valjavno razširitev."
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable file header corrupted."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable \"pck\" section not found."
+msgstr ""
+
+#: platform/windows/export/export.cpp
msgid "Windows"
msgstr ""
@@ -20728,6 +21011,10 @@ msgstr ""
msgid "Wine"
msgstr ""
+#: platform/x11/export/export.cpp
+msgid "32-bit executables cannot have embedded data >= 4 GiB."
+msgstr ""
+
#: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp
#: scene/resources/texture.cpp
#, fuzzy
@@ -20852,7 +21139,8 @@ msgstr ""
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/3d/light.cpp scene/3d/reflection_probe.cpp
-#: scene/3d/visual_instance.cpp scene/resources/material.cpp
+#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp
+#: scene/resources/material.cpp
#, fuzzy
msgid "Max Distance"
msgstr "Primer"
@@ -21625,6 +21913,18 @@ msgstr ""
msgid "Edge Connection Margin"
msgstr "Napaka Pri Povezavi"
+#: scene/2d/navigation_2d.cpp
+msgid ""
+"'Navigation2D' node and 'Navigation2D.get_simple_path()' are deprecated and "
+"will be removed in a future version. Use 'Navigation2DServer.map_get_path()' "
+"instead."
+msgstr ""
+
+#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
+#, fuzzy
+msgid "Path Desired Distance"
+msgstr "Izberi Glavno Sceno"
+
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
msgid "Target Desired Distance"
msgstr ""
@@ -21677,13 +21977,16 @@ msgid ""
msgstr ""
#: scene/2d/navigation_polygon.cpp
-msgid ""
-"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
-"node. It only provides navigation data."
+msgid "Navpoly"
msgstr ""
-#: scene/2d/navigation_polygon.cpp
-msgid "Navpoly"
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Enter Cost"
+msgstr "NaÄin Vrtenja"
+
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+msgid "Travel Cost"
msgstr ""
#: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp
@@ -22831,6 +23134,13 @@ msgstr ""
msgid "Transform Normals"
msgstr "Preoblikovanje Dialoga..."
+#: scene/3d/navigation.cpp
+msgid ""
+"'Navigation' node and 'Navigation.get_simple_path()' are deprecated and will "
+"be removed in a future version. Use 'NavigationServer.map_get_path()' "
+"instead."
+msgstr ""
+
#: scene/3d/navigation.cpp scene/resources/curve.cpp
#, fuzzy
msgid "Up Vector"
@@ -22854,12 +23164,6 @@ msgid ""
"The NavigationAgent can be used only under a Spatial inheriting parent node."
msgstr ""
-#: scene/3d/navigation_mesh_instance.cpp
-msgid ""
-"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
-"It only provides navigation data."
-msgstr ""
-
#: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp
msgid "NavMesh"
msgstr ""
@@ -25485,6 +25789,16 @@ msgid "3D Physics"
msgstr "Fizikalni Okvir %"
#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "2D Navigation"
+msgstr "Animacijski Gradnik"
+
+#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "3D Navigation"
+msgstr "Animacijski Gradnik"
+
+#: scene/register_scene_types.cpp
msgid "Use hiDPI"
msgstr ""
@@ -26598,7 +26912,7 @@ msgstr ""
#: scene/resources/environment.cpp
msgid "Bloom"
-msgstr ""
+msgstr "UÄinek žarenja"
#: scene/resources/environment.cpp
msgid "HDR Threshold"
@@ -26891,7 +27205,7 @@ msgstr "Prehod"
msgid "Refraction"
msgstr "OÅ¡tevilÄenja:"
-#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp
+#: scene/resources/material.cpp
msgid "Detail"
msgstr ""
@@ -26973,7 +27287,12 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
-msgid "Sample Partition Type"
+msgid "Sampling"
+msgstr "Prilagodi Velikost:"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Partition Type"
msgstr "Nastavite Tip Spremenljivke"
#: scene/resources/navigation_mesh.cpp
@@ -26990,10 +27309,15 @@ msgid "Source Group Name"
msgstr "Viri"
#: scene/resources/navigation_mesh.cpp
-msgid "Agent"
+msgid "Cells"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Agents"
+msgstr "Vsebina:"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Max Climb"
msgstr ""
@@ -27002,11 +27326,16 @@ msgid "Max Slope"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Regions"
+msgstr "NaÄin Vrtenja"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Merge Size"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Edge"
+msgid "Edges"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -27019,6 +27348,11 @@ msgid "Verts Per Poly"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Details"
+msgstr "Naložite Prevzeto"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Sample Distance"
msgstr ""
@@ -27035,9 +27369,18 @@ msgid "Ledge Spans"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Filter Walkable Low Height Spans"
+msgid "Walkable Low Height Spans"
msgstr ""
+#: scene/resources/navigation_mesh.cpp
+msgid "Baking AABB"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB Offset"
+msgstr "Mrežni Zamik:"
+
#: scene/resources/occluder_shape.cpp
msgid "Spheres"
msgstr ""
@@ -27443,6 +27786,11 @@ msgid "Scenario"
msgstr "Prizor"
#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Navigation Map"
+msgstr "Animacijski Gradnik"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
msgid "Direct Space State"
msgstr ""
@@ -27460,6 +27808,26 @@ msgstr "Linearno"
msgid "Default Angular Damp"
msgstr ""
+#: scene/resources/world.cpp
+#, fuzzy
+msgid "Default Map Up"
+msgstr "Prevzeto"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Size"
+msgstr "Predogled"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Height"
+msgstr "Preskušanje"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Edge Connection Margin"
+msgstr "Napaka Pri Povezavi"
+
#: scene/resources/world_2d.cpp
msgid "Canvas"
msgstr ""
diff --git a/editor/translations/sq.po b/editor/translations/sq.po
index f2095dee89..ae64fa2e6f 100644
--- a/editor/translations/sq.po
+++ b/editor/translations/sq.po
@@ -215,9 +215,10 @@ msgid "Data"
msgstr ""
#: core/io/file_access_network.cpp core/register_core_types.cpp
-#: editor/editor_settings.cpp main/main.cpp
+#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
#: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h
+#: scene/gui/file_dialog.cpp
#, fuzzy
msgid "Network"
msgstr "Eksporto Projektin"
@@ -378,6 +379,15 @@ msgstr ""
msgid "Max Size (KB)"
msgstr ""
+#: core/os/input.cpp
+#, fuzzy
+msgid "Mouse Mode"
+msgstr "Luaj Skenën"
+
+#: core/os/input.cpp
+msgid "Use Accumulated Input"
+msgstr ""
+
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: servers/audio_server.cpp
msgid "Device"
@@ -572,7 +582,8 @@ msgstr "Përshkrimi:"
#: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
-#: main/main.cpp
+#: main/main.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp
msgid "Run"
msgstr ""
@@ -658,6 +669,11 @@ msgid "Main Run Args"
msgstr ""
#: core/project_settings.cpp
+#, fuzzy
+msgid "Scene Naming"
+msgstr "Rruga Skenës:"
+
+#: core/project_settings.cpp
msgid "Search In File Extensions"
msgstr ""
@@ -665,20 +681,15 @@ msgstr ""
msgid "Script Templates Search Path"
msgstr ""
-#: core/project_settings.cpp editor/editor_node.cpp
-#: editor/plugins/version_control_editor_plugin.cpp
+#: core/project_settings.cpp
#, fuzzy
-msgid "Version Control"
+msgid "Version Control Autoload On Startup"
msgstr "Versioni:"
#: core/project_settings.cpp
-msgid "Autoload On Startup"
-msgstr ""
-
-#: core/project_settings.cpp
#, fuzzy
-msgid "Plugin Name"
-msgstr "Emri i Shtojcës:"
+msgid "Version Control Plugin Name"
+msgstr "Versioni:"
#: core/project_settings.cpp scene/2d/collision_object_2d.cpp
#: scene/3d/collision_object.cpp scene/gui/control.cpp
@@ -792,7 +803,8 @@ msgid "Quality"
msgstr ""
#: core/project_settings.cpp scene/gui/file_dialog.cpp
-#: scene/main/scene_tree.cpp servers/visual_server.cpp
+#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp
+#: servers/visual_server.cpp
#, fuzzy
msgid "Filters"
msgstr "Filtrat:"
@@ -2219,8 +2231,8 @@ msgid "Open"
msgstr "Hap"
#: editor/dependency_editor.cpp
-msgid "Owners Of:"
-msgstr "Pronarët e:"
+msgid "Owners of: %s (Total: %d)"
+msgstr ""
#: editor/dependency_editor.cpp
#, fuzzy
@@ -2531,7 +2543,7 @@ msgid "Bus Options"
msgstr "Përshkrimi i Klasës"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/scene_tree_dock.cpp
+#: editor/project_export.cpp editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "Dyfisho"
@@ -2798,6 +2810,24 @@ msgid "Choose"
msgstr "Zgjidh"
#: editor/editor_export.cpp
+msgid "Project export for platform:"
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Completed with errors."
+msgstr ""
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Completed successfully."
+msgstr "Paketa u instalua me sukses!"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed."
+msgstr "Dështoi:"
+
+#: editor/editor_export.cpp
msgid "Storing File:"
msgstr "Duke Ruajtur Skedarin:"
@@ -2810,6 +2840,31 @@ msgid "Packing"
msgstr "Duke Paketuar"
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save PCK"
+msgstr "Ruaje Si"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Cannot create file \"%s\"."
+msgstr "Nuk mund të krijoj folderin."
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to export project files."
+msgstr "Nuk mund të fillojë subprocess-in!"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Can't open file to read from path \"%s\"."
+msgstr "Nuk mund të hapi skedarin për të shkruajtur:"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save ZIP"
+msgstr "Ruaje Si"
+
+#: editor/editor_export.cpp
msgid ""
"Target platform requires 'ETC' texture compression for GLES2. Enable 'Import "
"Etc' in Project Settings."
@@ -2932,11 +2987,32 @@ msgstr "Shablloni 'Custom debug' nuk u gjet."
msgid "Custom release template not found."
msgstr "Shablloni 'Custom release' nuk u gjet."
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Prepare Template"
+msgstr "Menaxho Shabllonet e Eksportit"
+
+#: editor/editor_export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "The given export path doesn't exist."
+msgstr "Skedari nuk egziston."
+
#: editor/editor_export.cpp platform/javascript/export/export.cpp
-msgid "Template file not found:"
+#, fuzzy
+msgid "Template file not found: \"%s\"."
msgstr "Skedari shabllon nuk u gjet:"
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to copy export template."
+msgstr "Nuk mund të hapi zip-in e shablloneve të eksportimit."
+
+#: editor/editor_export.cpp platform/windows/export/export.cpp
+#: platform/x11/export/export.cpp
+msgid "PCK Embedding"
+msgstr ""
+
+#: editor/editor_export.cpp
msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB."
msgstr ""
@@ -3123,9 +3199,9 @@ msgid "Import"
msgstr "Importo"
#: editor/editor_feature_profile.cpp editor/project_export.cpp
-#: platform/android/export/export.cpp platform/javascript/export/export.cpp
-#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
-#: platform/windows/export/export.cpp
+#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#: platform/uwp/export/export.cpp platform/windows/export/export.cpp
msgid "Export"
msgstr "Eksporto"
@@ -4310,15 +4386,6 @@ msgid ""
"Unable to write to file '%s', file in use, locked or lacking permissions."
msgstr ""
-#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
-msgid "Scene"
-msgstr "Skenë"
-
-#: editor/editor_node.cpp
-#, fuzzy
-msgid "Scene Naming"
-msgstr "Rruga Skenës:"
-
#: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp
#: servers/arvr/arvr_interface.cpp
msgid "Interface"
@@ -4445,6 +4512,11 @@ msgstr ""
#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
#, fuzzy
+msgid "Version Control"
+msgstr "Versioni:"
+
+#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
+#, fuzzy
msgid "Username"
msgstr "Riemërto"
@@ -4472,6 +4544,10 @@ msgstr "Ndrysho metodën pa shpërqëndrime."
msgid "Add a new scene."
msgstr "Shto një skenë të re."
+#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
+msgid "Scene"
+msgstr "Skenë"
+
#: editor/editor_node.cpp
msgid "Go to previously opened scene."
msgstr "Shko në skenën e hapur më parë."
@@ -5269,6 +5345,11 @@ msgstr ""
"Nuk u gjet eksport paraprak i saktë për këtë platformë.\n"
"Ju lutem shtoni një eksport paraprak të saktë në menu."
+#: editor/editor_run_native.cpp
+#, fuzzy
+msgid "Project Run"
+msgstr "Projekti"
+
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
msgstr "Shkruaj logjikën në metodën _run()."
@@ -5541,7 +5622,9 @@ msgid "Draw Spaces"
msgstr "Thërritjet"
#: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp
-#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp
+#: scene/main/scene_tree.cpp scene/resources/world.cpp
+#: scene/resources/world_2d.cpp
#, fuzzy
msgid "Navigation"
msgstr "Metoda Pa Shpërqëndrime"
@@ -7022,7 +7105,7 @@ msgstr ""
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp
-#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp
+#: scene/gui/control.cpp
#, fuzzy
msgid "Filter"
msgstr "Filtrat:"
@@ -7313,6 +7396,18 @@ msgid "Saving..."
msgstr "Duke Ruajtur..."
#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used as a normal map in 3D. Enabling red-green "
+"texture compression to reduce memory usage (blue channel is discarded)."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap "
+"generation and VRAM texture compression."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
msgid "2D, Detect 3D"
msgstr ""
@@ -7998,11 +8093,20 @@ msgid "New Anim"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+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 "Rename Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Delete Animation?"
msgstr ""
@@ -8020,11 +8124,6 @@ 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 "Duplicate Animation"
msgstr ""
@@ -8167,10 +8266,6 @@ msgid "Pin AnimationPlayer"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Create New Animation"
-msgstr ""
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Name:"
msgstr ""
@@ -10269,6 +10364,7 @@ msgid "Points"
msgstr ""
#: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp
+#: scene/resources/navigation_mesh.cpp
msgid "Polygons"
msgstr ""
@@ -11668,7 +11764,7 @@ msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
#, fuzzy
-msgid "Convert to Mesh2D"
+msgid "Convert to MeshInstance2D"
msgstr "Konverto në %s"
#: editor/plugins/sprite_editor_plugin.cpp
@@ -12694,8 +12790,7 @@ msgid "Select the previous shape, subtile, or Tile."
msgstr ""
#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp
-#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp
-#: scene/resources/texture.cpp
+#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp
msgid "Region"
msgstr ""
@@ -14167,31 +14262,10 @@ 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 "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 "Export Path"
msgstr ""
@@ -14331,6 +14405,11 @@ msgid "Export templates for this platform are missing:"
msgstr ""
#: editor/project_export.cpp
+#, fuzzy
+msgid "Project Export"
+msgstr "Themeluesit e Projektit"
+
+#: editor/project_export.cpp
msgid "Manage Export Templates"
msgstr "Menaxho Shabllonet e Eksportit"
@@ -16669,7 +16748,7 @@ msgstr ""
#: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp
#: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp
-#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp
+#: scene/3d/collision_polygon.cpp
#, fuzzy
msgid "Polygon"
msgstr "Krijo një Poligon"
@@ -17265,7 +17344,6 @@ msgid "Use In Baked Light"
msgstr ""
#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
-#: scene/resources/navigation_mesh.cpp
msgid "Cell"
msgstr ""
@@ -17295,6 +17373,19 @@ msgstr "Fshi Nyjen"
msgid "Mask"
msgstr ""
+#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
+#, fuzzy
+msgid "Bake Navigation"
+msgstr "Metoda Pa Shpërqëndrime"
+
+#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp
+#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp
+#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp
+#: scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Navigation Layers"
+msgstr "Metoda Pa Shpërqëndrime"
+
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Plane"
msgstr ""
@@ -18831,10 +18922,6 @@ msgid "Could not execute on device."
msgstr "Nuk mund të krijoj folderin."
#: 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."
@@ -18938,12 +19025,16 @@ msgstr ""
msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version."
msgstr ""
+#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Code Signing"
+msgstr "Sinjalet"
+
#: 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."
+"'apksigner' could not be found. Please check that the command is available "
+"in the Android SDK build-tools directory. The resulting %s is unsigned."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18962,6 +19053,11 @@ msgid "Could not find keystore, unable to export."
msgstr ""
#: platform/android/export/export_plugin.cpp
+#, fuzzy
+msgid "Could not start apksigner executable."
+msgstr "Nuk mund të fillojë subprocess-in!"
+
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
@@ -18991,7 +19087,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Unsupported export format!\n"
+msgid "Unsupported export format!"
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -19002,20 +19098,19 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Android build version mismatch:\n"
-" Template installed: %s\n"
-" Godot Version: %s\n"
+"Android build version mismatch: Template installed: %s, Godot version: %s. "
"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"
+"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 ""
+#, fuzzy
+msgid "Could not export project files to gradle project."
+msgstr "Nuk mund të fillojë subprocess-in!"
#: platform/android/export/export_plugin.cpp
msgid "Could not write expansion package file!"
@@ -19027,7 +19122,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Building of Android project failed, check output for the error.\n"
+"Building of Android project failed, check output for the error. "
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
@@ -19043,7 +19138,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
#, fuzzy
-msgid "Package not found: %s"
+msgid "Package not found: \"%s\"."
msgstr "Instaluesi Paketave"
#: platform/android/export/export_plugin.cpp
@@ -19052,15 +19147,13 @@ msgid "Creating APK..."
msgstr "Duke u lidhur..."
#: platform/android/export/export_plugin.cpp
-msgid ""
-"Could not find template APK to export:\n"
-"%s"
-msgstr ""
+#, fuzzy
+msgid "Could not find template APK to export: \"%s\"."
+msgstr "Nuk mund të fillojë subprocess-in!"
#: platform/android/export/export_plugin.cpp
msgid ""
-"Missing libraries in the export template for the selected architectures: "
-"%s.\n"
+"Missing libraries in the export template for the selected architectures: %s. "
"Please build a template with all required libraries, or uncheck the missing "
"architectures in the export preset."
msgstr ""
@@ -19072,7 +19165,7 @@ msgstr "Filtro Skedarët..."
#: platform/android/export/export_plugin.cpp
#, fuzzy
-msgid "Could not export project files"
+msgid "Could not export project files."
msgstr "Nuk mund të fillojë subprocess-in!"
#: platform/android/export/export_plugin.cpp
@@ -19312,6 +19405,17 @@ msgstr "Dyfisho Nyjet"
msgid "Custom BG Color"
msgstr "Dyfisho Nyjet"
+#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Prepare Templates"
+msgstr "Menaxho Shabllonet e Eksportit"
+
+#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Export template not found."
+msgstr "Shablloni 'Custom release' nuk u gjet."
+
#: platform/iphone/export/export.cpp
msgid "App Store Team ID not specified - cannot configure the project."
msgstr ""
@@ -19333,23 +19437,35 @@ msgid "Run exported HTML in the system's default browser."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not open template for export:"
-msgstr ""
+#, fuzzy
+msgid "Could not open template for export: \"%s\"."
+msgstr "Nuk mund të krijoj folderin."
#: platform/javascript/export/export.cpp
-msgid "Invalid export template:"
-msgstr ""
+#, fuzzy
+msgid "Invalid export template: \"%s\"."
+msgstr "Duhet të perdorësh një shtesë të lejuar."
#: platform/javascript/export/export.cpp
-msgid "Could not write file:"
-msgstr ""
+#, fuzzy
+msgid "Could not write file: \"%s\"."
+msgstr "Nuk mund të krijoj folderin."
+
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Icon Creation"
+msgstr "Shfaqe në 'FileSystem'"
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not read file:"
+msgid "Could not read file: \"%s\"."
msgstr "Nuk mund të krijoj folderin."
#: platform/javascript/export/export.cpp
+msgid "PWA"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
#, fuzzy
msgid "Variant"
msgstr "Enumeracionet:"
@@ -19425,17 +19541,17 @@ msgstr ""
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not read HTML shell:"
+msgid "Could not read HTML shell: \"%s\"."
msgstr "Nuk mund të krijoj folderin."
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not create HTTP server directory:"
+msgid "Could not create HTTP server directory: %s."
msgstr "Nuk mund të krijoj folderin."
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Error starting HTTP server:"
+msgid "Error starting HTTP server: %d."
msgstr "Gabim gjatë ruajtjes së TileSet-it!"
#: platform/javascript/export/export.cpp
@@ -19728,9 +19844,28 @@ msgid "Apple Team ID"
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open icon file \"%s\"."
+msgstr "Nuk mund të fillojë subprocess-in!"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start xcrun executable."
+msgstr "Nuk mund të fillojë subprocess-in!"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization failed."
+msgstr "Metoda Pa Shpërqëndrime"
+
+#: platform/osx/export/export.cpp
+msgid "Notarization request UUID: \"%s\""
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid ""
-"Note: The notarization process generally takes less than an hour. When the "
-"process is completed, you'll receive an email."
+"The notarization process generally takes less than an hour. When the process "
+"is completed, you'll receive an email."
msgstr ""
#: platform/osx/export/export.cpp
@@ -19746,18 +19881,74 @@ msgid ""
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign failed with error \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign require regex module."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Could not start codesign executable, make sure Xcode command line tools are "
+"installed."
+msgstr ""
+
+#: platform/osx/export/export.cpp platform/windows/export/export.cpp
#, fuzzy
msgid "No identity found."
msgstr "Konstantet"
#: platform/osx/export/export.cpp
#, fuzzy
+msgid "Cannot sign file %s."
+msgstr "Gabim gjatë ruajtjes së TileSet-it!"
+
+#: platform/osx/export/export.cpp
+msgid "Relative symlinks are not supported, exported \"%s\" might be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "DMG Creation"
+msgstr "Përshkrimi:"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start hdiutil executable."
+msgstr "Nuk mund të fillojë subprocess-in!"
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed - file exists."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
msgid "Creating app bundle"
msgstr "Duke Krijuar Kornizat"
#: platform/osx/export/export.cpp
-msgid "Could not find template app to export:"
-msgstr ""
+#, fuzzy
+msgid "Could not find template app to export: \"%s\"."
+msgstr "Nuk mund të fillojë subprocess-in!"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid export format."
+msgstr "Rruga e pasaktë."
#: platform/osx/export/export.cpp
msgid ""
@@ -19767,7 +19958,7 @@ msgstr ""
#: platform/osx/export/export.cpp
msgid ""
-"Requested template binary '%s' not found. It might be missing from your "
+"Requested template binary \"%s\" not found. It might be missing from your "
"template archive."
msgstr ""
@@ -19808,6 +19999,15 @@ msgid "Sending archive for notarization"
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "ZIP Creation"
+msgstr "Projekti"
+
+#: platform/osx/export/export.cpp
+msgid "Could not open file to read from path \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr ""
@@ -20118,6 +20318,11 @@ msgid "Debug Algorithm"
msgstr ""
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to rename temporary file \"%s\"."
+msgstr "Nuk mund të heqësh:"
+
+#: platform/windows/export/export.cpp
msgid "Identity Type"
msgstr ""
@@ -20164,6 +20369,66 @@ msgid "Trademarks"
msgstr ""
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Resources Modification"
+msgstr "Konstantet"
+
+#: platform/windows/export/export.cpp
+msgid "Could not find rcedit executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find wine executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start rcedit executable, configure rcedit path in the Editor "
+"Settings (Export > Windows > Rcedit)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"rcedit failed to modify executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find signtool executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find osslsigncode executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid identity type."
+msgstr "Argumente të gabuar për të ndërtuar '%s'"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid timestamp server."
+msgstr "Emër i palejuar."
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start signtool executable, configure signtool path in the Editor "
+"Settings (Export > Windows > Signtool)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Signtool failed to sign executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to remove temporary file \"%s\"."
+msgstr "Nuk mund të heqësh:"
+
+#: platform/windows/export/export.cpp
msgid ""
"The rcedit tool must be configured in the Editor Settings (Export > Windows "
"> Rcedit) to change the icon or app information data."
@@ -20185,6 +20450,23 @@ msgid "Invalid product version:"
msgstr "Emri i grupit i pasakt."
#: platform/windows/export/export.cpp
+msgid "Windows executables cannot be >= 4 GiB."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+#, fuzzy
+msgid "Failed to open executable file \"%s\"."
+msgstr "Duhet të perdorësh një shtesë të lejuar."
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable file header corrupted."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable \"pck\" section not found."
+msgstr ""
+
+#: platform/windows/export/export.cpp
msgid "Windows"
msgstr ""
@@ -20200,6 +20482,10 @@ msgstr ""
msgid "Wine"
msgstr ""
+#: platform/x11/export/export.cpp
+msgid "32-bit executables cannot have embedded data >= 4 GiB."
+msgstr ""
+
#: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp
#: scene/resources/texture.cpp
#, fuzzy
@@ -20318,7 +20604,8 @@ msgstr ""
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/3d/light.cpp scene/3d/reflection_probe.cpp
-#: scene/3d/visual_instance.cpp scene/resources/material.cpp
+#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp
+#: scene/resources/material.cpp
#, fuzzy
msgid "Max Distance"
msgstr "Instanco"
@@ -21063,6 +21350,18 @@ msgstr ""
msgid "Edge Connection Margin"
msgstr "Modifiko Lidhjen: "
+#: scene/2d/navigation_2d.cpp
+msgid ""
+"'Navigation2D' node and 'Navigation2D.get_simple_path()' are deprecated and "
+"will be removed in a future version. Use 'Navigation2DServer.map_get_path()' "
+"instead."
+msgstr ""
+
+#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
+#, fuzzy
+msgid "Path Desired Distance"
+msgstr "Zgjidh një Skenë Kryesore"
+
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
msgid "Target Desired Distance"
msgstr ""
@@ -21114,13 +21413,16 @@ msgid ""
msgstr ""
#: scene/2d/navigation_polygon.cpp
-msgid ""
-"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
-"node. It only provides navigation data."
+msgid "Navpoly"
msgstr ""
-#: scene/2d/navigation_polygon.cpp
-msgid "Navpoly"
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Enter Cost"
+msgstr "Fshi Nyjen"
+
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+msgid "Travel Cost"
msgstr ""
#: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp
@@ -22223,6 +22525,13 @@ msgstr ""
msgid "Transform Normals"
msgstr "Binari i Transformimeve 3D"
+#: scene/3d/navigation.cpp
+msgid ""
+"'Navigation' node and 'Navigation.get_simple_path()' are deprecated and will "
+"be removed in a future version. Use 'NavigationServer.map_get_path()' "
+"instead."
+msgstr ""
+
#: scene/3d/navigation.cpp scene/resources/curve.cpp
#, fuzzy
msgid "Up Vector"
@@ -22245,12 +22554,6 @@ msgid ""
"The NavigationAgent can be used only under a Spatial inheriting parent node."
msgstr ""
-#: scene/3d/navigation_mesh_instance.cpp
-msgid ""
-"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
-"It only provides navigation data."
-msgstr ""
-
#: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp
msgid "NavMesh"
msgstr ""
@@ -24802,6 +25105,16 @@ msgid "3D Physics"
msgstr "Hapi i Fizikës %"
#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "2D Navigation"
+msgstr "Metoda Pa Shpërqëndrime"
+
+#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "3D Navigation"
+msgstr "Metoda Pa Shpërqëndrime"
+
+#: scene/register_scene_types.cpp
msgid "Use hiDPI"
msgstr ""
@@ -26178,7 +26491,7 @@ msgstr ""
msgid "Refraction"
msgstr "Enumeracionet:"
-#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp
+#: scene/resources/material.cpp
msgid "Detail"
msgstr ""
@@ -26258,8 +26571,12 @@ msgid "Visible Instance Count"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+msgid "Sampling"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
#, fuzzy
-msgid "Sample Partition Type"
+msgid "Partition Type"
msgstr "Ndrysho Tipin e %s"
#: scene/resources/navigation_mesh.cpp
@@ -26276,7 +26593,11 @@ msgid "Source Group Name"
msgstr "Resursi"
#: scene/resources/navigation_mesh.cpp
-msgid "Agent"
+msgid "Cells"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
+msgid "Agents"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -26288,11 +26609,16 @@ msgid "Max Slope"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Regions"
+msgstr "Hap të Fundit"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Merge Size"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Edge"
+msgid "Edges"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -26305,6 +26631,11 @@ msgid "Verts Per Poly"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Details"
+msgstr "Ngarko të Parazgjedhur"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Sample Distance"
msgstr ""
@@ -26321,9 +26652,18 @@ msgid "Ledge Spans"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Filter Walkable Low Height Spans"
+msgid "Walkable Low Height Spans"
msgstr ""
+#: scene/resources/navigation_mesh.cpp
+msgid "Baking AABB"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB Offset"
+msgstr "Ndrysho Tipin e %s"
+
#: scene/resources/occluder_shape.cpp
msgid "Spheres"
msgstr ""
@@ -26719,6 +27059,11 @@ msgid "Scenario"
msgstr "Skenë"
#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Navigation Map"
+msgstr "Metoda Pa Shpërqëndrime"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
msgid "Direct Space State"
msgstr ""
@@ -26736,6 +27081,26 @@ msgstr "E Parazgjedhur"
msgid "Default Angular Damp"
msgstr ""
+#: scene/resources/world.cpp
+#, fuzzy
+msgid "Default Map Up"
+msgstr "E Parazgjedhur"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Size"
+msgstr "E Parazgjedhur"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Height"
+msgstr "E Parazgjedhur"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Edge Connection Margin"
+msgstr "Modifiko Lidhjen: "
+
#: scene/resources/world_2d.cpp
msgid "Canvas"
msgstr ""
diff --git a/editor/translations/sr_Cyrl.po b/editor/translations/sr_Cyrl.po
index e3df7d0c64..89a0067fe9 100644
--- a/editor/translations/sr_Cyrl.po
+++ b/editor/translations/sr_Cyrl.po
@@ -228,9 +228,10 @@ msgid "Data"
msgstr ""
#: core/io/file_access_network.cpp core/register_core_types.cpp
-#: editor/editor_settings.cpp main/main.cpp
+#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
#: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h
+#: scene/gui/file_dialog.cpp
#, fuzzy
msgid "Network"
msgstr "Мрежни ОÑматрач"
@@ -391,6 +392,16 @@ msgstr ""
msgid "Max Size (KB)"
msgstr ""
+#: core/os/input.cpp
+#, fuzzy
+msgid "Mouse Mode"
+msgstr "Режим померања"
+
+#: core/os/input.cpp
+#, fuzzy
+msgid "Use Accumulated Input"
+msgstr "Обриши улаз"
+
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: servers/audio_server.cpp
#, fuzzy
@@ -595,7 +606,8 @@ msgstr "ОпиÑ"
#: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
-#: main/main.cpp
+#: main/main.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp
msgid "Run"
msgstr "Покрени"
@@ -688,6 +700,11 @@ msgid "Main Run Args"
msgstr "Ðргументи Главне Сцене"
#: core/project_settings.cpp
+#, fuzzy
+msgid "Scene Naming"
+msgstr "Пут Ñцене:"
+
+#: core/project_settings.cpp
msgid "Search In File Extensions"
msgstr ""
@@ -695,20 +712,15 @@ msgstr ""
msgid "Script Templates Search Path"
msgstr ""
-#: core/project_settings.cpp editor/editor_node.cpp
-#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
-msgid "Version Control"
-msgstr "Верзија:"
-
#: core/project_settings.cpp
-msgid "Autoload On Startup"
-msgstr ""
+#, fuzzy
+msgid "Version Control Autoload On Startup"
+msgstr "VCS(СиÑтем Контроле Верзије)"
#: core/project_settings.cpp
#, fuzzy
-msgid "Plugin Name"
-msgstr "Име Прикључка :"
+msgid "Version Control Plugin Name"
+msgstr "Верзија:"
#: core/project_settings.cpp scene/2d/collision_object_2d.cpp
#: scene/3d/collision_object.cpp scene/gui/control.cpp
@@ -828,7 +840,8 @@ msgid "Quality"
msgstr ""
#: core/project_settings.cpp scene/gui/file_dialog.cpp
-#: scene/main/scene_tree.cpp servers/visual_server.cpp
+#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp
+#: servers/visual_server.cpp
#, fuzzy
msgid "Filters"
msgstr "Филтери..."
@@ -2389,8 +2402,8 @@ msgid "Open"
msgstr "Отвори"
#: editor/dependency_editor.cpp
-msgid "Owners Of:"
-msgstr "ВлаÑници:"
+msgid "Owners of: %s (Total: %d)"
+msgstr ""
#: editor/dependency_editor.cpp
#, fuzzy
@@ -2705,7 +2718,7 @@ msgid "Bus Options"
msgstr "ПоÑтавке баÑа"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/scene_tree_dock.cpp
+#: editor/project_export.cpp editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "Дуплирај"
@@ -2975,6 +2988,25 @@ msgid "Choose"
msgstr "Одабери"
#: editor/editor_export.cpp
+msgid "Project export for platform:"
+msgstr ""
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Completed with errors."
+msgstr "Копирај Путању Чвора"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Completed successfully."
+msgstr "Пакет је инÑталиран уÑпешно!"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed."
+msgstr "ÐеуÑпех:"
+
+#: editor/editor_export.cpp
msgid "Storing File:"
msgstr "Складиштење датотеке:"
@@ -2989,6 +3021,31 @@ msgstr "Паковање"
#: editor/editor_export.cpp
#, fuzzy
+msgid "Save PCK"
+msgstr "Сачувај као"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Cannot create file \"%s\"."
+msgstr "ÐеуÑпех при прављењу директоријума."
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to export project files."
+msgstr "ÐеуÑпело упиÑивање фајла:"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Can't open file to read from path \"%s\"."
+msgstr "Ðе могу отворити датотеку за пиÑање:"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save ZIP"
+msgstr "Сачувај као"
+
+#: editor/editor_export.cpp
+#, fuzzy
msgid ""
"Target platform requires 'ETC' texture compression for GLES2. Enable 'Import "
"Etc' in Project Settings."
@@ -3116,13 +3173,34 @@ msgstr "ШаблонÑка датотека није пронађена:\n"
msgid "Custom release template not found."
msgstr "Прилагођени образци објаве ниÑу пронађени."
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Prepare Template"
+msgstr "Управљај извозним шаблонима"
+
+#: editor/editor_export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "The given export path doesn't exist."
+msgstr "Путања не поÑтоји."
+
#: editor/editor_export.cpp platform/javascript/export/export.cpp
#, fuzzy
-msgid "Template file not found:"
+msgid "Template file not found: \"%s\"."
msgstr "ШаблонÑка датотека није пронађена:\n"
#: editor/editor_export.cpp
#, fuzzy
+msgid "Failed to copy export template."
+msgstr "Ðеважећи извозни нацрт:"
+
+#: editor/editor_export.cpp platform/windows/export/export.cpp
+#: platform/x11/export/export.cpp
+#, fuzzy
+msgid "PCK Embedding"
+msgstr " Пуњење"
+
+#: editor/editor_export.cpp
+#, fuzzy
msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB."
msgstr "Ðа 32-битним извозима уграђени PCK не може бити већи од 4 GiB."
@@ -3316,9 +3394,9 @@ msgid "Import"
msgstr "Увоз"
#: editor/editor_feature_profile.cpp editor/project_export.cpp
-#: platform/android/export/export.cpp platform/javascript/export/export.cpp
-#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
-#: platform/windows/export/export.cpp
+#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#: platform/uwp/export/export.cpp platform/windows/export/export.cpp
msgid "Export"
msgstr "Извоз"
@@ -4551,15 +4629,6 @@ msgid ""
"Unable to write to file '%s', file in use, locked or lacking permissions."
msgstr ""
-#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
-msgid "Scene"
-msgstr "Сцена"
-
-#: editor/editor_node.cpp
-#, fuzzy
-msgid "Scene Naming"
-msgstr "Пут Ñцене:"
-
#: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp
#: servers/arvr/arvr_interface.cpp
#, fuzzy
@@ -4690,6 +4759,11 @@ msgstr ""
#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
#, fuzzy
+msgid "Version Control"
+msgstr "Верзија:"
+
+#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
+#, fuzzy
msgid "Username"
msgstr "Преименуј"
@@ -4717,6 +4791,10 @@ msgstr "Укљ./ИÑкљ. режим без Ñметње."
msgid "Add a new scene."
msgstr "Додај нову Ñцену."
+#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
+msgid "Scene"
+msgstr "Сцена"
+
#: editor/editor_node.cpp
msgid "Go to previously opened scene."
msgstr "Отвори претходну Ñцену."
@@ -5567,6 +5645,11 @@ msgstr ""
"ÐиÑу пронађене поÑтавке извоза за ову платформу.\n"
"Молим, додајте поÑтавке у менију за извоз."
+#: editor/editor_run_native.cpp
+#, fuzzy
+msgid "Project Run"
+msgstr "Пројекат"
+
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
msgstr "Пиши логику у _run() методи."
@@ -5852,7 +5935,9 @@ msgid "Draw Spaces"
msgstr "Позиви цртања"
#: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp
-#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp
+#: scene/main/scene_tree.cpp scene/resources/world.cpp
+#: scene/resources/world_2d.cpp
#, fuzzy
msgid "Navigation"
msgstr "Ðаправи навигациону мрежу"
@@ -7425,7 +7510,7 @@ msgstr ""
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp
-#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp
+#: scene/gui/control.cpp
#, fuzzy
msgid "Filter"
msgstr "Филтери..."
@@ -7723,6 +7808,18 @@ msgid "Saving..."
msgstr "Чување..."
#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used as a normal map in 3D. Enabling red-green "
+"texture compression to reduce memory usage (blue channel is discarded)."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap "
+"generation and VRAM texture compression."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
msgid "2D, Detect 3D"
msgstr ""
@@ -8487,11 +8584,20 @@ msgid "New Anim"
msgstr "Ðова анимација"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+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 "Rename Animation"
+msgstr "Преименуј анимацију"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Delete Animation?"
msgstr "Обриши анимацију?"
@@ -8511,11 +8617,6 @@ 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 "Duplicate Animation"
msgstr "Дуплирај анимацију"
@@ -8665,10 +8766,6 @@ msgid "Pin AnimationPlayer"
msgstr "Ðалепи анимацију"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Create New Animation"
-msgstr "Ðаправи нову анимацију"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Name:"
msgstr "Име анимације:"
@@ -10989,6 +11086,7 @@ msgid "Points"
msgstr "Помери тачку"
#: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp
+#: scene/resources/navigation_mesh.cpp
#, fuzzy
msgid "Polygons"
msgstr "Полигон->UV"
@@ -12518,7 +12616,7 @@ msgstr "Ðеважећа геометрија, неуÑпеша замена ÑÐ
#: editor/plugins/sprite_editor_plugin.cpp
#, fuzzy
-msgid "Convert to Mesh2D"
+msgid "Convert to MeshInstance2D"
msgstr "Претвори у велика Ñлова"
#: editor/plugins/sprite_editor_plugin.cpp
@@ -13640,8 +13738,7 @@ msgid "Select the previous shape, subtile, or Tile."
msgstr "Одабери претходни облик, под-плочицу, или плочицу."
#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp
-#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp
-#: scene/resources/texture.cpp
+#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp
#, fuzzy
msgid "Region"
msgstr "Режим ротације"
@@ -15427,40 +15524,11 @@ msgstr "Обриши поÑтавку „%s“?"
#: editor/project_export.cpp
#, fuzzy
-msgid ""
-"Failed to export the project for platform '%s'.\n"
-"Export templates seem to be missing or invalid."
-msgstr ""
-"ÐеуÑпешан извоз пројекта за плазформу '%s'.\n"
-"Изгледа да недоÑтају извозни нацрти или ниÑу иÑправни."
-
-#: 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 ""
-"ÐеуÑпешан извоз пројекта за платформу '%s'.\n"
-"Ово може бити због проблема Ñа подешавањима у извозним поÑтавкама или твојим "
-"извозним подешавањима."
-
-#: editor/project_export.cpp
-#, fuzzy
msgid "Exporting All"
msgstr "Извоз"
#: editor/project_export.cpp
#, fuzzy
-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
-#, fuzzy
msgid "Export Path"
msgstr "Извези пројекат"
@@ -15615,6 +15683,11 @@ msgid "Export templates for this platform are missing:"
msgstr "Извозни шаблони за ову платформу ниÑу пронађени:"
#: editor/project_export.cpp
+#, fuzzy
+msgid "Project Export"
+msgstr "ОÑнивачи пројекта"
+
+#: editor/project_export.cpp
msgid "Manage Export Templates"
msgstr "Управљај извозним шаблонима"
@@ -18367,7 +18440,7 @@ msgstr ""
#: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp
#: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp
-#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp
+#: scene/3d/collision_polygon.cpp
#, fuzzy
msgid "Polygon"
msgstr "Полигон->UV"
@@ -19016,7 +19089,6 @@ msgid "Use In Baked Light"
msgstr "Изпеци МапеСенчења"
#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
-#: scene/resources/navigation_mesh.cpp
msgid "Cell"
msgstr ""
@@ -19046,6 +19118,19 @@ msgstr "Средина"
msgid "Mask"
msgstr ""
+#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
+#, fuzzy
+msgid "Bake Navigation"
+msgstr "Ðаправи навигациону мрежу"
+
+#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp
+#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp
+#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp
+#: scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Navigation Layers"
+msgstr "Ðаправи навигациону мрежу"
+
#: modules/gridmap/grid_map_editor_plugin.cpp
#, fuzzy
msgid "Next Plane"
@@ -20698,10 +20783,6 @@ 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
#, fuzzy
msgid ""
"Android build template not installed in the project. Install it from the "
@@ -20822,12 +20903,16 @@ msgstr ""
msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version."
msgstr ""
+#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Code Signing"
+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."
+"'apksigner' could not be found. Please check that the command is available "
+"in the Android SDK build-tools directory. The resulting %s is unsigned."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -20847,6 +20932,11 @@ msgid "Could not find keystore, unable to export."
msgstr "ÐеуÑпешно отварање нацрта за извоз:"
#: platform/android/export/export_plugin.cpp
+#, fuzzy
+msgid "Could not start apksigner executable."
+msgstr "Ðе могу покренути подпроцеÑ!"
+
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
@@ -20877,7 +20967,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Unsupported export format!\n"
+msgid "Unsupported export format!"
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -20892,9 +20982,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid ""
-"Android build version mismatch:\n"
-" Template installed: %s\n"
-" Godot Version: %s\n"
+"Android build version mismatch: Template installed: %s, Godot version: %s. "
"Please reinstall Android build template from 'Project' menu."
msgstr ""
"Верзија Android изградње Ñе не подудара:\n"
@@ -20904,12 +20992,12 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Unable to overwrite res://android/build/res/*.xml files with project name"
+"Unable to overwrite res://android/build/res/*.xml files with project name."
msgstr ""
#: platform/android/export/export_plugin.cpp
#, fuzzy
-msgid "Could not export project files to gradle project\n"
+msgid "Could not export project files to gradle project."
msgstr "ÐеуÑпешна измена project.godot-а у путањи пројекта."
#: platform/android/export/export_plugin.cpp
@@ -20925,7 +21013,7 @@ msgstr "Изградња Android Пројекта (gradle)"
#: platform/android/export/export_plugin.cpp
#, fuzzy
msgid ""
-"Building of Android project failed, check output for the error.\n"
+"Building of Android project failed, check output for the error. "
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
"Изградња Android пројекта неуÑпешна, провери излаз за грешке.\n"
@@ -20943,7 +21031,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
#, fuzzy
-msgid "Package not found: %s"
+msgid "Package not found: \"%s\"."
msgstr "Ðнимација није нађена: '%s'"
#: platform/android/export/export_plugin.cpp
@@ -20953,15 +21041,12 @@ msgstr "Прављење контура..."
#: platform/android/export/export_plugin.cpp
#, fuzzy
-msgid ""
-"Could not find template APK to export:\n"
-"%s"
+msgid "Could not find template APK to export: \"%s\"."
msgstr "ÐеуÑпешно отварање нацрта за извоз:"
#: platform/android/export/export_plugin.cpp
msgid ""
-"Missing libraries in the export template for the selected architectures: "
-"%s.\n"
+"Missing libraries in the export template for the selected architectures: %s. "
"Please build a template with all required libraries, or uncheck the missing "
"architectures in the export preset."
msgstr ""
@@ -20973,7 +21058,7 @@ msgstr "Додавање %s..."
#: platform/android/export/export_plugin.cpp
#, fuzzy
-msgid "Could not export project files"
+msgid "Could not export project files."
msgstr "ÐеуÑпело упиÑивање фајла:"
#: platform/android/export/export_plugin.cpp
@@ -21217,6 +21302,17 @@ msgstr "Ðаправи чвор"
msgid "Custom BG Color"
msgstr "Ðаправи чвор"
+#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Prepare Templates"
+msgstr "Управљај извозним шаблонима"
+
+#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Export template not found."
+msgstr "Прилагођени образци објаве ниÑу пронађени."
+
#: platform/iphone/export/export.cpp
#, fuzzy
msgid "App Store Team ID not specified - cannot configure the project."
@@ -21245,25 +21341,34 @@ msgstr "Покрени извезени HTML у уобичајеном претÑ
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not open template for export:"
+msgid "Could not open template for export: \"%s\"."
msgstr "ÐеуÑпешно отварање нацрта за извоз:"
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Invalid export template:"
+msgid "Invalid export template: \"%s\"."
msgstr "Ðеважећи извозни нацрт:"
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not write file:"
+msgid "Could not write file: \"%s\"."
msgstr "ÐеуÑпело упиÑивање фајла:"
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Icon Creation"
+msgstr "ПоÑтави дршку"
+
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not read file:"
+msgid "Could not read file: \"%s\"."
msgstr "ÐеуÑпело упиÑивање фајла:"
#: platform/javascript/export/export.cpp
+msgid "PWA"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
#, fuzzy
msgid "Variant"
msgstr "ОдвојеноÑÑ‚:"
@@ -21339,17 +21444,17 @@ msgstr ""
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not read HTML shell:"
+msgid "Could not read HTML shell: \"%s\"."
msgstr "ÐеуÑпешно читаље произвољне HTML шкољке:"
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not create HTTP server directory:"
+msgid "Could not create HTTP server directory: %s."
msgstr "ÐеуÑпех при прављењу директоријума."
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Error starting HTTP server:"
+msgid "Error starting HTTP server: %d."
msgstr "Грешка памћена Ñцена."
#: platform/javascript/export/export.cpp
@@ -21649,9 +21754,28 @@ msgid "Apple Team ID"
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open icon file \"%s\"."
+msgstr "ÐеуÑпело упиÑивање фајла:"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start xcrun executable."
+msgstr "Ðе могу покренути подпроцеÑ!"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization failed."
+msgstr "Локализација"
+
+#: platform/osx/export/export.cpp
+msgid "Notarization request UUID: \"%s\""
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid ""
-"Note: The notarization process generally takes less than an hour. When the "
-"process is completed, you'll receive an email."
+"The notarization process generally takes less than an hour. When the process "
+"is completed, you'll receive an email."
msgstr ""
#: platform/osx/export/export.cpp
@@ -21667,21 +21791,76 @@ msgid ""
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign failed with error \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign require regex module."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Could not start codesign executable, make sure Xcode command line tools are "
+"installed."
+msgstr ""
+
+#: platform/osx/export/export.cpp platform/windows/export/export.cpp
#, fuzzy
msgid "No identity found."
msgstr "Ðије пронађено!"
#: platform/osx/export/export.cpp
#, fuzzy
+msgid "Cannot sign file %s."
+msgstr "Грешка при чувању TileSet!"
+
+#: platform/osx/export/export.cpp
+msgid "Relative symlinks are not supported, exported \"%s\" might be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "DMG Creation"
+msgstr "Смерови"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start hdiutil executable."
+msgstr "Ðе могу покренути подпроцеÑ!"
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed - file exists."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
msgid "Creating app bundle"
msgstr "Прављење приказа"
#: platform/osx/export/export.cpp
#, fuzzy
-msgid "Could not find template app to export:"
+msgid "Could not find template app to export: \"%s\"."
msgstr "ÐеуÑпешно отварање нацрта за извоз:"
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid export format."
+msgstr "Ðеважећи извозни нацрт:"
+
+#: platform/osx/export/export.cpp
msgid ""
"Relative symlinks are not supported on this OS, the exported project might "
"be broken!"
@@ -21689,7 +21868,7 @@ msgstr ""
#: platform/osx/export/export.cpp
msgid ""
-"Requested template binary '%s' not found. It might be missing from your "
+"Requested template binary \"%s\" not found. It might be missing from your "
"template archive."
msgstr ""
@@ -21731,6 +21910,16 @@ msgstr ""
#: platform/osx/export/export.cpp
#, fuzzy
+msgid "ZIP Creation"
+msgstr "Пројекат"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open file to read from path \"%s\"."
+msgstr "ÐеуÑпешна измена project.godot-а у путањи пројекта."
+
+#: platform/osx/export/export.cpp
+#, fuzzy
msgid "Invalid bundle identifier:"
msgstr "Ðеважећи идентификатор:"
@@ -22056,6 +22245,11 @@ msgid "Debug Algorithm"
msgstr "Дебагер"
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to rename temporary file \"%s\"."
+msgstr "ÐеуÑпех при чувању теме:"
+
+#: platform/windows/export/export.cpp
msgid "Identity Type"
msgstr ""
@@ -22103,6 +22297,70 @@ msgid "Trademarks"
msgstr ""
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Resources Modification"
+msgstr "ÐаÑумична ротација:"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find rcedit executable at \"%s\"."
+msgstr "ÐеуÑпешно отварање нацрта за извоз:"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find wine executable at \"%s\"."
+msgstr "ÐеуÑпешно отварање нацрта за извоз:"
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start rcedit executable, configure rcedit path in the Editor "
+"Settings (Export > Windows > Rcedit)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"rcedit failed to modify executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find signtool executable at \"%s\"."
+msgstr "ÐеуÑпешно отварање нацрта за извоз:"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find osslsigncode executable at \"%s\"."
+msgstr "ÐеуÑпешно отварање нацрта за извоз:"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid identity type."
+msgstr "Ðеважећи идентификатор:"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid timestamp server."
+msgstr "Ðеважеће име."
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start signtool executable, configure signtool path in the Editor "
+"Settings (Export > Windows > Signtool)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Signtool failed to sign executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to remove temporary file \"%s\"."
+msgstr "ÐеуÑпех при чувању теме:"
+
+#: platform/windows/export/export.cpp
msgid ""
"The rcedit tool must be configured in the Editor Settings (Export > Windows "
"> Rcedit) to change the icon or app information data."
@@ -22124,6 +22382,23 @@ msgid "Invalid product version:"
msgstr "Ðеважећи GUID продукт."
#: platform/windows/export/export.cpp
+msgid "Windows executables cannot be >= 4 GiB."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+#, fuzzy
+msgid "Failed to open executable file \"%s\"."
+msgstr "Мора Ñе кориÑтити важећа екÑтензија."
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable file header corrupted."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable \"pck\" section not found."
+msgstr ""
+
+#: platform/windows/export/export.cpp
#, fuzzy
msgid "Windows"
msgstr "Ðов Прозор"
@@ -22140,6 +22415,10 @@ msgstr ""
msgid "Wine"
msgstr ""
+#: platform/x11/export/export.cpp
+msgid "32-bit executables cannot have embedded data >= 4 GiB."
+msgstr ""
+
#: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp
#: scene/resources/texture.cpp
#, fuzzy
@@ -22268,7 +22547,8 @@ msgstr ""
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/3d/light.cpp scene/3d/reflection_probe.cpp
-#: scene/3d/visual_instance.cpp scene/resources/material.cpp
+#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp
+#: scene/resources/material.cpp
#, fuzzy
msgid "Max Distance"
msgstr "Одабери ОдÑтојање:"
@@ -23085,6 +23365,18 @@ msgstr ""
msgid "Edge Connection Margin"
msgstr "Повезивање не уÑпешно"
+#: scene/2d/navigation_2d.cpp
+msgid ""
+"'Navigation2D' node and 'Navigation2D.get_simple_path()' are deprecated and "
+"will be removed in a future version. Use 'Navigation2DServer.map_get_path()' "
+"instead."
+msgstr ""
+
+#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
+#, fuzzy
+msgid "Path Desired Distance"
+msgstr "Одабери ОдÑтојање:"
+
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
msgid "Target Desired Distance"
msgstr ""
@@ -23143,18 +23435,19 @@ msgstr ""
"радио. Молимо поÑтави оÑобину или нацртај многоугао."
#: scene/2d/navigation_polygon.cpp
-#, fuzzy
-msgid ""
-"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
-"node. It only provides navigation data."
-msgstr ""
-"ИнÑтанцаÐавигационогМногоугла мора бити дете или прадете Ðавигација2Д чвору. "
-"Само обезбеђује навигационе податке."
-
-#: scene/2d/navigation_polygon.cpp
msgid "Navpoly"
msgstr ""
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Enter Cost"
+msgstr "Средина Доле"
+
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Travel Cost"
+msgstr "Путуј"
+
#: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp
#: scene/main/canvas_layer.cpp
#, fuzzy
@@ -24397,6 +24690,13 @@ msgstr ""
msgid "Transform Normals"
msgstr "ТранÑформација прекинута."
+#: scene/3d/navigation.cpp
+msgid ""
+"'Navigation' node and 'Navigation.get_simple_path()' are deprecated and will "
+"be removed in a future version. Use 'NavigationServer.map_get_path()' "
+"instead."
+msgstr ""
+
#: scene/3d/navigation.cpp scene/resources/curve.cpp
#, fuzzy
msgid "Up Vector"
@@ -24421,15 +24721,6 @@ msgid ""
"The NavigationAgent can be used only under a Spatial inheriting parent node."
msgstr ""
-#: scene/3d/navigation_mesh_instance.cpp
-#, fuzzy
-msgid ""
-"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
-"It only provides navigation data."
-msgstr ""
-"ÐавМрежнаИнÑтанца мора бити дете или прадете Ðавигационог чвора. Само "
-"обезбећује навигационе податке."
-
#: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp
#, fuzzy
msgid "NavMesh"
@@ -27178,6 +27469,16 @@ msgid "3D Physics"
msgstr "Слика физике %"
#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "2D Navigation"
+msgstr "Ðаправи навигациону мрежу"
+
+#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "3D Navigation"
+msgstr "Ðаправи навигациону мрежу"
+
+#: scene/register_scene_types.cpp
msgid "Use hiDPI"
msgstr ""
@@ -28605,7 +28906,7 @@ msgstr "Прелаз:"
msgid "Refraction"
msgstr "ОдвојеноÑÑ‚:"
-#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp
+#: scene/resources/material.cpp
msgid "Detail"
msgstr ""
@@ -28690,7 +28991,12 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
-msgid "Sample Partition Type"
+msgid "Sampling"
+msgstr "Скала: "
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Partition Type"
msgstr "ПоÑтави Ð’Ñ€Ñту Променљиве"
#: scene/resources/navigation_mesh.cpp
@@ -28708,10 +29014,15 @@ msgid "Source Group Name"
msgstr "Извор"
#: scene/resources/navigation_mesh.cpp
-msgid "Agent"
+msgid "Cells"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Agents"
+msgstr "Ðргументи Главне Сцене"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Max Climb"
msgstr ""
@@ -28721,11 +29032,16 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
+msgid "Regions"
+msgstr "Режим ротације"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
msgid "Merge Size"
msgstr "Споји од Ñцене"
#: scene/resources/navigation_mesh.cpp
-msgid "Edge"
+msgid "Edges"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -28739,6 +29055,11 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
+msgid "Details"
+msgstr "Учитај уобичајено"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
msgid "Sample Distance"
msgstr "Одабери ОдÑтојање:"
@@ -28756,9 +29077,19 @@ msgid "Ledge Spans"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Filter Walkable Low Height Spans"
+msgid "Walkable Low Height Spans"
msgstr ""
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB"
+msgstr "ГенериÑање оÑног поравнаног граничниог оквира (AABB)"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB Offset"
+msgstr "ОфÑет:"
+
#: scene/resources/occluder_shape.cpp
msgid "Spheres"
msgstr ""
@@ -29174,6 +29505,11 @@ msgid "Scenario"
msgstr "Сцена"
#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Navigation Map"
+msgstr "Ðаправи навигациону мрежу"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
msgid "Direct Space State"
msgstr ""
@@ -29191,6 +29527,26 @@ msgstr "Леви линеарни"
msgid "Default Angular Damp"
msgstr ""
+#: scene/resources/world.cpp
+#, fuzzy
+msgid "Default Map Up"
+msgstr "Уобичајено"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Size"
+msgstr "Преглед"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Height"
+msgstr "ТеÑтирање"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Edge Connection Margin"
+msgstr "Повезивање не уÑпешно"
+
#: scene/resources/world_2d.cpp
msgid "Canvas"
msgstr ""
diff --git a/editor/translations/sr_Latn.po b/editor/translations/sr_Latn.po
index 1ae8e98d5d..844e918f2d 100644
--- a/editor/translations/sr_Latn.po
+++ b/editor/translations/sr_Latn.po
@@ -213,9 +213,10 @@ msgid "Data"
msgstr ""
#: core/io/file_access_network.cpp core/register_core_types.cpp
-#: editor/editor_settings.cpp main/main.cpp
+#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
#: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h
+#: scene/gui/file_dialog.cpp
msgid "Network"
msgstr ""
@@ -370,6 +371,15 @@ msgstr ""
msgid "Max Size (KB)"
msgstr ""
+#: core/os/input.cpp
+#, fuzzy
+msgid "Mouse Mode"
+msgstr "Napravi"
+
+#: core/os/input.cpp
+msgid "Use Accumulated Input"
+msgstr ""
+
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: servers/audio_server.cpp
msgid "Device"
@@ -559,7 +569,8 @@ msgstr ""
#: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
-#: main/main.cpp
+#: main/main.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp
msgid "Run"
msgstr ""
@@ -645,24 +656,23 @@ msgid "Main Run Args"
msgstr ""
#: core/project_settings.cpp
-msgid "Search In File Extensions"
+msgid "Scene Naming"
msgstr ""
#: core/project_settings.cpp
-msgid "Script Templates Search Path"
+msgid "Search In File Extensions"
msgstr ""
-#: core/project_settings.cpp editor/editor_node.cpp
-#: editor/plugins/version_control_editor_plugin.cpp
-msgid "Version Control"
+#: core/project_settings.cpp
+msgid "Script Templates Search Path"
msgstr ""
#: core/project_settings.cpp
-msgid "Autoload On Startup"
+msgid "Version Control Autoload On Startup"
msgstr ""
#: core/project_settings.cpp
-msgid "Plugin Name"
+msgid "Version Control Plugin Name"
msgstr ""
#: core/project_settings.cpp scene/2d/collision_object_2d.cpp
@@ -771,7 +781,8 @@ msgid "Quality"
msgstr ""
#: core/project_settings.cpp scene/gui/file_dialog.cpp
-#: scene/main/scene_tree.cpp servers/visual_server.cpp
+#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp
+#: servers/visual_server.cpp
#, fuzzy
msgid "Filters"
msgstr "Filtriraj signale"
@@ -2193,8 +2204,8 @@ msgid "Open"
msgstr "Otvori"
#: editor/dependency_editor.cpp
-msgid "Owners Of:"
-msgstr "Vlasnici Od:"
+msgid "Owners of: %s (Total: %d)"
+msgstr ""
#: editor/dependency_editor.cpp
msgid ""
@@ -2488,7 +2499,7 @@ msgid "Bus Options"
msgstr "Podešavanja Magistrale"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/scene_tree_dock.cpp
+#: editor/project_export.cpp editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr ""
@@ -2744,6 +2755,22 @@ msgid "Choose"
msgstr ""
#: editor/editor_export.cpp
+msgid "Project export for platform:"
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Completed with errors."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Completed successfully."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Failed."
+msgstr ""
+
+#: editor/editor_export.cpp
msgid "Storing File:"
msgstr ""
@@ -2756,6 +2783,26 @@ msgid "Packing"
msgstr ""
#: editor/editor_export.cpp
+msgid "Save PCK"
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Cannot create file \"%s\"."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Failed to export project files."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Can't open file to read from path \"%s\"."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Save ZIP"
+msgstr ""
+
+#: editor/editor_export.cpp
msgid ""
"Target platform requires 'ETC' texture compression for GLES2. Enable 'Import "
"Etc' in Project Settings."
@@ -2859,8 +2906,25 @@ msgstr ""
msgid "Custom release template not found."
msgstr ""
+#: editor/editor_export.cpp
+msgid "Prepare Template"
+msgstr ""
+
+#: editor/editor_export.cpp platform/osx/export/export.cpp
+msgid "The given export path doesn't exist."
+msgstr ""
+
#: editor/editor_export.cpp platform/javascript/export/export.cpp
-msgid "Template file not found:"
+msgid "Template file not found: \"%s\"."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Failed to copy export template."
+msgstr ""
+
+#: editor/editor_export.cpp platform/windows/export/export.cpp
+#: platform/x11/export/export.cpp
+msgid "PCK Embedding"
msgstr ""
#: editor/editor_export.cpp
@@ -3030,9 +3094,9 @@ msgid "Import"
msgstr ""
#: editor/editor_feature_profile.cpp editor/project_export.cpp
-#: platform/android/export/export.cpp platform/javascript/export/export.cpp
-#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
-#: platform/windows/export/export.cpp
+#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#: platform/uwp/export/export.cpp platform/windows/export/export.cpp
msgid "Export"
msgstr ""
@@ -4109,14 +4173,6 @@ msgid ""
"Unable to write to file '%s', file in use, locked or lacking permissions."
msgstr ""
-#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
-msgid "Scene"
-msgstr ""
-
-#: editor/editor_node.cpp
-msgid "Scene Naming"
-msgstr ""
-
#: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp
#: servers/arvr/arvr_interface.cpp
msgid "Interface"
@@ -4236,6 +4292,10 @@ msgid "Default Color Picker Mode"
msgstr ""
#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
+msgid "Version Control"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
#, fuzzy
msgid "Username"
msgstr "Animacija Preimenuj Kanal"
@@ -4264,6 +4324,10 @@ msgstr ""
msgid "Add a new scene."
msgstr ""
+#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
+msgid "Scene"
+msgstr ""
+
#: editor/editor_node.cpp
msgid "Go to previously opened scene."
msgstr ""
@@ -4994,6 +5058,11 @@ msgid ""
"as runnable."
msgstr ""
+#: editor/editor_run_native.cpp
+#, fuzzy
+msgid "Project Run"
+msgstr "Izmjeni Selekciju Krivulje"
+
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
msgstr ""
@@ -5253,7 +5322,9 @@ msgid "Draw Spaces"
msgstr ""
#: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp
-#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp
+#: scene/main/scene_tree.cpp scene/resources/world.cpp
+#: scene/resources/world_2d.cpp
#, fuzzy
msgid "Navigation"
msgstr "Napravi"
@@ -6669,7 +6740,7 @@ msgstr ""
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp
-#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp
+#: scene/gui/control.cpp
#, fuzzy
msgid "Filter"
msgstr "Filtriraj signale"
@@ -6952,6 +7023,18 @@ msgid "Saving..."
msgstr ""
#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used as a normal map in 3D. Enabling red-green "
+"texture compression to reduce memory usage (blue channel is discarded)."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap "
+"generation and VRAM texture compression."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
msgid "2D, Detect 3D"
msgstr ""
@@ -7612,11 +7695,20 @@ msgid "New Anim"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+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 "Rename Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Delete Animation?"
msgstr ""
@@ -7634,11 +7726,6 @@ 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 "Duplicate Animation"
msgstr ""
@@ -7781,10 +7868,6 @@ msgid "Pin AnimationPlayer"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Create New Animation"
-msgstr ""
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Name:"
msgstr ""
@@ -9839,6 +9922,7 @@ msgid "Points"
msgstr ""
#: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp
+#: scene/resources/navigation_mesh.cpp
msgid "Polygons"
msgstr "Poligoni"
@@ -11194,8 +11278,9 @@ msgid "Invalid geometry, can't replace by mesh."
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
-msgid "Convert to Mesh2D"
-msgstr ""
+#, fuzzy
+msgid "Convert to MeshInstance2D"
+msgstr "Konvertuj u CPUParticles2D"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Invalid geometry, can't create polygon."
@@ -12173,8 +12258,7 @@ msgid "Select the previous shape, subtile, or Tile."
msgstr ""
#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp
-#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp
-#: scene/resources/texture.cpp
+#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp
msgid "Region"
msgstr ""
@@ -13641,31 +13725,10 @@ 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 "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 "Export Path"
msgstr ""
@@ -13800,6 +13863,11 @@ msgid "Export templates for this platform are missing:"
msgstr ""
#: editor/project_export.cpp
+#, fuzzy
+msgid "Project Export"
+msgstr "Izmjeni Selekciju Krivulje"
+
+#: editor/project_export.cpp
msgid "Manage Export Templates"
msgstr ""
@@ -16085,7 +16153,7 @@ msgstr ""
#: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp
#: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp
-#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp
+#: scene/3d/collision_polygon.cpp
#, fuzzy
msgid "Polygon"
msgstr "Poligoni"
@@ -16666,7 +16734,6 @@ msgid "Use In Baked Light"
msgstr ""
#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
-#: scene/resources/navigation_mesh.cpp
msgid "Cell"
msgstr ""
@@ -16695,6 +16762,19 @@ msgstr "Centriraj ÄŒvor"
msgid "Mask"
msgstr ""
+#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
+#, fuzzy
+msgid "Bake Navigation"
+msgstr "Napravi"
+
+#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp
+#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp
+#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp
+#: scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Navigation Layers"
+msgstr "Napravi"
+
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Plane"
msgstr ""
@@ -18180,10 +18260,6 @@ 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."
@@ -18287,12 +18363,16 @@ msgstr ""
msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version."
msgstr ""
+#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Code Signing"
+msgstr "Animacija Uduplaj KljuÄeve"
+
#: 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."
+"'apksigner' could not be found. Please check that the command is available "
+"in the Android SDK build-tools directory. The resulting %s is unsigned."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18308,6 +18388,10 @@ msgid "Could not find keystore, unable to export."
msgstr ""
#: platform/android/export/export_plugin.cpp
+msgid "Could not start apksigner executable."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
@@ -18336,7 +18420,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Unsupported export format!\n"
+msgid "Unsupported export format!"
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18347,19 +18431,17 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Android build version mismatch:\n"
-" Template installed: %s\n"
-" Godot Version: %s\n"
+"Android build version mismatch: Template installed: %s, Godot version: %s. "
"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"
+"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"
+msgid "Could not export project files to gradle project."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18372,7 +18454,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Building of Android project failed, check output for the error.\n"
+"Building of Android project failed, check output for the error. "
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
@@ -18387,7 +18469,7 @@ msgid ""
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Package not found: %s"
+msgid "Package not found: \"%s\"."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18395,15 +18477,12 @@ msgid "Creating APK..."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid ""
-"Could not find template APK to export:\n"
-"%s"
+msgid "Could not find template APK to export: \"%s\"."
msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Missing libraries in the export template for the selected architectures: "
-"%s.\n"
+"Missing libraries in the export template for the selected architectures: %s. "
"Please build a template with all required libraries, or uncheck the missing "
"architectures in the export preset."
msgstr ""
@@ -18413,7 +18492,7 @@ msgid "Adding files..."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Could not export project files"
+msgid "Could not export project files."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18649,6 +18728,15 @@ msgstr "Animacija Uduplaj KljuÄeve"
msgid "Custom BG Color"
msgstr "Animacija Uduplaj KljuÄeve"
+#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
+#: platform/osx/export/export.cpp
+msgid "Prepare Templates"
+msgstr ""
+
+#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
+msgid "Export template not found."
+msgstr ""
+
#: platform/iphone/export/export.cpp
msgid "App Store Team ID not specified - cannot configure the project."
msgstr ""
@@ -18670,19 +18758,29 @@ msgid "Run exported HTML in the system's default browser."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not open template for export:"
+msgid "Could not open template for export: \"%s\"."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Invalid export template:"
+#, fuzzy
+msgid "Invalid export template: \"%s\"."
+msgstr "Nedozvoljen indeks tipa %s za bazu tipa %s"
+
+#: platform/javascript/export/export.cpp
+msgid "Could not write file: \"%s\"."
msgstr ""
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Icon Creation"
+msgstr "Izmeni Konekciju:"
+
#: platform/javascript/export/export.cpp
-msgid "Could not write file:"
+msgid "Could not read file: \"%s\"."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not read file:"
+msgid "PWA"
msgstr ""
#: platform/javascript/export/export.cpp
@@ -18759,15 +18857,15 @@ msgid "Icon 512 X 512"
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not read HTML shell:"
+msgid "Could not read HTML shell: \"%s\"."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not create HTTP server directory:"
+msgid "Could not create HTTP server directory: %s."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Error starting HTTP server:"
+msgid "Error starting HTTP server: %d."
msgstr ""
#: platform/javascript/export/export.cpp
@@ -19044,9 +19142,26 @@ msgid "Apple Team ID"
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Could not open icon file \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Could not start xcrun executable."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization failed."
+msgstr "Napravi"
+
+#: platform/osx/export/export.cpp
+msgid "Notarization request UUID: \"%s\""
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid ""
-"Note: The notarization process generally takes less than an hour. When the "
-"process is completed, you'll receive an email."
+"The notarization process generally takes less than an hour. When the process "
+"is completed, you'll receive an email."
msgstr ""
#: platform/osx/export/export.cpp
@@ -19062,18 +19177,71 @@ msgid ""
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign failed with error \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign require regex module."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Could not start codesign executable, make sure Xcode command line tools are "
+"installed."
+msgstr ""
+
+#: platform/osx/export/export.cpp platform/windows/export/export.cpp
msgid "No identity found."
msgstr "Identitet nije pronađen."
#: platform/osx/export/export.cpp
+msgid "Cannot sign file %s."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Relative symlinks are not supported, exported \"%s\" might be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "DMG Creation"
+msgstr "Sve sekcije"
+
+#: platform/osx/export/export.cpp
+msgid "Could not start hdiutil executable."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed - file exists."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed."
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid "Creating app bundle"
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Could not find template app to export:"
+msgid "Could not find template app to export: \"%s\"."
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid export format."
+msgstr "Homogenost Boje."
+
+#: platform/osx/export/export.cpp
msgid ""
"Relative symlinks are not supported on this OS, the exported project might "
"be broken!"
@@ -19081,7 +19249,7 @@ msgstr ""
#: platform/osx/export/export.cpp
msgid ""
-"Requested template binary '%s' not found. It might be missing from your "
+"Requested template binary \"%s\" not found. It might be missing from your "
"template archive."
msgstr ""
@@ -19122,6 +19290,15 @@ msgid "Sending archive for notarization"
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "ZIP Creation"
+msgstr "Izmjeni Selekciju Krivulje"
+
+#: platform/osx/export/export.cpp
+msgid "Could not open file to read from path \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr ""
@@ -19421,6 +19598,10 @@ msgid "Debug Algorithm"
msgstr ""
#: platform/windows/export/export.cpp
+msgid "Failed to rename temporary file \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
msgid "Identity Type"
msgstr ""
@@ -19465,6 +19646,64 @@ msgid "Trademarks"
msgstr ""
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Resources Modification"
+msgstr "Kontanta"
+
+#: platform/windows/export/export.cpp
+msgid "Could not find rcedit executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find wine executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start rcedit executable, configure rcedit path in the Editor "
+"Settings (Export > Windows > Rcedit)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"rcedit failed to modify executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find signtool executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find osslsigncode executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid identity type."
+msgstr "Neispravni argumenti za konstrukciju '%s'"
+
+#: platform/windows/export/export.cpp
+msgid "Invalid timestamp server."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start signtool executable, configure signtool path in the Editor "
+"Settings (Export > Windows > Signtool)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Signtool failed to sign executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Failed to remove temporary file \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
msgid ""
"The rcedit tool must be configured in the Editor Settings (Export > Windows "
"> Rcedit) to change the icon or app information data."
@@ -19483,6 +19722,22 @@ msgid "Invalid product version:"
msgstr ""
#: platform/windows/export/export.cpp
+msgid "Windows executables cannot be >= 4 GiB."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Failed to open executable file \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable file header corrupted."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable \"pck\" section not found."
+msgstr ""
+
+#: platform/windows/export/export.cpp
msgid "Windows"
msgstr ""
@@ -19498,6 +19753,10 @@ msgstr ""
msgid "Wine"
msgstr ""
+#: platform/x11/export/export.cpp
+msgid "32-bit executables cannot have embedded data >= 4 GiB."
+msgstr ""
+
#: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp
#: scene/resources/texture.cpp
msgid "Frames"
@@ -19612,7 +19871,8 @@ msgstr ""
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/3d/light.cpp scene/3d/reflection_probe.cpp
-#: scene/3d/visual_instance.cpp scene/resources/material.cpp
+#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp
+#: scene/resources/material.cpp
msgid "Max Distance"
msgstr ""
@@ -20351,6 +20611,17 @@ msgstr ""
msgid "Edge Connection Margin"
msgstr "Izmeni Konekciju:"
+#: scene/2d/navigation_2d.cpp
+msgid ""
+"'Navigation2D' node and 'Navigation2D.get_simple_path()' are deprecated and "
+"will be removed in a future version. Use 'Navigation2DServer.map_get_path()' "
+"instead."
+msgstr ""
+
+#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
+msgid "Path Desired Distance"
+msgstr ""
+
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
msgid "Target Desired Distance"
msgstr ""
@@ -20402,13 +20673,16 @@ msgid ""
msgstr ""
#: scene/2d/navigation_polygon.cpp
-msgid ""
-"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
-"node. It only provides navigation data."
+msgid "Navpoly"
msgstr ""
-#: scene/2d/navigation_polygon.cpp
-msgid "Navpoly"
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Enter Cost"
+msgstr "Centriraj ÄŒvor"
+
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+msgid "Travel Cost"
msgstr ""
#: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp
@@ -21502,6 +21776,13 @@ msgstr ""
msgid "Transform Normals"
msgstr "Transformacija homogenosti."
+#: scene/3d/navigation.cpp
+msgid ""
+"'Navigation' node and 'Navigation.get_simple_path()' are deprecated and will "
+"be removed in a future version. Use 'NavigationServer.map_get_path()' "
+"instead."
+msgstr ""
+
#: scene/3d/navigation.cpp scene/resources/curve.cpp
msgid "Up Vector"
msgstr ""
@@ -21523,12 +21804,6 @@ msgid ""
"The NavigationAgent can be used only under a Spatial inheriting parent node."
msgstr ""
-#: scene/3d/navigation_mesh_instance.cpp
-msgid ""
-"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
-"It only provides navigation data."
-msgstr ""
-
#: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp
msgid "NavMesh"
msgstr ""
@@ -24028,6 +24303,16 @@ msgid "3D Physics"
msgstr ""
#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "2D Navigation"
+msgstr "Napravi"
+
+#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "3D Navigation"
+msgstr "Napravi"
+
+#: scene/register_scene_types.cpp
msgid "Use hiDPI"
msgstr ""
@@ -25379,7 +25664,7 @@ msgstr "Tranzicija: "
msgid "Refraction"
msgstr "Odvajanje:"
-#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp
+#: scene/resources/material.cpp
msgid "Detail"
msgstr ""
@@ -25457,8 +25742,14 @@ msgid "Visible Instance Count"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Sample Partition Type"
-msgstr ""
+#, fuzzy
+msgid "Sampling"
+msgstr "Razmera"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Partition Type"
+msgstr "Odvajanje:"
#: scene/resources/navigation_mesh.cpp
msgid "Parsed Geometry Type"
@@ -25473,7 +25764,11 @@ msgid "Source Group Name"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Agent"
+msgid "Cells"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
+msgid "Agents"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -25485,11 +25780,16 @@ msgid "Max Slope"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Regions"
+msgstr "Uduplaj Selekciju"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Merge Size"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Edge"
+msgid "Edges"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -25502,6 +25802,10 @@ msgid "Verts Per Poly"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+msgid "Details"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
msgid "Sample Distance"
msgstr ""
@@ -25518,9 +25822,18 @@ msgid "Ledge Spans"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Filter Walkable Low Height Spans"
+msgid "Walkable Low Height Spans"
msgstr ""
+#: scene/resources/navigation_mesh.cpp
+msgid "Baking AABB"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB Offset"
+msgstr "Obriši Selekciju"
+
#: scene/resources/occluder_shape.cpp
msgid "Spheres"
msgstr ""
@@ -25903,6 +26216,11 @@ msgid "Scenario"
msgstr ""
#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Navigation Map"
+msgstr "Napravi"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
msgid "Direct Space State"
msgstr ""
@@ -25919,6 +26237,26 @@ msgstr "Levi Linearni"
msgid "Default Angular Damp"
msgstr ""
+#: scene/resources/world.cpp
+#, fuzzy
+msgid "Default Map Up"
+msgstr "Vrednost:"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Size"
+msgstr "Traži Zamenu za:"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Height"
+msgstr "Traži Zamenu za:"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Edge Connection Margin"
+msgstr "Izmeni Konekciju:"
+
#: scene/resources/world_2d.cpp
msgid "Canvas"
msgstr ""
diff --git a/editor/translations/sv.po b/editor/translations/sv.po
index c7d5e874e1..61e607d63d 100644
--- a/editor/translations/sv.po
+++ b/editor/translations/sv.po
@@ -243,9 +243,10 @@ msgid "Data"
msgstr ""
#: core/io/file_access_network.cpp core/register_core_types.cpp
-#: editor/editor_settings.cpp main/main.cpp
+#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
#: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h
+#: scene/gui/file_dialog.cpp
#, fuzzy
msgid "Network"
msgstr "Nätverksprofilerare"
@@ -404,6 +405,15 @@ msgstr ""
msgid "Max Size (KB)"
msgstr ""
+#: core/os/input.cpp
+#, fuzzy
+msgid "Mouse Mode"
+msgstr "Växla Läge"
+
+#: core/os/input.cpp
+msgid "Use Accumulated Input"
+msgstr ""
+
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: servers/audio_server.cpp
msgid "Device"
@@ -603,7 +613,8 @@ msgstr "Beskrivning"
#: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
-#: main/main.cpp
+#: main/main.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp
msgid "Run"
msgstr "Kör"
@@ -693,6 +704,11 @@ msgid "Main Run Args"
msgstr ""
#: core/project_settings.cpp
+#, fuzzy
+msgid "Scene Naming"
+msgstr "Scen Filsökväg:"
+
+#: core/project_settings.cpp
msgid "Search In File Extensions"
msgstr ""
@@ -700,19 +716,15 @@ msgstr ""
msgid "Script Templates Search Path"
msgstr ""
-#: core/project_settings.cpp editor/editor_node.cpp
-#: editor/plugins/version_control_editor_plugin.cpp
-msgid "Version Control"
-msgstr "Versionshantering"
-
#: core/project_settings.cpp
-msgid "Autoload On Startup"
-msgstr ""
+#, fuzzy
+msgid "Version Control Autoload On Startup"
+msgstr "Versionshantering"
#: core/project_settings.cpp
#, fuzzy
-msgid "Plugin Name"
-msgstr "Plugin Namn:"
+msgid "Version Control Plugin Name"
+msgstr "Versionshantering"
#: core/project_settings.cpp scene/2d/collision_object_2d.cpp
#: scene/3d/collision_object.cpp scene/gui/control.cpp
@@ -829,7 +841,8 @@ msgid "Quality"
msgstr ""
#: core/project_settings.cpp scene/gui/file_dialog.cpp
-#: scene/main/scene_tree.cpp servers/visual_server.cpp
+#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp
+#: servers/visual_server.cpp
#, fuzzy
msgid "Filters"
msgstr "Filter:"
@@ -2263,8 +2276,8 @@ msgid "Open"
msgstr "Öppna"
#: editor/dependency_editor.cpp
-msgid "Owners Of:"
-msgstr "Ägare av:"
+msgid "Owners of: %s (Total: %d)"
+msgstr ""
#: editor/dependency_editor.cpp
#, fuzzy
@@ -2570,7 +2583,7 @@ msgid "Bus Options"
msgstr "Buss-alternativ"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/scene_tree_dock.cpp
+#: editor/project_export.cpp editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "Duplicera"
@@ -2828,6 +2841,25 @@ msgid "Choose"
msgstr "Välj"
#: editor/editor_export.cpp
+msgid "Project export for platform:"
+msgstr ""
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Completed with errors."
+msgstr "Kopiera Nod-Sökväg"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Completed successfully."
+msgstr "Paketet installerades!"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed."
+msgstr "Misslyckades:"
+
+#: editor/editor_export.cpp
msgid "Storing File:"
msgstr "Lagrar Fil:"
@@ -2840,6 +2872,31 @@ msgid "Packing"
msgstr "Packar"
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save PCK"
+msgstr "Spara Som"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Cannot create file \"%s\"."
+msgstr "Kunde inte skapa mapp."
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to export project files."
+msgstr "Kunde inte exportera projektfiler"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Can't open file to read from path \"%s\"."
+msgstr "Kan inte öppna fil för skrivande:"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save ZIP"
+msgstr "Spara Som"
+
+#: editor/editor_export.cpp
msgid ""
"Target platform requires 'ETC' texture compression for GLES2. Enable 'Import "
"Etc' in Project Settings."
@@ -2957,11 +3014,32 @@ msgstr "Mallfil hittades inte."
msgid "Custom release template not found."
msgstr "Anpassad release mall hittades inte."
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Prepare Template"
+msgstr "Hantera Mallar"
+
+#: editor/editor_export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "The given export path doesn't exist."
+msgstr "Den angivna export vägen finns inte:"
+
#: editor/editor_export.cpp platform/javascript/export/export.cpp
-msgid "Template file not found:"
+#, fuzzy
+msgid "Template file not found: \"%s\"."
msgstr "Mallfil hittades inte:"
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to copy export template."
+msgstr "Hantera exportmallar..."
+
+#: editor/editor_export.cpp platform/windows/export/export.cpp
+#: platform/x11/export/export.cpp
+msgid "PCK Embedding"
+msgstr ""
+
+#: editor/editor_export.cpp
msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB."
msgstr "Den inbäddade PCK får inte vara större än 4 GiB på 32 bitars exporter."
@@ -3141,9 +3219,9 @@ msgid "Import"
msgstr "Importera"
#: editor/editor_feature_profile.cpp editor/project_export.cpp
-#: platform/android/export/export.cpp platform/javascript/export/export.cpp
-#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
-#: platform/windows/export/export.cpp
+#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#: platform/uwp/export/export.cpp platform/windows/export/export.cpp
msgid "Export"
msgstr "Exportera"
@@ -4347,15 +4425,6 @@ msgid ""
"Unable to write to file '%s', file in use, locked or lacking permissions."
msgstr ""
-#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
-msgid "Scene"
-msgstr "Scen"
-
-#: editor/editor_node.cpp
-#, fuzzy
-msgid "Scene Naming"
-msgstr "Scen Filsökväg:"
-
#: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp
#: servers/arvr/arvr_interface.cpp
msgid "Interface"
@@ -4482,6 +4551,10 @@ msgid "Default Color Picker Mode"
msgstr ""
#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
+msgid "Version Control"
+msgstr "Versionshantering"
+
+#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
#, fuzzy
msgid "Username"
msgstr "Byt namn"
@@ -4510,6 +4583,10 @@ msgstr "Växla distraktionsfritt läge."
msgid "Add a new scene."
msgstr "Lägg till en ny scen."
+#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
+msgid "Scene"
+msgstr "Scen"
+
#: editor/editor_node.cpp
msgid "Go to previously opened scene."
msgstr "Gå till föregående öppna scen."
@@ -5272,6 +5349,11 @@ msgid ""
"as runnable."
msgstr ""
+#: editor/editor_run_native.cpp
+#, fuzzy
+msgid "Project Run"
+msgstr "Projekt"
+
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
msgstr "Skriv din logik i _run() metoden."
@@ -5549,7 +5631,9 @@ msgid "Draw Spaces"
msgstr ""
#: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp
-#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp
+#: scene/main/scene_tree.cpp scene/resources/world.cpp
+#: scene/resources/world_2d.cpp
#, fuzzy
msgid "Navigation"
msgstr "Animations-Node"
@@ -7064,7 +7148,7 @@ msgstr ""
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp
-#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp
+#: scene/gui/control.cpp
#, fuzzy
msgid "Filter"
msgstr "Filter:"
@@ -7357,6 +7441,18 @@ msgid "Saving..."
msgstr "Sparar..."
#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used as a normal map in 3D. Enabling red-green "
+"texture compression to reduce memory usage (blue channel is discarded)."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap "
+"generation and VRAM texture compression."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
msgid "2D, Detect 3D"
msgstr ""
@@ -8063,11 +8159,20 @@ msgid "New Anim"
msgstr "Ny Anim"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+msgstr "Skapa Ny Animation"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Change Animation Name:"
msgstr "Ändra Animationsnamn:"
#: editor/plugins/animation_player_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Rename Animation"
+msgstr "Byt namn på Animation"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Delete Animation?"
msgstr "Ta bort Animation?"
@@ -8087,11 +8192,6 @@ msgid "Animation name already exists!"
msgstr "ERROR: Animationsnamn finns redan!"
#: editor/plugins/animation_player_editor_plugin.cpp
-#: editor/plugins/sprite_frames_editor_plugin.cpp
-msgid "Rename Animation"
-msgstr "Byt namn på Animation"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate Animation"
msgstr "Duplicera Animation"
@@ -8239,10 +8339,6 @@ msgid "Pin AnimationPlayer"
msgstr "Klistra in Animation"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Create New Animation"
-msgstr "Skapa Ny Animation"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Name:"
msgstr ""
@@ -10390,6 +10486,7 @@ msgid "Points"
msgstr "Flytta Ner"
#: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp
+#: scene/resources/navigation_mesh.cpp
#, fuzzy
msgid "Polygons"
msgstr "Redigera Polygon"
@@ -11827,7 +11924,7 @@ msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
#, fuzzy
-msgid "Convert to Mesh2D"
+msgid "Convert to MeshInstance2D"
msgstr "Konvertera till %s"
#: editor/plugins/sprite_editor_plugin.cpp
@@ -12876,8 +12973,7 @@ msgid "Select the previous shape, subtile, or Tile."
msgstr ""
#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp
-#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp
-#: scene/resources/texture.cpp
+#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp
#, fuzzy
msgid "Region"
msgstr "Raw-Läge"
@@ -14382,32 +14478,11 @@ 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
#, fuzzy
msgid "Exporting All"
msgstr "Exportera"
#: editor/project_export.cpp
-msgid "The given export path doesn't exist:"
-msgstr "Den angivna export vägen finns inte:"
-
-#: editor/project_export.cpp
-msgid "Export templates for this platform are missing/corrupted:"
-msgstr ""
-
-#: editor/project_export.cpp
#, fuzzy
msgid "Export Path"
msgstr "Exportera Projekt"
@@ -14551,6 +14626,11 @@ msgid "Export templates for this platform are missing:"
msgstr ""
#: editor/project_export.cpp
+#, fuzzy
+msgid "Project Export"
+msgstr "Projektgrundare"
+
+#: editor/project_export.cpp
msgid "Manage Export Templates"
msgstr ""
@@ -16921,7 +17001,7 @@ msgstr ""
#: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp
#: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp
-#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp
+#: scene/3d/collision_polygon.cpp
#, fuzzy
msgid "Polygon"
msgstr "Redigera Polygon"
@@ -17535,7 +17615,6 @@ msgid "Use In Baked Light"
msgstr "Höger"
#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
-#: scene/resources/navigation_mesh.cpp
msgid "Cell"
msgstr ""
@@ -17565,6 +17644,19 @@ msgstr "Skapa Node"
msgid "Mask"
msgstr ""
+#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
+#, fuzzy
+msgid "Bake Navigation"
+msgstr "Animations-Node"
+
+#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp
+#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp
+#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp
+#: scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Navigation Layers"
+msgstr "Animations-Node"
+
#: modules/gridmap/grid_map_editor_plugin.cpp
#, fuzzy
msgid "Next Plane"
@@ -19116,10 +19208,6 @@ msgid "Could not execute on device."
msgstr "Kunde inte skapa mapp."
#: 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."
@@ -19223,12 +19311,16 @@ msgstr ""
msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version."
msgstr ""
+#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Code Signing"
+msgstr "Signaler"
+
#: 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."
+"'apksigner' could not be found. Please check that the command is available "
+"in the Android SDK build-tools directory. The resulting %s is unsigned."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -19247,6 +19339,11 @@ msgid "Could not find keystore, unable to export."
msgstr "Det gick inte att hitta nyckellager, det gick inte att exportera."
#: platform/android/export/export_plugin.cpp
+#, fuzzy
+msgid "Could not start apksigner executable."
+msgstr "Kunde inte starta underprocess!"
+
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
@@ -19277,7 +19374,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Unsupported export format!\n"
+msgid "Unsupported export format!"
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -19288,20 +19385,19 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Android build version mismatch:\n"
-" Template installed: %s\n"
-" Godot Version: %s\n"
+"Android build version mismatch: Template installed: %s, Godot version: %s. "
"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"
+"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 ""
+#, fuzzy
+msgid "Could not export project files to gradle project."
+msgstr "Kunde inte exportera projektfiler"
#: platform/android/export/export_plugin.cpp
msgid "Could not write expansion package file!"
@@ -19313,7 +19409,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Building of Android project failed, check output for the error.\n"
+"Building of Android project failed, check output for the error. "
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
@@ -19329,7 +19425,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
#, fuzzy
-msgid "Package not found: %s"
+msgid "Package not found: \"%s\"."
msgstr "Animeringsverktyg"
#: platform/android/export/export_plugin.cpp
@@ -19339,15 +19435,12 @@ msgstr "Skapar konturer..."
#: platform/android/export/export_plugin.cpp
#, fuzzy
-msgid ""
-"Could not find template APK to export:\n"
-"%s"
+msgid "Could not find template APK to export: \"%s\"."
msgstr "Kunde inte öppna mall för export:"
#: platform/android/export/export_plugin.cpp
msgid ""
-"Missing libraries in the export template for the selected architectures: "
-"%s.\n"
+"Missing libraries in the export template for the selected architectures: %s. "
"Please build a template with all required libraries, or uncheck the missing "
"architectures in the export preset."
msgstr ""
@@ -19358,7 +19451,8 @@ msgid "Adding files..."
msgstr "Lägger till %s..."
#: platform/android/export/export_plugin.cpp
-msgid "Could not export project files"
+#, fuzzy
+msgid "Could not export project files."
msgstr "Kunde inte exportera projektfiler"
#: platform/android/export/export_plugin.cpp
@@ -19600,6 +19694,17 @@ msgstr "Klipp ut Noder"
msgid "Custom BG Color"
msgstr "Klipp ut Noder"
+#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Prepare Templates"
+msgstr "Hantera Mallar"
+
+#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Export template not found."
+msgstr "Anpassad release mall hittades inte."
+
#: platform/iphone/export/export.cpp
msgid "App Store Team ID not specified - cannot configure the project."
msgstr ""
@@ -19621,23 +19726,35 @@ msgid "Run exported HTML in the system's default browser."
msgstr "Kör exporterad HTML i systemets standardwebbläsare."
#: platform/javascript/export/export.cpp
-msgid "Could not open template for export:"
+#, fuzzy
+msgid "Could not open template for export: \"%s\"."
msgstr "Kunde inte öppna mall för export:"
#: platform/javascript/export/export.cpp
-msgid "Invalid export template:"
-msgstr ""
+#, fuzzy
+msgid "Invalid export template: \"%s\"."
+msgstr "Måste använda en giltigt filändelse."
#: platform/javascript/export/export.cpp
-msgid "Could not write file:"
+#, fuzzy
+msgid "Could not write file: \"%s\"."
msgstr "Kunde inte skriva till filen:"
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Icon Creation"
+msgstr "Innehåll:"
+
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not read file:"
+msgid "Could not read file: \"%s\"."
msgstr "Kunde inte skriva till filen:"
#: platform/javascript/export/export.cpp
+msgid "PWA"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
#, fuzzy
msgid "Variant"
msgstr "Sektioner:"
@@ -19713,15 +19830,17 @@ msgstr ""
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not read HTML shell:"
+msgid "Could not read HTML shell: \"%s\"."
msgstr "Kunde inte skriva till filen:"
#: platform/javascript/export/export.cpp
-msgid "Could not create HTTP server directory:"
+#, fuzzy
+msgid "Could not create HTTP server directory: %s."
msgstr "Kunde inte skapa HTTP-serverkatalog:"
#: platform/javascript/export/export.cpp
-msgid "Error starting HTTP server:"
+#, fuzzy
+msgid "Error starting HTTP server: %d."
msgstr "Fel vid start av HTTP-server:"
#: platform/javascript/export/export.cpp
@@ -20019,9 +20138,28 @@ msgid "Apple Team ID"
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open icon file \"%s\"."
+msgstr "Kunde inte exportera projektfiler"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start xcrun executable."
+msgstr "Kunde inte starta underprocess!"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization failed."
+msgstr "Lokalisering"
+
+#: platform/osx/export/export.cpp
+msgid "Notarization request UUID: \"%s\""
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid ""
-"Note: The notarization process generally takes less than an hour. When the "
-"process is completed, you'll receive an email."
+"The notarization process generally takes less than an hour. When the process "
+"is completed, you'll receive an email."
msgstr ""
#: platform/osx/export/export.cpp
@@ -20037,21 +20175,76 @@ msgid ""
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign failed with error \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign require regex module."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Could not start codesign executable, make sure Xcode command line tools are "
+"installed."
+msgstr ""
+
+#: platform/osx/export/export.cpp platform/windows/export/export.cpp
#, fuzzy
msgid "No identity found."
msgstr "Hittades inte!"
#: platform/osx/export/export.cpp
#, fuzzy
+msgid "Cannot sign file %s."
+msgstr "Fel vid sparande av fil: %s"
+
+#: platform/osx/export/export.cpp
+msgid "Relative symlinks are not supported, exported \"%s\" might be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "DMG Creation"
+msgstr "Riktningar"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start hdiutil executable."
+msgstr "Kunde inte starta underprocess!"
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed - file exists."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
msgid "Creating app bundle"
msgstr "Skapar Miniatyr"
#: platform/osx/export/export.cpp
#, fuzzy
-msgid "Could not find template app to export:"
+msgid "Could not find template app to export: \"%s\"."
msgstr "Kunde inte öppna mall för export:"
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid export format."
+msgstr "Ogiltig Sökväg."
+
+#: platform/osx/export/export.cpp
msgid ""
"Relative symlinks are not supported on this OS, the exported project might "
"be broken!"
@@ -20059,7 +20252,7 @@ msgstr ""
#: platform/osx/export/export.cpp
msgid ""
-"Requested template binary '%s' not found. It might be missing from your "
+"Requested template binary \"%s\" not found. It might be missing from your "
"template archive."
msgstr ""
@@ -20101,6 +20294,16 @@ msgstr ""
#: platform/osx/export/export.cpp
#, fuzzy
+msgid "ZIP Creation"
+msgstr "Projekt"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open file to read from path \"%s\"."
+msgstr "Kunde inte öppna mall för export:"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
msgid "Invalid bundle identifier:"
msgstr "Ogiltig identifierare:"
@@ -20413,6 +20616,11 @@ msgid "Debug Algorithm"
msgstr ""
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to rename temporary file \"%s\"."
+msgstr "Kan inte spara tema till fil:"
+
+#: platform/windows/export/export.cpp
msgid "Identity Type"
msgstr ""
@@ -20459,6 +20667,70 @@ msgid "Trademarks"
msgstr ""
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Resources Modification"
+msgstr "Slumpmässig Rotation:"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find rcedit executable at \"%s\"."
+msgstr "Det gick inte att hitta nyckellager, det gick inte att exportera."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find wine executable at \"%s\"."
+msgstr "Det gick inte att hitta nyckellager, det gick inte att exportera."
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start rcedit executable, configure rcedit path in the Editor "
+"Settings (Export > Windows > Rcedit)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"rcedit failed to modify executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find signtool executable at \"%s\"."
+msgstr "Det gick inte att hitta nyckellager, det gick inte att exportera."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find osslsigncode executable at \"%s\"."
+msgstr "Det gick inte att hitta nyckellager, det gick inte att exportera."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid identity type."
+msgstr "Ogiltig identifierare:"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid timestamp server."
+msgstr "Ogiltigt namn."
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start signtool executable, configure signtool path in the Editor "
+"Settings (Export > Windows > Signtool)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Signtool failed to sign executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to remove temporary file \"%s\"."
+msgstr "Kan inte spara tema till fil:"
+
+#: platform/windows/export/export.cpp
msgid ""
"The rcedit tool must be configured in the Editor Settings (Export > Windows "
"> Rcedit) to change the icon or app information data."
@@ -20480,6 +20752,23 @@ msgid "Invalid product version:"
msgstr "Ogiltig produkt GUID."
#: platform/windows/export/export.cpp
+msgid "Windows executables cannot be >= 4 GiB."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+#, fuzzy
+msgid "Failed to open executable file \"%s\"."
+msgstr "Måste använda en giltigt filändelse."
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable file header corrupted."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable \"pck\" section not found."
+msgstr ""
+
+#: platform/windows/export/export.cpp
#, fuzzy
msgid "Windows"
msgstr "Nytt Fönster"
@@ -20496,6 +20785,10 @@ msgstr ""
msgid "Wine"
msgstr ""
+#: platform/x11/export/export.cpp
+msgid "32-bit executables cannot have embedded data >= 4 GiB."
+msgstr ""
+
#: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp
#: scene/resources/texture.cpp
#, fuzzy
@@ -20619,7 +20912,8 @@ msgstr ""
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/3d/light.cpp scene/3d/reflection_probe.cpp
-#: scene/3d/visual_instance.cpp scene/resources/material.cpp
+#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp
+#: scene/resources/material.cpp
#, fuzzy
msgid "Max Distance"
msgstr "Instans"
@@ -21393,6 +21687,18 @@ msgstr ""
msgid "Edge Connection Margin"
msgstr "Redigera Koppling:"
+#: scene/2d/navigation_2d.cpp
+msgid ""
+"'Navigation2D' node and 'Navigation2D.get_simple_path()' are deprecated and "
+"will be removed in a future version. Use 'Navigation2DServer.map_get_path()' "
+"instead."
+msgstr ""
+
+#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
+#, fuzzy
+msgid "Path Desired Distance"
+msgstr "Välj en Huvudscen"
+
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
msgid "Target Desired Distance"
msgstr ""
@@ -21445,15 +21751,16 @@ msgid ""
msgstr ""
#: scene/2d/navigation_polygon.cpp
-msgid ""
-"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
-"node. It only provides navigation data."
+msgid "Navpoly"
msgstr ""
-"NavigationPolygonInstance måste vara ett barn eller barnbarn till en "
-"Navigation2D-Node. Den ger bara navigationsdata."
-#: scene/2d/navigation_polygon.cpp
-msgid "Navpoly"
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Enter Cost"
+msgstr "Botten"
+
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+msgid "Travel Cost"
msgstr ""
#: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp
@@ -22611,6 +22918,13 @@ msgstr ""
msgid "Transform Normals"
msgstr "Transformera uniform."
+#: scene/3d/navigation.cpp
+msgid ""
+"'Navigation' node and 'Navigation.get_simple_path()' are deprecated and will "
+"be removed in a future version. Use 'NavigationServer.map_get_path()' "
+"instead."
+msgstr ""
+
#: scene/3d/navigation.cpp scene/resources/curve.cpp
#, fuzzy
msgid "Up Vector"
@@ -22634,12 +22948,6 @@ msgid ""
"The NavigationAgent can be used only under a Spatial inheriting parent node."
msgstr ""
-#: scene/3d/navigation_mesh_instance.cpp
-msgid ""
-"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
-"It only provides navigation data."
-msgstr ""
-
#: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp
msgid "NavMesh"
msgstr ""
@@ -25265,6 +25573,16 @@ msgid "3D Physics"
msgstr "Fysik Bildruta %"
#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "2D Navigation"
+msgstr "Animations-Node"
+
+#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "3D Navigation"
+msgstr "Animations-Node"
+
+#: scene/register_scene_types.cpp
msgid "Use hiDPI"
msgstr ""
@@ -26662,7 +26980,7 @@ msgstr "Övergång: "
msgid "Refraction"
msgstr "Sektioner:"
-#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp
+#: scene/resources/material.cpp
msgid "Detail"
msgstr ""
@@ -26744,7 +27062,12 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
-msgid "Sample Partition Type"
+msgid "Sampling"
+msgstr "Skalning: "
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Partition Type"
msgstr "Ändra Bas Typ:"
#: scene/resources/navigation_mesh.cpp
@@ -26761,10 +27084,15 @@ msgid "Source Group Name"
msgstr "Källa"
#: scene/resources/navigation_mesh.cpp
-msgid "Agent"
+msgid "Cells"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Agents"
+msgstr "Innehåll:"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Max Climb"
msgstr ""
@@ -26773,11 +27101,16 @@ msgid "Max Slope"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Regions"
+msgstr "Raw-Läge"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Merge Size"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Edge"
+msgid "Edges"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -26790,6 +27123,11 @@ msgid "Verts Per Poly"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Details"
+msgstr "Ladda Standard"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Sample Distance"
msgstr ""
@@ -26806,9 +27144,18 @@ msgid "Ledge Spans"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Filter Walkable Low Height Spans"
+msgid "Walkable Low Height Spans"
msgstr ""
+#: scene/resources/navigation_mesh.cpp
+msgid "Baking AABB"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB Offset"
+msgstr "Ta Bort Mall"
+
#: scene/resources/occluder_shape.cpp
msgid "Spheres"
msgstr ""
@@ -27216,6 +27563,11 @@ msgid "Scenario"
msgstr "Scen"
#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Navigation Map"
+msgstr "Animations-Node"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
msgid "Direct Space State"
msgstr ""
@@ -27233,6 +27585,26 @@ msgstr "Linjär"
msgid "Default Angular Damp"
msgstr ""
+#: scene/resources/world.cpp
+#, fuzzy
+msgid "Default Map Up"
+msgstr "Standard"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Size"
+msgstr "Förhandsgranska"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Height"
+msgstr "Höger"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Edge Connection Margin"
+msgstr "Redigera Koppling:"
+
#: scene/resources/world_2d.cpp
msgid "Canvas"
msgstr ""
diff --git a/editor/translations/te.po b/editor/translations/te.po
index 9544d6f702..431febd63c 100644
--- a/editor/translations/te.po
+++ b/editor/translations/te.po
@@ -200,9 +200,10 @@ msgid "Data"
msgstr ""
#: core/io/file_access_network.cpp core/register_core_types.cpp
-#: editor/editor_settings.cpp main/main.cpp
+#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
#: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h
+#: scene/gui/file_dialog.cpp
msgid "Network"
msgstr ""
@@ -353,6 +354,14 @@ msgstr ""
msgid "Max Size (KB)"
msgstr ""
+#: core/os/input.cpp
+msgid "Mouse Mode"
+msgstr ""
+
+#: core/os/input.cpp
+msgid "Use Accumulated Input"
+msgstr ""
+
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: servers/audio_server.cpp
msgid "Device"
@@ -535,7 +544,8 @@ msgstr ""
#: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
-#: main/main.cpp
+#: main/main.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp
msgid "Run"
msgstr ""
@@ -618,24 +628,23 @@ msgid "Main Run Args"
msgstr ""
#: core/project_settings.cpp
-msgid "Search In File Extensions"
+msgid "Scene Naming"
msgstr ""
#: core/project_settings.cpp
-msgid "Script Templates Search Path"
+msgid "Search In File Extensions"
msgstr ""
-#: core/project_settings.cpp editor/editor_node.cpp
-#: editor/plugins/version_control_editor_plugin.cpp
-msgid "Version Control"
+#: core/project_settings.cpp
+msgid "Script Templates Search Path"
msgstr ""
#: core/project_settings.cpp
-msgid "Autoload On Startup"
+msgid "Version Control Autoload On Startup"
msgstr ""
#: core/project_settings.cpp
-msgid "Plugin Name"
+msgid "Version Control Plugin Name"
msgstr ""
#: core/project_settings.cpp scene/2d/collision_object_2d.cpp
@@ -743,7 +752,8 @@ msgid "Quality"
msgstr ""
#: core/project_settings.cpp scene/gui/file_dialog.cpp
-#: scene/main/scene_tree.cpp servers/visual_server.cpp
+#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp
+#: servers/visual_server.cpp
msgid "Filters"
msgstr ""
@@ -2128,7 +2138,7 @@ msgid "Open"
msgstr ""
#: editor/dependency_editor.cpp
-msgid "Owners Of:"
+msgid "Owners of: %s (Total: %d)"
msgstr ""
#: editor/dependency_editor.cpp
@@ -2419,7 +2429,7 @@ msgid "Bus Options"
msgstr ""
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/scene_tree_dock.cpp
+#: editor/project_export.cpp editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr ""
@@ -2675,6 +2685,22 @@ msgid "Choose"
msgstr ""
#: editor/editor_export.cpp
+msgid "Project export for platform:"
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Completed with errors."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Completed successfully."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Failed."
+msgstr ""
+
+#: editor/editor_export.cpp
msgid "Storing File:"
msgstr ""
@@ -2687,6 +2713,26 @@ msgid "Packing"
msgstr ""
#: editor/editor_export.cpp
+msgid "Save PCK"
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Cannot create file \"%s\"."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Failed to export project files."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Can't open file to read from path \"%s\"."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Save ZIP"
+msgstr ""
+
+#: editor/editor_export.cpp
msgid ""
"Target platform requires 'ETC' texture compression for GLES2. Enable 'Import "
"Etc' in Project Settings."
@@ -2787,8 +2833,25 @@ msgstr ""
msgid "Custom release template not found."
msgstr ""
+#: editor/editor_export.cpp
+msgid "Prepare Template"
+msgstr ""
+
+#: editor/editor_export.cpp platform/osx/export/export.cpp
+msgid "The given export path doesn't exist."
+msgstr ""
+
#: editor/editor_export.cpp platform/javascript/export/export.cpp
-msgid "Template file not found:"
+msgid "Template file not found: \"%s\"."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Failed to copy export template."
+msgstr ""
+
+#: editor/editor_export.cpp platform/windows/export/export.cpp
+#: platform/x11/export/export.cpp
+msgid "PCK Embedding"
msgstr ""
#: editor/editor_export.cpp
@@ -2958,9 +3021,9 @@ msgid "Import"
msgstr "దిగà±à°®à°¤à°¿"
#: editor/editor_feature_profile.cpp editor/project_export.cpp
-#: platform/android/export/export.cpp platform/javascript/export/export.cpp
-#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
-#: platform/windows/export/export.cpp
+#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#: platform/uwp/export/export.cpp platform/windows/export/export.cpp
msgid "Export"
msgstr ""
@@ -4036,14 +4099,6 @@ msgid ""
"Unable to write to file '%s', file in use, locked or lacking permissions."
msgstr ""
-#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
-msgid "Scene"
-msgstr ""
-
-#: editor/editor_node.cpp
-msgid "Scene Naming"
-msgstr ""
-
#: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp
#: servers/arvr/arvr_interface.cpp
msgid "Interface"
@@ -4158,6 +4213,10 @@ msgid "Default Color Picker Mode"
msgstr ""
#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
+msgid "Version Control"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
msgid "Username"
msgstr ""
@@ -4185,6 +4244,10 @@ msgstr ""
msgid "Add a new scene."
msgstr ""
+#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
+msgid "Scene"
+msgstr ""
+
#: editor/editor_node.cpp
msgid "Go to previously opened scene."
msgstr ""
@@ -4912,6 +4975,10 @@ msgid ""
"as runnable."
msgstr ""
+#: editor/editor_run_native.cpp
+msgid "Project Run"
+msgstr ""
+
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
msgstr ""
@@ -5165,7 +5232,9 @@ msgid "Draw Spaces"
msgstr ""
#: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp
-#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp
+#: scene/main/scene_tree.cpp scene/resources/world.cpp
+#: scene/resources/world_2d.cpp
msgid "Navigation"
msgstr ""
@@ -6547,7 +6616,7 @@ msgstr ""
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp
-#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp
+#: scene/gui/control.cpp
msgid "Filter"
msgstr ""
@@ -6815,6 +6884,18 @@ msgid "Saving..."
msgstr ""
#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used as a normal map in 3D. Enabling red-green "
+"texture compression to reduce memory usage (blue channel is discarded)."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap "
+"generation and VRAM texture compression."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
msgid "2D, Detect 3D"
msgstr ""
@@ -7465,11 +7546,20 @@ msgid "New Anim"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+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 "Rename Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Delete Animation?"
msgstr ""
@@ -7487,11 +7577,6 @@ 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 "Duplicate Animation"
msgstr ""
@@ -7634,10 +7719,6 @@ msgid "Pin AnimationPlayer"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Create New Animation"
-msgstr ""
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Name:"
msgstr ""
@@ -9683,6 +9764,7 @@ msgid "Points"
msgstr ""
#: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp
+#: scene/resources/navigation_mesh.cpp
msgid "Polygons"
msgstr ""
@@ -11034,7 +11116,7 @@ msgid "Invalid geometry, can't replace by mesh."
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
-msgid "Convert to Mesh2D"
+msgid "Convert to MeshInstance2D"
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
@@ -11993,8 +12075,7 @@ msgid "Select the previous shape, subtile, or Tile."
msgstr ""
#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp
-#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp
-#: scene/resources/texture.cpp
+#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp
msgid "Region"
msgstr ""
@@ -13410,31 +13491,10 @@ 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 "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 "Export Path"
msgstr ""
@@ -13567,6 +13627,10 @@ msgid "Export templates for this platform are missing:"
msgstr ""
#: editor/project_export.cpp
+msgid "Project Export"
+msgstr ""
+
+#: editor/project_export.cpp
msgid "Manage Export Templates"
msgstr ""
@@ -15814,7 +15878,7 @@ msgstr ""
#: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp
#: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp
-#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp
+#: scene/3d/collision_polygon.cpp
msgid "Polygon"
msgstr ""
@@ -16376,7 +16440,6 @@ msgid "Use In Baked Light"
msgstr ""
#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
-#: scene/resources/navigation_mesh.cpp
msgid "Cell"
msgstr ""
@@ -16402,6 +16465,18 @@ msgstr ""
msgid "Mask"
msgstr ""
+#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
+#, fuzzy
+msgid "Bake Navigation"
+msgstr "గణనలà±"
+
+#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp
+#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp
+#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp
+#: scene/3d/navigation_mesh_instance.cpp
+msgid "Navigation Layers"
+msgstr ""
+
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Plane"
msgstr ""
@@ -17837,10 +17912,6 @@ 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."
@@ -17944,12 +18015,16 @@ msgstr ""
msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version."
msgstr ""
+#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Code Signing"
+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."
+"'apksigner' could not be found. Please check that the command is available "
+"in the Android SDK build-tools directory. The resulting %s is unsigned."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -17965,6 +18040,10 @@ msgid "Could not find keystore, unable to export."
msgstr ""
#: platform/android/export/export_plugin.cpp
+msgid "Could not start apksigner executable."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
@@ -17993,7 +18072,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Unsupported export format!\n"
+msgid "Unsupported export format!"
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18004,19 +18083,17 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Android build version mismatch:\n"
-" Template installed: %s\n"
-" Godot Version: %s\n"
+"Android build version mismatch: Template installed: %s, Godot version: %s. "
"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"
+"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"
+msgid "Could not export project files to gradle project."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18029,7 +18106,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Building of Android project failed, check output for the error.\n"
+"Building of Android project failed, check output for the error. "
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
@@ -18044,7 +18121,7 @@ msgid ""
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Package not found: %s"
+msgid "Package not found: \"%s\"."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18052,15 +18129,12 @@ msgid "Creating APK..."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid ""
-"Could not find template APK to export:\n"
-"%s"
+msgid "Could not find template APK to export: \"%s\"."
msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Missing libraries in the export template for the selected architectures: "
-"%s.\n"
+"Missing libraries in the export template for the selected architectures: %s. "
"Please build a template with all required libraries, or uncheck the missing "
"architectures in the export preset."
msgstr ""
@@ -18070,7 +18144,7 @@ msgid "Adding files..."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Could not export project files"
+msgid "Could not export project files."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18296,6 +18370,15 @@ msgstr ""
msgid "Custom BG Color"
msgstr ""
+#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
+#: platform/osx/export/export.cpp
+msgid "Prepare Templates"
+msgstr ""
+
+#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
+msgid "Export template not found."
+msgstr ""
+
#: platform/iphone/export/export.cpp
msgid "App Store Team ID not specified - cannot configure the project."
msgstr ""
@@ -18317,19 +18400,28 @@ msgid "Run exported HTML in the system's default browser."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not open template for export:"
+msgid "Could not open template for export: \"%s\"."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Invalid export template:"
+msgid "Invalid export template: \"%s\"."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not write file:"
+msgid "Could not write file: \"%s\"."
msgstr ""
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Icon Creation"
+msgstr "గణనలà±"
+
#: platform/javascript/export/export.cpp
-msgid "Could not read file:"
+msgid "Could not read file: \"%s\"."
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "PWA"
msgstr ""
#: platform/javascript/export/export.cpp
@@ -18402,15 +18494,15 @@ msgid "Icon 512 X 512"
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not read HTML shell:"
+msgid "Could not read HTML shell: \"%s\"."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not create HTTP server directory:"
+msgid "Could not create HTTP server directory: %s."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Error starting HTTP server:"
+msgid "Error starting HTTP server: %d."
msgstr ""
#: platform/javascript/export/export.cpp
@@ -18677,9 +18769,26 @@ msgid "Apple Team ID"
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Could not open icon file \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Could not start xcrun executable."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization failed."
+msgstr "గణనలà±"
+
+#: platform/osx/export/export.cpp
+msgid "Notarization request UUID: \"%s\""
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid ""
-"Note: The notarization process generally takes less than an hour. When the "
-"process is completed, you'll receive an email."
+"The notarization process generally takes less than an hour. When the process "
+"is completed, you'll receive an email."
msgstr ""
#: platform/osx/export/export.cpp
@@ -18695,15 +18804,67 @@ msgid ""
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign failed with error \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign require regex module."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Could not start codesign executable, make sure Xcode command line tools are "
+"installed."
+msgstr ""
+
+#: platform/osx/export/export.cpp platform/windows/export/export.cpp
msgid "No identity found."
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Cannot sign file %s."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Relative symlinks are not supported, exported \"%s\" might be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "DMG Creation"
+msgstr "గణనలà±"
+
+#: platform/osx/export/export.cpp
+msgid "Could not start hdiutil executable."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed - file exists."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed."
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid "Creating app bundle"
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Could not find template app to export:"
+msgid "Could not find template app to export: \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Invalid export format."
msgstr ""
#: platform/osx/export/export.cpp
@@ -18714,7 +18875,7 @@ msgstr ""
#: platform/osx/export/export.cpp
msgid ""
-"Requested template binary '%s' not found. It might be missing from your "
+"Requested template binary \"%s\" not found. It might be missing from your "
"template archive."
msgstr ""
@@ -18755,6 +18916,14 @@ msgid "Sending archive for notarization"
msgstr ""
#: platform/osx/export/export.cpp
+msgid "ZIP Creation"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Could not open file to read from path \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr ""
@@ -19051,6 +19220,10 @@ msgid "Debug Algorithm"
msgstr ""
#: platform/windows/export/export.cpp
+msgid "Failed to rename temporary file \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
msgid "Identity Type"
msgstr ""
@@ -19091,6 +19264,63 @@ msgid "Trademarks"
msgstr ""
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Resources Modification"
+msgstr "à°¸à±à°¥à°¿à°°à°¾à°‚కాలà±"
+
+#: platform/windows/export/export.cpp
+msgid "Could not find rcedit executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find wine executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start rcedit executable, configure rcedit path in the Editor "
+"Settings (Export > Windows > Rcedit)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"rcedit failed to modify executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find signtool executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find osslsigncode executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Invalid identity type."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Invalid timestamp server."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start signtool executable, configure signtool path in the Editor "
+"Settings (Export > Windows > Signtool)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Signtool failed to sign executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Failed to remove temporary file \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
msgid ""
"The rcedit tool must be configured in the Editor Settings (Export > Windows "
"> Rcedit) to change the icon or app information data."
@@ -19109,6 +19339,22 @@ msgid "Invalid product version:"
msgstr ""
#: platform/windows/export/export.cpp
+msgid "Windows executables cannot be >= 4 GiB."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Failed to open executable file \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable file header corrupted."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable \"pck\" section not found."
+msgstr ""
+
+#: platform/windows/export/export.cpp
msgid "Windows"
msgstr ""
@@ -19124,6 +19370,10 @@ msgstr ""
msgid "Wine"
msgstr ""
+#: platform/x11/export/export.cpp
+msgid "32-bit executables cannot have embedded data >= 4 GiB."
+msgstr ""
+
#: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp
#: scene/resources/texture.cpp
msgid "Frames"
@@ -19232,7 +19482,8 @@ msgstr ""
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/3d/light.cpp scene/3d/reflection_probe.cpp
-#: scene/3d/visual_instance.cpp scene/resources/material.cpp
+#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp
+#: scene/resources/material.cpp
msgid "Max Distance"
msgstr ""
@@ -19937,6 +20188,17 @@ msgstr ""
msgid "Edge Connection Margin"
msgstr ""
+#: scene/2d/navigation_2d.cpp
+msgid ""
+"'Navigation2D' node and 'Navigation2D.get_simple_path()' are deprecated and "
+"will be removed in a future version. Use 'Navigation2DServer.map_get_path()' "
+"instead."
+msgstr ""
+
+#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
+msgid "Path Desired Distance"
+msgstr ""
+
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
msgid "Target Desired Distance"
msgstr ""
@@ -19987,13 +20249,15 @@ msgid ""
msgstr ""
#: scene/2d/navigation_polygon.cpp
-msgid ""
-"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
-"node. It only provides navigation data."
+msgid "Navpoly"
msgstr ""
-#: scene/2d/navigation_polygon.cpp
-msgid "Navpoly"
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+msgid "Enter Cost"
+msgstr ""
+
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+msgid "Travel Cost"
msgstr ""
#: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp
@@ -21031,6 +21295,13 @@ msgstr ""
msgid "Transform Normals"
msgstr ""
+#: scene/3d/navigation.cpp
+msgid ""
+"'Navigation' node and 'Navigation.get_simple_path()' are deprecated and will "
+"be removed in a future version. Use 'NavigationServer.map_get_path()' "
+"instead."
+msgstr ""
+
#: scene/3d/navigation.cpp scene/resources/curve.cpp
msgid "Up Vector"
msgstr ""
@@ -21052,12 +21323,6 @@ msgid ""
"The NavigationAgent can be used only under a Spatial inheriting parent node."
msgstr ""
-#: scene/3d/navigation_mesh_instance.cpp
-msgid ""
-"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
-"It only provides navigation data."
-msgstr ""
-
#: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp
msgid "NavMesh"
msgstr ""
@@ -23425,6 +23690,16 @@ msgid "3D Physics"
msgstr ""
#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "2D Navigation"
+msgstr "గణనలà±"
+
+#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "3D Navigation"
+msgstr "గణనలà±"
+
+#: scene/register_scene_types.cpp
msgid "Use hiDPI"
msgstr ""
@@ -24653,7 +24928,7 @@ msgstr ""
msgid "Refraction"
msgstr "గణనలà±"
-#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp
+#: scene/resources/material.cpp
msgid "Detail"
msgstr ""
@@ -24727,10 +25002,15 @@ msgid "Visible Instance Count"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Sample Partition Type"
+msgid "Sampling"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Partition Type"
+msgstr "గణనలà±"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Parsed Geometry Type"
msgstr ""
@@ -24743,7 +25023,11 @@ msgid "Source Group Name"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Agent"
+msgid "Cells"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
+msgid "Agents"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -24755,11 +25039,15 @@ msgid "Max Slope"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+msgid "Regions"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
msgid "Merge Size"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Edge"
+msgid "Edges"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -24771,6 +25059,10 @@ msgid "Verts Per Poly"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+msgid "Details"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
msgid "Sample Distance"
msgstr ""
@@ -24787,7 +25079,15 @@ msgid "Ledge Spans"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Filter Walkable Low Height Spans"
+msgid "Walkable Low Height Spans"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
+msgid "Baking AABB"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
+msgid "Baking AABB Offset"
msgstr ""
#: scene/resources/occluder_shape.cpp
@@ -25147,6 +25447,11 @@ msgid "Scenario"
msgstr ""
#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Navigation Map"
+msgstr "గణనలà±"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
msgid "Direct Space State"
msgstr ""
@@ -25162,6 +25467,22 @@ msgstr ""
msgid "Default Angular Damp"
msgstr ""
+#: scene/resources/world.cpp
+msgid "Default Map Up"
+msgstr ""
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+msgid "Default Cell Size"
+msgstr ""
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+msgid "Default Cell Height"
+msgstr ""
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+msgid "Default Edge Connection Margin"
+msgstr ""
+
#: scene/resources/world_2d.cpp
msgid "Canvas"
msgstr ""
diff --git a/editor/translations/th.po b/editor/translations/th.po
index c291d5f337..df7f3a8c04 100644
--- a/editor/translations/th.po
+++ b/editor/translations/th.po
@@ -235,9 +235,10 @@ msgid "Data"
msgstr ""
#: core/io/file_access_network.cpp core/register_core_types.cpp
-#: editor/editor_settings.cpp main/main.cpp
+#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
#: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h
+#: scene/gui/file_dialog.cpp
#, fuzzy
msgid "Network"
msgstr "โปรไฟล์เน็ตเวิร์à¸"
@@ -399,6 +400,16 @@ msgstr ""
msgid "Max Size (KB)"
msgstr ""
+#: core/os/input.cpp
+#, fuzzy
+msgid "Mouse Mode"
+msgstr "โหมดเคลื่อนย้าย"
+
+#: core/os/input.cpp
+#, fuzzy
+msgid "Use Accumulated Input"
+msgstr "ลบอินพุต"
+
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: servers/audio_server.cpp
msgid "Device"
@@ -600,7 +611,8 @@ msgstr "รายละเอียด"
#: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
-#: main/main.cpp
+#: main/main.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp
msgid "Run"
msgstr "เริ่ม"
@@ -691,6 +703,11 @@ msgid "Main Run Args"
msgstr "ตัวà¹à¸›à¸£à¸‰à¸²à¸à¸«à¸¥à¸±à¸:"
#: core/project_settings.cpp
+#, fuzzy
+msgid "Scene Naming"
+msgstr "ตำà¹à¸«à¸™à¹ˆà¸‡à¸—ี่อยู่ฉาà¸:"
+
+#: core/project_settings.cpp
msgid "Search In File Extensions"
msgstr ""
@@ -698,19 +715,15 @@ msgstr ""
msgid "Script Templates Search Path"
msgstr ""
-#: core/project_settings.cpp editor/editor_node.cpp
-#: editor/plugins/version_control_editor_plugin.cpp
-msgid "Version Control"
-msgstr "เวอร์ชันคอนโทรล"
-
#: core/project_settings.cpp
-msgid "Autoload On Startup"
-msgstr ""
+#, fuzzy
+msgid "Version Control Autoload On Startup"
+msgstr "ระบบจัดà¸à¸²à¸£à¸‹à¸­à¸£à¹Œà¸ª (Version Control)"
#: core/project_settings.cpp
#, fuzzy
-msgid "Plugin Name"
-msgstr "ชื่อปลั๊à¸à¸­à¸´à¸™:"
+msgid "Version Control Plugin Name"
+msgstr "เวอร์ชันคอนโทรล"
#: core/project_settings.cpp scene/2d/collision_object_2d.cpp
#: scene/3d/collision_object.cpp scene/gui/control.cpp
@@ -830,7 +843,8 @@ msgid "Quality"
msgstr ""
#: core/project_settings.cpp scene/gui/file_dialog.cpp
-#: scene/main/scene_tree.cpp servers/visual_server.cpp
+#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp
+#: servers/visual_server.cpp
#, fuzzy
msgid "Filters"
msgstr "ตัวà¸à¸£à¸­à¸‡:"
@@ -2277,8 +2291,8 @@ msgid "Open"
msgstr "เปิด"
#: editor/dependency_editor.cpp
-msgid "Owners Of:"
-msgstr "เจ้าของของ:"
+msgid "Owners of: %s (Total: %d)"
+msgstr ""
#: editor/dependency_editor.cpp
#, fuzzy
@@ -2586,7 +2600,7 @@ msgid "Bus Options"
msgstr "ตัวเลือภBus"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/scene_tree_dock.cpp
+#: editor/project_export.cpp editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "ทำซ้ำ"
@@ -2846,6 +2860,25 @@ msgid "Choose"
msgstr "เลือà¸"
#: editor/editor_export.cpp
+msgid "Project export for platform:"
+msgstr ""
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Completed with errors."
+msgstr "คัดลอà¸à¸•ำà¹à¸«à¸™à¹ˆà¸‡à¹‚หนด"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Completed successfully."
+msgstr "ติดตั้งà¹à¸žà¸„เà¸à¸ˆà¹€à¸ªà¸£à¹‡à¸ˆà¸ªà¸¡à¸šà¸¹à¸£à¸“์!"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed."
+msgstr "ผิดพลาด:"
+
+#: editor/editor_export.cpp
msgid "Storing File:"
msgstr "เà¸à¹‡à¸šà¹„ฟล์:"
@@ -2858,6 +2891,31 @@ msgid "Packing"
msgstr "à¸à¸³à¸¥à¸±à¸‡à¸£à¸§à¸šà¸£à¸§à¸¡"
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save PCK"
+msgstr "บันทึà¸à¹€à¸›à¹‡à¸™"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Cannot create file \"%s\"."
+msgstr "ไม่สามารถสร้างโฟลเดอร์"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to export project files."
+msgstr "เขียนไฟล์ไม่ได้:"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Can't open file to read from path \"%s\"."
+msgstr "เปิดไฟล์เพื่อเขียนไม่ได้:"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save ZIP"
+msgstr "บันทึà¸à¹€à¸›à¹‡à¸™"
+
+#: editor/editor_export.cpp
msgid ""
"Target platform requires 'ETC' texture compression for GLES2. Enable 'Import "
"Etc' in Project Settings."
@@ -2973,11 +3031,33 @@ msgstr "ไม่พบเทมเพลตà¸à¸²à¸£à¸”ีบัà¸à¹à¸šà¸šà¸
msgid "Custom release template not found."
msgstr "ไม่พบเทมเพลตà¸à¸²à¸£à¹€à¸œà¸¢à¹à¸žà¸£à¹ˆà¸—ี่à¸à¸³à¸«à¸™à¸”เอง"
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Prepare Template"
+msgstr "จัดà¸à¸²à¸£à¹€à¸—มเพลต"
+
+#: editor/editor_export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "The given export path doesn't exist."
+msgstr "ไม่พบที่อยู่ส่งออà¸:"
+
#: editor/editor_export.cpp platform/javascript/export/export.cpp
-msgid "Template file not found:"
+#, fuzzy
+msgid "Template file not found: \"%s\"."
msgstr "ไม่พบไฟล์เทมเพลต:"
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to copy export template."
+msgstr "เทมเพลตส่งออà¸à¹„ม่ถูà¸à¸•้อง:"
+
+#: editor/editor_export.cpp platform/windows/export/export.cpp
+#: platform/x11/export/export.cpp
+#, fuzzy
+msgid "PCK Embedding"
+msgstr "à¸à¸²à¸£à¹€à¸§à¹‰à¸™à¸Šà¹ˆà¸­à¸‡"
+
+#: editor/editor_export.cpp
msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB."
msgstr "à¸à¸²à¸£à¸ªà¹ˆà¸‡à¸­à¸­à¸à¹à¸šà¸š 32 bit PCK à¹à¸šà¸šà¸à¸±à¸‡à¸•ัวไม่สามารถใหà¸à¹ˆà¹„ด้เà¸à¸´à¸™ 4 GiB"
@@ -3153,9 +3233,9 @@ msgid "Import"
msgstr "นำเข้า"
#: editor/editor_feature_profile.cpp editor/project_export.cpp
-#: platform/android/export/export.cpp platform/javascript/export/export.cpp
-#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
-#: platform/windows/export/export.cpp
+#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#: platform/uwp/export/export.cpp platform/windows/export/export.cpp
msgid "Export"
msgstr "ส่งออà¸"
@@ -4297,15 +4377,6 @@ msgid ""
"Unable to write to file '%s', file in use, locked or lacking permissions."
msgstr ""
-#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
-msgid "Scene"
-msgstr "ฉาà¸"
-
-#: editor/editor_node.cpp
-#, fuzzy
-msgid "Scene Naming"
-msgstr "ตำà¹à¸«à¸™à¹ˆà¸‡à¸—ี่อยู่ฉาà¸:"
-
#: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp
#: servers/arvr/arvr_interface.cpp
#, fuzzy
@@ -4434,6 +4505,10 @@ msgid "Default Color Picker Mode"
msgstr ""
#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
+msgid "Version Control"
+msgstr "เวอร์ชันคอนโทรล"
+
+#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
#, fuzzy
msgid "Username"
msgstr "เปลี่ยนชื่อ"
@@ -4462,6 +4537,10 @@ msgstr "โหมดไร้สิ่งรบà¸à¸§à¸™"
msgid "Add a new scene."
msgstr "เพิ่มฉาà¸à¹ƒà¸«à¸¡à¹ˆ"
+#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
+msgid "Scene"
+msgstr "ฉาà¸"
+
#: editor/editor_node.cpp
msgid "Go to previously opened scene."
msgstr "ไปยังฉาà¸à¸—ี่เพิ่งเปิด"
@@ -5244,6 +5323,11 @@ msgstr ""
"ไม่มีพรีเซ็ตส่งออà¸à¸—ี่สามารถรันเà¸à¸¡à¹„ด้ของà¹à¸žà¸¥à¸•ฟอร์มนี้\n"
"à¸à¸£à¸¸à¸“าเพิ่มพรีเซ็ตส่งออà¸à¸—ี่รันเà¸à¸¡à¹„ด้ในเมนูส่งออà¸à¸«à¸£à¸·à¸­à¸—ำให้พรีเซ็ตเดิมสามารถรันได้"
+#: editor/editor_run_native.cpp
+#, fuzzy
+msgid "Project Run"
+msgstr "โปรเจà¸à¸•์"
+
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
msgstr "เขียนโปรà¹à¸à¸£à¸¡à¹ƒà¸™à¹€à¸¡à¸—็อด _run()"
@@ -5527,7 +5611,9 @@ msgid "Draw Spaces"
msgstr "จำนวนครั้งในà¸à¸²à¸£à¸§à¸²à¸”"
#: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp
-#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp
+#: scene/main/scene_tree.cpp scene/resources/world.cpp
+#: scene/resources/world_2d.cpp
msgid "Navigation"
msgstr "ตัวนำทาง"
@@ -7041,7 +7127,7 @@ msgstr ""
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp
-#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp
+#: scene/gui/control.cpp
#, fuzzy
msgid "Filter"
msgstr "ตัวà¸à¸£à¸­à¸‡:"
@@ -7338,6 +7424,18 @@ msgid "Saving..."
msgstr "à¸à¸³à¸¥à¸±à¸‡à¸šà¸±à¸™à¸—ึà¸..."
#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used as a normal map in 3D. Enabling red-green "
+"texture compression to reduce memory usage (blue channel is discarded)."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap "
+"generation and VRAM texture compression."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
msgid "2D, Detect 3D"
msgstr ""
@@ -8021,11 +8119,20 @@ msgid "New Anim"
msgstr "à¹à¸­à¸™à¸´à¹€à¸¡à¸Šà¸±à¸™à¹ƒà¸«à¸¡à¹ˆ"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+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 "Rename Animation"
+msgstr "เปลี่ยนชื่อà¹à¸­à¸™à¸´à¹€à¸¡à¸Šà¸±à¸™"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Delete Animation?"
msgstr "ลบà¹à¸­à¸™à¸´à¹€à¸¡à¸Šà¸±à¸™?"
@@ -8043,11 +8150,6 @@ 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 "Duplicate Animation"
msgstr "ทำซ้ำà¹à¸­à¸™à¸´à¹€à¸¡à¸Šà¸±à¸™"
@@ -8191,10 +8293,6 @@ msgid "Pin AnimationPlayer"
msgstr "ปัà¸à¸«à¸¡à¸¸à¸” AnimationPlayer"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Create New Animation"
-msgstr "สร้างà¹à¸­à¸™à¸´à¹€à¸¡à¸Šà¸±à¸™à¹ƒà¸«à¸¡à¹ˆ"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Name:"
msgstr "ชื่อà¹à¸­à¸™à¸´à¹€à¸¡à¸Šà¸±à¸™:"
@@ -10311,6 +10409,7 @@ msgid "Points"
msgstr "จุด"
#: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp
+#: scene/resources/navigation_mesh.cpp
msgid "Polygons"
msgstr "โพลีà¸à¸­à¸™"
@@ -11726,7 +11825,8 @@ msgid "Invalid geometry, can't replace by mesh."
msgstr "เรขาคณิตผิดพลาด ไม่สามารถà¹à¸—นที่ด้วย mesh"
#: editor/plugins/sprite_editor_plugin.cpp
-msgid "Convert to Mesh2D"
+#, fuzzy
+msgid "Convert to MeshInstance2D"
msgstr "à¹à¸›à¸¥à¸‡à¹€à¸›à¹‡à¸™ Mesh2D"
#: editor/plugins/sprite_editor_plugin.cpp
@@ -12779,8 +12879,7 @@ msgid "Select the previous shape, subtile, or Tile."
msgstr "เลือà¸à¸£à¸¹à¸›à¸£à¹ˆà¸²à¸‡, ไทล์ย่อยหรือไทล์à¸à¹ˆà¸­à¸™à¸«à¸™à¹‰à¸²"
#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp
-#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp
-#: scene/resources/texture.cpp
+#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp
msgid "Region"
msgstr "ขอบเขต"
@@ -14292,35 +14391,10 @@ msgid "Delete preset '%s'?"
msgstr "ลบพรีเซ็ต '%s'?"
#: editor/project_export.cpp
-msgid ""
-"Failed to export the project for platform '%s'.\n"
-"Export templates seem to be missing or invalid."
-msgstr ""
-"ล้มเหลวในà¸à¸²à¸£à¸ªà¹ˆà¸‡à¸­à¸­à¸à¹‚ปรเจà¸à¸•์สำหรับà¹à¸žà¸¥à¸•ฟอร์ม '%s'\n"
-"เทมเพลตส่งออà¸à¸ªà¸¹à¸à¸«à¸²à¸¢à¸«à¸£à¸·à¸­à¸œà¸´à¸”พลาด"
-
-#: 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 ""
-"เà¸à¸´à¸”ข้อผิดพลาดในà¸à¸²à¸£à¸ªà¹ˆà¸‡à¸­à¸­à¸à¹‚ปรเจà¸à¸•์ไปยังà¹à¸žà¸¥à¸•ฟอร์ม '%s'\n"
-"ปัà¸à¸«à¸²à¸­à¸²à¸ˆà¹€à¸à¸´à¸”จาà¸à¸„่าที่ตั้งในพรีเซ็ตà¸à¸²à¸£à¸ªà¹ˆà¸‡à¸­à¸­à¸à¸«à¸£à¸·à¸­à¸à¸²à¸£à¸•ั้งค่าà¸à¸²à¸£à¸ªà¹ˆà¸‡à¸­à¸­à¸"
-
-#: 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 "Export Path"
msgstr "ไดเรà¸à¸—อรีส่งออà¸"
@@ -14468,6 +14542,11 @@ msgid "Export templates for this platform are missing:"
msgstr "ไม่พบเทมเพลตส่งออà¸à¸ªà¸³à¸«à¸£à¸±à¸šà¹à¸žà¸¥à¸•ฟอร์มนี้:"
#: editor/project_export.cpp
+#, fuzzy
+msgid "Project Export"
+msgstr "ผู้ริเริ่มโครงà¸à¸²à¸£"
+
+#: editor/project_export.cpp
msgid "Manage Export Templates"
msgstr "จัดà¸à¸²à¸£à¹€à¸—มเพลตส่งออà¸"
@@ -16864,7 +16943,7 @@ msgstr ""
#: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp
#: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp
-#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp
+#: scene/3d/collision_polygon.cpp
#, fuzzy
msgid "Polygon"
msgstr "โพลีà¸à¸­à¸™"
@@ -17489,7 +17568,6 @@ msgid "Use In Baked Light"
msgstr "สร้าง Lightmaps"
#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
-#: scene/resources/navigation_mesh.cpp
msgid "Cell"
msgstr ""
@@ -17519,6 +17597,19 @@ msgstr "à¸à¸¥à¸²à¸‡"
msgid "Mask"
msgstr ""
+#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
+#, fuzzy
+msgid "Bake Navigation"
+msgstr "ตัวนำทาง"
+
+#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp
+#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp
+#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp
+#: scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Navigation Layers"
+msgstr "โหมด Navigation"
+
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Plane"
msgstr "ระนาบถัดไป"
@@ -19074,10 +19165,6 @@ msgid "Could not execute on device."
msgstr "ไม่สามารถสร้างโฟลเดอร์"
#: platform/android/export/export_plugin.cpp
-msgid "Unable to find the 'apksigner' tool."
-msgstr "ไม่สามารถหาเครื่องมือ 'apksigner'"
-
-#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -19185,12 +19272,16 @@ msgstr "\"Export AAB\" จะใช้ได้เฉพาะเมื่อเ
msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version."
msgstr ""
+#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Code Signing"
+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."
+"'apksigner' could not be found. Please check that the command is available "
+"in the Android SDK build-tools directory. The resulting %s is unsigned."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -19208,6 +19299,11 @@ msgid "Could not find keystore, unable to export."
msgstr "เปิดเทมเพลตเพื่อส่งออà¸à¹„ม่ได้:"
#: platform/android/export/export_plugin.cpp
+#, fuzzy
+msgid "Could not start apksigner executable."
+msgstr "ไม่สามารถเริ่มขั้นตอนย่อย!"
+
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
@@ -19238,7 +19334,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr "ชื่อไฟล์ผิดพลาด! à¹à¸­à¸™à¸”รอยด์ APK จำเป็นต้องมีนามสà¸à¸¸à¸¥ *.apk"
#: platform/android/export/export_plugin.cpp
-msgid "Unsupported export format!\n"
+msgid "Unsupported export format!"
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -19249,10 +19345,9 @@ msgstr ""
"พยายามสร้างจาà¸à¹€à¸—มเพลตที่สร้างขึ้นเอง à¹à¸•่ไม่มีข้อมูลเวอร์ชัน โปรดติดตั้งใหม่จาà¸à¹€à¸¡à¸™à¸¹ \"โปรเจà¸à¸•์\""
#: platform/android/export/export_plugin.cpp
+#, fuzzy
msgid ""
-"Android build version mismatch:\n"
-" Template installed: %s\n"
-" Godot Version: %s\n"
+"Android build version mismatch: Template installed: %s, Godot version: %s. "
"Please reinstall Android build template from 'Project' menu."
msgstr ""
"เวอร์ชันบิวด์ Android ไม่ตรงà¸à¸±à¸™:\n"
@@ -19262,11 +19357,12 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Unable to overwrite res://android/build/res/*.xml files with project name"
+"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"
+#, fuzzy
+msgid "Could not export project files to gradle project."
msgstr "ไม่สามารถส่งออà¸à¹„ฟล์โปรเจคไปยังโปรเจค gradle ได้\n"
#: platform/android/export/export_plugin.cpp
@@ -19279,8 +19375,9 @@ msgid "Building Android Project (gradle)"
msgstr "à¸à¸³à¸¥à¸±à¸‡à¸ªà¸£à¹‰à¸²à¸‡à¹‚ปรเจคà¹à¸­à¸™à¸”รอยด์ (gradle)"
#: platform/android/export/export_plugin.cpp
+#, fuzzy
msgid ""
-"Building of Android project failed, check output for the error.\n"
+"Building of Android project failed, check output for the error. "
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
"à¸à¸²à¸£à¸ªà¸£à¹‰à¸²à¸‡à¹‚ปรเจà¸à¸•์à¹à¸­à¸™à¸”รอยด์ล้มเหลว ตรวจสอบผลลัพธ์เพื่อหาข้อผิดพลาด\n"
@@ -19299,7 +19396,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
#, fuzzy
-msgid "Package not found: %s"
+msgid "Package not found: \"%s\"."
msgstr "ไม่พบà¹à¸­à¸™à¸´à¹€à¸¡à¸Šà¸±à¸™: '%s'"
#: platform/android/export/export_plugin.cpp
@@ -19308,17 +19405,15 @@ msgid "Creating APK..."
msgstr "à¸à¸³à¸¥à¸±à¸‡à¸ªà¸£à¹‰à¸²à¸‡à¸„อนทัวร์..."
#: platform/android/export/export_plugin.cpp
-msgid ""
-"Could not find template APK to export:\n"
-"%s"
+#, fuzzy
+msgid "Could not find template APK to export: \"%s\"."
msgstr ""
"ไม่พบเทมเพลต APK สำหรับà¸à¸²à¸£à¸ªà¹ˆà¸‡à¸­à¸­à¸:\n"
"%s"
#: platform/android/export/export_plugin.cpp
msgid ""
-"Missing libraries in the export template for the selected architectures: "
-"%s.\n"
+"Missing libraries in the export template for the selected architectures: %s. "
"Please build a template with all required libraries, or uncheck the missing "
"architectures in the export preset."
msgstr ""
@@ -19330,7 +19425,7 @@ msgstr "à¸à¸³à¸¥à¸±à¸‡à¹€à¸žà¸´à¹ˆà¸¡ %s..."
#: platform/android/export/export_plugin.cpp
#, fuzzy
-msgid "Could not export project files"
+msgid "Could not export project files."
msgstr "เขียนไฟล์ไม่ได้:"
#: platform/android/export/export_plugin.cpp
@@ -19572,6 +19667,17 @@ msgstr "ตัดโหนด"
msgid "Custom BG Color"
msgstr "ตัดโหนด"
+#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Prepare Templates"
+msgstr "จัดà¸à¸²à¸£à¹€à¸—มเพลต"
+
+#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Export template not found."
+msgstr "ไม่พบเทมเพลตà¸à¸²à¸£à¹€à¸œà¸¢à¹à¸žà¸£à¹ˆà¸—ี่à¸à¸³à¸«à¸™à¸”เอง"
+
#: platform/iphone/export/export.cpp
msgid "App Store Team ID not specified - cannot configure the project."
msgstr "App Store Team ID ยังไม่ได้ระบุ - ไม่สามารถà¸à¸³à¸«à¸™à¸”ค่าให้โปรเจà¸à¸•์ได้"
@@ -19593,23 +19699,35 @@ msgid "Run exported HTML in the system's default browser."
msgstr "รันไฟล์ HTML ที่ส่งออà¸à¹ƒà¸™à¹€à¸šà¸£à¸²à¹€à¸‹à¸­à¸£à¹Œ"
#: platform/javascript/export/export.cpp
-msgid "Could not open template for export:"
+#, fuzzy
+msgid "Could not open template for export: \"%s\"."
msgstr "เปิดเทมเพลตเพื่อส่งออà¸à¹„ม่ได้:"
#: platform/javascript/export/export.cpp
-msgid "Invalid export template:"
+#, fuzzy
+msgid "Invalid export template: \"%s\"."
msgstr "เทมเพลตส่งออà¸à¹„ม่ถูà¸à¸•้อง:"
#: platform/javascript/export/export.cpp
-msgid "Could not write file:"
+#, fuzzy
+msgid "Could not write file: \"%s\"."
msgstr "เขียนไฟล์ไม่ได้:"
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Icon Creation"
+msgstr "ตั้งระยะขอบ"
+
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not read file:"
+msgid "Could not read file: \"%s\"."
msgstr "เขียนไฟล์ไม่ได้:"
#: platform/javascript/export/export.cpp
+msgid "PWA"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
#, fuzzy
msgid "Variant"
msgstr "เว้น:"
@@ -19685,17 +19803,17 @@ msgstr ""
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not read HTML shell:"
+msgid "Could not read HTML shell: \"%s\"."
msgstr "ไม่สามารถอ่านโครงสร้าง HTML:"
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not create HTTP server directory:"
+msgid "Could not create HTTP server directory: %s."
msgstr "ไม่สามารถสร้างโฟลเดอร์"
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Error starting HTTP server:"
+msgid "Error starting HTTP server: %d."
msgstr "ผิดพลาดขณะบันทึà¸à¸‰à¸²à¸"
#: platform/javascript/export/export.cpp
@@ -19995,9 +20113,28 @@ msgid "Apple Team ID"
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open icon file \"%s\"."
+msgstr "เขียนไฟล์ไม่ได้:"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start xcrun executable."
+msgstr "ไม่สามารถเริ่มขั้นตอนย่อย!"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization failed."
+msgstr "à¸à¸²à¸£à¹à¸›à¸¥"
+
+#: platform/osx/export/export.cpp
+msgid "Notarization request UUID: \"%s\""
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid ""
-"Note: The notarization process generally takes less than an hour. When the "
-"process is completed, you'll receive an email."
+"The notarization process generally takes less than an hour. When the process "
+"is completed, you'll receive an email."
msgstr ""
#: platform/osx/export/export.cpp
@@ -20013,23 +20150,78 @@ msgid ""
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign failed with error \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign require regex module."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Could not start codesign executable, make sure Xcode command line tools are "
+"installed."
+msgstr ""
+
+#: platform/osx/export/export.cpp platform/windows/export/export.cpp
#, fuzzy
msgid "No identity found."
msgstr "ไม่พบ!"
#: platform/osx/export/export.cpp
#, fuzzy
+msgid "Cannot sign file %s."
+msgstr "ผิดพลาดขณะบันทึà¸à¹„ฟล์: %s"
+
+#: platform/osx/export/export.cpp
+msgid "Relative symlinks are not supported, exported \"%s\" might be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "DMG Creation"
+msgstr "ทิศทาง"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start hdiutil executable."
+msgstr "ไม่สามารถเริ่มขั้นตอนย่อย!"
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed - file exists."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
msgid "Creating app bundle"
msgstr "à¸à¸³à¸¥à¸±à¸‡à¸ªà¸£à¹‰à¸²à¸‡à¸£à¸¹à¸›à¸•ัวอย่าง"
#: platform/osx/export/export.cpp
#, fuzzy
-msgid "Could not find template app to export:"
+msgid "Could not find template app to export: \"%s\"."
msgstr ""
"ไม่พบเทมเพลต APK สำหรับà¸à¸²à¸£à¸ªà¹ˆà¸‡à¸­à¸­à¸:\n"
"%s"
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid export format."
+msgstr "เทมเพลตส่งออà¸à¹„ม่ถูà¸à¸•้อง:"
+
+#: platform/osx/export/export.cpp
msgid ""
"Relative symlinks are not supported on this OS, the exported project might "
"be broken!"
@@ -20037,7 +20229,7 @@ msgstr ""
#: platform/osx/export/export.cpp
msgid ""
-"Requested template binary '%s' not found. It might be missing from your "
+"Requested template binary \"%s\" not found. It might be missing from your "
"template archive."
msgstr ""
@@ -20079,6 +20271,16 @@ msgstr ""
#: platform/osx/export/export.cpp
#, fuzzy
+msgid "ZIP Creation"
+msgstr "โปรเจà¸à¸•์"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open file to read from path \"%s\"."
+msgstr "ไม่สามารถส่งออà¸à¹„ฟล์โปรเจคไปยังโปรเจค gradle ได้\n"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
msgid "Invalid bundle identifier:"
msgstr "ระบุไม่ถูà¸à¸•้อง:"
@@ -20391,6 +20593,11 @@ msgid "Debug Algorithm"
msgstr "ตัวดีบัà¸"
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to rename temporary file \"%s\"."
+msgstr "ไม่สามารถลบไฟล์ชั่วคราวได้:"
+
+#: platform/windows/export/export.cpp
msgid "Identity Type"
msgstr ""
@@ -20438,6 +20645,70 @@ msgid "Trademarks"
msgstr ""
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Resources Modification"
+msgstr "สุ่มà¸à¸²à¸£à¸«à¸¡à¸¸à¸™:"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find rcedit executable at \"%s\"."
+msgstr "เปิดเทมเพลตเพื่อส่งออà¸à¹„ม่ได้:"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find wine executable at \"%s\"."
+msgstr "เปิดเทมเพลตเพื่อส่งออà¸à¹„ม่ได้:"
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start rcedit executable, configure rcedit path in the Editor "
+"Settings (Export > Windows > Rcedit)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"rcedit failed to modify executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find signtool executable at \"%s\"."
+msgstr "เปิดเทมเพลตเพื่อส่งออà¸à¹„ม่ได้:"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find osslsigncode executable at \"%s\"."
+msgstr "เปิดเทมเพลตเพื่อส่งออà¸à¹„ม่ได้:"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid identity type."
+msgstr "ระบุไม่ถูà¸à¸•้อง:"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid timestamp server."
+msgstr "ชื่อผิดพลาด"
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start signtool executable, configure signtool path in the Editor "
+"Settings (Export > Windows > Signtool)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Signtool failed to sign executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to remove temporary file \"%s\"."
+msgstr "ไม่สามารถลบไฟล์ชั่วคราวได้:"
+
+#: platform/windows/export/export.cpp
msgid ""
"The rcedit tool must be configured in the Editor Settings (Export > Windows "
"> Rcedit) to change the icon or app information data."
@@ -20459,6 +20730,23 @@ msgid "Invalid product version:"
msgstr "GUID ของโปรà¹à¸à¸£à¸¡à¹„ม่ถูà¸à¸•้อง"
#: platform/windows/export/export.cpp
+msgid "Windows executables cannot be >= 4 GiB."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+#, fuzzy
+msgid "Failed to open executable file \"%s\"."
+msgstr "นามสà¸à¸¸à¸¥à¹„ม่ถูà¸à¸•้อง"
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable file header corrupted."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable \"pck\" section not found."
+msgstr ""
+
+#: platform/windows/export/export.cpp
#, fuzzy
msgid "Windows"
msgstr "หน้าต่างใหม่"
@@ -20475,6 +20763,10 @@ msgstr ""
msgid "Wine"
msgstr ""
+#: platform/x11/export/export.cpp
+msgid "32-bit executables cannot have embedded data >= 4 GiB."
+msgstr ""
+
#: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp
#: scene/resources/texture.cpp
#, fuzzy
@@ -20602,7 +20894,8 @@ msgstr ""
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/3d/light.cpp scene/3d/reflection_probe.cpp
-#: scene/3d/visual_instance.cpp scene/resources/material.cpp
+#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp
+#: scene/resources/material.cpp
#, fuzzy
msgid "Max Distance"
msgstr "ระยะà¸à¸²à¸£à¹€à¸¥à¸·à¸­à¸:"
@@ -21405,6 +21698,18 @@ msgstr ""
msgid "Edge Connection Margin"
msgstr "à¹à¸à¹‰à¹„ขà¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•่อ:"
+#: scene/2d/navigation_2d.cpp
+msgid ""
+"'Navigation2D' node and 'Navigation2D.get_simple_path()' are deprecated and "
+"will be removed in a future version. Use 'Navigation2DServer.map_get_path()' "
+"instead."
+msgstr ""
+
+#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
+#, fuzzy
+msgid "Path Desired Distance"
+msgstr "ระยะà¸à¸²à¸£à¹€à¸¥à¸·à¸­à¸:"
+
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
msgid "Target Desired Distance"
msgstr ""
@@ -21461,17 +21766,19 @@ msgstr ""
"ต้องมี NavigationPolygon เพื่อให้โหนดนี้ทำงานได้ à¸à¸£à¸¸à¸“าà¹à¸à¹‰à¹„ขคุณสมบัติหรือวาดรูปหลายเหลี่ยม"
#: scene/2d/navigation_polygon.cpp
-msgid ""
-"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
-"node. It only provides navigation data."
-msgstr ""
-"NavigationPolygonInstance ต้องเป็นโหนดลูà¸/หลานของโหนด Navigation2D "
-"โดยจะให้ข้อมูลà¸à¸²à¸£à¸™à¸³à¸—างเท่านั้น"
-
-#: scene/2d/navigation_polygon.cpp
msgid "Navpoly"
msgstr ""
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Enter Cost"
+msgstr "ล่าง"
+
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Travel Cost"
+msgstr "à¸à¸²à¸£à¹€à¸„ลื่อนที่"
+
#: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp
#: scene/main/canvas_layer.cpp
#, fuzzy
@@ -22658,6 +22965,13 @@ msgstr ""
msgid "Transform Normals"
msgstr "ยà¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¹€à¸„ลื่อนย้าย"
+#: scene/3d/navigation.cpp
+msgid ""
+"'Navigation' node and 'Navigation.get_simple_path()' are deprecated and will "
+"be removed in a future version. Use 'NavigationServer.map_get_path()' "
+"instead."
+msgstr ""
+
#: scene/3d/navigation.cpp scene/resources/curve.cpp
#, fuzzy
msgid "Up Vector"
@@ -22682,14 +22996,6 @@ msgid ""
"The NavigationAgent can be used only under a Spatial inheriting parent node."
msgstr ""
-#: scene/3d/navigation_mesh_instance.cpp
-msgid ""
-"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
-"It only provides navigation data."
-msgstr ""
-"NavigationMeshInstance ต้องเป็นโหนดลูà¸/หลานของโหนด Navigation "
-"โดยจะให้ข้อมูลà¸à¸²à¸£à¸™à¸³à¸—างเท่านั้น"
-
#: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp
#, fuzzy
msgid "NavMesh"
@@ -25393,6 +25699,16 @@ msgid "3D Physics"
msgstr "% ของเฟรมฟิสิà¸à¸ªà¹Œ"
#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "2D Navigation"
+msgstr "ตัวนำทาง"
+
+#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "3D Navigation"
+msgstr "ตัวนำทาง"
+
+#: scene/register_scene_types.cpp
msgid "Use hiDPI"
msgstr ""
@@ -26820,7 +27136,7 @@ msgstr "ทรานสิชัน: "
msgid "Refraction"
msgstr "เว้น:"
-#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp
+#: scene/resources/material.cpp
msgid "Detail"
msgstr ""
@@ -26905,7 +27221,12 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
-msgid "Sample Partition Type"
+msgid "Sampling"
+msgstr "อัตราส่วน: "
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Partition Type"
msgstr "à¹à¸à¹‰à¹„ขประเภทตัวà¹à¸›à¸£"
#: scene/resources/navigation_mesh.cpp
@@ -26923,10 +27244,15 @@ msgid "Source Group Name"
msgstr "ต้นฉบับ"
#: scene/resources/navigation_mesh.cpp
-msgid "Agent"
+msgid "Cells"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Agents"
+msgstr "ตัวà¹à¸›à¸£à¸‰à¸²à¸à¸«à¸¥à¸±à¸:"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Max Climb"
msgstr ""
@@ -26936,11 +27262,16 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
+msgid "Regions"
+msgstr "ขอบเขต"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
msgid "Merge Size"
msgstr "รวมจาà¸à¸‰à¸²à¸"
#: scene/resources/navigation_mesh.cpp
-msgid "Edge"
+msgid "Edges"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -26954,6 +27285,11 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
+msgid "Details"
+msgstr "โหลดค่าเริ่มต้น"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
msgid "Sample Distance"
msgstr "ระยะà¸à¸²à¸£à¹€à¸¥à¸·à¸­à¸:"
@@ -26971,9 +27307,19 @@ msgid "Ledge Spans"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Filter Walkable Low Height Spans"
+msgid "Walkable Low Height Spans"
msgstr ""
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB"
+msgstr "à¸à¸³à¸¥à¸±à¸‡à¸ªà¸£à¹‰à¸²à¸‡ AABB"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB Offset"
+msgstr "เลื่อน:"
+
#: scene/resources/occluder_shape.cpp
msgid "Spheres"
msgstr ""
@@ -27386,6 +27732,11 @@ msgid "Scenario"
msgstr "ฉาà¸"
#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Navigation Map"
+msgstr "ตัวนำทาง"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
msgid "Direct Space State"
msgstr ""
@@ -27403,6 +27754,26 @@ msgstr "เส้นตรงซ้าย"
msgid "Default Angular Damp"
msgstr ""
+#: scene/resources/world.cpp
+#, fuzzy
+msgid "Default Map Up"
+msgstr "ค่าเริ่มต้น"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Size"
+msgstr "อัพเดทà¸à¸²à¸£à¸”ูตัวอย่าง"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Height"
+msgstr "à¸à¸³à¸¥à¸±à¸‡à¸—ดสอบ"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Edge Connection Margin"
+msgstr "à¹à¸à¹‰à¹„ขà¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•่อ:"
+
#: scene/resources/world_2d.cpp
msgid "Canvas"
msgstr ""
diff --git a/editor/translations/tl.po b/editor/translations/tl.po
index 5436a37303..f67f19ad11 100644
--- a/editor/translations/tl.po
+++ b/editor/translations/tl.po
@@ -215,9 +215,10 @@ msgid "Data"
msgstr ""
#: core/io/file_access_network.cpp core/register_core_types.cpp
-#: editor/editor_settings.cpp main/main.cpp
+#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
#: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h
+#: scene/gui/file_dialog.cpp
msgid "Network"
msgstr ""
@@ -376,6 +377,16 @@ msgstr ""
msgid "Max Size (KB)"
msgstr ""
+#: core/os/input.cpp
+#, fuzzy
+msgid "Mouse Mode"
+msgstr "Gumalaw"
+
+#: core/os/input.cpp
+#, fuzzy
+msgid "Use Accumulated Input"
+msgstr "Alisin ang Input"
+
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: servers/audio_server.cpp
msgid "Device"
@@ -574,7 +585,8 @@ msgstr "Paglalarawan"
#: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
-#: main/main.cpp
+#: main/main.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp
msgid "Run"
msgstr "Patakbuhin"
@@ -660,6 +672,11 @@ msgid "Main Run Args"
msgstr ""
#: core/project_settings.cpp
+#, fuzzy
+msgid "Scene Naming"
+msgstr "Kinalalagyan ng Eksena:"
+
+#: core/project_settings.cpp
msgid "Search In File Extensions"
msgstr ""
@@ -667,19 +684,15 @@ msgstr ""
msgid "Script Templates Search Path"
msgstr ""
-#: core/project_settings.cpp editor/editor_node.cpp
-#: editor/plugins/version_control_editor_plugin.cpp
-msgid "Version Control"
-msgstr "Pagmamahala ng Bersyon"
-
#: core/project_settings.cpp
-msgid "Autoload On Startup"
-msgstr ""
+#, fuzzy
+msgid "Version Control Autoload On Startup"
+msgstr "Pagmamahala ng Bersyon"
#: core/project_settings.cpp
#, fuzzy
-msgid "Plugin Name"
-msgstr "Pangalan ng Plugin:"
+msgid "Version Control Plugin Name"
+msgstr "Pagmamahala ng Bersyon"
#: core/project_settings.cpp scene/2d/collision_object_2d.cpp
#: scene/3d/collision_object.cpp scene/gui/control.cpp
@@ -793,7 +806,8 @@ msgid "Quality"
msgstr ""
#: core/project_settings.cpp scene/gui/file_dialog.cpp
-#: scene/main/scene_tree.cpp servers/visual_server.cpp
+#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp
+#: servers/visual_server.cpp
#, fuzzy
msgid "Filters"
msgstr "Salain ang mga node"
@@ -2228,8 +2242,8 @@ msgid "Open"
msgstr "Buksan"
#: editor/dependency_editor.cpp
-msgid "Owners Of:"
-msgstr "Mga May-ari ng:"
+msgid "Owners of: %s (Total: %d)"
+msgstr ""
#: editor/dependency_editor.cpp
msgid ""
@@ -2527,7 +2541,7 @@ msgid "Bus Options"
msgstr "Kaayusan ng Bus"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/scene_tree_dock.cpp
+#: editor/project_export.cpp editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "I-duplicate"
@@ -2786,6 +2800,23 @@ msgid "Choose"
msgstr "Pumili"
#: editor/editor_export.cpp
+msgid "Project export for platform:"
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Completed with errors."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Completed successfully."
+msgstr ""
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed."
+msgstr "Nabigo:"
+
+#: editor/editor_export.cpp
msgid "Storing File:"
msgstr "Inimpok ang File:"
@@ -2798,6 +2829,31 @@ msgid "Packing"
msgstr "Iniimpake"
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save PCK"
+msgstr "I-save Bilang"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Cannot create file \"%s\"."
+msgstr "Nabigong lumikha ng folder."
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to export project files."
+msgstr "Hindi mai-luwas ang mga project file"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Can't open file to read from path \"%s\"."
+msgstr "Hindi mabuksan ang file para sa pagsusulat:"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save ZIP"
+msgstr "I-save Bilang"
+
+#: editor/editor_export.cpp
msgid ""
"Target platform requires 'ETC' texture compression for GLES2. Enable 'Import "
"Etc' in Project Settings."
@@ -2901,11 +2957,29 @@ msgstr ""
msgid "Custom release template not found."
msgstr ""
+#: editor/editor_export.cpp
+msgid "Prepare Template"
+msgstr ""
+
+#: editor/editor_export.cpp platform/osx/export/export.cpp
+msgid "The given export path doesn't exist."
+msgstr ""
+
#: editor/editor_export.cpp platform/javascript/export/export.cpp
-msgid "Template file not found:"
+#, fuzzy
+msgid "Template file not found: \"%s\"."
msgstr "Di-mahanap ang template file:"
#: editor/editor_export.cpp
+msgid "Failed to copy export template."
+msgstr ""
+
+#: editor/editor_export.cpp platform/windows/export/export.cpp
+#: platform/x11/export/export.cpp
+msgid "PCK Embedding"
+msgstr ""
+
+#: editor/editor_export.cpp
msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB."
msgstr ""
@@ -3075,9 +3149,9 @@ msgid "Import"
msgstr "Umangkat"
#: editor/editor_feature_profile.cpp editor/project_export.cpp
-#: platform/android/export/export.cpp platform/javascript/export/export.cpp
-#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
-#: platform/windows/export/export.cpp
+#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#: platform/uwp/export/export.cpp platform/windows/export/export.cpp
msgid "Export"
msgstr "Magluwas"
@@ -4181,15 +4255,6 @@ msgid ""
"Unable to write to file '%s', file in use, locked or lacking permissions."
msgstr ""
-#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
-msgid "Scene"
-msgstr "Eksena"
-
-#: editor/editor_node.cpp
-#, fuzzy
-msgid "Scene Naming"
-msgstr "Kinalalagyan ng Eksena:"
-
#: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp
#: servers/arvr/arvr_interface.cpp
msgid "Interface"
@@ -4313,6 +4378,10 @@ msgid "Default Color Picker Mode"
msgstr ""
#: 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
#, fuzzy
msgid "Username"
msgstr "Inibang Pangalan"
@@ -4341,6 +4410,10 @@ msgstr ""
msgid "Add a new scene."
msgstr "Magdagdag ng panibagong eksena."
+#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
+msgid "Scene"
+msgstr "Eksena"
+
#: editor/editor_node.cpp
msgid "Go to previously opened scene."
msgstr "Bumalik sa dating binuksang eksena."
@@ -5076,6 +5149,11 @@ msgid ""
"as runnable."
msgstr ""
+#: editor/editor_run_native.cpp
+#, fuzzy
+msgid "Project Run"
+msgstr "Proyekto"
+
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
msgstr ""
@@ -5347,7 +5425,9 @@ msgid "Draw Spaces"
msgstr ""
#: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp
-#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp
+#: scene/main/scene_tree.cpp scene/resources/world.cpp
+#: scene/resources/world_2d.cpp
msgid "Navigation"
msgstr "Nabigasyon"
@@ -6795,7 +6875,7 @@ msgstr ""
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp
-#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp
+#: scene/gui/control.cpp
#, fuzzy
msgid "Filter"
msgstr "Salain ang mga node"
@@ -7087,6 +7167,18 @@ msgid "Saving..."
msgstr "Nililigtas..."
#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used as a normal map in 3D. Enabling red-green "
+"texture compression to reduce memory usage (blue channel is discarded)."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap "
+"generation and VRAM texture compression."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
msgid "2D, Detect 3D"
msgstr ""
@@ -7756,11 +7848,20 @@ msgid "New Anim"
msgstr "Bagong Anim"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+msgstr "Gumawa ng Bagong Animasyon"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Change Animation Name:"
msgstr "Baguhin ang Pangalan ng Animasyon:"
#: editor/plugins/animation_player_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Rename Animation"
+msgstr "Palitan ang Pangalan ng Animation"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Delete Animation?"
msgstr "Alisin ang Animation?"
@@ -7778,11 +7879,6 @@ msgid "Animation name already exists!"
msgstr "May nakapangalan na parehas sa Animation na ito!"
#: editor/plugins/animation_player_editor_plugin.cpp
-#: editor/plugins/sprite_frames_editor_plugin.cpp
-msgid "Rename Animation"
-msgstr "Palitan ang Pangalan ng Animation"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate Animation"
msgstr ""
@@ -7925,10 +8021,6 @@ 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:"
@@ -10000,6 +10092,7 @@ msgid "Points"
msgstr ""
#: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp
+#: scene/resources/navigation_mesh.cpp
msgid "Polygons"
msgstr ""
@@ -11358,8 +11451,9 @@ msgid "Invalid geometry, can't replace by mesh."
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
-msgid "Convert to Mesh2D"
-msgstr ""
+#, fuzzy
+msgid "Convert to MeshInstance2D"
+msgstr "Gawing %s"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Invalid geometry, can't create polygon."
@@ -12338,8 +12432,7 @@ msgid "Select the previous shape, subtile, or Tile."
msgstr ""
#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp
-#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp
-#: scene/resources/texture.cpp
+#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp
msgid "Region"
msgstr "Saklaw"
@@ -13787,31 +13880,10 @@ 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 "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 "Export Path"
msgstr ""
@@ -13950,6 +14022,11 @@ msgid "Export templates for this platform are missing:"
msgstr ""
#: editor/project_export.cpp
+#, fuzzy
+msgid "Project Export"
+msgstr "Mga Tagapagtatag ng Proyekto"
+
+#: editor/project_export.cpp
msgid "Manage Export Templates"
msgstr ""
@@ -16243,7 +16320,7 @@ msgstr ""
#: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp
#: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp
-#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp
+#: scene/3d/collision_polygon.cpp
#, fuzzy
msgid "Polygon"
msgstr "Bagong Polygon"
@@ -16848,7 +16925,6 @@ msgid "Use In Baked Light"
msgstr ""
#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
-#: scene/resources/navigation_mesh.cpp
msgid "Cell"
msgstr ""
@@ -16878,6 +16954,19 @@ msgstr "Gitna"
msgid "Mask"
msgstr ""
+#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
+#, fuzzy
+msgid "Bake Navigation"
+msgstr "Nabigasyon"
+
+#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp
+#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp
+#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp
+#: scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Navigation Layers"
+msgstr "Nabigasyon"
+
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Plane"
msgstr ""
@@ -18387,10 +18476,6 @@ 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."
@@ -18494,12 +18579,16 @@ msgstr ""
msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version."
msgstr ""
+#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Code Signing"
+msgstr "Hudyat"
+
#: 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."
+"'apksigner' could not be found. Please check that the command is available "
+"in the Android SDK build-tools directory. The resulting %s is unsigned."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18515,6 +18604,11 @@ msgid "Could not find keystore, unable to export."
msgstr ""
#: platform/android/export/export_plugin.cpp
+#, fuzzy
+msgid "Could not start apksigner executable."
+msgstr "Hindi maumpisa ang subprocess!"
+
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr "nagbalik ng may pagkakabigong #%d ang 'apksigner'"
@@ -18545,7 +18639,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Unsupported export format!\n"
+msgid "Unsupported export format!"
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18556,20 +18650,19 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Android build version mismatch:\n"
-" Template installed: %s\n"
-" Godot Version: %s\n"
+"Android build version mismatch: Template installed: %s, Godot version: %s. "
"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"
+"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 ""
+#, fuzzy
+msgid "Could not export project files to gradle project."
+msgstr "Hindi mai-luwas ang mga project file"
#: platform/android/export/export_plugin.cpp
msgid "Could not write expansion package file!"
@@ -18581,7 +18674,7 @@ msgstr "Binibuild ang Android Project (gradle)"
#: platform/android/export/export_plugin.cpp
msgid ""
-"Building of Android project failed, check output for the error.\n"
+"Building of Android project failed, check output for the error. "
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
@@ -18596,25 +18689,24 @@ msgid ""
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Package not found: %s"
-msgstr ""
+#, fuzzy
+msgid "Package not found: \"%s\"."
+msgstr "Di-mahanap ang animation: '%s'"
#: platform/android/export/export_plugin.cpp
msgid "Creating APK..."
msgstr "Nililikha ang APK..."
#: platform/android/export/export_plugin.cpp
-msgid ""
-"Could not find template APK to export:\n"
-"%s"
+#, fuzzy
+msgid "Could not find template APK to export: \"%s\"."
msgstr ""
"Walang mahanap na template APK upang iluwas:\n"
"%s"
#: platform/android/export/export_plugin.cpp
msgid ""
-"Missing libraries in the export template for the selected architectures: "
-"%s.\n"
+"Missing libraries in the export template for the selected architectures: %s. "
"Please build a template with all required libraries, or uncheck the missing "
"architectures in the export preset."
msgstr ""
@@ -18624,7 +18716,8 @@ msgid "Adding files..."
msgstr "Dinadagdag ang mga file..."
#: platform/android/export/export_plugin.cpp
-msgid "Could not export project files"
+#, fuzzy
+msgid "Could not export project files."
msgstr "Hindi mai-luwas ang mga project file"
#: platform/android/export/export_plugin.cpp
@@ -18864,6 +18957,17 @@ msgstr "Kopyahin ang mga Node"
msgid "Custom BG Color"
msgstr "Kopyahin ang mga Node"
+#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Prepare Templates"
+msgstr "Pangasiwaan ang mga Export Template..."
+
+#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Export template not found."
+msgstr "Di-mahanap ang template file:"
+
#: platform/iphone/export/export.cpp
msgid "App Store Team ID not specified - cannot configure the project."
msgstr ""
@@ -18885,19 +18989,34 @@ msgid "Run exported HTML in the system's default browser."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not open template for export:"
+#, fuzzy
+msgid "Could not open template for export: \"%s\"."
msgstr ""
+"Walang mahanap na template APK upang iluwas:\n"
+"%s"
#: platform/javascript/export/export.cpp
-msgid "Invalid export template:"
-msgstr ""
+#, fuzzy
+msgid "Invalid export template: \"%s\"."
+msgstr "Di-wastong index ng uring %s para sa batayang uri %s"
#: platform/javascript/export/export.cpp
-msgid "Could not write file:"
-msgstr ""
+#, fuzzy
+msgid "Could not write file: \"%s\"."
+msgstr "Nabigong lumikha ng folder."
+
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Icon Creation"
+msgstr "Laman:"
+
+#: platform/javascript/export/export.cpp
+#, fuzzy
+msgid "Could not read file: \"%s\"."
+msgstr "Nabigong lumikha ng folder."
#: platform/javascript/export/export.cpp
-msgid "Could not read file:"
+msgid "PWA"
msgstr ""
#: platform/javascript/export/export.cpp
@@ -18975,16 +19094,18 @@ msgid "Icon 512 X 512"
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not read HTML shell:"
+msgid "Could not read HTML shell: \"%s\"."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not create HTTP server directory:"
-msgstr ""
+#, fuzzy
+msgid "Could not create HTTP server directory: %s."
+msgstr "Nabigong lumikha ng folder."
#: platform/javascript/export/export.cpp
-msgid "Error starting HTTP server:"
-msgstr ""
+#, fuzzy
+msgid "Error starting HTTP server: %d."
+msgstr "Nabigong ang pagsave ang file: %s"
#: platform/javascript/export/export.cpp
msgid "Web"
@@ -19273,9 +19394,28 @@ msgid "Apple Team ID"
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open icon file \"%s\"."
+msgstr "Hindi mai-luwas ang mga project file"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start xcrun executable."
+msgstr "Hindi maumpisa ang subprocess!"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization failed."
+msgstr "Nabigasyon"
+
+#: platform/osx/export/export.cpp
+msgid "Notarization request UUID: \"%s\""
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid ""
-"Note: The notarization process generally takes less than an hour. When the "
-"process is completed, you'll receive an email."
+"The notarization process generally takes less than an hour. When the process "
+"is completed, you'll receive an email."
msgstr ""
#: platform/osx/export/export.cpp
@@ -19291,17 +19431,75 @@ msgid ""
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign failed with error \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign require regex module."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Could not start codesign executable, make sure Xcode command line tools are "
+"installed."
+msgstr ""
+
+#: platform/osx/export/export.cpp platform/windows/export/export.cpp
msgid "No identity found."
msgstr ""
#: platform/osx/export/export.cpp
#, fuzzy
+msgid "Cannot sign file %s."
+msgstr "Nabigong ang pagsave ang file: %s"
+
+#: platform/osx/export/export.cpp
+msgid "Relative symlinks are not supported, exported \"%s\" might be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "DMG Creation"
+msgstr "Mga Direksyon"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start hdiutil executable."
+msgstr "Hindi maumpisa ang subprocess!"
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed - file exists."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
msgid "Creating app bundle"
msgstr "Ginagawa ang Thumbnail"
#: platform/osx/export/export.cpp
-msgid "Could not find template app to export:"
+#, fuzzy
+msgid "Could not find template app to export: \"%s\"."
msgstr ""
+"Walang mahanap na template APK upang iluwas:\n"
+"%s"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid export format."
+msgstr "Di-wastong binary format."
#: platform/osx/export/export.cpp
msgid ""
@@ -19311,7 +19509,7 @@ msgstr ""
#: platform/osx/export/export.cpp
msgid ""
-"Requested template binary '%s' not found. It might be missing from your "
+"Requested template binary \"%s\" not found. It might be missing from your "
"template archive."
msgstr ""
@@ -19352,6 +19550,15 @@ msgid "Sending archive for notarization"
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "ZIP Creation"
+msgstr "Proyekto"
+
+#: platform/osx/export/export.cpp
+msgid "Could not open file to read from path \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr ""
@@ -19659,6 +19866,11 @@ msgid "Debug Algorithm"
msgstr ""
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to rename temporary file \"%s\"."
+msgstr "Nabigong lumikha ng folder."
+
+#: platform/windows/export/export.cpp
msgid "Identity Type"
msgstr ""
@@ -19705,6 +19917,65 @@ msgid "Trademarks"
msgstr ""
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Resources Modification"
+msgstr "Constant"
+
+#: platform/windows/export/export.cpp
+msgid "Could not find rcedit executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find wine executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start rcedit executable, configure rcedit path in the Editor "
+"Settings (Export > Windows > Rcedit)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"rcedit failed to modify executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find signtool executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find osslsigncode executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid identity type."
+msgstr "Di-wastong mga argument para i-construct ang '%s'"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid timestamp server."
+msgstr "Di-wastong pangalan."
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start signtool executable, configure signtool path in the Editor "
+"Settings (Export > Windows > Signtool)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Signtool failed to sign executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Failed to remove temporary file \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
msgid ""
"The rcedit tool must be configured in the Editor Settings (Export > Windows "
"> Rcedit) to change the icon or app information data."
@@ -19724,6 +19995,22 @@ msgid "Invalid product version:"
msgstr ""
#: platform/windows/export/export.cpp
+msgid "Windows executables cannot be >= 4 GiB."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Failed to open executable file \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable file header corrupted."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable \"pck\" section not found."
+msgstr ""
+
+#: platform/windows/export/export.cpp
#, fuzzy
msgid "Windows"
msgstr "Bagong Tabing"
@@ -19740,6 +20027,10 @@ msgstr ""
msgid "Wine"
msgstr ""
+#: platform/x11/export/export.cpp
+msgid "32-bit executables cannot have embedded data >= 4 GiB."
+msgstr ""
+
#: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp
#: scene/resources/texture.cpp
#, fuzzy
@@ -19859,7 +20150,8 @@ msgstr ""
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/3d/light.cpp scene/3d/reflection_probe.cpp
-#: scene/3d/visual_instance.cpp scene/resources/material.cpp
+#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp
+#: scene/resources/material.cpp
msgid "Max Distance"
msgstr ""
@@ -20617,6 +20909,18 @@ msgstr ""
msgid "Edge Connection Margin"
msgstr "Ayusin Ang Pagkakabit:"
+#: scene/2d/navigation_2d.cpp
+msgid ""
+"'Navigation2D' node and 'Navigation2D.get_simple_path()' are deprecated and "
+"will be removed in a future version. Use 'Navigation2DServer.map_get_path()' "
+"instead."
+msgstr ""
+
+#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
+#, fuzzy
+msgid "Path Desired Distance"
+msgstr "Pumili ng Pangunahing Eksena"
+
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
msgid "Target Desired Distance"
msgstr ""
@@ -20669,13 +20973,16 @@ msgid ""
msgstr ""
#: scene/2d/navigation_polygon.cpp
-msgid ""
-"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
-"node. It only provides navigation data."
+msgid "Navpoly"
msgstr ""
-#: scene/2d/navigation_polygon.cpp
-msgid "Navpoly"
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Enter Cost"
+msgstr "Usog:"
+
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+msgid "Travel Cost"
msgstr ""
#: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp
@@ -21804,6 +22111,13 @@ msgstr ""
msgid "Transform Normals"
msgstr "Track na Pang-3D Transform"
+#: scene/3d/navigation.cpp
+msgid ""
+"'Navigation' node and 'Navigation.get_simple_path()' are deprecated and will "
+"be removed in a future version. Use 'NavigationServer.map_get_path()' "
+"instead."
+msgstr ""
+
#: scene/3d/navigation.cpp scene/resources/curve.cpp
#, fuzzy
msgid "Up Vector"
@@ -21827,12 +22141,6 @@ msgid ""
"The NavigationAgent can be used only under a Spatial inheriting parent node."
msgstr ""
-#: scene/3d/navigation_mesh_instance.cpp
-msgid ""
-"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
-"It only provides navigation data."
-msgstr ""
-
#: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp
msgid "NavMesh"
msgstr ""
@@ -24428,6 +24736,16 @@ msgid "3D Physics"
msgstr ""
#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "2D Navigation"
+msgstr "Nabigasyon"
+
+#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "3D Navigation"
+msgstr "Nabigasyon"
+
+#: scene/register_scene_types.cpp
msgid "Use hiDPI"
msgstr ""
@@ -25825,7 +26143,7 @@ msgstr "Transisyon: "
msgid "Refraction"
msgstr "Ibahin ang Pangalan ng Punsyon"
-#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp
+#: scene/resources/material.cpp
msgid "Detail"
msgstr ""
@@ -25904,7 +26222,12 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
-msgid "Sample Partition Type"
+msgid "Sampling"
+msgstr "Sukat:"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Partition Type"
msgstr "Ibahin ang Punong-Uri"
#: scene/resources/navigation_mesh.cpp
@@ -25922,10 +26245,15 @@ msgid "Source Group Name"
msgstr "Pangalan ng Skript:"
#: scene/resources/navigation_mesh.cpp
-msgid "Agent"
+msgid "Cells"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Agents"
+msgstr "Mga Gizmo"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Max Climb"
msgstr ""
@@ -25935,11 +26263,16 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
+msgid "Regions"
+msgstr "Saklaw"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
msgid "Merge Size"
msgstr "Ipagsama galing sa Eksena"
#: scene/resources/navigation_mesh.cpp
-msgid "Edge"
+msgid "Edges"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -25952,6 +26285,11 @@ msgid "Verts Per Poly"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Details"
+msgstr "Ipakita ang Karaniwan"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Sample Distance"
msgstr ""
@@ -25969,9 +26307,18 @@ msgid "Ledge Spans"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Filter Walkable Low Height Spans"
+msgid "Walkable Low Height Spans"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
+msgid "Baking AABB"
msgstr ""
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB Offset"
+msgstr "Usog:"
+
#: scene/resources/occluder_shape.cpp
msgid "Spheres"
msgstr ""
@@ -26372,6 +26719,11 @@ msgid "Scenario"
msgstr "Eksena"
#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Navigation Map"
+msgstr "Nabigasyon"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
msgid "Direct Space State"
msgstr ""
@@ -26388,6 +26740,26 @@ msgstr "Burahin ang Linya"
msgid "Default Angular Damp"
msgstr ""
+#: scene/resources/world.cpp
+#, fuzzy
+msgid "Default Map Up"
+msgstr "Karaniwan"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Size"
+msgstr "Karaniwan"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Height"
+msgstr "Sinusubukan"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Edge Connection Margin"
+msgstr "Ayusin Ang Pagkakabit:"
+
#: scene/resources/world_2d.cpp
msgid "Canvas"
msgstr ""
diff --git a/editor/translations/tr.po b/editor/translations/tr.po
index 0a83a3a958..89854afb02 100644
--- a/editor/translations/tr.po
+++ b/editor/translations/tr.po
@@ -71,13 +71,15 @@
# Recep GUCLUER <rgucluer@gmail.com>, 2022.
# Emir Tunahan Alim <emrtnhalim@gmail.com>, 2022.
# inci <incialien@gmail.com>, 2022.
+# Ramazan Aslan <legendraslan@gmail.com>, 2022.
+# paledega <paledega@yandex.ru>, 2022.
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: 2022-05-27 16:15+0000\n"
-"Last-Translator: inci <incialien@gmail.com>\n"
+"PO-Revision-Date: 2022-06-26 16:16+0000\n"
+"Last-Translator: paledega <paledega@yandex.ru>\n"
"Language-Team: Turkish <https://hosted.weblate.org/projects/godot-engine/"
"godot/tr/>\n"
"Language: tr\n"
@@ -85,14 +87,13 @@ 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.13-dev\n"
+"X-Generator: Weblate 4.13.1-dev\n"
#: core/bind/core_bind.cpp main/main.cpp
msgid "Tablet Driver"
msgstr "Tablet Sürücüsü"
#: core/bind/core_bind.cpp
-#, fuzzy
msgid "Clipboard"
msgstr "Pano"
@@ -110,7 +111,7 @@ msgstr "V-Sync EtkinleÅŸtirildi"
#: core/bind/core_bind.cpp main/main.cpp
msgid "V-Sync Via Compositor"
-msgstr ""
+msgstr "Compositor Üzerinden V-Sync"
#: core/bind/core_bind.cpp main/main.cpp
msgid "Delta Smoothing"
@@ -125,7 +126,6 @@ msgid "Low Processor Usage Mode Sleep (µsec)"
msgstr "Düşük İşlemci Kullanımı Uyku Modu (μsn)"
#: core/bind/core_bind.cpp main/main.cpp platform/uwp/os_uwp.cpp
-#, fuzzy
msgid "Keep Screen On"
msgstr "Ekranı Açık Tut"
@@ -160,11 +160,11 @@ msgstr "Tam Ekran"
#: core/bind/core_bind.cpp
msgid "Maximized"
-msgstr ""
+msgstr "Maksimize edilmiÅŸ"
#: core/bind/core_bind.cpp
msgid "Minimized"
-msgstr "Küçültülmüş"
+msgstr "Minimize edilmiÅŸ"
#: core/bind/core_bind.cpp core/project_settings.cpp scene/gui/dialogs.cpp
#: scene/gui/graph_node.cpp
@@ -193,11 +193,11 @@ msgstr "Boyut"
#: core/bind/core_bind.cpp
msgid "Endian Swap"
-msgstr ""
+msgstr "Endian DeÄŸiÅŸimi"
#: core/bind/core_bind.cpp
msgid "Editor Hint"
-msgstr "Düzenleyici İpucu"
+msgstr "Düzenleyici İpucusu"
#: core/bind/core_bind.cpp
msgid "Print Error Messages"
@@ -216,9 +216,8 @@ msgid "Time Scale"
msgstr "Zaman Ölçeği"
#: core/bind/core_bind.cpp main/main.cpp
-#, fuzzy
msgid "Physics Jitter Fix"
-msgstr "Fizik Kare %"
+msgstr "Fizik Titreşim Düzeltmesi"
#: core/bind/core_bind.cpp editor/plugins/version_control_editor_plugin.cpp
msgid "Error"
@@ -226,7 +225,7 @@ msgstr "Hata"
#: core/bind/core_bind.cpp
msgid "Error String"
-msgstr "Hata Dizesi"
+msgstr "Hata yazısı"
#: core/bind/core_bind.cpp
msgid "Error Line"
@@ -238,7 +237,7 @@ msgstr "Sonuç"
#: core/command_queue_mt.cpp core/message_queue.cpp main/main.cpp
msgid "Memory"
-msgstr "Bellek"
+msgstr "Hafıza"
#: core/command_queue_mt.cpp core/message_queue.cpp
#: core/register_core_types.cpp drivers/gles2/rasterizer_canvas_base_gles2.cpp
@@ -272,16 +271,16 @@ msgid "Data"
msgstr "Veri"
#: core/io/file_access_network.cpp core/register_core_types.cpp
-#: editor/editor_settings.cpp main/main.cpp
+#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
#: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h
+#: scene/gui/file_dialog.cpp
msgid "Network"
msgstr "AÄŸ"
#: core/io/file_access_network.cpp
-#, fuzzy
msgid "Remote FS"
-msgstr "Uzak "
+msgstr "Uzaktan Dosyalama Sistemi"
#: core/io/file_access_network.cpp
msgid "Page Size"
@@ -289,11 +288,11 @@ msgstr "Sayfa Boyutu"
#: core/io/file_access_network.cpp
msgid "Page Read Ahead"
-msgstr ""
+msgstr "Sayfayı Önceden Okuma"
#: core/io/http_client.cpp
msgid "Blocking Mode Enabled"
-msgstr "Engelleme Modu Etkin"
+msgstr "Engelleme Modu EtkinleÅŸtirildi"
#: core/io/http_client.cpp
msgid "Connection"
@@ -308,33 +307,28 @@ msgid "Object ID"
msgstr "Nesne KimliÄŸi"
#: core/io/multiplayer_api.cpp core/io/packet_peer.cpp
-#, fuzzy
msgid "Allow Object Decoding"
-msgstr "Araları Doldurmayı Etkinleştir"
+msgstr "Nesne Çözümlemelerine İzin Ver"
#: core/io/multiplayer_api.cpp scene/main/scene_tree.cpp
msgid "Refuse New Network Connections"
-msgstr ""
+msgstr "Yeni Bağlantılar Kurmayı Reddet"
#: core/io/multiplayer_api.cpp scene/main/scene_tree.cpp
-#, fuzzy
msgid "Network Peer"
msgstr "AÄŸ Profilcisi"
#: core/io/multiplayer_api.cpp scene/animation/animation_player.cpp
-#, fuzzy
msgid "Root Node"
-msgstr "Kök düğüm adı"
+msgstr "Kök Düğüm Adı"
#: core/io/networked_multiplayer_peer.cpp
-#, fuzzy
msgid "Refuse New Connections"
-msgstr "BaÄŸla"
+msgstr "Yeni Bağlantıları Reddet"
#: core/io/networked_multiplayer_peer.cpp
-#, fuzzy
msgid "Transfer Mode"
-msgstr "Dönüştürme Türü"
+msgstr "Transfer Modu"
#: core/io/packet_peer.cpp
msgid "Encode Buffer Max Size"
@@ -365,9 +359,8 @@ msgid "Blocking Handshake"
msgstr ""
#: core/io/udp_server.cpp
-#, fuzzy
msgid "Max Pending Connections"
-msgstr "Bağlantıyı Düzenle:"
+msgstr "Bekletilebilecek Maks. Bağlantı Sayısı"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -385,15 +378,16 @@ msgid "Not enough bytes for decoding bytes, or invalid format."
msgstr "Baytları çözümlemek için yetersiz miktarda bayt ya da geçersiz format."
#: core/math/expression.cpp
-#, fuzzy
msgid "Invalid input %d (not passed) in expression"
-msgstr "İfadede geçersiz giriş %i (geçersiz)"
+msgstr "İfadede geçersiz giriş %d"
#: core/math/expression.cpp
+#, fuzzy
msgid "self can't be used because instance is null (not passed)"
msgstr "self kullanılamaz çünkü örnek boş (geçilmedi)"
#: core/math/expression.cpp
+#, fuzzy
msgid "Invalid operands to operator %s, %s and %s."
msgstr "\"%s\" işlecinde geçersiz terimler, '%s' ve '%s'."
@@ -419,17 +413,26 @@ msgid "Seed"
msgstr ""
#: core/math/random_number_generator.cpp
-#, fuzzy
msgid "State"
msgstr "Durum"
#: core/message_queue.cpp
msgid "Message Queue"
-msgstr ""
+msgstr "Mesaj Sırası"
#: core/message_queue.cpp
msgid "Max Size (KB)"
-msgstr ""
+msgstr "En Büyük Boyut (KB)"
+
+#: core/os/input.cpp
+#, fuzzy
+msgid "Mouse Mode"
+msgstr "Biçimi Taşı"
+
+#: core/os/input.cpp
+#, fuzzy
+msgid "Use Accumulated Input"
+msgstr "GiriÅŸi Sil"
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: servers/audio_server.cpp
@@ -437,62 +440,59 @@ msgid "Device"
msgstr "Aygıt"
#: core/os/input_event.cpp
-#, fuzzy
msgid "Alt"
-msgstr "Hepsi"
+msgstr "Alt"
#: core/os/input_event.cpp
msgid "Shift"
-msgstr ""
+msgstr "Shift"
#: core/os/input_event.cpp
#, fuzzy
msgid "Control"
-msgstr "Sürüm Kontrol"
+msgstr "Ctrl"
#: core/os/input_event.cpp
+#, fuzzy
msgid "Meta"
-msgstr ""
+msgstr "Meta"
#: core/os/input_event.cpp
-#, fuzzy
msgid "Command"
-msgstr "Topluluk"
+msgstr "Komut"
#: core/os/input_event.cpp scene/2d/touch_screen_button.cpp
#: scene/gui/base_button.cpp scene/gui/texture_button.cpp
#: scene/resources/default_theme/default_theme.cpp
-#, fuzzy
msgid "Pressed"
-msgstr "Ön ayar"
+msgstr "Basılmış"
#: core/os/input_event.cpp
#, fuzzy
msgid "Scancode"
-msgstr "Tara"
+msgstr "Tarama kodu"
#: core/os/input_event.cpp
-#, fuzzy
msgid "Physical Scancode"
-msgstr "Fiziksel Anahtar"
+msgstr "Fiziksel TuÅŸ Kodu"
#: core/os/input_event.cpp
+#, fuzzy
msgid "Unicode"
-msgstr ""
+msgstr "Unicode"
#: core/os/input_event.cpp
+#, fuzzy
msgid "Echo"
-msgstr ""
+msgstr "Eko"
#: core/os/input_event.cpp scene/gui/base_button.cpp
-#, fuzzy
msgid "Button Mask"
-msgstr "Düğme"
+msgstr "TuÅŸ Maskesi"
#: core/os/input_event.cpp scene/2d/node_2d.cpp scene/gui/control.cpp
-#, fuzzy
msgid "Global Position"
-msgstr "Genel Sabit"
+msgstr "Global Pozisyon"
#: core/os/input_event.cpp
#, fuzzy
@@ -500,35 +500,31 @@ msgid "Factor"
msgstr "Vektör"
#: core/os/input_event.cpp
-#, fuzzy
msgid "Button Index"
-msgstr "Fare Düğmesi İndeksi:"
+msgstr "Tuş İndeksi"
#: core/os/input_event.cpp
msgid "Doubleclick"
-msgstr ""
+msgstr "Çift Tıklama"
#: core/os/input_event.cpp
msgid "Tilt"
-msgstr ""
+msgstr "EÄŸim"
#: core/os/input_event.cpp
-#, fuzzy
msgid "Pressure"
-msgstr "Ön ayar"
+msgstr "Baskı"
#: core/os/input_event.cpp
-#, fuzzy
msgid "Relative"
-msgstr "Göreceli Yapış"
+msgstr "Göreceli"
#: core/os/input_event.cpp scene/2d/camera_2d.cpp scene/2d/cpu_particles_2d.cpp
#: scene/3d/cpu_particles.cpp scene/3d/interpolated_camera.cpp
#: scene/animation/animation_player.cpp scene/resources/environment.cpp
#: scene/resources/particles_material.cpp
-#, fuzzy
msgid "Speed"
-msgstr "Hız:"
+msgstr "Hız"
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: scene/3d/sprite_3d.cpp
@@ -536,14 +532,12 @@ msgid "Axis"
msgstr "Eksen"
#: core/os/input_event.cpp
-#, fuzzy
msgid "Axis Value"
-msgstr "İğneleme değeri"
+msgstr "Eksen DeÄŸeri"
#: core/os/input_event.cpp modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "Index"
-msgstr "İndeks:"
+msgstr "İndeks"
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: modules/visual_script/visual_script_nodes.cpp
@@ -554,37 +548,35 @@ msgstr "Eylem"
#: core/os/input_event.cpp scene/resources/environment.cpp
#: scene/resources/material.cpp
msgid "Strength"
-msgstr ""
+msgstr "Güç"
#: core/os/input_event.cpp
msgid "Delta"
-msgstr ""
+msgstr "Delta"
#: core/os/input_event.cpp
-#, fuzzy
msgid "Channel"
-msgstr "DeÄŸiÅŸtir"
+msgstr "Kanal"
#: core/os/input_event.cpp main/main.cpp
-#, fuzzy
msgid "Message"
-msgstr "İşleme Mesajı"
+msgstr "Mesaj"
#: core/os/input_event.cpp
#, fuzzy
msgid "Pitch"
-msgstr "Perde:"
+msgstr "Perde"
#: core/os/input_event.cpp scene/2d/cpu_particles_2d.cpp
#: scene/2d/physics_body_2d.cpp scene/3d/cpu_particles.cpp
#: scene/3d/physics_body.cpp scene/resources/particles_material.cpp
-#, fuzzy
msgid "Velocity"
-msgstr "Yörünge Görünümü Sağ"
+msgstr "Hız"
#: core/os/input_event.cpp
+#, fuzzy
msgid "Instrument"
-msgstr ""
+msgstr "Alet"
#: core/os/input_event.cpp
#, fuzzy
@@ -598,19 +590,16 @@ msgstr ""
#: core/project_settings.cpp editor/editor_node.cpp main/main.cpp
#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
#: platform/windows/export/export.cpp
-#, fuzzy
msgid "Application"
-msgstr "Eylem"
+msgstr "Uygulama"
#: core/project_settings.cpp main/main.cpp
-#, fuzzy
msgid "Config"
-msgstr "Yapışmayı Yapılandır"
+msgstr "Yapılandırma"
#: core/project_settings.cpp
-#, fuzzy
msgid "Project Settings Override"
-msgstr "Proje Ayarları..."
+msgstr "Proje Ayarlarını Bastır"
#: core/project_settings.cpp core/resource.cpp
#: editor/animation_track_editor.cpp editor/editor_autoload_settings.cpp
@@ -633,7 +622,8 @@ msgstr "Açıklama"
#: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
-#: main/main.cpp
+#: main/main.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp
msgid "Run"
msgstr "Çalıştır"
@@ -643,39 +633,36 @@ msgid "Main Scene"
msgstr "Ana Sahne"
#: core/project_settings.cpp
-#, fuzzy
msgid "Disable stdout"
-msgstr "Oto-döşemeleri Pasifleştir"
+msgstr "Stdout'u devre dışı bırak"
#: core/project_settings.cpp
-#, fuzzy
msgid "Disable stderr"
-msgstr "Pasif Öge"
+msgstr "Stderr'i devre dışı bırak"
#: core/project_settings.cpp
msgid "Use Hidden Project Data Directory"
-msgstr ""
+msgstr "GizlenmiÅŸ Proje Verileri Dizinini Kullan"
#: core/project_settings.cpp
msgid "Use Custom User Dir"
-msgstr ""
+msgstr "Özelleştirilmiş Kullanıcı Dizinini Kullan"
#: core/project_settings.cpp
msgid "Custom User Dir Name"
-msgstr ""
+msgstr "Özelleştirilmiş Kullanıcı Dizini Adı"
#: core/project_settings.cpp main/main.cpp
#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
#: platform/uwp/os_uwp.cpp
-#, fuzzy
msgid "Display"
-msgstr "Hepsini Görüntüle"
+msgstr "Görüntüle"
#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp
#: modules/opensimplex/noise_texture.cpp scene/2d/line_2d.cpp
#: scene/3d/label_3d.cpp scene/gui/text_edit.cpp scene/resources/texture.cpp
msgid "Width"
-msgstr ""
+msgstr "GeniÅŸlik"
#: core/project_settings.cpp main/main.cpp modules/csg/csg_shape.cpp
#: modules/gltf/gltf_node.cpp modules/opensimplex/noise_texture.cpp
@@ -683,23 +670,20 @@ msgstr ""
#: scene/resources/capsule_shape_2d.cpp scene/resources/cylinder_shape.cpp
#: scene/resources/font.cpp scene/resources/navigation_mesh.cpp
#: scene/resources/primitive_meshes.cpp scene/resources/texture.cpp
-#, fuzzy
msgid "Height"
-msgstr "Işık"
+msgstr "Yükseklik"
#: core/project_settings.cpp
msgid "Always On Top"
-msgstr ""
+msgstr "Her Zaman Üstte"
#: core/project_settings.cpp
-#, fuzzy
msgid "Test Width"
-msgstr "Soldan Görünüm"
+msgstr "Test GeniÅŸliÄŸi"
#: core/project_settings.cpp
-#, fuzzy
msgid "Test Height"
-msgstr "Deneme"
+msgstr "Test Yüksekliği"
#: core/project_settings.cpp editor/animation_track_editor.cpp
#: editor/editor_audio_buses.cpp main/main.cpp servers/audio_server.cpp
@@ -707,9 +691,8 @@ msgid "Audio"
msgstr "Ses"
#: core/project_settings.cpp
-#, fuzzy
msgid "Default Bus Layout"
-msgstr "Varsayılan Bus Yerleşim Düzenini Yükle."
+msgstr "Varsayılan Bus Yerleşim Düzeni"
#: core/project_settings.cpp editor/editor_export.cpp
#: editor/editor_file_system.cpp editor/editor_node.cpp
@@ -724,93 +707,84 @@ msgid "Main Run Args"
msgstr "Ana Sahne DeÄŸiÅŸtirgenleri:"
#: core/project_settings.cpp
+#, fuzzy
+msgid "Scene Naming"
+msgstr "Sahne Yolu:"
+
+#: core/project_settings.cpp
msgid "Search In File Extensions"
-msgstr ""
+msgstr "Dosya Uzantılarında Ara"
#: core/project_settings.cpp
msgid "Script Templates Search Path"
-msgstr ""
-
-#: core/project_settings.cpp editor/editor_node.cpp
-#: editor/plugins/version_control_editor_plugin.cpp
-msgid "Version Control"
-msgstr "Sürüm Kontrol"
+msgstr "Script Dosyalarını Aramak İçin Dosya Yolu"
#: core/project_settings.cpp
-msgid "Autoload On Startup"
-msgstr ""
+#, fuzzy
+msgid "Version Control Autoload On Startup"
+msgstr "Başlangıçta Otomatik Yükleme"
#: core/project_settings.cpp
#, fuzzy
-msgid "Plugin Name"
-msgstr "Eklentinin Adı:"
+msgid "Version Control Plugin Name"
+msgstr "Sürüm Kontrol"
#: core/project_settings.cpp scene/2d/collision_object_2d.cpp
#: scene/3d/collision_object.cpp scene/gui/control.cpp
-#, fuzzy
msgid "Input"
-msgstr "GiriÅŸ Ekle"
+msgstr "GiriÅŸ"
#: core/project_settings.cpp
msgid "UI Accept"
-msgstr ""
+msgstr "Kullanıcı Arayüzü Kabul Et"
#: core/project_settings.cpp
-#, fuzzy
msgid "UI Select"
-msgstr "Seç"
+msgstr "Kullanıcı Arayüzü Seç"
#: core/project_settings.cpp
-#, fuzzy
msgid "UI Cancel"
-msgstr "Vazgeç"
+msgstr "Kullanıcı Arayüzünü İptal Et"
#: core/project_settings.cpp
-#, fuzzy
msgid "UI Focus Next"
-msgstr "Yola Odaklan"
+msgstr "Kullanıcı Arayüzü Sonrakine Odaklan"
#: core/project_settings.cpp
-#, fuzzy
msgid "UI Focus Prev"
-msgstr "Yola Odaklan"
+msgstr "Kullanıcı Arayüzü Öncekine Odaklan"
#: core/project_settings.cpp
-#, fuzzy
msgid "UI Left"
-msgstr "Sol Üst"
+msgstr "Kullanıcı Arayüzü Sol"
#: core/project_settings.cpp
-#, fuzzy
msgid "UI Right"
-msgstr "Sağ Üst"
+msgstr "Kullanıcı Arayüzü Sağ"
#: core/project_settings.cpp
msgid "UI Up"
-msgstr ""
+msgstr "Kullanıcı Arayüzü Yukarı"
#: core/project_settings.cpp
-#, fuzzy
msgid "UI Down"
-msgstr "Aşağı"
+msgstr "Kullanıcı Arayüzü Aşağı"
#: core/project_settings.cpp
-#, fuzzy
msgid "UI Page Up"
-msgstr "Sayfa: "
+msgstr "Kullanıcı Arayüzü Sayfa Yukarı"
#: core/project_settings.cpp
msgid "UI Page Down"
-msgstr ""
+msgstr "Kullanıcı Arayüzü Sayfa Aşağı"
#: core/project_settings.cpp
msgid "UI Home"
-msgstr ""
+msgstr "Kullanıcı Arayüzü Home"
#: core/project_settings.cpp
-#, fuzzy
msgid "UI End"
-msgstr "Sonunda"
+msgstr "Kullanıcı Arayüzü End"
#: core/project_settings.cpp main/main.cpp modules/bullet/register_types.cpp
#: modules/bullet/space_bullet.cpp scene/2d/physics_body_2d.cpp
@@ -820,9 +794,8 @@ msgstr "Sonunda"
#: servers/physics_2d/physics_2d_server_wrap_mt.h
#: servers/physics_2d/space_2d_sw.cpp servers/physics_2d_server.cpp
#: servers/physics_server.cpp
-#, fuzzy
msgid "Physics"
-msgstr " (Fiziksel)"
+msgstr "Fizik"
#: core/project_settings.cpp editor/editor_settings.cpp
#: editor/import/resource_importer_layered_texture.cpp
@@ -832,12 +805,11 @@ msgstr " (Fiziksel)"
#: scene/3d/physics_body.cpp scene/resources/world.cpp
#: servers/physics/space_sw.cpp servers/physics_server.cpp
msgid "3D"
-msgstr ""
+msgstr "3D"
#: core/project_settings.cpp
-#, fuzzy
msgid "Smooth Trimesh Collision"
-msgstr "Üçlü Örüntü Çarpışma Kardeşi Oluştur"
+msgstr "Akıcı Trimesh Çarpışması"
#: core/project_settings.cpp drivers/gles2/rasterizer_canvas_base_gles2.cpp
#: drivers/gles2/rasterizer_scene_gles2.cpp
@@ -848,9 +820,8 @@ msgstr "Üçlü Örüntü Çarpışma Kardeşi Oluştur"
#: modules/lightmapper_cpu/register_types.cpp scene/main/scene_tree.cpp
#: scene/main/viewport.cpp servers/visual/visual_server_scene.cpp
#: servers/visual_server.cpp
-#, fuzzy
msgid "Rendering"
-msgstr "OluÅŸturucu:"
+msgstr "OluÅŸturucu"
#: core/project_settings.cpp drivers/gles2/rasterizer_storage_gles2.cpp
#: drivers/gles3/rasterizer_scene_gles3.cpp
@@ -860,17 +831,17 @@ msgstr "OluÅŸturucu:"
#: scene/resources/multimesh.cpp servers/visual/visual_server_scene.cpp
#: servers/visual_server.cpp
msgid "Quality"
-msgstr ""
+msgstr "Kalite"
#: core/project_settings.cpp scene/gui/file_dialog.cpp
-#: scene/main/scene_tree.cpp servers/visual_server.cpp
-#, fuzzy
+#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp
+#: servers/visual_server.cpp
msgid "Filters"
-msgstr "Süzgeçler:"
+msgstr "Filtreler"
#: core/project_settings.cpp scene/main/viewport.cpp
msgid "Sharpen Intensity"
-msgstr ""
+msgstr "KeskinleÅŸtirme YoÄŸunluÄŸu"
#: core/project_settings.cpp editor/editor_export.cpp editor/editor_node.cpp
#: editor/editor_settings.cpp editor/plugins/script_editor_plugin.cpp
@@ -886,70 +857,67 @@ msgstr "Hata Ayıklama"
#: core/project_settings.cpp main/main.cpp modules/gdscript/gdscript.cpp
#: modules/visual_script/visual_script.cpp scene/resources/dynamic_font.cpp
-#, fuzzy
msgid "Settings"
-msgstr "Ayarlar:"
+msgstr "Ayarlar"
#: core/project_settings.cpp editor/script_editor_debugger.cpp main/main.cpp
#: modules/mono/mono_gd/gd_mono.cpp
+#, fuzzy
msgid "Profiler"
msgstr "Kesitçi"
#: core/project_settings.cpp
-#, fuzzy
msgid "Max Functions"
-msgstr "İşlev Yap"
+msgstr "Maks. Fonksiyon Sayısı"
#: core/project_settings.cpp scene/3d/vehicle_body.cpp
-#, fuzzy
msgid "Compression"
-msgstr "İfade"
+msgstr "Sıkıştırma"
#: core/project_settings.cpp
-#, fuzzy
msgid "Formats"
-msgstr "Biçem"
+msgstr "Biçim"
#: core/project_settings.cpp
msgid "Zstd"
-msgstr ""
+msgstr "Zstd"
#: core/project_settings.cpp
msgid "Long Distance Matching"
-msgstr ""
+msgstr "Uzun Mesafe EÅŸleÅŸme"
#: core/project_settings.cpp
msgid "Compression Level"
-msgstr ""
+msgstr "Sıkıştırma Seviyesi"
#: core/project_settings.cpp
msgid "Window Log Size"
-msgstr ""
+msgstr "Pencere Günlük Boyutu"
#: core/project_settings.cpp
msgid "Zlib"
-msgstr ""
+msgstr "Zlib"
#: core/project_settings.cpp
msgid "Gzip"
-msgstr ""
+msgstr "Gzip"
#: core/project_settings.cpp platform/android/export/export.cpp
msgid "Android"
-msgstr ""
+msgstr "Android"
#: core/project_settings.cpp
msgid "Modules"
-msgstr ""
+msgstr "Modüller"
#: core/register_core_types.cpp
+#, fuzzy
msgid "TCP"
-msgstr ""
+msgstr "TCP"
#: core/register_core_types.cpp
-#, fuzzy
msgid "Connect Timeout Seconds"
-msgstr "Metotlara bağlantılar:"
+msgstr "Bağlanma Zaman Aşımı Süresi(Saniye)"
#: core/register_core_types.cpp
msgid "Packet Peer Stream"
@@ -957,16 +925,15 @@ msgstr ""
#: core/register_core_types.cpp
msgid "Max Buffer (Power of 2)"
-msgstr ""
+msgstr "Maksimum Arabellek (2'nin üssü olacak şekilde)"
#: core/register_core_types.cpp editor/editor_settings.cpp main/main.cpp
msgid "SSL"
-msgstr ""
+msgstr "SSL"
#: core/register_core_types.cpp main/main.cpp
-#, fuzzy
msgid "Certificates"
-msgstr "Köşenoktalar:"
+msgstr "Sertifikalar"
#: core/resource.cpp editor/dependency_editor.cpp
#: editor/editor_resource_picker.cpp
@@ -975,9 +942,8 @@ msgid "Resource"
msgstr "Kaynak"
#: core/resource.cpp
-#, fuzzy
msgid "Local To Scene"
-msgstr "Sahneyi Kapat"
+msgstr "Sahneye Yerel"
#: core/resource.cpp editor/dependency_editor.cpp
#: editor/editor_autoload_settings.cpp editor/plugins/path_editor_plugin.cpp
@@ -987,9 +953,8 @@ msgid "Path"
msgstr "Yol"
#: core/script_language.cpp
-#, fuzzy
msgid "Source Code"
-msgstr "Kaynak"
+msgstr "Kaynak Kodu"
#: core/translation.cpp editor/project_settings_editor.cpp
msgid "Locale"
@@ -1010,27 +975,27 @@ msgstr "B"
#: core/ustring.cpp
msgid "KiB"
-msgstr "KiB"
+msgstr "KB"
#: core/ustring.cpp
msgid "MiB"
-msgstr "MiB"
+msgstr "MB"
#: core/ustring.cpp
msgid "GiB"
-msgstr "GiB"
+msgstr "GB"
#: core/ustring.cpp
msgid "TiB"
-msgstr "TiB"
+msgstr "TB"
#: core/ustring.cpp
msgid "PiB"
-msgstr "PiB"
+msgstr "PB"
#: core/ustring.cpp
msgid "EiB"
-msgstr "EiB"
+msgstr "EB"
#: drivers/gles2/rasterizer_canvas_base_gles2.cpp
#: drivers/gles2/rasterizer_scene_gles2.cpp
@@ -1038,7 +1003,7 @@ msgstr "EiB"
#: drivers/gles3/rasterizer_scene_gles3.cpp
#: drivers/gles3/rasterizer_storage_gles3.cpp modules/gltf/gltf_state.cpp
msgid "Buffers"
-msgstr ""
+msgstr "Arabellek"
#: drivers/gles2/rasterizer_canvas_base_gles2.cpp
#: drivers/gles3/rasterizer_canvas_base_gles3.cpp
@@ -1060,7 +1025,7 @@ msgstr ""
#: servers/physics_2d/space_2d_sw.cpp servers/physics_2d_server.cpp
#: servers/visual_server.cpp
msgid "2D"
-msgstr ""
+msgstr "2D"
#: drivers/gles2/rasterizer_canvas_base_gles2.cpp
#: drivers/gles3/rasterizer_canvas_base_gles3.cpp
@@ -1091,21 +1056,21 @@ msgid "Use Bicubic Sampling"
msgstr ""
#: drivers/gles3/rasterizer_scene_gles3.cpp
+#, fuzzy
msgid "Max Renderable Elements"
-msgstr ""
+msgstr "Maks. Renderlanabilinecek Ögeler"
#: drivers/gles3/rasterizer_scene_gles3.cpp
msgid "Max Renderable Lights"
-msgstr ""
+msgstr "Maks. İşlenebilinecek Işık Sayısı"
#: drivers/gles3/rasterizer_scene_gles3.cpp
-#, fuzzy
msgid "Max Renderable Reflections"
-msgstr "Merkez Seçimi"
+msgstr "Maks. İşlenebilinecek Yansıma Sayısı"
#: drivers/gles3/rasterizer_scene_gles3.cpp
msgid "Max Lights Per Object"
-msgstr ""
+msgstr "Maks. Objeye düşen Işık Sayısı"
#: drivers/gles3/rasterizer_scene_gles3.cpp
msgid "Subsurface Scattering"
@@ -1125,9 +1090,8 @@ msgid "Scale"
msgstr "Ölçekle"
#: drivers/gles3/rasterizer_scene_gles3.cpp
-#, fuzzy
msgid "Follow Surface"
-msgstr "Yüzeyi Doldur"
+msgstr "Yüzeyi Takip Et"
#: drivers/gles3/rasterizer_scene_gles3.cpp
msgid "Weight Samples"
@@ -1139,7 +1103,7 @@ msgstr ""
#: drivers/gles3/rasterizer_scene_gles3.cpp scene/resources/environment.cpp
msgid "High Quality"
-msgstr ""
+msgstr "Yüksek Kalite"
#: drivers/gles3/rasterizer_storage_gles3.cpp
msgid "Blend Shape Max Buffer Size (KB)"
@@ -1148,7 +1112,7 @@ msgstr ""
#. TRANSLATORS: Adjective, refers to the mode for Bezier handles (Free, Balanced, Mirror).
#: editor/animation_bezier_editor.cpp
msgid "Free"
-msgstr "Ücretsiz"
+msgstr "Özgür"
#: editor/animation_bezier_editor.cpp
msgid "Balanced"
@@ -1230,16 +1194,14 @@ msgstr "Zaman"
#: editor/animation_track_editor.cpp editor/import/resource_importer_scene.cpp
#: platform/osx/export/export.cpp
-#, fuzzy
msgid "Location"
-msgstr "YerelleÅŸtirme"
+msgstr "Konum"
#: editor/animation_track_editor.cpp modules/gltf/gltf_node.cpp
#: scene/2d/polygon_2d.cpp scene/2d/remote_transform_2d.cpp
#: scene/3d/remote_transform.cpp scene/3d/spatial.cpp scene/gui/control.cpp
-#, fuzzy
msgid "Rotation"
-msgstr "Dönme Adımı:"
+msgstr "Rotasyon"
#: editor/animation_track_editor.cpp editor/script_editor_debugger.cpp
#: modules/visual_script/visual_script_nodes.cpp scene/gui/range.cpp
@@ -1247,14 +1209,13 @@ msgid "Value"
msgstr "DeÄŸer"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Arg Count"
-msgstr "DeÄŸer:"
+msgstr "Argüman Sayısı"
#: editor/animation_track_editor.cpp main/main.cpp
#: modules/mono/mono_gd/gd_mono.cpp
msgid "Args"
-msgstr ""
+msgstr "Argümanlar"
#: editor/animation_track_editor.cpp editor/editor_settings.cpp
#: editor/script_editor_debugger.cpp modules/gltf/gltf_accessor.cpp
@@ -1301,9 +1262,8 @@ msgid "Animation"
msgstr "Animasyon"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Easing"
-msgstr "Açılma Kararma"
+msgstr "YumuÅŸatma"
#: editor/animation_track_editor.cpp
msgid "Anim Multi Change Keyframe Time"
@@ -1360,7 +1320,7 @@ msgstr "Animasyon Oynatıcı İzi"
#: editor/animation_track_editor.cpp
msgid "Animation length (frames)"
-msgstr "Animasyon uzunluğu (çerçeve)"
+msgstr "Animasyon uzunluÄŸu (kare)"
#: editor/animation_track_editor.cpp
msgid "Animation length (seconds)"
@@ -1377,7 +1337,7 @@ msgstr "Animasyon Döngüsü"
#: editor/animation_track_editor.cpp
#: modules/visual_script/visual_script_editor.cpp
msgid "Functions:"
-msgstr "İşlevler:"
+msgstr "Fonksiyonlar:"
#: editor/animation_track_editor.cpp
msgid "Audio Clips:"
@@ -1412,19 +1372,16 @@ msgid "Remove this track."
msgstr "Bu izi sil."
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Time (s):"
-msgstr "Süre (sn): "
+msgstr "Süre (sn):"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Position:"
-msgstr "Pozisyon"
+msgstr "Pozisyon:"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Rotation:"
-msgstr "Dönme Adımı:"
+msgstr "Rotasyon:"
#: editor/animation_track_editor.cpp
#: editor/plugins/animation_tree_player_editor_plugin.cpp
@@ -1446,9 +1403,8 @@ msgid "(Invalid, expected type: %s)"
msgstr "Geçersiz Dışa Aktarım Şablonu:"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Easing:"
-msgstr "Açılma Kararma"
+msgstr "YumuÅŸatma:"
#: editor/animation_track_editor.cpp
#, fuzzy
@@ -2305,8 +2261,8 @@ msgid "Open"
msgstr "Aç"
#: editor/dependency_editor.cpp
-msgid "Owners Of:"
-msgstr "Şunların sahipleri:"
+msgid "Owners of: %s (Total: %d)"
+msgstr ""
#: editor/dependency_editor.cpp
msgid ""
@@ -2610,7 +2566,7 @@ msgid "Bus Options"
msgstr "Bus ayarları"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/scene_tree_dock.cpp
+#: editor/project_export.cpp editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "Çoğalt"
@@ -2868,6 +2824,25 @@ msgid "Choose"
msgstr "Seç"
#: editor/editor_export.cpp
+msgid "Project export for platform:"
+msgstr ""
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Completed with errors."
+msgstr "Düğüm Yolunu Kopyala"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Completed successfully."
+msgstr "Paket Başarı ile Kuruldu!"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed."
+msgstr "Başarısız:"
+
+#: editor/editor_export.cpp
msgid "Storing File:"
msgstr "Dosya Depolama:"
@@ -2880,6 +2855,31 @@ msgid "Packing"
msgstr "Çıkınla"
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save PCK"
+msgstr "Farklı Kaydet"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Cannot create file \"%s\"."
+msgstr "Klasör oluşturulamadı."
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to export project files."
+msgstr "Proje dosyaları dışa aktarılamadı"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Can't open file to read from path \"%s\"."
+msgstr "Dosya yazmak için açılamıyor:"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save ZIP"
+msgstr "Farklı Kaydet"
+
+#: editor/editor_export.cpp
msgid ""
"Target platform requires 'ETC' texture compression for GLES2. Enable 'Import "
"Etc' in Project Settings."
@@ -3000,11 +3000,33 @@ msgstr "Özel hata ayıklama şablonu bulunmadı."
msgid "Custom release template not found."
msgstr "Özel yayınlama şablonu bulunamadı."
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Prepare Template"
+msgstr "Şablonlarını Yönet"
+
+#: editor/editor_export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "The given export path doesn't exist."
+msgstr "Belirtilen Dışa aktarım yolu mevcut değil:"
+
#: editor/editor_export.cpp platform/javascript/export/export.cpp
-msgid "Template file not found:"
+#, fuzzy
+msgid "Template file not found: \"%s\"."
msgstr "Şablon dosyası bulunamadı:"
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to copy export template."
+msgstr "Geçersiz Dışa Aktarım Şablonu:"
+
+#: editor/editor_export.cpp platform/windows/export/export.cpp
+#: platform/x11/export/export.cpp
+#, fuzzy
+msgid "PCK Embedding"
+msgstr "Dolgulama"
+
+#: editor/editor_export.cpp
msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB."
msgstr "32-bit dışa aktarımlarda gömülü PCK 4GiB'tan büyük olamaz."
@@ -3178,9 +3200,9 @@ msgid "Import"
msgstr "İçe Aktar"
#: editor/editor_feature_profile.cpp editor/project_export.cpp
-#: platform/android/export/export.cpp platform/javascript/export/export.cpp
-#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
-#: platform/windows/export/export.cpp
+#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#: platform/uwp/export/export.cpp platform/windows/export/export.cpp
msgid "Export"
msgstr "Dışa Aktar"
@@ -3458,7 +3480,7 @@ msgstr "Sınıf:"
#: editor/editor_help.cpp editor/scene_tree_editor.cpp
#: editor/script_create_dialog.cpp
msgid "Inherits:"
-msgstr "Kalıtçılar:"
+msgstr "Miras:"
#: editor/editor_help.cpp
msgid "Inherited by:"
@@ -4344,15 +4366,6 @@ msgid ""
"Unable to write to file '%s', file in use, locked or lacking permissions."
msgstr ""
-#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
-msgid "Scene"
-msgstr "Sahne"
-
-#: editor/editor_node.cpp
-#, fuzzy
-msgid "Scene Naming"
-msgstr "Sahne Yolu:"
-
#: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp
#: servers/arvr/arvr_interface.cpp
#, fuzzy
@@ -4481,6 +4494,10 @@ msgid "Default Color Picker Mode"
msgstr ""
#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
+msgid "Version Control"
+msgstr "Sürüm Kontrol"
+
+#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
msgid "Username"
msgstr "Kullanıcı adı"
@@ -4508,6 +4525,10 @@ msgstr "Dikkat-Dağıtmayan Kipine geç."
msgid "Add a new scene."
msgstr "Yeni bir sahne ekle."
+#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
+msgid "Scene"
+msgstr "Sahne"
+
#: editor/editor_node.cpp
msgid "Go to previously opened scene."
msgstr "Daha önce açılan sahneye git."
@@ -5306,6 +5327,11 @@ msgstr ""
"Lütfen Dışa Aktar menüsüne çalıştırılabilir bir ön ayar ekleyin veya mevcut "
"bir ön ayarı çalıştırılabilir olarak tanımlayın."
+#: editor/editor_run_native.cpp
+#, fuzzy
+msgid "Project Run"
+msgstr "Proje"
+
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
msgstr "Mantığınızı _run() metoduna yazın."
@@ -5589,7 +5615,9 @@ msgid "Draw Spaces"
msgstr "Çizim Çağrıları:"
#: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp
-#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp
+#: scene/main/scene_tree.cpp scene/resources/world.cpp
+#: scene/resources/world_2d.cpp
msgid "Navigation"
msgstr "Gezinim"
@@ -7090,7 +7118,7 @@ msgstr ""
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp
-#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp
+#: scene/gui/control.cpp
#, fuzzy
msgid "Filter"
msgstr "Süzgeçler:"
@@ -7389,6 +7417,18 @@ msgid "Saving..."
msgstr "Kaydediliyor..."
#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used as a normal map in 3D. Enabling red-green "
+"texture compression to reduce memory usage (blue channel is discarded)."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap "
+"generation and VRAM texture compression."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
msgid "2D, Detect 3D"
msgstr ""
@@ -8078,11 +8118,20 @@ msgid "New Anim"
msgstr "Yeni Animasyon"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+msgstr "Yeni Animasyon OluÅŸtur"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Change Animation Name:"
msgstr "Animasyon İsmini Değiştir:"
#: editor/plugins/animation_player_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Rename Animation"
+msgstr "Animasyonu Yeniden Adlandır"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Delete Animation?"
msgstr "Animasyon Silinsin mi?"
@@ -8100,11 +8149,6 @@ msgid "Animation name already exists!"
msgstr "Animasyon ismi zaten var!"
#: editor/plugins/animation_player_editor_plugin.cpp
-#: editor/plugins/sprite_frames_editor_plugin.cpp
-msgid "Rename Animation"
-msgstr "Animasyonu Yeniden Adlandır"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate Animation"
msgstr "Animasyonu Çoğalt"
@@ -8248,10 +8292,6 @@ msgid "Pin AnimationPlayer"
msgstr "Animasyon Oynatıcıyı Sabitle"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Create New Animation"
-msgstr "Yeni Animasyon OluÅŸtur"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Name:"
msgstr "Animasyon Adı:"
@@ -10373,6 +10413,7 @@ msgid "Points"
msgstr "Noktalar"
#: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp
+#: scene/resources/navigation_mesh.cpp
msgid "Polygons"
msgstr "Çokgenler"
@@ -11754,7 +11795,8 @@ msgid "Invalid geometry, can't replace by mesh."
msgstr "Geçersiz geometri, örüntü ile değiştirilemiyor."
#: editor/plugins/sprite_editor_plugin.cpp
-msgid "Convert to Mesh2D"
+#, fuzzy
+msgid "Convert to MeshInstance2D"
msgstr "Örüntü2D'ye döüştür"
#: editor/plugins/sprite_editor_plugin.cpp
@@ -12750,8 +12792,7 @@ msgid "Select the previous shape, subtile, or Tile."
msgstr "Önceki şekil, altdöşeme ya da Döşemeyi Seç."
#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp
-#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp
-#: scene/resources/texture.cpp
+#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp
msgid "Region"
msgstr "Bölge"
@@ -13252,6 +13293,7 @@ msgid "Select SSH private key path"
msgstr "SSH özel anahtar yolu seç"
#: editor/plugins/version_control_editor_plugin.cpp
+#, fuzzy
msgid "SSH Passphrase"
msgstr "SSH Parolası"
@@ -14268,36 +14310,10 @@ msgid "Delete preset '%s'?"
msgstr "'%s' önayarı silinsin mi?"
#: editor/project_export.cpp
-msgid ""
-"Failed to export the project for platform '%s'.\n"
-"Export templates seem to be missing or invalid."
-msgstr ""
-"'%s' platformu için proje dışa aktarılamadı.\n"
-"Dışa aktarma şablonları eksik veya hatalı görünüyor."
-
-#: 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 ""
-"'%s' platformu için proje dışa aktarılamadı.\n"
-"Bu, dışa aktarma ön ayarlarındaki ya da dışa aktarma ayarlarınızdaki bir "
-"yapılandırma sorunundan kaynaklanıyor olabilir."
-
-#: editor/project_export.cpp
msgid "Exporting All"
msgstr "Tümünü Dışa Aktarma"
#: editor/project_export.cpp
-msgid "The given export path doesn't exist:"
-msgstr "Belirtilen Dışa aktarım yolu mevcut değil:"
-
-#: editor/project_export.cpp
-msgid "Export templates for this platform are missing/corrupted:"
-msgstr "Bu platform için dışa aktarma şablonu eksik/bozuk:"
-
-#: editor/project_export.cpp
msgid "Export Path"
msgstr "Dışa aktarım Yolu"
@@ -14445,6 +14461,11 @@ msgid "Export templates for this platform are missing:"
msgstr "Bu platform için dışa aktarma şablonu eksik:"
#: editor/project_export.cpp
+#, fuzzy
+msgid "Project Export"
+msgstr "Projenin Kurucuları"
+
+#: editor/project_export.cpp
msgid "Manage Export Templates"
msgstr "Dışa Aktarım Şablonlarını Yönet"
@@ -16863,7 +16884,7 @@ msgstr ""
#: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp
#: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp
-#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp
+#: scene/3d/collision_polygon.cpp
#, fuzzy
msgid "Polygon"
msgstr "Çokgenler"
@@ -17486,7 +17507,6 @@ msgid "Use In Baked Light"
msgstr "Işık-Haritalarını Pişir"
#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
-#: scene/resources/navigation_mesh.cpp
msgid "Cell"
msgstr ""
@@ -17516,6 +17536,19 @@ msgstr "Merkez"
msgid "Mask"
msgstr ""
+#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
+#, fuzzy
+msgid "Bake Navigation"
+msgstr "Gezinim"
+
+#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp
+#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp
+#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp
+#: scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Navigation Layers"
+msgstr "Gezinim Kipi"
+
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Plane"
msgstr "Sonraki sekme"
@@ -19051,10 +19084,6 @@ msgid "Could not execute on device."
msgstr "Cihazda yürütülemedi."
#: platform/android/export/export_plugin.cpp
-msgid "Unable to find the 'apksigner' tool."
-msgstr "'apksigner' aracı bulunamıyor."
-
-#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -19178,12 +19207,17 @@ msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version."
msgstr ""
"\"Target Sdk\" sürümü \"Min Sdk\" sürümünden daha büyük veya eşit olmalıdır."
+#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Code Signing"
+msgstr "Sinyal"
+
#: platform/android/export/export_plugin.cpp
+#, fuzzy
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."
+"'apksigner' could not be found. Please check that the command is available "
+"in the Android SDK build-tools directory. The resulting %s is unsigned."
msgstr ""
"'apksigner' bulunamadı.\n"
"Lütfen komutun Android SDK build-tools dizininde bulunup bulunmadığını "
@@ -19203,6 +19237,11 @@ msgid "Could not find keystore, unable to export."
msgstr "Anahtar deposu bulunamadı, dışa aktarılamadı."
#: platform/android/export/export_plugin.cpp
+#, fuzzy
+msgid "Could not start apksigner executable."
+msgstr "Alt işlem başlatılamadı!"
+
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr "'apksigner', #%d hatasıyla döndürüldü"
@@ -19231,7 +19270,8 @@ msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr "Geçersiz dosya adı! Android APK, * .apk uzantısını gerektirir."
#: platform/android/export/export_plugin.cpp
-msgid "Unsupported export format!\n"
+#, fuzzy
+msgid "Unsupported export format!"
msgstr "Desteklenmeyen dışa aktarma biçimi!\n"
#: platform/android/export/export_plugin.cpp
@@ -19243,10 +19283,9 @@ msgstr ""
"için sürüm bilgisi yok. Lütfen 'Proje' menüsünden yeniden yükleyin."
#: platform/android/export/export_plugin.cpp
+#, fuzzy
msgid ""
-"Android build version mismatch:\n"
-" Template installed: %s\n"
-" Godot Version: %s\n"
+"Android build version mismatch: Template installed: %s, Godot version: %s. "
"Please reinstall Android build template from 'Project' menu."
msgstr ""
"Android derlemesi sürüm uyumsuzluğu:\n"
@@ -19255,13 +19294,15 @@ msgstr ""
"Lütfen 'Proje' menüsünden Android derleme şablonunu yeniden yükleyin."
#: platform/android/export/export_plugin.cpp
+#, fuzzy
msgid ""
-"Unable to overwrite res://android/build/res/*.xml files with project name"
+"Unable to overwrite res://android/build/res/*.xml files with project name."
msgstr ""
"Proje adıyla res://android/build/res/*.xml dosyalarının üzerine yazılamıyor"
#: platform/android/export/export_plugin.cpp
-msgid "Could not export project files to gradle project\n"
+#, fuzzy
+msgid "Could not export project files to gradle project."
msgstr "Proje dosyaları gradle projesine aktarılamadı\n"
#: platform/android/export/export_plugin.cpp
@@ -19273,8 +19314,9 @@ msgid "Building Android Project (gradle)"
msgstr "Android Projesi OluÅŸturma (gradle)"
#: platform/android/export/export_plugin.cpp
+#, fuzzy
msgid ""
-"Building of Android project failed, check output for the error.\n"
+"Building of Android project failed, check output for the error. "
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
"Android projesinin oluşturulması başarısız oldu, hatayı çıktı için kontrol "
@@ -19295,7 +19337,8 @@ msgstr ""
"için gradle proje dizinini kontrol edin."
#: platform/android/export/export_plugin.cpp
-msgid "Package not found: %s"
+#, fuzzy
+msgid "Package not found: \"%s\"."
msgstr "Paket bulunamadı: %s"
#: platform/android/export/export_plugin.cpp
@@ -19303,17 +19346,16 @@ msgid "Creating APK..."
msgstr "APK oluÅŸturuluyor..."
#: platform/android/export/export_plugin.cpp
-msgid ""
-"Could not find template APK to export:\n"
-"%s"
+#, fuzzy
+msgid "Could not find template APK to export: \"%s\"."
msgstr ""
"Dışa aktarılacak şablon APK bulunamadı:\n"
"%s"
#: platform/android/export/export_plugin.cpp
+#, fuzzy
msgid ""
-"Missing libraries in the export template for the selected architectures: "
-"%s.\n"
+"Missing libraries in the export template for the selected architectures: %s. "
"Please build a template with all required libraries, or uncheck the missing "
"architectures in the export preset."
msgstr ""
@@ -19326,7 +19368,8 @@ msgid "Adding files..."
msgstr "Dosyalar ekleniyor..."
#: platform/android/export/export_plugin.cpp
-msgid "Could not export project files"
+#, fuzzy
+msgid "Could not export project files."
msgstr "Proje dosyaları dışa aktarılamadı"
#: platform/android/export/export_plugin.cpp
@@ -19569,6 +19612,17 @@ msgstr "ÖzelSınıf"
msgid "Custom BG Color"
msgstr "ÖzelSınıf"
+#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Prepare Templates"
+msgstr "Şablonlarını Yönet"
+
+#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Export template not found."
+msgstr "Özel yayınlama şablonu bulunamadı."
+
#: platform/iphone/export/export.cpp
msgid "App Store Team ID not specified - cannot configure the project."
msgstr "App Store Ekip Kimliği belirtilmedi - proje yapılandırılamıyor."
@@ -19590,22 +19644,35 @@ msgid "Run exported HTML in the system's default browser."
msgstr "Dışa aktarılmış HTML'yi sistemin varsayılan tarayıcısında çalıştır."
#: platform/javascript/export/export.cpp
-msgid "Could not open template for export:"
+#, fuzzy
+msgid "Could not open template for export: \"%s\"."
msgstr "Dışa aktarma için şablon açılamadı:"
#: platform/javascript/export/export.cpp
-msgid "Invalid export template:"
+#, fuzzy
+msgid "Invalid export template: \"%s\"."
msgstr "Geçersiz Dışa Aktarım Şablonu:"
#: platform/javascript/export/export.cpp
-msgid "Could not write file:"
+#, fuzzy
+msgid "Could not write file: \"%s\"."
msgstr "Dosya yazılamadı:"
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Icon Creation"
+msgstr "Kenar BoÅŸluk Belirle"
+
#: platform/javascript/export/export.cpp
-msgid "Could not read file:"
+#, fuzzy
+msgid "Could not read file: \"%s\"."
msgstr "Dosya okunamadı:"
#: platform/javascript/export/export.cpp
+msgid "PWA"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
#, fuzzy
msgid "Variant"
msgstr "Ayrım:"
@@ -19680,15 +19747,18 @@ msgid "Icon 512 X 512"
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not read HTML shell:"
+#, fuzzy
+msgid "Could not read HTML shell: \"%s\"."
msgstr "HTML kabuğu okunamadı:"
#: platform/javascript/export/export.cpp
-msgid "Could not create HTTP server directory:"
+#, fuzzy
+msgid "Could not create HTTP server directory: %s."
msgstr "HTTP sunucu klasörü oluşturulamadı:"
#: platform/javascript/export/export.cpp
-msgid "Error starting HTTP server:"
+#, fuzzy
+msgid "Error starting HTTP server: %d."
msgstr "HTTP sunucusu başlatılırken hata:"
#: platform/javascript/export/export.cpp
@@ -19989,9 +20059,28 @@ msgid "Apple Team ID"
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open icon file \"%s\"."
+msgstr "Proje dosyaları dışa aktarılamadı"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start xcrun executable."
+msgstr "Alt işlem başlatılamadı!"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization failed."
+msgstr "YerelleÅŸtirme"
+
+#: platform/osx/export/export.cpp
+msgid "Notarization request UUID: \"%s\""
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid ""
-"Note: The notarization process generally takes less than an hour. When the "
-"process is completed, you'll receive an email."
+"The notarization process generally takes less than an hour. When the process "
+"is completed, you'll receive an email."
msgstr ""
#: platform/osx/export/export.cpp
@@ -20007,23 +20096,78 @@ msgid ""
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign failed with error \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign require regex module."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Could not start codesign executable, make sure Xcode command line tools are "
+"installed."
+msgstr ""
+
+#: platform/osx/export/export.cpp platform/windows/export/export.cpp
#, fuzzy
msgid "No identity found."
msgstr "Simge bulunamadı."
#: platform/osx/export/export.cpp
#, fuzzy
+msgid "Cannot sign file %s."
+msgstr "%s dosyası kaydedilirken hata"
+
+#: platform/osx/export/export.cpp
+msgid "Relative symlinks are not supported, exported \"%s\" might be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "DMG Creation"
+msgstr "Yönler"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start hdiutil executable."
+msgstr "Alt işlem başlatılamadı!"
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed - file exists."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
msgid "Creating app bundle"
msgstr "Küçük Bediz Oluşturuluyor"
#: platform/osx/export/export.cpp
#, fuzzy
-msgid "Could not find template app to export:"
+msgid "Could not find template app to export: \"%s\"."
msgstr ""
"Dışa aktarılacak şablon APK bulunamadı:\n"
"%s"
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid export format."
+msgstr "Geçersiz Dışa Aktarım Şablonu:"
+
+#: platform/osx/export/export.cpp
msgid ""
"Relative symlinks are not supported on this OS, the exported project might "
"be broken!"
@@ -20031,7 +20175,7 @@ msgstr ""
#: platform/osx/export/export.cpp
msgid ""
-"Requested template binary '%s' not found. It might be missing from your "
+"Requested template binary \"%s\" not found. It might be missing from your "
"template archive."
msgstr ""
@@ -20072,6 +20216,16 @@ msgid "Sending archive for notarization"
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "ZIP Creation"
+msgstr "Proje"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open file to read from path \"%s\"."
+msgstr "Proje dosyaları gradle projesine aktarılamadı\n"
+
+#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr "Geçersiz paket tanımlayıcısı:"
@@ -20387,6 +20541,11 @@ msgid "Debug Algorithm"
msgstr "Hata Ayıklayıcı"
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to rename temporary file \"%s\"."
+msgstr "Geçici dosya kaldırılamıyor:"
+
+#: platform/windows/export/export.cpp
msgid "Identity Type"
msgstr ""
@@ -20434,6 +20593,70 @@ msgid "Trademarks"
msgstr ""
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Resources Modification"
+msgstr "Rastgele Döndürme:"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find rcedit executable at \"%s\"."
+msgstr "Anahtar deposu bulunamadı, dışa aktarılamadı."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find wine executable at \"%s\"."
+msgstr "Anahtar deposu bulunamadı, dışa aktarılamadı."
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start rcedit executable, configure rcedit path in the Editor "
+"Settings (Export > Windows > Rcedit)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"rcedit failed to modify executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find signtool executable at \"%s\"."
+msgstr "Anahtar deposu bulunamadı, dışa aktarılamadı."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find osslsigncode executable at \"%s\"."
+msgstr "Anahtar deposu bulunamadı, dışa aktarılamadı."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid identity type."
+msgstr "Geçersiz Tanımlayıcı:"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid timestamp server."
+msgstr "Geçersiz ad."
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start signtool executable, configure signtool path in the Editor "
+"Settings (Export > Windows > Signtool)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Signtool failed to sign executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to remove temporary file \"%s\"."
+msgstr "Geçici dosya kaldırılamıyor:"
+
+#: platform/windows/export/export.cpp
msgid ""
"The rcedit tool must be configured in the Editor Settings (Export > Windows "
"> Rcedit) to change the icon or app information data."
@@ -20455,6 +20678,23 @@ msgid "Invalid product version:"
msgstr "Geçersiz ürün GUID'i."
#: platform/windows/export/export.cpp
+msgid "Windows executables cannot be >= 4 GiB."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+#, fuzzy
+msgid "Failed to open executable file \"%s\"."
+msgstr "Geçersiz uzantı."
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable file header corrupted."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable \"pck\" section not found."
+msgstr ""
+
+#: platform/windows/export/export.cpp
#, fuzzy
msgid "Windows"
msgstr "Yeni Pencere"
@@ -20471,6 +20711,10 @@ msgstr ""
msgid "Wine"
msgstr ""
+#: platform/x11/export/export.cpp
+msgid "32-bit executables cannot have embedded data >= 4 GiB."
+msgstr ""
+
#: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp
#: scene/resources/texture.cpp
#, fuzzy
@@ -20598,7 +20842,8 @@ msgstr ""
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/3d/light.cpp scene/3d/reflection_probe.cpp
-#: scene/3d/visual_instance.cpp scene/resources/material.cpp
+#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp
+#: scene/resources/material.cpp
#, fuzzy
msgid "Max Distance"
msgstr "Uzaklık Seç:"
@@ -21413,6 +21658,18 @@ msgstr ""
msgid "Edge Connection Margin"
msgstr "Bağlantıyı Düzenle:"
+#: scene/2d/navigation_2d.cpp
+msgid ""
+"'Navigation2D' node and 'Navigation2D.get_simple_path()' are deprecated and "
+"will be removed in a future version. Use 'Navigation2DServer.map_get_path()' "
+"instead."
+msgstr ""
+
+#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
+#, fuzzy
+msgid "Path Desired Distance"
+msgstr "Uzaklık Seç:"
+
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
msgid "Target Desired Distance"
msgstr ""
@@ -21472,17 +21729,19 @@ msgstr ""
"çokgen çizin."
#: scene/2d/navigation_polygon.cpp
-msgid ""
-"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
-"node. It only provides navigation data."
-msgstr ""
-"NavigationPolygonInstance, bir Navigation2D çocuğu olmalı ya da Navigation2D "
-"düğümünün torunu olması gerekir. Bu nesne yalnızca yönlendirme verisi sağlar."
-
-#: scene/2d/navigation_polygon.cpp
msgid "Navpoly"
msgstr ""
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Enter Cost"
+msgstr "Merkez Alt"
+
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Travel Cost"
+msgstr "Seyahat"
+
#: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp
#: scene/main/canvas_layer.cpp
#, fuzzy
@@ -22698,6 +22957,13 @@ msgstr ""
msgid "Transform Normals"
msgstr "Dönüşüm Durduruldu."
+#: scene/3d/navigation.cpp
+msgid ""
+"'Navigation' node and 'Navigation.get_simple_path()' are deprecated and will "
+"be removed in a future version. Use 'NavigationServer.map_get_path()' "
+"instead."
+msgstr ""
+
#: scene/3d/navigation.cpp scene/resources/curve.cpp
#, fuzzy
msgid "Up Vector"
@@ -22723,14 +22989,6 @@ msgid ""
"The NavigationAgent can be used only under a Spatial inheriting parent node."
msgstr "NavigationAgent sadece Spatial düğümünün altında kullanılabilir."
-#: scene/3d/navigation_mesh_instance.cpp
-msgid ""
-"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
-"It only provides navigation data."
-msgstr ""
-"NavigationMeshInstance, bir Navigation düğümünün çocuğu ya da torunu "
-"olmalıdır. O yalnızca yönlendirme verisi sağlar."
-
#: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp
#, fuzzy
msgid "NavMesh"
@@ -25478,6 +25736,16 @@ msgid "3D Physics"
msgstr " (Fiziksel)"
#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "2D Navigation"
+msgstr "Gezinim"
+
+#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "3D Navigation"
+msgstr "Gezinim"
+
+#: scene/register_scene_types.cpp
msgid "Use hiDPI"
msgstr ""
@@ -26905,7 +27173,7 @@ msgstr "Geçiş: "
msgid "Refraction"
msgstr "Ayrım:"
-#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp
+#: scene/resources/material.cpp
msgid "Detail"
msgstr ""
@@ -26990,7 +27258,12 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
-msgid "Sample Partition Type"
+msgid "Sampling"
+msgstr "Ölçekleniyor: "
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Partition Type"
msgstr "DeÄŸiÅŸken Tipini Ayarla"
#: scene/resources/navigation_mesh.cpp
@@ -27008,10 +27281,15 @@ msgid "Source Group Name"
msgstr "Kaynak"
#: scene/resources/navigation_mesh.cpp
-msgid "Agent"
+msgid "Cells"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Agents"
+msgstr "Ana Sahne DeÄŸiÅŸtirgenleri:"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Max Climb"
msgstr ""
@@ -27021,11 +27299,16 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
+msgid "Regions"
+msgstr "Bölge"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
msgid "Merge Size"
msgstr "Sahneden BirleÅŸtir"
#: scene/resources/navigation_mesh.cpp
-msgid "Edge"
+msgid "Edges"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -27039,6 +27322,11 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
+msgid "Details"
+msgstr "Varsayılanı Göster"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
msgid "Sample Distance"
msgstr "Uzaklık Seç:"
@@ -27056,9 +27344,19 @@ msgid "Ledge Spans"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Filter Walkable Low Height Spans"
+msgid "Walkable Low Height Spans"
msgstr ""
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB"
+msgstr "AABB Üretimi"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB Offset"
+msgstr "Kaydırma:"
+
#: scene/resources/occluder_shape.cpp
msgid "Spheres"
msgstr ""
@@ -27474,6 +27772,11 @@ msgid "Scenario"
msgstr "Sahne"
#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Navigation Map"
+msgstr "Gezinim"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
msgid "Direct Space State"
msgstr ""
@@ -27491,6 +27794,26 @@ msgstr "Sol DoÄŸrusal"
msgid "Default Angular Damp"
msgstr ""
+#: scene/resources/world.cpp
+#, fuzzy
+msgid "Default Map Up"
+msgstr "Varsayılan"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Size"
+msgstr "Varsayılan Önizleme"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Height"
+msgstr "Deneme"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Edge Connection Margin"
+msgstr "Bağlantıyı Düzenle:"
+
#: scene/resources/world_2d.cpp
msgid "Canvas"
msgstr ""
@@ -27683,11 +28006,11 @@ msgstr ""
#: servers/audio/effects/audio_effect_reverb.cpp
msgid "Msec"
-msgstr ""
+msgstr "MiliSaniye"
#: servers/audio/effects/audio_effect_reverb.cpp
msgid "Room Size"
-msgstr ""
+msgstr "Oda Büyüklüğü"
#: servers/audio/effects/audio_effect_reverb.cpp
#, fuzzy
@@ -27712,14 +28035,12 @@ msgid "Surround"
msgstr ""
#: servers/audio_server.cpp
-#, fuzzy
msgid "Enable Audio Input"
-msgstr "Audio Bus'ı Yeniden Adlandır"
+msgstr "Ses GiriÅŸini AktifleÅŸtir"
#: servers/audio_server.cpp
-#, fuzzy
msgid "Output Latency"
-msgstr "Çıktı"
+msgstr "Çıkış Gecikmesi"
#: servers/audio_server.cpp
msgid "Channel Disable Threshold dB"
@@ -27740,9 +28061,8 @@ msgid "Bus Count"
msgstr "GiriÅŸ Portu Ekle"
#: servers/audio_server.cpp
-#, fuzzy
msgid "Capture Device"
-msgstr "Pikselden Yakala"
+msgstr "Yakalama Cihazı"
#: servers/audio_server.cpp
#, fuzzy
@@ -27754,9 +28074,8 @@ msgid "Feed"
msgstr ""
#: servers/camera/camera_feed.cpp
-#, fuzzy
msgid "Is Active"
-msgstr "Derinlik"
+msgstr "Aktif mi"
#: servers/physics/space_sw.cpp servers/physics_2d/space_2d_sw.cpp
msgid "Sleep Threshold Linear"
@@ -27798,50 +28117,46 @@ msgid "Total Linear Damp"
msgstr "DoÄŸrusal"
#: servers/physics_2d_server.cpp servers/physics_server.cpp
-#, fuzzy
msgid "Total Gravity"
-msgstr "Varsayılan Önizleme"
+msgstr "Toplam Yerçekimi"
#: servers/physics_2d_server.cpp servers/physics_server.cpp
-#, fuzzy
msgid "Linear Velocity"
-msgstr "EtkinleÅŸtir"
+msgstr "Çizgisel hız"
#: servers/physics_2d_server.cpp servers/physics_server.cpp
msgid "Exclude"
-msgstr ""
+msgstr "Hariç tut"
#: servers/physics_2d_server.cpp servers/physics_server.cpp
msgid "Shape RID"
-msgstr ""
+msgstr "Åžekil RID"
#: servers/physics_2d_server.cpp servers/physics_server.cpp
#, fuzzy
msgid "Collide With Bodies"
-msgstr "Temas Kipi"
+msgstr "Diğer Bedenlerle Çarpış"
#: servers/physics_2d_server.cpp servers/physics_server.cpp
+#, fuzzy
msgid "Collide With Areas"
-msgstr ""
+msgstr "Diğer Alanlarla Çarpış"
#: servers/physics_2d_server.cpp servers/physics_server.cpp
msgid "Motion Remainder"
-msgstr ""
+msgstr "Kalan Hareket"
#: servers/physics_2d_server.cpp servers/physics_server.cpp
-#, fuzzy
msgid "Collision Point"
-msgstr "Temas Kipi"
+msgstr "Çarpışma Noktası"
#: servers/physics_2d_server.cpp servers/physics_server.cpp
-#, fuzzy
msgid "Collision Normal"
-msgstr "Temas Kipi"
+msgstr "Çarpışma Normali"
#: servers/physics_2d_server.cpp servers/physics_server.cpp
-#, fuzzy
msgid "Collision Depth"
-msgstr "Temas Kipi"
+msgstr "Çarpışma Derinliği"
#: servers/physics_2d_server.cpp servers/physics_server.cpp
#, fuzzy
@@ -27854,14 +28169,12 @@ msgid "Collision Unsafe Fraction"
msgstr "Temas Kipi"
#: servers/physics_2d_server.cpp servers/physics_server.cpp
-#, fuzzy
msgid "Physics Engine"
-msgstr "Fizik Kare %"
+msgstr "Fizik Motoru"
#: servers/physics_server.cpp
-#, fuzzy
msgid "Center Of Mass"
-msgstr "Sol Merkez"
+msgstr "Kütle Merkezi"
#: servers/physics_server.cpp
msgid "Principal Inertia Axes"
@@ -27942,12 +28255,11 @@ msgstr "Kalıbı İçe Aktar"
#: servers/visual_server.cpp
msgid "Lossless Compression"
-msgstr ""
+msgstr "Kayıpsız Sıkıştırma"
#: servers/visual_server.cpp
-#, fuzzy
msgid "Force PNG"
-msgstr "Zorla Gönder"
+msgstr "PNG Uzantısını Kullanmaya Zorla"
#: servers/visual_server.cpp
msgid "WebP Compression Level"
@@ -27979,14 +28291,12 @@ msgid "Quadrant 3 Subdiv"
msgstr ""
#: servers/visual_server.cpp
-#, fuzzy
msgid "Shadows"
-msgstr "Gölgelendirici"
+msgstr "Gölgeler"
#: servers/visual_server.cpp
-#, fuzzy
msgid "Filter Mode"
-msgstr "Düğümleri Süzgeçden Geçir"
+msgstr "Filtre Modu"
#: servers/visual_server.cpp
#, fuzzy
@@ -28023,21 +28333,20 @@ msgid "Mesh Storage"
msgstr ""
#: servers/visual_server.cpp
-#, fuzzy
msgid "Split Stream"
-msgstr "Eğriyi Böl"
+msgstr "Akışı Böl"
#: servers/visual_server.cpp
msgid "Use Physical Light Attenuation"
-msgstr ""
+msgstr "Fiziksel Işık Zayıflatmayı Kullanın"
#: servers/visual_server.cpp
msgid "Depth Prepass"
-msgstr ""
+msgstr "Derinlik Ön Geçişi"
#: servers/visual_server.cpp
msgid "Disable For Vendors"
-msgstr ""
+msgstr "Bu Satıcılar İçin Devre Dışı Bırak"
#: servers/visual_server.cpp
msgid "Anisotropic Filter Level"
@@ -28088,12 +28397,11 @@ msgstr ""
#: servers/visual_server.cpp
msgid "Legacy Stream"
-msgstr ""
+msgstr "Eski Akış"
#: servers/visual_server.cpp
-#, fuzzy
msgid "Batching"
-msgstr "Aranıyor..."
+msgstr "Yığınlama"
#: servers/visual_server.cpp
msgid "Use Batching"
@@ -28144,25 +28452,23 @@ msgstr "Çerçeveyi Yapıştır"
#: servers/visual_server.cpp
msgid "GLES2"
-msgstr ""
+msgstr "GLES2"
#: servers/visual_server.cpp
msgid "Compatibility"
-msgstr ""
+msgstr "Uyumluluk"
#: servers/visual_server.cpp
msgid "Disable Half Float"
-msgstr ""
+msgstr "Yarım Float'ı devre dışı bırak"
#: servers/visual_server.cpp
-#, fuzzy
msgid "Enable High Float"
-msgstr "Önceliklemeyi Etkinleştir"
+msgstr "Yüksek Float'ı Etkinleştir"
#: servers/visual_server.cpp
-#, fuzzy
msgid "Precision"
-msgstr "İfade"
+msgstr "Hassasiyet"
#: servers/visual_server.cpp
msgid "UV Contract"
@@ -28182,9 +28488,8 @@ msgid "PVS Logging"
msgstr ""
#: servers/visual_server.cpp
-#, fuzzy
msgid "Use Signals"
-msgstr "sinyaller"
+msgstr "Sinyal Kullan"
#: servers/visual_server.cpp
#, fuzzy
@@ -28203,12 +28508,11 @@ msgstr "Emilme Ayırmayı Görüntüle"
#: servers/visual_server.cpp
msgid "Max Active Spheres"
-msgstr ""
+msgstr "Maks. Aktif Küre Sayısı"
#: servers/visual_server.cpp
-#, fuzzy
msgid "Max Active Polygons"
-msgstr "Çokgeni Taşı"
+msgstr "Maks. Aktif Çokgen Sayısı"
#: servers/visual_server.cpp
#, fuzzy
diff --git a/editor/translations/uk.po b/editor/translations/uk.po
index f796d5c6a5..719dc29d7a 100644
--- a/editor/translations/uk.po
+++ b/editor/translations/uk.po
@@ -28,7 +28,7 @@ msgstr ""
"Project-Id-Version: Ukrainian (Godot Engine)\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2022-06-03 02:51+0000\n"
+"PO-Revision-Date: 2022-06-12 13:19+0000\n"
"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
"Language-Team: Ukrainian <https://hosted.weblate.org/projects/godot-engine/"
"godot/uk/>\n"
@@ -222,9 +222,10 @@ msgid "Data"
msgstr "Дані"
#: core/io/file_access_network.cpp core/register_core_types.cpp
-#: editor/editor_settings.cpp main/main.cpp
+#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
#: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h
+#: scene/gui/file_dialog.cpp
msgid "Network"
msgstr "Мережа"
@@ -330,9 +331,8 @@ msgid "Not enough bytes for decoding bytes, or invalid format."
msgstr "ÐедоÑтатньо байтів Ð´Ð»Ñ Ñ—Ñ… Ð´ÐµÐºÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ Ð°Ð±Ð¾ вказано некоректний формат."
#: core/math/expression.cpp
-#, fuzzy
msgid "Invalid input %d (not passed) in expression"
-msgstr "Ðекоректні вхідні дані %i (не передано) у виразі"
+msgstr "Ðекоректні вхідні дані %d (не передано) у виразі"
#: core/math/expression.cpp
msgid "self can't be used because instance is null (not passed)"
@@ -377,6 +377,16 @@ msgstr "Черга повідомлень"
msgid "Max Size (KB)"
msgstr "МакÑ. розмір (кБ)"
+#: core/os/input.cpp
+#, fuzzy
+msgid "Mouse Mode"
+msgstr "Режим переміщеннÑ"
+
+#: core/os/input.cpp
+#, fuzzy
+msgid "Use Accumulated Input"
+msgstr "Видалити введеннÑ"
+
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: servers/audio_server.cpp
msgid "Device"
@@ -556,7 +566,8 @@ msgstr "ОпиÑ"
#: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
-#: main/main.cpp
+#: main/main.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp
msgid "Run"
msgstr "ЗапуÑтити"
@@ -639,6 +650,10 @@ msgid "Main Run Args"
msgstr "Ðргументи оÑновного запуÑку"
#: core/project_settings.cpp
+msgid "Scene Naming"
+msgstr "Ð†Ð¼ÐµÐ½ÑƒÐ²Ð°Ð½Ð½Ñ Ñцен"
+
+#: core/project_settings.cpp
msgid "Search In File Extensions"
msgstr "Ð Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ Ð¿Ð¾ÑˆÑƒÐºÑƒ у файлах"
@@ -646,18 +661,15 @@ msgstr "Ð Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ Ð¿Ð¾ÑˆÑƒÐºÑƒ у файлах"
msgid "Script Templates Search Path"
msgstr "ШлÑÑ… пошуку Ð´Ð»Ñ ÑˆÐ°Ð±Ð»Ð¾Ð½Ñ–Ð² Ñкриптів"
-#: core/project_settings.cpp editor/editor_node.cpp
-#: editor/plugins/version_control_editor_plugin.cpp
-msgid "Version Control"
-msgstr "ÐšÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð²ÐµÑ€ÑÑ–Ñми"
-
#: core/project_settings.cpp
-msgid "Autoload On Startup"
+#, fuzzy
+msgid "Version Control Autoload On Startup"
msgstr "Ðвтоматично завантажувати під Ñ‡Ð°Ñ Ð·Ð°Ð¿ÑƒÑку"
#: core/project_settings.cpp
-msgid "Plugin Name"
-msgstr "Ðазва додатка"
+#, fuzzy
+msgid "Version Control Plugin Name"
+msgstr "ÐšÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð²ÐµÑ€ÑÑ–Ñми"
#: core/project_settings.cpp scene/2d/collision_object_2d.cpp
#: scene/3d/collision_object.cpp scene/gui/control.cpp
@@ -764,7 +776,8 @@ msgid "Quality"
msgstr "ЯкіÑть"
#: core/project_settings.cpp scene/gui/file_dialog.cpp
-#: scene/main/scene_tree.cpp servers/visual_server.cpp
+#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp
+#: servers/visual_server.cpp
msgid "Filters"
msgstr "Фільтри"
@@ -1289,19 +1302,16 @@ msgid "Remove this track."
msgstr "Вилучити цю доріжку."
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Time (s):"
-msgstr "Ð§Ð°Ñ (Ñ): "
+msgstr "Ð§Ð°Ñ (Ñ):"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Position:"
-msgstr "РозташуваннÑ"
+msgstr "РозташуваннÑ:"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Rotation:"
-msgstr "ОбертаннÑ"
+msgstr "ОбертаннÑ:"
#: editor/animation_track_editor.cpp
#: editor/plugins/animation_tree_player_editor_plugin.cpp
@@ -1318,44 +1328,36 @@ msgid "Type:"
msgstr "Тип:"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "(Invalid, expected type: %s)"
-msgstr "Ðеправильний шаблон екÑпорту:"
+msgstr "(Ðекоректний, очікуваний тип: %s)"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Easing:"
-msgstr "Пом'ÑкшеннÑ"
+msgstr "Пом'ÑкшеннÑ:"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "In-Handle:"
-msgstr "ДеÑкриптор входу"
+msgstr "ДеÑкриптор входу:"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Out-Handle:"
-msgstr "ДеÑкриптор виходу"
+msgstr "ДеÑкриптор виходу:"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Stream:"
-msgstr "Потік"
+msgstr "Потік:"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Start (s):"
-msgstr "ПерезапуÑтити (Ñек.):"
+msgstr "Початок (Ñек.):"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "End (s):"
-msgstr "ÐароÑÑ‚Ð°Ð½Ð½Ñ (Ñ):"
+msgstr "Кінець (Ñек.):"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Animation Clip:"
-msgstr "Ðнімації:"
+msgstr "Кліп анімації:"
#: editor/animation_track_editor.cpp
msgid "Toggle Track Enabled"
@@ -1570,9 +1572,8 @@ msgid "Add Method Track Key"
msgstr "Додати ключ доріжки методів"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Method not found in object:"
-msgstr "Ðе знайдено метод у об'єкті: "
+msgstr "Ðе знайдено метод у об'єкті:"
#: editor/animation_track_editor.cpp
msgid "Anim Move Keys"
@@ -2184,8 +2185,8 @@ msgid "Open"
msgstr "Відкрити"
#: editor/dependency_editor.cpp
-msgid "Owners Of:"
-msgstr "ВлаÑники:"
+msgid "Owners of: %s (Total: %d)"
+msgstr ""
#: editor/dependency_editor.cpp
msgid ""
@@ -2488,7 +2489,7 @@ msgid "Bus Options"
msgstr "Параметри шини"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/scene_tree_dock.cpp
+#: editor/project_export.cpp editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "Дублювати"
@@ -2541,9 +2542,8 @@ msgid "There is no '%s' file."
msgstr "Ðемає файла «%s»."
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Layout:"
-msgstr "Макет"
+msgstr "КомпонуваннÑ:"
#: editor/editor_audio_buses.cpp
msgid "Invalid file, not an audio bus layout."
@@ -2745,6 +2745,25 @@ msgid "Choose"
msgstr "Оберіть"
#: editor/editor_export.cpp
+msgid "Project export for platform:"
+msgstr ""
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Completed with errors."
+msgstr "Повні шлÑхи до файлів"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Completed successfully."
+msgstr "Пакунок уÑпішно вÑтановлено!"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed."
+msgstr "Ðе вдалоÑÑ:"
+
+#: editor/editor_export.cpp
msgid "Storing File:"
msgstr "Ð—Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñƒ:"
@@ -2757,6 +2776,31 @@ msgid "Packing"
msgstr "ПакуваннÑ"
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save PCK"
+msgstr "Зберегти Ñк"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Cannot create file \"%s\"."
+msgstr "Ðеможливо Ñтворити теку."
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to export project files."
+msgstr "Ðе вдалоÑÑ ÐµÐºÑпортувати файли проєкту"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Can't open file to read from path \"%s\"."
+msgstr "Ðеможливо відкрити файл Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñу:"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save ZIP"
+msgstr "Зберегти Ñк"
+
+#: editor/editor_export.cpp
msgid ""
"Target platform requires 'ETC' texture compression for GLES2. Enable 'Import "
"Etc' in Project Settings."
@@ -2873,11 +2917,33 @@ msgstr "Ðетипового шаблону діагноÑтики не знай
msgid "Custom release template not found."
msgstr "Ðетипового шаблону випуÑку не знайдено."
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Prepare Template"
+msgstr "ÐšÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ ÑˆÐ°Ð±Ð»Ð¾Ð½Ð°Ð¼Ð¸"
+
+#: editor/editor_export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "The given export path doesn't exist."
+msgstr "Вказаного шлÑху Ð´Ð»Ñ ÐµÐºÑÐ¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ðµ Ñ–Ñнує:"
+
#: editor/editor_export.cpp platform/javascript/export/export.cpp
-msgid "Template file not found:"
+#, fuzzy
+msgid "Template file not found: \"%s\"."
msgstr "Файл шаблону не знайдено:"
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to copy export template."
+msgstr "Ðеправильний шаблон екÑпорту:"
+
+#: editor/editor_export.cpp platform/windows/export/export.cpp
+#: platform/x11/export/export.cpp
+#, fuzzy
+msgid "PCK Embedding"
+msgstr "ФаÑка"
+
+#: editor/editor_export.cpp
msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB."
msgstr ""
"При екÑпортуванні у 32-бітовому режимі вбудовані PCK не можуть перевищувати "
@@ -3056,9 +3122,9 @@ msgid "Import"
msgstr "Імпорт"
#: editor/editor_feature_profile.cpp editor/project_export.cpp
-#: platform/android/export/export.cpp platform/javascript/export/export.cpp
-#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
-#: platform/windows/export/export.cpp
+#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#: platform/uwp/export/export.cpp platform/windows/export/export.cpp
msgid "Export"
msgstr "ЕкÑпортуваннÑ"
@@ -4209,14 +4275,6 @@ msgstr ""
"Ðе вдалоÑÑ Ð·Ð°Ð¿Ð¸Ñати до файла «%s», файл викориÑтовує інша програма, його "
"заблоковано або у Ð²Ð°Ñ Ð½ÐµÐ¼Ð°Ñ” відповідних прав доÑтупу до нього."
-#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
-msgid "Scene"
-msgstr "Сцена"
-
-#: editor/editor_node.cpp
-msgid "Scene Naming"
-msgstr "Ð†Ð¼ÐµÐ½ÑƒÐ²Ð°Ð½Ð½Ñ Ñцен"
-
#: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp
#: servers/arvr/arvr_interface.cpp
msgid "Interface"
@@ -4331,6 +4389,10 @@ msgid "Default Color Picker Mode"
msgstr "Типовий режим піпетки кольорів"
#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
+msgid "Version Control"
+msgstr "ÐšÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð²ÐµÑ€ÑÑ–Ñми"
+
+#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
msgid "Username"
msgstr "КориÑтувач"
@@ -4358,6 +4420,10 @@ msgstr "Перемкнути режим без відволіканнÑ."
msgid "Add a new scene."
msgstr "Додати нову Ñцену."
+#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
+msgid "Scene"
+msgstr "Сцена"
+
#: editor/editor_node.cpp
msgid "Go to previously opened scene."
msgstr "Перейти до раніше відкритої Ñцени."
@@ -5051,9 +5117,8 @@ msgid "Size:"
msgstr "Розмір:"
#: editor/editor_properties_array_dict.cpp
-#, fuzzy
msgid "Page:"
-msgstr "Сторінка: "
+msgstr "Сторінка:"
#: editor/editor_properties_array_dict.cpp
#: editor/plugins/theme_editor_plugin.cpp
@@ -5150,6 +5215,11 @@ msgstr ""
"Будь лаÑка, додайте придатний до викориÑÑ‚Ð°Ð½Ð½Ñ Ð½Ð°Ð±Ñ–Ñ€ параметрів за допомогою "
"меню «ЕкÑпорт» або визначне наÑвний набір Ñк придатний до викориÑтаннÑ."
+#: editor/editor_run_native.cpp
+#, fuzzy
+msgid "Project Run"
+msgstr "Проєкт"
+
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
msgstr "Ðапишіть Ñвою логіку в методі _run ()."
@@ -5405,7 +5475,9 @@ msgid "Draw Spaces"
msgstr "Ð’Ñ–Ð·ÑƒÐ°Ð»Ñ–Ð·Ð°Ñ†Ñ–Ñ Ð¿Ñ€Ð¾Ð±Ñ–Ð»Ñ–Ð²"
#: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp
-#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp
+#: scene/main/scene_tree.cpp scene/resources/world.cpp
+#: scene/resources/world_2d.cpp
msgid "Navigation"
msgstr "ÐавігаціÑ"
@@ -6818,7 +6890,7 @@ msgstr "ПовтореннÑ"
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp
-#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp
+#: scene/gui/control.cpp
msgid "Filter"
msgstr "Фільтр"
@@ -7052,9 +7124,8 @@ msgid "Generating Lightmaps"
msgstr "Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ ÐºÐ°Ñ€Ñ‚ оÑвітленнÑ"
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Generating for Mesh:"
-msgstr "Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ñітки: "
+msgstr "Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ñітки:"
#: editor/import/resource_importer_scene.cpp
msgid "Running Custom Script..."
@@ -7081,6 +7152,18 @@ msgid "Saving..."
msgstr "ЗбереженнÑ..."
#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used as a normal map in 3D. Enabling red-green "
+"texture compression to reduce memory usage (blue channel is discarded)."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap "
+"generation and VRAM texture compression."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
msgid "2D, Detect 3D"
msgstr "2D, виÑвити 3D"
@@ -7758,11 +7841,20 @@ msgid "New Anim"
msgstr "Ðова анімаціÑ"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+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 "Rename Animation"
+msgstr "Перейменувати анімацію"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Delete Animation?"
msgstr "Видалити анімацію?"
@@ -7780,11 +7872,6 @@ 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 "Duplicate Animation"
msgstr "Дублювати анімацію"
@@ -7928,10 +8015,6 @@ msgid "Pin AnimationPlayer"
msgstr "Пришпилити AnimationPlayer"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Create New Animation"
-msgstr "Створити нову анімацію"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Name:"
msgstr "Ðазва анімації:"
@@ -8047,9 +8130,8 @@ msgid "Set the end animation. This is useful for sub-transitions."
msgstr "Ð’Ñтановити кінець анімації. КориÑно Ð´Ð»Ñ Ð´Ð¾Ð¿Ð¾Ð¼Ñ–Ð¶Ð½Ð¸Ñ… переходів."
#: editor/plugins/animation_state_machine_editor.cpp
-#, fuzzy
msgid "Transition:"
-msgstr "Перехід: "
+msgstr "Перехід:"
#: editor/plugins/animation_state_machine_editor.cpp
msgid "Play Mode:"
@@ -9808,9 +9890,8 @@ msgid "Volume"
msgstr "Об'єм"
#: editor/plugins/particles_editor_plugin.cpp
-#, fuzzy
msgid "Emission Source:"
-msgstr "Джерело випромінюваннÑ: "
+msgstr "Джерело випромінюваннÑ:"
#: editor/plugins/particles_editor_plugin.cpp
msgid "A processor material of type 'ParticlesMaterial' is required."
@@ -10043,6 +10124,7 @@ msgid "Points"
msgstr "Точки"
#: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp
+#: scene/resources/navigation_mesh.cpp
msgid "Polygons"
msgstr "Полігони"
@@ -10905,15 +10987,13 @@ msgstr "ПереÑунути"
#. TRANSLATORS: Refers to changing the scale of a node in the 3D editor.
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Scaling:"
-msgstr "МаÑштаб: "
+msgstr "МаÑштаб:"
#. TRANSLATORS: Refers to changing the position of a node in the 3D editor.
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Translating:"
-msgstr "ПеренеÑеннÑ: "
+msgstr "ПеренеÑеннÑ:"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rotating %s degrees."
@@ -11424,7 +11504,8 @@ msgid "Invalid geometry, can't replace by mesh."
msgstr "Ðекоректна геометріÑ, неможливо замінити Ñіткою."
#: editor/plugins/sprite_editor_plugin.cpp
-msgid "Convert to Mesh2D"
+#, fuzzy
+msgid "Convert to MeshInstance2D"
msgstr "Перетворити на Mesh2D"
#: editor/plugins/sprite_editor_plugin.cpp
@@ -11456,19 +11537,16 @@ msgid "Sprite"
msgstr "Спрайт"
#: editor/plugins/sprite_editor_plugin.cpp
-#, fuzzy
msgid "Simplification:"
-msgstr "СпрощеннÑ: "
+msgstr "СпрощеннÑ:"
#: editor/plugins/sprite_editor_plugin.cpp
-#, fuzzy
msgid "Shrink (Pixels):"
-msgstr "СтиÑÐºÐ°Ð½Ð½Ñ (пікÑелі): "
+msgstr "СтиÑÐºÐ°Ð½Ð½Ñ (пікÑелі):"
#: editor/plugins/sprite_editor_plugin.cpp
-#, fuzzy
msgid "Grow (Pixels):"
-msgstr "ЗроÑÑ‚Ð°Ð½Ð½Ñ (пікÑелі): "
+msgstr "ЗроÑÑ‚Ð°Ð½Ð½Ñ (пікÑелі):"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Update Preview"
@@ -12410,8 +12488,7 @@ msgid "Select the previous shape, subtile, or Tile."
msgstr "Вибір попередньої форми, підплитки або плитки."
#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp
-#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp
-#: scene/resources/texture.cpp
+#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp
msgid "Region"
msgstr "ОблаÑть"
@@ -12779,7 +12856,7 @@ msgstr "Інтервал Ñубтитрів"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Occluder Offset"
-msgstr ""
+msgstr "ЗÑув покриттÑ"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Navigation Offset"
@@ -12816,9 +12893,8 @@ msgid "Selected Occlusion"
msgstr "Позначене зіткненнÑ"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Tileset Script"
-msgstr "Filter Script (Фільтрувальний Ñкрипт)"
+msgstr "Скрипт набору плиток"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "TileSet"
@@ -13908,48 +13984,23 @@ msgstr "Ðктивний"
#: editor/project_export.cpp
msgid "Export the project for all the presets defined."
-msgstr ""
+msgstr "ЕкÑпортувати проєкт Ð´Ð»Ñ ÑƒÑÑ–Ñ… визначених наборів."
#: editor/project_export.cpp
msgid "All presets must have an export path defined for Export All to work."
msgstr ""
+"Щоб можна було ÑкориÑтатиÑÑ Ð¿ÑƒÐ½ÐºÑ‚Ð¾Ð¼ «ЕкÑпортувати уÑе», має бути визначено "
+"шлÑÑ… Ð´Ð»Ñ ÐµÐºÑÐ¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ ÑƒÑÑ–Ñ… наборів."
#: editor/project_export.cpp
msgid "Delete preset '%s'?"
msgstr "Вилучити набір «%s»?"
#: editor/project_export.cpp
-msgid ""
-"Failed to export the project for platform '%s'.\n"
-"Export templates seem to be missing or invalid."
-msgstr ""
-"Ðе вдалоÑÑ ÐµÐºÑпортувати проєкт Ð´Ð»Ñ Ð¿Ð»Ð°Ñ‚Ñ„Ð¾Ñ€Ð¼Ð¸ «%s».\n"
-"ЗдаєтьÑÑ, шаблони екÑÐ¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ñ€Ð¾Ð¿ÑƒÑ‰ÐµÐ½Ð¾ або вони Ñ” некоректними."
-
-#: 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 ""
-"Ðе вдалоÑÑ ÐµÐºÑпортувати проєкт Ð´Ð»Ñ Ð¿Ð»Ð°Ñ‚Ñ„Ð¾Ñ€Ð¼Ð¸ «%s».\n"
-"Причиною може бути помилка у налаштуваннÑÑ… у наборі налаштувань Ð´Ð»Ñ "
-"екÑÐ¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð°Ð±Ð¾ параметрах екÑпортуваннÑ."
-
-#: 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 "Export Path"
msgstr "ШлÑÑ… екÑпорту"
@@ -14059,43 +14110,43 @@ msgid "More Info..."
msgstr "Додаткова інформаціÑ…"
#: editor/project_export.cpp
-#, fuzzy
msgid "Export PCK/Zip..."
-msgstr "ЕкÑпортувати PCK/Zip"
+msgstr "ЕкÑпортувати PCK/Zip…"
#: editor/project_export.cpp
-#, fuzzy
msgid "Export Project..."
-msgstr "ЕкÑпортувати проєкт"
+msgstr "ЕкÑпортувати проєкт…"
#: editor/project_export.cpp
msgid "Export All"
msgstr "ЕкÑпортувати уÑе"
#: editor/project_export.cpp
-#, fuzzy
msgid "Choose an export mode:"
-msgstr "Будь лаÑка, виберіть порожню теку."
+msgstr "Виберіть режим екÑпортуваннÑ:"
#: editor/project_export.cpp
-#, fuzzy
msgid "Export All..."
-msgstr "ЕкÑпортувати уÑе"
+msgstr "ЕкÑпортувати уÑе…"
#: editor/project_export.cpp editor/project_manager.cpp
msgid "ZIP File"
msgstr "Файл ZIP"
#: editor/project_export.cpp
-#, fuzzy
msgid "Godot Project Pack"
-msgstr "Пакунок гри Godot"
+msgstr "Пакунок проєкту Godot"
#: editor/project_export.cpp
msgid "Export templates for this platform are missing:"
msgstr "Ðемає шаблонів екÑÐ¿Ð¾Ñ€Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ñ†Ñ–Ñ”Ñ— платформи:"
#: editor/project_export.cpp
+#, fuzzy
+msgid "Project Export"
+msgstr "ЗаÑновники проєкту"
+
+#: editor/project_export.cpp
msgid "Manage Export Templates"
msgstr "Ð£Ð¿Ñ€Ð°Ð²Ð»Ñ–Ð½Ð½Ñ ÑˆÐ°Ð±Ð»Ð¾Ð½Ð°Ð¼Ð¸ екÑпорту"
@@ -15644,9 +15695,8 @@ msgid "Attach Node Script"
msgstr "Долучити Ñкрипт вузла"
#: editor/script_editor_debugger.cpp
-#, fuzzy
msgid "Remote %s:"
-msgstr "Віддалений "
+msgstr "Віддалений %s:"
#: editor/script_editor_debugger.cpp
msgid "Bytes:"
@@ -16461,7 +16511,7 @@ msgstr "Сторони КільцÑ"
#: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp
#: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp
-#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp
+#: scene/3d/collision_polygon.cpp
msgid "Polygon"
msgstr "Багатокутник"
@@ -16531,7 +16581,7 @@ msgstr "ÐŸÐµÑ€ÐµÐ¼Ð¸ÐºÐ°Ð½Ð½Ñ Ñервера"
#: modules/enet/networked_multiplayer_enet.cpp
msgid "DTLS Verify"
-msgstr ""
+msgstr "Перевірка DTLS"
#: modules/enet/networked_multiplayer_enet.cpp
msgid "DTLS Hostname"
@@ -16621,9 +16671,8 @@ msgid "Disabled GDNative Singleton"
msgstr "Вимкнений одинак GDNative"
#: modules/gdnative/gdnative_library_singleton_editor.cpp
-#, fuzzy
msgid "Libraries:"
-msgstr "Бібліотеки: "
+msgstr "Бібліотеки:"
#: modules/gdnative/nativescript/nativescript.cpp
msgid "Class Name"
@@ -16648,7 +16697,7 @@ msgstr "Скрипт"
#: modules/gdscript/editor/gdscript_highlighter.cpp
msgid "Function Definition Color"
-msgstr ""
+msgstr "Колір Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ—"
#: modules/gdscript/editor/gdscript_highlighter.cpp
msgid "Node Path Color"
@@ -16664,11 +16713,11 @@ msgstr "вважати Ð¿Ð¾Ð¿ÐµÑ€ÐµÐ´Ð¶ÐµÐ½Ð½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°Ð¼Ð¸"
#: modules/gdscript/gdscript.cpp
msgid "Exclude Addons"
-msgstr ""
+msgstr "Виключити додатки"
#: modules/gdscript/gdscript.cpp
msgid "Autocomplete Setters And Getters"
-msgstr ""
+msgstr "Ðвтоматичне Ð´Ð¾Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð²Ñтановлювачів Ñ– отримувачів"
#: modules/gdscript/gdscript_functions.cpp
msgid "Step argument is zero!"
@@ -17018,7 +17067,6 @@ msgid "Use In Baked Light"
msgstr "ВикориÑтовувати у запеченому Ñвітлі"
#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
-#: scene/resources/navigation_mesh.cpp
msgid "Cell"
msgstr "Мобільний"
@@ -17044,6 +17092,19 @@ msgstr "Центр за Z"
msgid "Mask"
msgstr "МаÑка"
+#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
+#, fuzzy
+msgid "Bake Navigation"
+msgstr "ÐавігаціÑ"
+
+#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp
+#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp
+#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp
+#: scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Navigation Layers"
+msgstr "Поведінка навігації"
+
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Plane"
msgstr "ÐаÑтупна площина"
@@ -17447,9 +17508,8 @@ msgstr ""
"вузла! Будь лаÑка, виправте ваш вузол."
#: modules/visual_script/visual_script.cpp
-#, fuzzy
msgid "Node returned an invalid sequence output:"
-msgstr "Вузлом повернуто некоректну поÑлідовніÑть даних: "
+msgstr "Вузлом повернуто некоректну поÑлідовніÑть даних:"
#: modules/visual_script/visual_script.cpp
msgid "Found sequence bit but not the node in the stack, report bug!"
@@ -17457,9 +17517,8 @@ msgstr ""
"ВиÑвлено біт поÑлідовноÑті, але не вузол у Ñтеку. Повідомте про цю ваду!"
#: modules/visual_script/visual_script.cpp
-#, fuzzy
msgid "Stack overflow with stack depth:"
-msgstr "ÐŸÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ñтека, глибина Ñтека: "
+msgstr "ÐŸÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ñтека, глибина Ñтека:"
#: modules/visual_script/visual_script.cpp
msgid "Visual Script"
@@ -17827,18 +17886,16 @@ msgid "for (elem) in (input):"
msgstr "Ð´Ð»Ñ (elem) у (input):"
#: modules/visual_script/visual_script_flow_control.cpp
-#, fuzzy
msgid "Input type not iterable:"
-msgstr "Тип вводу не ітерабельний: "
+msgstr "Ð†Ñ‚ÐµÑ€Ð°Ñ†Ñ–Ñ Ð·Ð° вхідним типом неможлива:"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Iterator became invalid"
msgstr "Ітератор Ñтав недійÑним"
#: modules/visual_script/visual_script_flow_control.cpp
-#, fuzzy
msgid "Iterator became invalid:"
-msgstr "Ітератор Ñтав недійÑним: "
+msgstr "Ітератор Ñтав некоректним:"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Sequence"
@@ -17990,14 +18047,12 @@ msgid "Operator"
msgstr "Оператор"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Invalid argument of type:"
-msgstr ": Ðеправильний тип аргументу: "
+msgstr "Ðекоректний тип аргументу:"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Invalid arguments:"
-msgstr ": ÐеприпуÑтимі аргументи: "
+msgstr "Ðекоректні аргументи:"
#: modules/visual_script/visual_script_nodes.cpp
msgid "a if cond, else b"
@@ -18008,14 +18063,12 @@ msgid "Var Name"
msgstr "Ðазва змінної"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "VariableGet not found in script:"
-msgstr "Ðе знайдено VariableGet у Ñкрипті: "
+msgstr "Ðе знайдено VariableGet у Ñкрипті:"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "VariableSet not found in script:"
-msgstr "Ðе знайдено VariableSet у Ñкрипті: "
+msgstr "Ðе знайдено VariableSet у Ñкрипті:"
#: modules/visual_script/visual_script_nodes.cpp
msgid "Preload"
@@ -18502,10 +18555,6 @@ msgid "Could not execute on device."
msgstr "Ðе вдалоÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ на приÑтрої."
#: platform/android/export/export_plugin.cpp
-msgid "Unable to find the 'apksigner' tool."
-msgstr "Ðе вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ програму apksigner."
-
-#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -18640,12 +18689,17 @@ msgstr ""
msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version."
msgstr "ВерÑÑ–Ñ Â«SDK цілі» має бути більшою або рівною за верÑÑ–ÑŽ «Мін. SDK»."
+#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Code Signing"
+msgstr "DMG із підпиÑуваннÑм коду"
+
#: platform/android/export/export_plugin.cpp
+#, fuzzy
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."
+"'apksigner' could not be found. Please check that the command is available "
+"in the Android SDK build-tools directory. The resulting %s is unsigned."
msgstr ""
"Ðе вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ «apksigner».\n"
"Будь лаÑка, перевірте, чи Ñ” програма доÑтупною у каталозі build-tools набору "
@@ -18665,6 +18719,11 @@ msgid "Could not find keystore, unable to export."
msgstr "Ðе вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñховище ключів. Ðеможливо виконати екÑпортуваннÑ."
#: platform/android/export/export_plugin.cpp
+#, fuzzy
+msgid "Could not start apksigner executable."
+msgstr "Ðе вдалоÑÑ Ð·Ð°Ð¿ÑƒÑтити підпроцеÑ!"
+
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr "«apksigner» повернуто Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾ помилку із номером %d"
@@ -18696,7 +18755,8 @@ msgstr ""
"Ðекоректна назва файла! Пакунок Android APK повинен мати ÑÑƒÑ„Ñ–ÐºÑ Ð½Ð°Ð·Ð²Ð¸ *.apk."
#: platform/android/export/export_plugin.cpp
-msgid "Unsupported export format!\n"
+#, fuzzy
+msgid "Unsupported export format!"
msgstr "Ðепідтримуваний формат екÑпортуваннÑ!\n"
#: platform/android/export/export_plugin.cpp
@@ -18709,10 +18769,9 @@ msgstr ""
"допомогою меню «Проєкт»."
#: platform/android/export/export_plugin.cpp
+#, fuzzy
msgid ""
-"Android build version mismatch:\n"
-" Template installed: %s\n"
-" Godot Version: %s\n"
+"Android build version mismatch: Template installed: %s, Godot version: %s. "
"Please reinstall Android build template from 'Project' menu."
msgstr ""
"ÐевідповідніÑть верÑÑ–Ñ Ð´Ð»Ñ Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ Ð´Ð»Ñ Android:\n"
@@ -18722,13 +18781,15 @@ msgstr ""
"меню «Проєкт»."
#: platform/android/export/export_plugin.cpp
+#, fuzzy
msgid ""
-"Unable to overwrite res://android/build/res/*.xml files with project name"
+"Unable to overwrite res://android/build/res/*.xml files with project name."
msgstr ""
"Ðе вдалоÑÑ Ð¿ÐµÑ€ÐµÐ·Ð°Ð¿Ð¸Ñати файли res://android/build/res/*.xml із назвою проєкту"
#: platform/android/export/export_plugin.cpp
-msgid "Could not export project files to gradle project\n"
+#, fuzzy
+msgid "Could not export project files to gradle project."
msgstr "Ðе вдалоÑÑ ÐµÐºÑпортувати файли проєкту до проєкту gradle\n"
#: platform/android/export/export_plugin.cpp
@@ -18740,8 +18801,9 @@ msgid "Building Android Project (gradle)"
msgstr "Ð—Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ Ð¿Ñ€Ð¾Ñ”ÐºÑ‚Ñƒ Android (gradle)"
#: platform/android/export/export_plugin.cpp
+#, fuzzy
msgid ""
-"Building of Android project failed, check output for the error.\n"
+"Building of Android project failed, check output for the error. "
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
"Ðе вдалоÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ Ð¿Ñ€Ð¾Ñ”ÐºÑ‚Ñƒ Android. ОзнайомтеÑÑ Ñ–Ð· виведеними "
@@ -18762,7 +18824,8 @@ msgstr ""
"дані можна знайти у каталозі проєкту gradle."
#: platform/android/export/export_plugin.cpp
-msgid "Package not found: %s"
+#, fuzzy
+msgid "Package not found: \"%s\"."
msgstr "Пакунок не знайдено: %s"
#: platform/android/export/export_plugin.cpp
@@ -18770,17 +18833,16 @@ msgid "Creating APK..."
msgstr "Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ APK…"
#: platform/android/export/export_plugin.cpp
-msgid ""
-"Could not find template APK to export:\n"
-"%s"
+#, fuzzy
+msgid "Could not find template APK to export: \"%s\"."
msgstr ""
"Ðе вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ шаблон APK Ð´Ð»Ñ ÐµÐºÑпортуваннÑ:\n"
"%s"
#: platform/android/export/export_plugin.cpp
+#, fuzzy
msgid ""
-"Missing libraries in the export template for the selected architectures: "
-"%s.\n"
+"Missing libraries in the export template for the selected architectures: %s. "
"Please build a template with all required libraries, or uncheck the missing "
"architectures in the export preset."
msgstr ""
@@ -18793,7 +18855,8 @@ msgid "Adding files..."
msgstr "Ð”Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñ–Ð²â€¦"
#: platform/android/export/export_plugin.cpp
-msgid "Could not export project files"
+#, fuzzy
+msgid "Could not export project files."
msgstr "Ðе вдалоÑÑ ÐµÐºÑпортувати файли проєкту"
#: platform/android/export/export_plugin.cpp
@@ -19028,6 +19091,17 @@ msgstr "Ðетиповий колір тла"
msgid "Custom BG Color"
msgstr "Ðетиповий колір тла"
+#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Prepare Templates"
+msgstr "ÐšÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ ÑˆÐ°Ð±Ð»Ð¾Ð½Ð°Ð¼Ð¸"
+
+#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Export template not found."
+msgstr "Ðетипового шаблону випуÑку не знайдено."
+
#: platform/iphone/export/export.cpp
msgid "App Store Team ID not specified - cannot configure the project."
msgstr ""
@@ -19050,22 +19124,35 @@ msgid "Run exported HTML in the system's default browser."
msgstr "Виконати екÑпортований HTML у браузері за умовчаннÑм ÑиÑтеми."
#: platform/javascript/export/export.cpp
-msgid "Could not open template for export:"
+#, fuzzy
+msgid "Could not open template for export: \"%s\"."
msgstr "Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ шаблон Ð´Ð»Ñ ÐµÐºÑпорту:"
#: platform/javascript/export/export.cpp
-msgid "Invalid export template:"
+#, fuzzy
+msgid "Invalid export template: \"%s\"."
msgstr "Ðеправильний шаблон екÑпорту:"
#: platform/javascript/export/export.cpp
-msgid "Could not write file:"
+#, fuzzy
+msgid "Could not write file: \"%s\"."
msgstr "Ðе вдалоÑÑ Ð·Ð°Ð¿Ð¸Ñати файл:"
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Icon Creation"
+msgstr "Поле піктограми"
+
#: platform/javascript/export/export.cpp
-msgid "Could not read file:"
+#, fuzzy
+msgid "Could not read file: \"%s\"."
msgstr "Ðе вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ файл:"
#: platform/javascript/export/export.cpp
+msgid "PWA"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
msgid "Variant"
msgstr "Варіант"
@@ -19134,15 +19221,18 @@ msgid "Icon 512 X 512"
msgstr "Піктограма 512⨯12"
#: platform/javascript/export/export.cpp
-msgid "Could not read HTML shell:"
+#, fuzzy
+msgid "Could not read HTML shell: \"%s\"."
msgstr "Ðе вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ оболонку HTML:"
#: platform/javascript/export/export.cpp
-msgid "Could not create HTTP server directory:"
+#, fuzzy
+msgid "Could not create HTTP server directory: %s."
msgstr "Ðе вдалоÑÑ Ñтворити каталог на Ñервері HTTP:"
#: platform/javascript/export/export.cpp
-msgid "Error starting HTTP server:"
+#, fuzzy
+msgid "Error starting HTTP server: %d."
msgstr "Помилка під Ñ‡Ð°Ñ Ñпроби запуÑку Ñервера HTTP:"
#: platform/javascript/export/export.cpp
@@ -19407,9 +19497,29 @@ msgid "Apple Team ID"
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open icon file \"%s\"."
+msgstr "Ðе вдалоÑÑ ÐµÐºÑпортувати файли проєкту"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start xcrun executable."
+msgstr "Ðе вдалоÑÑ Ð·Ð°Ð¿ÑƒÑтити підпроцеÑ!"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization failed."
+msgstr "ЗаÑвідченнÑ"
+
+#: platform/osx/export/export.cpp
+msgid "Notarization request UUID: \"%s\""
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
msgid ""
-"Note: The notarization process generally takes less than an hour. When the "
-"process is completed, you'll receive an email."
+"The notarization process generally takes less than an hour. When the process "
+"is completed, you'll receive an email."
msgstr ""
"ЗауваженнÑ: процедура заÑвідченнÑ, загалом, триває не більше години. Щойно "
"процедуру буде завершено, ви отримаєте Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ ÐµÐ»ÐµÐºÑ‚Ñ€Ð¾Ð½Ð½Ð¾ÑŽ поштою."
@@ -19431,18 +19541,83 @@ msgstr ""
"програми (необов'Ñзкова процедура):"
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+"ВикориÑÑ‚Ð°Ð½Ð½Ñ Ñ‡Ð°Ñових позначок Ñ” неÑуміÑним із одноразовим підпиÑом — його "
+"буде вимкнено!"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+"Стійке Ñередовище запуÑку Ñ” неÑуміÑним із одноразовим підпиÑом — його буде "
+"вимкнено!"
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign failed with error \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign require regex module."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Could not start codesign executable, make sure Xcode command line tools are "
+"installed."
+msgstr ""
+
+#: platform/osx/export/export.cpp platform/windows/export/export.cpp
msgid "No identity found."
msgstr "Ðе знайдено профілю."
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Cannot sign file %s."
+msgstr "Помилка під Ñ‡Ð°Ñ Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð°: %s"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Relative symlinks are not supported, exported \"%s\" might be broken!"
+msgstr ""
+"У цій операційній ÑиÑтемі не передбачено підтримки відноÑних Ñимволічних "
+"поÑилань. ЕкÑпортований проєкт може виÑвитиÑÑ Ð½ÐµÐ¿Ñ€Ð°Ñ†ÐµÐ·Ð´Ð°Ñ‚Ð½Ð¸Ð¼!"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "DMG Creation"
+msgstr "ÐапрÑмок"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start hdiutil executable."
+msgstr "Ðе вдалоÑÑ Ð·Ð°Ð¿ÑƒÑтити підпроцеÑ!"
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed - file exists."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed."
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid "Creating app bundle"
msgstr "Створюємо комплект програми"
#: platform/osx/export/export.cpp
-msgid "Could not find template app to export:"
+#, fuzzy
+msgid "Could not find template app to export: \"%s\"."
msgstr "Ðе вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ програму-шаблон Ð´Ð»Ñ ÐµÐºÑпортуваннÑ:"
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid export format."
+msgstr "Ðеправильний шаблон екÑпорту:"
+
+#: platform/osx/export/export.cpp
msgid ""
"Relative symlinks are not supported on this OS, the exported project might "
"be broken!"
@@ -19451,8 +19626,9 @@ msgstr ""
"поÑилань. ЕкÑпортований проєкт може виÑвитиÑÑ Ð½ÐµÐ¿Ñ€Ð°Ñ†ÐµÐ·Ð´Ð°Ñ‚Ð½Ð¸Ð¼!"
#: platform/osx/export/export.cpp
+#, fuzzy
msgid ""
-"Requested template binary '%s' not found. It might be missing from your "
+"Requested template binary \"%s\" not found. It might be missing from your "
"template archive."
msgstr ""
"Ðе знайдено двійкового файла шаблона «%s». Ймовірно, його немає у вашому "
@@ -19499,6 +19675,16 @@ msgid "Sending archive for notarization"
msgstr "ÐадÑилаємо архів Ð´Ð»Ñ Ð·Ð°ÑвідченнÑ"
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "ZIP Creation"
+msgstr "ПроєкціÑ"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open file to read from path \"%s\"."
+msgstr "Ðе вдалоÑÑ ÐµÐºÑпортувати файли проєкту до проєкту gradle\n"
+
+#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr "Ðекоректний ідентифікатор пакунка:"
@@ -19835,6 +20021,11 @@ msgid "Debug Algorithm"
msgstr "Ðлгоритм діагноÑтики"
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to rename temporary file \"%s\"."
+msgstr "Ðе вдалоÑÑ Ð²Ð¸Ð»ÑƒÑ‡Ð¸Ñ‚Ð¸ тимчаÑовий файл:"
+
+#: platform/windows/export/export.cpp
msgid "Identity Type"
msgstr "Тип профілю"
@@ -19875,6 +20066,78 @@ msgid "Trademarks"
msgstr "Торгівельні марки"
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Resources Modification"
+msgstr "ІмпульÑні ÑповіщеннÑ"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find rcedit executable at \"%s\"."
+msgstr "Ðе вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñховище ключів. Ðеможливо виконати екÑпортуваннÑ."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find wine executable at \"%s\"."
+msgstr "Ðе вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñховище ключів. Ðеможливо виконати екÑпортуваннÑ."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid ""
+"Could not start rcedit executable, configure rcedit path in the Editor "
+"Settings (Export > Windows > Rcedit)."
+msgstr ""
+"Щоб мати змогу змінювати піктограму або дані щодо програми, має бути "
+"налаштовано інÑтрумент rcedit у параметрах редактора (ЕкÑпорт > Windows > "
+"Rcedit)."
+
+#: platform/windows/export/export.cpp
+msgid ""
+"rcedit failed to modify executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find signtool executable at \"%s\"."
+msgstr "Ðе вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñховище ключів. Ðеможливо виконати екÑпортуваннÑ."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find osslsigncode executable at \"%s\"."
+msgstr "Ðе вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñховище ключів. Ðеможливо виконати екÑпортуваннÑ."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid identity type."
+msgstr "Тип профілю"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid timestamp server."
+msgstr "Ðекоректна назва."
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid ""
+"Could not start signtool executable, configure signtool path in the Editor "
+"Settings (Export > Windows > Signtool)."
+msgstr ""
+"Щоб мати змогу змінювати піктограму або дані щодо програми, має бути "
+"налаштовано інÑтрумент rcedit у параметрах редактора (ЕкÑпорт > Windows > "
+"Rcedit)."
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Signtool failed to sign executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to remove temporary file \"%s\"."
+msgstr "Ðе вдалоÑÑ Ð²Ð¸Ð»ÑƒÑ‡Ð¸Ñ‚Ð¸ тимчаÑовий файл:"
+
+#: platform/windows/export/export.cpp
msgid ""
"The rcedit tool must be configured in the Editor Settings (Export > Windows "
"> Rcedit) to change the icon or app information data."
@@ -19896,6 +20159,23 @@ msgid "Invalid product version:"
msgstr "Ðекоректна верÑÑ–Ñ Ð¿Ñ€Ð¾Ð´ÑƒÐºÑ‚Ñƒ:"
#: platform/windows/export/export.cpp
+msgid "Windows executables cannot be >= 4 GiB."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+#, fuzzy
+msgid "Failed to open executable file \"%s\"."
+msgstr "Ðекоректний виконуваний файл."
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable file header corrupted."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable \"pck\" section not found."
+msgstr ""
+
+#: platform/windows/export/export.cpp
msgid "Windows"
msgstr "Вікна"
@@ -19911,6 +20191,10 @@ msgstr ""
msgid "Wine"
msgstr "Вино"
+#: platform/x11/export/export.cpp
+msgid "32-bit executables cannot have embedded data >= 4 GiB."
+msgstr ""
+
#: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp
#: scene/resources/texture.cpp
msgid "Frames"
@@ -20021,7 +20305,8 @@ msgstr ""
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/3d/light.cpp scene/3d/reflection_probe.cpp
-#: scene/3d/visual_instance.cpp scene/resources/material.cpp
+#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp
+#: scene/resources/material.cpp
msgid "Max Distance"
msgstr "МакÑ. відÑтань"
@@ -20742,6 +21027,18 @@ msgstr "Розмір комірки"
msgid "Edge Connection Margin"
msgstr "Поле з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ñ€ÐµÐ±ÐµÑ€"
+#: scene/2d/navigation_2d.cpp
+msgid ""
+"'Navigation2D' node and 'Navigation2D.get_simple_path()' are deprecated and "
+"will be removed in a future version. Use 'Navigation2DServer.map_get_path()' "
+"instead."
+msgstr ""
+
+#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
+#, fuzzy
+msgid "Path Desired Distance"
+msgstr "U-відÑтань контуру"
+
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
msgid "Target Desired Distance"
msgstr ""
@@ -20799,17 +21096,19 @@ msgstr ""
"намалюйте багатокутник."
#: scene/2d/navigation_polygon.cpp
-msgid ""
-"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
-"node. It only provides navigation data."
-msgstr ""
-"NavigationPolygonInstance має бути дочірнім елементом вузла Navigation2D або "
-"елементом ще нижчої підпорÑдкованоÑті. Він надає лише навігаційні дані."
-
-#: scene/2d/navigation_polygon.cpp
msgid "Navpoly"
msgstr ""
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Enter Cost"
+msgstr "За центром внизу"
+
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Travel Cost"
+msgstr "Подорож"
+
#: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp
#: scene/main/canvas_layer.cpp
msgid "Rotation Degrees"
@@ -21900,6 +22199,13 @@ msgstr ""
msgid "Transform Normals"
msgstr "Перетворити нормалі"
+#: scene/3d/navigation.cpp
+msgid ""
+"'Navigation' node and 'Navigation.get_simple_path()' are deprecated and will "
+"be removed in a future version. Use 'NavigationServer.map_get_path()' "
+"instead."
+msgstr ""
+
#: scene/3d/navigation.cpp scene/resources/curve.cpp
msgid "Up Vector"
msgstr "Вектор"
@@ -21922,14 +22228,6 @@ msgid ""
"The NavigationAgent can be used only under a Spatial inheriting parent node."
msgstr "NavigationAgent можна викориÑтовувати лише під проÑторовим вузлом."
-#: scene/3d/navigation_mesh_instance.cpp
-msgid ""
-"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
-"It only provides navigation data."
-msgstr ""
-"NavigationMeshInstance має бути дочірнім елементом вузла Navigation або "
-"елементом ще нижчої підпорÑдкованоÑті. Він надає лише навігаційні дані."
-
#: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp
msgid "NavMesh"
msgstr "NavMesh"
@@ -22974,9 +23272,8 @@ msgid "Delay"
msgstr "Затримка торканнÑ"
#: scene/animation/animation_blend_tree.cpp
-#, fuzzy
msgid "Random Delay"
-msgstr "Випадковий нахил:"
+msgstr "Випадкова затримка"
#: scene/animation/animation_blend_tree.cpp
#, fuzzy
@@ -24396,6 +24693,16 @@ msgid "3D Physics"
msgstr "ПроÑторова фізика"
#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "2D Navigation"
+msgstr "ÐавігаціÑ"
+
+#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "3D Navigation"
+msgstr "ÐавігаціÑ"
+
+#: scene/register_scene_types.cpp
msgid "Use hiDPI"
msgstr "ВикориÑтовувати hiDPI"
@@ -25644,7 +25951,7 @@ msgstr "Перехід"
msgid "Refraction"
msgstr "ЗаломленнÑ"
-#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp
+#: scene/resources/material.cpp
msgid "Detail"
msgstr "Подробиці"
@@ -25719,7 +26026,13 @@ msgid "Visible Instance Count"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Sample Partition Type"
+#, fuzzy
+msgid "Sampling"
+msgstr "МаÑштаб:"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Partition Type"
msgstr "Ð’Ñтановити базовий тип змінної"
#: scene/resources/navigation_mesh.cpp
@@ -25735,7 +26048,13 @@ msgid "Source Group Name"
msgstr "Ðазва групи джерел"
#: scene/resources/navigation_mesh.cpp
-msgid "Agent"
+#, fuzzy
+msgid "Cells"
+msgstr "Мобільний"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Agents"
msgstr "ÐГЕÐТ"
#: scene/resources/navigation_mesh.cpp
@@ -25747,11 +26066,17 @@ msgid "Max Slope"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Regions"
+msgstr "ОблаÑть"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Merge Size"
msgstr "Об'єднати зі Ñцени"
#: scene/resources/navigation_mesh.cpp
-msgid "Edge"
+#, fuzzy
+msgid "Edges"
msgstr "Край"
#: scene/resources/navigation_mesh.cpp
@@ -25763,6 +26088,11 @@ msgid "Verts Per Poly"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Details"
+msgstr "Подробиці"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Sample Distance"
msgstr "ВідÑтань диÑкретизації"
@@ -25779,9 +26109,19 @@ msgid "Ledge Spans"
msgstr "Розміри планки"
#: scene/resources/navigation_mesh.cpp
-msgid "Filter Walkable Low Height Spans"
+msgid "Walkable Low Height Spans"
msgstr ""
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB"
+msgstr "Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ AABB"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB Offset"
+msgstr "Базове зміщеннÑ"
+
#: scene/resources/occluder_shape.cpp
msgid "Spheres"
msgstr ""
@@ -26153,6 +26493,11 @@ msgid "Scenario"
msgstr "Сценарій"
#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Navigation Map"
+msgstr "ÐавігаціÑ"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
msgid "Direct Space State"
msgstr ""
@@ -26168,6 +26513,26 @@ msgstr "Лівий лінійний"
msgid "Default Angular Damp"
msgstr ""
+#: scene/resources/world.cpp
+#, fuzzy
+msgid "Default Map Up"
+msgstr "Типовий крок переÑуваннÑ"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Size"
+msgstr "Розмір комірки"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Height"
+msgstr "ВиÑота комірки"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Edge Connection Margin"
+msgstr "Поле з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ñ€ÐµÐ±ÐµÑ€"
+
#: scene/resources/world_2d.cpp
msgid "Canvas"
msgstr "Полотно"
diff --git a/editor/translations/ur_PK.po b/editor/translations/ur_PK.po
index da5aea8eef..76cd6b6495 100644
--- a/editor/translations/ur_PK.po
+++ b/editor/translations/ur_PK.po
@@ -212,9 +212,10 @@ msgid "Data"
msgstr ""
#: core/io/file_access_network.cpp core/register_core_types.cpp
-#: editor/editor_settings.cpp main/main.cpp
+#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
#: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h
+#: scene/gui/file_dialog.cpp
#, fuzzy
msgid "Network"
msgstr ".تمام کا انتخاب"
@@ -372,6 +373,15 @@ msgstr ""
msgid "Max Size (KB)"
msgstr ""
+#: core/os/input.cpp
+#, fuzzy
+msgid "Mouse Mode"
+msgstr "ایکشن منتقل کریں"
+
+#: core/os/input.cpp
+msgid "Use Accumulated Input"
+msgstr ""
+
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: servers/audio_server.cpp
msgid "Device"
@@ -560,7 +570,8 @@ msgstr "سب سکریپشن بنائیں"
#: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
-#: main/main.cpp
+#: main/main.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp
msgid "Run"
msgstr ""
@@ -644,24 +655,23 @@ msgid "Main Run Args"
msgstr ""
#: core/project_settings.cpp
-msgid "Search In File Extensions"
+msgid "Scene Naming"
msgstr ""
#: core/project_settings.cpp
-msgid "Script Templates Search Path"
+msgid "Search In File Extensions"
msgstr ""
-#: core/project_settings.cpp editor/editor_node.cpp
-#: editor/plugins/version_control_editor_plugin.cpp
-msgid "Version Control"
+#: core/project_settings.cpp
+msgid "Script Templates Search Path"
msgstr ""
#: core/project_settings.cpp
-msgid "Autoload On Startup"
+msgid "Version Control Autoload On Startup"
msgstr ""
#: core/project_settings.cpp
-msgid "Plugin Name"
+msgid "Version Control Plugin Name"
msgstr ""
#: core/project_settings.cpp scene/2d/collision_object_2d.cpp
@@ -770,7 +780,8 @@ msgid "Quality"
msgstr ""
#: core/project_settings.cpp scene/gui/file_dialog.cpp
-#: scene/main/scene_tree.cpp servers/visual_server.cpp
+#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp
+#: servers/visual_server.cpp
#, fuzzy
msgid "Filters"
msgstr "سب سکریپشن بنائیں"
@@ -2184,7 +2195,7 @@ msgid "Open"
msgstr ""
#: editor/dependency_editor.cpp
-msgid "Owners Of:"
+msgid "Owners of: %s (Total: %d)"
msgstr ""
#: editor/dependency_editor.cpp
@@ -2480,7 +2491,7 @@ msgid "Bus Options"
msgstr "سب سکریپشن بنائیں"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/scene_tree_dock.cpp
+#: editor/project_export.cpp editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr ""
@@ -2739,6 +2750,22 @@ msgid "Choose"
msgstr ""
#: editor/editor_export.cpp
+msgid "Project export for platform:"
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Completed with errors."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Completed successfully."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Failed."
+msgstr ""
+
+#: editor/editor_export.cpp
msgid "Storing File:"
msgstr ""
@@ -2751,6 +2778,28 @@ msgid "Packing"
msgstr ""
#: editor/editor_export.cpp
+msgid "Save PCK"
+msgstr ""
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Cannot create file \"%s\"."
+msgstr "سب سکریپشن بنائیں"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to export project files."
+msgstr "سب سکریپشن بنائیں"
+
+#: editor/editor_export.cpp
+msgid "Can't open file to read from path \"%s\"."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Save ZIP"
+msgstr ""
+
+#: editor/editor_export.cpp
msgid ""
"Target platform requires 'ETC' texture compression for GLES2. Enable 'Import "
"Etc' in Project Settings."
@@ -2854,8 +2903,27 @@ msgstr ""
msgid "Custom release template not found."
msgstr ""
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Prepare Template"
+msgstr ".تمام کا انتخاب"
+
+#: editor/editor_export.cpp platform/osx/export/export.cpp
+msgid "The given export path doesn't exist."
+msgstr ""
+
#: editor/editor_export.cpp platform/javascript/export/export.cpp
-msgid "Template file not found:"
+msgid "Template file not found: \"%s\"."
+msgstr ""
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to copy export template."
+msgstr ".تمام کا انتخاب"
+
+#: editor/editor_export.cpp platform/windows/export/export.cpp
+#: platform/x11/export/export.cpp
+msgid "PCK Embedding"
msgstr ""
#: editor/editor_export.cpp
@@ -3034,9 +3102,9 @@ msgid "Import"
msgstr "درآمد"
#: editor/editor_feature_profile.cpp editor/project_export.cpp
-#: platform/android/export/export.cpp platform/javascript/export/export.cpp
-#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
-#: platform/windows/export/export.cpp
+#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#: platform/uwp/export/export.cpp platform/windows/export/export.cpp
msgid "Export"
msgstr ""
@@ -4142,14 +4210,6 @@ msgid ""
"Unable to write to file '%s', file in use, locked or lacking permissions."
msgstr ""
-#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
-msgid "Scene"
-msgstr ""
-
-#: editor/editor_node.cpp
-msgid "Scene Naming"
-msgstr ""
-
#: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp
#: servers/arvr/arvr_interface.cpp
msgid "Interface"
@@ -4269,6 +4329,10 @@ msgid "Default Color Picker Mode"
msgstr ""
#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
+msgid "Version Control"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
#, fuzzy
msgid "Username"
msgstr ".تمام کا انتخاب"
@@ -4297,6 +4361,10 @@ msgstr ""
msgid "Add a new scene."
msgstr ""
+#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
+msgid "Scene"
+msgstr ""
+
#: editor/editor_node.cpp
msgid "Go to previously opened scene."
msgstr ""
@@ -5044,6 +5112,11 @@ msgid ""
"as runnable."
msgstr ""
+#: editor/editor_run_native.cpp
+#, fuzzy
+msgid "Project Run"
+msgstr "سب سکریپشن بنائیں"
+
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
msgstr ""
@@ -5306,7 +5379,9 @@ msgid "Draw Spaces"
msgstr ""
#: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp
-#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp
+#: scene/main/scene_tree.cpp scene/resources/world.cpp
+#: scene/resources/world_2d.cpp
#, fuzzy
msgid "Navigation"
msgstr "سب سکریپشن بنائیں"
@@ -6745,7 +6820,7 @@ msgstr ""
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp
-#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp
+#: scene/gui/control.cpp
#, fuzzy
msgid "Filter"
msgstr "سب سکریپشن بنائیں"
@@ -7025,6 +7100,18 @@ msgid "Saving..."
msgstr ""
#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used as a normal map in 3D. Enabling red-green "
+"texture compression to reduce memory usage (blue channel is discarded)."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap "
+"generation and VRAM texture compression."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
msgid "2D, Detect 3D"
msgstr ""
@@ -7712,11 +7799,20 @@ msgid "New Anim"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+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 "Rename Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Delete Animation?"
msgstr ""
@@ -7734,11 +7830,6 @@ 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 "Duplicate Animation"
msgstr ""
@@ -7882,10 +7973,6 @@ msgid "Pin AnimationPlayer"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Create New Animation"
-msgstr ""
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Name:"
msgstr ""
@@ -9996,6 +10083,7 @@ msgid "Points"
msgstr ".تمام کا انتخاب"
#: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp
+#: scene/resources/navigation_mesh.cpp
#, fuzzy
msgid "Polygons"
msgstr "سب سکریپشن بنائیں"
@@ -11387,8 +11475,9 @@ msgid "Invalid geometry, can't replace by mesh."
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
-msgid "Convert to Mesh2D"
-msgstr ""
+#, fuzzy
+msgid "Convert to MeshInstance2D"
+msgstr ".تمام کا انتخاب"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Invalid geometry, can't create polygon."
@@ -12398,8 +12487,7 @@ msgid "Select the previous shape, subtile, or Tile."
msgstr ""
#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp
-#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp
-#: scene/resources/texture.cpp
+#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp
#, fuzzy
msgid "Region"
msgstr "ایکشن منتقل کریں"
@@ -13892,31 +13980,10 @@ 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 "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 "Export Path"
msgstr ""
@@ -14055,6 +14122,11 @@ msgid "Export templates for this platform are missing:"
msgstr ""
#: editor/project_export.cpp
+#, fuzzy
+msgid "Project Export"
+msgstr "سب سکریپشن بنائیں"
+
+#: editor/project_export.cpp
msgid "Manage Export Templates"
msgstr ""
@@ -16373,7 +16445,7 @@ msgstr ""
#: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp
#: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp
-#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp
+#: scene/3d/collision_polygon.cpp
#, fuzzy
msgid "Polygon"
msgstr "سب سکریپشن بنائیں"
@@ -16960,7 +17032,6 @@ msgid "Use In Baked Light"
msgstr ""
#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
-#: scene/resources/navigation_mesh.cpp
msgid "Cell"
msgstr ""
@@ -16990,6 +17061,19 @@ msgstr ".اینیمیشن کی کیز کو ڈیلیٹ کرو"
msgid "Mask"
msgstr ""
+#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
+#, fuzzy
+msgid "Bake Navigation"
+msgstr "سب سکریپشن بنائیں"
+
+#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp
+#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp
+#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp
+#: scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Navigation Layers"
+msgstr "سب سکریپشن بنائیں"
+
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Plane"
msgstr ""
@@ -18503,10 +18587,6 @@ 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."
@@ -18610,12 +18690,16 @@ msgstr ""
msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version."
msgstr ""
+#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Code Signing"
+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."
+"'apksigner' could not be found. Please check that the command is available "
+"in the Android SDK build-tools directory. The resulting %s is unsigned."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18631,6 +18715,10 @@ msgid "Could not find keystore, unable to export."
msgstr ""
#: platform/android/export/export_plugin.cpp
+msgid "Could not start apksigner executable."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
@@ -18659,7 +18747,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Unsupported export format!\n"
+msgid "Unsupported export format!"
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18670,20 +18758,19 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Android build version mismatch:\n"
-" Template installed: %s\n"
-" Godot Version: %s\n"
+"Android build version mismatch: Template installed: %s, Godot version: %s. "
"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"
+"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 ""
+#, fuzzy
+msgid "Could not export project files to gradle project."
+msgstr "سب سکریپشن بنائیں"
#: platform/android/export/export_plugin.cpp
msgid "Could not write expansion package file!"
@@ -18695,7 +18782,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Building of Android project failed, check output for the error.\n"
+"Building of Android project failed, check output for the error. "
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
@@ -18710,7 +18797,7 @@ msgid ""
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Package not found: %s"
+msgid "Package not found: \"%s\"."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -18718,15 +18805,13 @@ msgid "Creating APK..."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid ""
-"Could not find template APK to export:\n"
-"%s"
-msgstr ""
+#, fuzzy
+msgid "Could not find template APK to export: \"%s\"."
+msgstr "سب سکریپشن بنائیں"
#: platform/android/export/export_plugin.cpp
msgid ""
-"Missing libraries in the export template for the selected architectures: "
-"%s.\n"
+"Missing libraries in the export template for the selected architectures: %s. "
"Please build a template with all required libraries, or uncheck the missing "
"architectures in the export preset."
msgstr ""
@@ -18738,7 +18823,7 @@ msgstr ".تمام کا انتخاب"
#: platform/android/export/export_plugin.cpp
#, fuzzy
-msgid "Could not export project files"
+msgid "Could not export project files."
msgstr "سب سکریپشن بنائیں"
#: platform/android/export/export_plugin.cpp
@@ -18974,6 +19059,16 @@ msgstr "ایکشن منتقل کریں"
msgid "Custom BG Color"
msgstr "ایکشن منتقل کریں"
+#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Prepare Templates"
+msgstr ".تمام کا انتخاب"
+
+#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
+msgid "Export template not found."
+msgstr ""
+
#: platform/iphone/export/export.cpp
msgid "App Store Team ID not specified - cannot configure the project."
msgstr ""
@@ -18995,24 +19090,34 @@ msgid "Run exported HTML in the system's default browser."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not open template for export:"
+msgid "Could not open template for export: \"%s\"."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Invalid export template:"
-msgstr ""
+#, fuzzy
+msgid "Invalid export template: \"%s\"."
+msgstr ".تمام کا انتخاب"
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not write file:"
+msgid "Could not write file: \"%s\"."
msgstr "سب سکریپشن بنائیں"
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Icon Creation"
+msgstr ".تمام کا انتخاب"
+
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not read file:"
+msgid "Could not read file: \"%s\"."
msgstr "سب سکریپشن بنائیں"
#: platform/javascript/export/export.cpp
+msgid "PWA"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
#, fuzzy
msgid "Variant"
msgstr ".تمام کا انتخاب"
@@ -19088,15 +19193,15 @@ msgstr ""
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not read HTML shell:"
+msgid "Could not read HTML shell: \"%s\"."
msgstr "سب سکریپشن بنائیں"
#: platform/javascript/export/export.cpp
-msgid "Could not create HTTP server directory:"
+msgid "Could not create HTTP server directory: %s."
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Error starting HTTP server:"
+msgid "Error starting HTTP server: %d."
msgstr ""
#: platform/javascript/export/export.cpp
@@ -19380,9 +19485,28 @@ msgid "Apple Team ID"
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open icon file \"%s\"."
+msgstr "سب سکریپشن بنائیں"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start xcrun executable."
+msgstr "سب سکریپشن بنائیں"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization failed."
+msgstr "سب سکریپشن بنائیں"
+
+#: platform/osx/export/export.cpp
+msgid "Notarization request UUID: \"%s\""
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid ""
-"Note: The notarization process generally takes less than an hour. When the "
-"process is completed, you'll receive an email."
+"The notarization process generally takes less than an hour. When the process "
+"is completed, you'll receive an email."
msgstr ""
#: platform/osx/export/export.cpp
@@ -19398,18 +19522,72 @@ msgid ""
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign failed with error \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign require regex module."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Could not start codesign executable, make sure Xcode command line tools are "
+"installed."
+msgstr ""
+
+#: platform/osx/export/export.cpp platform/windows/export/export.cpp
msgid "No identity found."
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Creating app bundle"
+msgid "Cannot sign file %s."
msgstr ""
#: platform/osx/export/export.cpp
-msgid "Could not find template app to export:"
+msgid "Relative symlinks are not supported, exported \"%s\" might be broken!"
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "DMG Creation"
+msgstr "سب سکریپشن بنائیں"
+
+#: platform/osx/export/export.cpp
+msgid "Could not start hdiutil executable."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed - file exists."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Creating app bundle"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not find template app to export: \"%s\"."
+msgstr "سب سکریپشن بنائیں"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid export format."
+msgstr "سب سکریپشن بنائیں"
+
+#: platform/osx/export/export.cpp
msgid ""
"Relative symlinks are not supported on this OS, the exported project might "
"be broken!"
@@ -19417,7 +19595,7 @@ msgstr ""
#: platform/osx/export/export.cpp
msgid ""
-"Requested template binary '%s' not found. It might be missing from your "
+"Requested template binary \"%s\" not found. It might be missing from your "
"template archive."
msgstr ""
@@ -19458,6 +19636,15 @@ msgid "Sending archive for notarization"
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "ZIP Creation"
+msgstr "سب سکریپشن بنائیں"
+
+#: platform/osx/export/export.cpp
+msgid "Could not open file to read from path \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr ""
@@ -19763,6 +19950,11 @@ msgid "Debug Algorithm"
msgstr ""
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to rename temporary file \"%s\"."
+msgstr "سب سکریپشن بنائیں"
+
+#: platform/windows/export/export.cpp
msgid "Identity Type"
msgstr ""
@@ -19807,6 +19999,64 @@ msgid "Trademarks"
msgstr ""
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Resources Modification"
+msgstr "مستقل"
+
+#: platform/windows/export/export.cpp
+msgid "Could not find rcedit executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find wine executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start rcedit executable, configure rcedit path in the Editor "
+"Settings (Export > Windows > Rcedit)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"rcedit failed to modify executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find signtool executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Could not find osslsigncode executable at \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid identity type."
+msgstr "'%s' کی تعمیر کے لیے غلط دلائل"
+
+#: platform/windows/export/export.cpp
+msgid "Invalid timestamp server."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start signtool executable, configure signtool path in the Editor "
+"Settings (Export > Windows > Signtool)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Signtool failed to sign executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid "Failed to remove temporary file \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp
msgid ""
"The rcedit tool must be configured in the Editor Settings (Export > Windows "
"> Rcedit) to change the icon or app information data."
@@ -19825,6 +20075,22 @@ msgid "Invalid product version:"
msgstr ""
#: platform/windows/export/export.cpp
+msgid "Windows executables cannot be >= 4 GiB."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Failed to open executable file \"%s\"."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable file header corrupted."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable \"pck\" section not found."
+msgstr ""
+
+#: platform/windows/export/export.cpp
msgid "Windows"
msgstr ""
@@ -19840,6 +20106,10 @@ msgstr ""
msgid "Wine"
msgstr ""
+#: platform/x11/export/export.cpp
+msgid "32-bit executables cannot have embedded data >= 4 GiB."
+msgstr ""
+
#: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp
#: scene/resources/texture.cpp
#, fuzzy
@@ -19954,7 +20224,8 @@ msgstr ""
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/3d/light.cpp scene/3d/reflection_probe.cpp
-#: scene/3d/visual_instance.cpp scene/resources/material.cpp
+#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp
+#: scene/resources/material.cpp
msgid "Max Distance"
msgstr ""
@@ -20692,6 +20963,18 @@ msgstr ""
msgid "Edge Connection Margin"
msgstr ".تمام کا انتخاب"
+#: scene/2d/navigation_2d.cpp
+msgid ""
+"'Navigation2D' node and 'Navigation2D.get_simple_path()' are deprecated and "
+"will be removed in a future version. Use 'Navigation2DServer.map_get_path()' "
+"instead."
+msgstr ""
+
+#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
+#, fuzzy
+msgid "Path Desired Distance"
+msgstr "ایک مینو منظر چنیں"
+
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
msgid "Target Desired Distance"
msgstr ""
@@ -20743,13 +21026,16 @@ msgid ""
msgstr ""
#: scene/2d/navigation_polygon.cpp
-msgid ""
-"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
-"node. It only provides navigation data."
+msgid "Navpoly"
msgstr ""
-#: scene/2d/navigation_polygon.cpp
-msgid "Navpoly"
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Enter Cost"
+msgstr ".اینیمیشن کی کیز کو ڈیلیٹ کرو"
+
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+msgid "Travel Cost"
msgstr ""
#: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp
@@ -21840,6 +22126,13 @@ msgstr ""
msgid "Transform Normals"
msgstr "سب سکریپشن بنائیں"
+#: scene/3d/navigation.cpp
+msgid ""
+"'Navigation' node and 'Navigation.get_simple_path()' are deprecated and will "
+"be removed in a future version. Use 'NavigationServer.map_get_path()' "
+"instead."
+msgstr ""
+
#: scene/3d/navigation.cpp scene/resources/curve.cpp
msgid "Up Vector"
msgstr ""
@@ -21861,12 +22154,6 @@ msgid ""
"The NavigationAgent can be used only under a Spatial inheriting parent node."
msgstr ""
-#: scene/3d/navigation_mesh_instance.cpp
-msgid ""
-"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
-"It only provides navigation data."
-msgstr ""
-
#: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp
msgid "NavMesh"
msgstr ""
@@ -24350,6 +24637,16 @@ msgid "3D Physics"
msgstr ""
#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "2D Navigation"
+msgstr "سب سکریپشن بنائیں"
+
+#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "3D Navigation"
+msgstr "سب سکریپشن بنائیں"
+
+#: scene/register_scene_types.cpp
msgid "Use hiDPI"
msgstr ""
@@ -25703,7 +26000,7 @@ msgstr ""
msgid "Refraction"
msgstr ".تمام کا انتخاب"
-#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp
+#: scene/resources/material.cpp
msgid "Detail"
msgstr ""
@@ -25781,7 +26078,12 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
-msgid "Sample Partition Type"
+msgid "Sampling"
+msgstr "ایکشن منتقل کریں"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Partition Type"
msgstr ".Ù†ÙˆÙ¹ÙØ¦Ø± Ú©Û’ اکسٹنٹ Ú©Ùˆ تبدیل کیجیۓ"
#: scene/resources/navigation_mesh.cpp
@@ -25797,10 +26099,15 @@ msgid "Source Group Name"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Agent"
+msgid "Cells"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Agents"
+msgstr "سب سکریپشن بنائیں"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Max Climb"
msgstr ""
@@ -25809,11 +26116,16 @@ msgid "Max Slope"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Regions"
+msgstr "ایکشن منتقل کریں"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Merge Size"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Edge"
+msgid "Edges"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -25825,6 +26137,11 @@ msgid "Verts Per Poly"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Details"
+msgstr ".Ù†ÙˆÙ¹ÙØ¦Ø± Ú©Û’ اکسٹنٹ Ú©Ùˆ تبدیل کیجیۓ"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Sample Distance"
msgstr ""
@@ -25842,9 +26159,18 @@ msgid "Ledge Spans"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Filter Walkable Low Height Spans"
+msgid "Walkable Low Height Spans"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
+msgid "Baking AABB"
msgstr ""
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB Offset"
+msgstr ".تمام کا انتخاب"
+
#: scene/resources/occluder_shape.cpp
msgid "Spheres"
msgstr ""
@@ -26233,6 +26559,11 @@ msgid "Scenario"
msgstr ""
#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Navigation Map"
+msgstr "سب سکریپشن بنائیں"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
msgid "Direct Space State"
msgstr ""
@@ -26249,6 +26580,26 @@ msgstr ".Ù†ÙˆÙ¹ÙØ¦Ø± Ú©Û’ اکسٹنٹ Ú©Ùˆ تبدیل کیجیۓ"
msgid "Default Angular Damp"
msgstr ""
+#: scene/resources/world.cpp
+#, fuzzy
+msgid "Default Map Up"
+msgstr ".Ù†ÙˆÙ¹ÙØ¦Ø± Ú©Û’ اکسٹنٹ Ú©Ùˆ تبدیل کیجیۓ"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Size"
+msgstr ".Ù†ÙˆÙ¹ÙØ¦Ø± Ú©Û’ اکسٹنٹ Ú©Ùˆ تبدیل کیجیۓ"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Height"
+msgstr ".Ù†ÙˆÙ¹ÙØ¦Ø± Ú©Û’ اکسٹنٹ Ú©Ùˆ تبدیل کیجیۓ"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Edge Connection Margin"
+msgstr ".تمام کا انتخاب"
+
#: scene/resources/world_2d.cpp
msgid "Canvas"
msgstr ""
diff --git a/editor/translations/vi.po b/editor/translations/vi.po
index 3fb7a375c8..2b4093cc17 100644
--- a/editor/translations/vi.po
+++ b/editor/translations/vi.po
@@ -222,9 +222,10 @@ msgid "Data"
msgstr "Dữ liệu"
#: core/io/file_access_network.cpp core/register_core_types.cpp
-#: editor/editor_settings.cpp main/main.cpp
+#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
#: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h
+#: scene/gui/file_dialog.cpp
msgid "Network"
msgstr "Mạng"
@@ -376,6 +377,16 @@ msgstr "Hàng chỠthông điệp"
msgid "Max Size (KB)"
msgstr "Kích cỡ tối đa (KB)"
+#: core/os/input.cpp
+#, fuzzy
+msgid "Mouse Mode"
+msgstr "Chế độ Di chuyển"
+
+#: core/os/input.cpp
+#, fuzzy
+msgid "Use Accumulated Input"
+msgstr "Xoá Input"
+
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: servers/audio_server.cpp
msgid "Device"
@@ -559,7 +570,8 @@ msgstr "Mô tả"
#: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
-#: main/main.cpp
+#: main/main.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp
msgid "Run"
msgstr "Chạy"
@@ -647,6 +659,11 @@ msgid "Main Run Args"
msgstr "Tham số Cảnh chính:"
#: core/project_settings.cpp
+#, fuzzy
+msgid "Scene Naming"
+msgstr "ÄÆ°á»ng dẫn Cảnh:"
+
+#: core/project_settings.cpp
msgid "Search In File Extensions"
msgstr ""
@@ -654,18 +671,15 @@ msgstr ""
msgid "Script Templates Search Path"
msgstr "ÄÆ°á»ng dẫn tìm kiếm bản mẫu kịch bản"
-#: core/project_settings.cpp editor/editor_node.cpp
-#: editor/plugins/version_control_editor_plugin.cpp
-msgid "Version Control"
-msgstr "Theo dõi phiên bản"
-
#: core/project_settings.cpp
-msgid "Autoload On Startup"
+#, fuzzy
+msgid "Version Control Autoload On Startup"
msgstr "Tự nạp khi khởi động"
#: core/project_settings.cpp
-msgid "Plugin Name"
-msgstr "Tên trình cắm"
+#, fuzzy
+msgid "Version Control Plugin Name"
+msgstr "Theo dõi phiên bản"
#: core/project_settings.cpp scene/2d/collision_object_2d.cpp
#: scene/3d/collision_object.cpp scene/gui/control.cpp
@@ -776,7 +790,8 @@ msgid "Quality"
msgstr "Chất lượng"
#: core/project_settings.cpp scene/gui/file_dialog.cpp
-#: scene/main/scene_tree.cpp servers/visual_server.cpp
+#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp
+#: servers/visual_server.cpp
msgid "Filters"
msgstr "Bá»™ lá»c"
@@ -2201,8 +2216,8 @@ msgid "Open"
msgstr "Mở"
#: editor/dependency_editor.cpp
-msgid "Owners Of:"
-msgstr "Sở hữu của:"
+msgid "Owners of: %s (Total: %d)"
+msgstr ""
#: editor/dependency_editor.cpp
#, fuzzy
@@ -2508,7 +2523,7 @@ msgid "Bus Options"
msgstr "Tùy chá»n Bus"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/scene_tree_dock.cpp
+#: editor/project_export.cpp editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "Nhân đôi"
@@ -2767,6 +2782,25 @@ msgid "Choose"
msgstr "Chá»n"
#: editor/editor_export.cpp
+msgid "Project export for platform:"
+msgstr ""
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Completed with errors."
+msgstr "Sao chép đưá»ng dẫn nút"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Completed successfully."
+msgstr "Cài đặt gói thành công!"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed."
+msgstr "Thất bại:"
+
+#: editor/editor_export.cpp
msgid "Storing File:"
msgstr "Lưu trữ tệp tin:"
@@ -2779,6 +2813,31 @@ msgid "Packing"
msgstr "Äóng gói"
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save PCK"
+msgstr "Lưu thành"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Cannot create file \"%s\"."
+msgstr "Không thể tạo folder."
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to export project files."
+msgstr "Không viết được file:"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Can't open file to read from path \"%s\"."
+msgstr "Không thể mở tệp để ghi:"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save ZIP"
+msgstr "Lưu thành"
+
+#: editor/editor_export.cpp
msgid ""
"Target platform requires 'ETC' texture compression for GLES2. Enable 'Import "
"Etc' in Project Settings."
@@ -2893,11 +2952,33 @@ msgstr "Không tìm thấy bản mẫu gỡ lỗi tuỳ chỉnh."
msgid "Custom release template not found."
msgstr "Không tìm thấy bản mẫu phát hành tùy chỉnh."
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Prepare Template"
+msgstr "Quản lý bản mẫu"
+
+#: editor/editor_export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "The given export path doesn't exist."
+msgstr "ÄÆ°á»ng dẫn xuất không tồn tại:"
+
#: editor/editor_export.cpp platform/javascript/export/export.cpp
-msgid "Template file not found:"
+#, fuzzy
+msgid "Template file not found: \"%s\"."
msgstr "Không tìm thấy tệp bản mẫu:"
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to copy export template."
+msgstr "Bản mẫu xuất không hợp lệ:"
+
+#: editor/editor_export.cpp platform/windows/export/export.cpp
+#: platform/x11/export/export.cpp
+#, fuzzy
+msgid "PCK Embedding"
+msgstr "Äệm"
+
+#: editor/editor_export.cpp
msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB."
msgstr "Ở các bản xuất 32-bit thì PCK được nhúng vào không thể lớn hơn 4 GiB."
@@ -3064,9 +3145,9 @@ msgid "Import"
msgstr "Nhập"
#: editor/editor_feature_profile.cpp editor/project_export.cpp
-#: platform/android/export/export.cpp platform/javascript/export/export.cpp
-#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
-#: platform/windows/export/export.cpp
+#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#: platform/uwp/export/export.cpp platform/windows/export/export.cpp
msgid "Export"
msgstr "Xuất ra"
@@ -4196,15 +4277,6 @@ msgid ""
"Unable to write to file '%s', file in use, locked or lacking permissions."
msgstr ""
-#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
-msgid "Scene"
-msgstr "Cảnh"
-
-#: editor/editor_node.cpp
-#, fuzzy
-msgid "Scene Naming"
-msgstr "ÄÆ°á»ng dẫn Cảnh:"
-
#: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp
#: servers/arvr/arvr_interface.cpp
msgid "Interface"
@@ -4327,6 +4399,10 @@ msgid "Default Color Picker Mode"
msgstr ""
#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
+msgid "Version Control"
+msgstr "Theo dõi phiên bản"
+
+#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
msgid "Username"
msgstr "Tên ngưá»i dùng"
@@ -4354,6 +4430,10 @@ msgstr "Bật tắt chế độ tập trung."
msgid "Add a new scene."
msgstr "Thêm cảnh mới."
+#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
+msgid "Scene"
+msgstr "Cảnh"
+
#: editor/editor_node.cpp
msgid "Go to previously opened scene."
msgstr "Trở vỠcảnh đã mở trước đó."
@@ -5117,6 +5197,11 @@ msgid ""
"as runnable."
msgstr ""
+#: editor/editor_run_native.cpp
+#, fuzzy
+msgid "Project Run"
+msgstr "Dá»± Ãn"
+
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
msgstr "Ghi logic của bạn trong hàm _run()."
@@ -5379,7 +5464,9 @@ msgid "Draw Spaces"
msgstr "Lượt gá»i"
#: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp
-#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp
+#: scene/main/scene_tree.cpp scene/resources/world.cpp
+#: scene/resources/world_2d.cpp
msgid "Navigation"
msgstr "Äiá»u hướng"
@@ -6878,7 +6965,7 @@ msgstr ""
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp
-#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp
+#: scene/gui/control.cpp
#, fuzzy
msgid "Filter"
msgstr "Lá»c:"
@@ -7172,6 +7259,18 @@ msgid "Saving..."
msgstr "Äang lưu ..."
#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used as a normal map in 3D. Enabling red-green "
+"texture compression to reduce memory usage (blue channel is discarded)."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap "
+"generation and VRAM texture compression."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
msgid "2D, Detect 3D"
msgstr ""
@@ -7854,11 +7953,20 @@ msgid "New Anim"
msgstr "Hoạt ảnh mới"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+msgstr "Tạo Hoạt ảnh mới"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Change Animation Name:"
msgstr "Äổi tên Hoạt ảnh:"
#: editor/plugins/animation_player_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Rename Animation"
+msgstr "Äổi tên hoạt hình"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Delete Animation?"
msgstr "Xoá hoạt hình?"
@@ -7876,11 +7984,6 @@ msgid "Animation name already exists!"
msgstr "Tên Hoạt ảnh đã tồn tại!"
#: editor/plugins/animation_player_editor_plugin.cpp
-#: editor/plugins/sprite_frames_editor_plugin.cpp
-msgid "Rename Animation"
-msgstr "Äổi tên hoạt hình"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate Animation"
msgstr "Nhân đôi hoạt hình"
@@ -8025,10 +8128,6 @@ msgid "Pin AnimationPlayer"
msgstr "Ghim AnimationPlayer"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Create New Animation"
-msgstr "Tạo Hoạt ảnh mới"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Name:"
msgstr "Tên hoạt hình:"
@@ -10154,6 +10253,7 @@ msgid "Points"
msgstr "Các Äiểm"
#: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp
+#: scene/resources/navigation_mesh.cpp
msgid "Polygons"
msgstr "Äa giác"
@@ -11566,7 +11666,8 @@ msgid "Invalid geometry, can't replace by mesh."
msgstr "Hình không hợp lệ, không thể thay thế bằng lưới."
#: editor/plugins/sprite_editor_plugin.cpp
-msgid "Convert to Mesh2D"
+#, fuzzy
+msgid "Convert to MeshInstance2D"
msgstr "Chuyển thành Mesh2D"
#: editor/plugins/sprite_editor_plugin.cpp
@@ -12619,8 +12720,7 @@ msgid "Select the previous shape, subtile, or Tile."
msgstr ""
#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp
-#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp
-#: scene/resources/texture.cpp
+#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp
msgid "Region"
msgstr "Khu vá»±c"
@@ -14113,36 +14213,10 @@ 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 ""
-"Không thể xuất dá»± án cho ná»n tảng '%s'.\n"
-"Bản mẫu xuất dưá»ng như bị thiếu hoặc không hợp lệ."
-
-#: 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 ""
-"Không thể xuất dá»± án cho ná»n tảng '%s'.\n"
-"Có thể là do vấn đỠcấu hình trong cài đặt xuất bản hoặc cài đặt xuất bản "
-"của bạn."
-
-#: editor/project_export.cpp
msgid "Exporting All"
msgstr "Äang xuất tất cả"
#: editor/project_export.cpp
-msgid "The given export path doesn't exist:"
-msgstr "ÄÆ°á»ng dẫn xuất không tồn tại:"
-
-#: editor/project_export.cpp
-msgid "Export templates for this platform are missing/corrupted:"
-msgstr "Các bản mẫu xuất cho ná»n tảng này bị thiếu/há»ng:"
-
-#: editor/project_export.cpp
msgid "Export Path"
msgstr "ÄÆ°á»ng dẫn xuất"
@@ -14288,6 +14362,11 @@ msgid "Export templates for this platform are missing:"
msgstr "Các mẫu xuất bản cho ná»n tảng này bị thiếu:"
#: editor/project_export.cpp
+#, fuzzy
+msgid "Project Export"
+msgstr "Các đồng sáng lập dự án"
+
+#: editor/project_export.cpp
msgid "Manage Export Templates"
msgstr "Quản lí bản mẫu xuất"
@@ -16714,7 +16793,7 @@ msgstr ""
#: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp
#: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp
-#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp
+#: scene/3d/collision_polygon.cpp
#, fuzzy
msgid "Polygon"
msgstr "Äa giác"
@@ -17333,7 +17412,6 @@ msgid "Use In Baked Light"
msgstr "Ãnh sáng"
#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
-#: scene/resources/navigation_mesh.cpp
msgid "Cell"
msgstr ""
@@ -17363,6 +17441,19 @@ msgstr "Giữa"
msgid "Mask"
msgstr ""
+#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
+#, fuzzy
+msgid "Bake Navigation"
+msgstr "Äiá»u hướng"
+
+#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp
+#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp
+#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp
+#: scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Navigation Layers"
+msgstr "Chế độ di chuyển"
+
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Plane"
msgstr "Mặt phẳng tiếp theo"
@@ -18921,10 +19012,6 @@ msgid "Could not execute on device."
msgstr "Không thể tạo folder."
#: platform/android/export/export_plugin.cpp
-msgid "Unable to find the 'apksigner' tool."
-msgstr "Không tìm thấy công cụ 'apksigner'."
-
-#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -19042,12 +19129,16 @@ msgstr ""
msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version."
msgstr ""
+#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Code Signing"
+msgstr "Tín hiệu"
+
#: 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."
+"'apksigner' could not be found. Please check that the command is available "
+"in the Android SDK build-tools directory. The resulting %s is unsigned."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -19067,6 +19158,11 @@ msgid "Could not find keystore, unable to export."
msgstr "Không thể mở bản mẫu để xuất:"
#: platform/android/export/export_plugin.cpp
+#, fuzzy
+msgid "Could not start apksigner executable."
+msgstr "Không thể bắt đầu quá trình phụ!"
+
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
@@ -19097,7 +19193,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr "Tên tệp không hợp lệ! Android APK cần đuôi *.apk ở cuối."
#: platform/android/export/export_plugin.cpp
-msgid "Unsupported export format!\n"
+msgid "Unsupported export format!"
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -19109,10 +19205,9 @@ msgstr ""
"phiên bản nào tồn tại. Vui lòng cài đặt lại từ bảng chá»n'Dá»± án'."
#: platform/android/export/export_plugin.cpp
+#, fuzzy
msgid ""
-"Android build version mismatch:\n"
-" Template installed: %s\n"
-" Godot Version: %s\n"
+"Android build version mismatch: Template installed: %s, Godot version: %s. "
"Please reinstall Android build template from 'Project' menu."
msgstr ""
"Phiên bản dựng Android không khớp:\n"
@@ -19122,12 +19217,12 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Unable to overwrite res://android/build/res/*.xml files with project name"
+"Unable to overwrite res://android/build/res/*.xml files with project name."
msgstr ""
#: platform/android/export/export_plugin.cpp
#, fuzzy
-msgid "Could not export project files to gradle project\n"
+msgid "Could not export project files to gradle project."
msgstr "Không thể chỉnh sá»­a 'project.godot' trong đưá»ng dẫn dá»± án."
#: platform/android/export/export_plugin.cpp
@@ -19140,8 +19235,9 @@ msgid "Building Android Project (gradle)"
msgstr "Äang dá»±ng dá»± án Android (gradle)"
#: platform/android/export/export_plugin.cpp
+#, fuzzy
msgid ""
-"Building of Android project failed, check output for the error.\n"
+"Building of Android project failed, check output for the error. "
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
"Xây dựng dự án Android thất bại, hãy kiểm tra đầu ra để biết lỗi.\n"
@@ -19161,7 +19257,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
#, fuzzy
-msgid "Package not found: %s"
+msgid "Package not found: \"%s\"."
msgstr "Không tìm thấy Animation: '%s'"
#: platform/android/export/export_plugin.cpp
@@ -19170,15 +19266,14 @@ msgid "Creating APK..."
msgstr "Tạo đưá»ng viá»n ..."
#: platform/android/export/export_plugin.cpp
-msgid ""
-"Could not find template APK to export:\n"
-"%s"
+#, fuzzy
+msgid "Could not find template APK to export: \"%s\"."
msgstr "Không thể tìm APK bản mẫu để xuất:"
#: platform/android/export/export_plugin.cpp
+#, fuzzy
msgid ""
-"Missing libraries in the export template for the selected architectures: "
-"%s.\n"
+"Missing libraries in the export template for the selected architectures: %s. "
"Please build a template with all required libraries, or uncheck the missing "
"architectures in the export preset."
msgstr ""
@@ -19193,7 +19288,7 @@ msgstr "Äang thêm %s..."
#: platform/android/export/export_plugin.cpp
#, fuzzy
-msgid "Could not export project files"
+msgid "Could not export project files."
msgstr "Không viết được file:"
#: platform/android/export/export_plugin.cpp
@@ -19435,6 +19530,17 @@ msgstr "Cắt các nút"
msgid "Custom BG Color"
msgstr "Cắt các nút"
+#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Prepare Templates"
+msgstr "Quản lý bản mẫu"
+
+#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Export template not found."
+msgstr "Không tìm thấy bản mẫu phát hành tùy chỉnh."
+
#: platform/iphone/export/export.cpp
msgid "App Store Team ID not specified - cannot configure the project."
msgstr "App Store Team ID không được chỉ định - không thể cấu hình dự án."
@@ -19456,23 +19562,35 @@ msgid "Run exported HTML in the system's default browser."
msgstr "Chạy HTML được xuất với trình duyệt mặc định của máy."
#: platform/javascript/export/export.cpp
-msgid "Could not open template for export:"
+#, fuzzy
+msgid "Could not open template for export: \"%s\"."
msgstr "Không thể mở bản mẫu để xuất:"
#: platform/javascript/export/export.cpp
-msgid "Invalid export template:"
+#, fuzzy
+msgid "Invalid export template: \"%s\"."
msgstr "Bản mẫu xuất không hợp lệ:"
#: platform/javascript/export/export.cpp
-msgid "Could not write file:"
+#, fuzzy
+msgid "Could not write file: \"%s\"."
msgstr "Không viết được file:"
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Icon Creation"
+msgstr "Äặt Lá»"
+
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not read file:"
+msgid "Could not read file: \"%s\"."
msgstr "Không viết được file:"
#: platform/javascript/export/export.cpp
+msgid "PWA"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
#, fuzzy
msgid "Variant"
msgstr "Thu phóng (theo tỉ lệ):"
@@ -19548,17 +19666,17 @@ msgstr ""
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not read HTML shell:"
+msgid "Could not read HTML shell: \"%s\"."
msgstr "Không Ä‘á»c được file hình khởi động:"
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not create HTTP server directory:"
+msgid "Could not create HTTP server directory: %s."
msgstr "Không thể tạo folder."
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Error starting HTTP server:"
+msgid "Error starting HTTP server: %d."
msgstr "Lỗi khi lưu scene."
#: platform/javascript/export/export.cpp
@@ -19858,9 +19976,28 @@ msgid "Apple Team ID"
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open icon file \"%s\"."
+msgstr "Không viết được file:"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start xcrun executable."
+msgstr "Không thể bắt đầu quá trình phụ!"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization failed."
+msgstr "Bản địa hoá"
+
+#: platform/osx/export/export.cpp
+msgid "Notarization request UUID: \"%s\""
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid ""
-"Note: The notarization process generally takes less than an hour. When the "
-"process is completed, you'll receive an email."
+"The notarization process generally takes less than an hour. When the process "
+"is completed, you'll receive an email."
msgstr ""
#: platform/osx/export/export.cpp
@@ -19876,29 +20013,85 @@ msgid ""
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign failed with error \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign require regex module."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Could not start codesign executable, make sure Xcode command line tools are "
+"installed."
+msgstr ""
+
+#: platform/osx/export/export.cpp platform/windows/export/export.cpp
#, fuzzy
msgid "No identity found."
msgstr "Không tìm thấy tài nguyên phụ."
#: platform/osx/export/export.cpp
#, fuzzy
+msgid "Cannot sign file %s."
+msgstr "Lỗi lưu tệp: %s"
+
+#: platform/osx/export/export.cpp
+msgid "Relative symlinks are not supported, exported \"%s\" might be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "DMG Creation"
+msgstr "Hướng đi"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start hdiutil executable."
+msgstr "Không thể bắt đầu quá trình phụ!"
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed - file exists."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
msgid "Creating app bundle"
msgstr "Tạo hình thu nhá»"
#: platform/osx/export/export.cpp
#, fuzzy
-msgid "Could not find template app to export:"
+msgid "Could not find template app to export: \"%s\"."
msgstr "Không thể mở bản mẫu để xuất:"
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid export format."
+msgstr "Bản mẫu xuất không hợp lệ:"
+
+#: platform/osx/export/export.cpp
msgid ""
"Relative symlinks are not supported on this OS, the exported project might "
"be broken!"
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
msgid ""
-"Requested template binary '%s' not found. It might be missing from your "
+"Requested template binary \"%s\" not found. It might be missing from your "
"template archive."
msgstr ""
"Không thấy tệp nhị phân bản mẫu được yêu cầu '%s'. Nó có thể bị thiếu trong "
@@ -19942,6 +20135,16 @@ msgstr ""
#: platform/osx/export/export.cpp
#, fuzzy
+msgid "ZIP Creation"
+msgstr "Dá»± Ãn"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open file to read from path \"%s\"."
+msgstr "Không thể chỉnh sá»­a 'project.godot' trong đưá»ng dẫn dá»± án."
+
+#: platform/osx/export/export.cpp
+#, fuzzy
msgid "Invalid bundle identifier:"
msgstr "Äịnh danh không hợp lệ:"
@@ -20254,6 +20457,11 @@ msgid "Debug Algorithm"
msgstr "Trình gỡ lỗi"
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to rename temporary file \"%s\"."
+msgstr "Không thể gỡ bá» tệp tạm thá»i:"
+
+#: platform/windows/export/export.cpp
msgid "Identity Type"
msgstr ""
@@ -20301,6 +20509,70 @@ msgid "Trademarks"
msgstr ""
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Resources Modification"
+msgstr "Xoay ngẫu nhiên:"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find rcedit executable at \"%s\"."
+msgstr "Không thể mở bản mẫu để xuất:"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find wine executable at \"%s\"."
+msgstr "Không thể mở bản mẫu để xuất:"
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start rcedit executable, configure rcedit path in the Editor "
+"Settings (Export > Windows > Rcedit)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"rcedit failed to modify executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find signtool executable at \"%s\"."
+msgstr "Không thể mở bản mẫu để xuất:"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find osslsigncode executable at \"%s\"."
+msgstr "Không thể mở bản mẫu để xuất:"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid identity type."
+msgstr "Äịnh danh không hợp lệ:"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid timestamp server."
+msgstr "Tên không hợp lệ."
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start signtool executable, configure signtool path in the Editor "
+"Settings (Export > Windows > Signtool)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Signtool failed to sign executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to remove temporary file \"%s\"."
+msgstr "Không thể gỡ bá» tệp tạm thá»i:"
+
+#: platform/windows/export/export.cpp
msgid ""
"The rcedit tool must be configured in the Editor Settings (Export > Windows "
"> Rcedit) to change the icon or app information data."
@@ -20322,6 +20594,23 @@ msgid "Invalid product version:"
msgstr "GUID sản phẩm không hợp lệ."
#: platform/windows/export/export.cpp
+msgid "Windows executables cannot be >= 4 GiB."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+#, fuzzy
+msgid "Failed to open executable file \"%s\"."
+msgstr "Tên đuôi không hợp lệ."
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable file header corrupted."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable \"pck\" section not found."
+msgstr ""
+
+#: platform/windows/export/export.cpp
#, fuzzy
msgid "Windows"
msgstr "Cửa sổ mới"
@@ -20338,6 +20627,10 @@ msgstr ""
msgid "Wine"
msgstr ""
+#: platform/x11/export/export.cpp
+msgid "32-bit executables cannot have embedded data >= 4 GiB."
+msgstr ""
+
#: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp
#: scene/resources/texture.cpp
#, fuzzy
@@ -20465,7 +20758,8 @@ msgstr ""
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/3d/light.cpp scene/3d/reflection_probe.cpp
-#: scene/3d/visual_instance.cpp scene/resources/material.cpp
+#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp
+#: scene/resources/material.cpp
#, fuzzy
msgid "Max Distance"
msgstr "Thêm vào Cảnh"
@@ -21265,6 +21559,18 @@ msgstr ""
msgid "Edge Connection Margin"
msgstr "Chỉnh sửa kết nối:"
+#: scene/2d/navigation_2d.cpp
+msgid ""
+"'Navigation2D' node and 'Navigation2D.get_simple_path()' are deprecated and "
+"will be removed in a future version. Use 'Navigation2DServer.map_get_path()' "
+"instead."
+msgstr ""
+
+#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
+#, fuzzy
+msgid "Path Desired Distance"
+msgstr "Chá»n ô"
+
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
msgid "Target Desired Distance"
msgstr ""
@@ -21321,17 +21627,19 @@ msgstr ""
"chạy được. Vui lòng đặt thuộc tính hoặc vẽ một đa giác."
#: scene/2d/navigation_polygon.cpp
-msgid ""
-"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
-"node. It only provides navigation data."
-msgstr ""
-"NavigationPolygonInstance phải là nút con hoặc cháu của nút Navigation2D. Nó "
-"chỉ cung cấp dữ liệu Ä‘iá»u hướng."
-
-#: scene/2d/navigation_polygon.cpp
msgid "Navpoly"
msgstr ""
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Enter Cost"
+msgstr "Dưới giữa"
+
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Travel Cost"
+msgstr "Di chuyển"
+
#: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp
#: scene/main/canvas_layer.cpp
#, fuzzy
@@ -22523,6 +22831,13 @@ msgstr ""
msgid "Transform Normals"
msgstr "Hủy Biến đổi."
+#: scene/3d/navigation.cpp
+msgid ""
+"'Navigation' node and 'Navigation.get_simple_path()' are deprecated and will "
+"be removed in a future version. Use 'NavigationServer.map_get_path()' "
+"instead."
+msgstr ""
+
#: scene/3d/navigation.cpp scene/resources/curve.cpp
#, fuzzy
msgid "Up Vector"
@@ -22547,14 +22862,6 @@ msgid ""
"The NavigationAgent can be used only under a Spatial inheriting parent node."
msgstr ""
-#: scene/3d/navigation_mesh_instance.cpp
-msgid ""
-"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
-"It only provides navigation data."
-msgstr ""
-"NavigationMeshInstance phải là nút con hoặc cháu một nút Navigation. Nó chỉ "
-"cung cấp dữ liệu Ä‘iá»u hướng."
-
#: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp
#, fuzzy
msgid "NavMesh"
@@ -25222,6 +25529,16 @@ msgid "3D Physics"
msgstr "Vật lí"
#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "2D Navigation"
+msgstr "Äiá»u hướng"
+
+#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "3D Navigation"
+msgstr "Äiá»u hướng"
+
+#: scene/register_scene_types.cpp
msgid "Use hiDPI"
msgstr ""
@@ -26639,7 +26956,7 @@ msgstr "Chuyển tiếp: "
msgid "Refraction"
msgstr "Thu phóng (theo tỉ lệ):"
-#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp
+#: scene/resources/material.cpp
msgid "Detail"
msgstr ""
@@ -26722,7 +27039,12 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
-msgid "Sample Partition Type"
+msgid "Sampling"
+msgstr "Tỷ lệ:"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Partition Type"
msgstr "Äặt loại biến"
#: scene/resources/navigation_mesh.cpp
@@ -26739,10 +27061,15 @@ msgid "Source Group Name"
msgstr "Nguồn"
#: scene/resources/navigation_mesh.cpp
-msgid "Agent"
+msgid "Cells"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Agents"
+msgstr "Tham số Cảnh chính:"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Max Climb"
msgstr ""
@@ -26752,11 +27079,16 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
+msgid "Regions"
+msgstr "Khu vá»±c"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
msgid "Merge Size"
msgstr "Gộp từ Scene"
#: scene/resources/navigation_mesh.cpp
-msgid "Edge"
+msgid "Edges"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -26769,6 +27101,11 @@ msgid "Verts Per Poly"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Details"
+msgstr "Nạp mặc định"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Sample Distance"
msgstr ""
@@ -26785,9 +27122,19 @@ msgid "Ledge Spans"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Filter Walkable Low Height Spans"
+msgid "Walkable Low Height Spans"
msgstr ""
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB"
+msgstr "Äang sinh AABB"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB Offset"
+msgstr "Äá»™ dá»i:"
+
#: scene/resources/occluder_shape.cpp
msgid "Spheres"
msgstr ""
@@ -27199,6 +27546,11 @@ msgid "Scenario"
msgstr "Cảnh"
#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Navigation Map"
+msgstr "Äiá»u hướng"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
msgid "Direct Space State"
msgstr ""
@@ -27216,6 +27568,26 @@ msgstr "Tịnh tuyến trái"
msgid "Default Angular Damp"
msgstr ""
+#: scene/resources/world.cpp
+#, fuzzy
+msgid "Default Map Up"
+msgstr "Mặc định"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Size"
+msgstr "Cập nhật bản xem trước"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Height"
+msgstr "Kiểm tra"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Edge Connection Margin"
+msgstr "Chỉnh sửa kết nối:"
+
#: scene/resources/world_2d.cpp
msgid "Canvas"
msgstr ""
diff --git a/editor/translations/zh_CN.po b/editor/translations/zh_CN.po
index 493d0dad63..4a15f6acf3 100644
--- a/editor/translations/zh_CN.po
+++ b/editor/translations/zh_CN.po
@@ -89,7 +89,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: 2022-06-01 10:42+0000\n"
+"PO-Revision-Date: 2022-06-20 06:44+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"
@@ -98,7 +98,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.13-dev\n"
+"X-Generator: Weblate 4.13.1-dev\n"
#: core/bind/core_bind.cpp main/main.cpp
msgid "Tablet Driver"
@@ -282,9 +282,10 @@ msgid "Data"
msgstr "æ•°æ®"
#: core/io/file_access_network.cpp core/register_core_types.cpp
-#: editor/editor_settings.cpp main/main.cpp
+#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
#: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h
+#: scene/gui/file_dialog.cpp
msgid "Network"
msgstr "网络"
@@ -388,9 +389,8 @@ msgid "Not enough bytes for decoding bytes, or invalid format."
msgstr "è§£ç å­—节数ä¸å¤Ÿï¼Œæˆ–æ ¼å¼æ— æ•ˆã€‚"
#: core/math/expression.cpp
-#, fuzzy
msgid "Invalid input %d (not passed) in expression"
-msgstr "表达å¼çš„输入 %i 无效(未传递)"
+msgstr "表达å¼çš„输入 %d 无效(未传递)"
#: core/math/expression.cpp
msgid "self can't be used because instance is null (not passed)"
@@ -433,6 +433,14 @@ msgstr "消æ¯é˜Ÿåˆ—"
msgid "Max Size (KB)"
msgstr "最大大å°ï¼ˆKB)"
+#: core/os/input.cpp
+msgid "Mouse Mode"
+msgstr "鼠标模å¼"
+
+#: core/os/input.cpp
+msgid "Use Accumulated Input"
+msgstr "使用累积输入"
+
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: servers/audio_server.cpp
msgid "Device"
@@ -612,7 +620,8 @@ msgstr "æè¿°"
#: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
-#: main/main.cpp
+#: main/main.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp
msgid "Run"
msgstr "è¿è¡Œ"
@@ -695,6 +704,10 @@ msgid "Main Run Args"
msgstr "主è¿è¡Œå‚æ•°"
#: core/project_settings.cpp
+msgid "Scene Naming"
+msgstr "场景命å"
+
+#: core/project_settings.cpp
msgid "Search In File Extensions"
msgstr "æœç´¢æ–‡ä»¶æ‰©å±•å"
@@ -702,18 +715,13 @@ msgstr "æœç´¢æ–‡ä»¶æ‰©å±•å"
msgid "Script Templates Search Path"
msgstr "è„šæœ¬æ¨¡æ¿æœç´¢è·¯å¾„"
-#: core/project_settings.cpp editor/editor_node.cpp
-#: editor/plugins/version_control_editor_plugin.cpp
-msgid "Version Control"
-msgstr "版本控制"
-
#: core/project_settings.cpp
-msgid "Autoload On Startup"
-msgstr "å¯åŠ¨æ—¶è‡ªåŠ¨åŠ è½½"
+msgid "Version Control Autoload On Startup"
+msgstr "å¯åŠ¨æ—¶è‡ªåŠ¨åŠ è½½ç‰ˆæœ¬æŽ§åˆ¶"
#: core/project_settings.cpp
-msgid "Plugin Name"
-msgstr "æ’ä»¶å"
+msgid "Version Control Plugin Name"
+msgstr "版本控制æ’ä»¶å"
#: core/project_settings.cpp scene/2d/collision_object_2d.cpp
#: scene/3d/collision_object.cpp scene/gui/control.cpp
@@ -820,7 +828,8 @@ msgid "Quality"
msgstr "è´¨é‡"
#: core/project_settings.cpp scene/gui/file_dialog.cpp
-#: scene/main/scene_tree.cpp servers/visual_server.cpp
+#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp
+#: servers/visual_server.cpp
msgid "Filters"
msgstr "过滤"
@@ -1345,19 +1354,16 @@ msgid "Remove this track."
msgstr "移除该轨é“。"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Time (s):"
-msgstr "时间(秒): "
+msgstr "时间(秒):"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Position:"
-msgstr "ä½ç½®"
+msgstr "ä½ç½®ï¼š"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Rotation:"
-msgstr "旋转"
+msgstr "旋转:"
#: editor/animation_track_editor.cpp
#: editor/plugins/animation_tree_player_editor_plugin.cpp
@@ -1374,44 +1380,36 @@ msgid "Type:"
msgstr "类型:"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "(Invalid, expected type: %s)"
-msgstr "å¯¼å‡ºæ¨¡æ¿æ— æ•ˆï¼š"
+msgstr "(无效,期望类型:%s)"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Easing:"
-msgstr "缓入缓出"
+msgstr "缓动:"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "In-Handle:"
-msgstr "入点手柄"
+msgstr "入点手柄:"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Out-Handle:"
-msgstr "出点手柄"
+msgstr "出点手柄:"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Stream:"
-msgstr "æµ"
+msgstr "æµï¼š"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Start (s):"
-msgstr "釿–°å¼€å§‹ï¼ˆç§’):"
+msgstr "开始(秒):"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "End (s):"
-msgstr "淡入(秒):"
+msgstr "结æŸï¼ˆç§’):"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Animation Clip:"
-msgstr "动画:"
+msgstr "动画剪辑:"
#: editor/animation_track_editor.cpp
msgid "Toggle Track Enabled"
@@ -1624,9 +1622,8 @@ msgid "Add Method Track Key"
msgstr "添加方法轨é“帧"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Method not found in object:"
-msgstr "对象方法未找到: "
+msgstr "对象方法未找到:"
#: editor/animation_track_editor.cpp
msgid "Anim Move Keys"
@@ -2227,8 +2224,8 @@ msgid "Open"
msgstr "打开"
#: editor/dependency_editor.cpp
-msgid "Owners Of:"
-msgstr "拥有者:"
+msgid "Owners of: %s (Total: %d)"
+msgstr "%s 的所有者(总计:%d)"
#: editor/dependency_editor.cpp
msgid ""
@@ -2525,7 +2522,7 @@ msgid "Bus Options"
msgstr "总线选项"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/scene_tree_dock.cpp
+#: editor/project_export.cpp editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "创建副本"
@@ -2578,9 +2575,8 @@ msgid "There is no '%s' file."
msgstr "文件 “%s†ä¸å­˜åœ¨ã€‚"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Layout:"
-msgstr "布局"
+msgstr "布局:"
#: editor/editor_audio_buses.cpp
msgid "Invalid file, not an audio bus layout."
@@ -2782,6 +2778,22 @@ msgid "Choose"
msgstr "选择"
#: editor/editor_export.cpp
+msgid "Project export for platform:"
+msgstr "针对平å°å¯¼å‡ºé¡¹ç›®ï¼š"
+
+#: editor/editor_export.cpp
+msgid "Completed with errors."
+msgstr "已完æˆï¼Œå­˜åœ¨é”™è¯¯ã€‚"
+
+#: editor/editor_export.cpp
+msgid "Completed successfully."
+msgstr "æˆåŠŸå®Œæˆã€‚"
+
+#: editor/editor_export.cpp
+msgid "Failed."
+msgstr "失败。"
+
+#: editor/editor_export.cpp
msgid "Storing File:"
msgstr "ä¿å­˜æ–‡ä»¶ï¼š"
@@ -2794,6 +2806,26 @@ msgid "Packing"
msgstr "打包中"
#: editor/editor_export.cpp
+msgid "Save PCK"
+msgstr "ä¿å­˜ PCK"
+
+#: editor/editor_export.cpp
+msgid "Cannot create file \"%s\"."
+msgstr "无法创建文件“%sâ€ã€‚"
+
+#: editor/editor_export.cpp
+msgid "Failed to export project files."
+msgstr "导出项目文件失败。"
+
+#: editor/editor_export.cpp
+msgid "Can't open file to read from path \"%s\"."
+msgstr "无法打开ä½äºŽâ€œ%sâ€çš„æ–‡ä»¶ç”¨äºŽè¯»å–。"
+
+#: editor/editor_export.cpp
+msgid "Save ZIP"
+msgstr "ä¿å­˜ ZIP"
+
+#: editor/editor_export.cpp
msgid ""
"Target platform requires 'ETC' texture compression for GLES2. Enable 'Import "
"Etc' in Project Settings."
@@ -2902,9 +2934,26 @@ msgstr "找ä¸åˆ°è‡ªå®šä¹‰è°ƒè¯•模æ¿ã€‚"
msgid "Custom release template not found."
msgstr "找ä¸åˆ°è‡ªå®šä¹‰å‘布模æ¿ã€‚"
+#: editor/editor_export.cpp
+msgid "Prepare Template"
+msgstr "准备模æ¿"
+
+#: editor/editor_export.cpp platform/osx/export/export.cpp
+msgid "The given export path doesn't exist."
+msgstr "给定的导出路径ä¸å­˜åœ¨ã€‚"
+
#: editor/editor_export.cpp platform/javascript/export/export.cpp
-msgid "Template file not found:"
-msgstr "找ä¸åˆ°æ¨¡æ¿æ–‡ä»¶ï¼š"
+msgid "Template file not found: \"%s\"."
+msgstr "æ¨¡æ¿æ–‡ä»¶ä¸å­˜åœ¨ï¼šâ€œ%sâ€ã€‚"
+
+#: editor/editor_export.cpp
+msgid "Failed to copy export template."
+msgstr "å¤åˆ¶å¯¼å‡ºæ¨¡æ¿å¤±è´¥ã€‚"
+
+#: editor/editor_export.cpp platform/windows/export/export.cpp
+#: platform/x11/export/export.cpp
+msgid "PCK Embedding"
+msgstr "PCK 内嵌"
#: editor/editor_export.cpp
msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB."
@@ -3073,9 +3122,9 @@ msgid "Import"
msgstr "导入"
#: editor/editor_feature_profile.cpp editor/project_export.cpp
-#: platform/android/export/export.cpp platform/javascript/export/export.cpp
-#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
-#: platform/windows/export/export.cpp
+#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#: platform/uwp/export/export.cpp platform/windows/export/export.cpp
msgid "Export"
msgstr "导出"
@@ -4186,14 +4235,6 @@ msgid ""
"Unable to write to file '%s', file in use, locked or lacking permissions."
msgstr "无法写入文件“%sâ€ï¼Œæ–‡ä»¶è¢«å ç”¨ã€å·²é”å®šã€æˆ–æƒé™ä¸è¶³ã€‚"
-#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
-msgid "Scene"
-msgstr "场景"
-
-#: editor/editor_node.cpp
-msgid "Scene Naming"
-msgstr "场景命å"
-
#: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp
#: servers/arvr/arvr_interface.cpp
msgid "Interface"
@@ -4308,6 +4349,10 @@ msgid "Default Color Picker Mode"
msgstr "默认å–色器模å¼"
#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
+msgid "Version Control"
+msgstr "版本控制"
+
+#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
msgid "Username"
msgstr "用户å"
@@ -4335,6 +4380,10 @@ msgstr "切æ¢ä¸“注模å¼ã€‚"
msgid "Add a new scene."
msgstr "添加新场景。"
+#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
+msgid "Scene"
+msgstr "场景"
+
#: editor/editor_node.cpp
msgid "Go to previously opened scene."
msgstr "转到上一个打开的场景。"
@@ -5004,9 +5053,8 @@ msgid "Size:"
msgstr "大å°ï¼š"
#: editor/editor_properties_array_dict.cpp
-#, fuzzy
msgid "Page:"
-msgstr "页: "
+msgstr "页:"
#: editor/editor_properties_array_dict.cpp
#: editor/plugins/theme_editor_plugin.cpp
@@ -5099,6 +5147,10 @@ msgstr ""
"没有对应该平å°çš„坿‰§è¡Œå¯¼å‡ºé¢„设。\n"
"请在导出èœå•ä¸­æ·»åŠ å¯æ‰§è¡Œé¢„è®¾ï¼Œæˆ–å°†å·²æœ‰é¢„è®¾è®¾ä¸ºå¯æ‰§è¡Œã€‚"
+#: editor/editor_run_native.cpp
+msgid "Project Run"
+msgstr "项目è¿è¡Œ"
+
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
msgstr "在 _run() 方法中填写逻辑代ç ã€‚"
@@ -5352,7 +5404,9 @@ msgid "Draw Spaces"
msgstr "绘制空格"
#: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp
-#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp
+#: scene/main/scene_tree.cpp scene/resources/world.cpp
+#: scene/resources/world_2d.cpp
msgid "Navigation"
msgstr "导航"
@@ -6746,7 +6800,7 @@ msgstr "é‡å¤"
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp
-#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp
+#: scene/gui/control.cpp
msgid "Filter"
msgstr "过滤"
@@ -6980,9 +7034,8 @@ msgid "Generating Lightmaps"
msgstr "正在生æˆå…‰ç…§è´´å›¾"
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Generating for Mesh:"
-msgstr "正在生æˆç½‘格: "
+msgstr "正在生æˆç½‘格:"
#: editor/import/resource_importer_scene.cpp
msgid "Running Custom Script..."
@@ -7009,6 +7062,21 @@ msgid "Saving..."
msgstr "ä¿å­˜ä¸­..."
#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used as a normal map in 3D. Enabling red-green "
+"texture compression to reduce memory usage (blue channel is discarded)."
+msgstr ""
+"%s:检测到纹ç†è¢«ç”¨äºŽ 3D 法线贴图。正在å¯ç”¨çº¢ç»¿çº¹ç†åŽ‹ç¼©ï¼Œé™ä½Žå†…存使用(è“通é“"
+"被丢弃)。"
+
+#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap "
+"generation and VRAM texture compression."
+msgstr ""
+"%s:检测到纹ç†è¢«ç”¨äºŽ 3D。正在å¯ç”¨è¿‡æ»¤ã€é‡å¤ã€Mipmap 生æˆå’Œ VRAM 纹ç†åŽ‹ç¼©ã€‚"
+
+#: editor/import/resource_importer_texture.cpp
msgid "2D, Detect 3D"
msgstr "2Dã€æ£€æµ‹ 3D"
@@ -7667,11 +7735,20 @@ msgid "New Anim"
msgstr "新建动画"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+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 "Rename Animation"
+msgstr "é‡å‘½å动画"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Delete Animation?"
msgstr "是å¦åˆ é™¤åŠ¨ç”»ï¼Ÿ"
@@ -7689,11 +7766,6 @@ 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 "Duplicate Animation"
msgstr "å¤åˆ¶åŠ¨ç”»"
@@ -7836,10 +7908,6 @@ msgid "Pin AnimationPlayer"
msgstr "固定 AnimationPlayer"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Create New Animation"
-msgstr "创建新动画"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Name:"
msgstr "动画å称:"
@@ -7953,9 +8021,8 @@ msgid "Set the end animation. This is useful for sub-transitions."
msgstr "设置终点结æŸåŠ¨ç”»ã€‚é€‚ç”¨äºŽå­è¿‡æ¸¡åŠ¨ç”»ã€‚"
#: editor/plugins/animation_state_machine_editor.cpp
-#, fuzzy
msgid "Transition:"
-msgstr "过渡: "
+msgstr "过渡:"
#: editor/plugins/animation_state_machine_editor.cpp
msgid "Play Mode:"
@@ -9688,9 +9755,8 @@ msgid "Volume"
msgstr "体积"
#: editor/plugins/particles_editor_plugin.cpp
-#, fuzzy
msgid "Emission Source:"
-msgstr "å‘å°„æºï¼š "
+msgstr "å‘å°„æºï¼š"
#: editor/plugins/particles_editor_plugin.cpp
msgid "A processor material of type 'ParticlesMaterial' is required."
@@ -9921,6 +9987,7 @@ msgid "Points"
msgstr "点"
#: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp
+#: scene/resources/navigation_mesh.cpp
msgid "Polygons"
msgstr "多边形"
@@ -10772,15 +10839,13 @@ msgstr "平移"
#. TRANSLATORS: Refers to changing the scale of a node in the 3D editor.
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Scaling:"
-msgstr "缩放: "
+msgstr "缩放:"
#. TRANSLATORS: Refers to changing the position of a node in the 3D editor.
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Translating:"
-msgstr "移动: "
+msgstr "移动:"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rotating %s degrees."
@@ -11284,8 +11349,8 @@ msgid "Invalid geometry, can't replace by mesh."
msgstr "无效的几何体,无法使用网格替æ¢ã€‚"
#: editor/plugins/sprite_editor_plugin.cpp
-msgid "Convert to Mesh2D"
-msgstr "转æ¢ä¸º Mesh2D"
+msgid "Convert to MeshInstance2D"
+msgstr "转æ¢ä¸º MeshInstance2D"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Invalid geometry, can't create polygon."
@@ -11316,19 +11381,16 @@ msgid "Sprite"
msgstr "Sprite"
#: editor/plugins/sprite_editor_plugin.cpp
-#, fuzzy
msgid "Simplification:"
-msgstr "简化: "
+msgstr "简化:"
#: editor/plugins/sprite_editor_plugin.cpp
-#, fuzzy
msgid "Shrink (Pixels):"
-msgstr "收缩(åƒç´ ï¼‰ï¼š "
+msgstr "收缩(åƒç´ ï¼‰ï¼š"
#: editor/plugins/sprite_editor_plugin.cpp
-#, fuzzy
msgid "Grow (Pixels):"
-msgstr "扩展(åƒç´ ï¼‰ï¼š "
+msgstr "扩展(åƒç´ ï¼‰ï¼š"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Update Preview"
@@ -12256,8 +12318,7 @@ msgid "Select the previous shape, subtile, or Tile."
msgstr "选择上一个形状ã€å­å›¾å—ã€å›¾å—。"
#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp
-#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp
-#: scene/resources/texture.cpp
+#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp
msgid "Region"
msgstr "区域"
@@ -13713,35 +13774,10 @@ msgid "Delete preset '%s'?"
msgstr "是å¦åˆ é™¤é¢„设 “%sâ€ï¼Ÿ"
#: editor/project_export.cpp
-msgid ""
-"Failed to export the project for platform '%s'.\n"
-"Export templates seem to be missing or invalid."
-msgstr ""
-"æ— æ³•ä¸ºå¹³å° â€œ%s†导出项目。\n"
-"导出模æ¿ä¼¼ä¹Žç¼ºå¤±æˆ–无效。"
-
-#: 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 ""
-"æ— æ³•ä¸ºå¹³å° â€œ%s†导出项目。\n"
-"原因å¯èƒ½æ˜¯å¯¼å‡ºé¢„设或导出设置内的é…置有问题。"
-
-#: 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 "Export Path"
msgstr "导出路径"
@@ -13882,6 +13918,10 @@ msgid "Export templates for this platform are missing:"
msgstr "该平å°çš„导出模æ¿ç¼ºå¤±ï¼š"
#: editor/project_export.cpp
+msgid "Project Export"
+msgstr "项目导出"
+
+#: editor/project_export.cpp
msgid "Manage Export Templates"
msgstr "管ç†å¯¼å‡ºæ¨¡æ¿"
@@ -15382,9 +15422,8 @@ msgid "Attach Node Script"
msgstr "设置节点的脚本"
#: editor/script_editor_debugger.cpp
-#, fuzzy
msgid "Remote %s:"
-msgstr "远程 "
+msgstr "远程 %s:"
#: editor/script_editor_debugger.cpp
msgid "Bytes:"
@@ -16199,7 +16238,7 @@ msgstr "环边数"
#: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp
#: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp
-#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp
+#: scene/3d/collision_polygon.cpp
msgid "Polygon"
msgstr "多边形"
@@ -16359,9 +16398,8 @@ msgid "Disabled GDNative Singleton"
msgstr "ç¦ç”¨çš„ GDNative å•例"
#: modules/gdnative/gdnative_library_singleton_editor.cpp
-#, fuzzy
msgid "Libraries:"
-msgstr "库: "
+msgstr "库:"
#: modules/gdnative/nativescript/nativescript.cpp
msgid "Class Name"
@@ -16754,7 +16792,6 @@ msgid "Use In Baked Light"
msgstr "用于烘焙光照"
#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
-#: scene/resources/navigation_mesh.cpp
msgid "Cell"
msgstr "å•元格"
@@ -16780,6 +16817,17 @@ msgstr "Z 轴居中"
msgid "Mask"
msgstr "é®ç½©"
+#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
+msgid "Bake Navigation"
+msgstr "烘焙导航"
+
+#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp
+#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp
+#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp
+#: scene/3d/navigation_mesh_instance.cpp
+msgid "Navigation Layers"
+msgstr "导航层"
+
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Plane"
msgstr "下一平é¢"
@@ -17177,18 +17225,16 @@ msgid ""
msgstr "节点工作内存的第一个节点的返回值必须被赋值ï¼è¯·ä¿®æ­£èŠ‚ç‚¹ã€‚"
#: modules/visual_script/visual_script.cpp
-#, fuzzy
msgid "Node returned an invalid sequence output:"
-msgstr "节点返回了一个无效的连续输出: "
+msgstr "节点返回了一个无效的åºåˆ—输出:"
#: modules/visual_script/visual_script.cpp
msgid "Found sequence bit but not the node in the stack, report bug!"
msgstr "在éžå †æ ˆä¸­çš„节点中找到连续比特,请回报 Bugï¼"
#: modules/visual_script/visual_script.cpp
-#, fuzzy
msgid "Stack overflow with stack depth:"
-msgstr "堆栈深度溢出: "
+msgstr "堆栈深度溢出:"
#: modules/visual_script/visual_script.cpp
msgid "Visual Script"
@@ -17549,18 +17595,16 @@ msgid "for (elem) in (input):"
msgstr "对 input 中的æ¯ä¸€ä¸ª elem:"
#: modules/visual_script/visual_script_flow_control.cpp
-#, fuzzy
msgid "Input type not iterable:"
-msgstr "输入类型ä¸å¯è¿­ä»£ï¼š "
+msgstr "输入类型ä¸å¯è¿­ä»£ï¼š"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Iterator became invalid"
msgstr "迭代器失效"
#: modules/visual_script/visual_script_flow_control.cpp
-#, fuzzy
msgid "Iterator became invalid:"
-msgstr "迭代器失效: "
+msgstr "迭代器失效:"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Sequence"
@@ -17711,14 +17755,12 @@ msgid "Operator"
msgstr "æ“作符"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Invalid argument of type:"
-msgstr ": æ— æ•ˆå‚æ•°ç±»åž‹: "
+msgstr "æ— æ•ˆå‚æ•°ç±»åž‹ï¼š"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "Invalid arguments:"
-msgstr ": æ— æ•ˆå‚æ•°: "
+msgstr "æ— æ•ˆå‚æ•°ï¼š"
#: modules/visual_script/visual_script_nodes.cpp
msgid "a if cond, else b"
@@ -17729,14 +17771,12 @@ msgid "Var Name"
msgstr "å˜é‡åç§°"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "VariableGet not found in script:"
-msgstr "脚本中未找到 VariableGet: "
+msgstr "脚本中未找到 VariableGet:"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid "VariableSet not found in script:"
-msgstr "脚本中未找到 VariableSet: "
+msgstr "脚本中未找到 VariableSet:"
#: modules/visual_script/visual_script_nodes.cpp
msgid "Preload"
@@ -18217,10 +18257,6 @@ msgid "Could not execute on device."
msgstr "无法在设备上è¿è¡Œã€‚"
#: platform/android/export/export_plugin.cpp
-msgid "Unable to find the 'apksigner' tool."
-msgstr "找ä¸åˆ°â€œapksignerâ€å·¥å…·ã€‚"
-
-#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -18329,16 +18365,18 @@ msgstr "修改“Target Sdkâ€åªæœ‰åœ¨å½“å¯ç”¨â€œUse Custom Buildâ€æ—¶æ‰æœ‰æ
msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version."
msgstr "“Target Sdkâ€ç‰ˆæœ¬å¿…须大于等于“Min Sdkâ€ç‰ˆæœ¬ã€‚"
+#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp
+#: platform/windows/export/export.cpp
+msgid "Code Signing"
+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."
+"'apksigner' could not be found. Please check that the command is available "
+"in the Android SDK build-tools directory. The resulting %s is unsigned."
msgstr ""
-"无法找到“apksignerâ€ã€‚\n"
-"请检查 Android SDK çš„ build-tools ç›®å½•ä¸­æ˜¯å¦æœ‰æ­¤å‘½ä»¤ã€‚\n"
-"生æˆçš„ %s 未签å。"
+"无法找到“apksignerâ€ã€‚请检查 Android SDK çš„ build-tools ç›®å½•ä¸­æ˜¯å¦æœ‰æ­¤å‘½ä»¤ã€‚生"
+"æˆçš„ %s 未签å。"
#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
@@ -18353,6 +18391,10 @@ msgid "Could not find keystore, unable to export."
msgstr "找ä¸åˆ°å¯†é’¥åº“,无法导出。"
#: platform/android/export/export_plugin.cpp
+msgid "Could not start apksigner executable."
+msgstr "无法å¯åЍ apksigner 坿‰§è¡Œæ–‡ä»¶ã€‚"
+
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr "“apksignerâ€è¿”回错误 #%d"
@@ -18381,8 +18423,8 @@ msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr "无效文件åï¼Android APK 必须有 *.apk 扩展。"
#: platform/android/export/export_plugin.cpp
-msgid "Unsupported export format!\n"
-msgstr "䏿”¯æŒçš„导出格å¼ï¼\n"
+msgid "Unsupported export format!"
+msgstr "䏿”¯æŒçš„导出格å¼ï¼"
#: platform/android/export/export_plugin.cpp
msgid ""
@@ -18393,24 +18435,20 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Android build version mismatch:\n"
-" Template installed: %s\n"
-" Godot Version: %s\n"
+"Android build version mismatch: Template installed: %s, Godot version: %s. "
"Please reinstall Android build template from 'Project' menu."
msgstr ""
-"Android 构建版本ä¸åŒ¹é…:\n"
-" 安装的模æ¿ï¼š%s\n"
-" Godot 版本:%s\n"
-"请从“项目â€èœå•䏭釿–°å®‰è£… Android 构建模æ¿ã€‚"
+"Android 构建版本ä¸åŒ¹é…:安装的模æ¿ï¼š%s,Godot 版本:%s。请从“项目â€èœå•䏭釿–°"
+"安装 Android 构建模æ¿ã€‚"
#: platform/android/export/export_plugin.cpp
msgid ""
-"Unable to overwrite res://android/build/res/*.xml files with project name"
-msgstr "无法使用项目å称覆盖 res://android/build/res/*.xml 文件"
+"Unable to overwrite res://android/build/res/*.xml files with project name."
+msgstr "无法使用项目å称覆盖 res://android/build/res/*.xml 文件。"
#: platform/android/export/export_plugin.cpp
-msgid "Could not export project files to gradle project\n"
-msgstr "无法将项目文件导出至 gradle 项目\n"
+msgid "Could not export project files to gradle project."
+msgstr "无法将项目文件导出至 gradle 项目。"
#: platform/android/export/export_plugin.cpp
msgid "Could not write expansion package file!"
@@ -18422,11 +18460,11 @@ msgstr "构建 Android 项目 (Gradle)"
#: platform/android/export/export_plugin.cpp
msgid ""
-"Building of Android project failed, check output for the error.\n"
+"Building of Android project failed, check output for the error. "
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
-"Android 项目构建失败,请检查输出中显示的错误。\n"
-"也å¯ä»¥è®¿é—® docs.godotengine.org 查看 Android 构建文档。"
+"Android 项目构建失败,请检查输出中显示的错误。也å¯ä»¥è®¿é—® docs.godotengine."
+"org 查看 Android 构建文档。"
#: platform/android/export/export_plugin.cpp
msgid "Moving output"
@@ -18439,38 +18477,33 @@ msgid ""
msgstr "无法å¤åˆ¶ä¸Žæ›´å导出文件,请在 Gradle 项目文件夹内确认输出。"
#: platform/android/export/export_plugin.cpp
-msgid "Package not found: %s"
-msgstr "包ä¸å­˜åœ¨ï¼š%s"
+msgid "Package not found: \"%s\"."
+msgstr "包ä¸å­˜åœ¨ï¼šâ€œ%sâ€ã€‚"
#: platform/android/export/export_plugin.cpp
msgid "Creating APK..."
msgstr "正在创建 APK……"
#: platform/android/export/export_plugin.cpp
-msgid ""
-"Could not find template APK to export:\n"
-"%s"
-msgstr ""
-"找ä¸åˆ°å¯¼å‡ºæ¨¡æ¿ APK:\n"
-"%s"
+msgid "Could not find template APK to export: \"%s\"."
+msgstr "找ä¸åˆ°å¯¼å‡ºæ¨¡æ¿ APK:“%sâ€ã€‚"
#: platform/android/export/export_plugin.cpp
msgid ""
-"Missing libraries in the export template for the selected architectures: "
-"%s.\n"
+"Missing libraries in the export template for the selected architectures: %s. "
"Please build a template with all required libraries, or uncheck the missing "
"architectures in the export preset."
msgstr ""
-"导出模æ¿ç¼ºå¤±æ‰€é€‰æž¶æž„的库:%s。\n"
-"请使用全部所需的库构建模æ¿ï¼Œæˆ–è€…åœ¨å¯¼å‡ºé¢„è®¾ä¸­å–æ¶ˆå¯¹ç¼ºå¤±æž¶æž„的选择。"
+"导出模æ¿ç¼ºå¤±æ‰€é€‰æž¶æž„的库:%s。请使用全部所需的库构建模æ¿ï¼Œæˆ–者在导出预设中å–"
+"消对缺失架构的选择。"
#: platform/android/export/export_plugin.cpp
msgid "Adding files..."
msgstr "正在添加文件……"
#: platform/android/export/export_plugin.cpp
-msgid "Could not export project files"
-msgstr "无法导出项目文件"
+msgid "Could not export project files."
+msgstr "无法导出项目文件。"
#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
@@ -18693,6 +18726,15 @@ msgstr "使用自定义背景色"
msgid "Custom BG Color"
msgstr "自定义背景色"
+#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
+#: platform/osx/export/export.cpp
+msgid "Prepare Templates"
+msgstr "准备模æ¿"
+
+#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
+msgid "Export template not found."
+msgstr "找ä¸åˆ°å¯¼å‡ºæ¨¡æ¿ã€‚"
+
#: platform/iphone/export/export.cpp
msgid "App Store Team ID not specified - cannot configure the project."
msgstr "未指定 App Store Team ID - 无法é…置项目。"
@@ -18714,20 +18756,28 @@ msgid "Run exported HTML in the system's default browser."
msgstr "使用默认æµè§ˆå™¨æ‰“开导出的 HTML 文件。"
#: platform/javascript/export/export.cpp
-msgid "Could not open template for export:"
-msgstr "无法打开导出模æ¿ï¼š"
+msgid "Could not open template for export: \"%s\"."
+msgstr "无法打开导出模æ¿ï¼šâ€œ%sâ€ã€‚"
#: platform/javascript/export/export.cpp
-msgid "Invalid export template:"
-msgstr "å¯¼å‡ºæ¨¡æ¿æ— æ•ˆï¼š"
+msgid "Invalid export template: \"%s\"."
+msgstr "å¯¼å‡ºæ¨¡æ¿æ— æ•ˆï¼šâ€œ%sâ€ã€‚"
+
+#: platform/javascript/export/export.cpp
+msgid "Could not write file: \"%s\"."
+msgstr "无法写入文件:“%sâ€ã€‚"
+
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+msgid "Icon Creation"
+msgstr "图标创建"
#: platform/javascript/export/export.cpp
-msgid "Could not write file:"
-msgstr "无法写入文件:"
+msgid "Could not read file: \"%s\"."
+msgstr "æ— æ³•è¯»å–æ–‡ä»¶ï¼šâ€œ%sâ€ã€‚"
#: platform/javascript/export/export.cpp
-msgid "Could not read file:"
-msgstr "æ— æ³•è¯»å–æ–‡ä»¶ï¼š"
+msgid "PWA"
+msgstr "PWA"
#: platform/javascript/export/export.cpp
msgid "Variant"
@@ -18798,16 +18848,16 @@ msgid "Icon 512 X 512"
msgstr "图标 512×512"
#: platform/javascript/export/export.cpp
-msgid "Could not read HTML shell:"
-msgstr "æ— æ³•è¯»å– HTML 壳:"
+msgid "Could not read HTML shell: \"%s\"."
+msgstr "æ— æ³•è¯»å– HTML 壳:“%sâ€ã€‚"
#: platform/javascript/export/export.cpp
-msgid "Could not create HTTP server directory:"
-msgstr "无法创建 HTTP æœåŠ¡å™¨ç›®å½•ï¼š"
+msgid "Could not create HTTP server directory: %s."
+msgstr "无法创建 HTTP æœåŠ¡å™¨ç›®å½•ï¼š%s。"
#: platform/javascript/export/export.cpp
-msgid "Error starting HTTP server:"
-msgstr "å¯åЍ HTTP æœåŠ¡å™¨æ—¶å‡ºé”™ï¼š"
+msgid "Error starting HTTP server: %d."
+msgstr "å¯åЍ HTTP æœåŠ¡å™¨æ—¶å‡ºé”™ï¼š%d。"
#: platform/javascript/export/export.cpp
msgid "Web"
@@ -19071,10 +19121,26 @@ msgid "Apple Team ID"
msgstr "Apple 团队 ID"
#: platform/osx/export/export.cpp
+msgid "Could not open icon file \"%s\"."
+msgstr "无法打开图标文件“%sâ€ã€‚"
+
+#: platform/osx/export/export.cpp
+msgid "Could not start xcrun executable."
+msgstr "无法å¯åЍ xcrun 坿‰§è¡Œæ–‡ä»¶ã€‚"
+
+#: platform/osx/export/export.cpp
+msgid "Notarization failed."
+msgstr "å…¬è¯å¤±è´¥ã€‚"
+
+#: platform/osx/export/export.cpp
+msgid "Notarization request UUID: \"%s\""
+msgstr "å…¬è¯è¯·æ±‚ UUID:“%sâ€"
+
+#: platform/osx/export/export.cpp
msgid ""
-"Note: The notarization process generally takes less than an hour. When the "
-"process is completed, you'll receive an email."
-msgstr "注æ„:公è¯è¿‡ç¨‹é€šå¸¸å°‘äºŽä¸€ä¸ªå°æ—¶ã€‚过程结æŸåŽï¼Œä½ ä¼šæ”¶åˆ°ä¸€å°é‚®ä»¶ã€‚"
+"The notarization process generally takes less than an hour. When the process "
+"is completed, you'll receive an email."
+msgstr "å…¬è¯è¿‡ç¨‹é€šå¸¸å°‘äºŽä¸€ä¸ªå°æ—¶ã€‚过程结æŸåŽï¼Œä½ ä¼šæ”¶åˆ°ä¸€å°é‚®ä»¶ã€‚"
#: platform/osx/export/export.cpp
msgid ""
@@ -19089,16 +19155,67 @@ msgid ""
msgstr "è¿è¡Œä»¥ä¸‹å‘½ä»¤å°†å…¬è¯ç¥¨è¯è£…订到导出的应用中(å¯é€‰ï¼‰ï¼š"
#: platform/osx/export/export.cpp
+msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!"
+msgstr "添加时间戳与 Ad-hoc ç­¾åä¸å…¼å®¹ï¼Œå·²è¢«ç¦ç”¨ï¼"
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!"
+msgstr "加固è¿è¡Œæ—¶çŽ¯å¢ƒä¸Ž Ad-hoc ç­¾åä¸å…¼å®¹ï¼Œå·²è¢«ç¦ç”¨ï¼"
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign failed with error \"%s\"."
+msgstr "内置 CodeSign 失败,错误为“%sâ€ã€‚"
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign require regex module."
+msgstr "内置 CodeSign éœ€è¦ regex 模å—。"
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Could not start codesign executable, make sure Xcode command line tools are "
+"installed."
+msgstr "无法å¯åЍ codesign 坿‰§è¡Œæ–‡ä»¶ï¼Œè¯·ç¡®ä¿å·²å®‰è£… Xcode 命令行工具。"
+
+#: platform/osx/export/export.cpp platform/windows/export/export.cpp
msgid "No identity found."
msgstr "没有找到身份。"
#: platform/osx/export/export.cpp
+msgid "Cannot sign file %s."
+msgstr "æ— æ³•ç­¾åæ–‡ä»¶ %s。"
+
+#: platform/osx/export/export.cpp
+msgid "Relative symlinks are not supported, exported \"%s\" might be broken!"
+msgstr "䏿”¯æŒç›¸å¯¹ç¬¦å·é“¾æŽ¥ï¼Œå¯¼å‡ºçš„“%sâ€å¯èƒ½æŸåï¼"
+
+#: platform/osx/export/export.cpp
+msgid "DMG Creation"
+msgstr "DMG 创建"
+
+#: platform/osx/export/export.cpp
+msgid "Could not start hdiutil executable."
+msgstr "无法å¯åЍ hdiutil 坿‰§è¡Œæ–‡ä»¶ã€‚"
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed - file exists."
+msgstr "`hdiutil create` 失败 - 文件已存在。"
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed."
+msgstr "`hdiutil create` 失败。"
+
+#: platform/osx/export/export.cpp
msgid "Creating app bundle"
msgstr "正在创建应用æ†ç»‘包"
#: platform/osx/export/export.cpp
-msgid "Could not find template app to export:"
-msgstr "无法找到导出的模æ¿åº”用:"
+msgid "Could not find template app to export: \"%s\"."
+msgstr "无法找到导出的模æ¿åº”用:“%sâ€ã€‚"
+
+#: platform/osx/export/export.cpp
+msgid "Invalid export format."
+msgstr "å¯¼å‡ºæ ¼å¼æ— æ•ˆã€‚"
#: platform/osx/export/export.cpp
msgid ""
@@ -19108,9 +19225,9 @@ msgstr "该æ“ä½œç³»ç»Ÿä¸Šä¸æ”¯æŒç›¸å¯¹ç¬¦å·é“¾æŽ¥ï¼Œå¯¼å‡ºçš„项目å¯èƒ½æŸ
#: platform/osx/export/export.cpp
msgid ""
-"Requested template binary '%s' not found. It might be missing from your "
+"Requested template binary \"%s\" not found. It might be missing from your "
"template archive."
-msgstr "未找到请求的二进制模æ¿â€œ%sâ€ã€‚你的模æ¿å½’档中å¯èƒ½ç¼ºå¤±è¯¥æ–‡ä»¶ã€‚"
+msgstr "未找到请求的模æ¿äºŒè¿›åˆ¶æ–‡ä»¶â€œ%sâ€ã€‚你的模æ¿å½’档中å¯èƒ½ç¼ºå¤±è¯¥æ–‡ä»¶ã€‚"
#: platform/osx/export/export.cpp
msgid "Making PKG"
@@ -19149,6 +19266,14 @@ msgid "Sending archive for notarization"
msgstr "正在å‘é€å½’档进行公è¯"
#: platform/osx/export/export.cpp
+msgid "ZIP Creation"
+msgstr "ZIP 创建"
+
+#: platform/osx/export/export.cpp
+msgid "Could not open file to read from path \"%s\"."
+msgstr "无法打开ä½äºŽâ€œ%sâ€çš„æ–‡ä»¶è¿›è¡Œè¯»å–。"
+
+#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr "无效的包标识符:"
@@ -19453,6 +19578,10 @@ msgid "Debug Algorithm"
msgstr "调试算法"
#: platform/windows/export/export.cpp
+msgid "Failed to rename temporary file \"%s\"."
+msgstr "é‡å‘½å临时文件“%sâ€å¤±è´¥ã€‚"
+
+#: platform/windows/export/export.cpp
msgid "Identity Type"
msgstr "身份类型"
@@ -19493,6 +19622,70 @@ msgid "Trademarks"
msgstr "商标"
#: platform/windows/export/export.cpp
+msgid "Resources Modification"
+msgstr "资æºä¿®æ”¹"
+
+#: platform/windows/export/export.cpp
+msgid "Could not find rcedit executable at \"%s\"."
+msgstr "无法在“%sâ€æ‰¾åˆ° rcedit 坿‰§è¡Œæ–‡ä»¶ã€‚"
+
+#: platform/windows/export/export.cpp
+msgid "Could not find wine executable at \"%s\"."
+msgstr "无法在“%sâ€æ‰¾åˆ° wine 坿‰§è¡Œæ–‡ä»¶ã€‚"
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start rcedit executable, configure rcedit path in the Editor "
+"Settings (Export > Windows > Rcedit)."
+msgstr ""
+"无法å¯åЍ rcedit 坿‰§è¡Œæ–‡ä»¶ï¼Œè¯·åœ¨ç¼–辑器设置中é…ç½® rcedit 路径(导出 > Windows "
+"> Rcedit)。"
+
+#: platform/windows/export/export.cpp
+msgid ""
+"rcedit failed to modify executable:\n"
+"%s"
+msgstr ""
+"rcedit ä¿®æ”¹å¯æ‰§è¡Œæ–‡ä»¶å¤±è´¥ï¼š\n"
+"%s"
+
+#: platform/windows/export/export.cpp
+msgid "Could not find signtool executable at \"%s\"."
+msgstr "无法在“%sâ€æ‰¾åˆ° signtool 坿‰§è¡Œæ–‡ä»¶ã€‚"
+
+#: platform/windows/export/export.cpp
+msgid "Could not find osslsigncode executable at \"%s\"."
+msgstr "无法在“%sâ€æ‰¾åˆ° osslsigncode 坿‰§è¡Œæ–‡ä»¶ã€‚"
+
+#: platform/windows/export/export.cpp
+msgid "Invalid identity type."
+msgstr "身份类型无效。"
+
+#: platform/windows/export/export.cpp
+msgid "Invalid timestamp server."
+msgstr "时间戳æœåŠ¡å™¨æ— æ•ˆã€‚"
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start signtool executable, configure signtool path in the Editor "
+"Settings (Export > Windows > Signtool)."
+msgstr ""
+"无法å¯åЍ signtool 坿‰§è¡Œæ–‡ä»¶ï¼Œè¯·åœ¨ç¼–辑器设置中é…ç½® signtool 路径(导出 > "
+"Windows > Signtool)。"
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Signtool failed to sign executable:\n"
+"%s"
+msgstr ""
+"Signtool ç­¾å坿‰§è¡Œæ–‡ä»¶å¤±è´¥ï¼š\n"
+"%s"
+
+#: platform/windows/export/export.cpp
+msgid "Failed to remove temporary file \"%s\"."
+msgstr "移除临时文件“%sâ€å¤±è´¥ã€‚"
+
+#: platform/windows/export/export.cpp
msgid ""
"The rcedit tool must be configured in the Editor Settings (Export > Windows "
"> Rcedit) to change the icon or app information data."
@@ -19513,6 +19706,22 @@ msgid "Invalid product version:"
msgstr "产å“版本无效:"
#: platform/windows/export/export.cpp
+msgid "Windows executables cannot be >= 4 GiB."
+msgstr "Windows 坿‰§è¡Œæ–‡ä»¶ä¸èƒ½ >= 4GiB。"
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Failed to open executable file \"%s\"."
+msgstr "æ‰“å¼€å¯æ‰§è¡Œæ–‡ä»¶â€œ%sâ€å¤±è´¥ã€‚"
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable file header corrupted."
+msgstr "坿‰§è¡Œæ–‡ä»¶å¤´å·²æŸå。"
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable \"pck\" section not found."
+msgstr "坿‰§è¡Œæ–‡ä»¶â€œpckâ€åŒºæœªæ‰¾åˆ°ã€‚"
+
+#: platform/windows/export/export.cpp
msgid "Windows"
msgstr "Windows"
@@ -19528,6 +19737,10 @@ msgstr "Osslsigncode"
msgid "Wine"
msgstr "Wine"
+#: platform/x11/export/export.cpp
+msgid "32-bit executables cannot have embedded data >= 4 GiB."
+msgstr "32 ä½å¯æ‰§è¡Œæ–‡ä»¶æ— æ³•内嵌 >= 4 GiB 的数æ®ã€‚"
+
#: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp
#: scene/resources/texture.cpp
msgid "Frames"
@@ -19638,7 +19851,8 @@ msgstr "æš‚åœæµ"
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/3d/light.cpp scene/3d/reflection_probe.cpp
-#: scene/3d/visual_instance.cpp scene/resources/material.cpp
+#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp
+#: scene/resources/material.cpp
msgid "Max Distance"
msgstr "最大è·ç¦»"
@@ -20347,6 +20561,18 @@ msgstr "å•元格大å°"
msgid "Edge Connection Margin"
msgstr "边界连接边è·"
+#: scene/2d/navigation_2d.cpp
+msgid ""
+"'Navigation2D' node and 'Navigation2D.get_simple_path()' are deprecated and "
+"will be removed in a future version. Use 'Navigation2DServer.map_get_path()' "
+"instead."
+msgstr ""
+
+#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
+#, fuzzy
+msgid "Path Desired Distance"
+msgstr "目标期望è·ç¦»"
+
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
msgid "Target Desired Distance"
msgstr "目标期望è·ç¦»"
@@ -20398,17 +20624,17 @@ msgstr ""
"请为此节点设置一个 NavigationPolygon 类型的资æºä½œä¸ºå½¢çŠ¶ï¼Œè¿™æ ·å®ƒæ‰èƒ½æ­£å¸¸å·¥ä½œã€‚"
#: scene/2d/navigation_polygon.cpp
-msgid ""
-"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
-"node. It only provides navigation data."
-msgstr ""
-"NavigationPolygonInstance 类型的节点必须作为 Navigation2D çš„å­èŠ‚ç‚¹æˆ–å­å­™èŠ‚ç‚¹"
-"æ‰èƒ½ä¸ºå…¶æä¾›å¯¼èˆªæ•°æ®ã€‚"
-
-#: scene/2d/navigation_polygon.cpp
msgid "Navpoly"
msgstr "导航多边形"
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+msgid "Enter Cost"
+msgstr "进入消耗"
+
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+msgid "Travel Cost"
+msgstr "移动消耗"
+
#: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp
#: scene/main/canvas_layer.cpp
msgid "Rotation Degrees"
@@ -21467,6 +21693,13 @@ msgstr "软件蒙皮"
msgid "Transform Normals"
msgstr "å˜æ¢æ³•线"
+#: scene/3d/navigation.cpp
+msgid ""
+"'Navigation' node and 'Navigation.get_simple_path()' are deprecated and will "
+"be removed in a future version. Use 'NavigationServer.map_get_path()' "
+"instead."
+msgstr ""
+
#: scene/3d/navigation.cpp scene/resources/curve.cpp
msgid "Up Vector"
msgstr "上å‘é‡"
@@ -21488,14 +21721,6 @@ msgid ""
"The NavigationAgent can be used only under a Spatial inheriting parent node."
msgstr "NavigationAgent åªèƒ½åœ¨ç»§æ‰¿ Spatial 的父节点下使用。"
-#: scene/3d/navigation_mesh_instance.cpp
-msgid ""
-"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
-"It only provides navigation data."
-msgstr ""
-"NavigationMeshInstance 类型节点必须作为 Navigation 节点的å­èŠ‚ç‚¹æˆ–å­å­™èŠ‚ç‚¹æ‰èƒ½"
-"æä¾›å¯¼èˆªæ•°æ®ã€‚"
-
#: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp
msgid "NavMesh"
msgstr "导航网格"
@@ -23886,6 +24111,14 @@ msgid "3D Physics"
msgstr "3D 物ç†"
#: scene/register_scene_types.cpp
+msgid "2D Navigation"
+msgstr "2D 导航"
+
+#: scene/register_scene_types.cpp
+msgid "3D Navigation"
+msgstr "3D 导航"
+
+#: scene/register_scene_types.cpp
msgid "Use hiDPI"
msgstr "使用 hiDPI"
@@ -25096,7 +25329,7 @@ msgstr "传递"
msgid "Refraction"
msgstr "折射"
-#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp
+#: scene/resources/material.cpp
msgid "Detail"
msgstr "细节"
@@ -25169,8 +25402,12 @@ msgid "Visible Instance Count"
msgstr "å¯è§å®žä¾‹æ•°"
#: scene/resources/navigation_mesh.cpp
-msgid "Sample Partition Type"
-msgstr "采样分区类型"
+msgid "Sampling"
+msgstr "采样"
+
+#: scene/resources/navigation_mesh.cpp
+msgid "Partition Type"
+msgstr "分区类型"
#: scene/resources/navigation_mesh.cpp
msgid "Parsed Geometry Type"
@@ -25185,7 +25422,11 @@ msgid "Source Group Name"
msgstr "æ¥æºåˆ†ç»„åç§°"
#: scene/resources/navigation_mesh.cpp
-msgid "Agent"
+msgid "Cells"
+msgstr "å•元格"
+
+#: scene/resources/navigation_mesh.cpp
+msgid "Agents"
msgstr "代ç†"
#: scene/resources/navigation_mesh.cpp
@@ -25197,11 +25438,15 @@ msgid "Max Slope"
msgstr "最大斜å¡"
#: scene/resources/navigation_mesh.cpp
+msgid "Regions"
+msgstr "地区"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Merge Size"
msgstr "åˆå¹¶å¤§å°"
#: scene/resources/navigation_mesh.cpp
-msgid "Edge"
+msgid "Edges"
msgstr "边界"
#: scene/resources/navigation_mesh.cpp
@@ -25213,6 +25458,10 @@ msgid "Verts Per Poly"
msgstr "æ¯å¤šè¾¹å½¢é¡¶ç‚¹æ•°"
#: scene/resources/navigation_mesh.cpp
+msgid "Details"
+msgstr "细节"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Sample Distance"
msgstr "采样è·ç¦»"
@@ -25229,8 +25478,18 @@ msgid "Ledge Spans"
msgstr "凸å°èŒƒå›´"
#: scene/resources/navigation_mesh.cpp
-msgid "Filter Walkable Low Height Spans"
-msgstr "过滤å¯è¡Œèµ°ä½Žé«˜åº¦èŒƒå›´"
+msgid "Walkable Low Height Spans"
+msgstr "å¯è¡Œèµ°ä½Žé«˜åº¦èŒƒå›´"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB"
+msgstr "æ­£åœ¨ç”Ÿæˆ AABB"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB Offset"
+msgstr "基础åç§»"
#: scene/resources/occluder_shape.cpp
msgid "Spheres"
@@ -25587,6 +25846,10 @@ msgid "Scenario"
msgstr "场景"
#: scene/resources/world.cpp scene/resources/world_2d.cpp
+msgid "Navigation Map"
+msgstr "导航地图"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
msgid "Direct Space State"
msgstr "DirectSpaceState"
@@ -25602,6 +25865,22 @@ msgstr "默认线性阻尼"
msgid "Default Angular Damp"
msgstr "默认角度阻尼"
+#: scene/resources/world.cpp
+msgid "Default Map Up"
+msgstr "默认地图上方"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+msgid "Default Cell Size"
+msgstr "默认å•元格大å°"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+msgid "Default Cell Height"
+msgstr "默认å•元格高度"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+msgid "Default Edge Connection Margin"
+msgstr "默认边界连接边è·"
+
#: scene/resources/world_2d.cpp
msgid "Canvas"
msgstr "画布"
diff --git a/editor/translations/zh_HK.po b/editor/translations/zh_HK.po
index 205fb3e882..114f6b0a45 100644
--- a/editor/translations/zh_HK.po
+++ b/editor/translations/zh_HK.po
@@ -220,9 +220,10 @@ msgid "Data"
msgstr ""
#: core/io/file_access_network.cpp core/register_core_types.cpp
-#: editor/editor_settings.cpp main/main.cpp
+#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
#: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h
+#: scene/gui/file_dialog.cpp
#, fuzzy
msgid "Network"
msgstr "匯出"
@@ -379,6 +380,15 @@ msgstr ""
msgid "Max Size (KB)"
msgstr ""
+#: core/os/input.cpp
+#, fuzzy
+msgid "Mouse Mode"
+msgstr "移動模å¼"
+
+#: core/os/input.cpp
+msgid "Use Accumulated Input"
+msgstr ""
+
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: servers/audio_server.cpp
msgid "Device"
@@ -576,7 +586,8 @@ msgstr "æè¿°ï¼š"
#: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
-#: main/main.cpp
+#: main/main.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp
msgid "Run"
msgstr "é‹è¡Œ"
@@ -665,6 +676,11 @@ msgid "Main Run Args"
msgstr ""
#: core/project_settings.cpp
+#, fuzzy
+msgid "Scene Naming"
+msgstr "場景路徑:"
+
+#: core/project_settings.cpp
msgid "Search In File Extensions"
msgstr ""
@@ -672,20 +688,15 @@ msgstr ""
msgid "Script Templates Search Path"
msgstr ""
-#: core/project_settings.cpp editor/editor_node.cpp
-#: editor/plugins/version_control_editor_plugin.cpp
+#: core/project_settings.cpp
#, fuzzy
-msgid "Version Control"
+msgid "Version Control Autoload On Startup"
msgstr "版本:"
#: core/project_settings.cpp
-msgid "Autoload On Startup"
-msgstr ""
-
-#: core/project_settings.cpp
#, fuzzy
-msgid "Plugin Name"
-msgstr "æ’件列表:"
+msgid "Version Control Plugin Name"
+msgstr "版本:"
#: core/project_settings.cpp scene/2d/collision_object_2d.cpp
#: scene/3d/collision_object.cpp scene/gui/control.cpp
@@ -796,7 +807,8 @@ msgid "Quality"
msgstr ""
#: core/project_settings.cpp scene/gui/file_dialog.cpp
-#: scene/main/scene_tree.cpp servers/visual_server.cpp
+#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp
+#: servers/visual_server.cpp
#, fuzzy
msgid "Filters"
msgstr "篩é¸:"
@@ -2279,7 +2291,7 @@ msgid "Open"
msgstr "開啟"
#: editor/dependency_editor.cpp
-msgid "Owners Of:"
+msgid "Owners of: %s (Total: %d)"
msgstr ""
#: editor/dependency_editor.cpp
@@ -2589,7 +2601,7 @@ msgid "Bus Options"
msgstr "é¸é …"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/scene_tree_dock.cpp
+#: editor/project_export.cpp editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "å†è£½"
@@ -2864,6 +2876,24 @@ msgid "Choose"
msgstr "鏿“‡"
#: editor/editor_export.cpp
+msgid "Project export for platform:"
+msgstr ""
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Completed with errors."
+msgstr "複製路徑"
+
+#: editor/editor_export.cpp
+msgid "Completed successfully."
+msgstr ""
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed."
+msgstr "失敗:"
+
+#: editor/editor_export.cpp
msgid "Storing File:"
msgstr ""
@@ -2876,6 +2906,31 @@ msgid "Packing"
msgstr ""
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save PCK"
+msgstr "å¦å­˜ç‚º"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Cannot create file \"%s\"."
+msgstr "無法新增資料夾"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to export project files."
+msgstr "無法新增資料夾"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Can't open file to read from path \"%s\"."
+msgstr "ä¸èƒ½é–‹å•Ÿæª”案以供寫入:"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save ZIP"
+msgstr "å¦å­˜ç‚º"
+
+#: editor/editor_export.cpp
msgid ""
"Target platform requires 'ETC' texture compression for GLES2. Enable 'Import "
"Etc' in Project Settings."
@@ -2979,8 +3034,29 @@ msgstr ""
msgid "Custom release template not found."
msgstr ""
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Prepare Template"
+msgstr "管ç†è¼¸å‡ºç¯„本"
+
+#: editor/editor_export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "The given export path doesn't exist."
+msgstr "檔案ä¸å­˜åœ¨."
+
#: editor/editor_export.cpp platform/javascript/export/export.cpp
-msgid "Template file not found:"
+#, fuzzy
+msgid "Template file not found: \"%s\"."
+msgstr "時長(秒)。"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to copy export template."
+msgstr "管ç†è¼¸å‡ºç¯„本"
+
+#: editor/editor_export.cpp platform/windows/export/export.cpp
+#: platform/x11/export/export.cpp
+msgid "PCK Embedding"
msgstr ""
#: editor/editor_export.cpp
@@ -3167,9 +3243,9 @@ msgid "Import"
msgstr "å°Žå…¥"
#: editor/editor_feature_profile.cpp editor/project_export.cpp
-#: platform/android/export/export.cpp platform/javascript/export/export.cpp
-#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
-#: platform/windows/export/export.cpp
+#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#: platform/uwp/export/export.cpp platform/windows/export/export.cpp
msgid "Export"
msgstr "匯出"
@@ -4332,15 +4408,6 @@ msgid ""
"Unable to write to file '%s', file in use, locked or lacking permissions."
msgstr ""
-#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
-msgid "Scene"
-msgstr "場景"
-
-#: editor/editor_node.cpp
-#, fuzzy
-msgid "Scene Naming"
-msgstr "場景路徑:"
-
#: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp
#: servers/arvr/arvr_interface.cpp
msgid "Interface"
@@ -4468,6 +4535,11 @@ msgstr ""
#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
#, fuzzy
+msgid "Version Control"
+msgstr "版本:"
+
+#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
+#, fuzzy
msgid "Username"
msgstr "釿–°å‘½å"
@@ -4497,6 +4569,10 @@ msgstr ""
msgid "Add a new scene."
msgstr "新增軌迹"
+#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
+msgid "Scene"
+msgstr "場景"
+
#: editor/editor_node.cpp
#, fuzzy
msgid "Go to previously opened scene."
@@ -5277,6 +5353,11 @@ msgid ""
"as runnable."
msgstr ""
+#: editor/editor_run_native.cpp
+#, fuzzy
+msgid "Project Run"
+msgstr "專案"
+
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
msgstr ""
@@ -5553,7 +5634,9 @@ msgid "Draw Spaces"
msgstr ""
#: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp
-#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp
+#: scene/main/scene_tree.cpp scene/resources/world.cpp
+#: scene/resources/world_2d.cpp
#, fuzzy
msgid "Navigation"
msgstr "æ’ä»¶"
@@ -7077,7 +7160,7 @@ msgstr ""
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp
-#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp
+#: scene/gui/control.cpp
#, fuzzy
msgid "Filter"
msgstr "篩é¸:"
@@ -7369,6 +7452,18 @@ msgid "Saving..."
msgstr "儲存中..."
#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used as a normal map in 3D. Enabling red-green "
+"texture compression to reduce memory usage (blue channel is discarded)."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap "
+"generation and VRAM texture compression."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
msgid "2D, Detect 3D"
msgstr ""
@@ -8088,11 +8183,20 @@ msgid "New Anim"
msgstr "新增動畫"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+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 "Rename Animation"
+msgstr "釿–°å‘½åå‹•ç•«"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Delete Animation?"
msgstr "刪除動畫?"
@@ -8112,11 +8216,6 @@ 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 "Duplicate Animation"
msgstr ""
@@ -8268,10 +8367,6 @@ msgid "Pin AnimationPlayer"
msgstr "貼上動畫"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Create New Animation"
-msgstr ""
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Name:"
msgstr ""
@@ -10439,6 +10534,7 @@ msgid "Points"
msgstr "下移"
#: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp
+#: scene/resources/navigation_mesh.cpp
#, fuzzy
msgid "Polygons"
msgstr "æ’ä»¶"
@@ -11892,7 +11988,7 @@ msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
#, fuzzy
-msgid "Convert to Mesh2D"
+msgid "Convert to MeshInstance2D"
msgstr "轉為..."
#: editor/plugins/sprite_editor_plugin.cpp
@@ -12951,8 +13047,7 @@ msgid "Select the previous shape, subtile, or Tile."
msgstr ""
#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp
-#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp
-#: scene/resources/texture.cpp
+#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp
#, fuzzy
msgid "Region"
msgstr "無干擾模å¼"
@@ -14480,34 +14575,12 @@ 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
#, fuzzy
msgid "Exporting All"
msgstr "匯出"
#: editor/project_export.cpp
#, fuzzy
-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
-#, fuzzy
msgid "Export Path"
msgstr "匯出"
@@ -14651,6 +14724,11 @@ msgid "Export templates for this platform are missing:"
msgstr ""
#: editor/project_export.cpp
+#, fuzzy
+msgid "Project Export"
+msgstr "專案開è’人"
+
+#: editor/project_export.cpp
msgid "Manage Export Templates"
msgstr "管ç†è¼¸å‡ºç¯„本"
@@ -17057,7 +17135,7 @@ msgstr ""
#: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp
#: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp
-#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp
+#: scene/3d/collision_polygon.cpp
#, fuzzy
msgid "Polygon"
msgstr "æ’ä»¶"
@@ -17665,7 +17743,6 @@ msgid "Use In Baked Light"
msgstr ""
#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
-#: scene/resources/navigation_mesh.cpp
msgid "Cell"
msgstr ""
@@ -17695,6 +17772,19 @@ msgstr "ä¸é¸"
msgid "Mask"
msgstr ""
+#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
+#, fuzzy
+msgid "Bake Navigation"
+msgstr "æ’ä»¶"
+
+#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp
+#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp
+#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp
+#: scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Navigation Layers"
+msgstr "æ’ä»¶"
+
#: modules/gridmap/grid_map_editor_plugin.cpp
#, fuzzy
msgid "Next Plane"
@@ -19252,10 +19342,6 @@ 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."
@@ -19360,12 +19446,16 @@ msgstr ""
msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version."
msgstr ""
+#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Code Signing"
+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."
+"'apksigner' could not be found. Please check that the command is available "
+"in the Android SDK build-tools directory. The resulting %s is unsigned."
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -19383,6 +19473,10 @@ msgid "Could not find keystore, unable to export."
msgstr "無法新增資料夾"
#: platform/android/export/export_plugin.cpp
+msgid "Could not start apksigner executable."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr ""
@@ -19413,7 +19507,7 @@ msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
#: platform/android/export/export_plugin.cpp
-msgid "Unsupported export format!\n"
+msgid "Unsupported export format!"
msgstr ""
#: platform/android/export/export_plugin.cpp
@@ -19424,20 +19518,19 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Android build version mismatch:\n"
-" Template installed: %s\n"
-" Godot Version: %s\n"
+"Android build version mismatch: Template installed: %s, Godot version: %s. "
"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"
+"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 ""
+#, fuzzy
+msgid "Could not export project files to gradle project."
+msgstr "無法新增資料夾"
#: platform/android/export/export_plugin.cpp
#, fuzzy
@@ -19450,7 +19543,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid ""
-"Building of Android project failed, check output for the error.\n"
+"Building of Android project failed, check output for the error. "
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
@@ -19466,7 +19559,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
#, fuzzy
-msgid "Package not found: %s"
+msgid "Package not found: \"%s\"."
msgstr "時長(秒)。"
#: platform/android/export/export_plugin.cpp
@@ -19476,15 +19569,12 @@ msgstr "連接中..."
#: platform/android/export/export_plugin.cpp
#, fuzzy
-msgid ""
-"Could not find template APK to export:\n"
-"%s"
+msgid "Could not find template APK to export: \"%s\"."
msgstr "無法新增資料夾"
#: platform/android/export/export_plugin.cpp
msgid ""
-"Missing libraries in the export template for the selected architectures: "
-"%s.\n"
+"Missing libraries in the export template for the selected architectures: %s. "
"Please build a template with all required libraries, or uncheck the missing "
"architectures in the export preset."
msgstr ""
@@ -19496,7 +19586,7 @@ msgstr "ç¯©é¸æª”案..."
#: platform/android/export/export_plugin.cpp
#, fuzzy
-msgid "Could not export project files"
+msgid "Could not export project files."
msgstr "無法新增資料夾"
#: platform/android/export/export_plugin.cpp
@@ -19738,6 +19828,17 @@ msgstr "貼上"
msgid "Custom BG Color"
msgstr "貼上"
+#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Prepare Templates"
+msgstr "管ç†è¼¸å‡ºç¯„本"
+
+#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Export template not found."
+msgstr "Export Template管ç†å™¨"
+
#: platform/iphone/export/export.cpp
msgid "App Store Team ID not specified - cannot configure the project."
msgstr ""
@@ -19762,25 +19863,34 @@ msgstr ""
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not open template for export:"
+msgid "Could not open template for export: \"%s\"."
msgstr "無法新增資料夾"
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Invalid export template:"
+msgid "Invalid export template: \"%s\"."
msgstr "管ç†è¼¸å‡ºç¯„本"
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not write file:"
+msgid "Could not write file: \"%s\"."
msgstr "無法新增資料夾"
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Icon Creation"
+msgstr "內容:"
+
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not read file:"
+msgid "Could not read file: \"%s\"."
msgstr "無法新增資料夾"
#: platform/javascript/export/export.cpp
+msgid "PWA"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
#, fuzzy
msgid "Variant"
msgstr "翻譯:"
@@ -19856,17 +19966,17 @@ msgstr ""
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not read HTML shell:"
+msgid "Could not read HTML shell: \"%s\"."
msgstr "無法新增資料夾"
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Could not create HTTP server directory:"
+msgid "Could not create HTTP server directory: %s."
msgstr "無法新增資料夾"
#: platform/javascript/export/export.cpp
#, fuzzy
-msgid "Error starting HTTP server:"
+msgid "Error starting HTTP server: %d."
msgstr "儲存TileSet時出ç¾éŒ¯èª¤ï¼"
#: platform/javascript/export/export.cpp
@@ -20162,9 +20272,28 @@ msgid "Apple Team ID"
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open icon file \"%s\"."
+msgstr "無法新增資料夾"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start xcrun executable."
+msgstr "無法新增資料夾"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization failed."
+msgstr "本地化"
+
+#: platform/osx/export/export.cpp
+msgid "Notarization request UUID: \"%s\""
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid ""
-"Note: The notarization process generally takes less than an hour. When the "
-"process is completed, you'll receive an email."
+"The notarization process generally takes less than an hour. When the process "
+"is completed, you'll receive an email."
msgstr ""
#: platform/osx/export/export.cpp
@@ -20180,21 +20309,75 @@ msgid ""
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign failed with error \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign require regex module."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Could not start codesign executable, make sure Xcode command line tools are "
+"installed."
+msgstr ""
+
+#: platform/osx/export/export.cpp platform/windows/export/export.cpp
#, fuzzy
msgid "No identity found."
msgstr "找ä¸åˆ°!"
#: platform/osx/export/export.cpp
#, fuzzy
+msgid "Cannot sign file %s."
+msgstr "儲存TileSet時出ç¾éŒ¯èª¤ï¼"
+
+#: platform/osx/export/export.cpp
+msgid "Relative symlinks are not supported, exported \"%s\" might be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "DMG Creation"
+msgstr "æè¿°ï¼š"
+
+#: platform/osx/export/export.cpp
+msgid "Could not start hdiutil executable."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed - file exists."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
msgid "Creating app bundle"
msgstr "正在建立縮圖"
#: platform/osx/export/export.cpp
#, fuzzy
-msgid "Could not find template app to export:"
+msgid "Could not find template app to export: \"%s\"."
msgstr "無法新增資料夾"
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid export format."
+msgstr "管ç†è¼¸å‡ºç¯„本"
+
+#: platform/osx/export/export.cpp
msgid ""
"Relative symlinks are not supported on this OS, the exported project might "
"be broken!"
@@ -20202,7 +20385,7 @@ msgstr ""
#: platform/osx/export/export.cpp
msgid ""
-"Requested template binary '%s' not found. It might be missing from your "
+"Requested template binary \"%s\" not found. It might be missing from your "
"template archive."
msgstr ""
@@ -20244,6 +20427,16 @@ msgstr ""
#: platform/osx/export/export.cpp
#, fuzzy
+msgid "ZIP Creation"
+msgstr "專案"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open file to read from path \"%s\"."
+msgstr "無法新增資料夾"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
msgid "Invalid bundle identifier:"
msgstr "無效字型"
@@ -20558,6 +20751,11 @@ msgid "Debug Algorithm"
msgstr ""
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to rename temporary file \"%s\"."
+msgstr "無法移除暫存檔:"
+
+#: platform/windows/export/export.cpp
msgid "Identity Type"
msgstr ""
@@ -20604,6 +20802,70 @@ msgid "Trademarks"
msgstr ""
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Resources Modification"
+msgstr "貼上動畫"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find rcedit executable at \"%s\"."
+msgstr "無法新增資料夾"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find wine executable at \"%s\"."
+msgstr "無法新增資料夾"
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start rcedit executable, configure rcedit path in the Editor "
+"Settings (Export > Windows > Rcedit)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"rcedit failed to modify executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find signtool executable at \"%s\"."
+msgstr "無法新增資料夾"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find osslsigncode executable at \"%s\"."
+msgstr "無法新增資料夾"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid identity type."
+msgstr "無效字型"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid timestamp server."
+msgstr "無效å稱。"
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start signtool executable, configure signtool path in the Editor "
+"Settings (Export > Windows > Signtool)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Signtool failed to sign executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to remove temporary file \"%s\"."
+msgstr "無法移除暫存檔:"
+
+#: platform/windows/export/export.cpp
msgid ""
"The rcedit tool must be configured in the Editor Settings (Export > Windows "
"> Rcedit) to change the icon or app information data."
@@ -20625,6 +20887,23 @@ msgid "Invalid product version:"
msgstr "無效字型"
#: platform/windows/export/export.cpp
+msgid "Windows executables cannot be >= 4 GiB."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+#, fuzzy
+msgid "Failed to open executable file \"%s\"."
+msgstr "無效副檔å"
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable file header corrupted."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable \"pck\" section not found."
+msgstr ""
+
+#: platform/windows/export/export.cpp
msgid "Windows"
msgstr ""
@@ -20640,6 +20919,10 @@ msgstr ""
msgid "Wine"
msgstr ""
+#: platform/x11/export/export.cpp
+msgid "32-bit executables cannot have embedded data >= 4 GiB."
+msgstr ""
+
#: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp
#: scene/resources/texture.cpp
#, fuzzy
@@ -20762,7 +21045,8 @@ msgstr ""
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/3d/light.cpp scene/3d/reflection_probe.cpp
-#: scene/3d/visual_instance.cpp scene/resources/material.cpp
+#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp
+#: scene/resources/material.cpp
#, fuzzy
msgid "Max Distance"
msgstr "Instance"
@@ -21517,6 +21801,18 @@ msgstr ""
msgid "Edge Connection Margin"
msgstr "編輯連接"
+#: scene/2d/navigation_2d.cpp
+msgid ""
+"'Navigation2D' node and 'Navigation2D.get_simple_path()' are deprecated and "
+"will be removed in a future version. Use 'Navigation2DServer.map_get_path()' "
+"instead."
+msgstr ""
+
+#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
+#, fuzzy
+msgid "Path Desired Distance"
+msgstr "鏿“‡ä¸»å ´æ™¯"
+
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
msgid "Target Desired Distance"
msgstr ""
@@ -21568,13 +21864,16 @@ msgid ""
msgstr ""
#: scene/2d/navigation_polygon.cpp
-msgid ""
-"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
-"node. It only provides navigation data."
+msgid "Navpoly"
msgstr ""
-#: scene/2d/navigation_polygon.cpp
-msgid "Navpoly"
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Enter Cost"
+msgstr "ä¸é¸"
+
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+msgid "Travel Cost"
msgstr ""
#: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp
@@ -22701,6 +23000,13 @@ msgstr ""
msgid "Transform Normals"
msgstr "縮放selection"
+#: scene/3d/navigation.cpp
+msgid ""
+"'Navigation' node and 'Navigation.get_simple_path()' are deprecated and will "
+"be removed in a future version. Use 'NavigationServer.map_get_path()' "
+"instead."
+msgstr ""
+
#: scene/3d/navigation.cpp scene/resources/curve.cpp
#, fuzzy
msgid "Up Vector"
@@ -22724,12 +23030,6 @@ msgid ""
"The NavigationAgent can be used only under a Spatial inheriting parent node."
msgstr ""
-#: scene/3d/navigation_mesh_instance.cpp
-msgid ""
-"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
-"It only provides navigation data."
-msgstr ""
-
#: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp
msgid "NavMesh"
msgstr ""
@@ -25323,6 +25623,16 @@ msgid "3D Physics"
msgstr "物ç†å¹€ %"
#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "2D Navigation"
+msgstr "æ’ä»¶"
+
+#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "3D Navigation"
+msgstr "æ’ä»¶"
+
+#: scene/register_scene_types.cpp
msgid "Use hiDPI"
msgstr ""
@@ -26713,7 +27023,7 @@ msgstr "éŽæ¸¡"
msgid "Refraction"
msgstr "翻譯:"
-#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp
+#: scene/resources/material.cpp
msgid "Detail"
msgstr ""
@@ -26794,7 +27104,12 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
-msgid "Sample Partition Type"
+msgid "Sampling"
+msgstr "鏿“‡æ¨¡å¼"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Partition Type"
msgstr "更改動畫循環"
#: scene/resources/navigation_mesh.cpp
@@ -26811,10 +27126,15 @@ msgid "Source Group Name"
msgstr "來æº:"
#: scene/resources/navigation_mesh.cpp
-msgid "Agent"
+msgid "Cells"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Agents"
+msgstr "內容:"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Max Climb"
msgstr ""
@@ -26823,11 +27143,16 @@ msgid "Max Slope"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Regions"
+msgstr "無干擾模å¼"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Merge Size"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Edge"
+msgid "Edges"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -26840,6 +27165,11 @@ msgid "Verts Per Poly"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Details"
+msgstr "é è¨­"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Sample Distance"
msgstr ""
@@ -26856,9 +27186,18 @@ msgid "Ledge Spans"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Filter Walkable Low Height Spans"
+msgid "Walkable Low Height Spans"
+msgstr ""
+
+#: scene/resources/navigation_mesh.cpp
+msgid "Baking AABB"
msgstr ""
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB Offset"
+msgstr "移除é¸é …"
+
#: scene/resources/occluder_shape.cpp
msgid "Spheres"
msgstr ""
@@ -27260,6 +27599,11 @@ msgid "Scenario"
msgstr "場景"
#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Navigation Map"
+msgstr "æ’ä»¶"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
msgid "Direct Space State"
msgstr ""
@@ -27277,6 +27621,26 @@ msgstr "線性"
msgid "Default Angular Damp"
msgstr ""
+#: scene/resources/world.cpp
+#, fuzzy
+msgid "Default Map Up"
+msgstr "é è¨­"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Size"
+msgstr "é è¦½:"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Height"
+msgstr "測試"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Edge Connection Margin"
+msgstr "編輯連接"
+
#: scene/resources/world_2d.cpp
msgid "Canvas"
msgstr ""
diff --git a/editor/translations/zh_TW.po b/editor/translations/zh_TW.po
index 3bf8ad4e07..bcf6650997 100644
--- a/editor/translations/zh_TW.po
+++ b/editor/translations/zh_TW.po
@@ -240,9 +240,10 @@ msgid "Data"
msgstr "資料"
#: core/io/file_access_network.cpp core/register_core_types.cpp
-#: editor/editor_settings.cpp main/main.cpp
+#: editor/editor_file_dialog.cpp editor/editor_settings.cpp main/main.cpp
#: modules/gdscript/language_server/gdscript_language_server.cpp
#: modules/webrtc/webrtc_data_channel.h modules/websocket/websocket_macros.h
+#: scene/gui/file_dialog.cpp
msgid "Network"
msgstr "網路"
@@ -398,6 +399,16 @@ msgstr "訊æ¯ä½‡åˆ—"
msgid "Max Size (KB)"
msgstr "最大大å°ï¼ˆKB)"
+#: core/os/input.cpp
+#, fuzzy
+msgid "Mouse Mode"
+msgstr "移動模å¼"
+
+#: core/os/input.cpp
+#, fuzzy
+msgid "Use Accumulated Input"
+msgstr "刪除輸入"
+
#: core/os/input_event.cpp editor/project_settings_editor.cpp
#: servers/audio_server.cpp
msgid "Device"
@@ -586,7 +597,8 @@ msgstr "說明"
#: core/project_settings.cpp editor/editor_node.cpp editor/editor_settings.cpp
#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
-#: main/main.cpp
+#: main/main.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp
msgid "Run"
msgstr "執行"
@@ -677,6 +689,11 @@ msgstr "主執行引數"
#: core/project_settings.cpp
#, fuzzy
+msgid "Scene Naming"
+msgstr "場景路徑:"
+
+#: core/project_settings.cpp
+#, fuzzy
msgid "Search In File Extensions"
msgstr "ä»¥å‰¯æª”åæœå°‹"
@@ -684,18 +701,15 @@ msgstr "ä»¥å‰¯æª”åæœå°‹"
msgid "Script Templates Search Path"
msgstr "è…³æœ¬æ¨£æ¿æœå°‹è·¯å¾‘"
-#: core/project_settings.cpp editor/editor_node.cpp
-#: editor/plugins/version_control_editor_plugin.cpp
-msgid "Version Control"
-msgstr "版本控制"
-
#: core/project_settings.cpp
-msgid "Autoload On Startup"
+#, fuzzy
+msgid "Version Control Autoload On Startup"
msgstr "啟動時自動載入"
#: core/project_settings.cpp
-msgid "Plugin Name"
-msgstr "外掛å稱"
+#, fuzzy
+msgid "Version Control Plugin Name"
+msgstr "版本控制"
#: core/project_settings.cpp scene/2d/collision_object_2d.cpp
#: scene/3d/collision_object.cpp scene/gui/control.cpp
@@ -811,7 +825,8 @@ msgid "Quality"
msgstr "å“質"
#: core/project_settings.cpp scene/gui/file_dialog.cpp
-#: scene/main/scene_tree.cpp servers/visual_server.cpp
+#: scene/main/scene_tree.cpp scene/resources/navigation_mesh.cpp
+#: servers/visual_server.cpp
#, fuzzy
msgid "Filters"
msgstr "篩é¸å™¨"
@@ -2247,8 +2262,8 @@ msgid "Open"
msgstr "開啟"
#: editor/dependency_editor.cpp
-msgid "Owners Of:"
-msgstr "ç‚ºä¸‹åˆ—ä¹‹æ“æœ‰è€…:"
+msgid "Owners of: %s (Total: %d)"
+msgstr ""
#: editor/dependency_editor.cpp
msgid ""
@@ -2546,7 +2561,7 @@ msgid "Bus Options"
msgstr "åŒ¯æµæŽ’é¸é …"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
-#: editor/scene_tree_dock.cpp
+#: editor/project_export.cpp editor/scene_tree_dock.cpp
msgid "Duplicate"
msgstr "é‡è¤‡"
@@ -2804,6 +2819,25 @@ msgid "Choose"
msgstr "鏿“‡"
#: editor/editor_export.cpp
+msgid "Project export for platform:"
+msgstr ""
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Completed with errors."
+msgstr "複製節點路徑"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Completed successfully."
+msgstr "å¥—ä»¶å®‰è£æˆåŠŸï¼"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed."
+msgstr "失敗:"
+
+#: editor/editor_export.cpp
msgid "Storing File:"
msgstr "儲存檔案:"
@@ -2816,6 +2850,31 @@ msgid "Packing"
msgstr "正在打包"
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save PCK"
+msgstr "å¦å­˜æ–°æª”"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Cannot create file \"%s\"."
+msgstr "無法新增資料夾。"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to export project files."
+msgstr "無法匯出專案檔案"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Can't open file to read from path \"%s\"."
+msgstr "無法開啟欲寫入的檔案:"
+
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Save ZIP"
+msgstr "å¦å­˜æ–°æª”"
+
+#: editor/editor_export.cpp
msgid ""
"Target platform requires 'ETC' texture compression for GLES2. Enable 'Import "
"Etc' in Project Settings."
@@ -2932,11 +2991,33 @@ msgstr "找ä¸åˆ°è‡ªå®šç¾©åµéŒ¯æ¨£æ¿ã€‚"
msgid "Custom release template not found."
msgstr "找ä¸åˆ°è‡ªå®šç¾©ç™¼è¡Œæ¨£æ¿ã€‚"
+#: editor/editor_export.cpp
+#, fuzzy
+msgid "Prepare Template"
+msgstr "ç®¡ç†æ¨£æ¿"
+
+#: editor/editor_export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "The given export path doesn't exist."
+msgstr "給定的匯出路徑ä¸å­˜åœ¨ï¼š"
+
#: editor/editor_export.cpp platform/javascript/export/export.cpp
-msgid "Template file not found:"
+#, fuzzy
+msgid "Template file not found: \"%s\"."
msgstr "找ä¸åˆ°æ¨£æ¿æª”案:"
#: editor/editor_export.cpp
+#, fuzzy
+msgid "Failed to copy export template."
+msgstr "無效的輸出樣æ¿ï¼š"
+
+#: editor/editor_export.cpp platform/windows/export/export.cpp
+#: platform/x11/export/export.cpp
+#, fuzzy
+msgid "PCK Embedding"
+msgstr "å¡«å……"
+
+#: editor/editor_export.cpp
msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB."
msgstr "匯出 32 ä½å…ƒæª”時,內嵌 PCK 大å°ä¸å¾—è¶…éŽ 4 GB。"
@@ -3103,9 +3184,9 @@ msgid "Import"
msgstr "匯入"
#: editor/editor_feature_profile.cpp editor/project_export.cpp
-#: platform/android/export/export.cpp platform/javascript/export/export.cpp
-#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
-#: platform/windows/export/export.cpp
+#: platform/android/export/export.cpp platform/android/export/export_plugin.cpp
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#: platform/uwp/export/export.cpp platform/windows/export/export.cpp
msgid "Export"
msgstr "匯出"
@@ -4236,15 +4317,6 @@ msgid ""
"Unable to write to file '%s', file in use, locked or lacking permissions."
msgstr "無法寫入檔案'%s',該檔案正被使用ã€éŽ–å®šæˆ–å› æ¬Šé™ä¸è¶³ã€‚"
-#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
-msgid "Scene"
-msgstr "場景"
-
-#: editor/editor_node.cpp
-#, fuzzy
-msgid "Scene Naming"
-msgstr "場景路徑:"
-
#: editor/editor_node.cpp editor/editor_settings.cpp editor/scene_tree_dock.cpp
#: servers/arvr/arvr_interface.cpp
#, fuzzy
@@ -4375,6 +4447,10 @@ msgid "Default Color Picker Mode"
msgstr "é è¨­é¡è‰²æŒ‘é¸å™¨æ¨¡å¼"
#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
+msgid "Version Control"
+msgstr "版本控制"
+
+#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
#, fuzzy
msgid "Username"
msgstr "釿–°å‘½å"
@@ -4403,6 +4479,10 @@ msgstr "切æ›ï¼å–消專注模å¼ã€‚"
msgid "Add a new scene."
msgstr "新增場景。"
+#: editor/editor_node.cpp editor/plugins/theme_editor_plugin.cpp
+msgid "Scene"
+msgstr "場景"
+
#: editor/editor_node.cpp
msgid "Go to previously opened scene."
msgstr "跳至上一個開啟的場景。"
@@ -5178,6 +5258,11 @@ msgstr ""
"為找到å¯åŸ·è¡Œæ–¼è©²å¹³å°çš„匯出é è¨­è¨­å®šã€‚\n"
"請在 [匯出] é¸å–®ä¸­æ–°å¢žä¸€å€‹å¯åŸ·è¡Œçš„é è¨­è¨­å®šï¼Œæˆ–å°‡ç¾æœ‰çš„é è¨­è¨­å®šè¨­ç‚ºå¯åŸ·è¡Œã€‚"
+#: editor/editor_run_native.cpp
+#, fuzzy
+msgid "Project Run"
+msgstr "專案"
+
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
msgstr "在 _run() 方法中填寫é‚輯。"
@@ -5471,7 +5556,9 @@ msgid "Draw Spaces"
msgstr "繪製呼å«ï¼š"
#: editor/editor_settings.cpp editor/plugins/spatial_editor_plugin.cpp
-#: editor/plugins/tile_set_editor_plugin.cpp scene/main/scene_tree.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/tile_map.cpp
+#: scene/main/scene_tree.cpp scene/resources/world.cpp
+#: scene/resources/world_2d.cpp
msgid "Navigation"
msgstr "導航"
@@ -6966,7 +7053,7 @@ msgstr ""
#: editor/import/resource_importer_layered_texture.cpp
#: editor/import/resource_importer_texture.cpp scene/2d/light_2d.cpp
-#: scene/gui/control.cpp scene/resources/navigation_mesh.cpp
+#: scene/gui/control.cpp
#, fuzzy
msgid "Filter"
msgstr "篩é¸ï¼š"
@@ -7263,6 +7350,18 @@ msgid "Saving..."
msgstr "正在ä¿å­˜..."
#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used as a normal map in 3D. Enabling red-green "
+"texture compression to reduce memory usage (blue channel is discarded)."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
+msgid ""
+"%s: Texture detected as used in 3D. Enabling filter, repeat, mipmap "
+"generation and VRAM texture compression."
+msgstr ""
+
+#: editor/import/resource_importer_texture.cpp
msgid "2D, Detect 3D"
msgstr ""
@@ -7941,11 +8040,20 @@ msgid "New Anim"
msgstr "新增動畫"
#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+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 "Rename Animation"
+msgstr "釿–°å‘½åå‹•ç•«"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Delete Animation?"
msgstr "是å¦åˆªé™¤å‹•畫?"
@@ -7963,11 +8071,6 @@ 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 "Duplicate Animation"
msgstr "é‡è¤‡å‹•ç•«"
@@ -8111,10 +8214,6 @@ msgid "Pin AnimationPlayer"
msgstr "固定 AnimationPlayer"
#: editor/plugins/animation_player_editor_plugin.cpp
-msgid "Create New Animation"
-msgstr "建立新動畫"
-
-#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Name:"
msgstr "å‹•ç•«å稱:"
@@ -10213,6 +10312,7 @@ msgid "Points"
msgstr "點"
#: editor/plugins/polygon_2d_editor_plugin.cpp scene/2d/polygon_2d.cpp
+#: scene/resources/navigation_mesh.cpp
msgid "Polygons"
msgstr "多邊形"
@@ -11587,7 +11687,8 @@ msgid "Invalid geometry, can't replace by mesh."
msgstr "無效的幾何圖形,無法以網格å–代。"
#: editor/plugins/sprite_editor_plugin.cpp
-msgid "Convert to Mesh2D"
+#, fuzzy
+msgid "Convert to MeshInstance2D"
msgstr "轉æ›ç‚º Mesh2D"
#: editor/plugins/sprite_editor_plugin.cpp
@@ -12577,8 +12678,7 @@ msgid "Select the previous shape, subtile, or Tile."
msgstr "鏿“‡å‰ä¸€å€‹å½¢ç‹€ã€å­åœ–å¡Šã€æˆ–圖塊。"
#: editor/plugins/tile_set_editor_plugin.cpp scene/2d/sprite.cpp
-#: scene/3d/sprite_3d.cpp scene/resources/navigation_mesh.cpp
-#: scene/resources/texture.cpp
+#: scene/3d/sprite_3d.cpp scene/resources/texture.cpp
msgid "Region"
msgstr "å€åŸŸ"
@@ -14083,35 +14183,10 @@ msgid "Delete preset '%s'?"
msgstr "確定è¦åˆªé™¤é è¨­è¨­å®šã€Œ%sã€ï¼Ÿ"
#: editor/project_export.cpp
-msgid ""
-"Failed to export the project for platform '%s'.\n"
-"Export templates seem to be missing or invalid."
-msgstr ""
-"為平å°ã€Œ%sã€åŒ¯å‡ºå°ˆæ¡ˆå¤±æ•—。\n"
-"匯出樣æ¿ä¼¼ä¹Žå·²éºå¤±æˆ–無效。"
-
-#: 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 ""
-"為平å°ã€Œ%sã€åŒ¯å‡ºå°ˆæ¡ˆå¤±æ•—。\n"
-"å¯èƒ½æ˜¯ç”±æ–¼åŒ¯å‡ºé è¨­è¨­å®šæˆ–匯出設定中的組態設定有å•題導致。"
-
-#: 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 "Export Path"
msgstr "匯出路徑"
@@ -14256,6 +14331,11 @@ msgid "Export templates for this platform are missing:"
msgstr "缺少匯出該平å°ç”¨çš„æ¨£æ¿ï¼š"
#: editor/project_export.cpp
+#, fuzzy
+msgid "Project Export"
+msgstr "專案發起人"
+
+#: editor/project_export.cpp
msgid "Manage Export Templates"
msgstr "管ç†åŒ¯å‡ºæ¨£æ¿"
@@ -16634,7 +16714,7 @@ msgstr ""
#: modules/csg/csg_shape.cpp scene/2d/collision_polygon_2d.cpp
#: scene/2d/light_occluder_2d.cpp scene/2d/polygon_2d.cpp
-#: scene/3d/collision_polygon.cpp scene/resources/navigation_mesh.cpp
+#: scene/3d/collision_polygon.cpp
#, fuzzy
msgid "Polygon"
msgstr "多邊形"
@@ -17257,7 +17337,6 @@ msgid "Use In Baked Light"
msgstr "烘焙光照圖"
#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
-#: scene/resources/navigation_mesh.cpp
msgid "Cell"
msgstr ""
@@ -17287,6 +17366,19 @@ msgstr "中央"
msgid "Mask"
msgstr ""
+#: modules/gridmap/grid_map.cpp scene/2d/tile_map.cpp
+#, fuzzy
+msgid "Bake Navigation"
+msgstr "導航"
+
+#: modules/gridmap/grid_map.cpp scene/2d/navigation_2d.cpp
+#: scene/2d/navigation_agent_2d.cpp scene/2d/navigation_polygon.cpp
+#: scene/2d/tile_map.cpp scene/3d/navigation.cpp scene/3d/navigation_agent.cpp
+#: scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Navigation Layers"
+msgstr "導航模å¼"
+
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Plane"
msgstr "下一個平é¢"
@@ -18835,10 +18927,6 @@ msgid "Could not execute on device."
msgstr "無法於è£ç½®ä¸ŠåŸ·è¡Œã€‚"
#: platform/android/export/export_plugin.cpp
-msgid "Unable to find the 'apksigner' tool."
-msgstr "找ä¸åˆ°ã€Œapksignerã€å·¥å…·ã€‚"
-
-#: platform/android/export/export_plugin.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -18945,12 +19033,17 @@ msgstr "å°ã€ŒTarget Sdkã€çš„修改僅於「Use Custom Buildã€å•Ÿç”¨æ™‚有效ã
msgid "\"Target Sdk\" version must be greater or equal to \"Min Sdk\" version."
msgstr "「Target Sdkã€ç‰ˆæœ¬å¿…須高於或于「Min Sdkã€ç‰ˆæœ¬ä¸€è‡´ã€‚"
+#: platform/android/export/export_plugin.cpp platform/osx/export/export.cpp
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Code Signing"
+msgstr "訊號"
+
#: platform/android/export/export_plugin.cpp
+#, fuzzy
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."
+"'apksigner' could not be found. Please check that the command is available "
+"in the Android SDK build-tools directory. The resulting %s is unsigned."
msgstr ""
"找ä¸åˆ°ã€Œapksigner'ã€ã€‚\n"
"è«‹ç¢ºèªæ­¤å‘½ä»¤å¯ç”¨æ–¼Android SDK build-tools的目錄。\n"
@@ -18969,6 +19062,11 @@ msgid "Could not find keystore, unable to export."
msgstr "找ä¸åˆ°é‡‘鑰儲存å€ï¼Œç„¡æ³•匯出。"
#: platform/android/export/export_plugin.cpp
+#, fuzzy
+msgid "Could not start apksigner executable."
+msgstr "無法啟動å­è™•ç†ç¨‹åºï¼"
+
+#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr "「apksignerã€å›žå‚³éŒ¯èª¤ #%d"
@@ -18997,7 +19095,8 @@ msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr "無效的檔案å稱ï¼Android APK å¿…é ˆè¦æœ‰ *.apk 副檔å。"
#: platform/android/export/export_plugin.cpp
-msgid "Unsupported export format!\n"
+#, fuzzy
+msgid "Unsupported export format!"
msgstr "䏿”¯æ´çš„匯出格å¼ï¼\n"
#: platform/android/export/export_plugin.cpp
@@ -19008,10 +19107,9 @@ msgstr ""
"嘗試自自定建置樣æ¿é€²è¡Œå»ºç½®ï¼Œä½†ç„¡ç‰ˆæœ¬è³‡è¨Šå¯ç”¨ã€‚請自「專案ã€é¸å–®ä¸­é‡æ–°å®‰è£ã€‚"
#: platform/android/export/export_plugin.cpp
+#, fuzzy
msgid ""
-"Android build version mismatch:\n"
-" Template installed: %s\n"
-" Godot Version: %s\n"
+"Android build version mismatch: Template installed: %s, Godot version: %s. "
"Please reinstall Android build template from 'Project' menu."
msgstr ""
"Android 建置版本ä¸ç¬¦åˆï¼š\n"
@@ -19020,12 +19118,14 @@ msgstr ""
"請自「專案ã€ç›®éŒ„䏭釿–°å®‰è£ Android 建置樣æ¿ã€‚"
#: platform/android/export/export_plugin.cpp
+#, fuzzy
msgid ""
-"Unable to overwrite res://android/build/res/*.xml files with project name"
+"Unable to overwrite res://android/build/res/*.xml files with project name."
msgstr "無法以專案å稱覆蓋檔案res://android/build/res/*.xml"
#: platform/android/export/export_plugin.cpp
-msgid "Could not export project files to gradle project\n"
+#, fuzzy
+msgid "Could not export project files to gradle project."
msgstr "無法匯出專案檔至Gradle專案。\n"
#: platform/android/export/export_plugin.cpp
@@ -19037,8 +19137,9 @@ msgid "Building Android Project (gradle)"
msgstr "建置 Android 專案(Gradle)"
#: platform/android/export/export_plugin.cpp
+#, fuzzy
msgid ""
-"Building of Android project failed, check output for the error.\n"
+"Building of Android project failed, check output for the error. "
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
"建置 Android 專案失敗,請檢查輸出以確èªéŒ¯èª¤ã€‚\n"
@@ -19055,7 +19156,8 @@ msgid ""
msgstr "無法複製並更å匯出的檔案,請於 Gradle 專案資料夾內確èªè¼¸å‡ºã€‚"
#: platform/android/export/export_plugin.cpp
-msgid "Package not found: %s"
+#, fuzzy
+msgid "Package not found: \"%s\"."
msgstr "未找到套件:「%sã€"
#: platform/android/export/export_plugin.cpp
@@ -19063,17 +19165,16 @@ msgid "Creating APK..."
msgstr "正在建立APK……"
#: platform/android/export/export_plugin.cpp
-msgid ""
-"Could not find template APK to export:\n"
-"%s"
+#, fuzzy
+msgid "Could not find template APK to export: \"%s\"."
msgstr ""
"找ä¸åˆ°æ¨£æ¿APK以匯出:\n"
"%s"
#: platform/android/export/export_plugin.cpp
+#, fuzzy
msgid ""
-"Missing libraries in the export template for the selected architectures: "
-"%s.\n"
+"Missing libraries in the export template for the selected architectures: %s. "
"Please build a template with all required libraries, or uncheck the missing "
"architectures in the export preset."
msgstr ""
@@ -19085,7 +19186,8 @@ msgid "Adding files..."
msgstr "正在加入檔案 %s……"
#: platform/android/export/export_plugin.cpp
-msgid "Could not export project files"
+#, fuzzy
+msgid "Could not export project files."
msgstr "無法匯出專案檔案"
#: platform/android/export/export_plugin.cpp
@@ -19328,6 +19430,17 @@ msgstr "剪下節點"
msgid "Custom BG Color"
msgstr "剪下節點"
+#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Prepare Templates"
+msgstr "ç®¡ç†æ¨£æ¿"
+
+#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Export template not found."
+msgstr "找ä¸åˆ°è‡ªå®šç¾©ç™¼è¡Œæ¨£æ¿ã€‚"
+
#: platform/iphone/export/export.cpp
msgid "App Store Team ID not specified - cannot configure the project."
msgstr "尚未設定 App Store Team ID - 無法設定專案。"
@@ -19349,22 +19462,35 @@ msgid "Run exported HTML in the system's default browser."
msgstr "在系統的é è¨­ç€è¦½å™¨ä¸­åŸ·è¡Œå·²åŒ¯å‡ºçš„ HTML。"
#: platform/javascript/export/export.cpp
-msgid "Could not open template for export:"
+#, fuzzy
+msgid "Could not open template for export: \"%s\"."
msgstr "無法開啟樣æ¿ä»¥è¼¸å‡ºï¼š"
#: platform/javascript/export/export.cpp
-msgid "Invalid export template:"
+#, fuzzy
+msgid "Invalid export template: \"%s\"."
msgstr "無效的輸出樣æ¿ï¼š"
#: platform/javascript/export/export.cpp
-msgid "Could not write file:"
+#, fuzzy
+msgid "Could not write file: \"%s\"."
msgstr "無法寫入檔案:"
+#: platform/javascript/export/export.cpp platform/osx/export/export.cpp
+#, fuzzy
+msgid "Icon Creation"
+msgstr "設定外邊è·"
+
#: platform/javascript/export/export.cpp
-msgid "Could not read file:"
+#, fuzzy
+msgid "Could not read file: \"%s\"."
msgstr "ç„¡æ³•è®€å–æª”案:"
#: platform/javascript/export/export.cpp
+msgid "PWA"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
#, fuzzy
msgid "Variant"
msgstr "分隔:"
@@ -19439,15 +19565,18 @@ msgid "Icon 512 X 512"
msgstr ""
#: platform/javascript/export/export.cpp
-msgid "Could not read HTML shell:"
+#, fuzzy
+msgid "Could not read HTML shell: \"%s\"."
msgstr "無法讀å–HTML殼層:"
#: platform/javascript/export/export.cpp
-msgid "Could not create HTTP server directory:"
+#, fuzzy
+msgid "Could not create HTTP server directory: %s."
msgstr "無法建立HTTP伺æœå™¨ç›®éŒ„:"
#: platform/javascript/export/export.cpp
-msgid "Error starting HTTP server:"
+#, fuzzy
+msgid "Error starting HTTP server: %d."
msgstr "啟動HTTP伺æœå™¨æ™‚發生錯誤:"
#: platform/javascript/export/export.cpp
@@ -19747,9 +19876,28 @@ msgid "Apple Team ID"
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open icon file \"%s\"."
+msgstr "無法匯出專案檔案"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start xcrun executable."
+msgstr "無法啟動å­è™•ç†ç¨‹åºï¼"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Notarization failed."
+msgstr "本地化"
+
+#: platform/osx/export/export.cpp
+msgid "Notarization request UUID: \"%s\""
+msgstr ""
+
+#: platform/osx/export/export.cpp
msgid ""
-"Note: The notarization process generally takes less than an hour. When the "
-"process is completed, you'll receive an email."
+"The notarization process generally takes less than an hour. When the process "
+"is completed, you'll receive an email."
msgstr ""
#: platform/osx/export/export.cpp
@@ -19765,23 +19913,78 @@ msgid ""
msgstr ""
#: platform/osx/export/export.cpp
+msgid "Timestamping is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Hardened Runtime is not compatible with ad-hoc signature, and was disabled!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign failed with error \"%s\"."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Built-in CodeSign require regex module."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid ""
+"Could not start codesign executable, make sure Xcode command line tools are "
+"installed."
+msgstr ""
+
+#: platform/osx/export/export.cpp platform/windows/export/export.cpp
#, fuzzy
msgid "No identity found."
msgstr "未發ç¾ä»»ä½•圖示。"
#: platform/osx/export/export.cpp
#, fuzzy
+msgid "Cannot sign file %s."
+msgstr "無法ä¿å­˜æª”案:%s"
+
+#: platform/osx/export/export.cpp
+msgid "Relative symlinks are not supported, exported \"%s\" might be broken!"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "DMG Creation"
+msgstr "æ–¹å‘"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not start hdiutil executable."
+msgstr "無法啟動å­è™•ç†ç¨‹åºï¼"
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed - file exists."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "`hdiutil create` failed."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+#, fuzzy
msgid "Creating app bundle"
msgstr "正在建立縮圖"
#: platform/osx/export/export.cpp
#, fuzzy
-msgid "Could not find template app to export:"
+msgid "Could not find template app to export: \"%s\"."
msgstr ""
"找ä¸åˆ°æ¨£æ¿APK以匯出:\n"
"%s"
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Invalid export format."
+msgstr "無效的輸出樣æ¿ï¼š"
+
+#: platform/osx/export/export.cpp
msgid ""
"Relative symlinks are not supported on this OS, the exported project might "
"be broken!"
@@ -19789,7 +19992,7 @@ msgstr ""
#: platform/osx/export/export.cpp
msgid ""
-"Requested template binary '%s' not found. It might be missing from your "
+"Requested template binary \"%s\" not found. It might be missing from your "
"template archive."
msgstr ""
@@ -19830,6 +20033,16 @@ msgid "Sending archive for notarization"
msgstr ""
#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "ZIP Creation"
+msgstr "專案"
+
+#: platform/osx/export/export.cpp
+#, fuzzy
+msgid "Could not open file to read from path \"%s\"."
+msgstr "無法匯出專案檔至Gradle專案。\n"
+
+#: platform/osx/export/export.cpp
msgid "Invalid bundle identifier:"
msgstr "無效的æ†ç¶è­˜åˆ¥ç¬¦ï¼š"
@@ -20145,6 +20358,11 @@ msgid "Debug Algorithm"
msgstr "除錯工具"
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to rename temporary file \"%s\"."
+msgstr "無法移除臨時檔案:"
+
+#: platform/windows/export/export.cpp
msgid "Identity Type"
msgstr ""
@@ -20192,6 +20410,70 @@ msgid "Trademarks"
msgstr ""
#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Resources Modification"
+msgstr "隨機旋轉:"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find rcedit executable at \"%s\"."
+msgstr "找ä¸åˆ°é‡‘鑰儲存å€ï¼Œç„¡æ³•匯出。"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find wine executable at \"%s\"."
+msgstr "找ä¸åˆ°é‡‘鑰儲存å€ï¼Œç„¡æ³•匯出。"
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start rcedit executable, configure rcedit path in the Editor "
+"Settings (Export > Windows > Rcedit)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"rcedit failed to modify executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find signtool executable at \"%s\"."
+msgstr "找ä¸åˆ°é‡‘鑰儲存å€ï¼Œç„¡æ³•匯出。"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Could not find osslsigncode executable at \"%s\"."
+msgstr "找ä¸åˆ°é‡‘鑰儲存å€ï¼Œç„¡æ³•匯出。"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid identity type."
+msgstr "無效的識別符:"
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Invalid timestamp server."
+msgstr "無效的å稱。"
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Could not start signtool executable, configure signtool path in the Editor "
+"Settings (Export > Windows > Signtool)."
+msgstr ""
+
+#: platform/windows/export/export.cpp
+msgid ""
+"Signtool failed to sign executable:\n"
+"%s"
+msgstr ""
+
+#: platform/windows/export/export.cpp
+#, fuzzy
+msgid "Failed to remove temporary file \"%s\"."
+msgstr "無法移除臨時檔案:"
+
+#: platform/windows/export/export.cpp
msgid ""
"The rcedit tool must be configured in the Editor Settings (Export > Windows "
"> Rcedit) to change the icon or app information data."
@@ -20213,6 +20495,23 @@ msgid "Invalid product version:"
msgstr "ç„¡æ•ˆçš„ç”¢å“ GUID。"
#: platform/windows/export/export.cpp
+msgid "Windows executables cannot be >= 4 GiB."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+#, fuzzy
+msgid "Failed to open executable file \"%s\"."
+msgstr "無效的副檔å。"
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable file header corrupted."
+msgstr ""
+
+#: platform/windows/export/export.cpp platform/x11/export/export.cpp
+msgid "Executable \"pck\" section not found."
+msgstr ""
+
+#: platform/windows/export/export.cpp
#, fuzzy
msgid "Windows"
msgstr "新視窗"
@@ -20229,6 +20528,10 @@ msgstr ""
msgid "Wine"
msgstr ""
+#: platform/x11/export/export.cpp
+msgid "32-bit executables cannot have embedded data >= 4 GiB."
+msgstr ""
+
#: scene/2d/animated_sprite.cpp scene/3d/sprite_3d.cpp
#: scene/resources/texture.cpp
#, fuzzy
@@ -20356,7 +20659,8 @@ msgstr ""
#: scene/2d/audio_stream_player_2d.cpp scene/3d/audio_stream_player_3d.cpp
#: scene/3d/light.cpp scene/3d/reflection_probe.cpp
-#: scene/3d/visual_instance.cpp scene/resources/material.cpp
+#: scene/3d/visibility_notifier.cpp scene/3d/visual_instance.cpp
+#: scene/resources/material.cpp
#, fuzzy
msgid "Max Distance"
msgstr "鏿“‡è·é›¢ï¼š"
@@ -21159,6 +21463,18 @@ msgstr ""
msgid "Edge Connection Margin"
msgstr "編輯連接內容:"
+#: scene/2d/navigation_2d.cpp
+msgid ""
+"'Navigation2D' node and 'Navigation2D.get_simple_path()' are deprecated and "
+"will be removed in a future version. Use 'Navigation2DServer.map_get_path()' "
+"instead."
+msgstr ""
+
+#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
+#, fuzzy
+msgid "Path Desired Distance"
+msgstr "鏿“‡è·é›¢ï¼š"
+
#: scene/2d/navigation_agent_2d.cpp scene/3d/navigation_agent.cpp
msgid "Target Desired Distance"
msgstr ""
@@ -21216,17 +21532,19 @@ msgstr ""
"多邊形。"
#: scene/2d/navigation_polygon.cpp
-msgid ""
-"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
-"node. It only provides navigation data."
-msgstr ""
-"NavigationPolygonInstance 必須是 Navigation2D 節點的å­ç´šæˆ–次å­ç´šã€‚其僅æä¾›å°Ž"
-"航資料。"
-
-#: scene/2d/navigation_polygon.cpp
msgid "Navpoly"
msgstr ""
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Enter Cost"
+msgstr "中下"
+
+#: scene/2d/navigation_polygon.cpp scene/3d/navigation_mesh_instance.cpp
+#, fuzzy
+msgid "Travel Cost"
+msgstr "行程"
+
#: scene/2d/node_2d.cpp scene/2d/polygon_2d.cpp scene/3d/spatial.cpp
#: scene/main/canvas_layer.cpp
#, fuzzy
@@ -22414,6 +22732,13 @@ msgstr ""
msgid "Transform Normals"
msgstr "已中止變æ›ã€‚"
+#: scene/3d/navigation.cpp
+msgid ""
+"'Navigation' node and 'Navigation.get_simple_path()' are deprecated and will "
+"be removed in a future version. Use 'NavigationServer.map_get_path()' "
+"instead."
+msgstr ""
+
#: scene/3d/navigation.cpp scene/resources/curve.cpp
#, fuzzy
msgid "Up Vector"
@@ -22438,14 +22763,6 @@ msgid ""
"The NavigationAgent can be used only under a Spatial inheriting parent node."
msgstr ""
-#: scene/3d/navigation_mesh_instance.cpp
-msgid ""
-"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
-"It only provides navigation data."
-msgstr ""
-"NavigationMeshInstance 必須為 Navigation 節點的å­ç¯€é»žæˆ–次級å­ç¯€é»žã€‚其僅æä¾›å°Ž"
-"航資料。"
-
#: scene/3d/navigation_mesh_instance.cpp scene/resources/mesh_library.cpp
#, fuzzy
msgid "NavMesh"
@@ -25170,6 +25487,16 @@ msgid "3D Physics"
msgstr "物ç†"
#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "2D Navigation"
+msgstr "導航"
+
+#: scene/register_scene_types.cpp
+#, fuzzy
+msgid "3D Navigation"
+msgstr "導航"
+
+#: scene/register_scene_types.cpp
msgid "Use hiDPI"
msgstr ""
@@ -26599,7 +26926,7 @@ msgstr "轉場: "
msgid "Refraction"
msgstr "分隔:"
-#: scene/resources/material.cpp scene/resources/navigation_mesh.cpp
+#: scene/resources/material.cpp
msgid "Detail"
msgstr ""
@@ -26684,7 +27011,12 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
-msgid "Sample Partition Type"
+msgid "Sampling"
+msgstr "縮放: "
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Partition Type"
msgstr "設定變數型別"
#: scene/resources/navigation_mesh.cpp
@@ -26702,10 +27034,15 @@ msgid "Source Group Name"
msgstr "來æº"
#: scene/resources/navigation_mesh.cpp
-msgid "Agent"
+msgid "Cells"
msgstr ""
#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Agents"
+msgstr "主場景引數:"
+
+#: scene/resources/navigation_mesh.cpp
msgid "Max Climb"
msgstr ""
@@ -26715,11 +27052,16 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
+msgid "Regions"
+msgstr "å€åŸŸ"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
msgid "Merge Size"
msgstr "自場景åˆä½µ"
#: scene/resources/navigation_mesh.cpp
-msgid "Edge"
+msgid "Edges"
msgstr ""
#: scene/resources/navigation_mesh.cpp
@@ -26733,6 +27075,11 @@ msgstr ""
#: scene/resources/navigation_mesh.cpp
#, fuzzy
+msgid "Details"
+msgstr "顯示é è¨­"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
msgid "Sample Distance"
msgstr "鏿“‡è·é›¢ï¼š"
@@ -26750,9 +27097,19 @@ msgid "Ledge Spans"
msgstr ""
#: scene/resources/navigation_mesh.cpp
-msgid "Filter Walkable Low Height Spans"
+msgid "Walkable Low Height Spans"
msgstr ""
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB"
+msgstr "正在產生 AABB"
+
+#: scene/resources/navigation_mesh.cpp
+#, fuzzy
+msgid "Baking AABB Offset"
+msgstr "å移:"
+
#: scene/resources/occluder_shape.cpp
msgid "Spheres"
msgstr ""
@@ -27165,6 +27522,11 @@ msgid "Scenario"
msgstr "場景"
#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Navigation Map"
+msgstr "導航"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
msgid "Direct Space State"
msgstr ""
@@ -27182,6 +27544,26 @@ msgstr "左線性"
msgid "Default Angular Damp"
msgstr ""
+#: scene/resources/world.cpp
+#, fuzzy
+msgid "Default Map Up"
+msgstr "é è¨­æµ®é»žæ•¸é–“éš”"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Size"
+msgstr "é è¨­é è¦½"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Cell Height"
+msgstr "測試"
+
+#: scene/resources/world.cpp scene/resources/world_2d.cpp
+#, fuzzy
+msgid "Default Edge Connection Margin"
+msgstr "編輯連接內容:"
+
#: scene/resources/world_2d.cpp
msgid "Canvas"
msgstr ""
diff --git a/main/main.cpp b/main/main.cpp
index 309ca33264..f3c56c7205 100644
--- a/main/main.cpp
+++ b/main/main.cpp
@@ -65,6 +65,8 @@
#include "servers/audio_server.h"
#include "servers/camera_server.h"
#include "servers/display_server.h"
+#include "servers/movie_writer/movie_writer.h"
+#include "servers/movie_writer/movie_writer_mjpeg.h"
#include "servers/navigation_server_2d.h"
#include "servers/navigation_server_3d.h"
#include "servers/physics_server_2d.h"
@@ -179,6 +181,9 @@ static bool debug_navigation = false;
static int frame_delay = 0;
static bool disable_render_loop = false;
static int fixed_fps = -1;
+static String write_movie_path;
+static MovieWriter *movie_writer = nullptr;
+static bool disable_vsync = false;
static bool print_fps = false;
#ifdef TOOLS_ENABLED
static bool dump_extension_api = false;
@@ -326,6 +331,8 @@ void Main::print_help(const char *p_binary) {
OS::get_singleton()->print(" --text-driver <driver> Text driver (Fonts, BiDi, shaping)\n");
OS::get_singleton()->print(" --tablet-driver <driver> Pen tablet input driver.\n");
OS::get_singleton()->print(" --headless Enable headless mode (--display-driver headless --audio-driver Dummy). Useful for servers and with --script.\n");
+ OS::get_singleton()->print(" --write-movie <file> Run the engine in a way that a movie is written (by default .avi MJPEG). Fixed FPS is forced when enabled, but can be used to change movie FPS. Disabling vsync can speed up movie writing but makes interaction more difficult.\n");
+ OS::get_singleton()->print(" --disable-vsync Force disabling of vsync. Run the engine in a way that a movie is written (by default .avi MJPEG). Fixed FPS is forced when enabled, but can be used to change movie FPS.\n");
OS::get_singleton()->print("\n");
@@ -605,7 +612,9 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
GLOBAL_DEF_RST("application/run/flush_stdout_on_print.debug", true);
GLOBAL_DEF("debug/settings/crash_handler/message",
- String("Please include this when reporting the bug on https://github.com/godotengine/godot/issues"));
+ String("Please include this when reporting the bug to the project developer."));
+ GLOBAL_DEF("debug/settings/crash_handler/message.editor",
+ String("Please include this when reporting the bug on: https://github.com/godotengine/godot/issues"));
MAIN_PRINT("Main: Parse CMDLine");
@@ -1138,6 +1147,20 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
OS::get_singleton()->print("Missing fixed-fps argument, aborting.\n");
goto error;
}
+ } else if (I->get() == "--write-movie") {
+ if (I->next()) {
+ write_movie_path = I->next()->get();
+ N = I->next()->next();
+ if (fixed_fps == -1) {
+ fixed_fps = 60;
+ }
+ OS::get_singleton()->_writing_movie = true;
+ } else {
+ OS::get_singleton()->print("Missing write-movie argument, aborting.\n");
+ goto error;
+ }
+ } else if (I->get() == "--disable-vsync") {
+ disable_vsync = true;
} else if (I->get() == "--print-fps") {
print_fps = true;
} else if (I->get() == "--profile-gpu") {
@@ -1464,7 +1487,13 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
}
if (audio_driver_idx < 0) {
- audio_driver_idx = 0;
+ audio_driver_idx = 0; // 0 Is always available as the dummy driver (no sound)
+ }
+
+ if (write_movie_path != String()) {
+ // Always use dummy driver for audio driver (which is last), also in no threaded mode.
+ audio_driver_idx = AudioDriverManager::get_driver_count() - 1;
+ AudioDriverDummy::get_dummy_singleton()->set_use_threads(false);
}
{
@@ -1472,6 +1501,9 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
}
{
window_vsync_mode = DisplayServer::VSyncMode(int(GLOBAL_DEF("display/window/vsync/vsync_mode", DisplayServer::VSyncMode::VSYNC_ENABLED)));
+ if (disable_vsync) {
+ window_vsync_mode = DisplayServer::VSyncMode::VSYNC_DISABLED;
+ }
}
Engine::get_singleton()->set_physics_ticks_per_second(GLOBAL_DEF_BASIC("physics/common/physics_ticks_per_second", 60));
ProjectSettings::get_singleton()->set_custom_property_info("physics/common/physics_ticks_per_second",
@@ -1511,7 +1543,11 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
"0,33200,1,or_greater")); // No negative numbers
GLOBAL_DEF("display/window/ios/hide_home_indicator", true);
- GLOBAL_DEF("input_devices/pointing/ios/touch_delay", 0.150);
+ GLOBAL_DEF("input_devices/pointing/ios/touch_delay", 0.15);
+ ProjectSettings::get_singleton()->set_custom_property_info("input_devices/pointing/ios/touch_delay",
+ PropertyInfo(Variant::FLOAT,
+ "input_devices/pointing/ios/touch_delay",
+ PROPERTY_HINT_RANGE, "0,1,0.001"));
// XR project settings.
GLOBAL_DEF_RST_BASIC("xr/openxr/enabled", false);
@@ -1551,6 +1587,7 @@ error:
display_driver = "";
audio_driver = "";
tablet_driver = "";
+ write_movie_path = "";
project_path = "";
args.clear();
@@ -1723,6 +1760,14 @@ Error Main::setup2(Thread::ID p_main_tid_override) {
rendering_server->set_print_gpu_profile(true);
}
+ if (write_movie_path != String()) {
+ movie_writer = MovieWriter::find_writer_for_file(write_movie_path);
+ if (movie_writer == nullptr) {
+ ERR_PRINT("Can't find movie writer for file type, aborting: " + write_movie_path);
+ write_movie_path = String();
+ }
+ }
+
#ifdef UNIX_ENABLED
// Print warning after initializing the renderer but before initializing audio.
if (OS::get_singleton()->get_environment("USER") == "root" && !OS::get_singleton()->has_environment("GODOT_SILENCE_ROOT_WARNING")) {
@@ -2651,6 +2696,9 @@ bool Main::start() {
OS::get_singleton()->set_main_loop(main_loop);
+ if (movie_writer) {
+ movie_writer->begin(DisplayServer::get_singleton()->window_get_size(), fixed_fps, write_movie_path);
+ }
return true;
}
@@ -2837,6 +2885,13 @@ bool Main::iteration() {
Input::get_singleton()->flush_buffered_events();
}
+ if (movie_writer) {
+ RID main_vp_rid = RenderingServer::get_singleton()->viewport_find_from_screen_attachment(DisplayServer::MAIN_WINDOW_ID);
+ RID main_vp_texture = RenderingServer::get_singleton()->viewport_get_texture(main_vp_rid);
+ Ref<Image> vp_tex = RenderingServer::get_singleton()->texture_2d_get(main_vp_texture);
+ movie_writer->add_frame(vp_tex);
+ }
+
if (fixed_fps != -1) {
return exit;
}
@@ -2876,6 +2931,10 @@ void Main::cleanup(bool p_force) {
ERR_FAIL_COND(!_start_success);
}
+ if (movie_writer) {
+ movie_writer->end();
+ }
+
ResourceLoader::remove_custom_loaders();
ResourceSaver::remove_custom_savers();
diff --git a/misc/scripts/check_ci_log.py b/misc/scripts/check_ci_log.py
index 2c75b83bd7..1e5a12eeb4 100755
--- a/misc/scripts/check_ci_log.py
+++ b/misc/scripts/check_ci_log.py
@@ -25,6 +25,8 @@ if (
file_contents.find("Program crashed with signal") != -1
or file_contents.find("Dumping the backtrace") != -1
or file_contents.find("Segmentation fault (core dumped)") != -1
+ or file_contents.find("Aborted (core dumped)") != -1
+ or file_contents.find("terminate called without an active exception") != -1
):
print("FATAL ERROR: Godot has been crashed.")
sys.exit(52)
diff --git a/misc/scripts/codespell.sh b/misc/scripts/codespell.sh
index f99c5d22b2..f99c5d22b2 100644..100755
--- a/misc/scripts/codespell.sh
+++ b/misc/scripts/codespell.sh
diff --git a/modules/csg/csg.h b/modules/csg/csg.h
index 53a9e5d722..738e3d68ea 100644
--- a/modules/csg/csg.h
+++ b/modules/csg/csg.h
@@ -130,9 +130,9 @@ struct CSGBrushOperation {
struct VertexKeyHash {
static _FORCE_INLINE_ uint32_t hash(const VertexKey &p_vk) {
- uint32_t h = hash_djb2_one_32(p_vk.x);
- h = hash_djb2_one_32(p_vk.y, h);
- h = hash_djb2_one_32(p_vk.z, h);
+ uint32_t h = hash_murmur3_one_32(p_vk.x);
+ h = hash_murmur3_one_32(p_vk.y, h);
+ h = hash_murmur3_one_32(p_vk.z, h);
return h;
}
};
diff --git a/modules/csg/csg_shape.h b/modules/csg/csg_shape.h
index 0eaf5c3727..0b49dc4609 100644
--- a/modules/csg/csg_shape.h
+++ b/modules/csg/csg_shape.h
@@ -74,9 +74,9 @@ private:
struct Vector3Hasher {
_ALWAYS_INLINE_ uint32_t hash(const Vector3 &p_vec3) const {
- uint32_t h = hash_djb2_one_float(p_vec3.x);
- h = hash_djb2_one_float(p_vec3.y, h);
- h = hash_djb2_one_float(p_vec3.z, h);
+ uint32_t h = hash_murmur3_one_float(p_vec3.x);
+ h = hash_murmur3_one_float(p_vec3.y, h);
+ h = hash_murmur3_one_float(p_vec3.z, h);
return h;
}
};
diff --git a/modules/gdscript/editor/script_templates/EditorScenePostImport/basic_import_script.gd b/modules/gdscript/editor/script_templates/EditorScenePostImport/basic_import_script.gd
index b4b2305b8c..556afe994b 100644
--- a/modules/gdscript/editor/script_templates/EditorScenePostImport/basic_import_script.gd
+++ b/modules/gdscript/editor/script_templates/EditorScenePostImport/basic_import_script.gd
@@ -5,7 +5,5 @@ extends EditorScenePostImport
# Called by the editor when a scene has this script set as the import script in the import tab.
func _post_import(scene: Node) -> Object:
- # Modify the contents of the scene upon import. For example, setting up LODs:
-# (scene.get_node(^"HighPolyMesh") as MeshInstance3D).draw_distance_end = 5.0
-# (scene.get_node(^"LowPolyMesh") as MeshInstance3D).draw_distance_begin = 5.0
+ # Modify the contents of the scene upon import.
return scene # Return the modified root node when you're done.
diff --git a/modules/gdscript/gdscript.cpp b/modules/gdscript/gdscript.cpp
index 64258ee8d3..e6aeef2fd1 100644
--- a/modules/gdscript/gdscript.cpp
+++ b/modules/gdscript/gdscript.cpp
@@ -62,7 +62,7 @@ GDScriptNativeClass::GDScriptNativeClass(const StringName &p_name) {
bool GDScriptNativeClass::_get(const StringName &p_name, Variant &r_ret) const {
bool ok;
- int v = ClassDB::get_integer_constant(name, p_name, &ok);
+ int64_t v = ClassDB::get_integer_constant(name, p_name, &ok);
if (ok) {
r_ret = v;
@@ -1254,6 +1254,14 @@ GDScript::~GDScript() {
memdelete(E.value);
}
+ if (implicit_initializer) {
+ memdelete(implicit_initializer);
+ }
+
+ if (implicit_ready) {
+ memdelete(implicit_ready);
+ }
+
if (GDScriptCache::singleton) { // Cache may have been already destroyed at engine shutdown.
GDScriptCache::remove_script(get_path());
}
@@ -1541,6 +1549,18 @@ bool GDScriptInstance::has_method(const StringName &p_method) const {
Variant GDScriptInstance::callp(const StringName &p_method, const Variant **p_args, int p_argcount, Callable::CallError &r_error) {
GDScript *sptr = script.ptr();
+ if (unlikely(p_method == SNAME("_ready"))) {
+ // Call implicit ready first, including for the super classes.
+ while (sptr) {
+ if (sptr->implicit_ready) {
+ sptr->implicit_ready->call(this, nullptr, 0, r_error);
+ }
+ sptr = sptr->_base;
+ }
+
+ // Reset this back for the regular call.
+ sptr = script.ptr();
+ }
while (sptr) {
HashMap<StringName, GDScriptFunction *>::Iterator E = sptr->member_functions.find(p_method);
if (E) {
diff --git a/modules/gdscript/gdscript.h b/modules/gdscript/gdscript.h
index 80f187a375..feb0a237df 100644
--- a/modules/gdscript/gdscript.h
+++ b/modules/gdscript/gdscript.h
@@ -120,6 +120,7 @@ class GDScript : public Script {
GDScriptFunction *implicit_initializer = nullptr;
GDScriptFunction *initializer = nullptr; //direct pointer to new , faster to locate
+ GDScriptFunction *implicit_ready = nullptr;
int subclass_count = 0;
RBSet<Object *> instances;
@@ -368,7 +369,7 @@ public:
if (_debug_call_stack_pos >= _debug_max_call_stack) {
//stack overflow
- _debug_error = "Stack Overflow (Stack Size: " + itos(_debug_max_call_stack) + ")";
+ _debug_error = vformat("Stack overflow (stack size: %s). Check for infinite recursion in your script.", _debug_max_call_stack);
EngineDebugger::get_script_debugger()->debug(this);
return;
}
diff --git a/modules/gdscript/gdscript_analyzer.cpp b/modules/gdscript/gdscript_analyzer.cpp
index a070d319f3..ea994654bf 100644
--- a/modules/gdscript/gdscript_analyzer.cpp
+++ b/modules/gdscript/gdscript_analyzer.cpp
@@ -2278,6 +2278,7 @@ void GDScriptAnalyzer::reduce_call(GDScriptParser::CallNode *p_call, bool p_is_a
push_error(vformat(R"(Too few arguments for %s constructor. Received %d but expected %d.)", Variant::get_type_name(builtin_type), p_call->arguments.size(), err.expected), p_call);
break;
case Callable::CallError::CALL_ERROR_INSTANCE_IS_NULL:
+ case Callable::CallError::CALL_ERROR_METHOD_NOT_CONST:
break; // Can't happen in a builtin constructor.
case Callable::CallError::CALL_OK:
p_call->is_constant = true;
@@ -2380,6 +2381,7 @@ void GDScriptAnalyzer::reduce_call(GDScriptParser::CallNode *p_call, bool p_is_a
case Callable::CallError::CALL_ERROR_TOO_FEW_ARGUMENTS:
push_error(vformat(R"*(Too few arguments for "%s()" call. Expected at least %d but received %d.)*", function_name, err.expected, p_call->arguments.size()), p_call);
break;
+ case Callable::CallError::CALL_ERROR_METHOD_NOT_CONST:
case Callable::CallError::CALL_ERROR_INSTANCE_IS_NULL:
break; // Can't happen in a builtin constructor.
case Callable::CallError::CALL_OK:
@@ -2422,6 +2424,7 @@ void GDScriptAnalyzer::reduce_call(GDScriptParser::CallNode *p_call, bool p_is_a
case Callable::CallError::CALL_ERROR_TOO_FEW_ARGUMENTS:
push_error(vformat(R"*(Too few arguments for "%s()" call. Expected at least %d but received %d.)*", function_name, err.expected, p_call->arguments.size()), p_call);
break;
+ case Callable::CallError::CALL_ERROR_METHOD_NOT_CONST:
case Callable::CallError::CALL_ERROR_INSTANCE_IS_NULL:
break; // Can't happen in a builtin constructor.
case Callable::CallError::CALL_OK:
@@ -2900,7 +2903,7 @@ void GDScriptAnalyzer::reduce_identifier_from_base(GDScriptParser::IdentifierNod
return;
}
bool valid = false;
- int int_constant = ClassDB::get_integer_constant(native, name, &valid);
+ int64_t int_constant = ClassDB::get_integer_constant(native, name, &valid);
if (valid) {
p_identifier->is_constant = true;
p_identifier->reduced_value = int_constant;
diff --git a/modules/gdscript/gdscript_byte_codegen.cpp b/modules/gdscript/gdscript_byte_codegen.cpp
index 3d5a39bf38..6a1effd680 100644
--- a/modules/gdscript/gdscript_byte_codegen.cpp
+++ b/modules/gdscript/gdscript_byte_codegen.cpp
@@ -1336,6 +1336,18 @@ void GDScriptByteCodeGenerator::write_endif() {
if_jmp_addrs.pop_back();
}
+void GDScriptByteCodeGenerator::write_jump_if_shared(const Address &p_value) {
+ append(GDScriptFunction::OPCODE_JUMP_IF_SHARED, 1);
+ append(p_value);
+ if_jmp_addrs.push_back(opcodes.size());
+ append(0); // Jump destination, will be patched.
+}
+
+void GDScriptByteCodeGenerator::write_end_jump_if_shared() {
+ patch_jump(if_jmp_addrs.back()->get());
+ if_jmp_addrs.pop_back();
+}
+
void GDScriptByteCodeGenerator::start_for(const GDScriptDataType &p_iterator_type, const GDScriptDataType &p_list_type) {
Address counter(Address::LOCAL_VARIABLE, add_local("@counter_pos", p_iterator_type), p_iterator_type);
Address container(Address::LOCAL_VARIABLE, add_local("@container_pos", p_list_type), p_list_type);
diff --git a/modules/gdscript/gdscript_byte_codegen.h b/modules/gdscript/gdscript_byte_codegen.h
index 6ee8fda533..f4b402fc96 100644
--- a/modules/gdscript/gdscript_byte_codegen.h
+++ b/modules/gdscript/gdscript_byte_codegen.h
@@ -479,6 +479,8 @@ public:
virtual void write_if(const Address &p_condition) override;
virtual void write_else() override;
virtual void write_endif() override;
+ virtual void write_jump_if_shared(const Address &p_value) override;
+ virtual void write_end_jump_if_shared() override;
virtual void start_for(const GDScriptDataType &p_iterator_type, const GDScriptDataType &p_list_type) override;
virtual void write_for_assignment(const Address &p_variable, const Address &p_list) override;
virtual void write_for() override;
diff --git a/modules/gdscript/gdscript_codegen.h b/modules/gdscript/gdscript_codegen.h
index 326b66a295..81fa265aca 100644
--- a/modules/gdscript/gdscript_codegen.h
+++ b/modules/gdscript/gdscript_codegen.h
@@ -140,6 +140,8 @@ public:
virtual void write_if(const Address &p_condition) = 0;
virtual void write_else() = 0;
virtual void write_endif() = 0;
+ virtual void write_jump_if_shared(const Address &p_value) = 0;
+ virtual void write_end_jump_if_shared() = 0;
virtual void start_for(const GDScriptDataType &p_iterator_type, const GDScriptDataType &p_list_type) = 0;
virtual void write_for_assignment(const Address &p_variable, const Address &p_list) = 0;
virtual void write_for() = 0;
diff --git a/modules/gdscript/gdscript_compiler.cpp b/modules/gdscript/gdscript_compiler.cpp
index b2cce9d8ee..6055d3df33 100644
--- a/modules/gdscript/gdscript_compiler.cpp
+++ b/modules/gdscript/gdscript_compiler.cpp
@@ -312,7 +312,7 @@ GDScriptCodeGenerator::Address GDScriptCompiler::_parse_expression(CodeGen &code
// Class C++ integer constant.
if (nc) {
bool success = false;
- int constant = ClassDB::get_integer_constant(nc->get_name(), identifier, &success);
+ int64_t constant = ClassDB::get_integer_constant(nc->get_name(), identifier, &success);
if (success) {
return codegen.add_constant(constant);
}
@@ -1056,13 +1056,25 @@ GDScriptCodeGenerator::Address GDScriptCompiler::_parse_expression(CodeGen &code
// Set back the values into their bases.
for (const ChainInfo &info : set_chain) {
- if (!info.is_named) {
- gen->write_set(info.base, info.key, assigned);
- if (info.key.mode == GDScriptCodeGenerator::Address::TEMPORARY) {
- gen->pop_temporary();
+ bool known_type = assigned.type.has_type;
+ bool is_shared = Variant::is_type_shared(assigned.type.builtin_type);
+
+ if (!known_type || !is_shared) {
+ if (!known_type) {
+ // Jump shared values since they are already updated in-place.
+ gen->write_jump_if_shared(assigned);
+ }
+ if (!info.is_named) {
+ gen->write_set(info.base, info.key, assigned);
+ } else {
+ gen->write_set_named(info.base, info.name, assigned);
+ }
+ if (!known_type) {
+ gen->write_end_jump_if_shared();
}
- } else {
- gen->write_set_named(info.base, info.name, assigned);
+ }
+ if (!info.is_named && info.key.mode == GDScriptCodeGenerator::Address::TEMPORARY) {
+ gen->pop_temporary();
}
if (assigned.mode == GDScriptCodeGenerator::Address::TEMPORARY) {
gen->pop_temporary();
@@ -1070,19 +1082,35 @@ GDScriptCodeGenerator::Address GDScriptCompiler::_parse_expression(CodeGen &code
assigned = info.base;
}
- // If this is a class member property, also assign to it.
- // This allow things like: position.x += 2.0
- if (assign_class_member_property != StringName()) {
- gen->write_set_member(assigned, assign_class_member_property);
- }
- // Same as above but for members
- if (is_member_property) {
- if (member_property_has_setter && !member_property_is_in_setter) {
- Vector<GDScriptCodeGenerator::Address> args;
- args.push_back(assigned);
- gen->write_call(GDScriptCodeGenerator::Address(), GDScriptCodeGenerator::Address(GDScriptCodeGenerator::Address::SELF), member_property_setter_function, args);
- } else {
- gen->write_assign(target_member_property, assigned);
+ bool known_type = assigned.type.has_type;
+ bool is_shared = Variant::is_type_shared(assigned.type.builtin_type);
+
+ if (!known_type || !is_shared) {
+ // If this is a class member property, also assign to it.
+ // This allow things like: position.x += 2.0
+ if (assign_class_member_property != StringName()) {
+ if (!known_type) {
+ gen->write_jump_if_shared(assigned);
+ }
+ gen->write_set_member(assigned, assign_class_member_property);
+ if (!known_type) {
+ gen->write_end_jump_if_shared();
+ }
+ } else if (is_member_property) {
+ // Same as above but for script members.
+ if (!known_type) {
+ gen->write_jump_if_shared(assigned);
+ }
+ if (member_property_has_setter && !member_property_is_in_setter) {
+ Vector<GDScriptCodeGenerator::Address> args;
+ args.push_back(assigned);
+ gen->write_call(GDScriptCodeGenerator::Address(), GDScriptCodeGenerator::Address(GDScriptCodeGenerator::Address::SELF), member_property_setter_function, args);
+ } else {
+ gen->write_assign(target_member_property, assigned);
+ }
+ if (!known_type) {
+ gen->write_end_jump_if_shared();
+ }
}
}
@@ -1990,18 +2018,18 @@ GDScriptFunction *GDScriptCompiler::_parse_function(Error &r_error, GDScript *p_
// Parse initializer if applies.
bool is_implicit_initializer = !p_for_ready && !p_func && !p_for_lambda;
- bool is_initializer = p_func && !p_for_lambda && String(p_func->identifier->name) == GDScriptLanguage::get_singleton()->strings._init;
- bool is_for_ready = p_for_ready || (p_func && !p_for_lambda && String(p_func->identifier->name) == "_ready");
+ bool is_initializer = p_func && !p_for_lambda && p_func->identifier->name == GDScriptLanguage::get_singleton()->strings._init;
+ bool is_implicit_ready = !p_func && p_for_ready;
- if (!p_for_lambda && (is_implicit_initializer || is_for_ready)) {
+ if (!p_for_lambda && (is_implicit_initializer || is_implicit_ready)) {
// Initialize class fields.
for (int i = 0; i < p_class->members.size(); i++) {
if (p_class->members[i].type != GDScriptParser::ClassNode::Member::VARIABLE) {
continue;
}
const GDScriptParser::VariableNode *field = p_class->members[i].variable;
- if (field->onready != is_for_ready) {
- // Only initialize in _ready.
+ if (field->onready != is_implicit_ready) {
+ // Only initialize in @implicit_ready.
continue;
}
@@ -2123,6 +2151,8 @@ GDScriptFunction *GDScriptCompiler::_parse_function(Error &r_error, GDScript *p_
p_script->initializer = gd_function;
} else if (is_implicit_initializer) {
p_script->implicit_initializer = gd_function;
+ } else if (is_implicit_ready) {
+ p_script->implicit_ready = gd_function;
}
if (p_func) {
@@ -2140,7 +2170,7 @@ GDScriptFunction *GDScriptCompiler::_parse_function(Error &r_error, GDScript *p_
#endif
}
- if (!p_for_lambda) {
+ if (!is_implicit_initializer && !is_implicit_ready && !p_for_lambda) {
p_script->member_functions[func_name] = gd_function;
}
@@ -2208,11 +2238,19 @@ Error GDScriptCompiler::_parse_class_level(GDScript *p_script, const GDScriptPar
for (const KeyValue<StringName, GDScriptFunction *> &E : p_script->member_functions) {
memdelete(E.value);
}
+ if (p_script->implicit_initializer) {
+ memdelete(p_script->implicit_initializer);
+ }
+ if (p_script->implicit_ready) {
+ memdelete(p_script->implicit_ready);
+ }
p_script->member_functions.clear();
p_script->member_indices.clear();
p_script->member_info.clear();
p_script->_signals.clear();
p_script->initializer = nullptr;
+ p_script->implicit_initializer = nullptr;
+ p_script->implicit_ready = nullptr;
p_script->tool = parser->is_tool();
p_script->name = p_class->identifier ? p_class->identifier->name : "";
@@ -2456,15 +2494,10 @@ Error GDScriptCompiler::_parse_class_level(GDScript *p_script, const GDScriptPar
Error GDScriptCompiler::_parse_class_blocks(GDScript *p_script, const GDScriptParser::ClassNode *p_class, bool p_keep_state) {
//parse methods
- bool has_ready = false;
-
for (int i = 0; i < p_class->members.size(); i++) {
const GDScriptParser::ClassNode::Member &member = p_class->members[i];
if (member.type == member.FUNCTION) {
const GDScriptParser::FunctionNode *function = member.function;
- if (!has_ready && function->identifier->name == "_ready") {
- has_ready = true;
- }
Error err = OK;
_parse_function(err, p_script, p_class, function);
if (err) {
@@ -2498,8 +2531,8 @@ Error GDScriptCompiler::_parse_class_blocks(GDScript *p_script, const GDScriptPa
}
}
- if (!has_ready && p_class->onready_used) {
- //create a _ready constructor
+ if (p_class->onready_used) {
+ // Create an implicit_ready constructor.
Error err = OK;
_parse_function(err, p_script, p_class, nullptr, true);
if (err) {
diff --git a/modules/gdscript/gdscript_disassembler.cpp b/modules/gdscript/gdscript_disassembler.cpp
index dc114f2eff..726f0efe2b 100644
--- a/modules/gdscript/gdscript_disassembler.cpp
+++ b/modules/gdscript/gdscript_disassembler.cpp
@@ -838,6 +838,14 @@ void GDScriptFunction::disassemble(const Vector<String> &p_code_lines) const {
incr = 1;
} break;
+ case OPCODE_JUMP_IF_SHARED: {
+ text += "jump-if-shared ";
+ text += DADDR(1);
+ text += " to ";
+ text += itos(_code_ptr[ip + 2]);
+
+ incr = 3;
+ } break;
case OPCODE_RETURN: {
text += "return ";
text += DADDR(1);
diff --git a/modules/gdscript/gdscript_editor.cpp b/modules/gdscript/gdscript_editor.cpp
index 202d1dcdf4..474c8094f2 100644
--- a/modules/gdscript/gdscript_editor.cpp
+++ b/modules/gdscript/gdscript_editor.cpp
@@ -738,7 +738,7 @@ static void _get_directory_contents(EditorFileSystemDirectory *p_dir, HashMap<St
static void _find_annotation_arguments(const GDScriptParser::AnnotationNode *p_annotation, int p_argument, const String p_quote_style, HashMap<String, ScriptLanguage::CodeCompletionOption> &r_result) {
if (p_annotation->name == SNAME("@export_range")) {
- if (p_argument == 3 || p_argument == 4) {
+ if (p_argument == 3 || p_argument == 4 || p_argument == 5) {
// Slider hint.
ScriptLanguage::CodeCompletionOption slider1("or_greater", ScriptLanguage::CODE_COMPLETION_KIND_PLAIN_TEXT);
slider1.insert_text = slider1.display.quote(p_quote_style);
@@ -746,6 +746,9 @@ static void _find_annotation_arguments(const GDScriptParser::AnnotationNode *p_a
ScriptLanguage::CodeCompletionOption slider2("or_lesser", ScriptLanguage::CODE_COMPLETION_KIND_PLAIN_TEXT);
slider2.insert_text = slider2.display.quote(p_quote_style);
r_result.insert(slider2.display, slider2);
+ ScriptLanguage::CodeCompletionOption slider3("no_slider", ScriptLanguage::CODE_COMPLETION_KIND_PLAIN_TEXT);
+ slider3.insert_text = slider3.display.quote(p_quote_style);
+ r_result.insert(slider3.display, slider3);
}
} else if (p_annotation->name == SNAME("@export_exp_easing")) {
if (p_argument == 0 || p_argument == 1) {
diff --git a/modules/gdscript/gdscript_function.h b/modules/gdscript/gdscript_function.h
index d2ca795977..3f1265679b 100644
--- a/modules/gdscript/gdscript_function.h
+++ b/modules/gdscript/gdscript_function.h
@@ -304,6 +304,7 @@ public:
OPCODE_JUMP_IF,
OPCODE_JUMP_IF_NOT,
OPCODE_JUMP_TO_DEF_ARGUMENT,
+ OPCODE_JUMP_IF_SHARED,
OPCODE_RETURN,
OPCODE_RETURN_TYPED_BUILTIN,
OPCODE_RETURN_TYPED_ARRAY,
diff --git a/modules/gdscript/gdscript_lambda_callable.cpp b/modules/gdscript/gdscript_lambda_callable.cpp
index c43fa12c8c..a25bf9a306 100644
--- a/modules/gdscript/gdscript_lambda_callable.cpp
+++ b/modules/gdscript/gdscript_lambda_callable.cpp
@@ -91,7 +91,7 @@ GDScriptLambdaCallable::GDScriptLambdaCallable(Ref<GDScript> p_script, GDScriptF
function = p_function;
captures = p_captures;
- h = (uint32_t)hash_djb2_one_64((uint64_t)this);
+ h = (uint32_t)hash_murmur3_one_64((uint64_t)this);
}
bool GDScriptLambdaSelfCallable::compare_equal(const CallableCustom *p_a, const CallableCustom *p_b) {
@@ -161,7 +161,7 @@ GDScriptLambdaSelfCallable::GDScriptLambdaSelfCallable(Ref<RefCounted> p_self, G
function = p_function;
captures = p_captures;
- h = (uint32_t)hash_djb2_one_64((uint64_t)this);
+ h = (uint32_t)hash_murmur3_one_64((uint64_t)this);
}
GDScriptLambdaSelfCallable::GDScriptLambdaSelfCallable(Object *p_self, GDScriptFunction *p_function, const Vector<Variant> &p_captures) {
@@ -169,5 +169,5 @@ GDScriptLambdaSelfCallable::GDScriptLambdaSelfCallable(Object *p_self, GDScriptF
function = p_function;
captures = p_captures;
- h = (uint32_t)hash_djb2_one_64((uint64_t)this);
+ h = (uint32_t)hash_murmur3_one_64((uint64_t)this);
}
diff --git a/modules/gdscript/gdscript_parser.cpp b/modules/gdscript/gdscript_parser.cpp
index bc225850c9..ca430b0f72 100644
--- a/modules/gdscript/gdscript_parser.cpp
+++ b/modules/gdscript/gdscript_parser.cpp
@@ -109,31 +109,31 @@ GDScriptParser::GDScriptParser() {
// Register valid annotations.
// TODO: Should this be static?
register_annotation(MethodInfo("@tool"), AnnotationInfo::SCRIPT, &GDScriptParser::tool_annotation);
- register_annotation(MethodInfo("@icon", { Variant::STRING, "icon_path" }), AnnotationInfo::SCRIPT, &GDScriptParser::icon_annotation);
+ register_annotation(MethodInfo("@icon", PropertyInfo(Variant::STRING, "icon_path")), AnnotationInfo::SCRIPT, &GDScriptParser::icon_annotation);
register_annotation(MethodInfo("@onready"), AnnotationInfo::VARIABLE, &GDScriptParser::onready_annotation);
// Export annotations.
register_annotation(MethodInfo("@export"), AnnotationInfo::VARIABLE, &GDScriptParser::export_annotations<PROPERTY_HINT_NONE, Variant::NIL>);
- register_annotation(MethodInfo("@export_enum", { Variant::STRING, "names" }), AnnotationInfo::VARIABLE, &GDScriptParser::export_annotations<PROPERTY_HINT_ENUM, Variant::INT>, 0, true);
- register_annotation(MethodInfo("@export_file", { Variant::STRING, "filter" }), AnnotationInfo::VARIABLE, &GDScriptParser::export_annotations<PROPERTY_HINT_FILE, Variant::STRING>, 1, true);
+ register_annotation(MethodInfo("@export_enum", PropertyInfo(Variant::STRING, "names")), AnnotationInfo::VARIABLE, &GDScriptParser::export_annotations<PROPERTY_HINT_ENUM, Variant::INT>, 0, true);
+ register_annotation(MethodInfo("@export_file", PropertyInfo(Variant::STRING, "filter")), AnnotationInfo::VARIABLE, &GDScriptParser::export_annotations<PROPERTY_HINT_FILE, Variant::STRING>, 1, true);
register_annotation(MethodInfo("@export_dir"), AnnotationInfo::VARIABLE, &GDScriptParser::export_annotations<PROPERTY_HINT_DIR, Variant::STRING>);
- register_annotation(MethodInfo("@export_global_file", { Variant::STRING, "filter" }), AnnotationInfo::VARIABLE, &GDScriptParser::export_annotations<PROPERTY_HINT_GLOBAL_FILE, Variant::STRING>, 1, true);
+ register_annotation(MethodInfo("@export_global_file", PropertyInfo(Variant::STRING, "filter")), AnnotationInfo::VARIABLE, &GDScriptParser::export_annotations<PROPERTY_HINT_GLOBAL_FILE, Variant::STRING>, 1, true);
register_annotation(MethodInfo("@export_global_dir"), AnnotationInfo::VARIABLE, &GDScriptParser::export_annotations<PROPERTY_HINT_GLOBAL_DIR, Variant::STRING>);
register_annotation(MethodInfo("@export_multiline"), AnnotationInfo::VARIABLE, &GDScriptParser::export_annotations<PROPERTY_HINT_MULTILINE_TEXT, Variant::STRING>);
register_annotation(MethodInfo("@export_placeholder"), AnnotationInfo::VARIABLE, &GDScriptParser::export_annotations<PROPERTY_HINT_PLACEHOLDER_TEXT, Variant::STRING>);
- register_annotation(MethodInfo("@export_range", { Variant::FLOAT, "min" }, { Variant::FLOAT, "max" }, { Variant::FLOAT, "step" }, { Variant::STRING, "slider1" }, { Variant::STRING, "slider2" }), AnnotationInfo::VARIABLE, &GDScriptParser::export_annotations<PROPERTY_HINT_RANGE, Variant::FLOAT>, 3);
- register_annotation(MethodInfo("@export_exp_easing", { Variant::STRING, "hint1" }, { Variant::STRING, "hint2" }), AnnotationInfo::VARIABLE, &GDScriptParser::export_annotations<PROPERTY_HINT_EXP_EASING, Variant::FLOAT>, 2);
+ register_annotation(MethodInfo("@export_range", PropertyInfo(Variant::FLOAT, "min"), PropertyInfo(Variant::FLOAT, "max"), PropertyInfo(Variant::FLOAT, "step"), PropertyInfo(Variant::STRING, "slider1"), PropertyInfo(Variant::STRING, "slider2"), PropertyInfo(Variant::STRING, "slider3")), AnnotationInfo::VARIABLE, &GDScriptParser::export_annotations<PROPERTY_HINT_RANGE, Variant::FLOAT>, 4);
+ register_annotation(MethodInfo("@export_exp_easing", PropertyInfo(Variant::STRING, "hint1"), PropertyInfo(Variant::STRING, "hint2")), AnnotationInfo::VARIABLE, &GDScriptParser::export_annotations<PROPERTY_HINT_EXP_EASING, Variant::FLOAT>, 2);
register_annotation(MethodInfo("@export_color_no_alpha"), AnnotationInfo::VARIABLE, &GDScriptParser::export_annotations<PROPERTY_HINT_COLOR_NO_ALPHA, Variant::COLOR>);
- register_annotation(MethodInfo("@export_node_path", { Variant::STRING, "type" }), AnnotationInfo::VARIABLE, &GDScriptParser::export_annotations<PROPERTY_HINT_NODE_PATH_VALID_TYPES, Variant::NODE_PATH>, 1, true);
- register_annotation(MethodInfo("@export_flags", { Variant::STRING, "names" }), AnnotationInfo::VARIABLE, &GDScriptParser::export_annotations<PROPERTY_HINT_FLAGS, Variant::INT>, 0, true);
+ register_annotation(MethodInfo("@export_node_path", PropertyInfo(Variant::STRING, "type")), AnnotationInfo::VARIABLE, &GDScriptParser::export_annotations<PROPERTY_HINT_NODE_PATH_VALID_TYPES, Variant::NODE_PATH>, 1, true);
+ register_annotation(MethodInfo("@export_flags", PropertyInfo(Variant::STRING, "names")), AnnotationInfo::VARIABLE, &GDScriptParser::export_annotations<PROPERTY_HINT_FLAGS, Variant::INT>, 0, true);
register_annotation(MethodInfo("@export_flags_2d_render"), AnnotationInfo::VARIABLE, &GDScriptParser::export_annotations<PROPERTY_HINT_LAYERS_2D_RENDER, Variant::INT>);
register_annotation(MethodInfo("@export_flags_2d_physics"), AnnotationInfo::VARIABLE, &GDScriptParser::export_annotations<PROPERTY_HINT_LAYERS_2D_PHYSICS, Variant::INT>);
register_annotation(MethodInfo("@export_flags_2d_navigation"), AnnotationInfo::VARIABLE, &GDScriptParser::export_annotations<PROPERTY_HINT_LAYERS_2D_NAVIGATION, Variant::INT>);
register_annotation(MethodInfo("@export_flags_3d_render"), AnnotationInfo::VARIABLE, &GDScriptParser::export_annotations<PROPERTY_HINT_LAYERS_3D_RENDER, Variant::INT>);
register_annotation(MethodInfo("@export_flags_3d_physics"), AnnotationInfo::VARIABLE, &GDScriptParser::export_annotations<PROPERTY_HINT_LAYERS_3D_PHYSICS, Variant::INT>);
register_annotation(MethodInfo("@export_flags_3d_navigation"), AnnotationInfo::VARIABLE, &GDScriptParser::export_annotations<PROPERTY_HINT_LAYERS_3D_NAVIGATION, Variant::INT>);
- register_annotation(MethodInfo("@warning_ignore", { Variant::STRING, "warning" }), AnnotationInfo::CLASS | AnnotationInfo::VARIABLE | AnnotationInfo::SIGNAL | AnnotationInfo::CONSTANT | AnnotationInfo::FUNCTION | AnnotationInfo::STATEMENT, &GDScriptParser::warning_annotations, 0, true);
+ register_annotation(MethodInfo("@warning_ignore", PropertyInfo(Variant::STRING, "warning")), AnnotationInfo::CLASS | AnnotationInfo::VARIABLE | AnnotationInfo::SIGNAL | AnnotationInfo::CONSTANT | AnnotationInfo::FUNCTION | AnnotationInfo::STATEMENT, &GDScriptParser::warning_annotations, 0, true);
// Networking.
- register_annotation(MethodInfo("@rpc", { Variant::STRING, "mode" }, { Variant::STRING, "sync" }, { Variant::STRING, "transfer_mode" }, { Variant::INT, "transfer_channel" }), AnnotationInfo::FUNCTION, &GDScriptParser::network_annotations<Multiplayer::RPC_MODE_AUTHORITY>, 4, true);
+ register_annotation(MethodInfo("@rpc", PropertyInfo(Variant::STRING, "mode"), PropertyInfo(Variant::STRING, "sync"), PropertyInfo(Variant::STRING, "transfer_mode"), PropertyInfo(Variant::INT, "transfer_channel")), AnnotationInfo::FUNCTION, &GDScriptParser::network_annotations<Multiplayer::RPC_MODE_AUTHORITY>, 4, true);
}
GDScriptParser::~GDScriptParser() {
@@ -3605,8 +3605,12 @@ bool GDScriptParser::export_annotations(const AnnotationNode *p_annotation, Node
variable->export_info.type = Variant::OBJECT;
variable->export_info.hint = PROPERTY_HINT_RESOURCE_TYPE;
variable->export_info.hint_string = export_type.native_type;
+ } else if (ClassDB::is_parent_class(export_type.native_type, SNAME("Node"))) {
+ variable->export_info.type = Variant::OBJECT;
+ variable->export_info.hint = PROPERTY_HINT_NODE_TYPE;
+ variable->export_info.hint_string = export_type.native_type;
} else {
- push_error(R"(Export type can only be built-in, a resource, or an enum.)", variable);
+ push_error(R"(Export type can only be built-in, a resource, a node, or an enum.)", variable);
return false;
}
break;
diff --git a/modules/gdscript/gdscript_rpc_callable.cpp b/modules/gdscript/gdscript_rpc_callable.cpp
index 07ef5aefcb..63ebd8acf5 100644
--- a/modules/gdscript/gdscript_rpc_callable.cpp
+++ b/modules/gdscript/gdscript_rpc_callable.cpp
@@ -71,7 +71,7 @@ GDScriptRPCCallable::GDScriptRPCCallable(Object *p_object, const StringName &p_m
object = p_object;
method = p_method;
h = method.hash();
- h = hash_djb2_one_64(object->get_instance_id(), h);
+ h = hash_murmur3_one_64(object->get_instance_id(), h);
node = Object::cast_to<Node>(object);
ERR_FAIL_COND_MSG(!node, "RPC can only be defined on class that extends Node.");
}
diff --git a/modules/gdscript/gdscript_vm.cpp b/modules/gdscript/gdscript_vm.cpp
index 55f4ebb1c5..1d56dae982 100644
--- a/modules/gdscript/gdscript_vm.cpp
+++ b/modules/gdscript/gdscript_vm.cpp
@@ -177,6 +177,8 @@ String GDScriptFunction::_get_call_error(const Callable::CallError &p_err, const
err_text = "Invalid call. Nonexistent " + p_where + ".";
} else if (p_err.error == Callable::CallError::CALL_ERROR_INSTANCE_IS_NULL) {
err_text = "Attempt to call " + p_where + " on a null instance.";
+ } else if (p_err.error == Callable::CallError::CALL_ERROR_METHOD_NOT_CONST) {
+ err_text = "Attempt to call " + p_where + " on a const instance.";
} else {
err_text = "Bug, call error: #" + itos(p_err.error);
}
@@ -311,6 +313,7 @@ void (*type_init_function_table[])(Variant *) = {
&&OPCODE_JUMP_IF, \
&&OPCODE_JUMP_IF_NOT, \
&&OPCODE_JUMP_TO_DEF_ARGUMENT, \
+ &&OPCODE_JUMP_IF_SHARED, \
&&OPCODE_RETURN, \
&&OPCODE_RETURN_TYPED_BUILTIN, \
&&OPCODE_RETURN_TYPED_ARRAY, \
@@ -1894,7 +1897,7 @@ Variant GDScriptFunction::call(GDScriptInstance *p_instance, const Variant **p_a
VariantInternal::initialize(ret, Variant::OBJECT);
Object **ret_opaque = VariantInternal::get_object(ret);
method->ptrcall(base_obj, argptrs, ret_opaque);
- VariantInternal::object_assign(ret, *ret_opaque); // Set so ID is correct too.
+ VariantInternal::update_object_id(ret);
#ifdef DEBUG_ENABLED
if (GDScriptLanguage::get_singleton()->profiling) {
@@ -2361,6 +2364,21 @@ Variant GDScriptFunction::call(GDScriptInstance *p_instance, const Variant **p_a
}
DISPATCH_OPCODE;
+ OPCODE(OPCODE_JUMP_IF_SHARED) {
+ CHECK_SPACE(3);
+
+ GET_INSTRUCTION_ARG(val, 0);
+
+ if (val->is_shared()) {
+ int to = _code_ptr[ip + 2];
+ GD_ERR_BREAK(to < 0 || to > _code_size);
+ ip = to;
+ } else {
+ ip += 3;
+ }
+ }
+ DISPATCH_OPCODE;
+
OPCODE(OPCODE_RETURN) {
CHECK_SPACE(2);
GET_INSTRUCTION_ARG(r, 0);
@@ -3432,9 +3450,9 @@ Variant GDScriptFunction::call(GDScriptInstance *p_instance, const Variant **p_a
_err_print_error(err_func.utf8().get_data(), err_file.utf8().get_data(), err_line, err_text.utf8().get_data(), false, ERR_HANDLER_SCRIPT);
}
-#endif
// Get a default return type in case of failure
retvalue = _get_default_variant_for_data_type(return_type);
+#endif
OPCODE_OUT;
}
diff --git a/modules/gdscript/tests/gdscript_test_runner.cpp b/modules/gdscript/tests/gdscript_test_runner.cpp
index de5cd10e7c..ff4832bde0 100644
--- a/modules/gdscript/tests/gdscript_test_runner.cpp
+++ b/modules/gdscript/tests/gdscript_test_runner.cpp
@@ -363,7 +363,7 @@ void GDScriptTest::disable_stdout() {
OS::get_singleton()->set_stderr_enabled(false);
}
-void GDScriptTest::print_handler(void *p_this, const String &p_message, bool p_error) {
+void GDScriptTest::print_handler(void *p_this, const String &p_message, bool p_error, bool p_rich) {
TestResult *result = (TestResult *)p_this;
result->output += p_message + "\n";
}
diff --git a/modules/gdscript/tests/gdscript_test_runner.h b/modules/gdscript/tests/gdscript_test_runner.h
index d6c6419e21..ee21afd9c9 100644
--- a/modules/gdscript/tests/gdscript_test_runner.h
+++ b/modules/gdscript/tests/gdscript_test_runner.h
@@ -86,7 +86,7 @@ private:
TestResult execute_test_code(bool p_is_generating);
public:
- static void print_handler(void *p_this, const String &p_message, bool p_error);
+ static void print_handler(void *p_this, const String &p_message, bool p_error, bool p_rich);
static void error_handler(void *p_this, const char *p_function, const char *p_file, int p_line, const char *p_error, const char *p_explanation, bool p_editor_notify, ErrorHandlerType p_type);
TestResult run_test();
bool generate_output();
diff --git a/modules/gdscript/tests/scripts/runtime/features/chain_assignment_works.gd b/modules/gdscript/tests/scripts/runtime/features/chain_assignment_works.gd
new file mode 100644
index 0000000000..d2f3a3e18f
--- /dev/null
+++ b/modules/gdscript/tests/scripts/runtime/features/chain_assignment_works.gd
@@ -0,0 +1,19 @@
+func test():
+ var dictionary1: Variant = {1:Vector2()}
+ dictionary1[1].x = 2
+ var dictionary2: Dictionary = {3:Vector2()}
+ dictionary2[3].x = 4
+ var array1: Variant = [[Vector2()]]
+ array1[0][0].x = 5
+ var array2: Array = [[Vector2()]]
+ array2[0][0].x = 6
+ var array3: Array[Array] = [[Vector2()]]
+ array3[0][0].x = 7
+ var transform = Transform3D()
+ transform.basis.x = Vector3(8.0, 9.0, 7.0)
+ print(dictionary1)
+ print(dictionary2)
+ print(array1)
+ print(array2)
+ print(array3)
+ print(transform)
diff --git a/modules/gdscript/tests/scripts/runtime/features/chain_assignment_works.out b/modules/gdscript/tests/scripts/runtime/features/chain_assignment_works.out
new file mode 100644
index 0000000000..5e7ccf534a
--- /dev/null
+++ b/modules/gdscript/tests/scripts/runtime/features/chain_assignment_works.out
@@ -0,0 +1,7 @@
+GDTEST_OK
+{1:(2, 0)}
+{3:(4, 0)}
+[[(5, 0)]]
+[[(6, 0)]]
+[[(7, 0)]]
+[X: (8, 9, 7), Y: (0, 1, 0), Z: (0, 0, 1), O: (0, 0, 0)]
diff --git a/modules/gridmap/doc_classes/GridMap.xml b/modules/gridmap/doc_classes/GridMap.xml
index 407ce961c8..499f54e3ba 100644
--- a/modules/gridmap/doc_classes/GridMap.xml
+++ b/modules/gridmap/doc_classes/GridMap.xml
@@ -73,6 +73,13 @@
Returns an array of [Transform3D] and [Mesh] references corresponding to the non-empty cells in the grid. The transforms are specified in world space.
</description>
</method>
+ <method name="get_navigation_layer_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 navigation_layers] bitmask is enabled, given a [code]layer_number[/code] between 1 and 32.
+ </description>
+ </method>
<method name="get_used_cells" qualifiers="const">
<return type="Array" />
<description>
@@ -133,6 +140,14 @@
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>
+ <method name="set_navigation_layer_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 navigation_layers] bitmask, given a [code]layer_number[/code] between 1 and 32.
+ </description>
+ </method>
<method name="world_to_map" qualifiers="const">
<return type="Vector3i" />
<argument index="0" name="world_position" type="Vector3" />
@@ -177,7 +192,7 @@
The assigned [MeshLibrary].
</member>
<member name="navigation_layers" type="int" setter="set_navigation_layers" getter="get_navigation_layers" default="1">
- The navigation layers the GridMap generates its navigable regions in.
+ A bitmask determining all navigation layers the GridMap generated navigation regions belong to. These navigation layers can be checked upon when requesting a path with [method NavigationServer3D.map_get_path].
</member>
<member name="physics_material" type="PhysicsMaterial" setter="set_physics_material" getter="get_physics_material">
Overrides the default friction and bounce physics properties for the whole [GridMap].
diff --git a/modules/gridmap/editor/grid_map_editor_plugin.cpp b/modules/gridmap/editor/grid_map_editor_plugin.cpp
index cfff5c61de..b694c109e1 100644
--- a/modules/gridmap/editor/grid_map_editor_plugin.cpp
+++ b/modules/gridmap/editor/grid_map_editor_plugin.cpp
@@ -1260,7 +1260,7 @@ GridMapEditor::GridMapEditor() {
info_message->set_text(TTR("Give a MeshLibrary resource to this GridMap to use its meshes."));
info_message->set_vertical_alignment(VERTICAL_ALIGNMENT_CENTER);
info_message->set_horizontal_alignment(HORIZONTAL_ALIGNMENT_CENTER);
- info_message->set_autowrap_mode(Label::AUTOWRAP_WORD_SMART);
+ info_message->set_autowrap_mode(TextServer::AUTOWRAP_WORD_SMART);
info_message->set_custom_minimum_size(Size2(100 * EDSCALE, 0));
info_message->set_anchors_and_offsets_preset(PRESET_WIDE, PRESET_MODE_KEEP_SIZE, 8 * EDSCALE);
mesh_library_palette->add_child(info_message);
diff --git a/modules/gridmap/grid_map.cpp b/modules/gridmap/grid_map.cpp
index 0e34b5907e..7d80cbef7c 100644
--- a/modules/gridmap/grid_map.cpp
+++ b/modules/gridmap/grid_map.cpp
@@ -231,10 +231,28 @@ void GridMap::set_navigation_layers(uint32_t p_navigation_layers) {
_recreate_octant_data();
}
-uint32_t GridMap::get_navigation_layers() {
+uint32_t GridMap::get_navigation_layers() const {
return navigation_layers;
}
+void GridMap::set_navigation_layer_value(int p_layer_number, bool p_value) {
+ ERR_FAIL_COND_MSG(p_layer_number < 1, "Navigation layer number must be between 1 and 32 inclusive.");
+ ERR_FAIL_COND_MSG(p_layer_number > 32, "Navigation layer number must be between 1 and 32 inclusive.");
+ uint32_t _navigation_layers = get_navigation_layers();
+ if (p_value) {
+ _navigation_layers |= 1 << (p_layer_number - 1);
+ } else {
+ _navigation_layers &= ~(1 << (p_layer_number - 1));
+ }
+ set_navigation_layers(_navigation_layers);
+}
+
+bool GridMap::get_navigation_layer_value(int p_layer_number) const {
+ ERR_FAIL_COND_V_MSG(p_layer_number < 1, false, "Navigation layer number must be between 1 and 32 inclusive.");
+ ERR_FAIL_COND_V_MSG(p_layer_number > 32, false, "Navigation layer number must be between 1 and 32 inclusive.");
+ return get_navigation_layers() & (1 << (p_layer_number - 1));
+}
+
void GridMap::set_mesh_library(const Ref<MeshLibrary> &p_mesh_library) {
if (!mesh_library.is_null()) {
mesh_library->unregister_owner(this);
@@ -885,6 +903,9 @@ void GridMap::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_navigation_layers", "layers"), &GridMap::set_navigation_layers);
ClassDB::bind_method(D_METHOD("get_navigation_layers"), &GridMap::get_navigation_layers);
+ ClassDB::bind_method(D_METHOD("set_navigation_layer_value", "layer_number", "value"), &GridMap::set_navigation_layer_value);
+ ClassDB::bind_method(D_METHOD("get_navigation_layer_value", "layer_number"), &GridMap::get_navigation_layer_value);
+
ClassDB::bind_method(D_METHOD("set_mesh_library", "mesh_library"), &GridMap::set_mesh_library);
ClassDB::bind_method(D_METHOD("get_mesh_library"), &GridMap::get_mesh_library);
diff --git a/modules/gridmap/grid_map.h b/modules/gridmap/grid_map.h
index 08ed4d3d12..078a1d9de5 100644
--- a/modules/gridmap/grid_map.h
+++ b/modules/gridmap/grid_map.h
@@ -239,7 +239,10 @@ public:
bool is_baking_navigation();
void set_navigation_layers(uint32_t p_navigation_layers);
- uint32_t get_navigation_layers();
+ uint32_t get_navigation_layers() const;
+
+ void set_navigation_layer_value(int p_layer_number, bool p_value);
+ bool get_navigation_layer_value(int p_layer_number) const;
void set_mesh_library(const Ref<MeshLibrary> &p_mesh_library);
Ref<MeshLibrary> get_mesh_library() const;
diff --git a/modules/jpg/SCsub b/modules/jpg/SCsub
index 7c6ceeea29..b840542c1b 100644
--- a/modules/jpg/SCsub
+++ b/modules/jpg/SCsub
@@ -13,6 +13,7 @@ thirdparty_obj = []
thirdparty_dir = "#thirdparty/jpeg-compressor/"
thirdparty_sources = [
"jpgd.cpp",
+ "jpge.cpp",
]
thirdparty_sources = [thirdparty_dir + file for file in thirdparty_sources]
diff --git a/modules/jpg/image_loader_jpegd.cpp b/modules/jpg/image_loader_jpegd.cpp
index 51358876a4..0e03fa65c8 100644
--- a/modules/jpg/image_loader_jpegd.cpp
+++ b/modules/jpg/image_loader_jpegd.cpp
@@ -33,7 +33,8 @@
#include "core/os/os.h"
#include "core/string/print_string.h"
-#include <jpgd.h>
+#include "thirdparty/jpeg-compressor/jpgd.h"
+#include "thirdparty/jpeg-compressor/jpge.h"
#include <string.h>
Error jpeg_load_image_from_buffer(Image *p_image, const uint8_t *p_buffer, int p_buffer_len) {
@@ -131,6 +132,59 @@ static Ref<Image> _jpegd_mem_loader_func(const uint8_t *p_png, int p_size) {
return img;
}
+static Error _jpgd_save_func(const String &p_path, const Ref<Image> &p_img, float p_quality) {
+ return OK;
+}
+
+class ImageLoaderJPGOSFile : public jpge::output_stream {
+public:
+ Ref<FileAccess> f;
+
+ virtual bool put_buf(const void *Pbuf, int len) {
+ f->store_buffer((const uint8_t *)Pbuf, len);
+ return true;
+ }
+};
+
+class ImageLoaderJPGOSBuffer : public jpge::output_stream {
+public:
+ Vector<uint8_t> *buffer = nullptr;
+ virtual bool put_buf(const void *Pbuf, int len) {
+ uint32_t base = buffer->size();
+ buffer->resize(base + len);
+ memcpy(buffer->ptrw() + base, Pbuf, len);
+ return true;
+ }
+};
+
+static Vector<uint8_t> _jpgd_buffer_save_func(const Ref<Image> &p_img, float p_quality) {
+ ERR_FAIL_COND_V(p_img.is_null() || p_img->is_empty(), Vector<uint8_t>());
+ Ref<Image> image = p_img;
+ if (image->get_format() != Image::FORMAT_RGB8) {
+ image->convert(Image::FORMAT_ETC2_RGB8);
+ }
+
+ jpge::params p;
+ p.m_quality = CLAMP(p_quality * 100, 1, 100);
+ Vector<uint8_t> output;
+ ImageLoaderJPGOSBuffer ob;
+ ob.buffer = &output;
+
+ jpge::jpeg_encoder enc;
+ enc.init(&ob, image->get_width(), image->get_height(), 3, p);
+
+ const uint8_t *src_data = image->get_data().ptr();
+ for (int i = 0; i < image->get_height(); i++) {
+ enc.process_scanline(&src_data[i * image->get_width() * 3]);
+ }
+
+ enc.process_scanline(nullptr);
+
+ return output;
+}
+
ImageLoaderJPG::ImageLoaderJPG() {
Image::_jpg_mem_loader_func = _jpegd_mem_loader_func;
+ Image::save_jpg_func = _jpgd_save_func;
+ Image::save_jpg_buffer_func = _jpgd_buffer_save_func;
}
diff --git a/modules/lightmapper_rd/lightmapper_rd.cpp b/modules/lightmapper_rd/lightmapper_rd.cpp
index 214c60091c..2ce3715bea 100644
--- a/modules/lightmapper_rd/lightmapper_rd.cpp
+++ b/modules/lightmapper_rd/lightmapper_rd.cpp
@@ -51,7 +51,7 @@ void LightmapperRD::add_mesh(const MeshData &p_mesh) {
mesh_instances.push_back(mi);
}
-void LightmapperRD::add_directional_light(bool p_static, const Vector3 &p_direction, const Color &p_color, float p_energy, float p_angular_distance) {
+void LightmapperRD::add_directional_light(bool p_static, const Vector3 &p_direction, const Color &p_color, float p_energy, float p_angular_distance, float p_shadow_blur) {
Light l;
l.type = LIGHT_TYPE_DIRECTIONAL;
l.direction[0] = p_direction.x;
@@ -62,11 +62,12 @@ void LightmapperRD::add_directional_light(bool p_static, const Vector3 &p_direct
l.color[2] = p_color.b;
l.energy = p_energy;
l.static_bake = p_static;
- l.size = p_angular_distance;
+ l.size = Math::tan(Math::deg2rad(p_angular_distance));
+ l.shadow_blur = p_shadow_blur;
lights.push_back(l);
}
-void LightmapperRD::add_omni_light(bool p_static, const Vector3 &p_position, const Color &p_color, float p_energy, float p_range, float p_attenuation, float p_size) {
+void LightmapperRD::add_omni_light(bool p_static, const Vector3 &p_position, const Color &p_color, float p_energy, float p_range, float p_attenuation, float p_size, float p_shadow_blur) {
Light l;
l.type = LIGHT_TYPE_OMNI;
l.position[0] = p_position.x;
@@ -80,10 +81,11 @@ void LightmapperRD::add_omni_light(bool p_static, const Vector3 &p_position, con
l.energy = p_energy;
l.static_bake = p_static;
l.size = p_size;
+ l.shadow_blur = p_shadow_blur;
lights.push_back(l);
}
-void LightmapperRD::add_spot_light(bool p_static, const Vector3 &p_position, const Vector3 p_direction, const Color &p_color, float p_energy, float p_range, float p_attenuation, float p_spot_angle, float p_spot_attenuation, float p_size) {
+void LightmapperRD::add_spot_light(bool p_static, const Vector3 &p_position, const Vector3 p_direction, const Color &p_color, float p_energy, float p_range, float p_attenuation, float p_spot_angle, float p_spot_attenuation, float p_size, float p_shadow_blur) {
Light l;
l.type = LIGHT_TYPE_SPOT;
l.position[0] = p_position.x;
@@ -102,6 +104,7 @@ void LightmapperRD::add_spot_light(bool p_static, const Vector3 &p_position, con
l.energy = p_energy;
l.static_bake = p_static;
l.size = p_size;
+ l.shadow_blur = p_shadow_blur;
lights.push_back(l);
}
@@ -1140,6 +1143,23 @@ LightmapperRD::BakeError LightmapperRD::bake(BakeQuality p_quality, bool p_use_d
RID light_uniform_set = rd->uniform_set_create(uniforms, compute_shader_primary, 1);
+ switch (p_quality) {
+ case BAKE_QUALITY_LOW: {
+ push_constant.ray_count = GLOBAL_GET("rendering/lightmapping/bake_quality/low_quality_ray_count");
+ } break;
+ case BAKE_QUALITY_MEDIUM: {
+ push_constant.ray_count = GLOBAL_GET("rendering/lightmapping/bake_quality/medium_quality_ray_count");
+ } break;
+ case BAKE_QUALITY_HIGH: {
+ push_constant.ray_count = GLOBAL_GET("rendering/lightmapping/bake_quality/high_quality_ray_count");
+ } break;
+ case BAKE_QUALITY_ULTRA: {
+ push_constant.ray_count = GLOBAL_GET("rendering/lightmapping/bake_quality/ultra_quality_ray_count");
+ } break;
+ }
+
+ push_constant.ray_count = CLAMP(push_constant.ray_count, 16u, 8192u);
+
RD::ComputeListID compute_list = rd->compute_list_begin();
rd->compute_list_bind_compute_pipeline(compute_list, compute_shader_primary_pipeline);
rd->compute_list_bind_uniform_set(compute_list, compute_base_uniform_set, 0);
@@ -1230,23 +1250,6 @@ LightmapperRD::BakeError LightmapperRD::bake(BakeQuality p_quality, bool p_use_d
uniforms.write[1].set_id(0, light_dest_tex);
secondary_uniform_set[1] = rd->uniform_set_create(uniforms, compute_shader_secondary, 1);
- switch (p_quality) {
- case BAKE_QUALITY_LOW: {
- push_constant.ray_count = GLOBAL_GET("rendering/lightmapping/bake_quality/low_quality_ray_count");
- } break;
- case BAKE_QUALITY_MEDIUM: {
- push_constant.ray_count = GLOBAL_GET("rendering/lightmapping/bake_quality/medium_quality_ray_count");
- } break;
- case BAKE_QUALITY_HIGH: {
- push_constant.ray_count = GLOBAL_GET("rendering/lightmapping/bake_quality/high_quality_ray_count");
- } break;
- case BAKE_QUALITY_ULTRA: {
- push_constant.ray_count = GLOBAL_GET("rendering/lightmapping/bake_quality/ultra_quality_ray_count");
- } break;
- }
-
- push_constant.ray_count = CLAMP(push_constant.ray_count, 16u, 8192u);
-
int max_region_size = nearest_power_of_2_templated(int(GLOBAL_GET("rendering/lightmapping/bake_performance/region_size")));
int max_rays = GLOBAL_GET("rendering/lightmapping/bake_performance/max_rays_per_pass");
diff --git a/modules/lightmapper_rd/lightmapper_rd.h b/modules/lightmapper_rd/lightmapper_rd.h
index 503f5f7009..8cb4b58a18 100644
--- a/modules/lightmapper_rd/lightmapper_rd.h
+++ b/modules/lightmapper_rd/lightmapper_rd.h
@@ -57,8 +57,9 @@ class LightmapperRD : public Lightmapper {
float attenuation = 0.0;
float cos_spot_angle = 0.0;
float inv_spot_attenuation = 0.0;
+ float shadow_blur = 0.0;
uint32_t static_bake = 0;
- uint32_t pad[3] = {};
+ uint32_t pad[2] = {};
bool operator<(const Light &p_light) const {
return type < p_light.type;
@@ -110,12 +111,12 @@ class LightmapperRD : public Lightmapper {
struct EdgeHash {
_FORCE_INLINE_ static uint32_t hash(const Edge &p_edge) {
- uint32_t h = hash_djb2_one_float(p_edge.a.x);
- h = hash_djb2_one_float(p_edge.a.y, h);
- h = hash_djb2_one_float(p_edge.a.z, h);
- h = hash_djb2_one_float(p_edge.b.x, h);
- h = hash_djb2_one_float(p_edge.b.y, h);
- h = hash_djb2_one_float(p_edge.b.z, h);
+ uint32_t h = hash_murmur3_one_float(p_edge.a.x);
+ h = hash_murmur3_one_float(p_edge.a.y, h);
+ h = hash_murmur3_one_float(p_edge.a.z, h);
+ h = hash_murmur3_one_float(p_edge.b.x, h);
+ h = hash_murmur3_one_float(p_edge.b.y, h);
+ h = hash_murmur3_one_float(p_edge.b.z, h);
return h;
}
};
@@ -146,15 +147,15 @@ class LightmapperRD : public Lightmapper {
struct VertexHash {
_FORCE_INLINE_ static uint32_t hash(const Vertex &p_vtx) {
- uint32_t h = hash_djb2_one_float(p_vtx.position[0]);
- h = hash_djb2_one_float(p_vtx.position[1], h);
- h = hash_djb2_one_float(p_vtx.position[2], h);
- h = hash_djb2_one_float(p_vtx.uv[0], h);
- h = hash_djb2_one_float(p_vtx.uv[1], h);
- h = hash_djb2_one_float(p_vtx.normal_xy[0], h);
- h = hash_djb2_one_float(p_vtx.normal_xy[1], h);
- h = hash_djb2_one_float(p_vtx.normal_z, h);
- return h;
+ uint32_t h = hash_murmur3_one_float(p_vtx.position[0]);
+ h = hash_murmur3_one_float(p_vtx.position[1], h);
+ h = hash_murmur3_one_float(p_vtx.position[2], h);
+ h = hash_murmur3_one_float(p_vtx.uv[0], h);
+ h = hash_murmur3_one_float(p_vtx.uv[1], h);
+ h = hash_murmur3_one_float(p_vtx.normal_xy[0], h);
+ h = hash_murmur3_one_float(p_vtx.normal_xy[1], h);
+ h = hash_murmur3_one_float(p_vtx.normal_z, h);
+ return hash_fmix32(h);
}
};
@@ -236,9 +237,9 @@ class LightmapperRD : public Lightmapper {
public:
virtual void add_mesh(const MeshData &p_mesh) override;
- virtual void add_directional_light(bool p_static, const Vector3 &p_direction, const Color &p_color, float p_energy, float p_angular_distance) override;
- virtual void add_omni_light(bool p_static, const Vector3 &p_position, const Color &p_color, float p_energy, float p_range, float p_attenuation, float p_size) override;
- virtual void add_spot_light(bool p_static, const Vector3 &p_position, const Vector3 p_direction, const Color &p_color, float p_energy, float p_range, float p_attenuation, float p_spot_angle, float p_spot_attenuation, float p_size) override;
+ virtual void add_directional_light(bool p_static, const Vector3 &p_direction, const Color &p_color, float p_energy, float p_angular_distance, float p_shadow_blur) override;
+ virtual void add_omni_light(bool p_static, const Vector3 &p_position, const Color &p_color, float p_energy, float p_range, float p_attenuation, float p_size, float p_shadow_blur) override;
+ virtual void add_spot_light(bool p_static, const Vector3 &p_position, const Vector3 p_direction, const Color &p_color, float p_energy, float p_range, float p_attenuation, float p_spot_angle, float p_spot_attenuation, float p_size, float p_shadow_blur) override;
virtual void add_probe(const Vector3 &p_position) override;
virtual BakeError bake(BakeQuality p_quality, bool p_use_denoiser, int p_bounces, float p_bias, int p_max_texture_size, bool p_bake_sh, GenerateProbes p_generate_probes, const Ref<Image> &p_environment_panorama, const Basis &p_environment_transform, BakeStepFunc p_step_function = nullptr, void *p_bake_userdata = nullptr) override;
diff --git a/modules/lightmapper_rd/lm_common_inc.glsl b/modules/lightmapper_rd/lm_common_inc.glsl
index 58523dc1f8..e0e8000f56 100644
--- a/modules/lightmapper_rd/lm_common_inc.glsl
+++ b/modules/lightmapper_rd/lm_common_inc.glsl
@@ -51,8 +51,9 @@ struct Light {
float cos_spot_angle;
float inv_spot_attenuation;
+ float shadow_blur;
bool static_bake;
- uint pad[3];
+ uint pad[2];
};
layout(set = 0, binding = 4, std430) restrict readonly buffer Lights {
diff --git a/modules/lightmapper_rd/lm_compute.glsl b/modules/lightmapper_rd/lm_compute.glsl
index 0b6b72a310..efa6cd50b4 100644
--- a/modules/lightmapper_rd/lm_compute.glsl
+++ b/modules/lightmapper_rd/lm_compute.glsl
@@ -316,19 +316,24 @@ void main() {
for (uint i = 0; i < params.light_count; i++) {
vec3 light_pos;
+ float dist;
float attenuation;
+ float soft_shadowing_disk_size;
if (lights.data[i].type == LIGHT_TYPE_DIRECTIONAL) {
vec3 light_vec = lights.data[i].direction;
light_pos = position - light_vec * length(params.world_size);
+ dist = length(params.world_size);
attenuation = 1.0;
+ soft_shadowing_disk_size = lights.data[i].size;
} else {
light_pos = lights.data[i].position;
- float d = distance(position, light_pos);
- if (d > lights.data[i].range) {
+ dist = distance(position, light_pos);
+ if (dist > lights.data[i].range) {
continue;
}
+ soft_shadowing_disk_size = lights.data[i].size / dist;
- attenuation = get_omni_attenuation(d, 1.0 / lights.data[i].range, lights.data[i].attenuation);
+ attenuation = get_omni_attenuation(dist, 1.0 / lights.data[i].range, lights.data[i].attenuation);
if (lights.data[i].type == LIGHT_TYPE_SPOT) {
vec3 rel = normalize(position - light_pos);
@@ -352,27 +357,70 @@ void main() {
continue; //no need to do anything
}
- if (trace_ray(position + light_dir * params.bias, light_pos) == RAY_MISS) {
- vec3 light = lights.data[i].color * lights.data[i].energy * attenuation;
- if (lights.data[i].static_bake) {
- static_light += light;
-#ifdef USE_SH_LIGHTMAPS
+ float penumbra = 0.0;
+ if (lights.data[i].size > 0.0) {
+ vec3 light_to_point = -light_dir;
+ vec3 aux = light_to_point.y < 0.777 ? vec3(0.0, 1.0, 0.0) : vec3(1.0, 0.0, 0.0);
+ vec3 light_to_point_tan = normalize(cross(light_to_point, aux));
+ vec3 light_to_point_bitan = normalize(cross(light_to_point, light_to_point_tan));
+
+ const uint shadowing_rays_check_penumbra_denom = 2;
+ uint shadowing_ray_count = params.ray_count;
+
+ uint hits = 0;
+ uint noise = random_seed(ivec3(atlas_pos, 43573547 /* some prime */));
+ vec3 light_disk_to_point = light_to_point;
+ for (uint j = 0; j < shadowing_ray_count; j++) {
+ // Optimization:
+ // Once already traced an important proportion of rays, if all are hits or misses,
+ // assume we're not in the penumbra so we can infer the rest would have the same result
+ if (j == shadowing_ray_count / shadowing_rays_check_penumbra_denom) {
+ if (hits == j) {
+ // Assume totally lit
+ hits = shadowing_ray_count;
+ break;
+ } else if (hits == 0) {
+ // Assume totally dark
+ hits = 0;
+ break;
+ }
+ }
- float c[4] = float[](
- 0.282095, //l0
- 0.488603 * light_dir.y, //l1n1
- 0.488603 * light_dir.z, //l1n0
- 0.488603 * light_dir.x //l1p1
- );
+ float r = randomize(noise);
+ float a = randomize(noise) * 2.0 * PI;
+ vec2 disk_sample = (r * vec2(cos(a), sin(a))) * soft_shadowing_disk_size * lights.data[i].shadow_blur;
+ light_disk_to_point = normalize(light_to_point + disk_sample.x * light_to_point_tan + disk_sample.y * light_to_point_bitan);
- for (uint j = 0; j < 4; j++) {
- sh_accum[j].rgb += light * c[j] * (1.0 / 3.0);
+ if (trace_ray(position - light_disk_to_point * params.bias, position - light_disk_to_point * dist) == RAY_MISS) {
+ hits++;
}
-#endif
+ }
+ penumbra = float(hits) / float(shadowing_ray_count);
+ } else {
+ if (trace_ray(position + light_dir * params.bias, light_pos) == RAY_MISS) {
+ penumbra = 1.0;
+ }
+ }
- } else {
- dynamic_light += light;
+ vec3 light = lights.data[i].color * lights.data[i].energy * attenuation * penumbra;
+ if (lights.data[i].static_bake) {
+ static_light += light;
+#ifdef USE_SH_LIGHTMAPS
+
+ float c[4] = float[](
+ 0.282095, //l0
+ 0.488603 * light_dir.y, //l1n1
+ 0.488603 * light_dir.z, //l1n0
+ 0.488603 * light_dir.x //l1p1
+ );
+
+ for (uint j = 0; j < 4; j++) {
+ sh_accum[j].rgb += light * c[j] * (1.0 / 3.0);
}
+#endif
+
+ } else {
+ dynamic_light += light;
}
}
diff --git a/modules/minimp3/audio_stream_mp3.cpp b/modules/minimp3/audio_stream_mp3.cpp
index b5b51403f7..c37bea519f 100644
--- a/modules/minimp3/audio_stream_mp3.cpp
+++ b/modules/minimp3/audio_stream_mp3.cpp
@@ -38,7 +38,9 @@
#include "core/io/file_access.h"
int AudioStreamPlaybackMP3::_mix_internal(AudioFrame *p_buffer, int p_frames) {
- ERR_FAIL_COND_V(!active, 0);
+ if (!active) {
+ return 0;
+ }
int todo = p_frames;
diff --git a/modules/mono/class_db_api_json.cpp b/modules/mono/class_db_api_json.cpp
index 3afde1e8d3..c4547b4323 100644
--- a/modules/mono/class_db_api_json.cpp
+++ b/modules/mono/class_db_api_json.cpp
@@ -124,7 +124,7 @@ void class_db_api_to_json(const String &p_output_file, ClassDB::APIType p_api) {
List<StringName> snames;
- for (const KeyValue<StringName, int> &F : t->constant_map) {
+ for (const KeyValue<StringName, int64_t> &F : t->constant_map) {
snames.push_back(F.key);
}
diff --git a/modules/mono/editor/GodotTools/GodotTools.IdeMessaging.CLI/GodotTools.IdeMessaging.CLI.csproj b/modules/mono/editor/GodotTools/GodotTools.IdeMessaging.CLI/GodotTools.IdeMessaging.CLI.csproj
index ae78da27bc..303ca3a293 100644
--- a/modules/mono/editor/GodotTools/GodotTools.IdeMessaging.CLI/GodotTools.IdeMessaging.CLI.csproj
+++ b/modules/mono/editor/GodotTools/GodotTools.IdeMessaging.CLI/GodotTools.IdeMessaging.CLI.csproj
@@ -12,6 +12,6 @@
<ProjectReference Include="..\GodotTools.IdeMessaging\GodotTools.IdeMessaging.csproj" />
</ItemGroup>
<ItemGroup>
- <PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
+ <PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
</ItemGroup>
</Project>
diff --git a/modules/mono/editor/GodotTools/GodotTools.IdeMessaging/GodotTools.IdeMessaging.csproj b/modules/mono/editor/GodotTools/GodotTools.IdeMessaging/GodotTools.IdeMessaging.csproj
index dad6b9ae7a..02f1764f32 100644
--- a/modules/mono/editor/GodotTools/GodotTools.IdeMessaging/GodotTools.IdeMessaging.csproj
+++ b/modules/mono/editor/GodotTools/GodotTools.IdeMessaging/GodotTools.IdeMessaging.csproj
@@ -19,6 +19,6 @@ A client using this library is only compatible with servers of the same major ve
</Description>
</PropertyGroup>
<ItemGroup>
- <PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
+ <PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
</ItemGroup>
</Project>
diff --git a/modules/mono/editor/GodotTools/GodotTools/Build/MSBuildPanel.cs b/modules/mono/editor/GodotTools/GodotTools/Build/MSBuildPanel.cs
index 9e8f7ef1b1..3c020a2589 100644
--- a/modules/mono/editor/GodotTools/GodotTools/Build/MSBuildPanel.cs
+++ b/modules/mono/editor/GodotTools/GodotTools/Build/MSBuildPanel.cs
@@ -126,7 +126,7 @@ namespace GodotTools.Build
{
base._Ready();
- MinimumSize = new Vector2(0, 228) * EditorScale;
+ CustomMinimumSize = new Vector2(0, 228) * EditorScale;
SizeFlagsVertical = (int)SizeFlags.ExpandFill;
var toolBarHBox = new HBoxContainer { SizeFlagsHorizontal = (int)SizeFlags.ExpandFill };
diff --git a/modules/mono/editor/GodotTools/GodotTools/GodotTools.csproj b/modules/mono/editor/GodotTools/GodotTools/GodotTools.csproj
index b9aa760f4d..f1d45463c5 100644
--- a/modules/mono/editor/GodotTools/GodotTools/GodotTools.csproj
+++ b/modules/mono/editor/GodotTools/GodotTools/GodotTools.csproj
@@ -19,7 +19,7 @@
<ItemGroup>
<PackageReference Include="JetBrains.Annotations" Version="2019.1.3.0" ExcludeAssets="runtime" PrivateAssets="all" />
<PackageReference Include="Microsoft.NETFramework.ReferenceAssemblies" Version="1.0.0" PrivateAssets="All" />
- <PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
+ <PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
<Reference Include="GodotSharp">
<HintPath>$(GodotApiAssembliesDir)/GodotSharp.dll</HintPath>
<Private>False</Private>
diff --git a/modules/mono/editor/bindings_generator.cpp b/modules/mono/editor/bindings_generator.cpp
index 960d2fe27c..9d3d481068 100644
--- a/modules/mono/editor/bindings_generator.cpp
+++ b/modules/mono/editor/bindings_generator.cpp
@@ -954,7 +954,7 @@ void BindingsGenerator::_generate_global_constants(StringBuilder &p_output) {
}
}
- p_output.append(MEMBER_BEGIN "public const int ");
+ p_output.append(MEMBER_BEGIN "public const long ");
p_output.append(iconstant.proxy_name);
p_output.append(" = ");
p_output.append(itos(iconstant.value));
@@ -992,6 +992,7 @@ void BindingsGenerator::_generate_global_constants(StringBuilder &p_output) {
p_output.append("\n" INDENT1 "public enum ");
p_output.append(enum_proxy_name);
+ p_output.append(" : long");
p_output.append("\n" INDENT1 OPEN_BLOCK);
const ConstantInterface &last = ienum.constants.back()->get();
@@ -1417,7 +1418,7 @@ Error BindingsGenerator::_generate_cs_type(const TypeInterface &itype, const Str
}
}
- output.append(MEMBER_BEGIN "public const int ");
+ output.append(MEMBER_BEGIN "public const long ");
output.append(iconstant.proxy_name);
output.append(" = ");
output.append(itos(iconstant.value));
@@ -1435,6 +1436,7 @@ Error BindingsGenerator::_generate_cs_type(const TypeInterface &itype, const Str
output.append(MEMBER_BEGIN "public enum ");
output.append(ienum.cname.operator String());
+ output.append(" : long");
output.append(MEMBER_BEGIN OPEN_BLOCK);
const ConstantInterface &last = ienum.constants.back()->get();
@@ -3088,7 +3090,7 @@ bool BindingsGenerator::_populate_object_type_interfaces() {
const List<StringName> &enum_constants = E.value;
for (const StringName &constant_cname : enum_constants) {
String constant_name = constant_cname.operator String();
- int *value = class_info->constant_map.getptr(constant_cname);
+ int64_t *value = class_info->constant_map.getptr(constant_cname);
ERR_FAIL_NULL_V(value, false);
constants.erase(constant_name);
@@ -3123,7 +3125,7 @@ bool BindingsGenerator::_populate_object_type_interfaces() {
}
for (const String &constant_name : constants) {
- int *value = class_info->constant_map.getptr(StringName(constant_name));
+ int64_t *value = class_info->constant_map.getptr(StringName(constant_name));
ERR_FAIL_NULL_V(value, false);
ConstantInterface iconstant(constant_name, snake_to_pascal_case(constant_name, true), *value);
@@ -3666,7 +3668,7 @@ void BindingsGenerator::_populate_global_constants() {
}
}
- int constant_value = CoreConstants::get_global_constant_value(i);
+ int64_t constant_value = CoreConstants::get_global_constant_value(i);
StringName enum_name = CoreConstants::get_global_constant_enum(i);
ConstantInterface iconstant(constant_name, snake_to_pascal_case(constant_name, true), constant_value);
diff --git a/modules/mono/editor/bindings_generator.h b/modules/mono/editor/bindings_generator.h
index f0ba2b18e4..70c4f12146 100644
--- a/modules/mono/editor/bindings_generator.h
+++ b/modules/mono/editor/bindings_generator.h
@@ -45,12 +45,12 @@ class BindingsGenerator {
struct ConstantInterface {
String name;
String proxy_name;
- int value = 0;
+ int64_t value = 0;
const DocData::ConstantDoc *const_doc;
ConstantInterface() {}
- ConstantInterface(const String &p_name, const String &p_proxy_name, int p_value) {
+ ConstantInterface(const String &p_name, const String &p_proxy_name, int64_t p_value) {
name = p_name;
proxy_name = p_proxy_name;
value = p_value;
diff --git a/modules/mono/editor/script_templates/EditorScenePostImport/basic_import_script.cs b/modules/mono/editor/script_templates/EditorScenePostImport/basic_import_script.cs
index 0690205d01..9e1b7ef580 100644
--- a/modules/mono/editor/script_templates/EditorScenePostImport/basic_import_script.cs
+++ b/modules/mono/editor/script_templates/EditorScenePostImport/basic_import_script.cs
@@ -7,12 +7,10 @@ using System;
[Tool]
public partial class _CLASS_ : _BASE_
{
- public override Object _PostImport(Node scene)
+ public override Godot.Object _PostImport(Node scene)
{
- // Modify the contents of the scene upon import. For example, setting up LODs:
-// scene.GetNode<MeshInstance3D>("HighPolyMesh").DrawDistanceEnd = 5.0
-// scene.GetNode<MeshInstance3D>("LowPolyMesh").DrawDistanceBegin = 5.0
- return scene // Return the modified root node when you're done.
+ // Modify the contents of the scene upon import.
+ return scene; // Return the modified root node when you're done.
}
}
#endif
diff --git a/modules/mono/editor/script_templates/EditorScenePostImport/no_comments.cs b/modules/mono/editor/script_templates/EditorScenePostImport/no_comments.cs
index 4e2d9b7088..bf2c9434e4 100644
--- a/modules/mono/editor/script_templates/EditorScenePostImport/no_comments.cs
+++ b/modules/mono/editor/script_templates/EditorScenePostImport/no_comments.cs
@@ -7,9 +7,9 @@ using System;
[Tool]
public partial class _CLASS_ : _BASE_
{
- public override Object _PostImport(Node scene)
+ public override Godot.Object _PostImport(Node scene)
{
- return scene
+ return scene;
}
}
#endif
diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/GD.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/GD.cs
index 74aa38386f..bb076a9633 100644
--- a/modules/mono/glue/GodotSharp/GodotSharp/Core/GD.cs
+++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/GD.cs
@@ -239,6 +239,27 @@ namespace Godot
}
/// <summary>
+ /// Converts one or more arguments of any type to string in the best way possible and prints them to the console. The following BBCode tags are supported: b, i, u, s, indent, code, url, center, right, color, bgcolor, fgcolor. Color tags only support named colors such as [code]red[/code], [i]not[/i] hexadecimal color codes. Unsupported tags will be left as-is in standard output.
+ /// When printing to standard output, the supported subset of BBCode is converted to ANSI escape codes for the terminal emulator to display. Displaying ANSI escape codes is currently only supported on Linux and macOS. Support for ANSI escape codes may vary across terminal emulators, especially for italic and strikethrough.
+ ///
+ /// Note: Consider using <see cref="PushError(string)"/> and <see cref="PushWarning(string)"/>
+ /// to print error and warning messages instead of <see cref="Print(object[])"/> or <see cref="PrintRich(object[])"/>.
+ /// This distinguishes them from print messages used for debugging purposes,
+ /// while also displaying a stack trace when an error or warning is printed.
+ /// </summary>
+ /// <example>
+ /// <code>
+ /// GD.PrintRich("[b]Hello world![/b]"); // Prints out "Hello world!" in bold.
+ /// </code>
+ /// </example>
+ /// <param name="what">Arguments that will be printed.</param>
+ /// </summary>
+ public static void PrintRich(params object[] what)
+ {
+ godot_icall_GD_print_rich(GetPrintParams(what));
+ }
+
+ /// <summary>
/// Prints the current stack trace information to the console.
/// </summary>
public static void PrintStack()
@@ -562,6 +583,9 @@ namespace Godot
internal static extern void godot_icall_GD_print(object[] what);
[MethodImpl(MethodImplOptions.InternalCall)]
+ internal static extern void godot_icall_GD_print_rich(object[] what);
+
+ [MethodImpl(MethodImplOptions.InternalCall)]
internal static extern void godot_icall_GD_printerr(object[] what);
[MethodImpl(MethodImplOptions.InternalCall)]
diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Mathf.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Mathf.cs
index ce213da6a7..2b820070d6 100644
--- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Mathf.cs
+++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Mathf.cs
@@ -276,10 +276,14 @@ namespace Godot
/// Returns a normalized value considering the given range.
/// This is the opposite of <see cref="Lerp(real_t, real_t, real_t)"/>.
/// </summary>
- /// <param name="from">The interpolated value.</param>
+ /// <param name="from">The start value for interpolation.</param>
/// <param name="to">The destination value for interpolation.</param>
- /// <param name="weight">A value on the range of 0.0 to 1.0, representing the amount of interpolation.</param>
- /// <returns>The resulting value of the inverse interpolation.</returns>
+ /// <param name="weight">The interpolated value.</param>
+ /// <returns>
+ /// The resulting value of the inverse interpolation.
+ /// The returned value will be between 0.0 and 1.0 if <paramref name="weight"/> is
+ /// between <paramref name="from"/> and <paramref name="to"/> (inclusive).
+ /// </returns>
public static real_t InverseLerp(real_t from, real_t to, real_t weight)
{
return (weight - from) / (to - from);
@@ -516,6 +520,21 @@ namespace Godot
}
/// <summary>
+ /// Maps a <paramref name="value"/> from [<paramref name="inFrom"/>, <paramref name="inTo"/>]
+ /// to [<paramref name="outFrom"/>, <paramref name="outTo"/>].
+ /// </summary>
+ /// <param name="value">The value to map.</param>
+ /// <param name="inFrom">The start value for the input interpolation.</param>
+ /// <param name="inTo">The destination value for the input interpolation.</param>
+ /// <param name="outFrom">The start value for the output interpolation.</param>
+ /// <param name="outTo">The destination value for the output interpolation.</param>
+ /// <returns>The resulting mapped value mapped.</returns>
+ public static real_t RangeLerp(real_t value, real_t inFrom, real_t inTo, real_t outFrom, real_t outTo)
+ {
+ return Lerp(outFrom, outTo, InverseLerp(inFrom, inTo, value));
+ }
+
+ /// <summary>
/// Rounds <paramref name="s"/> to the nearest whole number,
/// with halfway cases rounded towards the nearest multiple of two.
/// </summary>
diff --git a/modules/mono/glue/gd_glue.cpp b/modules/mono/glue/gd_glue.cpp
index 8aead217cf..8b1c2b729e 100644
--- a/modules/mono/glue/gd_glue.cpp
+++ b/modules/mono/glue/gd_glue.cpp
@@ -90,6 +90,27 @@ void godot_icall_GD_print(MonoArray *p_what) {
print_line(str);
}
+void godot_icall_GD_print_rich(MonoArray *p_what) {
+ String str;
+ int length = mono_array_length(p_what);
+
+ for (int i = 0; i < length; i++) {
+ MonoObject *elem = mono_array_get(p_what, MonoObject *, i);
+
+ MonoException *exc = nullptr;
+ String elem_str = GDMonoMarshal::mono_object_to_variant_string(elem, &exc);
+
+ if (exc) {
+ GDMonoUtils::set_pending_exception(exc);
+ return;
+ }
+
+ str += elem_str;
+ }
+
+ print_line_rich(str);
+}
+
void godot_icall_GD_printerr(MonoArray *p_what) {
String str;
int length = mono_array_length(p_what);
@@ -300,6 +321,7 @@ void godot_register_gd_icalls() {
GDMonoUtils::add_internal_call("Godot.GD::godot_icall_GD_pusherror", godot_icall_GD_pusherror);
GDMonoUtils::add_internal_call("Godot.GD::godot_icall_GD_pushwarning", godot_icall_GD_pushwarning);
GDMonoUtils::add_internal_call("Godot.GD::godot_icall_GD_print", godot_icall_GD_print);
+ GDMonoUtils::add_internal_call("Godot.GD::godot_icall_GD_print_rich", godot_icall_GD_print_rich);
GDMonoUtils::add_internal_call("Godot.GD::godot_icall_GD_printerr", godot_icall_GD_printerr);
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);
diff --git a/modules/mono/managed_callable.cpp b/modules/mono/managed_callable.cpp
index 4f7783b765..c159bb9eea 100644
--- a/modules/mono/managed_callable.cpp
+++ b/modules/mono/managed_callable.cpp
@@ -66,9 +66,8 @@ bool ManagedCallable::compare_less(const CallableCustom *p_a, const CallableCust
}
uint32_t ManagedCallable::hash() const {
- // hmm
uint32_t hash = delegate_invoke->get_name().hash();
- return hash_djb2_one_64(delegate_handle.handle, hash);
+ return hash_murmur3_one_64(delegate_handle.handle, hash);
}
String ManagedCallable::get_as_text() const {
diff --git a/modules/mono/signal_awaiter_utils.cpp b/modules/mono/signal_awaiter_utils.cpp
index 315a9c29f6..618e1b58e0 100644
--- a/modules/mono/signal_awaiter_utils.cpp
+++ b/modules/mono/signal_awaiter_utils.cpp
@@ -63,7 +63,7 @@ bool SignalAwaiterCallable::compare_less(const CallableCustom *p_a, const Callab
uint32_t SignalAwaiterCallable::hash() const {
uint32_t hash = signal.hash();
- return hash_djb2_one_64(target_id, hash);
+ return hash_murmur3_one_64(target_id, hash);
}
String SignalAwaiterCallable::get_as_text() const {
@@ -164,7 +164,7 @@ bool EventSignalCallable::compare_less(const CallableCustom *p_a, const Callable
uint32_t EventSignalCallable::hash() const {
uint32_t hash = event_signal->field->get_name().hash();
- return hash_djb2_one_64(owner->get_instance_id(), hash);
+ return hash_murmur3_one_64(owner->get_instance_id(), hash);
}
String EventSignalCallable::get_as_text() const {
diff --git a/modules/mono/utils/string_utils.cpp b/modules/mono/utils/string_utils.cpp
index e6975611d2..64b68b70af 100644
--- a/modules/mono/utils/string_utils.cpp
+++ b/modules/mono/utils/string_utils.cpp
@@ -145,7 +145,7 @@ bool is_csharp_keyword(const String &p_name) {
p_name == "do" || p_name == "double" || p_name == "else" || p_name == "enum" ||
p_name == "event" || p_name == "explicit" || p_name == "extern" || p_name == "false" ||
p_name == "finally" || p_name == "fixed" || p_name == "float" || p_name == "for" ||
- p_name == "forech" || p_name == "goto" || p_name == "if" || p_name == "implicit" ||
+ p_name == "foreach" || p_name == "goto" || p_name == "if" || p_name == "implicit" ||
p_name == "in" || p_name == "int" || p_name == "interface" || p_name == "internal" ||
p_name == "is" || p_name == "lock" || p_name == "long" || p_name == "namespace" ||
p_name == "new" || p_name == "null" || p_name == "object" || p_name == "operator" ||
diff --git a/modules/navigation/godot_navigation_server.cpp b/modules/navigation/godot_navigation_server.cpp
index 2f8cb6c230..bcbc721dbb 100644
--- a/modules/navigation/godot_navigation_server.cpp
+++ b/modules/navigation/godot_navigation_server.cpp
@@ -123,6 +123,18 @@ void GodotNavigationServer::add_command(SetCommand *command) const {
}
}
+Array GodotNavigationServer::get_maps() const {
+ Array all_map_rids;
+ List<RID> maps_owned;
+ map_owner.get_owned_list(&maps_owned);
+ if (maps_owned.size()) {
+ for (const RID &E : maps_owned) {
+ all_map_rids.push_back(E);
+ }
+ }
+ return all_map_rids;
+}
+
RID GodotNavigationServer::map_create() const {
GodotNavigationServer *mut_this = const_cast<GodotNavigationServer *>(this);
MutexLock lock(mut_this->operations_mutex);
@@ -339,6 +351,16 @@ real_t GodotNavigationServer::region_get_travel_cost(RID p_region) const {
return region->get_travel_cost();
}
+bool GodotNavigationServer::region_owns_point(RID p_region, const Vector3 &p_point) const {
+ const NavRegion *region = region_owner.get_or_null(p_region);
+ ERR_FAIL_COND_V(region == nullptr, false);
+ if (region->get_map()) {
+ RID closest_point_owner = map_get_closest_point_owner(region->get_map()->get_self(), p_point);
+ return closest_point_owner == region->get_self();
+ }
+ return false;
+}
+
COMMAND_2(region_set_navigation_layers, RID, p_region, uint32_t, p_navigation_layers) {
NavRegion *region = region_owner.get_or_null(p_region);
ERR_FAIL_COND(region == nullptr);
@@ -580,6 +602,15 @@ void GodotNavigationServer::flush_queries() {
commands.clear();
}
+void GodotNavigationServer::map_force_update(RID p_map) {
+ NavMap *map = map_owner.get_or_null(p_map);
+ ERR_FAIL_COND(map == nullptr);
+
+ flush_queries();
+
+ map->sync();
+}
+
void GodotNavigationServer::process(real_t p_delta_time) {
flush_queries();
diff --git a/modules/navigation/godot_navigation_server.h b/modules/navigation/godot_navigation_server.h
index d931dbaee0..8e7e99888c 100644
--- a/modules/navigation/godot_navigation_server.h
+++ b/modules/navigation/godot_navigation_server.h
@@ -85,6 +85,8 @@ public:
void add_command(SetCommand *command) const;
+ virtual Array get_maps() const override;
+
virtual RID map_create() const override;
COMMAND_2(map_set_active, RID, p_map, bool, p_active);
virtual bool map_is_active(RID p_map) const override;
@@ -108,6 +110,8 @@ public:
virtual Array map_get_regions(RID p_map) const override;
virtual Array map_get_agents(RID p_map) const override;
+ virtual void map_force_update(RID p_map) override;
+
virtual RID region_create() const override;
COMMAND_2(region_set_enter_cost, RID, p_region, real_t, p_enter_cost);
@@ -115,6 +119,8 @@ public:
COMMAND_2(region_set_travel_cost, RID, p_region, real_t, p_travel_cost);
virtual real_t region_get_travel_cost(RID p_region) const override;
+ virtual bool region_owns_point(RID p_region, const Vector3 &p_point) const override;
+
COMMAND_2(region_set_map, RID, p_region, RID, p_map);
virtual RID region_get_map(RID p_region) const override;
COMMAND_2(region_set_navigation_layers, RID, p_region, uint32_t, p_navigation_layers);
diff --git a/modules/navigation/nav_map.cpp b/modules/navigation/nav_map.cpp
index 49c12813b3..17d6e0a0a1 100644
--- a/modules/navigation/nav_map.cpp
+++ b/modules/navigation/nav_map.cpp
@@ -573,7 +573,7 @@ void NavMap::sync() {
connections[ek].push_back(new_connection);
} else {
// The edge is already connected with another edge, skip.
- ERR_PRINT("Attempted to merge a navigation mesh triangle edge with another already-merged edge. This happens when the current `cell_size` is different from the one used to generate the navigation mesh. This will cause navigation problem.");
+ ERR_PRINT_ONCE("Attempted to merge a navigation mesh triangle edge with another already-merged edge. This happens when the current `cell_size` is different from the one used to generate the navigation mesh. This will cause navigation problems.");
}
}
}
diff --git a/modules/navigation/navigation_mesh_generator.cpp b/modules/navigation/navigation_mesh_generator.cpp
index e430f5fd59..6e8ac77f79 100644
--- a/modules/navigation/navigation_mesh_generator.cpp
+++ b/modules/navigation/navigation_mesh_generator.cpp
@@ -482,6 +482,21 @@ void NavigationMeshGenerator::_build_recast_navigation_mesh(
cfg.bmax[1] = bmax[1];
cfg.bmax[2] = bmax[2];
+ AABB baking_aabb = p_nav_mesh->get_filter_baking_aabb();
+
+ bool aabb_has_no_volume = baking_aabb.has_no_volume();
+
+ if (!aabb_has_no_volume) {
+ Vector3 baking_aabb_offset = p_nav_mesh->get_filter_baking_aabb_offset();
+
+ cfg.bmin[0] = baking_aabb.position[0] + baking_aabb_offset.x;
+ cfg.bmin[1] = baking_aabb.position[1] + baking_aabb_offset.y;
+ cfg.bmin[2] = baking_aabb.position[2] + baking_aabb_offset.z;
+ cfg.bmax[0] = cfg.bmin[0] + baking_aabb.size[0];
+ cfg.bmax[1] = cfg.bmin[1] + baking_aabb.size[1];
+ cfg.bmax[2] = cfg.bmin[2] + baking_aabb.size[2];
+ }
+
#ifdef TOOLS_ENABLED
if (ep) {
ep->step(TTR("Calculating grid size..."), 2);
@@ -631,6 +646,13 @@ void NavigationMeshGenerator::bake(Ref<NavigationMesh> p_nav_mesh, Node *p_node)
#ifdef TOOLS_ENABLED
EditorProgress *ep(nullptr);
+ // FIXME
+#endif
+#if 0
+ // After discussion on devchat disabled EditorProgress for now as it is not thread-safe and uses hacks and Main::iteration() for steps.
+ // EditorProgress randomly crashes the Engine when the bake function is used with a thread e.g. inside Editor with a tool script and procedural navigation
+ // This was not a problem in older versions as previously Godot was unable to (re)bake NavigationMesh at runtime.
+ // If EditorProgress is fixed and made thread-safe this should be enabled again.
if (Engine::get_singleton()->is_editor_hint()) {
ep = memnew(EditorProgress("bake", TTR("Navigation Mesh Generator Setup:"), 11));
}
diff --git a/modules/openxr/SCsub b/modules/openxr/SCsub
index ff320236a7..8783e061d2 100644
--- a/modules/openxr/SCsub
+++ b/modules/openxr/SCsub
@@ -81,6 +81,8 @@ if env["platform"] == "android":
if env["vulkan"]:
env_openxr.add_source_files(module_obj, "extensions/openxr_vulkan_extension.cpp")
+env_openxr.add_source_files(module_obj, "extensions/openxr_htc_vive_tracker_extension.cpp")
+
env.modules_sources += module_obj
if env["tools"]:
diff --git a/modules/openxr/action_map/openxr_action_map.cpp b/modules/openxr/action_map/openxr_action_map.cpp
index 366e131369..0eb5302442 100644
--- a/modules/openxr/action_map/openxr_action_map.cpp
+++ b/modules/openxr/action_map/openxr_action_map.cpp
@@ -182,10 +182,40 @@ void OpenXRActionMap::create_default_action_sets() {
Ref<OpenXRAction> ax_touch = action_set->add_new_action("ax_touch", "A/X touching", OpenXRAction::OPENXR_ACTION_BOOL, "/user/hand/left,/user/hand/right");
Ref<OpenXRAction> by_button = action_set->add_new_action("by_button", "B/Y button", OpenXRAction::OPENXR_ACTION_BOOL, "/user/hand/left,/user/hand/right");
Ref<OpenXRAction> by_touch = action_set->add_new_action("by_touch", "B/Y touching", OpenXRAction::OPENXR_ACTION_BOOL, "/user/hand/left,/user/hand/right");
- Ref<OpenXRAction> default_pose = action_set->add_new_action("default_pose", "Default pose", OpenXRAction::OPENXR_ACTION_POSE, "/user/hand/left,/user/hand/right");
+ Ref<OpenXRAction> default_pose = action_set->add_new_action("default_pose", "Default pose", OpenXRAction::OPENXR_ACTION_POSE,
+ "/user/hand/left,"
+ "/user/hand/right,"
+ // "/user/vive_tracker_htcx/role/handheld_object," <-- getting errors on this one
+ "/user/vive_tracker_htcx/role/left_foot,"
+ "/user/vive_tracker_htcx/role/right_foot,"
+ "/user/vive_tracker_htcx/role/left_shoulder,"
+ "/user/vive_tracker_htcx/role/right_shoulder,"
+ "/user/vive_tracker_htcx/role/left_elbow,"
+ "/user/vive_tracker_htcx/role/right_elbow,"
+ "/user/vive_tracker_htcx/role/left_knee,"
+ "/user/vive_tracker_htcx/role/right_knee,"
+ "/user/vive_tracker_htcx/role/waist,"
+ "/user/vive_tracker_htcx/role/chest,"
+ "/user/vive_tracker_htcx/role/camera,"
+ "/user/vive_tracker_htcx/role/keyboard");
Ref<OpenXRAction> aim_pose = action_set->add_new_action("aim_pose", "Aim pose", OpenXRAction::OPENXR_ACTION_POSE, "/user/hand/left,/user/hand/right");
Ref<OpenXRAction> grip_pose = action_set->add_new_action("grip_pose", "Grip pose", OpenXRAction::OPENXR_ACTION_POSE, "/user/hand/left,/user/hand/right");
- Ref<OpenXRAction> haptic = action_set->add_new_action("haptic", "Haptic", OpenXRAction::OPENXR_ACTION_HAPTIC, "/user/hand/left,/user/hand/right");
+ Ref<OpenXRAction> haptic = action_set->add_new_action("haptic", "Haptic", OpenXRAction::OPENXR_ACTION_HAPTIC,
+ "/user/hand/left,"
+ "/user/hand/right,"
+ // "/user/vive_tracker_htcx/role/handheld_object," <-- getting errors on this one
+ "/user/vive_tracker_htcx/role/left_foot,"
+ "/user/vive_tracker_htcx/role/right_foot,"
+ "/user/vive_tracker_htcx/role/left_shoulder,"
+ "/user/vive_tracker_htcx/role/right_shoulder,"
+ "/user/vive_tracker_htcx/role/left_elbow,"
+ "/user/vive_tracker_htcx/role/right_elbow,"
+ "/user/vive_tracker_htcx/role/left_knee,"
+ "/user/vive_tracker_htcx/role/right_knee,"
+ "/user/vive_tracker_htcx/role/waist,"
+ "/user/vive_tracker_htcx/role/chest,"
+ "/user/vive_tracker_htcx/role/camera,"
+ "/user/vive_tracker_htcx/role/keyboard");
// Create our interaction profiles
Ref<OpenXRInteractionProfile> profile = OpenXRInteractionProfile::new_profile("/interaction_profiles/khr/simple_controller");
@@ -399,6 +429,37 @@ void OpenXRActionMap::create_default_action_sets() {
profile->add_new_binding(primary_click, "/user/hand/left/input/trackpad/click,/user/hand/right/input/trackpad/click");
profile->add_new_binding(primary_touch, "/user/hand/left/input/trackpad/touch,/user/hand/right/input/trackpad/touch");
profile->add_new_binding(haptic, "/user/hand/left/output/haptic,/user/hand/right/output/haptic");
+
+ // Create our HTC Vive tracker profile
+ profile = OpenXRInteractionProfile::new_profile("/interaction_profiles/htc/vive_tracker_htcx");
+ profile->add_new_binding(default_pose,
+ // "/user/vive_tracker_htcx/role/handheld_object/input/grip/pose," <-- getting errors on this one
+ "/user/vive_tracker_htcx/role/left_foot/input/grip/pose,"
+ "/user/vive_tracker_htcx/role/right_foot/input/grip/pose,"
+ "/user/vive_tracker_htcx/role/left_shoulder/input/grip/pose,"
+ "/user/vive_tracker_htcx/role/right_shoulder/input/grip/pose,"
+ "/user/vive_tracker_htcx/role/left_elbow/input/grip/pose,"
+ "/user/vive_tracker_htcx/role/right_elbow/input/grip/pose,"
+ "/user/vive_tracker_htcx/role/left_knee/input/grip/pose,"
+ "/user/vive_tracker_htcx/role/right_knee/input/grip/pose,"
+ "/user/vive_tracker_htcx/role/waist/input/grip/pose,"
+ "/user/vive_tracker_htcx/role/chest/input/grip/pose,"
+ "/user/vive_tracker_htcx/role/camera/input/grip/pose,"
+ "/user/vive_tracker_htcx/role/keyboard/input/grip/pose");
+ profile->add_new_binding(haptic,
+ // "/user/vive_tracker_htcx/role/handheld_object/output/haptic," <-- getting errors on this one
+ "/user/vive_tracker_htcx/role/left_foot/output/haptic,"
+ "/user/vive_tracker_htcx/role/right_foot/output/haptic,"
+ "/user/vive_tracker_htcx/role/left_shoulder/output/haptic,"
+ "/user/vive_tracker_htcx/role/right_shoulder/output/haptic,"
+ "/user/vive_tracker_htcx/role/left_elbow/output/haptic,"
+ "/user/vive_tracker_htcx/role/right_elbow/output/haptic,"
+ "/user/vive_tracker_htcx/role/left_knee/output/haptic,"
+ "/user/vive_tracker_htcx/role/right_knee/output/haptic,"
+ "/user/vive_tracker_htcx/role/waist/output/haptic,"
+ "/user/vive_tracker_htcx/role/chest/output/haptic,"
+ "/user/vive_tracker_htcx/role/camera/output/haptic,"
+ "/user/vive_tracker_htcx/role/keyboard/output/haptic");
add_interaction_profile(profile);
}
diff --git a/modules/openxr/action_map/openxr_defs.cpp b/modules/openxr/action_map/openxr_defs.cpp
index e10326449c..89860199be 100644
--- a/modules/openxr/action_map/openxr_defs.cpp
+++ b/modules/openxr/action_map/openxr_defs.cpp
@@ -32,8 +32,28 @@
// Our top level paths to which devices can be bound
OpenXRDefs::TopLevelPath OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_TOP_LEVEL_PATH_MAX] = {
+ // Core OpenXR paths
{ "Left hand controller", "/user/hand/left" },
{ "Right hand controller", "/user/hand/right" },
+ { "Head", "/user/head" },
+ { "Gamepad", "/user/gamepad" },
+ { "Treadmill", "/user/treadmill" },
+
+ // Specific to HTC tracker extension
+ // { "Handheld object tracker", "/user/vive_tracker_htcx/role/handheld_object" },
+ { "Left foot tracker", "/user/vive_tracker_htcx/role/left_foot" },
+ { "Right foot tracker", "/user/vive_tracker_htcx/role/right_foot" },
+ { "Left shoulder tracker", "/user/vive_tracker_htcx/role/left_shoulder" },
+ { "Right shoulder tracker", "/user/vive_tracker_htcx/role/right_shoulder" },
+ { "Left elbow tracker", "/user/vive_tracker_htcx/role/left_elbow" },
+ { "Right elbow tracker", "/user/vive_tracker_htcx/role/right_elbow" },
+ { "Left knee tracker", "/user/vive_tracker_htcx/role/left_knee" },
+ { "Right knee tracker", "/user/vive_tracker_htcx/role/right_knee" },
+ { "Waist tracker", "/user/vive_tracker_htcx/role/waist" },
+ { "Chest tracker", "/user/vive_tracker_htcx/role/chest" },
+ { "Camera tracker", "/user/vive_tracker_htcx/role/camera" },
+ { "Keyboard tracker", "/user/vive_tracker_htcx/role/keyboard" },
+
};
// Fallback Khronos simple controller
@@ -378,6 +398,137 @@ OpenXRDefs::IOPath OpenXRDefs::huawei_controller_paths[] = {
{ "Haptic output", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_RIGHT_HAND], "/user/hand/right/output/haptic", OpenXRAction::OPENXR_ACTION_HAPTIC },
};
+// HTC Vive tracker
+// Interestingly enough trackers don't have buttons or inputs, yet these are defined in the spec.
+// I think this can be supported through attachments on the trackers.
+OpenXRDefs::IOPath OpenXRDefs::vive_tracker_controller_paths[] = {
+ // { "Menu click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_HANDHELD_TRACKER], "/user/vive_tracker_htcx/role/handheld_object/input/menu/click", OpenXRAction::OPENXR_ACTION_BOOL },
+ { "Menu click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_LEFT_FOOT_TRACKER], "/user/vive_tracker_htcx/role/left_foot/input/menu/click", OpenXRAction::OPENXR_ACTION_BOOL },
+ { "Menu click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_RIGHT_FOOT_TRACKER], "/user/vive_tracker_htcx/role/right_foot/input/menu/click", OpenXRAction::OPENXR_ACTION_BOOL },
+ { "Menu click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_LEFT_SHOULDER_TRACKER], "/user/vive_tracker_htcx/role/left_shoulder/input/menu/click", OpenXRAction::OPENXR_ACTION_BOOL },
+ { "Menu click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_RIGHT_SHOULDER_TRACKER], "/user/vive_tracker_htcx/role/right_shoulder/input/menu/click", OpenXRAction::OPENXR_ACTION_BOOL },
+ { "Menu click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_LEFT_ELBOW_TRACKER], "/user/vive_tracker_htcx/role/left_elbow/input/menu/click", OpenXRAction::OPENXR_ACTION_BOOL },
+ { "Menu click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_RIGHT_ELBOW_TRACKER], "/user/vive_tracker_htcx/role/right_elbow/input/menu/click", OpenXRAction::OPENXR_ACTION_BOOL },
+ { "Menu click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_LEFT_KNEE_TRACKER], "/user/vive_tracker_htcx/role/left_knee/input/menu/click", OpenXRAction::OPENXR_ACTION_BOOL },
+ { "Menu click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_RIGHT_KNEE_TRACKER], "/user/vive_tracker_htcx/role/right_knee/input/menu/click", OpenXRAction::OPENXR_ACTION_BOOL },
+ { "Menu click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_WAIST_TRACKER], "/user/vive_tracker_htcx/role/waist/input/menu/click", OpenXRAction::OPENXR_ACTION_BOOL },
+ { "Menu click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_CHEST_TRACKER], "/user/vive_tracker_htcx/role/chest/input/menu/click", OpenXRAction::OPENXR_ACTION_BOOL },
+ { "Menu click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_CAMERA_TRACKER], "/user/vive_tracker_htcx/role/camera/input/menu/click", OpenXRAction::OPENXR_ACTION_BOOL },
+ { "Menu click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_KEYBOARD_TRACKER], "/user/vive_tracker_htcx/role/keyboard/input/menu/click", OpenXRAction::OPENXR_ACTION_BOOL },
+
+ // { "Trigger", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_HANDHELD_TRACKER], "/user/vive_tracker_htcx/role/handheld_object/input/trigger/value", OpenXRAction::OPENXR_ACTION_FLOAT },
+ { "Trigger", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_LEFT_FOOT_TRACKER], "/user/vive_tracker_htcx/role/left_foot/input/trigger/value", OpenXRAction::OPENXR_ACTION_FLOAT },
+ { "Trigger", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_RIGHT_FOOT_TRACKER], "/user/vive_tracker_htcx/role/right_foot/input/trigger/value", OpenXRAction::OPENXR_ACTION_FLOAT },
+ { "Trigger", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_LEFT_SHOULDER_TRACKER], "/user/vive_tracker_htcx/role/left_shoulder/input/trigger/value", OpenXRAction::OPENXR_ACTION_FLOAT },
+ { "Trigger", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_RIGHT_SHOULDER_TRACKER], "/user/vive_tracker_htcx/role/right_shoulder/input/trigger/value", OpenXRAction::OPENXR_ACTION_FLOAT },
+ { "Trigger", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_LEFT_ELBOW_TRACKER], "/user/vive_tracker_htcx/role/left_elbow/input/trigger/value", OpenXRAction::OPENXR_ACTION_FLOAT },
+ { "Trigger", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_RIGHT_ELBOW_TRACKER], "/user/vive_tracker_htcx/role/right_elbow/input/trigger/value", OpenXRAction::OPENXR_ACTION_FLOAT },
+ { "Trigger", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_LEFT_KNEE_TRACKER], "/user/vive_tracker_htcx/role/left_knee/input/trigger/value", OpenXRAction::OPENXR_ACTION_FLOAT },
+ { "Trigger", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_RIGHT_KNEE_TRACKER], "/user/vive_tracker_htcx/role/right_knee/input/trigger/value", OpenXRAction::OPENXR_ACTION_FLOAT },
+ { "Trigger", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_WAIST_TRACKER], "/user/vive_tracker_htcx/role/waist/input/trigger/value", OpenXRAction::OPENXR_ACTION_FLOAT },
+ { "Trigger", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_CHEST_TRACKER], "/user/vive_tracker_htcx/role/chest/input/trigger/value", OpenXRAction::OPENXR_ACTION_FLOAT },
+ { "Trigger", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_CAMERA_TRACKER], "/user/vive_tracker_htcx/role/camera/input/trigger/value", OpenXRAction::OPENXR_ACTION_FLOAT },
+ { "Trigger", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_KEYBOARD_TRACKER], "/user/vive_tracker_htcx/role/keyboard/input/trigger/value", OpenXRAction::OPENXR_ACTION_FLOAT },
+
+ // { "Trigger click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_HANDHELD_TRACKER], "/user/vive_tracker_htcx/role/handheld_object/input/trigger/click", OpenXRAction::OPENXR_ACTION_BOOL },
+ { "Trigger click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_LEFT_FOOT_TRACKER], "/user/vive_tracker_htcx/role/left_foot/input/trigger/click", OpenXRAction::OPENXR_ACTION_BOOL },
+ { "Trigger click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_RIGHT_FOOT_TRACKER], "/user/vive_tracker_htcx/role/right_foot/input/trigger/click", OpenXRAction::OPENXR_ACTION_BOOL },
+ { "Trigger click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_LEFT_SHOULDER_TRACKER], "/user/vive_tracker_htcx/role/left_shoulder/input/trigger/click", OpenXRAction::OPENXR_ACTION_BOOL },
+ { "Trigger click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_RIGHT_SHOULDER_TRACKER], "/user/vive_tracker_htcx/role/right_shoulder/input/trigger/click", OpenXRAction::OPENXR_ACTION_BOOL },
+ { "Trigger click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_LEFT_ELBOW_TRACKER], "/user/vive_tracker_htcx/role/left_elbow/input/trigger/click", OpenXRAction::OPENXR_ACTION_BOOL },
+ { "Trigger click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_RIGHT_ELBOW_TRACKER], "/user/vive_tracker_htcx/role/right_elbow/input/trigger/click", OpenXRAction::OPENXR_ACTION_BOOL },
+ { "Trigger click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_LEFT_KNEE_TRACKER], "/user/vive_tracker_htcx/role/left_knee/input/trigger/click", OpenXRAction::OPENXR_ACTION_BOOL },
+ { "Trigger click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_RIGHT_KNEE_TRACKER], "/user/vive_tracker_htcx/role/right_knee/input/trigger/click", OpenXRAction::OPENXR_ACTION_BOOL },
+ { "Trigger click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_WAIST_TRACKER], "/user/vive_tracker_htcx/role/waist/input/trigger/click", OpenXRAction::OPENXR_ACTION_BOOL },
+ { "Trigger click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_CHEST_TRACKER], "/user/vive_tracker_htcx/role/chest/input/trigger/click", OpenXRAction::OPENXR_ACTION_BOOL },
+ { "Trigger click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_CAMERA_TRACKER], "/user/vive_tracker_htcx/role/camera/input/trigger/click", OpenXRAction::OPENXR_ACTION_BOOL },
+ { "Trigger click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_KEYBOARD_TRACKER], "/user/vive_tracker_htcx/role/keyboard/input/trigger/click", OpenXRAction::OPENXR_ACTION_BOOL },
+
+ // { "Squeeze click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_HANDHELD_TRACKER], "/user/vive_tracker_htcx/role/handheld_object/input/squeeze/click", OpenXRAction::OPENXR_ACTION_BOOL },
+ { "Squeeze click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_LEFT_FOOT_TRACKER], "/user/vive_tracker_htcx/role/left_foot/input/squeeze/click", OpenXRAction::OPENXR_ACTION_BOOL },
+ { "Squeeze click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_RIGHT_FOOT_TRACKER], "/user/vive_tracker_htcx/role/right_foot/input/squeeze/click", OpenXRAction::OPENXR_ACTION_BOOL },
+ { "Squeeze click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_LEFT_SHOULDER_TRACKER], "/user/vive_tracker_htcx/role/left_shoulder/input/squeeze/click", OpenXRAction::OPENXR_ACTION_BOOL },
+ { "Squeeze click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_RIGHT_SHOULDER_TRACKER], "/user/vive_tracker_htcx/role/right_shoulder/input/squeeze/click", OpenXRAction::OPENXR_ACTION_BOOL },
+ { "Squeeze click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_LEFT_ELBOW_TRACKER], "/user/vive_tracker_htcx/role/left_elbow/input/squeeze/click", OpenXRAction::OPENXR_ACTION_BOOL },
+ { "Squeeze click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_RIGHT_ELBOW_TRACKER], "/user/vive_tracker_htcx/role/right_elbow/input/squeeze/click", OpenXRAction::OPENXR_ACTION_BOOL },
+ { "Squeeze click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_LEFT_KNEE_TRACKER], "/user/vive_tracker_htcx/role/left_knee/input/squeeze/click", OpenXRAction::OPENXR_ACTION_BOOL },
+ { "Squeeze click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_RIGHT_KNEE_TRACKER], "/user/vive_tracker_htcx/role/right_knee/input/squeeze/click", OpenXRAction::OPENXR_ACTION_BOOL },
+ { "Squeeze click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_WAIST_TRACKER], "/user/vive_tracker_htcx/role/waist/input/squeeze/click", OpenXRAction::OPENXR_ACTION_BOOL },
+ { "Squeeze click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_CHEST_TRACKER], "/user/vive_tracker_htcx/role/chest/input/squeeze/click", OpenXRAction::OPENXR_ACTION_BOOL },
+ { "Squeeze click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_CAMERA_TRACKER], "/user/vive_tracker_htcx/role/camera/input/squeeze/click", OpenXRAction::OPENXR_ACTION_BOOL },
+ { "Squeeze click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_KEYBOARD_TRACKER], "/user/vive_tracker_htcx/role/keyboard/input/squeeze/click", OpenXRAction::OPENXR_ACTION_BOOL },
+
+ // { "Trackpad", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_HANDHELD_TRACKER], "/user/vive_tracker_htcx/role/handheld_object/input/trackpad", OpenXRAction::OPENXR_ACTION_VECTOR2 },
+ { "Trackpad", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_LEFT_FOOT_TRACKER], "/user/vive_tracker_htcx/role/left_foot/input/trackpad", OpenXRAction::OPENXR_ACTION_VECTOR2 },
+ { "Trackpad", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_RIGHT_FOOT_TRACKER], "/user/vive_tracker_htcx/role/right_foot/input/trackpad", OpenXRAction::OPENXR_ACTION_VECTOR2 },
+ { "Trackpad", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_LEFT_SHOULDER_TRACKER], "/user/vive_tracker_htcx/role/left_shoulder/input/trackpad", OpenXRAction::OPENXR_ACTION_VECTOR2 },
+ { "Trackpad", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_RIGHT_SHOULDER_TRACKER], "/user/vive_tracker_htcx/role/right_shoulder/input/trackpad", OpenXRAction::OPENXR_ACTION_VECTOR2 },
+ { "Trackpad", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_LEFT_ELBOW_TRACKER], "/user/vive_tracker_htcx/role/left_elbow/input/trackpad", OpenXRAction::OPENXR_ACTION_VECTOR2 },
+ { "Trackpad", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_RIGHT_ELBOW_TRACKER], "/user/vive_tracker_htcx/role/right_elbow/input/trackpad", OpenXRAction::OPENXR_ACTION_VECTOR2 },
+ { "Trackpad", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_LEFT_KNEE_TRACKER], "/user/vive_tracker_htcx/role/left_knee/input/trackpad", OpenXRAction::OPENXR_ACTION_VECTOR2 },
+ { "Trackpad", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_RIGHT_KNEE_TRACKER], "/user/vive_tracker_htcx/role/right_knee/input/trackpad", OpenXRAction::OPENXR_ACTION_VECTOR2 },
+ { "Trackpad", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_WAIST_TRACKER], "/user/vive_tracker_htcx/role/waist/input/trackpad", OpenXRAction::OPENXR_ACTION_VECTOR2 },
+ { "Trackpad", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_CHEST_TRACKER], "/user/vive_tracker_htcx/role/chest/input/trackpad", OpenXRAction::OPENXR_ACTION_VECTOR2 },
+ { "Trackpad", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_CAMERA_TRACKER], "/user/vive_tracker_htcx/role/camera/input/trackpad", OpenXRAction::OPENXR_ACTION_VECTOR2 },
+ { "Trackpad", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_KEYBOARD_TRACKER], "/user/vive_tracker_htcx/role/keyboard/input/trackpad", OpenXRAction::OPENXR_ACTION_VECTOR2 },
+
+ // { "Trackpad click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_HANDHELD_TRACKER], "/user/vive_tracker_htcx/role/handheld_object/input/trackpad/click", OpenXRAction::OPENXR_ACTION_BOOL },
+ { "Trackpad click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_LEFT_FOOT_TRACKER], "/user/vive_tracker_htcx/role/left_foot/input/trackpad/click", OpenXRAction::OPENXR_ACTION_BOOL },
+ { "Trackpad click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_RIGHT_FOOT_TRACKER], "/user/vive_tracker_htcx/role/right_foot/input/trackpad/click", OpenXRAction::OPENXR_ACTION_BOOL },
+ { "Trackpad click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_LEFT_SHOULDER_TRACKER], "/user/vive_tracker_htcx/role/left_shoulder/input/trackpad/click", OpenXRAction::OPENXR_ACTION_BOOL },
+ { "Trackpad click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_RIGHT_SHOULDER_TRACKER], "/user/vive_tracker_htcx/role/right_shoulder/input/trackpad/click", OpenXRAction::OPENXR_ACTION_BOOL },
+ { "Trackpad click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_LEFT_ELBOW_TRACKER], "/user/vive_tracker_htcx/role/left_elbow/input/trackpad/click", OpenXRAction::OPENXR_ACTION_BOOL },
+ { "Trackpad click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_RIGHT_ELBOW_TRACKER], "/user/vive_tracker_htcx/role/right_elbow/input/trackpad/click", OpenXRAction::OPENXR_ACTION_BOOL },
+ { "Trackpad click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_LEFT_KNEE_TRACKER], "/user/vive_tracker_htcx/role/left_knee/input/trackpad/click", OpenXRAction::OPENXR_ACTION_BOOL },
+ { "Trackpad click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_RIGHT_KNEE_TRACKER], "/user/vive_tracker_htcx/role/right_knee/input/trackpad/click", OpenXRAction::OPENXR_ACTION_BOOL },
+ { "Trackpad click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_WAIST_TRACKER], "/user/vive_tracker_htcx/role/waist/input/trackpad/click", OpenXRAction::OPENXR_ACTION_BOOL },
+ { "Trackpad click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_CHEST_TRACKER], "/user/vive_tracker_htcx/role/chest/input/trackpad/click", OpenXRAction::OPENXR_ACTION_BOOL },
+ { "Trackpad click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_CAMERA_TRACKER], "/user/vive_tracker_htcx/role/camera/input/trackpad/click", OpenXRAction::OPENXR_ACTION_BOOL },
+ { "Trackpad click", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_KEYBOARD_TRACKER], "/user/vive_tracker_htcx/role/keyboard/input/trackpad/click", OpenXRAction::OPENXR_ACTION_BOOL },
+
+ // { "Trackpad touch", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_HANDHELD_TRACKER], "/user/vive_tracker_htcx/role/handheld_object/input/trackpad/touch", OpenXRAction::OPENXR_ACTION_BOOL },
+ { "Trackpad touch", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_LEFT_FOOT_TRACKER], "/user/vive_tracker_htcx/role/left_foot/input/trackpad/touch", OpenXRAction::OPENXR_ACTION_BOOL },
+ { "Trackpad touch", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_RIGHT_FOOT_TRACKER], "/user/vive_tracker_htcx/role/right_foot/input/trackpad/touch", OpenXRAction::OPENXR_ACTION_BOOL },
+ { "Trackpad touch", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_LEFT_SHOULDER_TRACKER], "/user/vive_tracker_htcx/role/left_shoulder/input/trackpad/touch", OpenXRAction::OPENXR_ACTION_BOOL },
+ { "Trackpad touch", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_RIGHT_SHOULDER_TRACKER], "/user/vive_tracker_htcx/role/right_shoulder/input/trackpad/touch", OpenXRAction::OPENXR_ACTION_BOOL },
+ { "Trackpad touch", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_LEFT_ELBOW_TRACKER], "/user/vive_tracker_htcx/role/left_elbow/input/trackpad/touch", OpenXRAction::OPENXR_ACTION_BOOL },
+ { "Trackpad touch", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_RIGHT_ELBOW_TRACKER], "/user/vive_tracker_htcx/role/right_elbow/input/trackpad/touch", OpenXRAction::OPENXR_ACTION_BOOL },
+ { "Trackpad touch", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_LEFT_KNEE_TRACKER], "/user/vive_tracker_htcx/role/left_knee/input/trackpad/touch", OpenXRAction::OPENXR_ACTION_BOOL },
+ { "Trackpad touch", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_RIGHT_KNEE_TRACKER], "/user/vive_tracker_htcx/role/right_knee/input/trackpad/touch", OpenXRAction::OPENXR_ACTION_BOOL },
+ { "Trackpad touch", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_WAIST_TRACKER], "/user/vive_tracker_htcx/role/waist/input/trackpad/touch", OpenXRAction::OPENXR_ACTION_BOOL },
+ { "Trackpad touch", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_CHEST_TRACKER], "/user/vive_tracker_htcx/role/chest/input/trackpad/touch", OpenXRAction::OPENXR_ACTION_BOOL },
+ { "Trackpad touch", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_CAMERA_TRACKER], "/user/vive_tracker_htcx/role/camera/input/trackpad/touch", OpenXRAction::OPENXR_ACTION_BOOL },
+ { "Trackpad touch", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_KEYBOARD_TRACKER], "/user/vive_tracker_htcx/role/keyboard/input/trackpad/touch", OpenXRAction::OPENXR_ACTION_BOOL },
+
+ // { "Grip pose", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_HANDHELD_TRACKER], "/user/vive_tracker_htcx/role/handheld_object/input/grip/pose", OpenXRAction::OPENXR_ACTION_POSE },
+ { "Grip pose", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_LEFT_FOOT_TRACKER], "/user/vive_tracker_htcx/role/left_foot/input/grip/pose", OpenXRAction::OPENXR_ACTION_POSE },
+ { "Grip pose", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_RIGHT_FOOT_TRACKER], "/user/vive_tracker_htcx/role/right_foot/input/grip/pose", OpenXRAction::OPENXR_ACTION_POSE },
+ { "Grip pose", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_LEFT_SHOULDER_TRACKER], "/user/vive_tracker_htcx/role/left_shoulder/input/grip/pose", OpenXRAction::OPENXR_ACTION_POSE },
+ { "Grip pose", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_RIGHT_SHOULDER_TRACKER], "/user/vive_tracker_htcx/role/right_shoulder/input/grip/pose", OpenXRAction::OPENXR_ACTION_POSE },
+ { "Grip pose", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_LEFT_ELBOW_TRACKER], "/user/vive_tracker_htcx/role/left_elbow/input/grip/pose", OpenXRAction::OPENXR_ACTION_POSE },
+ { "Grip pose", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_RIGHT_ELBOW_TRACKER], "/user/vive_tracker_htcx/role/right_elbow/input/grip/pose", OpenXRAction::OPENXR_ACTION_POSE },
+ { "Grip pose", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_LEFT_KNEE_TRACKER], "/user/vive_tracker_htcx/role/left_knee/input/grip/pose", OpenXRAction::OPENXR_ACTION_POSE },
+ { "Grip pose", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_RIGHT_KNEE_TRACKER], "/user/vive_tracker_htcx/role/right_knee/input/grip/pose", OpenXRAction::OPENXR_ACTION_POSE },
+ { "Grip pose", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_WAIST_TRACKER], "/user/vive_tracker_htcx/role/waist/input/grip/pose", OpenXRAction::OPENXR_ACTION_POSE },
+ { "Grip pose", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_CHEST_TRACKER], "/user/vive_tracker_htcx/role/chest/input/grip/pose", OpenXRAction::OPENXR_ACTION_POSE },
+ { "Grip pose", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_CAMERA_TRACKER], "/user/vive_tracker_htcx/role/camera/input/grip/pose", OpenXRAction::OPENXR_ACTION_POSE },
+ { "Grip pose", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_KEYBOARD_TRACKER], "/user/vive_tracker_htcx/role/keyboard/input/grip/pose", OpenXRAction::OPENXR_ACTION_POSE },
+
+ // { "Haptic output", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_HANDHELD_TRACKER], "/user/vive_tracker_htcx/role/handheld_object/output/haptic", OpenXRAction::OPENXR_ACTION_HAPTIC },
+ { "Haptic output", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_LEFT_FOOT_TRACKER], "/user/vive_tracker_htcx/role/left_foot/output/haptic", OpenXRAction::OPENXR_ACTION_HAPTIC },
+ { "Haptic output", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_RIGHT_FOOT_TRACKER], "/user/vive_tracker_htcx/role/right_foot/output/haptic", OpenXRAction::OPENXR_ACTION_HAPTIC },
+ { "Haptic output", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_LEFT_SHOULDER_TRACKER], "/user/vive_tracker_htcx/role/left_shoulder/output/haptic", OpenXRAction::OPENXR_ACTION_HAPTIC },
+ { "Haptic output", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_RIGHT_SHOULDER_TRACKER], "/user/vive_tracker_htcx/role/right_shoulder/output/haptic", OpenXRAction::OPENXR_ACTION_HAPTIC },
+ { "Haptic output", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_LEFT_ELBOW_TRACKER], "/user/vive_tracker_htcx/role/left_elbow/output/haptic", OpenXRAction::OPENXR_ACTION_HAPTIC },
+ { "Haptic output", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_RIGHT_ELBOW_TRACKER], "/user/vive_tracker_htcx/role/right_elbow/output/haptic", OpenXRAction::OPENXR_ACTION_HAPTIC },
+ { "Haptic output", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_LEFT_KNEE_TRACKER], "/user/vive_tracker_htcx/role/left_knee/output/haptic", OpenXRAction::OPENXR_ACTION_HAPTIC },
+ { "Haptic output", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_RIGHT_KNEE_TRACKER], "/user/vive_tracker_htcx/role/right_knee/output/haptic", OpenXRAction::OPENXR_ACTION_HAPTIC },
+ { "Haptic output", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_WAIST_TRACKER], "/user/vive_tracker_htcx/role/waist/output/haptic", OpenXRAction::OPENXR_ACTION_HAPTIC },
+ { "Haptic output", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_CHEST_TRACKER], "/user/vive_tracker_htcx/role/chest/output/haptic", OpenXRAction::OPENXR_ACTION_HAPTIC },
+ { "Haptic output", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_CAMERA_TRACKER], "/user/vive_tracker_htcx/role/camera/output/haptic", OpenXRAction::OPENXR_ACTION_HAPTIC },
+ { "Haptic output", &OpenXRDefs::available_top_level_paths[OpenXRDefs::OPENXR_HTC_KEYBOARD_TRACKER], "/user/vive_tracker_htcx/role/keyboard/output/haptic", OpenXRAction::OPENXR_ACTION_HAPTIC },
+};
+
OpenXRDefs::InteractionProfile OpenXRDefs::available_interaction_profiles[] = {
{
"Simple controller", // display_name
@@ -439,6 +590,13 @@ OpenXRDefs::InteractionProfile OpenXRDefs::available_interaction_profiles[] = {
huawei_controller_paths, // io_paths
sizeof(huawei_controller_paths) / sizeof(OpenXRDefs::IOPath) // io_path_count
},
+
+ {
+ "HTC Vive tracker", // display_name
+ "/interaction_profiles/htc/vive_tracker_htcx", // openxr_path
+ vive_tracker_controller_paths, // io_paths
+ sizeof(vive_tracker_controller_paths) / sizeof(OpenXRDefs::IOPath) // io_path_count
+ },
};
int OpenXRDefs::available_interaction_profile_count = sizeof(OpenXRDefs::available_interaction_profiles) / sizeof(OpenXRDefs::InteractionProfile);
diff --git a/modules/openxr/action_map/openxr_defs.h b/modules/openxr/action_map/openxr_defs.h
index dbda4757f1..9bdd9a6ded 100644
--- a/modules/openxr/action_map/openxr_defs.h
+++ b/modules/openxr/action_map/openxr_defs.h
@@ -51,8 +51,28 @@
class OpenXRDefs {
public:
enum TOP_LEVEL_PATH {
+ // Core OpenXR toplevel paths
OPENXR_LEFT_HAND,
OPENXR_RIGHT_HAND,
+ OPENXR_HEAD,
+ OPENXR_GAMEPAD,
+ OPENXR_TREADMILL,
+
+ // HTC tracker extension toplevel paths
+ // OPENXR_HTC_HANDHELD_TRACKER,
+ OPENXR_HTC_LEFT_FOOT_TRACKER,
+ OPENXR_HTC_RIGHT_FOOT_TRACKER,
+ OPENXR_HTC_LEFT_SHOULDER_TRACKER,
+ OPENXR_HTC_RIGHT_SHOULDER_TRACKER,
+ OPENXR_HTC_LEFT_ELBOW_TRACKER,
+ OPENXR_HTC_RIGHT_ELBOW_TRACKER,
+ OPENXR_HTC_LEFT_KNEE_TRACKER,
+ OPENXR_HTC_RIGHT_KNEE_TRACKER,
+ OPENXR_HTC_WAIST_TRACKER,
+ OPENXR_HTC_CHEST_TRACKER,
+ OPENXR_HTC_CAMERA_TRACKER,
+ OPENXR_HTC_KEYBOARD_TRACKER,
+
OPENXR_TOP_LEVEL_PATH_MAX
};
@@ -89,6 +109,7 @@ private:
static IOPath vive_cosmos_paths[];
static IOPath vive_focus3_paths[];
static IOPath huawei_controller_paths[];
+ static IOPath vive_tracker_controller_paths[];
static InteractionProfile available_interaction_profiles[];
static int available_interaction_profile_count;
diff --git a/modules/openxr/extensions/openxr_htc_vive_tracker_extension.cpp b/modules/openxr/extensions/openxr_htc_vive_tracker_extension.cpp
new file mode 100644
index 0000000000..302acf4e30
--- /dev/null
+++ b/modules/openxr/extensions/openxr_htc_vive_tracker_extension.cpp
@@ -0,0 +1,67 @@
+/*************************************************************************/
+/* openxr_htc_vive_tracker_extension.cpp */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2022 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 "openxr_htc_vive_tracker_extension.h"
+#include "core/string/print_string.h"
+
+OpenXRHTCViveTrackerExtension *OpenXRHTCViveTrackerExtension::singleton = nullptr;
+
+OpenXRHTCViveTrackerExtension *OpenXRHTCViveTrackerExtension::get_singleton() {
+ return singleton;
+}
+
+OpenXRHTCViveTrackerExtension::OpenXRHTCViveTrackerExtension(OpenXRAPI *p_openxr_api) :
+ OpenXRExtensionWrapper(p_openxr_api) {
+ singleton = this;
+
+ request_extensions[XR_HTCX_VIVE_TRACKER_INTERACTION_EXTENSION_NAME] = &available;
+}
+
+OpenXRHTCViveTrackerExtension::~OpenXRHTCViveTrackerExtension() {
+ singleton = nullptr;
+}
+
+bool OpenXRHTCViveTrackerExtension::is_available() {
+ return available;
+}
+
+bool OpenXRHTCViveTrackerExtension::on_event_polled(const XrEventDataBuffer &event) {
+ switch (event.type) {
+ case XR_TYPE_EVENT_DATA_VIVE_TRACKER_CONNECTED_HTCX: {
+ // Investigate if we need to do more here
+ print_verbose("OpenXR EVENT: VIVE tracker connected");
+
+ return true;
+ } break;
+ default: {
+ return false;
+ } break;
+ }
+}
diff --git a/modules/openxr/extensions/openxr_htc_vive_tracker_extension.h b/modules/openxr/extensions/openxr_htc_vive_tracker_extension.h
new file mode 100644
index 0000000000..7670bc074b
--- /dev/null
+++ b/modules/openxr/extensions/openxr_htc_vive_tracker_extension.h
@@ -0,0 +1,52 @@
+/*************************************************************************/
+/* openxr_htc_vive_tracker_extension.h */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2022 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 OPENXR_HTC_VIVE_TRACKER_EXTENSION_H
+#define OPENXR_HTC_VIVE_TRACKER_EXTENSION_H
+
+#include "openxr_extension_wrapper.h"
+
+class OpenXRHTCViveTrackerExtension : public OpenXRExtensionWrapper {
+public:
+ static OpenXRHTCViveTrackerExtension *get_singleton();
+
+ OpenXRHTCViveTrackerExtension(OpenXRAPI *p_openxr_api);
+ virtual ~OpenXRHTCViveTrackerExtension() override;
+
+ bool is_available();
+ virtual bool on_event_polled(const XrEventDataBuffer &event) override;
+
+private:
+ static OpenXRHTCViveTrackerExtension *singleton;
+
+ bool available = false;
+};
+
+#endif // !OPENXR_HTC_VIVE_TRACKER_EXTENSION_H
diff --git a/modules/openxr/openxr_api.cpp b/modules/openxr/openxr_api.cpp
index d8d3bacb19..5e35942012 100644
--- a/modules/openxr/openxr_api.cpp
+++ b/modules/openxr/openxr_api.cpp
@@ -48,7 +48,9 @@
#include "extensions/openxr_vulkan_extension.h"
#endif
-#include "openxr_interface.h"
+#include "extensions/openxr_htc_vive_tracker_extension.h"
+
+#include "modules/openxr/openxr_interface.h"
OpenXRAPI *OpenXRAPI::singleton = nullptr;
@@ -1644,6 +1646,9 @@ OpenXRAPI::OpenXRAPI() {
// our android wrapper will initialize our android loader at this point
register_extension_wrapper(memnew(OpenXRAndroidExtension(this)));
#endif
+
+ // register our other extensions
+ register_extension_wrapper(memnew(OpenXRHTCViveTrackerExtension(this)));
}
OpenXRAPI::~OpenXRAPI() {
diff --git a/modules/openxr/openxr_interface.cpp b/modules/openxr/openxr_interface.cpp
index ab06583932..9dfa005600 100644
--- a/modules/openxr/openxr_interface.cpp
+++ b/modules/openxr/openxr_interface.cpp
@@ -57,7 +57,24 @@ PackedStringArray OpenXRInterface::get_suggested_tracker_names() const {
PackedStringArray arr = {
"left_hand", // /user/hand/left is mapped to our defaults
"right_hand", // /user/hand/right is mapped to our defaults
- "/user/treadmill"
+ "/user/treadmill",
+
+ // Even though these are only available if you have the tracker extension,
+ // we add these as we may be deploying on a different platform than our
+ // editor is running on.
+ "/user/vive_tracker_htcx/role/handheld_object",
+ "/user/vive_tracker_htcx/role/left_foot",
+ "/user/vive_tracker_htcx/role/right_foot",
+ "/user/vive_tracker_htcx/role/left_shoulder",
+ "/user/vive_tracker_htcx/role/right_shoulder",
+ "/user/vive_tracker_htcx/role/left_elbow",
+ "/user/vive_tracker_htcx/role/right_elbow",
+ "/user/vive_tracker_htcx/role/left_knee",
+ "/user/vive_tracker_htcx/role/right_knee",
+ "/user/vive_tracker_htcx/role/waist",
+ "/user/vive_tracker_htcx/role/chest",
+ "/user/vive_tracker_htcx/role/camera",
+ "/user/vive_tracker_htcx/role/keyboard"
};
return arr;
diff --git a/modules/raycast/raycast_occlusion_cull.h b/modules/raycast/raycast_occlusion_cull.h
index 4474031991..6562c4e9c4 100644
--- a/modules/raycast/raycast_occlusion_cull.h
+++ b/modules/raycast/raycast_occlusion_cull.h
@@ -87,8 +87,8 @@ private:
RID instance;
static uint32_t hash(const InstanceID &p_ins) {
- uint32_t h = hash_djb2_one_64(p_ins.scenario.get_id());
- return hash_djb2_one_64(p_ins.instance.get_id(), h);
+ uint32_t h = hash_murmur3_one_64(p_ins.scenario.get_id());
+ return hash_fmix32(hash_murmur3_one_64(p_ins.instance.get_id(), h));
}
bool operator==(const InstanceID &rhs) const {
return instance == rhs.instance && rhs.scenario == scenario;
diff --git a/modules/text_server_adv/text_server_adv.cpp b/modules/text_server_adv/text_server_adv.cpp
index 86687357d6..c4269a53f4 100644
--- a/modules/text_server_adv/text_server_adv.cpp
+++ b/modules/text_server_adv/text_server_adv.cpp
@@ -4204,7 +4204,7 @@ void TextServerAdvanced::shaped_text_overrun_trim_to_width(const RID &p_shaped_l
Glyph *sd_glyphs = sd->glyphs.ptrw();
- if ((p_trim_flags & OVERRUN_TRIM) == OVERRUN_NO_TRIMMING || sd_glyphs == nullptr || p_width <= 0 || !(sd->width > p_width || enforce_ellipsis)) {
+ if ((p_trim_flags & OVERRUN_TRIM) == OVERRUN_NO_TRIM || sd_glyphs == nullptr || p_width <= 0 || !(sd->width > p_width || enforce_ellipsis)) {
sd->overrun_trim_data.trim_pos = -1;
sd->overrun_trim_data.ellipsis_pos = -1;
return;
diff --git a/modules/text_server_fb/text_server_fb.cpp b/modules/text_server_fb/text_server_fb.cpp
index 0bece4e7a7..f93c5909c9 100644
--- a/modules/text_server_fb/text_server_fb.cpp
+++ b/modules/text_server_fb/text_server_fb.cpp
@@ -3236,7 +3236,7 @@ void TextServerFallback::shaped_text_overrun_trim_to_width(const RID &p_shaped_l
Glyph *sd_glyphs = sd->glyphs.ptrw();
- if ((p_trim_flags & OVERRUN_TRIM) == OVERRUN_NO_TRIMMING || sd_glyphs == nullptr || p_width <= 0 || !(sd->width > p_width || enforce_ellipsis)) {
+ if ((p_trim_flags & OVERRUN_TRIM) == OVERRUN_NO_TRIM || sd_glyphs == nullptr || p_width <= 0 || !(sd->width > p_width || enforce_ellipsis)) {
sd->overrun_trim_data.trim_pos = -1;
sd->overrun_trim_data.ellipsis_pos = -1;
return;
diff --git a/modules/tinyexr/image_saver_tinyexr.cpp b/modules/tinyexr/image_saver_tinyexr.cpp
index 5fa6ace827..661fe343af 100644
--- a/modules/tinyexr/image_saver_tinyexr.cpp
+++ b/modules/tinyexr/image_saver_tinyexr.cpp
@@ -141,13 +141,14 @@ static int get_channel_count(Image::Format p_format) {
}
}
-Error save_exr(const String &p_path, const Ref<Image> &p_img, bool p_grayscale) {
+Vector<uint8_t> save_exr_buffer(const Ref<Image> &p_img, bool p_grayscale) {
Image::Format format = p_img->get_format();
if (!is_supported_format(format)) {
// Format not supported
print_error("Image format not supported for saving as EXR. Consider saving as PNG.");
- return ERR_UNAVAILABLE;
+
+ return Vector<uint8_t>();
}
EXRHeader header;
@@ -175,15 +176,15 @@ Error save_exr(const String &p_path, const Ref<Image> &p_img, bool p_grayscale)
};
int channel_count = get_channel_count(format);
- ERR_FAIL_COND_V(channel_count < 0, ERR_UNAVAILABLE);
- ERR_FAIL_COND_V(p_grayscale && channel_count != 1, ERR_INVALID_PARAMETER);
+ ERR_FAIL_COND_V(channel_count < 0, Vector<uint8_t>());
+ ERR_FAIL_COND_V(p_grayscale && channel_count != 1, Vector<uint8_t>());
int target_pixel_type = get_target_pixel_type(format);
- ERR_FAIL_COND_V(target_pixel_type < 0, ERR_UNAVAILABLE);
+ ERR_FAIL_COND_V(target_pixel_type < 0, Vector<uint8_t>());
int target_pixel_type_size = get_pixel_type_size(target_pixel_type);
- ERR_FAIL_COND_V(target_pixel_type_size < 0, ERR_UNAVAILABLE);
+ ERR_FAIL_COND_V(target_pixel_type_size < 0, Vector<uint8_t>());
SrcPixelType src_pixel_type = get_source_pixel_type(format);
- ERR_FAIL_COND_V(src_pixel_type == SRC_UNSUPPORTED, ERR_UNAVAILABLE);
+ ERR_FAIL_COND_V(src_pixel_type == SRC_UNSUPPORTED, Vector<uint8_t>());
const int pixel_count = p_img->get_width() * p_img->get_height();
const int *channel_mapping = channel_mappings[channel_count - 1];
@@ -270,15 +271,25 @@ Error save_exr(const String &p_path, const Ref<Image> &p_img, bool p_grayscale)
const char *err = nullptr;
size_t bytes = SaveEXRImageToMemory(&image, &header, &mem, &err);
+ if (err && *err != OK) {
+ return Vector<uint8_t>();
+ }
+ Vector<uint8_t> buffer;
+ buffer.resize(bytes);
+ memcpy(buffer.ptrw(), mem, bytes);
+ free(mem);
+ return buffer;
+}
- if (bytes == 0) {
- print_error(String("Saving EXR failed. Error: {0}").format(varray(err)));
+Error save_exr(const String &p_path, const Ref<Image> &p_img, bool p_grayscale) {
+ const Vector<uint8_t> buffer = save_exr_buffer(p_img, p_grayscale);
+ if (buffer.size() == 0) {
+ print_error(String("Saving EXR failed."));
return ERR_FILE_CANT_WRITE;
} else {
Ref<FileAccess> ref = FileAccess::open(p_path, FileAccess::WRITE);
ERR_FAIL_COND_V(ref.is_null(), ERR_FILE_CANT_WRITE);
- ref->store_buffer(mem, bytes);
- free(mem);
+ ref->store_buffer(buffer.ptr(), buffer.size());
}
return OK;
diff --git a/modules/tinyexr/image_saver_tinyexr.h b/modules/tinyexr/image_saver_tinyexr.h
index 5bf95b265e..8f97f55408 100644
--- a/modules/tinyexr/image_saver_tinyexr.h
+++ b/modules/tinyexr/image_saver_tinyexr.h
@@ -34,5 +34,6 @@
#include "core/os/os.h"
Error save_exr(const String &p_path, const Ref<Image> &p_img, bool p_grayscale);
+Vector<uint8_t> save_exr_buffer(const Ref<Image> &p_img, bool p_grayscale);
#endif // IMAGE_SAVER_TINYEXR_H
diff --git a/modules/tinyexr/register_types.cpp b/modules/tinyexr/register_types.cpp
index d49ac23fea..c5897f37c3 100644
--- a/modules/tinyexr/register_types.cpp
+++ b/modules/tinyexr/register_types.cpp
@@ -44,6 +44,7 @@ void initialize_tinyexr_module(ModuleInitializationLevel p_level) {
ImageLoader::add_image_format_loader(image_loader_tinyexr);
Image::save_exr_func = save_exr;
+ Image::save_exr_buffer_func = save_exr_buffer;
}
void uninitialize_tinyexr_module(ModuleInitializationLevel p_level) {
diff --git a/modules/visual_script/visual_script.cpp b/modules/visual_script/visual_script.cpp
index 30b64d0a7b..c5bcf23c8e 100644
--- a/modules/visual_script/visual_script.cpp
+++ b/modules/visual_script/visual_script.cpp
@@ -1582,7 +1582,7 @@ Variant VisualScriptInstance::_call_internal(const StringName &p_method, void *p
if (!found) {
r_error.error = Callable::CallError::CALL_ERROR_INVALID_METHOD;
- error_str = RTR("Found sequence bit but not the node in the stack, report bug!");
+ error_str = RTR("Found sequence bit but not the node in the stack (please report).");
error = true;
break;
}
@@ -1594,7 +1594,7 @@ Variant VisualScriptInstance::_call_internal(const StringName &p_method, void *p
// Check for stack overflow.
if (flow_stack_pos + 1 >= flow_max) {
r_error.error = Callable::CallError::CALL_ERROR_INVALID_METHOD;
- error_str = RTR("Stack overflow with stack depth:") + " " + itos(output);
+ error_str = vformat(RTR("Stack overflow (stack size: %s). Check for infinite recursion in your script."), output);
error = true;
break;
}
@@ -1655,6 +1655,8 @@ Variant VisualScriptInstance::_call_internal(const StringName &p_method, void *p
error_str += "Expected " + itos(r_error.argument) + " arguments.";
} else if (r_error.error == Callable::CallError::CALL_ERROR_INVALID_METHOD) {
error_str += "Invalid Call.";
+ } else if (r_error.error == Callable::CallError::CALL_ERROR_METHOD_NOT_CONST) {
+ error_str += "Method not const in a const instance.";
} else if (r_error.error == Callable::CallError::CALL_ERROR_INSTANCE_IS_NULL) {
error_str += "Base Instance is null";
}
diff --git a/modules/visual_script/visual_script.h b/modules/visual_script/visual_script.h
index 0f3b8de3fc..c2e4d0e597 100644
--- a/modules/visual_script/visual_script.h
+++ b/modules/visual_script/visual_script.h
@@ -522,7 +522,7 @@ public:
if (_debug_call_stack_pos >= _debug_max_call_stack) {
// Stack overflow.
- _debug_error = "Stack Overflow (Stack Size: " + itos(_debug_max_call_stack) + ")";
+ _debug_error = vformat("Stack overflow (stack size: %s). Check for infinite recursion in your script.", _debug_max_call_stack);
EngineDebugger::get_script_debugger()->debug(this);
return;
}
@@ -545,7 +545,7 @@ public:
}
if (_debug_call_stack_pos == 0) {
- _debug_error = "Stack Underflow (Engine Bug)";
+ _debug_error = "Stack underflow (engine bug), please report.";
EngineDebugger::get_script_debugger()->debug(this);
return;
}
diff --git a/modules/visual_script/visual_script_flow_control.cpp b/modules/visual_script/visual_script_flow_control.cpp
index bbbb995635..19bbd834cc 100644
--- a/modules/visual_script/visual_script_flow_control.cpp
+++ b/modules/visual_script/visual_script_flow_control.cpp
@@ -803,7 +803,7 @@ public:
//if the script is not in use by anyone, we can safely assume whatever we got is not casting to it.
return 1;
}
- Ref<Script> cast_script = Ref<Resource>(ResourceCache::get(script));
+ Ref<Script> cast_script = ResourceCache::get_ref(script);
if (!cast_script.is_valid()) {
r_error.error = Callable::CallError::CALL_ERROR_INVALID_METHOD;
r_error_str = "Script path is not a script: " + script;
diff --git a/modules/visual_script/visual_script_func_nodes.cpp b/modules/visual_script/visual_script_func_nodes.cpp
index 483fc8b6c3..b16358ae38 100644
--- a/modules/visual_script/visual_script_func_nodes.cpp
+++ b/modules/visual_script/visual_script_func_nodes.cpp
@@ -377,7 +377,7 @@ void VisualScriptFunctionCall::_update_method_cache() {
}
if (ResourceCache::has(base_script)) {
- script = Ref<Resource>(ResourceCache::get(base_script));
+ script = ResourceCache::get_ref(base_script);
} else {
return;
}
@@ -587,7 +587,7 @@ void VisualScriptFunctionCall::_validate_property(PropertyInfo &property) const
}
if (ResourceCache::has(base_script)) {
- Ref<Script> script = Ref<Resource>(ResourceCache::get(base_script));
+ Ref<Script> script = ResourceCache::get_ref(base_script);
if (script.is_valid()) {
property.hint = PROPERTY_HINT_METHOD_OF_SCRIPT;
property.hint_string = itos(script->get_instance_id());
@@ -1178,7 +1178,7 @@ void VisualScriptPropertySet::_update_cache() {
}
if (ResourceCache::has(base_script)) {
- script = Ref<Resource>(ResourceCache::get(base_script));
+ script = ResourceCache::get_ref(base_script);
} else {
return;
}
@@ -1338,7 +1338,7 @@ void VisualScriptPropertySet::_validate_property(PropertyInfo &property) const {
}
if (ResourceCache::has(base_script)) {
- Ref<Script> script = Ref<Resource>(ResourceCache::get(base_script));
+ Ref<Script> script = ResourceCache::get_ref(base_script);
if (script.is_valid()) {
property.hint = PROPERTY_HINT_PROPERTY_OF_SCRIPT;
property.hint_string = itos(script->get_instance_id());
@@ -1864,7 +1864,7 @@ void VisualScriptPropertyGet::_update_cache() {
}
if (ResourceCache::has(base_script)) {
- script = Ref<Resource>(ResourceCache::get(base_script));
+ script = ResourceCache::get_ref(base_script);
} else {
return;
}
@@ -2044,7 +2044,7 @@ void VisualScriptPropertyGet::_validate_property(PropertyInfo &property) const {
}
if (ResourceCache::has(base_script)) {
- Ref<Script> script = Ref<Resource>(ResourceCache::get(base_script));
+ Ref<Script> script = ResourceCache::get_ref(base_script);
if (script.is_valid()) {
property.hint = PROPERTY_HINT_PROPERTY_OF_SCRIPT;
property.hint_string = itos(script->get_instance_id());
diff --git a/modules/vorbis/audio_stream_ogg_vorbis.cpp b/modules/vorbis/audio_stream_ogg_vorbis.cpp
index b645a48c88..89a6b03ff8 100644
--- a/modules/vorbis/audio_stream_ogg_vorbis.cpp
+++ b/modules/vorbis/audio_stream_ogg_vorbis.cpp
@@ -36,23 +36,22 @@
int AudioStreamPlaybackOGGVorbis::_mix_internal(AudioFrame *p_buffer, int p_frames) {
ERR_FAIL_COND_V(!ready, 0);
- ERR_FAIL_COND_V(!active, 0);
+
+ if (!active) {
+ return 0;
+ }
int todo = p_frames;
int start_buffer = 0;
- int frames_mixed_this_step = p_frames;
-
- while (todo && active) {
+ while (todo > 0 && active) {
AudioFrame *buffer = p_buffer;
if (start_buffer > 0) {
buffer = buffer + start_buffer;
}
int mixed = _mix_frames_vorbis(buffer, todo);
- if (mixed < 0) {
- return 0;
- }
+ ERR_FAIL_COND_V(mixed < 0, 0);
todo -= mixed;
frames_mixed += mixed;
start_buffer += mixed;
@@ -67,16 +66,14 @@ int AudioStreamPlaybackOGGVorbis::_mix_internal(AudioFrame *p_buffer, int p_fram
// we still have buffer to fill, start from this element in the next iteration.
start_buffer = p_frames - todo;
} else {
- frames_mixed_this_step = p_frames - todo;
for (int i = p_frames - todo; i < p_frames; i++) {
p_buffer[i] = AudioFrame(0, 0);
}
active = false;
- todo = 0;
}
}
}
- return frames_mixed_this_step;
+ return p_frames - todo;
}
int AudioStreamPlaybackOGGVorbis::_mix_frames_vorbis(AudioFrame *p_buffer, int p_frames) {
diff --git a/modules/webp/image_loader_webp.cpp b/modules/webp/image_loader_webp.cpp
index 0e41f6c973..778d562278 100644
--- a/modules/webp/image_loader_webp.cpp
+++ b/modules/webp/image_loader_webp.cpp
@@ -34,184 +34,21 @@
#include "core/io/marshalls.h"
#include "core/os/os.h"
#include "core/string/print_string.h"
+#include "webp_common.h"
#include <stdlib.h>
#include <webp/decode.h>
#include <webp/encode.h>
-static Vector<uint8_t> _webp_lossy_pack(const Ref<Image> &p_image, float p_quality) {
- ERR_FAIL_COND_V(p_image.is_null() || p_image->is_empty(), Vector<uint8_t>());
-
- Ref<Image> img = p_image->duplicate();
- if (img->detect_alpha()) {
- img->convert(Image::FORMAT_RGBA8);
- } else {
- img->convert(Image::FORMAT_RGB8);
- }
-
- Size2 s(img->get_width(), img->get_height());
- Vector<uint8_t> data = img->get_data();
- const uint8_t *r = data.ptr();
-
- uint8_t *dst_buff = nullptr;
- size_t dst_size = 0;
- if (img->get_format() == Image::FORMAT_RGB8) {
- dst_size = WebPEncodeRGB(r, s.width, s.height, 3 * s.width, CLAMP(p_quality * 100.0, 0, 100.0), &dst_buff);
- } else {
- dst_size = WebPEncodeRGBA(r, s.width, s.height, 4 * s.width, CLAMP(p_quality * 100.0, 0, 100.0), &dst_buff);
- }
-
- ERR_FAIL_COND_V(dst_size == 0, Vector<uint8_t>());
- Vector<uint8_t> dst;
- dst.resize(4 + dst_size);
- uint8_t *w = dst.ptrw();
- w[0] = 'W';
- w[1] = 'E';
- w[2] = 'B';
- w[3] = 'P';
- memcpy(&w[4], dst_buff, dst_size);
- WebPFree(dst_buff);
-
- return dst;
-}
-
-static Vector<uint8_t> _webp_lossless_pack(const Ref<Image> &p_image) {
- ERR_FAIL_COND_V(p_image.is_null() || p_image->is_empty(), Vector<uint8_t>());
-
- int compression_level = ProjectSettings::get_singleton()->get("rendering/textures/lossless_compression/webp_compression_level");
- compression_level = CLAMP(compression_level, 0, 9);
-
- Ref<Image> img = p_image->duplicate();
- if (img->detect_alpha()) {
- img->convert(Image::FORMAT_RGBA8);
- } else {
- img->convert(Image::FORMAT_RGB8);
- }
-
- Size2 s(img->get_width(), img->get_height());
- Vector<uint8_t> data = img->get_data();
- const uint8_t *r = data.ptr();
-
- // we need to use the more complex API in order to access the 'exact' flag...
-
- WebPConfig config;
- WebPPicture pic;
- if (!WebPConfigInit(&config) || !WebPConfigLosslessPreset(&config, compression_level) || !WebPPictureInit(&pic)) {
- ERR_FAIL_V(Vector<uint8_t>());
- }
-
- WebPMemoryWriter wrt;
- config.exact = 1;
- pic.use_argb = 1;
- pic.width = s.width;
- pic.height = s.height;
- pic.writer = WebPMemoryWrite;
- pic.custom_ptr = &wrt;
- WebPMemoryWriterInit(&wrt);
-
- bool success_import = false;
- if (img->get_format() == Image::FORMAT_RGB8) {
- success_import = WebPPictureImportRGB(&pic, r, 3 * s.width);
- } else {
- success_import = WebPPictureImportRGBA(&pic, r, 4 * s.width);
- }
- bool success_encode = false;
- if (success_import) {
- success_encode = WebPEncode(&config, &pic);
- }
- WebPPictureFree(&pic);
-
- if (!success_encode) {
- WebPMemoryWriterClear(&wrt);
- ERR_FAIL_V_MSG(Vector<uint8_t>(), "WebP packing failed.");
- }
-
- // copy from wrt
- Vector<uint8_t> dst;
- dst.resize(4 + wrt.size);
- uint8_t *w = dst.ptrw();
- w[0] = 'W';
- w[1] = 'E';
- w[2] = 'B';
- w[3] = 'P';
- memcpy(&w[4], wrt.mem, wrt.size);
- WebPMemoryWriterClear(&wrt);
-
- return dst;
-}
-
-static Ref<Image> _webp_unpack(const Vector<uint8_t> &p_buffer) {
- int size = p_buffer.size() - 4;
- ERR_FAIL_COND_V(size <= 0, Ref<Image>());
- const uint8_t *r = p_buffer.ptr();
-
- ERR_FAIL_COND_V(r[0] != 'W' || r[1] != 'E' || r[2] != 'B' || r[3] != 'P', Ref<Image>());
- WebPBitstreamFeatures features;
- if (WebPGetFeatures(&r[4], size, &features) != VP8_STATUS_OK) {
- ERR_FAIL_V_MSG(Ref<Image>(), "Error unpacking WEBP image.");
- }
-
- /*
- print_line("width: "+itos(features.width));
- print_line("height: "+itos(features.height));
- print_line("alpha: "+itos(features.has_alpha));
- */
-
- Vector<uint8_t> dst_image;
- int datasize = features.width * features.height * (features.has_alpha ? 4 : 3);
- dst_image.resize(datasize);
-
- uint8_t *dst_w = dst_image.ptrw();
-
- bool errdec = false;
- if (features.has_alpha) {
- errdec = WebPDecodeRGBAInto(&r[4], size, dst_w, datasize, 4 * features.width) == nullptr;
- } else {
- errdec = WebPDecodeRGBInto(&r[4], size, dst_w, datasize, 3 * features.width) == nullptr;
- }
-
- ERR_FAIL_COND_V_MSG(errdec, Ref<Image>(), "Failed decoding WebP image.");
-
- Ref<Image> img = memnew(Image(features.width, features.height, 0, features.has_alpha ? Image::FORMAT_RGBA8 : Image::FORMAT_RGB8, dst_image));
- return img;
-}
-
-Error webp_load_image_from_buffer(Image *p_image, const uint8_t *p_buffer, int p_buffer_len) {
- ERR_FAIL_NULL_V(p_image, ERR_INVALID_PARAMETER);
-
- WebPBitstreamFeatures features;
- if (WebPGetFeatures(p_buffer, p_buffer_len, &features) != VP8_STATUS_OK) {
- ERR_FAIL_V(ERR_FILE_CORRUPT);
- }
-
- Vector<uint8_t> dst_image;
- int datasize = features.width * features.height * (features.has_alpha ? 4 : 3);
- dst_image.resize(datasize);
- uint8_t *dst_w = dst_image.ptrw();
-
- bool errdec = false;
- if (features.has_alpha) {
- errdec = WebPDecodeRGBAInto(p_buffer, p_buffer_len, dst_w, datasize, 4 * features.width) == nullptr;
- } else {
- errdec = WebPDecodeRGBInto(p_buffer, p_buffer_len, dst_w, datasize, 3 * features.width) == nullptr;
- }
-
- ERR_FAIL_COND_V_MSG(errdec, ERR_FILE_CORRUPT, "Failed decoding WebP image.");
-
- p_image->create(features.width, features.height, false, features.has_alpha ? Image::FORMAT_RGBA8 : Image::FORMAT_RGB8, dst_image);
-
- return OK;
-}
-
static Ref<Image> _webp_mem_loader_func(const uint8_t *p_png, int p_size) {
Ref<Image> img;
img.instantiate();
- Error err = webp_load_image_from_buffer(img.ptr(), p_png, p_size);
+ Error err = WebPCommon::webp_load_image_from_buffer(img.ptr(), p_png, p_size);
ERR_FAIL_COND_V(err, Ref<Image>());
return img;
}
-Error ImageLoaderWEBP::load_image(Ref<Image> p_image, Ref<FileAccess> f, bool p_force_linear, float p_scale) {
+Error ImageLoaderWebP::load_image(Ref<Image> p_image, Ref<FileAccess> f, bool p_force_linear, float p_scale) {
Vector<uint8_t> src_image;
uint64_t src_image_len = f->get_length();
ERR_FAIL_COND_V(src_image_len == 0, ERR_FILE_CORRUPT);
@@ -221,18 +58,18 @@ Error ImageLoaderWEBP::load_image(Ref<Image> p_image, Ref<FileAccess> f, bool p_
f->get_buffer(&w[0], src_image_len);
- Error err = webp_load_image_from_buffer(p_image.ptr(), w, src_image_len);
+ Error err = WebPCommon::webp_load_image_from_buffer(p_image.ptr(), w, src_image_len);
return err;
}
-void ImageLoaderWEBP::get_recognized_extensions(List<String> *p_extensions) const {
+void ImageLoaderWebP::get_recognized_extensions(List<String> *p_extensions) const {
p_extensions->push_back("webp");
}
-ImageLoaderWEBP::ImageLoaderWEBP() {
+ImageLoaderWebP::ImageLoaderWebP() {
Image::_webp_mem_loader_func = _webp_mem_loader_func;
- Image::webp_lossy_packer = _webp_lossy_pack;
- Image::webp_lossless_packer = _webp_lossless_pack;
- Image::webp_unpacker = _webp_unpack;
+ Image::webp_lossy_packer = WebPCommon::_webp_lossy_pack;
+ Image::webp_lossless_packer = WebPCommon::_webp_lossless_pack;
+ Image::webp_unpacker = WebPCommon::_webp_unpack;
}
diff --git a/modules/webp/image_loader_webp.h b/modules/webp/image_loader_webp.h
index 1acd1459a0..448f683eb3 100644
--- a/modules/webp/image_loader_webp.h
+++ b/modules/webp/image_loader_webp.h
@@ -33,11 +33,11 @@
#include "core/io/image_loader.h"
-class ImageLoaderWEBP : public ImageFormatLoader {
+class ImageLoaderWebP : public ImageFormatLoader {
public:
virtual Error load_image(Ref<Image> p_image, Ref<FileAccess> f, bool p_force_linear, float p_scale);
virtual void get_recognized_extensions(List<String> *p_extensions) const;
- ImageLoaderWEBP();
+ ImageLoaderWebP();
};
#endif
diff --git a/modules/webp/register_types.cpp b/modules/webp/register_types.cpp
index 148e325498..29f633743e 100644
--- a/modules/webp/register_types.cpp
+++ b/modules/webp/register_types.cpp
@@ -31,16 +31,20 @@
#include "register_types.h"
#include "image_loader_webp.h"
+#include "resource_saver_webp.h"
-static ImageLoaderWEBP *image_loader_webp = nullptr;
+static ImageLoaderWebP *image_loader_webp = nullptr;
+static Ref<ResourceSaverWebP> resource_saver_webp;
void initialize_webp_module(ModuleInitializationLevel p_level) {
if (p_level != MODULE_INITIALIZATION_LEVEL_SCENE) {
return;
}
- image_loader_webp = memnew(ImageLoaderWEBP);
+ image_loader_webp = memnew(ImageLoaderWebP);
+ resource_saver_webp.instantiate();
ImageLoader::add_image_format_loader(image_loader_webp);
+ ResourceSaver::add_resource_format_saver(resource_saver_webp);
}
void uninitialize_webp_module(ModuleInitializationLevel p_level) {
@@ -49,4 +53,6 @@ void uninitialize_webp_module(ModuleInitializationLevel p_level) {
}
memdelete(image_loader_webp);
+ ResourceSaver::remove_resource_format_saver(resource_saver_webp);
+ resource_saver_webp.unref();
}
diff --git a/modules/webp/resource_saver_webp.cpp b/modules/webp/resource_saver_webp.cpp
new file mode 100644
index 0000000000..d270d39163
--- /dev/null
+++ b/modules/webp/resource_saver_webp.cpp
@@ -0,0 +1,90 @@
+/*************************************************************************/
+/* resource_saver_webp.cpp */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2022 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 "resource_saver_webp.h"
+
+#include "core/io/file_access.h"
+#include "core/io/image.h"
+#include "scene/resources/texture.h"
+#include "webp_common.h"
+
+Error ResourceSaverWebP::save(const String &p_path, const Ref<Resource> &p_resource, uint32_t p_flags) {
+ Ref<ImageTexture> texture = p_resource;
+
+ ERR_FAIL_COND_V_MSG(!texture.is_valid(), ERR_INVALID_PARAMETER, "Can't save invalid texture as WEBP.");
+ ERR_FAIL_COND_V_MSG(!texture->get_width(), ERR_INVALID_PARAMETER, "Can't save empty texture as WEBP.");
+
+ Ref<Image> img = texture->get_image();
+
+ Error err = save_image(p_path, img);
+
+ return err;
+}
+
+Error ResourceSaverWebP::save_image(const String &p_path, const Ref<Image> &p_img, const bool p_lossy, const float p_quality) {
+ Vector<uint8_t> buffer = save_image_to_buffer(p_img, p_lossy, p_quality);
+ Error err;
+ Ref<FileAccess> file = FileAccess::open(p_path, FileAccess::WRITE, &err);
+ ERR_FAIL_COND_V_MSG(err, err, vformat("Can't save WEBP at path: '%s'.", p_path));
+
+ const uint8_t *reader = buffer.ptr();
+
+ file->store_buffer(reader, buffer.size());
+ if (file->get_error() != OK && file->get_error() != ERR_FILE_EOF) {
+ return ERR_CANT_CREATE;
+ }
+
+ return OK;
+}
+
+Vector<uint8_t> ResourceSaverWebP::save_image_to_buffer(const Ref<Image> &p_img, const bool p_lossy, const float p_quality) {
+ Vector<uint8_t> buffer;
+ if (p_lossy) {
+ buffer = WebPCommon::_webp_lossy_pack(p_img, p_quality);
+ } else {
+ buffer = WebPCommon::_webp_lossless_pack(p_img);
+ }
+ return buffer;
+}
+
+bool ResourceSaverWebP::recognize(const Ref<Resource> &p_resource) const {
+ return (p_resource.is_valid() && p_resource->is_class("ImageTexture"));
+}
+
+void ResourceSaverWebP::get_recognized_extensions(const Ref<Resource> &p_resource, List<String> *p_extensions) const {
+ if (Object::cast_to<ImageTexture>(*p_resource)) {
+ p_extensions->push_back("webp");
+ }
+}
+
+ResourceSaverWebP::ResourceSaverWebP() {
+ Image::save_webp_func = &save_image;
+ Image::save_webp_buffer_func = &save_image_to_buffer;
+}
diff --git a/modules/webp/resource_saver_webp.h b/modules/webp/resource_saver_webp.h
new file mode 100644
index 0000000000..59e944efa0
--- /dev/null
+++ b/modules/webp/resource_saver_webp.h
@@ -0,0 +1,49 @@
+/*************************************************************************/
+/* resource_saver_webp.h */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2022 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 RESOURCE_SAVER_WEBP_H
+#define RESOURCE_SAVER_WEBP_H
+
+#include "core/io/image.h"
+#include "core/io/resource_saver.h"
+
+class ResourceSaverWebP : public ResourceFormatSaver {
+public:
+ static Error save_image(const String &p_path, const Ref<Image> &p_img, const bool p_lossy = false, const float p_quality = 0.75f);
+ static Vector<uint8_t> save_image_to_buffer(const Ref<Image> &p_img, const bool p_lossy = false, const float p_quality = 0.75f);
+
+ virtual Error save(const String &p_path, const Ref<Resource> &p_resource, uint32_t p_flags = 0);
+ virtual bool recognize(const Ref<Resource> &p_resource) const;
+ virtual void get_recognized_extensions(const Ref<Resource> &p_resource, List<String> *p_extensions) const;
+
+ ResourceSaverWebP();
+};
+
+#endif // RESOURCE_SAVER_WEBP_H
diff --git a/modules/webp/webp_common.cpp b/modules/webp/webp_common.cpp
new file mode 100644
index 0000000000..8657a98853
--- /dev/null
+++ b/modules/webp/webp_common.cpp
@@ -0,0 +1,190 @@
+/*************************************************************************/
+/* webp_common.cpp */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2022 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 "webp_common.h"
+
+#include "core/config/project_settings.h"
+#include "core/os/os.h"
+
+#include <string.h>
+#include <webp/decode.h>
+#include <webp/encode.h>
+
+namespace WebPCommon {
+Vector<uint8_t> _webp_lossy_pack(const Ref<Image> &p_image, float p_quality) {
+ ERR_FAIL_COND_V(p_image.is_null() || p_image->is_empty(), Vector<uint8_t>());
+
+ Ref<Image> img = p_image->duplicate();
+ if (img->detect_alpha()) {
+ img->convert(Image::FORMAT_RGBA8);
+ } else {
+ img->convert(Image::FORMAT_RGB8);
+ }
+
+ Size2 s(img->get_width(), img->get_height());
+ Vector<uint8_t> data = img->get_data();
+ const uint8_t *r = data.ptr();
+
+ uint8_t *dst_buff = nullptr;
+ size_t dst_size = 0;
+ if (img->get_format() == Image::FORMAT_RGB8) {
+ dst_size = WebPEncodeRGB(r, s.width, s.height, 3 * s.width, CLAMP(p_quality * 100.0f, 0.0f, 100.0f), &dst_buff);
+ } else {
+ dst_size = WebPEncodeRGBA(r, s.width, s.height, 4 * s.width, CLAMP(p_quality * 100.0f, 0.0f, 100.0f), &dst_buff);
+ }
+
+ ERR_FAIL_COND_V(dst_size == 0, Vector<uint8_t>());
+ Vector<uint8_t> dst;
+ dst.resize(dst_size);
+ uint8_t *w = dst.ptrw();
+ memcpy(w, dst_buff, dst_size);
+ WebPFree(dst_buff);
+
+ return dst;
+}
+
+Vector<uint8_t> _webp_lossless_pack(const Ref<Image> &p_image) {
+ ERR_FAIL_COND_V(p_image.is_null() || p_image->is_empty(), Vector<uint8_t>());
+
+ int compression_level = ProjectSettings::get_singleton()->get("rendering/textures/lossless_compression/webp_compression_level");
+ compression_level = CLAMP(compression_level, 0, 9);
+
+ Ref<Image> img = p_image->duplicate();
+ if (img->detect_alpha()) {
+ img->convert(Image::FORMAT_RGBA8);
+ } else {
+ img->convert(Image::FORMAT_RGB8);
+ }
+
+ Size2 s(img->get_width(), img->get_height());
+ Vector<uint8_t> data = img->get_data();
+ const uint8_t *r = data.ptr();
+
+ // we need to use the more complex API in order to access the 'exact' flag...
+
+ WebPConfig config;
+ WebPPicture pic;
+ if (!WebPConfigInit(&config) || !WebPConfigLosslessPreset(&config, compression_level) || !WebPPictureInit(&pic)) {
+ ERR_FAIL_V(Vector<uint8_t>());
+ }
+
+ WebPMemoryWriter wrt;
+ config.exact = 1;
+ pic.use_argb = 1;
+ pic.width = s.width;
+ pic.height = s.height;
+ pic.writer = WebPMemoryWrite;
+ pic.custom_ptr = &wrt;
+ WebPMemoryWriterInit(&wrt);
+
+ bool success_import = false;
+ if (img->get_format() == Image::FORMAT_RGB8) {
+ success_import = WebPPictureImportRGB(&pic, r, 3 * s.width);
+ } else {
+ success_import = WebPPictureImportRGBA(&pic, r, 4 * s.width);
+ }
+ bool success_encode = false;
+ if (success_import) {
+ success_encode = WebPEncode(&config, &pic);
+ }
+ WebPPictureFree(&pic);
+
+ if (!success_encode) {
+ WebPMemoryWriterClear(&wrt);
+ ERR_FAIL_V_MSG(Vector<uint8_t>(), "WebP packing failed.");
+ }
+
+ // copy from wrt
+ Vector<uint8_t> dst;
+ dst.resize(wrt.size);
+ uint8_t *w = dst.ptrw();
+ memcpy(w, wrt.mem, wrt.size);
+ WebPMemoryWriterClear(&wrt);
+ return dst;
+}
+
+Ref<Image> _webp_unpack(const Vector<uint8_t> &p_buffer) {
+ int size = p_buffer.size();
+ ERR_FAIL_COND_V(size <= 0, Ref<Image>());
+ const uint8_t *r = p_buffer.ptr();
+
+ // A WebP file uses a RIFF header, which starts with "RIFF____WEBP".
+ ERR_FAIL_COND_V(r[0] != 'R' || r[1] != 'I' || r[2] != 'F' || r[3] != 'F' || r[8] != 'W' || r[9] != 'E' || r[10] != 'B' || r[11] != 'P', Ref<Image>());
+ WebPBitstreamFeatures features;
+ if (WebPGetFeatures(r, size, &features) != VP8_STATUS_OK) {
+ ERR_FAIL_V_MSG(Ref<Image>(), "Error unpacking WEBP image.");
+ }
+
+ Vector<uint8_t> dst_image;
+ int datasize = features.width * features.height * (features.has_alpha ? 4 : 3);
+ dst_image.resize(datasize);
+
+ uint8_t *dst_w = dst_image.ptrw();
+
+ bool errdec = false;
+ if (features.has_alpha) {
+ errdec = WebPDecodeRGBAInto(r, size, dst_w, datasize, 4 * features.width) == nullptr;
+ } else {
+ errdec = WebPDecodeRGBInto(r, size, dst_w, datasize, 3 * features.width) == nullptr;
+ }
+
+ ERR_FAIL_COND_V_MSG(errdec, Ref<Image>(), "Failed decoding WebP image.");
+
+ Ref<Image> img = memnew(Image(features.width, features.height, 0, features.has_alpha ? Image::FORMAT_RGBA8 : Image::FORMAT_RGB8, dst_image));
+ return img;
+}
+
+Error webp_load_image_from_buffer(Image *p_image, const uint8_t *p_buffer, int p_buffer_len) {
+ ERR_FAIL_NULL_V(p_image, ERR_INVALID_PARAMETER);
+
+ WebPBitstreamFeatures features;
+ if (WebPGetFeatures(p_buffer, p_buffer_len, &features) != VP8_STATUS_OK) {
+ ERR_FAIL_V(ERR_FILE_CORRUPT);
+ }
+
+ Vector<uint8_t> dst_image;
+ int datasize = features.width * features.height * (features.has_alpha ? 4 : 3);
+ dst_image.resize(datasize);
+ uint8_t *dst_w = dst_image.ptrw();
+
+ bool errdec = false;
+ if (features.has_alpha) {
+ errdec = WebPDecodeRGBAInto(p_buffer, p_buffer_len, dst_w, datasize, 4 * features.width) == nullptr;
+ } else {
+ errdec = WebPDecodeRGBInto(p_buffer, p_buffer_len, dst_w, datasize, 3 * features.width) == nullptr;
+ }
+
+ ERR_FAIL_COND_V_MSG(errdec, ERR_FILE_CORRUPT, "Failed decoding WebP image.");
+
+ p_image->create(features.width, features.height, false, features.has_alpha ? Image::FORMAT_RGBA8 : Image::FORMAT_RGB8, dst_image);
+
+ return OK;
+}
+} // namespace WebPCommon
diff --git a/modules/webp/webp_common.h b/modules/webp/webp_common.h
new file mode 100644
index 0000000000..11bef40256
--- /dev/null
+++ b/modules/webp/webp_common.h
@@ -0,0 +1,45 @@
+/*************************************************************************/
+/* webp_common.h */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2022 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 WEBP_COMMON_H
+#define WEBP_COMMON_H
+
+#include "core/io/image.h"
+
+namespace WebPCommon {
+// Given an image, pack this data into a WebP file.
+Vector<uint8_t> _webp_lossy_pack(const Ref<Image> &p_image, float p_quality);
+Vector<uint8_t> _webp_lossless_pack(const Ref<Image> &p_image);
+// Given a WebP file, unpack it into an image.
+Ref<Image> _webp_unpack(const Vector<uint8_t> &p_buffer);
+Error webp_load_image_from_buffer(Image *p_image, const uint8_t *p_buffer, int p_buffer_len);
+} //namespace WebPCommon
+
+#endif // WEBP_COMMON_H
diff --git a/platform/android/android_input_handler.cpp b/platform/android/android_input_handler.cpp
index 10f23b320b..81802298d9 100644
--- a/platform/android/android_input_handler.cpp
+++ b/platform/android/android_input_handler.cpp
@@ -381,13 +381,3 @@ MouseButton AndroidInputHandler::_android_button_mask_to_godot_button_mask(int a
return godot_button_mask;
}
-
-void AndroidInputHandler::process_scroll(Point2 p_pos) {
- Ref<InputEventPanGesture> ev;
- ev.instantiate();
- _set_key_modifier_state(ev);
- ev->set_position(p_pos);
- ev->set_delta(p_pos - scroll_prev_pos);
- Input::get_singleton()->parse_input_event(ev);
- scroll_prev_pos = p_pos;
-}
diff --git a/platform/android/android_input_handler.h b/platform/android/android_input_handler.h
index e9c0ec1475..1397ca59e4 100644
--- a/platform/android/android_input_handler.h
+++ b/platform/android/android_input_handler.h
@@ -69,7 +69,6 @@ private:
Vector<TouchPos> touch;
Point2 hover_prev_pos; // needed to calculate the relative position on hover events
- Point2 scroll_prev_pos; // needed to calculate the relative position on scroll events
void _set_key_modifier_state(Ref<InputEventWithModifiers> ev);
@@ -83,7 +82,6 @@ public:
void process_hover(int p_type, Point2 p_pos);
void process_mouse_event(int input_device, int event_action, int event_android_buttons_mask, Point2 event_pos, float event_vertical_factor = 0, float event_horizontal_factor = 0);
void process_double_tap(int event_android_button_mask, Point2 p_pos);
- void process_scroll(Point2 p_pos);
void process_joy_event(JoypadEvent p_event);
void process_key_event(int p_keycode, int p_scancode, int p_unicode_char, bool p_pressed);
};
diff --git a/platform/android/detect.py b/platform/android/detect.py
index 0099ac7e0d..47cfade765 100644
--- a/platform/android/detect.py
+++ b/platform/android/detect.py
@@ -1,7 +1,7 @@
import os
import sys
import platform
-from distutils.version import LooseVersion
+import subprocess
def is_active():
@@ -13,41 +13,35 @@ def get_name():
def can_build():
- return ("ANDROID_SDK_ROOT" in os.environ) or ("ANDROID_HOME" in os.environ)
-
-
-def get_platform(platform):
- return int(platform.split("-")[1])
+ return os.path.exists(get_env_android_sdk_root())
def get_opts():
from SCons.Variables import BoolVariable, EnumVariable
return [
- ("ANDROID_NDK_ROOT", "Path to the Android NDK", get_android_ndk_root()),
- ("ANDROID_SDK_ROOT", "Path to the Android SDK", get_android_sdk_root()),
+ ("ANDROID_SDK_ROOT", "Path to the Android SDK", get_env_android_sdk_root()),
("ndk_platform", 'Target platform (android-<api>, e.g. "android-24")', "android-24"),
EnumVariable("android_arch", "Target architecture", "arm64v8", ("armv7", "arm64v8", "x86", "x86_64")),
]
# Return the ANDROID_SDK_ROOT environment variable.
-# While ANDROID_HOME has been deprecated, it's used as a fallback for backward
-# compatibility purposes.
-def get_android_sdk_root():
- if "ANDROID_SDK_ROOT" in os.environ:
- return os.environ.get("ANDROID_SDK_ROOT", 0)
- else:
- return os.environ.get("ANDROID_HOME", 0)
+def get_env_android_sdk_root():
+ return os.environ.get("ANDROID_SDK_ROOT", -1)
-# Return the ANDROID_NDK_ROOT environment variable.
-# We generate one for this build using the ANDROID_SDK_ROOT env
-# variable and the project ndk version.
-# If the env variable is already defined, we override it with
-# our own to match what the project expects.
-def get_android_ndk_root():
- return get_android_sdk_root() + "/ndk/" + get_project_ndk_version()
+def get_min_sdk_version(platform):
+ return int(platform.split("-")[1])
+
+
+def get_android_ndk_root(env):
+ return env["ANDROID_SDK_ROOT"] + "/ndk/" + get_ndk_version()
+
+
+# This is kept in sync with the value in 'platform/android/java/app/config.gradle'.
+def get_ndk_version():
+ return "23.2.8568313"
def get_flags():
@@ -56,133 +50,70 @@ def get_flags():
]
-def create(env):
- tools = env["TOOLS"]
- if "mingw" in tools:
- tools.remove("mingw")
- if "applelink" in tools:
- tools.remove("applelink")
- env.Tool("gcc")
- return env.Clone(tools=tools)
-
-
-# Check if ANDROID_NDK_ROOT is valid.
-# If not, install the ndk using ANDROID_SDK_ROOT and sdkmanager.
+# Check if Android NDK version is installed
+# If not, install it.
def install_ndk_if_needed(env):
print("Checking for Android NDK...")
- env_ndk_version = get_env_ndk_version(env["ANDROID_NDK_ROOT"])
- if env_ndk_version is None:
- # Reinstall the ndk and update ANDROID_NDK_ROOT.
- print("Installing Android NDK...")
- if env["ANDROID_SDK_ROOT"] is None:
- raise Exception("Invalid ANDROID_SDK_ROOT environment variable.")
-
- import subprocess
-
+ sdk_root = env["ANDROID_SDK_ROOT"]
+ if not os.path.exists(get_android_ndk_root(env)):
extension = ".bat" if os.name == "nt" else ""
- sdkmanager_path = env["ANDROID_SDK_ROOT"] + "/cmdline-tools/latest/bin/sdkmanager" + extension
- ndk_download_args = "ndk;" + get_project_ndk_version()
- subprocess.check_call([sdkmanager_path, ndk_download_args])
-
- env["ANDROID_NDK_ROOT"] = env["ANDROID_SDK_ROOT"] + "/ndk/" + get_project_ndk_version()
- print("ANDROID_NDK_ROOT: " + env["ANDROID_NDK_ROOT"])
+ sdkmanager = sdk_root + "/cmdline-tools/latest/bin/sdkmanager" + extension
+ if os.path.exists(sdkmanager):
+ # Install the Android NDK
+ print("Installing Android NDK...")
+ ndk_download_args = "ndk;" + get_ndk_version()
+ subprocess.check_call([sdkmanager, ndk_download_args])
+ else:
+ print("Cannot find " + sdkmanager)
+ print(
+ "Please ensure ANDROID_SDK_ROOT is correct and cmdline-tools are installed, or install NDK version "
+ + get_ndk_version()
+ + " manually."
+ )
+ sys.exit()
+ env["ANDROID_NDK_ROOT"] = get_android_ndk_root(env)
def configure(env):
install_ndk_if_needed(env)
-
- # Workaround for MinGW. See:
- # https://www.scons.org/wiki/LongCmdLinesOnWin32
- if os.name == "nt":
-
- import subprocess
-
- def mySubProcess(cmdline, env):
- # print("SPAWNED : " + cmdline)
- startupinfo = subprocess.STARTUPINFO()
- startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
- proc = subprocess.Popen(
- cmdline,
- stdin=subprocess.PIPE,
- stdout=subprocess.PIPE,
- stderr=subprocess.PIPE,
- startupinfo=startupinfo,
- shell=False,
- env=env,
- )
- data, err = proc.communicate()
- rv = proc.wait()
- if rv:
- print("=====")
- print(err)
- print("=====")
- return rv
-
- def mySpawn(sh, escape, cmd, args, env):
-
- newargs = " ".join(args[1:])
- cmdline = cmd + " " + newargs
-
- rv = 0
- if len(cmdline) > 32000 and cmd.endswith("ar"):
- cmdline = cmd + " " + args[1] + " " + args[2] + " "
- for i in range(3, len(args)):
- rv = mySubProcess(cmdline + args[i], env)
- if rv:
- break
- else:
- rv = mySubProcess(cmdline, env)
-
- return rv
-
- env["SPAWN"] = mySpawn
+ ndk_root = env["ANDROID_NDK_ROOT"]
# Architecture
if env["android_arch"] not in ["armv7", "arm64v8", "x86", "x86_64"]:
- env["android_arch"] = "armv7"
+ env["android_arch"] = "arm64v8"
print("Building for Android, platform " + env["ndk_platform"] + " (" + env["android_arch"] + ")")
- can_vectorize = True
- if env["android_arch"] == "x86":
- env["ARCH"] = "arch-x86"
- env.extra_suffix = ".x86" + env.extra_suffix
- target_subpath = "x86-4.9"
- abi_subpath = "i686-linux-android"
- arch_subpath = "x86"
- env["x86_libtheora_opt_gcc"] = True
- elif env["android_arch"] == "x86_64":
- if get_platform(env["ndk_platform"]) < 21:
+ if get_min_sdk_version(env["ndk_platform"]) < 21:
+ if env["android_arch"] == "x86_64" or env["android_arch"] == "arm64v8":
print(
- "WARNING: android_arch=x86_64 is not supported by ndk_platform lower than android-21; setting"
- " ndk_platform=android-21"
+ "WARNING: android_arch="
+ + env["android_arch"]
+ + " is not supported by ndk_platform lower than android-21; setting ndk_platform=android-21"
)
env["ndk_platform"] = "android-21"
- env["ARCH"] = "arch-x86_64"
- env.extra_suffix = ".x86_64" + env.extra_suffix
- target_subpath = "x86_64-4.9"
- abi_subpath = "x86_64-linux-android"
- arch_subpath = "x86_64"
- env["x86_libtheora_opt_gcc"] = True
- elif env["android_arch"] == "armv7":
- env["ARCH"] = "arch-arm"
- target_subpath = "arm-linux-androideabi-4.9"
- abi_subpath = "arm-linux-androideabi"
- arch_subpath = "armeabi-v7a"
+
+ if env["android_arch"] == "armv7":
+ target_triple = "armv7a-linux-androideabi"
+ bin_utils = "arm-linux-androideabi"
env.extra_suffix = ".armv7" + env.extra_suffix
elif env["android_arch"] == "arm64v8":
- if get_platform(env["ndk_platform"]) < 21:
- print(
- "WARNING: android_arch=arm64v8 is not supported by ndk_platform lower than android-21; setting"
- " ndk_platform=android-21"
- )
- env["ndk_platform"] = "android-21"
- env["ARCH"] = "arch-arm64"
- target_subpath = "aarch64-linux-android-4.9"
- abi_subpath = "aarch64-linux-android"
- arch_subpath = "arm64-v8a"
+ target_triple = "aarch64-linux-android"
+ bin_utils = target_triple
env.extra_suffix = ".armv8" + env.extra_suffix
+ elif env["android_arch"] == "x86":
+ target_triple = "i686-linux-android"
+ bin_utils = target_triple
+ env.extra_suffix = ".x86" + env.extra_suffix
+ elif env["android_arch"] == "x86_64":
+ target_triple = "x86_64-linux-android"
+ bin_utils = target_triple
+ env.extra_suffix = ".x86_64" + env.extra_suffix
+
+ target_option = ["-target", target_triple + str(get_min_sdk_version(env["ndk_platform"]))]
+ env.Append(CCFLAGS=target_option)
+ env.Append(LINKFLAGS=target_option)
# Build type
@@ -191,15 +122,11 @@ def configure(env):
# `-O2` is more friendly to debuggers than `-O3`, leading to better crash backtraces
# when using `target=release_debug`.
opt = "-O3" if env["target"] == "release" else "-O2"
- env.Append(LINKFLAGS=[opt])
env.Append(CCFLAGS=[opt, "-fomit-frame-pointer"])
elif env["optimize"] == "size": # optimize for size
- env.Append(CCFLAGS=["-Os"])
- env.Append(LINKFLAGS=["-Os"])
-
+ env.Append(CCFLAGS=["-Oz"])
env.Append(CPPDEFINES=["NDEBUG"])
- if can_vectorize:
- env.Append(CCFLAGS=["-ftree-vectorize"])
+ env.Append(CCFLAGS=["-ftree-vectorize"])
elif env["target"] == "debug":
env.Append(LINKFLAGS=["-O0"])
env.Append(CCFLAGS=["-O0", "-g", "-fno-limit-debug-info"])
@@ -211,7 +138,6 @@ def configure(env):
env["SHLIBSUFFIX"] = ".so"
if env["PLATFORM"] == "win32":
- env.Tool("gcc")
env.use_windows_spawn_fix()
if sys.platform.startswith("linux"):
@@ -224,32 +150,15 @@ def configure(env):
else:
host_subpath = "windows"
- compiler_path = env["ANDROID_NDK_ROOT"] + "/toolchains/llvm/prebuilt/" + host_subpath + "/bin"
- gcc_toolchain_path = env["ANDROID_NDK_ROOT"] + "/toolchains/" + target_subpath + "/prebuilt/" + host_subpath
- tools_path = gcc_toolchain_path + "/" + abi_subpath + "/bin"
-
- # For Clang to find NDK tools in preference of those system-wide
- env.PrependENVPath("PATH", tools_path)
-
- ccache_path = os.environ.get("CCACHE")
- if ccache_path is None:
- env["CC"] = compiler_path + "/clang"
- env["CXX"] = compiler_path + "/clang++"
- else:
- # there aren't any ccache wrappers available for Android,
- # to enable caching we need to prepend the path to the ccache binary
- env["CC"] = ccache_path + " " + compiler_path + "/clang"
- env["CXX"] = ccache_path + " " + compiler_path + "/clang++"
- env["AR"] = tools_path + "/ar"
- env["RANLIB"] = tools_path + "/ranlib"
- env["AS"] = tools_path + "/as"
+ toolchain_path = ndk_root + "/toolchains/llvm/prebuilt/" + host_subpath
+ compiler_path = toolchain_path + "/bin"
+ bin_utils_path = toolchain_path + "/" + bin_utils + "/bin"
- common_opts = ["-gcc-toolchain", gcc_toolchain_path]
-
- # Compile flags
-
- env.Append(CPPFLAGS=["-isystem", env["ANDROID_NDK_ROOT"] + "/sources/cxx-stl/llvm-libc++/include"])
- env.Append(CPPFLAGS=["-isystem", env["ANDROID_NDK_ROOT"] + "/sources/cxx-stl/llvm-libc++abi/include"])
+ env["CC"] = compiler_path + "/clang"
+ env["CXX"] = compiler_path + "/clang++"
+ env["AR"] = compiler_path + "/llvm-ar"
+ env["RANLIB"] = compiler_path + "/llvm-ranlib"
+ env["AS"] = bin_utils_path + "/as"
# Disable exceptions and rtti on non-tools (template) builds
if env["tools"]:
@@ -261,100 +170,31 @@ def configure(env):
# Don't use dynamic_cast, necessary with no-rtti.
env.Append(CPPDEFINES=["NO_SAFE_CAST"])
- lib_sysroot = env["ANDROID_NDK_ROOT"] + "/platforms/" + env["ndk_platform"] + "/" + env["ARCH"]
-
- # Using NDK unified headers (NDK r15+)
- sysroot = env["ANDROID_NDK_ROOT"] + "/sysroot"
- env.Append(CPPFLAGS=["--sysroot=" + sysroot])
- env.Append(CPPFLAGS=["-isystem", sysroot + "/usr/include/" + abi_subpath])
- env.Append(CPPFLAGS=["-isystem", env["ANDROID_NDK_ROOT"] + "/sources/android/support/include"])
- # For unified headers this define has to be set manually
- env.Append(CPPDEFINES=[("__ANDROID_API__", str(get_platform(env["ndk_platform"])))])
-
env.Append(
CCFLAGS=(
- "-fpic -ffunction-sections -funwind-tables -fstack-protector-strong -fvisibility=hidden"
- " -fno-strict-aliasing".split()
+ "-fpic -ffunction-sections -funwind-tables -fstack-protector-strong -fvisibility=hidden -fno-strict-aliasing".split()
)
)
env.Append(CPPDEFINES=["NO_STATVFS", "GLES_ENABLED"])
- if get_platform(env["ndk_platform"]) >= 24:
+ if get_min_sdk_version(env["ndk_platform"]) >= 24:
env.Append(CPPDEFINES=[("_FILE_OFFSET_BITS", 64)])
if env["android_arch"] == "x86":
- target_opts = ["-target", "i686-none-linux-android"]
- # The NDK adds this if targeting API < 21, so we can drop it when Godot targets it at least
+ # The NDK adds this if targeting API < 24, so we can drop it when Godot targets it at least
env.Append(CCFLAGS=["-mstackrealign"])
-
- elif env["android_arch"] == "x86_64":
- target_opts = ["-target", "x86_64-none-linux-android"]
-
elif env["android_arch"] == "armv7":
- target_opts = ["-target", "armv7-none-linux-androideabi"]
env.Append(CCFLAGS="-march=armv7-a -mfloat-abi=softfp".split())
env.Append(CPPDEFINES=["__ARM_ARCH_7__", "__ARM_ARCH_7A__"])
- # Enable ARM NEON instructions to compile more optimized code.
- env.Append(CCFLAGS=["-mfpu=neon"])
env.Append(CPPDEFINES=["__ARM_NEON__"])
-
elif env["android_arch"] == "arm64v8":
- target_opts = ["-target", "aarch64-none-linux-android"]
env.Append(CCFLAGS=["-mfix-cortex-a53-835769"])
env.Append(CPPDEFINES=["__ARM_ARCH_8A__"])
- env.Append(CCFLAGS=target_opts)
- env.Append(CCFLAGS=common_opts)
-
# Link flags
- ndk_version = get_env_ndk_version(env["ANDROID_NDK_ROOT"])
- if ndk_version != None and LooseVersion(ndk_version) >= LooseVersion("17.1.4828580"):
- env.Append(LINKFLAGS=["-Wl,--exclude-libs,libgcc.a", "-Wl,--exclude-libs,libatomic.a", "-nostdlib++"])
- else:
- env.Append(
- LINKFLAGS=[
- env["ANDROID_NDK_ROOT"] + "/sources/cxx-stl/llvm-libc++/libs/" + arch_subpath + "/libandroid_support.a"
- ]
- )
- env.Append(LINKFLAGS=["-shared", "--sysroot=" + lib_sysroot, "-Wl,--warn-shared-textrel"])
- env.Append(LIBPATH=[env["ANDROID_NDK_ROOT"] + "/sources/cxx-stl/llvm-libc++/libs/" + arch_subpath + "/"])
- env.Append(
- LINKFLAGS=[env["ANDROID_NDK_ROOT"] + "/sources/cxx-stl/llvm-libc++/libs/" + arch_subpath + "/libc++_shared.so"]
- )
-
- if env["android_arch"] == "armv7":
- env.Append(LINKFLAGS="-Wl,--fix-cortex-a8".split())
- env.Append(LINKFLAGS="-Wl,--no-undefined -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now".split())
- env.Append(LINKFLAGS="-Wl,-soname,libgodot_android.so -Wl,--gc-sections".split())
-
- env.Append(LINKFLAGS=target_opts)
- env.Append(LINKFLAGS=common_opts)
-
- env.Append(
- LIBPATH=[
- env["ANDROID_NDK_ROOT"]
- + "/toolchains/"
- + target_subpath
- + "/prebuilt/"
- + host_subpath
- + "/lib/gcc/"
- + abi_subpath
- + "/4.9.x"
- ]
- )
- env.Append(
- LIBPATH=[
- env["ANDROID_NDK_ROOT"]
- + "/toolchains/"
- + target_subpath
- + "/prebuilt/"
- + host_subpath
- + "/"
- + abi_subpath
- + "/lib"
- ]
- )
+ env.Append(LINKFLAGS="-Wl,--gc-sections -Wl,--no-undefined -Wl,-z,now".split())
+ env.Append(LINKFLAGS="-Wl,-soname,libgodot_android.so")
env.Prepend(CPPPATH=["#platform/android"])
env.Append(CPPDEFINES=["ANDROID_ENABLED", "UNIX_ENABLED", "NO_FCNTL"])
@@ -364,25 +204,3 @@ def configure(env):
env.Append(CPPDEFINES=["VULKAN_ENABLED"])
if not env["use_volk"]:
env.Append(LIBS=["vulkan"])
-
-
-# Return the project NDK version.
-# This is kept in sync with the value in 'platform/android/java/app/config.gradle'.
-def get_project_ndk_version():
- return "21.4.7075529"
-
-
-# Return NDK version string in source.properties (adapted from the Chromium project).
-def get_env_ndk_version(path):
- if path is None:
- return None
- prop_file_path = os.path.join(path, "source.properties")
- try:
- with open(prop_file_path) as prop_file:
- for line in prop_file:
- key_value = list(map(lambda x: x.strip(), line.split("=")))
- if key_value[0] == "Pkg.Revision":
- return key_value[1]
- except Exception:
- print("Could not read source prop file '%s'" % prop_file_path)
- return None
diff --git a/platform/android/export/export_plugin.cpp b/platform/android/export/export_plugin.cpp
index 73c6fcc7e8..b40c1f5090 100644
--- a/platform/android/export/export_plugin.cpp
+++ b/platform/android/export/export_plugin.cpp
@@ -245,7 +245,7 @@ static const char *APK_ASSETS_DIRECTORY = "res://android/build/assets";
static const char *AAB_ASSETS_DIRECTORY = "res://android/build/assetPacks/installTime/src/main/assets";
static const int DEFAULT_MIN_SDK_VERSION = 19; // Should match the value in 'platform/android/java/app/config.gradle#minSdk'
-static const int DEFAULT_TARGET_SDK_VERSION = 30; // Should match the value in 'platform/android/java/app/config.gradle#targetSdk'
+static const int DEFAULT_TARGET_SDK_VERSION = 31; // Should match the value in 'platform/android/java/app/config.gradle#targetSdk'
const String SDK_VERSION_RANGE = vformat("%s,%s,1", DEFAULT_MIN_SDK_VERSION, DEFAULT_TARGET_SDK_VERSION);
void EditorExportPlatformAndroid::_check_for_changes_poll_thread(void *ud) {
diff --git a/platform/android/java/app/AndroidManifest.xml b/platform/android/java/app/AndroidManifest.xml
index c98e8f1d55..2d4c4763a2 100644
--- a/platform/android/java/app/AndroidManifest.xml
+++ b/platform/android/java/app/AndroidManifest.xml
@@ -59,6 +59,7 @@
android:theme="@style/GodotAppSplashTheme"
android:launchMode="singleTask"
android:excludeFromRecents="false"
+ android:exported="true"
android:screenOrientation="landscape"
android:configChanges="orientation|keyboardHidden|screenSize|smallestScreenSize|density|keyboard|navigation|screenLayout|uiMode"
android:resizeableActivity="false"
diff --git a/platform/android/java/app/config.gradle b/platform/android/java/app/config.gradle
index 73a412a2b0..3daf628e63 100644
--- a/platform/android/java/app/config.gradle
+++ b/platform/android/java/app/config.gradle
@@ -2,13 +2,13 @@ ext.versions = [
androidGradlePlugin: '7.0.3',
compileSdk : 31,
minSdk : 19, // Also update 'platform/android/java/lib/AndroidManifest.xml#minSdkVersion' & 'platform/android/export/export_plugin.cpp#DEFAULT_MIN_SDK_VERSION'
- targetSdk : 30, // Also update 'platform/android/java/lib/AndroidManifest.xml#targetSdkVersion' & 'platform/android/export/export_plugin.cpp#DEFAULT_TARGET_SDK_VERSION'
+ targetSdk : 31, // Also update 'platform/android/java/lib/AndroidManifest.xml#targetSdkVersion' & 'platform/android/export/export_plugin.cpp#DEFAULT_TARGET_SDK_VERSION'
buildTools : '30.0.3',
kotlinVersion : '1.6.21',
fragmentVersion : '1.3.6',
nexusPublishVersion: '1.1.0',
javaVersion : 11,
- ndkVersion : '21.4.7075529' // Also update 'platform/android/detect.py#get_project_ndk_version()' when this is updated.
+ ndkVersion : '23.2.8568313' // Also update 'platform/android/detect.py#get_ndk_version()' when this is updated.
]
diff --git a/platform/android/java/editor/src/main/AndroidManifest.xml b/platform/android/java/editor/src/main/AndroidManifest.xml
index 659caf7ab4..93cbb47400 100644
--- a/platform/android/java/editor/src/main/AndroidManifest.xml
+++ b/platform/android/java/editor/src/main/AndroidManifest.xml
@@ -49,6 +49,7 @@
android:process=":GodotEditor"
android:launchMode="singleTask"
android:screenOrientation="userLandscape"
+ android:exported="false"
android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen">
<layout android:defaultHeight="@dimen/editor_default_window_height"
android:defaultWidth="@dimen/editor_default_window_width" />
@@ -60,6 +61,7 @@
android:label="@string/godot_project_name_string"
android:process=":GodotGame"
android:launchMode="singleTask"
+ android:exported="false"
android:screenOrientation="userLandscape"
android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen">
<layout android:defaultHeight="@dimen/editor_default_window_height"
diff --git a/platform/android/java/lib/AndroidManifest.xml b/platform/android/java/lib/AndroidManifest.xml
index 90dc61a6ac..228d8d45fa 100644
--- a/platform/android/java/lib/AndroidManifest.xml
+++ b/platform/android/java/lib/AndroidManifest.xml
@@ -5,7 +5,7 @@
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" />
+ <uses-sdk android:minSdkVersion="19" android:targetSdkVersion="31" />
<application>
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 1f8f8c82a6..3182ab0666 100644
--- a/platform/android/java/lib/src/org/godotengine/godot/GodotLib.java
+++ b/platform/android/java/lib/src/org/godotengine/godot/GodotLib.java
@@ -114,11 +114,6 @@ public class GodotLib {
public static native void doubleTap(int buttonMask, int x, int y);
/**
- * Forward scroll events from the main thread to the GL thread.
- */
- public static native void scroll(int x, int y);
-
- /**
* Forward accelerometer sensor events from the main thread to the GL thread.
* @see android.hardware.SensorEventListener#onSensorChanged(SensorEvent)
*/
diff --git a/platform/android/java/lib/src/org/godotengine/godot/input/GodotGestureHandler.java b/platform/android/java/lib/src/org/godotengine/godot/input/GodotGestureHandler.java
index ac13cad23e..778efa914a 100644
--- a/platform/android/java/lib/src/org/godotengine/godot/input/GodotGestureHandler.java
+++ b/platform/android/java/lib/src/org/godotengine/godot/input/GodotGestureHandler.java
@@ -80,15 +80,6 @@ public class GodotGestureHandler extends GestureDetector.SimpleOnGestureListener
}
@Override
- public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
- //Log.i("GodotGesture", "onScroll");
- final int x = Math.round(distanceX);
- final int y = Math.round(distanceY);
- GodotLib.scroll(x, y);
- return true;
- }
-
- @Override
public boolean onFling(MotionEvent event1, MotionEvent event2, float velocityX, float velocityY) {
//Log.i("GodotGesture", "onFling");
return true;
diff --git a/platform/android/java/lib/src/org/godotengine/godot/input/GodotInputHandler.java b/platform/android/java/lib/src/org/godotengine/godot/input/GodotInputHandler.java
index 8694bb91e1..ccfb865b1a 100644
--- a/platform/android/java/lib/src/org/godotengine/godot/input/GodotInputHandler.java
+++ b/platform/android/java/lib/src/org/godotengine/godot/input/GodotInputHandler.java
@@ -186,6 +186,9 @@ public class GodotInputHandler implements InputManager.InputDeviceListener {
if (mJoystickIds.indexOfKey(deviceId) >= 0) {
final int godotJoyId = mJoystickIds.get(deviceId);
Joystick joystick = mJoysticksDevices.get(deviceId);
+ if (joystick == null) {
+ return true;
+ }
for (int i = 0; i < joystick.axes.size(); i++) {
final int axis = joystick.axes.get(i);
diff --git a/platform/android/java_godot_lib_jni.cpp b/platform/android/java_godot_lib_jni.cpp
index de666f1b11..eaffe14b13 100644
--- a/platform/android/java_godot_lib_jni.cpp
+++ b/platform/android/java_godot_lib_jni.cpp
@@ -306,15 +306,6 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_doubleTap(JNIEnv *env
}
// Called on the UI thread
-JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_scroll(JNIEnv *env, jclass clazz, jint p_x, jint p_y) {
- if (step.get() <= 0) {
- return;
- }
-
- input_handler->process_scroll(Point2(p_x, p_y));
-}
-
-// Called on the UI thread
JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_joybutton(JNIEnv *env, jclass clazz, jint p_device, jint p_button, jboolean p_pressed) {
if (step.get() <= 0) {
return;
diff --git a/platform/android/java_godot_lib_jni.h b/platform/android/java_godot_lib_jni.h
index e1d30eea77..aa8d67cf46 100644
--- a/platform/android/java_godot_lib_jni.h
+++ b/platform/android/java_godot_lib_jni.h
@@ -51,7 +51,6 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_touch__IIII_3FI(JNIEn
JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_touch__IIII_3FIFF(JNIEnv *env, jclass clazz, jint input_device, jint ev, jint pointer, jint pointer_count, jfloatArray positions, jint buttons_mask, jfloat vertical_factor, jfloat horizontal_factor);
JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_hover(JNIEnv *env, jclass clazz, jint p_type, jfloat p_x, jfloat p_y);
JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_doubleTap(JNIEnv *env, jclass clazz, jint p_button_mask, jint p_x, jint p_y);
-JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_scroll(JNIEnv *env, jclass clazz, jint p_x, jint p_y);
JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_key(JNIEnv *env, jclass clazz, jint p_keycode, jint p_scancode, jint p_unicode_char, jboolean p_pressed);
JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_joybutton(JNIEnv *env, jclass clazz, jint p_device, jint p_button, jboolean p_pressed);
JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_joyaxis(JNIEnv *env, jclass clazz, jint p_device, jint p_axis, jfloat p_value);
diff --git a/platform/linuxbsd/key_mapping_x11.cpp b/platform/linuxbsd/key_mapping_x11.cpp
index afe965e038..047ee74671 100644
--- a/platform/linuxbsd/key_mapping_x11.cpp
+++ b/platform/linuxbsd/key_mapping_x11.cpp
@@ -135,6 +135,25 @@ static _XTranslatePair _xkeysym_to_keycode[] = {
{ XK_F14, Key::F14 },
{ XK_F15, Key::F15 },
{ XK_F16, Key::F16 },
+ { XK_F17, Key::F17 },
+ { XK_F18, Key::F18 },
+ { XK_F19, Key::F19 },
+ { XK_F20, Key::F20 },
+ { XK_F21, Key::F21 },
+ { XK_F22, Key::F22 },
+ { XK_F23, Key::F23 },
+ { XK_F24, Key::F24 },
+ { XK_F25, Key::F25 },
+ { XK_F26, Key::F26 },
+ { XK_F27, Key::F27 },
+ { XK_F28, Key::F28 },
+ { XK_F29, Key::F29 },
+ { XK_F30, Key::F30 },
+ { XK_F31, Key::F31 },
+ { XK_F32, Key::F32 },
+ { XK_F33, Key::F33 },
+ { XK_F34, Key::F34 },
+ { XK_F35, Key::F35 },
// media keys
{ XF86XK_Back, Key::BACK },
@@ -294,6 +313,29 @@ static _TranslatePair _scancode_to_keycode[] = {
{ Key::SUPER_L, 0x85 },
{ Key::SUPER_R, 0x86 },
{ Key::MENU, 0x87 },
+ { Key::F13, 0xBF },
+ { Key::F14, 0xC0 },
+ { Key::F15, 0xC1 },
+ { Key::F16, 0xC2 },
+ { Key::F17, 0xC3 },
+ { Key::F18, 0xC4 },
+ { Key::F19, 0xC5 },
+ { Key::F20, 0xC6 },
+ { Key::F21, 0xC7 },
+ { Key::F22, 0xC8 },
+ { Key::F23, 0xC9 },
+ { Key::F24, 0xCA },
+ { Key::F25, 0xCB },
+ { Key::F26, 0xCC },
+ { Key::F27, 0xCD },
+ { Key::F28, 0xCE },
+ { Key::F29, 0xCF },
+ { Key::F30, 0xD0 },
+ { Key::F31, 0xD1 },
+ { Key::F32, 0xD2 },
+ { Key::F33, 0xD3 },
+ { Key::F34, 0xD4 },
+ { Key::F35, 0xD5 },
{ Key::UNKNOWN, 0 }
};
diff --git a/platform/osx/key_mapping_osx.mm b/platform/osx/key_mapping_osx.mm
index bfec45de58..0bf6bc7d1c 100644
--- a/platform/osx/key_mapping_osx.mm
+++ b/platform/osx/key_mapping_osx.mm
@@ -130,7 +130,7 @@ static const Key _osx_to_godot_table[128] = {
/* 3d */ Key::ALT,
/* 3e */ Key::CTRL,
/* 3f */ Key::UNKNOWN, /* Function */
- /* 40 */ Key::UNKNOWN, /* F17 */
+ /* 40 */ Key::F17,
/* 41 */ Key::KP_PERIOD,
/* 42 */ Key::UNKNOWN,
/* 43 */ Key::KP_MULTIPLY,
@@ -145,8 +145,8 @@ static const Key _osx_to_godot_table[128] = {
/* 4c */ Key::KP_ENTER,
/* 4d */ Key::UNKNOWN,
/* 4e */ Key::KP_SUBTRACT,
- /* 4f */ Key::UNKNOWN, /* F18 */
- /* 50 */ Key::UNKNOWN, /* F19 */
+ /* 4f */ Key::F18,
+ /* 50 */ Key::F19,
/* 51 */ Key::EQUAL, /* KeypadEqual */
/* 52 */ Key::KP_0,
/* 53 */ Key::KP_1,
@@ -156,7 +156,7 @@ static const Key _osx_to_godot_table[128] = {
/* 57 */ Key::KP_5,
/* 58 */ Key::KP_6,
/* 59 */ Key::KP_7,
- /* 5a */ Key::UNKNOWN, /* F20 */
+ /* 5a */ Key::F20,
/* 5b */ Key::KP_8,
/* 5c */ Key::KP_9,
/* 5d */ Key::YEN, /* JIS Yen */
@@ -366,7 +366,26 @@ static const _KeyCodeText _native_keycodes[] = {
{Key::F13 ,NSF13FunctionKey},
{Key::F14 ,NSF14FunctionKey},
{Key::F15 ,NSF15FunctionKey},
- {Key::F16 ,NSF16FunctionKey}, //* ... NSF35FunctionKey */
+ {Key::F16 ,NSF16FunctionKey},
+ {Key::F17 ,NSF17FunctionKey},
+ {Key::F18 ,NSF18FunctionKey},
+ {Key::F19 ,NSF19FunctionKey},
+ {Key::F20 ,NSF20FunctionKey},
+ {Key::F21 ,NSF21FunctionKey},
+ {Key::F22 ,NSF22FunctionKey},
+ {Key::F23 ,NSF23FunctionKey},
+ {Key::F24 ,NSF24FunctionKey},
+ {Key::F25 ,NSF25FunctionKey},
+ {Key::F26 ,NSF26FunctionKey},
+ {Key::F27 ,NSF27FunctionKey},
+ {Key::F28 ,NSF28FunctionKey},
+ {Key::F29 ,NSF29FunctionKey},
+ {Key::F30 ,NSF30FunctionKey},
+ {Key::F31 ,NSF31FunctionKey},
+ {Key::F32 ,NSF32FunctionKey},
+ {Key::F33 ,NSF33FunctionKey},
+ {Key::F34 ,NSF34FunctionKey},
+ {Key::F35 ,NSF35FunctionKey},
{Key::MENU ,NSMenuFunctionKey},
{Key::HELP ,NSHelpFunctionKey},
{Key::STOP ,NSStopFunctionKey},
diff --git a/platform/windows/key_mapping_windows.cpp b/platform/windows/key_mapping_windows.cpp
index e32dc0d1a6..2d8d68a575 100644
--- a/platform/windows/key_mapping_windows.cpp
+++ b/platform/windows/key_mapping_windows.cpp
@@ -179,7 +179,14 @@ static _WinTranslatePair _vk_to_keycode[] = {
{ Key::F14, VK_F14 }, // (0x7D)
{ Key::F15, VK_F15 }, // (0x7E)
{ Key::F16, VK_F16 }, // (0x7F)
- // We have no mappings for F17-F24. (0x80-87)
+ { Key::F17, VK_F17 }, // (0x80)
+ { Key::F18, VK_F18 }, // (0x81)
+ { Key::F19, VK_F19 }, // (0x82)
+ { Key::F20, VK_F20 }, // (0x83)
+ { Key::F21, VK_F21 }, // (0x84)
+ { Key::F22, VK_F22 }, // (0x85)
+ { Key::F23, VK_F23 }, // (0x86)
+ { Key::F24, VK_F24 }, // (0x87)
// 0x88-8F are reserved for UI navigation.
{ Key::NUMLOCK, VK_NUMLOCK }, // (0x90)
{ Key::SCROLLLOCK, VK_SCROLL }, // (0x91)
@@ -409,6 +416,14 @@ static _WinTranslatePair _scancode_to_keycode[] = {
{ Key::F14, 0x65 },
{ Key::F15, 0x66 },
{ Key::F16, 0x67 },
+ { Key::F17, 0x68 },
+ { Key::F18, 0x69 },
+ { Key::F19, 0x6A },
+ { Key::F20, 0x6B },
+ { Key::F21, 0x6C },
+ { Key::F22, 0x6D },
+ { Key::F23, 0x6E },
+ { Key::F24, 0x76 },
{ Key::UNKNOWN, 0 }
};
diff --git a/scene/2d/audio_stream_player_2d.cpp b/scene/2d/audio_stream_player_2d.cpp
index e7f1740f0b..eaab58c4ae 100644
--- a/scene/2d/audio_stream_player_2d.cpp
+++ b/scene/2d/audio_stream_player_2d.cpp
@@ -30,6 +30,7 @@
#include "audio_stream_player_2d.h"
+#include "core/config/project_settings.h"
#include "scene/2d/area_2d.h"
#include "scene/2d/audio_listener_2d.h"
#include "scene/main/window.h"
@@ -186,7 +187,14 @@ void AudioStreamPlayer2D::_update_panning() {
float multiplier = Math::pow(1.0f - dist / max_distance, attenuation);
multiplier *= Math::db2linear(volume_db); //also apply player volume!
- float pan = CLAMP((relative_to_listener.x + screen_size.x * 0.5) / screen_size.x, 0.0, 1.0);
+ float pan = relative_to_listener.x / screen_size.x;
+ // Don't let the panning effect extend (too far) beyond the screen.
+ pan = CLAMP(pan, -1, 1);
+
+ // Bake in a constant factor here to allow the project setting defaults for 2d and 3d to be normalized to 1.0.
+ pan *= panning_strength * cached_global_panning_strength * 0.5f;
+
+ pan = CLAMP(pan + 0.5, 0.0, 1.0);
float l = 1.0 - pan;
float r = pan;
@@ -391,6 +399,15 @@ int AudioStreamPlayer2D::get_max_polyphony() const {
return max_polyphony;
}
+void AudioStreamPlayer2D::set_panning_strength(float p_panning_strength) {
+ ERR_FAIL_COND_MSG(p_panning_strength < 0, "Panning strength must be a positive number.");
+ panning_strength = p_panning_strength;
+}
+
+float AudioStreamPlayer2D::get_panning_strength() const {
+ return panning_strength;
+}
+
void AudioStreamPlayer2D::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_stream", "stream"), &AudioStreamPlayer2D::set_stream);
ClassDB::bind_method(D_METHOD("get_stream"), &AudioStreamPlayer2D::get_stream);
@@ -432,6 +449,9 @@ void AudioStreamPlayer2D::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_max_polyphony", "max_polyphony"), &AudioStreamPlayer2D::set_max_polyphony);
ClassDB::bind_method(D_METHOD("get_max_polyphony"), &AudioStreamPlayer2D::get_max_polyphony);
+ ClassDB::bind_method(D_METHOD("set_panning_strength", "panning_strength"), &AudioStreamPlayer2D::set_panning_strength);
+ ClassDB::bind_method(D_METHOD("get_panning_strength"), &AudioStreamPlayer2D::get_panning_strength);
+
ClassDB::bind_method(D_METHOD("get_stream_playback"), &AudioStreamPlayer2D::get_stream_playback);
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "stream", PROPERTY_HINT_RESOURCE_TYPE, "AudioStream"), "set_stream", "get_stream");
@@ -443,6 +463,7 @@ void AudioStreamPlayer2D::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "max_distance", PROPERTY_HINT_RANGE, "1,4096,1,or_greater,exp,suffix:px"), "set_max_distance", "get_max_distance");
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "attenuation", PROPERTY_HINT_EXP_EASING, "attenuation"), "set_attenuation", "get_attenuation");
ADD_PROPERTY(PropertyInfo(Variant::INT, "max_polyphony", PROPERTY_HINT_NONE, ""), "set_max_polyphony", "get_max_polyphony");
+ ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "panning_strength", PROPERTY_HINT_RANGE, "0,3,0.01,or_greater"), "set_panning_strength", "get_panning_strength");
ADD_PROPERTY(PropertyInfo(Variant::STRING_NAME, "bus", PROPERTY_HINT_ENUM, ""), "set_bus", "get_bus");
ADD_PROPERTY(PropertyInfo(Variant::INT, "area_mask", PROPERTY_HINT_LAYERS_2D_PHYSICS), "set_area_mask", "get_area_mask");
@@ -451,6 +472,7 @@ void AudioStreamPlayer2D::_bind_methods() {
AudioStreamPlayer2D::AudioStreamPlayer2D() {
AudioServer::get_singleton()->connect("bus_layout_changed", callable_mp(this, &AudioStreamPlayer2D::_bus_layout_changed));
+ cached_global_panning_strength = ProjectSettings::get_singleton()->get("audio/general/2d_panning_strength");
}
AudioStreamPlayer2D::~AudioStreamPlayer2D() {
diff --git a/scene/2d/audio_stream_player_2d.h b/scene/2d/audio_stream_player_2d.h
index 73b09e432f..a22782fe44 100644
--- a/scene/2d/audio_stream_player_2d.h
+++ b/scene/2d/audio_stream_player_2d.h
@@ -81,6 +81,9 @@ private:
float max_distance = 2000.0;
float attenuation = 1.0;
+ float panning_strength = 1.0f;
+ float cached_global_panning_strength = 1.0f;
+
protected:
void _validate_property(PropertyInfo &property) const override;
void _notification(int p_what);
@@ -123,6 +126,9 @@ public:
void set_max_polyphony(int p_max_polyphony);
int get_max_polyphony() const;
+ void set_panning_strength(float p_panning_strength);
+ float get_panning_strength() const;
+
Ref<AudioStreamPlayback> get_stream_playback();
AudioStreamPlayer2D();
diff --git a/scene/2d/cpu_particles_2d.cpp b/scene/2d/cpu_particles_2d.cpp
index f9cf70a586..913003c7e6 100644
--- a/scene/2d/cpu_particles_2d.cpp
+++ b/scene/2d/cpu_particles_2d.cpp
@@ -1362,7 +1362,7 @@ void CPUParticles2D::_bind_methods() {
ClassDB::bind_method(D_METHOD("convert_from_particles", "particles"), &CPUParticles2D::convert_from_particles);
ADD_GROUP("Emission Shape", "emission_");
- ADD_PROPERTY(PropertyInfo(Variant::INT, "emission_shape", PROPERTY_HINT_ENUM, "Point,Sphere,Sphere Surface,Box,Points,Directed Points", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED), "set_emission_shape", "get_emission_shape");
+ ADD_PROPERTY(PropertyInfo(Variant::INT, "emission_shape", PROPERTY_HINT_ENUM, "Point,Sphere,Sphere Surface,Rectangle,Points,Directed Points", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED), "set_emission_shape", "get_emission_shape");
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "emission_sphere_radius", PROPERTY_HINT_RANGE, "0.01,128,0.01,suffix:px"), "set_emission_sphere_radius", "get_emission_sphere_radius");
ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "emission_rect_extents", PROPERTY_HINT_NONE, "suffix:px"), "set_emission_rect_extents", "get_emission_rect_extents");
ADD_PROPERTY(PropertyInfo(Variant::PACKED_VECTOR2_ARRAY, "emission_points"), "set_emission_points", "get_emission_points");
diff --git a/scene/2d/light_2d.cpp b/scene/2d/light_2d.cpp
index 28d9b284e6..0481a58431 100644
--- a/scene/2d/light_2d.cpp
+++ b/scene/2d/light_2d.cpp
@@ -30,6 +30,11 @@
#include "light_2d.h"
+void Light2D::owner_changed_notify() {
+ // For cases where owner changes _after_ entering tree (as example, editor editing).
+ _update_light_visibility();
+}
+
void Light2D::_update_light_visibility() {
if (!is_inside_tree()) {
return;
diff --git a/scene/2d/light_2d.h b/scene/2d/light_2d.h
index f7b1f420e3..a84b6516c0 100644
--- a/scene/2d/light_2d.h
+++ b/scene/2d/light_2d.h
@@ -73,6 +73,8 @@ private:
void _update_light_visibility();
+ virtual void owner_changed_notify() override;
+
protected:
_FORCE_INLINE_ RID _get_light() const { return canvas_light; }
void _notification(int p_what);
diff --git a/scene/2d/navigation_agent_2d.cpp b/scene/2d/navigation_agent_2d.cpp
index e2ab4f7538..5a451a6dab 100644
--- a/scene/2d/navigation_agent_2d.cpp
+++ b/scene/2d/navigation_agent_2d.cpp
@@ -40,6 +40,9 @@ void NavigationAgent2D::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_avoidance_enabled", "enabled"), &NavigationAgent2D::set_avoidance_enabled);
ClassDB::bind_method(D_METHOD("get_avoidance_enabled"), &NavigationAgent2D::get_avoidance_enabled);
+ ClassDB::bind_method(D_METHOD("set_path_desired_distance", "desired_distance"), &NavigationAgent2D::set_path_desired_distance);
+ ClassDB::bind_method(D_METHOD("get_path_desired_distance"), &NavigationAgent2D::get_path_desired_distance);
+
ClassDB::bind_method(D_METHOD("set_target_desired_distance", "desired_distance"), &NavigationAgent2D::set_target_desired_distance);
ClassDB::bind_method(D_METHOD("get_target_desired_distance"), &NavigationAgent2D::get_target_desired_distance);
@@ -64,6 +67,9 @@ void NavigationAgent2D::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_navigation_layers", "navigation_layers"), &NavigationAgent2D::set_navigation_layers);
ClassDB::bind_method(D_METHOD("get_navigation_layers"), &NavigationAgent2D::get_navigation_layers);
+ ClassDB::bind_method(D_METHOD("set_navigation_layer_value", "layer_number", "value"), &NavigationAgent2D::set_navigation_layer_value);
+ ClassDB::bind_method(D_METHOD("get_navigation_layer_value", "layer_number"), &NavigationAgent2D::get_navigation_layer_value);
+
ClassDB::bind_method(D_METHOD("set_navigation_map", "navigation_map"), &NavigationAgent2D::set_navigation_map);
ClassDB::bind_method(D_METHOD("get_navigation_map"), &NavigationAgent2D::get_navigation_map);
@@ -81,6 +87,7 @@ void NavigationAgent2D::_bind_methods() {
ClassDB::bind_method(D_METHOD("_avoidance_done", "new_velocity"), &NavigationAgent2D::_avoidance_done);
+ ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "path_desired_distance", PROPERTY_HINT_RANGE, "0.1,100,0.01,suffix:px"), "set_path_desired_distance", "get_path_desired_distance");
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "target_desired_distance", PROPERTY_HINT_RANGE, "0.1,100,0.01,suffix:px"), "set_target_desired_distance", "get_target_desired_distance");
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "radius", PROPERTY_HINT_RANGE, "0.1,500,0.01,suffix:px"), "set_radius", "get_radius");
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "neighbor_dist", PROPERTY_HINT_RANGE, "0.1,100000,0.01,suffix:px"), "set_neighbor_dist", "get_neighbor_dist");
@@ -219,6 +226,24 @@ uint32_t NavigationAgent2D::get_navigation_layers() const {
return navigation_layers;
}
+void NavigationAgent2D::set_navigation_layer_value(int p_layer_number, bool p_value) {
+ ERR_FAIL_COND_MSG(p_layer_number < 1, "Navigation layer number must be between 1 and 32 inclusive.");
+ ERR_FAIL_COND_MSG(p_layer_number > 32, "Navigation layer number must be between 1 and 32 inclusive.");
+ uint32_t _navigation_layers = get_navigation_layers();
+ if (p_value) {
+ _navigation_layers |= 1 << (p_layer_number - 1);
+ } else {
+ _navigation_layers &= ~(1 << (p_layer_number - 1));
+ }
+ set_navigation_layers(_navigation_layers);
+}
+
+bool NavigationAgent2D::get_navigation_layer_value(int p_layer_number) const {
+ ERR_FAIL_COND_V_MSG(p_layer_number < 1, false, "Navigation layer number must be between 1 and 32 inclusive.");
+ ERR_FAIL_COND_V_MSG(p_layer_number > 32, false, "Navigation layer number must be between 1 and 32 inclusive.");
+ return get_navigation_layers() & (1 << (p_layer_number - 1));
+}
+
void NavigationAgent2D::set_navigation_map(RID p_navigation_map) {
map_override = p_navigation_map;
NavigationServer2D::get_singleton()->agent_set_map(agent, map_override);
@@ -234,6 +259,10 @@ RID NavigationAgent2D::get_navigation_map() const {
return RID();
}
+void NavigationAgent2D::set_path_desired_distance(real_t p_dd) {
+ path_desired_distance = p_dd;
+}
+
void NavigationAgent2D::set_target_desired_distance(real_t p_dd) {
target_desired_distance = p_dd;
}
@@ -399,7 +428,7 @@ void NavigationAgent2D::update_navigation() {
// Check if we can advance the navigation path
if (navigation_finished == false) {
// Advances to the next far away location.
- while (o.distance_to(navigation_path[nav_path_index]) < target_desired_distance) {
+ while (o.distance_to(navigation_path[nav_path_index]) < path_desired_distance) {
nav_path_index += 1;
if (nav_path_index == navigation_path.size()) {
_check_distance_to_target();
diff --git a/scene/2d/navigation_agent_2d.h b/scene/2d/navigation_agent_2d.h
index 0e494a0512..032a15cad2 100644
--- a/scene/2d/navigation_agent_2d.h
+++ b/scene/2d/navigation_agent_2d.h
@@ -47,6 +47,7 @@ class NavigationAgent2D : public Node {
bool avoidance_enabled = false;
uint32_t navigation_layers = 1;
+ real_t path_desired_distance = 1.0;
real_t target_desired_distance = 1.0;
real_t radius = 0.0;
real_t neighbor_dist = 0.0;
@@ -88,9 +89,17 @@ public:
void set_navigation_layers(uint32_t p_navigation_layers);
uint32_t get_navigation_layers() const;
+ void set_navigation_layer_value(int p_layer_number, bool p_value);
+ bool get_navigation_layer_value(int p_layer_number) const;
+
void set_navigation_map(RID p_navigation_map);
RID get_navigation_map() const;
+ void set_path_desired_distance(real_t p_dd);
+ real_t get_path_desired_distance() const {
+ return path_desired_distance;
+ }
+
void set_target_desired_distance(real_t p_dd);
real_t get_target_desired_distance() const {
return target_desired_distance;
diff --git a/scene/2d/navigation_region_2d.cpp b/scene/2d/navigation_region_2d.cpp
index d611e524a6..6e8fd891cb 100644
--- a/scene/2d/navigation_region_2d.cpp
+++ b/scene/2d/navigation_region_2d.cpp
@@ -388,6 +388,24 @@ uint32_t NavigationRegion2D::get_navigation_layers() const {
return NavigationServer2D::get_singleton()->region_get_navigation_layers(region);
}
+void NavigationRegion2D::set_navigation_layer_value(int p_layer_number, bool p_value) {
+ ERR_FAIL_COND_MSG(p_layer_number < 1, "Navigation layer number must be between 1 and 32 inclusive.");
+ ERR_FAIL_COND_MSG(p_layer_number > 32, "Navigation layer number must be between 1 and 32 inclusive.");
+ uint32_t _navigation_layers = get_navigation_layers();
+ if (p_value) {
+ _navigation_layers |= 1 << (p_layer_number - 1);
+ } else {
+ _navigation_layers &= ~(1 << (p_layer_number - 1));
+ }
+ set_navigation_layers(_navigation_layers);
+}
+
+bool NavigationRegion2D::get_navigation_layer_value(int p_layer_number) const {
+ ERR_FAIL_COND_V_MSG(p_layer_number < 1, false, "Navigation layer number must be between 1 and 32 inclusive.");
+ ERR_FAIL_COND_V_MSG(p_layer_number > 32, false, "Navigation layer number must be between 1 and 32 inclusive.");
+ return get_navigation_layers() & (1 << (p_layer_number - 1));
+}
+
void NavigationRegion2D::set_enter_cost(real_t p_enter_cost) {
ERR_FAIL_COND_MSG(p_enter_cost < 0.0, "The enter_cost must be positive.");
enter_cost = MAX(p_enter_cost, 0.0);
@@ -562,6 +580,9 @@ void NavigationRegion2D::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_navigation_layers", "navigation_layers"), &NavigationRegion2D::set_navigation_layers);
ClassDB::bind_method(D_METHOD("get_navigation_layers"), &NavigationRegion2D::get_navigation_layers);
+ ClassDB::bind_method(D_METHOD("set_navigation_layer_value", "layer_number", "value"), &NavigationRegion2D::set_navigation_layer_value);
+ ClassDB::bind_method(D_METHOD("get_navigation_layer_value", "layer_number"), &NavigationRegion2D::get_navigation_layer_value);
+
ClassDB::bind_method(D_METHOD("get_region_rid"), &NavigationRegion2D::get_region_rid);
ClassDB::bind_method(D_METHOD("set_enter_cost", "enter_cost"), &NavigationRegion2D::set_enter_cost);
diff --git a/scene/2d/navigation_region_2d.h b/scene/2d/navigation_region_2d.h
index 000cb32f95..3c9df91fe3 100644
--- a/scene/2d/navigation_region_2d.h
+++ b/scene/2d/navigation_region_2d.h
@@ -120,6 +120,9 @@ public:
void set_navigation_layers(uint32_t p_navigation_layers);
uint32_t get_navigation_layers() const;
+ void set_navigation_layer_value(int p_layer_number, bool p_value);
+ bool get_navigation_layer_value(int p_layer_number) const;
+
RID get_region_rid() const;
void set_enter_cost(real_t p_enter_cost);
diff --git a/scene/2d/node_2d.cpp b/scene/2d/node_2d.cpp
index b2b848d380..4599785ce4 100644
--- a/scene/2d/node_2d.cpp
+++ b/scene/2d/node_2d.cpp
@@ -437,7 +437,7 @@ void Node2D::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_relative_transform_to_parent", "parent"), &Node2D::get_relative_transform_to_parent);
ADD_GROUP("Transform", "");
- ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "position", PROPERTY_HINT_RANGE, "-99999,99999,0.001,or_lesser,or_greater,noslider,suffix:px"), "set_position", "get_position");
+ ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "position", PROPERTY_HINT_RANGE, "-99999,99999,0.001,or_lesser,or_greater,no_slider,suffix:px"), "set_position", "get_position");
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "rotation", PROPERTY_HINT_RANGE, "-360,360,0.1,or_lesser,or_greater,radians"), "set_rotation", "get_rotation");
ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "scale", PROPERTY_HINT_LINK), "set_scale", "get_scale");
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "skew", PROPERTY_HINT_RANGE, "-89.9,89.9,0.1,radians"), "set_skew", "get_skew");
diff --git a/scene/2d/tile_map.cpp b/scene/2d/tile_map.cpp
index 6d04dcdc71..9c4b0feea2 100644
--- a/scene/2d/tile_map.cpp
+++ b/scene/2d/tile_map.cpp
@@ -1090,7 +1090,7 @@ void TileMap::_rendering_update_dirty_quadrants(SelfList<TileMapQuadrant>::List
q.occluders.clear();
// Those allow to group cell per material or z-index.
- Ref<ShaderMaterial> prev_material;
+ Ref<Material> prev_material;
int prev_z_index = 0;
RID prev_canvas_item;
@@ -1129,7 +1129,7 @@ void TileMap::_rendering_update_dirty_quadrants(SelfList<TileMapQuadrant>::List
tile_data = atlas_source->get_tile_data(c.get_atlas_coords(), c.alternative_tile);
}
- Ref<ShaderMaterial> mat = tile_data->get_material();
+ Ref<Material> mat = tile_data->get_material();
int z_index = tile_data->get_z_index();
// Quandrant pos.
diff --git a/scene/3d/audio_stream_player_3d.cpp b/scene/3d/audio_stream_player_3d.cpp
index 7c1fb3779f..824ea0407e 100644
--- a/scene/3d/audio_stream_player_3d.cpp
+++ b/scene/3d/audio_stream_player_3d.cpp
@@ -30,6 +30,7 @@
#include "audio_stream_player_3d.h"
+#include "core/config/project_settings.h"
#include "scene/3d/area_3d.h"
#include "scene/3d/audio_listener_3d.h"
#include "scene/3d/camera_3d.h"
@@ -462,9 +463,10 @@ Vector<AudioFrame> AudioStreamPlayer3D::_update_panning() {
for (Ref<AudioStreamPlayback> &playback : stream_playbacks) {
AudioServer::get_singleton()->set_playback_highshelf_params(playback, linear_attenuation, attenuation_filter_cutoff_hz);
}
- //TODO: The lower the second parameter (tightness) the more the sound will "enclose" the listener (more undirected / playing from
- // speakers not facing the source) - this could be made distance dependent.
- _calc_output_vol(local_pos.normalized(), 4.0, output_volume_vector);
+ // Bake in a constant factor here to allow the project setting defaults for 2d and 3d to be normalized to 1.0.
+ float tightness = cached_global_panning_strength * 2.0f;
+ tightness *= panning_strength;
+ _calc_output_vol(local_pos.normalized(), tightness, output_volume_vector);
for (unsigned int k = 0; k < 4; k++) {
output_volume_vector.write[k] = multiplier * output_volume_vector[k];
@@ -792,6 +794,15 @@ int AudioStreamPlayer3D::get_max_polyphony() const {
return max_polyphony;
}
+void AudioStreamPlayer3D::set_panning_strength(float p_panning_strength) {
+ ERR_FAIL_COND_MSG(p_panning_strength < 0, "Panning strength must be a positive number.");
+ panning_strength = p_panning_strength;
+}
+
+float AudioStreamPlayer3D::get_panning_strength() const {
+ return panning_strength;
+}
+
void AudioStreamPlayer3D::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_stream", "stream"), &AudioStreamPlayer3D::set_stream);
ClassDB::bind_method(D_METHOD("get_stream"), &AudioStreamPlayer3D::get_stream);
@@ -857,6 +868,9 @@ void AudioStreamPlayer3D::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_max_polyphony", "max_polyphony"), &AudioStreamPlayer3D::set_max_polyphony);
ClassDB::bind_method(D_METHOD("get_max_polyphony"), &AudioStreamPlayer3D::get_max_polyphony);
+ ClassDB::bind_method(D_METHOD("set_panning_strength", "panning_strength"), &AudioStreamPlayer3D::set_panning_strength);
+ ClassDB::bind_method(D_METHOD("get_panning_strength"), &AudioStreamPlayer3D::get_panning_strength);
+
ClassDB::bind_method(D_METHOD("get_stream_playback"), &AudioStreamPlayer3D::get_stream_playback);
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "stream", PROPERTY_HINT_RESOURCE_TYPE, "AudioStream"), "set_stream", "get_stream");
@@ -870,6 +884,7 @@ void AudioStreamPlayer3D::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "stream_paused", PROPERTY_HINT_NONE, ""), "set_stream_paused", "get_stream_paused");
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "max_distance", PROPERTY_HINT_RANGE, "0,4096,0.01,or_greater,suffix:m"), "set_max_distance", "get_max_distance");
ADD_PROPERTY(PropertyInfo(Variant::INT, "max_polyphony", PROPERTY_HINT_NONE, ""), "set_max_polyphony", "get_max_polyphony");
+ ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "panning_strength", PROPERTY_HINT_RANGE, "0,3,0.01,or_greater"), "set_panning_strength", "get_panning_strength");
ADD_PROPERTY(PropertyInfo(Variant::STRING_NAME, "bus", PROPERTY_HINT_ENUM, ""), "set_bus", "get_bus");
ADD_PROPERTY(PropertyInfo(Variant::INT, "area_mask", PROPERTY_HINT_LAYERS_2D_PHYSICS), "set_area_mask", "get_area_mask");
ADD_GROUP("Emission Angle", "emission_angle");
@@ -898,6 +913,7 @@ AudioStreamPlayer3D::AudioStreamPlayer3D() {
velocity_tracker.instantiate();
AudioServer::get_singleton()->connect("bus_layout_changed", callable_mp(this, &AudioStreamPlayer3D::_bus_layout_changed));
set_disable_scale(true);
+ cached_global_panning_strength = ProjectSettings::get_singleton()->get("audio/general/3d_panning_strength");
}
AudioStreamPlayer3D::~AudioStreamPlayer3D() {
diff --git a/scene/3d/audio_stream_player_3d.h b/scene/3d/audio_stream_player_3d.h
index bc47a8de93..85ece6d8d5 100644
--- a/scene/3d/audio_stream_player_3d.h
+++ b/scene/3d/audio_stream_player_3d.h
@@ -116,6 +116,9 @@ private:
float _get_attenuation_db(float p_distance) const;
+ float panning_strength = 1.0f;
+ float cached_global_panning_strength = 1.0f;
+
protected:
void _validate_property(PropertyInfo &property) const override;
void _notification(int p_what);
@@ -182,6 +185,9 @@ public:
void set_stream_paused(bool p_pause);
bool get_stream_paused() const;
+ void set_panning_strength(float p_panning_strength);
+ float get_panning_strength() const;
+
Ref<AudioStreamPlayback> get_stream_playback();
AudioStreamPlayer3D();
diff --git a/scene/3d/label_3d.cpp b/scene/3d/label_3d.cpp
index d95cf15bfa..0849b2c631 100644
--- a/scene/3d/label_3d.cpp
+++ b/scene/3d/label_3d.cpp
@@ -155,11 +155,6 @@ void Label3D::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::INT, "text_direction", PROPERTY_HINT_ENUM, "Auto,Left-to-Right,Right-to-Left"), "set_text_direction", "get_text_direction");
ADD_PROPERTY(PropertyInfo(Variant::STRING, "language", PROPERTY_HINT_LOCALE_ID, ""), "set_language", "get_language");
- BIND_ENUM_CONSTANT(AUTOWRAP_OFF);
- BIND_ENUM_CONSTANT(AUTOWRAP_ARBITRARY);
- BIND_ENUM_CONSTANT(AUTOWRAP_WORD);
- BIND_ENUM_CONSTANT(AUTOWRAP_WORD_SMART);
-
BIND_ENUM_CONSTANT(FLAG_SHADED);
BIND_ENUM_CONSTANT(FLAG_DOUBLE_SIDED);
BIND_ENUM_CONSTANT(FLAG_DISABLE_DEPTH_TEST);
@@ -381,7 +376,7 @@ void Label3D::_generate_glyph_surfaces(const Glyph &p_glyph, Vector2 &r_offset,
} else {
mat_hash = hash_one_uint64(0);
}
- mat_hash = hash_djb2_one_64(p_priority | (p_outline_size << 31), mat_hash);
+ mat_hash = hash_fmix32(hash_murmur3_one_64(p_priority | (p_outline_size << 31), mat_hash));
if (!surfaces.has(mat_hash)) {
SurfaceData surf;
@@ -514,16 +509,16 @@ void Label3D::_shape() {
uint16_t autowrap_flags = TextServer::BREAK_MANDATORY;
switch (autowrap_mode) {
- case AUTOWRAP_WORD_SMART:
+ case TextServer::AUTOWRAP_WORD_SMART:
autowrap_flags = TextServer::BREAK_WORD_BOUND_ADAPTIVE | TextServer::BREAK_MANDATORY;
break;
- case AUTOWRAP_WORD:
+ case TextServer::AUTOWRAP_WORD:
autowrap_flags = TextServer::BREAK_WORD_BOUND | TextServer::BREAK_MANDATORY;
break;
- case AUTOWRAP_ARBITRARY:
+ case TextServer::AUTOWRAP_ARBITRARY:
autowrap_flags = TextServer::BREAK_GRAPHEME_BOUND | TextServer::BREAK_MANDATORY;
break;
- case AUTOWRAP_OFF:
+ case TextServer::AUTOWRAP_OFF:
break;
}
PackedInt32Array line_breaks = TS->shaped_text_get_line_breaks(text_rid, width, 0, autowrap_flags);
@@ -885,7 +880,7 @@ Color Label3D::get_outline_modulate() const {
return outline_modulate;
}
-void Label3D::set_autowrap_mode(Label3D::AutowrapMode p_mode) {
+void Label3D::set_autowrap_mode(TextServer::AutowrapMode p_mode) {
if (autowrap_mode != p_mode) {
autowrap_mode = p_mode;
dirty_lines = true;
@@ -893,7 +888,7 @@ void Label3D::set_autowrap_mode(Label3D::AutowrapMode p_mode) {
}
}
-Label3D::AutowrapMode Label3D::get_autowrap_mode() const {
+TextServer::AutowrapMode Label3D::get_autowrap_mode() const {
return autowrap_mode;
}
diff --git a/scene/3d/label_3d.h b/scene/3d/label_3d.h
index 62f4c3fe96..7766bca068 100644
--- a/scene/3d/label_3d.h
+++ b/scene/3d/label_3d.h
@@ -54,13 +54,6 @@ public:
ALPHA_CUT_OPAQUE_PREPASS
};
- enum AutowrapMode {
- AUTOWRAP_OFF,
- AUTOWRAP_ARBITRARY,
- AUTOWRAP_WORD,
- AUTOWRAP_WORD_SMART
- };
-
private:
real_t pixel_size = 0.01;
bool flags[FLAG_MAX] = {};
@@ -91,7 +84,7 @@ private:
String xl_text;
bool uppercase = false;
- AutowrapMode autowrap_mode = AUTOWRAP_OFF;
+ TextServer::AutowrapMode autowrap_mode = TextServer::AUTOWRAP_OFF;
float width = 500.0;
int font_size = 16;
@@ -200,8 +193,8 @@ public:
void set_outline_modulate(const Color &p_color);
Color get_outline_modulate() const;
- void set_autowrap_mode(AutowrapMode p_mode);
- AutowrapMode get_autowrap_mode() const;
+ void set_autowrap_mode(TextServer::AutowrapMode p_mode);
+ TextServer::AutowrapMode get_autowrap_mode() const;
void set_width(float p_width);
float get_width() const;
@@ -234,7 +227,6 @@ public:
~Label3D();
};
-VARIANT_ENUM_CAST(Label3D::AutowrapMode);
VARIANT_ENUM_CAST(Label3D::DrawFlags);
VARIANT_ENUM_CAST(Label3D::AlphaCutMode);
diff --git a/scene/3d/light_3d.cpp b/scene/3d/light_3d.cpp
index d80c10d63a..6c999d85e2 100644
--- a/scene/3d/light_3d.cpp
+++ b/scene/3d/light_3d.cpp
@@ -176,6 +176,11 @@ Ref<Texture2D> Light3D::get_projector() const {
return projector;
}
+void Light3D::owner_changed_notify() {
+ // For cases where owner changes _after_ entering tree (as example, editor editing).
+ _update_visibility();
+}
+
void Light3D::_update_visibility() {
if (!is_inside_tree()) {
return;
@@ -281,7 +286,7 @@ void Light3D::_bind_methods() {
ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "light_indirect_energy", PROPERTY_HINT_RANGE, "0,16,0.001,or_greater"), "set_param", "get_param", PARAM_INDIRECT_ENERGY);
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "light_projector", PROPERTY_HINT_RESOURCE_TYPE, "Texture2D"), "set_projector", "get_projector");
ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "light_size", PROPERTY_HINT_RANGE, "0,1,0.001,or_greater,suffix:m"), "set_param", "get_param", PARAM_SIZE);
- ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "light_angular_distance", PROPERTY_HINT_RANGE, "0,90,0.01,radians"), "set_param", "get_param", PARAM_SIZE);
+ ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "light_angular_distance", PROPERTY_HINT_RANGE, "0,90,0.01,degrees"), "set_param", "get_param", PARAM_SIZE);
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "light_negative"), "set_negative", "is_negative");
ADD_PROPERTYI(PropertyInfo(Variant::FLOAT, "light_specular", PROPERTY_HINT_RANGE, "0,16,0.001,or_greater"), "set_param", "get_param", PARAM_SPECULAR);
ADD_PROPERTY(PropertyInfo(Variant::INT, "light_bake_mode", PROPERTY_HINT_ENUM, "Disabled,Static (VoxelGI/SDFGI/LightmapGI),Dynamic (VoxelGI/SDFGI only)"), "set_bake_mode", "get_bake_mode");
diff --git a/scene/3d/light_3d.h b/scene/3d/light_3d.h
index 383fa644e5..6ff332df5a 100644
--- a/scene/3d/light_3d.h
+++ b/scene/3d/light_3d.h
@@ -85,6 +85,8 @@ private:
// bind helpers
+ virtual void owner_changed_notify() override;
+
protected:
RID light;
diff --git a/scene/3d/lightmap_gi.cpp b/scene/3d/lightmap_gi.cpp
index 9d1d8721e6..abe942b97a 100644
--- a/scene/3d/lightmap_gi.cpp
+++ b/scene/3d/lightmap_gi.cpp
@@ -116,7 +116,7 @@ void LightmapGIData::_set_light_textures_data(const Array &p_data) {
Array LightmapGIData::_get_light_textures_data() const {
Array ret;
- if (light_texture.is_null()) {
+ if (light_texture.is_null() || light_texture->get_layers() == 0) {
return ret;
}
@@ -665,7 +665,7 @@ void LightmapGI::_plot_triangle_into_octree(GenProbesOctree *p_cell, float p_cel
}
}
-void LightmapGI::_gen_new_positions_from_octree(const GenProbesOctree *p_cell, float p_cell_size, const Vector<Vector3> &probe_positions, LocalVector<Vector3> &new_probe_positions, HashMap<Vector3i, bool, Vector3iHash> &positions_used, const AABB &p_bounds) {
+void LightmapGI::_gen_new_positions_from_octree(const GenProbesOctree *p_cell, float p_cell_size, const Vector<Vector3> &probe_positions, LocalVector<Vector3> &new_probe_positions, HashMap<Vector3i, bool> &positions_used, const AABB &p_bounds) {
for (int i = 0; i < 8; i++) {
Vector3i pos = p_cell->offset;
if (i & 1) {
@@ -934,7 +934,7 @@ LightmapGI::BakeError LightmapGI::bake(Node *p_from_node, String p_image_data_pa
}
LocalVector<Vector3> new_probe_positions;
- HashMap<Vector3i, bool, Vector3iHash> positions_used;
+ HashMap<Vector3i, bool> positions_used;
for (uint32_t i = 0; i < 8; i++) { //insert bounding endpoints
Vector3i pos;
if (i & 1) {
@@ -979,13 +979,13 @@ LightmapGI::BakeError LightmapGI::bake(Node *p_from_node, String p_image_data_pa
Color linear_color = light->get_color().srgb_to_linear();
if (Object::cast_to<DirectionalLight3D>(light)) {
DirectionalLight3D *l = Object::cast_to<DirectionalLight3D>(light);
- lightmapper->add_directional_light(light->get_bake_mode() == Light3D::BAKE_STATIC, -xf.basis.get_column(Vector3::AXIS_Z).normalized(), linear_color, l->get_param(Light3D::PARAM_ENERGY), l->get_param(Light3D::PARAM_SIZE));
+ lightmapper->add_directional_light(light->get_bake_mode() == Light3D::BAKE_STATIC, -xf.basis.get_column(Vector3::AXIS_Z).normalized(), linear_color, l->get_param(Light3D::PARAM_ENERGY), l->get_param(Light3D::PARAM_SIZE), l->get_param(Light3D::PARAM_SHADOW_BLUR));
} else if (Object::cast_to<OmniLight3D>(light)) {
OmniLight3D *l = Object::cast_to<OmniLight3D>(light);
- lightmapper->add_omni_light(light->get_bake_mode() == Light3D::BAKE_STATIC, xf.origin, linear_color, l->get_param(Light3D::PARAM_ENERGY), l->get_param(Light3D::PARAM_RANGE), l->get_param(Light3D::PARAM_ATTENUATION), l->get_param(Light3D::PARAM_SIZE));
+ lightmapper->add_omni_light(light->get_bake_mode() == Light3D::BAKE_STATIC, xf.origin, linear_color, l->get_param(Light3D::PARAM_ENERGY), l->get_param(Light3D::PARAM_RANGE), l->get_param(Light3D::PARAM_ATTENUATION), l->get_param(Light3D::PARAM_SIZE), l->get_param(Light3D::PARAM_SHADOW_BLUR));
} else if (Object::cast_to<SpotLight3D>(light)) {
SpotLight3D *l = Object::cast_to<SpotLight3D>(light);
- lightmapper->add_spot_light(light->get_bake_mode() == Light3D::BAKE_STATIC, xf.origin, -xf.basis.get_column(Vector3::AXIS_Z).normalized(), linear_color, l->get_param(Light3D::PARAM_ENERGY), l->get_param(Light3D::PARAM_RANGE), l->get_param(Light3D::PARAM_ATTENUATION), l->get_param(Light3D::PARAM_SPOT_ANGLE), l->get_param(Light3D::PARAM_SPOT_ATTENUATION), l->get_param(Light3D::PARAM_SIZE));
+ lightmapper->add_spot_light(light->get_bake_mode() == Light3D::BAKE_STATIC, xf.origin, -xf.basis.get_column(Vector3::AXIS_Z).normalized(), linear_color, l->get_param(Light3D::PARAM_ENERGY), l->get_param(Light3D::PARAM_RANGE), l->get_param(Light3D::PARAM_ATTENUATION), l->get_param(Light3D::PARAM_SPOT_ANGLE), l->get_param(Light3D::PARAM_SPOT_ATTENUATION), l->get_param(Light3D::PARAM_SIZE), l->get_param(Light3D::PARAM_SHADOW_BLUR));
}
}
for (int i = 0; i < probes_found.size(); i++) {
diff --git a/scene/3d/lightmap_gi.h b/scene/3d/lightmap_gi.h
index b39cde429d..f7a23c776a 100644
--- a/scene/3d/lightmap_gi.h
+++ b/scene/3d/lightmap_gi.h
@@ -212,16 +212,8 @@ private:
}
};
- struct Vector3iHash {
- _FORCE_INLINE_ static uint32_t hash(const Vector3i &p_vtx) {
- uint32_t h = hash_djb2_one_32(p_vtx.x);
- h = hash_djb2_one_32(p_vtx.y, h);
- return hash_djb2_one_32(p_vtx.z, h);
- }
- };
-
void _plot_triangle_into_octree(GenProbesOctree *p_cell, float p_cell_size, const Vector3 *p_triangle);
- void _gen_new_positions_from_octree(const GenProbesOctree *p_cell, float p_cell_size, const Vector<Vector3> &probe_positions, LocalVector<Vector3> &new_probe_positions, HashMap<Vector3i, bool, Vector3iHash> &positions_used, const AABB &p_bounds);
+ void _gen_new_positions_from_octree(const GenProbesOctree *p_cell, float p_cell_size, const Vector<Vector3> &probe_positions, LocalVector<Vector3> &new_probe_positions, HashMap<Vector3i, bool> &positions_used, const AABB &p_bounds);
protected:
void _validate_property(PropertyInfo &property) const override;
diff --git a/scene/3d/lightmapper.h b/scene/3d/lightmapper.h
index 4e6f76e360..9b973fd6bc 100644
--- a/scene/3d/lightmapper.h
+++ b/scene/3d/lightmapper.h
@@ -176,9 +176,9 @@ public:
};
virtual void add_mesh(const MeshData &p_mesh) = 0;
- virtual void add_directional_light(bool p_static, const Vector3 &p_direction, const Color &p_color, float p_energy, float p_angular_distance) = 0;
- virtual void add_omni_light(bool p_static, const Vector3 &p_position, const Color &p_color, float p_energy, float p_range, float p_attenuation, float p_size) = 0;
- virtual void add_spot_light(bool p_static, const Vector3 &p_position, const Vector3 p_direction, const Color &p_color, float p_energy, float p_range, float p_attenuation, float p_spot_angle, float p_spot_attenuation, float p_size) = 0;
+ virtual void add_directional_light(bool p_static, const Vector3 &p_direction, const Color &p_color, float p_energy, float p_angular_distance, float p_shadow_blur) = 0;
+ virtual void add_omni_light(bool p_static, const Vector3 &p_position, const Color &p_color, float p_energy, float p_range, float p_attenuation, float p_size, float p_shadow_blur) = 0;
+ virtual void add_spot_light(bool p_static, const Vector3 &p_position, const Vector3 p_direction, const Color &p_color, float p_energy, float p_range, float p_attenuation, float p_spot_angle, float p_spot_attenuation, float p_size, float p_shadow_blur) = 0;
virtual void add_probe(const Vector3 &p_position) = 0;
virtual BakeError bake(BakeQuality p_quality, bool p_use_denoiser, int p_bounces, float p_bias, int p_max_texture_size, bool p_bake_sh, GenerateProbes p_generate_probes, const Ref<Image> &p_environment_panorama, const Basis &p_environment_transform, BakeStepFunc p_step_function = nullptr, void *p_step_userdata = nullptr) = 0;
diff --git a/scene/3d/navigation_agent_3d.cpp b/scene/3d/navigation_agent_3d.cpp
index 09d75dd284..e5ec444335 100644
--- a/scene/3d/navigation_agent_3d.cpp
+++ b/scene/3d/navigation_agent_3d.cpp
@@ -38,6 +38,9 @@ void NavigationAgent3D::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_avoidance_enabled", "enabled"), &NavigationAgent3D::set_avoidance_enabled);
ClassDB::bind_method(D_METHOD("get_avoidance_enabled"), &NavigationAgent3D::get_avoidance_enabled);
+ ClassDB::bind_method(D_METHOD("set_path_desired_distance", "desired_distance"), &NavigationAgent3D::set_path_desired_distance);
+ ClassDB::bind_method(D_METHOD("get_path_desired_distance"), &NavigationAgent3D::get_path_desired_distance);
+
ClassDB::bind_method(D_METHOD("set_target_desired_distance", "desired_distance"), &NavigationAgent3D::set_target_desired_distance);
ClassDB::bind_method(D_METHOD("get_target_desired_distance"), &NavigationAgent3D::get_target_desired_distance);
@@ -68,6 +71,9 @@ void NavigationAgent3D::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_navigation_layers", "navigation_layers"), &NavigationAgent3D::set_navigation_layers);
ClassDB::bind_method(D_METHOD("get_navigation_layers"), &NavigationAgent3D::get_navigation_layers);
+ ClassDB::bind_method(D_METHOD("set_navigation_layer_value", "layer_number", "value"), &NavigationAgent3D::set_navigation_layer_value);
+ ClassDB::bind_method(D_METHOD("get_navigation_layer_value", "layer_number"), &NavigationAgent3D::get_navigation_layer_value);
+
ClassDB::bind_method(D_METHOD("set_navigation_map", "navigation_map"), &NavigationAgent3D::set_navigation_map);
ClassDB::bind_method(D_METHOD("get_navigation_map"), &NavigationAgent3D::get_navigation_map);
@@ -85,6 +91,7 @@ void NavigationAgent3D::_bind_methods() {
ClassDB::bind_method(D_METHOD("_avoidance_done", "new_velocity"), &NavigationAgent3D::_avoidance_done);
+ ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "path_desired_distance", PROPERTY_HINT_RANGE, "0.1,100,0.01,suffix:m"), "set_path_desired_distance", "get_path_desired_distance");
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "target_desired_distance", PROPERTY_HINT_RANGE, "0.1,100,0.01,suffix:m"), "set_target_desired_distance", "get_target_desired_distance");
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "radius", PROPERTY_HINT_RANGE, "0.1,100,0.01,suffix:m"), "set_radius", "get_radius");
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "agent_height_offset", PROPERTY_HINT_RANGE, "-100.0,100,0.01,suffix:m"), "set_agent_height_offset", "get_agent_height_offset");
@@ -226,6 +233,24 @@ uint32_t NavigationAgent3D::get_navigation_layers() const {
return navigation_layers;
}
+void NavigationAgent3D::set_navigation_layer_value(int p_layer_number, bool p_value) {
+ ERR_FAIL_COND_MSG(p_layer_number < 1, "Navigation layer number must be between 1 and 32 inclusive.");
+ ERR_FAIL_COND_MSG(p_layer_number > 32, "Navigation layer number must be between 1 and 32 inclusive.");
+ uint32_t _navigation_layers = get_navigation_layers();
+ if (p_value) {
+ _navigation_layers |= 1 << (p_layer_number - 1);
+ } else {
+ _navigation_layers &= ~(1 << (p_layer_number - 1));
+ }
+ set_navigation_layers(_navigation_layers);
+}
+
+bool NavigationAgent3D::get_navigation_layer_value(int p_layer_number) const {
+ ERR_FAIL_COND_V_MSG(p_layer_number < 1, false, "Navigation layer number must be between 1 and 32 inclusive.");
+ ERR_FAIL_COND_V_MSG(p_layer_number > 32, false, "Navigation layer number must be between 1 and 32 inclusive.");
+ return get_navigation_layers() & (1 << (p_layer_number - 1));
+}
+
void NavigationAgent3D::set_navigation_map(RID p_navigation_map) {
map_override = p_navigation_map;
NavigationServer3D::get_singleton()->agent_set_map(agent, map_override);
@@ -241,6 +266,10 @@ RID NavigationAgent3D::get_navigation_map() const {
return RID();
}
+void NavigationAgent3D::set_path_desired_distance(real_t p_dd) {
+ path_desired_distance = p_dd;
+}
+
void NavigationAgent3D::set_target_desired_distance(real_t p_dd) {
target_desired_distance = p_dd;
}
@@ -416,7 +445,7 @@ void NavigationAgent3D::update_navigation() {
// Check if we can advance the navigation path
if (navigation_finished == false) {
// Advances to the next far away location.
- while (o.distance_to(navigation_path[nav_path_index] - Vector3(0, navigation_height_offset, 0)) < target_desired_distance) {
+ while (o.distance_to(navigation_path[nav_path_index] - Vector3(0, navigation_height_offset, 0)) < path_desired_distance) {
nav_path_index += 1;
if (nav_path_index == navigation_path.size()) {
_check_distance_to_target();
diff --git a/scene/3d/navigation_agent_3d.h b/scene/3d/navigation_agent_3d.h
index d0eaead3f1..0a00d769c3 100644
--- a/scene/3d/navigation_agent_3d.h
+++ b/scene/3d/navigation_agent_3d.h
@@ -47,6 +47,7 @@ class NavigationAgent3D : public Node {
bool avoidance_enabled = false;
uint32_t navigation_layers = 1;
+ real_t path_desired_distance = 1.0;
real_t target_desired_distance = 1.0;
real_t radius = 0.0;
real_t navigation_height_offset = 0.0;
@@ -90,9 +91,17 @@ public:
void set_navigation_layers(uint32_t p_navigation_layers);
uint32_t get_navigation_layers() const;
+ void set_navigation_layer_value(int p_layer_number, bool p_value);
+ bool get_navigation_layer_value(int p_layer_number) const;
+
void set_navigation_map(RID p_navigation_map);
RID get_navigation_map() const;
+ void set_path_desired_distance(real_t p_dd);
+ real_t get_path_desired_distance() const {
+ return path_desired_distance;
+ }
+
void set_target_desired_distance(real_t p_dd);
real_t get_target_desired_distance() const {
return target_desired_distance;
diff --git a/scene/3d/navigation_region_3d.cpp b/scene/3d/navigation_region_3d.cpp
index 7ef16fbc0a..2a8149c6f6 100644
--- a/scene/3d/navigation_region_3d.cpp
+++ b/scene/3d/navigation_region_3d.cpp
@@ -73,6 +73,24 @@ uint32_t NavigationRegion3D::get_navigation_layers() const {
return NavigationServer3D::get_singleton()->region_get_navigation_layers(region);
}
+void NavigationRegion3D::set_navigation_layer_value(int p_layer_number, bool p_value) {
+ ERR_FAIL_COND_MSG(p_layer_number < 1, "Navigation layer number must be between 1 and 32 inclusive.");
+ ERR_FAIL_COND_MSG(p_layer_number > 32, "Navigation layer number must be between 1 and 32 inclusive.");
+ uint32_t _navigation_layers = get_navigation_layers();
+ if (p_value) {
+ _navigation_layers |= 1 << (p_layer_number - 1);
+ } else {
+ _navigation_layers &= ~(1 << (p_layer_number - 1));
+ }
+ set_navigation_layers(_navigation_layers);
+}
+
+bool NavigationRegion3D::get_navigation_layer_value(int p_layer_number) const {
+ ERR_FAIL_COND_V_MSG(p_layer_number < 1, false, "Navigation layer number must be between 1 and 32 inclusive.");
+ ERR_FAIL_COND_V_MSG(p_layer_number > 32, false, "Navigation layer number must be between 1 and 32 inclusive.");
+ return get_navigation_layers() & (1 << (p_layer_number - 1));
+}
+
void NavigationRegion3D::set_enter_cost(real_t p_enter_cost) {
ERR_FAIL_COND_MSG(p_enter_cost < 0.0, "The enter_cost must be positive.");
enter_cost = MAX(p_enter_cost, 0.0);
@@ -242,6 +260,9 @@ void NavigationRegion3D::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_navigation_layers", "navigation_layers"), &NavigationRegion3D::set_navigation_layers);
ClassDB::bind_method(D_METHOD("get_navigation_layers"), &NavigationRegion3D::get_navigation_layers);
+ ClassDB::bind_method(D_METHOD("set_navigation_layer_value", "layer_number", "value"), &NavigationRegion3D::set_navigation_layer_value);
+ ClassDB::bind_method(D_METHOD("get_navigation_layer_value", "layer_number"), &NavigationRegion3D::get_navigation_layer_value);
+
ClassDB::bind_method(D_METHOD("get_region_rid"), &NavigationRegion3D::get_region_rid);
ClassDB::bind_method(D_METHOD("set_enter_cost", "enter_cost"), &NavigationRegion3D::set_enter_cost);
diff --git a/scene/3d/navigation_region_3d.h b/scene/3d/navigation_region_3d.h
index 92474d1429..aaaf5dd3b8 100644
--- a/scene/3d/navigation_region_3d.h
+++ b/scene/3d/navigation_region_3d.h
@@ -60,6 +60,9 @@ public:
void set_navigation_layers(uint32_t p_navigation_layers);
uint32_t get_navigation_layers() const;
+ void set_navigation_layer_value(int p_layer_number, bool p_value);
+ bool get_navigation_layer_value(int p_layer_number) const;
+
RID get_region_rid() const;
void set_enter_cost(real_t p_enter_cost);
diff --git a/scene/3d/node_3d.cpp b/scene/3d/node_3d.cpp
index 6e36815f2b..4c00250162 100644
--- a/scene/3d/node_3d.cpp
+++ b/scene/3d/node_3d.cpp
@@ -85,12 +85,20 @@ void Node3D::_notify_dirty() {
}
void Node3D::_update_local_transform() const {
- if (this->get_rotation_edit_mode() != ROTATION_EDIT_MODE_BASIS) {
- data.local_transform = data.local_transform.orthogonalized();
- }
- data.local_transform.basis.set_euler_scale(data.rotation, data.scale);
+ // This function is called when the local transform (data.local_transform) is dirty and the right value is contained in the Euler rotation and scale.
+
+ data.local_transform.basis.set_euler_scale(data.euler_rotation, data.scale, data.euler_rotation_order);
- data.dirty &= ~DIRTY_LOCAL;
+ data.dirty &= ~DIRTY_LOCAL_TRANSFORM;
+}
+
+void Node3D::_update_rotation_and_scale() const {
+ // This function is called when the Euler rotation (data.euler_rotation) is dirty and the right value is contained in the local transform
+
+ data.scale = data.local_transform.basis.get_scale();
+ data.euler_rotation = data.local_transform.basis.get_euler_normalized(data.euler_rotation_order);
+
+ data.dirty &= ~DIRTY_EULER_ROTATION_AND_SCALE;
}
void Node3D::_propagate_transform_changed(Node3D *p_origin) {
@@ -113,7 +121,7 @@ void Node3D::_propagate_transform_changed(Node3D *p_origin) {
#endif
get_tree()->xform_change_list.add(&xform_change);
}
- data.dirty |= DIRTY_GLOBAL;
+ data.dirty |= DIRTY_GLOBAL_TRANSFORM;
data.children_lock--;
}
@@ -137,12 +145,12 @@ void Node3D::_notification(int p_what) {
if (data.top_level && !Engine::get_singleton()->is_editor_hint()) {
if (data.parent) {
data.local_transform = data.parent->get_global_transform() * get_transform();
- data.dirty = DIRTY_VECTORS; //global is always dirty upon entering a scene
+ data.dirty = DIRTY_EULER_ROTATION_AND_SCALE; // As local transform was updated, rot/scale should be dirty.
}
data.top_level_active = true;
}
- data.dirty |= DIRTY_GLOBAL; //global is always dirty upon entering a scene
+ data.dirty |= DIRTY_GLOBAL_TRANSFORM; // Global is always dirty upon entering a scene.
_notify_dirty();
notification(NOTIFICATION_ENTER_WORLD);
@@ -212,12 +220,27 @@ void Node3D::set_basis(const Basis &p_basis) {
set_transform(Transform3D(p_basis, data.local_transform.origin));
}
void Node3D::set_quaternion(const Quaternion &p_quaternion) {
- set_transform(Transform3D(Basis(p_quaternion), data.local_transform.origin));
+ if (data.dirty & DIRTY_EULER_ROTATION_AND_SCALE) {
+ // We need the scale part, so if these are dirty, update it
+ data.scale = data.local_transform.basis.get_scale();
+ data.dirty &= ~DIRTY_EULER_ROTATION_AND_SCALE;
+ }
+ data.local_transform.basis = Basis(p_quaternion, data.scale);
+ // Rotscale should not be marked dirty because that would cause precision loss issues with the scale. Instead reconstruct rotation now.
+ data.euler_rotation = data.local_transform.basis.get_euler_normalized(data.euler_rotation_order);
+
+ data.dirty = DIRTY_NONE;
+
+ _propagate_transform_changed(this);
+ if (data.notify_local_transform) {
+ notification(NOTIFICATION_LOCAL_TRANSFORM_CHANGED);
+ }
}
void Node3D::set_transform(const Transform3D &p_transform) {
data.local_transform = p_transform;
- data.dirty |= DIRTY_VECTORS;
+ data.dirty = DIRTY_EULER_ROTATION_AND_SCALE; // Make rot/scale dirty.
+
_propagate_transform_changed(this);
if (data.notify_local_transform) {
notification(NOTIFICATION_LOCAL_TRANSFORM_CHANGED);
@@ -227,8 +250,13 @@ void Node3D::set_transform(const Transform3D &p_transform) {
Basis Node3D::get_basis() const {
return get_transform().basis;
}
+
Quaternion Node3D::get_quaternion() const {
- return Quaternion(get_transform().basis);
+ if (data.dirty & DIRTY_LOCAL_TRANSFORM) {
+ _update_local_transform();
+ }
+
+ return data.local_transform.basis.get_rotation_quaternion();
}
void Node3D::set_global_transform(const Transform3D &p_transform) {
@@ -240,7 +268,7 @@ void Node3D::set_global_transform(const Transform3D &p_transform) {
}
Transform3D Node3D::get_transform() const {
- if (data.dirty & DIRTY_LOCAL) {
+ if (data.dirty & DIRTY_LOCAL_TRANSFORM) {
_update_local_transform();
}
@@ -249,8 +277,8 @@ Transform3D Node3D::get_transform() const {
Transform3D Node3D::get_global_transform() const {
ERR_FAIL_COND_V(!is_inside_tree(), Transform3D());
- if (data.dirty & DIRTY_GLOBAL) {
- if (data.dirty & DIRTY_LOCAL) {
+ if (data.dirty & DIRTY_GLOBAL_TRANSFORM) {
+ if (data.dirty & DIRTY_LOCAL_TRANSFORM) {
_update_local_transform();
}
@@ -264,7 +292,7 @@ Transform3D Node3D::get_global_transform() const {
data.global_transform.basis.orthonormalize();
}
- data.dirty &= ~DIRTY_GLOBAL;
+ data.dirty &= ~DIRTY_GLOBAL_TRANSFORM;
}
return data.global_transform;
@@ -314,13 +342,27 @@ void Node3D::set_rotation_edit_mode(RotationEditMode p_mode) {
if (data.rotation_edit_mode == p_mode) {
return;
}
+
+ bool transform_changed = false;
+ if (data.rotation_edit_mode == ROTATION_EDIT_MODE_BASIS && !(data.dirty & DIRTY_LOCAL_TRANSFORM)) {
+ data.local_transform.orthogonalize();
+ transform_changed = true;
+ }
+
data.rotation_edit_mode = p_mode;
- // Shearing is not allowed except in ROTATION_EDIT_MODE_BASIS.
- data.dirty |= DIRTY_LOCAL;
- _propagate_transform_changed(this);
- if (data.notify_local_transform) {
- notification(NOTIFICATION_LOCAL_TRANSFORM_CHANGED);
+ if (p_mode == ROTATION_EDIT_MODE_EULER && (data.dirty & DIRTY_EULER_ROTATION_AND_SCALE)) {
+ // If going to Euler mode, ensure that vectors are _not_ dirty, else the retrieved value may be wrong.
+ // Otherwise keep what is there, so switching back and forth between modes does not break the vectors.
+
+ _update_rotation_and_scale();
+ }
+
+ if (transform_changed) {
+ _propagate_transform_changed(this);
+ if (data.notify_local_transform) {
+ notification(NOTIFICATION_LOCAL_TRANSFORM_CHANGED);
+ }
}
notify_property_list_changed();
@@ -333,38 +375,47 @@ Node3D::RotationEditMode Node3D::get_rotation_edit_mode() const {
void Node3D::set_rotation_order(RotationOrder p_order) {
Basis::EulerOrder order = Basis::EulerOrder(p_order);
- if (data.rotation_order == order) {
+ if (data.euler_rotation_order == order) {
return;
}
ERR_FAIL_INDEX(int32_t(order), 6);
+ bool transform_changed = false;
- if (data.dirty & DIRTY_VECTORS) {
- data.rotation = data.local_transform.basis.get_euler_normalized(order);
- data.scale = data.local_transform.basis.get_scale();
- data.dirty &= ~DIRTY_VECTORS;
+ if (data.dirty & DIRTY_EULER_ROTATION_AND_SCALE) {
+ _update_rotation_and_scale();
+ } else if (data.dirty & DIRTY_LOCAL_TRANSFORM) {
+ data.euler_rotation = Basis::from_euler(data.euler_rotation, data.euler_rotation_order).get_euler_normalized(order);
+ transform_changed = true;
} else {
- data.rotation = Basis::from_euler(data.rotation, data.rotation_order).get_euler_normalized(order);
+ data.dirty |= DIRTY_LOCAL_TRANSFORM;
+ transform_changed = true;
}
- data.rotation_order = order;
- //changing rotation order should not affect transform
+ data.euler_rotation_order = order;
- notify_property_list_changed(); //will change rotation
+ if (transform_changed) {
+ _propagate_transform_changed(this);
+ if (data.notify_local_transform) {
+ notification(NOTIFICATION_LOCAL_TRANSFORM_CHANGED);
+ }
+ }
+ notify_property_list_changed(); // Will change the rotation property.
}
Node3D::RotationOrder Node3D::get_rotation_order() const {
- return RotationOrder(data.rotation_order);
+ return RotationOrder(data.euler_rotation_order);
}
void Node3D::set_rotation(const Vector3 &p_euler_rad) {
- if (data.dirty & DIRTY_VECTORS) {
+ if (data.dirty & DIRTY_EULER_ROTATION_AND_SCALE) {
+ // Update scale only if rotation and scale are dirty, as rotation will be overridden.
data.scale = data.local_transform.basis.get_scale();
- data.dirty &= ~DIRTY_VECTORS;
+ data.dirty &= ~DIRTY_EULER_ROTATION_AND_SCALE;
}
- data.rotation = p_euler_rad;
- data.dirty |= DIRTY_LOCAL;
+ data.euler_rotation = p_euler_rad;
+ data.dirty = DIRTY_LOCAL_TRANSFORM;
_propagate_transform_changed(this);
if (data.notify_local_transform) {
notification(NOTIFICATION_LOCAL_TRANSFORM_CHANGED);
@@ -372,13 +423,14 @@ void Node3D::set_rotation(const Vector3 &p_euler_rad) {
}
void Node3D::set_scale(const Vector3 &p_scale) {
- if (data.dirty & DIRTY_VECTORS) {
- data.rotation = data.local_transform.basis.get_euler_normalized(data.rotation_order);
- data.dirty &= ~DIRTY_VECTORS;
+ if (data.dirty & DIRTY_EULER_ROTATION_AND_SCALE) {
+ // Update rotation only if rotation and scale are dirty, as scale will be overridden.
+ data.euler_rotation = data.local_transform.basis.get_euler_normalized(data.euler_rotation_order);
+ data.dirty &= ~DIRTY_EULER_ROTATION_AND_SCALE;
}
data.scale = p_scale;
- data.dirty |= DIRTY_LOCAL;
+ data.dirty = DIRTY_LOCAL_TRANSFORM;
_propagate_transform_changed(this);
if (data.notify_local_transform) {
notification(NOTIFICATION_LOCAL_TRANSFORM_CHANGED);
@@ -390,22 +442,16 @@ Vector3 Node3D::get_position() const {
}
Vector3 Node3D::get_rotation() const {
- if (data.dirty & DIRTY_VECTORS) {
- data.scale = data.local_transform.basis.get_scale();
- data.rotation = data.local_transform.basis.get_euler_normalized(data.rotation_order);
-
- data.dirty &= ~DIRTY_VECTORS;
+ if (data.dirty & DIRTY_EULER_ROTATION_AND_SCALE) {
+ _update_rotation_and_scale();
}
- return data.rotation;
+ return data.euler_rotation;
}
Vector3 Node3D::get_scale() const {
- if (data.dirty & DIRTY_VECTORS) {
- data.scale = data.local_transform.basis.get_scale();
- data.rotation = data.local_transform.basis.get_euler_normalized(data.rotation_order);
-
- data.dirty &= ~DIRTY_VECTORS;
+ if (data.dirty & DIRTY_EULER_ROTATION_AND_SCALE) {
+ _update_rotation_and_scale();
}
return data.scale;
@@ -865,14 +911,14 @@ Variant Node3D::property_get_revert(const String &p_name) {
} else if (p_name == "quaternion") {
Variant variant = PropertyUtils::get_property_default_value(this, "transform", &valid);
if (valid && variant.get_type() == Variant::Type::TRANSFORM3D) {
- r_ret = Quaternion(Transform3D(variant).get_basis());
+ r_ret = Quaternion(Transform3D(variant).get_basis().get_rotation_quaternion());
} else {
return Quaternion();
}
} else if (p_name == "rotation") {
Variant variant = PropertyUtils::get_property_default_value(this, "transform", &valid);
if (valid && variant.get_type() == Variant::Type::TRANSFORM3D) {
- r_ret = Transform3D(variant).get_basis().get_euler_normalized(data.rotation_order);
+ r_ret = Transform3D(variant).get_basis().get_euler_normalized(data.euler_rotation_order);
} else {
return Vector3();
}
@@ -980,7 +1026,7 @@ void Node3D::_bind_methods() {
ADD_GROUP("Transform", "");
ADD_PROPERTY(PropertyInfo(Variant::TRANSFORM3D, "transform", PROPERTY_HINT_NONE, "suffix:m", PROPERTY_USAGE_NO_EDITOR), "set_transform", "get_transform");
ADD_PROPERTY(PropertyInfo(Variant::TRANSFORM3D, "global_transform", PROPERTY_HINT_NONE, "suffix:m", PROPERTY_USAGE_NONE), "set_global_transform", "get_global_transform");
- ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "position", PROPERTY_HINT_RANGE, "-99999,99999,0.001,or_greater,or_lesser,noslider,suffix:m", PROPERTY_USAGE_EDITOR), "set_position", "get_position");
+ ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "position", PROPERTY_HINT_RANGE, "-99999,99999,0.001,or_greater,or_lesser,no_slider,suffix:m", PROPERTY_USAGE_EDITOR), "set_position", "get_position");
ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "rotation", PROPERTY_HINT_RANGE, "-360,360,0.1,or_lesser,or_greater,radians", PROPERTY_USAGE_EDITOR), "set_rotation", "get_rotation");
ADD_PROPERTY(PropertyInfo(Variant::QUATERNION, "quaternion", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_EDITOR), "set_quaternion", "get_quaternion");
ADD_PROPERTY(PropertyInfo(Variant::BASIS, "basis", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_EDITOR), "set_basis", "get_basis");
diff --git a/scene/3d/node_3d.h b/scene/3d/node_3d.h
index 6d857a83ea..cfd88585e4 100644
--- a/scene/3d/node_3d.h
+++ b/scene/3d/node_3d.h
@@ -52,6 +52,9 @@ class Node3D : public Node {
GDCLASS(Node3D, Node);
public:
+ // Edit mode for the rotation.
+ // THIS MODE ONLY AFFECTS HOW DATA IS EDITED AND SAVED
+ // IT DOES _NOT_ AFFECT THE TRANSFORM LOGIC (see comment in TransformDirty).
enum RotationEditMode {
ROTATION_EDIT_MODE_EULER,
ROTATION_EDIT_MODE_QUATERNION,
@@ -68,11 +71,27 @@ public:
};
private:
+ // For the sake of ease of use, Node3D can operate with Transforms (Basis+Origin), Quaterinon/Scale and Euler Rotation/Scale.
+ // Transform and Quaterinon are stored in data.local_transform Basis (so quaternion is not really stored, but converted back/forth from 3x3 matrix on demand).
+ // Euler needs to be kept separate because converting to Basis and back may result in a different vector (which is troublesome for users
+ // editing in the inspector, not only because of the numerical precision loss but because they expect these rotations to be consistent, or support
+ // "redundant" rotations for animation interpolation, like going from 0 to 720 degrees).
+ //
+ // As such, the system works in a way where if the local transform is set (via transform/basis/quaternion), the EULER rotation and scale becomes dirty.
+ // It will remain dirty until reading back is attempted (for performance reasons). Likewise, if the Euler rotation scale are set, the local transform
+ // will become dirty (and again, will not become valid again until read).
+ //
+ // All this is transparent from outside the Node3D API, which allows everything to works by calling these functions in exchange.
+ //
+ // Additionally, setting either transform, quaternion, Euler rotation or scale makes the global transform dirty, which will be updated when read again.
+ //
+ // NOTE: Again, RotationEditMode is _independent_ of this mechanism, it is only meant to expose the right set of properties for editing (editor) and saving
+ // (to scene, in order to keep the same values and avoid data loss on conversions). It has zero influence in the logic described above.
enum TransformDirty {
DIRTY_NONE = 0,
- DIRTY_VECTORS = 1,
- DIRTY_LOCAL = 2,
- DIRTY_GLOBAL = 4
+ DIRTY_EULER_ROTATION_AND_SCALE = 1,
+ DIRTY_LOCAL_TRANSFORM = 2,
+ DIRTY_GLOBAL_TRANSFORM = 4
};
mutable SelfList<Node> xform_change;
@@ -80,8 +99,8 @@ private:
struct Data {
mutable Transform3D global_transform;
mutable Transform3D local_transform;
- mutable Basis::EulerOrder rotation_order = Basis::EULER_ORDER_YXZ;
- mutable Vector3 rotation;
+ mutable Basis::EulerOrder euler_rotation_order = Basis::EULER_ORDER_YXZ;
+ mutable Vector3 euler_rotation;
mutable Vector3 scale = Vector3(1, 1, 1);
mutable RotationEditMode rotation_edit_mode = ROTATION_EDIT_MODE_EULER;
@@ -131,6 +150,7 @@ protected:
_FORCE_INLINE_ void set_ignore_transform_notification(bool p_ignore) { data.ignore_notification = p_ignore; }
_FORCE_INLINE_ void _update_local_transform() const;
+ _FORCE_INLINE_ void _update_rotation_and_scale() const;
void _notification(int p_what);
static void _bind_methods();
diff --git a/scene/3d/path_3d.cpp b/scene/3d/path_3d.cpp
index 2596169c55..f53e783fbd 100644
--- a/scene/3d/path_3d.cpp
+++ b/scene/3d/path_3d.cpp
@@ -247,10 +247,14 @@ void PathFollow3D::_update_transform(bool p_update_xyz_rot) {
// for a discussion about why not Frenet frame.
t.origin = pos;
-
- if (p_update_xyz_rot && delta_offset != 0) { // Only update rotation if some parameter has changed - i.e. not on addition to scene tree.
- Vector3 t_prev = (pos - c->interpolate_baked(offset - delta_offset, cubic)).normalized();
- Vector3 t_cur = (c->interpolate_baked(offset + delta_offset, cubic) - pos).normalized();
+ if (p_update_xyz_rot && prev_offset != offset) { // Only update rotation if some parameter has changed - i.e. not on addition to scene tree.
+ real_t sample_distance = bi * 0.01;
+ Vector3 t_prev_pos_a = c->interpolate_baked(prev_offset - sample_distance, cubic);
+ Vector3 t_prev_pos_b = c->interpolate_baked(prev_offset + sample_distance, cubic);
+ Vector3 t_cur_pos_a = c->interpolate_baked(offset - sample_distance, cubic);
+ Vector3 t_cur_pos_b = c->interpolate_baked(offset + sample_distance, cubic);
+ Vector3 t_prev = (t_prev_pos_a - t_prev_pos_b).normalized();
+ Vector3 t_cur = (t_cur_pos_a - t_cur_pos_b).normalized();
Vector3 axis = t_prev.cross(t_cur);
real_t dot = t_prev.dot(t_cur);
@@ -393,7 +397,7 @@ void PathFollow3D::_bind_methods() {
}
void PathFollow3D::set_offset(real_t p_offset) {
- delta_offset = p_offset - offset;
+ prev_offset = offset;
offset = p_offset;
if (path) {
diff --git a/scene/3d/path_3d.h b/scene/3d/path_3d.h
index 1d249a328b..7c7284534e 100644
--- a/scene/3d/path_3d.h
+++ b/scene/3d/path_3d.h
@@ -74,7 +74,7 @@ public:
private:
Path3D *path = nullptr;
- real_t delta_offset = 0.0; // Change in offset since last _update_transform.
+ real_t prev_offset = 0.0; // Offset during the last _update_transform.
real_t offset = 0.0;
real_t h_offset = 0.0;
real_t v_offset = 0.0;
diff --git a/scene/3d/skeleton_3d.cpp b/scene/3d/skeleton_3d.cpp
index ba2029788e..fbd5f31dd5 100644
--- a/scene/3d/skeleton_3d.cpp
+++ b/scene/3d/skeleton_3d.cpp
@@ -326,13 +326,11 @@ void Skeleton3D::_notification(int p_what) {
case NOTIFICATION_INTERNAL_PHYSICS_PROCESS: {
// This is active only if the skeleton animates the physical bones
// and the state of the bone is not active.
- if (Engine::get_singleton()->is_editor_hint()) {
- if (animate_physical_bones) {
- for (int i = 0; i < bones.size(); i += 1) {
- if (bones[i].physical_bone) {
- if (bones[i].physical_bone->is_simulating_physics() == false) {
- bones[i].physical_bone->reset_to_rest_position();
- }
+ if (animate_physical_bones) {
+ for (int i = 0; i < bones.size(); i += 1) {
+ if (bones[i].physical_bone) {
+ if (bones[i].physical_bone->is_simulating_physics() == false) {
+ bones[i].physical_bone->reset_to_rest_position();
}
}
}
diff --git a/scene/3d/visual_instance_3d.cpp b/scene/3d/visual_instance_3d.cpp
index 6df50bc491..69917f6992 100644
--- a/scene/3d/visual_instance_3d.cpp
+++ b/scene/3d/visual_instance_3d.cpp
@@ -471,7 +471,6 @@ void GeometryInstance3D::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "visibility_range_end", PROPERTY_HINT_RANGE, "0.0,4096.0,0.01,suffix:m"), "set_visibility_range_end", "get_visibility_range_end");
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "visibility_range_end_margin", PROPERTY_HINT_RANGE, "0.0,4096.0,0.01,suffix:m"), "set_visibility_range_end_margin", "get_visibility_range_end_margin");
ADD_PROPERTY(PropertyInfo(Variant::INT, "visibility_range_fade_mode", PROPERTY_HINT_ENUM, "Disabled,Self,Dependencies"), "set_visibility_range_fade_mode", "get_visibility_range_fade_mode");
- //ADD_SIGNAL( MethodInfo("visibility_changed"));
BIND_ENUM_CONSTANT(SHADOW_CASTING_SETTING_OFF);
BIND_ENUM_CONSTANT(SHADOW_CASTING_SETTING_ON);
@@ -494,7 +493,6 @@ void GeometryInstance3D::_bind_methods() {
}
GeometryInstance3D::GeometryInstance3D() {
- //RS::get_singleton()->instance_geometry_set_baked_light_texture_index(get_instance(),0);
}
GeometryInstance3D::~GeometryInstance3D() {
diff --git a/scene/3d/visual_instance_3d.h b/scene/3d/visual_instance_3d.h
index e5f98bd65e..9e0d9b9a2a 100644
--- a/scene/3d/visual_instance_3d.h
+++ b/scene/3d/visual_instance_3d.h
@@ -126,7 +126,7 @@ private:
float extra_cull_margin = 0.0;
LightmapScale lightmap_scale = LIGHTMAP_SCALE_1X;
- GIMode gi_mode = GI_MODE_DISABLED;
+ GIMode gi_mode = GI_MODE_STATIC;
bool ignore_occlusion_culling = false;
const StringName *_instance_uniform_get_remap(const StringName p_name) const;
diff --git a/scene/animation/animation_blend_tree.cpp b/scene/animation/animation_blend_tree.cpp
index 1d537837bd..4f6975deb1 100644
--- a/scene/animation/animation_blend_tree.cpp
+++ b/scene/animation/animation_blend_tree.cpp
@@ -104,11 +104,11 @@ double AnimationNodeAnimation::process(double p_time, bool p_seek, bool p_seek_r
if (anim->get_loop_mode() == Animation::LOOP_PINGPONG) {
if (!Math::is_zero_approx(anim_size)) {
if ((int)Math::floor(abs(time - prev_time) / anim_size) % 2 == 0) {
- if (prev_time > 0 && time <= 0) {
+ if (prev_time >= 0 && time < 0) {
backward = !backward;
pingponged = -1;
}
- if (prev_time < anim_size && time >= anim_size) {
+ if (prev_time <= anim_size && time > anim_size) {
backward = !backward;
pingponged = 1;
}
diff --git a/scene/animation/animation_node_state_machine.cpp b/scene/animation/animation_node_state_machine.cpp
index 2c7d021427..2ee7f4fa43 100644
--- a/scene/animation/animation_node_state_machine.cpp
+++ b/scene/animation/animation_node_state_machine.cpp
@@ -68,6 +68,34 @@ StringName AnimationNodeStateMachineTransition::get_advance_condition_name() con
return advance_condition_name;
}
+void AnimationNodeStateMachineTransition::set_advance_expression(const String &p_expression) {
+ advance_expression = p_expression;
+
+ String advance_expression_stripped = advance_expression.strip_edges();
+ if (advance_expression_stripped == String()) {
+ expression.unref();
+ return;
+ }
+
+ if (expression.is_null()) {
+ expression.instantiate();
+ }
+
+ expression->parse(advance_expression_stripped);
+}
+
+String AnimationNodeStateMachineTransition::get_advance_expression() const {
+ return advance_expression;
+}
+
+void AnimationNodeStateMachineTransition::set_advance_expression_base_node(const NodePath &p_expression_base_node) {
+ advance_expression_base_node = p_expression_base_node;
+}
+
+NodePath AnimationNodeStateMachineTransition::get_advance_expression_base_node() const {
+ return advance_expression_base_node;
+}
+
void AnimationNodeStateMachineTransition::set_xfade_time(float p_xfade) {
ERR_FAIL_COND(p_xfade < 0);
xfade = p_xfade;
@@ -115,11 +143,22 @@ void AnimationNodeStateMachineTransition::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_priority", "priority"), &AnimationNodeStateMachineTransition::set_priority);
ClassDB::bind_method(D_METHOD("get_priority"), &AnimationNodeStateMachineTransition::get_priority);
+ ClassDB::bind_method(D_METHOD("set_advance_expression", "text"), &AnimationNodeStateMachineTransition::set_advance_expression);
+ ClassDB::bind_method(D_METHOD("get_advance_expression"), &AnimationNodeStateMachineTransition::get_advance_expression);
+
+ ClassDB::bind_method(D_METHOD("set_advance_expression_base_node", "path"), &AnimationNodeStateMachineTransition::set_advance_expression_base_node);
+ ClassDB::bind_method(D_METHOD("get_advance_expression_base_node"), &AnimationNodeStateMachineTransition::get_advance_expression_base_node);
+
+ ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "xfade_time", PROPERTY_HINT_RANGE, "0,240,0.01,suffix:s"), "set_xfade_time", "get_xfade_time");
+ ADD_PROPERTY(PropertyInfo(Variant::INT, "priority", PROPERTY_HINT_RANGE, "0,32,1"), "set_priority", "get_priority");
+ ADD_GROUP("Switch", "");
ADD_PROPERTY(PropertyInfo(Variant::INT, "switch_mode", PROPERTY_HINT_ENUM, "Immediate,Sync,At End"), "set_switch_mode", "get_switch_mode");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "auto_advance"), "set_auto_advance", "has_auto_advance");
+ ADD_GROUP("Advance", "advance_");
ADD_PROPERTY(PropertyInfo(Variant::STRING_NAME, "advance_condition"), "set_advance_condition", "get_advance_condition");
- ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "xfade_time", PROPERTY_HINT_RANGE, "0,240,0.01,suffix:s"), "set_xfade_time", "get_xfade_time");
- ADD_PROPERTY(PropertyInfo(Variant::INT, "priority", PROPERTY_HINT_RANGE, "0,32,1"), "set_priority", "get_priority");
+ ADD_PROPERTY(PropertyInfo(Variant::STRING, "advance_expression", PROPERTY_HINT_EXPRESSION, ""), "set_advance_expression", "get_advance_expression");
+ ADD_PROPERTY(PropertyInfo(Variant::NODE_PATH, "advance_expression_base_node"), "set_advance_expression_base_node", "get_advance_expression_base_node");
+ ADD_GROUP("Disabling", "");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "disabled"), "set_disabled", "is_disabled");
BIND_ENUM_CONSTANT(SWITCH_MODE_IMMEDIATE);
@@ -435,7 +474,7 @@ double AnimationNodeStateMachinePlayback::process(AnimationNodeStateMachine *p_s
// handles start_node: if previous state machine is pointing to a node inside the current state machine, starts the current machine from start_node to prev_local_to
if (p_state_machine->start_node == current && p_state_machine->transitions[i].local_from == current) {
- if (p_state_machine->prev_state_machine.is_valid()) {
+ if (p_state_machine->prev_state_machine != nullptr) {
Ref<AnimationNodeStateMachinePlayback> prev_playback = p_state_machine->prev_state_machine->get_parameter("playback");
if (prev_playback.is_valid()) {
@@ -471,9 +510,9 @@ double AnimationNodeStateMachinePlayback::process(AnimationNodeStateMachine *p_s
}
if (next == p_state_machine->end_node) {
- Ref<AnimationNodeStateMachine> prev_state_machine = p_state_machine->prev_state_machine;
+ AnimationNodeStateMachine *prev_state_machine = p_state_machine->prev_state_machine;
- if (prev_state_machine.is_valid()) {
+ if (prev_state_machine != nullptr) {
Ref<AnimationNodeStateMachinePlayback> prev_playback = prev_state_machine->get_parameter("playback");
if (prev_playback.is_valid()) {
@@ -577,6 +616,29 @@ bool AnimationNodeStateMachinePlayback::_check_advance_condition(const Ref<Anima
return true;
}
+ if (transition->expression.is_valid()) {
+ AnimationTree *tree_base = state_machine->get_animation_tree();
+ ERR_FAIL_COND_V(tree_base == nullptr, false);
+
+ NodePath advance_expression_base_node_path;
+ if (!transition->advance_expression_base_node.is_empty()) {
+ advance_expression_base_node_path = transition->advance_expression_base_node;
+ } else {
+ advance_expression_base_node_path = tree_base->get_advance_expression_base_node();
+ }
+
+ Node *expression_base = tree_base->get_node_or_null(advance_expression_base_node_path);
+ if (expression_base) {
+ Ref<Expression> exp = transition->expression;
+ bool ret = exp->execute(Array(), tree_base, false, Engine::get_singleton()->is_editor_hint()); // Avoids allowing the user to crash the system with an expression by only allowing const calls.
+ if (!exp->has_execute_failed()) {
+ if (ret) {
+ return true;
+ }
+ }
+ }
+ }
+
return false;
}
@@ -655,7 +717,7 @@ void AnimationNodeStateMachine::add_node(const StringName &p_name, Ref<Animation
if (anodesm.is_valid()) {
anodesm->state_machine_name = p_name;
- anodesm->prev_state_machine = (Ref<AnimationNodeStateMachine>)this;
+ anodesm->prev_state_machine = this;
}
emit_changed();
@@ -821,7 +883,7 @@ void AnimationNodeStateMachine::_rename_transition(const StringName &p_name, con
void AnimationNodeStateMachine::get_node_list(List<StringName> *r_nodes) const {
List<StringName> nodes;
for (const KeyValue<StringName, State> &E : states) {
- if (E.key == end_node && !prev_state_machine.is_valid()) {
+ if (E.key == end_node && prev_state_machine == nullptr) {
continue;
}
@@ -834,7 +896,7 @@ void AnimationNodeStateMachine::get_node_list(List<StringName> *r_nodes) const {
}
}
-Ref<AnimationNodeStateMachine> AnimationNodeStateMachine::get_prev_state_machine() const {
+AnimationNodeStateMachine *AnimationNodeStateMachine::get_prev_state_machine() const {
return prev_state_machine;
}
@@ -862,10 +924,10 @@ int AnimationNodeStateMachine::find_transition(const StringName &p_from, const S
return -1;
}
-bool AnimationNodeStateMachine::_can_connect(const StringName &p_name, Vector<Ref<AnimationNodeStateMachine>> p_parents) const {
+bool AnimationNodeStateMachine::_can_connect(const StringName &p_name, Vector<AnimationNodeStateMachine *> p_parents) {
if (p_parents.is_empty()) {
- Ref<AnimationNodeStateMachine> prev = (Ref<AnimationNodeStateMachine>)this;
- while (prev.is_valid()) {
+ AnimationNodeStateMachine *prev = this;
+ while (prev != nullptr) {
p_parents.push_back(prev);
prev = prev->prev_state_machine;
}
@@ -874,7 +936,7 @@ bool AnimationNodeStateMachine::_can_connect(const StringName &p_name, Vector<Re
if (states.has(p_name)) {
Ref<AnimationNodeStateMachine> anodesm = states[p_name].node;
- if (anodesm.is_valid() && p_parents.find(anodesm) != -1) {
+ if (anodesm.is_valid() && p_parents.find(anodesm.ptr()) != -1) {
return false;
}
@@ -889,7 +951,7 @@ bool AnimationNodeStateMachine::_can_connect(const StringName &p_name, Vector<Re
}
if (path[0] == "..") {
- if (prev_state_machine.is_valid()) {
+ if (prev_state_machine != nullptr) {
return prev_state_machine->_can_connect(name.replace_first("../", ""), p_parents);
}
} else if (states.has(path[0])) {
diff --git a/scene/animation/animation_node_state_machine.h b/scene/animation/animation_node_state_machine.h
index 9eeac6a183..d4e58ca3d3 100644
--- a/scene/animation/animation_node_state_machine.h
+++ b/scene/animation/animation_node_state_machine.h
@@ -31,6 +31,7 @@
#ifndef ANIMATION_NODE_STATE_MACHINE_H
#define ANIMATION_NODE_STATE_MACHINE_H
+#include "core/math/expression.h"
#include "scene/animation/animation_tree.h"
class AnimationNodeStateMachineTransition : public Resource {
@@ -51,6 +52,11 @@ private:
float xfade = 0.0;
bool disabled = false;
int priority = 1;
+ String advance_expression;
+ NodePath advance_expression_base_node;
+
+ friend class AnimationNodeStateMachinePlayback;
+ Ref<Expression> expression;
protected:
static void _bind_methods();
@@ -67,6 +73,12 @@ public:
StringName get_advance_condition_name() const;
+ void set_advance_expression(const String &p_expression);
+ String get_advance_expression() const;
+
+ void set_advance_expression_base_node(const NodePath &p_expression_base_node);
+ NodePath get_advance_expression_base_node() const;
+
void set_xfade_time(float p_xfade);
float get_xfade_time() const;
@@ -166,7 +178,7 @@ private:
StringName playback = "playback";
StringName state_machine_name;
- Ref<AnimationNodeStateMachine> prev_state_machine;
+ AnimationNodeStateMachine *prev_state_machine = nullptr;
bool updating_transitions = false;
Vector2 graph_offset;
@@ -174,7 +186,7 @@ private:
void _tree_changed();
void _remove_transition(const Ref<AnimationNodeStateMachineTransition> p_transition);
void _rename_transition(const StringName &p_name, const StringName &p_new_name);
- bool _can_connect(const StringName &p_name, const Vector<Ref<AnimationNodeStateMachine>> p_parents = Vector<Ref<AnimationNodeStateMachine>>()) const;
+ bool _can_connect(const StringName &p_name, Vector<AnimationNodeStateMachine *> p_parents = Vector<AnimationNodeStateMachine *>());
StringName _get_shortest_path(const StringName &p_path) const;
protected:
@@ -221,7 +233,7 @@ public:
bool can_edit_node(const StringName &p_name) const;
- Ref<AnimationNodeStateMachine> get_prev_state_machine() const;
+ AnimationNodeStateMachine *get_prev_state_machine() const;
void set_graph_offset(const Vector2 &p_offset);
Vector2 get_graph_offset() const;
diff --git a/scene/animation/animation_player.cpp b/scene/animation/animation_player.cpp
index 8edfaa5853..2e87dbf9da 100644
--- a/scene/animation/animation_player.cpp
+++ b/scene/animation/animation_player.cpp
@@ -284,6 +284,11 @@ void AnimationPlayer::_ensure_node_caches(AnimationData *p_anim, Node *p_root_ov
for (int i = 0; i < a->get_track_count(); i++) {
p_anim->node_cache.write[i] = nullptr;
+
+ if (!a->track_is_enabled(i)) {
+ continue;
+ }
+
Ref<Resource> resource;
Vector<StringName> leftover_path;
Node *child = parent->get_node_and_resource(a->track_get_path(i), resource, leftover_path);
@@ -1909,7 +1914,7 @@ NodePath AnimationPlayer::get_root() const {
void AnimationPlayer::get_argument_options(const StringName &p_function, int p_idx, List<String> *r_options) const {
String pf = p_function;
- if (p_idx == 0 && (p_function == "play" || p_function == "play_backwards" || p_function == "remove_animation" || p_function == "has_animation" || p_function == "queue")) {
+ if (p_idx == 0 && (p_function == "play" || p_function == "play_backwards" || p_function == "has_animation" || p_function == "queue")) {
List<StringName> al;
get_animation_list(&al);
for (const StringName &name : al) {
@@ -1991,8 +1996,8 @@ Ref<AnimatedValuesBackup> AnimationPlayer::apply_reset(bool p_user_initiated) {
Ref<AnimationLibrary> al;
al.instantiate();
al->add_animation(SceneStringNames::get_singleton()->RESET, reset_anim);
- aux_player->add_animation_library("default", al);
- aux_player->set_assigned_animation("default/" + SceneStringNames::get_singleton()->RESET);
+ aux_player->add_animation_library("", al);
+ aux_player->set_assigned_animation(SceneStringNames::get_singleton()->RESET);
// Forcing the use of the original root because the scene where original player belongs may be not the active one
Node *root = get_node(get_root());
Ref<AnimatedValuesBackup> old_values = aux_player->backup_animated_values(root);
diff --git a/scene/animation/animation_player.h b/scene/animation/animation_player.h
index 7e4bda14e5..d3eb37a345 100644
--- a/scene/animation/animation_player.h
+++ b/scene/animation/animation_player.h
@@ -155,8 +155,8 @@ private:
static uint32_t hash(const TrackNodeCacheKey &p_key) {
uint32_t h = hash_one_uint64(p_key.id);
- h = hash_djb2_one_32(p_key.bone_idx, h);
- return hash_djb2_one_32(p_key.blend_shape_idx, h);
+ h = hash_murmur3_one_32(p_key.bone_idx, h);
+ return hash_fmix32(hash_murmur3_one_32(p_key.blend_shape_idx, h));
}
inline bool operator==(const TrackNodeCacheKey &p_right) const {
diff --git a/scene/animation/animation_tree.cpp b/scene/animation/animation_tree.cpp
index d34e8db093..8c8822ac3f 100644
--- a/scene/animation/animation_tree.cpp
+++ b/scene/animation/animation_tree.cpp
@@ -136,6 +136,11 @@ double AnimationNode::_pre_process(const StringName &p_base_path, AnimationNode
return t;
}
+AnimationTree *AnimationNode::get_animation_tree() const {
+ ERR_FAIL_COND_V(!state, nullptr);
+ return state->tree;
+}
+
void AnimationNode::make_invalid(const String &p_reason) {
ERR_FAIL_COND(!state);
state->valid = false;
@@ -276,7 +281,7 @@ double AnimationNode::_blend_node(const StringName &p_subpath, const Vector<Stri
String new_path;
AnimationNode *new_parent;
- //this is the slowest part of processing, but as strings process in powers of 2, and the paths always exist, it will not result in that many allocations
+ // This is the slowest part of processing, but as strings process in powers of 2, and the paths always exist, it will not result in that many allocations.
if (p_new_parent) {
new_parent = p_new_parent;
new_path = String(base_path) + String(p_subpath) + "/";
@@ -286,6 +291,9 @@ double AnimationNode::_blend_node(const StringName &p_subpath, const Vector<Stri
new_path = String(parent->base_path) + String(p_subpath) + "/";
}
+ // If tracks for blending don't exist for one of the animations, Rest or RESET animation is blended as init animation instead.
+ // Then, blend weight is 0 means that the init animation blend weight is 1.
+ // Therefore, the blending process must be executed even if the blend weight is 0.
if (!p_seek && p_optimize && !any_valid) {
return p_node->_pre_process(new_path, new_parent, state, 0, p_seek, p_seek_root, p_connections);
}
@@ -919,7 +927,6 @@ void AnimationTree::_process_graph(double p_delta) {
state.valid = true;
state.invalid_reasons = "";
state.animation_states.clear(); //will need to be re-created
- state.valid = true;
state.player = player;
state.last_pass = process_pass;
state.tree = this;
@@ -966,6 +973,10 @@ void AnimationTree::_process_graph(double p_delta) {
#endif // _3D_DISABLED
for (int i = 0; i < a->get_track_count(); i++) {
+ if (!a->track_is_enabled(i)) {
+ continue;
+ }
+
NodePath path = a->track_get_path(i);
ERR_CONTINUE(!track_cache.has(path));
@@ -1324,12 +1335,21 @@ void AnimationTree::_process_graph(double p_delta) {
if (blend < CMP_EPSILON) {
continue; //nothing to blend
}
- List<int> 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);
+ if (seeked) {
+ int idx = a->track_find_key(i, time);
+ if (idx < 0) {
+ continue;
+ }
+ Variant value = a->track_get_key_value(i, idx);
t->object->set_indexed(t->subpath, value);
+ } else {
+ List<int> 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);
+ t->object->set_indexed(t->subpath, value);
+ }
}
}
@@ -1338,20 +1358,27 @@ void AnimationTree::_process_graph(double p_delta) {
if (blend < CMP_EPSILON) {
continue; //nothing to blend
}
- if (!seeked && Math::is_zero_approx(delta)) {
- continue;
- }
TrackCacheMethod *t = static_cast<TrackCacheMethod *>(track);
- List<int> 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);
- Vector<Variant> params = a->method_track_get_params(i, F);
+ if (seeked) {
+ int idx = a->track_find_key(i, time);
+ if (idx < 0) {
+ continue;
+ }
+ StringName method = a->method_track_get_name(i, idx);
+ Vector<Variant> params = a->method_track_get_params(i, idx);
if (can_call) {
- _call_object(t->object, method, params, true);
+ _call_object(t->object, method, params, false);
+ }
+ } else {
+ List<int> 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);
+ Vector<Variant> params = a->method_track_get_params(i, F);
+ if (can_call) {
+ _call_object(t->object, method, params, true);
+ }
}
}
} break;
@@ -1682,6 +1709,14 @@ NodePath AnimationTree::get_animation_player() const {
return animation_player;
}
+void AnimationTree::set_advance_expression_base_node(const NodePath &p_advance_expression_base_node) {
+ advance_expression_base_node = p_advance_expression_base_node;
+}
+
+NodePath AnimationTree::get_advance_expression_base_node() const {
+ return advance_expression_base_node;
+}
+
bool AnimationTree::is_state_invalid() const {
return !state.valid;
}
@@ -1877,6 +1912,9 @@ void AnimationTree::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_animation_player", "root"), &AnimationTree::set_animation_player);
ClassDB::bind_method(D_METHOD("get_animation_player"), &AnimationTree::get_animation_player);
+ ClassDB::bind_method(D_METHOD("set_advance_expression_base_node", "node"), &AnimationTree::set_advance_expression_base_node);
+ ClassDB::bind_method(D_METHOD("get_advance_expression_base_node"), &AnimationTree::get_advance_expression_base_node);
+
ClassDB::bind_method(D_METHOD("set_root_motion_track", "path"), &AnimationTree::set_root_motion_track);
ClassDB::bind_method(D_METHOD("get_root_motion_track"), &AnimationTree::get_root_motion_track);
@@ -1890,6 +1928,8 @@ void AnimationTree::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "tree_root", PROPERTY_HINT_RESOURCE_TYPE, "AnimationRootNode"), "set_tree_root", "get_tree_root");
ADD_PROPERTY(PropertyInfo(Variant::NODE_PATH, "anim_player", PROPERTY_HINT_NODE_PATH_VALID_TYPES, "AnimationPlayer"), "set_animation_player", "get_animation_player");
+ ADD_PROPERTY(PropertyInfo(Variant::NODE_PATH, "advance_expression_base_node", PROPERTY_HINT_NODE_PATH_VALID_TYPES, "Node"), "set_advance_expression_base_node", "get_advance_expression_base_node");
+
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "active"), "set_active", "is_active");
ADD_PROPERTY(PropertyInfo(Variant::INT, "process_callback", PROPERTY_HINT_ENUM, "Physics,Idle,Manual"), "set_process_callback", "get_process_callback");
ADD_GROUP("Root Motion", "root_motion_");
diff --git a/scene/animation/animation_tree.h b/scene/animation/animation_tree.h
index b646efede4..0bfe615c9b 100644
--- a/scene/animation/animation_tree.h
+++ b/scene/animation/animation_tree.h
@@ -107,6 +107,7 @@ protected:
double blend_input(int p_input, double p_time, bool p_seek, bool p_seek_root, real_t p_blend, FilterAction p_filter = FILTER_IGNORE, bool p_optimize = true);
void make_invalid(const String &p_reason);
+ AnimationTree *get_animation_tree() const;
static void _bind_methods();
@@ -270,6 +271,7 @@ private:
HashSet<TrackCache *> playing_caches;
Ref<AnimationNode> root;
+ NodePath advance_expression_base_node = NodePath(String("."));
AnimationProcessCallback process_callback = ANIMATION_PROCESS_IDLE;
bool active = false;
@@ -332,6 +334,9 @@ public:
void set_animation_player(const NodePath &p_player);
NodePath get_animation_player() const;
+ void set_advance_expression_base_node(const NodePath &p_advance_expression_base_node);
+ NodePath get_advance_expression_base_node() const;
+
TypedArray<String> get_configuration_warnings() const override;
bool is_state_invalid() const;
diff --git a/scene/debugger/scene_debugger.cpp b/scene/debugger/scene_debugger.cpp
index a54e728c1b..e9c33b1839 100644
--- a/scene/debugger/scene_debugger.cpp
+++ b/scene/debugger/scene_debugger.cpp
@@ -701,7 +701,7 @@ void LiveEditor::_res_set_func(int p_id, const StringName &p_prop, const Variant
return;
}
- Ref<Resource> r = ResourceCache::get(resp);
+ Ref<Resource> r = ResourceCache::get_ref(resp);
if (!r.is_valid()) {
return;
}
@@ -728,7 +728,7 @@ void LiveEditor::_res_call_func(int p_id, const StringName &p_method, const Vari
return;
}
- Ref<Resource> r = ResourceCache::get(resp);
+ Ref<Resource> r = ResourceCache::get_ref(resp);
if (!r.is_valid()) {
return;
}
diff --git a/scene/gui/button.cpp b/scene/gui/button.cpp
index 0d21d82896..1371c9cd57 100644
--- a/scene/gui/button.cpp
+++ b/scene/gui/button.cpp
@@ -35,7 +35,7 @@
Size2 Button::get_minimum_size() const {
Size2 minsize = text_buf->get_size();
- if (clip_text || overrun_behavior != TextParagraph::OVERRUN_NO_TRIMMING) {
+ if (clip_text || overrun_behavior != TextServer::OVERRUN_NO_TRIMMING) {
minsize.width = 0;
}
@@ -292,9 +292,9 @@ void Button::_notification(int p_what) {
icon_ofs.x = 0.0;
}
int text_clip = size.width - style->get_minimum_size().width - icon_ofs.width;
- text_buf->set_width((clip_text || overrun_behavior != TextParagraph::OVERRUN_NO_TRIMMING) ? text_clip : -1);
+ text_buf->set_width((clip_text || overrun_behavior != TextServer::OVERRUN_NO_TRIMMING) ? text_clip : -1);
- int text_width = MAX(1, (clip_text || overrun_behavior != TextParagraph::OVERRUN_NO_TRIMMING) ? MIN(text_clip, text_buf->get_size().x) : text_buf->get_size().x);
+ int text_width = MAX(1, (clip_text || overrun_behavior != TextServer::OVERRUN_NO_TRIMMING) ? MIN(text_clip, text_buf->get_size().x) : text_buf->get_size().x);
if (_internal_margin[SIDE_LEFT] > 0) {
text_clip -= _internal_margin[SIDE_LEFT] + get_theme_constant(SNAME("h_separation"));
@@ -367,7 +367,7 @@ void Button::_shape() {
text_buf->set_text_overrun_behavior(overrun_behavior);
}
-void Button::set_text_overrun_behavior(TextParagraph::OverrunBehavior p_behavior) {
+void Button::set_text_overrun_behavior(TextServer::OverrunBehavior p_behavior) {
if (overrun_behavior != p_behavior) {
overrun_behavior = p_behavior;
_shape();
@@ -377,7 +377,7 @@ void Button::set_text_overrun_behavior(TextParagraph::OverrunBehavior p_behavior
}
}
-TextParagraph::OverrunBehavior Button::get_text_overrun_behavior() const {
+TextServer::OverrunBehavior Button::get_text_overrun_behavior() const {
return overrun_behavior;
}
diff --git a/scene/gui/button.h b/scene/gui/button.h
index 175785a35c..a1d71195cb 100644
--- a/scene/gui/button.h
+++ b/scene/gui/button.h
@@ -46,7 +46,7 @@ private:
Dictionary opentype_features;
String language;
TextDirection text_direction = TEXT_DIRECTION_AUTO;
- TextParagraph::OverrunBehavior overrun_behavior = TextParagraph::OVERRUN_NO_TRIMMING;
+ TextServer::OverrunBehavior overrun_behavior = TextServer::OVERRUN_NO_TRIMMING;
Ref<Texture2D> icon;
bool expand_icon = false;
@@ -72,8 +72,8 @@ public:
void set_text(const String &p_text);
String get_text() const;
- void set_text_overrun_behavior(TextParagraph::OverrunBehavior p_behavior);
- TextParagraph::OverrunBehavior get_text_overrun_behavior() const;
+ void set_text_overrun_behavior(TextServer::OverrunBehavior p_behavior);
+ TextServer::OverrunBehavior get_text_overrun_behavior() const;
void set_text_direction(TextDirection p_text_direction);
TextDirection get_text_direction() const;
diff --git a/scene/gui/control.cpp b/scene/gui/control.cpp
index 5ddc38a0b9..118e77c009 100644
--- a/scene/gui/control.cpp
+++ b/scene/gui/control.cpp
@@ -723,8 +723,20 @@ void Control::_notification(int p_notification) {
data.parent_window = Object::cast_to<Window>(get_parent());
data.is_rtl_dirty = true;
+ if (data.theme.is_null()) {
+ if (data.parent && (data.parent->data.theme_owner || data.parent->data.theme_owner_window)) {
+ data.theme_owner = data.parent->data.theme_owner;
+ data.theme_owner_window = data.parent->data.theme_owner_window;
+ notification(NOTIFICATION_THEME_CHANGED);
+ } else if (data.parent_window && (data.parent_window->theme_owner || data.parent_window->theme_owner_window)) {
+ data.theme_owner = data.parent_window->theme_owner;
+ data.theme_owner_window = data.parent_window->theme_owner_window;
+ notification(NOTIFICATION_THEME_CHANGED);
+ }
+ }
+
CanvasItem *node = this;
- Control *parent_control = nullptr;
+ bool has_parent_control = false;
while (!node->is_set_as_top_level()) {
CanvasItem *parent = Object::cast_to<CanvasItem>(node->get_parent());
@@ -732,22 +744,19 @@ void Control::_notification(int p_notification) {
break;
}
- parent_control = Object::cast_to<Control>(parent);
+ Control *parent_control = Object::cast_to<Control>(parent);
if (parent_control) {
+ has_parent_control = true;
break;
}
node = parent;
}
- if (parent_control) {
+ if (has_parent_control) {
// Do nothing, has a parent control.
- if (data.theme.is_null() && parent_control->data.theme_owner) {
- data.theme_owner = parent_control->data.theme_owner;
- notification(NOTIFICATION_THEME_CHANGED);
- }
} else {
- //is a regular root control or top_level
+ // Is a regular root control or top_level.
Viewport *viewport = get_viewport();
ERR_FAIL_COND(!viewport);
data.RI = viewport->_gui_add_root_control(this);
@@ -758,7 +767,7 @@ void Control::_notification(int p_notification) {
if (data.parent_canvas_item) {
data.parent_canvas_item->connect("item_rect_changed", callable_mp(this, &Control::_size_changed));
} else {
- //connect viewport
+ // Connect viewport.
Viewport *viewport = get_viewport();
ERR_FAIL_COND(!viewport);
viewport->connect("size_changed", callable_mp(this, &Control::_size_changed));
@@ -3286,7 +3295,7 @@ void Control::_bind_methods() {
ADD_GROUP("Layout", "");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "clip_contents"), "set_clip_contents", "is_clipping_contents");
- ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "minimum_size"), "set_custom_minimum_size", "get_custom_minimum_size");
+ ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "custom_minimum_size", PROPERTY_HINT_NONE, "suffix:px"), "set_custom_minimum_size", "get_custom_minimum_size");
ADD_PROPERTY(PropertyInfo(Variant::INT, "layout_direction", PROPERTY_HINT_ENUM, "Inherited,Locale,Left-to-Right,Right-to-Left"), "set_layout_direction", "get_layout_direction");
ADD_PROPERTY(PropertyInfo(Variant::INT, "layout_mode", PROPERTY_HINT_ENUM, "Position,Anchors,Container,Uncontrolled", PROPERTY_USAGE_EDITOR | PROPERTY_USAGE_INTERNAL), "_set_layout_mode", "_get_layout_mode");
ADD_PROPERTY_DEFAULT("layout_mode", LayoutMode::LAYOUT_MODE_POSITION);
@@ -3321,7 +3330,7 @@ void Control::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "global_position", PROPERTY_HINT_NONE, "suffix:px", PROPERTY_USAGE_NONE), "_set_global_position", "get_global_position");
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "rotation", PROPERTY_HINT_RANGE, "-360,360,0.1,or_lesser,or_greater,radians"), "set_rotation", "get_rotation");
ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "scale"), "set_scale", "get_scale");
- ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "pivot_offset"), "set_pivot_offset", "get_pivot_offset");
+ ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "pivot_offset", PROPERTY_HINT_NONE, "suffix:px"), "set_pivot_offset", "get_pivot_offset");
ADD_SUBGROUP("Container Sizing", "size_flags_");
ADD_PROPERTY(PropertyInfo(Variant::INT, "size_flags_horizontal", PROPERTY_HINT_FLAGS, "Fill:1,Expand:2,Shrink Center:4,Shrink End:8"), "set_h_size_flags", "get_h_size_flags");
diff --git a/scene/gui/dialogs.cpp b/scene/gui/dialogs.cpp
index 0bb96a18a5..a2b05ee50d 100644
--- a/scene/gui/dialogs.cpp
+++ b/scene/gui/dialogs.cpp
@@ -154,11 +154,11 @@ bool AcceptDialog::get_close_on_escape() const {
}
void AcceptDialog::set_autowrap(bool p_autowrap) {
- label->set_autowrap_mode(p_autowrap ? Label::AUTOWRAP_WORD : Label::AUTOWRAP_OFF);
+ label->set_autowrap_mode(p_autowrap ? TextServer::AUTOWRAP_WORD : TextServer::AUTOWRAP_OFF);
}
bool AcceptDialog::has_autowrap() {
- return label->get_autowrap_mode() != Label::AUTOWRAP_OFF;
+ return label->get_autowrap_mode() != TextServer::AUTOWRAP_OFF;
}
void AcceptDialog::register_text_enter(Control *p_line_edit) {
@@ -262,7 +262,7 @@ Button *AcceptDialog::add_button(const String &p_text, bool p_right, const Strin
Button *AcceptDialog::add_cancel_button(const String &p_cancel) {
String c = p_cancel;
if (p_cancel.is_empty()) {
- c = TTRC("Cancel");
+ c = RTR("Cancel");
}
Button *b = swap_cancel_ok ? add_button(c, true) : add_button(c);
b->connect("pressed", callable_mp(this, &AcceptDialog::_cancel_pressed));
@@ -349,7 +349,7 @@ AcceptDialog::AcceptDialog() {
hbc->add_spacer();
ok = memnew(Button);
- ok->set_text(TTRC("OK"));
+ ok->set_text(RTR("OK"));
hbc->add_child(ok);
hbc->add_spacer();
diff --git a/scene/gui/file_dialog.cpp b/scene/gui/file_dialog.cpp
index 1725816c31..0e0f8bde83 100644
--- a/scene/gui/file_dialog.cpp
+++ b/scene/gui/file_dialog.cpp
@@ -337,7 +337,7 @@ void FileDialog::_action_pressed() {
}
if (dir_access->file_exists(f)) {
- confirm_save->set_text(TTRC("File exists, overwrite?"));
+ confirm_save->set_text(RTR("File exists, overwrite?"));
confirm_save->popup_centered(Size2(200, 80));
} else {
emit_signal(SNAME("file_selected"), f);
@@ -423,10 +423,10 @@ void FileDialog::deselect_all() {
switch (mode) {
case FILE_MODE_OPEN_FILE:
case FILE_MODE_OPEN_FILES:
- get_ok_button()->set_text(TTRC("Open"));
+ get_ok_button()->set_text(RTR("Open"));
break;
case FILE_MODE_OPEN_DIR:
- get_ok_button()->set_text(TTRC("Select Current Folder"));
+ get_ok_button()->set_text(RTR("Select Current Folder"));
break;
case FILE_MODE_OPEN_ANY:
case FILE_MODE_SAVE_FILE:
@@ -450,7 +450,7 @@ void FileDialog::_tree_selected() {
if (!d["dir"]) {
file->set_text(d["name"]);
} else if (mode == FILE_MODE_OPEN_DIR) {
- get_ok_button()->set_text(TTRC("Select This Folder"));
+ get_ok_button()->set_text(RTR("Select This Folder"));
}
get_ok_button()->set_disabled(_is_open_should_be_disabled());
@@ -502,7 +502,7 @@ void FileDialog::update_file_list() {
if (dir_access->is_readable(dir_access->get_current_dir().utf8().get_data())) {
message->hide();
} else {
- message->set_text(TTRC("You don't have permission to access contents of this folder."));
+ message->set_text(RTR("You don't have permission to access contents of this folder."));
message->show();
}
@@ -746,35 +746,35 @@ void FileDialog::set_file_mode(FileMode p_mode) {
mode = p_mode;
switch (mode) {
case FILE_MODE_OPEN_FILE:
- get_ok_button()->set_text(TTRC("Open"));
+ get_ok_button()->set_text(RTR("Open"));
if (mode_overrides_title) {
set_title(TTRC("Open a File"));
}
makedir->hide();
break;
case FILE_MODE_OPEN_FILES:
- get_ok_button()->set_text(TTRC("Open"));
+ get_ok_button()->set_text(RTR("Open"));
if (mode_overrides_title) {
set_title(TTRC("Open File(s)"));
}
makedir->hide();
break;
case FILE_MODE_OPEN_DIR:
- get_ok_button()->set_text(TTRC("Select Current Folder"));
+ get_ok_button()->set_text(RTR("Select Current Folder"));
if (mode_overrides_title) {
set_title(TTRC("Open a Directory"));
}
makedir->show();
break;
case FILE_MODE_OPEN_ANY:
- get_ok_button()->set_text(TTRC("Open"));
+ get_ok_button()->set_text(RTR("Open"));
if (mode_overrides_title) {
set_title(TTRC("Open a File or Directory"));
}
makedir->show();
break;
case FILE_MODE_SAVE_FILE:
- get_ok_button()->set_text(TTRC("Save"));
+ get_ok_button()->set_text(RTR("Save"));
if (mode_overrides_title) {
set_title(TTRC("Save a File"));
}
@@ -964,13 +964,13 @@ FileDialog::FileDialog() {
dir_prev = memnew(Button);
dir_prev->set_flat(true);
- dir_prev->set_tooltip(TTRC("Go to previous folder."));
+ dir_prev->set_tooltip(RTR("Go to previous folder."));
dir_next = memnew(Button);
dir_next->set_flat(true);
- dir_next->set_tooltip(TTRC("Go to next folder."));
+ dir_next->set_tooltip(RTR("Go to next folder."));
dir_up = memnew(Button);
dir_up->set_flat(true);
- dir_up->set_tooltip(TTRC("Go to parent folder."));
+ dir_up->set_tooltip(RTR("Go to parent folder."));
hbc->add_child(dir_prev);
hbc->add_child(dir_next);
hbc->add_child(dir_up);
@@ -978,7 +978,7 @@ FileDialog::FileDialog() {
dir_next->connect("pressed", callable_mp(this, &FileDialog::_go_forward));
dir_up->connect("pressed", callable_mp(this, &FileDialog::_go_up));
- hbc->add_child(memnew(Label(TTRC("Path:"))));
+ hbc->add_child(memnew(Label(RTR("Path:"))));
drives_container = memnew(HBoxContainer);
hbc->add_child(drives_container);
@@ -994,7 +994,7 @@ FileDialog::FileDialog() {
refresh = memnew(Button);
refresh->set_flat(true);
- refresh->set_tooltip(TTRC("Refresh files."));
+ refresh->set_tooltip(RTR("Refresh files."));
refresh->connect("pressed", callable_mp(this, &FileDialog::update_file_list));
hbc->add_child(refresh);
@@ -1002,7 +1002,7 @@ FileDialog::FileDialog() {
show_hidden->set_flat(true);
show_hidden->set_toggle_mode(true);
show_hidden->set_pressed(is_showing_hidden_files());
- show_hidden->set_tooltip(TTRC("Toggle the visibility of hidden files."));
+ show_hidden->set_tooltip(RTR("Toggle the visibility of hidden files."));
show_hidden->connect("toggled", callable_mp(this, &FileDialog::set_show_hidden_files));
hbc->add_child(show_hidden);
@@ -1010,14 +1010,14 @@ FileDialog::FileDialog() {
hbc->add_child(shortcuts_container);
makedir = memnew(Button);
- makedir->set_text(TTRC("Create Folder"));
+ makedir->set_text(RTR("Create Folder"));
makedir->connect("pressed", callable_mp(this, &FileDialog::_make_dir));
hbc->add_child(makedir);
vbox->add_child(hbc);
tree = memnew(Tree);
tree->set_hide_root(true);
- vbox->add_margin_child(TTRC("Directories & Files:"), tree, true);
+ vbox->add_margin_child(RTR("Directories & Files:"), tree, true);
message = memnew(Label);
message->hide();
@@ -1027,7 +1027,7 @@ FileDialog::FileDialog() {
tree->add_child(message);
file_box = memnew(HBoxContainer);
- file_box->add_child(memnew(Label(TTRC("File:"))));
+ file_box->add_child(memnew(Label(RTR("File:"))));
file = memnew(LineEdit);
file->set_structured_text_bidi_override(TextServer::STRUCTURED_TEXT_FILE);
file->set_stretch_ratio(4);
@@ -1058,22 +1058,22 @@ FileDialog::FileDialog() {
confirm_save->connect("confirmed", callable_mp(this, &FileDialog::_save_confirm_pressed));
makedialog = memnew(ConfirmationDialog);
- makedialog->set_title(TTRC("Create Folder"));
+ makedialog->set_title(RTR("Create Folder"));
VBoxContainer *makevb = memnew(VBoxContainer);
makedialog->add_child(makevb);
makedirname = memnew(LineEdit);
makedirname->set_structured_text_bidi_override(TextServer::STRUCTURED_TEXT_FILE);
- makevb->add_margin_child(TTRC("Name:"), makedirname);
+ makevb->add_margin_child(RTR("Name:"), makedirname);
add_child(makedialog, false, INTERNAL_MODE_FRONT);
makedialog->register_text_enter(makedirname);
makedialog->connect("confirmed", callable_mp(this, &FileDialog::_make_dir_confirm));
mkdirerr = memnew(AcceptDialog);
- mkdirerr->set_text(TTRC("Could not create folder."));
+ mkdirerr->set_text(RTR("Could not create folder."));
add_child(mkdirerr, false, INTERNAL_MODE_FRONT);
exterr = memnew(AcceptDialog);
- exterr->set_text(TTRC("Must use a valid extension."));
+ exterr->set_text(RTR("Must use a valid extension."));
add_child(exterr, false, INTERNAL_MODE_FRONT);
update_filters();
diff --git a/scene/gui/gradient_edit.cpp b/scene/gui/gradient_edit.cpp
index 0690acbe16..9459bed63b 100644
--- a/scene/gui/gradient_edit.cpp
+++ b/scene/gui/gradient_edit.cpp
@@ -382,7 +382,7 @@ void GradientEdit::_color_changed(const Color &p_color) {
emit_signal(SNAME("ramp_changed"));
}
-void GradientEdit::set_ramp(const Vector<real_t> &p_offsets, const Vector<Color> &p_colors) {
+void GradientEdit::set_ramp(const Vector<float> &p_offsets, const Vector<Color> &p_colors) {
ERR_FAIL_COND(p_offsets.size() != p_colors.size());
points.clear();
for (int i = 0; i < p_offsets.size(); i++) {
@@ -396,8 +396,8 @@ void GradientEdit::set_ramp(const Vector<real_t> &p_offsets, const Vector<Color>
update();
}
-Vector<real_t> GradientEdit::get_offsets() const {
- Vector<real_t> ret;
+Vector<float> GradientEdit::get_offsets() const {
+ Vector<float> ret;
for (int i = 0; i < points.size(); i++) {
ret.push_back(points[i].offset);
}
diff --git a/scene/gui/gradient_edit.h b/scene/gui/gradient_edit.h
index 4e3c6525f9..3badcd45ba 100644
--- a/scene/gui/gradient_edit.h
+++ b/scene/gui/gradient_edit.h
@@ -67,8 +67,8 @@ protected:
static void _bind_methods();
public:
- void set_ramp(const Vector<real_t> &p_offsets, const Vector<Color> &p_colors);
- Vector<real_t> get_offsets() const;
+ void set_ramp(const Vector<float> &p_offsets, const Vector<Color> &p_colors);
+ Vector<float> get_offsets() const;
Vector<Color> get_colors() const;
void set_points(Vector<Gradient::Point> &p_points);
Vector<Gradient::Point> &get_points();
diff --git a/scene/gui/item_list.cpp b/scene/gui/item_list.cpp
index 0c95dabfb5..aeb5338022 100644
--- a/scene/gui/item_list.cpp
+++ b/scene/gui/item_list.cpp
@@ -1550,7 +1550,7 @@ bool ItemList::has_auto_height() const {
return auto_height;
}
-void ItemList::set_text_overrun_behavior(TextParagraph::OverrunBehavior p_behavior) {
+void ItemList::set_text_overrun_behavior(TextServer::OverrunBehavior p_behavior) {
if (text_overrun_behavior != p_behavior) {
text_overrun_behavior = p_behavior;
for (int i = 0; i < items.size(); i++) {
@@ -1561,7 +1561,7 @@ void ItemList::set_text_overrun_behavior(TextParagraph::OverrunBehavior p_behavi
}
}
-TextParagraph::OverrunBehavior ItemList::get_text_overrun_behavior() const {
+TextServer::OverrunBehavior ItemList::get_text_overrun_behavior() const {
return text_overrun_behavior;
}
diff --git a/scene/gui/item_list.h b/scene/gui/item_list.h
index ffbe7d055a..a15b090149 100644
--- a/scene/gui/item_list.h
+++ b/scene/gui/item_list.h
@@ -99,7 +99,7 @@ private:
SelectMode select_mode = SELECT_SINGLE;
IconMode icon_mode = ICON_MODE_LEFT;
VScrollBar *scroll_bar = nullptr;
- TextParagraph::OverrunBehavior text_overrun_behavior = TextParagraph::OVERRUN_TRIM_ELLIPSIS;
+ TextServer::OverrunBehavior text_overrun_behavior = TextServer::OVERRUN_TRIM_ELLIPSIS;
uint64_t search_time_msec = 0;
String search_string;
@@ -188,8 +188,8 @@ public:
void set_item_custom_fg_color(int p_idx, const Color &p_custom_fg_color);
Color get_item_custom_fg_color(int p_idx) const;
- void set_text_overrun_behavior(TextParagraph::OverrunBehavior p_behavior);
- TextParagraph::OverrunBehavior get_text_overrun_behavior() const;
+ void set_text_overrun_behavior(TextServer::OverrunBehavior p_behavior);
+ TextServer::OverrunBehavior get_text_overrun_behavior() const;
void select(int p_idx, bool p_single = true);
void deselect(int p_idx);
diff --git a/scene/gui/label.cpp b/scene/gui/label.cpp
index eda3d40f63..82ab7c2e18 100644
--- a/scene/gui/label.cpp
+++ b/scene/gui/label.cpp
@@ -36,19 +36,19 @@
#include "servers/text_server.h"
-void Label::set_autowrap_mode(Label::AutowrapMode p_mode) {
+void Label::set_autowrap_mode(TextServer::AutowrapMode p_mode) {
if (autowrap_mode != p_mode) {
autowrap_mode = p_mode;
lines_dirty = true;
}
update();
- if (clip || overrun_behavior != OVERRUN_NO_TRIMMING) {
+ if (clip || overrun_behavior != TextServer::OVERRUN_NO_TRIMMING) {
update_minimum_size();
}
}
-Label::AutowrapMode Label::get_autowrap_mode() const {
+TextServer::AutowrapMode Label::get_autowrap_mode() const {
return autowrap_mode;
}
@@ -96,7 +96,7 @@ void Label::_shape() {
int font_size = get_theme_font_size(SNAME("font_size"));
ERR_FAIL_COND(font.is_null());
String text = (uppercase) ? TS->string_to_upper(xl_text, lang) : xl_text;
- if (visible_chars >= 0 && visible_chars_behavior == VC_CHARS_BEFORE_SHAPING) {
+ if (visible_chars >= 0 && visible_chars_behavior == TextServer::VC_CHARS_BEFORE_SHAPING) {
text = text.substr(0, visible_chars);
}
if (dirty) {
@@ -121,16 +121,16 @@ void Label::_shape() {
uint16_t autowrap_flags = TextServer::BREAK_MANDATORY;
switch (autowrap_mode) {
- case AUTOWRAP_WORD_SMART:
+ case TextServer::AUTOWRAP_WORD_SMART:
autowrap_flags = TextServer::BREAK_WORD_BOUND_ADAPTIVE | TextServer::BREAK_MANDATORY;
break;
- case AUTOWRAP_WORD:
+ case TextServer::AUTOWRAP_WORD:
autowrap_flags = TextServer::BREAK_WORD_BOUND | TextServer::BREAK_MANDATORY;
break;
- case AUTOWRAP_ARBITRARY:
+ case TextServer::AUTOWRAP_ARBITRARY:
autowrap_flags = TextServer::BREAK_GRAPHEME_BOUND | TextServer::BREAK_MANDATORY;
break;
- case AUTOWRAP_OFF:
+ case TextServer::AUTOWRAP_OFF:
break;
}
PackedInt32Array line_breaks = TS->shaped_text_get_line_breaks(text_rid, width, 0, autowrap_flags);
@@ -146,7 +146,7 @@ void Label::_shape() {
return;
}
- if (autowrap_mode == AUTOWRAP_OFF) {
+ if (autowrap_mode == TextServer::AUTOWRAP_OFF) {
minsize.width = 0.0f;
for (int i = 0; i < lines_rid.size(); i++) {
if (minsize.width < TS->shaped_text_get_size(lines_rid[i]).x) {
@@ -156,31 +156,31 @@ void Label::_shape() {
}
if (lines_dirty) {
- uint16_t overrun_flags = TextServer::OVERRUN_NO_TRIMMING;
+ uint16_t overrun_flags = TextServer::OVERRUN_NO_TRIM;
switch (overrun_behavior) {
- case OVERRUN_TRIM_WORD_ELLIPSIS:
+ case TextServer::OVERRUN_TRIM_WORD_ELLIPSIS:
overrun_flags |= TextServer::OVERRUN_TRIM;
overrun_flags |= TextServer::OVERRUN_TRIM_WORD_ONLY;
overrun_flags |= TextServer::OVERRUN_ADD_ELLIPSIS;
break;
- case OVERRUN_TRIM_ELLIPSIS:
+ case TextServer::OVERRUN_TRIM_ELLIPSIS:
overrun_flags |= TextServer::OVERRUN_TRIM;
overrun_flags |= TextServer::OVERRUN_ADD_ELLIPSIS;
break;
- case OVERRUN_TRIM_WORD:
+ case TextServer::OVERRUN_TRIM_WORD:
overrun_flags |= TextServer::OVERRUN_TRIM;
overrun_flags |= TextServer::OVERRUN_TRIM_WORD_ONLY;
break;
- case OVERRUN_TRIM_CHAR:
+ case TextServer::OVERRUN_TRIM_CHAR:
overrun_flags |= TextServer::OVERRUN_TRIM;
break;
- case OVERRUN_NO_TRIMMING:
+ case TextServer::OVERRUN_NO_TRIMMING:
break;
}
// Fill after min_size calculation.
- if (autowrap_mode != AUTOWRAP_OFF) {
+ if (autowrap_mode != TextServer::AUTOWRAP_OFF) {
int visible_lines = get_visible_line_count();
bool lines_hidden = visible_lines > 0 && visible_lines < lines_rid.size();
if (lines_hidden) {
@@ -215,7 +215,7 @@ void Label::_shape() {
_update_visible();
- if (autowrap_mode == AUTOWRAP_OFF || !clip || overrun_behavior == OVERRUN_NO_TRIMMING) {
+ if (autowrap_mode == TextServer::AUTOWRAP_OFF || !clip || overrun_behavior == TextServer::OVERRUN_NO_TRIMMING) {
update_minimum_size();
}
}
@@ -326,9 +326,9 @@ void Label::_notification(int p_what) {
}
int last_line = MIN(lines_rid.size(), lines_visible + lines_skipped);
- bool trim_chars = (visible_chars >= 0) && (visible_chars_behavior == VC_CHARS_AFTER_SHAPING);
- bool trim_glyphs_ltr = (visible_chars >= 0) && ((visible_chars_behavior == VC_GLYPHS_LTR) || ((visible_chars_behavior == VC_GLYPHS_AUTO) && !rtl_layout));
- bool trim_glyphs_rtl = (visible_chars >= 0) && ((visible_chars_behavior == VC_GLYPHS_RTL) || ((visible_chars_behavior == VC_GLYPHS_AUTO) && rtl_layout));
+ bool trim_chars = (visible_chars >= 0) && (visible_chars_behavior == TextServer::VC_CHARS_AFTER_SHAPING);
+ bool trim_glyphs_ltr = (visible_chars >= 0) && ((visible_chars_behavior == TextServer::VC_GLYPHS_LTR) || ((visible_chars_behavior == TextServer::VC_GLYPHS_AUTO) && !rtl_layout));
+ bool trim_glyphs_rtl = (visible_chars >= 0) && ((visible_chars_behavior == TextServer::VC_GLYPHS_RTL) || ((visible_chars_behavior == TextServer::VC_GLYPHS_AUTO) && rtl_layout));
// Get real total height.
int total_glyphs = 0;
@@ -377,7 +377,7 @@ void Label::_notification(int p_what) {
ofs.y += TS->shaped_text_get_ascent(lines_rid[i]) + font->get_spacing(TextServer::SPACING_TOP);
switch (horizontal_alignment) {
case HORIZONTAL_ALIGNMENT_FILL:
- if (rtl && autowrap_mode != AUTOWRAP_OFF) {
+ if (rtl && autowrap_mode != TextServer::AUTOWRAP_OFF) {
ofs.x = int(size.width - style->get_margin(SIDE_RIGHT) - line_size.width);
} else {
ofs.x = style->get_offset().x;
@@ -554,10 +554,10 @@ Size2 Label::get_minimum_size() const {
min_size.height = MAX(min_size.height, font->get_height(get_theme_font_size(SNAME("font_size"))) + font->get_spacing(TextServer::SPACING_TOP) + font->get_spacing(TextServer::SPACING_BOTTOM));
Size2 min_style = get_theme_stylebox(SNAME("normal"))->get_minimum_size();
- if (autowrap_mode != AUTOWRAP_OFF) {
- return Size2(1, (clip || overrun_behavior != OVERRUN_NO_TRIMMING) ? 1 : min_size.height) + min_style;
+ if (autowrap_mode != TextServer::AUTOWRAP_OFF) {
+ return Size2(1, (clip || overrun_behavior != TextServer::OVERRUN_NO_TRIMMING) ? 1 : min_size.height) + min_style;
} else {
- if (clip || overrun_behavior != OVERRUN_NO_TRIMMING) {
+ if (clip || overrun_behavior != TextServer::OVERRUN_NO_TRIMMING) {
min_size.width = 1;
}
return min_size + min_style;
@@ -719,18 +719,18 @@ bool Label::is_clipping_text() const {
return clip;
}
-void Label::set_text_overrun_behavior(Label::OverrunBehavior p_behavior) {
+void Label::set_text_overrun_behavior(TextServer::OverrunBehavior p_behavior) {
if (overrun_behavior != p_behavior) {
overrun_behavior = p_behavior;
lines_dirty = true;
}
update();
- if (clip || overrun_behavior != OVERRUN_NO_TRIMMING) {
+ if (clip || overrun_behavior != TextServer::OVERRUN_NO_TRIMMING) {
update_minimum_size();
}
}
-Label::OverrunBehavior Label::get_text_overrun_behavior() const {
+TextServer::OverrunBehavior Label::get_text_overrun_behavior() const {
return overrun_behavior;
}
@@ -746,7 +746,7 @@ void Label::set_visible_characters(int p_amount) {
} else {
percent_visible = 1.0;
}
- if (visible_chars_behavior == VC_CHARS_BEFORE_SHAPING) {
+ if (visible_chars_behavior == TextServer::VC_CHARS_BEFORE_SHAPING) {
dirty = true;
}
update();
@@ -766,7 +766,7 @@ void Label::set_percent_visible(float p_percent) {
visible_chars = get_total_character_count() * p_percent;
percent_visible = p_percent;
}
- if (visible_chars_behavior == VC_CHARS_BEFORE_SHAPING) {
+ if (visible_chars_behavior == TextServer::VC_CHARS_BEFORE_SHAPING) {
dirty = true;
}
update();
@@ -777,11 +777,11 @@ float Label::get_percent_visible() const {
return percent_visible;
}
-Label::VisibleCharactersBehavior Label::get_visible_characters_behavior() const {
+TextServer::VisibleCharactersBehavior Label::get_visible_characters_behavior() const {
return visible_chars_behavior;
}
-void Label::set_visible_characters_behavior(Label::VisibleCharactersBehavior p_behavior) {
+void Label::set_visible_characters_behavior(TextServer::VisibleCharactersBehavior p_behavior) {
if (visible_chars_behavior != p_behavior) {
visible_chars_behavior = p_behavior;
dirty = true;
@@ -909,23 +909,6 @@ void Label::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_structured_text_bidi_override_options", "args"), &Label::set_structured_text_bidi_override_options);
ClassDB::bind_method(D_METHOD("get_structured_text_bidi_override_options"), &Label::get_structured_text_bidi_override_options);
- BIND_ENUM_CONSTANT(AUTOWRAP_OFF);
- BIND_ENUM_CONSTANT(AUTOWRAP_ARBITRARY);
- BIND_ENUM_CONSTANT(AUTOWRAP_WORD);
- BIND_ENUM_CONSTANT(AUTOWRAP_WORD_SMART);
-
- BIND_ENUM_CONSTANT(OVERRUN_NO_TRIMMING);
- BIND_ENUM_CONSTANT(OVERRUN_TRIM_CHAR);
- BIND_ENUM_CONSTANT(OVERRUN_TRIM_WORD);
- BIND_ENUM_CONSTANT(OVERRUN_TRIM_ELLIPSIS);
- BIND_ENUM_CONSTANT(OVERRUN_TRIM_WORD_ELLIPSIS);
-
- BIND_ENUM_CONSTANT(VC_CHARS_BEFORE_SHAPING);
- BIND_ENUM_CONSTANT(VC_CHARS_AFTER_SHAPING);
- BIND_ENUM_CONSTANT(VC_GLYPHS_AUTO);
- BIND_ENUM_CONSTANT(VC_GLYPHS_LTR);
- BIND_ENUM_CONSTANT(VC_GLYPHS_RTL);
-
ADD_PROPERTY(PropertyInfo(Variant::STRING, "text", PROPERTY_HINT_MULTILINE_TEXT, "", PROPERTY_USAGE_DEFAULT_INTL), "set_text", "get_text");
ADD_PROPERTY(PropertyInfo(Variant::INT, "horizontal_alignment", PROPERTY_HINT_ENUM, "Left,Center,Right,Fill"), "set_horizontal_alignment", "get_horizontal_alignment");
ADD_PROPERTY(PropertyInfo(Variant::INT, "vertical_alignment", PROPERTY_HINT_ENUM, "Top,Center,Bottom,Fill"), "set_vertical_alignment", "get_vertical_alignment");
diff --git a/scene/gui/label.h b/scene/gui/label.h
index f7b725928f..fac3d75a1b 100644
--- a/scene/gui/label.h
+++ b/scene/gui/label.h
@@ -36,38 +36,14 @@
class Label : public Control {
GDCLASS(Label, Control);
-public:
- enum AutowrapMode {
- AUTOWRAP_OFF,
- AUTOWRAP_ARBITRARY,
- AUTOWRAP_WORD,
- AUTOWRAP_WORD_SMART
- };
-
- enum OverrunBehavior {
- OVERRUN_NO_TRIMMING,
- OVERRUN_TRIM_CHAR,
- OVERRUN_TRIM_WORD,
- OVERRUN_TRIM_ELLIPSIS,
- OVERRUN_TRIM_WORD_ELLIPSIS,
- };
-
- enum VisibleCharactersBehavior {
- VC_CHARS_BEFORE_SHAPING,
- VC_CHARS_AFTER_SHAPING,
- VC_GLYPHS_AUTO,
- VC_GLYPHS_LTR,
- VC_GLYPHS_RTL,
- };
-
private:
HorizontalAlignment horizontal_alignment = HORIZONTAL_ALIGNMENT_LEFT;
VerticalAlignment vertical_alignment = VERTICAL_ALIGNMENT_TOP;
String text;
String xl_text;
- AutowrapMode autowrap_mode = AUTOWRAP_OFF;
+ TextServer::AutowrapMode autowrap_mode = TextServer::AUTOWRAP_OFF;
bool clip = false;
- OverrunBehavior overrun_behavior = OVERRUN_NO_TRIMMING;
+ TextServer::OverrunBehavior overrun_behavior = TextServer::OVERRUN_NO_TRIMMING;
Size2 minsize;
bool uppercase = false;
@@ -85,7 +61,7 @@ private:
float percent_visible = 1.0;
- VisibleCharactersBehavior visible_chars_behavior = VC_CHARS_BEFORE_SHAPING;
+ TextServer::VisibleCharactersBehavior visible_chars_behavior = TextServer::VC_CHARS_BEFORE_SHAPING;
int visible_chars = -1;
int lines_skipped = 0;
int max_lines_visible = -1;
@@ -130,14 +106,14 @@ public:
void set_structured_text_bidi_override_options(Array p_args);
Array get_structured_text_bidi_override_options() const;
- void set_autowrap_mode(AutowrapMode p_mode);
- AutowrapMode get_autowrap_mode() const;
+ void set_autowrap_mode(TextServer::AutowrapMode p_mode);
+ TextServer::AutowrapMode get_autowrap_mode() const;
void set_uppercase(bool p_uppercase);
bool is_uppercase() const;
- VisibleCharactersBehavior get_visible_characters_behavior() const;
- void set_visible_characters_behavior(VisibleCharactersBehavior p_behavior);
+ TextServer::VisibleCharactersBehavior get_visible_characters_behavior() const;
+ void set_visible_characters_behavior(TextServer::VisibleCharactersBehavior p_behavior);
void set_visible_characters(int p_amount);
int get_visible_characters() const;
@@ -146,8 +122,8 @@ public:
void set_clip_text(bool p_clip);
bool is_clipping_text() const;
- void set_text_overrun_behavior(OverrunBehavior p_behavior);
- OverrunBehavior get_text_overrun_behavior() const;
+ void set_text_overrun_behavior(TextServer::OverrunBehavior p_behavior);
+ TextServer::OverrunBehavior get_text_overrun_behavior() const;
void set_percent_visible(float p_percent);
float get_percent_visible() const;
@@ -166,8 +142,4 @@ public:
~Label();
};
-VARIANT_ENUM_CAST(Label::AutowrapMode);
-VARIANT_ENUM_CAST(Label::OverrunBehavior);
-VARIANT_ENUM_CAST(Label::VisibleCharactersBehavior);
-
#endif
diff --git a/scene/gui/progress_bar.cpp b/scene/gui/progress_bar.cpp
index f36682942f..80859e8eb9 100644
--- a/scene/gui/progress_bar.cpp
+++ b/scene/gui/progress_bar.cpp
@@ -126,7 +126,11 @@ int ProgressBar::get_fill_mode() {
}
void ProgressBar::set_percent_visible(bool p_visible) {
+ if (percent_visible == p_visible) {
+ return;
+ }
percent_visible = p_visible;
+ update_minimum_size();
update();
}
diff --git a/scene/gui/rich_text_label.cpp b/scene/gui/rich_text_label.cpp
index 4a0edd85f5..0516c8e722 100644
--- a/scene/gui/rich_text_label.cpp
+++ b/scene/gui/rich_text_label.cpp
@@ -426,16 +426,16 @@ float RichTextLabel::_shape_line(ItemFrame *p_frame, int p_line, const Ref<Font>
uint16_t autowrap_flags = TextServer::BREAK_MANDATORY;
switch (autowrap_mode) {
- case AUTOWRAP_WORD_SMART:
+ case TextServer::AUTOWRAP_WORD_SMART:
autowrap_flags = TextServer::BREAK_WORD_BOUND_ADAPTIVE | TextServer::BREAK_MANDATORY;
break;
- case AUTOWRAP_WORD:
+ case TextServer::AUTOWRAP_WORD:
autowrap_flags = TextServer::BREAK_WORD_BOUND | TextServer::BREAK_MANDATORY;
break;
- case AUTOWRAP_ARBITRARY:
+ case TextServer::AUTOWRAP_ARBITRARY:
autowrap_flags = TextServer::BREAK_GRAPHEME_BOUND | TextServer::BREAK_MANDATORY;
break;
- case AUTOWRAP_OFF:
+ case TextServer::AUTOWRAP_OFF:
break;
}
@@ -462,7 +462,7 @@ float RichTextLabel::_shape_line(ItemFrame *p_frame, int p_line, const Ref<Font>
Item *it_to = (p_line + 1 < (int)p_frame->lines.size()) ? p_frame->lines[p_line + 1].from : nullptr;
int remaining_characters = visible_characters - l.char_offset;
for (Item *it = l.from; it && it != it_to; it = _get_next_item(it)) {
- if (visible_chars_behavior == VC_CHARS_BEFORE_SHAPING && visible_characters >= 0 && remaining_characters <= 0) {
+ if (visible_chars_behavior == TextServer::VC_CHARS_BEFORE_SHAPING && visible_characters >= 0 && remaining_characters <= 0) {
break;
}
switch (it->type) {
@@ -501,7 +501,7 @@ float RichTextLabel::_shape_line(ItemFrame *p_frame, int p_line, const Ref<Font>
Dictionary font_ftr = _find_font_features(it);
String lang = _find_language(it);
String tx = t->text;
- if (visible_chars_behavior == VC_CHARS_BEFORE_SHAPING && visible_characters >= 0 && remaining_characters >= 0) {
+ if (visible_chars_behavior == TextServer::VC_CHARS_BEFORE_SHAPING && visible_characters >= 0 && remaining_characters >= 0) {
tx = tx.substr(0, remaining_characters);
}
remaining_characters -= tx.length();
@@ -707,9 +707,9 @@ int RichTextLabel::_draw_line(ItemFrame *p_frame, int p_line, const Vector2 &p_o
bool rtl = (l.text_buf->get_direction() == TextServer::DIRECTION_RTL);
bool lrtl = is_layout_rtl();
- bool trim_chars = (visible_characters >= 0) && (visible_chars_behavior == VC_CHARS_AFTER_SHAPING);
- bool trim_glyphs_ltr = (visible_characters >= 0) && ((visible_chars_behavior == VC_GLYPHS_LTR) || ((visible_chars_behavior == VC_GLYPHS_AUTO) && !lrtl));
- bool trim_glyphs_rtl = (visible_characters >= 0) && ((visible_chars_behavior == VC_GLYPHS_RTL) || ((visible_chars_behavior == VC_GLYPHS_AUTO) && lrtl));
+ bool trim_chars = (visible_characters >= 0) && (visible_chars_behavior == TextServer::VC_CHARS_AFTER_SHAPING);
+ bool trim_glyphs_ltr = (visible_characters >= 0) && ((visible_chars_behavior == TextServer::VC_GLYPHS_LTR) || ((visible_chars_behavior == TextServer::VC_GLYPHS_AUTO) && !lrtl));
+ bool trim_glyphs_rtl = (visible_characters >= 0) && ((visible_chars_behavior == TextServer::VC_GLYPHS_RTL) || ((visible_chars_behavior == TextServer::VC_GLYPHS_AUTO) && lrtl));
int total_glyphs = (trim_glyphs_ltr || trim_glyphs_rtl) ? get_total_glyph_count() : 0;
int visible_glyphs = total_glyphs * percent_visible;
@@ -4752,7 +4752,7 @@ String RichTextLabel::get_language() const {
return language;
}
-void RichTextLabel::set_autowrap_mode(RichTextLabel::AutowrapMode p_mode) {
+void RichTextLabel::set_autowrap_mode(TextServer::AutowrapMode p_mode) {
if (autowrap_mode != p_mode) {
_stop_thread();
@@ -4763,7 +4763,7 @@ void RichTextLabel::set_autowrap_mode(RichTextLabel::AutowrapMode p_mode) {
}
}
-RichTextLabel::AutowrapMode RichTextLabel::get_autowrap_mode() const {
+TextServer::AutowrapMode RichTextLabel::get_autowrap_mode() const {
return autowrap_mode;
}
@@ -4778,7 +4778,7 @@ void RichTextLabel::set_percent_visible(float p_percent) {
visible_characters = get_total_character_count() * p_percent;
percent_visible = p_percent;
}
- if (visible_chars_behavior == VC_CHARS_BEFORE_SHAPING) {
+ if (visible_chars_behavior == TextServer::VC_CHARS_BEFORE_SHAPING) {
main->first_invalid_line.store(0); //invalidate ALL
_validate_line_caches();
}
@@ -5032,11 +5032,6 @@ void RichTextLabel::_bind_methods() {
ADD_SIGNAL(MethodInfo("finished"));
- BIND_ENUM_CONSTANT(AUTOWRAP_OFF);
- BIND_ENUM_CONSTANT(AUTOWRAP_ARBITRARY);
- BIND_ENUM_CONSTANT(AUTOWRAP_WORD);
- BIND_ENUM_CONSTANT(AUTOWRAP_WORD_SMART);
-
BIND_ENUM_CONSTANT(LIST_NUMBERS);
BIND_ENUM_CONSTANT(LIST_LETTERS);
BIND_ENUM_CONSTANT(LIST_ROMAN);
@@ -5069,19 +5064,13 @@ void RichTextLabel::_bind_methods() {
BIND_ENUM_CONSTANT(ITEM_HINT);
BIND_ENUM_CONSTANT(ITEM_DROPCAP);
BIND_ENUM_CONSTANT(ITEM_CUSTOMFX);
-
- BIND_ENUM_CONSTANT(VC_CHARS_BEFORE_SHAPING);
- BIND_ENUM_CONSTANT(VC_CHARS_AFTER_SHAPING);
- BIND_ENUM_CONSTANT(VC_GLYPHS_AUTO);
- BIND_ENUM_CONSTANT(VC_GLYPHS_LTR);
- BIND_ENUM_CONSTANT(VC_GLYPHS_RTL);
}
-RichTextLabel::VisibleCharactersBehavior RichTextLabel::get_visible_characters_behavior() const {
+TextServer::VisibleCharactersBehavior RichTextLabel::get_visible_characters_behavior() const {
return visible_chars_behavior;
}
-void RichTextLabel::set_visible_characters_behavior(RichTextLabel::VisibleCharactersBehavior p_behavior) {
+void RichTextLabel::set_visible_characters_behavior(TextServer::VisibleCharactersBehavior p_behavior) {
if (visible_chars_behavior != p_behavior) {
_stop_thread();
@@ -5105,7 +5094,7 @@ void RichTextLabel::set_visible_characters(int p_visible) {
percent_visible = (float)p_visible / (float)total_char_count;
}
}
- if (visible_chars_behavior == VC_CHARS_BEFORE_SHAPING) {
+ if (visible_chars_behavior == TextServer::VC_CHARS_BEFORE_SHAPING) {
main->first_invalid_line.store(0); //invalidate ALL
_validate_line_caches();
}
diff --git a/scene/gui/rich_text_label.h b/scene/gui/rich_text_label.h
index 93e57058b0..c697320976 100644
--- a/scene/gui/rich_text_label.h
+++ b/scene/gui/rich_text_label.h
@@ -40,13 +40,6 @@ class RichTextLabel : public Control {
GDCLASS(RichTextLabel, Control);
public:
- enum AutowrapMode {
- AUTOWRAP_OFF,
- AUTOWRAP_ARBITRARY,
- AUTOWRAP_WORD,
- AUTOWRAP_WORD_SMART
- };
-
enum ListType {
LIST_NUMBERS,
LIST_LETTERS,
@@ -84,14 +77,6 @@ public:
ITEM_CUSTOMFX
};
- enum VisibleCharactersBehavior {
- VC_CHARS_BEFORE_SHAPING,
- VC_CHARS_AFTER_SHAPING,
- VC_GLYPHS_AUTO,
- VC_GLYPHS_LTR,
- VC_GLYPHS_RTL,
- };
-
enum MenuItems {
MENU_COPY,
MENU_SELECT_ALL,
@@ -384,7 +369,7 @@ private:
VScrollBar *vscroll = nullptr;
- AutowrapMode autowrap_mode = AUTOWRAP_WORD_SMART;
+ TextServer::AutowrapMode autowrap_mode = TextServer::AUTOWRAP_WORD_SMART;
bool scroll_visible = false;
bool scroll_follow = false;
@@ -460,7 +445,7 @@ private:
int visible_characters = -1;
float percent_visible = 1.0;
- VisibleCharactersBehavior visible_chars_behavior = VC_CHARS_BEFORE_SHAPING;
+ TextServer::VisibleCharactersBehavior visible_chars_behavior = TextServer::VC_CHARS_BEFORE_SHAPING;
bool _is_click_inside_selection() const;
void _find_click(ItemFrame *p_frame, const Point2i &p_click, ItemFrame **r_click_frame = nullptr, int *r_click_line = nullptr, Item **r_click_item = nullptr, int *r_click_char = nullptr, bool *r_outside = nullptr);
@@ -664,8 +649,8 @@ public:
void set_language(const String &p_language);
String get_language() const;
- void set_autowrap_mode(AutowrapMode p_mode);
- AutowrapMode get_autowrap_mode() const;
+ void set_autowrap_mode(TextServer::AutowrapMode p_mode);
+ TextServer::AutowrapMode get_autowrap_mode() const;
void set_structured_text_bidi_override(TextServer::StructuredTextParser p_parser);
TextServer::StructuredTextParser get_structured_text_bidi_override() const;
@@ -683,8 +668,8 @@ public:
void set_percent_visible(float p_percent);
float get_percent_visible() const;
- VisibleCharactersBehavior get_visible_characters_behavior() const;
- void set_visible_characters_behavior(VisibleCharactersBehavior p_behavior);
+ TextServer::VisibleCharactersBehavior get_visible_characters_behavior() const;
+ void set_visible_characters_behavior(TextServer::VisibleCharactersBehavior p_behavior);
void set_effects(Array p_effects);
Array get_effects();
@@ -698,9 +683,7 @@ public:
~RichTextLabel();
};
-VARIANT_ENUM_CAST(RichTextLabel::AutowrapMode);
VARIANT_ENUM_CAST(RichTextLabel::ListType);
VARIANT_ENUM_CAST(RichTextLabel::ItemType);
-VARIANT_ENUM_CAST(RichTextLabel::VisibleCharactersBehavior);
#endif // RICH_TEXT_LABEL_H
diff --git a/scene/gui/spin_box.cpp b/scene/gui/spin_box.cpp
index e50d7e765c..890e349afb 100644
--- a/scene/gui/spin_box.cpp
+++ b/scene/gui/spin_box.cpp
@@ -62,7 +62,7 @@ void SpinBox::_text_submitted(const String &p_string) {
return;
}
- Variant value = expr->execute(Array(), nullptr, false);
+ Variant value = expr->execute(Array(), nullptr, false, true);
if (value.get_type() != Variant::NIL) {
set_value(value);
}
diff --git a/scene/gui/tab_container.cpp b/scene/gui/tab_container.cpp
index 8299d73b68..fa929344d4 100644
--- a/scene/gui/tab_container.cpp
+++ b/scene/gui/tab_container.cpp
@@ -727,6 +727,7 @@ void TabContainer::set_tab_hidden(int p_tab, bool p_hidden) {
if (!get_clip_tabs()) {
update_minimum_size();
}
+ call_deferred(SNAME("_repaint"));
}
bool TabContainer::is_tab_hidden(int p_tab) const {
diff --git a/scene/gui/text_edit.cpp b/scene/gui/text_edit.cpp
index d9a91590f7..5506616b7a 100644
--- a/scene/gui/text_edit.cpp
+++ b/scene/gui/text_edit.cpp
@@ -1723,7 +1723,7 @@ void TextEdit::gui_input(const Ref<InputEvent> &p_gui_input) {
update();
}
- } else if (is_mouse_over_selection()) {
+ } else if (drag_and_drop_selection_enabled && is_mouse_over_selection()) {
selection.selecting_mode = SelectionMode::SELECTION_MODE_NONE;
selection.drag_attempt = true;
} else {
@@ -4163,6 +4163,14 @@ bool TextEdit::is_deselect_on_focus_loss_enabled() const {
return deselect_on_focus_loss_enabled;
}
+void TextEdit::set_drag_and_drop_selection_enabled(const bool p_enabled) {
+ drag_and_drop_selection_enabled = p_enabled;
+}
+
+bool TextEdit::is_drag_and_drop_selection_enabled() const {
+ return drag_and_drop_selection_enabled;
+}
+
void TextEdit::set_override_selected_font_color(bool p_override_selected_font_color) {
override_selected_font_color = p_override_selected_font_color;
}
@@ -5243,6 +5251,9 @@ void TextEdit::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_deselect_on_focus_loss_enabled", "enable"), &TextEdit::set_deselect_on_focus_loss_enabled);
ClassDB::bind_method(D_METHOD("is_deselect_on_focus_loss_enabled"), &TextEdit::is_deselect_on_focus_loss_enabled);
+ ClassDB::bind_method(D_METHOD("set_drag_and_drop_selection_enabled", "enable"), &TextEdit::set_drag_and_drop_selection_enabled);
+ ClassDB::bind_method(D_METHOD("is_drag_and_drop_selection_enabled"), &TextEdit::is_drag_and_drop_selection_enabled);
+
ClassDB::bind_method(D_METHOD("set_override_selected_font_color", "override"), &TextEdit::set_override_selected_font_color);
ClassDB::bind_method(D_METHOD("is_overriding_selected_font_color"), &TextEdit::is_overriding_selected_font_color);
@@ -5405,6 +5416,7 @@ void TextEdit::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "shortcut_keys_enabled"), "set_shortcut_keys_enabled", "is_shortcut_keys_enabled");
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::BOOL, "drag_and_drop_selection_enabled"), "set_drag_and_drop_selection_enabled", "is_drag_and_drop_selection_enabled");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "virtual_keyboard_enabled"), "set_virtual_keyboard_enabled", "is_virtual_keyboard_enabled");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "middle_mouse_paste_enabled"), "set_middle_mouse_paste_enabled", "is_middle_mouse_paste_enabled");
ADD_PROPERTY(PropertyInfo(Variant::INT, "wrap_mode", PROPERTY_HINT_ENUM, "None,Boundary"), "set_line_wrapping_mode", "get_line_wrapping_mode");
diff --git a/scene/gui/text_edit.h b/scene/gui/text_edit.h
index 993203bee6..9de2982d0a 100644
--- a/scene/gui/text_edit.h
+++ b/scene/gui/text_edit.h
@@ -422,6 +422,7 @@ private:
bool selecting_enabled = true;
bool deselect_on_focus_loss_enabled = true;
+ bool drag_and_drop_selection_enabled = true;
Color font_selected_color = Color(1, 1, 1);
Color selection_color = Color(1, 1, 1);
@@ -795,6 +796,9 @@ public:
void set_deselect_on_focus_loss_enabled(const bool p_enabled);
bool is_deselect_on_focus_loss_enabled() const;
+ void set_drag_and_drop_selection_enabled(const bool p_enabled);
+ bool is_drag_and_drop_selection_enabled() const;
+
void set_override_selected_font_color(bool p_override_selected_font_color);
bool is_overriding_selected_font_color() const;
diff --git a/scene/gui/video_stream_player.cpp b/scene/gui/video_stream_player.cpp
index 122e36904b..86334882fa 100644
--- a/scene/gui/video_stream_player.cpp
+++ b/scene/gui/video_stream_player.cpp
@@ -174,6 +174,28 @@ void VideoStreamPlayer::_notification(int p_notification) {
Size2 s = expand ? get_size() : texture->get_size();
draw_texture_rect(texture, Rect2(Point2(), s), false);
} break;
+
+ case NOTIFICATION_PAUSED: {
+ if (is_playing() && !is_paused()) {
+ paused_from_tree = true;
+ if (playback.is_valid()) {
+ playback->set_paused(true);
+ set_process_internal(false);
+ }
+ last_audio_time = 0;
+ }
+ } break;
+
+ case NOTIFICATION_UNPAUSED: {
+ if (paused_from_tree) {
+ paused_from_tree = false;
+ if (playback.is_valid()) {
+ playback->set_paused(false);
+ set_process_internal(true);
+ }
+ last_audio_time = 0;
+ }
+ } break;
}
}
@@ -255,6 +277,10 @@ void VideoStreamPlayer::play() {
playback->play();
set_process_internal(true);
last_audio_time = 0;
+
+ if (!can_process()) {
+ _notification(NOTIFICATION_PAUSED);
+ }
}
void VideoStreamPlayer::stop() {
@@ -281,6 +307,14 @@ bool VideoStreamPlayer::is_playing() const {
void VideoStreamPlayer::set_paused(bool p_paused) {
paused = p_paused;
+ if (!p_paused && !can_process()) {
+ paused_from_tree = true;
+ return;
+ } else if (p_paused && paused_from_tree) {
+ paused_from_tree = false;
+ return;
+ }
+
if (playback.is_valid()) {
playback->set_paused(p_paused);
set_process_internal(!p_paused);
diff --git a/scene/gui/video_stream_player.h b/scene/gui/video_stream_player.h
index 130b2901f1..d2822a989b 100644
--- a/scene/gui/video_stream_player.h
+++ b/scene/gui/video_stream_player.h
@@ -60,6 +60,7 @@ class VideoStreamPlayer : public Control {
int wait_resampler_limit = 2;
bool paused = false;
+ bool paused_from_tree = false;
bool autoplay = false;
float volume = 1.0;
double last_audio_time = 0.0;
diff --git a/scene/main/canvas_item.cpp b/scene/main/canvas_item.cpp
index 20f3f82a4e..3dc358a6c2 100644
--- a/scene/main/canvas_item.cpp
+++ b/scene/main/canvas_item.cpp
@@ -239,7 +239,7 @@ void CanvasItem::_enter_canvas() {
get_viewport()->gui_reset_canvas_sort_index();
}
- get_tree()->call_group_flags(SceneTree::GROUP_CALL_UNIQUE, group, SNAME("_top_level_raise_self"));
+ get_tree()->call_group_flags(SceneTree::GROUP_CALL_UNIQUE | SceneTree::GROUP_CALL_DEFERRED, group, SNAME("_top_level_raise_self"));
} else {
CanvasItem *parent = get_parent_item();
@@ -320,7 +320,7 @@ void CanvasItem::_notification(int p_what) {
}
if (group != StringName()) {
- get_tree()->call_group_flags(SceneTree::GROUP_CALL_UNIQUE, group, "_top_level_raise_self");
+ get_tree()->call_group_flags(SceneTree::GROUP_CALL_UNIQUE | SceneTree::GROUP_CALL_DEFERRED, group, "_top_level_raise_self");
} else {
CanvasItem *p = get_parent_item();
ERR_FAIL_COND(!p);
diff --git a/scene/main/node.cpp b/scene/main/node.cpp
index 27f240164c..545ff68b72 100644
--- a/scene/main/node.cpp
+++ b/scene/main/node.cpp
@@ -300,7 +300,7 @@ void Node::_propagate_exit_tree() {
if (data.parent) {
Variant c = this;
const Variant *cptr = &c;
- data.parent->emit_signalp(SNAME("child_exited_tree"), &cptr, 1);
+ data.parent->emit_signalp(SNAME("child_exiting_tree"), &cptr, 1);
}
// exit groups
@@ -384,11 +384,7 @@ void Node::_move_child(Node *p_child, int p_pos, bool p_ignore_end) {
for (int i = motion_from; i <= motion_to; i++) {
data.children[i]->notification(NOTIFICATION_MOVED_IN_PARENT);
}
- for (const KeyValue<StringName, GroupData> &E : p_child->data.grouped) {
- if (E.value.group) {
- E.value.group->changed = true;
- }
- }
+ p_child->_propagate_groups_dirty();
data.blocked--;
}
@@ -408,6 +404,18 @@ void Node::raise() {
}
}
+void Node::_propagate_groups_dirty() {
+ for (const KeyValue<StringName, GroupData> &E : data.grouped) {
+ if (E.value.group) {
+ E.value.group->changed = true;
+ }
+ }
+
+ for (int i = 0; i < data.children.size(); i++) {
+ data.children[i]->_propagate_groups_dirty();
+ }
+}
+
void Node::add_child_notify(Node *p_child) {
// to be used when not wanted
}
@@ -420,6 +428,9 @@ void Node::move_child_notify(Node *p_child) {
// to be used when not wanted
}
+void Node::owner_changed_notify() {
+}
+
void Node::set_physics_process(bool p_process) {
if (data.physics_process == p_process) {
return;
@@ -1544,6 +1555,8 @@ void Node::_set_owner_nocheck(Node *p_owner) {
data.owner = p_owner;
data.owner->data.owned.push_back(this);
data.OW = data.owner->data.owned.back();
+
+ owner_changed_notify();
}
void Node::_release_unique_name_in_owner() {
@@ -2973,7 +2986,7 @@ void Node::_bind_methods() {
ADD_SIGNAL(MethodInfo("tree_exiting"));
ADD_SIGNAL(MethodInfo("tree_exited"));
ADD_SIGNAL(MethodInfo("child_entered_tree", PropertyInfo(Variant::OBJECT, "node", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT, "Node")));
- ADD_SIGNAL(MethodInfo("child_exited_tree", PropertyInfo(Variant::OBJECT, "node", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT, "Node")));
+ ADD_SIGNAL(MethodInfo("child_exiting_tree", PropertyInfo(Variant::OBJECT, "node", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT, "Node")));
ADD_PROPERTY(PropertyInfo(Variant::STRING_NAME, "name", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NONE), "set_name", "get_name");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "unique_name_in_owner", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR), "set_unique_name_in_owner", "is_unique_name_in_owner");
diff --git a/scene/main/node.h b/scene/main/node.h
index 8de6c1ce69..3c4727f11c 100644
--- a/scene/main/node.h
+++ b/scene/main/node.h
@@ -174,6 +174,7 @@ private:
void _propagate_after_exit_tree();
void _print_orphan_nodes();
void _propagate_process_owner(Node *p_owner, int p_pause_notification, int p_enabled_notification);
+ void _propagate_groups_dirty();
Array _get_node_and_resource(const NodePath &p_path);
void _duplicate_signals(const Node *p_original, Node *p_copy) const;
@@ -208,6 +209,7 @@ protected:
virtual void add_child_notify(Node *p_child);
virtual void remove_child_notify(Node *p_child);
virtual void move_child_notify(Node *p_child);
+ virtual void owner_changed_notify();
void _propagate_replace_owner(Node *p_owner, Node *p_by_owner);
diff --git a/scene/main/scene_tree.cpp b/scene/main/scene_tree.cpp
index abb817c93d..18f69ecc82 100644
--- a/scene/main/scene_tree.cpp
+++ b/scene/main/scene_tree.cpp
@@ -386,7 +386,7 @@ void SceneTree::set_group_flags(uint32_t p_call_flags, const StringName &p_group
}
void SceneTree::notify_group(const StringName &p_group, int p_notification) {
- notify_group_flags(0, p_group, p_notification);
+ notify_group_flags(GROUP_CALL_DEFAULT, p_group, p_notification);
}
void SceneTree::set_group(const StringName &p_group, const String &p_name, const Variant &p_value) {
diff --git a/scene/main/window.cpp b/scene/main/window.cpp
index 1d697a2176..73e8f537d9 100644
--- a/scene/main/window.cpp
+++ b/scene/main/window.cpp
@@ -111,31 +111,19 @@ Size2i Window::get_real_size() const {
void Window::set_max_size(const Size2i &p_max_size) {
max_size = p_max_size;
- if (window_id != DisplayServer::INVALID_WINDOW_ID) {
- DisplayServer::get_singleton()->window_set_max_size(max_size, window_id);
- }
_update_window_size();
}
Size2i Window::get_max_size() const {
- if (window_id != DisplayServer::INVALID_WINDOW_ID) {
- max_size = DisplayServer::get_singleton()->window_get_max_size(window_id);
- }
return max_size;
}
void Window::set_min_size(const Size2i &p_min_size) {
min_size = p_min_size;
- if (!wrap_controls && window_id != DisplayServer::INVALID_WINDOW_ID) {
- DisplayServer::get_singleton()->window_set_min_size(min_size, window_id);
- }
_update_window_size();
}
Size2i Window::get_min_size() const {
- if (window_id != DisplayServer::INVALID_WINDOW_ID) {
- min_size = DisplayServer::get_singleton()->window_get_min_size(window_id);
- }
return min_size;
}
@@ -166,7 +154,7 @@ void Window::set_flag(Flags p_flag, bool p_enabled) {
} else if (window_id != DisplayServer::INVALID_WINDOW_ID) {
#ifdef TOOLS_ENABLED
- if ((p_flag != FLAG_POPUP) || !(Engine::get_singleton()->is_editor_hint() && get_tree()->get_edited_scene_root() && get_tree()->get_edited_scene_root()->is_ancestor_of(this))) {
+ if ((p_flag != FLAG_POPUP) || !(Engine::get_singleton()->is_editor_hint() && get_tree()->get_edited_scene_root() && (get_tree()->get_edited_scene_root()->is_ancestor_of(this) || get_tree()->get_edited_scene_root() == this))) {
DisplayServer::get_singleton()->window_set_flag(DisplayServer::WindowFlags(p_flag), p_enabled, window_id);
}
#else
@@ -179,7 +167,7 @@ bool Window::get_flag(Flags p_flag) const {
ERR_FAIL_INDEX_V(p_flag, FLAG_MAX, false);
if (window_id != DisplayServer::INVALID_WINDOW_ID) {
#ifdef TOOLS_ENABLED
- if ((p_flag != FLAG_POPUP) || !(Engine::get_singleton()->is_editor_hint() && get_tree()->get_edited_scene_root() && get_tree()->get_edited_scene_root()->is_ancestor_of(this))) {
+ if ((p_flag != FLAG_POPUP) || !(Engine::get_singleton()->is_editor_hint() && get_tree()->get_edited_scene_root() && (get_tree()->get_edited_scene_root()->is_ancestor_of(this) || get_tree()->get_edited_scene_root() == this))) {
flags[p_flag] = DisplayServer::get_singleton()->window_get_flag(DisplayServer::WindowFlags(p_flag), window_id);
}
#else
@@ -268,7 +256,7 @@ void Window::_make_window() {
DisplayServer::get_singleton()->window_set_title(tr_title, window_id);
DisplayServer::get_singleton()->window_attach_instance_id(get_instance_id(), window_id);
#ifdef TOOLS_ENABLED
- if (!(Engine::get_singleton()->is_editor_hint() && get_tree()->get_edited_scene_root() && get_tree()->get_edited_scene_root()->is_ancestor_of(this))) {
+ if (!(Engine::get_singleton()->is_editor_hint() && get_tree()->get_edited_scene_root() && (get_tree()->get_edited_scene_root()->is_ancestor_of(this) || get_tree()->get_edited_scene_root() == this))) {
DisplayServer::get_singleton()->window_set_exclusive(window_id, exclusive);
} else {
DisplayServer::get_singleton()->window_set_exclusive(window_id, false);
@@ -457,7 +445,7 @@ void Window::set_visible(bool p_visible) {
if (transient_parent) {
if (exclusive && visible) {
#ifdef TOOLS_ENABLED
- if (!(Engine::get_singleton()->is_editor_hint() && get_tree()->get_edited_scene_root() && get_tree()->get_edited_scene_root()->is_ancestor_of(this))) {
+ if (!(Engine::get_singleton()->is_editor_hint() && get_tree()->get_edited_scene_root() && (get_tree()->get_edited_scene_root()->is_ancestor_of(this) || get_tree()->get_edited_scene_root() == this))) {
ERR_FAIL_COND_MSG(transient_parent->exclusive_child && transient_parent->exclusive_child != this, "Transient parent has another exclusive child.");
transient_parent->exclusive_child = this;
}
@@ -511,7 +499,7 @@ void Window::_make_transient() {
if (is_inside_tree() && is_visible() && exclusive) {
if (transient_parent->exclusive_child == nullptr) {
#ifdef TOOLS_ENABLED
- if (!(Engine::get_singleton()->is_editor_hint() && get_tree()->get_edited_scene_root() && get_tree()->get_edited_scene_root()->is_ancestor_of(this))) {
+ if (!(Engine::get_singleton()->is_editor_hint() && get_tree()->get_edited_scene_root() && (get_tree()->get_edited_scene_root()->is_ancestor_of(this) || get_tree()->get_edited_scene_root() == this))) {
transient_parent->exclusive_child = this;
}
#else
@@ -560,7 +548,7 @@ void Window::set_exclusive(bool p_exclusive) {
if (!embedder && window_id != DisplayServer::INVALID_WINDOW_ID) {
#ifdef TOOLS_ENABLED
- if (!(Engine::get_singleton()->is_editor_hint() && get_tree()->get_edited_scene_root() && get_tree()->get_edited_scene_root()->is_ancestor_of(this))) {
+ if (!(Engine::get_singleton()->is_editor_hint() && get_tree()->get_edited_scene_root() && (get_tree()->get_edited_scene_root()->is_ancestor_of(this) || get_tree()->get_edited_scene_root() == this))) {
DisplayServer::get_singleton()->window_set_exclusive(window_id, exclusive);
} else {
DisplayServer::get_singleton()->window_set_exclusive(window_id, false);
@@ -574,7 +562,7 @@ void Window::set_exclusive(bool p_exclusive) {
if (p_exclusive && is_inside_tree() && is_visible()) {
ERR_FAIL_COND_MSG(transient_parent->exclusive_child && transient_parent->exclusive_child != this, "Transient parent has another exclusive child.");
#ifdef TOOLS_ENABLED
- if (!(Engine::get_singleton()->is_editor_hint() && get_tree()->get_edited_scene_root() && get_tree()->get_edited_scene_root()->is_ancestor_of(this))) {
+ if (!(Engine::get_singleton()->is_editor_hint() && get_tree()->get_edited_scene_root() && (get_tree()->get_edited_scene_root()->is_ancestor_of(this) || get_tree()->get_edited_scene_root() == this))) {
transient_parent->exclusive_child = this;
}
#else
@@ -621,6 +609,7 @@ void Window::_update_window_size() {
} else if (window_id != DisplayServer::INVALID_WINDOW_ID) {
DisplayServer::get_singleton()->window_set_size(size, window_id);
DisplayServer::get_singleton()->window_set_min_size(size_limit, window_id);
+ DisplayServer::get_singleton()->window_set_max_size(max_size, window_id);
}
//update the viewport
@@ -833,6 +822,22 @@ void Window::_notification(int p_what) {
emit_signal(SceneStringNames::get_singleton()->visibility_changed);
RS::get_singleton()->viewport_set_active(get_viewport_rid(), true);
}
+
+ if (theme.is_null()) {
+ Control *parent_c = cast_to<Control>(get_parent());
+ if (parent_c && (parent_c->data.theme_owner || parent_c->data.theme_owner_window)) {
+ theme_owner = parent_c->data.theme_owner;
+ theme_owner_window = parent_c->data.theme_owner_window;
+ notification(NOTIFICATION_THEME_CHANGED);
+ } else {
+ Window *parent_w = cast_to<Window>(get_parent());
+ if (parent_w && (parent_w->theme_owner || parent_w->theme_owner_window)) {
+ theme_owner = parent_w->theme_owner;
+ theme_owner_window = parent_w->theme_owner_window;
+ notification(NOTIFICATION_THEME_CHANGED);
+ }
+ }
+ }
} break;
case NOTIFICATION_READY: {
@@ -1153,7 +1158,7 @@ void Window::popup(const Rect2i &p_screen_rect) {
// Send a focus-out notification when opening a Window Manager Popup.
SceneTree *scene_tree = get_tree();
if (scene_tree) {
- scene_tree->notify_group("_viewports", NOTIFICATION_WM_WINDOW_FOCUS_OUT);
+ scene_tree->notify_group_flags(SceneTree::GROUP_CALL_DEFERRED, "_viewports", NOTIFICATION_WM_WINDOW_FOCUS_OUT);
}
}
diff --git a/scene/resources/animation.cpp b/scene/resources/animation.cpp
index 8ae4872d14..7183accc66 100644
--- a/scene/resources/animation.cpp
+++ b/scene/resources/animation.cpp
@@ -3379,17 +3379,6 @@ Vector2 Animation::bezier_track_get_key_out_handle(int p_track, int p_index) con
return bt->values[p_index].value.out_handle;
}
-static _FORCE_INLINE_ Vector2 _bezier_interp(real_t t, const Vector2 &start, const Vector2 &control_1, const Vector2 &control_2, const Vector2 &end) {
- /* Formula from Wikipedia article on Bezier curves. */
- real_t omt = (1.0 - t);
- real_t omt2 = omt * omt;
- real_t omt3 = omt2 * omt;
- real_t t2 = t * t;
- real_t t3 = t2 * t;
-
- return start * omt3 + control_1 * omt2 * t * 3.0 + control_2 * omt * t2 * 3.0 + end * t3;
-}
-
real_t Animation::bezier_track_interpolate(int p_track, double p_time) const {
//this uses a different interpolation scheme
ERR_FAIL_INDEX_V(p_track, tracks.size(), 0);
@@ -3438,7 +3427,7 @@ real_t Animation::bezier_track_interpolate(int p_track, double p_time) const {
for (int i = 0; i < iterations; i++) {
real_t middle = (low + high) / 2;
- Vector2 interp = _bezier_interp(middle, start, start_out, end_in, end);
+ Vector2 interp = start.bezier_interpolate(start_out, end_in, end, middle);
if (interp.x < t) {
low = middle;
@@ -3448,8 +3437,8 @@ real_t Animation::bezier_track_interpolate(int p_track, double p_time) const {
}
//interpolate the result:
- Vector2 low_pos = _bezier_interp(low, start, start_out, end_in, end);
- Vector2 high_pos = _bezier_interp(high, start, start_out, end_in, end);
+ Vector2 low_pos = start.bezier_interpolate(start_out, end_in, end, low);
+ Vector2 high_pos = start.bezier_interpolate(start_out, end_in, end, high);
real_t c = (t - low_pos.x) / (high_pos.x - low_pos.x);
return low_pos.lerp(high_pos, c).y;
diff --git a/scene/resources/canvas_item_material.h b/scene/resources/canvas_item_material.h
index 7c44c125a8..160c67d6b1 100644
--- a/scene/resources/canvas_item_material.h
+++ b/scene/resources/canvas_item_material.h
@@ -64,7 +64,7 @@ private:
uint32_t key = 0;
static uint32_t hash(const MaterialKey &p_key) {
- return hash_djb2_one_32(p_key.key);
+ return hash_murmur3_one_32(p_key.key);
}
bool operator==(const MaterialKey &p_key) const {
return key == p_key.key;
diff --git a/scene/resources/concave_polygon_shape_3d.h b/scene/resources/concave_polygon_shape_3d.h
index 4711e38468..a265590edd 100644
--- a/scene/resources/concave_polygon_shape_3d.h
+++ b/scene/resources/concave_polygon_shape_3d.h
@@ -43,8 +43,8 @@ class ConcavePolygonShape3D : public Shape3D {
Vector3 a;
Vector3 b;
static uint32_t hash(const DrawEdge &p_edge) {
- uint32_t h = hash_djb2_one_32(HashMapHasherDefault::hash(p_edge.a));
- return hash_djb2_one_32(HashMapHasherDefault::hash(p_edge.b), h);
+ uint32_t h = hash_murmur3_one_32(HashMapHasherDefault::hash(p_edge.a));
+ return hash_murmur3_one_32(HashMapHasherDefault::hash(p_edge.b), h);
}
bool operator==(const DrawEdge &p_edge) const {
return (a == p_edge.a && b == p_edge.b);
diff --git a/scene/resources/curve.cpp b/scene/resources/curve.cpp
index c99f71b13e..da26a0261f 100644
--- a/scene/resources/curve.cpp
+++ b/scene/resources/curve.cpp
@@ -32,18 +32,6 @@
#include "core/core_string_names.h"
-template <class T>
-static _FORCE_INLINE_ T _bezier_interp(real_t p_t, T p_start, T p_control_1, T p_control_2, T p_end) {
- /* Formula from Wikipedia article on Bezier curves. */
- real_t omt = (1.0 - p_t);
- real_t omt2 = omt * omt;
- real_t omt3 = omt2 * omt;
- real_t t2 = p_t * p_t;
- real_t t3 = t2 * p_t;
-
- return p_start * omt3 + p_control_1 * omt2 * p_t * 3.0 + p_control_2 * omt * t2 * 3.0 + p_end * t3;
-}
-
const char *Curve::SIGNAL_RANGE_CHANGED = "range_changed";
Curve::Curve() {
@@ -56,12 +44,13 @@ void Curve::set_point_count(int p_count) {
mark_dirty();
} else {
for (int i = p_count - _points.size(); i > 0; i--) {
- add_point(Vector2());
+ _add_point(Vector2());
}
}
+ notify_property_list_changed();
}
-int Curve::add_point(Vector2 p_position, real_t p_left_tangent, real_t p_right_tangent, TangentMode p_left_mode, TangentMode p_right_mode) {
+int Curve::_add_point(Vector2 p_position, real_t p_left_tangent, real_t p_right_tangent, TangentMode p_left_mode, TangentMode p_right_mode) {
// Add a point and preserve order
// Curve bounds is in 0..1
@@ -112,6 +101,13 @@ int Curve::add_point(Vector2 p_position, real_t p_left_tangent, real_t p_right_t
return ret;
}
+int Curve::add_point(Vector2 p_position, real_t p_left_tangent, real_t p_right_tangent, TangentMode p_left_mode, TangentMode p_right_mode) {
+ int ret = _add_point(p_position, p_left_tangent, p_right_tangent, p_left_mode, p_right_mode);
+ notify_property_list_changed();
+
+ return ret;
+}
+
int Curve::get_index(real_t p_offset) const {
// Lower-bound float binary search
@@ -217,15 +213,21 @@ Curve::TangentMode Curve::get_point_right_mode(int p_index) const {
return _points[p_index].right_mode;
}
-void Curve::remove_point(int p_index) {
+void Curve::_remove_point(int p_index) {
ERR_FAIL_INDEX(p_index, _points.size());
_points.remove_at(p_index);
mark_dirty();
}
+void Curve::remove_point(int p_index) {
+ _remove_point(p_index);
+ notify_property_list_changed();
+}
+
void Curve::clear_points() {
_points.clear();
mark_dirty();
+ notify_property_list_changed();
}
void Curve::set_point_value(int p_index, real_t p_position) {
@@ -238,8 +240,8 @@ void Curve::set_point_value(int p_index, real_t p_position) {
int Curve::set_point_offset(int p_index, real_t p_offset) {
ERR_FAIL_INDEX_V(p_index, _points.size(), -1);
Point p = _points[p_index];
- remove_point(p_index);
- int i = add_point(Vector2(p_offset, p.position.y));
+ _remove_point(p_index);
+ int i = _add_point(Vector2(p_offset, p.position.y));
_points.write[i].left_tangent = p.left_tangent;
_points.write[i].right_tangent = p.right_tangent;
_points.write[i].left_mode = p.left_mode;
@@ -362,7 +364,7 @@ real_t Curve::interpolate_local_nocheck(int p_index, real_t p_local_offset) cons
real_t yac = a.position.y + d * a.right_tangent;
real_t ybc = b.position.y - d * b.left_tangent;
- real_t y = _bezier_interp(p_local_offset, a.position.y, yac, ybc, b.position.y);
+ real_t y = Math::bezier_interpolate(a.position.y, yac, ybc, b.position.y, p_local_offset);
return y;
}
@@ -370,7 +372,6 @@ real_t Curve::interpolate_local_nocheck(int p_index, real_t p_local_offset) cons
void Curve::mark_dirty() {
_baked_cache_dirty = true;
emit_signal(CoreStringNames::get_singleton()->changed);
- notify_property_list_changed();
}
Array Curve::get_data() const {
@@ -429,6 +430,7 @@ void Curve::set_data(const Array p_input) {
}
mark_dirty();
+ notify_property_list_changed();
}
void Curve::bake() {
@@ -636,16 +638,15 @@ void Curve2D::set_point_count(int p_count) {
if (points.size() >= p_count) {
points.resize(p_count);
mark_dirty();
- baked_cache_dirty = true;
- emit_signal(CoreStringNames::get_singleton()->changed);
} else {
for (int i = p_count - points.size(); i > 0; i--) {
- add_point(Vector2());
+ _add_point(Vector2());
}
}
+ notify_property_list_changed();
}
-void Curve2D::add_point(const Vector2 &p_position, const Vector2 &p_in, const Vector2 &p_out, int p_atpos) {
+void Curve2D::_add_point(const Vector2 &p_position, const Vector2 &p_in, const Vector2 &p_out, int p_atpos) {
Point n;
n.position = p_position;
n.in = p_in;
@@ -659,6 +660,11 @@ void Curve2D::add_point(const Vector2 &p_position, const Vector2 &p_in, const Ve
mark_dirty();
}
+void Curve2D::add_point(const Vector2 &p_position, const Vector2 &p_in, const Vector2 &p_out, int p_atpos) {
+ _add_point(p_position, p_in, p_out, p_atpos);
+ notify_property_list_changed();
+}
+
void Curve2D::set_point_position(int p_index, const Vector2 &p_position) {
ERR_FAIL_INDEX(p_index, points.size());
@@ -695,16 +701,22 @@ Vector2 Curve2D::get_point_out(int p_index) const {
return points[p_index].out;
}
-void Curve2D::remove_point(int p_index) {
+void Curve2D::_remove_point(int p_index) {
ERR_FAIL_INDEX(p_index, points.size());
points.remove_at(p_index);
mark_dirty();
}
+void Curve2D::remove_point(int p_index) {
+ _remove_point(p_index);
+ notify_property_list_changed();
+}
+
void Curve2D::clear_points() {
if (!points.is_empty()) {
points.clear();
mark_dirty();
+ notify_property_list_changed();
}
}
@@ -723,7 +735,7 @@ Vector2 Curve2D::interpolate(int p_index, const real_t p_offset) const {
Vector2 p3 = points[p_index + 1].position;
Vector2 p2 = p3 + points[p_index + 1].in;
- return _bezier_interp(p_offset, p0, p1, p2, p3);
+ return p0.bezier_interpolate(p1, p2, p3, p_offset);
}
Vector2 Curve2D::interpolatef(real_t p_findex) const {
@@ -739,14 +751,13 @@ Vector2 Curve2D::interpolatef(real_t p_findex) const {
void Curve2D::mark_dirty() {
baked_cache_dirty = true;
emit_signal(CoreStringNames::get_singleton()->changed);
- notify_property_list_changed();
}
void Curve2D::_bake_segment2d(RBMap<real_t, Vector2> &r_bake, real_t p_begin, real_t p_end, const Vector2 &p_a, const Vector2 &p_out, const Vector2 &p_b, const Vector2 &p_in, int p_depth, int p_max_depth, real_t p_tol) const {
real_t mp = p_begin + (p_end - p_begin) * 0.5;
- Vector2 beg = _bezier_interp(p_begin, p_a, p_a + p_out, p_b + p_in, p_b);
- Vector2 mid = _bezier_interp(mp, p_a, p_a + p_out, p_b + p_in, p_b);
- Vector2 end = _bezier_interp(p_end, p_a, p_a + p_out, p_b + p_in, p_b);
+ Vector2 beg = p_a.bezier_interpolate(p_a + p_out, p_b + p_in, p_b, p_begin);
+ Vector2 mid = p_a.bezier_interpolate(p_a + p_out, p_b + p_in, p_b, mp);
+ Vector2 end = p_a.bezier_interpolate(p_a + p_out, p_b + p_in, p_b, p_end);
Vector2 na = (mid - beg).normalized();
Vector2 nb = (end - mid).normalized();
@@ -805,7 +816,7 @@ void Curve2D::_bake() const {
np = 1.0;
}
- Vector2 npp = _bezier_interp(np, points[i].position, points[i].position + points[i].out, points[i + 1].position + points[i + 1].in, points[i + 1].position);
+ Vector2 npp = points[i].position.bezier_interpolate(points[i].position + points[i].out, points[i + 1].position + points[i + 1].in, points[i + 1].position, np);
real_t d = position.distance_to(npp);
if (d > bake_interval) {
@@ -818,7 +829,7 @@ void Curve2D::_bake() const {
real_t mid = low + (hi - low) * 0.5;
for (int j = 0; j < iterations; j++) {
- npp = _bezier_interp(mid, points[i].position, points[i].position + points[i].out, points[i + 1].position + points[i + 1].in, points[i + 1].position);
+ npp = points[i].position.bezier_interpolate(points[i].position + points[i].out, points[i + 1].position + points[i + 1].in, points[i + 1].position, mid);
d = position.distance_to(npp);
if (bake_interval < d) {
@@ -1054,7 +1065,8 @@ void Curve2D::_set_data(const Dictionary &p_data) {
points.write[i].position = r[i * 3 + 2];
}
- baked_cache_dirty = true;
+ mark_dirty();
+ notify_property_list_changed();
}
PackedVector2Array Curve2D::tessellate(int p_max_stages, real_t p_tolerance) const {
@@ -1205,12 +1217,13 @@ void Curve3D::set_point_count(int p_count) {
mark_dirty();
} else {
for (int i = p_count - points.size(); i > 0; i--) {
- add_point(Vector3());
+ _add_point(Vector3());
}
}
+ notify_property_list_changed();
}
-void Curve3D::add_point(const Vector3 &p_position, const Vector3 &p_in, const Vector3 &p_out, int p_atpos) {
+void Curve3D::_add_point(const Vector3 &p_position, const Vector3 &p_in, const Vector3 &p_out, int p_atpos) {
Point n;
n.position = p_position;
n.in = p_in;
@@ -1224,6 +1237,11 @@ void Curve3D::add_point(const Vector3 &p_position, const Vector3 &p_in, const Ve
mark_dirty();
}
+void Curve3D::add_point(const Vector3 &p_position, const Vector3 &p_in, const Vector3 &p_out, int p_atpos) {
+ _add_point(p_position, p_in, p_out, p_atpos);
+ notify_property_list_changed();
+}
+
void Curve3D::set_point_position(int p_index, const Vector3 &p_position) {
ERR_FAIL_INDEX(p_index, points.size());
@@ -1272,16 +1290,22 @@ Vector3 Curve3D::get_point_out(int p_index) const {
return points[p_index].out;
}
-void Curve3D::remove_point(int p_index) {
+void Curve3D::_remove_point(int p_index) {
ERR_FAIL_INDEX(p_index, points.size());
points.remove_at(p_index);
mark_dirty();
}
+void Curve3D::remove_point(int p_index) {
+ _remove_point(p_index);
+ notify_property_list_changed();
+}
+
void Curve3D::clear_points() {
if (!points.is_empty()) {
points.clear();
mark_dirty();
+ notify_property_list_changed();
}
}
@@ -1300,7 +1324,7 @@ Vector3 Curve3D::interpolate(int p_index, real_t p_offset) const {
Vector3 p3 = points[p_index + 1].position;
Vector3 p2 = p3 + points[p_index + 1].in;
- return _bezier_interp(p_offset, p0, p1, p2, p3);
+ return p0.bezier_interpolate(p1, p2, p3, p_offset);
}
Vector3 Curve3D::interpolatef(real_t p_findex) const {
@@ -1316,14 +1340,13 @@ Vector3 Curve3D::interpolatef(real_t p_findex) const {
void Curve3D::mark_dirty() {
baked_cache_dirty = true;
emit_signal(CoreStringNames::get_singleton()->changed);
- notify_property_list_changed();
}
void Curve3D::_bake_segment3d(RBMap<real_t, Vector3> &r_bake, real_t p_begin, real_t p_end, const Vector3 &p_a, const Vector3 &p_out, const Vector3 &p_b, const Vector3 &p_in, int p_depth, int p_max_depth, real_t p_tol) const {
real_t mp = p_begin + (p_end - p_begin) * 0.5;
- Vector3 beg = _bezier_interp(p_begin, p_a, p_a + p_out, p_b + p_in, p_b);
- Vector3 mid = _bezier_interp(mp, p_a, p_a + p_out, p_b + p_in, p_b);
- Vector3 end = _bezier_interp(p_end, p_a, p_a + p_out, p_b + p_in, p_b);
+ Vector3 beg = p_a.bezier_interpolate(p_a + p_out, p_b + p_in, p_b, p_begin);
+ Vector3 mid = p_a.bezier_interpolate(p_a + p_out, p_b + p_in, p_b, mp);
+ Vector3 end = p_a.bezier_interpolate(p_a + p_out, p_b + p_in, p_b, p_end);
Vector3 na = (mid - beg).normalized();
Vector3 nb = (end - mid).normalized();
@@ -1391,7 +1414,7 @@ void Curve3D::_bake() const {
np = 1.0;
}
- Vector3 npp = _bezier_interp(np, points[i].position, points[i].position + points[i].out, points[i + 1].position + points[i + 1].in, points[i + 1].position);
+ Vector3 npp = points[i].position.bezier_interpolate(points[i].position + points[i].out, points[i + 1].position + points[i + 1].in, points[i + 1].position, np);
real_t d = position.distance_to(npp);
if (d > bake_interval) {
@@ -1404,7 +1427,7 @@ void Curve3D::_bake() const {
real_t mid = low + (hi - low) * 0.5;
for (int j = 0; j < iterations; j++) {
- npp = _bezier_interp(mid, points[i].position, points[i].position + points[i].out, points[i + 1].position + points[i + 1].in, points[i + 1].position);
+ npp = points[i].position.bezier_interpolate(points[i].position + points[i].out, points[i + 1].position + points[i + 1].in, points[i + 1].position, mid);
d = position.distance_to(npp);
if (bake_interval < d) {
@@ -1839,7 +1862,8 @@ void Curve3D::_set_data(const Dictionary &p_data) {
points.write[i].tilt = rt[i];
}
- baked_cache_dirty = true;
+ mark_dirty();
+ notify_property_list_changed();
}
PackedVector3Array Curve3D::tessellate(int p_max_stages, real_t p_tolerance) const {
diff --git a/scene/resources/curve.h b/scene/resources/curve.h
index 834e7ffa07..08807b1b6e 100644
--- a/scene/resources/curve.h
+++ b/scene/resources/curve.h
@@ -83,7 +83,6 @@ public:
real_t right_tangent = 0,
TangentMode left_mode = TANGENT_FREE,
TangentMode right_mode = TANGENT_FREE);
-
void remove_point(int p_index);
void clear_points();
@@ -137,6 +136,12 @@ protected:
private:
void mark_dirty();
+ int _add_point(Vector2 p_position,
+ real_t left_tangent = 0,
+ real_t right_tangent = 0,
+ TangentMode left_mode = TANGENT_FREE,
+ TangentMode right_mode = TANGENT_FREE);
+ void _remove_point(int p_index);
Vector<Point> _points;
bool _baked_cache_dirty = false;
@@ -184,6 +189,9 @@ class Curve2D : public Resource {
bool _get(const StringName &p_name, Variant &r_ret) const;
void _get_property_list(List<PropertyInfo> *p_list) const;
+ void _add_point(const Vector2 &p_position, const Vector2 &p_in = Vector2(), const Vector2 &p_out = Vector2(), int p_atpos = -1);
+ void _remove_point(int p_index);
+
protected:
static void _bind_methods();
@@ -256,6 +264,9 @@ class Curve3D : public Resource {
bool _get(const StringName &p_name, Variant &r_ret) const;
void _get_property_list(List<PropertyInfo> *p_list) const;
+ void _add_point(const Vector3 &p_position, const Vector3 &p_in = Vector3(), const Vector3 &p_out = Vector3(), int p_atpos = -1);
+ void _remove_point(int p_index);
+
protected:
static void _bind_methods();
diff --git a/scene/resources/default_theme/default_theme.cpp b/scene/resources/default_theme/default_theme.cpp
index 5fcaf8f2c4..401aeb4889 100644
--- a/scene/resources/default_theme/default_theme.cpp
+++ b/scene/resources/default_theme/default_theme.cpp
@@ -570,7 +570,6 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const
// Window
theme->set_stylebox("embedded_border", "Window", sb_expand(make_flat_stylebox(style_popup_color, 10, 28, 10, 8), 8, 32, 8, 6));
- theme->set_constant("scaleborder_size", "Window", 4 * scale);
theme->set_font("title_font", "Window", Ref<Font>());
theme->set_font_size("title_font_size", "Window", -1);
diff --git a/scene/resources/font.cpp b/scene/resources/font.cpp
index 8a353f4b49..46f23424dd 100644
--- a/scene/resources/font.cpp
+++ b/scene/resources/font.cpp
@@ -2273,7 +2273,7 @@ Size2 Font::get_string_size(const String &p_text, int p_size, HorizontalAlignmen
uint64_t hash = p_text.hash64();
if (p_alignment == HORIZONTAL_ALIGNMENT_FILL) {
- hash = hash_djb2_one_64(hash_djb2_one_float(p_width), hash);
+ hash = hash_djb2_one_64(hash_murmur3_one_float(p_width), hash);
hash = hash_djb2_one_64(p_flags, hash);
}
hash = hash_djb2_one_64(p_size, hash);
@@ -2297,7 +2297,7 @@ Size2 Font::get_multiline_string_size(const String &p_text, float p_width, int p
}
uint64_t hash = p_text.hash64();
- uint64_t wrp_hash = hash_djb2_one_64(hash_djb2_one_float(p_width), hash);
+ uint64_t wrp_hash = hash_djb2_one_64(hash_murmur3_one_float(p_width), hash);
wrp_hash = hash_djb2_one_64(p_flags, wrp_hash);
wrp_hash = hash_djb2_one_64(p_size, wrp_hash);
@@ -2335,7 +2335,7 @@ void Font::draw_string(RID p_canvas_item, const Point2 &p_pos, const String &p_t
uint64_t hash = p_text.hash64();
if (p_alignment == HORIZONTAL_ALIGNMENT_FILL) {
- hash = hash_djb2_one_64(hash_djb2_one_float(p_width), hash);
+ hash = hash_djb2_one_64(hash_murmur3_one_float(p_width), hash);
hash = hash_djb2_one_64(p_flags, hash);
}
hash = hash_djb2_one_64(p_size, hash);
@@ -2374,7 +2374,7 @@ void Font::draw_multiline_string(RID p_canvas_item, const Point2 &p_pos, const S
}
uint64_t hash = p_text.hash64();
- uint64_t wrp_hash = hash_djb2_one_64(hash_djb2_one_float(p_width), hash);
+ uint64_t wrp_hash = hash_djb2_one_64(hash_murmur3_one_float(p_width), hash);
wrp_hash = hash_djb2_one_64(p_flags, wrp_hash);
wrp_hash = hash_djb2_one_64(p_size, wrp_hash);
diff --git a/scene/resources/gradient.h b/scene/resources/gradient.h
index a3d3449099..2b04ead0af 100644
--- a/scene/resources/gradient.h
+++ b/scene/resources/gradient.h
@@ -92,10 +92,6 @@ public:
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);
@@ -161,10 +157,10 @@ public:
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);
+ float r = Math::cubic_interpolate(pointP0.color.r, pointFirst.color.r, pointSecond.color.r, pointP3.color.r, x);
+ float g = Math::cubic_interpolate(pointP0.color.g, pointFirst.color.g, pointSecond.color.g, pointP3.color.g, x);
+ float b = Math::cubic_interpolate(pointP0.color.b, pointFirst.color.b, pointSecond.color.b, pointP3.color.b, x);
+ float a = Math::cubic_interpolate(pointP0.color.a, pointFirst.color.a, pointSecond.color.a, pointP3.color.a, x);
return Color(r, g, b, a);
} break;
diff --git a/scene/resources/importer_mesh.cpp b/scene/resources/importer_mesh.cpp
index 71640357b9..293fdd6f05 100644
--- a/scene/resources/importer_mesh.cpp
+++ b/scene/resources/importer_mesh.cpp
@@ -331,6 +331,7 @@ void ImporterMesh::generate_lods(float p_normal_merge_angle, float p_normal_spli
bool is_uvs_close = (!uvs_ptr || uvs_ptr[j].distance_squared_to(uvs_ptr[idx.second]) < CMP_EPSILON2);
bool is_uv2s_close = (!uv2s_ptr || uv2s_ptr[j].distance_squared_to(uv2s_ptr[idx.second]) < CMP_EPSILON2);
+ ERR_FAIL_INDEX(idx.second, normals.size());
bool is_normals_close = normals[idx.second].dot(n) > normal_merge_threshold;
if (is_uvs_close && is_uv2s_close && is_normals_close) {
vertex_remap.push_back(idx.first);
@@ -1046,6 +1047,10 @@ Error ImporterMesh::lightmap_unwrap_cached(const Transform3D &p_base_transform,
PackedVector3Array rnormals = arrays[Mesh::ARRAY_NORMAL];
+ if (!rnormals.size()) {
+ continue;
+ }
+
int vertex_ofs = vertices.size() / 3;
vertices.resize((vertex_ofs + vc) * 3);
@@ -1086,6 +1091,9 @@ Error ImporterMesh::lightmap_unwrap_cached(const Transform3D &p_base_transform,
} else {
for (int j = 0; j < ic / 3; j++) {
+ ERR_FAIL_INDEX_V(rindices[j * 3 + 0], rvertices.size(), ERR_INVALID_DATA);
+ ERR_FAIL_INDEX_V(rindices[j * 3 + 1], rvertices.size(), ERR_INVALID_DATA);
+ ERR_FAIL_INDEX_V(rindices[j * 3 + 2], rvertices.size(), ERR_INVALID_DATA);
Vector3 p0 = transform.xform(rvertices[rindices[j * 3 + 0]]);
Vector3 p1 = transform.xform(rvertices[rindices[j * 3 + 1]]);
Vector3 p2 = transform.xform(rvertices[rindices[j * 3 + 2]]);
diff --git a/scene/resources/material.cpp b/scene/resources/material.cpp
index fc207d358e..b7a3b677f5 100644
--- a/scene/resources/material.cpp
+++ b/scene/resources/material.cpp
@@ -2209,7 +2209,7 @@ Ref<Material> BaseMaterial3D::get_material_for_2d(bool p_shaded, bool p_transpar
if (p_fixed_size) {
hash |= 1 << 9;
}
- hash = hash_djb2_one_64(p_filter, hash);
+ hash = hash_murmur3_one_64(p_filter, hash);
if (materials_for_2d.has(hash)) {
if (r_shader_rid) {
diff --git a/scene/resources/mesh.cpp b/scene/resources/mesh.cpp
index b8c83ac89e..3e7b0a2808 100644
--- a/scene/resources/mesh.cpp
+++ b/scene/resources/mesh.cpp
@@ -188,7 +188,10 @@ Ref<TriangleMesh> Mesh::generate_triangle_mesh() const {
Vector<Vector3> faces;
faces.resize(faces_size);
+ Vector<int32_t> surface_indices;
+ surface_indices.resize(faces_size / 3);
Vector3 *facesw = faces.ptrw();
+ int32_t *surface_indicesw = surface_indices.ptrw();
int widx = 0;
@@ -210,6 +213,8 @@ Ref<TriangleMesh> Mesh::generate_triangle_mesh() const {
Vector<Vector3> vertices = a[ARRAY_VERTEX];
const Vector3 *vr = vertices.ptr();
+ int32_t from_index = widx / 3;
+
if (surface_get_format(i) & ARRAY_FORMAT_INDEX) {
int ic = surface_get_array_index_len(i);
Vector<int> indices = a[ARRAY_INDEX];
@@ -241,6 +246,12 @@ Ref<TriangleMesh> Mesh::generate_triangle_mesh() const {
}
}
}
+
+ int32_t to_index = widx / 3;
+
+ for (int j = from_index; j < to_index; j++) {
+ surface_indicesw[j] = i;
+ }
}
triangle_mesh = Ref<TriangleMesh>(memnew(TriangleMesh));
diff --git a/scene/resources/navigation_mesh.cpp b/scene/resources/navigation_mesh.cpp
index 784ecc3a4d..a808ead66b 100644
--- a/scene/resources/navigation_mesh.cpp
+++ b/scene/resources/navigation_mesh.cpp
@@ -272,6 +272,24 @@ bool NavigationMesh::get_filter_walkable_low_height_spans() const {
return filter_walkable_low_height_spans;
}
+void NavigationMesh::set_filter_baking_aabb(const AABB &p_aabb) {
+ filter_baking_aabb = p_aabb;
+ notify_property_list_changed();
+}
+
+AABB NavigationMesh::get_filter_baking_aabb() const {
+ return filter_baking_aabb;
+}
+
+void NavigationMesh::set_filter_baking_aabb_offset(const Vector3 &p_aabb_offset) {
+ filter_baking_aabb_offset = p_aabb_offset;
+ notify_property_list_changed();
+}
+
+Vector3 NavigationMesh::get_filter_baking_aabb_offset() const {
+ return filter_baking_aabb_offset;
+}
+
void NavigationMesh::set_vertices(const Vector<Vector3> &p_vertices) {
vertices = p_vertices;
notify_property_list_changed();
@@ -469,6 +487,10 @@ void NavigationMesh::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_filter_walkable_low_height_spans", "filter_walkable_low_height_spans"), &NavigationMesh::set_filter_walkable_low_height_spans);
ClassDB::bind_method(D_METHOD("get_filter_walkable_low_height_spans"), &NavigationMesh::get_filter_walkable_low_height_spans);
+ ClassDB::bind_method(D_METHOD("set_filter_baking_aabb", "baking_aabb"), &NavigationMesh::set_filter_baking_aabb);
+ ClassDB::bind_method(D_METHOD("get_filter_baking_aabb"), &NavigationMesh::get_filter_baking_aabb);
+ ClassDB::bind_method(D_METHOD("set_filter_baking_aabb_offset", "baking_aabb_offset"), &NavigationMesh::set_filter_baking_aabb_offset);
+ ClassDB::bind_method(D_METHOD("get_filter_baking_aabb_offset"), &NavigationMesh::get_filter_baking_aabb_offset);
ClassDB::bind_method(D_METHOD("set_vertices", "vertices"), &NavigationMesh::set_vertices);
ClassDB::bind_method(D_METHOD("get_vertices"), &NavigationMesh::get_vertices);
@@ -516,6 +538,8 @@ void NavigationMesh::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "filter_low_hanging_obstacles"), "set_filter_low_hanging_obstacles", "get_filter_low_hanging_obstacles");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "filter_ledge_spans"), "set_filter_ledge_spans", "get_filter_ledge_spans");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "filter_walkable_low_height_spans"), "set_filter_walkable_low_height_spans", "get_filter_walkable_low_height_spans");
+ ADD_PROPERTY(PropertyInfo(Variant::AABB, "filter_baking_aabb"), "set_filter_baking_aabb", "get_filter_baking_aabb");
+ ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "filter_baking_aabb_offset"), "set_filter_baking_aabb_offset", "get_filter_baking_aabb_offset");
BIND_ENUM_CONSTANT(SAMPLE_PARTITION_WATERSHED);
BIND_ENUM_CONSTANT(SAMPLE_PARTITION_MONOTONE);
diff --git a/scene/resources/navigation_mesh.h b/scene/resources/navigation_mesh.h
index 93c1c11876..40b275c792 100644
--- a/scene/resources/navigation_mesh.h
+++ b/scene/resources/navigation_mesh.h
@@ -117,6 +117,8 @@ protected:
bool filter_low_hanging_obstacles = false;
bool filter_ledge_spans = false;
bool filter_walkable_low_height_spans = false;
+ AABB filter_baking_aabb;
+ Vector3 filter_baking_aabb_offset;
public:
// Recast settings
@@ -186,6 +188,12 @@ public:
void set_filter_walkable_low_height_spans(bool p_value);
bool get_filter_walkable_low_height_spans() const;
+ void set_filter_baking_aabb(const AABB &p_aabb);
+ AABB get_filter_baking_aabb() const;
+
+ void set_filter_baking_aabb_offset(const Vector3 &p_aabb_offset);
+ Vector3 get_filter_baking_aabb_offset() const;
+
void create_from_mesh(const Ref<Mesh> &p_mesh);
void set_vertices(const Vector<Vector3> &p_vertices);
diff --git a/scene/resources/packed_scene.cpp b/scene/resources/packed_scene.cpp
index b90f396110..2c58aa83a9 100644
--- a/scene/resources/packed_scene.cpp
+++ b/scene/resources/packed_scene.cpp
@@ -35,6 +35,7 @@
#include "core/core_string_names.h"
#include "core/io/missing_resource.h"
#include "core/io/resource_loader.h"
+#include "core/templates/local_vector.h"
#include "scene/2d/node_2d.h"
#include "scene/3d/node_3d.h"
#include "scene/gui/control.h"
@@ -43,7 +44,7 @@
#include "scene/property_utils.h"
#define PACKED_SCENE_VERSION 2
-
+#define META_POINTER_PROPERTY_BASE "metadata/_editor_prop_ptr_"
bool SceneState::can_instantiate() const {
return nodes.size() > 0;
}
@@ -108,6 +109,8 @@ Node *SceneState::instantiate(GenEditState p_edit_state) const {
HashMap<Ref<Resource>, Ref<Resource>> resources_local_to_scene;
+ LocalVector<DeferredNodePathProperties> deferred_node_paths;
+
for (int i = 0; i < nc; i++) {
const NodeData &n = nd[i];
@@ -230,9 +233,28 @@ Node *SceneState::instantiate(GenEditState p_edit_state) const {
for (int j = 0; j < nprop_count; j++) {
bool valid;
- ERR_FAIL_INDEX_V(nprops[j].name, sname_count, nullptr);
+
ERR_FAIL_INDEX_V(nprops[j].value, prop_count, nullptr);
+ if (nprops[j].name & FLAG_PATH_PROPERTY_IS_NODE) {
+ uint32_t name_idx = nprops[j].name & (FLAG_PATH_PROPERTY_IS_NODE - 1);
+ ERR_FAIL_UNSIGNED_INDEX_V(name_idx, (uint32_t)sname_count, nullptr);
+ if (Engine::get_singleton()->is_editor_hint()) {
+ // If editor, just set the metadata and be it
+ node->set(META_POINTER_PROPERTY_BASE + String(snames[name_idx]), props[nprops[j].value]);
+ } else {
+ // Do an actual deferred sed of the property path.
+ DeferredNodePathProperties dnp;
+ dnp.path = props[nprops[j].value];
+ dnp.base = node;
+ dnp.property = snames[name_idx];
+ deferred_node_paths.push_back(dnp);
+ }
+ continue;
+ }
+
+ ERR_FAIL_INDEX_V(nprops[j].name, sname_count, nullptr);
+
if (snames[nprops[j].name] == CoreStringNames::get_singleton()->_script) {
//work around to avoid old script variables from disappearing, should be the proper fix to:
//https://github.com/godotengine/godot/issues/2958
@@ -369,6 +391,12 @@ Node *SceneState::instantiate(GenEditState p_edit_state) const {
}
}
+ for (uint32_t i = 0; i < deferred_node_paths.size(); i++) {
+ const DeferredNodePathProperties &dnp = deferred_node_paths[i];
+ Node *other = dnp.base->get_node_or_null(dnp.path);
+ dnp.base->set(dnp.property, other);
+ }
+
for (KeyValue<Ref<Resource>, Ref<Resource>> &E : resources_local_to_scene) {
E.value->setup_local_to_scene();
}
@@ -532,6 +560,9 @@ Error SceneState::_parse_node(Node *p_owner, Node *p_node, int p_parent_idx, Has
if (E.name == META_PROPERTY_MISSING_RESOURCES) {
continue; // Ignore this property when packing.
}
+ if (E.name.begins_with(META_POINTER_PROPERTY_BASE)) {
+ continue; // do not save.
+ }
// If instance or inheriting, not saving if property requested so.
if (!states_stack.is_empty()) {
@@ -542,8 +573,15 @@ Error SceneState::_parse_node(Node *p_owner, Node *p_node, int p_parent_idx, Has
StringName name = E.name;
Variant value = p_node->get(name);
+ bool use_deferred_node_path_bit = false;
- if (E.type == Variant::OBJECT && missing_resource_properties.has(E.name)) {
+ if (E.type == Variant::OBJECT && E.hint == PROPERTY_HINT_NODE_TYPE) {
+ value = p_node->get(META_POINTER_PROPERTY_BASE + E.name);
+ if (value.get_type() != Variant::NODE_PATH) {
+ continue; //was never set, ignore.
+ }
+ use_deferred_node_path_bit = true;
+ } else if (E.type == Variant::OBJECT && missing_resource_properties.has(E.name)) {
// Was this missing resource overridden? If so do not save the old value.
Ref<Resource> ures = value;
if (ures.is_null()) {
@@ -562,6 +600,9 @@ Error SceneState::_parse_node(Node *p_owner, Node *p_node, int p_parent_idx, Has
NodeData::Property prop;
prop.name = _nm_get_string(name, name_map);
prop.value = _vm_get_variant(value, variant_map);
+ if (use_deferred_node_path_bit) {
+ prop.name |= FLAG_PATH_PROPERTY_IS_NODE;
+ }
nd.properties.push_back(prop);
}
@@ -1018,7 +1059,7 @@ Variant SceneState::get_property_value(int p_node, const StringName &p_property,
const NodeData::Property *p = nodes[p_node].properties.ptr();
for (int i = 0; i < pc; i++) {
- if (p_property == namep[p[i].name]) {
+ if (p_property == namep[p[i].name & FLAG_PROP_NAME_MASK]) {
found = true;
return variants[p[i].value];
}
@@ -1409,7 +1450,19 @@ int SceneState::get_node_property_count(int p_idx) const {
StringName SceneState::get_node_property_name(int p_idx, int p_prop) const {
ERR_FAIL_INDEX_V(p_idx, nodes.size(), StringName());
ERR_FAIL_INDEX_V(p_prop, nodes[p_idx].properties.size(), StringName());
- return names[nodes[p_idx].properties[p_prop].name];
+ return names[nodes[p_idx].properties[p_prop].name & FLAG_PROP_NAME_MASK];
+}
+
+Vector<String> SceneState::get_node_deferred_nodepath_properties(int p_idx) const {
+ Vector<String> ret;
+ ERR_FAIL_INDEX_V(p_idx, nodes.size(), ret);
+ for (int i = 0; i < nodes[p_idx].properties.size(); i++) {
+ uint32_t idx = nodes[p_idx].properties[i].name;
+ if (idx & FLAG_PATH_PROPERTY_IS_NODE) {
+ ret.push_back(names[idx & FLAG_PROP_NAME_MASK]);
+ }
+ }
+ return ret;
}
Variant SceneState::get_node_property_value(int p_idx, int p_prop) const {
@@ -1555,13 +1608,16 @@ int SceneState::add_node(int p_parent, int p_owner, int p_type, int p_name, int
return nodes.size() - 1;
}
-void SceneState::add_node_property(int p_node, int p_name, int p_value) {
+void SceneState::add_node_property(int p_node, int p_name, int p_value, bool p_deferred_node_path) {
ERR_FAIL_INDEX(p_node, nodes.size());
ERR_FAIL_INDEX(p_name, names.size());
ERR_FAIL_INDEX(p_value, variants.size());
NodeData::Property prop;
prop.name = p_name;
+ if (p_deferred_node_path) {
+ prop.name |= FLAG_PATH_PROPERTY_IS_NODE;
+ }
prop.value = p_value;
nodes.write[p_node].properties.push_back(prop);
}
@@ -1599,6 +1655,10 @@ void SceneState::add_editable_instance(const NodePath &p_path) {
editable_instances.push_back(p_path);
}
+String SceneState::get_meta_pointer_property(const String &p_property) {
+ return META_POINTER_PROPERTY_BASE + p_property;
+}
+
Vector<String> SceneState::_get_node_groups(int p_idx) const {
Vector<StringName> groups = get_node_groups(p_idx);
Vector<String> ret;
diff --git a/scene/resources/packed_scene.h b/scene/resources/packed_scene.h
index 05abb23284..5f8001c871 100644
--- a/scene/resources/packed_scene.h
+++ b/scene/resources/packed_scene.h
@@ -69,6 +69,12 @@ class SceneState : public RefCounted {
Vector<int> groups;
};
+ struct DeferredNodePathProperties {
+ Node *base = nullptr;
+ StringName property;
+ NodePath path;
+ };
+
Vector<NodeData> nodes;
struct ConnectionData {
@@ -104,6 +110,8 @@ public:
FLAG_ID_IS_PATH = (1 << 30),
TYPE_INSTANCED = 0x7FFFFFFF,
FLAG_INSTANCE_IS_PLACEHOLDER = (1 << 30),
+ FLAG_PATH_PROPERTY_IS_NODE = (1 << 30),
+ FLAG_PROP_NAME_MASK = FLAG_PATH_PROPERTY_IS_NODE - 1,
FLAG_MASK = (1 << 24) - 1,
};
@@ -157,6 +165,7 @@ public:
int get_node_property_count(int p_idx) const;
StringName get_node_property_name(int p_idx, int p_prop) const;
Variant get_node_property_value(int p_idx, int p_prop) const;
+ Vector<String> get_node_deferred_nodepath_properties(int p_idx) const;
int get_connection_count() const;
NodePath get_connection_source(int p_idx) const;
@@ -177,7 +186,7 @@ public:
int add_value(const Variant &p_value);
int add_node_path(const NodePath &p_path);
int add_node(int p_parent, int p_owner, int p_type, int p_name, int p_instance, int p_index);
- void add_node_property(int p_node, int p_name, int p_value);
+ void add_node_property(int p_node, int p_name, int p_value, bool p_deferred_node_path = false);
void add_node_group(int p_node, int p_group);
void set_base_scene(int p_idx);
void add_connection(int p_from, int p_to, int p_signal, int p_method, int p_flags, int p_unbinds, const Vector<int> &p_binds);
@@ -186,6 +195,9 @@ public:
virtual void set_last_modified_time(uint64_t p_time) { last_modified_time = p_time; }
uint64_t get_last_modified_time() const { return last_modified_time; }
+ // Used when saving pointers (saves a path property instead).
+ static String get_meta_pointer_property(const String &p_property);
+
SceneState();
};
diff --git a/scene/resources/particles_material.cpp b/scene/resources/particles_material.cpp
index c4b15df6bb..7a49b9b515 100644
--- a/scene/resources/particles_material.cpp
+++ b/scene/resources/particles_material.cpp
@@ -488,6 +488,12 @@ void ParticlesMaterial::_update_shader() {
code += " float degree_to_rad = pi / 180.0;\n";
code += "\n";
+ if (emission_shape == EMISSION_SHAPE_POINTS || emission_shape == EMISSION_SHAPE_DIRECTED_POINTS) {
+ code += " int point = min(emission_texture_point_count - 1, int(rand_from_seed(alt_seed) * float(emission_texture_point_count)));\n";
+ code += " ivec2 emission_tex_size = textureSize(emission_texture_points, 0);\n";
+ code += " ivec2 emission_tex_ofs = ivec2(point % emission_tex_size.x, point / emission_tex_size.x);\n";
+ }
+
code += " CUSTOM.y += DELTA / LIFETIME;\n";
code += " float tv = CUSTOM.y / CUSTOM.w;\n";
if (tex_parameters[PARAM_INITIAL_LINEAR_VELOCITY].is_valid()) {
diff --git a/scene/resources/particles_material.h b/scene/resources/particles_material.h
index 24341d964d..af45593f38 100644
--- a/scene/resources/particles_material.h
+++ b/scene/resources/particles_material.h
@@ -110,7 +110,7 @@ private:
uint32_t key = 0;
static uint32_t hash(const MaterialKey &p_key) {
- return hash_djb2_one_32(p_key.key);
+ return hash_murmur3_one_32(p_key.key);
}
bool operator==(const MaterialKey &p_key) const {
diff --git a/scene/resources/primitive_meshes.cpp b/scene/resources/primitive_meshes.cpp
index f8fb51ae42..f4fd81b25f 100644
--- a/scene/resources/primitive_meshes.cpp
+++ b/scene/resources/primitive_meshes.cpp
@@ -439,12 +439,15 @@ void CapsuleMesh::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "height", PROPERTY_HINT_RANGE, "0.001,100.0,0.001,or_greater,suffix:m"), "set_height", "get_height");
ADD_PROPERTY(PropertyInfo(Variant::INT, "radial_segments", PROPERTY_HINT_RANGE, "1,100,1,or_greater"), "set_radial_segments", "get_radial_segments");
ADD_PROPERTY(PropertyInfo(Variant::INT, "rings", PROPERTY_HINT_RANGE, "1,100,1,or_greater"), "set_rings", "get_rings");
+
+ ADD_LINKED_PROPERTY("radius", "height");
+ ADD_LINKED_PROPERTY("height", "radius");
}
void CapsuleMesh::set_radius(const float p_radius) {
radius = p_radius;
if (radius > height * 0.5) {
- radius = height * 0.5;
+ height = radius * 2.0;
}
_request_update();
}
@@ -456,7 +459,7 @@ float CapsuleMesh::get_radius() const {
void CapsuleMesh::set_height(const float p_height) {
height = p_height;
if (radius > height * 0.5) {
- height = radius * 2;
+ radius = height * 0.5;
}
_request_update();
}
@@ -2435,7 +2438,7 @@ void TextMesh::_create_mesh_array(Array &p_arr) const {
}
if (glyphs[i].font_rid != RID()) {
uint32_t hash = hash_one_uint64(glyphs[i].font_rid.get_id());
- hash = hash_djb2_one_32(glyphs[i].index, hash);
+ hash = hash_murmur3_one_32(glyphs[i].index, hash);
_generate_glyph_mesh_data(hash, glyphs[i]);
GlyphMeshData &gl_data = cache[hash];
@@ -2494,7 +2497,7 @@ void TextMesh::_create_mesh_array(Array &p_arr) const {
}
if (glyphs[i].font_rid != RID()) {
uint32_t hash = hash_one_uint64(glyphs[i].font_rid.get_id());
- hash = hash_djb2_one_32(glyphs[i].index, hash);
+ hash = hash_murmur3_one_32(glyphs[i].index, hash);
const GlyphMeshData &gl_data = cache[hash];
diff --git a/scene/resources/resource_format_text.cpp b/scene/resources/resource_format_text.cpp
index 9d586c6f03..66afb001fb 100644
--- a/scene/resources/resource_format_text.cpp
+++ b/scene/resources/resource_format_text.cpp
@@ -40,6 +40,8 @@
// Version 3: new string ID for ext/subresources, breaks forward compat.
#define FORMAT_VERSION 3
+#define BINARY_FORMAT_VERSION 4
+
#include "core/io/dir_access.h"
#include "core/version.h"
@@ -66,12 +68,8 @@ Error ResourceLoaderText::_parse_sub_resource_dummy(DummyReadData *p_data, Varia
String unique_id = token.value;
if (!p_data->resource_map.has(unique_id)) {
- Ref<DummyResource> dr;
- dr.instantiate();
- dr->set_scene_unique_id(unique_id);
- p_data->resource_map[unique_id] = dr;
- uint32_t im_size = p_data->resource_index_map.size();
- p_data->resource_index_map.insert(dr, im_size);
+ r_err_str = "Found unique_id reference before mapping, sub-resources stored out of order in resource file";
+ return ERR_PARSE_ERROR;
}
r_res = p_data->resource_map[unique_id];
@@ -214,6 +212,15 @@ Ref<PackedScene> ResourceLoaderText::_parse_node_tag(VariantParser::ResourcePars
type = SceneState::TYPE_INSTANCED; //no type? assume this was instantiated
}
+ HashSet<StringName> path_properties;
+
+ if (next_tag.fields.has("node_paths")) {
+ Vector<String> paths = next_tag.fields["node_paths"];
+ for (int i = 0; i < paths.size(); i++) {
+ path_properties.insert(paths[i]);
+ }
+ }
+
if (next_tag.fields.has("instance")) {
instance = packed_scene->get_state()->add_value(next_tag.fields["instance"]);
@@ -278,9 +285,10 @@ Ref<PackedScene> ResourceLoaderText::_parse_node_tag(VariantParser::ResourcePars
}
if (!assign.is_empty()) {
- int nameidx = packed_scene->get_state()->add_name(assign);
+ StringName assign_name = assign;
+ int nameidx = packed_scene->get_state()->add_name(assign_name);
int valueidx = packed_scene->get_state()->add_value(value);
- packed_scene->get_state()->add_node_property(node_id, nameidx, valueidx);
+ packed_scene->get_state()->add_node_property(node_id, nameidx, valueidx, path_properties.has(assign_name));
//it's assignment
} else if (!next_tag.name.is_empty()) {
break;
@@ -528,9 +536,9 @@ Error ResourceLoaderText::load() {
if (cache_mode == ResourceFormatLoader::CACHE_MODE_REPLACE && ResourceCache::has(path)) {
//reuse existing
- Resource *r = ResourceCache::get(path);
- if (r && r->get_class() == type) {
- res = Ref<Resource>(r);
+ Ref<Resource> cache = ResourceCache::get_ref(path);
+ if (cache.is_valid() && cache->get_class() == type) {
+ res = cache;
res->reset_state();
do_assign = true;
}
@@ -539,10 +547,10 @@ Error ResourceLoaderText::load() {
MissingResource *missing_resource = nullptr;
if (res.is_null()) { //not reuse
- if (cache_mode != ResourceFormatLoader::CACHE_MODE_IGNORE && ResourceCache::has(path)) { //only if it doesn't exist
+ Ref<Resource> cache = ResourceCache::get_ref(path);
+ if (cache_mode != ResourceFormatLoader::CACHE_MODE_IGNORE && cache.is_valid()) { //only if it doesn't exist
//cached, do not assign
- Resource *r = ResourceCache::get(path);
- res = Ref<Resource>(r);
+ res = cache;
} else {
//create
@@ -652,12 +660,10 @@ Error ResourceLoaderText::load() {
return error;
}
- if (cache_mode == ResourceFormatLoader::CACHE_MODE_REPLACE && ResourceCache::has(local_path)) {
- Resource *r = ResourceCache::get(local_path);
- if (r->get_class() == res_type) {
- r->reset_state();
- resource = Ref<Resource>(r);
- }
+ Ref<Resource> cache = ResourceCache::get_ref(local_path);
+ if (cache_mode == ResourceFormatLoader::CACHE_MODE_REPLACE && cache.is_valid() && cache->get_class() == res_type) {
+ cache->reset_state();
+ resource = cache;
}
MissingResource *missing_resource = nullptr;
@@ -1078,7 +1084,7 @@ Error ResourceLoaderText::save_as_binary(Ref<FileAccess> p_f, const String &p_pa
wf->store_32(0); //64 bits file, false for now
wf->store_32(VERSION_MAJOR);
wf->store_32(VERSION_MINOR);
- static const int save_format_version = 3; //use format version 3 for saving
+ static const int save_format_version = BINARY_FORMAT_VERSION;
wf->store_32(save_format_version);
bs_save_unicode_string(wf, is_scene ? "PackedScene" : resource_type);
@@ -1176,7 +1182,7 @@ Error ResourceLoaderText::save_as_binary(Ref<FileAccess> p_f, const String &p_pa
while (next_tag.name == "sub_resource" || next_tag.name == "resource") {
String type;
- int id = -1;
+ String id;
bool main_res;
if (next_tag.name == "sub_resource") {
@@ -1197,15 +1203,26 @@ Error ResourceLoaderText::save_as_binary(Ref<FileAccess> p_f, const String &p_pa
type = next_tag.fields["type"];
id = next_tag.fields["id"];
main_res = false;
+
+ if (!dummy_read.resource_map.has(id)) {
+ Ref<DummyResource> dr;
+ dr.instantiate();
+ dr->set_scene_unique_id(id);
+ dummy_read.resource_map[id] = dr;
+ uint32_t im_size = dummy_read.resource_index_map.size();
+ dummy_read.resource_index_map.insert(dr, im_size);
+ }
+
} else {
type = res_type;
- id = 0; //used for last anyway
+ String uid_text = ResourceUID::get_singleton()->id_to_text(res_uid);
+ id = type + "_" + uid_text.replace("uid://", "").replace("<invalid>", "0");
main_res = true;
}
local_offsets.push_back(wf2->get_position());
- bs_save_unicode_string(wf, "local://" + itos(id));
+ bs_save_unicode_string(wf, "local://" + id);
local_pointers_pos.push_back(wf->get_position());
wf->store_64(0); //temp local offset
@@ -1274,7 +1291,8 @@ Error ResourceLoaderText::save_as_binary(Ref<FileAccess> p_f, const String &p_pa
List<PropertyInfo> props;
packed_scene->get_property_list(&props);
- bs_save_unicode_string(wf, "local://0");
+ String id = "PackedScene_" + ResourceUID::get_singleton()->id_to_text(res_uid).replace("uid://", "").replace("<invalid>", "0");
+ bs_save_unicode_string(wf, "local://" + id);
local_pointers_pos.push_back(wf->get_position());
wf->store_64(0); //temp local offset
@@ -1564,17 +1582,17 @@ String ResourceFormatSaverTextInstance::_write_resources(void *ud, const Ref<Res
String ResourceFormatSaverTextInstance::_write_resource(const Ref<Resource> &res) {
if (external_resources.has(res)) {
- return "ExtResource( \"" + external_resources[res] + "\" )";
+ return "ExtResource(\"" + external_resources[res] + "\")";
} else {
if (internal_resources.has(res)) {
- return "SubResource( \"" + internal_resources[res] + "\" )";
+ return "SubResource(\"" + internal_resources[res] + "\")";
} else if (!res->is_built_in()) {
if (res->get_path() == local_path) { //circular reference attempt
return "null";
}
//external resource
String path = relative_paths ? local_path.path_to_file(res->get_path()) : res->get_path();
- return "Resource( \"" + path + "\" )";
+ return "Resource(\"" + path + "\")";
} else {
ERR_FAIL_V_MSG("null", "Resource was not pre cached for the resource section, bug?");
//internal resource
@@ -1931,6 +1949,7 @@ Error ResourceFormatSaverTextInstance::save(const String &p_path, const Ref<Reso
Ref<PackedScene> instance = state->get_node_instance(i);
String instance_placeholder = state->get_node_instance_placeholder(i);
Vector<StringName> groups = state->get_node_groups(i);
+ Vector<String> deferred_node_paths = state->get_node_deferred_nodepath_properties(i);
String header = "[node";
header += " name=\"" + String(name).c_escape() + "\"";
@@ -1947,6 +1966,10 @@ Error ResourceFormatSaverTextInstance::save(const String &p_path, const Ref<Reso
header += " index=\"" + itos(index) + "\"";
}
+ if (deferred_node_paths.size()) {
+ header += " node_paths=" + Variant(deferred_node_paths).get_construct_string();
+ }
+
if (groups.size()) {
// Write all groups on the same line as they're part of a section header.
// This improves readability while not impacting VCS friendliness too much,
diff --git a/scene/resources/scene_replication_config.cpp b/scene/resources/scene_replication_config.cpp
index 4aea04bf87..6789f9f7d5 100644
--- a/scene/resources/scene_replication_config.cpp
+++ b/scene/resources/scene_replication_config.cpp
@@ -52,11 +52,19 @@ bool SceneReplicationConfig::_set(const StringName &p_name, const Variant &p_val
ReplicationProperty &prop = properties[idx];
if (what == "sync") {
prop.sync = p_value;
- sync_props.push_back(prop.name);
+ if (prop.sync) {
+ sync_props.push_back(prop.name);
+ } else {
+ sync_props.erase(prop.name);
+ }
return true;
} else if (what == "spawn") {
prop.spawn = p_value;
- spawn_props.push_back(prop.name);
+ if (prop.spawn) {
+ spawn_props.push_back(prop.name);
+ } else {
+ spawn_props.erase(prop.name);
+ }
return true;
}
}
diff --git a/scene/resources/surface_tool.cpp b/scene/resources/surface_tool.cpp
index 77d6e3c6f9..9829c7e86b 100644
--- a/scene/resources/surface_tool.cpp
+++ b/scene/resources/surface_tool.cpp
@@ -141,7 +141,8 @@ uint32_t SurfaceTool::VertexHasher::hash(const Vertex &p_vtx) {
h = hash_djb2_buffer((const uint8_t *)p_vtx.bones.ptr(), p_vtx.bones.size() * sizeof(int), h);
h = hash_djb2_buffer((const uint8_t *)p_vtx.weights.ptr(), p_vtx.weights.size() * sizeof(float), h);
h = hash_djb2_buffer((const uint8_t *)&p_vtx.custom[0], sizeof(Color) * RS::ARRAY_CUSTOM_COUNT, h);
- h = hash_djb2_one_32(p_vtx.smooth_group, h);
+ h = hash_murmur3_one_32(p_vtx.smooth_group, h);
+ h = hash_fmix32(h);
return h;
}
diff --git a/scene/resources/text_line.cpp b/scene/resources/text_line.cpp
index f9390ca528..d6e7ca3478 100644
--- a/scene/resources/text_line.cpp
+++ b/scene/resources/text_line.cpp
@@ -98,12 +98,6 @@ void TextLine::_bind_methods() {
ClassDB::bind_method(D_METHOD("draw_outline", "canvas", "pos", "outline_size", "color"), &TextLine::draw_outline, DEFVAL(1), DEFVAL(Color(1, 1, 1)));
ClassDB::bind_method(D_METHOD("hit_test", "coords"), &TextLine::hit_test);
-
- BIND_ENUM_CONSTANT(OVERRUN_NO_TRIMMING);
- BIND_ENUM_CONSTANT(OVERRUN_TRIM_CHAR);
- BIND_ENUM_CONSTANT(OVERRUN_TRIM_WORD);
- BIND_ENUM_CONSTANT(OVERRUN_TRIM_ELLIPSIS);
- BIND_ENUM_CONSTANT(OVERRUN_TRIM_WORD_ELLIPSIS);
}
void TextLine::_shape() {
@@ -112,26 +106,26 @@ void TextLine::_shape() {
TS->shaped_text_tab_align(rid, tab_stops);
}
- uint16_t overrun_flags = TextServer::OVERRUN_NO_TRIMMING;
- if (overrun_behavior != OVERRUN_NO_TRIMMING) {
+ uint16_t overrun_flags = TextServer::OVERRUN_NO_TRIM;
+ if (overrun_behavior != TextServer::OVERRUN_NO_TRIMMING) {
switch (overrun_behavior) {
- case OVERRUN_TRIM_WORD_ELLIPSIS:
+ case TextServer::OVERRUN_TRIM_WORD_ELLIPSIS:
overrun_flags |= TextServer::OVERRUN_TRIM;
overrun_flags |= TextServer::OVERRUN_TRIM_WORD_ONLY;
overrun_flags |= TextServer::OVERRUN_ADD_ELLIPSIS;
break;
- case OVERRUN_TRIM_ELLIPSIS:
+ case TextServer::OVERRUN_TRIM_ELLIPSIS:
overrun_flags |= TextServer::OVERRUN_TRIM;
overrun_flags |= TextServer::OVERRUN_ADD_ELLIPSIS;
break;
- case OVERRUN_TRIM_WORD:
+ case TextServer::OVERRUN_TRIM_WORD:
overrun_flags |= TextServer::OVERRUN_TRIM;
overrun_flags |= TextServer::OVERRUN_TRIM_WORD_ONLY;
break;
- case OVERRUN_TRIM_CHAR:
+ case TextServer::OVERRUN_TRIM_CHAR:
overrun_flags |= TextServer::OVERRUN_TRIM;
break;
- case OVERRUN_NO_TRIMMING:
+ case TextServer::OVERRUN_NO_TRIMMING:
break;
}
@@ -259,20 +253,20 @@ uint16_t TextLine::get_flags() const {
return flags;
}
-void TextLine::set_text_overrun_behavior(TextLine::OverrunBehavior p_behavior) {
+void TextLine::set_text_overrun_behavior(TextServer::OverrunBehavior p_behavior) {
if (overrun_behavior != p_behavior) {
overrun_behavior = p_behavior;
dirty = true;
}
}
-TextLine::OverrunBehavior TextLine::get_text_overrun_behavior() const {
+TextServer::OverrunBehavior TextLine::get_text_overrun_behavior() const {
return overrun_behavior;
}
void TextLine::set_width(float p_width) {
width = p_width;
- if (alignment == HORIZONTAL_ALIGNMENT_FILL || overrun_behavior != OVERRUN_NO_TRIMMING) {
+ if (alignment == HORIZONTAL_ALIGNMENT_FILL || overrun_behavior != TextServer::OVERRUN_NO_TRIMMING) {
dirty = true;
}
}
diff --git a/scene/resources/text_line.h b/scene/resources/text_line.h
index c5762db0f2..784ee8ef26 100644
--- a/scene/resources/text_line.h
+++ b/scene/resources/text_line.h
@@ -39,15 +39,6 @@
class TextLine : public RefCounted {
GDCLASS(TextLine, RefCounted);
-public:
- enum OverrunBehavior {
- OVERRUN_NO_TRIMMING,
- OVERRUN_TRIM_CHAR,
- OVERRUN_TRIM_WORD,
- OVERRUN_TRIM_ELLIPSIS,
- OVERRUN_TRIM_WORD_ELLIPSIS,
- };
-
private:
RID rid;
int spacing_top = 0;
@@ -58,7 +49,7 @@ private:
float width = -1.0;
uint16_t flags = TextServer::JUSTIFICATION_WORD_BOUND | TextServer::JUSTIFICATION_KASHIDA;
HorizontalAlignment alignment = HORIZONTAL_ALIGNMENT_LEFT;
- OverrunBehavior overrun_behavior = OVERRUN_TRIM_ELLIPSIS;
+ TextServer::OverrunBehavior overrun_behavior = TextServer::OVERRUN_TRIM_ELLIPSIS;
Vector<float> tab_stops;
@@ -98,8 +89,8 @@ public:
void set_flags(uint16_t p_flags);
uint16_t get_flags() const;
- void set_text_overrun_behavior(OverrunBehavior p_behavior);
- OverrunBehavior get_text_overrun_behavior() const;
+ void set_text_overrun_behavior(TextServer::OverrunBehavior p_behavior);
+ TextServer::OverrunBehavior get_text_overrun_behavior() const;
void set_width(float p_width);
float get_width() const;
@@ -125,6 +116,4 @@ public:
~TextLine();
};
-VARIANT_ENUM_CAST(TextLine::OverrunBehavior);
-
#endif // TEXT_LINE_H
diff --git a/scene/resources/text_paragraph.cpp b/scene/resources/text_paragraph.cpp
index 477b41efaa..874992ea3d 100644
--- a/scene/resources/text_paragraph.cpp
+++ b/scene/resources/text_paragraph.cpp
@@ -129,12 +129,6 @@ void TextParagraph::_bind_methods() {
ClassDB::bind_method(D_METHOD("draw_dropcap_outline", "canvas", "pos", "outline_size", "color"), &TextParagraph::draw_dropcap_outline, DEFVAL(1), DEFVAL(Color(1, 1, 1)));
ClassDB::bind_method(D_METHOD("hit_test", "coords"), &TextParagraph::hit_test);
-
- BIND_ENUM_CONSTANT(OVERRUN_NO_TRIMMING);
- BIND_ENUM_CONSTANT(OVERRUN_TRIM_CHAR);
- BIND_ENUM_CONSTANT(OVERRUN_TRIM_WORD);
- BIND_ENUM_CONSTANT(OVERRUN_TRIM_ELLIPSIS);
- BIND_ENUM_CONSTANT(OVERRUN_TRIM_WORD_ELLIPSIS);
}
void TextParagraph::_shape_lines() {
@@ -190,26 +184,26 @@ void TextParagraph::_shape_lines() {
lines_rid.push_back(line);
}
- uint16_t overrun_flags = TextServer::OVERRUN_NO_TRIMMING;
- if (overrun_behavior != OVERRUN_NO_TRIMMING) {
+ uint16_t overrun_flags = TextServer::OVERRUN_NO_TRIM;
+ if (overrun_behavior != TextServer::OVERRUN_NO_TRIMMING) {
switch (overrun_behavior) {
- case OVERRUN_TRIM_WORD_ELLIPSIS:
+ case TextServer::OVERRUN_TRIM_WORD_ELLIPSIS:
overrun_flags |= TextServer::OVERRUN_TRIM;
overrun_flags |= TextServer::OVERRUN_TRIM_WORD_ONLY;
overrun_flags |= TextServer::OVERRUN_ADD_ELLIPSIS;
break;
- case OVERRUN_TRIM_ELLIPSIS:
+ case TextServer::OVERRUN_TRIM_ELLIPSIS:
overrun_flags |= TextServer::OVERRUN_TRIM;
overrun_flags |= TextServer::OVERRUN_ADD_ELLIPSIS;
break;
- case OVERRUN_TRIM_WORD:
+ case TextServer::OVERRUN_TRIM_WORD:
overrun_flags |= TextServer::OVERRUN_TRIM;
overrun_flags |= TextServer::OVERRUN_TRIM_WORD_ONLY;
break;
- case OVERRUN_TRIM_CHAR:
+ case TextServer::OVERRUN_TRIM_CHAR:
overrun_flags |= TextServer::OVERRUN_TRIM;
break;
- case OVERRUN_NO_TRIMMING:
+ case TextServer::OVERRUN_NO_TRIMMING:
break;
}
}
@@ -451,7 +445,7 @@ uint16_t TextParagraph::get_flags() const {
return flags;
}
-void TextParagraph::set_text_overrun_behavior(TextParagraph::OverrunBehavior p_behavior) {
+void TextParagraph::set_text_overrun_behavior(TextServer::OverrunBehavior p_behavior) {
_THREAD_SAFE_METHOD_
if (overrun_behavior != p_behavior) {
@@ -460,7 +454,7 @@ void TextParagraph::set_text_overrun_behavior(TextParagraph::OverrunBehavior p_b
}
}
-TextParagraph::OverrunBehavior TextParagraph::get_text_overrun_behavior() const {
+TextServer::OverrunBehavior TextParagraph::get_text_overrun_behavior() const {
return overrun_behavior;
}
diff --git a/scene/resources/text_paragraph.h b/scene/resources/text_paragraph.h
index 4f1aad16b5..bdcc2b5701 100644
--- a/scene/resources/text_paragraph.h
+++ b/scene/resources/text_paragraph.h
@@ -41,15 +41,6 @@ class TextParagraph : public RefCounted {
GDCLASS(TextParagraph, RefCounted);
_THREAD_SAFE_CLASS_
-public:
- enum OverrunBehavior {
- OVERRUN_NO_TRIMMING,
- OVERRUN_TRIM_CHAR,
- OVERRUN_TRIM_WORD,
- OVERRUN_TRIM_ELLIPSIS,
- OVERRUN_TRIM_WORD_ELLIPSIS,
- };
-
private:
RID dropcap_rid;
int dropcap_lines = 0;
@@ -66,7 +57,7 @@ private:
int max_lines_visible = -1;
uint16_t flags = TextServer::BREAK_MANDATORY | TextServer::BREAK_WORD_BOUND | TextServer::JUSTIFICATION_WORD_BOUND | TextServer::JUSTIFICATION_KASHIDA;
- OverrunBehavior overrun_behavior = OVERRUN_NO_TRIMMING;
+ TextServer::OverrunBehavior overrun_behavior = TextServer::OVERRUN_NO_TRIMMING;
HorizontalAlignment alignment = HORIZONTAL_ALIGNMENT_LEFT;
@@ -116,8 +107,8 @@ public:
void set_flags(uint16_t p_flags);
uint16_t get_flags() const;
- void set_text_overrun_behavior(OverrunBehavior p_behavior);
- OverrunBehavior get_text_overrun_behavior() const;
+ void set_text_overrun_behavior(TextServer::OverrunBehavior p_behavior);
+ TextServer::OverrunBehavior get_text_overrun_behavior() const;
void set_width(float p_width);
float get_width() const;
@@ -165,6 +156,4 @@ public:
~TextParagraph();
};
-VARIANT_ENUM_CAST(TextParagraph::OverrunBehavior);
-
#endif // TEXT_PARAGRAPH_H
diff --git a/scene/resources/tile_set.cpp b/scene/resources/tile_set.cpp
index 8976aa17d2..13b671e562 100644
--- a/scene/resources/tile_set.cpp
+++ b/scene/resources/tile_set.cpp
@@ -5058,11 +5058,11 @@ Vector2i TileData::get_texture_offset() const {
return tex_offset;
}
-void TileData::set_material(Ref<ShaderMaterial> p_material) {
+void TileData::set_material(Ref<Material> p_material) {
material = p_material;
emit_signal(SNAME("changed"));
}
-Ref<ShaderMaterial> TileData::get_material() const {
+Ref<Material> TileData::get_material() const {
return material;
}
@@ -5700,7 +5700,7 @@ void TileData::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "transpose"), "set_transpose", "get_transpose");
ADD_PROPERTY(PropertyInfo(Variant::VECTOR2I, "texture_offset", PROPERTY_HINT_NONE, "suffix:px"), "set_texture_offset", "get_texture_offset");
ADD_PROPERTY(PropertyInfo(Variant::COLOR, "modulate"), "set_modulate", "get_modulate");
- ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "material", PROPERTY_HINT_RESOURCE_TYPE, "ShaderMaterial"), "set_material", "get_material");
+ ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "material", PROPERTY_HINT_RESOURCE_TYPE, "CanvasItemMaterial,ShaderMaterial"), "set_material", "get_material");
ADD_PROPERTY(PropertyInfo(Variant::INT, "z_index"), "set_z_index", "get_z_index");
ADD_PROPERTY(PropertyInfo(Variant::INT, "y_sort_origin"), "set_y_sort_origin", "get_y_sort_origin");
diff --git a/scene/resources/tile_set.h b/scene/resources/tile_set.h
index 181782e5af..7368d2bd87 100644
--- a/scene/resources/tile_set.h
+++ b/scene/resources/tile_set.h
@@ -164,7 +164,7 @@ private:
String name;
Ref<Texture2D> texture;
Vector2 tex_offset;
- Ref<ShaderMaterial> material;
+ Ref<Material> material;
Rect2 region;
int tile_mode = 0;
Color modulate = Color(1, 1, 1);
@@ -783,7 +783,7 @@ private:
bool flip_v = false;
bool transpose = false;
Vector2i tex_offset = Vector2i();
- Ref<ShaderMaterial> material = Ref<ShaderMaterial>();
+ Ref<Material> material = Ref<Material>();
Color modulate = Color(1.0, 1.0, 1.0, 1.0);
int z_index = 0;
int y_sort_origin = 0;
@@ -864,8 +864,8 @@ public:
void set_texture_offset(Vector2i p_texture_offset);
Vector2i get_texture_offset() const;
- void set_material(Ref<ShaderMaterial> p_material);
- Ref<ShaderMaterial> get_material() const;
+ void set_material(Ref<Material> p_material);
+ Ref<Material> get_material() const;
void set_modulate(Color p_modulate);
Color get_modulate() const;
void set_z_index(int p_z_index);
diff --git a/scene/resources/visual_shader.cpp b/scene/resources/visual_shader.cpp
index 0ab9ef7e16..b8eac6de00 100644
--- a/scene/resources/visual_shader.cpp
+++ b/scene/resources/visual_shader.cpp
@@ -712,86 +712,6 @@ VisualShader::VaryingType VisualShader::get_varying_type(const String &p_name) {
return varyings[p_name].type;
}
-void VisualShader::set_engine_version(const Dictionary &p_engine_version) {
- ERR_FAIL_COND(!p_engine_version.has("major"));
- ERR_FAIL_COND(!p_engine_version.has("minor"));
- engine_version["major"] = p_engine_version["major"];
- engine_version["minor"] = p_engine_version["minor"];
-}
-
-Dictionary VisualShader::get_engine_version() const {
- return engine_version;
-}
-
-#ifndef DISABLE_DEPRECATED
-
-void VisualShader::update_engine_version(const Dictionary &p_new_version) {
- if (engine_version.is_empty()) { // before 4.0
- for (int i = 0; i < TYPE_MAX; i++) {
- for (KeyValue<int, Node> &E : graph[i].nodes) {
- Ref<VisualShaderNodeInput> input = Object::cast_to<VisualShaderNodeInput>(E.value.node.ptr());
- if (input.is_valid()) {
- if (input->get_input_name() == "side") {
- input->set_input_name("front_facing");
- }
- }
- Ref<VisualShaderNodeExpression> expression = Object::cast_to<VisualShaderNodeExpression>(E.value.node.ptr());
- if (expression.is_valid()) {
- for (int j = 0; j < expression->get_input_port_count(); j++) {
- int type = expression->get_input_port_type(j);
- if (type > 0) { // + PORT_TYPE_SCALAR_INT + PORT_TYPE_VECTOR_2D
- type += 2;
- }
- expression->set_input_port_type(j, type);
- }
- for (int j = 0; j < expression->get_output_port_count(); j++) {
- int type = expression->get_output_port_type(j);
- if (type > 0) { // + PORT_TYPE_SCALAR_INT + PORT_TYPE_VECTOR_2D
- type += 2;
- }
- expression->set_output_port_type(j, type);
- }
- }
- Ref<VisualShaderNodeStep> step = Object::cast_to<VisualShaderNodeStep>(E.value.node.ptr());
- if (step.is_valid()) {
- int op_type = int(step->get_op_type());
- if (int(op_type) > 0) { // + OP_TYPE_VECTOR_2D + OP_TYPE_VECTOR_2D_SCALAR
- op_type += 2;
- }
- step->set_op_type(VisualShaderNodeStep::OpType(op_type));
- }
- Ref<VisualShaderNodeSmoothStep> sstep = Object::cast_to<VisualShaderNodeSmoothStep>(E.value.node.ptr());
- if (sstep.is_valid()) {
- int op_type = int(sstep->get_op_type());
- if (int(op_type) > 0) { // + OP_TYPE_VECTOR_2D + OP_TYPE_VECTOR_2D_SCALAR
- op_type += 2;
- }
- sstep->set_op_type(VisualShaderNodeSmoothStep::OpType(op_type));
- }
- Ref<VisualShaderNodeMix> mix = Object::cast_to<VisualShaderNodeMix>(E.value.node.ptr());
- if (mix.is_valid()) {
- int op_type = int(mix->get_op_type());
- if (int(op_type) > 0) { // + OP_TYPE_VECTOR_2D + OP_TYPE_VECTOR_2D_SCALAR
- op_type += 2;
- }
- mix->set_op_type(VisualShaderNodeMix::OpType(op_type));
- }
- Ref<VisualShaderNodeCompare> compare = Object::cast_to<VisualShaderNodeCompare>(E.value.node.ptr());
- if (compare.is_valid()) {
- int ctype = int(compare->get_comparison_type());
- if (int(ctype) > 0) { // + CTYPE_SCALAR_INT + CTYPE_VECTOR_2D
- ctype += 2;
- }
- compare->set_comparison_type(VisualShaderNodeCompare::ComparisonType(ctype));
- }
- }
- }
- }
- set_engine_version(p_new_version);
-}
-
-#endif /* DISABLE_DEPRECATED */
-
void VisualShader::add_node(Type p_type, const Ref<VisualShaderNode> &p_node, const Vector2 &p_position, int p_id) {
ERR_FAIL_COND(p_node.is_null());
ERR_FAIL_COND(p_id < 2);
@@ -2628,9 +2548,6 @@ void VisualShader::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_node_connections", "type"), &VisualShader::_get_node_connections);
- ClassDB::bind_method(D_METHOD("set_engine_version", "version"), &VisualShader::set_engine_version);
- ClassDB::bind_method(D_METHOD("get_engine_version"), &VisualShader::get_engine_version);
-
ClassDB::bind_method(D_METHOD("set_graph_offset", "offset"), &VisualShader::set_graph_offset);
ClassDB::bind_method(D_METHOD("get_graph_offset"), &VisualShader::get_graph_offset);
@@ -2641,7 +2558,6 @@ 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_NO_EDITOR), "set_graph_offset", "get_graph_offset");
- ADD_PROPERTY(PropertyInfo(Variant::DICTIONARY, "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.
diff --git a/scene/resources/visual_shader.h b/scene/resources/visual_shader.h
index 925dff31af..afd84e49cc 100644
--- a/scene/resources/visual_shader.h
+++ b/scene/resources/visual_shader.h
@@ -44,8 +44,6 @@ class VisualShader : public Shader {
friend class VisualShaderNodeVersionChecker;
- Dictionary engine_version;
-
public:
enum Type {
TYPE_VERTEX,
@@ -177,14 +175,6 @@ public: // internal methods
void set_shader_type(Type p_type);
Type get_shader_type() const;
-public:
- void set_engine_version(const Dictionary &p_version);
- Dictionary get_engine_version() const;
-
-#ifndef DISABLE_DEPRECATED
- void update_engine_version(const Dictionary &p_new_version);
-#endif /* DISABLE_DEPRECATED */
-
enum {
NODE_ID_INVALID = -1,
NODE_ID_OUTPUT = 0,
diff --git a/servers/SCsub b/servers/SCsub
index 66a1b9b26f..2ce90e970b 100644
--- a/servers/SCsub
+++ b/servers/SCsub
@@ -14,6 +14,7 @@ SConscript("audio/SCsub")
SConscript("text/SCsub")
SConscript("debugger/SCsub")
SConscript("extensions/SCsub")
+SConscript("movie_writer/SCsub")
lib = env.add_library("servers", env.servers_sources)
diff --git a/servers/audio/audio_driver_dummy.cpp b/servers/audio/audio_driver_dummy.cpp
index 635e4601c7..60eb657923 100644
--- a/servers/audio/audio_driver_dummy.cpp
+++ b/servers/audio/audio_driver_dummy.cpp
@@ -33,22 +33,24 @@
#include "core/config/project_settings.h"
#include "core/os/os.h"
+AudioDriverDummy *AudioDriverDummy::singleton = nullptr;
+
Error AudioDriverDummy::init() {
active = false;
thread_exited = false;
exit_thread = false;
samples_in = nullptr;
- mix_rate = GLOBAL_GET("audio/driver/mix_rate");
- speaker_mode = SPEAKER_MODE_STEREO;
- channels = 2;
-
- int latency = GLOBAL_GET("audio/driver/output_latency");
- buffer_frames = closest_power_of_2(latency * mix_rate / 1000);
+ if (mix_rate == -1) {
+ mix_rate = GLOBAL_GET("audio/driver/mix_rate");
+ }
+ channels = get_channels();
samples_in = memnew_arr(int32_t, (size_t)buffer_frames * channels);
- thread.start(AudioDriverDummy::thread_func, this);
+ if (use_threads) {
+ thread.start(AudioDriverDummy::thread_func, this);
+ }
return OK;
};
@@ -93,11 +95,56 @@ void AudioDriverDummy::unlock() {
mutex.unlock();
};
+void AudioDriverDummy::set_use_threads(bool p_use_threads) {
+ use_threads = p_use_threads;
+}
+
+void AudioDriverDummy::set_speaker_mode(SpeakerMode p_mode) {
+ speaker_mode = p_mode;
+}
+
+void AudioDriverDummy::set_mix_rate(int p_rate) {
+ mix_rate = p_rate;
+}
+
+uint32_t AudioDriverDummy::get_channels() const {
+ static const int channels_for_mode[4] = { 2, 4, 8, 16 };
+ return channels_for_mode[speaker_mode];
+}
+
+void AudioDriverDummy::mix_audio(int p_frames, int32_t *p_buffer) {
+ ERR_FAIL_COND(!active); // If not active, should not mix.
+ ERR_FAIL_COND(use_threads == true); // If using threads, this will not work well.
+
+ uint32_t todo = p_frames;
+ while (todo) {
+ uint32_t to_mix = MIN(buffer_frames, todo);
+ lock();
+ audio_server_process(to_mix, samples_in);
+ unlock();
+
+ uint32_t total_samples = to_mix * channels;
+
+ for (uint32_t i = 0; i < total_samples; i++) {
+ p_buffer[i] = samples_in[i];
+ }
+
+ todo -= to_mix;
+ p_buffer += total_samples;
+ }
+}
+
void AudioDriverDummy::finish() {
- exit_thread = true;
- thread.wait_to_finish();
+ if (use_threads) {
+ exit_thread = true;
+ thread.wait_to_finish();
+ }
if (samples_in) {
memdelete_arr(samples_in);
};
-};
+}
+
+AudioDriverDummy::AudioDriverDummy() {
+ singleton = this;
+}
diff --git a/servers/audio/audio_driver_dummy.h b/servers/audio/audio_driver_dummy.h
index 68b523e086..232a8d5e1f 100644
--- a/servers/audio/audio_driver_dummy.h
+++ b/servers/audio/audio_driver_dummy.h
@@ -44,9 +44,9 @@ class AudioDriverDummy : public AudioDriver {
static void thread_func(void *p_udata);
- unsigned int buffer_frames;
- unsigned int mix_rate;
- SpeakerMode speaker_mode;
+ uint32_t buffer_frames = 4096;
+ int32_t mix_rate = -1;
+ SpeakerMode speaker_mode = SPEAKER_MODE_STEREO;
int channels;
@@ -54,6 +54,10 @@ class AudioDriverDummy : public AudioDriver {
bool thread_exited;
mutable bool exit_thread;
+ bool use_threads = true;
+
+ static AudioDriverDummy *singleton;
+
public:
const char *get_name() const {
return "Dummy";
@@ -67,7 +71,17 @@ public:
virtual void unlock();
virtual void finish();
- AudioDriverDummy() {}
+ void set_use_threads(bool p_use_threads);
+ void set_speaker_mode(SpeakerMode p_mode);
+ void set_mix_rate(int p_rate);
+
+ uint32_t get_channels() const;
+
+ void mix_audio(int p_frames, int32_t *p_buffer);
+
+ static AudioDriverDummy *get_dummy_singleton() { return singleton; }
+
+ AudioDriverDummy();
~AudioDriverDummy() {}
};
diff --git a/servers/audio/audio_stream.cpp b/servers/audio/audio_stream.cpp
index 3983bc5cb1..5d9a9e61dc 100644
--- a/servers/audio/audio_stream.cpp
+++ b/servers/audio/audio_stream.cpp
@@ -135,9 +135,10 @@ int AudioStreamPlaybackResampled::mix(AudioFrame *p_buffer, float p_rate_scale,
uint64_t mix_increment = uint64_t(((get_stream_sampling_rate() * p_rate_scale * playback_speed_scale) / double(target_rate)) * double(FP_LEN));
- int mixed_frames_total = p_frames;
+ int mixed_frames_total = -1;
- for (int i = 0; i < p_frames; i++) {
+ int i;
+ for (i = 0; i < p_frames; i++) {
uint32_t idx = CUBIC_INTERP_HISTORY + uint32_t(mix_offset >> FP_BITS);
//standard cubic interpolation (great quality/performance ratio)
//this used to be moved to a LUT for greater performance, but nowadays CPU speed is generally faster than memory.
@@ -147,7 +148,7 @@ int AudioStreamPlaybackResampled::mix(AudioFrame *p_buffer, float p_rate_scale,
AudioFrame y2 = internal_buffer[idx - 1];
AudioFrame y3 = internal_buffer[idx - 0];
- if (idx <= internal_buffer_end && idx >= internal_buffer_end && mixed_frames_total == p_frames) {
+ if (idx >= internal_buffer_end && mixed_frames_total == -1) {
// The internal buffer ends somewhere in this range, and we haven't yet recorded the number of good frames we have.
mixed_frames_total = i;
}
@@ -167,24 +168,20 @@ int AudioStreamPlaybackResampled::mix(AudioFrame *p_buffer, float p_rate_scale,
internal_buffer[1] = internal_buffer[INTERNAL_BUFFER_LEN + 1];
internal_buffer[2] = internal_buffer[INTERNAL_BUFFER_LEN + 2];
internal_buffer[3] = internal_buffer[INTERNAL_BUFFER_LEN + 3];
- if (is_playing()) {
- int mixed_frames = _mix_internal(internal_buffer + 4, INTERNAL_BUFFER_LEN);
- if (mixed_frames != INTERNAL_BUFFER_LEN) {
- // internal_buffer[mixed_frames] is the first frame of silence.
- internal_buffer_end = mixed_frames;
- } else {
- // The internal buffer does not contain the first frame of silence.
- internal_buffer_end = -1;
- }
+ int mixed_frames = _mix_internal(internal_buffer + 4, INTERNAL_BUFFER_LEN);
+ if (mixed_frames != INTERNAL_BUFFER_LEN) {
+ // internal_buffer[mixed_frames] is the first frame of silence.
+ internal_buffer_end = mixed_frames;
} else {
- //fill with silence, not playing
- for (int j = 0; j < INTERNAL_BUFFER_LEN; ++j) {
- internal_buffer[j + 4] = AudioFrame(0, 0);
- }
+ // The internal buffer does not contain the first frame of silence.
+ internal_buffer_end = -1;
}
mix_offset -= (INTERNAL_BUFFER_LEN << FP_BITS);
}
}
+ if (mixed_frames_total == -1 && i == p_frames) {
+ mixed_frames_total = p_frames;
+ }
return mixed_frames_total;
}
diff --git a/servers/audio/effects/audio_effect_record.cpp b/servers/audio/effects/audio_effect_record.cpp
index d68522e5b9..a6553e1431 100644
--- a/servers/audio/effects/audio_effect_record.cpp
+++ b/servers/audio/effects/audio_effect_record.cpp
@@ -71,8 +71,6 @@ bool AudioEffectRecordInstance::process_silence() const {
}
void AudioEffectRecordInstance::_io_thread_process() {
- thread_active = true;
-
while (is_recording) {
//Check: The current recording has been requested to stop
if (!base->recording_active) {
@@ -86,8 +84,6 @@ void AudioEffectRecordInstance::_io_thread_process() {
OS::get_singleton()->delay_usec(500);
}
}
-
- thread_active = false;
}
void AudioEffectRecordInstance::_io_store_buffer() {
diff --git a/servers/audio/effects/audio_effect_record.h b/servers/audio/effects/audio_effect_record.h
index 305484d1cb..8a6247e27a 100644
--- a/servers/audio/effects/audio_effect_record.h
+++ b/servers/audio/effects/audio_effect_record.h
@@ -48,7 +48,6 @@ class AudioEffectRecordInstance : public AudioEffectInstance {
bool is_recording;
Thread io_thread;
- bool thread_active = false;
Vector<AudioFrame> ring_buffer;
Vector<float> recording_data;
diff --git a/servers/movie_writer/SCsub b/servers/movie_writer/SCsub
new file mode 100644
index 0000000000..86681f9c74
--- /dev/null
+++ b/servers/movie_writer/SCsub
@@ -0,0 +1,5 @@
+#!/usr/bin/env python
+
+Import("env")
+
+env.add_source_files(env.servers_sources, "*.cpp")
diff --git a/servers/movie_writer/movie_writer.cpp b/servers/movie_writer/movie_writer.cpp
new file mode 100644
index 0000000000..8560d92aa2
--- /dev/null
+++ b/servers/movie_writer/movie_writer.cpp
@@ -0,0 +1,308 @@
+/*************************************************************************/
+/* movie_writer.cpp */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2022 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 "movie_writer.h"
+#include "core/config/project_settings.h"
+#include "core/io/dir_access.h"
+
+MovieWriter *MovieWriter::writers[MovieWriter::MAX_WRITERS];
+uint32_t MovieWriter::writer_count = 0;
+
+void MovieWriter::add_writer(MovieWriter *p_writer) {
+ ERR_FAIL_COND(writer_count == MAX_WRITERS);
+ writers[writer_count++] = p_writer;
+}
+
+MovieWriter *MovieWriter::find_writer_for_file(const String &p_file) {
+ for (int32_t i = writer_count - 1; i >= 0; i--) { // More recent last, to have override ability.
+ if (writers[i]->handles_file(p_file)) {
+ return writers[i];
+ }
+ }
+ return nullptr;
+}
+
+uint32_t MovieWriter::get_audio_mix_rate() const {
+ uint32_t ret = 0;
+ if (GDVIRTUAL_REQUIRED_CALL(_get_audio_mix_rate, ret)) {
+ return ret;
+ }
+ return 48000;
+}
+AudioServer::SpeakerMode MovieWriter::get_audio_speaker_mode() const {
+ AudioServer::SpeakerMode ret = AudioServer::SPEAKER_MODE_STEREO;
+ if (GDVIRTUAL_REQUIRED_CALL(_get_audio_speaker_mode, ret)) {
+ return ret;
+ }
+ return AudioServer::SPEAKER_MODE_STEREO;
+}
+
+Error MovieWriter::write_begin(const Size2i &p_movie_size, uint32_t p_fps, const String &p_base_path) {
+ Error ret = OK;
+ if (GDVIRTUAL_REQUIRED_CALL(_write_begin, p_movie_size, p_fps, p_base_path, ret)) {
+ return ret;
+ }
+ return ERR_UNCONFIGURED;
+}
+
+Error MovieWriter::write_frame(const Ref<Image> &p_image, const int32_t *p_audio_data) {
+ Error ret = OK;
+ if (GDVIRTUAL_REQUIRED_CALL(_write_frame, p_image, p_audio_data, ret)) {
+ return ret;
+ }
+ return ERR_UNCONFIGURED;
+}
+
+void MovieWriter::write_end() {
+ GDVIRTUAL_REQUIRED_CALL(_write_end);
+}
+
+bool MovieWriter::handles_file(const String &p_path) const {
+ bool ret = false;
+ if (GDVIRTUAL_REQUIRED_CALL(_handles_file, p_path, ret)) {
+ return ret;
+ }
+ return false;
+}
+
+void MovieWriter::get_supported_extensions(List<String> *r_extensions) const {
+ Vector<String> exts;
+ if (GDVIRTUAL_REQUIRED_CALL(_get_supported_extensions, exts)) {
+ for (int i = 0; i < exts.size(); i++) {
+ r_extensions->push_back(exts[i]);
+ }
+ }
+}
+
+void MovieWriter::begin(const Size2i &p_movie_size, uint32_t p_fps, const String &p_base_path) {
+ mix_rate = get_audio_mix_rate();
+ AudioDriverDummy::get_dummy_singleton()->set_mix_rate(mix_rate);
+ AudioDriverDummy::get_dummy_singleton()->set_speaker_mode(AudioDriver::SpeakerMode(get_audio_speaker_mode()));
+ fps = p_fps;
+ if ((mix_rate % fps) != 0) {
+ WARN_PRINT("MovieWriter's audio mix rate (" + itos(mix_rate) + ") can not be divided by the recording FPS (" + itos(fps) + "). Audio may go out of sync over time.");
+ }
+
+ audio_channels = AudioDriverDummy::get_dummy_singleton()->get_channels();
+ audio_mix_buffer.resize(mix_rate * audio_channels / fps);
+
+ write_begin(p_movie_size, p_fps, p_base_path);
+}
+
+void MovieWriter::_bind_methods() {
+ ClassDB::bind_static_method("MovieWriter", D_METHOD("add_writer", "writer"), &MovieWriter::add_writer);
+
+ GDVIRTUAL_BIND(_get_audio_mix_rate)
+ GDVIRTUAL_BIND(_get_audio_speaker_mode)
+
+ GDVIRTUAL_BIND(_handles_file, "path")
+
+ GDVIRTUAL_BIND(_write_begin, "movie_size", "fps", "base_path")
+ GDVIRTUAL_BIND(_write_frame, "frame_image", "audio_frame_block")
+ GDVIRTUAL_BIND(_write_end)
+
+ GLOBAL_DEF("editor/movie_writer/mix_rate", 48000);
+ ProjectSettings::get_singleton()->set_custom_property_info("editor/movie_writer/mix_rate", PropertyInfo(Variant::INT, "editor/movie_writer/mix_rate", PROPERTY_HINT_RANGE, "8000,192000,1,suffix:Hz"));
+ GLOBAL_DEF("editor/movie_writer/speaker_mode", 0);
+ ProjectSettings::get_singleton()->set_custom_property_info("editor/movie_writer/speaker_mode", PropertyInfo(Variant::INT, "editor/movie_writer/speaker_mode", PROPERTY_HINT_ENUM, "Stereo,3.1,5.1,7.1"));
+ GLOBAL_DEF("editor/movie_writer/mjpeg_quality", 0.75);
+ ProjectSettings::get_singleton()->set_custom_property_info("editor/movie_writer/mjpeg_quality", PropertyInfo(Variant::FLOAT, "editor/movie_writer/mjpeg_quality", PROPERTY_HINT_RANGE, "0.01,1.0,0.01"));
+ // used by the editor
+ GLOBAL_DEF_BASIC("editor/movie_writer/movie_file", "");
+ GLOBAL_DEF_BASIC("editor/movie_writer/disable_vsync", false);
+ GLOBAL_DEF_BASIC("editor/movie_writer/fps", 60);
+ ProjectSettings::get_singleton()->set_custom_property_info("editor/movie_writer/fps", PropertyInfo(Variant::INT, "editor/movie_writer/fps", PROPERTY_HINT_RANGE, "1,300,1,suffix:FPS"));
+}
+
+void MovieWriter::set_extensions_hint() {
+ RBSet<String> found;
+ for (uint32_t i = 0; i < writer_count; i++) {
+ List<String> extensions;
+ writers[i]->get_supported_extensions(&extensions);
+ for (const String &ext : extensions) {
+ found.insert(ext);
+ }
+ }
+
+ String ext_hint;
+
+ for (const String &S : found) {
+ if (ext_hint != "") {
+ ext_hint += ",";
+ }
+ ext_hint += "*." + S;
+ }
+ ProjectSettings::get_singleton()->set_custom_property_info("editor/movie_writer/movie_file", PropertyInfo(Variant::STRING, "editor/movie_writer/movie_file", PROPERTY_HINT_GLOBAL_SAVE_FILE, ext_hint));
+}
+
+void MovieWriter::add_frame(const Ref<Image> &p_image) {
+ AudioDriverDummy::get_dummy_singleton()->mix_audio(mix_rate / fps, audio_mix_buffer.ptr());
+ write_frame(p_image, audio_mix_buffer.ptr());
+}
+
+void MovieWriter::end() {
+ write_end();
+}
+/////////////////////////////////////////
+
+uint32_t MovieWriterPNGWAV::get_audio_mix_rate() const {
+ return mix_rate;
+}
+AudioServer::SpeakerMode MovieWriterPNGWAV::get_audio_speaker_mode() const {
+ return speaker_mode;
+}
+
+void MovieWriterPNGWAV::get_supported_extensions(List<String> *r_extensions) const {
+ r_extensions->push_back("png");
+}
+
+bool MovieWriterPNGWAV::handles_file(const String &p_path) const {
+ return p_path.get_extension().to_lower() == "png";
+}
+
+String MovieWriterPNGWAV::zeros_str(uint32_t p_index) {
+ char zeros[MAX_TRAILING_ZEROS + 1];
+ for (uint32_t i = 0; i < MAX_TRAILING_ZEROS; i++) {
+ uint32_t idx = MAX_TRAILING_ZEROS - i - 1;
+ uint32_t digit = (p_index / uint32_t(Math::pow(double(10), double(idx)))) % 10;
+ zeros[i] = '0' + digit;
+ }
+ zeros[MAX_TRAILING_ZEROS] = 0;
+ return zeros;
+}
+
+Error MovieWriterPNGWAV::write_begin(const Size2i &p_movie_size, uint32_t p_fps, const String &p_base_path) {
+ // Quick & Dirty PNGWAV Code based on - https://docs.microsoft.com/en-us/windows/win32/directshow/avi-riff-file-reference
+
+ base_path = p_base_path.get_basename();
+ if (base_path.is_relative_path()) {
+ base_path = "res://" + base_path;
+ }
+
+ {
+ //Remove existing files before writing anew
+ uint32_t idx = 0;
+ Ref<DirAccess> d = DirAccess::open(base_path.get_base_dir());
+ String file = base_path.get_file();
+ while (true) {
+ String path = file + zeros_str(idx) + ".png";
+ if (d->remove(path) != OK) {
+ break;
+ }
+ }
+ }
+
+ f_wav = FileAccess::open(base_path + ".wav", FileAccess::WRITE_READ);
+ ERR_FAIL_COND_V(f_wav.is_null(), ERR_CANT_OPEN);
+
+ fps = p_fps;
+
+ f_wav->store_buffer((const uint8_t *)"RIFF", 4);
+ int total_size = 4 /* WAVE */ + 8 /* fmt+size */ + 16 /* format */ + 8 /* data+size */;
+ f_wav->store_32(total_size); //will store final later
+ f_wav->store_buffer((const uint8_t *)"WAVE", 4);
+
+ /* FORMAT CHUNK */
+
+ f_wav->store_buffer((const uint8_t *)"fmt ", 4);
+
+ uint32_t channels = 2;
+ switch (speaker_mode) {
+ case AudioServer::SPEAKER_MODE_STEREO:
+ channels = 2;
+ break;
+ case AudioServer::SPEAKER_SURROUND_31:
+ channels = 4;
+ break;
+ case AudioServer::SPEAKER_SURROUND_51:
+ channels = 6;
+ break;
+ case AudioServer::SPEAKER_SURROUND_71:
+ channels = 8;
+ break;
+ }
+
+ f_wav->store_32(16); //standard format, no extra fields
+ f_wav->store_16(1); // compression code, standard PCM
+ f_wav->store_16(channels); //CHANNELS: 2
+
+ f_wav->store_32(mix_rate);
+
+ /* useless stuff the format asks for */
+
+ int bits_per_sample = 32;
+ int blockalign = bits_per_sample / 8 * channels;
+ int bytes_per_sec = mix_rate * blockalign;
+
+ audio_block_size = (mix_rate / fps) * blockalign;
+
+ f_wav->store_32(bytes_per_sec);
+ f_wav->store_16(blockalign); // block align (unused)
+ f_wav->store_16(bits_per_sample);
+
+ /* DATA CHUNK */
+
+ f_wav->store_buffer((const uint8_t *)"data", 4);
+
+ f_wav->store_32(0); //data size... wooh
+ wav_data_size_pos = f_wav->get_position();
+
+ return OK;
+}
+
+Error MovieWriterPNGWAV::write_frame(const Ref<Image> &p_image, const int32_t *p_audio_data) {
+ ERR_FAIL_COND_V(!f_wav.is_valid(), ERR_UNCONFIGURED);
+
+ Vector<uint8_t> png_buffer = p_image->save_png_to_buffer();
+
+ Ref<FileAccess> fi = FileAccess::open(base_path + zeros_str(frame_count) + ".png", FileAccess::WRITE);
+ fi->store_buffer(png_buffer.ptr(), png_buffer.size());
+ f_wav->store_buffer((const uint8_t *)p_audio_data, audio_block_size);
+
+ frame_count++;
+
+ return OK;
+}
+
+void MovieWriterPNGWAV::write_end() {
+ if (f_wav.is_valid()) {
+ uint32_t total_size = 4 /* WAVE */ + 8 /* fmt+size */ + 16 /* format */ + 8 /* data+size */;
+ uint32_t datasize = f_wav->get_position() - wav_data_size_pos;
+ f_wav->seek(4);
+ f_wav->store_32(total_size + datasize);
+ f_wav->seek(0x28);
+ f_wav->store_32(datasize);
+ }
+}
+
+MovieWriterPNGWAV::MovieWriterPNGWAV() {
+ mix_rate = GLOBAL_GET("editor/movie_writer/mix_rate");
+ speaker_mode = AudioServer::SpeakerMode(int(GLOBAL_GET("editor/movie_writer/speaker_mode")));
+}
diff --git a/servers/movie_writer/movie_writer.h b/servers/movie_writer/movie_writer.h
new file mode 100644
index 0000000000..11e739df39
--- /dev/null
+++ b/servers/movie_writer/movie_writer.h
@@ -0,0 +1,123 @@
+/*************************************************************************/
+/* movie_writer.h */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2022 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 MOVIE_WRITER_H
+#define MOVIE_WRITER_H
+
+#include "core/templates/local_vector.h"
+#include "servers/audio/audio_driver_dummy.h"
+#include "servers/audio_server.h"
+
+class MovieWriter : public Object {
+ GDCLASS(MovieWriter, Object);
+
+ uint64_t fps = 0;
+ uint64_t mix_rate = 0;
+ uint32_t audio_channels = 0;
+
+ LocalVector<int32_t> audio_mix_buffer;
+
+ enum {
+ MAX_WRITERS = 8
+ };
+ static MovieWriter *writers[];
+ static uint32_t writer_count;
+
+protected:
+ virtual uint32_t get_audio_mix_rate() const;
+ virtual AudioServer::SpeakerMode get_audio_speaker_mode() const;
+
+ virtual Error write_begin(const Size2i &p_movie_size, uint32_t p_fps, const String &p_base_path);
+ virtual Error write_frame(const Ref<Image> &p_image, const int32_t *p_audio_data);
+ virtual void write_end();
+
+ GDVIRTUAL0RC(uint32_t, _get_audio_mix_rate)
+ GDVIRTUAL0RC(AudioServer::SpeakerMode, _get_audio_speaker_mode)
+
+ GDVIRTUAL1RC(bool, _handles_file, const String &)
+ GDVIRTUAL0RC(Vector<String>, _get_supported_extensions)
+
+ GDVIRTUAL3R(Error, _write_begin, const Size2i &, uint32_t, const String &)
+ GDVIRTUAL2R(Error, _write_frame, const Ref<Image> &, GDNativeConstPtr<int32_t>)
+ GDVIRTUAL0(_write_end)
+
+ static void _bind_methods();
+
+public:
+ virtual bool handles_file(const String &p_path) const;
+ virtual void get_supported_extensions(List<String> *r_extensions) const;
+
+ static void add_writer(MovieWriter *p_writer);
+ static MovieWriter *find_writer_for_file(const String &p_file);
+
+ void begin(const Size2i &p_movie_size, uint32_t p_fps, const String &p_base_path);
+ void add_frame(const Ref<Image> &p_image);
+
+ static void set_extensions_hint();
+
+ void end();
+};
+
+class MovieWriterPNGWAV : public MovieWriter {
+ GDCLASS(MovieWriterPNGWAV, MovieWriter)
+
+ enum {
+ MAX_TRAILING_ZEROS = 8 // more than 10 days at 60fps, no hard drive can put up with this anyway :)
+ };
+
+ uint32_t mix_rate = 48000;
+ AudioServer::SpeakerMode speaker_mode = AudioServer::SPEAKER_MODE_STEREO;
+ String base_path;
+ uint32_t frame_count = 0;
+ uint32_t fps = 0;
+
+ uint32_t audio_block_size = 0;
+
+ Ref<FileAccess> f_wav;
+ uint32_t wav_data_size_pos = 0;
+
+ String zeros_str(uint32_t p_index);
+
+protected:
+ virtual uint32_t get_audio_mix_rate() const override;
+ virtual AudioServer::SpeakerMode get_audio_speaker_mode() const override;
+ virtual void get_supported_extensions(List<String> *r_extensions) const override;
+
+ virtual Error write_begin(const Size2i &p_movie_size, uint32_t p_fps, const String &p_base_path) override;
+ virtual Error write_frame(const Ref<Image> &p_image, const int32_t *p_audio_data) override;
+ virtual void write_end() override;
+
+ virtual bool handles_file(const String &p_path) const override;
+
+public:
+ MovieWriterPNGWAV();
+};
+
+#endif // VIDEO_WRITER_H
diff --git a/servers/movie_writer/movie_writer_mjpeg.cpp b/servers/movie_writer/movie_writer_mjpeg.cpp
new file mode 100644
index 0000000000..7d9e6e3b87
--- /dev/null
+++ b/servers/movie_writer/movie_writer_mjpeg.cpp
@@ -0,0 +1,263 @@
+/*************************************************************************/
+/* movie_writer_mjpeg.cpp */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2022 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 "movie_writer_mjpeg.h"
+#include "core/config/project_settings.h"
+
+uint32_t MovieWriterMJPEG::get_audio_mix_rate() const {
+ return mix_rate;
+}
+AudioServer::SpeakerMode MovieWriterMJPEG::get_audio_speaker_mode() const {
+ return speaker_mode;
+}
+
+bool MovieWriterMJPEG::handles_file(const String &p_path) const {
+ return p_path.get_extension().to_lower() == "avi";
+}
+
+void MovieWriterMJPEG::get_supported_extensions(List<String> *r_extensions) const {
+ r_extensions->push_back("avi");
+}
+
+Error MovieWriterMJPEG::write_begin(const Size2i &p_movie_size, uint32_t p_fps, const String &p_base_path) {
+ // Quick & Dirty MJPEG Code based on - https://docs.microsoft.com/en-us/windows/win32/directshow/avi-riff-file-reference
+
+ base_path = p_base_path.get_basename();
+ if (base_path.is_relative_path()) {
+ base_path = "res://" + base_path;
+ }
+
+ base_path += ".avi";
+
+ f = FileAccess::open(base_path, FileAccess::WRITE_READ);
+
+ fps = p_fps;
+
+ ERR_FAIL_COND_V(f.is_null(), ERR_CANT_OPEN);
+
+ f->store_buffer((const uint8_t *)"RIFF", 4);
+ f->store_32(0); // Total length (update later)
+ f->store_buffer((const uint8_t *)"AVI ", 4);
+ f->store_buffer((const uint8_t *)"LIST", 4);
+ f->store_32(300); // 4 + 4 + 4 + 56 + 4 + 4 + 132 + 4 + 4 + 84
+ f->store_buffer((const uint8_t *)"hdrl", 4);
+ f->store_buffer((const uint8_t *)"avih", 4);
+ f->store_32(56);
+
+ f->store_32(1000000 / p_fps); // Microsecs per frame.
+ f->store_32(7000); // Max bytes per second
+ f->store_32(0); // Padding Granularity
+ f->store_32(16);
+ total_frames_ofs = f->get_position();
+ f->store_32(0); // Total frames (update later)
+ f->store_32(0); // Initial frames
+ f->store_32(1); // Streams
+ f->store_32(0); // Suggested buffer size
+ f->store_32(p_movie_size.width); // Movie Width
+ f->store_32(p_movie_size.height); // Movie Height
+ for (uint32_t i = 0; i < 4; i++) {
+ f->store_32(0); // Reserved.
+ }
+ f->store_buffer((const uint8_t *)"LIST", 4);
+ f->store_32(132); // 4 + 4 + 4 + 48 + 4 + 4 + 40 + 4 + 4 + 16
+ f->store_buffer((const uint8_t *)"strl", 4);
+ f->store_buffer((const uint8_t *)"strh", 4);
+ f->store_32(48);
+ f->store_buffer((const uint8_t *)"vids", 4);
+ f->store_buffer((const uint8_t *)"MJPG", 4);
+ f->store_32(0); // Flags
+ f->store_16(0); // Priority
+ f->store_16(0); // Language
+ f->store_32(0); // Initial Frames
+ f->store_32(1); // Scale
+ f->store_32(p_fps); // FPS
+ f->store_32(0); // Start
+ total_frames_ofs2 = f->get_position();
+ f->store_32(0); // Number of frames (to be updated later)
+ f->store_32(0); // Suggested Buffer Size
+ f->store_32(0); // Quality
+ f->store_32(0); // Sample Size
+
+ f->store_buffer((const uint8_t *)"strf", 4);
+ f->store_32(40); // Size.
+ f->store_32(40); // Size.
+
+ f->store_32(p_movie_size.width); // Width
+ f->store_32(p_movie_size.height); // Width
+ f->store_16(1); // Planes
+ f->store_16(24); // Bitcount
+ f->store_buffer((const uint8_t *)"MJPG", 4); // Compression
+
+ f->store_32(((p_movie_size.width * 24 / 8 + 3) & 0xFFFFFFFC) * p_movie_size.height); // SizeImage
+ f->store_32(0); // XPelsXMeter
+ f->store_32(0); // YPelsXMeter
+ f->store_32(0); // ClrUsed
+ f->store_32(0); // ClrImportant
+
+ f->store_buffer((const uint8_t *)"LIST", 4);
+ f->store_32(16);
+
+ f->store_buffer((const uint8_t *)"odml", 4);
+ f->store_buffer((const uint8_t *)"dmlh", 4);
+ f->store_32(4); // sizes
+
+ total_frames_ofs3 = f->get_position();
+ f->store_32(0); // Number of frames (to be updated later)
+
+ // Audio //
+
+ const uint32_t bit_depth = 32;
+ uint32_t channels = 2;
+ switch (speaker_mode) {
+ case AudioServer::SPEAKER_MODE_STEREO:
+ channels = 2;
+ break;
+ case AudioServer::SPEAKER_SURROUND_31:
+ channels = 4;
+ break;
+ case AudioServer::SPEAKER_SURROUND_51:
+ channels = 6;
+ break;
+ case AudioServer::SPEAKER_SURROUND_71:
+ channels = 8;
+ break;
+ }
+ uint32_t blockalign = bit_depth / 8 * channels;
+
+ f->store_buffer((const uint8_t *)"LIST", 4);
+ f->store_32(84); // 4 + 4 + 4 + 48 + 4 + 4 + 16
+ f->store_buffer((const uint8_t *)"strl", 4);
+ f->store_buffer((const uint8_t *)"strh", 4);
+ f->store_32(48);
+ f->store_buffer((const uint8_t *)"auds", 4);
+ f->store_32(0); // Handler
+ f->store_32(0); // Flags
+ f->store_16(0); // Priority
+ f->store_16(0); // Language
+ f->store_32(0); // Initial Frames
+ f->store_32(blockalign); // Scale
+ f->store_32(mix_rate * blockalign); // mix rate
+ f->store_32(0); // Start
+ total_audio_frames_ofs4 = f->get_position();
+ f->store_32(0); // Number of frames (to be updated later)
+ f->store_32(12288); // Suggested Buffer Size
+ f->store_32(0xFFFFFFFF); // Quality
+ f->store_32(blockalign); // Block Align to 32 bits
+
+ audio_block_size = (mix_rate / fps) * blockalign;
+
+ f->store_buffer((const uint8_t *)"strf", 4);
+ f->store_32(16); // Standard format, no extra fields
+ f->store_16(1); // Compression code, standard PCM
+ f->store_16(channels);
+ f->store_32(mix_rate); // Samples (frames) / Sec
+ f->store_32(mix_rate * blockalign); // Bytes / sec
+ f->store_16(blockalign); // Bytes / sec
+ f->store_16(bit_depth); // Bytes / sec
+
+ f->store_buffer((const uint8_t *)"LIST", 4);
+ movi_data_ofs = f->get_position();
+ f->store_32(0); // Number of frames (to be updated later)
+ f->store_buffer((const uint8_t *)"movi", 4);
+
+ return OK;
+}
+
+Error MovieWriterMJPEG::write_frame(const Ref<Image> &p_image, const int32_t *p_audio_data) {
+ ERR_FAIL_COND_V(!f.is_valid(), ERR_UNCONFIGURED);
+
+ Vector<uint8_t> jpg_buffer = p_image->save_jpg_to_buffer(quality);
+ uint32_t s = jpg_buffer.size();
+
+ f->store_buffer((const uint8_t *)"00db", 4); // Stream 0, Video
+ f->store_32(jpg_buffer.size()); // sizes
+ f->store_buffer(jpg_buffer.ptr(), jpg_buffer.size());
+ if (jpg_buffer.size() & 1) {
+ f->store_8(0);
+ s++;
+ }
+ jpg_frame_sizes.push_back(s);
+
+ f->store_buffer((const uint8_t *)"01wb", 4); // Stream 1, Audio.
+ f->store_32(audio_block_size);
+ f->store_buffer((const uint8_t *)p_audio_data, audio_block_size);
+
+ frame_count++;
+
+ return OK;
+}
+
+void MovieWriterMJPEG::write_end() {
+ if (f.is_valid()) {
+ // Finalize the file (frame indices)
+ f->store_buffer((const uint8_t *)"idx1", 4);
+ f->store_32(8 * 4 * frame_count);
+ uint32_t ofs = 4;
+ uint32_t all_data_size = 0;
+ for (uint32_t i = 0; i < frame_count; i++) {
+ f->store_buffer((const uint8_t *)"00db", 4);
+ f->store_32(16); // AVI_KEYFRAME
+ f->store_32(ofs);
+ f->store_32(jpg_frame_sizes[i]);
+
+ ofs += jpg_frame_sizes[i] + 8;
+
+ f->store_buffer((const uint8_t *)"01wb", 4);
+ f->store_32(16); // AVI_KEYFRAME
+ f->store_32(ofs);
+ f->store_32(audio_block_size);
+
+ ofs += audio_block_size + 8;
+ all_data_size += jpg_frame_sizes[i] + audio_block_size;
+ }
+
+ uint32_t file_size = f->get_position();
+ f->seek(4);
+ f->store_32(file_size - 78);
+ f->seek(total_frames_ofs);
+ f->store_32(frame_count);
+ f->seek(total_frames_ofs2);
+ f->store_32(frame_count);
+ f->seek(total_frames_ofs3);
+ f->store_32(frame_count);
+ f->seek(total_audio_frames_ofs4);
+ f->store_32(frame_count * mix_rate / fps);
+ f->seek(movi_data_ofs);
+ f->store_32(all_data_size + 4 + 16 * frame_count);
+
+ f.unref();
+ }
+}
+
+MovieWriterMJPEG::MovieWriterMJPEG() {
+ mix_rate = GLOBAL_GET("editor/movie_writer/mix_rate");
+ speaker_mode = AudioServer::SpeakerMode(int(GLOBAL_GET("editor/movie_writer/speaker_mode")));
+ quality = GLOBAL_GET("editor/movie_writer/mjpeg_quality");
+}
diff --git a/servers/movie_writer/movie_writer_mjpeg.h b/servers/movie_writer/movie_writer_mjpeg.h
new file mode 100644
index 0000000000..822bedfedf
--- /dev/null
+++ b/servers/movie_writer/movie_writer_mjpeg.h
@@ -0,0 +1,73 @@
+/*************************************************************************/
+/* movie_writer_mjpeg.h */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2022 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 MOVIE_WRITER_MJPEG_H
+#define MOVIE_WRITER_MJPEG_H
+
+#include "servers/movie_writer/movie_writer.h"
+
+class MovieWriterMJPEG : public MovieWriter {
+ GDCLASS(MovieWriterMJPEG, MovieWriter)
+
+ uint32_t mix_rate = 48000;
+ AudioServer::SpeakerMode speaker_mode = AudioServer::SPEAKER_MODE_STEREO;
+ String base_path;
+ uint32_t frame_count = 0;
+ uint32_t fps = 0;
+ float quality = 0.75;
+
+ uint32_t audio_block_size = 0;
+
+ Vector<uint32_t> jpg_frame_sizes;
+
+ uint64_t total_frames_ofs = 0;
+ uint64_t total_frames_ofs2 = 0;
+ uint64_t total_frames_ofs3 = 0;
+ uint64_t total_audio_frames_ofs4 = 0;
+ uint64_t movi_data_ofs = 0;
+
+ Ref<FileAccess> f;
+
+protected:
+ virtual uint32_t get_audio_mix_rate() const override;
+ virtual AudioServer::SpeakerMode get_audio_speaker_mode() const override;
+ virtual void get_supported_extensions(List<String> *r_extensions) const override;
+
+ virtual Error write_begin(const Size2i &p_movie_size, uint32_t p_fps, const String &p_base_path) override;
+ virtual Error write_frame(const Ref<Image> &p_image, const int32_t *p_audio_data) override;
+ virtual void write_end() override;
+
+ virtual bool handles_file(const String &p_path) const override;
+
+public:
+ MovieWriterMJPEG();
+};
+
+#endif // MOVIE_WRITER_AVIJPEG_H
diff --git a/servers/navigation_server_2d.cpp b/servers/navigation_server_2d.cpp
index 0442089503..5e9f1c824a 100644
--- a/servers/navigation_server_2d.cpp
+++ b/servers/navigation_server_2d.cpp
@@ -159,6 +159,8 @@ void NavigationServer2D::_emit_map_changed(RID p_map) {
}
void NavigationServer2D::_bind_methods() {
+ ClassDB::bind_method(D_METHOD("get_maps"), &NavigationServer2D::get_maps);
+
ClassDB::bind_method(D_METHOD("map_create"), &NavigationServer2D::map_create);
ClassDB::bind_method(D_METHOD("map_set_active", "map", "active"), &NavigationServer2D::map_set_active);
ClassDB::bind_method(D_METHOD("map_is_active", "nap"), &NavigationServer2D::map_is_active);
@@ -173,11 +175,14 @@ void NavigationServer2D::_bind_methods() {
ClassDB::bind_method(D_METHOD("map_get_regions", "map"), &NavigationServer2D::map_get_regions);
ClassDB::bind_method(D_METHOD("map_get_agents", "map"), &NavigationServer2D::map_get_agents);
+ ClassDB::bind_method(D_METHOD("map_force_update", "map"), &NavigationServer2D::map_force_update);
+
ClassDB::bind_method(D_METHOD("region_create"), &NavigationServer2D::region_create);
ClassDB::bind_method(D_METHOD("region_set_enter_cost", "region", "enter_cost"), &NavigationServer2D::region_set_enter_cost);
ClassDB::bind_method(D_METHOD("region_get_enter_cost", "region"), &NavigationServer2D::region_get_enter_cost);
ClassDB::bind_method(D_METHOD("region_set_travel_cost", "region", "travel_cost"), &NavigationServer2D::region_set_travel_cost);
ClassDB::bind_method(D_METHOD("region_get_travel_cost", "region"), &NavigationServer2D::region_get_travel_cost);
+ ClassDB::bind_method(D_METHOD("region_owns_point", "region", "point"), &NavigationServer2D::region_owns_point);
ClassDB::bind_method(D_METHOD("region_set_map", "region", "map"), &NavigationServer2D::region_set_map);
ClassDB::bind_method(D_METHOD("region_get_map", "region"), &NavigationServer2D::region_get_map);
ClassDB::bind_method(D_METHOD("region_set_navigation_layers", "region", "navigation_layers"), &NavigationServer2D::region_set_navigation_layers);
@@ -217,6 +222,8 @@ NavigationServer2D::~NavigationServer2D() {
singleton = nullptr;
}
+Array FORWARD_0_C(get_maps);
+
Array FORWARD_1_C(map_get_regions, RID, p_map, rid_to_rid);
Array FORWARD_1_C(map_get_agents, RID, p_map, rid_to_rid);
@@ -231,6 +238,10 @@ void FORWARD_2_C(map_set_active, RID, p_map, bool, p_active, rid_to_rid, bool_to
bool FORWARD_1_C(map_is_active, RID, p_map, rid_to_rid);
+void NavigationServer2D::map_force_update(RID p_map) {
+ NavigationServer3D::get_singleton_mut()->map_force_update(p_map);
+}
+
void FORWARD_2_C(map_set_cell_size, RID, p_map, real_t, p_cell_size, rid_to_rid, real_to_real);
real_t FORWARD_1_C(map_get_cell_size, RID, p_map, rid_to_rid);
@@ -248,6 +259,7 @@ void FORWARD_2_C(region_set_enter_cost, RID, p_region, real_t, p_enter_cost, rid
real_t FORWARD_1_C(region_get_enter_cost, RID, p_region, rid_to_rid);
void FORWARD_2_C(region_set_travel_cost, RID, p_region, real_t, p_travel_cost, rid_to_rid, real_to_real);
real_t FORWARD_1_C(region_get_travel_cost, RID, p_region, rid_to_rid);
+bool FORWARD_2_C(region_owns_point, RID, p_region, const Vector2 &, p_point, rid_to_rid, v2_to_v3);
void FORWARD_2_C(region_set_map, RID, p_region, RID, p_map, rid_to_rid, rid_to_rid);
void FORWARD_2_C(region_set_navigation_layers, RID, p_region, uint32_t, p_navigation_layers, rid_to_rid, uint32_to_uint32);
diff --git a/servers/navigation_server_2d.h b/servers/navigation_server_2d.h
index 30f553d10b..1b15c7ff37 100644
--- a/servers/navigation_server_2d.h
+++ b/servers/navigation_server_2d.h
@@ -53,6 +53,8 @@ public:
/// MUST be used in single thread!
static NavigationServer2D *get_singleton_mut() { return singleton; }
+ virtual Array get_maps() const;
+
/// Create a new map.
virtual RID map_create() const;
@@ -83,6 +85,8 @@ public:
virtual Array map_get_regions(RID p_map) const;
virtual Array map_get_agents(RID p_map) const;
+ virtual void map_force_update(RID p_map);
+
/// Creates a new region.
virtual RID region_create() const;
@@ -94,6 +98,8 @@ public:
virtual void region_set_travel_cost(RID p_region, real_t p_travel_cost) const;
virtual real_t region_get_travel_cost(RID p_region) const;
+ virtual bool region_owns_point(RID p_region, const Vector2 &p_point) const;
+
/// Set the map of this region.
virtual void region_set_map(RID p_region, RID p_map) const;
virtual RID region_get_map(RID p_region) const;
diff --git a/servers/navigation_server_3d.cpp b/servers/navigation_server_3d.cpp
index 60bbcec8d4..6c48c4a8de 100644
--- a/servers/navigation_server_3d.cpp
+++ b/servers/navigation_server_3d.cpp
@@ -33,6 +33,8 @@
NavigationServer3D *NavigationServer3D::singleton = nullptr;
void NavigationServer3D::_bind_methods() {
+ ClassDB::bind_method(D_METHOD("get_maps"), &NavigationServer3D::get_maps);
+
ClassDB::bind_method(D_METHOD("map_create"), &NavigationServer3D::map_create);
ClassDB::bind_method(D_METHOD("map_set_active", "map", "active"), &NavigationServer3D::map_set_active);
ClassDB::bind_method(D_METHOD("map_is_active", "nap"), &NavigationServer3D::map_is_active);
@@ -51,11 +53,14 @@ void NavigationServer3D::_bind_methods() {
ClassDB::bind_method(D_METHOD("map_get_regions", "map"), &NavigationServer3D::map_get_regions);
ClassDB::bind_method(D_METHOD("map_get_agents", "map"), &NavigationServer3D::map_get_agents);
+ ClassDB::bind_method(D_METHOD("map_force_update", "map"), &NavigationServer3D::map_force_update);
+
ClassDB::bind_method(D_METHOD("region_create"), &NavigationServer3D::region_create);
ClassDB::bind_method(D_METHOD("region_set_enter_cost", "region", "enter_cost"), &NavigationServer3D::region_set_enter_cost);
ClassDB::bind_method(D_METHOD("region_get_enter_cost", "region"), &NavigationServer3D::region_get_enter_cost);
ClassDB::bind_method(D_METHOD("region_set_travel_cost", "region", "travel_cost"), &NavigationServer3D::region_set_travel_cost);
ClassDB::bind_method(D_METHOD("region_get_travel_cost", "region"), &NavigationServer3D::region_get_travel_cost);
+ ClassDB::bind_method(D_METHOD("region_owns_point", "region", "point"), &NavigationServer3D::region_owns_point);
ClassDB::bind_method(D_METHOD("region_set_map", "region", "map"), &NavigationServer3D::region_set_map);
ClassDB::bind_method(D_METHOD("region_get_map", "region"), &NavigationServer3D::region_get_map);
ClassDB::bind_method(D_METHOD("region_set_navigation_layers", "region", "navigation_layers"), &NavigationServer3D::region_set_navigation_layers);
diff --git a/servers/navigation_server_3d.h b/servers/navigation_server_3d.h
index 9c04d68622..cf91596604 100644
--- a/servers/navigation_server_3d.h
+++ b/servers/navigation_server_3d.h
@@ -56,6 +56,8 @@ public:
/// MUST be used in single thread!
static NavigationServer3D *get_singleton_mut();
+ virtual Array get_maps() const = 0;
+
/// Create a new map.
virtual RID map_create() const = 0;
@@ -94,6 +96,8 @@ public:
virtual Array map_get_regions(RID p_map) const = 0;
virtual Array map_get_agents(RID p_map) const = 0;
+ virtual void map_force_update(RID p_map) = 0;
+
/// Creates a new region.
virtual RID region_create() const = 0;
@@ -105,6 +109,8 @@ public:
virtual void region_set_travel_cost(RID p_region, real_t p_travel_cost) const = 0;
virtual real_t region_get_travel_cost(RID p_region) const = 0;
+ virtual bool region_owns_point(RID p_region, const Vector3 &p_point) const = 0;
+
/// Set the map of this region.
virtual void region_set_map(RID p_region, RID p_map) const = 0;
virtual RID region_get_map(RID p_region) const = 0;
diff --git a/servers/physics_2d/godot_area_2d.h b/servers/physics_2d/godot_area_2d.h
index 35dad9d2c3..221982cf78 100644
--- a/servers/physics_2d/godot_area_2d.h
+++ b/servers/physics_2d/godot_area_2d.h
@@ -70,9 +70,9 @@ class GodotArea2D : public GodotCollisionObject2D {
static uint32_t hash(const BodyKey &p_key) {
uint32_t h = hash_one_uint64(p_key.rid.get_id());
- h = hash_djb2_one_64(p_key.instance_id, h);
- h = hash_djb2_one_32(p_key.area_shape, h);
- return hash_djb2_one_32(p_key.body_shape, h);
+ h = hash_murmur3_one_64(p_key.instance_id, h);
+ h = hash_murmur3_one_32(p_key.area_shape, h);
+ return hash_fmix32(hash_murmur3_one_32(p_key.body_shape, h));
}
_FORCE_INLINE_ bool operator==(const BodyKey &p_key) const {
diff --git a/servers/physics_3d/godot_area_3d.h b/servers/physics_3d/godot_area_3d.h
index a00451f602..51b435eb00 100644
--- a/servers/physics_3d/godot_area_3d.h
+++ b/servers/physics_3d/godot_area_3d.h
@@ -74,9 +74,9 @@ class GodotArea3D : public GodotCollisionObject3D {
static uint32_t hash(const BodyKey &p_key) {
uint32_t h = hash_one_uint64(p_key.rid.get_id());
- h = hash_djb2_one_64(p_key.instance_id, h);
- h = hash_djb2_one_32(p_key.area_shape, h);
- return hash_djb2_one_32(p_key.body_shape, h);
+ h = hash_murmur3_one_64(p_key.instance_id, h);
+ h = hash_murmur3_one_32(p_key.area_shape, h);
+ return hash_fmix32(hash_murmur3_one_32(p_key.body_shape, h));
}
_FORCE_INLINE_ bool operator==(const BodyKey &p_key) const {
diff --git a/servers/register_server_types.cpp b/servers/register_server_types.cpp
index 8bbe987cb7..d7d2340119 100644
--- a/servers/register_server_types.cpp
+++ b/servers/register_server_types.cpp
@@ -57,6 +57,8 @@
#include "camera_server.h"
#include "debugger/servers_debugger.h"
#include "display_server.h"
+#include "movie_writer/movie_writer.h"
+#include "movie_writer/movie_writer_mjpeg.h"
#include "navigation_server_2d.h"
#include "navigation_server_3d.h"
#include "physics_2d/godot_physics_server_2d.h"
@@ -107,6 +109,9 @@ static bool has_server_feature_callback(const String &p_feature) {
return false;
}
+static MovieWriterMJPEG *writer_mjpeg = nullptr;
+static MovieWriterPNGWAV *writer_pngwav = nullptr;
+
void register_server_types() {
shader_types = memnew(ShaderTypes);
@@ -239,6 +244,8 @@ void register_server_types() {
GDREGISTER_CLASS(PhysicsTestMotionParameters3D);
GDREGISTER_CLASS(PhysicsTestMotionResult3D);
+ GDREGISTER_VIRTUAL_CLASS(MovieWriter);
+
ServersDebugger::initialize();
// Physics 2D
@@ -254,11 +261,19 @@ void register_server_types() {
PhysicsServer3DManager::register_server("GodotPhysics3D", &_createGodotPhysics3DCallback);
PhysicsServer3DManager::set_default_server("GodotPhysics3D");
+
+ writer_mjpeg = memnew(MovieWriterMJPEG);
+ MovieWriter::add_writer(writer_mjpeg);
+
+ writer_pngwav = memnew(MovieWriterPNGWAV);
+ MovieWriter::add_writer(writer_pngwav);
}
void unregister_server_types() {
ServersDebugger::deinitialize();
memdelete(shader_types);
+ memdelete(writer_mjpeg);
+ memdelete(writer_pngwav);
}
void register_server_singletons() {
diff --git a/servers/rendering/dummy/environment/gi.h b/servers/rendering/dummy/environment/gi.h
new file mode 100644
index 0000000000..374f0c8923
--- /dev/null
+++ b/servers/rendering/dummy/environment/gi.h
@@ -0,0 +1,85 @@
+/*************************************************************************/
+/* gi.h */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2022 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 GI_DUMMY_H
+#define GI_DUMMY_H
+
+#include "servers/rendering/environment/renderer_gi.h"
+
+namespace RendererDummy {
+
+class GI : public RendererGI {
+public:
+ /* VOXEL GI API */
+
+ virtual RID voxel_gi_allocate() override { return RID(); }
+ virtual void voxel_gi_free(RID p_rid) override {}
+ virtual void voxel_gi_initialize(RID p_rid) override {}
+ virtual void voxel_gi_allocate_data(RID p_voxel_gi, const Transform3D &p_to_cell_xform, const AABB &p_aabb, const Vector3i &p_octree_size, const Vector<uint8_t> &p_octree_cells, const Vector<uint8_t> &p_data_cells, const Vector<uint8_t> &p_distance_field, const Vector<int> &p_level_counts) override {}
+
+ virtual AABB voxel_gi_get_bounds(RID p_voxel_gi) const override { return AABB(); }
+ virtual Vector3i voxel_gi_get_octree_size(RID p_voxel_gi) const override { return Vector3i(); }
+ virtual Vector<uint8_t> voxel_gi_get_octree_cells(RID p_voxel_gi) const override { return Vector<uint8_t>(); }
+ virtual Vector<uint8_t> voxel_gi_get_data_cells(RID p_voxel_gi) const override { return Vector<uint8_t>(); }
+ virtual Vector<uint8_t> voxel_gi_get_distance_field(RID p_voxel_gi) const override { return Vector<uint8_t>(); }
+
+ virtual Vector<int> voxel_gi_get_level_counts(RID p_voxel_gi) const override { return Vector<int>(); }
+ virtual Transform3D voxel_gi_get_to_cell_xform(RID p_voxel_gi) const override { return Transform3D(); }
+
+ virtual void voxel_gi_set_dynamic_range(RID p_voxel_gi, float p_range) override {}
+ virtual float voxel_gi_get_dynamic_range(RID p_voxel_gi) const override { return 0; }
+
+ virtual void voxel_gi_set_propagation(RID p_voxel_gi, float p_range) override {}
+ virtual float voxel_gi_get_propagation(RID p_voxel_gi) const override { return 0; }
+
+ virtual void voxel_gi_set_energy(RID p_voxel_gi, float p_range) override {}
+ virtual float voxel_gi_get_energy(RID p_voxel_gi) const override { return 0.0; }
+
+ virtual void voxel_gi_set_bias(RID p_voxel_gi, float p_range) override {}
+ virtual float voxel_gi_get_bias(RID p_voxel_gi) const override { return 0.0; }
+
+ virtual void voxel_gi_set_normal_bias(RID p_voxel_gi, float p_range) override {}
+ virtual float voxel_gi_get_normal_bias(RID p_voxel_gi) const override { return 0.0; }
+
+ virtual void voxel_gi_set_interior(RID p_voxel_gi, bool p_enable) override {}
+ virtual bool voxel_gi_is_interior(RID p_voxel_gi) const override { return false; }
+
+ virtual void voxel_gi_set_use_two_bounces(RID p_voxel_gi, bool p_enable) override {}
+ virtual bool voxel_gi_is_using_two_bounces(RID p_voxel_gi) const override { return false; }
+
+ virtual void voxel_gi_set_anisotropy_strength(RID p_voxel_gi, float p_strength) override {}
+ virtual float voxel_gi_get_anisotropy_strength(RID p_voxel_gi) const override { return 0; }
+
+ virtual uint32_t voxel_gi_get_version(RID p_voxel_gi) const override { return 0; }
+};
+
+} // namespace RendererDummy
+
+#endif // !GI_DUMMY_H
diff --git a/servers/rendering/dummy/rasterizer_dummy.h b/servers/rendering/dummy/rasterizer_dummy.h
index 5c6fcc8386..9c2bd45cce 100644
--- a/servers/rendering/dummy/rasterizer_dummy.h
+++ b/servers/rendering/dummy/rasterizer_dummy.h
@@ -34,6 +34,7 @@
#include "core/templates/rid_owner.h"
#include "core/templates/self_list.h"
#include "scene/resources/mesh.h"
+#include "servers/rendering/dummy/environment/gi.h"
#include "servers/rendering/dummy/rasterizer_canvas_dummy.h"
#include "servers/rendering/dummy/rasterizer_scene_dummy.h"
#include "servers/rendering/dummy/rasterizer_storage_dummy.h"
@@ -57,6 +58,7 @@ protected:
RendererDummy::MeshStorage mesh_storage;
RendererDummy::ParticlesStorage particles_storage;
RendererDummy::TextureStorage texture_storage;
+ RendererDummy::GI gi;
RasterizerStorageDummy storage;
RasterizerSceneDummy scene;
@@ -66,6 +68,7 @@ public:
RendererMeshStorage *get_mesh_storage() override { return &mesh_storage; };
RendererParticlesStorage *get_particles_storage() override { return &particles_storage; };
RendererTextureStorage *get_texture_storage() override { return &texture_storage; };
+ RendererGI *get_gi() override { return &gi; };
RendererStorage *get_storage() override { return &storage; }
RendererCanvasRender *get_canvas() override { return &canvas; }
RendererSceneRender *get_scene() override { return &scene; }
diff --git a/servers/rendering/dummy/rasterizer_storage_dummy.h b/servers/rendering/dummy/rasterizer_storage_dummy.h
index 596960786a..7f637d2c42 100644
--- a/servers/rendering/dummy/rasterizer_storage_dummy.h
+++ b/servers/rendering/dummy/rasterizer_storage_dummy.h
@@ -38,47 +38,6 @@ class RasterizerStorageDummy : public RendererStorage {
public:
void base_update_dependency(RID p_base, DependencyTracker *p_instance) override {}
- /* VOXEL GI API */
-
- RID voxel_gi_allocate() override { return RID(); }
- void voxel_gi_initialize(RID p_rid) override {}
- void voxel_gi_allocate_data(RID p_voxel_gi, const Transform3D &p_to_cell_xform, const AABB &p_aabb, const Vector3i &p_octree_size, const Vector<uint8_t> &p_octree_cells, const Vector<uint8_t> &p_data_cells, const Vector<uint8_t> &p_distance_field, const Vector<int> &p_level_counts) override {}
-
- AABB voxel_gi_get_bounds(RID p_voxel_gi) const override { return AABB(); }
- Vector3i voxel_gi_get_octree_size(RID p_voxel_gi) const override { return Vector3i(); }
- Vector<uint8_t> voxel_gi_get_octree_cells(RID p_voxel_gi) const override { return Vector<uint8_t>(); }
- Vector<uint8_t> voxel_gi_get_data_cells(RID p_voxel_gi) const override { return Vector<uint8_t>(); }
- Vector<uint8_t> voxel_gi_get_distance_field(RID p_voxel_gi) const override { return Vector<uint8_t>(); }
-
- Vector<int> voxel_gi_get_level_counts(RID p_voxel_gi) const override { return Vector<int>(); }
- Transform3D voxel_gi_get_to_cell_xform(RID p_voxel_gi) const override { return Transform3D(); }
-
- void voxel_gi_set_dynamic_range(RID p_voxel_gi, float p_range) override {}
- float voxel_gi_get_dynamic_range(RID p_voxel_gi) const override { return 0; }
-
- void voxel_gi_set_propagation(RID p_voxel_gi, float p_range) override {}
- float voxel_gi_get_propagation(RID p_voxel_gi) const override { return 0; }
-
- void voxel_gi_set_energy(RID p_voxel_gi, float p_range) override {}
- float voxel_gi_get_energy(RID p_voxel_gi) const override { return 0.0; }
-
- void voxel_gi_set_bias(RID p_voxel_gi, float p_range) override {}
- float voxel_gi_get_bias(RID p_voxel_gi) const override { return 0.0; }
-
- void voxel_gi_set_normal_bias(RID p_voxel_gi, float p_range) override {}
- float voxel_gi_get_normal_bias(RID p_voxel_gi) const override { return 0.0; }
-
- void voxel_gi_set_interior(RID p_voxel_gi, bool p_enable) override {}
- bool voxel_gi_is_interior(RID p_voxel_gi) const override { return false; }
-
- void voxel_gi_set_use_two_bounces(RID p_voxel_gi, bool p_enable) override {}
- bool voxel_gi_is_using_two_bounces(RID p_voxel_gi) const override { return false; }
-
- void voxel_gi_set_anisotropy_strength(RID p_voxel_gi, float p_strength) override {}
- float voxel_gi_get_anisotropy_strength(RID p_voxel_gi) const override { return 0; }
-
- uint32_t voxel_gi_get_version(RID p_voxel_gi) override { return 0; }
-
/* OCCLUDER */
void occluder_set_mesh(RID p_occluder, const PackedVector3Array &p_vertices, const PackedInt32Array &p_indices) {}
diff --git a/servers/rendering/environment/renderer_gi.h b/servers/rendering/environment/renderer_gi.h
new file mode 100644
index 0000000000..c4f63b7b6b
--- /dev/null
+++ b/servers/rendering/environment/renderer_gi.h
@@ -0,0 +1,85 @@
+/*************************************************************************/
+/* renderer_gi.h */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2022 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 RENDERER_GI_H
+#define RENDERER_GI_H
+
+#include "servers/rendering/renderer_storage.h"
+#include "servers/rendering_server.h"
+
+class RendererGI {
+public:
+ virtual ~RendererGI() {}
+
+ /* VOXEL GI API */
+
+ virtual RID voxel_gi_allocate() = 0;
+ virtual void voxel_gi_free(RID p_rid) = 0;
+ virtual void voxel_gi_initialize(RID p_rid) = 0;
+
+ virtual void voxel_gi_allocate_data(RID p_voxel_gi, const Transform3D &p_to_cell_xform, const AABB &p_aabb, const Vector3i &p_octree_size, const Vector<uint8_t> &p_octree_cells, const Vector<uint8_t> &p_data_cells, const Vector<uint8_t> &p_distance_field, const Vector<int> &p_level_counts) = 0;
+
+ virtual AABB voxel_gi_get_bounds(RID p_voxel_gi) const = 0;
+ virtual Vector3i voxel_gi_get_octree_size(RID p_voxel_gi) const = 0;
+ virtual Vector<uint8_t> voxel_gi_get_octree_cells(RID p_voxel_gi) const = 0;
+ virtual Vector<uint8_t> voxel_gi_get_data_cells(RID p_voxel_gi) const = 0;
+ virtual Vector<uint8_t> voxel_gi_get_distance_field(RID p_voxel_gi) const = 0;
+
+ virtual Vector<int> voxel_gi_get_level_counts(RID p_voxel_gi) const = 0;
+ virtual Transform3D voxel_gi_get_to_cell_xform(RID p_voxel_gi) const = 0;
+
+ virtual void voxel_gi_set_dynamic_range(RID p_voxel_gi, float p_range) = 0;
+ virtual float voxel_gi_get_dynamic_range(RID p_voxel_gi) const = 0;
+
+ virtual void voxel_gi_set_propagation(RID p_voxel_gi, float p_range) = 0;
+ virtual float voxel_gi_get_propagation(RID p_voxel_gi) const = 0;
+
+ virtual void voxel_gi_set_energy(RID p_voxel_gi, float p_energy) = 0;
+ virtual float voxel_gi_get_energy(RID p_voxel_gi) const = 0;
+
+ virtual void voxel_gi_set_bias(RID p_voxel_gi, float p_bias) = 0;
+ virtual float voxel_gi_get_bias(RID p_voxel_gi) const = 0;
+
+ virtual void voxel_gi_set_normal_bias(RID p_voxel_gi, float p_range) = 0;
+ virtual float voxel_gi_get_normal_bias(RID p_voxel_gi) const = 0;
+
+ virtual void voxel_gi_set_interior(RID p_voxel_gi, bool p_enable) = 0;
+ virtual bool voxel_gi_is_interior(RID p_voxel_gi) const = 0;
+
+ virtual void voxel_gi_set_use_two_bounces(RID p_voxel_gi, bool p_enable) = 0;
+ virtual bool voxel_gi_is_using_two_bounces(RID p_voxel_gi) const = 0;
+
+ virtual void voxel_gi_set_anisotropy_strength(RID p_voxel_gi, float p_strength) = 0;
+ virtual float voxel_gi_get_anisotropy_strength(RID p_voxel_gi) const = 0;
+
+ virtual uint32_t voxel_gi_get_version(RID p_probe) const = 0;
+};
+
+#endif // !RENDERER_GI_H
diff --git a/servers/rendering/renderer_compositor.h b/servers/rendering/renderer_compositor.h
index df3df1077a..f58bc851ef 100644
--- a/servers/rendering/renderer_compositor.h
+++ b/servers/rendering/renderer_compositor.h
@@ -31,6 +31,7 @@
#ifndef RENDERING_SERVER_COMPOSITOR_H
#define RENDERING_SERVER_COMPOSITOR_H
+#include "servers/rendering/environment/renderer_gi.h"
#include "servers/rendering/renderer_canvas_render.h"
#include "servers/rendering/renderer_scene.h"
#include "servers/rendering/renderer_storage.h"
@@ -81,6 +82,7 @@ public:
virtual RendererMeshStorage *get_mesh_storage() = 0;
virtual RendererParticlesStorage *get_particles_storage() = 0;
virtual RendererTextureStorage *get_texture_storage() = 0;
+ virtual RendererGI *get_gi() = 0;
virtual RendererStorage *get_storage() = 0;
virtual RendererCanvasRender *get_canvas() = 0;
virtual RendererSceneRender *get_scene() = 0;
diff --git a/servers/rendering/renderer_rd/SCsub b/servers/rendering/renderer_rd/SCsub
index 774a6b7951..10b83dca11 100644
--- a/servers/rendering/renderer_rd/SCsub
+++ b/servers/rendering/renderer_rd/SCsub
@@ -5,6 +5,7 @@ Import("env")
env.add_source_files(env.servers_sources, "*.cpp")
SConscript("effects/SCsub")
+SConscript("environment/SCsub")
SConscript("forward_clustered/SCsub")
SConscript("forward_mobile/SCsub")
SConscript("shaders/SCsub")
diff --git a/servers/rendering/renderer_rd/effects/copy_effects.cpp b/servers/rendering/renderer_rd/effects/copy_effects.cpp
index 6b786fdf16..c30e8ed58f 100644
--- a/servers/rendering/renderer_rd/effects/copy_effects.cpp
+++ b/servers/rendering/renderer_rd/effects/copy_effects.cpp
@@ -29,9 +29,11 @@
/*************************************************************************/
#include "copy_effects.h"
+#include "core/config/project_settings.h"
#include "servers/rendering/renderer_rd/renderer_compositor_rd.h"
#include "servers/rendering/renderer_rd/storage_rd/material_storage.h"
#include "servers/rendering/renderer_rd/uniform_set_cache_rd.h"
+#include "thirdparty/misc/cubemap_coeffs.h"
using namespace RendererRD;
@@ -123,16 +125,157 @@ CopyEffects::CopyEffects(bool p_prefer_raster_effects) {
}
}
}
+
+ {
+ // Initialize copier
+ Vector<String> copy_modes;
+ copy_modes.push_back("\n");
+
+ cube_to_dp.shader.initialize(copy_modes);
+
+ cube_to_dp.shader_version = cube_to_dp.shader.version_create();
+ RID shader = cube_to_dp.shader.version_get_shader(cube_to_dp.shader_version, 0);
+ RD::PipelineDepthStencilState dss;
+ dss.enable_depth_test = true;
+ dss.depth_compare_operator = RD::COMPARE_OP_ALWAYS;
+ dss.enable_depth_write = true;
+ cube_to_dp.pipeline.setup(shader, RD::RENDER_PRIMITIVE_TRIANGLES, RD::PipelineRasterizationState(), RD::PipelineMultisampleState(), dss, RD::PipelineColorBlendState(), 0);
+ }
+
+ {
+ //Initialize cubemap downsampler
+ Vector<String> cubemap_downsampler_modes;
+ cubemap_downsampler_modes.push_back("");
+
+ if (prefer_raster_effects) {
+ cubemap_downsampler.raster_shader.initialize(cubemap_downsampler_modes);
+
+ cubemap_downsampler.shader_version = cubemap_downsampler.raster_shader.version_create();
+
+ cubemap_downsampler.raster_pipeline.setup(cubemap_downsampler.raster_shader.version_get_shader(cubemap_downsampler.shader_version, 0), RD::RENDER_PRIMITIVE_TRIANGLES, RD::PipelineRasterizationState(), RD::PipelineMultisampleState(), RD::PipelineDepthStencilState(), RD::PipelineColorBlendState::create_disabled(), 0);
+ } else {
+ cubemap_downsampler.compute_shader.initialize(cubemap_downsampler_modes);
+
+ cubemap_downsampler.shader_version = cubemap_downsampler.compute_shader.version_create();
+
+ cubemap_downsampler.compute_pipeline = RD::get_singleton()->compute_pipeline_create(cubemap_downsampler.compute_shader.version_get_shader(cubemap_downsampler.shader_version, 0));
+ cubemap_downsampler.raster_pipeline.clear();
+ }
+ }
+
+ {
+ // Initialize cubemap filter
+ filter.use_high_quality = GLOBAL_GET("rendering/reflections/sky_reflections/fast_filter_high_quality");
+
+ Vector<String> cubemap_filter_modes;
+ cubemap_filter_modes.push_back("\n#define USE_HIGH_QUALITY\n");
+ cubemap_filter_modes.push_back("\n#define USE_LOW_QUALITY\n");
+ cubemap_filter_modes.push_back("\n#define USE_HIGH_QUALITY\n#define USE_TEXTURE_ARRAY\n");
+ cubemap_filter_modes.push_back("\n#define USE_LOW_QUALITY\n#define USE_TEXTURE_ARRAY\n");
+
+ if (filter.use_high_quality) {
+ filter.coefficient_buffer = RD::get_singleton()->storage_buffer_create(sizeof(high_quality_coeffs));
+ RD::get_singleton()->buffer_update(filter.coefficient_buffer, 0, sizeof(high_quality_coeffs), &high_quality_coeffs[0]);
+ } else {
+ filter.coefficient_buffer = RD::get_singleton()->storage_buffer_create(sizeof(low_quality_coeffs));
+ RD::get_singleton()->buffer_update(filter.coefficient_buffer, 0, sizeof(low_quality_coeffs), &low_quality_coeffs[0]);
+ }
+
+ if (prefer_raster_effects) {
+ filter.raster_shader.initialize(cubemap_filter_modes);
+
+ // array variants are not supported in raster
+ filter.raster_shader.set_variant_enabled(FILTER_MODE_HIGH_QUALITY_ARRAY, false);
+ filter.raster_shader.set_variant_enabled(FILTER_MODE_LOW_QUALITY_ARRAY, false);
+
+ filter.shader_version = filter.raster_shader.version_create();
+
+ for (int i = 0; i < FILTER_MODE_MAX; i++) {
+ if (filter.raster_shader.is_variant_enabled(i)) {
+ filter.raster_pipelines[i].setup(filter.raster_shader.version_get_shader(filter.shader_version, i), RD::RENDER_PRIMITIVE_TRIANGLES, RD::PipelineRasterizationState(), RD::PipelineMultisampleState(), RD::PipelineDepthStencilState(), RD::PipelineColorBlendState::create_disabled(), 0);
+ } else {
+ filter.raster_pipelines[i].clear();
+ }
+ }
+
+ Vector<RD::Uniform> uniforms;
+ {
+ RD::Uniform u;
+ u.uniform_type = RD::UNIFORM_TYPE_STORAGE_BUFFER;
+ u.binding = 0;
+ u.append_id(filter.coefficient_buffer);
+ uniforms.push_back(u);
+ }
+ filter.uniform_set = RD::get_singleton()->uniform_set_create(uniforms, filter.raster_shader.version_get_shader(filter.shader_version, filter.use_high_quality ? 0 : 1), 1);
+ } else {
+ filter.compute_shader.initialize(cubemap_filter_modes);
+ filter.shader_version = filter.compute_shader.version_create();
+
+ for (int i = 0; i < FILTER_MODE_MAX; i++) {
+ filter.compute_pipelines[i] = RD::get_singleton()->compute_pipeline_create(filter.compute_shader.version_get_shader(filter.shader_version, i));
+ filter.raster_pipelines[i].clear();
+ }
+
+ Vector<RD::Uniform> uniforms;
+ {
+ RD::Uniform u;
+ u.uniform_type = RD::UNIFORM_TYPE_STORAGE_BUFFER;
+ u.binding = 0;
+ u.append_id(filter.coefficient_buffer);
+ uniforms.push_back(u);
+ }
+ filter.uniform_set = RD::get_singleton()->uniform_set_create(uniforms, filter.compute_shader.version_get_shader(filter.shader_version, filter.use_high_quality ? 0 : 1), 1);
+ }
+ }
+
+ {
+ // Initialize roughness
+ Vector<String> cubemap_roughness_modes;
+ cubemap_roughness_modes.push_back("");
+
+ if (prefer_raster_effects) {
+ roughness.raster_shader.initialize(cubemap_roughness_modes);
+
+ roughness.shader_version = roughness.raster_shader.version_create();
+
+ roughness.raster_pipeline.setup(roughness.raster_shader.version_get_shader(roughness.shader_version, 0), RD::RENDER_PRIMITIVE_TRIANGLES, RD::PipelineRasterizationState(), RD::PipelineMultisampleState(), RD::PipelineDepthStencilState(), RD::PipelineColorBlendState::create_disabled(), 0);
+
+ } else {
+ roughness.compute_shader.initialize(cubemap_roughness_modes);
+
+ roughness.shader_version = roughness.compute_shader.version_create();
+
+ roughness.compute_pipeline = RD::get_singleton()->compute_pipeline_create(roughness.compute_shader.version_get_shader(roughness.shader_version, 0));
+ roughness.raster_pipeline.clear();
+ }
+ }
}
CopyEffects::~CopyEffects() {
if (prefer_raster_effects) {
blur_raster.shader.version_free(blur_raster.shader_version);
+ cubemap_downsampler.raster_shader.version_free(cubemap_downsampler.shader_version);
+ filter.raster_shader.version_free(filter.shader_version);
+ roughness.raster_shader.version_free(roughness.shader_version);
} else {
copy.shader.version_free(copy.shader_version);
+ cubemap_downsampler.compute_shader.version_free(cubemap_downsampler.shader_version);
+ filter.compute_shader.version_free(filter.shader_version);
+ roughness.compute_shader.version_free(roughness.shader_version);
+ }
+
+ RD::get_singleton()->free(filter.coefficient_buffer);
+
+ if (RD::get_singleton()->uniform_set_is_valid(filter.image_uniform_set)) {
+ RD::get_singleton()->free(filter.image_uniform_set);
+ }
+
+ if (RD::get_singleton()->uniform_set_is_valid(filter.uniform_set)) {
+ RD::get_singleton()->free(filter.uniform_set);
}
copy_to_fb.shader.version_free(copy_to_fb.shader_version);
+ cube_to_dp.shader.version_free(cube_to_dp.shader_version);
singleton = nullptr;
}
@@ -681,3 +824,262 @@ void CopyEffects::set_color(RID p_dest_texture, const Color &p_color, const Rect
RD::get_singleton()->compute_list_dispatch_threads(compute_list, p_region.size.width, p_region.size.height, 1);
RD::get_singleton()->compute_list_end();
}
+
+void CopyEffects::copy_cubemap_to_dp(RID p_source_rd_texture, RID p_dst_framebuffer, const Rect2 &p_rect, const Vector2 &p_dst_size, float p_z_near, float p_z_far, bool p_dp_flip) {
+ UniformSetCacheRD *uniform_set_cache = UniformSetCacheRD::get_singleton();
+ ERR_FAIL_NULL(uniform_set_cache);
+ MaterialStorage *material_storage = MaterialStorage::get_singleton();
+ ERR_FAIL_NULL(material_storage);
+
+ CopyToDPPushConstant push_constant;
+ push_constant.screen_rect[0] = p_rect.position.x;
+ push_constant.screen_rect[1] = p_rect.position.y;
+ push_constant.screen_rect[2] = p_rect.size.width;
+ push_constant.screen_rect[3] = p_rect.size.height;
+ push_constant.z_far = p_z_far;
+ push_constant.z_near = p_z_near;
+ push_constant.texel_size[0] = 1.0f / p_dst_size.x;
+ push_constant.texel_size[1] = 1.0f / p_dst_size.y;
+ push_constant.texel_size[0] *= p_dp_flip ? -1.0f : 1.0f; // Encode dp flip as x size sign
+
+ // setup our uniforms
+ RID default_sampler = material_storage->sampler_rd_get_default(RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
+
+ RD::Uniform u_source_rd_texture(RD::UNIFORM_TYPE_SAMPLER_WITH_TEXTURE, 0, Vector<RID>({ default_sampler, p_source_rd_texture }));
+
+ RID shader = cube_to_dp.shader.version_get_shader(cube_to_dp.shader_version, 0);
+ ERR_FAIL_COND(shader.is_null());
+
+ RD::DrawListID draw_list = RD::get_singleton()->draw_list_begin(p_dst_framebuffer, RD::INITIAL_ACTION_DROP, RD::FINAL_ACTION_DISCARD, RD::INITIAL_ACTION_KEEP, RD::FINAL_ACTION_READ);
+ RD::get_singleton()->draw_list_bind_render_pipeline(draw_list, cube_to_dp.pipeline.get_render_pipeline(RD::INVALID_ID, RD::get_singleton()->framebuffer_get_format(p_dst_framebuffer)));
+ RD::get_singleton()->draw_list_bind_uniform_set(draw_list, uniform_set_cache->get_cache(shader, 0, u_source_rd_texture), 0);
+ RD::get_singleton()->draw_list_bind_index_array(draw_list, material_storage->get_quad_index_array());
+
+ RD::get_singleton()->draw_list_set_push_constant(draw_list, &push_constant, sizeof(CopyToDPPushConstant));
+ RD::get_singleton()->draw_list_draw(draw_list, true);
+ RD::get_singleton()->draw_list_end(RD::BARRIER_MASK_RASTER | RD::BARRIER_MASK_TRANSFER);
+}
+
+void CopyEffects::cubemap_downsample(RID p_source_cubemap, RID p_dest_cubemap, const Size2i &p_size) {
+ ERR_FAIL_COND_MSG(prefer_raster_effects, "Can't use compute based cubemap downsample with the mobile renderer.");
+
+ UniformSetCacheRD *uniform_set_cache = UniformSetCacheRD::get_singleton();
+ ERR_FAIL_NULL(uniform_set_cache);
+ MaterialStorage *material_storage = MaterialStorage::get_singleton();
+ ERR_FAIL_NULL(material_storage);
+
+ cubemap_downsampler.push_constant.face_size = p_size.x;
+ cubemap_downsampler.push_constant.face_id = 0; // we render all 6 sides to each layer in one call
+
+ // setup our uniforms
+ RID default_sampler = material_storage->sampler_rd_get_default(RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
+
+ RD::Uniform u_source_cubemap(RD::UNIFORM_TYPE_SAMPLER_WITH_TEXTURE, 0, Vector<RID>({ default_sampler, p_source_cubemap }));
+ RD::Uniform u_dest_cubemap(RD::UNIFORM_TYPE_IMAGE, 0, Vector<RID>({ p_dest_cubemap }));
+
+ RID shader = cubemap_downsampler.compute_shader.version_get_shader(cubemap_downsampler.shader_version, 0);
+ ERR_FAIL_COND(shader.is_null());
+
+ RD::ComputeListID compute_list = RD::get_singleton()->compute_list_begin();
+ RD::get_singleton()->compute_list_bind_compute_pipeline(compute_list, cubemap_downsampler.compute_pipeline);
+ RD::get_singleton()->compute_list_bind_uniform_set(compute_list, uniform_set_cache->get_cache(shader, 0, u_source_cubemap), 0);
+ RD::get_singleton()->compute_list_bind_uniform_set(compute_list, uniform_set_cache->get_cache(shader, 1, u_dest_cubemap), 1);
+
+ int x_groups = (p_size.x - 1) / 8 + 1;
+ int y_groups = (p_size.y - 1) / 8 + 1;
+
+ RD::get_singleton()->compute_list_set_push_constant(compute_list, &cubemap_downsampler.push_constant, sizeof(CubemapDownsamplerPushConstant));
+
+ RD::get_singleton()->compute_list_dispatch(compute_list, x_groups, y_groups, 6); // one z_group for each face
+
+ RD::get_singleton()->compute_list_end();
+}
+
+void CopyEffects::cubemap_downsample_raster(RID p_source_cubemap, RID p_dest_framebuffer, uint32_t p_face_id, const Size2i &p_size) {
+ ERR_FAIL_COND_MSG(!prefer_raster_effects, "Can't use raster based cubemap downsample with the clustered renderer.");
+ ERR_FAIL_COND_MSG(p_face_id >= 6, "Raster implementation of cubemap downsample must process one side at a time.");
+
+ UniformSetCacheRD *uniform_set_cache = UniformSetCacheRD::get_singleton();
+ ERR_FAIL_NULL(uniform_set_cache);
+ MaterialStorage *material_storage = MaterialStorage::get_singleton();
+ ERR_FAIL_NULL(material_storage);
+
+ cubemap_downsampler.push_constant.face_size = p_size.x;
+ cubemap_downsampler.push_constant.face_id = p_face_id;
+
+ // setup our uniforms
+ RID default_sampler = material_storage->sampler_rd_get_default(RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
+
+ RD::Uniform u_source_cubemap(RD::UNIFORM_TYPE_SAMPLER_WITH_TEXTURE, 0, Vector<RID>({ default_sampler, p_source_cubemap }));
+
+ RID shader = cubemap_downsampler.raster_shader.version_get_shader(cubemap_downsampler.shader_version, 0);
+ ERR_FAIL_COND(shader.is_null());
+
+ RD::DrawListID draw_list = RD::get_singleton()->draw_list_begin(p_dest_framebuffer, RD::INITIAL_ACTION_KEEP, RD::FINAL_ACTION_READ, RD::INITIAL_ACTION_KEEP, RD::FINAL_ACTION_DISCARD);
+ RD::get_singleton()->draw_list_bind_render_pipeline(draw_list, cubemap_downsampler.raster_pipeline.get_render_pipeline(RD::INVALID_ID, RD::get_singleton()->framebuffer_get_format(p_dest_framebuffer)));
+ RD::get_singleton()->draw_list_bind_uniform_set(draw_list, uniform_set_cache->get_cache(shader, 0, u_source_cubemap), 0);
+ RD::get_singleton()->draw_list_bind_index_array(draw_list, material_storage->get_quad_index_array());
+
+ RD::get_singleton()->draw_list_set_push_constant(draw_list, &cubemap_downsampler.push_constant, sizeof(CubemapDownsamplerPushConstant));
+
+ RD::get_singleton()->draw_list_draw(draw_list, true);
+ RD::get_singleton()->draw_list_end();
+}
+
+void CopyEffects::cubemap_filter(RID p_source_cubemap, Vector<RID> p_dest_cubemap, bool p_use_array) {
+ ERR_FAIL_COND_MSG(prefer_raster_effects, "Can't use compute based cubemap filter with the mobile renderer.");
+
+ UniformSetCacheRD *uniform_set_cache = UniformSetCacheRD::get_singleton();
+ ERR_FAIL_NULL(uniform_set_cache);
+ MaterialStorage *material_storage = MaterialStorage::get_singleton();
+ ERR_FAIL_NULL(material_storage);
+
+ Vector<RD::Uniform> uniforms;
+ for (int i = 0; i < p_dest_cubemap.size(); i++) {
+ RD::Uniform u;
+ u.uniform_type = RD::UNIFORM_TYPE_IMAGE;
+ u.binding = i;
+ u.append_id(p_dest_cubemap[i]);
+ uniforms.push_back(u);
+ }
+ if (RD::get_singleton()->uniform_set_is_valid(filter.image_uniform_set)) {
+ RD::get_singleton()->free(filter.image_uniform_set);
+ }
+ filter.image_uniform_set = RD::get_singleton()->uniform_set_create(uniforms, filter.compute_shader.version_get_shader(filter.shader_version, 0), 2);
+
+ // setup our uniforms
+ RID default_mipmap_sampler = material_storage->sampler_rd_get_default(RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR_WITH_MIPMAPS, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
+
+ RD::Uniform u_source_cubemap(RD::UNIFORM_TYPE_SAMPLER_WITH_TEXTURE, 0, Vector<RID>({ default_mipmap_sampler, p_source_cubemap }));
+
+ int mode = p_use_array ? FILTER_MODE_HIGH_QUALITY_ARRAY : FILTER_MODE_HIGH_QUALITY;
+ mode = filter.use_high_quality ? mode : mode + 1;
+
+ RID shader = filter.compute_shader.version_get_shader(filter.shader_version, mode);
+ ERR_FAIL_COND(shader.is_null());
+
+ RD::ComputeListID compute_list = RD::get_singleton()->compute_list_begin();
+ RD::get_singleton()->compute_list_bind_compute_pipeline(compute_list, filter.compute_pipelines[mode]);
+ RD::get_singleton()->compute_list_bind_uniform_set(compute_list, uniform_set_cache->get_cache(shader, 0, u_source_cubemap), 0);
+ RD::get_singleton()->compute_list_bind_uniform_set(compute_list, filter.uniform_set, 1);
+ RD::get_singleton()->compute_list_bind_uniform_set(compute_list, filter.image_uniform_set, 2);
+
+ int x_groups = p_use_array ? 1792 : 342; // (128 * 128 * 7) / 64 : (128*128 + 64*64 + 32*32 + 16*16 + 8*8 + 4*4 + 2*2) / 64
+
+ RD::get_singleton()->compute_list_dispatch(compute_list, x_groups, 6, 1); // one y_group for each face
+
+ RD::get_singleton()->compute_list_end();
+}
+
+void CopyEffects::cubemap_filter_raster(RID p_source_cubemap, RID p_dest_framebuffer, uint32_t p_face_id, uint32_t p_mip_level) {
+ ERR_FAIL_COND_MSG(!prefer_raster_effects, "Can't use raster based cubemap filter with the clustered renderer.");
+ ERR_FAIL_COND_MSG(p_face_id >= 6, "Raster implementation of cubemap filter must process one side at a time.");
+
+ UniformSetCacheRD *uniform_set_cache = UniformSetCacheRD::get_singleton();
+ ERR_FAIL_NULL(uniform_set_cache);
+ MaterialStorage *material_storage = MaterialStorage::get_singleton();
+ ERR_FAIL_NULL(material_storage);
+
+ // TODO implement!
+ CubemapFilterRasterPushConstant push_constant;
+ push_constant.mip_level = p_mip_level;
+ push_constant.face_id = p_face_id;
+
+ // setup our uniforms
+ RID default_mipmap_sampler = material_storage->sampler_rd_get_default(RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR_WITH_MIPMAPS, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
+
+ RD::Uniform u_source_cubemap(RD::UNIFORM_TYPE_SAMPLER_WITH_TEXTURE, 0, Vector<RID>({ default_mipmap_sampler, p_source_cubemap }));
+
+ CubemapFilterMode mode = filter.use_high_quality ? FILTER_MODE_HIGH_QUALITY : FILTER_MODE_LOW_QUALITY;
+
+ RID shader = filter.raster_shader.version_get_shader(filter.shader_version, mode);
+ ERR_FAIL_COND(shader.is_null());
+
+ RD::DrawListID draw_list = RD::get_singleton()->draw_list_begin(p_dest_framebuffer, RD::INITIAL_ACTION_KEEP, RD::FINAL_ACTION_READ, RD::INITIAL_ACTION_KEEP, RD::FINAL_ACTION_DISCARD);
+ RD::get_singleton()->draw_list_bind_render_pipeline(draw_list, filter.raster_pipelines[mode].get_render_pipeline(RD::INVALID_ID, RD::get_singleton()->framebuffer_get_format(p_dest_framebuffer)));
+ RD::get_singleton()->draw_list_bind_uniform_set(draw_list, uniform_set_cache->get_cache(shader, 0, u_source_cubemap), 0);
+ RD::get_singleton()->draw_list_bind_uniform_set(draw_list, filter.uniform_set, 1);
+ RD::get_singleton()->draw_list_bind_index_array(draw_list, material_storage->get_quad_index_array());
+
+ RD::get_singleton()->draw_list_set_push_constant(draw_list, &push_constant, sizeof(CubemapFilterRasterPushConstant));
+
+ RD::get_singleton()->draw_list_draw(draw_list, true);
+ RD::get_singleton()->draw_list_end();
+}
+
+void CopyEffects::cubemap_roughness(RID p_source_rd_texture, RID p_dest_texture, uint32_t p_face_id, uint32_t p_sample_count, float p_roughness, float p_size) {
+ ERR_FAIL_COND_MSG(prefer_raster_effects, "Can't use compute based cubemap roughness with the mobile renderer.");
+
+ UniformSetCacheRD *uniform_set_cache = UniformSetCacheRD::get_singleton();
+ ERR_FAIL_NULL(uniform_set_cache);
+ MaterialStorage *material_storage = MaterialStorage::get_singleton();
+ ERR_FAIL_NULL(material_storage);
+
+ memset(&roughness.push_constant, 0, sizeof(CubemapRoughnessPushConstant));
+
+ roughness.push_constant.face_id = p_face_id > 9 ? 0 : p_face_id;
+ roughness.push_constant.roughness = p_roughness * p_roughness; // Shader expects roughness, not perceptual roughness, so multiply before passing in.
+ roughness.push_constant.sample_count = p_sample_count;
+ roughness.push_constant.use_direct_write = p_roughness == 0.0;
+ roughness.push_constant.face_size = p_size;
+
+ // setup our uniforms
+ RID default_mipmap_sampler = material_storage->sampler_rd_get_default(RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR_WITH_MIPMAPS, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
+
+ RD::Uniform u_source_rd_texture(RD::UNIFORM_TYPE_SAMPLER_WITH_TEXTURE, 0, Vector<RID>({ default_mipmap_sampler, p_source_rd_texture }));
+ RD::Uniform u_dest_texture(RD::UNIFORM_TYPE_IMAGE, 0, Vector<RID>({ p_dest_texture }));
+
+ RID shader = roughness.compute_shader.version_get_shader(roughness.shader_version, 0);
+ ERR_FAIL_COND(shader.is_null());
+
+ RD::ComputeListID compute_list = RD::get_singleton()->compute_list_begin();
+ RD::get_singleton()->compute_list_bind_compute_pipeline(compute_list, roughness.compute_pipeline);
+
+ RD::get_singleton()->compute_list_bind_uniform_set(compute_list, uniform_set_cache->get_cache(shader, 0, u_source_rd_texture), 0);
+ RD::get_singleton()->compute_list_bind_uniform_set(compute_list, uniform_set_cache->get_cache(shader, 1, u_dest_texture), 1);
+
+ RD::get_singleton()->compute_list_set_push_constant(compute_list, &roughness.push_constant, sizeof(CubemapRoughnessPushConstant));
+
+ int x_groups = (p_size - 1) / 8 + 1;
+ int y_groups = (p_size - 1) / 8 + 1;
+
+ RD::get_singleton()->compute_list_dispatch(compute_list, x_groups, y_groups, p_face_id > 9 ? 6 : 1);
+
+ RD::get_singleton()->compute_list_end();
+}
+
+void CopyEffects::cubemap_roughness_raster(RID p_source_rd_texture, RID p_dest_framebuffer, uint32_t p_face_id, uint32_t p_sample_count, float p_roughness, float p_size) {
+ ERR_FAIL_COND_MSG(!prefer_raster_effects, "Can't use raster based cubemap roughness with the clustered renderer.");
+ ERR_FAIL_COND_MSG(p_face_id >= 6, "Raster implementation of cubemap roughness must process one side at a time.");
+
+ UniformSetCacheRD *uniform_set_cache = UniformSetCacheRD::get_singleton();
+ ERR_FAIL_NULL(uniform_set_cache);
+ MaterialStorage *material_storage = MaterialStorage::get_singleton();
+ ERR_FAIL_NULL(material_storage);
+
+ memset(&roughness.push_constant, 0, sizeof(CubemapRoughnessPushConstant));
+
+ roughness.push_constant.face_id = p_face_id;
+ roughness.push_constant.roughness = p_roughness * p_roughness; // Shader expects roughness, not perceptual roughness, so multiply before passing in.
+ roughness.push_constant.sample_count = p_sample_count;
+ roughness.push_constant.use_direct_write = p_roughness == 0.0;
+ roughness.push_constant.face_size = p_size;
+
+ // setup our uniforms
+ RID default_sampler = material_storage->sampler_rd_get_default(RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
+
+ RD::Uniform u_source_rd_texture(RD::UNIFORM_TYPE_SAMPLER_WITH_TEXTURE, 0, Vector<RID>({ default_sampler, p_source_rd_texture }));
+
+ RID shader = roughness.raster_shader.version_get_shader(roughness.shader_version, 0);
+ ERR_FAIL_COND(shader.is_null());
+
+ RD::DrawListID draw_list = RD::get_singleton()->draw_list_begin(p_dest_framebuffer, RD::INITIAL_ACTION_KEEP, RD::FINAL_ACTION_READ, RD::INITIAL_ACTION_KEEP, RD::FINAL_ACTION_DISCARD);
+ RD::get_singleton()->draw_list_bind_render_pipeline(draw_list, roughness.raster_pipeline.get_render_pipeline(RD::INVALID_ID, RD::get_singleton()->framebuffer_get_format(p_dest_framebuffer)));
+ RD::get_singleton()->draw_list_bind_uniform_set(draw_list, uniform_set_cache->get_cache(shader, 0, u_source_rd_texture), 0);
+ RD::get_singleton()->draw_list_bind_index_array(draw_list, material_storage->get_quad_index_array());
+
+ RD::get_singleton()->draw_list_set_push_constant(draw_list, &roughness.push_constant, sizeof(CubemapRoughnessPushConstant));
+
+ RD::get_singleton()->draw_list_draw(draw_list, true);
+ RD::get_singleton()->draw_list_end();
+}
diff --git a/servers/rendering/renderer_rd/effects/copy_effects.h b/servers/rendering/renderer_rd/effects/copy_effects.h
index e522408d20..882b446964 100644
--- a/servers/rendering/renderer_rd/effects/copy_effects.h
+++ b/servers/rendering/renderer_rd/effects/copy_effects.h
@@ -35,6 +35,13 @@
#include "servers/rendering/renderer_rd/shaders/effects/blur_raster.glsl.gen.h"
#include "servers/rendering/renderer_rd/shaders/effects/copy.glsl.gen.h"
#include "servers/rendering/renderer_rd/shaders/effects/copy_to_fb.glsl.gen.h"
+#include "servers/rendering/renderer_rd/shaders/effects/cube_to_dp.glsl.gen.h"
+#include "servers/rendering/renderer_rd/shaders/effects/cubemap_downsampler.glsl.gen.h"
+#include "servers/rendering/renderer_rd/shaders/effects/cubemap_downsampler_raster.glsl.gen.h"
+#include "servers/rendering/renderer_rd/shaders/effects/cubemap_filter.glsl.gen.h"
+#include "servers/rendering/renderer_rd/shaders/effects/cubemap_filter_raster.glsl.gen.h"
+#include "servers/rendering/renderer_rd/shaders/effects/cubemap_roughness.glsl.gen.h"
+#include "servers/rendering/renderer_rd/shaders/effects/cubemap_roughness_raster.glsl.gen.h"
#include "servers/rendering/renderer_scene_render.h"
#include "servers/rendering_server.h"
@@ -189,6 +196,84 @@ private:
} copy_to_fb;
+ // Copy to DP
+
+ struct CopyToDPPushConstant {
+ float z_far;
+ float z_near;
+ float texel_size[2];
+ float screen_rect[4];
+ };
+
+ struct CopyToDP {
+ CubeToDpShaderRD shader;
+ RID shader_version;
+ PipelineCacheRD pipeline;
+ } cube_to_dp;
+
+ // Cubemap effects
+
+ struct CubemapDownsamplerPushConstant {
+ uint32_t face_size;
+ uint32_t face_id;
+ float pad[2];
+ };
+
+ struct CubemapDownsampler {
+ CubemapDownsamplerPushConstant push_constant;
+ CubemapDownsamplerShaderRD compute_shader;
+ CubemapDownsamplerRasterShaderRD raster_shader;
+ RID shader_version;
+ RID compute_pipeline;
+ PipelineCacheRD raster_pipeline;
+ } cubemap_downsampler;
+
+ enum CubemapFilterMode {
+ FILTER_MODE_HIGH_QUALITY,
+ FILTER_MODE_LOW_QUALITY,
+ FILTER_MODE_HIGH_QUALITY_ARRAY,
+ FILTER_MODE_LOW_QUALITY_ARRAY,
+ FILTER_MODE_MAX,
+ };
+
+ struct CubemapFilterRasterPushConstant {
+ uint32_t mip_level;
+ uint32_t face_id;
+ float pad[2];
+ };
+
+ struct CubemapFilter {
+ CubemapFilterShaderRD compute_shader;
+ CubemapFilterRasterShaderRD raster_shader;
+ RID shader_version;
+ RID compute_pipelines[FILTER_MODE_MAX];
+ PipelineCacheRD raster_pipelines[FILTER_MODE_MAX];
+
+ RID uniform_set;
+ RID image_uniform_set;
+ RID coefficient_buffer;
+ bool use_high_quality;
+
+ } filter;
+
+ struct CubemapRoughnessPushConstant {
+ uint32_t face_id;
+ uint32_t sample_count;
+ float roughness;
+ uint32_t use_direct_write;
+ float face_size;
+ float pad[3];
+ };
+
+ struct CubemapRoughness {
+ CubemapRoughnessPushConstant push_constant;
+ CubemapRoughnessShaderRD compute_shader;
+ CubemapRoughnessRasterShaderRD raster_shader;
+ RID shader_version;
+ RID compute_pipeline;
+ PipelineCacheRD raster_pipeline;
+ } roughness;
+
static CopyEffects *singleton;
public:
@@ -197,6 +282,8 @@ public:
CopyEffects(bool p_prefer_raster_effects);
~CopyEffects();
+ bool get_prefer_raster_effects() { return prefer_raster_effects; }
+
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);
void copy_depth_to_rect(RID p_source_rd_texture, RID p_dest_framebuffer, const Rect2i &p_rect, bool p_flip_y = false);
@@ -213,6 +300,15 @@ public:
void make_mipmap_raster(RID p_source_rd_texture, RID p_dest_framebuffer, const Size2i &p_size);
void set_color(RID p_dest_texture, const Color &p_color, const Rect2i &p_region, bool p_8bit_dst = false);
+
+ void copy_cubemap_to_dp(RID p_source_rd_texture, RID p_dst_framebuffer, const Rect2 &p_rect, const Vector2 &p_dst_size, float p_z_near, float p_z_far, bool p_dp_flip);
+ void cubemap_downsample(RID p_source_cubemap, RID p_dest_cubemap, const Size2i &p_size);
+ void cubemap_downsample_raster(RID p_source_cubemap, RID p_dest_framebuffer, uint32_t p_face_id, const Size2i &p_size);
+ void cubemap_filter(RID p_source_cubemap, Vector<RID> p_dest_cubemap, bool p_use_array);
+ void cubemap_filter_raster(RID p_source_cubemap, RID p_dest_framebuffer, uint32_t p_face_id, uint32_t p_mip_level);
+
+ void cubemap_roughness(RID p_source_rd_texture, RID p_dest_texture, uint32_t p_face_id, uint32_t p_sample_count, float p_roughness, float p_size);
+ void cubemap_roughness_raster(RID p_source_rd_texture, RID p_dest_framebuffer, uint32_t p_face_id, uint32_t p_sample_count, float p_roughness, float p_size);
};
} // namespace RendererRD
diff --git a/servers/rendering/renderer_rd/effects/resolve.cpp b/servers/rendering/renderer_rd/effects/resolve.cpp
new file mode 100644
index 0000000000..6c49a2ebce
--- /dev/null
+++ b/servers/rendering/renderer_rd/effects/resolve.cpp
@@ -0,0 +1,130 @@
+/*************************************************************************/
+/* resolve.cpp */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2022 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 "resolve.h"
+#include "servers/rendering/renderer_rd/renderer_compositor_rd.h"
+#include "servers/rendering/renderer_rd/storage_rd/material_storage.h"
+#include "servers/rendering/renderer_rd/uniform_set_cache_rd.h"
+
+using namespace RendererRD;
+
+Resolve::Resolve() {
+ Vector<String> resolve_modes;
+ resolve_modes.push_back("\n#define MODE_RESOLVE_GI\n");
+ resolve_modes.push_back("\n#define MODE_RESOLVE_GI\n#define VOXEL_GI_RESOLVE\n");
+ resolve_modes.push_back("\n#define MODE_RESOLVE_DEPTH\n");
+
+ resolve.shader.initialize(resolve_modes);
+
+ resolve.shader_version = resolve.shader.version_create();
+
+ for (int i = 0; i < RESOLVE_MODE_MAX; i++) {
+ resolve.pipelines[i] = RD::get_singleton()->compute_pipeline_create(resolve.shader.version_get_shader(resolve.shader_version, i));
+ }
+}
+
+Resolve::~Resolve() {
+ resolve.shader.version_free(resolve.shader_version);
+}
+
+void Resolve::resolve_gi(RID p_source_depth, RID p_source_normal_roughness, RID p_source_voxel_gi, RID p_dest_depth, RID p_dest_normal_roughness, RID p_dest_voxel_gi, Vector2i p_screen_size, int p_samples, uint32_t p_barrier) {
+ UniformSetCacheRD *uniform_set_cache = UniformSetCacheRD::get_singleton();
+ ERR_FAIL_NULL(uniform_set_cache);
+ MaterialStorage *material_storage = MaterialStorage::get_singleton();
+ ERR_FAIL_NULL(material_storage);
+
+ ResolvePushConstant push_constant;
+ push_constant.screen_size[0] = p_screen_size.x;
+ push_constant.screen_size[1] = p_screen_size.y;
+ push_constant.samples = p_samples;
+
+ // setup our uniforms
+ RID default_sampler = material_storage->sampler_rd_get_default(RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
+
+ RD::Uniform u_source_depth(RD::UNIFORM_TYPE_SAMPLER_WITH_TEXTURE, 0, Vector<RID>({ default_sampler, p_source_depth }));
+ RD::Uniform u_source_normal_roughness(RD::UNIFORM_TYPE_SAMPLER_WITH_TEXTURE, 1, Vector<RID>({ default_sampler, p_source_normal_roughness }));
+ RD::Uniform u_dest_depth(RD::UNIFORM_TYPE_IMAGE, 0, Vector<RID>({ p_dest_depth }));
+ RD::Uniform u_dest_normal_roughness(RD::UNIFORM_TYPE_IMAGE, 1, Vector<RID>({ p_dest_normal_roughness }));
+
+ ResolveMode mode = p_source_voxel_gi.is_valid() ? RESOLVE_MODE_GI_VOXEL_GI : RESOLVE_MODE_GI;
+ RID shader = resolve.shader.version_get_shader(resolve.shader_version, mode);
+ ERR_FAIL_COND(shader.is_null());
+
+ RD::ComputeListID compute_list = RD::get_singleton()->compute_list_begin();
+ RD::get_singleton()->compute_list_bind_compute_pipeline(compute_list, resolve.pipelines[mode]);
+ RD::get_singleton()->compute_list_bind_uniform_set(compute_list, uniform_set_cache->get_cache(shader, 0, u_source_depth, u_source_normal_roughness), 0);
+ RD::get_singleton()->compute_list_bind_uniform_set(compute_list, uniform_set_cache->get_cache(shader, 1, u_dest_depth, u_dest_normal_roughness), 1);
+ if (p_source_voxel_gi.is_valid()) {
+ RD::Uniform u_source_voxel_gi(RD::UNIFORM_TYPE_SAMPLER_WITH_TEXTURE, 0, Vector<RID>({ default_sampler, p_source_voxel_gi }));
+ RD::Uniform u_dest_voxel_gi(RD::UNIFORM_TYPE_IMAGE, 0, p_dest_voxel_gi);
+
+ RD::get_singleton()->compute_list_bind_uniform_set(compute_list, uniform_set_cache->get_cache(shader, 2, u_source_voxel_gi), 2);
+ RD::get_singleton()->compute_list_bind_uniform_set(compute_list, uniform_set_cache->get_cache(shader, 3, u_dest_voxel_gi), 3);
+ }
+
+ RD::get_singleton()->compute_list_set_push_constant(compute_list, &push_constant, sizeof(ResolvePushConstant));
+
+ RD::get_singleton()->compute_list_dispatch_threads(compute_list, p_screen_size.x, p_screen_size.y, 1);
+
+ RD::get_singleton()->compute_list_end(p_barrier);
+}
+
+void Resolve::resolve_depth(RID p_source_depth, RID p_dest_depth, Vector2i p_screen_size, int p_samples, uint32_t p_barrier) {
+ UniformSetCacheRD *uniform_set_cache = UniformSetCacheRD::get_singleton();
+ ERR_FAIL_NULL(uniform_set_cache);
+ MaterialStorage *material_storage = MaterialStorage::get_singleton();
+ ERR_FAIL_NULL(material_storage);
+
+ ResolvePushConstant push_constant;
+ push_constant.screen_size[0] = p_screen_size.x;
+ push_constant.screen_size[1] = p_screen_size.y;
+ push_constant.samples = p_samples;
+
+ // setup our uniforms
+ RID default_sampler = material_storage->sampler_rd_get_default(RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
+
+ RD::Uniform u_source_depth(RD::UNIFORM_TYPE_SAMPLER_WITH_TEXTURE, 0, Vector<RID>({ default_sampler, p_source_depth }));
+ RD::Uniform u_dest_depth(RD::UNIFORM_TYPE_IMAGE, 0, p_dest_depth);
+
+ ResolveMode mode = RESOLVE_MODE_DEPTH;
+ RID shader = resolve.shader.version_get_shader(resolve.shader_version, mode);
+ ERR_FAIL_COND(shader.is_null());
+
+ RD::ComputeListID compute_list = RD::get_singleton()->compute_list_begin();
+ RD::get_singleton()->compute_list_bind_compute_pipeline(compute_list, resolve.pipelines[mode]);
+ RD::get_singleton()->compute_list_bind_uniform_set(compute_list, uniform_set_cache->get_cache(shader, 0, u_source_depth), 0);
+ RD::get_singleton()->compute_list_bind_uniform_set(compute_list, uniform_set_cache->get_cache(shader, 1, u_dest_depth), 1);
+
+ RD::get_singleton()->compute_list_set_push_constant(compute_list, &push_constant, sizeof(ResolvePushConstant));
+
+ RD::get_singleton()->compute_list_dispatch_threads(compute_list, p_screen_size.x, p_screen_size.y, 1);
+
+ RD::get_singleton()->compute_list_end(p_barrier);
+}
diff --git a/servers/rendering/renderer_rd/effects/resolve.h b/servers/rendering/renderer_rd/effects/resolve.h
new file mode 100644
index 0000000000..d4b24a610f
--- /dev/null
+++ b/servers/rendering/renderer_rd/effects/resolve.h
@@ -0,0 +1,74 @@
+/*************************************************************************/
+/* resolve.h */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2022 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 RESOLVE_RD_H
+#define RESOLVE_RD_H
+
+#include "servers/rendering/renderer_rd/pipeline_cache_rd.h"
+#include "servers/rendering/renderer_rd/shaders/effects/resolve.glsl.gen.h"
+#include "servers/rendering/renderer_scene_render.h"
+
+#include "servers/rendering_server.h"
+
+namespace RendererRD {
+
+class Resolve {
+private:
+ struct ResolvePushConstant {
+ int32_t screen_size[2];
+ int32_t samples;
+ uint32_t pad;
+ };
+
+ enum ResolveMode {
+ RESOLVE_MODE_GI,
+ RESOLVE_MODE_GI_VOXEL_GI,
+ RESOLVE_MODE_DEPTH,
+ RESOLVE_MODE_MAX
+ };
+
+ struct ResolveShader {
+ ResolvePushConstant push_constant;
+ ResolveShaderRD shader;
+ RID shader_version;
+ RID pipelines[RESOLVE_MODE_MAX]; //3 quality levels
+ } resolve;
+
+public:
+ Resolve();
+ ~Resolve();
+
+ void resolve_gi(RID p_source_depth, RID p_source_normal_roughness, RID p_source_voxel_gi, RID p_dest_depth, RID p_dest_normal_roughness, RID p_dest_voxel_gi, Vector2i p_screen_size, int p_samples, uint32_t p_barrier = RD::BARRIER_MASK_ALL);
+ void resolve_depth(RID p_source_depth, RID p_dest_depth, Vector2i p_screen_size, int p_samples, uint32_t p_barrier = RD::BARRIER_MASK_ALL);
+};
+
+} // namespace RendererRD
+
+#endif // !RESOLVE_RD_H
diff --git a/servers/rendering/renderer_rd/effects_rd.cpp b/servers/rendering/renderer_rd/effects_rd.cpp
index bf97c6fbe9..d45ddbc392 100644
--- a/servers/rendering/renderer_rd/effects_rd.cpp
+++ b/servers/rendering/renderer_rd/effects_rd.cpp
@@ -86,7 +86,7 @@ RID EffectsRD::_get_uniform_set_from_texture(RID p_texture, bool p_use_mipmaps)
u.append_id(p_texture);
uniforms.push_back(u);
// anything with the same configuration (one texture in binding 0 for set 0), is good
- RID uniform_set = RD::get_singleton()->uniform_set_create(uniforms, cube_to_dp.shader.version_get_shader(cube_to_dp.shader_version, 0), 0);
+ RID uniform_set = RD::get_singleton()->uniform_set_create(uniforms, specular_merge.shader.version_get_shader(specular_merge.shader_version, 0), 0);
texture_to_uniform_set_cache[p_texture] = uniform_set;
@@ -473,28 +473,6 @@ void EffectsRD::merge_specular(RID p_dest_framebuffer, RID p_specular, RID p_bas
RD::get_singleton()->draw_list_end();
}
-void EffectsRD::copy_cubemap_to_dp(RID p_source_rd_texture, RID p_dst_framebuffer, const Rect2 &p_rect, const Vector2 &p_dst_size, float p_z_near, float p_z_far, bool p_dp_flip) {
- CopyToDPPushConstant push_constant;
- push_constant.screen_rect[0] = p_rect.position.x;
- push_constant.screen_rect[1] = p_rect.position.y;
- push_constant.screen_rect[2] = p_rect.size.width;
- push_constant.screen_rect[3] = p_rect.size.height;
- push_constant.z_far = p_z_far;
- push_constant.z_near = p_z_near;
- push_constant.texel_size[0] = 1.0f / p_dst_size.x;
- push_constant.texel_size[1] = 1.0f / p_dst_size.y;
- push_constant.texel_size[0] *= p_dp_flip ? -1.0f : 1.0f; // Encode dp flip as x size sign
-
- RD::DrawListID draw_list = RD::get_singleton()->draw_list_begin(p_dst_framebuffer, RD::INITIAL_ACTION_DROP, RD::FINAL_ACTION_DISCARD, RD::INITIAL_ACTION_KEEP, RD::FINAL_ACTION_READ);
- RD::get_singleton()->draw_list_bind_render_pipeline(draw_list, cube_to_dp.pipeline.get_render_pipeline(RD::INVALID_ID, RD::get_singleton()->framebuffer_get_format(p_dst_framebuffer)));
- RD::get_singleton()->draw_list_bind_uniform_set(draw_list, _get_uniform_set_from_texture(p_source_rd_texture), 0);
- RD::get_singleton()->draw_list_bind_index_array(draw_list, index_array);
-
- RD::get_singleton()->draw_list_set_push_constant(draw_list, &push_constant, sizeof(CopyToDPPushConstant));
- RD::get_singleton()->draw_list_draw(draw_list, true);
- RD::get_singleton()->draw_list_end(RD::BARRIER_MASK_RASTER | RD::BARRIER_MASK_TRANSFER);
-}
-
void EffectsRD::luminance_reduction(RID p_source_texture, const Size2i p_source_size, const Vector<RID> p_reduce, RID p_prev_luminance, float p_min_luminance, float p_max_luminance, float p_adjust, bool p_set) {
ERR_FAIL_COND_MSG(prefer_raster_effects, "Can't use compute version of luminance reduction with the mobile renderer.");
@@ -1253,189 +1231,6 @@ void EffectsRD::roughness_limit(RID p_source_normal, RID p_roughness, const Size
RD::get_singleton()->compute_list_end();
}
-void EffectsRD::cubemap_roughness(RID p_source_rd_texture, RID p_dest_texture, uint32_t p_face_id, uint32_t p_sample_count, float p_roughness, float p_size) {
- ERR_FAIL_COND_MSG(prefer_raster_effects, "Can't use compute based cubemap roughness with the mobile renderer.");
-
- memset(&roughness.push_constant, 0, sizeof(CubemapRoughnessPushConstant));
-
- roughness.push_constant.face_id = p_face_id > 9 ? 0 : p_face_id;
- roughness.push_constant.roughness = p_roughness * p_roughness; // Shader expects roughness, not perceptual roughness, so multiply before passing in.
- roughness.push_constant.sample_count = p_sample_count;
- roughness.push_constant.use_direct_write = p_roughness == 0.0;
- roughness.push_constant.face_size = p_size;
-
- RD::ComputeListID compute_list = RD::get_singleton()->compute_list_begin();
- RD::get_singleton()->compute_list_bind_compute_pipeline(compute_list, roughness.compute_pipeline);
-
- RD::get_singleton()->compute_list_bind_uniform_set(compute_list, _get_compute_uniform_set_from_texture(p_source_rd_texture, true), 0);
- RD::get_singleton()->compute_list_bind_uniform_set(compute_list, _get_uniform_set_from_image(p_dest_texture), 1);
-
- RD::get_singleton()->compute_list_set_push_constant(compute_list, &roughness.push_constant, sizeof(CubemapRoughnessPushConstant));
-
- int x_groups = (p_size - 1) / 8 + 1;
- int y_groups = (p_size - 1) / 8 + 1;
-
- RD::get_singleton()->compute_list_dispatch(compute_list, x_groups, y_groups, p_face_id > 9 ? 6 : 1);
-
- RD::get_singleton()->compute_list_end();
-}
-
-void EffectsRD::cubemap_roughness_raster(RID p_source_rd_texture, RID p_dest_framebuffer, uint32_t p_face_id, uint32_t p_sample_count, float p_roughness, float p_size) {
- ERR_FAIL_COND_MSG(!prefer_raster_effects, "Can't use raster based cubemap roughness with the clustered renderer.");
- ERR_FAIL_COND_MSG(p_face_id >= 6, "Raster implementation of cubemap roughness must process one side at a time.");
-
- memset(&roughness.push_constant, 0, sizeof(CubemapRoughnessPushConstant));
-
- roughness.push_constant.face_id = p_face_id;
- roughness.push_constant.roughness = p_roughness * p_roughness; // Shader expects roughness, not perceptual roughness, so multiply before passing in.
- roughness.push_constant.sample_count = p_sample_count;
- roughness.push_constant.use_direct_write = p_roughness == 0.0;
- roughness.push_constant.face_size = p_size;
-
- RD::DrawListID draw_list = RD::get_singleton()->draw_list_begin(p_dest_framebuffer, RD::INITIAL_ACTION_KEEP, RD::FINAL_ACTION_READ, RD::INITIAL_ACTION_KEEP, RD::FINAL_ACTION_DISCARD);
- RD::get_singleton()->draw_list_bind_render_pipeline(draw_list, roughness.raster_pipeline.get_render_pipeline(RD::INVALID_ID, RD::get_singleton()->framebuffer_get_format(p_dest_framebuffer)));
- RD::get_singleton()->draw_list_bind_uniform_set(draw_list, _get_uniform_set_from_texture(p_source_rd_texture), 0);
- RD::get_singleton()->draw_list_bind_index_array(draw_list, index_array);
-
- RD::get_singleton()->draw_list_set_push_constant(draw_list, &roughness.push_constant, sizeof(CubemapRoughnessPushConstant));
-
- RD::get_singleton()->draw_list_draw(draw_list, true);
- RD::get_singleton()->draw_list_end();
-}
-
-void EffectsRD::cubemap_downsample(RID p_source_cubemap, RID p_dest_cubemap, const Size2i &p_size) {
- ERR_FAIL_COND_MSG(prefer_raster_effects, "Can't use compute based cubemap downsample with the mobile renderer.");
-
- cubemap_downsampler.push_constant.face_size = p_size.x;
- cubemap_downsampler.push_constant.face_id = 0; // we render all 6 sides to each layer in one call
-
- RD::ComputeListID compute_list = RD::get_singleton()->compute_list_begin();
- RD::get_singleton()->compute_list_bind_compute_pipeline(compute_list, cubemap_downsampler.compute_pipeline);
- RD::get_singleton()->compute_list_bind_uniform_set(compute_list, _get_compute_uniform_set_from_texture(p_source_cubemap), 0);
- RD::get_singleton()->compute_list_bind_uniform_set(compute_list, _get_uniform_set_from_image(p_dest_cubemap), 1);
-
- int x_groups = (p_size.x - 1) / 8 + 1;
- int y_groups = (p_size.y - 1) / 8 + 1;
-
- RD::get_singleton()->compute_list_set_push_constant(compute_list, &cubemap_downsampler.push_constant, sizeof(CubemapDownsamplerPushConstant));
-
- RD::get_singleton()->compute_list_dispatch(compute_list, x_groups, y_groups, 6); // one z_group for each face
-
- RD::get_singleton()->compute_list_end();
-}
-
-void EffectsRD::cubemap_downsample_raster(RID p_source_cubemap, RID p_dest_framebuffer, uint32_t p_face_id, const Size2i &p_size) {
- ERR_FAIL_COND_MSG(!prefer_raster_effects, "Can't use raster based cubemap downsample with the clustered renderer.");
- ERR_FAIL_COND_MSG(p_face_id >= 6, "Raster implementation of cubemap downsample must process one side at a time.");
-
- cubemap_downsampler.push_constant.face_size = p_size.x;
- cubemap_downsampler.push_constant.face_id = p_face_id;
-
- RD::DrawListID draw_list = RD::get_singleton()->draw_list_begin(p_dest_framebuffer, RD::INITIAL_ACTION_KEEP, RD::FINAL_ACTION_READ, RD::INITIAL_ACTION_KEEP, RD::FINAL_ACTION_DISCARD);
- RD::get_singleton()->draw_list_bind_render_pipeline(draw_list, cubemap_downsampler.raster_pipeline.get_render_pipeline(RD::INVALID_ID, RD::get_singleton()->framebuffer_get_format(p_dest_framebuffer)));
- RD::get_singleton()->draw_list_bind_uniform_set(draw_list, _get_uniform_set_from_texture(p_source_cubemap), 0);
- RD::get_singleton()->draw_list_bind_index_array(draw_list, index_array);
-
- RD::get_singleton()->draw_list_set_push_constant(draw_list, &cubemap_downsampler.push_constant, sizeof(CubemapDownsamplerPushConstant));
-
- RD::get_singleton()->draw_list_draw(draw_list, true);
- RD::get_singleton()->draw_list_end();
-}
-
-void EffectsRD::cubemap_filter(RID p_source_cubemap, Vector<RID> p_dest_cubemap, bool p_use_array) {
- ERR_FAIL_COND_MSG(prefer_raster_effects, "Can't use compute based cubemap filter with the mobile renderer.");
-
- Vector<RD::Uniform> uniforms;
- for (int i = 0; i < p_dest_cubemap.size(); i++) {
- RD::Uniform u;
- u.uniform_type = RD::UNIFORM_TYPE_IMAGE;
- u.binding = i;
- u.append_id(p_dest_cubemap[i]);
- uniforms.push_back(u);
- }
- if (RD::get_singleton()->uniform_set_is_valid(filter.image_uniform_set)) {
- RD::get_singleton()->free(filter.image_uniform_set);
- }
- filter.image_uniform_set = RD::get_singleton()->uniform_set_create(uniforms, filter.compute_shader.version_get_shader(filter.shader_version, 0), 2);
-
- int pipeline = p_use_array ? FILTER_MODE_HIGH_QUALITY_ARRAY : FILTER_MODE_HIGH_QUALITY;
- pipeline = filter.use_high_quality ? pipeline : pipeline + 1;
- RD::ComputeListID compute_list = RD::get_singleton()->compute_list_begin();
- RD::get_singleton()->compute_list_bind_compute_pipeline(compute_list, filter.compute_pipelines[pipeline]);
- RD::get_singleton()->compute_list_bind_uniform_set(compute_list, _get_compute_uniform_set_from_texture(p_source_cubemap, true), 0);
- RD::get_singleton()->compute_list_bind_uniform_set(compute_list, filter.uniform_set, 1);
- RD::get_singleton()->compute_list_bind_uniform_set(compute_list, filter.image_uniform_set, 2);
-
- int x_groups = p_use_array ? 1792 : 342; // (128 * 128 * 7) / 64 : (128*128 + 64*64 + 32*32 + 16*16 + 8*8 + 4*4 + 2*2) / 64
-
- RD::get_singleton()->compute_list_dispatch(compute_list, x_groups, 6, 1); // one y_group for each face
-
- RD::get_singleton()->compute_list_end();
-}
-
-void EffectsRD::cubemap_filter_raster(RID p_source_cubemap, RID p_dest_framebuffer, uint32_t p_face_id, uint32_t p_mip_level) {
- ERR_FAIL_COND_MSG(!prefer_raster_effects, "Can't use raster based cubemap filter with the clustered renderer.");
- ERR_FAIL_COND_MSG(p_face_id >= 6, "Raster implementation of cubemap filter must process one side at a time.");
-
- // TODO implement!
- CubemapFilterRasterPushConstant push_constant;
- push_constant.mip_level = p_mip_level;
- push_constant.face_id = p_face_id;
-
- CubemapFilterMode mode = filter.use_high_quality ? FILTER_MODE_HIGH_QUALITY : FILTER_MODE_LOW_QUALITY;
-
- RD::DrawListID draw_list = RD::get_singleton()->draw_list_begin(p_dest_framebuffer, RD::INITIAL_ACTION_KEEP, RD::FINAL_ACTION_READ, RD::INITIAL_ACTION_KEEP, RD::FINAL_ACTION_DISCARD);
- RD::get_singleton()->draw_list_bind_render_pipeline(draw_list, filter.raster_pipelines[mode].get_render_pipeline(RD::INVALID_ID, RD::get_singleton()->framebuffer_get_format(p_dest_framebuffer)));
- RD::get_singleton()->draw_list_bind_uniform_set(draw_list, _get_uniform_set_from_texture(p_source_cubemap), 0);
- RD::get_singleton()->draw_list_bind_uniform_set(draw_list, filter.uniform_set, 1);
- RD::get_singleton()->draw_list_bind_index_array(draw_list, index_array);
-
- RD::get_singleton()->draw_list_set_push_constant(draw_list, &push_constant, sizeof(CubemapFilterRasterPushConstant));
-
- RD::get_singleton()->draw_list_draw(draw_list, true);
- RD::get_singleton()->draw_list_end();
-}
-
-void EffectsRD::resolve_gi(RID p_source_depth, RID p_source_normal_roughness, RID p_source_voxel_gi, RID p_dest_depth, RID p_dest_normal_roughness, RID p_dest_voxel_gi, Vector2i p_screen_size, int p_samples, uint32_t p_barrier) {
- ResolvePushConstant push_constant;
- push_constant.screen_size[0] = p_screen_size.x;
- push_constant.screen_size[1] = p_screen_size.y;
- push_constant.samples = p_samples;
-
- RD::ComputeListID compute_list = RD::get_singleton()->compute_list_begin();
- RD::get_singleton()->compute_list_bind_compute_pipeline(compute_list, resolve.pipelines[p_source_voxel_gi.is_valid() ? RESOLVE_MODE_GI_VOXEL_GI : RESOLVE_MODE_GI]);
- RD::get_singleton()->compute_list_bind_uniform_set(compute_list, _get_compute_uniform_set_from_texture_pair(p_source_depth, p_source_normal_roughness), 0);
- RD::get_singleton()->compute_list_bind_uniform_set(compute_list, _get_compute_uniform_set_from_image_pair(p_dest_depth, p_dest_normal_roughness), 1);
- if (p_source_voxel_gi.is_valid()) {
- RD::get_singleton()->compute_list_bind_uniform_set(compute_list, _get_compute_uniform_set_from_texture(p_source_voxel_gi), 2);
- RD::get_singleton()->compute_list_bind_uniform_set(compute_list, _get_uniform_set_from_image(p_dest_voxel_gi), 3);
- }
-
- RD::get_singleton()->compute_list_set_push_constant(compute_list, &push_constant, sizeof(ResolvePushConstant));
-
- RD::get_singleton()->compute_list_dispatch_threads(compute_list, p_screen_size.x, p_screen_size.y, 1);
-
- RD::get_singleton()->compute_list_end(p_barrier);
-}
-
-void EffectsRD::resolve_depth(RID p_source_depth, RID p_dest_depth, Vector2i p_screen_size, int p_samples, uint32_t p_barrier) {
- ResolvePushConstant push_constant;
- push_constant.screen_size[0] = p_screen_size.x;
- push_constant.screen_size[1] = p_screen_size.y;
- push_constant.samples = p_samples;
-
- RD::ComputeListID compute_list = RD::get_singleton()->compute_list_begin();
- RD::get_singleton()->compute_list_bind_compute_pipeline(compute_list, resolve.pipelines[RESOLVE_MODE_DEPTH]);
- RD::get_singleton()->compute_list_bind_uniform_set(compute_list, _get_compute_uniform_set_from_texture(p_source_depth), 0);
- RD::get_singleton()->compute_list_bind_uniform_set(compute_list, _get_uniform_set_from_image(p_dest_depth), 1);
-
- RD::get_singleton()->compute_list_set_push_constant(compute_list, &push_constant, sizeof(ResolvePushConstant));
-
- RD::get_singleton()->compute_list_dispatch_threads(compute_list, p_screen_size.x, p_screen_size.y, 1);
-
- RD::get_singleton()->compute_list_end(p_barrier);
-}
-
void EffectsRD::sort_buffer(RID p_uniform_set, int p_size) {
Sort::PushConstant push_constant;
push_constant.total_elements = p_size;
@@ -1529,28 +1324,6 @@ EffectsRD::EffectsRD(bool p_prefer_raster_effects) {
prefer_raster_effects = p_prefer_raster_effects;
- {
- // Initialize roughness
- Vector<String> cubemap_roughness_modes;
- cubemap_roughness_modes.push_back("");
-
- if (prefer_raster_effects) {
- roughness.raster_shader.initialize(cubemap_roughness_modes);
-
- roughness.shader_version = roughness.raster_shader.version_create();
-
- roughness.raster_pipeline.setup(roughness.raster_shader.version_get_shader(roughness.shader_version, 0), RD::RENDER_PRIMITIVE_TRIANGLES, RD::PipelineRasterizationState(), RD::PipelineMultisampleState(), RD::PipelineDepthStencilState(), RD::PipelineColorBlendState::create_disabled(), 0);
-
- } else {
- roughness.compute_shader.initialize(cubemap_roughness_modes);
-
- roughness.shader_version = roughness.compute_shader.version_create();
-
- roughness.compute_pipeline = RD::get_singleton()->compute_pipeline_create(roughness.compute_shader.version_get_shader(roughness.shader_version, 0));
- roughness.raster_pipeline.clear();
- }
- }
-
if (prefer_raster_effects) {
Vector<String> luminance_reduce_modes;
luminance_reduce_modes.push_back("\n#define FIRST_PASS\n"); // LUMINANCE_REDUCE_FRAGMENT_FIRST
@@ -1584,22 +1357,6 @@ EffectsRD::EffectsRD(bool p_prefer_raster_effects) {
}
}
- {
- // Initialize copier
- Vector<String> copy_modes;
- copy_modes.push_back("\n");
-
- cube_to_dp.shader.initialize(copy_modes);
-
- cube_to_dp.shader_version = cube_to_dp.shader.version_create();
- RID shader = cube_to_dp.shader.version_get_shader(cube_to_dp.shader_version, 0);
- RD::PipelineDepthStencilState dss;
- dss.enable_depth_test = true;
- dss.depth_compare_operator = RD::COMPARE_OP_ALWAYS;
- dss.enable_depth_write = true;
- cube_to_dp.pipeline.setup(shader, RD::RENDER_PRIMITIVE_TRIANGLES, RD::PipelineRasterizationState(), RD::PipelineMultisampleState(), dss, RD::PipelineColorBlendState(), 0);
- }
-
if (!prefer_raster_effects) {
{
// Initialize depth buffer for screen space effects
@@ -1760,92 +1517,6 @@ EffectsRD::EffectsRD(bool p_prefer_raster_effects) {
roughness_limiter.pipeline = RD::get_singleton()->compute_pipeline_create(roughness_limiter.shader.version_get_shader(roughness_limiter.shader_version, 0));
}
- {
- //Initialize cubemap downsampler
- Vector<String> cubemap_downsampler_modes;
- cubemap_downsampler_modes.push_back("");
-
- if (prefer_raster_effects) {
- cubemap_downsampler.raster_shader.initialize(cubemap_downsampler_modes);
-
- cubemap_downsampler.shader_version = cubemap_downsampler.raster_shader.version_create();
-
- cubemap_downsampler.raster_pipeline.setup(cubemap_downsampler.raster_shader.version_get_shader(cubemap_downsampler.shader_version, 0), RD::RENDER_PRIMITIVE_TRIANGLES, RD::PipelineRasterizationState(), RD::PipelineMultisampleState(), RD::PipelineDepthStencilState(), RD::PipelineColorBlendState::create_disabled(), 0);
- } else {
- cubemap_downsampler.compute_shader.initialize(cubemap_downsampler_modes);
-
- cubemap_downsampler.shader_version = cubemap_downsampler.compute_shader.version_create();
-
- cubemap_downsampler.compute_pipeline = RD::get_singleton()->compute_pipeline_create(cubemap_downsampler.compute_shader.version_get_shader(cubemap_downsampler.shader_version, 0));
- cubemap_downsampler.raster_pipeline.clear();
- }
- }
-
- {
- // Initialize cubemap filter
- filter.use_high_quality = GLOBAL_GET("rendering/reflections/sky_reflections/fast_filter_high_quality");
-
- Vector<String> cubemap_filter_modes;
- cubemap_filter_modes.push_back("\n#define USE_HIGH_QUALITY\n");
- cubemap_filter_modes.push_back("\n#define USE_LOW_QUALITY\n");
- cubemap_filter_modes.push_back("\n#define USE_HIGH_QUALITY\n#define USE_TEXTURE_ARRAY\n");
- cubemap_filter_modes.push_back("\n#define USE_LOW_QUALITY\n#define USE_TEXTURE_ARRAY\n");
-
- if (filter.use_high_quality) {
- filter.coefficient_buffer = RD::get_singleton()->storage_buffer_create(sizeof(high_quality_coeffs));
- RD::get_singleton()->buffer_update(filter.coefficient_buffer, 0, sizeof(high_quality_coeffs), &high_quality_coeffs[0]);
- } else {
- filter.coefficient_buffer = RD::get_singleton()->storage_buffer_create(sizeof(low_quality_coeffs));
- RD::get_singleton()->buffer_update(filter.coefficient_buffer, 0, sizeof(low_quality_coeffs), &low_quality_coeffs[0]);
- }
-
- if (prefer_raster_effects) {
- filter.raster_shader.initialize(cubemap_filter_modes);
-
- // array variants are not supported in raster
- filter.raster_shader.set_variant_enabled(FILTER_MODE_HIGH_QUALITY_ARRAY, false);
- filter.raster_shader.set_variant_enabled(FILTER_MODE_LOW_QUALITY_ARRAY, false);
-
- filter.shader_version = filter.raster_shader.version_create();
-
- for (int i = 0; i < FILTER_MODE_MAX; i++) {
- if (filter.raster_shader.is_variant_enabled(i)) {
- filter.raster_pipelines[i].setup(filter.raster_shader.version_get_shader(filter.shader_version, i), RD::RENDER_PRIMITIVE_TRIANGLES, RD::PipelineRasterizationState(), RD::PipelineMultisampleState(), RD::PipelineDepthStencilState(), RD::PipelineColorBlendState::create_disabled(), 0);
- } else {
- filter.raster_pipelines[i].clear();
- }
- }
-
- Vector<RD::Uniform> uniforms;
- {
- RD::Uniform u;
- u.uniform_type = RD::UNIFORM_TYPE_STORAGE_BUFFER;
- u.binding = 0;
- u.append_id(filter.coefficient_buffer);
- uniforms.push_back(u);
- }
- filter.uniform_set = RD::get_singleton()->uniform_set_create(uniforms, filter.raster_shader.version_get_shader(filter.shader_version, filter.use_high_quality ? 0 : 1), 1);
- } else {
- filter.compute_shader.initialize(cubemap_filter_modes);
- filter.shader_version = filter.compute_shader.version_create();
-
- for (int i = 0; i < FILTER_MODE_MAX; i++) {
- filter.compute_pipelines[i] = RD::get_singleton()->compute_pipeline_create(filter.compute_shader.version_get_shader(filter.shader_version, i));
- filter.raster_pipelines[i].clear();
- }
-
- Vector<RD::Uniform> uniforms;
- {
- RD::Uniform u;
- u.uniform_type = RD::UNIFORM_TYPE_STORAGE_BUFFER;
- u.binding = 0;
- u.append_id(filter.coefficient_buffer);
- uniforms.push_back(u);
- }
- filter.uniform_set = RD::get_singleton()->uniform_set_create(uniforms, filter.compute_shader.version_get_shader(filter.shader_version, filter.use_high_quality ? 0 : 1), 1);
- }
- }
-
if (!prefer_raster_effects) {
Vector<String> specular_modes;
specular_modes.push_back("\n#define MODE_MERGE\n");
@@ -2009,21 +1680,6 @@ EffectsRD::EffectsRD(bool p_prefer_raster_effects) {
ssil.pipelines[i] = RD::get_singleton()->compute_pipeline_create(ssil.interleave_shader.version_get_shader(ssil.interleave_shader_version, i - SSIL_INTERLEAVE));
}
}
-
- {
- Vector<String> resolve_modes;
- resolve_modes.push_back("\n#define MODE_RESOLVE_GI\n");
- resolve_modes.push_back("\n#define MODE_RESOLVE_GI\n#define VOXEL_GI_RESOLVE\n");
- resolve_modes.push_back("\n#define MODE_RESOLVE_DEPTH\n");
-
- resolve.shader.initialize(resolve_modes);
-
- resolve.shader_version = resolve.shader.version_create();
-
- for (int i = 0; i < RESOLVE_MODE_MAX; i++) {
- resolve.pipelines[i] = RD::get_singleton()->compute_pipeline_create(resolve.shader.version_get_shader(resolve.shader_version, i));
- }
- }
}
{
@@ -2083,34 +1739,18 @@ EffectsRD::EffectsRD(bool p_prefer_raster_effects) {
}
EffectsRD::~EffectsRD() {
- if (RD::get_singleton()->uniform_set_is_valid(filter.image_uniform_set)) {
- RD::get_singleton()->free(filter.image_uniform_set);
- }
-
- if (RD::get_singleton()->uniform_set_is_valid(filter.uniform_set)) {
- RD::get_singleton()->free(filter.uniform_set);
- }
-
RD::get_singleton()->free(default_sampler);
RD::get_singleton()->free(default_mipmap_sampler);
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);
TAA_resolve.shader.version_free(TAA_resolve.shader_version);
if (prefer_raster_effects) {
luminance_reduce_raster.shader.version_free(luminance_reduce_raster.shader_version);
- roughness.raster_shader.version_free(roughness.shader_version);
- cubemap_downsampler.raster_shader.version_free(cubemap_downsampler.shader_version);
- filter.raster_shader.version_free(filter.shader_version);
} else {
luminance_reduce.shader.version_free(luminance_reduce.shader_version);
- roughness.compute_shader.version_free(roughness.shader_version);
- cubemap_downsampler.compute_shader.version_free(cubemap_downsampler.shader_version);
- filter.compute_shader.version_free(filter.shader_version);
}
if (!prefer_raster_effects) {
- resolve.shader.version_free(resolve.shader_version);
specular_merge.shader.version_free(specular_merge.shader_version);
ss_effects.downsample_shader.version_free(ss_effects.downsample_shader_version);
ssao.blur_shader.version_free(ssao.blur_shader_version);
@@ -2133,6 +1773,5 @@ EffectsRD::~EffectsRD() {
RD::get_singleton()->free(ssil.importance_map_load_counter);
RD::get_singleton()->free(ssil.projection_uniform_buffer);
}
- cube_to_dp.shader.version_free(cube_to_dp.shader_version);
sort.shader.version_free(sort.shader_version);
}
diff --git a/servers/rendering/renderer_rd/effects_rd.h b/servers/rendering/renderer_rd/effects_rd.h
index 787873642e..76627a8d7d 100644
--- a/servers/rendering/renderer_rd/effects_rd.h
+++ b/servers/rendering/renderer_rd/effects_rd.h
@@ -33,17 +33,9 @@
#include "core/math/camera_matrix.h"
#include "servers/rendering/renderer_rd/pipeline_cache_rd.h"
-#include "servers/rendering/renderer_rd/shaders/cube_to_dp.glsl.gen.h"
-#include "servers/rendering/renderer_rd/shaders/cubemap_downsampler.glsl.gen.h"
-#include "servers/rendering/renderer_rd/shaders/cubemap_downsampler_raster.glsl.gen.h"
-#include "servers/rendering/renderer_rd/shaders/cubemap_filter.glsl.gen.h"
-#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"
#include "servers/rendering/renderer_rd/shaders/roughness_limiter.glsl.gen.h"
#include "servers/rendering/renderer_rd/shaders/screen_space_reflection.glsl.gen.h"
#include "servers/rendering/renderer_rd/shaders/screen_space_reflection_filter.glsl.gen.h"
@@ -105,24 +97,6 @@ private:
RID pipeline;
} TAA_resolve;
- struct CubemapRoughnessPushConstant {
- uint32_t face_id;
- uint32_t sample_count;
- float roughness;
- uint32_t use_direct_write;
- float face_size;
- float pad[3];
- };
-
- struct CubemapRoughness {
- CubemapRoughnessPushConstant push_constant;
- CubemapRoughnessShaderRD compute_shader;
- CubemapRoughnessRasterShaderRD raster_shader;
- RID shader_version;
- RID compute_pipeline;
- PipelineCacheRD raster_pipeline;
- } roughness;
-
enum LuminanceReduceMode {
LUMINANCE_REDUCE_READ,
LUMINANCE_REDUCE,
@@ -168,19 +142,6 @@ private:
PipelineCacheRD pipelines[LUMINANCE_REDUCE_FRAGMENT_MAX];
} luminance_reduce_raster;
- struct CopyToDPPushConstant {
- float z_far;
- float z_near;
- float texel_size[2];
- float screen_rect[4];
- };
-
- struct CoptToDP {
- CubeToDpShaderRD shader;
- RID shader_version;
- PipelineCacheRD pipeline;
- } cube_to_dp;
-
struct SSEffectsDownsamplePushConstant {
float pixel_size[2];
float z_far;
@@ -420,49 +381,6 @@ private:
} roughness_limiter;
- struct CubemapDownsamplerPushConstant {
- uint32_t face_size;
- uint32_t face_id;
- float pad[2];
- };
-
- struct CubemapDownsampler {
- CubemapDownsamplerPushConstant push_constant;
- CubemapDownsamplerShaderRD compute_shader;
- CubemapDownsamplerRasterShaderRD raster_shader;
- RID shader_version;
- RID compute_pipeline;
- PipelineCacheRD raster_pipeline;
- } cubemap_downsampler;
-
- enum CubemapFilterMode {
- FILTER_MODE_HIGH_QUALITY,
- FILTER_MODE_LOW_QUALITY,
- FILTER_MODE_HIGH_QUALITY_ARRAY,
- FILTER_MODE_LOW_QUALITY_ARRAY,
- FILTER_MODE_MAX,
- };
-
- struct CubemapFilterRasterPushConstant {
- uint32_t mip_level;
- uint32_t face_id;
- float pad[2];
- };
-
- struct CubemapFilter {
- CubemapFilterShaderRD compute_shader;
- CubemapFilterRasterShaderRD raster_shader;
- RID shader_version;
- RID compute_pipelines[FILTER_MODE_MAX];
- PipelineCacheRD raster_pipelines[FILTER_MODE_MAX];
-
- RID uniform_set;
- RID image_uniform_set;
- RID coefficient_buffer;
- bool use_high_quality;
-
- } filter;
-
enum SpecularMergeMode {
SPECULAR_MERGE_ADD,
SPECULAR_MERGE_SSR,
@@ -579,26 +497,6 @@ private:
RID pipelines[3]; //3 quality levels
} sss;
- struct ResolvePushConstant {
- int32_t screen_size[2];
- int32_t samples;
- uint32_t pad;
- };
-
- enum ResolveMode {
- RESOLVE_MODE_GI,
- RESOLVE_MODE_GI_VOXEL_GI,
- RESOLVE_MODE_DEPTH,
- RESOLVE_MODE_MAX
- };
-
- struct Resolve {
- ResolvePushConstant push_constant;
- ResolveShaderRD shader;
- RID shader_version;
- RID pipelines[RESOLVE_MODE_MAX]; //3 quality levels
- } resolve;
-
enum SortMode {
SORT_MODE_BLOCK,
SORT_MODE_STEP,
@@ -671,9 +569,6 @@ public:
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 taa_resolve(RID p_frame, RID p_temp, RID p_depth, RID p_velocity, RID p_prev_velocity, RID p_history, Size2 p_resolution, float p_z_near, float p_z_far);
- void cubemap_roughness(RID p_source_rd_texture, RID p_dest_texture, uint32_t p_face_id, uint32_t p_sample_count, float p_roughness, float p_size);
- void cubemap_roughness_raster(RID p_source_rd_texture, RID p_dest_framebuffer, uint32_t p_face_id, uint32_t p_sample_count, float p_roughness, float p_size);
- void copy_cubemap_to_dp(RID p_source_rd_texture, RID p_dst_framebuffer, const Rect2 &p_rect, const Vector2 &p_dst_size, float p_z_near, float p_z_far, bool p_dp_flip);
void luminance_reduction(RID p_source_texture, const Size2i p_source_size, const Vector<RID> p_reduce, RID p_prev_luminance, float p_min_luminance, float p_max_luminance, float p_adjust, bool p_set = false);
void luminance_reduction_raster(RID p_source_texture, const Size2i p_source_size, const Vector<RID> p_reduce, Vector<RID> p_fb, RID p_prev_luminance, float p_min_luminance, float p_max_luminance, float p_adjust, bool p_set = false);
@@ -724,18 +619,11 @@ public:
void screen_space_indirect_lighting(RID p_diffuse, RID p_destination, RID p_normal_buffer, RID p_depth_mipmaps_texture, RID p_ao, const Vector<RID> p_ao_slices, RID p_ao_pong, const Vector<RID> p_ao_pong_slices, RID p_importance_map, RID p_importance_map_pong, RID p_edges, const Vector<RID> p_edges_slices, const CameraMatrix &p_projection, const CameraMatrix &p_last_projection, const SSILSettings &p_settings, bool p_invalidate_uniform_sets, RID &r_gather_uniform_set, RID &r_importance_map_uniform_set, RID &r_projection_uniform_set);
void roughness_limit(RID p_source_normal, RID p_roughness, const Size2i &p_size, float p_curve);
- void cubemap_downsample(RID p_source_cubemap, RID p_dest_cubemap, const Size2i &p_size);
- void cubemap_downsample_raster(RID p_source_cubemap, RID p_dest_framebuffer, uint32_t p_face_id, const Size2i &p_size);
- void cubemap_filter(RID p_source_cubemap, Vector<RID> p_dest_cubemap, bool p_use_array);
- void cubemap_filter_raster(RID p_source_cubemap, RID p_dest_framebuffer, uint32_t p_face_id, uint32_t p_mip_level);
void screen_space_reflection(RID p_diffuse, RID p_normal_roughness, RS::EnvironmentSSRRoughnessQuality p_roughness_quality, RID p_blur_radius, RID p_blur_radius2, RID p_metallic, const Color &p_metallic_mask, RID p_depth, RID p_scale_depth, RID p_scale_normal, RID p_output, RID p_output_blur, const Size2i &p_screen_size, int p_max_steps, float p_fade_in, float p_fade_out, float p_tolerance, const CameraMatrix &p_camera);
void merge_specular(RID p_dest_framebuffer, RID p_specular, RID p_base, RID p_reflection);
void sub_surface_scattering(RID p_diffuse, RID p_diffuse2, RID p_depth, const CameraMatrix &p_camera, const Size2i &p_screen_size, float p_scale, float p_depth_scale, RS::SubSurfaceScatteringQuality p_quality);
- void resolve_gi(RID p_source_depth, RID p_source_normal_roughness, RID p_source_voxel_gi, RID p_dest_depth, RID p_dest_normal_roughness, RID p_dest_voxel_gi, Vector2i p_screen_size, int p_samples, uint32_t p_barrier = RD::BARRIER_MASK_ALL);
- void resolve_depth(RID p_source_depth, RID p_dest_depth, Vector2i p_screen_size, int p_samples, uint32_t p_barrier = RD::BARRIER_MASK_ALL);
-
void sort_buffer(RID p_uniform_set, int p_size);
EffectsRD(bool p_prefer_raster_effects);
diff --git a/servers/rendering/renderer_rd/environment/SCsub b/servers/rendering/renderer_rd/environment/SCsub
new file mode 100644
index 0000000000..86681f9c74
--- /dev/null
+++ b/servers/rendering/renderer_rd/environment/SCsub
@@ -0,0 +1,5 @@
+#!/usr/bin/env python
+
+Import("env")
+
+env.add_source_files(env.servers_sources, "*.cpp")
diff --git a/servers/rendering/renderer_rd/renderer_scene_gi_rd.cpp b/servers/rendering/renderer_rd/environment/gi.cpp
index 7aede6bb48..f3be4a7085 100644
--- a/servers/rendering/renderer_rd/renderer_scene_gi_rd.cpp
+++ b/servers/rendering/renderer_rd/environment/gi.cpp
@@ -1,5 +1,5 @@
/*************************************************************************/
-/* renderer_scene_gi_rd.cpp */
+/* gi.cpp */
/*************************************************************************/
/* This file is part of: */
/* GODOT ENGINE */
@@ -28,20 +28,365 @@
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/*************************************************************************/
-#include "renderer_scene_gi_rd.h"
+#include "gi.h"
#include "core/config/project_settings.h"
+#include "servers/rendering/renderer_rd/renderer_compositor_rd.h"
#include "servers/rendering/renderer_rd/renderer_scene_render_rd.h"
+#include "servers/rendering/renderer_rd/renderer_storage_rd.h"
#include "servers/rendering/renderer_rd/storage_rd/material_storage.h"
#include "servers/rendering/renderer_rd/storage_rd/texture_storage.h"
#include "servers/rendering/rendering_server_default.h"
-const Vector3i RendererSceneGIRD::SDFGI::Cascade::DIRTY_ALL = Vector3i(0x7FFFFFFF, 0x7FFFFFFF, 0x7FFFFFFF);
+using namespace RendererRD;
+
+const Vector3i GI::SDFGI::Cascade::DIRTY_ALL = Vector3i(0x7FFFFFFF, 0x7FFFFFFF, 0x7FFFFFFF);
+
+GI *GI::singleton = nullptr;
+
+////////////////////////////////////////////////////////////////////////////////
+// VOXEL GI STORAGE
+
+RID GI::voxel_gi_allocate() {
+ return voxel_gi_owner.allocate_rid();
+}
+
+void GI::voxel_gi_free(RID p_voxel_gi) {
+ voxel_gi_allocate_data(p_voxel_gi, Transform3D(), AABB(), Vector3i(), Vector<uint8_t>(), Vector<uint8_t>(), Vector<uint8_t>(), Vector<int>()); //deallocate
+ VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi);
+ voxel_gi->dependency.deleted_notify(p_voxel_gi);
+ voxel_gi_owner.free(p_voxel_gi);
+}
+
+void GI::voxel_gi_initialize(RID p_voxel_gi) {
+ voxel_gi_owner.initialize_rid(p_voxel_gi, VoxelGI());
+}
+
+void GI::voxel_gi_allocate_data(RID p_voxel_gi, const Transform3D &p_to_cell_xform, const AABB &p_aabb, const Vector3i &p_octree_size, const Vector<uint8_t> &p_octree_cells, const Vector<uint8_t> &p_data_cells, const Vector<uint8_t> &p_distance_field, const Vector<int> &p_level_counts) {
+ VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi);
+ ERR_FAIL_COND(!voxel_gi);
+
+ if (voxel_gi->octree_buffer.is_valid()) {
+ RD::get_singleton()->free(voxel_gi->octree_buffer);
+ RD::get_singleton()->free(voxel_gi->data_buffer);
+ if (voxel_gi->sdf_texture.is_valid()) {
+ RD::get_singleton()->free(voxel_gi->sdf_texture);
+ }
+
+ voxel_gi->sdf_texture = RID();
+ voxel_gi->octree_buffer = RID();
+ voxel_gi->data_buffer = RID();
+ voxel_gi->octree_buffer_size = 0;
+ voxel_gi->data_buffer_size = 0;
+ voxel_gi->cell_count = 0;
+ }
+
+ voxel_gi->to_cell_xform = p_to_cell_xform;
+ voxel_gi->bounds = p_aabb;
+ voxel_gi->octree_size = p_octree_size;
+ voxel_gi->level_counts = p_level_counts;
+
+ if (p_octree_cells.size()) {
+ ERR_FAIL_COND(p_octree_cells.size() % 32 != 0); //cells size must be a multiple of 32
+
+ uint32_t cell_count = p_octree_cells.size() / 32;
+
+ ERR_FAIL_COND(p_data_cells.size() != (int)cell_count * 16); //see that data size matches
+
+ voxel_gi->cell_count = cell_count;
+ voxel_gi->octree_buffer = RD::get_singleton()->storage_buffer_create(p_octree_cells.size(), p_octree_cells);
+ voxel_gi->octree_buffer_size = p_octree_cells.size();
+ voxel_gi->data_buffer = RD::get_singleton()->storage_buffer_create(p_data_cells.size(), p_data_cells);
+ voxel_gi->data_buffer_size = p_data_cells.size();
+
+ if (p_distance_field.size()) {
+ RD::TextureFormat tf;
+ tf.format = RD::DATA_FORMAT_R8_UNORM;
+ tf.width = voxel_gi->octree_size.x;
+ tf.height = voxel_gi->octree_size.y;
+ tf.depth = voxel_gi->octree_size.z;
+ tf.texture_type = RD::TEXTURE_TYPE_3D;
+ tf.usage_bits = RD::TEXTURE_USAGE_SAMPLING_BIT | RD::TEXTURE_USAGE_CAN_UPDATE_BIT | RD::TEXTURE_USAGE_CAN_COPY_FROM_BIT;
+ Vector<Vector<uint8_t>> s;
+ s.push_back(p_distance_field);
+ voxel_gi->sdf_texture = RD::get_singleton()->texture_create(tf, RD::TextureView(), s);
+ }
+#if 0
+ {
+ RD::TextureFormat tf;
+ tf.format = RD::DATA_FORMAT_R8_UNORM;
+ tf.width = voxel_gi->octree_size.x;
+ tf.height = voxel_gi->octree_size.y;
+ tf.depth = voxel_gi->octree_size.z;
+ tf.type = RD::TEXTURE_TYPE_3D;
+ tf.usage_bits = RD::TEXTURE_USAGE_SAMPLING_BIT | RD::TEXTURE_USAGE_STORAGE_BIT | RD::TEXTURE_USAGE_CAN_COPY_TO_BIT;
+ tf.shareable_formats.push_back(RD::DATA_FORMAT_R8_UNORM);
+ tf.shareable_formats.push_back(RD::DATA_FORMAT_R8_UINT);
+ voxel_gi->sdf_texture = RD::get_singleton()->texture_create(tf, RD::TextureView());
+ }
+ RID shared_tex;
+ {
+ RD::TextureView tv;
+ tv.format_override = RD::DATA_FORMAT_R8_UINT;
+ shared_tex = RD::get_singleton()->texture_create_shared(tv, voxel_gi->sdf_texture);
+ }
+ //update SDF texture
+ Vector<RD::Uniform> uniforms;
+ {
+ RD::Uniform u;
+ u.uniform_type = RD::UNIFORM_TYPE_STORAGE_BUFFER;
+ u.binding = 1;
+ u.append_id(voxel_gi->octree_buffer);
+ uniforms.push_back(u);
+ }
+ {
+ RD::Uniform u;
+ u.uniform_type = RD::UNIFORM_TYPE_STORAGE_BUFFER;
+ u.binding = 2;
+ u.append_id(voxel_gi->data_buffer);
+ uniforms.push_back(u);
+ }
+ {
+ RD::Uniform u;
+ u.uniform_type = RD::UNIFORM_TYPE_IMAGE;
+ u.binding = 3;
+ u.append_id(shared_tex);
+ uniforms.push_back(u);
+ }
+
+ RID uniform_set = RD::get_singleton()->uniform_set_create(uniforms, voxel_gi_sdf_shader_version_shader, 0);
+
+ {
+ uint32_t push_constant[4] = { 0, 0, 0, 0 };
+
+ for (int i = 0; i < voxel_gi->level_counts.size() - 1; i++) {
+ push_constant[0] += voxel_gi->level_counts[i];
+ }
+ push_constant[1] = push_constant[0] + voxel_gi->level_counts[voxel_gi->level_counts.size() - 1];
+
+ print_line("offset: " + itos(push_constant[0]));
+ print_line("size: " + itos(push_constant[1]));
+ //create SDF
+ RD::ComputeListID compute_list = RD::get_singleton()->compute_list_begin();
+ RD::get_singleton()->compute_list_bind_compute_pipeline(compute_list, voxel_gi_sdf_shader_pipeline);
+ RD::get_singleton()->compute_list_bind_uniform_set(compute_list, uniform_set, 0);
+ RD::get_singleton()->compute_list_set_push_constant(compute_list, push_constant, sizeof(uint32_t) * 4);
+ RD::get_singleton()->compute_list_dispatch(compute_list, voxel_gi->octree_size.x / 4, voxel_gi->octree_size.y / 4, voxel_gi->octree_size.z / 4);
+ RD::get_singleton()->compute_list_end();
+ }
+
+ RD::get_singleton()->free(uniform_set);
+ RD::get_singleton()->free(shared_tex);
+ }
+#endif
+ }
+
+ voxel_gi->version++;
+ voxel_gi->data_version++;
+
+ voxel_gi->dependency.changed_notify(RendererStorage::DEPENDENCY_CHANGED_AABB);
+}
+
+AABB GI::voxel_gi_get_bounds(RID p_voxel_gi) const {
+ VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi);
+ ERR_FAIL_COND_V(!voxel_gi, AABB());
+
+ return voxel_gi->bounds;
+}
+
+Vector3i GI::voxel_gi_get_octree_size(RID p_voxel_gi) const {
+ VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi);
+ ERR_FAIL_COND_V(!voxel_gi, Vector3i());
+ return voxel_gi->octree_size;
+}
+
+Vector<uint8_t> GI::voxel_gi_get_octree_cells(RID p_voxel_gi) const {
+ VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi);
+ ERR_FAIL_COND_V(!voxel_gi, Vector<uint8_t>());
+
+ if (voxel_gi->octree_buffer.is_valid()) {
+ return RD::get_singleton()->buffer_get_data(voxel_gi->octree_buffer);
+ }
+ return Vector<uint8_t>();
+}
+
+Vector<uint8_t> GI::voxel_gi_get_data_cells(RID p_voxel_gi) const {
+ VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi);
+ ERR_FAIL_COND_V(!voxel_gi, Vector<uint8_t>());
+
+ if (voxel_gi->data_buffer.is_valid()) {
+ return RD::get_singleton()->buffer_get_data(voxel_gi->data_buffer);
+ }
+ return Vector<uint8_t>();
+}
+
+Vector<uint8_t> GI::voxel_gi_get_distance_field(RID p_voxel_gi) const {
+ VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi);
+ ERR_FAIL_COND_V(!voxel_gi, Vector<uint8_t>());
+
+ if (voxel_gi->data_buffer.is_valid()) {
+ return RD::get_singleton()->texture_get_data(voxel_gi->sdf_texture, 0);
+ }
+ return Vector<uint8_t>();
+}
+
+Vector<int> GI::voxel_gi_get_level_counts(RID p_voxel_gi) const {
+ VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi);
+ ERR_FAIL_COND_V(!voxel_gi, Vector<int>());
+
+ return voxel_gi->level_counts;
+}
+
+Transform3D GI::voxel_gi_get_to_cell_xform(RID p_voxel_gi) const {
+ VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi);
+ ERR_FAIL_COND_V(!voxel_gi, Transform3D());
+
+ return voxel_gi->to_cell_xform;
+}
+
+void GI::voxel_gi_set_dynamic_range(RID p_voxel_gi, float p_range) {
+ VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi);
+ ERR_FAIL_COND(!voxel_gi);
+
+ voxel_gi->dynamic_range = p_range;
+ voxel_gi->version++;
+}
+
+float GI::voxel_gi_get_dynamic_range(RID p_voxel_gi) const {
+ VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi);
+ ERR_FAIL_COND_V(!voxel_gi, 0);
+
+ return voxel_gi->dynamic_range;
+}
+
+void GI::voxel_gi_set_propagation(RID p_voxel_gi, float p_range) {
+ VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi);
+ ERR_FAIL_COND(!voxel_gi);
+
+ voxel_gi->propagation = p_range;
+ voxel_gi->version++;
+}
+
+float GI::voxel_gi_get_propagation(RID p_voxel_gi) const {
+ VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi);
+ ERR_FAIL_COND_V(!voxel_gi, 0);
+ return voxel_gi->propagation;
+}
+
+void GI::voxel_gi_set_energy(RID p_voxel_gi, float p_energy) {
+ VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi);
+ ERR_FAIL_COND(!voxel_gi);
+
+ voxel_gi->energy = p_energy;
+}
+
+float GI::voxel_gi_get_energy(RID p_voxel_gi) const {
+ VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi);
+ ERR_FAIL_COND_V(!voxel_gi, 0);
+ return voxel_gi->energy;
+}
+
+void GI::voxel_gi_set_bias(RID p_voxel_gi, float p_bias) {
+ VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi);
+ ERR_FAIL_COND(!voxel_gi);
+
+ voxel_gi->bias = p_bias;
+}
+
+float GI::voxel_gi_get_bias(RID p_voxel_gi) const {
+ VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi);
+ ERR_FAIL_COND_V(!voxel_gi, 0);
+ return voxel_gi->bias;
+}
+
+void GI::voxel_gi_set_normal_bias(RID p_voxel_gi, float p_normal_bias) {
+ VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi);
+ ERR_FAIL_COND(!voxel_gi);
+
+ voxel_gi->normal_bias = p_normal_bias;
+}
+
+float GI::voxel_gi_get_normal_bias(RID p_voxel_gi) const {
+ VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi);
+ ERR_FAIL_COND_V(!voxel_gi, 0);
+ return voxel_gi->normal_bias;
+}
+
+void GI::voxel_gi_set_anisotropy_strength(RID p_voxel_gi, float p_strength) {
+ VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi);
+ ERR_FAIL_COND(!voxel_gi);
+
+ voxel_gi->anisotropy_strength = p_strength;
+}
+
+float GI::voxel_gi_get_anisotropy_strength(RID p_voxel_gi) const {
+ VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi);
+ ERR_FAIL_COND_V(!voxel_gi, 0);
+ return voxel_gi->anisotropy_strength;
+}
+
+void GI::voxel_gi_set_interior(RID p_voxel_gi, bool p_enable) {
+ VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi);
+ ERR_FAIL_COND(!voxel_gi);
+
+ voxel_gi->interior = p_enable;
+}
+
+void GI::voxel_gi_set_use_two_bounces(RID p_voxel_gi, bool p_enable) {
+ VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi);
+ ERR_FAIL_COND(!voxel_gi);
+
+ voxel_gi->use_two_bounces = p_enable;
+ voxel_gi->version++;
+}
+
+bool GI::voxel_gi_is_using_two_bounces(RID p_voxel_gi) const {
+ VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi);
+ ERR_FAIL_COND_V(!voxel_gi, false);
+ return voxel_gi->use_two_bounces;
+}
+
+bool GI::voxel_gi_is_interior(RID p_voxel_gi) const {
+ VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi);
+ ERR_FAIL_COND_V(!voxel_gi, 0);
+ return voxel_gi->interior;
+}
+
+uint32_t GI::voxel_gi_get_version(RID p_voxel_gi) const {
+ VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi);
+ ERR_FAIL_COND_V(!voxel_gi, 0);
+ return voxel_gi->version;
+}
+
+uint32_t GI::voxel_gi_get_data_version(RID p_voxel_gi) {
+ VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi);
+ ERR_FAIL_COND_V(!voxel_gi, 0);
+ return voxel_gi->data_version;
+}
+
+RID GI::voxel_gi_get_octree_buffer(RID p_voxel_gi) const {
+ VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi);
+ ERR_FAIL_COND_V(!voxel_gi, RID());
+ return voxel_gi->octree_buffer;
+}
+
+RID GI::voxel_gi_get_data_buffer(RID p_voxel_gi) const {
+ VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi);
+ ERR_FAIL_COND_V(!voxel_gi, RID());
+ return voxel_gi->data_buffer;
+}
+
+RID GI::voxel_gi_get_sdf_texture(RID p_voxel_gi) {
+ VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi);
+ ERR_FAIL_COND_V(!voxel_gi, RID());
+
+ return voxel_gi->sdf_texture;
+}
////////////////////////////////////////////////////////////////////////////////
// SDFGI
-void RendererSceneGIRD::SDFGI::create(RendererSceneEnvironmentRD *p_env, const Vector3 &p_world_position, uint32_t p_requested_history_size, RendererSceneGIRD *p_gi) {
+void GI::SDFGI::create(RendererSceneEnvironmentRD *p_env, const Vector3 &p_world_position, uint32_t p_requested_history_size, GI *p_gi) {
RendererRD::TextureStorage *texture_storage = RendererRD::TextureStorage::get_singleton();
RendererRD::MaterialStorage *material_storage = RendererRD::MaterialStorage::get_singleton();
@@ -755,7 +1100,7 @@ void RendererSceneGIRD::SDFGI::create(RendererSceneEnvironmentRD *p_env, const V
reads_sky = p_env->sdfgi_read_sky_light;
}
-void RendererSceneGIRD::SDFGI::erase() {
+void GI::SDFGI::erase() {
for (uint32_t i = 0; i < cascades.size(); i++) {
const SDFGI::Cascade &c = cascades[i];
RD::get_singleton()->free(c.light_data);
@@ -791,9 +1136,26 @@ void RendererSceneGIRD::SDFGI::erase() {
RD::get_singleton()->free(ambient_texture);
RD::get_singleton()->free(cascades_ubo);
+
+ for (uint32_t v = 0; v < RendererSceneRender::MAX_RENDER_VIEWS; v++) {
+ if (RD::get_singleton()->uniform_set_is_valid(debug_uniform_set[v])) {
+ RD::get_singleton()->free(debug_uniform_set[v]);
+ }
+ debug_uniform_set[v] = RID();
+ }
+
+ if (RD::get_singleton()->uniform_set_is_valid(debug_probes_uniform_set)) {
+ RD::get_singleton()->free(debug_probes_uniform_set);
+ }
+ debug_probes_uniform_set = RID();
+
+ if (debug_probes_scene_data_ubo.is_valid()) {
+ RD::get_singleton()->free(debug_probes_scene_data_ubo);
+ debug_probes_scene_data_ubo = RID();
+ }
}
-void RendererSceneGIRD::SDFGI::update(RendererSceneEnvironmentRD *p_env, const Vector3 &p_world_position) {
+void GI::SDFGI::update(RendererSceneEnvironmentRD *p_env, const Vector3 &p_world_position) {
bounce_feedback = p_env->sdfgi_bounce_feedback;
energy = p_env->sdfgi_energy;
normal_bias = p_env->sdfgi_normal_bias;
@@ -851,7 +1213,7 @@ void RendererSceneGIRD::SDFGI::update(RendererSceneEnvironmentRD *p_env, const V
}
}
-void RendererSceneGIRD::SDFGI::update_light() {
+void GI::SDFGI::update_light() {
RD::get_singleton()->draw_command_begin_label("SDFGI Update dynamic Light");
/* Update dynamic light */
@@ -898,7 +1260,7 @@ void RendererSceneGIRD::SDFGI::update_light() {
RD::get_singleton()->draw_command_end_label();
}
-void RendererSceneGIRD::SDFGI::update_probes(RendererSceneEnvironmentRD *p_env, RendererSceneSkyRD::Sky *p_sky) {
+void GI::SDFGI::update_probes(RendererSceneEnvironmentRD *p_env, RendererSceneSkyRD::Sky *p_sky) {
RD::get_singleton()->draw_command_begin_label("SDFGI Update Probes");
SDFGIShader::IntegratePushConstant push_constant;
@@ -990,7 +1352,7 @@ void RendererSceneGIRD::SDFGI::update_probes(RendererSceneEnvironmentRD *p_env,
RD::get_singleton()->draw_command_end_label();
}
-void RendererSceneGIRD::SDFGI::store_probes() {
+void GI::SDFGI::store_probes() {
RD::get_singleton()->barrier(RD::BARRIER_MASK_COMPUTE, RD::BARRIER_MASK_COMPUTE);
RD::get_singleton()->draw_command_begin_label("SDFGI Store Probes");
@@ -1035,7 +1397,7 @@ void RendererSceneGIRD::SDFGI::store_probes() {
RD::get_singleton()->draw_command_end_label();
}
-int RendererSceneGIRD::SDFGI::get_pending_region_data(int p_region, Vector3i &r_local_offset, Vector3i &r_local_size, AABB &r_bounds) const {
+int GI::SDFGI::get_pending_region_data(int p_region, Vector3i &r_local_offset, Vector3i &r_local_size, AABB &r_bounds) const {
int dirty_count = 0;
for (uint32_t i = 0; i < cascades.size(); i++) {
const SDFGI::Cascade &c = cascades[i];
@@ -1091,7 +1453,7 @@ int RendererSceneGIRD::SDFGI::get_pending_region_data(int p_region, Vector3i &r_
return -1;
}
-void RendererSceneGIRD::SDFGI::update_cascades() {
+void GI::SDFGI::update_cascades() {
//update cascades
SDFGI::Cascade::UBO cascade_data[SDFGI::MAX_CASCADES];
int32_t probe_divisor = cascade_size / SDFGI::PROBE_DIVISOR;
@@ -1112,160 +1474,177 @@ void RendererSceneGIRD::SDFGI::update_cascades() {
RD::get_singleton()->buffer_update(cascades_ubo, 0, sizeof(SDFGI::Cascade::UBO) * SDFGI::MAX_CASCADES, cascade_data, RD::BARRIER_MASK_COMPUTE);
}
-void RendererSceneGIRD::SDFGI::debug_draw(const CameraMatrix &p_projection, const Transform3D &p_transform, int p_width, int p_height, RID p_render_target, RID p_texture) {
+void GI::SDFGI::debug_draw(uint32_t p_view_count, const CameraMatrix *p_projections, const Transform3D &p_transform, int p_width, int p_height, RID p_render_target, RID p_texture, const Vector<RID> &p_texture_views) {
RendererRD::TextureStorage *texture_storage = RendererRD::TextureStorage::get_singleton();
RendererRD::MaterialStorage *material_storage = RendererRD::MaterialStorage::get_singleton();
RendererRD::CopyEffects *copy_effects = RendererRD::CopyEffects::get_singleton();
- if (!debug_uniform_set.is_valid() || !RD::get_singleton()->uniform_set_is_valid(debug_uniform_set)) {
- Vector<RD::Uniform> uniforms;
- {
- RD::Uniform u;
- u.binding = 1;
- u.uniform_type = RD::UNIFORM_TYPE_TEXTURE;
- for (uint32_t i = 0; i < SDFGI::MAX_CASCADES; i++) {
- if (i < cascades.size()) {
- u.append_id(cascades[i].sdf_tex);
- } else {
- u.append_id(texture_storage->texture_rd_get_default(RendererRD::DEFAULT_RD_TEXTURE_3D_WHITE));
+ for (uint32_t v = 0; v < p_view_count; v++) {
+ if (!debug_uniform_set[v].is_valid() || !RD::get_singleton()->uniform_set_is_valid(debug_uniform_set[v])) {
+ Vector<RD::Uniform> uniforms;
+ {
+ RD::Uniform u;
+ u.binding = 1;
+ u.uniform_type = RD::UNIFORM_TYPE_TEXTURE;
+ for (uint32_t i = 0; i < SDFGI::MAX_CASCADES; i++) {
+ if (i < cascades.size()) {
+ u.append_id(cascades[i].sdf_tex);
+ } else {
+ u.append_id(texture_storage->texture_rd_get_default(RendererRD::DEFAULT_RD_TEXTURE_3D_WHITE));
+ }
}
+ uniforms.push_back(u);
}
- uniforms.push_back(u);
- }
- {
- RD::Uniform u;
- u.binding = 2;
- u.uniform_type = RD::UNIFORM_TYPE_TEXTURE;
- for (uint32_t i = 0; i < SDFGI::MAX_CASCADES; i++) {
- if (i < cascades.size()) {
- u.append_id(cascades[i].light_tex);
- } else {
- u.append_id(texture_storage->texture_rd_get_default(RendererRD::DEFAULT_RD_TEXTURE_3D_WHITE));
+ {
+ RD::Uniform u;
+ u.binding = 2;
+ u.uniform_type = RD::UNIFORM_TYPE_TEXTURE;
+ for (uint32_t i = 0; i < SDFGI::MAX_CASCADES; i++) {
+ if (i < cascades.size()) {
+ u.append_id(cascades[i].light_tex);
+ } else {
+ u.append_id(texture_storage->texture_rd_get_default(RendererRD::DEFAULT_RD_TEXTURE_3D_WHITE));
+ }
}
+ uniforms.push_back(u);
}
- uniforms.push_back(u);
- }
- {
- RD::Uniform u;
- u.binding = 3;
- u.uniform_type = RD::UNIFORM_TYPE_TEXTURE;
- for (uint32_t i = 0; i < SDFGI::MAX_CASCADES; i++) {
- if (i < cascades.size()) {
- u.append_id(cascades[i].light_aniso_0_tex);
- } else {
- u.append_id(texture_storage->texture_rd_get_default(RendererRD::DEFAULT_RD_TEXTURE_3D_WHITE));
+ {
+ RD::Uniform u;
+ u.binding = 3;
+ u.uniform_type = RD::UNIFORM_TYPE_TEXTURE;
+ for (uint32_t i = 0; i < SDFGI::MAX_CASCADES; i++) {
+ if (i < cascades.size()) {
+ u.append_id(cascades[i].light_aniso_0_tex);
+ } else {
+ u.append_id(texture_storage->texture_rd_get_default(RendererRD::DEFAULT_RD_TEXTURE_3D_WHITE));
+ }
}
+ uniforms.push_back(u);
}
- uniforms.push_back(u);
- }
- {
- RD::Uniform u;
- u.binding = 4;
- u.uniform_type = RD::UNIFORM_TYPE_TEXTURE;
- for (uint32_t i = 0; i < SDFGI::MAX_CASCADES; i++) {
- if (i < cascades.size()) {
- u.append_id(cascades[i].light_aniso_1_tex);
- } else {
- u.append_id(texture_storage->texture_rd_get_default(RendererRD::DEFAULT_RD_TEXTURE_3D_WHITE));
+ {
+ RD::Uniform u;
+ u.binding = 4;
+ u.uniform_type = RD::UNIFORM_TYPE_TEXTURE;
+ for (uint32_t i = 0; i < SDFGI::MAX_CASCADES; i++) {
+ if (i < cascades.size()) {
+ u.append_id(cascades[i].light_aniso_1_tex);
+ } else {
+ u.append_id(texture_storage->texture_rd_get_default(RendererRD::DEFAULT_RD_TEXTURE_3D_WHITE));
+ }
}
+ uniforms.push_back(u);
}
- uniforms.push_back(u);
- }
- {
- RD::Uniform u;
- u.binding = 5;
- u.uniform_type = RD::UNIFORM_TYPE_TEXTURE;
- u.append_id(occlusion_texture);
- uniforms.push_back(u);
- }
- {
- RD::Uniform u;
- u.binding = 8;
- u.uniform_type = RD::UNIFORM_TYPE_SAMPLER;
- u.append_id(material_storage->sampler_rd_get_default(RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED));
- uniforms.push_back(u);
- }
- {
- RD::Uniform u;
- u.binding = 9;
- u.uniform_type = RD::UNIFORM_TYPE_UNIFORM_BUFFER;
- u.append_id(cascades_ubo);
- uniforms.push_back(u);
- }
- {
- RD::Uniform u;
- u.binding = 10;
- u.uniform_type = RD::UNIFORM_TYPE_IMAGE;
- u.append_id(p_texture);
- uniforms.push_back(u);
- }
- {
- RD::Uniform u;
- u.binding = 11;
- u.uniform_type = RD::UNIFORM_TYPE_TEXTURE;
- u.append_id(lightprobe_texture);
- uniforms.push_back(u);
+ {
+ RD::Uniform u;
+ u.binding = 5;
+ u.uniform_type = RD::UNIFORM_TYPE_TEXTURE;
+ u.append_id(occlusion_texture);
+ uniforms.push_back(u);
+ }
+ {
+ RD::Uniform u;
+ u.binding = 8;
+ u.uniform_type = RD::UNIFORM_TYPE_SAMPLER;
+ u.append_id(material_storage->sampler_rd_get_default(RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED));
+ uniforms.push_back(u);
+ }
+ {
+ RD::Uniform u;
+ u.binding = 9;
+ u.uniform_type = RD::UNIFORM_TYPE_UNIFORM_BUFFER;
+ u.append_id(cascades_ubo);
+ uniforms.push_back(u);
+ }
+ {
+ RD::Uniform u;
+ u.binding = 10;
+ u.uniform_type = RD::UNIFORM_TYPE_IMAGE;
+ u.append_id(p_texture_views[v]);
+ uniforms.push_back(u);
+ }
+ {
+ RD::Uniform u;
+ u.binding = 11;
+ u.uniform_type = RD::UNIFORM_TYPE_TEXTURE;
+ u.append_id(lightprobe_texture);
+ uniforms.push_back(u);
+ }
+ debug_uniform_set[v] = RD::get_singleton()->uniform_set_create(uniforms, gi->sdfgi_shader.debug_shader_version, 0);
}
- debug_uniform_set = RD::get_singleton()->uniform_set_create(uniforms, gi->sdfgi_shader.debug_shader_version, 0);
- }
-
- RD::ComputeListID compute_list = RD::get_singleton()->compute_list_begin();
- RD::get_singleton()->compute_list_bind_compute_pipeline(compute_list, gi->sdfgi_shader.debug_pipeline);
- RD::get_singleton()->compute_list_bind_uniform_set(compute_list, debug_uniform_set, 0);
-
- SDFGIShader::DebugPushConstant push_constant;
- push_constant.grid_size[0] = cascade_size;
- push_constant.grid_size[1] = cascade_size;
- push_constant.grid_size[2] = cascade_size;
- push_constant.max_cascades = cascades.size();
- push_constant.screen_size[0] = p_width;
- push_constant.screen_size[1] = p_height;
- push_constant.probe_axis_size = probe_axis_count;
- push_constant.use_occlusion = uses_occlusion;
- push_constant.y_mult = y_mult;
- Vector2 vp_half = p_projection.get_viewport_half_extents();
- push_constant.cam_extent[0] = vp_half.x;
- push_constant.cam_extent[1] = vp_half.y;
- push_constant.cam_extent[2] = -p_projection.get_z_near();
-
- push_constant.cam_transform[0] = p_transform.basis.rows[0][0];
- push_constant.cam_transform[1] = p_transform.basis.rows[1][0];
- push_constant.cam_transform[2] = p_transform.basis.rows[2][0];
- push_constant.cam_transform[3] = 0;
- push_constant.cam_transform[4] = p_transform.basis.rows[0][1];
- push_constant.cam_transform[5] = p_transform.basis.rows[1][1];
- push_constant.cam_transform[6] = p_transform.basis.rows[2][1];
- push_constant.cam_transform[7] = 0;
- push_constant.cam_transform[8] = p_transform.basis.rows[0][2];
- push_constant.cam_transform[9] = p_transform.basis.rows[1][2];
- push_constant.cam_transform[10] = p_transform.basis.rows[2][2];
- push_constant.cam_transform[11] = 0;
- push_constant.cam_transform[12] = p_transform.origin.x;
- push_constant.cam_transform[13] = p_transform.origin.y;
- push_constant.cam_transform[14] = p_transform.origin.z;
- push_constant.cam_transform[15] = 1;
-
- RD::get_singleton()->compute_list_set_push_constant(compute_list, &push_constant, sizeof(SDFGIShader::DebugPushConstant));
-
- RD::get_singleton()->compute_list_dispatch_threads(compute_list, p_width, p_height, 1);
- RD::get_singleton()->compute_list_end();
+ RD::ComputeListID compute_list = RD::get_singleton()->compute_list_begin();
+ RD::get_singleton()->compute_list_bind_compute_pipeline(compute_list, gi->sdfgi_shader.debug_pipeline);
+ RD::get_singleton()->compute_list_bind_uniform_set(compute_list, debug_uniform_set[v], 0);
+
+ SDFGIShader::DebugPushConstant push_constant;
+ push_constant.grid_size[0] = cascade_size;
+ push_constant.grid_size[1] = cascade_size;
+ push_constant.grid_size[2] = cascade_size;
+ push_constant.max_cascades = cascades.size();
+ push_constant.screen_size[0] = p_width;
+ push_constant.screen_size[1] = p_height;
+ push_constant.probe_axis_size = probe_axis_count;
+ push_constant.use_occlusion = uses_occlusion;
+ push_constant.y_mult = y_mult;
+
+ push_constant.z_near = -p_projections[v].get_z_near();
+
+ push_constant.cam_transform[0] = p_transform.basis.rows[0][0];
+ push_constant.cam_transform[1] = p_transform.basis.rows[1][0];
+ push_constant.cam_transform[2] = p_transform.basis.rows[2][0];
+ push_constant.cam_transform[3] = 0;
+ push_constant.cam_transform[4] = p_transform.basis.rows[0][1];
+ push_constant.cam_transform[5] = p_transform.basis.rows[1][1];
+ push_constant.cam_transform[6] = p_transform.basis.rows[2][1];
+ push_constant.cam_transform[7] = 0;
+ push_constant.cam_transform[8] = p_transform.basis.rows[0][2];
+ push_constant.cam_transform[9] = p_transform.basis.rows[1][2];
+ push_constant.cam_transform[10] = p_transform.basis.rows[2][2];
+ push_constant.cam_transform[11] = 0;
+ push_constant.cam_transform[12] = p_transform.origin.x;
+ push_constant.cam_transform[13] = p_transform.origin.y;
+ push_constant.cam_transform[14] = p_transform.origin.z;
+ push_constant.cam_transform[15] = 1;
+
+ // need to properly unproject for asymmetric projection matrices in stereo..
+ CameraMatrix inv_projection = p_projections[v].inverse();
+ for (int i = 0; i < 4; i++) {
+ for (int j = 0; j < 4; j++) {
+ push_constant.inv_projection[i * 4 + j] = inv_projection.matrix[i][j];
+ }
+ }
+
+ RD::get_singleton()->compute_list_set_push_constant(compute_list, &push_constant, sizeof(SDFGIShader::DebugPushConstant));
+
+ RD::get_singleton()->compute_list_dispatch_threads(compute_list, p_width, p_height, 1);
+ RD::get_singleton()->compute_list_end();
+ }
Size2 rtsize = texture_storage->render_target_get_size(p_render_target);
- copy_effects->copy_to_fb_rect(p_texture, texture_storage->render_target_get_rd_framebuffer(p_render_target), Rect2(Vector2(), rtsize), true);
+ copy_effects->copy_to_fb_rect(p_texture, texture_storage->render_target_get_rd_framebuffer(p_render_target), Rect2(Vector2(), rtsize), true, false, false, false, RID(), p_view_count > 1);
}
-void RendererSceneGIRD::SDFGI::debug_probes(RD::DrawListID p_draw_list, RID p_framebuffer, const CameraMatrix &p_camera_with_transform) {
+void GI::SDFGI::debug_probes(RID p_framebuffer, const uint32_t p_view_count, const CameraMatrix *p_camera_with_transforms, bool p_will_continue_color, bool p_will_continue_depth) {
RendererRD::MaterialStorage *material_storage = RendererRD::MaterialStorage::get_singleton();
- SDFGIShader::DebugProbesPushConstant push_constant;
+ // setup scene data
+ {
+ SDFGIShader::DebugProbesSceneData scene_data;
- for (int i = 0; i < 4; i++) {
- for (int j = 0; j < 4; j++) {
- push_constant.projection[i * 4 + j] = p_camera_with_transform.matrix[i][j];
+ if (debug_probes_scene_data_ubo.is_null()) {
+ debug_probes_scene_data_ubo = RD::get_singleton()->uniform_buffer_create(sizeof(SDFGIShader::DebugProbesSceneData));
}
+
+ for (uint32_t v = 0; v < p_view_count; v++) {
+ RendererStorageRD::store_camera(p_camera_with_transforms[v], scene_data.projection[v]);
+ }
+
+ RD::get_singleton()->buffer_update(debug_probes_scene_data_ubo, 0, sizeof(SDFGIShader::DebugProbesSceneData), &scene_data, RD::BARRIER_MASK_RASTER);
}
+ // setup push constant
+ SDFGIShader::DebugProbesPushConstant push_constant;
+
//gen spheres from strips
uint32_t band_points = 16;
push_constant.band_power = 4;
@@ -1314,14 +1693,26 @@ void RendererSceneGIRD::SDFGI::debug_probes(RD::DrawListID p_draw_list, RID p_fr
u.append_id(occlusion_texture);
uniforms.push_back(u);
}
+ {
+ RD::Uniform u;
+ u.binding = 5;
+ u.uniform_type = RD::UNIFORM_TYPE_UNIFORM_BUFFER;
+ u.append_id(debug_probes_scene_data_ubo);
+ uniforms.push_back(u);
+ }
debug_probes_uniform_set = RD::get_singleton()->uniform_set_create(uniforms, gi->sdfgi_shader.debug_probes.version_get_shader(gi->sdfgi_shader.debug_probes_shader, 0), 0);
}
- RD::get_singleton()->draw_list_bind_render_pipeline(p_draw_list, gi->sdfgi_shader.debug_probes_pipeline[SDFGIShader::PROBE_DEBUG_PROBES].get_render_pipeline(RD::INVALID_FORMAT_ID, RD::get_singleton()->framebuffer_get_format(p_framebuffer)));
- RD::get_singleton()->draw_list_bind_uniform_set(p_draw_list, debug_probes_uniform_set, 0);
- RD::get_singleton()->draw_list_set_push_constant(p_draw_list, &push_constant, sizeof(SDFGIShader::DebugProbesPushConstant));
- RD::get_singleton()->draw_list_draw(p_draw_list, false, total_probes, total_points);
+ SDFGIShader::ProbeDebugMode mode = p_view_count > 1 ? SDFGIShader::PROBE_DEBUG_PROBES_MULTIVIEW : SDFGIShader::PROBE_DEBUG_PROBES;
+
+ RD::DrawListID draw_list = RD::get_singleton()->draw_list_begin(p_framebuffer, RD::INITIAL_ACTION_CONTINUE, p_will_continue_color ? RD::FINAL_ACTION_CONTINUE : RD::FINAL_ACTION_READ, RD::INITIAL_ACTION_CONTINUE, p_will_continue_depth ? RD::FINAL_ACTION_CONTINUE : RD::FINAL_ACTION_READ);
+ RD::get_singleton()->draw_command_begin_label("Debug SDFGI");
+
+ RD::get_singleton()->draw_list_bind_render_pipeline(draw_list, gi->sdfgi_shader.debug_probes_pipeline[mode].get_render_pipeline(RD::INVALID_FORMAT_ID, RD::get_singleton()->framebuffer_get_format(p_framebuffer)));
+ RD::get_singleton()->draw_list_bind_uniform_set(draw_list, debug_probes_uniform_set, 0);
+ RD::get_singleton()->draw_list_set_push_constant(draw_list, &push_constant, sizeof(SDFGIShader::DebugProbesPushConstant));
+ RD::get_singleton()->draw_list_draw(draw_list, false, total_probes, total_points);
if (gi->sdfgi_debug_probe_dir != Vector3()) {
uint32_t cascade = 0;
@@ -1373,14 +1764,17 @@ void RendererSceneGIRD::SDFGI::debug_probes(RD::DrawListID p_draw_list, RID p_fr
uint32_t cell_count = probe_cells * 2 * probe_cells * 2 * probe_cells * 2;
- RD::get_singleton()->draw_list_bind_render_pipeline(p_draw_list, gi->sdfgi_shader.debug_probes_pipeline[SDFGIShader::PROBE_DEBUG_VISIBILITY].get_render_pipeline(RD::INVALID_FORMAT_ID, RD::get_singleton()->framebuffer_get_format(p_framebuffer)));
- RD::get_singleton()->draw_list_bind_uniform_set(p_draw_list, debug_probes_uniform_set, 0);
- RD::get_singleton()->draw_list_set_push_constant(p_draw_list, &push_constant, sizeof(SDFGIShader::DebugProbesPushConstant));
- RD::get_singleton()->draw_list_draw(p_draw_list, false, cell_count, total_points);
+ RD::get_singleton()->draw_list_bind_render_pipeline(draw_list, gi->sdfgi_shader.debug_probes_pipeline[p_view_count > 1 ? SDFGIShader::PROBE_DEBUG_VISIBILITY_MULTIVIEW : SDFGIShader::PROBE_DEBUG_VISIBILITY].get_render_pipeline(RD::INVALID_FORMAT_ID, RD::get_singleton()->framebuffer_get_format(p_framebuffer)));
+ RD::get_singleton()->draw_list_bind_uniform_set(draw_list, debug_probes_uniform_set, 0);
+ RD::get_singleton()->draw_list_set_push_constant(draw_list, &push_constant, sizeof(SDFGIShader::DebugProbesPushConstant));
+ RD::get_singleton()->draw_list_draw(draw_list, false, cell_count, total_points);
}
+
+ RD::get_singleton()->draw_command_end_label();
+ RD::get_singleton()->draw_list_end();
}
-void RendererSceneGIRD::SDFGI::pre_process_gi(const Transform3D &p_transform, RenderDataRD *p_render_data, RendererSceneRenderRD *p_scene_render) {
+void GI::SDFGI::pre_process_gi(const Transform3D &p_transform, RenderDataRD *p_render_data, RendererSceneRenderRD *p_scene_render) {
/* Update general SDFGI Buffer */
SDFGIData sdfgi_data;
@@ -1545,7 +1939,7 @@ void RendererSceneGIRD::SDFGI::pre_process_gi(const Transform3D &p_transform, Re
}
}
-void RendererSceneGIRD::SDFGI::render_region(RID p_render_buffers, int p_region, const PagedArray<RendererSceneRender::GeometryInstance *> &p_instances, RendererSceneRenderRD *p_scene_render) {
+void GI::SDFGI::render_region(RID p_render_buffers, int p_region, const PagedArray<RendererSceneRender::GeometryInstance *> &p_instances, RendererSceneRenderRD *p_scene_render) {
//print_line("rendering region " + itos(p_region));
RendererSceneRenderRD::RenderBuffers *rb = p_scene_render->render_buffers_owner.get_or_null(p_render_buffers);
ERR_FAIL_COND(!rb); // we wouldn't be here if this failed but...
@@ -1904,7 +2298,7 @@ void RendererSceneGIRD::SDFGI::render_region(RID p_render_buffers, int p_region,
}
}
-void RendererSceneGIRD::SDFGI::render_static_lights(RID p_render_buffers, uint32_t p_cascade_count, const uint32_t *p_cascade_indices, const PagedArray<RID> *p_positional_light_cull_result, RendererSceneRenderRD *p_scene_render) {
+void GI::SDFGI::render_static_lights(RID p_render_buffers, uint32_t p_cascade_count, const uint32_t *p_cascade_indices, const PagedArray<RID> *p_positional_light_cull_result, RendererSceneRenderRD *p_scene_render) {
RendererSceneRenderRD::RenderBuffers *rb = p_scene_render->render_buffers_owner.get_or_null(p_render_buffers);
ERR_FAIL_COND(!rb); // we wouldn't be here if this failed but...
@@ -2026,10 +2420,10 @@ void RendererSceneGIRD::SDFGI::render_static_lights(RID p_render_buffers, uint32
////////////////////////////////////////////////////////////////////////////////
// VoxelGIInstance
-void RendererSceneGIRD::VoxelGIInstance::update(bool p_update_light_instances, const Vector<RID> &p_light_instances, const PagedArray<RendererSceneRender::GeometryInstance *> &p_dynamic_objects, RendererSceneRenderRD *p_scene_render) {
+void GI::VoxelGIInstance::update(bool p_update_light_instances, const Vector<RID> &p_light_instances, const PagedArray<RendererSceneRender::GeometryInstance *> &p_dynamic_objects, RendererSceneRenderRD *p_scene_render) {
RendererRD::MaterialStorage *material_storage = RendererRD::MaterialStorage::get_singleton();
- uint32_t data_version = storage->voxel_gi_get_data_version(probe);
+ uint32_t data_version = gi->voxel_gi_get_data_version(probe);
// (RE)CREATE IF NEEDED
@@ -2048,11 +2442,11 @@ void RendererSceneGIRD::VoxelGIInstance::update(bool p_update_light_instances, c
dynamic_maps.clear();
- Vector3i octree_size = storage->voxel_gi_get_octree_size(probe);
+ Vector3i octree_size = gi->voxel_gi_get_octree_size(probe);
if (octree_size != Vector3i()) {
//can create a 3D texture
- Vector<int> levels = storage->voxel_gi_get_level_counts(probe);
+ Vector<int> levels = gi->voxel_gi_get_level_counts(probe);
RD::TextureFormat tf;
tf.format = RD::DATA_FORMAT_R8G8B8A8_UNORM;
@@ -2092,14 +2486,14 @@ void RendererSceneGIRD::VoxelGIInstance::update(bool p_update_light_instances, c
RD::Uniform u;
u.uniform_type = RD::UNIFORM_TYPE_STORAGE_BUFFER;
u.binding = 1;
- u.append_id(storage->voxel_gi_get_octree_buffer(probe));
+ u.append_id(gi->voxel_gi_get_octree_buffer(probe));
uniforms.push_back(u);
}
{
RD::Uniform u;
u.uniform_type = RD::UNIFORM_TYPE_STORAGE_BUFFER;
u.binding = 2;
- u.append_id(storage->voxel_gi_get_data_buffer(probe));
+ u.append_id(gi->voxel_gi_get_data_buffer(probe));
uniforms.push_back(u);
}
@@ -2114,7 +2508,7 @@ void RendererSceneGIRD::VoxelGIInstance::update(bool p_update_light_instances, c
RD::Uniform u;
u.uniform_type = RD::UNIFORM_TYPE_TEXTURE;
u.binding = 9;
- u.append_id(storage->voxel_gi_get_sdf_texture(probe));
+ u.append_id(gi->voxel_gi_get_sdf_texture(probe));
uniforms.push_back(u);
}
{
@@ -2268,7 +2662,7 @@ void RendererSceneGIRD::VoxelGIInstance::update(bool p_update_light_instances, c
RD::Uniform u;
u.uniform_type = RD::UNIFORM_TYPE_TEXTURE;
u.binding = 9;
- u.append_id(storage->voxel_gi_get_sdf_texture(probe));
+ u.append_id(gi->voxel_gi_get_sdf_texture(probe));
uniforms.push_back(u);
}
{
@@ -2337,7 +2731,7 @@ void RendererSceneGIRD::VoxelGIInstance::update(bool p_update_light_instances, c
RD::Uniform u;
u.uniform_type = RD::UNIFORM_TYPE_TEXTURE;
u.binding = 9;
- u.append_id(storage->voxel_gi_get_sdf_texture(probe));
+ u.append_id(gi->voxel_gi_get_sdf_texture(probe));
uniforms.push_back(u);
}
{
@@ -2388,7 +2782,7 @@ void RendererSceneGIRD::VoxelGIInstance::update(bool p_update_light_instances, c
light_count = MIN(gi->voxel_gi_max_lights, (uint32_t)p_light_instances.size());
{
- Transform3D to_cell = storage->voxel_gi_get_to_cell_xform(probe);
+ Transform3D to_cell = gi->voxel_gi_get_to_cell_xform(probe);
Transform3D to_probe_xform = (transform * to_cell.affine_inverse()).affine_inverse();
//update lights
@@ -2439,7 +2833,7 @@ void RendererSceneGIRD::VoxelGIInstance::update(bool p_update_light_instances, c
if (mipmaps.size()) {
//can update mipmaps
- Vector3i probe_size = storage->voxel_gi_get_octree_size(probe);
+ Vector3i probe_size = gi->voxel_gi_get_octree_size(probe);
VoxelGIPushConstant push_constant;
@@ -2448,8 +2842,8 @@ void RendererSceneGIRD::VoxelGIInstance::update(bool p_update_light_instances, c
push_constant.limits[2] = probe_size.z;
push_constant.stack_size = mipmaps.size();
push_constant.emission_scale = 1.0;
- push_constant.propagation = storage->voxel_gi_get_propagation(probe);
- push_constant.dynamic_range = storage->voxel_gi_get_dynamic_range(probe);
+ push_constant.propagation = gi->voxel_gi_get_propagation(probe);
+ push_constant.dynamic_range = gi->voxel_gi_get_dynamic_range(probe);
push_constant.light_count = light_count;
push_constant.aniso_strength = 0;
@@ -2461,7 +2855,7 @@ void RendererSceneGIRD::VoxelGIInstance::update(bool p_update_light_instances, c
int passes;
if (p_update_light_instances) {
- passes = storage->voxel_gi_is_using_two_bounces(probe) ? 2 : 1;
+ passes = gi->voxel_gi_is_using_two_bounces(probe) ? 2 : 1;
} else {
passes = 1; //only re-blitting is necessary
}
@@ -2528,13 +2922,13 @@ void RendererSceneGIRD::VoxelGIInstance::update(bool p_update_light_instances, c
has_dynamic_object_data = false; //clear until dynamic object data is used again
if (p_dynamic_objects.size() && dynamic_maps.size()) {
- Vector3i octree_size = storage->voxel_gi_get_octree_size(probe);
+ Vector3i octree_size = gi->voxel_gi_get_octree_size(probe);
int multiplier = dynamic_maps[0].size / MAX(MAX(octree_size.x, octree_size.y), octree_size.z);
Transform3D oversample_scale;
oversample_scale.basis.scale(Vector3(multiplier, multiplier, multiplier));
- Transform3D to_cell = oversample_scale * storage->voxel_gi_get_to_cell_xform(probe);
+ Transform3D to_cell = oversample_scale * gi->voxel_gi_get_to_cell_xform(probe);
Transform3D to_world_xform = transform * to_cell.affine_inverse();
Transform3D to_probe_xform = to_world_xform.affine_inverse();
@@ -2634,7 +3028,7 @@ void RendererSceneGIRD::VoxelGIInstance::update(bool p_update_light_instances, c
push_constant.z_base = xform.origin[z_axis];
push_constant.z_sign = (z_flip ? -1.0 : 1.0);
push_constant.pos_multiplier = float(1.0) / multiplier;
- push_constant.dynamic_range = storage->voxel_gi_get_dynamic_range(probe);
+ push_constant.dynamic_range = gi->voxel_gi_get_dynamic_range(probe);
push_constant.flip_x = x_flip;
push_constant.flip_y = y_flip;
push_constant.rect_pos[0] = rect.position[0];
@@ -2646,7 +3040,7 @@ void RendererSceneGIRD::VoxelGIInstance::update(bool p_update_light_instances, c
push_constant.prev_rect_size[0] = 0;
push_constant.prev_rect_size[1] = 0;
push_constant.on_mipmap = false;
- push_constant.propagation = storage->voxel_gi_get_propagation(probe);
+ push_constant.propagation = gi->voxel_gi_get_propagation(probe);
push_constant.pad[0] = 0;
push_constant.pad[1] = 0;
push_constant.pad[2] = 0;
@@ -2728,24 +3122,24 @@ void RendererSceneGIRD::VoxelGIInstance::update(bool p_update_light_instances, c
has_dynamic_object_data = true; //clear until dynamic object data is used again
}
- last_probe_version = storage->voxel_gi_get_version(probe);
+ last_probe_version = gi->voxel_gi_get_version(probe);
}
-void RendererSceneGIRD::VoxelGIInstance::debug(RD::DrawListID p_draw_list, RID p_framebuffer, const CameraMatrix &p_camera_with_transform, bool p_lighting, bool p_emission, float p_alpha) {
+void GI::VoxelGIInstance::debug(RD::DrawListID p_draw_list, RID p_framebuffer, const CameraMatrix &p_camera_with_transform, bool p_lighting, bool p_emission, float p_alpha) {
RendererRD::MaterialStorage *material_storage = RendererRD::MaterialStorage::get_singleton();
if (mipmaps.size() == 0) {
return;
}
- CameraMatrix cam_transform = (p_camera_with_transform * CameraMatrix(transform)) * CameraMatrix(storage->voxel_gi_get_to_cell_xform(probe).affine_inverse());
+ CameraMatrix cam_transform = (p_camera_with_transform * CameraMatrix(transform)) * CameraMatrix(gi->voxel_gi_get_to_cell_xform(probe).affine_inverse());
int level = 0;
- Vector3i octree_size = storage->voxel_gi_get_octree_size(probe);
+ Vector3i octree_size = gi->voxel_gi_get_octree_size(probe);
VoxelGIDebugPushConstant push_constant;
push_constant.alpha = p_alpha;
- push_constant.dynamic_range = storage->voxel_gi_get_dynamic_range(probe);
+ push_constant.dynamic_range = gi->voxel_gi_get_dynamic_range(probe);
push_constant.cell_offset = mipmaps[level].cell_offset;
push_constant.level = level;
@@ -2768,7 +3162,7 @@ void RendererSceneGIRD::VoxelGIInstance::debug(RD::DrawListID p_draw_list, RID p
RD::Uniform u;
u.uniform_type = RD::UNIFORM_TYPE_STORAGE_BUFFER;
u.binding = 1;
- u.append_id(storage->voxel_gi_get_data_buffer(probe));
+ u.append_id(gi->voxel_gi_get_data_buffer(probe));
uniforms.push_back(u);
}
{
@@ -2810,18 +3204,21 @@ void RendererSceneGIRD::VoxelGIInstance::debug(RD::DrawListID p_draw_list, RID p
}
////////////////////////////////////////////////////////////////////////////////
-// GIRD
+// GI
+
+GI::GI() {
+ singleton = this;
-RendererSceneGIRD::RendererSceneGIRD() {
sdfgi_ray_count = RS::EnvironmentSDFGIRayCount(CLAMP(int32_t(GLOBAL_GET("rendering/global_illumination/sdfgi/probe_ray_count")), 0, int32_t(RS::ENV_SDFGI_RAY_COUNT_MAX - 1)));
sdfgi_frames_to_converge = RS::EnvironmentSDFGIFramesToConverge(CLAMP(int32_t(GLOBAL_GET("rendering/global_illumination/sdfgi/frames_to_converge")), 0, int32_t(RS::ENV_SDFGI_CONVERGE_MAX - 1)));
sdfgi_frames_to_update_light = RS::EnvironmentSDFGIFramesToUpdateLight(CLAMP(int32_t(GLOBAL_GET("rendering/global_illumination/sdfgi/frames_to_update_lights")), 0, int32_t(RS::ENV_SDFGI_UPDATE_LIGHT_MAX - 1)));
}
-RendererSceneGIRD::~RendererSceneGIRD() {
+GI::~GI() {
+ singleton = nullptr;
}
-void RendererSceneGIRD::init(RendererStorageRD *p_storage, RendererSceneSkyRD *p_sky) {
+void GI::init(RendererStorageRD *p_storage, RendererSceneSkyRD *p_sky) {
RendererRD::TextureStorage *texture_storage = RendererRD::TextureStorage::get_singleton();
RendererRD::MaterialStorage *material_storage = RendererRD::MaterialStorage::get_singleton();
@@ -2962,17 +3359,38 @@ void RendererSceneGIRD::init(RendererStorageRD *p_storage, RendererSceneSkyRD *p
//calculate tables
String defines = "\n#define SDFGI_OCT_SIZE " + itos(SDFGI::LIGHTPROBE_OCT_SIZE) + "\n";
Vector<String> gi_modes;
- gi_modes.push_back("\n#define USE_VOXEL_GI_INSTANCES\n");
- gi_modes.push_back("\n#define USE_SDFGI\n");
- gi_modes.push_back("\n#define USE_SDFGI\n\n#define USE_VOXEL_GI_INSTANCES\n");
- gi_modes.push_back("\n#define MODE_HALF_RES\n#define USE_VOXEL_GI_INSTANCES\n");
- gi_modes.push_back("\n#define MODE_HALF_RES\n#define USE_SDFGI\n");
- gi_modes.push_back("\n#define MODE_HALF_RES\n#define USE_SDFGI\n\n#define USE_VOXEL_GI_INSTANCES\n");
+ gi_modes.push_back("\n#define USE_VOXEL_GI_INSTANCES\n"); // MODE_VOXEL_GI
+ gi_modes.push_back("\n#define USE_SDFGI\n"); // MODE_SDFGI
+ gi_modes.push_back("\n#define USE_SDFGI\n\n#define USE_VOXEL_GI_INSTANCES\n"); // MODE_COMBINED
+ gi_modes.push_back("\n#define MODE_HALF_RES\n#define USE_VOXEL_GI_INSTANCES\n"); // MODE_HALF_RES_VOXEL_GI
+ gi_modes.push_back("\n#define MODE_HALF_RES\n#define USE_SDFGI\n"); // MODE_HALF_RES_SDFGI
+ gi_modes.push_back("\n#define MODE_HALF_RES\n#define USE_SDFGI\n\n#define USE_VOXEL_GI_INSTANCES\n"); // MODE_HALF_RES_COMBINED
+
+ gi_modes.push_back("\n#define USE_VOXEL_GI_INSTANCES\n#define USE_MULTIVIEW\n"); // MODE_VOXEL_GI_MULTIVIEW
+ gi_modes.push_back("\n#define USE_SDFGI\n#define USE_MULTIVIEW\n"); // MODE_SDFGI_MULTIVIEW
+ gi_modes.push_back("\n#define USE_SDFGI\n\n#define USE_VOXEL_GI_INSTANCES\n#define USE_MULTIVIEW\n"); // MODE_COMBINED_MULTIVIEW
+ gi_modes.push_back("\n#define MODE_HALF_RES\n#define USE_VOXEL_GI_INSTANCES\n#define USE_MULTIVIEW\n"); // MODE_HALF_RES_VOXEL_GI_MULTIVIEW
+ gi_modes.push_back("\n#define MODE_HALF_RES\n#define USE_SDFGI\n#define USE_MULTIVIEW\n"); // MODE_HALF_RES_SDFGI_MULTIVIEW
+ gi_modes.push_back("\n#define MODE_HALF_RES\n#define USE_SDFGI\n\n#define USE_VOXEL_GI_INSTANCES\n#define USE_MULTIVIEW\n"); // MODE_HALF_RES_COMBINED_MULTIVIEW
shader.initialize(gi_modes, defines);
+
+ if (!RendererCompositorRD::singleton->is_xr_enabled()) {
+ shader.set_variant_enabled(MODE_VOXEL_GI_MULTIVIEW, false);
+ shader.set_variant_enabled(MODE_SDFGI_MULTIVIEW, false);
+ shader.set_variant_enabled(MODE_COMBINED_MULTIVIEW, false);
+ shader.set_variant_enabled(MODE_HALF_RES_VOXEL_GI_MULTIVIEW, false);
+ shader.set_variant_enabled(MODE_HALF_RES_SDFGI_MULTIVIEW, false);
+ shader.set_variant_enabled(MODE_HALF_RES_COMBINED_MULTIVIEW, false);
+ }
+
shader_version = shader.version_create();
for (int i = 0; i < MODE_MAX; i++) {
- pipelines[i] = RD::get_singleton()->compute_pipeline_create(shader.version_get_shader(shader_version, i));
+ if (shader.is_variant_enabled(i)) {
+ pipelines[i] = RD::get_singleton()->compute_pipeline_create(shader.version_get_shader(shader_version, i));
+ } else {
+ pipelines[i] = RID();
+ }
}
sdfgi_ubo = RD::get_singleton()->uniform_buffer_create(sizeof(SDFGIData));
@@ -2991,9 +3409,14 @@ void RendererSceneGIRD::init(RendererStorageRD *p_storage, RendererSceneSkyRD *p
Vector<String> versions;
versions.push_back("\n#define MODE_PROBES\n");
+ versions.push_back("\n#define MODE_PROBES\n#define USE_MULTIVIEW\n");
versions.push_back("\n#define MODE_VISIBILITY\n");
+ versions.push_back("\n#define MODE_VISIBILITY\n#define USE_MULTIVIEW\n");
sdfgi_shader.debug_probes.initialize(versions, defines);
+
+ // TODO disable multiview versions if turned off
+
sdfgi_shader.debug_probes_shader = sdfgi_shader.debug_probes.version_create();
{
@@ -3004,6 +3427,8 @@ void RendererSceneGIRD::init(RendererStorageRD *p_storage, RendererSceneSkyRD *p
ds.enable_depth_write = true;
ds.depth_compare_operator = RD::COMPARE_OP_LESS_OR_EQUAL;
for (int i = 0; i < SDFGIShader::PROBE_DEBUG_MAX; i++) {
+ // TODO check if version is enabled
+
RID debug_probes_shader_version = sdfgi_shader.debug_probes.version_get_shader(sdfgi_shader.debug_probes_shader, i);
sdfgi_shader.debug_probes_pipeline[i].setup(debug_probes_shader_version, RD::RENDER_PRIMITIVE_TRIANGLE_STRIPS, rs, RD::PipelineMultisampleState(), ds, RD::PipelineColorBlendState::create_disabled(), 0);
}
@@ -3013,7 +3438,7 @@ void RendererSceneGIRD::init(RendererStorageRD *p_storage, RendererSceneSkyRD *p
half_resolution = GLOBAL_GET("rendering/global_illumination/gi/use_half_resolution");
}
-void RendererSceneGIRD::free() {
+void GI::free() {
RD::get_singleton()->free(default_voxel_gi_buffer);
RD::get_singleton()->free(voxel_gi_lights_uniform);
RD::get_singleton()->free(sdfgi_ubo);
@@ -3032,7 +3457,7 @@ void RendererSceneGIRD::free() {
}
}
-RendererSceneGIRD::SDFGI *RendererSceneGIRD::create_sdfgi(RendererSceneEnvironmentRD *p_env, const Vector3 &p_world_position, uint32_t p_requested_history_size) {
+GI::SDFGI *GI::create_sdfgi(RendererSceneEnvironmentRD *p_env, const Vector3 &p_world_position, uint32_t p_requested_history_size) {
SDFGI *sdfgi = memnew(SDFGI);
sdfgi->create(p_env, p_world_position, p_requested_history_size, this);
@@ -3040,7 +3465,7 @@ RendererSceneGIRD::SDFGI *RendererSceneGIRD::create_sdfgi(RendererSceneEnvironme
return sdfgi;
}
-void RendererSceneGIRD::setup_voxel_gi_instances(RID p_render_buffers, const Transform3D &p_transform, const PagedArray<RID> &p_voxel_gi_instances, uint32_t &r_voxel_gi_instances_used, RendererSceneRenderRD *p_scene_render) {
+void GI::setup_voxel_gi_instances(RID p_render_buffers, const Transform3D &p_transform, const PagedArray<RID> &p_voxel_gi_instances, uint32_t &r_voxel_gi_instances_used, RendererSceneRenderRD *p_scene_render) {
RendererRD::TextureStorage *texture_storage = RendererRD::TextureStorage::get_singleton();
r_voxel_gi_instances_used = 0;
@@ -3069,7 +3494,7 @@ void RendererSceneGIRD::setup_voxel_gi_instances(RID p_render_buffers, const Tra
RID base_probe = gipi->probe;
- Transform3D to_cell = storage->voxel_gi_get_to_cell_xform(gipi->probe) * gipi->transform.affine_inverse() * to_camera;
+ Transform3D to_cell = voxel_gi_get_to_cell_xform(gipi->probe) * gipi->transform.affine_inverse() * to_camera;
gipd.xform[0] = to_cell.basis.rows[0][0];
gipd.xform[1] = to_cell.basis.rows[1][0];
@@ -3088,16 +3513,16 @@ void RendererSceneGIRD::setup_voxel_gi_instances(RID p_render_buffers, const Tra
gipd.xform[14] = to_cell.origin.z;
gipd.xform[15] = 1;
- Vector3 bounds = storage->voxel_gi_get_octree_size(base_probe);
+ Vector3 bounds = voxel_gi_get_octree_size(base_probe);
gipd.bounds[0] = bounds.x;
gipd.bounds[1] = bounds.y;
gipd.bounds[2] = bounds.z;
- gipd.dynamic_range = storage->voxel_gi_get_dynamic_range(base_probe) * storage->voxel_gi_get_energy(base_probe);
- gipd.bias = storage->voxel_gi_get_bias(base_probe);
- gipd.normal_bias = storage->voxel_gi_get_normal_bias(base_probe);
- gipd.blend_ambient = !storage->voxel_gi_is_interior(base_probe);
+ gipd.dynamic_range = voxel_gi_get_dynamic_range(base_probe) * voxel_gi_get_energy(base_probe);
+ gipd.bias = voxel_gi_get_bias(base_probe);
+ gipd.normal_bias = voxel_gi_get_normal_bias(base_probe);
+ gipd.blend_ambient = !voxel_gi_is_interior(base_probe);
gipd.mipmaps = gipi->mipmaps.size();
}
@@ -3108,17 +3533,19 @@ void RendererSceneGIRD::setup_voxel_gi_instances(RID p_render_buffers, const Tra
texture = texture_storage->texture_rd_get_default(RendererRD::DEFAULT_RD_TEXTURE_3D_WHITE);
}
- if (texture != rb->gi.voxel_gi_textures[i]) {
+ if (texture != rb->rbgi.voxel_gi_textures[i]) {
voxel_gi_instances_changed = true;
- rb->gi.voxel_gi_textures[i] = texture;
+ rb->rbgi.voxel_gi_textures[i] = texture;
}
}
if (voxel_gi_instances_changed) {
- if (RD::get_singleton()->uniform_set_is_valid(rb->gi.uniform_set)) {
- RD::get_singleton()->free(rb->gi.uniform_set);
+ for (uint32_t v = 0; v < RendererSceneRender::MAX_RENDER_VIEWS; v++) {
+ if (RD::get_singleton()->uniform_set_is_valid(rb->rbgi.uniform_set[v])) {
+ RD::get_singleton()->free(rb->rbgi.uniform_set[v]);
+ }
+ rb->rbgi.uniform_set[v] = RID();
}
- rb->gi.uniform_set = RID();
if (rb->volumetric_fog) {
if (RD::get_singleton()->uniform_set_is_valid(rb->volumetric_fog->fog_uniform_set)) {
RD::get_singleton()->free(rb->volumetric_fog->fog_uniform_set);
@@ -3140,21 +3567,78 @@ void RendererSceneGIRD::setup_voxel_gi_instances(RID p_render_buffers, const Tra
}
}
-void RendererSceneGIRD::process_gi(RID p_render_buffers, RID p_normal_roughness_buffer, RID p_voxel_gi_buffer, RID p_environment, const CameraMatrix &p_projection, const Transform3D &p_transform, const PagedArray<RID> &p_voxel_gi_instances, RendererSceneRenderRD *p_scene_render) {
+void GI::RenderBuffersGI::free() {
+ for (uint32_t v = 0; v < RendererSceneRender::MAX_RENDER_VIEWS; v++) {
+ if (RD::get_singleton()->uniform_set_is_valid(uniform_set[v])) {
+ RD::get_singleton()->free(uniform_set[v]);
+ }
+ uniform_set[v] = RID();
+ }
+
+ if (scene_data_ubo.is_valid()) {
+ RD::get_singleton()->free(scene_data_ubo);
+ scene_data_ubo = RID();
+ }
+
+ if (ambient_buffer.is_valid()) {
+ if (view_count == 1) {
+ // Only one view? then these are copies of our main buffers.
+ ambient_view[0] = RID();
+ reflection_view[0] = RID();
+ } else {
+ // Multiple views? free our slices.
+ for (uint32_t v = 0; v < view_count; v++) {
+ RD::get_singleton()->free(ambient_view[v]);
+ RD::get_singleton()->free(reflection_view[v]);
+ ambient_view[v] = RID();
+ reflection_view[v] = RID();
+ }
+ }
+
+ // Now we can free our buffers.
+ RD::get_singleton()->free(ambient_buffer);
+ RD::get_singleton()->free(reflection_buffer);
+ ambient_buffer = RID();
+ reflection_buffer = RID();
+ view_count = 0;
+ }
+
+ if (voxel_gi_buffer.is_valid()) {
+ RD::get_singleton()->free(voxel_gi_buffer);
+ voxel_gi_buffer = RID();
+ }
+}
+
+void GI::process_gi(RID p_render_buffers, RID *p_normal_roughness_views, RID p_voxel_gi_buffer, RID p_environment, uint32_t p_view_count, const CameraMatrix *p_projections, const Vector3 *p_eye_offsets, const Transform3D &p_cam_transform, const PagedArray<RID> &p_voxel_gi_instances, RendererSceneRenderRD *p_scene_render) {
RendererRD::TextureStorage *texture_storage = RendererRD::TextureStorage::get_singleton();
RendererRD::MaterialStorage *material_storage = RendererRD::MaterialStorage::get_singleton();
+ ERR_FAIL_COND_MSG(p_view_count > 2, "Maximum of 2 views supported for Processing GI.");
+
RD::get_singleton()->draw_command_begin_label("GI Render");
RendererSceneRenderRD::RenderBuffers *rb = p_scene_render->render_buffers_owner.get_or_null(p_render_buffers);
ERR_FAIL_COND(rb == nullptr);
- if (rb->ambient_buffer.is_null() || rb->gi.using_half_size_gi != half_resolution) {
- if (rb->ambient_buffer.is_valid()) {
- RD::get_singleton()->free(rb->ambient_buffer);
- RD::get_singleton()->free(rb->reflection_buffer);
+ if (rb->rbgi.ambient_buffer.is_null() || rb->rbgi.using_half_size_gi != half_resolution || rb->rbgi.view_count != p_view_count) {
+ // Free our old buffer if applicable
+ if (rb->rbgi.ambient_buffer.is_valid()) {
+ if (rb->rbgi.view_count > 1) {
+ for (uint32_t v = 0; v < rb->rbgi.view_count; v++) {
+ RD::get_singleton()->free(rb->rbgi.ambient_view[v]);
+ RD::get_singleton()->free(rb->rbgi.reflection_view[v]);
+ }
+ }
+ RD::get_singleton()->free(rb->rbgi.ambient_buffer);
+ RD::get_singleton()->free(rb->rbgi.reflection_buffer);
}
+ print_line("Allocating GI buffers"); // TESTING REMOVE BEFORE MERGING
+
+ // Remember the view count we're using
+ rb->rbgi.view_count = p_view_count;
+
+ // Create textures for our ambient and reflection data
RD::TextureFormat tf;
tf.format = RD::DATA_FORMAT_R16G16B16A16_SFLOAT;
tf.width = rb->internal_width;
@@ -3163,222 +3647,280 @@ void RendererSceneGIRD::process_gi(RID p_render_buffers, RID p_normal_roughness_
tf.width >>= 1;
tf.height >>= 1;
}
+ if (p_view_count > 1) {
+ tf.texture_type = RD::TEXTURE_TYPE_2D_ARRAY;
+ tf.array_layers = p_view_count;
+ } else {
+ tf.texture_type = RD::TEXTURE_TYPE_2D;
+ tf.array_layers = 1;
+ }
tf.usage_bits = RD::TEXTURE_USAGE_SAMPLING_BIT | RD::TEXTURE_USAGE_STORAGE_BIT;
- rb->reflection_buffer = RD::get_singleton()->texture_create(tf, RD::TextureView());
- rb->ambient_buffer = RD::get_singleton()->texture_create(tf, RD::TextureView());
- rb->gi.using_half_size_gi = half_resolution;
- }
-
- PushConstant push_constant;
-
- 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->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());
- push_constant.high_quality_vct = voxel_gi_quality == RS::VOXEL_GI_QUALITY_HIGH;
-
- bool use_sdfgi = rb->sdfgi != nullptr;
- bool use_voxel_gi_instances = push_constant.max_voxel_gi_instances > 0;
-
- push_constant.cam_rotation[0] = p_transform.basis[0][0];
- push_constant.cam_rotation[1] = p_transform.basis[1][0];
- push_constant.cam_rotation[2] = p_transform.basis[2][0];
- push_constant.cam_rotation[3] = 0;
- push_constant.cam_rotation[4] = p_transform.basis[0][1];
- push_constant.cam_rotation[5] = p_transform.basis[1][1];
- push_constant.cam_rotation[6] = p_transform.basis[2][1];
- push_constant.cam_rotation[7] = 0;
- push_constant.cam_rotation[8] = p_transform.basis[0][2];
- push_constant.cam_rotation[9] = p_transform.basis[1][2];
- push_constant.cam_rotation[10] = p_transform.basis[2][2];
- push_constant.cam_rotation[11] = 0;
-
- if (rb->gi.uniform_set.is_null() || !RD::get_singleton()->uniform_set_is_valid(rb->gi.uniform_set)) {
- Vector<RD::Uniform> uniforms;
- {
- RD::Uniform u;
- u.binding = 1;
- u.uniform_type = RD::UNIFORM_TYPE_TEXTURE;
- for (uint32_t j = 0; j < SDFGI::MAX_CASCADES; j++) {
- if (rb->sdfgi && j < rb->sdfgi->cascades.size()) {
- u.append_id(rb->sdfgi->cascades[j].sdf_tex);
- } else {
- u.append_id(texture_storage->texture_rd_get_default(RendererRD::DEFAULT_RD_TEXTURE_3D_WHITE));
- }
+ rb->rbgi.ambient_buffer = RD::get_singleton()->texture_create(tf, RD::TextureView());
+ rb->rbgi.reflection_buffer = RD::get_singleton()->texture_create(tf, RD::TextureView());
+ rb->rbgi.using_half_size_gi = half_resolution;
+
+ if (p_view_count == 1) {
+ // Just one view? Copy our buffers
+ rb->rbgi.ambient_view[0] = rb->rbgi.ambient_buffer;
+ rb->rbgi.reflection_view[0] = rb->rbgi.reflection_buffer;
+ } else {
+ // More then one view? Create slices for each view
+ for (uint32_t v = 0; v < p_view_count; v++) {
+ rb->rbgi.ambient_view[v] = RD::get_singleton()->texture_create_shared_from_slice(RD::TextureView(), rb->rbgi.ambient_buffer, v, 0);
+ rb->rbgi.reflection_view[v] = RD::get_singleton()->texture_create_shared_from_slice(RD::TextureView(), rb->rbgi.reflection_buffer, v, 0);
}
- uniforms.push_back(u);
}
- {
- RD::Uniform u;
- u.binding = 2;
- u.uniform_type = RD::UNIFORM_TYPE_TEXTURE;
- for (uint32_t j = 0; j < SDFGI::MAX_CASCADES; j++) {
- if (rb->sdfgi && j < rb->sdfgi->cascades.size()) {
- u.append_id(rb->sdfgi->cascades[j].light_tex);
- } else {
- u.append_id(texture_storage->texture_rd_get_default(RendererRD::DEFAULT_RD_TEXTURE_3D_WHITE));
+ }
+
+ // Setup our scene data
+ {
+ SceneData scene_data;
+
+ if (rb->rbgi.scene_data_ubo.is_null()) {
+ rb->rbgi.scene_data_ubo = RD::get_singleton()->uniform_buffer_create(sizeof(SceneData));
+ }
+
+ for (uint32_t v = 0; v < p_view_count; v++) {
+ RendererStorageRD::store_camera(p_projections[v].inverse(), scene_data.inv_projection[v]);
+ scene_data.eye_offset[v][0] = p_eye_offsets[v].x;
+ scene_data.eye_offset[v][1] = p_eye_offsets[v].y;
+ scene_data.eye_offset[v][2] = p_eye_offsets[v].z;
+ scene_data.eye_offset[v][3] = 0.0;
+ }
+
+ // Note that we will be ignoring the origin of this transform.
+ RendererStorageRD::store_transform(p_cam_transform, scene_data.cam_transform);
+
+ scene_data.screen_size[0] = rb->internal_width;
+ scene_data.screen_size[1] = rb->internal_height;
+
+ RD::get_singleton()->buffer_update(rb->rbgi.scene_data_ubo, 0, sizeof(SceneData), &scene_data, RD::BARRIER_MASK_COMPUTE);
+ }
+
+ // Now compute the contents of our buffers.
+ RD::ComputeListID compute_list = RD::get_singleton()->compute_list_begin(true);
+
+ for (uint32_t v = 0; v < p_view_count; v++) {
+ // Render each eye seperately.
+ // We need to look into whether we can make our compute shader use Multiview but not sure that works or makes a difference..
+
+ // setup our push constant
+
+ PushConstant push_constant;
+
+ push_constant.view_index = v;
+ push_constant.orthogonal = p_projections[v].is_orthogonal();
+ push_constant.max_voxel_gi_instances = MIN((uint64_t)MAX_VOXEL_GI_INSTANCES, p_voxel_gi_instances.size());
+ push_constant.high_quality_vct = voxel_gi_quality == RS::VOXEL_GI_QUALITY_HIGH;
+
+ push_constant.z_near = p_projections[v].get_z_near();
+ push_constant.z_far = p_projections[v].get_z_far();
+
+ push_constant.proj_info[0] = -2.0f / (rb->internal_width * p_projections[v].matrix[0][0]);
+ push_constant.proj_info[1] = -2.0f / (rb->internal_height * p_projections[v].matrix[1][1]);
+ push_constant.proj_info[2] = (1.0f - p_projections[v].matrix[0][2]) / p_projections[v].matrix[0][0];
+ push_constant.proj_info[3] = (1.0f + p_projections[v].matrix[1][2]) / p_projections[v].matrix[1][1];
+
+ bool use_sdfgi = rb->sdfgi != nullptr;
+ bool use_voxel_gi_instances = push_constant.max_voxel_gi_instances > 0;
+
+ // setup our uniform set
+ if (rb->rbgi.uniform_set[v].is_null() || !RD::get_singleton()->uniform_set_is_valid(rb->rbgi.uniform_set[v])) {
+ Vector<RD::Uniform> uniforms;
+ {
+ RD::Uniform u;
+ u.binding = 1;
+ u.uniform_type = RD::UNIFORM_TYPE_TEXTURE;
+ for (uint32_t j = 0; j < SDFGI::MAX_CASCADES; j++) {
+ if (rb->sdfgi && j < rb->sdfgi->cascades.size()) {
+ u.append_id(rb->sdfgi->cascades[j].sdf_tex);
+ } else {
+ u.append_id(texture_storage->texture_rd_get_default(RendererRD::DEFAULT_RD_TEXTURE_3D_WHITE));
+ }
}
+ uniforms.push_back(u);
}
- uniforms.push_back(u);
- }
- {
- RD::Uniform u;
- u.binding = 3;
- u.uniform_type = RD::UNIFORM_TYPE_TEXTURE;
- for (uint32_t j = 0; j < SDFGI::MAX_CASCADES; j++) {
- if (rb->sdfgi && j < rb->sdfgi->cascades.size()) {
- u.append_id(rb->sdfgi->cascades[j].light_aniso_0_tex);
+ {
+ RD::Uniform u;
+ u.binding = 2;
+ u.uniform_type = RD::UNIFORM_TYPE_TEXTURE;
+ for (uint32_t j = 0; j < SDFGI::MAX_CASCADES; j++) {
+ if (rb->sdfgi && j < rb->sdfgi->cascades.size()) {
+ u.append_id(rb->sdfgi->cascades[j].light_tex);
+ } else {
+ u.append_id(texture_storage->texture_rd_get_default(RendererRD::DEFAULT_RD_TEXTURE_3D_WHITE));
+ }
+ }
+ uniforms.push_back(u);
+ }
+ {
+ RD::Uniform u;
+ u.binding = 3;
+ u.uniform_type = RD::UNIFORM_TYPE_TEXTURE;
+ for (uint32_t j = 0; j < SDFGI::MAX_CASCADES; j++) {
+ if (rb->sdfgi && j < rb->sdfgi->cascades.size()) {
+ u.append_id(rb->sdfgi->cascades[j].light_aniso_0_tex);
+ } else {
+ u.append_id(texture_storage->texture_rd_get_default(RendererRD::DEFAULT_RD_TEXTURE_3D_WHITE));
+ }
+ }
+ uniforms.push_back(u);
+ }
+ {
+ RD::Uniform u;
+ u.binding = 4;
+ u.uniform_type = RD::UNIFORM_TYPE_TEXTURE;
+ for (uint32_t j = 0; j < SDFGI::MAX_CASCADES; j++) {
+ if (rb->sdfgi && j < rb->sdfgi->cascades.size()) {
+ u.append_id(rb->sdfgi->cascades[j].light_aniso_1_tex);
+ } else {
+ u.append_id(texture_storage->texture_rd_get_default(RendererRD::DEFAULT_RD_TEXTURE_3D_WHITE));
+ }
+ }
+ uniforms.push_back(u);
+ }
+ {
+ RD::Uniform u;
+ u.uniform_type = RD::UNIFORM_TYPE_TEXTURE;
+ u.binding = 5;
+ if (rb->sdfgi) {
+ u.append_id(rb->sdfgi->occlusion_texture);
} else {
u.append_id(texture_storage->texture_rd_get_default(RendererRD::DEFAULT_RD_TEXTURE_3D_WHITE));
}
+ uniforms.push_back(u);
}
- uniforms.push_back(u);
- }
- {
- RD::Uniform u;
- u.binding = 4;
- u.uniform_type = RD::UNIFORM_TYPE_TEXTURE;
- for (uint32_t j = 0; j < SDFGI::MAX_CASCADES; j++) {
- if (rb->sdfgi && j < rb->sdfgi->cascades.size()) {
- u.append_id(rb->sdfgi->cascades[j].light_aniso_1_tex);
+ {
+ RD::Uniform u;
+ u.uniform_type = RD::UNIFORM_TYPE_SAMPLER;
+ u.binding = 6;
+ u.append_id(material_storage->sampler_rd_get_default(RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED));
+ uniforms.push_back(u);
+ }
+ {
+ RD::Uniform u;
+ u.uniform_type = RD::UNIFORM_TYPE_SAMPLER;
+ u.binding = 7;
+ u.append_id(material_storage->sampler_rd_get_default(RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR_WITH_MIPMAPS, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED));
+ uniforms.push_back(u);
+ }
+
+ {
+ RD::Uniform u;
+ u.uniform_type = RD::UNIFORM_TYPE_IMAGE;
+ u.binding = 9;
+ u.append_id(rb->rbgi.ambient_view[v]);
+ uniforms.push_back(u);
+ }
+
+ {
+ RD::Uniform u;
+ u.uniform_type = RD::UNIFORM_TYPE_IMAGE;
+ u.binding = 10;
+ u.append_id(rb->rbgi.reflection_view[v]);
+ uniforms.push_back(u);
+ }
+
+ {
+ RD::Uniform u;
+ u.uniform_type = RD::UNIFORM_TYPE_TEXTURE;
+ u.binding = 11;
+ if (rb->sdfgi) {
+ u.append_id(rb->sdfgi->lightprobe_texture);
} else {
- u.append_id(texture_storage->texture_rd_get_default(RendererRD::DEFAULT_RD_TEXTURE_3D_WHITE));
+ u.append_id(texture_storage->texture_rd_get_default(RendererRD::DEFAULT_RD_TEXTURE_2D_ARRAY_WHITE));
}
+ uniforms.push_back(u);
}
- uniforms.push_back(u);
- }
- {
- RD::Uniform u;
- u.uniform_type = RD::UNIFORM_TYPE_TEXTURE;
- u.binding = 5;
- if (rb->sdfgi) {
- u.append_id(rb->sdfgi->occlusion_texture);
- } else {
- u.append_id(texture_storage->texture_rd_get_default(RendererRD::DEFAULT_RD_TEXTURE_3D_WHITE));
+ {
+ RD::Uniform u;
+ u.uniform_type = RD::UNIFORM_TYPE_TEXTURE;
+ u.binding = 12;
+ u.append_id(rb->views[v].view_depth);
+ uniforms.push_back(u);
+ }
+ {
+ RD::Uniform u;
+ u.uniform_type = RD::UNIFORM_TYPE_TEXTURE;
+ u.binding = 13;
+ u.append_id(p_normal_roughness_views[v]);
+ uniforms.push_back(u);
+ }
+ {
+ RD::Uniform u;
+ u.uniform_type = RD::UNIFORM_TYPE_TEXTURE;
+ u.binding = 14;
+ RID buffer = p_voxel_gi_buffer.is_valid() ? p_voxel_gi_buffer : texture_storage->texture_rd_get_default(RendererRD::DEFAULT_RD_TEXTURE_BLACK);
+ u.append_id(buffer);
+ uniforms.push_back(u);
+ }
+ {
+ RD::Uniform u;
+ u.uniform_type = RD::UNIFORM_TYPE_UNIFORM_BUFFER;
+ u.binding = 15;
+ u.append_id(sdfgi_ubo);
+ uniforms.push_back(u);
+ }
+ {
+ RD::Uniform u;
+ u.uniform_type = RD::UNIFORM_TYPE_UNIFORM_BUFFER;
+ u.binding = 16;
+ u.append_id(rb->rbgi.voxel_gi_buffer);
+ uniforms.push_back(u);
+ }
+ {
+ RD::Uniform u;
+ u.uniform_type = RD::UNIFORM_TYPE_TEXTURE;
+ u.binding = 17;
+ for (int i = 0; i < MAX_VOXEL_GI_INSTANCES; i++) {
+ u.append_id(rb->rbgi.voxel_gi_textures[i]);
+ }
+ uniforms.push_back(u);
+ }
+ {
+ RD::Uniform u;
+ u.uniform_type = RD::UNIFORM_TYPE_UNIFORM_BUFFER;
+ u.binding = 18;
+ u.append_id(rb->rbgi.scene_data_ubo);
+ uniforms.push_back(u);
}
- uniforms.push_back(u);
- }
- {
- RD::Uniform u;
- u.uniform_type = RD::UNIFORM_TYPE_SAMPLER;
- u.binding = 6;
- u.append_id(material_storage->sampler_rd_get_default(RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED));
- uniforms.push_back(u);
- }
- {
- RD::Uniform u;
- u.uniform_type = RD::UNIFORM_TYPE_SAMPLER;
- u.binding = 7;
- u.append_id(material_storage->sampler_rd_get_default(RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR_WITH_MIPMAPS, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED));
- uniforms.push_back(u);
- }
- {
- RD::Uniform u;
- u.uniform_type = RD::UNIFORM_TYPE_IMAGE;
- u.binding = 9;
- u.append_id(rb->ambient_buffer);
- uniforms.push_back(u);
+ rb->rbgi.uniform_set[v] = RD::get_singleton()->uniform_set_create(uniforms, shader.version_get_shader(shader_version, 0), 0);
}
- {
- RD::Uniform u;
- u.uniform_type = RD::UNIFORM_TYPE_IMAGE;
- u.binding = 10;
- u.append_id(rb->reflection_buffer);
- uniforms.push_back(u);
- }
+ Mode mode;
- {
- RD::Uniform u;
- u.uniform_type = RD::UNIFORM_TYPE_TEXTURE;
- u.binding = 11;
- if (rb->sdfgi) {
- u.append_id(rb->sdfgi->lightprobe_texture);
+ if (p_view_count > 1) {
+ if (rb->rbgi.using_half_size_gi) {
+ mode = (use_sdfgi && use_voxel_gi_instances) ? MODE_HALF_RES_COMBINED_MULTIVIEW : (use_sdfgi ? MODE_HALF_RES_SDFGI_MULTIVIEW : MODE_HALF_RES_VOXEL_GI_MULTIVIEW);
} else {
- u.append_id(texture_storage->texture_rd_get_default(RendererRD::DEFAULT_RD_TEXTURE_2D_ARRAY_WHITE));
+ mode = (use_sdfgi && use_voxel_gi_instances) ? MODE_COMBINED_MULTIVIEW : (use_sdfgi ? MODE_SDFGI_MULTIVIEW : MODE_VOXEL_GI_MULTIVIEW);
}
- uniforms.push_back(u);
- }
- {
- RD::Uniform u;
- u.uniform_type = RD::UNIFORM_TYPE_TEXTURE;
- u.binding = 12;
- u.append_id(rb->depth_texture);
- uniforms.push_back(u);
- }
- {
- RD::Uniform u;
- u.uniform_type = RD::UNIFORM_TYPE_TEXTURE;
- u.binding = 13;
- u.append_id(p_normal_roughness_buffer);
- uniforms.push_back(u);
- }
- {
- RD::Uniform u;
- u.uniform_type = RD::UNIFORM_TYPE_TEXTURE;
- u.binding = 14;
- RID buffer = p_voxel_gi_buffer.is_valid() ? p_voxel_gi_buffer : texture_storage->texture_rd_get_default(RendererRD::DEFAULT_RD_TEXTURE_BLACK);
- u.append_id(buffer);
- uniforms.push_back(u);
- }
- {
- RD::Uniform u;
- u.uniform_type = RD::UNIFORM_TYPE_UNIFORM_BUFFER;
- u.binding = 15;
- u.append_id(sdfgi_ubo);
- uniforms.push_back(u);
- }
- {
- RD::Uniform u;
- u.uniform_type = RD::UNIFORM_TYPE_UNIFORM_BUFFER;
- u.binding = 16;
- u.append_id(rb->gi.voxel_gi_buffer);
- uniforms.push_back(u);
- }
- {
- RD::Uniform u;
- u.uniform_type = RD::UNIFORM_TYPE_TEXTURE;
- u.binding = 17;
- for (int i = 0; i < MAX_VOXEL_GI_INSTANCES; i++) {
- u.append_id(rb->gi.voxel_gi_textures[i]);
+ } else {
+ if (rb->rbgi.using_half_size_gi) {
+ mode = (use_sdfgi && use_voxel_gi_instances) ? MODE_HALF_RES_COMBINED : (use_sdfgi ? MODE_HALF_RES_SDFGI : MODE_HALF_RES_VOXEL_GI);
+ } else {
+ mode = (use_sdfgi && use_voxel_gi_instances) ? MODE_COMBINED : (use_sdfgi ? MODE_SDFGI : MODE_VOXEL_GI);
}
- uniforms.push_back(u);
}
- rb->gi.uniform_set = RD::get_singleton()->uniform_set_create(uniforms, shader.version_get_shader(shader_version, 0), 0);
- }
-
- Mode mode;
+ RD::get_singleton()->compute_list_bind_compute_pipeline(compute_list, pipelines[mode]);
+ RD::get_singleton()->compute_list_bind_uniform_set(compute_list, rb->rbgi.uniform_set[v], 0);
+ RD::get_singleton()->compute_list_set_push_constant(compute_list, &push_constant, sizeof(PushConstant));
- if (rb->gi.using_half_size_gi) {
- mode = (use_sdfgi && use_voxel_gi_instances) ? MODE_HALF_RES_COMBINED : (use_sdfgi ? MODE_HALF_RES_SDFGI : MODE_HALF_RES_VOXEL_GI);
- } else {
- mode = (use_sdfgi && use_voxel_gi_instances) ? MODE_COMBINED : (use_sdfgi ? MODE_SDFGI : MODE_VOXEL_GI);
+ if (rb->rbgi.using_half_size_gi) {
+ 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->internal_width, rb->internal_height, 1);
+ }
}
- RD::ComputeListID compute_list = RD::get_singleton()->compute_list_begin(true);
- RD::get_singleton()->compute_list_bind_compute_pipeline(compute_list, pipelines[mode]);
- RD::get_singleton()->compute_list_bind_uniform_set(compute_list, rb->gi.uniform_set, 0);
- 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->internal_width >> 1, rb->internal_height >> 1, 1);
- } else {
- 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
RD::get_singleton()->draw_command_end_label();
}
-RID RendererSceneGIRD::voxel_gi_instance_create(RID p_base) {
+RID GI::voxel_gi_instance_create(RID p_base) {
VoxelGIInstance voxel_gi;
voxel_gi.gi = this;
voxel_gi.storage = storage;
@@ -3387,28 +3929,28 @@ RID RendererSceneGIRD::voxel_gi_instance_create(RID p_base) {
return rid;
}
-void RendererSceneGIRD::voxel_gi_instance_set_transform_to_data(RID p_probe, const Transform3D &p_xform) {
+void GI::voxel_gi_instance_set_transform_to_data(RID p_probe, const Transform3D &p_xform) {
VoxelGIInstance *voxel_gi = get_probe_instance(p_probe);
ERR_FAIL_COND(!voxel_gi);
voxel_gi->transform = p_xform;
}
-bool RendererSceneGIRD::voxel_gi_needs_update(RID p_probe) const {
+bool GI::voxel_gi_needs_update(RID p_probe) const {
VoxelGIInstance *voxel_gi = get_probe_instance(p_probe);
ERR_FAIL_COND_V(!voxel_gi, false);
- return voxel_gi->last_probe_version != storage->voxel_gi_get_version(voxel_gi->probe);
+ return voxel_gi->last_probe_version != voxel_gi_get_version(voxel_gi->probe);
}
-void RendererSceneGIRD::voxel_gi_update(RID p_probe, bool p_update_light_instances, const Vector<RID> &p_light_instances, const PagedArray<RendererSceneRender::GeometryInstance *> &p_dynamic_objects, RendererSceneRenderRD *p_scene_render) {
+void GI::voxel_gi_update(RID p_probe, bool p_update_light_instances, const Vector<RID> &p_light_instances, const PagedArray<RendererSceneRender::GeometryInstance *> &p_dynamic_objects, RendererSceneRenderRD *p_scene_render) {
VoxelGIInstance *voxel_gi = get_probe_instance(p_probe);
ERR_FAIL_COND(!voxel_gi);
voxel_gi->update(p_update_light_instances, p_light_instances, p_dynamic_objects, p_scene_render);
}
-void RendererSceneGIRD::debug_voxel_gi(RID p_voxel_gi, RD::DrawListID p_draw_list, RID p_framebuffer, const CameraMatrix &p_camera_with_transform, bool p_lighting, bool p_emission, float p_alpha) {
+void GI::debug_voxel_gi(RID p_voxel_gi, RD::DrawListID p_draw_list, RID p_framebuffer, const CameraMatrix &p_camera_with_transform, bool p_lighting, bool p_emission, float p_alpha) {
VoxelGIInstance *voxel_gi = voxel_gi_instance_owner.get_or_null(p_voxel_gi);
ERR_FAIL_COND(!voxel_gi);
diff --git a/servers/rendering/renderer_rd/renderer_scene_gi_rd.h b/servers/rendering/renderer_rd/environment/gi.h
index 122644498b..b6ecfe42ea 100644
--- a/servers/rendering/renderer_rd/renderer_scene_gi_rd.h
+++ b/servers/rendering/renderer_rd/environment/gi.h
@@ -1,5 +1,5 @@
/*************************************************************************/
-/* renderer_scene_gi_rd.h */
+/* gi.h */
/*************************************************************************/
/* This file is part of: */
/* GODOT ENGINE */
@@ -28,33 +28,77 @@
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/*************************************************************************/
-#ifndef RENDERING_SERVER_SCENE_GI_RD_H
-#define RENDERING_SERVER_SCENE_GI_RD_H
+#ifndef GI_RD_H
+#define GI_RD_H
#include "core/templates/local_vector.h"
#include "core/templates/rid_owner.h"
+#include "servers/rendering/environment/renderer_gi.h"
#include "servers/rendering/renderer_compositor.h"
#include "servers/rendering/renderer_rd/renderer_scene_environment_rd.h"
#include "servers/rendering/renderer_rd/renderer_scene_sky_rd.h"
#include "servers/rendering/renderer_rd/renderer_storage_rd.h"
-#include "servers/rendering/renderer_rd/shaders/gi.glsl.gen.h"
-#include "servers/rendering/renderer_rd/shaders/sdfgi_debug.glsl.gen.h"
-#include "servers/rendering/renderer_rd/shaders/sdfgi_debug_probes.glsl.gen.h"
-#include "servers/rendering/renderer_rd/shaders/sdfgi_direct_light.glsl.gen.h"
-#include "servers/rendering/renderer_rd/shaders/sdfgi_integrate.glsl.gen.h"
-#include "servers/rendering/renderer_rd/shaders/sdfgi_preprocess.glsl.gen.h"
-#include "servers/rendering/renderer_rd/shaders/voxel_gi.glsl.gen.h"
-#include "servers/rendering/renderer_rd/shaders/voxel_gi_debug.glsl.gen.h"
+#include "servers/rendering/renderer_rd/shaders/environment/gi.glsl.gen.h"
+#include "servers/rendering/renderer_rd/shaders/environment/sdfgi_debug.glsl.gen.h"
+#include "servers/rendering/renderer_rd/shaders/environment/sdfgi_debug_probes.glsl.gen.h"
+#include "servers/rendering/renderer_rd/shaders/environment/sdfgi_direct_light.glsl.gen.h"
+#include "servers/rendering/renderer_rd/shaders/environment/sdfgi_integrate.glsl.gen.h"
+#include "servers/rendering/renderer_rd/shaders/environment/sdfgi_preprocess.glsl.gen.h"
+#include "servers/rendering/renderer_rd/shaders/environment/voxel_gi.glsl.gen.h"
+#include "servers/rendering/renderer_rd/shaders/environment/voxel_gi_debug.glsl.gen.h"
#include "servers/rendering/renderer_scene_render.h"
+#include "servers/rendering/renderer_storage.h"
#include "servers/rendering/rendering_device.h"
// Forward declare RenderDataRD and RendererSceneRenderRD so we can pass it into some of our methods, these classes are pretty tightly bound
struct RenderDataRD;
class RendererSceneRenderRD;
-class RendererSceneGIRD {
+namespace RendererRD {
+
+class GI : public RendererGI {
+public:
+ /* VOXEL GI STORAGE */
+
+ struct VoxelGI {
+ RID octree_buffer;
+ RID data_buffer;
+ RID sdf_texture;
+
+ uint32_t octree_buffer_size = 0;
+ uint32_t data_buffer_size = 0;
+
+ Vector<int> level_counts;
+
+ int cell_count = 0;
+
+ Transform3D to_cell_xform;
+ AABB bounds;
+ Vector3i octree_size;
+
+ float dynamic_range = 2.0;
+ float energy = 1.0;
+ float bias = 1.4;
+ float normal_bias = 0.0;
+ float propagation = 0.7;
+ bool interior = false;
+ bool use_two_bounces = false;
+
+ float anisotropy_strength = 0.5;
+
+ uint32_t version = 1;
+ uint32_t data_version = 1;
+
+ RendererStorage::Dependency dependency;
+ };
+
private:
RendererStorageRD *storage = nullptr;
+ static GI *singleton;
+
+ /* VOXEL GI STORAGE */
+
+ mutable RID_Owner<VoxelGI, true> voxel_gi_owner;
/* VOXEL_GI INSTANCE */
@@ -196,10 +240,13 @@ private:
uint32_t use_occlusion;
float y_mult;
- float cam_extent[3];
uint32_t probe_axis_size;
+ float z_near;
+ float reserved1;
+ float reserved2;
float cam_transform[16];
+ float inv_projection[16];
};
SdfgiDebugShaderRD debug;
@@ -209,13 +256,17 @@ private:
enum ProbeDebugMode {
PROBE_DEBUG_PROBES,
+ PROBE_DEBUG_PROBES_MULTIVIEW,
PROBE_DEBUG_VISIBILITY,
+ PROBE_DEBUG_VISIBILITY_MULTIVIEW,
PROBE_DEBUG_MAX
};
- struct DebugProbesPushConstant {
- float projection[16];
+ struct DebugProbesSceneData {
+ float projection[2][16];
+ };
+ struct DebugProbesPushConstant {
uint32_t band_power;
uint32_t sections_in_band;
uint32_t band_mask;
@@ -324,6 +375,60 @@ private:
} sdfgi_shader;
public:
+ static GI *get_singleton() { return singleton; }
+
+ /* VOXEL GI API */
+
+ VoxelGI *get_voxel_gi(RID p_rid) { return voxel_gi_owner.get_or_null(p_rid); };
+ bool owns_voxel_gi(RID p_rid) { return voxel_gi_owner.owns(p_rid); };
+
+ virtual RID voxel_gi_allocate() override;
+ virtual void voxel_gi_free(RID p_voxel_gi) override;
+ virtual void voxel_gi_initialize(RID p_voxel_gi) override;
+
+ virtual void voxel_gi_allocate_data(RID p_voxel_gi, const Transform3D &p_to_cell_xform, const AABB &p_aabb, const Vector3i &p_octree_size, const Vector<uint8_t> &p_octree_cells, const Vector<uint8_t> &p_data_cells, const Vector<uint8_t> &p_distance_field, const Vector<int> &p_level_counts) override;
+
+ virtual AABB voxel_gi_get_bounds(RID p_voxel_gi) const override;
+ virtual Vector3i voxel_gi_get_octree_size(RID p_voxel_gi) const override;
+ virtual Vector<uint8_t> voxel_gi_get_octree_cells(RID p_voxel_gi) const override;
+ virtual Vector<uint8_t> voxel_gi_get_data_cells(RID p_voxel_gi) const override;
+ virtual Vector<uint8_t> voxel_gi_get_distance_field(RID p_voxel_gi) const override;
+
+ virtual Vector<int> voxel_gi_get_level_counts(RID p_voxel_gi) const override;
+ virtual Transform3D voxel_gi_get_to_cell_xform(RID p_voxel_gi) const override;
+
+ virtual void voxel_gi_set_dynamic_range(RID p_voxel_gi, float p_range) override;
+ virtual float voxel_gi_get_dynamic_range(RID p_voxel_gi) const override;
+
+ virtual void voxel_gi_set_propagation(RID p_voxel_gi, float p_range) override;
+ virtual float voxel_gi_get_propagation(RID p_voxel_gi) const override;
+
+ virtual void voxel_gi_set_energy(RID p_voxel_gi, float p_energy) override;
+ virtual float voxel_gi_get_energy(RID p_voxel_gi) const override;
+
+ virtual void voxel_gi_set_bias(RID p_voxel_gi, float p_bias) override;
+ virtual float voxel_gi_get_bias(RID p_voxel_gi) const override;
+
+ virtual void voxel_gi_set_normal_bias(RID p_voxel_gi, float p_range) override;
+ virtual float voxel_gi_get_normal_bias(RID p_voxel_gi) const override;
+
+ virtual void voxel_gi_set_interior(RID p_voxel_gi, bool p_enable) override;
+ virtual bool voxel_gi_is_interior(RID p_voxel_gi) const override;
+
+ virtual void voxel_gi_set_use_two_bounces(RID p_voxel_gi, bool p_enable) override;
+ virtual bool voxel_gi_is_using_two_bounces(RID p_voxel_gi) const override;
+
+ virtual void voxel_gi_set_anisotropy_strength(RID p_voxel_gi, float p_strength) override;
+ virtual float voxel_gi_get_anisotropy_strength(RID p_voxel_gi) const override;
+
+ virtual uint32_t voxel_gi_get_version(RID p_probe) const override;
+ uint32_t voxel_gi_get_data_version(RID p_probe);
+
+ RID voxel_gi_get_octree_buffer(RID p_voxel_gi) const;
+ RID voxel_gi_get_data_buffer(RID p_voxel_gi) const;
+
+ RID voxel_gi_get_sdf_texture(RID p_voxel_gi);
+
/* VOXEL_GI INSTANCE */
//@TODO VoxelGIInstance is still directly used in the render code, we'll address this when we refactor the render code itself.
@@ -331,7 +436,7 @@ public:
struct VoxelGIInstance {
// access to our containers
RendererStorageRD *storage = nullptr;
- RendererSceneGIRD *gi = nullptr;
+ GI *gi = nullptr;
RID probe;
RID texture;
@@ -455,7 +560,7 @@ public:
// access to our containers
RendererStorageRD *storage = nullptr;
- RendererSceneGIRD *gi = nullptr;
+ GI *gi = nullptr;
// used for rendering (voxelization)
RID render_albedo;
@@ -497,7 +602,8 @@ public:
float min_cell_size = 0;
uint32_t probe_axis_count = 0; //amount of probes per axis, this is an odd number because it encloses endpoints
- RID debug_uniform_set;
+ RID debug_uniform_set[RendererSceneRender::MAX_RENDER_VIEWS];
+ RID debug_probes_scene_data_ubo;
RID debug_probes_uniform_set;
RID cascades_ubo;
@@ -516,7 +622,7 @@ public:
int32_t cascade_dynamic_light_count[SDFGI::MAX_CASCADES]; //used dynamically
RID integrate_sky_uniform_set;
- void create(RendererSceneEnvironmentRD *p_env, const Vector3 &p_world_position, uint32_t p_requested_history_size, RendererSceneGIRD *p_gi);
+ void create(RendererSceneEnvironmentRD *p_env, const Vector3 &p_world_position, uint32_t p_requested_history_size, GI *p_gi);
void erase();
void update(RendererSceneEnvironmentRD *p_env, const Vector3 &p_world_position);
void update_light();
@@ -525,8 +631,8 @@ public:
int get_pending_region_data(int p_region, Vector3i &r_local_offset, Vector3i &r_local_size, AABB &r_bounds) const;
void update_cascades();
- void debug_draw(const CameraMatrix &p_projection, const Transform3D &p_transform, int p_width, int p_height, RID p_render_target, RID p_texture);
- void debug_probes(RD::DrawListID p_draw_list, RID p_framebuffer, const CameraMatrix &p_camera_with_transform);
+ void debug_draw(uint32_t p_view_count, const CameraMatrix *p_projections, const Transform3D &p_transform, int p_width, int p_height, RID p_render_target, RID p_texture, const Vector<RID> &p_texture_views);
+ void debug_probes(RID p_framebuffer, const uint32_t p_view_count, const CameraMatrix *p_camera_with_transforms, bool p_will_continue_color, bool p_will_continue_depth);
void pre_process_gi(const Transform3D &p_transform, RenderDataRD *p_render_data, RendererSceneRenderRD *p_scene_render);
void render_region(RID p_render_buffers, int p_region, const PagedArray<RendererSceneRender::GeometryInstance *> &p_instances, RendererSceneRenderRD *p_scene_render);
@@ -561,8 +667,18 @@ public:
RID full_dispatch;
RID full_mask;
- RID uniform_set;
+ /* GI buffers */
+ RID ambient_buffer;
+ RID reflection_buffer;
+ RID ambient_view[RendererSceneRender::MAX_RENDER_VIEWS];
+ RID reflection_view[RendererSceneRender::MAX_RENDER_VIEWS];
+ RID uniform_set[RendererSceneRender::MAX_RENDER_VIEWS];
bool using_half_size_gi = false;
+ uint32_t view_count = 1;
+
+ RID scene_data_ubo;
+
+ void free();
};
struct SDFGIData {
@@ -611,19 +727,28 @@ public:
uint32_t mipmaps; // 4 - 96
};
- struct PushConstant {
- int32_t screen_size[2];
- float z_near;
- float z_far;
+ struct SceneData {
+ float inv_projection[2][16];
+ float cam_transform[16];
+ float eye_offset[2][4];
- float proj_info[4];
+ int32_t screen_size[2];
+ float pad1;
+ float pad2;
+ };
+ struct PushConstant {
+ uint32_t view_index;
uint32_t max_voxel_gi_instances;
uint32_t high_quality_vct;
uint32_t orthogonal;
- uint32_t pad;
- float cam_rotation[12];
+ float proj_info[4];
+
+ float z_near;
+ float z_far;
+ float pad1;
+ float pad2;
};
RID sdfgi_ubo;
@@ -634,6 +759,14 @@ public:
MODE_HALF_RES_VOXEL_GI,
MODE_HALF_RES_SDFGI,
MODE_HALF_RES_COMBINED,
+
+ MODE_VOXEL_GI_MULTIVIEW,
+ MODE_SDFGI_MULTIVIEW,
+ MODE_COMBINED_MULTIVIEW,
+ MODE_HALF_RES_VOXEL_GI_MULTIVIEW,
+ MODE_HALF_RES_SDFGI_MULTIVIEW,
+ MODE_HALF_RES_COMBINED_MULTIVIEW,
+
MODE_MAX
};
@@ -644,8 +777,8 @@ public:
RID shader_version;
RID pipelines[MODE_MAX];
- RendererSceneGIRD();
- ~RendererSceneGIRD();
+ GI();
+ ~GI();
void init(RendererStorageRD *p_storage, RendererSceneSkyRD *p_sky);
void free();
@@ -653,7 +786,7 @@ public:
SDFGI *create_sdfgi(RendererSceneEnvironmentRD *p_env, const Vector3 &p_world_position, uint32_t p_requested_history_size);
void setup_voxel_gi_instances(RID p_render_buffers, const Transform3D &p_transform, const PagedArray<RID> &p_voxel_gi_instances, uint32_t &r_voxel_gi_instances_used, RendererSceneRenderRD *p_scene_render);
- void process_gi(RID p_render_buffers, RID p_normal_roughness_buffer, RID p_voxel_gi_buffer, RID p_environment, const CameraMatrix &p_projection, const Transform3D &p_transform, const PagedArray<RID> &p_voxel_gi_instances, RendererSceneRenderRD *p_scene_render);
+ void process_gi(RID p_render_buffers, RID *p_normal_roughness_views, RID p_voxel_gi_buffer, RID p_environment, uint32_t p_view_count, const CameraMatrix *p_projections, const Vector3 *p_eye_offsets, const Transform3D &p_cam_transform, const PagedArray<RID> &p_voxel_gi_instances, RendererSceneRenderRD *p_scene_render);
RID voxel_gi_instance_create(RID p_base);
void voxel_gi_instance_set_transform_to_data(RID p_probe, const Transform3D &p_xform);
@@ -662,4 +795,6 @@ public:
void debug_voxel_gi(RID p_voxel_gi, RD::DrawListID p_draw_list, RID p_framebuffer, const CameraMatrix &p_camera_with_transform, bool p_lighting, bool p_emission, float p_alpha);
};
-#endif /* !RENDERING_SERVER_SCENE_GI_RD_H */
+} // namespace RendererRD
+
+#endif /* !GI_RD_H */
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 2d3998bd90..c7048289c8 100644
--- a/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.cpp
+++ b/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.cpp
@@ -48,6 +48,13 @@ void RenderForwardClustered::RenderBufferDataForwardClustered::ensure_specular()
if (!specular.is_valid()) {
RD::TextureFormat tf;
tf.format = RD::DATA_FORMAT_R16G16B16A16_SFLOAT;
+ if (view_count > 1) {
+ tf.texture_type = RD::TEXTURE_TYPE_2D_ARRAY;
+ tf.array_layers = view_count;
+ } else {
+ tf.texture_type = RD::TEXTURE_TYPE_2D;
+ tf.array_layers = 1;
+ }
tf.width = width;
tf.height = height;
tf.usage_bits = RD::TEXTURE_USAGE_SAMPLING_BIT | RD::TEXTURE_USAGE_STORAGE_BIT;
@@ -64,7 +71,7 @@ void RenderForwardClustered::RenderBufferDataForwardClustered::ensure_specular()
Vector<RID> fb;
fb.push_back(specular);
- specular_only_fb = RD::get_singleton()->framebuffer_create(fb);
+ specular_only_fb = RD::get_singleton()->framebuffer_create(fb, RD::INVALID_ID, view_count);
}
} else {
@@ -76,7 +83,7 @@ void RenderForwardClustered::RenderBufferDataForwardClustered::ensure_specular()
Vector<RID> fb;
fb.push_back(specular_msaa);
- specular_only_fb = RD::get_singleton()->framebuffer_create(fb);
+ specular_only_fb = RD::get_singleton()->framebuffer_create(fb, RD::INVALID_ID, view_count);
}
}
}
@@ -106,6 +113,13 @@ void RenderForwardClustered::RenderBufferDataForwardClustered::ensure_velocity()
void RenderForwardClustered::RenderBufferDataForwardClustered::ensure_voxelgi() {
if (!voxelgi_buffer.is_valid()) {
RD::TextureFormat tf;
+ if (view_count > 1) {
+ tf.texture_type = RD::TEXTURE_TYPE_2D_ARRAY;
+ tf.array_layers = view_count;
+ } else {
+ tf.texture_type = RD::TEXTURE_TYPE_2D;
+ tf.array_layers = 1;
+ }
tf.format = RD::DATA_FORMAT_R8G8_UINT;
tf.width = width;
tf.height = height;
@@ -116,6 +130,14 @@ void RenderForwardClustered::RenderBufferDataForwardClustered::ensure_voxelgi()
tf_aa.usage_bits |= RD::TEXTURE_USAGE_COLOR_ATTACHMENT_BIT;
tf_aa.samples = texture_samples;
voxelgi_buffer_msaa = RD::get_singleton()->texture_create(tf_aa, RD::TextureView());
+
+ if (view_count == 1) {
+ voxelgi_msaa_views[0] = voxelgi_buffer_msaa;
+ } else {
+ for (uint32_t v = 0; v < view_count; v++) {
+ voxelgi_msaa_views[v] = RD::get_singleton()->texture_create_shared_from_slice(RD::TextureView(), voxelgi_buffer_msaa, v, 0);
+ }
+ }
} else {
tf.usage_bits |= RD::TEXTURE_USAGE_COLOR_ATTACHMENT_BIT;
}
@@ -124,6 +146,14 @@ void RenderForwardClustered::RenderBufferDataForwardClustered::ensure_voxelgi()
voxelgi_buffer = RD::get_singleton()->texture_create(tf, RD::TextureView());
+ if (view_count == 1) {
+ voxelgi_views[0] = voxelgi_buffer;
+ } else {
+ for (uint32_t v = 0; v < view_count; v++) {
+ voxelgi_views[v] = RD::get_singleton()->texture_create_shared_from_slice(RD::TextureView(), voxelgi_buffer, v, 0);
+ }
+ }
+
Vector<RID> fb;
if (msaa != RS::VIEWPORT_MSAA_DISABLED) {
fb.push_back(depth_msaa);
@@ -135,7 +165,7 @@ void RenderForwardClustered::RenderBufferDataForwardClustered::ensure_voxelgi()
fb.push_back(voxelgi_buffer);
}
- depth_normal_roughness_voxelgi_fb = RD::get_singleton()->framebuffer_create(fb);
+ depth_normal_roughness_voxelgi_fb = RD::get_singleton()->framebuffer_create(fb, RD::INVALID_ID, view_count);
}
}
@@ -144,7 +174,25 @@ void RenderForwardClustered::RenderBufferDataForwardClustered::clear() {
RD::get_singleton()->free(voxelgi_buffer);
voxelgi_buffer = RID();
+ if (view_count == 1) {
+ voxelgi_views[0] = RID();
+ } else {
+ for (uint32_t v = 0; v < view_count; v++) {
+ RD::get_singleton()->free(voxelgi_views[v]);
+ voxelgi_views[v] = RID();
+ }
+ }
+
if (voxelgi_buffer_msaa.is_valid()) {
+ if (view_count == 1) {
+ voxelgi_msaa_views[0] = RID();
+ } else {
+ for (uint32_t v = 0; v < view_count; v++) {
+ RD::get_singleton()->free(voxelgi_msaa_views[v]);
+ voxelgi_msaa_views[v] = RID();
+ }
+ }
+
RD::get_singleton()->free(voxelgi_buffer_msaa);
voxelgi_buffer_msaa = RID();
}
@@ -153,11 +201,35 @@ void RenderForwardClustered::RenderBufferDataForwardClustered::clear() {
}
if (color_msaa.is_valid()) {
+ if (view_count == 1) {
+ color_views[0] = RID();
+ color_msaa_views[0] = RID();
+ } else {
+ for (uint32_t v = 0; v < view_count; v++) {
+ RD::get_singleton()->free(color_views[v]);
+ RD::get_singleton()->free(color_msaa_views[v]);
+ color_views[v] = RID();
+ color_msaa_views[v] = RID();
+ }
+ }
+
RD::get_singleton()->free(color_msaa);
color_msaa = RID();
}
if (depth_msaa.is_valid()) {
+ if (view_count == 1) {
+ depth_views[0] = RID();
+ depth_msaa_views[0] = RID();
+ } else {
+ for (uint32_t v = 0; v < view_count; v++) {
+ RD::get_singleton()->free(depth_views[v]);
+ RD::get_singleton()->free(depth_msaa_views[v]);
+ depth_views[v] = RID();
+ depth_msaa_views[v] = RID();
+ }
+ }
+
RD::get_singleton()->free(depth_msaa);
depth_msaa = RID();
}
@@ -178,12 +250,31 @@ void RenderForwardClustered::RenderBufferDataForwardClustered::clear() {
color_framebuffers.clear(); // Color pass framebuffers are freed automatically by their dependency relations
if (normal_roughness_buffer.is_valid()) {
+ if (view_count == 1) {
+ normal_roughness_views[0] = RID();
+ } else {
+ for (uint32_t v = 0; v < view_count; v++) {
+ RD::get_singleton()->free(normal_roughness_views[v]);
+ normal_roughness_views[v] = RID();
+ }
+ }
+
RD::get_singleton()->free(normal_roughness_buffer);
+ normal_roughness_buffer = RID();
+
if (normal_roughness_buffer_msaa.is_valid()) {
+ if (view_count == 1) {
+ normal_roughness_msaa_views[0] = RID();
+ } else {
+ for (uint32_t v = 0; v < view_count; v++) {
+ RD::get_singleton()->free(normal_roughness_msaa_views[v]);
+ normal_roughness_msaa_views[v] = RID();
+ }
+ }
RD::get_singleton()->free(normal_roughness_buffer_msaa);
normal_roughness_buffer_msaa = RID();
}
- normal_roughness_buffer = RID();
+
depth_normal_roughness_fb = RID();
}
@@ -259,6 +350,22 @@ void RenderForwardClustered::RenderBufferDataForwardClustered::configure(RID p_c
depth_msaa = RD::get_singleton()->texture_create(tf, RD::TextureView());
+ if (view_count == 1) {
+ // just reuse
+ color_views[0] = color;
+ depth_views[0] = depth;
+ color_msaa_views[0] = color_msaa;
+ depth_msaa_views[0] = depth_msaa;
+ } else {
+ // create slices
+ for (uint32_t v = 0; v < view_count; v++) {
+ color_views[v] = RD::get_singleton()->texture_create_shared_from_slice(RD::TextureView(), color, v, 0);
+ depth_views[v] = RD::get_singleton()->texture_create_shared_from_slice(RD::TextureView(), depth, v, 0);
+ color_msaa_views[v] = RD::get_singleton()->texture_create_shared_from_slice(RD::TextureView(), color_msaa, v, 0);
+ depth_msaa_views[v] = RD::get_singleton()->texture_create_shared_from_slice(RD::TextureView(), depth_msaa, v, 0);
+ }
+ }
+
{
Vector<RID> fb;
fb.push_back(color_msaa);
@@ -308,6 +415,8 @@ RID RenderForwardClustered::RenderBufferDataForwardClustered::get_color_pass_fb(
}
void RenderForwardClustered::_allocate_normal_roughness_texture(RenderBufferDataForwardClustered *rb) {
+ ERR_FAIL_COND_MSG(rb->view_count > 2, "Only support up to two views for roughness texture");
+
if (rb->normal_roughness_buffer.is_valid()) {
return;
}
@@ -316,6 +425,13 @@ void RenderForwardClustered::_allocate_normal_roughness_texture(RenderBufferData
tf.format = RD::DATA_FORMAT_R8G8B8A8_UNORM;
tf.width = rb->width;
tf.height = rb->height;
+ if (rb->view_count > 1) {
+ tf.texture_type = RD::TEXTURE_TYPE_2D_ARRAY;
+ tf.array_layers = rb->view_count;
+ } else {
+ tf.texture_type = RD::TEXTURE_TYPE_2D;
+ tf.array_layers = 1;
+ }
tf.usage_bits = RD::TEXTURE_USAGE_SAMPLING_BIT | RD::TEXTURE_USAGE_STORAGE_BIT;
if (rb->msaa != RS::VIEWPORT_MSAA_DISABLED) {
@@ -330,7 +446,7 @@ void RenderForwardClustered::_allocate_normal_roughness_texture(RenderBufferData
Vector<RID> fb;
fb.push_back(rb->depth);
fb.push_back(rb->normal_roughness_buffer);
- rb->depth_normal_roughness_fb = RD::get_singleton()->framebuffer_create(fb);
+ rb->depth_normal_roughness_fb = RD::get_singleton()->framebuffer_create(fb, RD::INVALID_ID, rb->view_count);
} else {
tf.usage_bits = RD::TEXTURE_USAGE_COLOR_ATTACHMENT_BIT | RD::TEXTURE_USAGE_CAN_COPY_FROM_BIT | RD::TEXTURE_USAGE_SAMPLING_BIT | RD::TEXTURE_USAGE_STORAGE_BIT;
tf.samples = rb->texture_samples;
@@ -339,7 +455,21 @@ void RenderForwardClustered::_allocate_normal_roughness_texture(RenderBufferData
Vector<RID> fb;
fb.push_back(rb->depth_msaa);
fb.push_back(rb->normal_roughness_buffer_msaa);
- rb->depth_normal_roughness_fb = RD::get_singleton()->framebuffer_create(fb);
+ rb->depth_normal_roughness_fb = RD::get_singleton()->framebuffer_create(fb, RD::INVALID_ID, rb->view_count);
+ }
+
+ if (rb->view_count == 1) {
+ rb->normal_roughness_views[0] = rb->normal_roughness_buffer;
+ if (rb->msaa != RS::VIEWPORT_MSAA_DISABLED) {
+ rb->normal_roughness_msaa_views[0] = rb->normal_roughness_buffer_msaa;
+ }
+ } else {
+ for (uint32_t v = 0; v < rb->view_count; v++) {
+ rb->normal_roughness_views[v] = RD::get_singleton()->texture_create_shared_from_slice(RD::TextureView(), rb->normal_roughness_buffer, v, 0);
+ if (rb->msaa != RS::VIEWPORT_MSAA_DISABLED) {
+ rb->normal_roughness_msaa_views[v] = RD::get_singleton()->texture_create_shared_from_slice(RD::TextureView(), rb->normal_roughness_buffer_msaa, v, 0);
+ }
+ }
}
}
@@ -503,22 +633,21 @@ void RenderForwardClustered::_render_list_template(RenderingDevice::DrawListID p
pipeline_version = p_params->view_count > 1 ? SceneShaderForwardClustered::PIPELINE_VERSION_DEPTH_PASS_MULTIVIEW : SceneShaderForwardClustered::PIPELINE_VERSION_DEPTH_PASS;
} break;
case PASS_MODE_SHADOW_DP: {
- ERR_FAIL_COND_MSG(p_params->view_count > 1, "Multiview not supported for shadow DP pass");
+ ERR_FAIL_COND_MSG(p_params->view_count > 1, "Multiview not supported for shadow DP pass");
pipeline_version = SceneShaderForwardClustered::PIPELINE_VERSION_DEPTH_PASS_DP;
} break;
case PASS_MODE_DEPTH_NORMAL_ROUGHNESS: {
- ERR_FAIL_COND_MSG(p_params->view_count > 1, "Multiview not supported for depth/roughness pass");
- pipeline_version = SceneShaderForwardClustered::PIPELINE_VERSION_DEPTH_PASS_WITH_NORMAL_AND_ROUGHNESS;
+ pipeline_version = p_params->view_count > 1 ? SceneShaderForwardClustered::PIPELINE_VERSION_DEPTH_PASS_WITH_NORMAL_AND_ROUGHNESS_MULTIVIEW : SceneShaderForwardClustered::PIPELINE_VERSION_DEPTH_PASS_WITH_NORMAL_AND_ROUGHNESS;
} break;
case PASS_MODE_DEPTH_NORMAL_ROUGHNESS_VOXEL_GI: {
- ERR_FAIL_COND_MSG(p_params->view_count > 1, "Multiview not supported for voxel GI pass");
- pipeline_version = SceneShaderForwardClustered::PIPELINE_VERSION_DEPTH_PASS_WITH_NORMAL_AND_ROUGHNESS_AND_VOXEL_GI;
+ pipeline_version = p_params->view_count > 1 ? SceneShaderForwardClustered::PIPELINE_VERSION_DEPTH_PASS_WITH_NORMAL_AND_ROUGHNESS_AND_VOXEL_GI_MULTIVIEW : SceneShaderForwardClustered::PIPELINE_VERSION_DEPTH_PASS_WITH_NORMAL_AND_ROUGHNESS_AND_VOXEL_GI;
} break;
case PASS_MODE_DEPTH_MATERIAL: {
ERR_FAIL_COND_MSG(p_params->view_count > 1, "Multiview not supported for material pass");
pipeline_version = SceneShaderForwardClustered::PIPELINE_VERSION_DEPTH_PASS_WITH_MATERIAL;
} break;
case PASS_MODE_SDF: {
+ // Note, SDF is prepared in world space, this shouldn't be a multiview buffer even when stereoscopic rendering is used.
ERR_FAIL_COND_MSG(p_params->view_count > 1, "Multiview not supported for SDF pass");
pipeline_version = SceneShaderForwardClustered::PIPELINE_VERSION_DEPTH_PASS_WITH_SDF;
} break;
@@ -692,6 +821,11 @@ void RenderForwardClustered::_setup_environment(const RenderDataRD *p_render_dat
projection = correction * p_render_data->view_projection[v];
RendererStorageRD::store_camera(projection, scene_state.ubo.projection_matrix_view[v]);
RendererStorageRD::store_camera(projection.inverse(), scene_state.ubo.inv_projection_matrix_view[v]);
+
+ scene_state.ubo.eye_offset[v][0] = p_render_data->view_eye_offset[v].x;
+ scene_state.ubo.eye_offset[v][1] = p_render_data->view_eye_offset[v].y;
+ scene_state.ubo.eye_offset[v][2] = p_render_data->view_eye_offset[v].z;
+ scene_state.ubo.eye_offset[v][3] = 0.0;
}
scene_state.ubo.taa_jitter[0] = p_render_data->taa_jitter.x;
@@ -1318,9 +1452,7 @@ void RenderForwardClustered::_render_scene(RenderDataRD *p_render_data, const Co
using_voxelgi = true;
}
- if (p_render_data->view_count > 1) {
- depth_pass_mode = PASS_MODE_DEPTH;
- } else if (!p_render_data->environment.is_valid() && using_voxelgi) {
+ if (!p_render_data->environment.is_valid() && using_voxelgi) {
depth_pass_mode = PASS_MODE_DEPTH_NORMAL_ROUGHNESS_VOXEL_GI;
} else if (p_render_data->environment.is_valid() && (environment_is_ssr_enabled(p_render_data->environment) || environment_is_sdfgi_enabled(p_render_data->environment) || using_voxelgi)) {
if (environment_is_sdfgi_enabled(p_render_data->environment)) {
@@ -1526,9 +1658,13 @@ void RenderForwardClustered::_render_scene(RenderDataRD *p_render_data, const Co
if (needs_pre_resolve) {
RD::get_singleton()->barrier(RD::BARRIER_MASK_RASTER, RD::BARRIER_MASK_COMPUTE);
}
- storage->get_effects()->resolve_gi(render_buffer->depth_msaa, render_buffer->normal_roughness_buffer_msaa, using_voxelgi ? render_buffer->voxelgi_buffer_msaa : RID(), render_buffer->depth, render_buffer->normal_roughness_buffer, using_voxelgi ? render_buffer->voxelgi_buffer : RID(), Vector2i(render_buffer->width, render_buffer->height), texture_multisamples[render_buffer->msaa]);
+ for (uint32_t v = 0; v < render_buffer->view_count; v++) {
+ resolve_effects->resolve_gi(render_buffer->depth_msaa_views[v], render_buffer->normal_roughness_msaa_views[v], using_voxelgi ? render_buffer->voxelgi_msaa_views[v] : RID(), render_buffer->depth_views[v], render_buffer->normal_roughness_views[v], using_voxelgi ? render_buffer->voxelgi_views[v] : RID(), Vector2i(render_buffer->width, render_buffer->height), texture_multisamples[render_buffer->msaa]);
+ }
} else if (finish_depth) {
- storage->get_effects()->resolve_depth(render_buffer->depth_msaa, render_buffer->depth, Vector2i(render_buffer->width, render_buffer->height), texture_multisamples[render_buffer->msaa]);
+ for (uint32_t v = 0; v < render_buffer->view_count; v++) {
+ resolve_effects->resolve_depth(render_buffer->depth_msaa_views[v], render_buffer->depth_views[v], Vector2i(render_buffer->width, render_buffer->height), texture_multisamples[render_buffer->msaa]);
+ }
}
RD::get_singleton()->draw_command_end_label();
}
@@ -1536,7 +1672,8 @@ void RenderForwardClustered::_render_scene(RenderDataRD *p_render_data, const Co
continue_depth = !finish_depth;
}
- _pre_opaque_render(p_render_data, using_ssao, using_ssil, using_sdfgi || using_voxelgi, render_buffer ? render_buffer->normal_roughness_buffer : RID(), render_buffer ? render_buffer->voxelgi_buffer : RID());
+ RID null_rids[2];
+ _pre_opaque_render(p_render_data, using_ssao, using_ssil, using_sdfgi || using_voxelgi, render_buffer ? render_buffer->normal_roughness_views : null_rids, render_buffer ? render_buffer->voxelgi_buffer : RID());
RD::get_singleton()->draw_command_begin_label("Render Opaque Pass");
@@ -1599,18 +1736,17 @@ void RenderForwardClustered::_render_scene(RenderDataRD *p_render_data, const Co
}
if (debug_sdfgi_probes) {
- //debug voxelgis
+ //debug sdfgi
bool will_continue_color = (can_continue_color || draw_sky || draw_sky_fog_only);
bool will_continue_depth = (can_continue_depth || draw_sky || draw_sky_fog_only);
CameraMatrix dc;
dc.set_depth_correction(true);
- CameraMatrix cm = (dc * p_render_data->cam_projection) * CameraMatrix(p_render_data->cam_transform.affine_inverse());
- RD::DrawListID draw_list = RD::get_singleton()->draw_list_begin(color_only_framebuffer, RD::INITIAL_ACTION_CONTINUE, will_continue_color ? RD::FINAL_ACTION_CONTINUE : RD::FINAL_ACTION_READ, RD::INITIAL_ACTION_CONTINUE, will_continue_depth ? RD::FINAL_ACTION_CONTINUE : RD::FINAL_ACTION_READ);
- RD::get_singleton()->draw_command_begin_label("Debug SDFGI");
- _debug_sdfgi_probes(p_render_data->render_buffers, draw_list, color_only_framebuffer, cm);
- RD::get_singleton()->draw_command_end_label();
- RD::get_singleton()->draw_list_end();
+ CameraMatrix cms[RendererSceneRender::MAX_RENDER_VIEWS];
+ for (uint32_t v = 0; v < p_render_data->view_count; v++) {
+ cms[v] = (dc * p_render_data->view_projection[v]) * CameraMatrix(p_render_data->cam_transform.affine_inverse());
+ }
+ _debug_sdfgi_probes(p_render_data->render_buffers, color_only_framebuffer, p_render_data->view_count, cms, will_continue_color, will_continue_depth);
}
if (draw_sky || draw_sky_fog_only) {
@@ -1630,14 +1766,20 @@ void RenderForwardClustered::_render_scene(RenderDataRD *p_render_data, const Co
}
if (render_buffer && !can_continue_color && render_buffer->msaa != RS::VIEWPORT_MSAA_DISABLED) {
- RD::get_singleton()->texture_resolve_multisample(render_buffer->color_msaa, render_buffer->color);
+ // Handle views individual, might want to look at rewriting our resolve to do both layers in one pass.
+ for (uint32_t v = 0; v < render_buffer->view_count; v++) {
+ RD::get_singleton()->texture_resolve_multisample(render_buffer->color_msaa_views[v], render_buffer->color_views[v]);
+ }
+ // TODO mame this do multiview
if (using_separate_specular) {
RD::get_singleton()->texture_resolve_multisample(render_buffer->specular_msaa, render_buffer->specular);
}
}
if (render_buffer && !can_continue_depth && render_buffer->msaa != RS::VIEWPORT_MSAA_DISABLED) {
- storage->get_effects()->resolve_depth(render_buffer->depth_msaa, render_buffer->depth, Vector2i(render_buffer->width, render_buffer->height), texture_multisamples[render_buffer->msaa]);
+ for (uint32_t v = 0; v < render_buffer->view_count; v++) {
+ resolve_effects->resolve_depth(render_buffer->depth_msaa_views[v], render_buffer->depth_views[v], Vector2i(render_buffer->width, render_buffer->height), texture_multisamples[render_buffer->msaa]);
+ }
}
if (using_separate_specular) {
@@ -1692,11 +1834,13 @@ void RenderForwardClustered::_render_scene(RenderDataRD *p_render_data, const Co
RD::get_singleton()->draw_command_begin_label("Resolve");
if (render_buffer && render_buffer->msaa != RS::VIEWPORT_MSAA_DISABLED) {
- RD::get_singleton()->texture_resolve_multisample(render_buffer->color_msaa, render_buffer->color);
- if (render_buffer->use_taa) {
+ for (uint32_t v = 0; v < render_buffer->view_count; v++) {
+ RD::get_singleton()->texture_resolve_multisample(render_buffer->color_msaa_views[v], render_buffer->color_views[v]);
+ resolve_effects->resolve_depth(render_buffer->depth_msaa_views[v], render_buffer->depth_views[v], Vector2i(render_buffer->width, render_buffer->height), texture_multisamples[render_buffer->msaa]);
+ }
+ if (render_buffer->use_taa) { // TODO make TAA stereo capable, this will need to be handled in a separate PR
RD::get_singleton()->texture_resolve_multisample(render_buffer->velocity_buffer_msaa, render_buffer->velocity_buffer);
}
- storage->get_effects()->resolve_depth(render_buffer->depth_msaa, render_buffer->depth, Vector2i(render_buffer->width, render_buffer->height), texture_multisamples[render_buffer->msaa]);
}
RD::get_singleton()->draw_command_end_label();
@@ -3315,9 +3459,16 @@ RenderForwardClustered::RenderForwardClustered(RendererStorageRD *p_storage) :
render_list_thread_threshold = GLOBAL_GET("rendering/limits/forward_renderer/threaded_render_minimum_instances");
_update_shader_quality_settings();
+
+ resolve_effects = memnew(RendererRD::Resolve());
}
RenderForwardClustered::~RenderForwardClustered() {
+ if (resolve_effects != nullptr) {
+ memdelete(resolve_effects);
+ resolve_effects = nullptr;
+ }
+
directional_shadow_atlas_set_size(0);
{
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 6ad42bf0ec..83f69e0674 100644
--- a/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.h
+++ b/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.h
@@ -32,6 +32,7 @@
#define RENDERING_SERVER_SCENE_RENDER_FORWARD_CLUSTERED_H
#include "core/templates/paged_allocator.h"
+#include "servers/rendering/renderer_rd/effects/resolve.h"
#include "servers/rendering/renderer_rd/forward_clustered/scene_shader_forward_clustered.h"
#include "servers/rendering/renderer_rd/pipeline_cache_rd.h"
#include "servers/rendering/renderer_rd/renderer_scene_render_rd.h"
@@ -72,7 +73,6 @@ class RenderForwardClustered : public RendererSceneRenderRD {
RENDER_LIST_ALPHA, //used for transparent objects
RENDER_LIST_SECONDARY, //used for shadows and other objects
RENDER_LIST_MAX
-
};
/* Scene Shader */
@@ -99,7 +99,6 @@ class RenderForwardClustered : public RendererSceneRenderRD {
RID depth_msaa;
RID specular_msaa;
RID normal_roughness_buffer_msaa;
- RID roughness_buffer_msaa;
RID voxelgi_buffer_msaa;
RID velocity_buffer_msaa;
@@ -110,7 +109,17 @@ class RenderForwardClustered : public RendererSceneRenderRD {
RID specular_only_fb;
int width, height;
HashMap<uint32_t, RID> color_framebuffers;
+
+ // for multiview
uint32_t view_count;
+ RID color_views[RendererSceneRender::MAX_RENDER_VIEWS]; // we should rewrite this so we get access to the existing views in our renderer, something we can address when we reorg this
+ RID depth_views[RendererSceneRender::MAX_RENDER_VIEWS]; // we should rewrite this so we get access to the existing views in our renderer, something we can address when we reorg this
+ RID color_msaa_views[RendererSceneRender::MAX_RENDER_VIEWS];
+ RID depth_msaa_views[RendererSceneRender::MAX_RENDER_VIEWS];
+ RID normal_roughness_views[RendererSceneRender::MAX_RENDER_VIEWS];
+ RID normal_roughness_msaa_views[RendererSceneRender::MAX_RENDER_VIEWS];
+ RID voxelgi_views[RendererSceneRender::MAX_RENDER_VIEWS];
+ RID voxelgi_msaa_views[RendererSceneRender::MAX_RENDER_VIEWS];
RID render_sdfgi_uniform_set;
void ensure_specular();
@@ -237,6 +246,7 @@ class RenderForwardClustered : public RendererSceneRenderRD {
float projection_matrix_view[RendererSceneRender::MAX_RENDER_VIEWS][16];
float inv_projection_matrix_view[RendererSceneRender::MAX_RENDER_VIEWS][16];
+ float eye_offset[RendererSceneRender::MAX_RENDER_VIEWS][4];
float viewport_size[2];
float screen_pixel_size[2];
@@ -526,7 +536,7 @@ class RenderForwardClustered : public RendererSceneRenderRD {
AABB aabb;
bool use_dynamic_gi = false;
- bool use_baked_light = false;
+ bool use_baked_light = true;
bool cast_double_sided_shadows = false;
bool mirror = false;
bool dirty_dependencies = false;
@@ -618,6 +628,8 @@ class RenderForwardClustered : public RendererSceneRenderRD {
virtual void _update_shader_quality_settings() override;
+ RendererRD::Resolve *resolve_effects = nullptr;
+
protected:
virtual void _render_scene(RenderDataRD *p_render_data, const Color &p_default_bg_color) 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 cfb30ef2f3..aada989bcb 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
@@ -282,6 +282,8 @@ void SceneShaderForwardClustered::ShaderData::set_code(const String &p_code) {
SHADER_VERSION_DEPTH_PASS_WITH_MATERIAL,
SHADER_VERSION_DEPTH_PASS_WITH_SDF,
SHADER_VERSION_DEPTH_PASS_MULTIVIEW,
+ SHADER_VERSION_DEPTH_PASS_WITH_NORMAL_AND_ROUGHNESS_MULTIVIEW,
+ SHADER_VERSION_DEPTH_PASS_WITH_NORMAL_AND_ROUGHNESS_AND_VOXEL_GI_MULTIVIEW,
SHADER_VERSION_COLOR_PASS,
};
@@ -349,9 +351,9 @@ void SceneShaderForwardClustered::ShaderData::set_code(const String &p_code) {
if (k == PIPELINE_VERSION_DEPTH_PASS || k == PIPELINE_VERSION_DEPTH_PASS_DP || k == PIPELINE_VERSION_DEPTH_PASS_MULTIVIEW) {
//none, leave empty
- } else if (k == PIPELINE_VERSION_DEPTH_PASS_WITH_NORMAL_AND_ROUGHNESS) {
+ } else if (k == PIPELINE_VERSION_DEPTH_PASS_WITH_NORMAL_AND_ROUGHNESS || k == PIPELINE_VERSION_DEPTH_PASS_WITH_NORMAL_AND_ROUGHNESS_MULTIVIEW) {
blend_state = blend_state_depth_normal_roughness;
- } else if (k == PIPELINE_VERSION_DEPTH_PASS_WITH_NORMAL_AND_ROUGHNESS_AND_VOXEL_GI) {
+ } else if (k == PIPELINE_VERSION_DEPTH_PASS_WITH_NORMAL_AND_ROUGHNESS_AND_VOXEL_GI || k == PIPELINE_VERSION_DEPTH_PASS_WITH_NORMAL_AND_ROUGHNESS_AND_VOXEL_GI_MULTIVIEW) {
blend_state = blend_state_depth_normal_roughness_giprobe;
} else if (k == PIPELINE_VERSION_DEPTH_PASS_WITH_MATERIAL) {
blend_state = RD::PipelineColorBlendState::create_disabled(5); //writes to normal and roughness in opaque way
@@ -527,10 +529,12 @@ void SceneShaderForwardClustered::init(RendererStorageRD *p_storage, const Strin
shader_versions.push_back("\n#define MODE_RENDER_DEPTH\n"); // SHADER_VERSION_DEPTH_PASS
shader_versions.push_back("\n#define MODE_RENDER_DEPTH\n#define MODE_DUAL_PARABOLOID\n"); // SHADER_VERSION_DEPTH_PASS_DP
shader_versions.push_back("\n#define MODE_RENDER_DEPTH\n#define MODE_RENDER_NORMAL_ROUGHNESS\n"); // SHADER_VERSION_DEPTH_PASS_WITH_NORMAL_AND_ROUGHNESS
- shader_versions.push_back("\n#define MODE_RENDER_DEPTH\n#define MODE_RENDER_NORMAL_ROUGHNESS\n#define MODE_RENDER_VOXEL_GI\n"); // SHADER_VERSION_DEPTH_PASS_WITH_NORMAL_AND_ROUGHNESS_AND_GIPROBE
+ shader_versions.push_back("\n#define MODE_RENDER_DEPTH\n#define MODE_RENDER_NORMAL_ROUGHNESS\n#define MODE_RENDER_VOXEL_GI\n"); // SHADER_VERSION_DEPTH_PASS_WITH_NORMAL_AND_ROUGHNESS_AND_VOXEL_GI
shader_versions.push_back("\n#define MODE_RENDER_DEPTH\n#define MODE_RENDER_MATERIAL\n"); // SHADER_VERSION_DEPTH_PASS_WITH_MATERIAL
shader_versions.push_back("\n#define MODE_RENDER_DEPTH\n#define MODE_RENDER_SDF\n"); // SHADER_VERSION_DEPTH_PASS_WITH_SDF
shader_versions.push_back("\n#define USE_MULTIVIEW\n#define MODE_RENDER_DEPTH\n"); // SHADER_VERSION_DEPTH_PASS_MULTIVIEW
+ shader_versions.push_back("\n#define USE_MULTIVIEW\n#define MODE_RENDER_DEPTH\n#define MODE_RENDER_NORMAL_ROUGHNESS\n"); // SHADER_VERSION_DEPTH_PASS_WITH_NORMAL_AND_ROUGHNESS_MULTIVIEW
+ shader_versions.push_back("\n#define USE_MULTIVIEW\n#define MODE_RENDER_DEPTH\n#define MODE_RENDER_NORMAL_ROUGHNESS\n#define MODE_RENDER_VOXEL_GI\n"); // SHADER_VERSION_DEPTH_PASS_WITH_NORMAL_AND_ROUGHNESS_AND_VOXEL_GI_MULTIVIEW
Vector<String> color_pass_flags = {
"\n#define MODE_SEPARATE_SPECULAR\n", // SHADER_COLOR_PASS_FLAG_SEPARATE_SPECULAR
@@ -553,6 +557,8 @@ void SceneShaderForwardClustered::init(RendererStorageRD *p_storage, const Strin
if (!RendererCompositorRD::singleton->is_xr_enabled()) {
shader.set_variant_enabled(SHADER_VERSION_DEPTH_PASS_MULTIVIEW, false);
+ shader.set_variant_enabled(SHADER_VERSION_DEPTH_PASS_WITH_NORMAL_AND_ROUGHNESS_MULTIVIEW, false);
+ shader.set_variant_enabled(SHADER_VERSION_DEPTH_PASS_WITH_NORMAL_AND_ROUGHNESS_AND_VOXEL_GI_MULTIVIEW, false);
// TODO Add a way to enable/disable color pass flags
}
}
@@ -621,7 +627,7 @@ void SceneShaderForwardClustered::init(RendererStorageRD *p_storage, const Strin
//builtins
- actions.renames["TIME"] = "scene_data_block.data.time";
+ actions.renames["TIME"] = "global_time";
actions.renames["PI"] = _MKSTR(Math_PI);
actions.renames["TAU"] = _MKSTR(Math_TAU);
actions.renames["E"] = _MKSTR(Math_E);
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 79ccf10090..ffa3893b6a 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
@@ -52,6 +52,8 @@ public:
SHADER_VERSION_DEPTH_PASS_WITH_MATERIAL,
SHADER_VERSION_DEPTH_PASS_WITH_SDF,
SHADER_VERSION_DEPTH_PASS_MULTIVIEW,
+ SHADER_VERSION_DEPTH_PASS_WITH_NORMAL_AND_ROUGHNESS_MULTIVIEW,
+ SHADER_VERSION_DEPTH_PASS_WITH_NORMAL_AND_ROUGHNESS_AND_VOXEL_GI_MULTIVIEW,
SHADER_VERSION_COLOR_PASS,
SHADER_VERSION_MAX
};
@@ -72,6 +74,8 @@ public:
PIPELINE_VERSION_DEPTH_PASS_WITH_MATERIAL,
PIPELINE_VERSION_DEPTH_PASS_WITH_SDF,
PIPELINE_VERSION_DEPTH_PASS_MULTIVIEW,
+ PIPELINE_VERSION_DEPTH_PASS_WITH_NORMAL_AND_ROUGHNESS_MULTIVIEW,
+ PIPELINE_VERSION_DEPTH_PASS_WITH_NORMAL_AND_ROUGHNESS_AND_VOXEL_GI_MULTIVIEW,
PIPELINE_VERSION_COLOR_PASS,
PIPELINE_VERSION_MAX
};
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 b2e0af06cd..25acd2e25f 100644
--- a/servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.cpp
+++ b/servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.cpp
@@ -675,7 +675,8 @@ void RenderForwardMobile::_render_scene(RenderDataRD *p_render_data, const Color
RD::get_singleton()->draw_command_end_label(); // Setup Sky resolution buffers
}
- _pre_opaque_render(p_render_data, false, false, false, RID(), RID());
+ RID null_rids[2];
+ _pre_opaque_render(p_render_data, false, false, false, null_rids, RID());
uint32_t spec_constant_base_flags = 0;
@@ -1542,6 +1543,11 @@ void RenderForwardMobile::_setup_environment(const RenderDataRD *p_render_data,
projection = correction * p_render_data->view_projection[v];
RendererStorageRD::store_camera(projection, scene_state.ubo.projection_matrix_view[v]);
RendererStorageRD::store_camera(projection.inverse(), scene_state.ubo.inv_projection_matrix_view[v]);
+
+ scene_state.ubo.eye_offset[v][0] = p_render_data->view_eye_offset[v].x;
+ scene_state.ubo.eye_offset[v][1] = p_render_data->view_eye_offset[v].y;
+ scene_state.ubo.eye_offset[v][2] = p_render_data->view_eye_offset[v].z;
+ scene_state.ubo.eye_offset[v][3] = 0.0;
}
scene_state.ubo.z_far = p_render_data->z_far;
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 fc6f32ecb0..82e6c52c43 100644
--- a/servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.h
+++ b/servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.h
@@ -260,6 +260,7 @@ protected:
float projection_matrix_view[RendererSceneRender::MAX_RENDER_VIEWS][16];
float inv_projection_matrix_view[RendererSceneRender::MAX_RENDER_VIEWS][16];
+ float eye_offset[RendererSceneRender::MAX_RENDER_VIEWS][4];
float viewport_size[2];
float screen_pixel_size[2];
@@ -590,7 +591,7 @@ protected:
RID material_overlay;
AABB aabb;
- bool use_baked_light = false;
+ bool use_baked_light = true;
bool cast_double_sided_shadows = false;
// bool mirror = false; // !BAS! Does not seem used, we already have this in the main struct
diff --git a/servers/rendering/renderer_rd/renderer_compositor_rd.h b/servers/rendering/renderer_rd/renderer_compositor_rd.h
index aefc189f68..12bcfc4684 100644
--- a/servers/rendering/renderer_rd/renderer_compositor_rd.h
+++ b/servers/rendering/renderer_rd/renderer_compositor_rd.h
@@ -98,11 +98,15 @@ protected:
static uint64_t frame;
public:
- RendererLightStorage *get_light_storage() { return light_storage; };
- RendererMaterialStorage *get_material_storage() { return material_storage; };
- RendererMeshStorage *get_mesh_storage() { return mesh_storage; };
- RendererParticlesStorage *get_particles_storage() { return particles_storage; };
- RendererTextureStorage *get_texture_storage() { return texture_storage; };
+ RendererLightStorage *get_light_storage() { return light_storage; }
+ RendererMaterialStorage *get_material_storage() { return material_storage; }
+ RendererMeshStorage *get_mesh_storage() { return mesh_storage; }
+ RendererParticlesStorage *get_particles_storage() { return particles_storage; }
+ RendererTextureStorage *get_texture_storage() { return texture_storage; }
+ RendererGI *get_gi() {
+ ERR_FAIL_NULL_V(scene, nullptr);
+ return scene->get_gi();
+ }
RendererStorage *get_storage() { return storage; }
RendererCanvasRender *get_canvas() { return canvas; }
RendererSceneRender *get_scene() { return scene; }
diff --git a/servers/rendering/renderer_rd/renderer_scene_render_rd.cpp b/servers/rendering/renderer_rd/renderer_scene_render_rd.cpp
index ef959bc3c6..eb4bc3d535 100644
--- a/servers/rendering/renderer_rd/renderer_scene_render_rd.cpp
+++ b/servers/rendering/renderer_rd/renderer_scene_render_rd.cpp
@@ -74,7 +74,7 @@ void RendererSceneRenderRD::sdfgi_update(RID p_render_buffers, RID p_environment
rb->sdfgi = nullptr;
}
- RendererSceneGIRD::SDFGI *sdfgi = rb->sdfgi;
+ RendererRD::GI::SDFGI *sdfgi = rb->sdfgi;
if (sdfgi == nullptr) {
// re-create
rb->sdfgi = gi.create_sdfgi(env, p_world_position, requested_history_size);
@@ -95,9 +95,9 @@ int RendererSceneRenderRD::sdfgi_get_pending_region_count(RID p_render_buffers)
int dirty_count = 0;
for (uint32_t i = 0; i < rb->sdfgi->cascades.size(); i++) {
- const RendererSceneGIRD::SDFGI::Cascade &c = rb->sdfgi->cascades[i];
+ const RendererRD::GI::SDFGI::Cascade &c = rb->sdfgi->cascades[i];
- if (c.dirty_regions == RendererSceneGIRD::SDFGI::Cascade::DIRTY_ALL) {
+ if (c.dirty_regions == RendererRD::GI::SDFGI::Cascade::DIRTY_ALL) {
dirty_count++;
} else {
for (int j = 0; j < 3; j++) {
@@ -1533,7 +1533,7 @@ void RendererSceneRenderRD::voxel_gi_update(RID p_probe, bool p_update_light_ins
gi.voxel_gi_update(p_probe, p_update_light_instances, p_light_instances, p_dynamic_objects, this);
}
-void RendererSceneRenderRD::_debug_sdfgi_probes(RID p_render_buffers, RD::DrawListID p_draw_list, RID p_framebuffer, const CameraMatrix &p_camera_with_transform) {
+void RendererSceneRenderRD::_debug_sdfgi_probes(RID p_render_buffers, RID p_framebuffer, const uint32_t p_view_count, const CameraMatrix *p_camera_with_transforms, bool p_will_continue_color, bool p_will_continue_depth) {
RenderBuffers *rb = render_buffers_owner.get_or_null(p_render_buffers);
ERR_FAIL_COND(!rb);
@@ -1541,7 +1541,7 @@ void RendererSceneRenderRD::_debug_sdfgi_probes(RID p_render_buffers, RD::DrawLi
return; //nothing to debug
}
- rb->sdfgi->debug_probes(p_draw_list, p_framebuffer, p_camera_with_transform);
+ rb->sdfgi->debug_probes(p_framebuffer, p_view_count, p_camera_with_transforms, p_will_continue_color, p_will_continue_depth);
}
////////////////////////////////
@@ -1950,17 +1950,7 @@ void RendererSceneRenderRD::_free_render_buffer_data(RenderBuffers *rb) {
rb->taa.prev_velocity = RID();
}
- if (rb->ambient_buffer.is_valid()) {
- RD::get_singleton()->free(rb->ambient_buffer);
- RD::get_singleton()->free(rb->reflection_buffer);
- rb->ambient_buffer = RID();
- rb->reflection_buffer = RID();
- }
-
- if (rb->gi.voxel_gi_buffer.is_valid()) {
- RD::get_singleton()->free(rb->gi.voxel_gi_buffer);
- rb->gi.voxel_gi_buffer = RID();
- }
+ rb->rbgi.free();
}
void RendererSceneRenderRD::_process_sss(RID p_render_buffers, const CameraMatrix &p_camera) {
@@ -2796,11 +2786,11 @@ void RendererSceneRenderRD::_render_buffers_debug_draw(RID p_render_buffers, RID
copy_effects->copy_to_fb_rect(_render_buffers_get_normal_texture(p_render_buffers), texture_storage->render_target_get_rd_framebuffer(rb->render_target), Rect2(Vector2(), rtsize), false, false);
}
- if (debug_draw == RS::VIEWPORT_DEBUG_DRAW_GI_BUFFER && rb->ambient_buffer.is_valid()) {
+ if (debug_draw == RS::VIEWPORT_DEBUG_DRAW_GI_BUFFER && rb->rbgi.ambient_buffer.is_valid()) {
Size2 rtsize = texture_storage->render_target_get_size(rb->render_target);
- RID ambient_texture = rb->ambient_buffer;
- RID reflection_texture = rb->reflection_buffer;
- copy_effects->copy_to_fb_rect(ambient_texture, texture_storage->render_target_get_rd_framebuffer(rb->render_target), Rect2(Vector2(), rtsize), false, false, false, true, reflection_texture);
+ RID ambient_texture = rb->rbgi.ambient_buffer;
+ RID reflection_texture = rb->rbgi.reflection_buffer;
+ copy_effects->copy_to_fb_rect(ambient_texture, texture_storage->render_target_get_rd_framebuffer(rb->render_target), Rect2(Vector2(), rtsize), false, false, false, true, reflection_texture, rb->view_count > 1);
}
if (debug_draw == RS::VIEWPORT_DEBUG_DRAW_OCCLUDERS) {
@@ -2869,10 +2859,10 @@ RID RendererSceneRenderRD::render_buffers_get_ssil_texture(RID p_render_buffers)
RID RendererSceneRenderRD::render_buffers_get_voxel_gi_buffer(RID p_render_buffers) {
RenderBuffers *rb = render_buffers_owner.get_or_null(p_render_buffers);
ERR_FAIL_COND_V(!rb, RID());
- if (rb->gi.voxel_gi_buffer.is_null()) {
- rb->gi.voxel_gi_buffer = RD::get_singleton()->uniform_buffer_create(sizeof(RendererSceneGIRD::VoxelGIData) * RendererSceneGIRD::MAX_VOXEL_GI_INSTANCES);
+ if (rb->rbgi.voxel_gi_buffer.is_null()) {
+ rb->rbgi.voxel_gi_buffer = RD::get_singleton()->uniform_buffer_create(sizeof(RendererRD::GI::VoxelGIData) * RendererRD::GI::MAX_VOXEL_GI_INSTANCES);
}
- return rb->gi.voxel_gi_buffer;
+ return rb->rbgi.voxel_gi_buffer;
}
RID RendererSceneRenderRD::render_buffers_get_default_voxel_gi_buffer() {
@@ -2882,12 +2872,13 @@ RID RendererSceneRenderRD::render_buffers_get_default_voxel_gi_buffer() {
RID RendererSceneRenderRD::render_buffers_get_gi_ambient_texture(RID p_render_buffers) {
RenderBuffers *rb = render_buffers_owner.get_or_null(p_render_buffers);
ERR_FAIL_COND_V(!rb, RID());
- return rb->ambient_buffer;
+
+ return rb->rbgi.ambient_buffer;
}
RID RendererSceneRenderRD::render_buffers_get_gi_reflection_texture(RID p_render_buffers) {
RenderBuffers *rb = render_buffers_owner.get_or_null(p_render_buffers);
ERR_FAIL_COND_V(!rb, RID());
- return rb->reflection_buffer;
+ return rb->rbgi.reflection_buffer;
}
uint32_t RendererSceneRenderRD::render_buffers_get_sdfgi_cascade_count(RID p_render_buffers) const {
@@ -2925,7 +2916,7 @@ Vector3i RendererSceneRenderRD::render_buffers_get_sdfgi_cascade_probe_offset(RI
ERR_FAIL_COND_V(!rb, Vector3i());
ERR_FAIL_COND_V(!rb->sdfgi, Vector3i());
ERR_FAIL_UNSIGNED_INDEX_V(p_cascade, rb->sdfgi->cascades.size(), Vector3i());
- int32_t probe_divisor = rb->sdfgi->cascade_size / RendererSceneGIRD::SDFGI::PROBE_DIVISOR;
+ int32_t probe_divisor = rb->sdfgi->cascade_size / RendererRD::GI::SDFGI::PROBE_DIVISOR;
return rb->sdfgi->cascades[p_cascade].position / probe_divisor;
}
@@ -3138,14 +3129,14 @@ void RendererSceneRenderRD::render_buffers_configure(RID p_render_buffers, RID p
if (rb->view_count == 1) {
// copy as a convenience
RenderBuffers::View view;
- view.view_texture = rb->internal_texture;
+ view.view_texture = rb->texture;
view.view_depth = rb->depth_texture;
view.view_fb = rb->texture_fb;
rb->views.push_back(view);
} else {
for (uint32_t i = 0; i < rb->view_count; i++) {
RenderBuffers::View view;
- view.view_texture = RD::get_singleton()->texture_create_shared_from_slice(RD::TextureView(), rb->internal_texture, i, 0);
+ view.view_texture = RD::get_singleton()->texture_create_shared_from_slice(RD::TextureView(), rb->texture, i, 0);
view.view_depth = RD::get_singleton()->texture_create_shared_from_slice(RD::TextureView(), rb->depth_texture, i, 0);
if (!_render_buffers_can_be_storage()) {
@@ -4159,6 +4150,9 @@ void RendererSceneRenderRD::_volumetric_fog_erase(RenderBuffers *rb) {
if (rb->volumetric_fog->fog_uniform_set.is_valid() && RD::get_singleton()->uniform_set_is_valid(rb->volumetric_fog->fog_uniform_set)) {
RD::get_singleton()->free(rb->volumetric_fog->fog_uniform_set);
}
+ if (rb->volumetric_fog->process_uniform_set_density.is_valid() && RD::get_singleton()->uniform_set_is_valid(rb->volumetric_fog->process_uniform_set_density)) {
+ RD::get_singleton()->free(rb->volumetric_fog->process_uniform_set_density);
+ }
if (rb->volumetric_fog->process_uniform_set.is_valid() && RD::get_singleton()->uniform_set_is_valid(rb->volumetric_fog->process_uniform_set)) {
RD::get_singleton()->free(rb->volumetric_fog->process_uniform_set);
}
@@ -4491,7 +4485,7 @@ void RendererSceneRenderRD::_update_volumetric_fog(RID p_render_buffers, RID p_e
RD::get_singleton()->compute_list_end();
}
- if (rb->volumetric_fog->process_uniform_set.is_null() || !RD::get_singleton()->uniform_set_is_valid(rb->volumetric_fog->process_uniform_set)) {
+ if (rb->volumetric_fog->process_uniform_set_density.is_null() || !RD::get_singleton()->uniform_set_is_valid(rb->volumetric_fog->process_uniform_set_density)) {
//re create uniform set if needed
Vector<RD::Uniform> uniforms;
Vector<RD::Uniform> copy_uniforms;
@@ -4615,8 +4609,8 @@ void RendererSceneRenderRD::_update_volumetric_fog(RID p_render_buffers, RID p_e
RD::Uniform u;
u.uniform_type = RD::UNIFORM_TYPE_TEXTURE;
u.binding = 12;
- for (int i = 0; i < RendererSceneGIRD::MAX_VOXEL_GI_INSTANCES; i++) {
- u.append_id(rb->gi.voxel_gi_textures[i]);
+ for (int i = 0; i < RendererRD::GI::MAX_VOXEL_GI_INSTANCES; i++) {
+ u.append_id(rb->rbgi.voxel_gi_textures[i]);
}
uniforms.push_back(u);
copy_uniforms.push_back(u);
@@ -4691,7 +4685,7 @@ void RendererSceneRenderRD::_update_volumetric_fog(RID p_render_buffers, RID p_e
rb->volumetric_fog->copy_uniform_set = RD::get_singleton()->uniform_set_create(copy_uniforms, volumetric_fog.process_shader.version_get_shader(volumetric_fog.process_shader_version, VolumetricFogShader::VOLUMETRIC_FOG_PROCESS_SHADER_COPY), 0);
- rb->volumetric_fog->process_uniform_set = RD::get_singleton()->uniform_set_create(uniforms, volumetric_fog.process_shader.version_get_shader(volumetric_fog.process_shader_version, VolumetricFogShader::VOLUMETRIC_FOG_PROCESS_SHADER_DENSITY), 0);
+ rb->volumetric_fog->process_uniform_set = RD::get_singleton()->uniform_set_create(uniforms, volumetric_fog.process_shader.version_get_shader(volumetric_fog.process_shader_version, VolumetricFogShader::VOLUMETRIC_FOG_PROCESS_SHADER_FOG), 0);
RID aux7 = uniforms.write[7].get_id(0);
RID aux8 = uniforms.write[8].get_id(0);
@@ -4699,7 +4693,11 @@ void RendererSceneRenderRD::_update_volumetric_fog(RID p_render_buffers, RID p_e
uniforms.write[7].set_id(0, aux8);
uniforms.write[8].set_id(0, aux7);
- rb->volumetric_fog->process_uniform_set2 = RD::get_singleton()->uniform_set_create(uniforms, volumetric_fog.process_shader.version_get_shader(volumetric_fog.process_shader_version, 0), 0);
+ rb->volumetric_fog->process_uniform_set2 = RD::get_singleton()->uniform_set_create(uniforms, volumetric_fog.process_shader.version_get_shader(volumetric_fog.process_shader_version, VolumetricFogShader::VOLUMETRIC_FOG_PROCESS_SHADER_FOG), 0);
+
+ uniforms.remove_at(8);
+ uniforms.write[7].set_id(0, aux7);
+ rb->volumetric_fog->process_uniform_set_density = RD::get_singleton()->uniform_set_create(uniforms, volumetric_fog.process_shader.version_get_shader(volumetric_fog.process_shader_version, VolumetricFogShader::VOLUMETRIC_FOG_PROCESS_SHADER_DENSITY), 0);
}
bool using_sdfgi = env->volumetric_fog_gi_inject > 0.0001 && env->sdfgi_enabled && (rb->sdfgi != nullptr);
@@ -4842,7 +4840,7 @@ void RendererSceneRenderRD::_update_volumetric_fog(RID p_render_buffers, RID p_e
RD::get_singleton()->compute_list_bind_compute_pipeline(compute_list, volumetric_fog.process_pipelines[using_sdfgi ? VolumetricFogShader::VOLUMETRIC_FOG_PROCESS_SHADER_DENSITY_WITH_SDFGI : VolumetricFogShader::VOLUMETRIC_FOG_PROCESS_SHADER_DENSITY]);
- RD::get_singleton()->compute_list_bind_uniform_set(compute_list, rb->volumetric_fog->process_uniform_set, 0);
+ RD::get_singleton()->compute_list_bind_uniform_set(compute_list, rb->volumetric_fog->process_uniform_set_density, 0);
if (using_sdfgi) {
RD::get_singleton()->compute_list_bind_uniform_set(compute_list, rb->volumetric_fog->sdfgi_uniform_set, 1);
@@ -4930,7 +4928,7 @@ void RendererSceneRenderRD::_pre_resolve_render(RenderDataRD *p_render_data, boo
}
}
-void RendererSceneRenderRD::_pre_opaque_render(RenderDataRD *p_render_data, bool p_use_ssao, bool p_use_ssil, bool p_use_gi, RID p_normal_roughness_buffer, RID p_voxel_gi_buffer) {
+void RendererSceneRenderRD::_pre_opaque_render(RenderDataRD *p_render_data, bool p_use_ssao, bool p_use_ssil, bool p_use_gi, RID *p_normal_roughness_views, RID p_voxel_gi_buffer) {
// Render shadows while GI is rendering, due to how barriers are handled, this should happen at the same time
RendererRD::LightStorage *light_storage = RendererRD::LightStorage::get_singleton();
@@ -5005,7 +5003,7 @@ void RendererSceneRenderRD::_pre_opaque_render(RenderDataRD *p_render_data, bool
//start GI
if (render_gi) {
- gi.process_gi(p_render_data->render_buffers, p_normal_roughness_buffer, p_voxel_gi_buffer, p_render_data->environment, p_render_data->cam_projection, p_render_data->cam_transform, *p_render_data->voxel_gi_instances, this);
+ gi.process_gi(p_render_data->render_buffers, p_normal_roughness_views, p_voxel_gi_buffer, p_render_data->environment, p_render_data->view_count, p_render_data->view_projection, p_render_data->view_eye_offset, p_render_data->cam_transform, *p_render_data->voxel_gi_instances, this);
}
//Do shadow rendering (in parallel with GI)
@@ -5046,11 +5044,13 @@ void RendererSceneRenderRD::_pre_opaque_render(RenderDataRD *p_render_data, bool
}
if (p_use_ssao) {
- _process_ssao(p_render_data->render_buffers, p_render_data->environment, p_normal_roughness_buffer, p_render_data->cam_projection);
+ // TODO make these proper stereo and thus use p_normal_roughness_views correctly
+ _process_ssao(p_render_data->render_buffers, p_render_data->environment, p_normal_roughness_views[0], p_render_data->cam_projection);
}
if (p_use_ssil) {
- _process_ssil(p_render_data->render_buffers, p_render_data->environment, p_normal_roughness_buffer, p_render_data->cam_projection, p_render_data->cam_transform);
+ // TODO make these proper stereo and thus use p_normal_roughness_views correctly
+ _process_ssil(p_render_data->render_buffers, p_render_data->environment, p_normal_roughness_views[0], p_render_data->cam_projection, p_render_data->cam_transform);
}
}
@@ -5115,12 +5115,12 @@ void RendererSceneRenderRD::render_scene(RID p_render_buffers, const CameraData
// Our first camera is used by default
render_data.cam_transform = p_camera_data->main_transform;
render_data.cam_projection = p_camera_data->main_projection;
- render_data.view_projection[0] = p_camera_data->main_projection;
render_data.cam_orthogonal = p_camera_data->is_orthogonal;
render_data.taa_jitter = p_camera_data->taa_jitter;
render_data.view_count = p_camera_data->view_count;
for (uint32_t v = 0; v < p_camera_data->view_count; v++) {
+ render_data.view_eye_offset[v] = p_camera_data->view_offset[v].origin;
render_data.view_projection[v] = p_camera_data->view_projection[v];
}
@@ -5195,7 +5195,7 @@ void RendererSceneRenderRD::render_scene(RID p_render_buffers, const CameraData
//assign render indices to voxel_gi_instances
if (is_dynamic_gi_supported()) {
for (uint32_t i = 0; i < (uint32_t)p_voxel_gi_instances.size(); i++) {
- RendererSceneGIRD::VoxelGIInstance *voxel_gi_inst = gi.voxel_gi_instance_owner.get_or_null(p_voxel_gi_instances[i]);
+ RendererRD::GI::VoxelGIInstance *voxel_gi_inst = gi.voxel_gi_instance_owner.get_or_null(p_voxel_gi_instances[i]);
if (voxel_gi_inst) {
voxel_gi_inst->render_index = i;
}
@@ -5249,7 +5249,13 @@ void RendererSceneRenderRD::render_scene(RID p_render_buffers, const CameraData
_render_buffers_debug_draw(p_render_buffers, p_shadow_atlas, p_occluder_debug_tex);
if (debug_draw == RS::VIEWPORT_DEBUG_DRAW_SDFGI && rb != nullptr && rb->sdfgi != nullptr) {
- rb->sdfgi->debug_draw(render_data.cam_projection, render_data.cam_transform, rb->width, rb->height, rb->render_target, rb->texture);
+ Vector<RID> view_rids;
+
+ for (int v = 0; v < rb->views.size(); v++) {
+ view_rids.push_back(rb->views[v].view_texture);
+ }
+
+ rb->sdfgi->debug_draw(render_data.view_count, render_data.view_projection, render_data.cam_transform, rb->width, rb->height, rb->render_target, rb->texture, view_rids);
}
}
}
@@ -5439,9 +5445,9 @@ void RendererSceneRenderRD::_render_shadow_pass(RID p_light, RID p_shadow_atlas,
Rect2 atlas_rect_norm = atlas_rect;
atlas_rect_norm.position /= float(atlas_size);
atlas_rect_norm.size /= float(atlas_size);
- storage->get_effects()->copy_cubemap_to_dp(render_texture, atlas_fb, atlas_rect_norm, atlas_rect.size, light_projection.get_z_near(), light_projection.get_z_far(), false);
+ copy_effects->copy_cubemap_to_dp(render_texture, atlas_fb, atlas_rect_norm, atlas_rect.size, light_projection.get_z_near(), light_projection.get_z_far(), false);
atlas_rect_norm.position += Vector2(dual_paraboloid_offset) * atlas_rect_norm.size;
- storage->get_effects()->copy_cubemap_to_dp(render_texture, atlas_fb, atlas_rect_norm, atlas_rect.size, light_projection.get_z_near(), light_projection.get_z_far(), true);
+ copy_effects->copy_cubemap_to_dp(render_texture, atlas_fb, atlas_rect_norm, atlas_rect.size, light_projection.get_z_near(), light_projection.get_z_far(), true);
//restore transform so it can be properly used
light_instance_set_shadow_transform(p_light, CameraMatrix(), light_instance->transform, zfar, 0, 0, 0);
@@ -5518,7 +5524,7 @@ bool RendererSceneRenderRD::free(RID p_rid) {
} else if (lightmap_instance_owner.owns(p_rid)) {
lightmap_instance_owner.free(p_rid);
} else if (gi.voxel_gi_instance_owner.owns(p_rid)) {
- RendererSceneGIRD::VoxelGIInstance *voxel_gi = gi.voxel_gi_instance_owner.get_or_null(p_rid);
+ RendererRD::GI::VoxelGIInstance *voxel_gi = gi.voxel_gi_instance_owner.get_or_null(p_rid);
if (voxel_gi->texture.is_valid()) {
RD::get_singleton()->free(voxel_gi->texture);
RD::get_singleton()->free(voxel_gi->write_buffer);
diff --git a/servers/rendering/renderer_rd/renderer_scene_render_rd.h b/servers/rendering/renderer_rd/renderer_scene_render_rd.h
index 1b1df6469e..3f03f857f7 100644
--- a/servers/rendering/renderer_rd/renderer_scene_render_rd.h
+++ b/servers/rendering/renderer_rd/renderer_scene_render_rd.h
@@ -38,8 +38,8 @@
#include "servers/rendering/renderer_rd/effects/bokeh_dof.h"
#include "servers/rendering/renderer_rd/effects/copy_effects.h"
#include "servers/rendering/renderer_rd/effects/tone_mapper.h"
+#include "servers/rendering/renderer_rd/environment/gi.h"
#include "servers/rendering/renderer_rd/renderer_scene_environment_rd.h"
-#include "servers/rendering/renderer_rd/renderer_scene_gi_rd.h"
#include "servers/rendering/renderer_rd/renderer_scene_sky_rd.h"
#include "servers/rendering/renderer_rd/renderer_storage_rd.h"
#include "servers/rendering/renderer_rd/shaders/volumetric_fog.glsl.gen.h"
@@ -58,6 +58,7 @@ struct RenderDataRD {
// For stereo rendering
uint32_t view_count = 1;
+ Vector3 view_eye_offset[RendererSceneRender::MAX_RENDER_VIEWS];
CameraMatrix view_projection[RendererSceneRender::MAX_RENDER_VIEWS];
Transform3D prev_cam_transform;
@@ -98,7 +99,7 @@ struct RenderDataRD {
class RendererSceneRenderRD : public RendererSceneRender {
friend RendererSceneSkyRD;
- friend RendererSceneGIRD;
+ friend RendererRD::GI;
protected:
RendererStorageRD *storage = nullptr;
@@ -130,7 +131,7 @@ protected:
virtual void _render_sdfgi(RID p_render_buffers, const Vector3i &p_from, const Vector3i &p_size, const AABB &p_bounds, const PagedArray<GeometryInstance *> &p_instances, const RID &p_albedo_texture, const RID &p_emission_texture, const RID &p_emission_aniso_texture, const RID &p_geom_facing_texture) = 0;
virtual void _render_particle_collider_heightfield(RID p_fb, const Transform3D &p_cam_transform, const CameraMatrix &p_cam_projection, const PagedArray<GeometryInstance *> &p_instances) = 0;
- void _debug_sdfgi_probes(RID p_render_buffers, RD::DrawListID p_draw_list, RID p_framebuffer, const CameraMatrix &p_camera_with_transform);
+ void _debug_sdfgi_probes(RID p_render_buffers, RID p_framebuffer, uint32_t p_view_count, const CameraMatrix *p_camera_with_transforms, bool p_will_continue_color, bool p_will_continue_depth);
void _debug_draw_cluster(RID p_render_buffers);
RenderBufferData *render_buffers_get_data(RID p_render_buffers);
@@ -150,7 +151,7 @@ protected:
void _post_prepass_render(RenderDataRD *p_render_data, bool p_use_gi);
void _pre_resolve_render(RenderDataRD *p_render_data, bool p_use_gi);
- void _pre_opaque_render(RenderDataRD *p_render_data, bool p_use_ssao, bool p_use_ssil, bool p_use_gi, RID p_normal_roughness_buffer, RID p_voxel_gi_buffer);
+ void _pre_opaque_render(RenderDataRD *p_render_data, bool p_use_ssao, bool p_use_ssil, bool p_use_gi, RID *p_normal_roughness_views, RID p_voxel_gi_buffer);
void _render_buffers_copy_screen_texture(const RenderDataRD *p_render_data);
void _render_buffers_copy_depth_texture(const RenderDataRD *p_render_data);
@@ -162,7 +163,7 @@ protected:
PagedArrayPool<GeometryInstance *> cull_argument_pool;
PagedArray<GeometryInstance *> cull_argument; //need this to exist
- RendererSceneGIRD gi;
+ RendererRD::GI gi;
RendererSceneSkyRD sky;
RendererSceneEnvironmentRD *get_environment(RID p_environment) {
@@ -502,9 +503,9 @@ private:
};
Vector<View> views;
- RendererSceneGIRD::SDFGI *sdfgi = nullptr;
+ RendererRD::GI::SDFGI *sdfgi = nullptr;
VolumetricFog *volumetric_fog = nullptr;
- RendererSceneGIRD::RenderBuffersGI gi;
+ RendererRD::GI::RenderBuffersGI rbgi;
ClusterBuilderRD *cluster_builder = nullptr;
@@ -605,9 +606,6 @@ private:
RID temp;
RID prev_velocity; // Last frame velocity buffer
} taa;
-
- RID ambient_buffer;
- RID reflection_buffer;
};
/* GI */
@@ -801,6 +799,7 @@ private:
RID fog_uniform_set;
RID copy_uniform_set;
+ RID process_uniform_set_density;
RID process_uniform_set;
RID process_uniform_set2;
RID sdfgi_uniform_set;
@@ -996,6 +995,10 @@ public:
virtual Transform3D geometry_instance_get_transform(GeometryInstance *p_instance) = 0;
virtual AABB geometry_instance_get_aabb(GeometryInstance *p_instance) = 0;
+ /* GI */
+
+ RendererRD::GI *get_gi() { return &gi; }
+
/* SHADOW ATLAS API */
virtual RID shadow_atlas_create() override;
diff --git a/servers/rendering/renderer_rd/renderer_scene_sky_rd.cpp b/servers/rendering/renderer_rd/renderer_scene_sky_rd.cpp
index 3a237dbd8c..b3b9b86aa8 100644
--- a/servers/rendering/renderer_rd/renderer_scene_sky_rd.cpp
+++ b/servers/rendering/renderer_rd/renderer_scene_sky_rd.cpp
@@ -438,19 +438,19 @@ void RendererSceneSkyRD::ReflectionData::update_reflection_data(RendererStorageR
}
void RendererSceneSkyRD::ReflectionData::create_reflection_fast_filter(RendererStorageRD *p_storage, bool p_use_arrays) {
- EffectsRD *effects = p_storage->get_effects();
- ERR_FAIL_NULL_MSG(effects, "Effects haven't been initialised");
- bool prefer_raster_effects = effects->get_prefer_raster_effects();
+ RendererRD::CopyEffects *copy_effects = RendererRD::CopyEffects::get_singleton();
+ ERR_FAIL_NULL_MSG(copy_effects, "Effects haven't been initialised");
+ bool prefer_raster_effects = copy_effects->get_prefer_raster_effects();
if (prefer_raster_effects) {
RD::get_singleton()->draw_command_begin_label("Downsample radiance map");
for (int k = 0; k < 6; k++) {
- effects->cubemap_downsample_raster(radiance_base_cubemap, downsampled_layer.mipmaps[0].framebuffers[k], k, downsampled_layer.mipmaps[0].size);
+ copy_effects->cubemap_downsample_raster(radiance_base_cubemap, downsampled_layer.mipmaps[0].framebuffers[k], k, downsampled_layer.mipmaps[0].size);
}
for (int i = 1; i < downsampled_layer.mipmaps.size(); i++) {
for (int k = 0; k < 6; k++) {
- effects->cubemap_downsample_raster(downsampled_layer.mipmaps[i - 1].view, downsampled_layer.mipmaps[i].framebuffers[k], k, downsampled_layer.mipmaps[i].size);
+ copy_effects->cubemap_downsample_raster(downsampled_layer.mipmaps[i - 1].view, downsampled_layer.mipmaps[i].framebuffers[k], k, downsampled_layer.mipmaps[i].size);
}
}
RD::get_singleton()->draw_command_end_label(); // Downsample Radiance
@@ -459,24 +459,24 @@ void RendererSceneSkyRD::ReflectionData::create_reflection_fast_filter(RendererS
RD::get_singleton()->draw_command_begin_label("filter radiance map into array heads");
for (int i = 0; i < layers.size(); i++) {
for (int k = 0; k < 6; k++) {
- effects->cubemap_filter_raster(downsampled_radiance_cubemap, layers[i].mipmaps[0].framebuffers[k], k, i);
+ copy_effects->cubemap_filter_raster(downsampled_radiance_cubemap, layers[i].mipmaps[0].framebuffers[k], k, i);
}
}
} else {
RD::get_singleton()->draw_command_begin_label("filter radiance map into mipmaps directly");
for (int j = 0; j < layers[0].mipmaps.size(); j++) {
for (int k = 0; k < 6; k++) {
- effects->cubemap_filter_raster(downsampled_radiance_cubemap, layers[0].mipmaps[j].framebuffers[k], k, j);
+ copy_effects->cubemap_filter_raster(downsampled_radiance_cubemap, layers[0].mipmaps[j].framebuffers[k], k, j);
}
}
}
RD::get_singleton()->draw_command_end_label(); // Filter radiance
} else {
RD::get_singleton()->draw_command_begin_label("Downsample radiance map");
- effects->cubemap_downsample(radiance_base_cubemap, downsampled_layer.mipmaps[0].view, downsampled_layer.mipmaps[0].size);
+ copy_effects->cubemap_downsample(radiance_base_cubemap, downsampled_layer.mipmaps[0].view, downsampled_layer.mipmaps[0].size);
for (int i = 1; i < downsampled_layer.mipmaps.size(); i++) {
- effects->cubemap_downsample(downsampled_layer.mipmaps[i - 1].view, downsampled_layer.mipmaps[i].view, downsampled_layer.mipmaps[i].size);
+ copy_effects->cubemap_downsample(downsampled_layer.mipmaps[i - 1].view, downsampled_layer.mipmaps[i].view, downsampled_layer.mipmaps[i].size);
}
RD::get_singleton()->draw_command_end_label(); // Downsample Radiance
Vector<RID> views;
@@ -490,26 +490,26 @@ void RendererSceneSkyRD::ReflectionData::create_reflection_fast_filter(RendererS
}
}
RD::get_singleton()->draw_command_begin_label("Fast filter radiance");
- effects->cubemap_filter(downsampled_radiance_cubemap, views, p_use_arrays);
+ copy_effects->cubemap_filter(downsampled_radiance_cubemap, views, p_use_arrays);
RD::get_singleton()->draw_command_end_label(); // Filter radiance
}
}
void RendererSceneSkyRD::ReflectionData::create_reflection_importance_sample(RendererStorageRD *p_storage, bool p_use_arrays, int p_cube_side, int p_base_layer, uint32_t p_sky_ggx_samples_quality) {
- EffectsRD *effects = p_storage->get_effects();
- ERR_FAIL_NULL_MSG(effects, "Effects haven't been initialised");
- bool prefer_raster_effects = effects->get_prefer_raster_effects();
+ RendererRD::CopyEffects *copy_effects = RendererRD::CopyEffects::get_singleton();
+ ERR_FAIL_NULL_MSG(copy_effects, "Effects haven't been initialised");
+ bool prefer_raster_effects = copy_effects->get_prefer_raster_effects();
if (prefer_raster_effects) {
if (p_base_layer == 1) {
RD::get_singleton()->draw_command_begin_label("Downsample radiance map");
for (int k = 0; k < 6; k++) {
- effects->cubemap_downsample_raster(radiance_base_cubemap, downsampled_layer.mipmaps[0].framebuffers[k], k, downsampled_layer.mipmaps[0].size);
+ copy_effects->cubemap_downsample_raster(radiance_base_cubemap, downsampled_layer.mipmaps[0].framebuffers[k], k, downsampled_layer.mipmaps[0].size);
}
for (int i = 1; i < downsampled_layer.mipmaps.size(); i++) {
for (int k = 0; k < 6; k++) {
- effects->cubemap_downsample_raster(downsampled_layer.mipmaps[i - 1].view, downsampled_layer.mipmaps[i].framebuffers[k], k, downsampled_layer.mipmaps[i].size);
+ copy_effects->cubemap_downsample_raster(downsampled_layer.mipmaps[i - 1].view, downsampled_layer.mipmaps[i].framebuffers[k], k, downsampled_layer.mipmaps[i].size);
}
}
RD::get_singleton()->draw_command_end_label(); // Downsample Radiance
@@ -518,7 +518,7 @@ void RendererSceneSkyRD::ReflectionData::create_reflection_importance_sample(Ren
RD::get_singleton()->draw_command_begin_label("High Quality filter radiance");
if (p_use_arrays) {
for (int k = 0; k < 6; k++) {
- effects->cubemap_roughness_raster(
+ copy_effects->cubemap_roughness_raster(
downsampled_radiance_cubemap,
layers[p_base_layer].mipmaps[0].framebuffers[k],
k,
@@ -528,7 +528,7 @@ void RendererSceneSkyRD::ReflectionData::create_reflection_importance_sample(Ren
}
} else {
for (int k = 0; k < 6; k++) {
- effects->cubemap_roughness_raster(
+ copy_effects->cubemap_roughness_raster(
downsampled_radiance_cubemap,
layers[0].mipmaps[p_base_layer].framebuffers[k],
k,
@@ -540,19 +540,19 @@ void RendererSceneSkyRD::ReflectionData::create_reflection_importance_sample(Ren
} else {
if (p_base_layer == 1) {
RD::get_singleton()->draw_command_begin_label("Downsample radiance map");
- effects->cubemap_downsample(radiance_base_cubemap, downsampled_layer.mipmaps[0].view, downsampled_layer.mipmaps[0].size);
+ copy_effects->cubemap_downsample(radiance_base_cubemap, downsampled_layer.mipmaps[0].view, downsampled_layer.mipmaps[0].size);
for (int i = 1; i < downsampled_layer.mipmaps.size(); i++) {
- effects->cubemap_downsample(downsampled_layer.mipmaps[i - 1].view, downsampled_layer.mipmaps[i].view, downsampled_layer.mipmaps[i].size);
+ copy_effects->cubemap_downsample(downsampled_layer.mipmaps[i - 1].view, downsampled_layer.mipmaps[i].view, downsampled_layer.mipmaps[i].size);
}
RD::get_singleton()->draw_command_end_label(); // Downsample Radiance
}
RD::get_singleton()->draw_command_begin_label("High Quality filter radiance");
if (p_use_arrays) {
- effects->cubemap_roughness(downsampled_radiance_cubemap, layers[p_base_layer].views[0], p_cube_side, p_sky_ggx_samples_quality, float(p_base_layer) / (layers.size() - 1.0), layers[p_base_layer].mipmaps[0].size.x);
+ copy_effects->cubemap_roughness(downsampled_radiance_cubemap, layers[p_base_layer].views[0], p_cube_side, p_sky_ggx_samples_quality, float(p_base_layer) / (layers.size() - 1.0), layers[p_base_layer].mipmaps[0].size.x);
} else {
- effects->cubemap_roughness(
+ copy_effects->cubemap_roughness(
downsampled_radiance_cubemap,
layers[0].views[p_base_layer],
p_cube_side,
@@ -565,9 +565,9 @@ void RendererSceneSkyRD::ReflectionData::create_reflection_importance_sample(Ren
}
void RendererSceneSkyRD::ReflectionData::update_reflection_mipmaps(RendererStorageRD *p_storage, int p_start, int p_end) {
- EffectsRD *effects = p_storage->get_effects();
- ERR_FAIL_NULL_MSG(effects, "Effects haven't been initialised");
- bool prefer_raster_effects = effects->get_prefer_raster_effects();
+ RendererRD::CopyEffects *copy_effects = RendererRD::CopyEffects::get_singleton();
+ ERR_FAIL_NULL_MSG(copy_effects, "Effects haven't been initialised");
+ bool prefer_raster_effects = copy_effects->get_prefer_raster_effects();
RD::get_singleton()->draw_command_begin_label("Update Radiance Cubemap Array Mipmaps");
for (int i = p_start; i < p_end; i++) {
@@ -577,11 +577,11 @@ void RendererSceneSkyRD::ReflectionData::update_reflection_mipmaps(RendererStora
if (prefer_raster_effects) {
for (int k = 0; k < 6; k++) {
RID framebuffer = layers[i].mipmaps[j + 1].framebuffers[k];
- effects->cubemap_downsample_raster(view, framebuffer, k, size);
+ copy_effects->cubemap_downsample_raster(view, framebuffer, k, size);
}
} else {
RID texture = layers[i].views[j + 1];
- effects->cubemap_downsample(view, texture, size);
+ copy_effects->cubemap_downsample(view, texture, size);
}
}
}
diff --git a/servers/rendering/renderer_rd/renderer_storage_rd.cpp b/servers/rendering/renderer_rd/renderer_storage_rd.cpp
index d5166c6905..8c55ff1d0a 100644
--- a/servers/rendering/renderer_rd/renderer_storage_rd.cpp
+++ b/servers/rendering/renderer_rd/renderer_storage_rd.cpp
@@ -35,6 +35,7 @@
#include "core/io/resource_loader.h"
#include "core/math/math_defs.h"
#include "renderer_compositor_rd.h"
+#include "servers/rendering/renderer_rd/environment/gi.h"
#include "servers/rendering/renderer_rd/storage_rd/light_storage.h"
#include "servers/rendering/renderer_rd/storage_rd/mesh_storage.h"
#include "servers/rendering/renderer_rd/storage_rd/particles_storage.h"
@@ -173,336 +174,6 @@ void RendererStorageRD::visibility_notifier_call(RID p_notifier, bool p_enter, b
}
}
-/* VOXEL GI */
-
-RID RendererStorageRD::voxel_gi_allocate() {
- return voxel_gi_owner.allocate_rid();
-}
-void RendererStorageRD::voxel_gi_initialize(RID p_voxel_gi) {
- voxel_gi_owner.initialize_rid(p_voxel_gi, VoxelGI());
-}
-
-void RendererStorageRD::voxel_gi_allocate_data(RID p_voxel_gi, const Transform3D &p_to_cell_xform, const AABB &p_aabb, const Vector3i &p_octree_size, const Vector<uint8_t> &p_octree_cells, const Vector<uint8_t> &p_data_cells, const Vector<uint8_t> &p_distance_field, const Vector<int> &p_level_counts) {
- VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi);
- ERR_FAIL_COND(!voxel_gi);
-
- if (voxel_gi->octree_buffer.is_valid()) {
- RD::get_singleton()->free(voxel_gi->octree_buffer);
- RD::get_singleton()->free(voxel_gi->data_buffer);
- if (voxel_gi->sdf_texture.is_valid()) {
- RD::get_singleton()->free(voxel_gi->sdf_texture);
- }
-
- voxel_gi->sdf_texture = RID();
- voxel_gi->octree_buffer = RID();
- voxel_gi->data_buffer = RID();
- voxel_gi->octree_buffer_size = 0;
- voxel_gi->data_buffer_size = 0;
- voxel_gi->cell_count = 0;
- }
-
- voxel_gi->to_cell_xform = p_to_cell_xform;
- voxel_gi->bounds = p_aabb;
- voxel_gi->octree_size = p_octree_size;
- voxel_gi->level_counts = p_level_counts;
-
- if (p_octree_cells.size()) {
- ERR_FAIL_COND(p_octree_cells.size() % 32 != 0); //cells size must be a multiple of 32
-
- uint32_t cell_count = p_octree_cells.size() / 32;
-
- ERR_FAIL_COND(p_data_cells.size() != (int)cell_count * 16); //see that data size matches
-
- voxel_gi->cell_count = cell_count;
- voxel_gi->octree_buffer = RD::get_singleton()->storage_buffer_create(p_octree_cells.size(), p_octree_cells);
- voxel_gi->octree_buffer_size = p_octree_cells.size();
- voxel_gi->data_buffer = RD::get_singleton()->storage_buffer_create(p_data_cells.size(), p_data_cells);
- voxel_gi->data_buffer_size = p_data_cells.size();
-
- if (p_distance_field.size()) {
- RD::TextureFormat tf;
- tf.format = RD::DATA_FORMAT_R8_UNORM;
- tf.width = voxel_gi->octree_size.x;
- tf.height = voxel_gi->octree_size.y;
- tf.depth = voxel_gi->octree_size.z;
- tf.texture_type = RD::TEXTURE_TYPE_3D;
- tf.usage_bits = RD::TEXTURE_USAGE_SAMPLING_BIT | RD::TEXTURE_USAGE_CAN_UPDATE_BIT | RD::TEXTURE_USAGE_CAN_COPY_FROM_BIT;
- Vector<Vector<uint8_t>> s;
- s.push_back(p_distance_field);
- voxel_gi->sdf_texture = RD::get_singleton()->texture_create(tf, RD::TextureView(), s);
- }
-#if 0
- {
- RD::TextureFormat tf;
- tf.format = RD::DATA_FORMAT_R8_UNORM;
- tf.width = voxel_gi->octree_size.x;
- tf.height = voxel_gi->octree_size.y;
- tf.depth = voxel_gi->octree_size.z;
- tf.type = RD::TEXTURE_TYPE_3D;
- tf.usage_bits = RD::TEXTURE_USAGE_SAMPLING_BIT | RD::TEXTURE_USAGE_STORAGE_BIT | RD::TEXTURE_USAGE_CAN_COPY_TO_BIT;
- tf.shareable_formats.push_back(RD::DATA_FORMAT_R8_UNORM);
- tf.shareable_formats.push_back(RD::DATA_FORMAT_R8_UINT);
- voxel_gi->sdf_texture = RD::get_singleton()->texture_create(tf, RD::TextureView());
- }
- RID shared_tex;
- {
- RD::TextureView tv;
- tv.format_override = RD::DATA_FORMAT_R8_UINT;
- shared_tex = RD::get_singleton()->texture_create_shared(tv, voxel_gi->sdf_texture);
- }
- //update SDF texture
- Vector<RD::Uniform> uniforms;
- {
- RD::Uniform u;
- u.uniform_type = RD::UNIFORM_TYPE_STORAGE_BUFFER;
- u.binding = 1;
- u.append_id(voxel_gi->octree_buffer);
- uniforms.push_back(u);
- }
- {
- RD::Uniform u;
- u.uniform_type = RD::UNIFORM_TYPE_STORAGE_BUFFER;
- u.binding = 2;
- u.append_id(voxel_gi->data_buffer);
- uniforms.push_back(u);
- }
- {
- RD::Uniform u;
- u.uniform_type = RD::UNIFORM_TYPE_IMAGE;
- u.binding = 3;
- u.append_id(shared_tex);
- uniforms.push_back(u);
- }
-
- RID uniform_set = RD::get_singleton()->uniform_set_create(uniforms, voxel_gi_sdf_shader_version_shader, 0);
-
- {
- uint32_t push_constant[4] = { 0, 0, 0, 0 };
-
- for (int i = 0; i < voxel_gi->level_counts.size() - 1; i++) {
- push_constant[0] += voxel_gi->level_counts[i];
- }
- push_constant[1] = push_constant[0] + voxel_gi->level_counts[voxel_gi->level_counts.size() - 1];
-
- print_line("offset: " + itos(push_constant[0]));
- print_line("size: " + itos(push_constant[1]));
- //create SDF
- RD::ComputeListID compute_list = RD::get_singleton()->compute_list_begin();
- RD::get_singleton()->compute_list_bind_compute_pipeline(compute_list, voxel_gi_sdf_shader_pipeline);
- RD::get_singleton()->compute_list_bind_uniform_set(compute_list, uniform_set, 0);
- RD::get_singleton()->compute_list_set_push_constant(compute_list, push_constant, sizeof(uint32_t) * 4);
- RD::get_singleton()->compute_list_dispatch(compute_list, voxel_gi->octree_size.x / 4, voxel_gi->octree_size.y / 4, voxel_gi->octree_size.z / 4);
- RD::get_singleton()->compute_list_end();
- }
-
- RD::get_singleton()->free(uniform_set);
- RD::get_singleton()->free(shared_tex);
- }
-#endif
- }
-
- voxel_gi->version++;
- voxel_gi->data_version++;
-
- voxel_gi->dependency.changed_notify(DEPENDENCY_CHANGED_AABB);
-}
-
-AABB RendererStorageRD::voxel_gi_get_bounds(RID p_voxel_gi) const {
- VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi);
- ERR_FAIL_COND_V(!voxel_gi, AABB());
-
- return voxel_gi->bounds;
-}
-
-Vector3i RendererStorageRD::voxel_gi_get_octree_size(RID p_voxel_gi) const {
- VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi);
- ERR_FAIL_COND_V(!voxel_gi, Vector3i());
- return voxel_gi->octree_size;
-}
-
-Vector<uint8_t> RendererStorageRD::voxel_gi_get_octree_cells(RID p_voxel_gi) const {
- VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi);
- ERR_FAIL_COND_V(!voxel_gi, Vector<uint8_t>());
-
- if (voxel_gi->octree_buffer.is_valid()) {
- return RD::get_singleton()->buffer_get_data(voxel_gi->octree_buffer);
- }
- return Vector<uint8_t>();
-}
-
-Vector<uint8_t> RendererStorageRD::voxel_gi_get_data_cells(RID p_voxel_gi) const {
- VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi);
- ERR_FAIL_COND_V(!voxel_gi, Vector<uint8_t>());
-
- if (voxel_gi->data_buffer.is_valid()) {
- return RD::get_singleton()->buffer_get_data(voxel_gi->data_buffer);
- }
- return Vector<uint8_t>();
-}
-
-Vector<uint8_t> RendererStorageRD::voxel_gi_get_distance_field(RID p_voxel_gi) const {
- VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi);
- ERR_FAIL_COND_V(!voxel_gi, Vector<uint8_t>());
-
- if (voxel_gi->data_buffer.is_valid()) {
- return RD::get_singleton()->texture_get_data(voxel_gi->sdf_texture, 0);
- }
- return Vector<uint8_t>();
-}
-
-Vector<int> RendererStorageRD::voxel_gi_get_level_counts(RID p_voxel_gi) const {
- VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi);
- ERR_FAIL_COND_V(!voxel_gi, Vector<int>());
-
- return voxel_gi->level_counts;
-}
-
-Transform3D RendererStorageRD::voxel_gi_get_to_cell_xform(RID p_voxel_gi) const {
- VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi);
- ERR_FAIL_COND_V(!voxel_gi, Transform3D());
-
- return voxel_gi->to_cell_xform;
-}
-
-void RendererStorageRD::voxel_gi_set_dynamic_range(RID p_voxel_gi, float p_range) {
- VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi);
- ERR_FAIL_COND(!voxel_gi);
-
- voxel_gi->dynamic_range = p_range;
- voxel_gi->version++;
-}
-
-float RendererStorageRD::voxel_gi_get_dynamic_range(RID p_voxel_gi) const {
- VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi);
- ERR_FAIL_COND_V(!voxel_gi, 0);
-
- return voxel_gi->dynamic_range;
-}
-
-void RendererStorageRD::voxel_gi_set_propagation(RID p_voxel_gi, float p_range) {
- VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi);
- ERR_FAIL_COND(!voxel_gi);
-
- voxel_gi->propagation = p_range;
- voxel_gi->version++;
-}
-
-float RendererStorageRD::voxel_gi_get_propagation(RID p_voxel_gi) const {
- VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi);
- ERR_FAIL_COND_V(!voxel_gi, 0);
- return voxel_gi->propagation;
-}
-
-void RendererStorageRD::voxel_gi_set_energy(RID p_voxel_gi, float p_energy) {
- VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi);
- ERR_FAIL_COND(!voxel_gi);
-
- voxel_gi->energy = p_energy;
-}
-
-float RendererStorageRD::voxel_gi_get_energy(RID p_voxel_gi) const {
- VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi);
- ERR_FAIL_COND_V(!voxel_gi, 0);
- return voxel_gi->energy;
-}
-
-void RendererStorageRD::voxel_gi_set_bias(RID p_voxel_gi, float p_bias) {
- VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi);
- ERR_FAIL_COND(!voxel_gi);
-
- voxel_gi->bias = p_bias;
-}
-
-float RendererStorageRD::voxel_gi_get_bias(RID p_voxel_gi) const {
- VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi);
- ERR_FAIL_COND_V(!voxel_gi, 0);
- return voxel_gi->bias;
-}
-
-void RendererStorageRD::voxel_gi_set_normal_bias(RID p_voxel_gi, float p_normal_bias) {
- VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi);
- ERR_FAIL_COND(!voxel_gi);
-
- voxel_gi->normal_bias = p_normal_bias;
-}
-
-float RendererStorageRD::voxel_gi_get_normal_bias(RID p_voxel_gi) const {
- VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi);
- ERR_FAIL_COND_V(!voxel_gi, 0);
- return voxel_gi->normal_bias;
-}
-
-void RendererStorageRD::voxel_gi_set_anisotropy_strength(RID p_voxel_gi, float p_strength) {
- VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi);
- ERR_FAIL_COND(!voxel_gi);
-
- voxel_gi->anisotropy_strength = p_strength;
-}
-
-float RendererStorageRD::voxel_gi_get_anisotropy_strength(RID p_voxel_gi) const {
- VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi);
- ERR_FAIL_COND_V(!voxel_gi, 0);
- return voxel_gi->anisotropy_strength;
-}
-
-void RendererStorageRD::voxel_gi_set_interior(RID p_voxel_gi, bool p_enable) {
- VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi);
- ERR_FAIL_COND(!voxel_gi);
-
- voxel_gi->interior = p_enable;
-}
-
-void RendererStorageRD::voxel_gi_set_use_two_bounces(RID p_voxel_gi, bool p_enable) {
- VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi);
- ERR_FAIL_COND(!voxel_gi);
-
- voxel_gi->use_two_bounces = p_enable;
- voxel_gi->version++;
-}
-
-bool RendererStorageRD::voxel_gi_is_using_two_bounces(RID p_voxel_gi) const {
- VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi);
- ERR_FAIL_COND_V(!voxel_gi, false);
- return voxel_gi->use_two_bounces;
-}
-
-bool RendererStorageRD::voxel_gi_is_interior(RID p_voxel_gi) const {
- VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi);
- ERR_FAIL_COND_V(!voxel_gi, 0);
- return voxel_gi->interior;
-}
-
-uint32_t RendererStorageRD::voxel_gi_get_version(RID p_voxel_gi) {
- VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi);
- ERR_FAIL_COND_V(!voxel_gi, 0);
- return voxel_gi->version;
-}
-
-uint32_t RendererStorageRD::voxel_gi_get_data_version(RID p_voxel_gi) {
- VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi);
- ERR_FAIL_COND_V(!voxel_gi, 0);
- return voxel_gi->data_version;
-}
-
-RID RendererStorageRD::voxel_gi_get_octree_buffer(RID p_voxel_gi) const {
- VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi);
- ERR_FAIL_COND_V(!voxel_gi, RID());
- return voxel_gi->octree_buffer;
-}
-
-RID RendererStorageRD::voxel_gi_get_data_buffer(RID p_voxel_gi) const {
- VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi);
- ERR_FAIL_COND_V(!voxel_gi, RID());
- return voxel_gi->data_buffer;
-}
-
-RID RendererStorageRD::voxel_gi_get_sdf_texture(RID p_voxel_gi) {
- VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_voxel_gi);
- ERR_FAIL_COND_V(!voxel_gi, RID());
-
- return voxel_gi->sdf_texture;
-}
-
/* misc */
void RendererStorageRD::base_update_dependency(RID p_base, DependencyTracker *p_instance) {
@@ -521,8 +192,8 @@ void RendererStorageRD::base_update_dependency(RID p_base, DependencyTracker *p_
} else if (RendererRD::TextureStorage::get_singleton()->owns_decal(p_base)) {
RendererRD::Decal *decal = RendererRD::TextureStorage::get_singleton()->get_decal(p_base);
p_instance->update_dependency(&decal->dependency);
- } else if (voxel_gi_owner.owns(p_base)) {
- VoxelGI *gip = voxel_gi_owner.get_or_null(p_base);
+ } else if (RendererRD::GI::get_singleton()->owns_voxel_gi(p_base)) {
+ RendererRD::GI::VoxelGI *gip = RendererRD::GI::get_singleton()->get_voxel_gi(p_base);
p_instance->update_dependency(&gip->dependency);
} else if (RendererRD::LightStorage::get_singleton()->owns_lightmap(p_base)) {
RendererRD::Lightmap *lm = RendererRD::LightStorage::get_singleton()->get_lightmap(p_base);
@@ -558,7 +229,7 @@ RS::InstanceType RendererStorageRD::get_base_type(RID p_rid) const {
if (RendererRD::TextureStorage::get_singleton()->owns_decal(p_rid)) {
return RS::INSTANCE_DECAL;
}
- if (voxel_gi_owner.owns(p_rid)) {
+ if (RendererRD::GI::get_singleton()->owns_voxel_gi(p_rid)) {
return RS::INSTANCE_VOXEL_GI;
}
if (RendererRD::LightStorage::get_singleton()->owns_light(p_rid)) {
@@ -636,11 +307,8 @@ bool RendererStorageRD::free(RID p_rid) {
RendererRD::LightStorage::get_singleton()->reflection_probe_free(p_rid);
} else if (RendererRD::TextureStorage::get_singleton()->owns_decal(p_rid)) {
RendererRD::TextureStorage::get_singleton()->decal_free(p_rid);
- } else if (voxel_gi_owner.owns(p_rid)) {
- voxel_gi_allocate_data(p_rid, Transform3D(), AABB(), Vector3i(), Vector<uint8_t>(), Vector<uint8_t>(), Vector<uint8_t>(), Vector<int>()); //deallocate
- VoxelGI *voxel_gi = voxel_gi_owner.get_or_null(p_rid);
- voxel_gi->dependency.deleted_notify(p_rid);
- voxel_gi_owner.free(p_rid);
+ } else if (RendererRD::GI::get_singleton()->owns_voxel_gi(p_rid)) {
+ RendererRD::GI::get_singleton()->voxel_gi_free(p_rid);
} else if (RendererRD::LightStorage::get_singleton()->owns_lightmap(p_rid)) {
RendererRD::LightStorage::get_singleton()->lightmap_free(p_rid);
} else if (RendererRD::LightStorage::get_singleton()->owns_light(p_rid)) {
diff --git a/servers/rendering/renderer_rd/renderer_storage_rd.h b/servers/rendering/renderer_rd/renderer_storage_rd.h
index 07fae45a26..d41129d678 100644
--- a/servers/rendering/renderer_rd/renderer_storage_rd.h
+++ b/servers/rendering/renderer_rd/renderer_storage_rd.h
@@ -36,7 +36,7 @@
#include "core/templates/rid_owner.h"
#include "servers/rendering/renderer_compositor.h"
#include "servers/rendering/renderer_rd/effects_rd.h"
-#include "servers/rendering/renderer_rd/shaders/voxel_gi_sdf.glsl.gen.h"
+#include "servers/rendering/renderer_rd/shaders/environment/voxel_gi_sdf.glsl.gen.h"
#include "servers/rendering/renderer_rd/storage_rd/material_storage.h"
#include "servers/rendering/renderer_scene_render.h"
#include "servers/rendering/rendering_device.h"
@@ -147,42 +147,6 @@ private:
mutable RID_Owner<VisibilityNotifier> visibility_notifier_owner;
- /* VOXEL GI */
-
- struct VoxelGI {
- RID octree_buffer;
- RID data_buffer;
- RID sdf_texture;
-
- uint32_t octree_buffer_size = 0;
- uint32_t data_buffer_size = 0;
-
- Vector<int> level_counts;
-
- int cell_count = 0;
-
- Transform3D to_cell_xform;
- AABB bounds;
- Vector3i octree_size;
-
- float dynamic_range = 2.0;
- float energy = 1.0;
- float bias = 1.4;
- float normal_bias = 0.0;
- float propagation = 0.7;
- bool interior = false;
- bool use_two_bounces = false;
-
- float anisotropy_strength = 0.5;
-
- uint32_t version = 1;
- uint32_t data_version = 1;
-
- Dependency dependency;
- };
-
- mutable RID_Owner<VoxelGI, true> voxel_gi_owner;
-
/* EFFECTS */
EffectsRD *effects = nullptr;
@@ -192,54 +156,6 @@ public:
void base_update_dependency(RID p_base, DependencyTracker *p_instance);
- /* VOXEL GI API */
-
- RID voxel_gi_allocate();
- void voxel_gi_initialize(RID p_voxel_gi);
-
- void voxel_gi_allocate_data(RID p_voxel_gi, const Transform3D &p_to_cell_xform, const AABB &p_aabb, const Vector3i &p_octree_size, const Vector<uint8_t> &p_octree_cells, const Vector<uint8_t> &p_data_cells, const Vector<uint8_t> &p_distance_field, const Vector<int> &p_level_counts);
-
- AABB voxel_gi_get_bounds(RID p_voxel_gi) const;
- Vector3i voxel_gi_get_octree_size(RID p_voxel_gi) const;
- Vector<uint8_t> voxel_gi_get_octree_cells(RID p_voxel_gi) const;
- Vector<uint8_t> voxel_gi_get_data_cells(RID p_voxel_gi) const;
- Vector<uint8_t> voxel_gi_get_distance_field(RID p_voxel_gi) const;
-
- Vector<int> voxel_gi_get_level_counts(RID p_voxel_gi) const;
- Transform3D voxel_gi_get_to_cell_xform(RID p_voxel_gi) const;
-
- void voxel_gi_set_dynamic_range(RID p_voxel_gi, float p_range);
- float voxel_gi_get_dynamic_range(RID p_voxel_gi) const;
-
- void voxel_gi_set_propagation(RID p_voxel_gi, float p_range);
- float voxel_gi_get_propagation(RID p_voxel_gi) const;
-
- void voxel_gi_set_energy(RID p_voxel_gi, float p_energy);
- float voxel_gi_get_energy(RID p_voxel_gi) const;
-
- void voxel_gi_set_bias(RID p_voxel_gi, float p_bias);
- float voxel_gi_get_bias(RID p_voxel_gi) const;
-
- void voxel_gi_set_normal_bias(RID p_voxel_gi, float p_range);
- float voxel_gi_get_normal_bias(RID p_voxel_gi) const;
-
- void voxel_gi_set_interior(RID p_voxel_gi, bool p_enable);
- bool voxel_gi_is_interior(RID p_voxel_gi) const;
-
- void voxel_gi_set_use_two_bounces(RID p_voxel_gi, bool p_enable);
- bool voxel_gi_is_using_two_bounces(RID p_voxel_gi) const;
-
- void voxel_gi_set_anisotropy_strength(RID p_voxel_gi, float p_strength);
- float voxel_gi_get_anisotropy_strength(RID p_voxel_gi) const;
-
- uint32_t voxel_gi_get_version(RID p_probe);
- uint32_t voxel_gi_get_data_version(RID p_probe);
-
- RID voxel_gi_get_octree_buffer(RID p_voxel_gi) const;
- RID voxel_gi_get_data_buffer(RID p_voxel_gi) const;
-
- RID voxel_gi_get_sdf_texture(RID p_voxel_gi);
-
/* FOG VOLUMES */
virtual RID fog_volume_allocate();
diff --git a/servers/rendering/renderer_rd/shaders/SCsub b/servers/rendering/renderer_rd/shaders/SCsub
index acb843bfb6..05663226c0 100644
--- a/servers/rendering/renderer_rd/shaders/SCsub
+++ b/servers/rendering/renderer_rd/shaders/SCsub
@@ -17,3 +17,4 @@ if "RD_GLSL" in env["BUILDERS"]:
env.RD_GLSL(glsl_file)
SConscript("effects/SCsub")
+SConscript("environment/SCsub")
diff --git a/servers/rendering/renderer_rd/shaders/cube_to_dp.glsl b/servers/rendering/renderer_rd/shaders/effects/cube_to_dp.glsl
index e77d0de719..e77d0de719 100644
--- a/servers/rendering/renderer_rd/shaders/cube_to_dp.glsl
+++ b/servers/rendering/renderer_rd/shaders/effects/cube_to_dp.glsl
diff --git a/servers/rendering/renderer_rd/shaders/cubemap_downsampler.glsl b/servers/rendering/renderer_rd/shaders/effects/cubemap_downsampler.glsl
index 63f0ce690e..63f0ce690e 100644
--- a/servers/rendering/renderer_rd/shaders/cubemap_downsampler.glsl
+++ b/servers/rendering/renderer_rd/shaders/effects/cubemap_downsampler.glsl
diff --git a/servers/rendering/renderer_rd/shaders/cubemap_downsampler_inc.glsl b/servers/rendering/renderer_rd/shaders/effects/cubemap_downsampler_inc.glsl
index 641e0906f5..641e0906f5 100644
--- a/servers/rendering/renderer_rd/shaders/cubemap_downsampler_inc.glsl
+++ b/servers/rendering/renderer_rd/shaders/effects/cubemap_downsampler_inc.glsl
diff --git a/servers/rendering/renderer_rd/shaders/cubemap_downsampler_raster.glsl b/servers/rendering/renderer_rd/shaders/effects/cubemap_downsampler_raster.glsl
index 0828ffd921..0828ffd921 100644
--- a/servers/rendering/renderer_rd/shaders/cubemap_downsampler_raster.glsl
+++ b/servers/rendering/renderer_rd/shaders/effects/cubemap_downsampler_raster.glsl
diff --git a/servers/rendering/renderer_rd/shaders/cubemap_filter.glsl b/servers/rendering/renderer_rd/shaders/effects/cubemap_filter.glsl
index 2a774b0eb4..2a774b0eb4 100644
--- a/servers/rendering/renderer_rd/shaders/cubemap_filter.glsl
+++ b/servers/rendering/renderer_rd/shaders/effects/cubemap_filter.glsl
diff --git a/servers/rendering/renderer_rd/shaders/cubemap_filter_raster.glsl b/servers/rendering/renderer_rd/shaders/effects/cubemap_filter_raster.glsl
index 0990dc7c2f..0990dc7c2f 100644
--- a/servers/rendering/renderer_rd/shaders/cubemap_filter_raster.glsl
+++ b/servers/rendering/renderer_rd/shaders/effects/cubemap_filter_raster.glsl
diff --git a/servers/rendering/renderer_rd/shaders/cubemap_roughness.glsl b/servers/rendering/renderer_rd/shaders/effects/cubemap_roughness.glsl
index 1d46f59408..1d46f59408 100644
--- a/servers/rendering/renderer_rd/shaders/cubemap_roughness.glsl
+++ b/servers/rendering/renderer_rd/shaders/effects/cubemap_roughness.glsl
diff --git a/servers/rendering/renderer_rd/shaders/cubemap_roughness_inc.glsl b/servers/rendering/renderer_rd/shaders/effects/cubemap_roughness_inc.glsl
index 1bee428a6f..1bee428a6f 100644
--- a/servers/rendering/renderer_rd/shaders/cubemap_roughness_inc.glsl
+++ b/servers/rendering/renderer_rd/shaders/effects/cubemap_roughness_inc.glsl
diff --git a/servers/rendering/renderer_rd/shaders/cubemap_roughness_raster.glsl b/servers/rendering/renderer_rd/shaders/effects/cubemap_roughness_raster.glsl
index c29accd8a7..c29accd8a7 100644
--- a/servers/rendering/renderer_rd/shaders/cubemap_roughness_raster.glsl
+++ b/servers/rendering/renderer_rd/shaders/effects/cubemap_roughness_raster.glsl
diff --git a/servers/rendering/renderer_rd/shaders/resolve.glsl b/servers/rendering/renderer_rd/shaders/effects/resolve.glsl
index 0e086331c0..0e086331c0 100644
--- a/servers/rendering/renderer_rd/shaders/resolve.glsl
+++ b/servers/rendering/renderer_rd/shaders/effects/resolve.glsl
diff --git a/servers/rendering/renderer_rd/shaders/effects/tonemap.glsl b/servers/rendering/renderer_rd/shaders/effects/tonemap.glsl
index a8ccdea60b..62a7b0e7d7 100644
--- a/servers/rendering/renderer_rd/shaders/effects/tonemap.glsl
+++ b/servers/rendering/renderer_rd/shaders/effects/tonemap.glsl
@@ -448,6 +448,11 @@ void main() {
// Early Tonemap & SRGB Conversion
#ifndef SUBPASS
+ if (params.use_fxaa) {
+ // FXAA must be performed before glow to preserve the "bleed" effect of glow.
+ color.rgb = do_fxaa(color.rgb, exposure, uv_interp);
+ }
+
if (params.use_glow && params.glow_mode == GLOW_MODE_MIX) {
vec3 glow = gather_glow(source_glow, uv_interp) * params.luminance_multiplier;
if (params.glow_map_strength > 0.001) {
@@ -455,10 +460,6 @@ void main() {
}
color.rgb = mix(color.rgb, glow, params.glow_intensity);
}
-
- if (params.use_fxaa) {
- color.rgb = do_fxaa(color.rgb, exposure, uv_interp);
- }
#endif
if (params.use_debanding) {
diff --git a/servers/rendering/renderer_rd/shaders/environment/SCsub b/servers/rendering/renderer_rd/shaders/environment/SCsub
new file mode 100644
index 0000000000..fc513d3fb9
--- /dev/null
+++ b/servers/rendering/renderer_rd/shaders/environment/SCsub
@@ -0,0 +1,17 @@
+#!/usr/bin/env python
+
+Import("env")
+
+if "RD_GLSL" in env["BUILDERS"]:
+ # find all include files
+ gl_include_files = [str(f) for f in Glob("*_inc.glsl")]
+
+ # find all shader code(all glsl files excluding our include files)
+ glsl_files = [str(f) for f in Glob("*.glsl") if str(f) not in gl_include_files]
+
+ # make sure we recompile shaders if include files change
+ env.Depends([f + ".gen.h" for f in glsl_files], gl_include_files)
+
+ # compile shaders
+ for glsl_file in glsl_files:
+ env.RD_GLSL(glsl_file)
diff --git a/servers/rendering/renderer_rd/shaders/gi.glsl b/servers/rendering/renderer_rd/shaders/environment/gi.glsl
index 0c7f08813b..f687d50a2d 100644
--- a/servers/rendering/renderer_rd/shaders/gi.glsl
+++ b/servers/rendering/renderer_rd/shaders/environment/gi.glsl
@@ -86,19 +86,29 @@ voxel_gi_instances;
layout(set = 0, binding = 17) uniform texture3D voxel_gi_textures[MAX_VOXEL_GI_INSTANCES];
-layout(push_constant, std430) uniform Params {
- ivec2 screen_size;
- float z_near;
- float z_far;
+layout(set = 0, binding = 18, std140) uniform SceneData {
+ mat4x4 inv_projection[2];
+ mat4x4 cam_transform;
+ vec4 eye_offset[2];
- vec4 proj_info;
+ ivec2 screen_size;
+ float pad1;
+ float pad2;
+}
+scene_data;
+layout(push_constant, std430) uniform Params {
+ uint view_index;
uint max_voxel_gi_instances;
bool high_quality_vct;
bool orthogonal;
- uint pad;
- mat3x4 cam_rotation;
+ vec4 proj_info;
+
+ float z_near;
+ float z_far;
+ float pad1;
+ float pad2;
}
params;
@@ -130,6 +140,16 @@ vec4 blend_color(vec4 src, vec4 dst) {
}
vec3 reconstruct_position(ivec2 screen_pos) {
+#ifdef USE_MULTIVIEW
+ vec4 pos;
+ pos.xy = (2.0 * vec2(screen_pos) / vec2(scene_data.screen_size)) - 1.0;
+ pos.z = texelFetch(sampler2D(depth_buffer, linear_sampler), screen_pos, 0).r * 2.0 - 1.0;
+ pos.w = 1.0;
+
+ pos = scene_data.inv_projection[params.view_index] * pos;
+
+ return pos.xyz / pos.w;
+#else
vec3 pos;
pos.z = texelFetch(sampler2D(depth_buffer, linear_sampler), screen_pos, 0).r;
@@ -147,6 +167,7 @@ vec3 reconstruct_position(ivec2 screen_pos) {
}
return pos;
+#endif
}
void sdfvoxel_gi_process(uint cascade, vec3 cascade_pos, vec3 cam_pos, vec3 cam_normal, vec3 cam_specular_normal, float roughness, out vec3 diffuse_light, out vec3 specular_light) {
@@ -579,9 +600,10 @@ void process_gi(ivec2 pos, vec3 vertex, inout vec4 ambient_light, inout vec4 ref
if (normal.length() > 0.5) {
//valid normal, can do GI
float roughness = normal_roughness.w;
- vertex = mat3(params.cam_rotation) * vertex;
- normal = normalize(mat3(params.cam_rotation) * normal);
- vec3 reflection = normalize(reflect(normalize(vertex), normal));
+ vec3 view = -normalize(mat3(scene_data.cam_transform) * (vertex - scene_data.eye_offset[params.view_index].xyz));
+ vertex = mat3(scene_data.cam_transform) * vertex;
+ normal = normalize(mat3(scene_data.cam_transform) * normal);
+ vec3 reflection = normalize(reflect(-view, normal));
#ifdef USE_SDFGI
sdfgi_process(vertex, normal, reflection, roughness, ambient_light, reflection_light);
@@ -629,7 +651,7 @@ void main() {
#ifdef MODE_HALF_RES
pos <<= 1;
#endif
- if (any(greaterThanEqual(pos, params.screen_size))) { //too large, do nothing
+ if (any(greaterThanEqual(pos, scene_data.screen_size))) { //too large, do nothing
return;
}
diff --git a/servers/rendering/renderer_rd/shaders/sdfgi_debug.glsl b/servers/rendering/renderer_rd/shaders/environment/sdfgi_debug.glsl
index 802a410825..af5f7d0a58 100644
--- a/servers/rendering/renderer_rd/shaders/sdfgi_debug.glsl
+++ b/servers/rendering/renderer_rd/shaders/environment/sdfgi_debug.glsl
@@ -40,10 +40,13 @@ layout(push_constant, std430) uniform Params {
bool use_occlusion;
float y_mult;
- vec3 cam_extent;
int probe_axis_size;
+ float z_near;
+ float reserved1;
+ float reserved2;
mat4 cam_transform;
+ mat4 inv_projection;
}
params;
@@ -81,8 +84,9 @@ void main() {
{
ray_pos = params.cam_transform[3].xyz;
- ray_dir.xy = params.cam_extent.xy * ((vec2(screen_pos) / vec2(params.screen_size)) * 2.0 - 1.0);
- ray_dir.z = params.cam_extent.z;
+ ray_dir.xy = ((vec2(screen_pos) / vec2(params.screen_size)) * 2.0 - 1.0);
+ ray_dir.z = params.z_near;
+ ray_dir = (params.inv_projection * vec4(ray_dir, 1.0)).xyz;
ray_dir = normalize(mat3(params.cam_transform) * ray_dir);
}
diff --git a/servers/rendering/renderer_rd/shaders/sdfgi_debug_probes.glsl b/servers/rendering/renderer_rd/shaders/environment/sdfgi_debug_probes.glsl
index e0be0bca12..75b1ad2130 100644
--- a/servers/rendering/renderer_rd/shaders/sdfgi_debug_probes.glsl
+++ b/servers/rendering/renderer_rd/shaders/environment/sdfgi_debug_probes.glsl
@@ -2,13 +2,28 @@
#version 450
+#if defined(USE_MULTIVIEW) && defined(has_VK_KHR_multiview)
+#extension GL_EXT_multiview : enable
+#endif
+
+#ifdef USE_MULTIVIEW
+#ifdef has_VK_KHR_multiview
+#define ViewIndex gl_ViewIndex
+#else // has_VK_KHR_multiview
+// !BAS! This needs to become an input once we implement our fallback!
+#define ViewIndex 0
+#endif // has_VK_KHR_multiview
+#else // USE_MULTIVIEW
+// Set to zero, not supported in non stereo
+#define ViewIndex 0
+#endif //USE_MULTIVIEW
+
#VERSION_DEFINES
#define MAX_CASCADES 8
+#define MAX_VIEWS 2
layout(push_constant, std430) uniform Params {
- mat4 projection;
-
uint band_power;
uint sections_in_band;
uint band_mask;
@@ -68,6 +83,11 @@ cascades;
layout(set = 0, binding = 4) uniform texture3D occlusion_texture;
layout(set = 0, binding = 3) uniform sampler linear_sampler;
+layout(set = 0, binding = 5, std140) uniform SceneData {
+ mat4 projection[MAX_VIEWS];
+}
+scene_data;
+
void main() {
#ifdef MODE_PROBES
probe_index = gl_InstanceIndex;
@@ -85,7 +105,7 @@ void main() {
vertex += (cascades.data[params.cascade].offset + vec3(probe_cell) * probe_cell_size) / vec3(1.0, params.y_mult, 1.0);
- gl_Position = params.projection * vec4(vertex, 1.0);
+ gl_Position = scene_data.projection[ViewIndex] * vec4(vertex, 1.0);
#endif
#ifdef MODE_VISIBILITY
@@ -144,7 +164,7 @@ void main() {
visibility = dot(texelFetch(sampler3D(occlusion_texture, linear_sampler), tex_pos, 0), layer_axis[occlusion_layer]);
- gl_Position = params.projection * vec4(vertex, 1.0);
+ gl_Position = scene_data.projection[ViewIndex] * vec4(vertex, 1.0);
#endif
}
@@ -153,16 +173,32 @@ void main() {
#version 450
+#if defined(USE_MULTIVIEW) && defined(has_VK_KHR_multiview)
+#extension GL_EXT_multiview : enable
+#endif
+
+#ifdef USE_MULTIVIEW
+#ifdef has_VK_KHR_multiview
+#define ViewIndex gl_ViewIndex
+#else // has_VK_KHR_multiview
+// !BAS! This needs to become an input once we implement our fallback!
+#define ViewIndex 0
+#endif // has_VK_KHR_multiview
+#else // USE_MULTIVIEW
+// Set to zero, not supported in non stereo
+#define ViewIndex 0
+#endif //USE_MULTIVIEW
+
#VERSION_DEFINES
+#define MAX_VIEWS 2
+
layout(location = 0) out vec4 frag_color;
layout(set = 0, binding = 2) uniform texture2DArray lightprobe_texture;
layout(set = 0, binding = 3) uniform sampler linear_sampler;
layout(push_constant, std430) uniform Params {
- mat4 projection;
-
uint band_power;
uint sections_in_band;
uint band_mask;
diff --git a/servers/rendering/renderer_rd/shaders/sdfgi_direct_light.glsl b/servers/rendering/renderer_rd/shaders/environment/sdfgi_direct_light.glsl
index b95fad650e..b95fad650e 100644
--- a/servers/rendering/renderer_rd/shaders/sdfgi_direct_light.glsl
+++ b/servers/rendering/renderer_rd/shaders/environment/sdfgi_direct_light.glsl
diff --git a/servers/rendering/renderer_rd/shaders/sdfgi_integrate.glsl b/servers/rendering/renderer_rd/shaders/environment/sdfgi_integrate.glsl
index 9c03297f5c..9c03297f5c 100644
--- a/servers/rendering/renderer_rd/shaders/sdfgi_integrate.glsl
+++ b/servers/rendering/renderer_rd/shaders/environment/sdfgi_integrate.glsl
diff --git a/servers/rendering/renderer_rd/shaders/sdfgi_preprocess.glsl b/servers/rendering/renderer_rd/shaders/environment/sdfgi_preprocess.glsl
index bce98f4054..bce98f4054 100644
--- a/servers/rendering/renderer_rd/shaders/sdfgi_preprocess.glsl
+++ b/servers/rendering/renderer_rd/shaders/environment/sdfgi_preprocess.glsl
diff --git a/servers/rendering/renderer_rd/shaders/voxel_gi.glsl b/servers/rendering/renderer_rd/shaders/environment/voxel_gi.glsl
index 577c6d0cd0..577c6d0cd0 100644
--- a/servers/rendering/renderer_rd/shaders/voxel_gi.glsl
+++ b/servers/rendering/renderer_rd/shaders/environment/voxel_gi.glsl
diff --git a/servers/rendering/renderer_rd/shaders/voxel_gi_debug.glsl b/servers/rendering/renderer_rd/shaders/environment/voxel_gi_debug.glsl
index fd7a2bf8ad..fd7a2bf8ad 100644
--- a/servers/rendering/renderer_rd/shaders/voxel_gi_debug.glsl
+++ b/servers/rendering/renderer_rd/shaders/environment/voxel_gi_debug.glsl
diff --git a/servers/rendering/renderer_rd/shaders/voxel_gi_sdf.glsl b/servers/rendering/renderer_rd/shaders/environment/voxel_gi_sdf.glsl
index 47a611a543..47a611a543 100644
--- a/servers/rendering/renderer_rd/shaders/voxel_gi_sdf.glsl
+++ b/servers/rendering/renderer_rd/shaders/environment/voxel_gi_sdf.glsl
diff --git a/servers/rendering/renderer_rd/shaders/scene_forward_clustered.glsl b/servers/rendering/renderer_rd/shaders/scene_forward_clustered.glsl
index 92c4fc3d67..5947fc5351 100644
--- a/servers/rendering/renderer_rd/shaders/scene_forward_clustered.glsl
+++ b/servers/rendering/renderer_rd/shaders/scene_forward_clustered.glsl
@@ -96,6 +96,8 @@ layout(set = MATERIAL_UNIFORM_SET, binding = 0, std140) uniform MaterialUniforms
} material;
#endif
+float global_time;
+
#ifdef MODE_DUAL_PARABOLOID
layout(location = 9) out float dp_clip;
@@ -386,9 +388,12 @@ void main() {
mat4 model_matrix = instances.data[instance_index].transform;
#if defined(MOTION_VECTORS)
+ global_time = scene_data_block.prev_data.time;
vertex_shader(instance_index, is_multimesh, scene_data_block.prev_data, instances.data[instance_index].prev_transform, prev_screen_position);
+ global_time = scene_data_block.data.time;
vertex_shader(instance_index, is_multimesh, scene_data_block.data, model_matrix, screen_position);
#else
+ global_time = scene_data_block.data.time;
vec4 screen_position;
vertex_shader(instance_index, is_multimesh, scene_data_block.data, model_matrix, screen_position);
#endif
@@ -486,6 +491,8 @@ layout(location = 10) in flat uint instance_index_interp;
#define inv_projection_matrix scene_data.inv_projection_matrix
#endif
+#define global_time scene_data_block.data.time
+
#if defined(ENABLE_SSS) && defined(ENABLE_TRANSMITTANCE)
//both required for transmittance to be enabled
#define LIGHT_TRANSMITTANCE_USED
@@ -634,7 +641,11 @@ void fragment_shader(in SceneData scene_data) {
//lay out everything, whatever is unused is optimized away anyway
vec3 vertex = vertex_interp;
+#ifdef USE_MULTIVIEW
+ vec3 view = -normalize(vertex_interp - scene_data.eye_offset[ViewIndex].xyz);
+#else
vec3 view = -normalize(vertex_interp);
+#endif
vec3 albedo = vec3(1.0);
vec3 backlight = vec3(0.0);
vec4 transmittance_color = vec4(0.0, 0.0, 0.0, 1.0);
@@ -1191,7 +1202,7 @@ void fragment_shader(in SceneData scene_data) {
if (sc_use_forward_gi && bool(instances.data[instance_index].flags & INSTANCE_FLAGS_USE_VOXEL_GI)) { // process voxel_gi_instances
uint index1 = instances.data[instance_index].gi_offset & 0xFFFF;
- vec3 ref_vec = normalize(reflect(normalize(vertex), normal));
+ vec3 ref_vec = normalize(reflect(-view, normal));
//find arbitrary tangent and bitangent, then build a matrix
vec3 v0 = abs(normal.z) < 0.999 ? vec3(0.0, 0.0, 1.0) : vec3(0.0, 1.0, 0.0);
vec3 tangent = normalize(cross(v0, normal));
@@ -1227,12 +1238,20 @@ void fragment_shader(in SceneData scene_data) {
if (scene_data.gi_upscale_for_msaa) {
vec2 base_coord = screen_uv;
vec2 closest_coord = base_coord;
+#ifdef USE_MULTIVIEW
+ float closest_ang = dot(normal, textureLod(sampler2DArray(normal_roughness_buffer, material_samplers[SAMPLER_LINEAR_CLAMP]), vec3(base_coord, ViewIndex), 0.0).xyz * 2.0 - 1.0);
+#else // USE_MULTIVIEW
float closest_ang = dot(normal, textureLod(sampler2D(normal_roughness_buffer, material_samplers[SAMPLER_LINEAR_CLAMP]), base_coord, 0.0).xyz * 2.0 - 1.0);
+#endif // USE_MULTIVIEW
for (int i = 0; i < 4; i++) {
const vec2 neighbours[4] = vec2[](vec2(-1, 0), vec2(1, 0), vec2(0, -1), vec2(0, 1));
vec2 neighbour_coord = base_coord + neighbours[i] * scene_data.screen_pixel_size;
+#ifdef USE_MULTIVIEW
+ float neighbour_ang = dot(normal, textureLod(sampler2DArray(normal_roughness_buffer, material_samplers[SAMPLER_LINEAR_CLAMP]), vec3(neighbour_coord, ViewIndex), 0.0).xyz * 2.0 - 1.0);
+#else // USE_MULTIVIEW
float neighbour_ang = dot(normal, textureLod(sampler2D(normal_roughness_buffer, material_samplers[SAMPLER_LINEAR_CLAMP]), neighbour_coord, 0.0).xyz * 2.0 - 1.0);
+#endif // USE_MULTIVIEW
if (neighbour_ang > closest_ang) {
closest_ang = neighbour_ang;
closest_coord = neighbour_coord;
@@ -1245,8 +1264,13 @@ void fragment_shader(in SceneData scene_data) {
coord = screen_uv;
}
+#ifdef USE_MULTIVIEW
+ vec4 buffer_ambient = textureLod(sampler2DArray(ambient_buffer, material_samplers[SAMPLER_LINEAR_CLAMP]), vec3(coord, ViewIndex), 0.0);
+ vec4 buffer_reflection = textureLod(sampler2DArray(reflection_buffer, material_samplers[SAMPLER_LINEAR_CLAMP]), vec3(coord, ViewIndex), 0.0);
+#else // USE_MULTIVIEW
vec4 buffer_ambient = textureLod(sampler2D(ambient_buffer, material_samplers[SAMPLER_LINEAR_CLAMP]), coord, 0.0);
vec4 buffer_reflection = textureLod(sampler2D(reflection_buffer, material_samplers[SAMPLER_LINEAR_CLAMP]), coord, 0.0);
+#endif // USE_MULTIVIEW
ambient_light = mix(ambient_light, buffer_ambient.rgb, buffer_ambient.a);
specular_light = mix(specular_light, buffer_reflection.rgb, buffer_reflection.a);
@@ -1309,7 +1333,7 @@ void fragment_shader(in SceneData scene_data) {
#else
vec3 bent_normal = normal;
#endif
- reflection_process(reflection_index, vertex, bent_normal, roughness, ambient_light, specular_light, ambient_accum, reflection_accum);
+ reflection_process(reflection_index, view, vertex, bent_normal, roughness, ambient_light, specular_light, ambient_accum, reflection_accum);
}
}
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 b700e21543..0c23de96c3 100644
--- a/servers/rendering/renderer_rd/shaders/scene_forward_clustered_inc.glsl
+++ b/servers/rendering/renderer_rd/shaders/scene_forward_clustered_inc.glsl
@@ -180,6 +180,7 @@ struct SceneData {
// only used for multiview
mat4 projection_matrix_view[MAX_VIEWS];
mat4 inv_projection_matrix_view[MAX_VIEWS];
+ vec4 eye_offset[MAX_VIEWS];
vec2 viewport_size;
vec2 screen_pixel_size;
@@ -250,7 +251,7 @@ struct SceneData {
bool pancake_shadows;
vec2 taa_jitter;
- uvec2 pad;
+ uvec2 pad2;
};
layout(set = 1, binding = 0, std140) uniform SceneDataBlock {
@@ -316,10 +317,16 @@ layout(r32ui, set = 1, binding = 12) uniform restrict uimage3D geom_facing_grid;
layout(set = 1, binding = 9) uniform texture2D depth_buffer;
layout(set = 1, binding = 10) uniform texture2D color_buffer;
+#ifdef USE_MULTIVIEW
+layout(set = 1, binding = 11) uniform texture2DArray normal_roughness_buffer;
+layout(set = 1, binding = 13) uniform texture2DArray ambient_buffer;
+layout(set = 1, binding = 14) uniform texture2DArray reflection_buffer;
+#else // USE_MULTIVIEW
layout(set = 1, binding = 11) uniform texture2D normal_roughness_buffer;
-layout(set = 1, binding = 12) uniform texture2D ao_buffer;
layout(set = 1, binding = 13) uniform texture2D ambient_buffer;
layout(set = 1, binding = 14) uniform texture2D reflection_buffer;
+#endif
+layout(set = 1, binding = 12) uniform texture2D ao_buffer;
layout(set = 1, binding = 15) uniform texture2DArray sdfgi_lightprobe_texture;
layout(set = 1, binding = 16) uniform texture3D sdfgi_occlusion_cascades;
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 5a308bbd02..c92b29b14a 100644
--- a/servers/rendering/renderer_rd/shaders/scene_forward_lights_inc.glsl
+++ b/servers/rendering/renderer_rd/shaders/scene_forward_lights_inc.glsl
@@ -869,7 +869,7 @@ void light_process_spot(uint idx, vec3 vertex, vec3 eye_vec, vec3 normal, vec3 v
diffuse_light, specular_light);
}
-void reflection_process(uint ref_index, vec3 vertex, vec3 normal, float roughness, vec3 ambient_light, vec3 specular_light, inout vec4 ambient_accum, inout vec4 reflection_accum) {
+void reflection_process(uint ref_index, vec3 view, vec3 vertex, vec3 normal, float roughness, vec3 ambient_light, vec3 specular_light, inout vec4 ambient_accum, inout vec4 reflection_accum) {
vec3 box_extents = reflections.data[ref_index].box_extents;
vec3 local_pos = (reflections.data[ref_index].local_matrix * vec4(vertex, 1.0)).xyz;
@@ -877,7 +877,7 @@ void reflection_process(uint ref_index, vec3 vertex, vec3 normal, float roughnes
return;
}
- vec3 ref_vec = normalize(reflect(vertex, normal));
+ vec3 ref_vec = normalize(reflect(-view, normal));
vec3 inner_pos = abs(local_pos / box_extents);
float blend = max(inner_pos.x, max(inner_pos.y, inner_pos.z));
diff --git a/servers/rendering/renderer_rd/shaders/scene_forward_mobile.glsl b/servers/rendering/renderer_rd/shaders/scene_forward_mobile.glsl
index e15ebbfc91..26d0de46c2 100644
--- a/servers/rendering/renderer_rd/shaders/scene_forward_mobile.glsl
+++ b/servers/rendering/renderer_rd/shaders/scene_forward_mobile.glsl
@@ -114,9 +114,9 @@ invariant gl_Position;
#GLOBALS
-void main() {
- SceneData scene_data = scene_data_block.data;
+#define scene_data scene_data_block.data
+void main() {
vec4 instance_custom = vec4(0.0);
#if defined(COLOR_USED)
color_interp = color_attrib;
@@ -576,17 +576,22 @@ vec4 fog_process(vec3 vertex) {
#endif //!MODE_RENDER DEPTH
+#define scene_data scene_data_block.data
+
void main() {
#ifdef MODE_DUAL_PARABOLOID
if (dp_clip > 0.0)
discard;
#endif
- SceneData scene_data = scene_data_block.data;
//lay out everything, whatever is unused is optimized away anyway
vec3 vertex = vertex_interp;
+#ifdef USE_MULTIVIEW
+ vec3 view = -normalize(vertex_interp - scene_data.eye_offset[ViewIndex].xyz);
+#else
vec3 view = -normalize(vertex_interp);
+#endif
vec3 albedo = vec3(1.0);
vec3 backlight = vec3(0.0);
vec4 transmittance_color = vec4(0.0);
@@ -1051,7 +1056,7 @@ void main() {
#else
vec3 bent_normal = normal;
#endif
- reflection_process(reflection_index, vertex, bent_normal, roughness, ambient_light, specular_light, ambient_accum, reflection_accum);
+ reflection_process(reflection_index, view, vertex, bent_normal, roughness, ambient_light, specular_light, ambient_accum, reflection_accum);
}
if (reflection_accum.a > 0.0) {
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 dd14a15837..7413d8730a 100644
--- a/servers/rendering/renderer_rd/shaders/scene_forward_mobile_inc.glsl
+++ b/servers/rendering/renderer_rd/shaders/scene_forward_mobile_inc.glsl
@@ -134,6 +134,7 @@ struct SceneData {
// only used for multiview
highp mat4 projection_matrix_view[MAX_VIEWS];
highp mat4 inv_projection_matrix_view[MAX_VIEWS];
+ highp vec4 eye_offset[MAX_VIEWS];
highp vec2 viewport_size;
highp vec2 screen_pixel_size;
diff --git a/servers/rendering/renderer_rd/shaders/volumetric_fog_process.glsl b/servers/rendering/renderer_rd/shaders/volumetric_fog_process.glsl
index 347fd13b28..fdbd7d3e35 100644
--- a/servers/rendering/renderer_rd/shaders/volumetric_fog_process.glsl
+++ b/servers/rendering/renderer_rd/shaders/volumetric_fog_process.glsl
@@ -53,7 +53,6 @@ layout(set = 0, binding = 7) uniform sampler linear_sampler;
#ifdef MODE_DENSITY
layout(rgba16f, set = 0, binding = 8) uniform restrict writeonly image3D density_map;
-layout(rgba16f, set = 0, binding = 9) uniform restrict readonly image3D fog_map; //unused
#endif
#ifdef MODE_FOG
diff --git a/servers/rendering/renderer_rd/uniform_set_cache_rd.h b/servers/rendering/renderer_rd/uniform_set_cache_rd.h
index e49cf4dafa..af22a48716 100644
--- a/servers/rendering/renderer_rd/uniform_set_cache_rd.h
+++ b/servers/rendering/renderer_rd/uniform_set_cache_rd.h
@@ -57,13 +57,13 @@ class UniformSetCacheRD : public Object {
Cache *hash_table[HASH_TABLE_SIZE] = {};
static _FORCE_INLINE_ uint32_t _hash_uniform(const RD::Uniform &u, uint32_t h) {
- h = hash_djb2_one_32(u.uniform_type, h);
- h = hash_djb2_one_32(u.binding, h);
+ h = hash_murmur3_one_32(u.uniform_type, h);
+ h = hash_murmur3_one_32(u.binding, h);
uint32_t rsize = u.get_id_count();
for (uint32_t j = 0; j < rsize; j++) {
- h = hash_djb2_one_64(u.get_id(j).get_id(), h);
+ h = hash_murmur3_one_64(u.get_id(j).get_id(), h);
}
- return h;
+ return hash_fmix32(h);
}
static _FORCE_INLINE_ bool _compare_uniform(const RD::Uniform &a, const RD::Uniform &b) {
@@ -154,8 +154,8 @@ class UniformSetCacheRD : public Object {
public:
template <typename... Args>
RID get_cache(RID p_shader, uint32_t p_set, Args... args) {
- uint32_t h = hash_djb2_one_64(p_shader.get_id());
- h = hash_djb2_one_32(p_set, h);
+ uint32_t h = hash_murmur3_one_64(p_shader.get_id());
+ h = hash_murmur3_one_32(p_set, h);
h = _hash_args(h, args...);
uint32_t table_idx = h % HASH_TABLE_SIZE;
@@ -180,12 +180,14 @@ public:
template <typename... Args>
RID get_cache_vec(RID p_shader, uint32_t p_set, const Vector<RD::Uniform> &p_uniforms) {
- uint32_t h = hash_djb2_one_64(p_shader.get_id());
- h = hash_djb2_one_32(p_set, h);
+ uint32_t h = hash_murmur3_one_64(p_shader.get_id());
+ h = hash_murmur3_one_32(p_set, h);
for (int i = 0; i < p_uniforms.size(); i++) {
h = _hash_uniform(p_uniforms[i], h);
}
+ h = hash_fmix32(h);
+
uint32_t table_idx = h % HASH_TABLE_SIZE;
{
const Cache *c = hash_table[table_idx];
diff --git a/servers/rendering/renderer_scene_cull.cpp b/servers/rendering/renderer_scene_cull.cpp
index 6f427272b5..325907ee85 100644
--- a/servers/rendering/renderer_scene_cull.cpp
+++ b/servers/rendering/renderer_scene_cull.cpp
@@ -1894,7 +1894,7 @@ void RendererSceneCull::_update_instance_aabb(Instance *p_instance) {
} break;
case RenderingServer::INSTANCE_VOXEL_GI: {
- new_aabb = RSG::storage->voxel_gi_get_bounds(p_instance->base);
+ new_aabb = RSG::gi->voxel_gi_get_bounds(p_instance->base);
} break;
case RenderingServer::INSTANCE_LIGHTMAP: {
@@ -3282,7 +3282,7 @@ void RendererSceneCull::render_empty_scene(RID p_render_buffers, RID p_scenario,
RendererSceneRender::CameraData camera_data;
camera_data.set_camera(Transform3D(), CameraMatrix(), true, false);
- scene_render->render_scene(p_render_buffers, &camera_data, nullptr, PagedArray<RendererSceneRender::GeometryInstance *>(), PagedArray<RID>(), PagedArray<RID>(), PagedArray<RID>(), PagedArray<RID>(), PagedArray<RID>(), PagedArray<RID>(), RID(), RID(), p_shadow_atlas, RID(), scenario->reflection_atlas, RID(), 0, 0, nullptr, 0, nullptr, 0, nullptr);
+ scene_render->render_scene(p_render_buffers, &camera_data, &camera_data, PagedArray<RendererSceneRender::GeometryInstance *>(), PagedArray<RID>(), PagedArray<RID>(), PagedArray<RID>(), PagedArray<RID>(), PagedArray<RID>(), PagedArray<RID>(), RID(), RID(), p_shadow_atlas, RID(), scenario->reflection_atlas, RID(), 0, 0, nullptr, 0, nullptr, 0, nullptr);
#endif
}
diff --git a/servers/rendering/renderer_scene_cull.h b/servers/rendering/renderer_scene_cull.h
index d1d3484871..4880221586 100644
--- a/servers/rendering/renderer_scene_cull.h
+++ b/servers/rendering/renderer_scene_cull.h
@@ -526,7 +526,7 @@ public:
receive_shadows = true;
visible = true;
layer_mask = 1;
- baked_light = false;
+ baked_light = true;
dynamic_gi = false;
redraw_if_visible = false;
lightmap_slice_index = 0;
diff --git a/servers/rendering/renderer_storage.h b/servers/rendering/renderer_storage.h
index bb4acab582..859950673e 100644
--- a/servers/rendering/renderer_storage.h
+++ b/servers/rendering/renderer_storage.h
@@ -122,48 +122,6 @@ public:
virtual void base_update_dependency(RID p_base, DependencyTracker *p_instance) = 0;
- /* VOXEL GI API */
-
- virtual RID voxel_gi_allocate() = 0;
- virtual void voxel_gi_initialize(RID p_rid) = 0;
-
- virtual void voxel_gi_allocate_data(RID p_voxel_gi, const Transform3D &p_to_cell_xform, const AABB &p_aabb, const Vector3i &p_octree_size, const Vector<uint8_t> &p_octree_cells, const Vector<uint8_t> &p_data_cells, const Vector<uint8_t> &p_distance_field, const Vector<int> &p_level_counts) = 0;
-
- virtual AABB voxel_gi_get_bounds(RID p_voxel_gi) const = 0;
- virtual Vector3i voxel_gi_get_octree_size(RID p_voxel_gi) const = 0;
- virtual Vector<uint8_t> voxel_gi_get_octree_cells(RID p_voxel_gi) const = 0;
- virtual Vector<uint8_t> voxel_gi_get_data_cells(RID p_voxel_gi) const = 0;
- virtual Vector<uint8_t> voxel_gi_get_distance_field(RID p_voxel_gi) const = 0;
-
- virtual Vector<int> voxel_gi_get_level_counts(RID p_voxel_gi) const = 0;
- virtual Transform3D voxel_gi_get_to_cell_xform(RID p_voxel_gi) const = 0;
-
- virtual void voxel_gi_set_dynamic_range(RID p_voxel_gi, float p_range) = 0;
- virtual float voxel_gi_get_dynamic_range(RID p_voxel_gi) const = 0;
-
- virtual void voxel_gi_set_propagation(RID p_voxel_gi, float p_range) = 0;
- virtual float voxel_gi_get_propagation(RID p_voxel_gi) const = 0;
-
- virtual void voxel_gi_set_energy(RID p_voxel_gi, float p_energy) = 0;
- virtual float voxel_gi_get_energy(RID p_voxel_gi) const = 0;
-
- virtual void voxel_gi_set_bias(RID p_voxel_gi, float p_bias) = 0;
- virtual float voxel_gi_get_bias(RID p_voxel_gi) const = 0;
-
- virtual void voxel_gi_set_normal_bias(RID p_voxel_gi, float p_range) = 0;
- virtual float voxel_gi_get_normal_bias(RID p_voxel_gi) const = 0;
-
- virtual void voxel_gi_set_interior(RID p_voxel_gi, bool p_enable) = 0;
- virtual bool voxel_gi_is_interior(RID p_voxel_gi) const = 0;
-
- virtual void voxel_gi_set_use_two_bounces(RID p_voxel_gi, bool p_enable) = 0;
- virtual bool voxel_gi_is_using_two_bounces(RID p_voxel_gi) const = 0;
-
- virtual void voxel_gi_set_anisotropy_strength(RID p_voxel_gi, float p_strength) = 0;
- virtual float voxel_gi_get_anisotropy_strength(RID p_voxel_gi) const = 0;
-
- virtual uint32_t voxel_gi_get_version(RID p_probe) = 0;
-
/* FOG VOLUMES */
virtual RID fog_volume_allocate() = 0;
diff --git a/servers/rendering/renderer_viewport.cpp b/servers/rendering/renderer_viewport.cpp
index 2e0c4e0f79..ab9ee2067f 100644
--- a/servers/rendering/renderer_viewport.cpp
+++ b/servers/rendering/renderer_viewport.cpp
@@ -1193,6 +1193,20 @@ void RendererViewport::viewport_set_sdf_oversize_and_scale(RID p_viewport, RS::V
RSG::texture_storage->render_target_set_sdf_size_and_scale(viewport->render_target, p_size, p_scale);
}
+RID RendererViewport::viewport_find_from_screen_attachment(DisplayServer::WindowID p_id) const {
+ RID *rids = nullptr;
+ uint32_t rid_count = viewport_owner.get_rid_count();
+ rids = (RID *)alloca(sizeof(RID *) * rid_count);
+ viewport_owner.fill_owned_buffer(rids);
+ for (uint32_t i = 0; i < rid_count; i++) {
+ Viewport *viewport = viewport_owner.get_or_null(rids[i]);
+ if (viewport->viewport_to_screen == p_id) {
+ return rids[i];
+ }
+ }
+ return RID();
+}
+
bool RendererViewport::free(RID p_rid) {
if (viewport_owner.owns(p_rid)) {
Viewport *viewport = viewport_owner.get_or_null(p_rid);
diff --git a/servers/rendering/renderer_viewport.h b/servers/rendering/renderer_viewport.h
index 18385d1613..acab8063d1 100644
--- a/servers/rendering/renderer_viewport.h
+++ b/servers/rendering/renderer_viewport.h
@@ -282,6 +282,8 @@ public:
void viewport_set_sdf_oversize_and_scale(RID p_viewport, RS::ViewportSDFOversize p_over_size, RS::ViewportSDFScale p_scale);
+ virtual RID viewport_find_from_screen_attachment(DisplayServer::WindowID p_id = DisplayServer::MAIN_WINDOW_ID) const;
+
void handle_timestamp(String p_timestamp, uint64_t p_cpu_time, uint64_t p_gpu_time);
void set_default_clear_color(const Color &p_color);
diff --git a/servers/rendering/rendering_server_default.cpp b/servers/rendering/rendering_server_default.cpp
index 718f20f80a..7e035bae80 100644
--- a/servers/rendering/rendering_server_default.cpp
+++ b/servers/rendering/rendering_server_default.cpp
@@ -333,13 +333,10 @@ void RenderingServerDefault::_thread_exit() {
}
void RenderingServerDefault::_thread_draw(bool p_swap_buffers, double frame_step) {
- if (!draw_pending.decrement()) {
- _draw(p_swap_buffers, frame_step);
- }
+ _draw(p_swap_buffers, frame_step);
}
void RenderingServerDefault::_thread_flush() {
- draw_pending.decrement();
}
void RenderingServerDefault::_thread_callback(void *_instance) {
@@ -370,7 +367,6 @@ void RenderingServerDefault::_thread_loop() {
void RenderingServerDefault::sync() {
if (create_thread) {
- draw_pending.increment();
command_queue.push_and_sync(this, &RenderingServerDefault::_thread_flush);
} else {
command_queue.flush_all(); //flush all pending from other threads
@@ -379,7 +375,6 @@ void RenderingServerDefault::sync() {
void RenderingServerDefault::draw(bool p_swap_buffers, double frame_step) {
if (create_thread) {
- draw_pending.increment();
command_queue.push(this, &RenderingServerDefault::_thread_draw, p_swap_buffers, frame_step);
} else {
_draw(p_swap_buffers, frame_step);
@@ -409,6 +404,7 @@ RenderingServerDefault::RenderingServerDefault(bool p_create_thread) :
RSG::mesh_storage = RSG::rasterizer->get_mesh_storage();
RSG::particles_storage = RSG::rasterizer->get_particles_storage();
RSG::texture_storage = RSG::rasterizer->get_texture_storage();
+ RSG::gi = RSG::rasterizer->get_gi();
RSG::storage = RSG::rasterizer->get_storage();
RSG::canvas_render = RSG::rasterizer->get_canvas();
sr->set_scene_render(RSG::rasterizer->get_scene());
diff --git a/servers/rendering/rendering_server_default.h b/servers/rendering/rendering_server_default.h
index 6008f2b00e..aef89619db 100644
--- a/servers/rendering/rendering_server_default.h
+++ b/servers/rendering/rendering_server_default.h
@@ -84,7 +84,6 @@ class RenderingServerDefault : public RenderingServer {
SafeFlag draw_thread_up;
bool create_thread;
- SafeNumeric<uint64_t> draw_pending;
void _thread_draw(bool p_swap_buffers, double frame_step);
void _thread_flush();
@@ -436,8 +435,8 @@ public:
#undef ServerName
#undef server_name
-#define ServerName RendererStorage
-#define server_name RSG::storage
+#define ServerName RendererGI
+#define server_name RSG::gi
FUNCRIDSPLIT(voxel_gi)
@@ -629,6 +628,7 @@ public:
FUNC2(viewport_set_measure_render_time, RID, bool)
FUNC1RC(double, viewport_get_measured_render_time_cpu, RID)
FUNC1RC(double, viewport_get_measured_render_time_gpu, RID)
+ FUNC1RC(RID, viewport_find_from_screen_attachment, DisplayServer::WindowID)
FUNC2(call_set_vsync_mode, DisplayServer::VSyncMode, DisplayServer::WindowID)
diff --git a/servers/rendering/rendering_server_globals.cpp b/servers/rendering/rendering_server_globals.cpp
index 4d24dbf3b4..1c2a275265 100644
--- a/servers/rendering/rendering_server_globals.cpp
+++ b/servers/rendering/rendering_server_globals.cpp
@@ -37,6 +37,7 @@ RendererMaterialStorage *RenderingServerGlobals::material_storage = nullptr;
RendererMeshStorage *RenderingServerGlobals::mesh_storage = nullptr;
RendererParticlesStorage *RenderingServerGlobals::particles_storage = nullptr;
RendererTextureStorage *RenderingServerGlobals::texture_storage = nullptr;
+RendererGI *RenderingServerGlobals::gi = nullptr;
RendererStorage *RenderingServerGlobals::storage = nullptr;
RendererCanvasRender *RenderingServerGlobals::canvas_render = nullptr;
RendererCompositor *RenderingServerGlobals::rasterizer = nullptr;
diff --git a/servers/rendering/rendering_server_globals.h b/servers/rendering/rendering_server_globals.h
index ce11fae9e8..91712f2a51 100644
--- a/servers/rendering/rendering_server_globals.h
+++ b/servers/rendering/rendering_server_globals.h
@@ -31,6 +31,7 @@
#ifndef RENDERING_SERVER_GLOBALS_H
#define RENDERING_SERVER_GLOBALS_H
+#include "servers/rendering/environment/renderer_gi.h"
#include "servers/rendering/renderer_canvas_cull.h"
#include "servers/rendering/renderer_canvas_render.h"
#include "servers/rendering/renderer_scene.h"
@@ -53,6 +54,7 @@ public:
static RendererMeshStorage *mesh_storage;
static RendererParticlesStorage *particles_storage;
static RendererTextureStorage *texture_storage;
+ static RendererGI *gi;
static RendererStorage *storage;
static RendererCanvasRender *canvas_render;
static RendererCompositor *rasterizer;
diff --git a/servers/rendering_server.cpp b/servers/rendering_server.cpp
index 26ab8b659e..9b407043fc 100644
--- a/servers/rendering_server.cpp
+++ b/servers/rendering_server.cpp
@@ -2934,10 +2934,10 @@ void RenderingServer::init() {
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);
+ GLOBAL_DEF("rendering/scaling_3d/mode", 0);
+ GLOBAL_DEF("rendering/scaling_3d/scale", 1.0);
+ GLOBAL_DEF("rendering/scaling_3d/fsr_sharpness", 0.2f);
+ GLOBAL_DEF("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",
diff --git a/servers/rendering_server.h b/servers/rendering_server.h
index 39484e532a..ccef95f5f2 100644
--- a/servers/rendering_server.h
+++ b/servers/rendering_server.h
@@ -944,6 +944,8 @@ public:
virtual double viewport_get_measured_render_time_cpu(RID p_viewport) const = 0;
virtual double viewport_get_measured_render_time_gpu(RID p_viewport) const = 0;
+ virtual RID viewport_find_from_screen_attachment(DisplayServer::WindowID p_id = DisplayServer::MAIN_WINDOW_ID) const = 0;
+
/* SKY API */
enum SkyMode {
diff --git a/servers/text_server.cpp b/servers/text_server.cpp
index 41d9c74d82..fe5ade88a1 100644
--- a/servers/text_server.cpp
+++ b/servers/text_server.cpp
@@ -413,7 +413,7 @@ void TextServer::_bind_methods() {
ClassDB::bind_method(D_METHOD("shaped_text_get_ellipsis_glyphs", "shaped"), &TextServer::_shaped_text_get_ellipsis_glyphs_wrapper);
ClassDB::bind_method(D_METHOD("shaped_text_get_ellipsis_glyph_count", "shaped"), &TextServer::shaped_text_get_ellipsis_glyph_count);
- ClassDB::bind_method(D_METHOD("shaped_text_overrun_trim_to_width", "shaped", "width", "overrun_trim_flags"), &TextServer::shaped_text_overrun_trim_to_width, DEFVAL(0), DEFVAL(OVERRUN_NO_TRIMMING));
+ ClassDB::bind_method(D_METHOD("shaped_text_overrun_trim_to_width", "shaped", "width", "overrun_trim_flags"), &TextServer::shaped_text_overrun_trim_to_width, DEFVAL(0), DEFVAL(OVERRUN_NO_TRIM));
ClassDB::bind_method(D_METHOD("shaped_text_get_objects", "shaped"), &TextServer::shaped_text_get_objects);
ClassDB::bind_method(D_METHOD("shaped_text_get_object_rect", "shaped", "key"), &TextServer::shaped_text_get_object_rect);
@@ -470,6 +470,12 @@ void TextServer::_bind_methods() {
BIND_ENUM_CONSTANT(JUSTIFICATION_AFTER_LAST_TAB);
BIND_ENUM_CONSTANT(JUSTIFICATION_CONSTRAIN_ELLIPSIS);
+ /* AutowrapMode */
+ BIND_ENUM_CONSTANT(AUTOWRAP_OFF);
+ BIND_ENUM_CONSTANT(AUTOWRAP_ARBITRARY);
+ BIND_ENUM_CONSTANT(AUTOWRAP_WORD);
+ BIND_ENUM_CONSTANT(AUTOWRAP_WORD_SMART);
+
/* LineBreakFlag */
BIND_ENUM_CONSTANT(BREAK_NONE);
BIND_ENUM_CONSTANT(BREAK_MANDATORY);
@@ -477,8 +483,22 @@ void TextServer::_bind_methods() {
BIND_ENUM_CONSTANT(BREAK_GRAPHEME_BOUND);
BIND_ENUM_CONSTANT(BREAK_WORD_BOUND_ADAPTIVE);
- /* TextOverrunFlag */
+ /* VisibleCharactersBehavior */
+ BIND_ENUM_CONSTANT(VC_CHARS_BEFORE_SHAPING);
+ BIND_ENUM_CONSTANT(VC_CHARS_AFTER_SHAPING);
+ BIND_ENUM_CONSTANT(VC_GLYPHS_AUTO);
+ BIND_ENUM_CONSTANT(VC_GLYPHS_LTR);
+ BIND_ENUM_CONSTANT(VC_GLYPHS_RTL);
+
+ /* OverrunBehavior */
BIND_ENUM_CONSTANT(OVERRUN_NO_TRIMMING);
+ BIND_ENUM_CONSTANT(OVERRUN_TRIM_CHAR);
+ BIND_ENUM_CONSTANT(OVERRUN_TRIM_WORD);
+ BIND_ENUM_CONSTANT(OVERRUN_TRIM_ELLIPSIS);
+ BIND_ENUM_CONSTANT(OVERRUN_TRIM_WORD_ELLIPSIS);
+
+ /* TextOverrunFlag */
+ BIND_ENUM_CONSTANT(OVERRUN_NO_TRIM);
BIND_ENUM_CONSTANT(OVERRUN_TRIM);
BIND_ENUM_CONSTANT(OVERRUN_TRIM_WORD_ONLY);
BIND_ENUM_CONSTANT(OVERRUN_ADD_ELLIPSIS);
diff --git a/servers/text_server.h b/servers/text_server.h
index a67ad8fc9e..6339dde0ea 100644
--- a/servers/text_server.h
+++ b/servers/text_server.h
@@ -64,6 +64,21 @@ public:
JUSTIFICATION_CONSTRAIN_ELLIPSIS = 1 << 4,
};
+ enum VisibleCharactersBehavior {
+ VC_CHARS_BEFORE_SHAPING,
+ VC_CHARS_AFTER_SHAPING,
+ VC_GLYPHS_AUTO,
+ VC_GLYPHS_LTR,
+ VC_GLYPHS_RTL,
+ };
+
+ enum AutowrapMode {
+ AUTOWRAP_OFF,
+ AUTOWRAP_ARBITRARY,
+ AUTOWRAP_WORD,
+ AUTOWRAP_WORD_SMART
+ };
+
enum LineBreakFlag { // LineBreakFlag can be passed in the same value as the JustificationFlag, do not use the same values.
BREAK_NONE = 0,
BREAK_MANDATORY = 1 << 5,
@@ -72,8 +87,16 @@ public:
BREAK_WORD_BOUND_ADAPTIVE = 1 << 6 | 1 << 8,
};
+ enum OverrunBehavior {
+ OVERRUN_NO_TRIMMING,
+ OVERRUN_TRIM_CHAR,
+ OVERRUN_TRIM_WORD,
+ OVERRUN_TRIM_ELLIPSIS,
+ OVERRUN_TRIM_WORD_ELLIPSIS,
+ };
+
enum TextOverrunFlag {
- OVERRUN_NO_TRIMMING = 0,
+ OVERRUN_NO_TRIM = 0,
OVERRUN_TRIM = 1 << 0,
OVERRUN_TRIM_WORD_ONLY = 1 << 1,
OVERRUN_ADD_ELLIPSIS = 1 << 2,
@@ -522,6 +545,9 @@ public:
#define TS TextServerManager::get_singleton()->get_primary_interface()
+VARIANT_ENUM_CAST(TextServer::VisibleCharactersBehavior);
+VARIANT_ENUM_CAST(TextServer::AutowrapMode);
+VARIANT_ENUM_CAST(TextServer::OverrunBehavior);
VARIANT_ENUM_CAST(TextServer::Direction);
VARIANT_ENUM_CAST(TextServer::Orientation);
VARIANT_ENUM_CAST(TextServer::JustificationFlag);
diff --git a/tests/core/math/test_astar.h b/tests/core/math/test_astar.h
index 1306d3c20e..9f5e98ef94 100644
--- a/tests/core/math/test_astar.h
+++ b/tests/core/math/test_astar.h
@@ -58,7 +58,7 @@ public:
}
// Disable heuristic completely.
- real_t _compute_cost(int p_from, int p_to) {
+ real_t _compute_cost(int64_t p_from, int64_t p_to) {
if (p_from == A && p_to == C) {
return 1000;
}
@@ -68,7 +68,7 @@ public:
TEST_CASE("[AStar3D] ABC path") {
ABCX abcx;
- Vector<int> path = abcx.get_id_path(ABCX::A, ABCX::C);
+ Vector<int64_t> path = abcx.get_id_path(ABCX::A, ABCX::C);
REQUIRE(path.size() == 3);
CHECK(path[0] == ABCX::A);
CHECK(path[1] == ABCX::B);
@@ -77,7 +77,7 @@ TEST_CASE("[AStar3D] ABC path") {
TEST_CASE("[AStar3D] ABCX path") {
ABCX abcx;
- Vector<int> path = abcx.get_id_path(ABCX::X, ABCX::C);
+ Vector<int64_t> path = abcx.get_id_path(ABCX::X, ABCX::C);
REQUIRE(path.size() == 4);
CHECK(path[0] == ABCX::X);
CHECK(path[1] == ABCX::A);
@@ -318,7 +318,7 @@ TEST_CASE("[Stress][AStar3D] Find paths") {
for (int u = 0; u < N; u++) {
for (int v = 0; v < N; v++) {
if (u != v) {
- Vector<int> route = a.get_id_path(u, v);
+ Vector<int64_t> route = a.get_id_path(u, v);
if (!Math::is_inf(d[u][v])) {
// Reachable.
if (route.size() == 0) {
diff --git a/tests/core/object/test_class_db.h b/tests/core/object/test_class_db.h
index 8aaca69d13..7ea9e16ff1 100644
--- a/tests/core/object/test_class_db.h
+++ b/tests/core/object/test_class_db.h
@@ -46,7 +46,7 @@ struct TypeReference {
struct ConstantData {
String name;
- int value = 0;
+ int64_t value = 0;
};
struct EnumData {
@@ -743,7 +743,7 @@ void add_exposed_classes(Context &r_context) {
TEST_FAIL_COND(String(constant_name).find("::") != -1,
"Enum constant contains '::', check bindings to remove the scope: '",
String(class_name), ".", String(enum_.name), ".", String(constant_name), "'.");
- int *value = class_info->constant_map.getptr(constant_name);
+ int64_t *value = class_info->constant_map.getptr(constant_name);
TEST_FAIL_COND(!value, "Missing enum constant value: '",
String(class_name), ".", String(enum_.name), ".", String(constant_name), "'.");
constants.erase(constant_name);
@@ -765,7 +765,7 @@ void add_exposed_classes(Context &r_context) {
TEST_FAIL_COND(constant_name.find("::") != -1,
"Constant contains '::', check bindings to remove the scope: '",
String(class_name), ".", constant_name, "'.");
- int *value = class_info->constant_map.getptr(StringName(E));
+ int64_t *value = class_info->constant_map.getptr(StringName(E));
TEST_FAIL_COND(!value, "Missing constant value: '", String(class_name), ".", String(constant_name), "'.");
ConstantData constant;
diff --git a/thirdparty/README.md b/thirdparty/README.md
index 3b6932b3e1..ed8eb9f48f 100644
--- a/thirdparty/README.md
+++ b/thirdparty/README.md
@@ -62,7 +62,7 @@ Files extracted from upstream source:
## doctest
- Upstream: https://github.com/onqtam/doctest
-- Version: 2.4.8 (7b9885133108ae301ddd16e2651320f54cafeba7, 2022)
+- Version: 2.4.9 (b7c21ec5ceeadb4951b00396fc1e4642dd347e5f, 2022)
- License: MIT
Files extracted from upstream source:
@@ -118,7 +118,7 @@ will limit its functionality to IPv4 only.
## etcpak
- Upstream: https://github.com/wolfpld/etcpak
-- Version: 1.0 (a77d5a37ddf48034cee8aeb9e8792a623c265b4c, 2022)
+- Version: 1.0 (153f0e04a18b93c277684b577365210adcf8e11c, 2022)
- License: BSD-3-Clause
Files extracted from upstream source:
@@ -254,6 +254,7 @@ Files generated from upstream source:
Files extracted from upstream source:
- `jpgd*.{c,h}`
+- `jpge*.{c,h}`
## libogg
@@ -525,7 +526,7 @@ Patch files are provided in `oidn/patches/`.
## openxr
- Upstream: https://github.com/KhronosGroup/OpenXR-SDK
-- Version: 1.0.22 (458984d7f59d1ae6dc1b597d94b02e4f7132eaba, 2022)
+- Version: 1.0.23 (885a90f8934d84121344ba8e4aa5159d5b496e08, 2022)
- License: Apache 2.0
Files extracted from upstream source:
@@ -758,7 +759,7 @@ Files extracted from upstream source:
## zstd
- Upstream: https://github.com/facebook/zstd
-- Version: 1.5.0 (a488ba114ec17ea1054b9057c26a046fc122b3b6, 2021)
+- Version: 1.5.2 (e47e674cd09583ff0503f0f6defd6d23d8b718d3, 2022)
- License: BSD-3-Clause
Files extracted from upstream source:
diff --git a/thirdparty/doctest/doctest.h b/thirdparty/doctest/doctest.h
index d25f526827..aa2724c738 100644
--- a/thirdparty/doctest/doctest.h
+++ b/thirdparty/doctest/doctest.h
@@ -48,7 +48,7 @@
#define DOCTEST_VERSION_MAJOR 2
#define DOCTEST_VERSION_MINOR 4
-#define DOCTEST_VERSION_PATCH 8
+#define DOCTEST_VERSION_PATCH 9
// util we need here
#define DOCTEST_TOSTR_IMPL(x) #x
@@ -68,6 +68,12 @@
// ideas for the version stuff are taken from here: https://github.com/cxxstuff/cxx_detect
+#ifdef _MSC_VER
+#define DOCTEST_CPLUSPLUS _MSVC_LANG
+#else
+#define DOCTEST_CPLUSPLUS __cplusplus
+#endif
+
#define DOCTEST_COMPILER(MAJOR, MINOR, PATCH) ((MAJOR)*10000000 + (MINOR)*100000 + (PATCH))
// GCC/Clang and GCC/MSVC are mutually exclusive, but Clang/MSVC are not because of clang-cl...
@@ -153,7 +159,6 @@
DOCTEST_CLANG_SUPPRESS_WARNING("-Wweak-vtables") \
DOCTEST_CLANG_SUPPRESS_WARNING("-Wpadded") \
DOCTEST_CLANG_SUPPRESS_WARNING("-Wmissing-prototypes") \
- DOCTEST_CLANG_SUPPRESS_WARNING("-Wunused-local-typedef") \
DOCTEST_CLANG_SUPPRESS_WARNING("-Wc++98-compat") \
DOCTEST_CLANG_SUPPRESS_WARNING("-Wc++98-compat-pedantic") \
\
@@ -164,7 +169,6 @@
DOCTEST_GCC_SUPPRESS_WARNING("-Wstrict-overflow") \
DOCTEST_GCC_SUPPRESS_WARNING("-Wstrict-aliasing") \
DOCTEST_GCC_SUPPRESS_WARNING("-Wmissing-declarations") \
- DOCTEST_GCC_SUPPRESS_WARNING("-Wunused-local-typedefs") \
DOCTEST_GCC_SUPPRESS_WARNING("-Wuseless-cast") \
DOCTEST_GCC_SUPPRESS_WARNING("-Wnoexcept") \
\
@@ -231,7 +235,8 @@ DOCTEST_MSVC_SUPPRESS_WARNING(4623) // default constructor was implicitly define
DOCTEST_MSVC_SUPPRESS_WARNING(4623) /* default constructor was implicitly deleted */ \
DOCTEST_MSVC_SUPPRESS_WARNING(5039) /* pointer to pot. throwing function passed to extern C */ \
DOCTEST_MSVC_SUPPRESS_WARNING(5045) /* Spectre mitigation for memory load */ \
- DOCTEST_MSVC_SUPPRESS_WARNING(5105) /* macro producing 'defined' has undefined behavior */
+ DOCTEST_MSVC_SUPPRESS_WARNING(5105) /* macro producing 'defined' has undefined behavior */ \
+ DOCTEST_MSVC_SUPPRESS_WARNING(4738) /* storing float result in memory, loss of performance */
#define DOCTEST_MAKE_STD_HEADERS_CLEAN_FROM_WARNINGS_ON_WALL_END DOCTEST_MSVC_SUPPRESS_WARNING_POP
@@ -266,7 +271,7 @@ DOCTEST_MSVC_SUPPRESS_WARNING(4623) // default constructor was implicitly define
#endif // DOCTEST_CONFIG_NO_WINDOWS_SEH
#if !defined(_WIN32) && !defined(__QNX__) && !defined(DOCTEST_CONFIG_POSIX_SIGNALS) && \
- !defined(__EMSCRIPTEN__)
+ !defined(__EMSCRIPTEN__) && !defined(__wasi__)
#define DOCTEST_CONFIG_POSIX_SIGNALS
#endif // _WIN32
#if defined(DOCTEST_CONFIG_NO_POSIX_SIGNALS) && defined(DOCTEST_CONFIG_POSIX_SIGNALS)
@@ -274,7 +279,8 @@ DOCTEST_MSVC_SUPPRESS_WARNING(4623) // default constructor was implicitly define
#endif // DOCTEST_CONFIG_NO_POSIX_SIGNALS
#ifndef DOCTEST_CONFIG_NO_EXCEPTIONS
-#if !defined(__cpp_exceptions) && !defined(__EXCEPTIONS) && !defined(_CPPUNWIND)
+#if !defined(__cpp_exceptions) && !defined(__EXCEPTIONS) && !defined(_CPPUNWIND) \
+ || defined(__wasi__)
#define DOCTEST_CONFIG_NO_EXCEPTIONS
#endif // no exceptions
#endif // DOCTEST_CONFIG_NO_EXCEPTIONS
@@ -289,6 +295,10 @@ DOCTEST_MSVC_SUPPRESS_WARNING(4623) // default constructor was implicitly define
#define DOCTEST_CONFIG_NO_TRY_CATCH_IN_ASSERTS
#endif // DOCTEST_CONFIG_NO_EXCEPTIONS && !DOCTEST_CONFIG_NO_TRY_CATCH_IN_ASSERTS
+#ifdef __wasi__
+#define DOCTEST_CONFIG_NO_MULTITHREADING
+#endif
+
#if defined(DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN) && !defined(DOCTEST_CONFIG_IMPLEMENT)
#define DOCTEST_CONFIG_IMPLEMENT
#endif // DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN
@@ -316,6 +326,16 @@ DOCTEST_MSVC_SUPPRESS_WARNING(4623) // default constructor was implicitly define
#define DOCTEST_INTERFACE
#endif // DOCTEST_CONFIG_IMPLEMENTATION_IN_DLL
+// needed for extern template instantiations
+// see https://github.com/fmtlib/fmt/issues/2228
+#if DOCTEST_MSVC
+#define DOCTEST_INTERFACE_DECL
+#define DOCTEST_INTERFACE_DEF DOCTEST_INTERFACE
+#else // DOCTEST_MSVC
+#define DOCTEST_INTERFACE_DECL DOCTEST_INTERFACE
+#define DOCTEST_INTERFACE_DEF
+#endif // DOCTEST_MSVC
+
#define DOCTEST_EMPTY
#if DOCTEST_MSVC
@@ -351,8 +371,10 @@ DOCTEST_MSVC_SUPPRESS_WARNING(4623) // default constructor was implicitly define
#ifndef DOCTEST_CONSTEXPR
#if DOCTEST_MSVC && (DOCTEST_MSVC < DOCTEST_COMPILER(19, 0, 0))
#define DOCTEST_CONSTEXPR const
+#define DOCTEST_CONSTEXPR_FUNC inline
#else // DOCTEST_MSVC
#define DOCTEST_CONSTEXPR constexpr
+#define DOCTEST_CONSTEXPR_FUNC constexpr
#endif // DOCTEST_MSVC
#endif // DOCTEST_CONSTEXPR
@@ -360,6 +382,17 @@ DOCTEST_MSVC_SUPPRESS_WARNING(4623) // default constructor was implicitly define
// == FEATURE DETECTION END ========================================================================
// =================================================================================================
+#define DOCTEST_DECLARE_INTERFACE(name) \
+ virtual ~name(); \
+ name() = default; \
+ name(const name&) = delete; \
+ name(name&&) = delete; \
+ name& operator=(const name&) = delete; \
+ name& operator=(name&&) = delete;
+
+#define DOCTEST_DEFINE_INTERFACE(name) \
+ name::~name() = default;
+
// internal macros for string concatenation and anonymous variable name generation
#define DOCTEST_CAT_IMPL(s1, s2) s1##s2
#define DOCTEST_CAT(s1, s2) DOCTEST_CAT_IMPL(s1, s2)
@@ -382,17 +415,19 @@ DOCTEST_MSVC_SUPPRESS_WARNING(4623) // default constructor was implicitly define
#define DOCTEST_PLATFORM_IPHONE
#elif defined(_WIN32)
#define DOCTEST_PLATFORM_WINDOWS
+#elif defined(__wasi__)
+#define DOCTEST_PLATFORM_WASI
#else // DOCTEST_PLATFORM
#define DOCTEST_PLATFORM_LINUX
#endif // DOCTEST_PLATFORM
namespace doctest { namespace detail {
- static DOCTEST_CONSTEXPR int consume(const int*, int) { return 0; }
+ static DOCTEST_CONSTEXPR int consume(const int*, int) noexcept { return 0; }
}}
-#define DOCTEST_GLOBAL_NO_WARNINGS(var, ...) \
- DOCTEST_CLANG_SUPPRESS_WARNING_WITH_PUSH("-Wglobal-constructors") \
- static const int var = doctest::detail::consume(&var, __VA_ARGS__); \
+#define DOCTEST_GLOBAL_NO_WARNINGS(var, ...) \
+ DOCTEST_CLANG_SUPPRESS_WARNING_WITH_PUSH("-Wglobal-constructors") \
+ static const int var = doctest::detail::consume(&var, __VA_ARGS__); \
DOCTEST_CLANG_SUPPRESS_WARNING_POP
#ifndef DOCTEST_BREAK_INTO_DEBUGGER
@@ -400,16 +435,19 @@ namespace doctest { namespace detail {
#ifdef DOCTEST_PLATFORM_LINUX
#if defined(__GNUC__) && (defined(__i386) || defined(__x86_64))
// Break at the location of the failing check if possible
-#define DOCTEST_BREAK_INTO_DEBUGGER() __asm__("int $3\n" : :) // NOLINT (hicpp-no-assembler)
+#define DOCTEST_BREAK_INTO_DEBUGGER() __asm__("int $3\n" : :) // NOLINT(hicpp-no-assembler)
#else
#include <signal.h>
#define DOCTEST_BREAK_INTO_DEBUGGER() raise(SIGTRAP)
#endif
#elif defined(DOCTEST_PLATFORM_MAC)
#if defined(__x86_64) || defined(__x86_64__) || defined(__amd64__) || defined(__i386)
-#define DOCTEST_BREAK_INTO_DEBUGGER() __asm__("int $3\n" : :) // NOLINT (hicpp-no-assembler)
+#define DOCTEST_BREAK_INTO_DEBUGGER() __asm__("int $3\n" : :) // NOLINT(hicpp-no-assembler)
+#elif defined(__ppc__) || defined(__ppc64__)
+// https://www.cocoawithlove.com/2008/03/break-into-debugger.html
+#define DOCTEST_BREAK_INTO_DEBUGGER() __asm__("li r0, 20\nsc\nnop\nli r0, 37\nli r4, 2\nsc\nnop\n": : : "memory","r0","r3","r4") // NOLINT(hicpp-no-assembler)
#else
-#define DOCTEST_BREAK_INTO_DEBUGGER() __asm__("brk #0"); // NOLINT (hicpp-no-assembler)
+#define DOCTEST_BREAK_INTO_DEBUGGER() __asm__("brk #0"); // NOLINT(hicpp-no-assembler)
#endif
#elif DOCTEST_MSVC
#define DOCTEST_BREAK_INTO_DEBUGGER() __debugbreak()
@@ -425,7 +463,9 @@ DOCTEST_GCC_SUPPRESS_WARNING_POP
// this is kept here for backwards compatibility since the config option was changed
#ifdef DOCTEST_CONFIG_USE_IOSFWD
+#ifndef DOCTEST_CONFIG_USE_STD_HEADERS
#define DOCTEST_CONFIG_USE_STD_HEADERS
+#endif
#endif // DOCTEST_CONFIG_USE_IOSFWD
// for clang - always include ciso646 (which drags some std stuff) because
@@ -436,7 +476,9 @@ DOCTEST_GCC_SUPPRESS_WARNING_POP
#if DOCTEST_CLANG
#include <ciso646>
#ifdef _LIBCPP_VERSION
+#ifndef DOCTEST_CONFIG_USE_STD_HEADERS
#define DOCTEST_CONFIG_USE_STD_HEADERS
+#endif
#endif // _LIBCPP_VERSION
#endif // clang
@@ -444,26 +486,32 @@ DOCTEST_GCC_SUPPRESS_WARNING_POP
#ifndef DOCTEST_CONFIG_INCLUDE_TYPE_TRAITS
#define DOCTEST_CONFIG_INCLUDE_TYPE_TRAITS
#endif // DOCTEST_CONFIG_INCLUDE_TYPE_TRAITS
+DOCTEST_MAKE_STD_HEADERS_CLEAN_FROM_WARNINGS_ON_WALL_BEGIN
#include <cstddef>
#include <ostream>
#include <istream>
+DOCTEST_MAKE_STD_HEADERS_CLEAN_FROM_WARNINGS_ON_WALL_END
#else // DOCTEST_CONFIG_USE_STD_HEADERS
// Forward declaring 'X' in namespace std is not permitted by the C++ Standard.
DOCTEST_MSVC_SUPPRESS_WARNING_WITH_PUSH(4643)
-namespace std { // NOLINT (cert-dcl58-cpp)
-typedef decltype(nullptr) nullptr_t;
+namespace std { // NOLINT(cert-dcl58-cpp)
+typedef decltype(nullptr) nullptr_t; // NOLINT(modernize-use-using)
+typedef decltype(sizeof(void*)) size_t; // NOLINT(modernize-use-using)
template <class charT>
struct char_traits;
template <>
struct char_traits<char>;
template <class charT, class traits>
-class basic_ostream;
-typedef basic_ostream<char, char_traits<char>> ostream;
+class basic_ostream; // NOLINT(fuchsia-virtual-inheritance)
+typedef basic_ostream<char, char_traits<char>> ostream; // NOLINT(modernize-use-using)
+template<class traits>
+// NOLINTNEXTLINE
+basic_ostream<char, traits>& operator<<(basic_ostream<char, traits>&, const char*);
template <class charT, class traits>
class basic_istream;
-typedef basic_istream<char, char_traits<char>> istream;
+typedef basic_istream<char, char_traits<char>> istream; // NOLINT(modernize-use-using)
template <class... Types>
class tuple;
#if DOCTEST_MSVC >= DOCTEST_COMPILER(19, 20, 0)
@@ -486,8 +534,14 @@ DOCTEST_MSVC_SUPPRESS_WARNING_POP
namespace doctest {
+using std::size_t;
+
DOCTEST_INTERFACE extern bool is_running_in_test;
+#ifndef DOCTEST_CONFIG_STRING_SIZE_TYPE
+#define DOCTEST_CONFIG_STRING_SIZE_TYPE unsigned
+#endif
+
// A 24 byte string class (can be as small as 17 for x64 and 13 for x86) that can hold strings with length
// of up to 23 chars on the stack before going on the heap - the last byte of the buffer is used for:
// - "is small" bit - the highest bit - if "0" then it is small - otherwise its "1" (128)
@@ -500,7 +554,6 @@ DOCTEST_INTERFACE extern bool is_running_in_test;
// TODO:
// - optimizations - like not deleting memory unnecessarily in operator= and etc.
// - resize/reserve/clear
-// - substr
// - replace
// - back/front
// - iterator stuff
@@ -510,64 +563,80 @@ DOCTEST_INTERFACE extern bool is_running_in_test;
// - relational operators as free functions - taking const char* as one of the params
class DOCTEST_INTERFACE String
{
- static const unsigned len = 24; //!OCLINT avoid private static members
- static const unsigned last = len - 1; //!OCLINT avoid private static members
+public:
+ using size_type = DOCTEST_CONFIG_STRING_SIZE_TYPE;
+
+private:
+ static DOCTEST_CONSTEXPR size_type len = 24; //!OCLINT avoid private static members
+ static DOCTEST_CONSTEXPR size_type last = len - 1; //!OCLINT avoid private static members
struct view // len should be more than sizeof(view) - because of the final byte for flags
{
char* ptr;
- unsigned size;
- unsigned capacity;
+ size_type size;
+ size_type capacity;
};
union
{
- char buf[len];
+ char buf[len]; // NOLINT(*-avoid-c-arrays)
view data;
};
- char* allocate(unsigned sz);
+ char* allocate(size_type sz);
- bool isOnStack() const { return (buf[last] & 128) == 0; }
- void setOnHeap();
- void setLast(unsigned in = last);
+ bool isOnStack() const noexcept { return (buf[last] & 128) == 0; }
+ void setOnHeap() noexcept;
+ void setLast(size_type in = last) noexcept;
+ void setSize(size_type sz) noexcept;
void copy(const String& other);
public:
- String();
+ static DOCTEST_CONSTEXPR size_type npos = static_cast<size_type>(-1);
+
+ String() noexcept;
~String();
// cppcheck-suppress noExplicitConstructor
String(const char* in);
- String(const char* in, unsigned in_size);
+ String(const char* in, size_type in_size);
- String(std::istream& in, unsigned in_size);
+ String(std::istream& in, size_type in_size);
String(const String& other);
String& operator=(const String& other);
String& operator+=(const String& other);
- String(String&& other);
- String& operator=(String&& other);
+ String(String&& other) noexcept;
+ String& operator=(String&& other) noexcept;
- char operator[](unsigned i) const;
- char& operator[](unsigned i);
+ char operator[](size_type i) const;
+ char& operator[](size_type i);
// the only functions I'm willing to leave in the interface - available for inlining
const char* c_str() const { return const_cast<String*>(this)->c_str(); } // NOLINT
char* c_str() {
- if(isOnStack())
+ if (isOnStack()) {
return reinterpret_cast<char*>(buf);
+ }
return data.ptr;
}
- unsigned size() const;
- unsigned capacity() const;
+ size_type size() const;
+ size_type capacity() const;
+
+ String substr(size_type pos, size_type cnt = npos) &&;
+ String substr(size_type pos, size_type cnt = npos) const &;
+
+ size_type find(char ch, size_type pos = 0) const;
+ size_type rfind(char ch, size_type pos = npos) const;
int compare(const char* other, bool no_case = false) const;
int compare(const String& other, bool no_case = false) const;
+
+friend DOCTEST_INTERFACE std::ostream& operator<<(std::ostream& s, const String& in);
};
DOCTEST_INTERFACE String operator+(const String& lhs, const String& rhs);
@@ -579,7 +648,21 @@ DOCTEST_INTERFACE bool operator>(const String& lhs, const String& rhs);
DOCTEST_INTERFACE bool operator<=(const String& lhs, const String& rhs);
DOCTEST_INTERFACE bool operator>=(const String& lhs, const String& rhs);
-DOCTEST_INTERFACE std::ostream& operator<<(std::ostream& s, const String& in);
+class DOCTEST_INTERFACE Contains {
+public:
+ explicit Contains(const String& string);
+
+ bool checkWith(const String& other) const;
+
+ String string;
+};
+
+DOCTEST_INTERFACE String toString(const Contains& in);
+
+DOCTEST_INTERFACE bool operator==(const String& lhs, const Contains& rhs);
+DOCTEST_INTERFACE bool operator==(const Contains& lhs, const String& rhs);
+DOCTEST_INTERFACE bool operator!=(const String& lhs, const Contains& rhs);
+DOCTEST_INTERFACE bool operator!=(const Contains& lhs, const String& rhs);
namespace Color {
enum Enum
@@ -652,7 +735,7 @@ namespace assertType {
DT_WARN_THROWS_WITH = is_throws_with | is_warn,
DT_CHECK_THROWS_WITH = is_throws_with | is_check,
DT_REQUIRE_THROWS_WITH = is_throws_with | is_require,
-
+
DT_WARN_THROWS_WITH_AS = is_throws_with | is_throws_as | is_warn,
DT_CHECK_THROWS_WITH_AS = is_throws_with | is_throws_as | is_check,
DT_REQUIRE_THROWS_WITH_AS = is_throws_with | is_throws_as | is_require,
@@ -733,9 +816,27 @@ struct DOCTEST_INTERFACE AssertData
String m_decomp;
// for specific exception-related asserts
- bool m_threw_as;
- const char* m_exception_type;
- const char* m_exception_string;
+ bool m_threw_as;
+ const char* m_exception_type;
+
+ class DOCTEST_INTERFACE StringContains {
+ private:
+ Contains content;
+ bool isContains;
+
+ public:
+ StringContains(const String& str) : content(str), isContains(false) { }
+ StringContains(Contains cntn) : content(static_cast<Contains&&>(cntn)), isContains(true) { }
+
+ bool check(const String& str) { return isContains ? (content == str) : (content.string == str); }
+
+ operator const String&() const { return content.string; }
+
+ const char* c_str() const { return content.string.c_str(); }
+ } m_exception_string;
+
+ AssertData(assertType::Enum at, const char* file, int line, const char* expr,
+ const char* exception_type, const StringContains& exception_string);
};
struct DOCTEST_INTERFACE MessageData
@@ -752,13 +853,13 @@ struct DOCTEST_INTERFACE SubcaseSignature
const char* m_file;
int m_line;
+ bool operator==(const SubcaseSignature& other) const;
bool operator<(const SubcaseSignature& other) const;
};
struct DOCTEST_INTERFACE IContextScope
{
- IContextScope();
- virtual ~IContextScope();
+ DOCTEST_DECLARE_INTERFACE(IContextScope)
virtual void stringify(std::ostream*) const = 0;
};
@@ -815,200 +916,184 @@ struct ContextOptions //!OCLINT too many fields
};
namespace detail {
- template <bool CONDITION, typename TYPE = void>
- struct enable_if
- {};
+ namespace types {
+#ifdef DOCTEST_CONFIG_INCLUDE_TYPE_TRAITS
+ using namespace std;
+#else
+ template <bool COND, typename T = void>
+ struct enable_if { };
+
+ template <typename T>
+ struct enable_if<true, T> { using type = T; };
- template <typename TYPE>
- struct enable_if<true, TYPE>
- { typedef TYPE type; };
+ struct true_type { static DOCTEST_CONSTEXPR bool value = true; };
+ struct false_type { static DOCTEST_CONSTEXPR bool value = false; };
- // clang-format off
- template<class T> struct remove_reference { typedef T type; };
- template<class T> struct remove_reference<T&> { typedef T type; };
- template<class T> struct remove_reference<T&&> { typedef T type; };
+ template <typename T> struct remove_reference { using type = T; };
+ template <typename T> struct remove_reference<T&> { using type = T; };
+ template <typename T> struct remove_reference<T&&> { using type = T; };
- template<typename T, typename U = T&&> U declval(int);
+ template <typename T> struct is_rvalue_reference : false_type { };
+ template <typename T> struct is_rvalue_reference<T&&> : true_type { };
- template<typename T> T declval(long);
+ template<typename T> struct remove_const { using type = T; };
+ template <typename T> struct remove_const<const T> { using type = T; };
- template<typename T> auto declval() DOCTEST_NOEXCEPT -> decltype(declval<T>(0)) ;
+ // Compiler intrinsics
+ template <typename T> struct is_enum { static DOCTEST_CONSTEXPR bool value = __is_enum(T); };
+ template <typename T> struct underlying_type { using type = __underlying_type(T); };
- template<class T> struct is_lvalue_reference { const static bool value=false; };
- template<class T> struct is_lvalue_reference<T&> { const static bool value=true; };
+ template <typename T> struct is_pointer : false_type { };
+ template <typename T> struct is_pointer<T*> : true_type { };
+
+ template <typename T> struct is_array : false_type { };
+ // NOLINTNEXTLINE(*-avoid-c-arrays)
+ template <typename T, size_t SIZE> struct is_array<T[SIZE]> : true_type { };
+#endif
+ }
- template<class T> struct is_rvalue_reference { const static bool value=false; };
- template<class T> struct is_rvalue_reference<T&&> { const static bool value=true; };
+ // <utility>
+ template <typename T>
+ T&& declval();
template <class T>
- inline T&& forward(typename remove_reference<T>::type& t) DOCTEST_NOEXCEPT
- {
+ DOCTEST_CONSTEXPR_FUNC T&& forward(typename types::remove_reference<T>::type& t) DOCTEST_NOEXCEPT {
return static_cast<T&&>(t);
}
template <class T>
- inline T&& forward(typename remove_reference<T>::type&& t) DOCTEST_NOEXCEPT
- {
- static_assert(!is_lvalue_reference<T>::value,
- "Can not forward an rvalue as an lvalue.");
+ DOCTEST_CONSTEXPR_FUNC T&& forward(typename types::remove_reference<T>::type&& t) DOCTEST_NOEXCEPT {
return static_cast<T&&>(t);
}
- template<class T> struct remove_const { typedef T type; };
- template<class T> struct remove_const<const T> { typedef T type; };
-#ifdef DOCTEST_CONFIG_INCLUDE_TYPE_TRAITS
- template<class T> struct is_enum : public std::is_enum<T> {};
- template<class T> struct underlying_type : public std::underlying_type<T> {};
-#else
- // Use compiler intrinsics
- template<class T> struct is_enum { DOCTEST_CONSTEXPR static bool value = __is_enum(T); };
- template<class T> struct underlying_type { typedef __underlying_type(T) type; };
-#endif
- // clang-format on
+ template <typename T>
+ struct deferred_false : types::false_type { };
+
+// MSVS 2015 :(
+#if defined(_MSC_VER) && _MSC_VER <= 1900
+ template <typename T, typename = void>
+ struct has_global_insertion_operator : types::false_type { };
template <typename T>
- struct deferred_false
- // cppcheck-suppress unusedStructMember
- { static const bool value = false; };
-
- namespace has_insertion_operator_impl {
- std::ostream &os();
- template<class T>
- DOCTEST_REF_WRAP(T) val();
-
- template<class, class = void>
- struct check {
- static DOCTEST_CONSTEXPR bool value = false;
- };
+ struct has_global_insertion_operator<T, decltype(::operator<<(declval<std::ostream&>(), declval<const T&>()), void())> : types::true_type { };
- template<class T>
- struct check<T, decltype(os() << val<T>(), void())> {
- static DOCTEST_CONSTEXPR bool value = true;
- };
- } // namespace has_insertion_operator_impl
+ template <typename T, typename = void>
+ struct has_insertion_operator { static DOCTEST_CONSTEXPR bool value = has_global_insertion_operator<T>::value; };
+
+ template <typename T, bool global>
+ struct insert_hack;
+
+ template <typename T>
+ struct insert_hack<T, true> {
+ static void insert(std::ostream& os, const T& t) { ::operator<<(os, t); }
+ };
- template<class T>
- using has_insertion_operator = has_insertion_operator_impl::check<const T>;
+ template <typename T>
+ struct insert_hack<T, false> {
+ static void insert(std::ostream& os, const T& t) { operator<<(os, t); }
+ };
+
+ template <typename T>
+ using insert_hack_t = insert_hack<T, has_global_insertion_operator<T>::value>;
+#else
+ template <typename T, typename = void>
+ struct has_insertion_operator : types::false_type { };
+#endif
+
+template <typename T>
+struct has_insertion_operator<T, decltype(operator<<(declval<std::ostream&>(), declval<const T&>()), void())> : types::true_type { };
DOCTEST_INTERFACE std::ostream* tlssPush();
DOCTEST_INTERFACE String tlssPop();
-
template <bool C>
- struct StringMakerBase
- {
+ struct StringMakerBase {
template <typename T>
static String convert(const DOCTEST_REF_WRAP(T)) {
+#ifdef DOCTEST_CONFIG_REQUIRE_STRINGIFICATION_FOR_ALL_USED_TYPES
+ static_assert(deferred_false<T>::value, "No stringification detected for type T. See string conversion manual");
+#endif
return "{?}";
}
};
- // Vector<int> and various type other than pointer or array.
- template<typename T>
- struct filldata
- {
- static void fill(std::ostream* stream, const T &in) {
- *stream << in;
- }
- };
-
- template<typename T,unsigned long N>
- struct filldata<T[N]>
- {
- static void fill(std::ostream* stream, const T (&in)[N]) {
- for (unsigned long i = 0; i < N; i++) {
- *stream << in[i];
- }
- }
- };
-
- // Specialized since we don't want the terminating null byte!
- template<unsigned long N>
- struct filldata<const char[N]>
- {
- static void fill(std::ostream* stream, const char(&in)[N]) {
- *stream << in;
- }
- };
+ template <typename T>
+ struct filldata;
- template<typename T>
+ template <typename T>
void filloss(std::ostream* stream, const T& in) {
filldata<T>::fill(stream, in);
}
- template<typename T,unsigned long N>
- void filloss(std::ostream* stream, const T (&in)[N]) {
+ template <typename T, size_t N>
+ void filloss(std::ostream* stream, const T (&in)[N]) { // NOLINT(*-avoid-c-arrays)
// T[N], T(&)[N], T(&&)[N] have same behaviour.
// Hence remove reference.
- filldata<typename remove_reference<decltype(in)>::type>::fill(stream, in);
+ filloss<typename types::remove_reference<decltype(in)>::type>(stream, in);
+ }
+
+ template <typename T>
+ String toStream(const T& in) {
+ std::ostream* stream = tlssPush();
+ filloss(stream, in);
+ return tlssPop();
}
template <>
- struct StringMakerBase<true>
- {
+ struct StringMakerBase<true> {
template <typename T>
static String convert(const DOCTEST_REF_WRAP(T) in) {
- /* When parameter "in" is a null terminated const char* it works.
- * When parameter "in" is a T arr[N] without '\0' we can fill the
- * stringstream with N objects (T=char).If in is char pointer *
- * without '\0' , it would cause segfault
- * stepping over unaccessible memory.
- */
-
- std::ostream* stream = tlssPush();
- filloss(stream, in);
- return tlssPop();
+ return toStream(in);
}
};
-
- DOCTEST_INTERFACE String rawMemoryToString(const void* object, unsigned size);
-
- template <typename T>
- String rawMemoryToString(const DOCTEST_REF_WRAP(T) object) {
- return rawMemoryToString(&object, sizeof(object));
- }
-
- template <typename T>
- const char* type_to_string() {
- return "<>";
- }
} // namespace detail
template <typename T>
-struct StringMaker : public detail::StringMakerBase<detail::has_insertion_operator<T>::value>
+struct StringMaker : public detail::StringMakerBase<
+ detail::has_insertion_operator<T>::value || detail::types::is_pointer<T>::value || detail::types::is_array<T>::value>
{};
-template <typename T>
-struct StringMaker<T*>
-{
- template <typename U>
- static String convert(U* p) {
- if(p)
- return detail::rawMemoryToString(p);
- return "NULL";
- }
-};
+#ifndef DOCTEST_STRINGIFY
+#ifdef DOCTEST_CONFIG_DOUBLE_STRINGIFY
+#define DOCTEST_STRINGIFY(...) toString(toString(__VA_ARGS__))
+#else
+#define DOCTEST_STRINGIFY(...) toString(__VA_ARGS__)
+#endif
+#endif
-template <typename R, typename C>
-struct StringMaker<R C::*>
-{
- static String convert(R C::*p) {
- if(p)
- return detail::rawMemoryToString(p);
- return "NULL";
- }
-};
+template <typename T>
+String toString() {
+#if DOCTEST_MSVC >= 0 && DOCTEST_CLANG == 0 && DOCTEST_GCC == 0
+ String ret = __FUNCSIG__; // class doctest::String __cdecl doctest::toString<TYPE>(void)
+ String::size_type beginPos = ret.find('<');
+ return ret.substr(beginPos + 1, ret.size() - beginPos - static_cast<String::size_type>(sizeof(">(void)")));
+#else
+ String ret = __PRETTY_FUNCTION__; // doctest::String toString() [with T = TYPE]
+ String::size_type begin = ret.find('=') + 2;
+ return ret.substr(begin, ret.size() - begin - 1);
+#endif
+}
-template <typename T, typename detail::enable_if<!detail::is_enum<T>::value, bool>::type = true>
+template <typename T, typename detail::types::enable_if<!detail::types::is_enum<T>::value, bool>::type = true>
String toString(const DOCTEST_REF_WRAP(T) value) {
return StringMaker<T>::convert(value);
}
#ifdef DOCTEST_CONFIG_TREAT_CHAR_STAR_AS_STRING
-DOCTEST_INTERFACE String toString(char* in);
DOCTEST_INTERFACE String toString(const char* in);
#endif // DOCTEST_CONFIG_TREAT_CHAR_STAR_AS_STRING
+
+#if DOCTEST_MSVC >= DOCTEST_COMPILER(19, 20, 0)
+// see this issue on why this is needed: https://github.com/doctest/doctest/issues/183
+DOCTEST_INTERFACE String toString(const std::string& in);
+#endif // VS 2019
+
+DOCTEST_INTERFACE String toString(String in);
+
+DOCTEST_INTERFACE String toString(std::nullptr_t);
+
DOCTEST_INTERFACE String toString(bool in);
+
DOCTEST_INTERFACE String toString(float in);
DOCTEST_INTERFACE String toString(double in);
DOCTEST_INTERFACE String toString(double long in);
@@ -1016,40 +1101,85 @@ DOCTEST_INTERFACE String toString(double long in);
DOCTEST_INTERFACE String toString(char in);
DOCTEST_INTERFACE String toString(char signed in);
DOCTEST_INTERFACE String toString(char unsigned in);
-DOCTEST_INTERFACE String toString(int short in);
-DOCTEST_INTERFACE String toString(int short unsigned in);
-DOCTEST_INTERFACE String toString(int in);
-DOCTEST_INTERFACE String toString(int unsigned in);
-DOCTEST_INTERFACE String toString(int long in);
-DOCTEST_INTERFACE String toString(int long unsigned in);
-DOCTEST_INTERFACE String toString(int long long in);
-DOCTEST_INTERFACE String toString(int long long unsigned in);
-DOCTEST_INTERFACE String toString(std::nullptr_t in);
-
-template <typename T, typename detail::enable_if<detail::is_enum<T>::value, bool>::type = true>
+DOCTEST_INTERFACE String toString(short in);
+DOCTEST_INTERFACE String toString(short unsigned in);
+DOCTEST_INTERFACE String toString(signed in);
+DOCTEST_INTERFACE String toString(unsigned in);
+DOCTEST_INTERFACE String toString(long in);
+DOCTEST_INTERFACE String toString(long unsigned in);
+DOCTEST_INTERFACE String toString(long long in);
+DOCTEST_INTERFACE String toString(long long unsigned in);
+
+template <typename T, typename detail::types::enable_if<detail::types::is_enum<T>::value, bool>::type = true>
String toString(const DOCTEST_REF_WRAP(T) value) {
- typedef typename detail::underlying_type<T>::type UT;
- return toString(static_cast<UT>(value));
+ using UT = typename detail::types::underlying_type<T>::type;
+ return (DOCTEST_STRINGIFY(static_cast<UT>(value)));
}
-#if DOCTEST_MSVC >= DOCTEST_COMPILER(19, 20, 0)
-// see this issue on why this is needed: https://github.com/doctest/doctest/issues/183
-DOCTEST_INTERFACE String toString(const std::string& in);
-#endif // VS 2019
+namespace detail {
+ template <typename T>
+ struct filldata
+ {
+ static void fill(std::ostream* stream, const T& in) {
+#if defined(_MSC_VER) && _MSC_VER <= 1900
+ insert_hack_t<T>::insert(*stream, in);
+#else
+ operator<<(*stream, in);
+#endif
+ }
+ };
+
+DOCTEST_MSVC_SUPPRESS_WARNING_WITH_PUSH(4866)
+// NOLINTBEGIN(*-avoid-c-arrays)
+ template <typename T, size_t N>
+ struct filldata<T[N]> {
+ static void fill(std::ostream* stream, const T(&in)[N]) {
+ *stream << "[";
+ for (size_t i = 0; i < N; i++) {
+ if (i != 0) { *stream << ", "; }
+ *stream << (DOCTEST_STRINGIFY(in[i]));
+ }
+ *stream << "]";
+ }
+ };
+// NOLINTEND(*-avoid-c-arrays)
+DOCTEST_MSVC_SUPPRESS_WARNING_POP
-class DOCTEST_INTERFACE Approx
+ // Specialized since we don't want the terminating null byte!
+// NOLINTBEGIN(*-avoid-c-arrays)
+ template <size_t N>
+ struct filldata<const char[N]> {
+ static void fill(std::ostream* stream, const char (&in)[N]) {
+ *stream << String(in, in[N - 1] ? N : N - 1);
+ } // NOLINT(clang-analyzer-cplusplus.NewDeleteLeaks)
+ };
+// NOLINTEND(*-avoid-c-arrays)
+
+ template <>
+ struct filldata<const void*> {
+ static void fill(std::ostream* stream, const void* in);
+ };
+
+ template <typename T>
+ struct filldata<T*> {
+ static void fill(std::ostream* stream, const T* in) {
+ filldata<const void*>::fill(stream, in);
+ }
+ };
+}
+
+struct DOCTEST_INTERFACE Approx
{
-public:
- explicit Approx(double value);
+ Approx(double value);
Approx operator()(double value) const;
#ifdef DOCTEST_CONFIG_INCLUDE_TYPE_TRAITS
template <typename T>
explicit Approx(const T& value,
- typename detail::enable_if<std::is_constructible<double, T>::value>::type* =
+ typename detail::types::enable_if<std::is_constructible<double, T>::value>::type* =
static_cast<T*>(nullptr)) {
- *this = Approx(static_cast<double>(value));
+ *this = static_cast<double>(value);
}
#endif // DOCTEST_CONFIG_INCLUDE_TYPE_TRAITS
@@ -1057,7 +1187,7 @@ public:
#ifdef DOCTEST_CONFIG_INCLUDE_TYPE_TRAITS
template <typename T>
- typename detail::enable_if<std::is_constructible<double, T>::value, Approx&>::type epsilon(
+ typename std::enable_if<std::is_constructible<double, T>::value, Approx&>::type epsilon(
const T& newEpsilon) {
m_epsilon = static_cast<double>(newEpsilon);
return *this;
@@ -1068,7 +1198,7 @@ public:
#ifdef DOCTEST_CONFIG_INCLUDE_TYPE_TRAITS
template <typename T>
- typename detail::enable_if<std::is_constructible<double, T>::value, Approx&>::type scale(
+ typename std::enable_if<std::is_constructible<double, T>::value, Approx&>::type scale(
const T& newScale) {
m_scale = static_cast<double>(newScale);
return *this;
@@ -1089,30 +1219,27 @@ public:
DOCTEST_INTERFACE friend bool operator> (double lhs, const Approx & rhs);
DOCTEST_INTERFACE friend bool operator> (const Approx & lhs, double rhs);
- DOCTEST_INTERFACE friend String toString(const Approx& in);
-
#ifdef DOCTEST_CONFIG_INCLUDE_TYPE_TRAITS
#define DOCTEST_APPROX_PREFIX \
- template <typename T> friend typename detail::enable_if<std::is_constructible<double, T>::value, bool>::type
+ template <typename T> friend typename std::enable_if<std::is_constructible<double, T>::value, bool>::type
- DOCTEST_APPROX_PREFIX operator==(const T& lhs, const Approx& rhs) { return operator==(double(lhs), rhs); }
+ DOCTEST_APPROX_PREFIX operator==(const T& lhs, const Approx& rhs) { return operator==(static_cast<double>(lhs), rhs); }
DOCTEST_APPROX_PREFIX operator==(const Approx& lhs, const T& rhs) { return operator==(rhs, lhs); }
DOCTEST_APPROX_PREFIX operator!=(const T& lhs, const Approx& rhs) { return !operator==(lhs, rhs); }
DOCTEST_APPROX_PREFIX operator!=(const Approx& lhs, const T& rhs) { return !operator==(rhs, lhs); }
- DOCTEST_APPROX_PREFIX operator<=(const T& lhs, const Approx& rhs) { return double(lhs) < rhs.m_value || lhs == rhs; }
- DOCTEST_APPROX_PREFIX operator<=(const Approx& lhs, const T& rhs) { return lhs.m_value < double(rhs) || lhs == rhs; }
- DOCTEST_APPROX_PREFIX operator>=(const T& lhs, const Approx& rhs) { return double(lhs) > rhs.m_value || lhs == rhs; }
- DOCTEST_APPROX_PREFIX operator>=(const Approx& lhs, const T& rhs) { return lhs.m_value > double(rhs) || lhs == rhs; }
- DOCTEST_APPROX_PREFIX operator< (const T& lhs, const Approx& rhs) { return double(lhs) < rhs.m_value && lhs != rhs; }
- DOCTEST_APPROX_PREFIX operator< (const Approx& lhs, const T& rhs) { return lhs.m_value < double(rhs) && lhs != rhs; }
- DOCTEST_APPROX_PREFIX operator> (const T& lhs, const Approx& rhs) { return double(lhs) > rhs.m_value && lhs != rhs; }
- DOCTEST_APPROX_PREFIX operator> (const Approx& lhs, const T& rhs) { return lhs.m_value > double(rhs) && lhs != rhs; }
+ DOCTEST_APPROX_PREFIX operator<=(const T& lhs, const Approx& rhs) { return static_cast<double>(lhs) < rhs.m_value || lhs == rhs; }
+ DOCTEST_APPROX_PREFIX operator<=(const Approx& lhs, const T& rhs) { return lhs.m_value < static_cast<double>(rhs) || lhs == rhs; }
+ DOCTEST_APPROX_PREFIX operator>=(const T& lhs, const Approx& rhs) { return static_cast<double>(lhs) > rhs.m_value || lhs == rhs; }
+ DOCTEST_APPROX_PREFIX operator>=(const Approx& lhs, const T& rhs) { return lhs.m_value > static_cast<double>(rhs) || lhs == rhs; }
+ DOCTEST_APPROX_PREFIX operator< (const T& lhs, const Approx& rhs) { return static_cast<double>(lhs) < rhs.m_value && lhs != rhs; }
+ DOCTEST_APPROX_PREFIX operator< (const Approx& lhs, const T& rhs) { return lhs.m_value < static_cast<double>(rhs) && lhs != rhs; }
+ DOCTEST_APPROX_PREFIX operator> (const T& lhs, const Approx& rhs) { return static_cast<double>(lhs) > rhs.m_value && lhs != rhs; }
+ DOCTEST_APPROX_PREFIX operator> (const Approx& lhs, const T& rhs) { return lhs.m_value > static_cast<double>(rhs) && lhs != rhs; }
#undef DOCTEST_APPROX_PREFIX
#endif // DOCTEST_CONFIG_INCLUDE_TYPE_TRAITS
// clang-format on
-private:
double m_epsilon;
double m_scale;
double m_value;
@@ -1122,18 +1249,35 @@ DOCTEST_INTERFACE String toString(const Approx& in);
DOCTEST_INTERFACE const ContextOptions* getContextOptions();
-#if !defined(DOCTEST_CONFIG_DISABLE)
+template <typename F>
+struct DOCTEST_INTERFACE_DECL IsNaN
+{
+ F value; bool flipped;
+ IsNaN(F f, bool flip = false) : value(f), flipped(flip) { }
+ IsNaN<F> operator!() const { return { value, !flipped }; }
+ operator bool() const;
+};
+#ifndef __MINGW32__
+extern template struct DOCTEST_INTERFACE_DECL IsNaN<float>;
+extern template struct DOCTEST_INTERFACE_DECL IsNaN<double>;
+extern template struct DOCTEST_INTERFACE_DECL IsNaN<long double>;
+#endif
+DOCTEST_INTERFACE String toString(IsNaN<float> in);
+DOCTEST_INTERFACE String toString(IsNaN<double> in);
+DOCTEST_INTERFACE String toString(IsNaN<double long> in);
+
+#ifndef DOCTEST_CONFIG_DISABLE
namespace detail {
// clang-format off
#ifdef DOCTEST_CONFIG_TREAT_CHAR_STAR_AS_STRING
- template<class T> struct decay_array { typedef T type; };
- template<class T, unsigned N> struct decay_array<T[N]> { typedef T* type; };
- template<class T> struct decay_array<T[]> { typedef T* type; };
+ template<class T> struct decay_array { using type = T; };
+ template<class T, unsigned N> struct decay_array<T[N]> { using type = T*; };
+ template<class T> struct decay_array<T[]> { using type = T*; };
- template<class T> struct not_char_pointer { enum { value = 1 }; };
- template<> struct not_char_pointer<char*> { enum { value = 0 }; };
- template<> struct not_char_pointer<const char*> { enum { value = 0 }; };
+ template<class T> struct not_char_pointer { static DOCTEST_CONSTEXPR value = 1; };
+ template<> struct not_char_pointer<char*> { static DOCTEST_CONSTEXPR value = 0; };
+ template<> struct not_char_pointer<const char*> { static DOCTEST_CONSTEXPR value = 0; };
template<class T> struct can_use_op : public not_char_pointer<typename decay_array<T>::type> {};
#endif // DOCTEST_CONFIG_TREAT_CHAR_STAR_AS_STRING
@@ -1156,16 +1300,22 @@ namespace detail {
bool m_entered = false;
Subcase(const String& name, const char* file, int line);
+ Subcase(const Subcase&) = delete;
+ Subcase(Subcase&&) = delete;
+ Subcase& operator=(const Subcase&) = delete;
+ Subcase& operator=(Subcase&&) = delete;
~Subcase();
operator bool() const;
+
+ private:
+ bool checkFilters();
};
template <typename L, typename R>
String stringifyBinaryExpr(const DOCTEST_REF_WRAP(L) lhs, const char* op,
const DOCTEST_REF_WRAP(R) rhs) {
- // NOLINTNEXTLINE(clang-analyzer-cplusplus.NewDeleteLeaks)
- return toString(lhs) + op + toString(rhs);
+ return (DOCTEST_STRINGIFY(lhs)) + op + (DOCTEST_STRINGIFY(rhs));
}
#if DOCTEST_CLANG && DOCTEST_CLANG < DOCTEST_COMPILER(3, 6, 0)
@@ -1180,17 +1330,8 @@ DOCTEST_CLANG_SUPPRESS_WARNING_WITH_PUSH("-Wunused-comparison")
#define DOCTEST_DO_BINARY_EXPRESSION_COMPARISON(op, op_str, op_macro) \
template <typename R> \
- DOCTEST_NOINLINE SFINAE_OP(Result,op) operator op(const R&& rhs) { \
- bool res = op_macro(doctest::detail::forward<const L>(lhs), doctest::detail::forward<const R>(rhs)); \
- if(m_at & assertType::is_false) \
- res = !res; \
- if(!res || doctest::getContextOptions()->success) \
- return Result(res, stringifyBinaryExpr(lhs, op_str, rhs)); \
- return Result(res); \
- } \
- template <typename R ,typename enable_if<!doctest::detail::is_rvalue_reference<R>::value, void >::type* = nullptr> \
- DOCTEST_NOINLINE SFINAE_OP(Result,op) operator op(const R& rhs) { \
- bool res = op_macro(doctest::detail::forward<const L>(lhs), rhs); \
+ DOCTEST_NOINLINE SFINAE_OP(Result,op) operator op(R&& rhs) { \
+ bool res = op_macro(doctest::detail::forward<const L>(lhs), doctest::detail::forward<R>(rhs)); \
if(m_at & assertType::is_false) \
res = !res; \
if(!res || doctest::getContextOptions()->success) \
@@ -1209,12 +1350,12 @@ DOCTEST_CLANG_SUPPRESS_WARNING_WITH_PUSH("-Wunused-comparison")
return *this; \
}
- struct DOCTEST_INTERFACE Result
+ struct DOCTEST_INTERFACE Result // NOLINT(*-member-init)
{
bool m_passed;
String m_decomp;
- Result() = default;
+ Result() = default; // TODO: Why do we need this? (To remove NOLINT)
Result(bool passed, const String& decomposition = String());
// forbidding some expressions based on this table: https://en.cppreference.com/w/cpp/language/operator_precedence
@@ -1271,8 +1412,7 @@ DOCTEST_CLANG_SUPPRESS_WARNING_WITH_PUSH("-Wunused-comparison")
#ifndef DOCTEST_CONFIG_TREAT_CHAR_STAR_AS_STRING
#define DOCTEST_COMPARISON_RETURN_TYPE bool
#else // DOCTEST_CONFIG_TREAT_CHAR_STAR_AS_STRING
-#define DOCTEST_COMPARISON_RETURN_TYPE typename enable_if<can_use_op<L>::value || can_use_op<R>::value, bool>::type
- // NOLINTNEXTLINE(clang-analyzer-cplusplus.NewDeleteLeaks)
+#define DOCTEST_COMPARISON_RETURN_TYPE typename types::enable_if<can_use_op<L>::value || can_use_op<R>::value, bool>::type
inline bool eq(const char* lhs, const char* rhs) { return String(lhs) == String(rhs); }
inline bool ne(const char* lhs, const char* rhs) { return String(lhs) != String(rhs); }
inline bool lt(const char* lhs, const char* rhs) { return String(lhs) < String(rhs); }
@@ -1320,7 +1460,7 @@ DOCTEST_CLANG_SUPPRESS_WARNING_WITH_PUSH("-Wunused-comparison")
assertType::Enum m_at;
explicit Expression_lhs(L&& in, assertType::Enum at)
- : lhs(doctest::detail::forward<L>(in))
+ : lhs(static_cast<L&&>(in))
, m_at(at) {}
DOCTEST_NOINLINE operator Result() {
@@ -1328,12 +1468,14 @@ DOCTEST_CLANG_SUPPRESS_WARNING_WITH_PUSH("-Wunused-comparison")
DOCTEST_MSVC_SUPPRESS_WARNING_WITH_PUSH(4800) // 'int': forcing value to bool
bool res = static_cast<bool>(lhs);
DOCTEST_MSVC_SUPPRESS_WARNING_POP
- if(m_at & assertType::is_false) //!OCLINT bitwise operator in conditional
+ if(m_at & assertType::is_false) { //!OCLINT bitwise operator in conditional
res = !res;
+ }
- if(!res || getContextOptions()->success)
- return Result(res, toString(lhs));
- return Result(res);
+ if(!res || getContextOptions()->success) {
+ return { res, (DOCTEST_STRINGIFY(lhs)) };
+ }
+ return { res };
}
/* This is required for user-defined conversions from Expression_lhs to L */
@@ -1394,11 +1536,11 @@ DOCTEST_CLANG_SUPPRESS_WARNING_POP
// https://github.com/catchorg/Catch2/issues/870
// https://github.com/catchorg/Catch2/issues/565
template <typename L>
- Expression_lhs<const L> operator<<(const L &&operand) {
- return Expression_lhs<const L>(doctest::detail::forward<const L>(operand), m_at);
+ Expression_lhs<L> operator<<(L&& operand) {
+ return Expression_lhs<L>(static_cast<L&&>(operand), m_at);
}
- template <typename L,typename enable_if<!doctest::detail::is_rvalue_reference<L>::value,void >::type* = nullptr>
+ template <typename L,typename types::enable_if<!doctest::detail::types::is_rvalue_reference<L>::value,void >::type* = nullptr>
Expression_lhs<const L&> operator<<(const L &operand) {
return Expression_lhs<const L&>(operand, m_at);
}
@@ -1425,25 +1567,28 @@ DOCTEST_CLANG_SUPPRESS_WARNING_POP
}
};
- typedef void (*funcType)();
+ using funcType = void (*)();
struct DOCTEST_INTERFACE TestCase : public TestCaseData
{
funcType m_test; // a function pointer to the test case
- const char* m_type; // for templated test cases - gets appended to the real name
+ String m_type; // for templated test cases - gets appended to the real name
int m_template_id; // an ID used to distinguish between the different versions of a templated test case
String m_full_name; // contains the name (only for templated test cases!) + the template type
TestCase(funcType test, const char* file, unsigned line, const TestSuite& test_suite,
- const char* type = "", int template_id = -1);
+ const String& type = String(), int template_id = -1);
TestCase(const TestCase& other);
+ TestCase(TestCase&&) = delete;
DOCTEST_MSVC_SUPPRESS_WARNING_WITH_PUSH(26434) // hides a non-virtual function
TestCase& operator=(const TestCase& other);
DOCTEST_MSVC_SUPPRESS_WARNING_POP
+ TestCase& operator=(TestCase&&) = delete;
+
TestCase& operator*(const char* in);
template <typename T>
@@ -1453,6 +1598,8 @@ DOCTEST_CLANG_SUPPRESS_WARNING_POP
}
bool operator<(const TestCase& other) const;
+
+ ~TestCase() = default;
};
// forward declarations of functions used by the macros
@@ -1492,7 +1639,10 @@ DOCTEST_CLANG_SUPPRESS_WARNING_POP
struct DOCTEST_INTERFACE ResultBuilder : public AssertData
{
ResultBuilder(assertType::Enum at, const char* file, int line, const char* expr,
- const char* exception_type = "", const char* exception_string = "");
+ const char* exception_type = "", const String& exception_string = "");
+
+ ResultBuilder(assertType::Enum at, const char* file, int line, const char* expr,
+ const char* exception_type, const Contains& exception_string);
void setResult(const Result& res);
@@ -1500,8 +1650,9 @@ DOCTEST_CLANG_SUPPRESS_WARNING_POP
DOCTEST_NOINLINE bool binary_assert(const DOCTEST_REF_WRAP(L) lhs,
const DOCTEST_REF_WRAP(R) rhs) {
m_failed = !RelationalComparator<comparison, L, R>()(lhs, rhs);
- if(m_failed || getContextOptions()->success)
+ if (m_failed || getContextOptions()->success) {
m_decomp = stringifyBinaryExpr(lhs, ", ", rhs);
+ }
return !m_failed;
}
@@ -1509,11 +1660,13 @@ DOCTEST_CLANG_SUPPRESS_WARNING_POP
DOCTEST_NOINLINE bool unary_assert(const DOCTEST_REF_WRAP(L) val) {
m_failed = !val;
- if(m_at & assertType::is_false) //!OCLINT bitwise operator in conditional
+ if (m_at & assertType::is_false) { //!OCLINT bitwise operator in conditional
m_failed = !m_failed;
+ }
- if(m_failed || getContextOptions()->success)
- m_decomp = toString(val);
+ if (m_failed || getContextOptions()->success) {
+ m_decomp = (DOCTEST_STRINGIFY(val));
+ }
return !m_failed;
}
@@ -1536,7 +1689,7 @@ DOCTEST_CLANG_SUPPRESS_WARNING_POP
DOCTEST_INTERFACE void failed_out_of_a_testing_context(const AssertData& ad);
DOCTEST_INTERFACE bool decomp_assert(assertType::Enum at, const char* file, int line,
- const char* expr, Result result);
+ const char* expr, const Result& result);
#define DOCTEST_ASSERT_OUT_OF_TESTS(decomp) \
do { \
@@ -1592,15 +1745,14 @@ DOCTEST_CLANG_SUPPRESS_WARNING_POP
// IF THE DEBUGGER BREAKS HERE - GO 1 LEVEL UP IN THE CALLSTACK FOR THE FAILING ASSERT
// THIS IS THE EFFECT OF HAVING 'DOCTEST_CONFIG_SUPER_FAST_ASSERTS' DEFINED
// ###################################################################################
- DOCTEST_ASSERT_OUT_OF_TESTS(toString(val));
- DOCTEST_ASSERT_IN_TESTS(toString(val));
+ DOCTEST_ASSERT_OUT_OF_TESTS((DOCTEST_STRINGIFY(val)));
+ DOCTEST_ASSERT_IN_TESTS((DOCTEST_STRINGIFY(val)));
return !failed;
}
struct DOCTEST_INTERFACE IExceptionTranslator
{
- IExceptionTranslator();
- virtual ~IExceptionTranslator();
+ DOCTEST_DECLARE_INTERFACE(IExceptionTranslator)
virtual bool translate(String&) const = 0;
};
@@ -1616,7 +1768,7 @@ DOCTEST_CLANG_SUPPRESS_WARNING_POP
try {
throw; // lgtm [cpp/rethrow-no-exception]
// cppcheck-suppress catchExceptionByValue
- } catch(T ex) { // NOLINT
+ } catch(const T& ex) {
res = m_translateFunction(ex); //!OCLINT parameter reassignment
return true;
} catch(...) {} //!OCLINT - empty catch statement
@@ -1631,64 +1783,19 @@ DOCTEST_CLANG_SUPPRESS_WARNING_POP
DOCTEST_INTERFACE void registerExceptionTranslatorImpl(const IExceptionTranslator* et);
- template <bool C>
- struct StringStreamBase
- {
- template <typename T>
- static void convert(std::ostream* s, const T& in) {
- *s << toString(in);
- }
-
- // always treat char* as a string in this context - no matter
- // if DOCTEST_CONFIG_TREAT_CHAR_STAR_AS_STRING is defined
- static void convert(std::ostream* s, const char* in) { *s << String(in); }
- };
-
- template <>
- struct StringStreamBase<true>
- {
- template <typename T>
- static void convert(std::ostream* s, const T& in) {
- *s << in;
- }
- };
+ // ContextScope base class used to allow implementing methods of ContextScope
+ // that don't depend on the template parameter in doctest.cpp.
+ struct DOCTEST_INTERFACE ContextScopeBase : public IContextScope {
+ ContextScopeBase(const ContextScopeBase&) = delete;
- template <typename T>
- struct StringStream : public StringStreamBase<has_insertion_operator<T>::value>
- {};
+ ContextScopeBase& operator=(const ContextScopeBase&) = delete;
+ ContextScopeBase& operator=(ContextScopeBase&&) = delete;
- template <typename T>
- void toStream(std::ostream* s, const T& value) {
- StringStream<T>::convert(s, value);
- }
+ ~ContextScopeBase() override = default;
-#ifdef DOCTEST_CONFIG_TREAT_CHAR_STAR_AS_STRING
- DOCTEST_INTERFACE void toStream(std::ostream* s, char* in);
- DOCTEST_INTERFACE void toStream(std::ostream* s, const char* in);
-#endif // DOCTEST_CONFIG_TREAT_CHAR_STAR_AS_STRING
- DOCTEST_INTERFACE void toStream(std::ostream* s, bool in);
- DOCTEST_INTERFACE void toStream(std::ostream* s, float in);
- DOCTEST_INTERFACE void toStream(std::ostream* s, double in);
- DOCTEST_INTERFACE void toStream(std::ostream* s, double long in);
-
- DOCTEST_INTERFACE void toStream(std::ostream* s, char in);
- DOCTEST_INTERFACE void toStream(std::ostream* s, char signed in);
- DOCTEST_INTERFACE void toStream(std::ostream* s, char unsigned in);
- DOCTEST_INTERFACE void toStream(std::ostream* s, int short in);
- DOCTEST_INTERFACE void toStream(std::ostream* s, int short unsigned in);
- DOCTEST_INTERFACE void toStream(std::ostream* s, int in);
- DOCTEST_INTERFACE void toStream(std::ostream* s, int unsigned in);
- DOCTEST_INTERFACE void toStream(std::ostream* s, int long in);
- DOCTEST_INTERFACE void toStream(std::ostream* s, int long unsigned in);
- DOCTEST_INTERFACE void toStream(std::ostream* s, int long long in);
- DOCTEST_INTERFACE void toStream(std::ostream* s, int long long unsigned in);
-
- // ContextScope base class used to allow implementing methods of ContextScope
- // that don't depend on the template parameter in doctest.cpp.
- class DOCTEST_INTERFACE ContextScopeBase : public IContextScope {
protected:
ContextScopeBase();
- ContextScopeBase(ContextScopeBase&& other);
+ ContextScopeBase(ContextScopeBase&& other) noexcept;
void destroy();
bool need_to_destroy{true};
@@ -1696,12 +1803,17 @@ DOCTEST_CLANG_SUPPRESS_WARNING_POP
template <typename L> class ContextScope : public ContextScopeBase
{
- const L lambda_;
+ L lambda_;
public:
explicit ContextScope(const L &lambda) : lambda_(lambda) {}
+ explicit ContextScope(L&& lambda) : lambda_(static_cast<L&&>(lambda)) { }
- ContextScope(ContextScope &&other) : ContextScopeBase(static_cast<ContextScopeBase&&>(other)), lambda_(other.lambda_) {}
+ ContextScope(const ContextScope&) = delete;
+ ContextScope(ContextScope&&) noexcept = default;
+
+ ContextScope& operator=(const ContextScope&) = delete;
+ ContextScope& operator=(ContextScope&&) = delete;
void stringify(std::ostream* s) const override { lambda_(s); }
@@ -1718,15 +1830,23 @@ DOCTEST_CLANG_SUPPRESS_WARNING_POP
bool logged = false;
MessageBuilder(const char* file, int line, assertType::Enum severity);
- MessageBuilder() = delete;
+
+ MessageBuilder(const MessageBuilder&) = delete;
+ MessageBuilder(MessageBuilder&&) = delete;
+
+ MessageBuilder& operator=(const MessageBuilder&) = delete;
+ MessageBuilder& operator=(MessageBuilder&&) = delete;
+
~MessageBuilder();
// the preferred way of chaining parameters for stringification
+DOCTEST_MSVC_SUPPRESS_WARNING_WITH_PUSH(4866)
template <typename T>
MessageBuilder& operator,(const T& in) {
- toStream(m_stream, in);
+ *m_stream << (DOCTEST_STRINGIFY(in));
return *this;
}
+DOCTEST_MSVC_SUPPRESS_WARNING_POP
// kept here just for backwards-compatibility - the comma operator should be preferred now
template <typename T>
@@ -1742,7 +1862,7 @@ DOCTEST_CLANG_SUPPRESS_WARNING_POP
bool log();
void react();
};
-
+
template <typename L>
ContextScope<L> MakeContextScope(const L &lambda) {
return ContextScope<L>(lambda);
@@ -1795,7 +1915,7 @@ int registerExceptionTranslator(String (*)(T)) {
#endif // DOCTEST_CONFIG_DISABLE
namespace detail {
- typedef void (*assert_handler)(const AssertData&);
+ using assert_handler = void (*)(const AssertData&);
struct ContextState;
} // namespace detail
@@ -1808,7 +1928,13 @@ class DOCTEST_INTERFACE Context
public:
explicit Context(int argc = 0, const char* const* argv = nullptr);
- ~Context();
+ Context(const Context&) = delete;
+ Context(Context&&) = delete;
+
+ Context& operator=(const Context&) = delete;
+ Context& operator=(Context&&) = delete;
+
+ ~Context(); // NOLINT(performance-trivially-destructible)
void applyCommandLine(int argc, const char* const* argv);
@@ -1916,8 +2042,7 @@ struct DOCTEST_INTERFACE IReporter
// or isn't in the execution range (between first and last) (safe to cache a pointer to the input)
virtual void test_case_skipped(const TestCaseData&) = 0;
- // doctest will not be managing the lifetimes of reporters given to it but this would still be nice to have
- virtual ~IReporter();
+ DOCTEST_DECLARE_INTERFACE(IReporter)
// can obtain all currently active contexts and stringify them if one wishes to do so
static int get_num_active_contexts();
@@ -1929,7 +2054,7 @@ struct DOCTEST_INTERFACE IReporter
};
namespace detail {
- typedef IReporter* (*reporterCreatorFunc)(const ContextOptions&);
+ using reporterCreatorFunc = IReporter* (*)(const ContextOptions&);
DOCTEST_INTERFACE void registerReporterImpl(const char* name, int prio, reporterCreatorFunc c, bool isReporter);
@@ -1946,15 +2071,30 @@ int registerReporter(const char* name, int priority, bool isReporter) {
}
} // namespace doctest
+#ifdef DOCTEST_CONFIG_ASSERTS_RETURN_VALUES
+#define DOCTEST_FUNC_EMPTY [] { return false; }()
+#else
+#define DOCTEST_FUNC_EMPTY (void)0
+#endif
+
// if registering is not disabled
-#if !defined(DOCTEST_CONFIG_DISABLE)
+#ifndef DOCTEST_CONFIG_DISABLE
+
+#ifdef DOCTEST_CONFIG_ASSERTS_RETURN_VALUES
+#define DOCTEST_FUNC_SCOPE_BEGIN [&]
+#define DOCTEST_FUNC_SCOPE_END ()
+#define DOCTEST_FUNC_SCOPE_RET(v) return v
+#else
+#define DOCTEST_FUNC_SCOPE_BEGIN do
+#define DOCTEST_FUNC_SCOPE_END while(false)
+#define DOCTEST_FUNC_SCOPE_RET(v) (void)0
+#endif
// common code in asserts - for convenience
#define DOCTEST_ASSERT_LOG_REACT_RETURN(b) \
- if(b.log()) \
- DOCTEST_BREAK_INTO_DEBUGGER(); \
- b.react(); \
- return !b.m_failed
+ if(b.log()) DOCTEST_BREAK_INTO_DEBUGGER(); \
+ b.react(); \
+ DOCTEST_FUNC_SCOPE_RET(!b.m_failed)
#ifdef DOCTEST_CONFIG_NO_TRY_CATCH_IN_ASSERTS
#define DOCTEST_WRAP_IN_TRY(x) x;
@@ -1976,7 +2116,7 @@ int registerReporter(const char* name, int priority, bool isReporter) {
// registers the test by initializing a dummy var with a function
#define DOCTEST_REGISTER_FUNCTION(global_prefix, f, decorators) \
- global_prefix DOCTEST_GLOBAL_NO_WARNINGS(DOCTEST_ANONYMOUS(DOCTEST_ANON_VAR_), \
+ global_prefix DOCTEST_GLOBAL_NO_WARNINGS(DOCTEST_ANONYMOUS(DOCTEST_ANON_VAR_), /* NOLINT */ \
doctest::detail::regTest( \
doctest::detail::TestCase( \
f, __FILE__, __LINE__, \
@@ -1984,18 +2124,18 @@ int registerReporter(const char* name, int priority, bool isReporter) {
decorators))
#define DOCTEST_IMPLEMENT_FIXTURE(der, base, func, decorators) \
- namespace { \
+ namespace { /* NOLINT */ \
struct der : public base \
{ \
void f(); \
}; \
- static void func() { \
+ static inline DOCTEST_NOINLINE void func() { \
der v; \
v.f(); \
} \
DOCTEST_REGISTER_FUNCTION(DOCTEST_EMPTY, func, decorators) \
} \
- inline DOCTEST_NOINLINE void der::f()
+ inline DOCTEST_NOINLINE void der::f() // NOLINT(misc-definitions-in-headers)
#define DOCTEST_CREATE_AND_REGISTER_FUNCTION(f, decorators) \
static void f(); \
@@ -2004,7 +2144,7 @@ int registerReporter(const char* name, int priority, bool isReporter) {
#define DOCTEST_CREATE_AND_REGISTER_FUNCTION_IN_CLASS(f, proxy, decorators) \
static doctest::detail::funcType proxy() { return f; } \
- DOCTEST_REGISTER_FUNCTION(inline, proxy(), decorators) \
+ DOCTEST_REGISTER_FUNCTION(inline, proxy(), decorators) \
static void f()
// for registering tests
@@ -2012,7 +2152,7 @@ int registerReporter(const char* name, int priority, bool isReporter) {
DOCTEST_CREATE_AND_REGISTER_FUNCTION(DOCTEST_ANONYMOUS(DOCTEST_ANON_FUNC_), decorators)
// for registering tests in classes - requires C++17 for inline variables!
-#if __cplusplus >= 201703L || (DOCTEST_MSVC >= DOCTEST_COMPILER(19, 12, 0) && _MSVC_LANG >= 201703L)
+#if DOCTEST_CPLUSPLUS >= 201703L
#define DOCTEST_TEST_CASE_CLASS(decorators) \
DOCTEST_CREATE_AND_REGISTER_FUNCTION_IN_CLASS(DOCTEST_ANONYMOUS(DOCTEST_ANON_FUNC_), \
DOCTEST_ANONYMOUS(DOCTEST_ANON_PROXY_), \
@@ -2028,22 +2168,21 @@ int registerReporter(const char* name, int priority, bool isReporter) {
DOCTEST_ANONYMOUS(DOCTEST_ANON_FUNC_), decorators)
// for converting types to strings without the <typeinfo> header and demangling
-#define DOCTEST_TYPE_TO_STRING_IMPL(...) \
- template <> \
- inline const char* type_to_string<__VA_ARGS__>() { \
- return "<" #__VA_ARGS__ ">"; \
- }
-#define DOCTEST_TYPE_TO_STRING(...) \
- namespace doctest { namespace detail { \
- DOCTEST_TYPE_TO_STRING_IMPL(__VA_ARGS__) \
+#define DOCTEST_TYPE_TO_STRING_AS(str, ...) \
+ namespace doctest { \
+ template <> \
+ inline String toString<__VA_ARGS__>() { \
+ return str; \
} \
} \
static_assert(true, "")
+#define DOCTEST_TYPE_TO_STRING(...) DOCTEST_TYPE_TO_STRING_AS(#__VA_ARGS__, __VA_ARGS__)
+
#define DOCTEST_TEST_CASE_TEMPLATE_DEFINE_IMPL(dec, T, iter, func) \
template <typename T> \
static void func(); \
- namespace { \
+ namespace { /* NOLINT */ \
template <typename Tuple> \
struct iter; \
template <typename Type, typename... Rest> \
@@ -2052,7 +2191,7 @@ int registerReporter(const char* name, int priority, bool isReporter) {
iter(const char* file, unsigned line, int index) { \
doctest::detail::regTest(doctest::detail::TestCase(func<Type>, file, line, \
doctest_detail_test_suite_ns::getCurrentTestSuite(), \
- doctest::detail::type_to_string<Type>(), \
+ doctest::toString<Type>(), \
int(line) * 1000 + index) \
* dec); \
iter<std::tuple<Rest...>>(file, line, index + 1); \
@@ -2072,7 +2211,7 @@ int registerReporter(const char* name, int priority, bool isReporter) {
DOCTEST_ANONYMOUS(DOCTEST_ANON_TMP_))
#define DOCTEST_TEST_CASE_TEMPLATE_INSTANTIATE_IMPL(id, anon, ...) \
- DOCTEST_GLOBAL_NO_WARNINGS(DOCTEST_CAT(anon, DUMMY), \
+ DOCTEST_GLOBAL_NO_WARNINGS(DOCTEST_CAT(anon, DUMMY), /* NOLINT(cert-err58-cpp, fuchsia-statically-constructed-objects) */ \
doctest::detail::instantiationHelper( \
DOCTEST_CAT(id, ITERATOR)<__VA_ARGS__>(__FILE__, __LINE__, 0)))
@@ -2101,7 +2240,7 @@ int registerReporter(const char* name, int priority, bool isReporter) {
// for grouping tests in test suites by using code blocks
#define DOCTEST_TEST_SUITE_IMPL(decorators, ns_name) \
namespace ns_name { namespace doctest_detail_test_suite_ns { \
- static DOCTEST_NOINLINE doctest::detail::TestSuite& getCurrentTestSuite() { \
+ static DOCTEST_NOINLINE doctest::detail::TestSuite& getCurrentTestSuite() noexcept { \
DOCTEST_MSVC_SUPPRESS_WARNING_WITH_PUSH(4640) \
DOCTEST_CLANG_SUPPRESS_WARNING_WITH_PUSH("-Wexit-time-destructors") \
DOCTEST_GCC_SUPPRESS_WARNING_WITH_PUSH("-Wmissing-field-initializers") \
@@ -2125,20 +2264,20 @@ int registerReporter(const char* name, int priority, bool isReporter) {
// for starting a testsuite block
#define DOCTEST_TEST_SUITE_BEGIN(decorators) \
- DOCTEST_GLOBAL_NO_WARNINGS(DOCTEST_ANONYMOUS(DOCTEST_ANON_VAR_), \
+ DOCTEST_GLOBAL_NO_WARNINGS(DOCTEST_ANONYMOUS(DOCTEST_ANON_VAR_), /* NOLINT(cert-err58-cpp) */ \
doctest::detail::setTestSuite(doctest::detail::TestSuite() * decorators)) \
static_assert(true, "")
// for ending a testsuite block
#define DOCTEST_TEST_SUITE_END \
- DOCTEST_GLOBAL_NO_WARNINGS(DOCTEST_ANONYMOUS(DOCTEST_ANON_VAR_), \
+ DOCTEST_GLOBAL_NO_WARNINGS(DOCTEST_ANONYMOUS(DOCTEST_ANON_VAR_), /* NOLINT(cert-err58-cpp) */ \
doctest::detail::setTestSuite(doctest::detail::TestSuite() * "")) \
- typedef int DOCTEST_ANONYMOUS(DOCTEST_ANON_FOR_SEMICOLON_)
+ using DOCTEST_ANONYMOUS(DOCTEST_ANON_FOR_SEMICOLON_) = int
// for registering exception translators
#define DOCTEST_REGISTER_EXCEPTION_TRANSLATOR_IMPL(translatorName, signature) \
inline doctest::String translatorName(signature); \
- DOCTEST_GLOBAL_NO_WARNINGS(DOCTEST_ANONYMOUS(DOCTEST_ANON_TRANSLATOR_), \
+ DOCTEST_GLOBAL_NO_WARNINGS(DOCTEST_ANONYMOUS(DOCTEST_ANON_TRANSLATOR_), /* NOLINT(cert-err58-cpp) */ \
doctest::registerExceptionTranslator(translatorName)) \
doctest::String translatorName(signature)
@@ -2148,13 +2287,13 @@ int registerReporter(const char* name, int priority, bool isReporter) {
// for registering reporters
#define DOCTEST_REGISTER_REPORTER(name, priority, reporter) \
- DOCTEST_GLOBAL_NO_WARNINGS(DOCTEST_ANONYMOUS(DOCTEST_ANON_REPORTER_), \
+ DOCTEST_GLOBAL_NO_WARNINGS(DOCTEST_ANONYMOUS(DOCTEST_ANON_REPORTER_), /* NOLINT(cert-err58-cpp) */ \
doctest::registerReporter<reporter>(name, priority, true)) \
static_assert(true, "")
// for registering listeners
#define DOCTEST_REGISTER_LISTENER(name, priority, reporter) \
- DOCTEST_GLOBAL_NO_WARNINGS(DOCTEST_ANONYMOUS(DOCTEST_ANON_REPORTER_), \
+ DOCTEST_GLOBAL_NO_WARNINGS(DOCTEST_ANONYMOUS(DOCTEST_ANON_REPORTER_), /* NOLINT(cert-err58-cpp) */ \
doctest::registerReporter<reporter>(name, priority, false)) \
static_assert(true, "")
@@ -2177,13 +2316,13 @@ int registerReporter(const char* name, int priority, bool isReporter) {
#define DOCTEST_CAPTURE(x) DOCTEST_INFO(#x " := ", x)
#define DOCTEST_ADD_AT_IMPL(type, file, line, mb, ...) \
- [&] { \
+ DOCTEST_FUNC_SCOPE_BEGIN { \
doctest::detail::MessageBuilder mb(file, line, doctest::assertType::type); \
mb * __VA_ARGS__; \
if(mb.log()) \
DOCTEST_BREAK_INTO_DEBUGGER(); \
mb.react(); \
- }()
+ } DOCTEST_FUNC_SCOPE_END
// clang-format off
#define DOCTEST_ADD_MESSAGE_AT(file, line, ...) DOCTEST_ADD_AT_IMPL(is_warn, file, line, DOCTEST_ANONYMOUS(DOCTEST_MESSAGE_), __VA_ARGS__)
@@ -2201,18 +2340,37 @@ int registerReporter(const char* name, int priority, bool isReporter) {
#define DOCTEST_ASSERT_IMPLEMENT_2(assert_type, ...) \
DOCTEST_CLANG_SUPPRESS_WARNING_WITH_PUSH("-Woverloaded-shift-op-parentheses") \
+ /* NOLINTNEXTLINE(clang-analyzer-cplusplus.NewDeleteLeaks) */ \
doctest::detail::ResultBuilder DOCTEST_RB(doctest::assertType::assert_type, __FILE__, \
__LINE__, #__VA_ARGS__); \
DOCTEST_WRAP_IN_TRY(DOCTEST_RB.setResult( \
doctest::detail::ExpressionDecomposer(doctest::assertType::assert_type) \
- << __VA_ARGS__)) \
+ << __VA_ARGS__)) /* NOLINTNEXTLINE(clang-analyzer-cplusplus.NewDeleteLeaks) */ \
DOCTEST_ASSERT_LOG_REACT_RETURN(DOCTEST_RB) \
DOCTEST_CLANG_SUPPRESS_WARNING_POP
#define DOCTEST_ASSERT_IMPLEMENT_1(assert_type, ...) \
- [&] { \
+ DOCTEST_FUNC_SCOPE_BEGIN { \
DOCTEST_ASSERT_IMPLEMENT_2(assert_type, __VA_ARGS__); \
- }()
+ } DOCTEST_FUNC_SCOPE_END // NOLINT(clang-analyzer-cplusplus.NewDeleteLeaks)
+
+#define DOCTEST_BINARY_ASSERT(assert_type, comp, ...) \
+ DOCTEST_FUNC_SCOPE_BEGIN { \
+ doctest::detail::ResultBuilder DOCTEST_RB(doctest::assertType::assert_type, __FILE__, \
+ __LINE__, #__VA_ARGS__); \
+ DOCTEST_WRAP_IN_TRY( \
+ DOCTEST_RB.binary_assert<doctest::detail::binaryAssertComparison::comp>( \
+ __VA_ARGS__)) \
+ DOCTEST_ASSERT_LOG_REACT_RETURN(DOCTEST_RB); \
+ } DOCTEST_FUNC_SCOPE_END
+
+#define DOCTEST_UNARY_ASSERT(assert_type, ...) \
+ DOCTEST_FUNC_SCOPE_BEGIN { \
+ doctest::detail::ResultBuilder DOCTEST_RB(doctest::assertType::assert_type, __FILE__, \
+ __LINE__, #__VA_ARGS__); \
+ DOCTEST_WRAP_IN_TRY(DOCTEST_RB.unary_assert(__VA_ARGS__)) \
+ DOCTEST_ASSERT_LOG_REACT_RETURN(DOCTEST_RB); \
+ } DOCTEST_FUNC_SCOPE_END
#else // DOCTEST_CONFIG_SUPER_FAST_ASSERTS
@@ -2226,6 +2384,14 @@ int registerReporter(const char* name, int priority, bool isReporter) {
doctest::detail::ExpressionDecomposer(doctest::assertType::assert_type) \
<< __VA_ARGS__) DOCTEST_CLANG_SUPPRESS_WARNING_POP
+#define DOCTEST_BINARY_ASSERT(assert_type, comparison, ...) \
+ doctest::detail::binary_assert<doctest::detail::binaryAssertComparison::comparison>( \
+ doctest::assertType::assert_type, __FILE__, __LINE__, #__VA_ARGS__, __VA_ARGS__)
+
+#define DOCTEST_UNARY_ASSERT(assert_type, ...) \
+ doctest::detail::unary_assert(doctest::assertType::assert_type, __FILE__, __LINE__, \
+ #__VA_ARGS__, __VA_ARGS__)
+
#endif // DOCTEST_CONFIG_SUPER_FAST_ASSERTS
#define DOCTEST_WARN(...) DOCTEST_ASSERT_IMPLEMENT_1(DT_WARN, __VA_ARGS__)
@@ -2236,34 +2402,62 @@ int registerReporter(const char* name, int priority, bool isReporter) {
#define DOCTEST_REQUIRE_FALSE(...) DOCTEST_ASSERT_IMPLEMENT_1(DT_REQUIRE_FALSE, __VA_ARGS__)
// clang-format off
-#define DOCTEST_WARN_MESSAGE(cond, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_ASSERT_IMPLEMENT_2(DT_WARN, cond); }()
-#define DOCTEST_CHECK_MESSAGE(cond, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_ASSERT_IMPLEMENT_2(DT_CHECK, cond); }()
-#define DOCTEST_REQUIRE_MESSAGE(cond, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_ASSERT_IMPLEMENT_2(DT_REQUIRE, cond); }()
-#define DOCTEST_WARN_FALSE_MESSAGE(cond, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_ASSERT_IMPLEMENT_2(DT_WARN_FALSE, cond); }()
-#define DOCTEST_CHECK_FALSE_MESSAGE(cond, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_ASSERT_IMPLEMENT_2(DT_CHECK_FALSE, cond); }()
-#define DOCTEST_REQUIRE_FALSE_MESSAGE(cond, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_ASSERT_IMPLEMENT_2(DT_REQUIRE_FALSE, cond); }()
+#define DOCTEST_WARN_MESSAGE(cond, ...) DOCTEST_FUNC_SCOPE_BEGIN { DOCTEST_INFO(__VA_ARGS__); DOCTEST_ASSERT_IMPLEMENT_2(DT_WARN, cond); } DOCTEST_FUNC_SCOPE_END
+#define DOCTEST_CHECK_MESSAGE(cond, ...) DOCTEST_FUNC_SCOPE_BEGIN { DOCTEST_INFO(__VA_ARGS__); DOCTEST_ASSERT_IMPLEMENT_2(DT_CHECK, cond); } DOCTEST_FUNC_SCOPE_END
+#define DOCTEST_REQUIRE_MESSAGE(cond, ...) DOCTEST_FUNC_SCOPE_BEGIN { DOCTEST_INFO(__VA_ARGS__); DOCTEST_ASSERT_IMPLEMENT_2(DT_REQUIRE, cond); } DOCTEST_FUNC_SCOPE_END
+#define DOCTEST_WARN_FALSE_MESSAGE(cond, ...) DOCTEST_FUNC_SCOPE_BEGIN { DOCTEST_INFO(__VA_ARGS__); DOCTEST_ASSERT_IMPLEMENT_2(DT_WARN_FALSE, cond); } DOCTEST_FUNC_SCOPE_END
+#define DOCTEST_CHECK_FALSE_MESSAGE(cond, ...) DOCTEST_FUNC_SCOPE_BEGIN { DOCTEST_INFO(__VA_ARGS__); DOCTEST_ASSERT_IMPLEMENT_2(DT_CHECK_FALSE, cond); } DOCTEST_FUNC_SCOPE_END
+#define DOCTEST_REQUIRE_FALSE_MESSAGE(cond, ...) DOCTEST_FUNC_SCOPE_BEGIN { DOCTEST_INFO(__VA_ARGS__); DOCTEST_ASSERT_IMPLEMENT_2(DT_REQUIRE_FALSE, cond); } DOCTEST_FUNC_SCOPE_END
// clang-format on
+#define DOCTEST_WARN_EQ(...) DOCTEST_BINARY_ASSERT(DT_WARN_EQ, eq, __VA_ARGS__)
+#define DOCTEST_CHECK_EQ(...) DOCTEST_BINARY_ASSERT(DT_CHECK_EQ, eq, __VA_ARGS__)
+#define DOCTEST_REQUIRE_EQ(...) DOCTEST_BINARY_ASSERT(DT_REQUIRE_EQ, eq, __VA_ARGS__)
+#define DOCTEST_WARN_NE(...) DOCTEST_BINARY_ASSERT(DT_WARN_NE, ne, __VA_ARGS__)
+#define DOCTEST_CHECK_NE(...) DOCTEST_BINARY_ASSERT(DT_CHECK_NE, ne, __VA_ARGS__)
+#define DOCTEST_REQUIRE_NE(...) DOCTEST_BINARY_ASSERT(DT_REQUIRE_NE, ne, __VA_ARGS__)
+#define DOCTEST_WARN_GT(...) DOCTEST_BINARY_ASSERT(DT_WARN_GT, gt, __VA_ARGS__)
+#define DOCTEST_CHECK_GT(...) DOCTEST_BINARY_ASSERT(DT_CHECK_GT, gt, __VA_ARGS__)
+#define DOCTEST_REQUIRE_GT(...) DOCTEST_BINARY_ASSERT(DT_REQUIRE_GT, gt, __VA_ARGS__)
+#define DOCTEST_WARN_LT(...) DOCTEST_BINARY_ASSERT(DT_WARN_LT, lt, __VA_ARGS__)
+#define DOCTEST_CHECK_LT(...) DOCTEST_BINARY_ASSERT(DT_CHECK_LT, lt, __VA_ARGS__)
+#define DOCTEST_REQUIRE_LT(...) DOCTEST_BINARY_ASSERT(DT_REQUIRE_LT, lt, __VA_ARGS__)
+#define DOCTEST_WARN_GE(...) DOCTEST_BINARY_ASSERT(DT_WARN_GE, ge, __VA_ARGS__)
+#define DOCTEST_CHECK_GE(...) DOCTEST_BINARY_ASSERT(DT_CHECK_GE, ge, __VA_ARGS__)
+#define DOCTEST_REQUIRE_GE(...) DOCTEST_BINARY_ASSERT(DT_REQUIRE_GE, ge, __VA_ARGS__)
+#define DOCTEST_WARN_LE(...) DOCTEST_BINARY_ASSERT(DT_WARN_LE, le, __VA_ARGS__)
+#define DOCTEST_CHECK_LE(...) DOCTEST_BINARY_ASSERT(DT_CHECK_LE, le, __VA_ARGS__)
+#define DOCTEST_REQUIRE_LE(...) DOCTEST_BINARY_ASSERT(DT_REQUIRE_LE, le, __VA_ARGS__)
+
+#define DOCTEST_WARN_UNARY(...) DOCTEST_UNARY_ASSERT(DT_WARN_UNARY, __VA_ARGS__)
+#define DOCTEST_CHECK_UNARY(...) DOCTEST_UNARY_ASSERT(DT_CHECK_UNARY, __VA_ARGS__)
+#define DOCTEST_REQUIRE_UNARY(...) DOCTEST_UNARY_ASSERT(DT_REQUIRE_UNARY, __VA_ARGS__)
+#define DOCTEST_WARN_UNARY_FALSE(...) DOCTEST_UNARY_ASSERT(DT_WARN_UNARY_FALSE, __VA_ARGS__)
+#define DOCTEST_CHECK_UNARY_FALSE(...) DOCTEST_UNARY_ASSERT(DT_CHECK_UNARY_FALSE, __VA_ARGS__)
+#define DOCTEST_REQUIRE_UNARY_FALSE(...) DOCTEST_UNARY_ASSERT(DT_REQUIRE_UNARY_FALSE, __VA_ARGS__)
+
+#ifndef DOCTEST_CONFIG_NO_EXCEPTIONS
+
#define DOCTEST_ASSERT_THROWS_AS(expr, assert_type, message, ...) \
- [&] { \
+ DOCTEST_FUNC_SCOPE_BEGIN { \
if(!doctest::getContextOptions()->no_throw) { \
doctest::detail::ResultBuilder DOCTEST_RB(doctest::assertType::assert_type, __FILE__, \
__LINE__, #expr, #__VA_ARGS__, message); \
try { \
DOCTEST_CAST_TO_VOID(expr) \
- } catch(const typename doctest::detail::remove_const< \
- typename doctest::detail::remove_reference<__VA_ARGS__>::type>::type&) { \
+ } catch(const typename doctest::detail::types::remove_const< \
+ typename doctest::detail::types::remove_reference<__VA_ARGS__>::type>::type&) {\
DOCTEST_RB.translateException(); \
DOCTEST_RB.m_threw_as = true; \
} catch(...) { DOCTEST_RB.translateException(); } \
DOCTEST_ASSERT_LOG_REACT_RETURN(DOCTEST_RB); \
- } else { \
- return false; \
+ } else { /* NOLINT(*-else-after-return) */ \
+ DOCTEST_FUNC_SCOPE_RET(false); \
} \
- }()
+ } DOCTEST_FUNC_SCOPE_END
#define DOCTEST_ASSERT_THROWS_WITH(expr, expr_str, assert_type, ...) \
- [&] { \
+ DOCTEST_FUNC_SCOPE_BEGIN { \
if(!doctest::getContextOptions()->no_throw) { \
doctest::detail::ResultBuilder DOCTEST_RB(doctest::assertType::assert_type, __FILE__, \
__LINE__, expr_str, "", __VA_ARGS__); \
@@ -2271,20 +2465,20 @@ int registerReporter(const char* name, int priority, bool isReporter) {
DOCTEST_CAST_TO_VOID(expr) \
} catch(...) { DOCTEST_RB.translateException(); } \
DOCTEST_ASSERT_LOG_REACT_RETURN(DOCTEST_RB); \
- } else { \
- return false; \
+ } else { /* NOLINT(*-else-after-return) */ \
+ DOCTEST_FUNC_SCOPE_RET(false); \
} \
- }()
+ } DOCTEST_FUNC_SCOPE_END
#define DOCTEST_ASSERT_NOTHROW(assert_type, ...) \
- [&] { \
+ DOCTEST_FUNC_SCOPE_BEGIN { \
doctest::detail::ResultBuilder DOCTEST_RB(doctest::assertType::assert_type, __FILE__, \
__LINE__, #__VA_ARGS__); \
try { \
DOCTEST_CAST_TO_VOID(__VA_ARGS__) \
} catch(...) { DOCTEST_RB.translateException(); } \
DOCTEST_ASSERT_LOG_REACT_RETURN(DOCTEST_RB); \
- }()
+ } DOCTEST_FUNC_SCOPE_END
// clang-format off
#define DOCTEST_WARN_THROWS(...) DOCTEST_ASSERT_THROWS_WITH((__VA_ARGS__), #__VA_ARGS__, DT_WARN_THROWS, "")
@@ -2307,166 +2501,23 @@ int registerReporter(const char* name, int priority, bool isReporter) {
#define DOCTEST_CHECK_NOTHROW(...) DOCTEST_ASSERT_NOTHROW(DT_CHECK_NOTHROW, __VA_ARGS__)
#define DOCTEST_REQUIRE_NOTHROW(...) DOCTEST_ASSERT_NOTHROW(DT_REQUIRE_NOTHROW, __VA_ARGS__)
-#define DOCTEST_WARN_THROWS_MESSAGE(expr, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_WARN_THROWS(expr); }()
-#define DOCTEST_CHECK_THROWS_MESSAGE(expr, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_CHECK_THROWS(expr); }()
-#define DOCTEST_REQUIRE_THROWS_MESSAGE(expr, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_REQUIRE_THROWS(expr); }()
-#define DOCTEST_WARN_THROWS_AS_MESSAGE(expr, ex, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_WARN_THROWS_AS(expr, ex); }()
-#define DOCTEST_CHECK_THROWS_AS_MESSAGE(expr, ex, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_CHECK_THROWS_AS(expr, ex); }()
-#define DOCTEST_REQUIRE_THROWS_AS_MESSAGE(expr, ex, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_REQUIRE_THROWS_AS(expr, ex); }()
-#define DOCTEST_WARN_THROWS_WITH_MESSAGE(expr, with, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_WARN_THROWS_WITH(expr, with); }()
-#define DOCTEST_CHECK_THROWS_WITH_MESSAGE(expr, with, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_CHECK_THROWS_WITH(expr, with); }()
-#define DOCTEST_REQUIRE_THROWS_WITH_MESSAGE(expr, with, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_REQUIRE_THROWS_WITH(expr, with); }()
-#define DOCTEST_WARN_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_WARN_THROWS_WITH_AS(expr, with, ex); }()
-#define DOCTEST_CHECK_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_CHECK_THROWS_WITH_AS(expr, with, ex); }()
-#define DOCTEST_REQUIRE_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_REQUIRE_THROWS_WITH_AS(expr, with, ex); }()
-#define DOCTEST_WARN_NOTHROW_MESSAGE(expr, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_WARN_NOTHROW(expr); }()
-#define DOCTEST_CHECK_NOTHROW_MESSAGE(expr, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_CHECK_NOTHROW(expr); }()
-#define DOCTEST_REQUIRE_NOTHROW_MESSAGE(expr, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_REQUIRE_NOTHROW(expr); }()
+#define DOCTEST_WARN_THROWS_MESSAGE(expr, ...) DOCTEST_FUNC_SCOPE_BEGIN { DOCTEST_INFO(__VA_ARGS__); DOCTEST_WARN_THROWS(expr); } DOCTEST_FUNC_SCOPE_END
+#define DOCTEST_CHECK_THROWS_MESSAGE(expr, ...) DOCTEST_FUNC_SCOPE_BEGIN { DOCTEST_INFO(__VA_ARGS__); DOCTEST_CHECK_THROWS(expr); } DOCTEST_FUNC_SCOPE_END
+#define DOCTEST_REQUIRE_THROWS_MESSAGE(expr, ...) DOCTEST_FUNC_SCOPE_BEGIN { DOCTEST_INFO(__VA_ARGS__); DOCTEST_REQUIRE_THROWS(expr); } DOCTEST_FUNC_SCOPE_END
+#define DOCTEST_WARN_THROWS_AS_MESSAGE(expr, ex, ...) DOCTEST_FUNC_SCOPE_BEGIN { DOCTEST_INFO(__VA_ARGS__); DOCTEST_WARN_THROWS_AS(expr, ex); } DOCTEST_FUNC_SCOPE_END
+#define DOCTEST_CHECK_THROWS_AS_MESSAGE(expr, ex, ...) DOCTEST_FUNC_SCOPE_BEGIN { DOCTEST_INFO(__VA_ARGS__); DOCTEST_CHECK_THROWS_AS(expr, ex); } DOCTEST_FUNC_SCOPE_END
+#define DOCTEST_REQUIRE_THROWS_AS_MESSAGE(expr, ex, ...) DOCTEST_FUNC_SCOPE_BEGIN { DOCTEST_INFO(__VA_ARGS__); DOCTEST_REQUIRE_THROWS_AS(expr, ex); } DOCTEST_FUNC_SCOPE_END
+#define DOCTEST_WARN_THROWS_WITH_MESSAGE(expr, with, ...) DOCTEST_FUNC_SCOPE_BEGIN { DOCTEST_INFO(__VA_ARGS__); DOCTEST_WARN_THROWS_WITH(expr, with); } DOCTEST_FUNC_SCOPE_END
+#define DOCTEST_CHECK_THROWS_WITH_MESSAGE(expr, with, ...) DOCTEST_FUNC_SCOPE_BEGIN { DOCTEST_INFO(__VA_ARGS__); DOCTEST_CHECK_THROWS_WITH(expr, with); } DOCTEST_FUNC_SCOPE_END
+#define DOCTEST_REQUIRE_THROWS_WITH_MESSAGE(expr, with, ...) DOCTEST_FUNC_SCOPE_BEGIN { DOCTEST_INFO(__VA_ARGS__); DOCTEST_REQUIRE_THROWS_WITH(expr, with); } DOCTEST_FUNC_SCOPE_END
+#define DOCTEST_WARN_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) DOCTEST_FUNC_SCOPE_BEGIN { DOCTEST_INFO(__VA_ARGS__); DOCTEST_WARN_THROWS_WITH_AS(expr, with, ex); } DOCTEST_FUNC_SCOPE_END
+#define DOCTEST_CHECK_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) DOCTEST_FUNC_SCOPE_BEGIN { DOCTEST_INFO(__VA_ARGS__); DOCTEST_CHECK_THROWS_WITH_AS(expr, with, ex); } DOCTEST_FUNC_SCOPE_END
+#define DOCTEST_REQUIRE_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) DOCTEST_FUNC_SCOPE_BEGIN { DOCTEST_INFO(__VA_ARGS__); DOCTEST_REQUIRE_THROWS_WITH_AS(expr, with, ex); } DOCTEST_FUNC_SCOPE_END
+#define DOCTEST_WARN_NOTHROW_MESSAGE(expr, ...) DOCTEST_FUNC_SCOPE_BEGIN { DOCTEST_INFO(__VA_ARGS__); DOCTEST_WARN_NOTHROW(expr); } DOCTEST_FUNC_SCOPE_END
+#define DOCTEST_CHECK_NOTHROW_MESSAGE(expr, ...) DOCTEST_FUNC_SCOPE_BEGIN { DOCTEST_INFO(__VA_ARGS__); DOCTEST_CHECK_NOTHROW(expr); } DOCTEST_FUNC_SCOPE_END
+#define DOCTEST_REQUIRE_NOTHROW_MESSAGE(expr, ...) DOCTEST_FUNC_SCOPE_BEGIN { DOCTEST_INFO(__VA_ARGS__); DOCTEST_REQUIRE_NOTHROW(expr); } DOCTEST_FUNC_SCOPE_END
// clang-format on
-#ifndef DOCTEST_CONFIG_SUPER_FAST_ASSERTS
-
-#define DOCTEST_BINARY_ASSERT(assert_type, comp, ...) \
- [&] { \
- doctest::detail::ResultBuilder DOCTEST_RB(doctest::assertType::assert_type, __FILE__, \
- __LINE__, #__VA_ARGS__); \
- DOCTEST_WRAP_IN_TRY( \
- DOCTEST_RB.binary_assert<doctest::detail::binaryAssertComparison::comp>( \
- __VA_ARGS__)) \
- DOCTEST_ASSERT_LOG_REACT_RETURN(DOCTEST_RB); \
- }()
-
-#define DOCTEST_UNARY_ASSERT(assert_type, ...) \
- [&] { \
- doctest::detail::ResultBuilder DOCTEST_RB(doctest::assertType::assert_type, __FILE__, \
- __LINE__, #__VA_ARGS__); \
- DOCTEST_WRAP_IN_TRY(DOCTEST_RB.unary_assert(__VA_ARGS__)) \
- DOCTEST_ASSERT_LOG_REACT_RETURN(DOCTEST_RB); \
- }()
-
-#else // DOCTEST_CONFIG_SUPER_FAST_ASSERTS
-
-#define DOCTEST_BINARY_ASSERT(assert_type, comparison, ...) \
- doctest::detail::binary_assert<doctest::detail::binaryAssertComparison::comparison>( \
- doctest::assertType::assert_type, __FILE__, __LINE__, #__VA_ARGS__, __VA_ARGS__)
-
-#define DOCTEST_UNARY_ASSERT(assert_type, ...) \
- doctest::detail::unary_assert(doctest::assertType::assert_type, __FILE__, __LINE__, \
- #__VA_ARGS__, __VA_ARGS__)
-
-#endif // DOCTEST_CONFIG_SUPER_FAST_ASSERTS
-
-#define DOCTEST_WARN_EQ(...) DOCTEST_BINARY_ASSERT(DT_WARN_EQ, eq, __VA_ARGS__)
-#define DOCTEST_CHECK_EQ(...) DOCTEST_BINARY_ASSERT(DT_CHECK_EQ, eq, __VA_ARGS__)
-#define DOCTEST_REQUIRE_EQ(...) DOCTEST_BINARY_ASSERT(DT_REQUIRE_EQ, eq, __VA_ARGS__)
-#define DOCTEST_WARN_NE(...) DOCTEST_BINARY_ASSERT(DT_WARN_NE, ne, __VA_ARGS__)
-#define DOCTEST_CHECK_NE(...) DOCTEST_BINARY_ASSERT(DT_CHECK_NE, ne, __VA_ARGS__)
-#define DOCTEST_REQUIRE_NE(...) DOCTEST_BINARY_ASSERT(DT_REQUIRE_NE, ne, __VA_ARGS__)
-#define DOCTEST_WARN_GT(...) DOCTEST_BINARY_ASSERT(DT_WARN_GT, gt, __VA_ARGS__)
-#define DOCTEST_CHECK_GT(...) DOCTEST_BINARY_ASSERT(DT_CHECK_GT, gt, __VA_ARGS__)
-#define DOCTEST_REQUIRE_GT(...) DOCTEST_BINARY_ASSERT(DT_REQUIRE_GT, gt, __VA_ARGS__)
-#define DOCTEST_WARN_LT(...) DOCTEST_BINARY_ASSERT(DT_WARN_LT, lt, __VA_ARGS__)
-#define DOCTEST_CHECK_LT(...) DOCTEST_BINARY_ASSERT(DT_CHECK_LT, lt, __VA_ARGS__)
-#define DOCTEST_REQUIRE_LT(...) DOCTEST_BINARY_ASSERT(DT_REQUIRE_LT, lt, __VA_ARGS__)
-#define DOCTEST_WARN_GE(...) DOCTEST_BINARY_ASSERT(DT_WARN_GE, ge, __VA_ARGS__)
-#define DOCTEST_CHECK_GE(...) DOCTEST_BINARY_ASSERT(DT_CHECK_GE, ge, __VA_ARGS__)
-#define DOCTEST_REQUIRE_GE(...) DOCTEST_BINARY_ASSERT(DT_REQUIRE_GE, ge, __VA_ARGS__)
-#define DOCTEST_WARN_LE(...) DOCTEST_BINARY_ASSERT(DT_WARN_LE, le, __VA_ARGS__)
-#define DOCTEST_CHECK_LE(...) DOCTEST_BINARY_ASSERT(DT_CHECK_LE, le, __VA_ARGS__)
-#define DOCTEST_REQUIRE_LE(...) DOCTEST_BINARY_ASSERT(DT_REQUIRE_LE, le, __VA_ARGS__)
-
-#define DOCTEST_WARN_UNARY(...) DOCTEST_UNARY_ASSERT(DT_WARN_UNARY, __VA_ARGS__)
-#define DOCTEST_CHECK_UNARY(...) DOCTEST_UNARY_ASSERT(DT_CHECK_UNARY, __VA_ARGS__)
-#define DOCTEST_REQUIRE_UNARY(...) DOCTEST_UNARY_ASSERT(DT_REQUIRE_UNARY, __VA_ARGS__)
-#define DOCTEST_WARN_UNARY_FALSE(...) DOCTEST_UNARY_ASSERT(DT_WARN_UNARY_FALSE, __VA_ARGS__)
-#define DOCTEST_CHECK_UNARY_FALSE(...) DOCTEST_UNARY_ASSERT(DT_CHECK_UNARY_FALSE, __VA_ARGS__)
-#define DOCTEST_REQUIRE_UNARY_FALSE(...) DOCTEST_UNARY_ASSERT(DT_REQUIRE_UNARY_FALSE, __VA_ARGS__)
-
-#ifdef DOCTEST_CONFIG_NO_EXCEPTIONS
-
-#undef DOCTEST_WARN_THROWS
-#undef DOCTEST_CHECK_THROWS
-#undef DOCTEST_REQUIRE_THROWS
-#undef DOCTEST_WARN_THROWS_AS
-#undef DOCTEST_CHECK_THROWS_AS
-#undef DOCTEST_REQUIRE_THROWS_AS
-#undef DOCTEST_WARN_THROWS_WITH
-#undef DOCTEST_CHECK_THROWS_WITH
-#undef DOCTEST_REQUIRE_THROWS_WITH
-#undef DOCTEST_WARN_THROWS_WITH_AS
-#undef DOCTEST_CHECK_THROWS_WITH_AS
-#undef DOCTEST_REQUIRE_THROWS_WITH_AS
-#undef DOCTEST_WARN_NOTHROW
-#undef DOCTEST_CHECK_NOTHROW
-#undef DOCTEST_REQUIRE_NOTHROW
-
-#undef DOCTEST_WARN_THROWS_MESSAGE
-#undef DOCTEST_CHECK_THROWS_MESSAGE
-#undef DOCTEST_REQUIRE_THROWS_MESSAGE
-#undef DOCTEST_WARN_THROWS_AS_MESSAGE
-#undef DOCTEST_CHECK_THROWS_AS_MESSAGE
-#undef DOCTEST_REQUIRE_THROWS_AS_MESSAGE
-#undef DOCTEST_WARN_THROWS_WITH_MESSAGE
-#undef DOCTEST_CHECK_THROWS_WITH_MESSAGE
-#undef DOCTEST_REQUIRE_THROWS_WITH_MESSAGE
-#undef DOCTEST_WARN_THROWS_WITH_AS_MESSAGE
-#undef DOCTEST_CHECK_THROWS_WITH_AS_MESSAGE
-#undef DOCTEST_REQUIRE_THROWS_WITH_AS_MESSAGE
-#undef DOCTEST_WARN_NOTHROW_MESSAGE
-#undef DOCTEST_CHECK_NOTHROW_MESSAGE
-#undef DOCTEST_REQUIRE_NOTHROW_MESSAGE
-
-#ifdef DOCTEST_CONFIG_NO_EXCEPTIONS_BUT_WITH_ALL_ASSERTS
-
-#define DOCTEST_WARN_THROWS(...) ([] { return false; })
-#define DOCTEST_CHECK_THROWS(...) ([] { return false; })
-#define DOCTEST_REQUIRE_THROWS(...) ([] { return false; })
-#define DOCTEST_WARN_THROWS_AS(expr, ...) ([] { return false; })
-#define DOCTEST_CHECK_THROWS_AS(expr, ...) ([] { return false; })
-#define DOCTEST_REQUIRE_THROWS_AS(expr, ...) ([] { return false; })
-#define DOCTEST_WARN_THROWS_WITH(expr, ...) ([] { return false; })
-#define DOCTEST_CHECK_THROWS_WITH(expr, ...) ([] { return false; })
-#define DOCTEST_REQUIRE_THROWS_WITH(expr, ...) ([] { return false; })
-#define DOCTEST_WARN_THROWS_WITH_AS(expr, with, ...) ([] { return false; })
-#define DOCTEST_CHECK_THROWS_WITH_AS(expr, with, ...) ([] { return false; })
-#define DOCTEST_REQUIRE_THROWS_WITH_AS(expr, with, ...) ([] { return false; })
-#define DOCTEST_WARN_NOTHROW(...) ([] { return false; })
-#define DOCTEST_CHECK_NOTHROW(...) ([] { return false; })
-#define DOCTEST_REQUIRE_NOTHROW(...) ([] { return false; })
-
-#define DOCTEST_WARN_THROWS_MESSAGE(expr, ...) ([] { return false; })
-#define DOCTEST_CHECK_THROWS_MESSAGE(expr, ...) ([] { return false; })
-#define DOCTEST_REQUIRE_THROWS_MESSAGE(expr, ...) ([] { return false; })
-#define DOCTEST_WARN_THROWS_AS_MESSAGE(expr, ex, ...) ([] { return false; })
-#define DOCTEST_CHECK_THROWS_AS_MESSAGE(expr, ex, ...) ([] { return false; })
-#define DOCTEST_REQUIRE_THROWS_AS_MESSAGE(expr, ex, ...) ([] { return false; })
-#define DOCTEST_WARN_THROWS_WITH_MESSAGE(expr, with, ...) ([] { return false; })
-#define DOCTEST_CHECK_THROWS_WITH_MESSAGE(expr, with, ...) ([] { return false; })
-#define DOCTEST_REQUIRE_THROWS_WITH_MESSAGE(expr, with, ...) ([] { return false; })
-#define DOCTEST_WARN_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) ([] { return false; })
-#define DOCTEST_CHECK_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) ([] { return false; })
-#define DOCTEST_REQUIRE_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) ([] { return false; })
-#define DOCTEST_WARN_NOTHROW_MESSAGE(expr, ...) ([] { return false; })
-#define DOCTEST_CHECK_NOTHROW_MESSAGE(expr, ...) ([] { return false; })
-#define DOCTEST_REQUIRE_NOTHROW_MESSAGE(expr, ...) ([] { return false; })
-
-#else // DOCTEST_CONFIG_NO_EXCEPTIONS_BUT_WITH_ALL_ASSERTS
-
-#undef DOCTEST_REQUIRE
-#undef DOCTEST_REQUIRE_FALSE
-#undef DOCTEST_REQUIRE_MESSAGE
-#undef DOCTEST_REQUIRE_FALSE_MESSAGE
-#undef DOCTEST_REQUIRE_EQ
-#undef DOCTEST_REQUIRE_NE
-#undef DOCTEST_REQUIRE_GT
-#undef DOCTEST_REQUIRE_LT
-#undef DOCTEST_REQUIRE_GE
-#undef DOCTEST_REQUIRE_LE
-#undef DOCTEST_REQUIRE_UNARY
-#undef DOCTEST_REQUIRE_UNARY_FALSE
-
-#endif // DOCTEST_CONFIG_NO_EXCEPTIONS_BUT_WITH_ALL_ASSERTS
-
#endif // DOCTEST_CONFIG_NO_EXCEPTIONS
// =================================================================================================
@@ -2476,7 +2527,7 @@ int registerReporter(const char* name, int priority, bool isReporter) {
#else // DOCTEST_CONFIG_DISABLE
#define DOCTEST_IMPLEMENT_FIXTURE(der, base, func, name) \
- namespace { \
+ namespace /* NOLINT */ { \
template <typename DOCTEST_UNUSED_TEMPLATE_TYPE> \
struct der : public base \
{ void f(); }; \
@@ -2502,8 +2553,8 @@ int registerReporter(const char* name, int priority, bool isReporter) {
DOCTEST_ANONYMOUS(DOCTEST_ANON_FUNC_), name)
// for converting types to strings without the <typeinfo> header and demangling
+#define DOCTEST_TYPE_TO_STRING_AS(str, ...) static_assert(true, "")
#define DOCTEST_TYPE_TO_STRING(...) static_assert(true, "")
-#define DOCTEST_TYPE_TO_STRING_IMPL(...)
// for typed tests
#define DOCTEST_TEST_CASE_TEMPLATE(name, type, ...) \
@@ -2521,13 +2572,13 @@ int registerReporter(const char* name, int priority, bool isReporter) {
#define DOCTEST_SUBCASE(name)
// for a testsuite block
-#define DOCTEST_TEST_SUITE(name) namespace
+#define DOCTEST_TEST_SUITE(name) namespace // NOLINT
// for starting a testsuite block
#define DOCTEST_TEST_SUITE_BEGIN(name) static_assert(true, "")
// for ending a testsuite block
-#define DOCTEST_TEST_SUITE_END typedef int DOCTEST_ANONYMOUS(DOCTEST_ANON_FOR_SEMICOLON_)
+#define DOCTEST_TEST_SUITE_END using DOCTEST_ANONYMOUS(DOCTEST_ANON_FOR_SEMICOLON_) = int
#define DOCTEST_REGISTER_EXCEPTION_TRANSLATOR(signature) \
template <typename DOCTEST_UNUSED_TEMPLATE_TYPE> \
@@ -2545,7 +2596,8 @@ int registerReporter(const char* name, int priority, bool isReporter) {
#define DOCTEST_FAIL_CHECK(...) (static_cast<void>(0))
#define DOCTEST_FAIL(...) (static_cast<void>(0))
-#ifdef DOCTEST_CONFIG_EVALUATE_ASSERTS_EVEN_WHEN_DISABLED
+#if defined(DOCTEST_CONFIG_EVALUATE_ASSERTS_EVEN_WHEN_DISABLED) \
+ && defined(DOCTEST_CONFIG_ASSERTS_RETURN_VALUES)
#define DOCTEST_WARN(...) [&] { return __VA_ARGS__; }()
#define DOCTEST_CHECK(...) [&] { return __VA_ARGS__; }()
@@ -2601,85 +2653,196 @@ namespace detail {
#define DOCTEST_CHECK_UNARY_FALSE(...) [&] { return !(__VA_ARGS__); }()
#define DOCTEST_REQUIRE_UNARY_FALSE(...) [&] { return !(__VA_ARGS__); }()
+#ifndef DOCTEST_CONFIG_NO_EXCEPTIONS
+
+#define DOCTEST_WARN_THROWS_WITH(expr, with, ...) [] { static_assert(false, "Exception translation is not available when doctest is disabled."); return false; }()
+#define DOCTEST_CHECK_THROWS_WITH(expr, with, ...) DOCTEST_WARN_THROWS_WITH(,,)
+#define DOCTEST_REQUIRE_THROWS_WITH(expr, with, ...) DOCTEST_WARN_THROWS_WITH(,,)
+#define DOCTEST_WARN_THROWS_WITH_AS(expr, with, ex, ...) DOCTEST_WARN_THROWS_WITH(,,)
+#define DOCTEST_CHECK_THROWS_WITH_AS(expr, with, ex, ...) DOCTEST_WARN_THROWS_WITH(,,)
+#define DOCTEST_REQUIRE_THROWS_WITH_AS(expr, with, ex, ...) DOCTEST_WARN_THROWS_WITH(,,)
+
+#define DOCTEST_WARN_THROWS_WITH_MESSAGE(expr, with, ...) DOCTEST_WARN_THROWS_WITH(,,)
+#define DOCTEST_CHECK_THROWS_WITH_MESSAGE(expr, with, ...) DOCTEST_WARN_THROWS_WITH(,,)
+#define DOCTEST_REQUIRE_THROWS_WITH_MESSAGE(expr, with, ...) DOCTEST_WARN_THROWS_WITH(,,)
+#define DOCTEST_WARN_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) DOCTEST_WARN_THROWS_WITH(,,)
+#define DOCTEST_CHECK_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) DOCTEST_WARN_THROWS_WITH(,,)
+#define DOCTEST_REQUIRE_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) DOCTEST_WARN_THROWS_WITH(,,)
+
+#define DOCTEST_WARN_THROWS(...) [&] { try { __VA_ARGS__; return false; } catch (...) { return true; } }()
+#define DOCTEST_CHECK_THROWS(...) [&] { try { __VA_ARGS__; return false; } catch (...) { return true; } }()
+#define DOCTEST_REQUIRE_THROWS(...) [&] { try { __VA_ARGS__; return false; } catch (...) { return true; } }()
+#define DOCTEST_WARN_THROWS_AS(expr, ...) [&] { try { expr; } catch (__VA_ARGS__) { return true; } catch (...) { } return false; }()
+#define DOCTEST_CHECK_THROWS_AS(expr, ...) [&] { try { expr; } catch (__VA_ARGS__) { return true; } catch (...) { } return false; }()
+#define DOCTEST_REQUIRE_THROWS_AS(expr, ...) [&] { try { expr; } catch (__VA_ARGS__) { return true; } catch (...) { } return false; }()
+#define DOCTEST_WARN_NOTHROW(...) [&] { try { __VA_ARGS__; return true; } catch (...) { return false; } }()
+#define DOCTEST_CHECK_NOTHROW(...) [&] { try { __VA_ARGS__; return true; } catch (...) { return false; } }()
+#define DOCTEST_REQUIRE_NOTHROW(...) [&] { try { __VA_ARGS__; return true; } catch (...) { return false; } }()
+
+#define DOCTEST_WARN_THROWS_MESSAGE(expr, ...) [&] { try { __VA_ARGS__; return false; } catch (...) { return true; } }()
+#define DOCTEST_CHECK_THROWS_MESSAGE(expr, ...) [&] { try { __VA_ARGS__; return false; } catch (...) { return true; } }()
+#define DOCTEST_REQUIRE_THROWS_MESSAGE(expr, ...) [&] { try { __VA_ARGS__; return false; } catch (...) { return true; } }()
+#define DOCTEST_WARN_THROWS_AS_MESSAGE(expr, ex, ...) [&] { try { expr; } catch (__VA_ARGS__) { return true; } catch (...) { } return false; }()
+#define DOCTEST_CHECK_THROWS_AS_MESSAGE(expr, ex, ...) [&] { try { expr; } catch (__VA_ARGS__) { return true; } catch (...) { } return false; }()
+#define DOCTEST_REQUIRE_THROWS_AS_MESSAGE(expr, ex, ...) [&] { try { expr; } catch (__VA_ARGS__) { return true; } catch (...) { } return false; }()
+#define DOCTEST_WARN_NOTHROW_MESSAGE(expr, ...) [&] { try { __VA_ARGS__; return true; } catch (...) { return false; } }()
+#define DOCTEST_CHECK_NOTHROW_MESSAGE(expr, ...) [&] { try { __VA_ARGS__; return true; } catch (...) { return false; } }()
+#define DOCTEST_REQUIRE_NOTHROW_MESSAGE(expr, ...) [&] { try { __VA_ARGS__; return true; } catch (...) { return false; } }()
+
+#endif // DOCTEST_CONFIG_NO_EXCEPTIONS
+
#else // DOCTEST_CONFIG_EVALUATE_ASSERTS_EVEN_WHEN_DISABLED
-#define DOCTEST_WARN(...) ([] { return false; })
-#define DOCTEST_CHECK(...) ([] { return false; })
-#define DOCTEST_REQUIRE(...) ([] { return false; })
-#define DOCTEST_WARN_FALSE(...) ([] { return false; })
-#define DOCTEST_CHECK_FALSE(...) ([] { return false; })
-#define DOCTEST_REQUIRE_FALSE(...) ([] { return false; })
-
-#define DOCTEST_WARN_MESSAGE(cond, ...) ([] { return false; })
-#define DOCTEST_CHECK_MESSAGE(cond, ...) ([] { return false; })
-#define DOCTEST_REQUIRE_MESSAGE(cond, ...) ([] { return false; })
-#define DOCTEST_WARN_FALSE_MESSAGE(cond, ...) ([] { return false; })
-#define DOCTEST_CHECK_FALSE_MESSAGE(cond, ...) ([] { return false; })
-#define DOCTEST_REQUIRE_FALSE_MESSAGE(cond, ...) ([] { return false; })
-
-#define DOCTEST_WARN_EQ(...) ([] { return false; })
-#define DOCTEST_CHECK_EQ(...) ([] { return false; })
-#define DOCTEST_REQUIRE_EQ(...) ([] { return false; })
-#define DOCTEST_WARN_NE(...) ([] { return false; })
-#define DOCTEST_CHECK_NE(...) ([] { return false; })
-#define DOCTEST_REQUIRE_NE(...) ([] { return false; })
-#define DOCTEST_WARN_GT(...) ([] { return false; })
-#define DOCTEST_CHECK_GT(...) ([] { return false; })
-#define DOCTEST_REQUIRE_GT(...) ([] { return false; })
-#define DOCTEST_WARN_LT(...) ([] { return false; })
-#define DOCTEST_CHECK_LT(...) ([] { return false; })
-#define DOCTEST_REQUIRE_LT(...) ([] { return false; })
-#define DOCTEST_WARN_GE(...) ([] { return false; })
-#define DOCTEST_CHECK_GE(...) ([] { return false; })
-#define DOCTEST_REQUIRE_GE(...) ([] { return false; })
-#define DOCTEST_WARN_LE(...) ([] { return false; })
-#define DOCTEST_CHECK_LE(...) ([] { return false; })
-#define DOCTEST_REQUIRE_LE(...) ([] { return false; })
-
-#define DOCTEST_WARN_UNARY(...) ([] { return false; })
-#define DOCTEST_CHECK_UNARY(...) ([] { return false; })
-#define DOCTEST_REQUIRE_UNARY(...) ([] { return false; })
-#define DOCTEST_WARN_UNARY_FALSE(...) ([] { return false; })
-#define DOCTEST_CHECK_UNARY_FALSE(...) ([] { return false; })
-#define DOCTEST_REQUIRE_UNARY_FALSE(...) ([] { return false; })
+#define DOCTEST_WARN(...) DOCTEST_FUNC_EMPTY
+#define DOCTEST_CHECK(...) DOCTEST_FUNC_EMPTY
+#define DOCTEST_REQUIRE(...) DOCTEST_FUNC_EMPTY
+#define DOCTEST_WARN_FALSE(...) DOCTEST_FUNC_EMPTY
+#define DOCTEST_CHECK_FALSE(...) DOCTEST_FUNC_EMPTY
+#define DOCTEST_REQUIRE_FALSE(...) DOCTEST_FUNC_EMPTY
+
+#define DOCTEST_WARN_MESSAGE(cond, ...) DOCTEST_FUNC_EMPTY
+#define DOCTEST_CHECK_MESSAGE(cond, ...) DOCTEST_FUNC_EMPTY
+#define DOCTEST_REQUIRE_MESSAGE(cond, ...) DOCTEST_FUNC_EMPTY
+#define DOCTEST_WARN_FALSE_MESSAGE(cond, ...) DOCTEST_FUNC_EMPTY
+#define DOCTEST_CHECK_FALSE_MESSAGE(cond, ...) DOCTEST_FUNC_EMPTY
+#define DOCTEST_REQUIRE_FALSE_MESSAGE(cond, ...) DOCTEST_FUNC_EMPTY
+
+#define DOCTEST_WARN_EQ(...) DOCTEST_FUNC_EMPTY
+#define DOCTEST_CHECK_EQ(...) DOCTEST_FUNC_EMPTY
+#define DOCTEST_REQUIRE_EQ(...) DOCTEST_FUNC_EMPTY
+#define DOCTEST_WARN_NE(...) DOCTEST_FUNC_EMPTY
+#define DOCTEST_CHECK_NE(...) DOCTEST_FUNC_EMPTY
+#define DOCTEST_REQUIRE_NE(...) DOCTEST_FUNC_EMPTY
+#define DOCTEST_WARN_GT(...) DOCTEST_FUNC_EMPTY
+#define DOCTEST_CHECK_GT(...) DOCTEST_FUNC_EMPTY
+#define DOCTEST_REQUIRE_GT(...) DOCTEST_FUNC_EMPTY
+#define DOCTEST_WARN_LT(...) DOCTEST_FUNC_EMPTY
+#define DOCTEST_CHECK_LT(...) DOCTEST_FUNC_EMPTY
+#define DOCTEST_REQUIRE_LT(...) DOCTEST_FUNC_EMPTY
+#define DOCTEST_WARN_GE(...) DOCTEST_FUNC_EMPTY
+#define DOCTEST_CHECK_GE(...) DOCTEST_FUNC_EMPTY
+#define DOCTEST_REQUIRE_GE(...) DOCTEST_FUNC_EMPTY
+#define DOCTEST_WARN_LE(...) DOCTEST_FUNC_EMPTY
+#define DOCTEST_CHECK_LE(...) DOCTEST_FUNC_EMPTY
+#define DOCTEST_REQUIRE_LE(...) DOCTEST_FUNC_EMPTY
+
+#define DOCTEST_WARN_UNARY(...) DOCTEST_FUNC_EMPTY
+#define DOCTEST_CHECK_UNARY(...) DOCTEST_FUNC_EMPTY
+#define DOCTEST_REQUIRE_UNARY(...) DOCTEST_FUNC_EMPTY
+#define DOCTEST_WARN_UNARY_FALSE(...) DOCTEST_FUNC_EMPTY
+#define DOCTEST_CHECK_UNARY_FALSE(...) DOCTEST_FUNC_EMPTY
+#define DOCTEST_REQUIRE_UNARY_FALSE(...) DOCTEST_FUNC_EMPTY
-#endif // DOCTEST_CONFIG_EVALUATE_ASSERTS_EVEN_WHEN_DISABLED
+#ifndef DOCTEST_CONFIG_NO_EXCEPTIONS
-// TODO: think about if these also need to work properly even when doctest is disabled
-#define DOCTEST_WARN_THROWS(...) ([] { return false; })
-#define DOCTEST_CHECK_THROWS(...) ([] { return false; })
-#define DOCTEST_REQUIRE_THROWS(...) ([] { return false; })
-#define DOCTEST_WARN_THROWS_AS(expr, ...) ([] { return false; })
-#define DOCTEST_CHECK_THROWS_AS(expr, ...) ([] { return false; })
-#define DOCTEST_REQUIRE_THROWS_AS(expr, ...) ([] { return false; })
-#define DOCTEST_WARN_THROWS_WITH(expr, ...) ([] { return false; })
-#define DOCTEST_CHECK_THROWS_WITH(expr, ...) ([] { return false; })
-#define DOCTEST_REQUIRE_THROWS_WITH(expr, ...) ([] { return false; })
-#define DOCTEST_WARN_THROWS_WITH_AS(expr, with, ...) ([] { return false; })
-#define DOCTEST_CHECK_THROWS_WITH_AS(expr, with, ...) ([] { return false; })
-#define DOCTEST_REQUIRE_THROWS_WITH_AS(expr, with, ...) ([] { return false; })
-#define DOCTEST_WARN_NOTHROW(...) ([] { return false; })
-#define DOCTEST_CHECK_NOTHROW(...) ([] { return false; })
-#define DOCTEST_REQUIRE_NOTHROW(...) ([] { return false; })
-
-#define DOCTEST_WARN_THROWS_MESSAGE(expr, ...) ([] { return false; })
-#define DOCTEST_CHECK_THROWS_MESSAGE(expr, ...) ([] { return false; })
-#define DOCTEST_REQUIRE_THROWS_MESSAGE(expr, ...) ([] { return false; })
-#define DOCTEST_WARN_THROWS_AS_MESSAGE(expr, ex, ...) ([] { return false; })
-#define DOCTEST_CHECK_THROWS_AS_MESSAGE(expr, ex, ...) ([] { return false; })
-#define DOCTEST_REQUIRE_THROWS_AS_MESSAGE(expr, ex, ...) ([] { return false; })
-#define DOCTEST_WARN_THROWS_WITH_MESSAGE(expr, with, ...) ([] { return false; })
-#define DOCTEST_CHECK_THROWS_WITH_MESSAGE(expr, with, ...) ([] { return false; })
-#define DOCTEST_REQUIRE_THROWS_WITH_MESSAGE(expr, with, ...) ([] { return false; })
-#define DOCTEST_WARN_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) ([] { return false; })
-#define DOCTEST_CHECK_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) ([] { return false; })
-#define DOCTEST_REQUIRE_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) ([] { return false; })
-#define DOCTEST_WARN_NOTHROW_MESSAGE(expr, ...) ([] { return false; })
-#define DOCTEST_CHECK_NOTHROW_MESSAGE(expr, ...) ([] { return false; })
-#define DOCTEST_REQUIRE_NOTHROW_MESSAGE(expr, ...) ([] { return false; })
+#define DOCTEST_WARN_THROWS(...) DOCTEST_FUNC_EMPTY
+#define DOCTEST_CHECK_THROWS(...) DOCTEST_FUNC_EMPTY
+#define DOCTEST_REQUIRE_THROWS(...) DOCTEST_FUNC_EMPTY
+#define DOCTEST_WARN_THROWS_AS(expr, ...) DOCTEST_FUNC_EMPTY
+#define DOCTEST_CHECK_THROWS_AS(expr, ...) DOCTEST_FUNC_EMPTY
+#define DOCTEST_REQUIRE_THROWS_AS(expr, ...) DOCTEST_FUNC_EMPTY
+#define DOCTEST_WARN_THROWS_WITH(expr, ...) DOCTEST_FUNC_EMPTY
+#define DOCTEST_CHECK_THROWS_WITH(expr, ...) DOCTEST_FUNC_EMPTY
+#define DOCTEST_REQUIRE_THROWS_WITH(expr, ...) DOCTEST_FUNC_EMPTY
+#define DOCTEST_WARN_THROWS_WITH_AS(expr, with, ...) DOCTEST_FUNC_EMPTY
+#define DOCTEST_CHECK_THROWS_WITH_AS(expr, with, ...) DOCTEST_FUNC_EMPTY
+#define DOCTEST_REQUIRE_THROWS_WITH_AS(expr, with, ...) DOCTEST_FUNC_EMPTY
+#define DOCTEST_WARN_NOTHROW(...) DOCTEST_FUNC_EMPTY
+#define DOCTEST_CHECK_NOTHROW(...) DOCTEST_FUNC_EMPTY
+#define DOCTEST_REQUIRE_NOTHROW(...) DOCTEST_FUNC_EMPTY
+
+#define DOCTEST_WARN_THROWS_MESSAGE(expr, ...) DOCTEST_FUNC_EMPTY
+#define DOCTEST_CHECK_THROWS_MESSAGE(expr, ...) DOCTEST_FUNC_EMPTY
+#define DOCTEST_REQUIRE_THROWS_MESSAGE(expr, ...) DOCTEST_FUNC_EMPTY
+#define DOCTEST_WARN_THROWS_AS_MESSAGE(expr, ex, ...) DOCTEST_FUNC_EMPTY
+#define DOCTEST_CHECK_THROWS_AS_MESSAGE(expr, ex, ...) DOCTEST_FUNC_EMPTY
+#define DOCTEST_REQUIRE_THROWS_AS_MESSAGE(expr, ex, ...) DOCTEST_FUNC_EMPTY
+#define DOCTEST_WARN_THROWS_WITH_MESSAGE(expr, with, ...) DOCTEST_FUNC_EMPTY
+#define DOCTEST_CHECK_THROWS_WITH_MESSAGE(expr, with, ...) DOCTEST_FUNC_EMPTY
+#define DOCTEST_REQUIRE_THROWS_WITH_MESSAGE(expr, with, ...) DOCTEST_FUNC_EMPTY
+#define DOCTEST_WARN_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) DOCTEST_FUNC_EMPTY
+#define DOCTEST_CHECK_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) DOCTEST_FUNC_EMPTY
+#define DOCTEST_REQUIRE_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) DOCTEST_FUNC_EMPTY
+#define DOCTEST_WARN_NOTHROW_MESSAGE(expr, ...) DOCTEST_FUNC_EMPTY
+#define DOCTEST_CHECK_NOTHROW_MESSAGE(expr, ...) DOCTEST_FUNC_EMPTY
+#define DOCTEST_REQUIRE_NOTHROW_MESSAGE(expr, ...) DOCTEST_FUNC_EMPTY
+
+#endif // DOCTEST_CONFIG_NO_EXCEPTIONS
+
+#endif // DOCTEST_CONFIG_EVALUATE_ASSERTS_EVEN_WHEN_DISABLED
#endif // DOCTEST_CONFIG_DISABLE
+#ifdef DOCTEST_CONFIG_NO_EXCEPTIONS
+
+#ifdef DOCTEST_CONFIG_NO_EXCEPTIONS_BUT_WITH_ALL_ASSERTS
+#define DOCTEST_EXCEPTION_EMPTY_FUNC DOCTEST_FUNC_EMPTY
+#else // DOCTEST_CONFIG_NO_EXCEPTIONS_BUT_WITH_ALL_ASSERTS
+#define DOCTEST_EXCEPTION_EMPTY_FUNC [] { static_assert(false, "Exceptions are disabled! " \
+ "Use DOCTEST_CONFIG_NO_EXCEPTIONS_BUT_WITH_ALL_ASSERTS if you want to compile with exceptions disabled."); return false; }()
+
+#undef DOCTEST_REQUIRE
+#undef DOCTEST_REQUIRE_FALSE
+#undef DOCTEST_REQUIRE_MESSAGE
+#undef DOCTEST_REQUIRE_FALSE_MESSAGE
+#undef DOCTEST_REQUIRE_EQ
+#undef DOCTEST_REQUIRE_NE
+#undef DOCTEST_REQUIRE_GT
+#undef DOCTEST_REQUIRE_LT
+#undef DOCTEST_REQUIRE_GE
+#undef DOCTEST_REQUIRE_LE
+#undef DOCTEST_REQUIRE_UNARY
+#undef DOCTEST_REQUIRE_UNARY_FALSE
+
+#define DOCTEST_REQUIRE DOCTEST_EXCEPTION_EMPTY_FUNC
+#define DOCTEST_REQUIRE_FALSE DOCTEST_EXCEPTION_EMPTY_FUNC
+#define DOCTEST_REQUIRE_MESSAGE DOCTEST_EXCEPTION_EMPTY_FUNC
+#define DOCTEST_REQUIRE_FALSE_MESSAGE DOCTEST_EXCEPTION_EMPTY_FUNC
+#define DOCTEST_REQUIRE_EQ DOCTEST_EXCEPTION_EMPTY_FUNC
+#define DOCTEST_REQUIRE_NE DOCTEST_EXCEPTION_EMPTY_FUNC
+#define DOCTEST_REQUIRE_GT DOCTEST_EXCEPTION_EMPTY_FUNC
+#define DOCTEST_REQUIRE_LT DOCTEST_EXCEPTION_EMPTY_FUNC
+#define DOCTEST_REQUIRE_GE DOCTEST_EXCEPTION_EMPTY_FUNC
+#define DOCTEST_REQUIRE_LE DOCTEST_EXCEPTION_EMPTY_FUNC
+#define DOCTEST_REQUIRE_UNARY DOCTEST_EXCEPTION_EMPTY_FUNC
+#define DOCTEST_REQUIRE_UNARY_FALSE DOCTEST_EXCEPTION_EMPTY_FUNC
+
+#endif // DOCTEST_CONFIG_NO_EXCEPTIONS_BUT_WITH_ALL_ASSERTS
+
+#define DOCTEST_WARN_THROWS(...) DOCTEST_EXCEPTION_EMPTY_FUNC
+#define DOCTEST_CHECK_THROWS(...) DOCTEST_EXCEPTION_EMPTY_FUNC
+#define DOCTEST_REQUIRE_THROWS(...) DOCTEST_EXCEPTION_EMPTY_FUNC
+#define DOCTEST_WARN_THROWS_AS(expr, ...) DOCTEST_EXCEPTION_EMPTY_FUNC
+#define DOCTEST_CHECK_THROWS_AS(expr, ...) DOCTEST_EXCEPTION_EMPTY_FUNC
+#define DOCTEST_REQUIRE_THROWS_AS(expr, ...) DOCTEST_EXCEPTION_EMPTY_FUNC
+#define DOCTEST_WARN_THROWS_WITH(expr, ...) DOCTEST_EXCEPTION_EMPTY_FUNC
+#define DOCTEST_CHECK_THROWS_WITH(expr, ...) DOCTEST_EXCEPTION_EMPTY_FUNC
+#define DOCTEST_REQUIRE_THROWS_WITH(expr, ...) DOCTEST_EXCEPTION_EMPTY_FUNC
+#define DOCTEST_WARN_THROWS_WITH_AS(expr, with, ...) DOCTEST_EXCEPTION_EMPTY_FUNC
+#define DOCTEST_CHECK_THROWS_WITH_AS(expr, with, ...) DOCTEST_EXCEPTION_EMPTY_FUNC
+#define DOCTEST_REQUIRE_THROWS_WITH_AS(expr, with, ...) DOCTEST_EXCEPTION_EMPTY_FUNC
+#define DOCTEST_WARN_NOTHROW(...) DOCTEST_EXCEPTION_EMPTY_FUNC
+#define DOCTEST_CHECK_NOTHROW(...) DOCTEST_EXCEPTION_EMPTY_FUNC
+#define DOCTEST_REQUIRE_NOTHROW(...) DOCTEST_EXCEPTION_EMPTY_FUNC
+
+#define DOCTEST_WARN_THROWS_MESSAGE(expr, ...) DOCTEST_EXCEPTION_EMPTY_FUNC
+#define DOCTEST_CHECK_THROWS_MESSAGE(expr, ...) DOCTEST_EXCEPTION_EMPTY_FUNC
+#define DOCTEST_REQUIRE_THROWS_MESSAGE(expr, ...) DOCTEST_EXCEPTION_EMPTY_FUNC
+#define DOCTEST_WARN_THROWS_AS_MESSAGE(expr, ex, ...) DOCTEST_EXCEPTION_EMPTY_FUNC
+#define DOCTEST_CHECK_THROWS_AS_MESSAGE(expr, ex, ...) DOCTEST_EXCEPTION_EMPTY_FUNC
+#define DOCTEST_REQUIRE_THROWS_AS_MESSAGE(expr, ex, ...) DOCTEST_EXCEPTION_EMPTY_FUNC
+#define DOCTEST_WARN_THROWS_WITH_MESSAGE(expr, with, ...) DOCTEST_EXCEPTION_EMPTY_FUNC
+#define DOCTEST_CHECK_THROWS_WITH_MESSAGE(expr, with, ...) DOCTEST_EXCEPTION_EMPTY_FUNC
+#define DOCTEST_REQUIRE_THROWS_WITH_MESSAGE(expr, with, ...) DOCTEST_EXCEPTION_EMPTY_FUNC
+#define DOCTEST_WARN_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) DOCTEST_EXCEPTION_EMPTY_FUNC
+#define DOCTEST_CHECK_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) DOCTEST_EXCEPTION_EMPTY_FUNC
+#define DOCTEST_REQUIRE_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) DOCTEST_EXCEPTION_EMPTY_FUNC
+#define DOCTEST_WARN_NOTHROW_MESSAGE(expr, ...) DOCTEST_EXCEPTION_EMPTY_FUNC
+#define DOCTEST_CHECK_NOTHROW_MESSAGE(expr, ...) DOCTEST_EXCEPTION_EMPTY_FUNC
+#define DOCTEST_REQUIRE_NOTHROW_MESSAGE(expr, ...) DOCTEST_EXCEPTION_EMPTY_FUNC
+
+#endif // DOCTEST_CONFIG_NO_EXCEPTIONS
+
// clang-format off
// KEPT FOR BACKWARDS COMPATIBILITY - FORWARDING TO THE RIGHT MACROS
#define DOCTEST_FAST_WARN_EQ DOCTEST_WARN_EQ
@@ -2726,11 +2889,12 @@ namespace detail {
// clang-format on
// == SHORT VERSIONS OF THE MACROS
-#if !defined(DOCTEST_CONFIG_NO_SHORT_MACRO_NAMES)
+#ifndef DOCTEST_CONFIG_NO_SHORT_MACRO_NAMES
#define TEST_CASE(name) DOCTEST_TEST_CASE(name)
#define TEST_CASE_CLASS(name) DOCTEST_TEST_CASE_CLASS(name)
#define TEST_CASE_FIXTURE(x, name) DOCTEST_TEST_CASE_FIXTURE(x, name)
+#define TYPE_TO_STRING_AS(str, ...) DOCTEST_TYPE_TO_STRING_AS(str, __VA_ARGS__)
#define TYPE_TO_STRING(...) DOCTEST_TYPE_TO_STRING(__VA_ARGS__)
#define TEST_CASE_TEMPLATE(name, T, ...) DOCTEST_TEST_CASE_TEMPLATE(name, T, __VA_ARGS__)
#define TEST_CASE_TEMPLATE_DEFINE(name, T, id) DOCTEST_TEST_CASE_TEMPLATE_DEFINE(name, T, id)
@@ -2863,33 +3027,11 @@ namespace detail {
#endif // DOCTEST_CONFIG_NO_SHORT_MACRO_NAMES
-#if !defined(DOCTEST_CONFIG_DISABLE)
+#ifndef DOCTEST_CONFIG_DISABLE
// this is here to clear the 'current test suite' for the current translation unit - at the top
DOCTEST_TEST_SUITE_END();
-// add stringification for primitive/fundamental types
-namespace doctest { namespace detail {
- DOCTEST_TYPE_TO_STRING_IMPL(bool)
- DOCTEST_TYPE_TO_STRING_IMPL(float)
- DOCTEST_TYPE_TO_STRING_IMPL(double)
- DOCTEST_TYPE_TO_STRING_IMPL(long double)
- DOCTEST_TYPE_TO_STRING_IMPL(char)
- DOCTEST_TYPE_TO_STRING_IMPL(signed char)
- DOCTEST_TYPE_TO_STRING_IMPL(unsigned char)
-#if !DOCTEST_MSVC || defined(_NATIVE_WCHAR_T_DEFINED)
- DOCTEST_TYPE_TO_STRING_IMPL(wchar_t)
-#endif // not MSVC or wchar_t support enabled
- DOCTEST_TYPE_TO_STRING_IMPL(short int)
- DOCTEST_TYPE_TO_STRING_IMPL(unsigned short int)
- DOCTEST_TYPE_TO_STRING_IMPL(int)
- DOCTEST_TYPE_TO_STRING_IMPL(unsigned int)
- DOCTEST_TYPE_TO_STRING_IMPL(long int)
- DOCTEST_TYPE_TO_STRING_IMPL(unsigned long int)
- DOCTEST_TYPE_TO_STRING_IMPL(long long int)
- DOCTEST_TYPE_TO_STRING_IMPL(unsigned long long int)
-}} // namespace doctest::detail
-
#endif // DOCTEST_CONFIG_DISABLE
DOCTEST_CLANG_SUPPRESS_WARNING_POP
@@ -2981,16 +3123,27 @@ DOCTEST_MAKE_STD_HEADERS_CLEAN_FROM_WARNINGS_ON_WALL_BEGIN
#include <algorithm>
#include <iomanip>
#include <vector>
+#ifndef DOCTEST_CONFIG_NO_MULTITHREADING
#include <atomic>
#include <mutex>
+#define DOCTEST_DECLARE_MUTEX(name) std::mutex name;
+#define DOCTEST_DECLARE_STATIC_MUTEX(name) static DOCTEST_DECLARE_MUTEX(name)
+#define DOCTEST_LOCK_MUTEX(name) std::lock_guard<std::mutex> DOCTEST_ANONYMOUS(DOCTEST_ANON_LOCK_)(name);
+#else // DOCTEST_CONFIG_NO_MULTITHREADING
+#define DOCTEST_DECLARE_MUTEX(name)
+#define DOCTEST_DECLARE_STATIC_MUTEX(name)
+#define DOCTEST_LOCK_MUTEX(name)
+#endif // DOCTEST_CONFIG_NO_MULTITHREADING
#include <set>
#include <map>
+#include <unordered_set>
#include <exception>
#include <stdexcept>
#include <csignal>
#include <cfloat>
#include <cctype>
#include <cstdint>
+#include <string>
#ifdef DOCTEST_PLATFORM_MAC
#include <sys/types.h>
@@ -3045,7 +3198,7 @@ DOCTEST_MAKE_STD_HEADERS_CLEAN_FROM_WARNINGS_ON_WALL_END
#endif
#ifndef DOCTEST_THREAD_LOCAL
-#if DOCTEST_MSVC && (DOCTEST_MSVC < DOCTEST_COMPILER(19, 0, 0))
+#if defined(DOCTEST_CONFIG_NO_MULTITHREADING) || DOCTEST_MSVC && (DOCTEST_MSVC < DOCTEST_COMPILER(19, 0, 0))
#define DOCTEST_THREAD_LOCAL
#else // DOCTEST_MSVC
#define DOCTEST_THREAD_LOCAL thread_local
@@ -3107,20 +3260,6 @@ namespace {
}
}
- template <typename T>
- String fpToString(T value, int precision) {
- std::ostringstream oss;
- oss << std::setprecision(precision) << std::fixed << value;
- std::string d = oss.str();
- size_t i = d.find_last_not_of('0');
- if(i != std::string::npos && i != d.size() - 1) {
- if(d[i] == '.')
- i++;
- d = d.substr(0, i + 1);
- }
- return d.c_str();
- }
-
struct Endianness
{
enum Arch
@@ -3141,22 +3280,6 @@ namespace {
} // namespace
namespace detail {
- String rawMemoryToString(const void* object, unsigned size) {
- // Reverse order for little endian architectures
- int i = 0, end = static_cast<int>(size), inc = 1;
- if(Endianness::which() == Endianness::Little) {
- i = end - 1;
- end = inc = -1;
- }
-
- unsigned const char* bytes = static_cast<unsigned const char*>(object);
- std::ostream* oss = tlssPush();
- *oss << "0x" << std::setfill('0') << std::hex;
- for(; i != end; i += inc)
- *oss << std::setw(2) << static_cast<unsigned>(bytes[i]);
- return tlssPop();
- }
-
DOCTEST_THREAD_LOCAL class
{
std::vector<std::streampos> stack;
@@ -3194,19 +3317,19 @@ namespace timer_large_integer
{
#if defined(DOCTEST_PLATFORM_WINDOWS)
- typedef ULONGLONG type;
+ using type = ULONGLONG;
#else // DOCTEST_PLATFORM_WINDOWS
- typedef std::uint64_t type;
+ using type = std::uint64_t;
#endif // DOCTEST_PLATFORM_WINDOWS
}
-typedef timer_large_integer::type ticks_t;
+using ticks_t = timer_large_integer::type;
#ifdef DOCTEST_CONFIG_GETCURRENTTICKS
ticks_t getCurrentTicks() { return DOCTEST_CONFIG_GETCURRENTTICKS(); }
#elif defined(DOCTEST_PLATFORM_WINDOWS)
ticks_t getCurrentTicks() {
- static LARGE_INTEGER hz = {0}, hzo = {0};
+ static LARGE_INTEGER hz = { {0} }, hzo = { {0} };
if(!hz.QuadPart) {
QueryPerformanceFrequency(&hz);
QueryPerformanceCounter(&hzo);
@@ -3238,9 +3361,17 @@ typedef timer_large_integer::type ticks_t;
ticks_t m_ticks = 0;
};
-#ifdef DOCTEST_CONFIG_NO_MULTI_LANE_ATOMICS
+#ifdef DOCTEST_CONFIG_NO_MULTITHREADING
+ template <typename T>
+ using Atomic = T;
+#else // DOCTEST_CONFIG_NO_MULTITHREADING
template <typename T>
- using AtomicOrMultiLaneAtomic = std::atomic<T>;
+ using Atomic = std::atomic<T>;
+#endif // DOCTEST_CONFIG_NO_MULTITHREADING
+
+#if defined(DOCTEST_CONFIG_NO_MULTI_LANE_ATOMICS) || defined(DOCTEST_CONFIG_NO_MULTITHREADING)
+ template <typename T>
+ using MultiLaneAtomic = Atomic<T>;
#else // DOCTEST_CONFIG_NO_MULTI_LANE_ATOMICS
// Provides a multilane implementation of an atomic variable that supports add, sub, load,
// store. Instead of using a single atomic variable, this splits up into multiple ones,
@@ -3257,8 +3388,8 @@ typedef timer_large_integer::type ticks_t;
{
struct CacheLineAlignedAtomic
{
- std::atomic<T> atomic{};
- char padding[DOCTEST_MULTI_LANE_ATOMICS_CACHE_LINE_SIZE - sizeof(std::atomic<T>)];
+ Atomic<T> atomic{};
+ char padding[DOCTEST_MULTI_LANE_ATOMICS_CACHE_LINE_SIZE - sizeof(Atomic<T>)];
};
CacheLineAlignedAtomic m_atomics[DOCTEST_MULTI_LANE_ATOMICS_THREAD_LANES];
@@ -3314,24 +3445,21 @@ typedef timer_large_integer::type ticks_t;
// assigned in a round-robin fashion.
// 3. This tlsLaneIdx is stored in the thread local data, so it is directly available with
// little overhead.
- std::atomic<T>& myAtomic() DOCTEST_NOEXCEPT {
- static std::atomic<size_t> laneCounter;
+ Atomic<T>& myAtomic() DOCTEST_NOEXCEPT {
+ static Atomic<size_t> laneCounter;
DOCTEST_THREAD_LOCAL size_t tlsLaneIdx =
laneCounter++ % DOCTEST_MULTI_LANE_ATOMICS_THREAD_LANES;
return m_atomics[tlsLaneIdx].atomic;
}
};
-
- template <typename T>
- using AtomicOrMultiLaneAtomic = MultiLaneAtomic<T>;
#endif // DOCTEST_CONFIG_NO_MULTI_LANE_ATOMICS
// this holds both parameters from the command line and runtime data for tests
struct ContextState : ContextOptions, TestRunStats, CurrentTestCaseStats
{
- AtomicOrMultiLaneAtomic<int> numAssertsCurrentTest_atomic;
- AtomicOrMultiLaneAtomic<int> numAssertsFailedCurrentTest_atomic;
+ MultiLaneAtomic<int> numAssertsCurrentTest_atomic;
+ MultiLaneAtomic<int> numAssertsFailedCurrentTest_atomic;
std::vector<std::vector<String>> filters = decltype(filters)(9); // 9 different filters
@@ -3344,11 +3472,12 @@ typedef timer_large_integer::type ticks_t;
std::vector<String> stringifiedContexts; // logging from INFO() due to an exception
// stuff for subcases
- std::vector<SubcaseSignature> subcasesStack;
- std::set<decltype(subcasesStack)> subcasesPassed;
- int subcasesCurrentMaxLevel;
- bool should_reenter;
- std::atomic<bool> shouldLogCurrentException;
+ bool reachedLeaf;
+ std::vector<SubcaseSignature> subcaseStack;
+ std::vector<SubcaseSignature> nextSubcaseStack;
+ std::unordered_set<unsigned long long> fullyTraversedSubcases;
+ size_t currentSubcaseDepth;
+ Atomic<bool> shouldLogCurrentException;
void resetRunData() {
numTestCases = 0;
@@ -3414,7 +3543,7 @@ typedef timer_large_integer::type ticks_t;
#endif // DOCTEST_CONFIG_DISABLE
} // namespace detail
-char* String::allocate(unsigned sz) {
+char* String::allocate(size_type sz) {
if (sz <= last) {
buf[sz] = '\0';
setLast(last - sz);
@@ -3429,8 +3558,12 @@ char* String::allocate(unsigned sz) {
}
}
-void String::setOnHeap() { *reinterpret_cast<unsigned char*>(&buf[last]) = 128; }
-void String::setLast(unsigned in) { buf[last] = char(in); }
+void String::setOnHeap() noexcept { *reinterpret_cast<unsigned char*>(&buf[last]) = 128; }
+void String::setLast(size_type in) noexcept { buf[last] = char(in); }
+void String::setSize(size_type sz) noexcept {
+ if (isOnStack()) { buf[sz] = '\0'; setLast(last - sz); }
+ else { data.ptr[sz] = '\0'; data.size = sz; }
+}
void String::copy(const String& other) {
if(other.isOnStack()) {
@@ -3440,7 +3573,7 @@ void String::copy(const String& other) {
}
}
-String::String() {
+String::String() noexcept {
buf[0] = '\0';
setLast();
}
@@ -3448,17 +3581,16 @@ String::String() {
String::~String() {
if(!isOnStack())
delete[] data.ptr;
- // NOLINTNEXTLINE(clang-analyzer-cplusplus.NewDeleteLeaks)
-}
+} // NOLINT(clang-analyzer-cplusplus.NewDeleteLeaks)
String::String(const char* in)
: String(in, strlen(in)) {}
-String::String(const char* in, unsigned in_size) {
+String::String(const char* in, size_type in_size) {
memcpy(allocate(in_size), in, in_size);
}
-String::String(std::istream& in, unsigned in_size) {
+String::String(std::istream& in, size_type in_size) {
in.read(allocate(in_size), in_size);
}
@@ -3476,9 +3608,9 @@ String& String::operator=(const String& other) {
}
String& String::operator+=(const String& other) {
- const unsigned my_old_size = size();
- const unsigned other_size = other.size();
- const unsigned total_size = my_old_size + other_size;
+ const size_type my_old_size = size();
+ const size_type other_size = other.size();
+ const size_type total_size = my_old_size + other_size;
if(isOnStack()) {
if(total_size < len) {
// append to the current stack space
@@ -3525,13 +3657,13 @@ String& String::operator+=(const String& other) {
return *this;
}
-String::String(String&& other) {
+String::String(String&& other) noexcept {
memcpy(buf, other.buf, len);
other.buf[0] = '\0';
other.setLast();
}
-String& String::operator=(String&& other) {
+String& String::operator=(String&& other) noexcept {
if(this != &other) {
if(!isOnStack())
delete[] data.ptr;
@@ -3542,30 +3674,60 @@ String& String::operator=(String&& other) {
return *this;
}
-char String::operator[](unsigned i) const {
- return const_cast<String*>(this)->operator[](i); // NOLINT
+char String::operator[](size_type i) const {
+ return const_cast<String*>(this)->operator[](i);
}
-char& String::operator[](unsigned i) {
+char& String::operator[](size_type i) {
if(isOnStack())
return reinterpret_cast<char*>(buf)[i];
return data.ptr[i];
}
DOCTEST_GCC_SUPPRESS_WARNING_WITH_PUSH("-Wmaybe-uninitialized")
-unsigned String::size() const {
+String::size_type String::size() const {
if(isOnStack())
- return last - (unsigned(buf[last]) & 31); // using "last" would work only if "len" is 32
+ return last - (size_type(buf[last]) & 31); // using "last" would work only if "len" is 32
return data.size;
}
DOCTEST_GCC_SUPPRESS_WARNING_POP
-unsigned String::capacity() const {
+String::size_type String::capacity() const {
if(isOnStack())
return len;
return data.capacity;
}
+String String::substr(size_type pos, size_type cnt) && {
+ cnt = std::min(cnt, size() - 1 - pos);
+ char* cptr = c_str();
+ memmove(cptr, cptr + pos, cnt);
+ setSize(cnt);
+ return std::move(*this);
+}
+
+String String::substr(size_type pos, size_type cnt) const & {
+ cnt = std::min(cnt, size() - 1 - pos);
+ return String{ c_str() + pos, cnt };
+}
+
+String::size_type String::find(char ch, size_type pos) const {
+ const char* begin = c_str();
+ const char* end = begin + size();
+ const char* it = begin + pos;
+ for (; it < end && *it != ch; it++);
+ if (it < end) { return static_cast<size_type>(it - begin); }
+ else { return npos; }
+}
+
+String::size_type String::rfind(char ch, size_type pos) const {
+ const char* begin = c_str();
+ const char* it = begin + std::min(pos, size() - 1);
+ for (; it >= begin && *it != ch; it--);
+ if (it >= begin) { return static_cast<size_type>(it - begin); }
+ else { return npos; }
+}
+
int String::compare(const char* other, bool no_case) const {
if(no_case)
return doctest::stricmp(c_str(), other);
@@ -3576,20 +3738,32 @@ int String::compare(const String& other, bool no_case) const {
return compare(other.c_str(), no_case);
}
-// NOLINTNEXTLINE(clang-analyzer-cplusplus.NewDeleteLeaks)
String operator+(const String& lhs, const String& rhs) { return String(lhs) += rhs; }
-// clang-format off
bool operator==(const String& lhs, const String& rhs) { return lhs.compare(rhs) == 0; }
bool operator!=(const String& lhs, const String& rhs) { return lhs.compare(rhs) != 0; }
bool operator< (const String& lhs, const String& rhs) { return lhs.compare(rhs) < 0; }
bool operator> (const String& lhs, const String& rhs) { return lhs.compare(rhs) > 0; }
bool operator<=(const String& lhs, const String& rhs) { return (lhs != rhs) ? lhs.compare(rhs) < 0 : true; }
bool operator>=(const String& lhs, const String& rhs) { return (lhs != rhs) ? lhs.compare(rhs) > 0 : true; }
-// clang-format on
std::ostream& operator<<(std::ostream& s, const String& in) { return s << in.c_str(); }
+Contains::Contains(const String& str) : string(str) { }
+
+bool Contains::checkWith(const String& other) const {
+ return strstr(other.c_str(), string.c_str()) != nullptr;
+}
+
+String toString(const Contains& in) {
+ return "Contains( " + in.string + " )";
+}
+
+bool operator==(const String& lhs, const Contains& rhs) { return rhs.checkWith(lhs); }
+bool operator==(const Contains& lhs, const String& rhs) { return lhs.checkWith(rhs); }
+bool operator!=(const String& lhs, const Contains& rhs) { return !rhs.checkWith(lhs); }
+bool operator!=(const Contains& lhs, const String& rhs) { return !lhs.checkWith(rhs); }
+
namespace {
void color_to_stream(std::ostream&, Color::Enum) DOCTEST_BRANCH_ON_DISABLED({}, ;)
} // namespace
@@ -3603,64 +3777,42 @@ namespace Color {
// clang-format off
const char* assertString(assertType::Enum at) {
- DOCTEST_MSVC_SUPPRESS_WARNING_WITH_PUSH(4062) // enum 'x' in switch of enum 'y' is not handled
- switch(at) { //!OCLINT missing default in switch statements
- case assertType::DT_WARN : return "WARN";
- case assertType::DT_CHECK : return "CHECK";
- case assertType::DT_REQUIRE : return "REQUIRE";
-
- case assertType::DT_WARN_FALSE : return "WARN_FALSE";
- case assertType::DT_CHECK_FALSE : return "CHECK_FALSE";
- case assertType::DT_REQUIRE_FALSE : return "REQUIRE_FALSE";
-
- case assertType::DT_WARN_THROWS : return "WARN_THROWS";
- case assertType::DT_CHECK_THROWS : return "CHECK_THROWS";
- case assertType::DT_REQUIRE_THROWS : return "REQUIRE_THROWS";
-
- case assertType::DT_WARN_THROWS_AS : return "WARN_THROWS_AS";
- case assertType::DT_CHECK_THROWS_AS : return "CHECK_THROWS_AS";
- case assertType::DT_REQUIRE_THROWS_AS : return "REQUIRE_THROWS_AS";
-
- case assertType::DT_WARN_THROWS_WITH : return "WARN_THROWS_WITH";
- case assertType::DT_CHECK_THROWS_WITH : return "CHECK_THROWS_WITH";
- case assertType::DT_REQUIRE_THROWS_WITH : return "REQUIRE_THROWS_WITH";
-
- case assertType::DT_WARN_THROWS_WITH_AS : return "WARN_THROWS_WITH_AS";
- case assertType::DT_CHECK_THROWS_WITH_AS : return "CHECK_THROWS_WITH_AS";
- case assertType::DT_REQUIRE_THROWS_WITH_AS : return "REQUIRE_THROWS_WITH_AS";
-
- case assertType::DT_WARN_NOTHROW : return "WARN_NOTHROW";
- case assertType::DT_CHECK_NOTHROW : return "CHECK_NOTHROW";
- case assertType::DT_REQUIRE_NOTHROW : return "REQUIRE_NOTHROW";
-
- case assertType::DT_WARN_EQ : return "WARN_EQ";
- case assertType::DT_CHECK_EQ : return "CHECK_EQ";
- case assertType::DT_REQUIRE_EQ : return "REQUIRE_EQ";
- case assertType::DT_WARN_NE : return "WARN_NE";
- case assertType::DT_CHECK_NE : return "CHECK_NE";
- case assertType::DT_REQUIRE_NE : return "REQUIRE_NE";
- case assertType::DT_WARN_GT : return "WARN_GT";
- case assertType::DT_CHECK_GT : return "CHECK_GT";
- case assertType::DT_REQUIRE_GT : return "REQUIRE_GT";
- case assertType::DT_WARN_LT : return "WARN_LT";
- case assertType::DT_CHECK_LT : return "CHECK_LT";
- case assertType::DT_REQUIRE_LT : return "REQUIRE_LT";
- case assertType::DT_WARN_GE : return "WARN_GE";
- case assertType::DT_CHECK_GE : return "CHECK_GE";
- case assertType::DT_REQUIRE_GE : return "REQUIRE_GE";
- case assertType::DT_WARN_LE : return "WARN_LE";
- case assertType::DT_CHECK_LE : return "CHECK_LE";
- case assertType::DT_REQUIRE_LE : return "REQUIRE_LE";
-
- case assertType::DT_WARN_UNARY : return "WARN_UNARY";
- case assertType::DT_CHECK_UNARY : return "CHECK_UNARY";
- case assertType::DT_REQUIRE_UNARY : return "REQUIRE_UNARY";
- case assertType::DT_WARN_UNARY_FALSE : return "WARN_UNARY_FALSE";
- case assertType::DT_CHECK_UNARY_FALSE : return "CHECK_UNARY_FALSE";
- case assertType::DT_REQUIRE_UNARY_FALSE : return "REQUIRE_UNARY_FALSE";
+ DOCTEST_MSVC_SUPPRESS_WARNING_WITH_PUSH(4061) // enum 'x' in switch of enum 'y' is not explicitely handled
+ #define DOCTEST_GENERATE_ASSERT_TYPE_CASE(assert_type) case assertType::DT_ ## assert_type: return #assert_type
+ #define DOCTEST_GENERATE_ASSERT_TYPE_CASES(assert_type) \
+ DOCTEST_GENERATE_ASSERT_TYPE_CASE(WARN_ ## assert_type); \
+ DOCTEST_GENERATE_ASSERT_TYPE_CASE(CHECK_ ## assert_type); \
+ DOCTEST_GENERATE_ASSERT_TYPE_CASE(REQUIRE_ ## assert_type)
+ switch(at) {
+ DOCTEST_GENERATE_ASSERT_TYPE_CASE(WARN);
+ DOCTEST_GENERATE_ASSERT_TYPE_CASE(CHECK);
+ DOCTEST_GENERATE_ASSERT_TYPE_CASE(REQUIRE);
+
+ DOCTEST_GENERATE_ASSERT_TYPE_CASES(FALSE);
+
+ DOCTEST_GENERATE_ASSERT_TYPE_CASES(THROWS);
+
+ DOCTEST_GENERATE_ASSERT_TYPE_CASES(THROWS_AS);
+
+ DOCTEST_GENERATE_ASSERT_TYPE_CASES(THROWS_WITH);
+
+ DOCTEST_GENERATE_ASSERT_TYPE_CASES(THROWS_WITH_AS);
+
+ DOCTEST_GENERATE_ASSERT_TYPE_CASES(NOTHROW);
+
+ DOCTEST_GENERATE_ASSERT_TYPE_CASES(EQ);
+ DOCTEST_GENERATE_ASSERT_TYPE_CASES(NE);
+ DOCTEST_GENERATE_ASSERT_TYPE_CASES(GT);
+ DOCTEST_GENERATE_ASSERT_TYPE_CASES(LT);
+ DOCTEST_GENERATE_ASSERT_TYPE_CASES(GE);
+ DOCTEST_GENERATE_ASSERT_TYPE_CASES(LE);
+
+ DOCTEST_GENERATE_ASSERT_TYPE_CASES(UNARY);
+ DOCTEST_GENERATE_ASSERT_TYPE_CASES(UNARY_FALSE);
+
+ default: DOCTEST_INTERNAL_ERROR("Tried stringifying invalid assert type!");
}
DOCTEST_MSVC_SUPPRESS_WARNING_POP
- return "";
}
// clang-format on
@@ -3694,6 +3846,12 @@ const char* skipPathFromFilename(const char* file) {
DOCTEST_CLANG_SUPPRESS_WARNING_POP
DOCTEST_GCC_SUPPRESS_WARNING_POP
+bool SubcaseSignature::operator==(const SubcaseSignature& other) const {
+ return m_line == other.m_line
+ && std::strcmp(m_file, other.m_file) == 0
+ && m_name == other.m_name;
+}
+
bool SubcaseSignature::operator<(const SubcaseSignature& other) const {
if(m_line != other.m_line)
return m_line < other.m_line;
@@ -3702,45 +3860,53 @@ bool SubcaseSignature::operator<(const SubcaseSignature& other) const {
return m_name.compare(other.m_name) < 0;
}
-IContextScope::IContextScope() = default;
-IContextScope::~IContextScope() = default;
+DOCTEST_DEFINE_INTERFACE(IContextScope)
-#ifdef DOCTEST_CONFIG_TREAT_CHAR_STAR_AS_STRING
-String toString(char* in) { return toString(static_cast<const char*>(in)); }
-// NOLINTNEXTLINE(clang-analyzer-cplusplus.NewDeleteLeaks)
-String toString(const char* in) { return String("\"") + (in ? in : "{null string}") + "\""; }
-#endif // DOCTEST_CONFIG_TREAT_CHAR_STAR_AS_STRING
-String toString(bool in) { return in ? "true" : "false"; }
-String toString(float in) { return fpToString(in, 5) + "f"; }
-String toString(double in) { return fpToString(in, 10); }
-String toString(double long in) { return fpToString(in, 15); }
-
-#define DOCTEST_TO_STRING_OVERLOAD(type, fmt) \
- String toString(type in) { \
- char buf[64]; \
- std::sprintf(buf, fmt, in); \
- return buf; \
+namespace detail {
+ void filldata<const void*>::fill(std::ostream* stream, const void* in) {
+ if (in) { *stream << in; }
+ else { *stream << "nullptr"; }
}
-DOCTEST_TO_STRING_OVERLOAD(char, "%d")
-DOCTEST_TO_STRING_OVERLOAD(char signed, "%d")
-DOCTEST_TO_STRING_OVERLOAD(char unsigned, "%u")
-DOCTEST_TO_STRING_OVERLOAD(int short, "%d")
-DOCTEST_TO_STRING_OVERLOAD(int short unsigned, "%u")
-DOCTEST_TO_STRING_OVERLOAD(int, "%d")
-DOCTEST_TO_STRING_OVERLOAD(unsigned, "%u")
-DOCTEST_TO_STRING_OVERLOAD(int long, "%ld")
-DOCTEST_TO_STRING_OVERLOAD(int long unsigned, "%lu")
-DOCTEST_TO_STRING_OVERLOAD(int long long, "%lld")
-DOCTEST_TO_STRING_OVERLOAD(int long long unsigned, "%llu")
+ template <typename T>
+ String toStreamLit(T t) {
+ std::ostream* os = tlssPush();
+ os->operator<<(t);
+ return tlssPop();
+ }
+}
-String toString(std::nullptr_t) { return "NULL"; }
+#ifdef DOCTEST_CONFIG_TREAT_CHAR_STAR_AS_STRING
+String toString(const char* in) { return String("\"") + (in ? in : "{null string}") + "\""; }
+#endif // DOCTEST_CONFIG_TREAT_CHAR_STAR_AS_STRING
#if DOCTEST_MSVC >= DOCTEST_COMPILER(19, 20, 0)
// see this issue on why this is needed: https://github.com/doctest/doctest/issues/183
String toString(const std::string& in) { return in.c_str(); }
#endif // VS 2019
+String toString(String in) { return in; }
+
+String toString(std::nullptr_t) { return "nullptr"; }
+
+String toString(bool in) { return in ? "true" : "false"; }
+
+String toString(float in) { return toStreamLit(in); }
+String toString(double in) { return toStreamLit(in); }
+String toString(double long in) { return toStreamLit(in); }
+
+String toString(char in) { return toStreamLit(static_cast<signed>(in)); }
+String toString(char signed in) { return toStreamLit(static_cast<signed>(in)); }
+String toString(char unsigned in) { return toStreamLit(static_cast<unsigned>(in)); }
+String toString(short in) { return toStreamLit(in); }
+String toString(short unsigned in) { return toStreamLit(in); }
+String toString(signed in) { return toStreamLit(in); }
+String toString(unsigned in) { return toStreamLit(in); }
+String toString(long in) { return toStreamLit(in); }
+String toString(long unsigned in) { return toStreamLit(in); }
+String toString(long long in) { return toStreamLit(in); }
+String toString(long long unsigned in) { return toStreamLit(in); }
+
Approx::Approx(double value)
: m_epsilon(static_cast<double>(std::numeric_limits<float>::epsilon()) * 100)
, m_scale(1.0)
@@ -3780,11 +3946,25 @@ bool operator>(double lhs, const Approx& rhs) { return lhs > rhs.m_value && lhs
bool operator>(const Approx& lhs, double rhs) { return lhs.m_value > rhs && lhs != rhs; }
String toString(const Approx& in) {
- // NOLINTNEXTLINE(clang-analyzer-cplusplus.NewDeleteLeaks)
return "Approx( " + doctest::toString(in.m_value) + " )";
}
const ContextOptions* getContextOptions() { return DOCTEST_BRANCH_ON_DISABLED(nullptr, g_cs); }
+DOCTEST_MSVC_SUPPRESS_WARNING_WITH_PUSH(4738)
+template <typename F>
+IsNaN<F>::operator bool() const {
+ return std::isnan(value) ^ flipped;
+}
+DOCTEST_MSVC_SUPPRESS_WARNING_POP
+template struct DOCTEST_INTERFACE_DEF IsNaN<float>;
+template struct DOCTEST_INTERFACE_DEF IsNaN<double>;
+template struct DOCTEST_INTERFACE_DEF IsNaN<long double>;
+template <typename F>
+String toString(IsNaN<F> in) { return String(in.flipped ? "! " : "") + "IsNaN( " + doctest::toString(in.value) + " )"; }
+String toString(IsNaN<float> in) { return toString<float>(in); }
+String toString(IsNaN<double> in) { return toString<double>(in); }
+String toString(IsNaN<double long> in) { return toString<double long>(in); }
+
} // namespace doctest
#ifdef DOCTEST_CONFIG_DISABLE
@@ -3800,11 +3980,9 @@ void Context::setOption(const char*, const char*) {}
bool Context::shouldExit() { return false; }
void Context::setAsDefaultForAssertsOutOfTestCases() {}
void Context::setAssertHandler(detail::assert_handler) {}
-void Context::setCout(std::ostream* out) {}
+void Context::setCout(std::ostream*) {}
int Context::run() { return 0; }
-IReporter::~IReporter() = default;
-
int IReporter::get_num_active_contexts() { return 0; }
const IContextScope* const* IReporter::get_active_contexts() { return nullptr; }
int IReporter::get_num_stringified_contexts() { return 0; }
@@ -3837,7 +4015,7 @@ namespace doctest {
namespace {
// the int (priority) is part of the key for automatic sorting - sadly one can register a
// reporter with a duplicate name and a different priority but hopefully that won't happen often :|
- typedef std::map<std::pair<int, String>, reporterCreatorFunc> reporterMap;
+ using reporterMap = std::map<std::pair<int, String>, reporterCreatorFunc>;
reporterMap& getReporters() {
static reporterMap data;
@@ -3869,8 +4047,8 @@ namespace detail {
#ifndef DOCTEST_CONFIG_NO_EXCEPTIONS
DOCTEST_NORETURN void throwException() {
g_cs->shouldLogCurrentException = false;
- throw TestFailureException();
- } // NOLINT(cert-err60-cpp)
+ throw TestFailureException(); // NOLINT(hicpp-exception-baseclass)
+ }
#else // DOCTEST_CONFIG_NO_EXCEPTIONS
void throwException() {}
#endif // DOCTEST_CONFIG_NO_EXCEPTIONS
@@ -3916,59 +4094,92 @@ namespace {
return !*wild;
}
- //// C string hash function (djb2) - taken from http://www.cse.yorku.ca/~oz/hash.html
- //unsigned hashStr(unsigned const char* str) {
- // unsigned long hash = 5381;
- // char c;
- // while((c = *str++))
- // hash = ((hash << 5) + hash) + c; // hash * 33 + c
- // return hash;
- //}
-
// checks if the name matches any of the filters (and can be configured what to do when empty)
bool matchesAny(const char* name, const std::vector<String>& filters, bool matchEmpty,
- bool caseSensitive) {
- if(filters.empty() && matchEmpty)
+ bool caseSensitive) {
+ if (filters.empty() && matchEmpty)
return true;
- for(auto& curr : filters)
- if(wildcmp(name, curr.c_str(), caseSensitive))
+ for (auto& curr : filters)
+ if (wildcmp(name, curr.c_str(), caseSensitive))
return true;
return false;
}
-} // namespace
-namespace detail {
- Subcase::Subcase(const String& name, const char* file, int line)
- : m_signature({name, file, line}) {
- auto* s = g_cs;
+ unsigned long long hash(unsigned long long a, unsigned long long b) {
+ return (a << 5) + b;
+ }
- // check subcase filters
- if(s->subcasesStack.size() < size_t(s->subcase_filter_levels)) {
- if(!matchesAny(m_signature.m_name.c_str(), s->filters[6], true, s->case_sensitive))
- return;
- if(matchesAny(m_signature.m_name.c_str(), s->filters[7], false, s->case_sensitive))
- return;
- }
-
- // if a Subcase on the same level has already been entered
- if(s->subcasesStack.size() < size_t(s->subcasesCurrentMaxLevel)) {
- s->should_reenter = true;
- return;
- }
+ // C string hash function (djb2) - taken from http://www.cse.yorku.ca/~oz/hash.html
+ unsigned long long hash(const char* str) {
+ unsigned long long hash = 5381;
+ char c;
+ while ((c = *str++))
+ hash = ((hash << 5) + hash) + c; // hash * 33 + c
+ return hash;
+ }
- // push the current signature to the stack so we can check if the
- // current stack + the current new subcase have been traversed
- s->subcasesStack.push_back(m_signature);
- if(s->subcasesPassed.count(s->subcasesStack) != 0) {
- // pop - revert to previous stack since we've already passed this
- s->subcasesStack.pop_back();
- return;
+ unsigned long long hash(const SubcaseSignature& sig) {
+ return hash(hash(hash(sig.m_file), hash(sig.m_name.c_str())), sig.m_line);
+ }
+
+ unsigned long long hash(const std::vector<SubcaseSignature>& sigs, size_t count) {
+ unsigned long long running = 0;
+ auto end = sigs.begin() + count;
+ for (auto it = sigs.begin(); it != end; it++) {
+ running = hash(running, hash(*it));
}
+ return running;
+ }
- s->subcasesCurrentMaxLevel = s->subcasesStack.size();
- m_entered = true;
+ unsigned long long hash(const std::vector<SubcaseSignature>& sigs) {
+ unsigned long long running = 0;
+ for (const SubcaseSignature& sig : sigs) {
+ running = hash(running, hash(sig));
+ }
+ return running;
+ }
+} // namespace
+namespace detail {
+ bool Subcase::checkFilters() {
+ if (g_cs->subcaseStack.size() < size_t(g_cs->subcase_filter_levels)) {
+ if (!matchesAny(m_signature.m_name.c_str(), g_cs->filters[6], true, g_cs->case_sensitive))
+ return true;
+ if (matchesAny(m_signature.m_name.c_str(), g_cs->filters[7], false, g_cs->case_sensitive))
+ return true;
+ }
+ return false;
+ }
- DOCTEST_ITERATE_THROUGH_REPORTERS(subcase_start, m_signature);
+ Subcase::Subcase(const String& name, const char* file, int line)
+ : m_signature({name, file, line}) {
+ if (!g_cs->reachedLeaf) {
+ if (g_cs->nextSubcaseStack.size() <= g_cs->subcaseStack.size()
+ || g_cs->nextSubcaseStack[g_cs->subcaseStack.size()] == m_signature) {
+ // Going down.
+ if (checkFilters()) { return; }
+
+ g_cs->subcaseStack.push_back(m_signature);
+ g_cs->currentSubcaseDepth++;
+ m_entered = true;
+ DOCTEST_ITERATE_THROUGH_REPORTERS(subcase_start, m_signature);
+ }
+ } else {
+ if (g_cs->subcaseStack[g_cs->currentSubcaseDepth] == m_signature) {
+ // This subcase is reentered via control flow.
+ g_cs->currentSubcaseDepth++;
+ m_entered = true;
+ DOCTEST_ITERATE_THROUGH_REPORTERS(subcase_start, m_signature);
+ } else if (g_cs->nextSubcaseStack.size() <= g_cs->currentSubcaseDepth
+ && g_cs->fullyTraversedSubcases.find(hash(hash(g_cs->subcaseStack, g_cs->currentSubcaseDepth), hash(m_signature)))
+ == g_cs->fullyTraversedSubcases.end()) {
+ if (checkFilters()) { return; }
+ // This subcase is part of the one to be executed next.
+ g_cs->nextSubcaseStack.clear();
+ g_cs->nextSubcaseStack.insert(g_cs->nextSubcaseStack.end(),
+ g_cs->subcaseStack.begin(), g_cs->subcaseStack.begin() + g_cs->currentSubcaseDepth);
+ g_cs->nextSubcaseStack.push_back(m_signature);
+ }
+ }
}
DOCTEST_MSVC_SUPPRESS_WARNING_WITH_PUSH(4996) // std::uncaught_exception is deprecated in C++17
@@ -3976,25 +4187,33 @@ namespace detail {
DOCTEST_CLANG_SUPPRESS_WARNING_WITH_PUSH("-Wdeprecated-declarations")
Subcase::~Subcase() {
- if(m_entered) {
- // only mark the subcase stack as passed if no subcases have been skipped
- if(g_cs->should_reenter == false)
- g_cs->subcasesPassed.insert(g_cs->subcasesStack);
- g_cs->subcasesStack.pop_back();
+ if (m_entered) {
+ g_cs->currentSubcaseDepth--;
+
+ if (!g_cs->reachedLeaf) {
+ // Leaf.
+ g_cs->fullyTraversedSubcases.insert(hash(g_cs->subcaseStack));
+ g_cs->nextSubcaseStack.clear();
+ g_cs->reachedLeaf = true;
+ } else if (g_cs->nextSubcaseStack.empty()) {
+ // All children are finished.
+ g_cs->fullyTraversedSubcases.insert(hash(g_cs->subcaseStack));
+ }
#if defined(__cpp_lib_uncaught_exceptions) && __cpp_lib_uncaught_exceptions >= 201411L && (!defined(__MAC_OS_X_VERSION_MIN_REQUIRED) || __MAC_OS_X_VERSION_MIN_REQUIRED >= 101200)
if(std::uncaught_exceptions() > 0
#else
if(std::uncaught_exception()
#endif
- && g_cs->shouldLogCurrentException) {
+ && g_cs->shouldLogCurrentException) {
DOCTEST_ITERATE_THROUGH_REPORTERS(
test_case_exception, {"exception thrown in subcase - will translate later "
- "when the whole test case has been exited (cannot "
- "translate while there is an active exception)",
- false});
+ "when the whole test case has been exited (cannot "
+ "translate while there is an active exception)",
+ false});
g_cs->shouldLogCurrentException = false;
}
+
DOCTEST_ITERATE_THROUGH_REPORTERS(subcase_end, DOCTEST_EMPTY);
}
}
@@ -4018,7 +4237,7 @@ namespace detail {
}
TestCase::TestCase(funcType test, const char* file, unsigned line, const TestSuite& test_suite,
- const char* type, int template_id) {
+ const String& type, int template_id) {
m_file = file;
m_line = line;
m_name = nullptr; // will be later overridden in operator*
@@ -4043,10 +4262,8 @@ namespace detail {
}
DOCTEST_MSVC_SUPPRESS_WARNING_WITH_PUSH(26434) // hides a non-virtual function
- DOCTEST_MSVC_SUPPRESS_WARNING(26437) // Do not slice
TestCase& TestCase::operator=(const TestCase& other) {
- static_cast<TestCaseData&>(*this) = static_cast<const TestCaseData&>(other);
-
+ TestCaseData::operator=(other);
m_test = other.m_test;
m_type = other.m_type;
m_template_id = other.m_template_id;
@@ -4062,7 +4279,7 @@ namespace detail {
m_name = in;
// make a new name with an appended type for templated test case
if(m_template_id != -1) {
- m_full_name = String(m_name) + m_type;
+ m_full_name = String(m_name) + "<" + m_type + ">";
// redirect the name to point to the newly constructed full name
m_name = m_full_name.c_str();
}
@@ -4304,34 +4521,13 @@ namespace detail {
getExceptionTranslators().push_back(et);
}
-#ifdef DOCTEST_CONFIG_TREAT_CHAR_STAR_AS_STRING
- void toStream(std::ostream* s, char* in) { *s << in; }
- void toStream(std::ostream* s, const char* in) { *s << in; }
-#endif // DOCTEST_CONFIG_TREAT_CHAR_STAR_AS_STRING
- void toStream(std::ostream* s, bool in) { *s << std::boolalpha << in << std::noboolalpha; }
- void toStream(std::ostream* s, float in) { *s << in; }
- void toStream(std::ostream* s, double in) { *s << in; }
- void toStream(std::ostream* s, double long in) { *s << in; }
-
- void toStream(std::ostream* s, char in) { *s << in; }
- void toStream(std::ostream* s, char signed in) { *s << in; }
- void toStream(std::ostream* s, char unsigned in) { *s << in; }
- void toStream(std::ostream* s, int short in) { *s << in; }
- void toStream(std::ostream* s, int short unsigned in) { *s << in; }
- void toStream(std::ostream* s, int in) { *s << in; }
- void toStream(std::ostream* s, int unsigned in) { *s << in; }
- void toStream(std::ostream* s, int long in) { *s << in; }
- void toStream(std::ostream* s, int long unsigned in) { *s << in; }
- void toStream(std::ostream* s, int long long in) { *s << in; }
- void toStream(std::ostream* s, int long long unsigned in) { *s << in; }
-
DOCTEST_THREAD_LOCAL std::vector<IContextScope*> g_infoContexts; // for logging with INFO()
ContextScopeBase::ContextScopeBase() {
g_infoContexts.push_back(this);
}
- ContextScopeBase::ContextScopeBase(ContextScopeBase&& other) {
+ ContextScopeBase::ContextScopeBase(ContextScopeBase&& other) noexcept {
if (other.need_to_destroy) {
other.destroy();
}
@@ -4401,10 +4597,10 @@ namespace {
static LONG CALLBACK handleException(PEXCEPTION_POINTERS ExceptionInfo) {
// Multiple threads may enter this filter/handler at once. We want the error message to be printed on the
// console just once no matter how many threads have crashed.
- static std::mutex mutex;
+ DOCTEST_DECLARE_STATIC_MUTEX(mutex)
static bool execute = true;
{
- std::lock_guard<std::mutex> lock(mutex);
+ DOCTEST_LOCK_MUTEX(mutex)
if(execute) {
bool reported = false;
for(size_t i = 0; i < DOCTEST_COUNTOF(signalDefs); ++i) {
@@ -4577,7 +4773,7 @@ namespace {
sigStack.ss_flags = 0;
sigaltstack(&sigStack, &oldSigStack);
struct sigaction sa = {};
- sa.sa_handler = handleSignal; // NOLINT
+ sa.sa_handler = handleSignal;
sa.sa_flags = SA_ONSTACK;
for(std::size_t i = 0; i < DOCTEST_COUNTOF(signalDefs); ++i) {
sigaction(signalDefs[i].id, &sa, &oldSigActions[i]);
@@ -4616,7 +4812,7 @@ namespace {
#define DOCTEST_OUTPUT_DEBUG_STRING(text) ::OutputDebugStringA(text)
#else
// TODO: integration with XCode and other IDEs
-#define DOCTEST_OUTPUT_DEBUG_STRING(text) // NOLINT(clang-diagnostic-unused-macros)
+#define DOCTEST_OUTPUT_DEBUG_STRING(text)
#endif // Platform
void addAssert(assertType::Enum at) {
@@ -4635,8 +4831,8 @@ namespace {
DOCTEST_ITERATE_THROUGH_REPORTERS(test_case_exception, {message.c_str(), true});
- while(g_cs->subcasesStack.size()) {
- g_cs->subcasesStack.pop_back();
+ while (g_cs->subcaseStack.size()) {
+ g_cs->subcaseStack.pop_back();
DOCTEST_ITERATE_THROUGH_REPORTERS(subcase_end, DOCTEST_EMPTY);
}
@@ -4648,25 +4844,26 @@ namespace {
}
#endif // DOCTEST_CONFIG_POSIX_SIGNALS || DOCTEST_CONFIG_WINDOWS_SEH
} // namespace
-namespace detail {
- ResultBuilder::ResultBuilder(assertType::Enum at, const char* file, int line, const char* expr,
- const char* exception_type, const char* exception_string) {
- m_test_case = g_cs->currentTest;
- m_at = at;
- m_file = file;
- m_line = line;
- m_expr = expr;
- m_failed = true;
- m_threw = false;
- m_threw_as = false;
- m_exception_type = exception_type;
- m_exception_string = exception_string;
+AssertData::AssertData(assertType::Enum at, const char* file, int line, const char* expr,
+ const char* exception_type, const StringContains& exception_string)
+ : m_test_case(g_cs->currentTest), m_at(at), m_file(file), m_line(line), m_expr(expr),
+ m_failed(true), m_threw(false), m_threw_as(false), m_exception_type(exception_type),
+ m_exception_string(exception_string) {
#if DOCTEST_MSVC
- if(m_expr[0] == ' ') // this happens when variadic macros are disabled under MSVC
- ++m_expr;
+ if (m_expr[0] == ' ') // this happens when variadic macros are disabled under MSVC
+ ++m_expr;
#endif // MSVC
- }
+}
+
+namespace detail {
+ ResultBuilder::ResultBuilder(assertType::Enum at, const char* file, int line, const char* expr,
+ const char* exception_type, const String& exception_string)
+ : AssertData(at, file, line, expr, exception_type, exception_string) { }
+
+ ResultBuilder::ResultBuilder(assertType::Enum at, const char* file, int line, const char* expr,
+ const char* exception_type, const Contains& exception_string)
+ : AssertData(at, file, line, expr, exception_type, exception_string) { }
void ResultBuilder::setResult(const Result& res) {
m_decomp = res.m_decomp;
@@ -4682,11 +4879,11 @@ namespace detail {
if(m_at & assertType::is_throws) { //!OCLINT bitwise operator in conditional
m_failed = !m_threw;
} else if((m_at & assertType::is_throws_as) && (m_at & assertType::is_throws_with)) { //!OCLINT
- m_failed = !m_threw_as || (m_exception != m_exception_string);
+ m_failed = !m_threw_as || !m_exception_string.check(m_exception);
} else if(m_at & assertType::is_throws_as) { //!OCLINT bitwise operator in conditional
m_failed = !m_threw_as;
} else if(m_at & assertType::is_throws_with) { //!OCLINT bitwise operator in conditional
- m_failed = m_exception != m_exception_string;
+ m_failed = !m_exception_string.check(m_exception);
} else if(m_at & assertType::is_nothrow) { //!OCLINT bitwise operator in conditional
m_failed = m_threw;
}
@@ -4721,7 +4918,7 @@ namespace detail {
}
bool decomp_assert(assertType::Enum at, const char* file, int line, const char* expr,
- Result result) {
+ const Result& result) {
bool failed = !result.m_passed;
// ###################################################################################
@@ -4730,7 +4927,6 @@ namespace detail {
// ###################################################################################
DOCTEST_ASSERT_OUT_OF_TESTS(result.m_decomp);
DOCTEST_ASSERT_IN_TESTS(result.m_decomp);
- // NOLINTNEXTLINE(clang-analyzer-cplusplus.NewDeleteLeaks)
return !failed;
}
@@ -4746,8 +4942,7 @@ namespace detail {
tlssPop();
}
- IExceptionTranslator::IExceptionTranslator() = default;
- IExceptionTranslator::~IExceptionTranslator() = default;
+ DOCTEST_DEFINE_INTERFACE(IExceptionTranslator)
bool MessageBuilder::log() {
if (!logged) {
@@ -4858,10 +5053,10 @@ namespace {
void ensureTagClosed();
- private:
-
void writeDeclaration();
+ private:
+
void newlineIfNecessary();
bool m_tagIsOpen = false;
@@ -5050,7 +5245,7 @@ namespace {
XmlWriter::XmlWriter( std::ostream& os ) : m_os( os )
{
- writeDeclaration();
+ // writeDeclaration(); // called explicitly by the reporters that use the writer class - see issue #627
}
XmlWriter::~XmlWriter() {
@@ -5161,8 +5356,8 @@ namespace {
struct XmlReporter : public IReporter
{
- XmlWriter xml;
- std::mutex mutex;
+ XmlWriter xml;
+ DOCTEST_DECLARE_MUTEX(mutex)
// caching pointers/references to objects of these types - safe to do
const ContextOptions& opt;
@@ -5256,6 +5451,8 @@ namespace {
}
void test_run_start() override {
+ xml.writeDeclaration();
+
// remove .exe extension - mainly to have the same output on UNIX and Windows
std::string binary_name = skipPathFromFilename(opt.binary_name.c_str());
#ifdef DOCTEST_PLATFORM_WINDOWS
@@ -5322,7 +5519,7 @@ namespace {
}
void test_case_exception(const TestCaseException& e) override {
- std::lock_guard<std::mutex> lock(mutex);
+ DOCTEST_LOCK_MUTEX(mutex)
xml.scopedElement("Exception")
.writeAttribute("crash", e.is_crash)
@@ -5343,7 +5540,7 @@ namespace {
if(!rb.m_failed && !opt.success)
return;
- std::lock_guard<std::mutex> lock(mutex);
+ DOCTEST_LOCK_MUTEX(mutex)
xml.startElement("Expression")
.writeAttribute("success", !rb.m_failed)
@@ -5359,7 +5556,7 @@ namespace {
if(rb.m_at & assertType::is_throws_as)
xml.scopedElement("ExpectedException").writeText(rb.m_exception_type);
if(rb.m_at & assertType::is_throws_with)
- xml.scopedElement("ExpectedExceptionString").writeText(rb.m_exception_string);
+ xml.scopedElement("ExpectedExceptionString").writeText(rb.m_exception_string.c_str());
if((rb.m_at & assertType::is_normal) && !rb.m_threw)
xml.scopedElement("Expanded").writeText(rb.m_decomp.c_str());
@@ -5369,7 +5566,7 @@ namespace {
}
void log_message(const MessageData& mb) override {
- std::lock_guard<std::mutex> lock(mutex);
+ DOCTEST_LOCK_MUTEX(mutex)
xml.startElement("Message")
.writeAttribute("type", failureString(mb.m_severity))
@@ -5405,7 +5602,8 @@ namespace {
} else if((rb.m_at & assertType::is_throws_as) &&
(rb.m_at & assertType::is_throws_with)) { //!OCLINT
s << Color::Cyan << assertString(rb.m_at) << "( " << rb.m_expr << ", \""
- << rb.m_exception_string << "\", " << rb.m_exception_type << " ) " << Color::None;
+ << rb.m_exception_string.c_str()
+ << "\", " << rb.m_exception_type << " ) " << Color::None;
if(rb.m_threw) {
if(!rb.m_failed) {
s << "threw as expected!\n";
@@ -5426,7 +5624,8 @@ namespace {
} else if(rb.m_at &
assertType::is_throws_with) { //!OCLINT bitwise operator in conditional
s << Color::Cyan << assertString(rb.m_at) << "( " << rb.m_expr << ", \""
- << rb.m_exception_string << "\" ) " << Color::None
+ << rb.m_exception_string.c_str()
+ << "\" ) " << Color::None
<< (rb.m_threw ? (!rb.m_failed ? "threw as expected!" :
"threw a DIFFERENT exception: ") :
"did NOT throw at all!")
@@ -5451,8 +5650,8 @@ namespace {
// - more attributes in tags
struct JUnitReporter : public IReporter
{
- XmlWriter xml;
- std::mutex mutex;
+ XmlWriter xml;
+ DOCTEST_DECLARE_MUTEX(mutex)
Timer timer;
std::vector<String> deepestSubcaseStackNames;
@@ -5548,9 +5747,13 @@ namespace {
// WHAT FOLLOWS ARE OVERRIDES OF THE VIRTUAL METHODS OF THE REPORTER INTERFACE
// =========================================================================================
- void report_query(const QueryData&) override {}
+ void report_query(const QueryData&) override {
+ xml.writeDeclaration();
+ }
- void test_run_start() override {}
+ void test_run_start() override {
+ xml.writeDeclaration();
+ }
void test_run_end(const TestRunStats& p) override {
// remove .exe extension - mainly to have the same output on UNIX and Windows
@@ -5620,7 +5823,7 @@ namespace {
}
void test_case_exception(const TestCaseException& e) override {
- std::lock_guard<std::mutex> lock(mutex);
+ DOCTEST_LOCK_MUTEX(mutex)
testCaseData.addError("exception", e.error_string.c_str());
}
@@ -5634,7 +5837,7 @@ namespace {
if(!rb.m_failed) // report only failures & ignore the `success` option
return;
- std::lock_guard<std::mutex> lock(mutex);
+ DOCTEST_LOCK_MUTEX(mutex)
std::ostringstream os;
os << skipPathFromFilename(rb.m_file) << (opt.gnu_file_line ? ":" : "(")
@@ -5685,7 +5888,7 @@ namespace {
bool hasLoggedCurrentTestStart;
std::vector<SubcaseSignature> subcasesStack;
size_t currentSubcaseLevel;
- std::mutex mutex;
+ DOCTEST_DECLARE_MUTEX(mutex)
// caching pointers/references to objects of these types - safe to do
const ContextOptions& opt;
@@ -6031,7 +6234,7 @@ namespace {
// log the preamble of the test case only if there is something
// else to print - something other than that an assert has failed
if(opt.duration ||
- (st.failure_flags && st.failure_flags != TestCaseFailureReason::AssertFailure))
+ (st.failure_flags && st.failure_flags != static_cast<int>(TestCaseFailureReason::AssertFailure)))
logTestStart();
if(opt.duration)
@@ -6062,7 +6265,7 @@ namespace {
}
void test_case_exception(const TestCaseException& e) override {
- std::lock_guard<std::mutex> lock(mutex);
+ DOCTEST_LOCK_MUTEX(mutex)
if(tc->m_no_output)
return;
@@ -6101,7 +6304,7 @@ namespace {
if((!rb.m_failed && !opt.success) || tc->m_no_output)
return;
- std::lock_guard<std::mutex> lock(mutex);
+ DOCTEST_LOCK_MUTEX(mutex)
logTestStart();
@@ -6117,7 +6320,7 @@ namespace {
if(tc->m_no_output)
return;
- std::lock_guard<std::mutex> lock(mutex);
+ DOCTEST_LOCK_MUTEX(mutex)
logTestStart();
@@ -6245,8 +6448,8 @@ namespace {
char character = *current++;
if(seenBackslash) {
seenBackslash = false;
- if(character == ',') {
- s.put(',');
+ if(character == ',' || character == '\\') {
+ s.put(character);
continue;
}
s.put('\\');
@@ -6282,30 +6485,30 @@ namespace {
if(!parseOption(argc, argv, pattern, &parsedValue))
return false;
- if(type == 0) {
+ if(type) {
+ // integer
+ // TODO: change this to use std::stoi or something else! currently it uses undefined behavior - assumes '0' on failed parse...
+ int theInt = std::atoi(parsedValue.c_str());
+ if (theInt != 0) {
+ res = theInt; //!OCLINT parameter reassignment
+ return true;
+ }
+ } else {
// boolean
- const char positive[][5] = {"1", "true", "on", "yes"}; // 5 - strlen("true") + 1
- const char negative[][6] = {"0", "false", "off", "no"}; // 6 - strlen("false") + 1
+ const char positive[][5] = { "1", "true", "on", "yes" }; // 5 - strlen("true") + 1
+ const char negative[][6] = { "0", "false", "off", "no" }; // 6 - strlen("false") + 1
// if the value matches any of the positive/negative possibilities
- for(unsigned i = 0; i < 4; i++) {
- if(parsedValue.compare(positive[i], true) == 0) {
+ for (unsigned i = 0; i < 4; i++) {
+ if (parsedValue.compare(positive[i], true) == 0) {
res = 1; //!OCLINT parameter reassignment
return true;
}
- if(parsedValue.compare(negative[i], true) == 0) {
+ if (parsedValue.compare(negative[i], true) == 0) {
res = 0; //!OCLINT parameter reassignment
return true;
}
}
- } else {
- // integer
- // TODO: change this to use std::stoi or something else! currently it uses undefined behavior - assumes '0' on failed parse...
- int theInt = std::atoi(parsedValue.c_str()); // NOLINT
- if(theInt != 0) {
- res = theInt; //!OCLINT parameter reassignment
- return true;
- }
}
return false;
}
@@ -6473,7 +6676,6 @@ void Context::setOption(const char* option, bool value) {
// allows the user to override procedurally the int options from the command line
void Context::setOption(const char* option, int value) {
setOption(option, toString(value).c_str());
- // NOLINTNEXTLINE(clang-analyzer-cplusplus.NewDeleteLeaks)
}
// allows the user to override procedurally the string options from the command line
@@ -6611,7 +6813,7 @@ int Context::run() {
// random_shuffle implementation
const auto first = &testArray[0];
for(size_t i = testArray.size() - 1; i > 0; --i) {
- int idxToSwap = std::rand() % (i + 1); // NOLINT
+ int idxToSwap = std::rand() % (i + 1);
const auto temp = first[i];
@@ -6698,7 +6900,7 @@ int Context::run() {
p->numAssertsFailedCurrentTest_atomic = 0;
p->numAssertsCurrentTest_atomic = 0;
- p->subcasesPassed.clear();
+ p->fullyTraversedSubcases.clear();
DOCTEST_ITERATE_THROUGH_REPORTERS(test_case_start, tc);
@@ -6708,9 +6910,10 @@ int Context::run() {
do {
// reset some of the fields for subcases (except for the set of fully passed ones)
- p->should_reenter = false;
- p->subcasesCurrentMaxLevel = 0;
- p->subcasesStack.clear();
+ p->reachedLeaf = false;
+ // May not be empty if previous subcase exited via exception.
+ p->subcaseStack.clear();
+ p->currentSubcaseDepth = 0;
p->shouldLogCurrentException = true;
@@ -6744,9 +6947,9 @@ DOCTEST_MSVC_SUPPRESS_WARNING_POP
p->failure_flags |= TestCaseFailureReason::TooManyFailedAsserts;
}
- if(p->should_reenter && run_test)
+ if(!p->nextSubcaseStack.empty() && run_test)
DOCTEST_ITERATE_THROUGH_REPORTERS(test_case_reenter, tc);
- if(!p->should_reenter)
+ if(p->nextSubcaseStack.empty())
run_test = false;
} while(run_test);
@@ -6775,7 +6978,7 @@ DOCTEST_MSVC_SUPPRESS_WARNING_POP
return cleanup_and_return();
}
-IReporter::~IReporter() = default;
+DOCTEST_DEFINE_INTERFACE(IReporter)
int IReporter::get_num_active_contexts() { return detail::g_infoContexts.size(); }
const IContextScope* const* IReporter::get_active_contexts() {
diff --git a/thirdparty/etcpak/ProcessRGB.cpp b/thirdparty/etcpak/ProcessRGB.cpp
index fdb0967ce7..4dc3bf23af 100644
--- a/thirdparty/etcpak/ProcessRGB.cpp
+++ b/thirdparty/etcpak/ProcessRGB.cpp
@@ -3216,9 +3216,9 @@ etcpak_force_inline static uint16x8_t ErrorProbe_EAC_NEON( uint8x8_t recVal, uin
uint8x8_t srcValWide;
#ifndef __aarch64__
if( Index < 8 )
- srcValWide = vdup_lane_u8( vget_low_u8( alphaBlock ), ClampConstant( Index, 0, 8 ) );
+ srcValWide = vdup_lane_u8( vget_low_u8( alphaBlock ), ClampConstant( Index, 0, 7 ) );
else
- srcValWide = vdup_lane_u8( vget_high_u8( alphaBlock ), ClampConstant( Index - 8, 0, 8 ) );
+ srcValWide = vdup_lane_u8( vget_high_u8( alphaBlock ), ClampConstant( Index - 8, 0, 7 ) );
#else
srcValWide = vdup_laneq_u8( alphaBlock, Index );
#endif
@@ -3256,9 +3256,9 @@ etcpak_force_inline static int16x8_t WidenMultiplier_EAC_NEON( int16x8_t multipl
constexpr int Lane = GetMulSel( Index );
#ifndef __aarch64__
if( Lane < 4 )
- return vdupq_lane_s16( vget_low_s16( multipliers ), ClampConstant( Lane, 0, 4 ) );
+ return vdupq_lane_s16( vget_low_s16( multipliers ), ClampConstant( Lane, 0, 3 ) );
else
- return vdupq_lane_s16( vget_high_s16( multipliers ), ClampConstant( Lane - 4, 0, 4 ) );
+ return vdupq_lane_s16( vget_high_s16( multipliers ), ClampConstant( Lane - 4, 0, 3 ) );
#else
return vdupq_laneq_s16( multipliers, Lane );
#endif
diff --git a/thirdparty/jpeg-compressor/jpge.cpp b/thirdparty/jpeg-compressor/jpge.cpp
new file mode 100644
index 0000000000..5a36c19653
--- /dev/null
+++ b/thirdparty/jpeg-compressor/jpge.cpp
@@ -0,0 +1,1076 @@
+// jpge.cpp - C++ class for JPEG compression. Richard Geldreich <richgel99@gmail.com>
+// Supports grayscale, H1V1, H2V1, and H2V2 chroma subsampling factors, one or two pass Huffman table optimization, libjpeg-style quality 1-100 quality factors.
+// Also supports using luma quantization tables for chroma.
+//
+// Released under two licenses. You are free to choose which license you want:
+// License 1:
+// Public Domain
+//
+// License 2:
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// 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.
+//
+// v1.01, Dec. 18, 2010 - Initial release
+// v1.02, Apr. 6, 2011 - Removed 2x2 ordered dither in H2V1 chroma subsampling method load_block_16_8_8(). (The rounding factor was 2, when it should have been 1. Either way, it wasn't helping.)
+// v1.03, Apr. 16, 2011 - Added support for optimized Huffman code tables, optimized dynamic memory allocation down to only 1 alloc.
+// Also from Alex Evans: Added RGBA support, linear memory allocator (no longer needed in v1.03).
+// v1.04, May. 19, 2012: Forgot to set m_pFile ptr to NULL in cfile_stream::close(). Thanks to Owen Kaluza for reporting this bug.
+// Code tweaks to fix VS2008 static code analysis warnings (all looked harmless).
+// Code review revealed method load_block_16_8_8() (used for the non-default H2V1 sampling mode to downsample chroma) somehow didn't get the rounding factor fix from v1.02.
+// v1.05, March 25, 2020: Added Apache 2.0 alternate license
+
+#include "jpge.h"
+
+#include <stdlib.h>
+#include <string.h>
+
+#define JPGE_MAX(a,b) (((a)>(b))?(a):(b))
+#define JPGE_MIN(a,b) (((a)<(b))?(a):(b))
+
+namespace jpge {
+
+ static inline void* jpge_malloc(size_t nSize) { return malloc(nSize); }
+ static inline void jpge_free(void* p) { free(p); }
+
+ // Various JPEG enums and tables.
+ enum { M_SOF0 = 0xC0, M_DHT = 0xC4, M_SOI = 0xD8, M_EOI = 0xD9, M_SOS = 0xDA, M_DQT = 0xDB, M_APP0 = 0xE0 };
+ enum { DC_LUM_CODES = 12, AC_LUM_CODES = 256, DC_CHROMA_CODES = 12, AC_CHROMA_CODES = 256, MAX_HUFF_SYMBOLS = 257, MAX_HUFF_CODESIZE = 32 };
+
+ static uint8 s_zag[64] = { 0,1,8,16,9,2,3,10,17,24,32,25,18,11,4,5,12,19,26,33,40,48,41,34,27,20,13,6,7,14,21,28,35,42,49,56,57,50,43,36,29,22,15,23,30,37,44,51,58,59,52,45,38,31,39,46,53,60,61,54,47,55,62,63 };
+ static int16 s_std_lum_quant[64] = { 16,11,12,14,12,10,16,14,13,14,18,17,16,19,24,40,26,24,22,22,24,49,35,37,29,40,58,51,61,60,57,51,56,55,64,72,92,78,64,68,87,69,55,56,80,109,81,87,95,98,103,104,103,62,77,113,121,112,100,120,92,101,103,99 };
+ static int16 s_std_croma_quant[64] = { 17,18,18,24,21,24,47,26,26,47,99,66,56,66,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99 };
+
+ // Table from http://www.imagemagick.org/discourse-server/viewtopic.php?f=22&t=20333&p=98008#p98008
+ // This is mozjpeg's default table, in zag order.
+ static int16 s_alt_quant[64] = { 16,16,16,16,17,16,18,20,20,18,25,27,24,27,25,37,34,31,31,34,37,56,40,43,40,43,40,56,85,53,62,53,53,62,53,85,75,91,74,69,74,91,75,135,106,94,94,106,135,156,131,124,131,156,189,169,169,189,238,226,238,311,311,418 };
+
+ static uint8 s_dc_lum_bits[17] = { 0,0,1,5,1,1,1,1,1,1,0,0,0,0,0,0,0 };
+ static uint8 s_dc_lum_val[DC_LUM_CODES] = { 0,1,2,3,4,5,6,7,8,9,10,11 };
+ static uint8 s_ac_lum_bits[17] = { 0,0,2,1,3,3,2,4,3,5,5,4,4,0,0,1,0x7d };
+ static uint8 s_ac_lum_val[AC_LUM_CODES] =
+ {
+ 0x01,0x02,0x03,0x00,0x04,0x11,0x05,0x12,0x21,0x31,0x41,0x06,0x13,0x51,0x61,0x07,0x22,0x71,0x14,0x32,0x81,0x91,0xa1,0x08,0x23,0x42,0xb1,0xc1,0x15,0x52,0xd1,0xf0,
+ 0x24,0x33,0x62,0x72,0x82,0x09,0x0a,0x16,0x17,0x18,0x19,0x1a,0x25,0x26,0x27,0x28,0x29,0x2a,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x43,0x44,0x45,0x46,0x47,0x48,0x49,
+ 0x4a,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x83,0x84,0x85,0x86,0x87,0x88,0x89,
+ 0x8a,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xc2,0xc3,0xc4,0xc5,
+ 0xc6,0xc7,0xc8,0xc9,0xca,0xd2,0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,
+ 0xf9,0xfa
+ };
+ static uint8 s_dc_chroma_bits[17] = { 0,0,3,1,1,1,1,1,1,1,1,1,0,0,0,0,0 };
+ static uint8 s_dc_chroma_val[DC_CHROMA_CODES] = { 0,1,2,3,4,5,6,7,8,9,10,11 };
+ static uint8 s_ac_chroma_bits[17] = { 0,0,2,1,2,4,4,3,4,7,5,4,4,0,1,2,0x77 };
+ static uint8 s_ac_chroma_val[AC_CHROMA_CODES] =
+ {
+ 0x00,0x01,0x02,0x03,0x11,0x04,0x05,0x21,0x31,0x06,0x12,0x41,0x51,0x07,0x61,0x71,0x13,0x22,0x32,0x81,0x08,0x14,0x42,0x91,0xa1,0xb1,0xc1,0x09,0x23,0x33,0x52,0xf0,
+ 0x15,0x62,0x72,0xd1,0x0a,0x16,0x24,0x34,0xe1,0x25,0xf1,0x17,0x18,0x19,0x1a,0x26,0x27,0x28,0x29,0x2a,0x35,0x36,0x37,0x38,0x39,0x3a,0x43,0x44,0x45,0x46,0x47,0x48,
+ 0x49,0x4a,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x82,0x83,0x84,0x85,0x86,0x87,
+ 0x88,0x89,0x8a,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xc2,0xc3,
+ 0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xd2,0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,
+ 0xf9,0xfa
+ };
+
+ // Low-level helper functions.
+ template <class T> inline void clear_obj(T& obj) { memset(&obj, 0, sizeof(obj)); }
+
+ const int YR = 19595, YG = 38470, YB = 7471, CB_R = -11059, CB_G = -21709, CB_B = 32768, CR_R = 32768, CR_G = -27439, CR_B = -5329;
+ static inline uint8 clamp(int i) { if (static_cast<uint>(i) > 255U) { if (i < 0) i = 0; else if (i > 255) i = 255; } return static_cast<uint8>(i); }
+
+ static inline int left_shifti(int val, uint32 bits)
+ {
+ return static_cast<int>(static_cast<uint32>(val) << bits);
+ }
+
+ static void RGB_to_YCC(uint8* pDst, const uint8* pSrc, int num_pixels)
+ {
+ for (; num_pixels; pDst += 3, pSrc += 3, num_pixels--)
+ {
+ const int r = pSrc[0], g = pSrc[1], b = pSrc[2];
+ pDst[0] = static_cast<uint8>((r * YR + g * YG + b * YB + 32768) >> 16);
+ pDst[1] = clamp(128 + ((r * CB_R + g * CB_G + b * CB_B + 32768) >> 16));
+ pDst[2] = clamp(128 + ((r * CR_R + g * CR_G + b * CR_B + 32768) >> 16));
+ }
+ }
+
+ static void RGB_to_Y(uint8* pDst, const uint8* pSrc, int num_pixels)
+ {
+ for (; num_pixels; pDst++, pSrc += 3, num_pixels--)
+ pDst[0] = static_cast<uint8>((pSrc[0] * YR + pSrc[1] * YG + pSrc[2] * YB + 32768) >> 16);
+ }
+
+ static void RGBA_to_YCC(uint8* pDst, const uint8* pSrc, int num_pixels)
+ {
+ for (; num_pixels; pDst += 3, pSrc += 4, num_pixels--)
+ {
+ const int r = pSrc[0], g = pSrc[1], b = pSrc[2];
+ pDst[0] = static_cast<uint8>((r * YR + g * YG + b * YB + 32768) >> 16);
+ pDst[1] = clamp(128 + ((r * CB_R + g * CB_G + b * CB_B + 32768) >> 16));
+ pDst[2] = clamp(128 + ((r * CR_R + g * CR_G + b * CR_B + 32768) >> 16));
+ }
+ }
+
+ static void RGBA_to_Y(uint8* pDst, const uint8* pSrc, int num_pixels)
+ {
+ for (; num_pixels; pDst++, pSrc += 4, num_pixels--)
+ pDst[0] = static_cast<uint8>((pSrc[0] * YR + pSrc[1] * YG + pSrc[2] * YB + 32768) >> 16);
+ }
+
+ static void Y_to_YCC(uint8* pDst, const uint8* pSrc, int num_pixels)
+ {
+ for (; num_pixels; pDst += 3, pSrc++, num_pixels--) { pDst[0] = pSrc[0]; pDst[1] = 128; pDst[2] = 128; }
+ }
+
+ // Forward DCT - DCT derived from jfdctint.
+ enum { CONST_BITS = 13, ROW_BITS = 2 };
+#define DCT_DESCALE(x, n) (((x) + (((int32)1) << ((n) - 1))) >> (n))
+#define DCT_MUL(var, c) (static_cast<int16>(var) * static_cast<int32>(c))
+#define DCT1D(s0, s1, s2, s3, s4, s5, s6, s7) \
+ int32 t0 = s0 + s7, t7 = s0 - s7, t1 = s1 + s6, t6 = s1 - s6, t2 = s2 + s5, t5 = s2 - s5, t3 = s3 + s4, t4 = s3 - s4; \
+ int32 t10 = t0 + t3, t13 = t0 - t3, t11 = t1 + t2, t12 = t1 - t2; \
+ int32 u1 = DCT_MUL(t12 + t13, 4433); \
+ s2 = u1 + DCT_MUL(t13, 6270); \
+ s6 = u1 + DCT_MUL(t12, -15137); \
+ u1 = t4 + t7; \
+ int32 u2 = t5 + t6, u3 = t4 + t6, u4 = t5 + t7; \
+ int32 z5 = DCT_MUL(u3 + u4, 9633); \
+ t4 = DCT_MUL(t4, 2446); t5 = DCT_MUL(t5, 16819); \
+ t6 = DCT_MUL(t6, 25172); t7 = DCT_MUL(t7, 12299); \
+ u1 = DCT_MUL(u1, -7373); u2 = DCT_MUL(u2, -20995); \
+ u3 = DCT_MUL(u3, -16069); u4 = DCT_MUL(u4, -3196); \
+ u3 += z5; u4 += z5; \
+ s0 = t10 + t11; s1 = t7 + u1 + u4; s3 = t6 + u2 + u3; s4 = t10 - t11; s5 = t5 + u2 + u4; s7 = t4 + u1 + u3;
+
+ static void DCT2D(int32* p)
+ {
+ int32 c, * q = p;
+ for (c = 7; c >= 0; c--, q += 8)
+ {
+ int32 s0 = q[0], s1 = q[1], s2 = q[2], s3 = q[3], s4 = q[4], s5 = q[5], s6 = q[6], s7 = q[7];
+ DCT1D(s0, s1, s2, s3, s4, s5, s6, s7);
+ q[0] = left_shifti(s0, ROW_BITS); q[1] = DCT_DESCALE(s1, CONST_BITS - ROW_BITS); q[2] = DCT_DESCALE(s2, CONST_BITS - ROW_BITS); q[3] = DCT_DESCALE(s3, CONST_BITS - ROW_BITS);
+ q[4] = left_shifti(s4, ROW_BITS); q[5] = DCT_DESCALE(s5, CONST_BITS - ROW_BITS); q[6] = DCT_DESCALE(s6, CONST_BITS - ROW_BITS); q[7] = DCT_DESCALE(s7, CONST_BITS - ROW_BITS);
+ }
+ for (q = p, c = 7; c >= 0; c--, q++)
+ {
+ int32 s0 = q[0 * 8], s1 = q[1 * 8], s2 = q[2 * 8], s3 = q[3 * 8], s4 = q[4 * 8], s5 = q[5 * 8], s6 = q[6 * 8], s7 = q[7 * 8];
+ DCT1D(s0, s1, s2, s3, s4, s5, s6, s7);
+ q[0 * 8] = DCT_DESCALE(s0, ROW_BITS + 3); q[1 * 8] = DCT_DESCALE(s1, CONST_BITS + ROW_BITS + 3); q[2 * 8] = DCT_DESCALE(s2, CONST_BITS + ROW_BITS + 3); q[3 * 8] = DCT_DESCALE(s3, CONST_BITS + ROW_BITS + 3);
+ q[4 * 8] = DCT_DESCALE(s4, ROW_BITS + 3); q[5 * 8] = DCT_DESCALE(s5, CONST_BITS + ROW_BITS + 3); q[6 * 8] = DCT_DESCALE(s6, CONST_BITS + ROW_BITS + 3); q[7 * 8] = DCT_DESCALE(s7, CONST_BITS + ROW_BITS + 3);
+ }
+ }
+
+ struct sym_freq { uint m_key, m_sym_index; };
+
+ // Radix sorts sym_freq[] array by 32-bit key m_key. Returns ptr to sorted values.
+ static inline sym_freq* radix_sort_syms(uint num_syms, sym_freq* pSyms0, sym_freq* pSyms1)
+ {
+ const uint cMaxPasses = 4;
+ uint32 hist[256 * cMaxPasses]; clear_obj(hist);
+ for (uint i = 0; i < num_syms; i++) { uint freq = pSyms0[i].m_key; hist[freq & 0xFF]++; hist[256 + ((freq >> 8) & 0xFF)]++; hist[256 * 2 + ((freq >> 16) & 0xFF)]++; hist[256 * 3 + ((freq >> 24) & 0xFF)]++; }
+ sym_freq* pCur_syms = pSyms0, * pNew_syms = pSyms1;
+ uint total_passes = cMaxPasses; while ((total_passes > 1) && (num_syms == hist[(total_passes - 1) * 256])) total_passes--;
+ for (uint pass_shift = 0, pass = 0; pass < total_passes; pass++, pass_shift += 8)
+ {
+ const uint32* pHist = &hist[pass << 8];
+ uint offsets[256], cur_ofs = 0;
+ for (uint i = 0; i < 256; i++) { offsets[i] = cur_ofs; cur_ofs += pHist[i]; }
+ for (uint i = 0; i < num_syms; i++)
+ pNew_syms[offsets[(pCur_syms[i].m_key >> pass_shift) & 0xFF]++] = pCur_syms[i];
+ sym_freq* t = pCur_syms; pCur_syms = pNew_syms; pNew_syms = t;
+ }
+ return pCur_syms;
+ }
+
+ // calculate_minimum_redundancy() originally written by: Alistair Moffat, alistair@cs.mu.oz.au, Jyrki Katajainen, jyrki@diku.dk, November 1996.
+ static void calculate_minimum_redundancy(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 = 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 += A[root].m_key; A[root++].m_key = next; }
+ else 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 = dpth; avbl--; }
+ avbl = 2 * used; dpth++; used = 0;
+ }
+ }
+
+ // Limits canonical Huffman code table's max code size to max_code_size.
+ static void huffman_enforce_max_code_size(int* pNum_codes, int code_list_len, int max_code_size)
+ {
+ if (code_list_len <= 1) return;
+
+ for (int i = max_code_size + 1; i <= MAX_HUFF_CODESIZE; i++) pNum_codes[max_code_size] += pNum_codes[i];
+
+ uint32 total = 0;
+ for (int i = max_code_size; i > 0; i--)
+ total += (((uint32)pNum_codes[i]) << (max_code_size - i));
+
+ while (total != (1UL << max_code_size))
+ {
+ pNum_codes[max_code_size]--;
+ for (int i = max_code_size - 1; i > 0; i--)
+ {
+ if (pNum_codes[i]) { pNum_codes[i]--; pNum_codes[i + 1] += 2; break; }
+ }
+ total--;
+ }
+ }
+
+ // Generates an optimized offman table.
+ void jpeg_encoder::optimize_huffman_table(int table_num, int table_len)
+ {
+ sym_freq syms0[MAX_HUFF_SYMBOLS], syms1[MAX_HUFF_SYMBOLS];
+ syms0[0].m_key = 1; syms0[0].m_sym_index = 0; // dummy symbol, assures that no valid code contains all 1's
+ int num_used_syms = 1;
+ const uint32* pSym_count = &m_huff_count[table_num][0];
+ for (int i = 0; i < table_len; i++)
+ if (pSym_count[i]) { syms0[num_used_syms].m_key = pSym_count[i]; syms0[num_used_syms++].m_sym_index = i + 1; }
+ sym_freq* pSyms = radix_sort_syms(num_used_syms, syms0, syms1);
+ calculate_minimum_redundancy(pSyms, num_used_syms);
+
+ // Count the # of symbols of each code size.
+ int num_codes[1 + MAX_HUFF_CODESIZE]; clear_obj(num_codes);
+ for (int i = 0; i < num_used_syms; i++)
+ num_codes[pSyms[i].m_key]++;
+
+ const uint JPGE_CODE_SIZE_LIMIT = 16; // the maximum possible size of a JPEG Huffman code (valid range is [9,16] - 9 vs. 8 because of the dummy symbol)
+ huffman_enforce_max_code_size(num_codes, num_used_syms, JPGE_CODE_SIZE_LIMIT);
+
+ // Compute m_huff_bits array, which contains the # of symbols per code size.
+ clear_obj(m_huff_bits[table_num]);
+ for (int i = 1; i <= (int)JPGE_CODE_SIZE_LIMIT; i++)
+ m_huff_bits[table_num][i] = static_cast<uint8>(num_codes[i]);
+
+ // Remove the dummy symbol added above, which must be in largest bucket.
+ for (int i = JPGE_CODE_SIZE_LIMIT; i >= 1; i--)
+ {
+ if (m_huff_bits[table_num][i]) { m_huff_bits[table_num][i]--; break; }
+ }
+
+ // Compute the m_huff_val array, which contains the symbol indices sorted by code size (smallest to largest).
+ for (int i = num_used_syms - 1; i >= 1; i--)
+ m_huff_val[table_num][num_used_syms - 1 - i] = static_cast<uint8>(pSyms[i].m_sym_index - 1);
+ }
+
+ // JPEG marker generation.
+ void jpeg_encoder::emit_byte(uint8 i)
+ {
+ m_all_stream_writes_succeeded = m_all_stream_writes_succeeded && m_pStream->put_obj(i);
+ }
+
+ void jpeg_encoder::emit_word(uint i)
+ {
+ emit_byte(uint8(i >> 8)); emit_byte(uint8(i & 0xFF));
+ }
+
+ void jpeg_encoder::emit_marker(int marker)
+ {
+ emit_byte(uint8(0xFF)); emit_byte(uint8(marker));
+ }
+
+ // Emit JFIF marker
+ void jpeg_encoder::emit_jfif_app0()
+ {
+ emit_marker(M_APP0);
+ emit_word(2 + 4 + 1 + 2 + 1 + 2 + 2 + 1 + 1);
+ emit_byte(0x4A); emit_byte(0x46); emit_byte(0x49); emit_byte(0x46); /* Identifier: ASCII "JFIF" */
+ emit_byte(0);
+ emit_byte(1); /* Major version */
+ emit_byte(1); /* Minor version */
+ emit_byte(0); /* Density unit */
+ emit_word(1);
+ emit_word(1);
+ emit_byte(0); /* No thumbnail image */
+ emit_byte(0);
+ }
+
+ // Emit quantization tables
+ void jpeg_encoder::emit_dqt()
+ {
+ for (int i = 0; i < ((m_num_components == 3) ? 2 : 1); i++)
+ {
+ emit_marker(M_DQT);
+ emit_word(64 + 1 + 2);
+ emit_byte(static_cast<uint8>(i));
+ for (int j = 0; j < 64; j++)
+ emit_byte(static_cast<uint8>(m_quantization_tables[i][j]));
+ }
+ }
+
+ // Emit start of frame marker
+ void jpeg_encoder::emit_sof()
+ {
+ emit_marker(M_SOF0); /* baseline */
+ emit_word(3 * m_num_components + 2 + 5 + 1);
+ emit_byte(8); /* precision */
+ emit_word(m_image_y);
+ emit_word(m_image_x);
+ emit_byte(m_num_components);
+ for (int i = 0; i < m_num_components; i++)
+ {
+ emit_byte(static_cast<uint8>(i + 1)); /* component ID */
+ emit_byte((m_comp_h_samp[i] << 4) + m_comp_v_samp[i]); /* h and v sampling */
+ emit_byte(i > 0); /* quant. table num */
+ }
+ }
+
+ // Emit Huffman table.
+ void jpeg_encoder::emit_dht(uint8* bits, uint8* val, int index, bool ac_flag)
+ {
+ emit_marker(M_DHT);
+
+ int length = 0;
+ for (int i = 1; i <= 16; i++)
+ length += bits[i];
+
+ emit_word(length + 2 + 1 + 16);
+ emit_byte(static_cast<uint8>(index + (ac_flag << 4)));
+
+ for (int i = 1; i <= 16; i++)
+ emit_byte(bits[i]);
+
+ for (int i = 0; i < length; i++)
+ emit_byte(val[i]);
+ }
+
+ // Emit all Huffman tables.
+ void jpeg_encoder::emit_dhts()
+ {
+ emit_dht(m_huff_bits[0 + 0], m_huff_val[0 + 0], 0, false);
+ emit_dht(m_huff_bits[2 + 0], m_huff_val[2 + 0], 0, true);
+ if (m_num_components == 3)
+ {
+ emit_dht(m_huff_bits[0 + 1], m_huff_val[0 + 1], 1, false);
+ emit_dht(m_huff_bits[2 + 1], m_huff_val[2 + 1], 1, true);
+ }
+ }
+
+ // emit start of scan
+ void jpeg_encoder::emit_sos()
+ {
+ emit_marker(M_SOS);
+ emit_word(2 * m_num_components + 2 + 1 + 3);
+ emit_byte(m_num_components);
+ for (int i = 0; i < m_num_components; i++)
+ {
+ emit_byte(static_cast<uint8>(i + 1));
+ if (i == 0)
+ emit_byte((0 << 4) + 0);
+ else
+ emit_byte((1 << 4) + 1);
+ }
+ emit_byte(0); /* spectral selection */
+ emit_byte(63);
+ emit_byte(0);
+ }
+
+ // Emit all markers at beginning of image file.
+ void jpeg_encoder::emit_markers()
+ {
+ emit_marker(M_SOI);
+ emit_jfif_app0();
+ emit_dqt();
+ emit_sof();
+ emit_dhts();
+ emit_sos();
+ }
+
+ // Compute the actual canonical Huffman codes/code sizes given the JPEG huff bits and val arrays.
+ void jpeg_encoder::compute_huffman_table(uint* codes, uint8* code_sizes, uint8* bits, uint8* val)
+ {
+ int i, l, last_p, si;
+ uint8 huff_size[257];
+ uint huff_code[257];
+ uint code;
+
+ int p = 0;
+ for (l = 1; l <= 16; l++)
+ for (i = 1; i <= bits[l]; i++)
+ huff_size[p++] = (char)l;
+
+ huff_size[p] = 0; last_p = p; // write sentinel
+
+ code = 0; si = huff_size[0]; p = 0;
+
+ while (huff_size[p])
+ {
+ while (huff_size[p] == si)
+ huff_code[p++] = code++;
+ code <<= 1;
+ si++;
+ }
+
+ memset(codes, 0, sizeof(codes[0]) * 256);
+ memset(code_sizes, 0, sizeof(code_sizes[0]) * 256);
+ for (p = 0; p < last_p; p++)
+ {
+ codes[val[p]] = huff_code[p];
+ code_sizes[val[p]] = huff_size[p];
+ }
+ }
+
+ // Quantization table generation.
+ void jpeg_encoder::compute_quant_table(int32* pDst, int16* pSrc)
+ {
+ int32 q;
+ if (m_params.m_quality < 50)
+ q = 5000 / m_params.m_quality;
+ else
+ q = 200 - m_params.m_quality * 2;
+ for (int i = 0; i < 64; i++)
+ {
+ int32 j = *pSrc++; j = (j * q + 50L) / 100L;
+ *pDst++ = JPGE_MIN(JPGE_MAX(j, 1), 255);
+ }
+ }
+
+ // Higher-level methods.
+ void jpeg_encoder::first_pass_init()
+ {
+ m_bit_buffer = 0; m_bits_in = 0;
+ memset(m_last_dc_val, 0, 3 * sizeof(m_last_dc_val[0]));
+ m_mcu_y_ofs = 0;
+ m_pass_num = 1;
+ }
+
+ bool jpeg_encoder::second_pass_init()
+ {
+ compute_huffman_table(&m_huff_codes[0 + 0][0], &m_huff_code_sizes[0 + 0][0], m_huff_bits[0 + 0], m_huff_val[0 + 0]);
+ compute_huffman_table(&m_huff_codes[2 + 0][0], &m_huff_code_sizes[2 + 0][0], m_huff_bits[2 + 0], m_huff_val[2 + 0]);
+ if (m_num_components > 1)
+ {
+ compute_huffman_table(&m_huff_codes[0 + 1][0], &m_huff_code_sizes[0 + 1][0], m_huff_bits[0 + 1], m_huff_val[0 + 1]);
+ compute_huffman_table(&m_huff_codes[2 + 1][0], &m_huff_code_sizes[2 + 1][0], m_huff_bits[2 + 1], m_huff_val[2 + 1]);
+ }
+ first_pass_init();
+ emit_markers();
+ m_pass_num = 2;
+ return true;
+ }
+
+ bool jpeg_encoder::jpg_open(int p_x_res, int p_y_res, int src_channels)
+ {
+ m_num_components = 3;
+ switch (m_params.m_subsampling)
+ {
+ case Y_ONLY:
+ {
+ m_num_components = 1;
+ m_comp_h_samp[0] = 1; m_comp_v_samp[0] = 1;
+ m_mcu_x = 8; m_mcu_y = 8;
+ break;
+ }
+ case H1V1:
+ {
+ m_comp_h_samp[0] = 1; m_comp_v_samp[0] = 1;
+ m_comp_h_samp[1] = 1; m_comp_v_samp[1] = 1;
+ m_comp_h_samp[2] = 1; m_comp_v_samp[2] = 1;
+ m_mcu_x = 8; m_mcu_y = 8;
+ break;
+ }
+ case H2V1:
+ {
+ m_comp_h_samp[0] = 2; m_comp_v_samp[0] = 1;
+ m_comp_h_samp[1] = 1; m_comp_v_samp[1] = 1;
+ m_comp_h_samp[2] = 1; m_comp_v_samp[2] = 1;
+ m_mcu_x = 16; m_mcu_y = 8;
+ break;
+ }
+ case H2V2:
+ {
+ m_comp_h_samp[0] = 2; m_comp_v_samp[0] = 2;
+ m_comp_h_samp[1] = 1; m_comp_v_samp[1] = 1;
+ m_comp_h_samp[2] = 1; m_comp_v_samp[2] = 1;
+ m_mcu_x = 16; m_mcu_y = 16;
+ }
+ }
+
+ m_image_x = p_x_res; m_image_y = p_y_res;
+ m_image_bpp = src_channels;
+ m_image_bpl = m_image_x * src_channels;
+ m_image_x_mcu = (m_image_x + m_mcu_x - 1) & (~(m_mcu_x - 1));
+ m_image_y_mcu = (m_image_y + m_mcu_y - 1) & (~(m_mcu_y - 1));
+ m_image_bpl_xlt = m_image_x * m_num_components;
+ m_image_bpl_mcu = m_image_x_mcu * m_num_components;
+ m_mcus_per_row = m_image_x_mcu / m_mcu_x;
+
+ if ((m_mcu_lines[0] = static_cast<uint8*>(jpge_malloc(m_image_bpl_mcu * m_mcu_y))) == NULL) return false;
+ for (int i = 1; i < m_mcu_y; i++)
+ m_mcu_lines[i] = m_mcu_lines[i - 1] + m_image_bpl_mcu;
+
+ if (m_params.m_use_std_tables)
+ {
+ compute_quant_table(m_quantization_tables[0], s_std_lum_quant);
+ compute_quant_table(m_quantization_tables[1], m_params.m_no_chroma_discrim_flag ? s_std_lum_quant : s_std_croma_quant);
+ }
+ else
+ {
+ compute_quant_table(m_quantization_tables[0], s_alt_quant);
+ memcpy(m_quantization_tables[1], m_quantization_tables[0], sizeof(m_quantization_tables[1]));
+ }
+
+ m_out_buf_left = JPGE_OUT_BUF_SIZE;
+ m_pOut_buf = m_out_buf;
+
+ if (m_params.m_two_pass_flag)
+ {
+ clear_obj(m_huff_count);
+ first_pass_init();
+ }
+ else
+ {
+ memcpy(m_huff_bits[0 + 0], s_dc_lum_bits, 17); memcpy(m_huff_val[0 + 0], s_dc_lum_val, DC_LUM_CODES);
+ memcpy(m_huff_bits[2 + 0], s_ac_lum_bits, 17); memcpy(m_huff_val[2 + 0], s_ac_lum_val, AC_LUM_CODES);
+ memcpy(m_huff_bits[0 + 1], s_dc_chroma_bits, 17); memcpy(m_huff_val[0 + 1], s_dc_chroma_val, DC_CHROMA_CODES);
+ memcpy(m_huff_bits[2 + 1], s_ac_chroma_bits, 17); memcpy(m_huff_val[2 + 1], s_ac_chroma_val, AC_CHROMA_CODES);
+ if (!second_pass_init()) return false; // in effect, skip over the first pass
+ }
+ return m_all_stream_writes_succeeded;
+ }
+
+ void jpeg_encoder::load_block_8_8_grey(int x)
+ {
+ uint8* pSrc;
+ sample_array_t* pDst = m_sample_array;
+ x <<= 3;
+ for (int i = 0; i < 8; i++, pDst += 8)
+ {
+ pSrc = m_mcu_lines[i] + x;
+ pDst[0] = pSrc[0] - 128; pDst[1] = pSrc[1] - 128; pDst[2] = pSrc[2] - 128; pDst[3] = pSrc[3] - 128;
+ pDst[4] = pSrc[4] - 128; pDst[5] = pSrc[5] - 128; pDst[6] = pSrc[6] - 128; pDst[7] = pSrc[7] - 128;
+ }
+ }
+
+ void jpeg_encoder::load_block_8_8(int x, int y, int c)
+ {
+ uint8* pSrc;
+ sample_array_t* pDst = m_sample_array;
+ x = (x * (8 * 3)) + c;
+ y <<= 3;
+ for (int i = 0; i < 8; i++, pDst += 8)
+ {
+ pSrc = m_mcu_lines[y + i] + x;
+ pDst[0] = pSrc[0 * 3] - 128; pDst[1] = pSrc[1 * 3] - 128; pDst[2] = pSrc[2 * 3] - 128; pDst[3] = pSrc[3 * 3] - 128;
+ pDst[4] = pSrc[4 * 3] - 128; pDst[5] = pSrc[5 * 3] - 128; pDst[6] = pSrc[6 * 3] - 128; pDst[7] = pSrc[7 * 3] - 128;
+ }
+ }
+
+ void jpeg_encoder::load_block_16_8(int x, int c)
+ {
+ uint8* pSrc1, * pSrc2;
+ sample_array_t* pDst = m_sample_array;
+ x = (x * (16 * 3)) + c;
+ for (int i = 0; i < 16; i += 2, pDst += 8)
+ {
+ pSrc1 = m_mcu_lines[i + 0] + x;
+ pSrc2 = m_mcu_lines[i + 1] + x;
+ pDst[0] = ((pSrc1[0 * 3] + pSrc1[1 * 3] + pSrc2[0 * 3] + pSrc2[1 * 3] + 2) >> 2) - 128; pDst[1] = ((pSrc1[2 * 3] + pSrc1[3 * 3] + pSrc2[2 * 3] + pSrc2[3 * 3] + 2) >> 2) - 128;
+ pDst[2] = ((pSrc1[4 * 3] + pSrc1[5 * 3] + pSrc2[4 * 3] + pSrc2[5 * 3] + 2) >> 2) - 128; pDst[3] = ((pSrc1[6 * 3] + pSrc1[7 * 3] + pSrc2[6 * 3] + pSrc2[7 * 3] + 2) >> 2) - 128;
+ pDst[4] = ((pSrc1[8 * 3] + pSrc1[9 * 3] + pSrc2[8 * 3] + pSrc2[9 * 3] + 2) >> 2) - 128; pDst[5] = ((pSrc1[10 * 3] + pSrc1[11 * 3] + pSrc2[10 * 3] + pSrc2[11 * 3] + 2) >> 2) - 128;
+ pDst[6] = ((pSrc1[12 * 3] + pSrc1[13 * 3] + pSrc2[12 * 3] + pSrc2[13 * 3] + 2) >> 2) - 128; pDst[7] = ((pSrc1[14 * 3] + pSrc1[15 * 3] + pSrc2[14 * 3] + pSrc2[15 * 3] + 2) >> 2) - 128;
+ }
+ }
+
+ void jpeg_encoder::load_block_16_8_8(int x, int c)
+ {
+ uint8* pSrc1;
+ sample_array_t* pDst = m_sample_array;
+ x = (x * (16 * 3)) + c;
+ for (int i = 0; i < 8; i++, pDst += 8)
+ {
+ pSrc1 = m_mcu_lines[i + 0] + x;
+ pDst[0] = ((pSrc1[0 * 3] + pSrc1[1 * 3] + 1) >> 1) - 128; pDst[1] = ((pSrc1[2 * 3] + pSrc1[3 * 3] + 1) >> 1) - 128;
+ pDst[2] = ((pSrc1[4 * 3] + pSrc1[5 * 3] + 1) >> 1) - 128; pDst[3] = ((pSrc1[6 * 3] + pSrc1[7 * 3] + 1) >> 1) - 128;
+ pDst[4] = ((pSrc1[8 * 3] + pSrc1[9 * 3] + 1) >> 1) - 128; pDst[5] = ((pSrc1[10 * 3] + pSrc1[11 * 3] + 1) >> 1) - 128;
+ pDst[6] = ((pSrc1[12 * 3] + pSrc1[13 * 3] + 1) >> 1) - 128; pDst[7] = ((pSrc1[14 * 3] + pSrc1[15 * 3] + 1) >> 1) - 128;
+ }
+ }
+
+ void jpeg_encoder::load_quantized_coefficients(int component_num)
+ {
+ int32* q = m_quantization_tables[component_num > 0];
+ int16* pDst = m_coefficient_array;
+ for (int i = 0; i < 64; i++)
+ {
+ sample_array_t j = m_sample_array[s_zag[i]];
+ if (j < 0)
+ {
+ if ((j = -j + (*q >> 1)) < *q)
+ *pDst++ = 0;
+ else
+ *pDst++ = static_cast<int16>(-(j / *q));
+ }
+ else
+ {
+ if ((j = j + (*q >> 1)) < *q)
+ *pDst++ = 0;
+ else
+ *pDst++ = static_cast<int16>((j / *q));
+ }
+ q++;
+ }
+ }
+
+ void jpeg_encoder::flush_output_buffer()
+ {
+ if (m_out_buf_left != JPGE_OUT_BUF_SIZE)
+ m_all_stream_writes_succeeded = m_all_stream_writes_succeeded && m_pStream->put_buf(m_out_buf, JPGE_OUT_BUF_SIZE - m_out_buf_left);
+ m_pOut_buf = m_out_buf;
+ m_out_buf_left = JPGE_OUT_BUF_SIZE;
+ }
+
+ void jpeg_encoder::put_bits(uint bits, uint len)
+ {
+ m_bit_buffer |= ((uint32)bits << (24 - (m_bits_in += len)));
+ while (m_bits_in >= 8)
+ {
+ uint8 c;
+#define JPGE_PUT_BYTE(c) { *m_pOut_buf++ = (c); if (--m_out_buf_left == 0) flush_output_buffer(); }
+ JPGE_PUT_BYTE(c = (uint8)((m_bit_buffer >> 16) & 0xFF));
+ if (c == 0xFF) JPGE_PUT_BYTE(0);
+ m_bit_buffer <<= 8;
+ m_bits_in -= 8;
+ }
+ }
+
+ void jpeg_encoder::code_coefficients_pass_one(int component_num)
+ {
+ if (component_num >= 3) return; // just to shut up static analysis
+ int i, run_len, nbits, temp1;
+ int16* src = m_coefficient_array;
+ uint32* dc_count = component_num ? m_huff_count[0 + 1] : m_huff_count[0 + 0], * ac_count = component_num ? m_huff_count[2 + 1] : m_huff_count[2 + 0];
+
+ temp1 = src[0] - m_last_dc_val[component_num];
+ m_last_dc_val[component_num] = src[0];
+ if (temp1 < 0) temp1 = -temp1;
+
+ nbits = 0;
+ while (temp1)
+ {
+ nbits++; temp1 >>= 1;
+ }
+
+ dc_count[nbits]++;
+ for (run_len = 0, i = 1; i < 64; i++)
+ {
+ if ((temp1 = m_coefficient_array[i]) == 0)
+ run_len++;
+ else
+ {
+ while (run_len >= 16)
+ {
+ ac_count[0xF0]++;
+ run_len -= 16;
+ }
+ if (temp1 < 0) temp1 = -temp1;
+ nbits = 1;
+ while (temp1 >>= 1) nbits++;
+ ac_count[(run_len << 4) + nbits]++;
+ run_len = 0;
+ }
+ }
+ if (run_len) ac_count[0]++;
+ }
+
+ void jpeg_encoder::code_coefficients_pass_two(int component_num)
+ {
+ int i, j, run_len, nbits, temp1, temp2;
+ int16* pSrc = m_coefficient_array;
+ uint* codes[2];
+ uint8* code_sizes[2];
+
+ if (component_num == 0)
+ {
+ codes[0] = m_huff_codes[0 + 0]; codes[1] = m_huff_codes[2 + 0];
+ code_sizes[0] = m_huff_code_sizes[0 + 0]; code_sizes[1] = m_huff_code_sizes[2 + 0];
+ }
+ else
+ {
+ codes[0] = m_huff_codes[0 + 1]; codes[1] = m_huff_codes[2 + 1];
+ code_sizes[0] = m_huff_code_sizes[0 + 1]; code_sizes[1] = m_huff_code_sizes[2 + 1];
+ }
+
+ temp1 = temp2 = pSrc[0] - m_last_dc_val[component_num];
+ m_last_dc_val[component_num] = pSrc[0];
+
+ if (temp1 < 0)
+ {
+ temp1 = -temp1; temp2--;
+ }
+
+ nbits = 0;
+ while (temp1)
+ {
+ nbits++; temp1 >>= 1;
+ }
+
+ put_bits(codes[0][nbits], code_sizes[0][nbits]);
+ if (nbits) put_bits(temp2 & ((1 << nbits) - 1), nbits);
+
+ for (run_len = 0, i = 1; i < 64; i++)
+ {
+ if ((temp1 = m_coefficient_array[i]) == 0)
+ run_len++;
+ else
+ {
+ while (run_len >= 16)
+ {
+ put_bits(codes[1][0xF0], code_sizes[1][0xF0]);
+ run_len -= 16;
+ }
+ if ((temp2 = temp1) < 0)
+ {
+ temp1 = -temp1;
+ temp2--;
+ }
+ nbits = 1;
+ while (temp1 >>= 1)
+ nbits++;
+ j = (run_len << 4) + nbits;
+ put_bits(codes[1][j], code_sizes[1][j]);
+ put_bits(temp2 & ((1 << nbits) - 1), nbits);
+ run_len = 0;
+ }
+ }
+ if (run_len)
+ put_bits(codes[1][0], code_sizes[1][0]);
+ }
+
+ void jpeg_encoder::code_block(int component_num)
+ {
+ DCT2D(m_sample_array);
+ load_quantized_coefficients(component_num);
+ if (m_pass_num == 1)
+ code_coefficients_pass_one(component_num);
+ else
+ code_coefficients_pass_two(component_num);
+ }
+
+ void jpeg_encoder::process_mcu_row()
+ {
+ if (m_num_components == 1)
+ {
+ for (int i = 0; i < m_mcus_per_row; i++)
+ {
+ load_block_8_8_grey(i); code_block(0);
+ }
+ }
+ else if ((m_comp_h_samp[0] == 1) && (m_comp_v_samp[0] == 1))
+ {
+ for (int i = 0; i < m_mcus_per_row; i++)
+ {
+ load_block_8_8(i, 0, 0); code_block(0); load_block_8_8(i, 0, 1); code_block(1); load_block_8_8(i, 0, 2); code_block(2);
+ }
+ }
+ else if ((m_comp_h_samp[0] == 2) && (m_comp_v_samp[0] == 1))
+ {
+ for (int i = 0; i < m_mcus_per_row; i++)
+ {
+ load_block_8_8(i * 2 + 0, 0, 0); code_block(0); load_block_8_8(i * 2 + 1, 0, 0); code_block(0);
+ load_block_16_8_8(i, 1); code_block(1); load_block_16_8_8(i, 2); code_block(2);
+ }
+ }
+ else if ((m_comp_h_samp[0] == 2) && (m_comp_v_samp[0] == 2))
+ {
+ for (int i = 0; i < m_mcus_per_row; i++)
+ {
+ load_block_8_8(i * 2 + 0, 0, 0); code_block(0); load_block_8_8(i * 2 + 1, 0, 0); code_block(0);
+ load_block_8_8(i * 2 + 0, 1, 0); code_block(0); load_block_8_8(i * 2 + 1, 1, 0); code_block(0);
+ load_block_16_8(i, 1); code_block(1); load_block_16_8(i, 2); code_block(2);
+ }
+ }
+ }
+
+ bool jpeg_encoder::terminate_pass_one()
+ {
+ optimize_huffman_table(0 + 0, DC_LUM_CODES); optimize_huffman_table(2 + 0, AC_LUM_CODES);
+ if (m_num_components > 1)
+ {
+ optimize_huffman_table(0 + 1, DC_CHROMA_CODES); optimize_huffman_table(2 + 1, AC_CHROMA_CODES);
+ }
+ return second_pass_init();
+ }
+
+ bool jpeg_encoder::terminate_pass_two()
+ {
+ put_bits(0x7F, 7);
+ flush_output_buffer();
+ emit_marker(M_EOI);
+ m_pass_num++; // purposely bump up m_pass_num, for debugging
+ return true;
+ }
+
+ bool jpeg_encoder::process_end_of_image()
+ {
+ if (m_mcu_y_ofs)
+ {
+ if (m_mcu_y_ofs < 16) // check here just to shut up static analysis
+ {
+ for (int i = m_mcu_y_ofs; i < m_mcu_y; i++)
+ memcpy(m_mcu_lines[i], m_mcu_lines[m_mcu_y_ofs - 1], m_image_bpl_mcu);
+ }
+
+ process_mcu_row();
+ }
+
+ if (m_pass_num == 1)
+ return terminate_pass_one();
+ else
+ return terminate_pass_two();
+ }
+
+ void jpeg_encoder::load_mcu(const void* pSrc)
+ {
+ const uint8* Psrc = reinterpret_cast<const uint8*>(pSrc);
+
+ uint8* pDst = m_mcu_lines[m_mcu_y_ofs]; // OK to write up to m_image_bpl_xlt bytes to pDst
+
+ if (m_num_components == 1)
+ {
+ if (m_image_bpp == 4)
+ RGBA_to_Y(pDst, Psrc, m_image_x);
+ else if (m_image_bpp == 3)
+ RGB_to_Y(pDst, Psrc, m_image_x);
+ else
+ memcpy(pDst, Psrc, m_image_x);
+ }
+ else
+ {
+ if (m_image_bpp == 4)
+ RGBA_to_YCC(pDst, Psrc, m_image_x);
+ else if (m_image_bpp == 3)
+ RGB_to_YCC(pDst, Psrc, m_image_x);
+ else
+ Y_to_YCC(pDst, Psrc, m_image_x);
+ }
+
+ // Possibly duplicate pixels at end of scanline if not a multiple of 8 or 16
+ if (m_num_components == 1)
+ memset(m_mcu_lines[m_mcu_y_ofs] + m_image_bpl_xlt, pDst[m_image_bpl_xlt - 1], m_image_x_mcu - m_image_x);
+ else
+ {
+ const uint8 y = pDst[m_image_bpl_xlt - 3 + 0], cb = pDst[m_image_bpl_xlt - 3 + 1], cr = pDst[m_image_bpl_xlt - 3 + 2];
+ uint8* q = m_mcu_lines[m_mcu_y_ofs] + m_image_bpl_xlt;
+ for (int i = m_image_x; i < m_image_x_mcu; i++)
+ {
+ *q++ = y; *q++ = cb; *q++ = cr;
+ }
+ }
+
+ if (++m_mcu_y_ofs == m_mcu_y)
+ {
+ process_mcu_row();
+ m_mcu_y_ofs = 0;
+ }
+ }
+
+ void jpeg_encoder::clear()
+ {
+ m_mcu_lines[0] = NULL;
+ m_pass_num = 0;
+ m_all_stream_writes_succeeded = true;
+ }
+
+ jpeg_encoder::jpeg_encoder()
+ {
+ clear();
+ }
+
+ jpeg_encoder::~jpeg_encoder()
+ {
+ deinit();
+ }
+
+ bool jpeg_encoder::init(output_stream* pStream, int width, int height, int src_channels, const params& comp_params)
+ {
+ deinit();
+ if (((!pStream) || (width < 1) || (height < 1)) || ((src_channels != 1) && (src_channels != 3) && (src_channels != 4)) || (!comp_params.check())) return false;
+ m_pStream = pStream;
+ m_params = comp_params;
+ return jpg_open(width, height, src_channels);
+ }
+
+ void jpeg_encoder::deinit()
+ {
+ jpge_free(m_mcu_lines[0]);
+ clear();
+ }
+
+ bool jpeg_encoder::process_scanline(const void* pScanline)
+ {
+ if ((m_pass_num < 1) || (m_pass_num > 2)) return false;
+ if (m_all_stream_writes_succeeded)
+ {
+ if (!pScanline)
+ {
+ if (!process_end_of_image()) return false;
+ }
+ else
+ {
+ load_mcu(pScanline);
+ }
+ }
+ return m_all_stream_writes_succeeded;
+ }
+
+ // Higher level wrappers/examples (optional).
+#include <stdio.h>
+
+ class cfile_stream : public output_stream
+ {
+ cfile_stream(const cfile_stream&);
+ cfile_stream& operator= (const cfile_stream&);
+
+ FILE* m_pFile;
+ bool m_bStatus;
+
+ public:
+ cfile_stream() : m_pFile(NULL), m_bStatus(false) { }
+
+ virtual ~cfile_stream()
+ {
+ close();
+ }
+
+ bool open(const char* pFilename)
+ {
+ close();
+ m_pFile = fopen(pFilename, "wb");
+ m_bStatus = (m_pFile != NULL);
+ return m_bStatus;
+ }
+
+ bool close()
+ {
+ if (m_pFile)
+ {
+ if (fclose(m_pFile) == EOF)
+ {
+ m_bStatus = false;
+ }
+ m_pFile = NULL;
+ }
+ return m_bStatus;
+ }
+
+ virtual bool put_buf(const void* pBuf, int len)
+ {
+ m_bStatus = m_bStatus && (fwrite(pBuf, len, 1, m_pFile) == 1);
+ return m_bStatus;
+ }
+
+ uint get_size() const
+ {
+ return m_pFile ? ftell(m_pFile) : 0;
+ }
+ };
+
+ // Writes JPEG image to file.
+ bool compress_image_to_jpeg_file(const char* pFilename, int width, int height, int num_channels, const uint8* pImage_data, const params& comp_params)
+ {
+ cfile_stream dst_stream;
+ if (!dst_stream.open(pFilename))
+ return false;
+
+ jpge::jpeg_encoder dst_image;
+ if (!dst_image.init(&dst_stream, width, height, num_channels, comp_params))
+ return false;
+
+ for (uint pass_index = 0; pass_index < dst_image.get_total_passes(); pass_index++)
+ {
+ for (int i = 0; i < height; i++)
+ {
+ const uint8* pBuf = pImage_data + i * width * num_channels;
+ if (!dst_image.process_scanline(pBuf))
+ return false;
+ }
+ if (!dst_image.process_scanline(NULL))
+ return false;
+ }
+
+ dst_image.deinit();
+
+ return dst_stream.close();
+ }
+
+ class memory_stream : public output_stream
+ {
+ memory_stream(const memory_stream&);
+ memory_stream& operator= (const memory_stream&);
+
+ uint8* m_pBuf;
+ uint m_buf_size, m_buf_ofs;
+
+ public:
+ memory_stream(void* pBuf, uint buf_size) : m_pBuf(static_cast<uint8*>(pBuf)), m_buf_size(buf_size), m_buf_ofs(0) { }
+
+ virtual ~memory_stream() { }
+
+ virtual bool put_buf(const void* pBuf, int len)
+ {
+ uint buf_remaining = m_buf_size - m_buf_ofs;
+ if ((uint)len > buf_remaining)
+ return false;
+ memcpy(m_pBuf + m_buf_ofs, pBuf, len);
+ m_buf_ofs += len;
+ return true;
+ }
+
+ uint get_size() const
+ {
+ return m_buf_ofs;
+ }
+ };
+
+ bool compress_image_to_jpeg_file_in_memory(void* pDstBuf, int& buf_size, int width, int height, int num_channels, const uint8* pImage_data, const params& comp_params)
+ {
+ if ((!pDstBuf) || (!buf_size))
+ return false;
+
+ memory_stream dst_stream(pDstBuf, buf_size);
+
+ buf_size = 0;
+
+ jpge::jpeg_encoder dst_image;
+ if (!dst_image.init(&dst_stream, width, height, num_channels, comp_params))
+ return false;
+
+ for (uint pass_index = 0; pass_index < dst_image.get_total_passes(); pass_index++)
+ {
+ for (int i = 0; i < height; i++)
+ {
+ const uint8* pScanline = pImage_data + i * width * num_channels;
+ if (!dst_image.process_scanline(pScanline))
+ return false;
+ }
+ if (!dst_image.process_scanline(NULL))
+ return false;
+ }
+
+ dst_image.deinit();
+
+ buf_size = dst_stream.get_size();
+ return true;
+ }
+
+} // namespace jpge
+
diff --git a/thirdparty/jpeg-compressor/jpge.h b/thirdparty/jpeg-compressor/jpge.h
new file mode 100644
index 0000000000..d10510e553
--- /dev/null
+++ b/thirdparty/jpeg-compressor/jpge.h
@@ -0,0 +1,174 @@
+// jpge.h - C++ class for JPEG compression.
+// Public Domain or Apache 2.0, Richard Geldreich <richgel99@gmail.com>
+// Alex Evans: Added RGBA support, linear memory allocator.
+#ifndef JPEG_ENCODER_H
+#define JPEG_ENCODER_H
+
+namespace jpge
+{
+ typedef unsigned char uint8;
+ typedef signed short int16;
+ typedef signed int int32;
+ typedef unsigned short uint16;
+ typedef unsigned int uint32;
+ typedef unsigned int uint;
+
+ // JPEG chroma subsampling factors. Y_ONLY (grayscale images) and H2V2 (color images) are the most common.
+ enum subsampling_t { Y_ONLY = 0, H1V1 = 1, H2V1 = 2, H2V2 = 3 };
+
+ // JPEG compression parameters structure.
+ struct params
+ {
+ inline params() : m_quality(85), m_subsampling(H2V2), m_no_chroma_discrim_flag(false), m_two_pass_flag(false), m_use_std_tables(false) { }
+
+ inline bool check() const
+ {
+ if ((m_quality < 1) || (m_quality > 100)) return false;
+ if ((uint)m_subsampling > (uint)H2V2) return false;
+ return true;
+ }
+
+ // Quality: 1-100, higher is better. Typical values are around 50-95.
+ int m_quality;
+
+ // m_subsampling:
+ // 0 = Y (grayscale) only
+ // 1 = YCbCr, no subsampling (H1V1, YCbCr 1x1x1, 3 blocks per MCU)
+ // 2 = YCbCr, H2V1 subsampling (YCbCr 2x1x1, 4 blocks per MCU)
+ // 3 = YCbCr, H2V2 subsampling (YCbCr 4x1x1, 6 blocks per MCU-- very common)
+ subsampling_t m_subsampling;
+
+ // Disables CbCr discrimination - only intended for testing.
+ // If true, the Y quantization table is also used for the CbCr channels.
+ bool m_no_chroma_discrim_flag;
+
+ bool m_two_pass_flag;
+
+ // By default we use the same quantization tables as mozjpeg's default.
+ // Set to true to use the traditional tables from JPEG Annex K.
+ bool m_use_std_tables;
+ };
+
+ // Writes JPEG image to a file.
+ // num_channels must be 1 (Y) or 3 (RGB), image pitch must be width*num_channels.
+ bool compress_image_to_jpeg_file(const char* pFilename, int width, int height, int num_channels, const uint8* pImage_data, const params& comp_params = params());
+
+ // Writes JPEG image to memory buffer.
+ // On entry, buf_size is the size of the output buffer pointed at by pBuf, which should be at least ~1024 bytes.
+ // If return value is true, buf_size will be set to the size of the compressed data.
+ bool compress_image_to_jpeg_file_in_memory(void* pBuf, int& buf_size, int width, int height, int num_channels, const uint8* pImage_data, const params& comp_params = params());
+
+ // Output stream abstract class - used by the jpeg_encoder class to write to the output stream.
+ // put_buf() is generally called with len==JPGE_OUT_BUF_SIZE bytes, but for headers it'll be called with smaller amounts.
+ class output_stream
+ {
+ public:
+ virtual ~output_stream() { };
+ virtual bool put_buf(const void* Pbuf, int len) = 0;
+ template<class T> inline bool put_obj(const T& obj) { return put_buf(&obj, sizeof(T)); }
+ };
+
+ // Lower level jpeg_encoder class - useful if more control is needed than the above helper functions.
+ class jpeg_encoder
+ {
+ public:
+ jpeg_encoder();
+ ~jpeg_encoder();
+
+ // Initializes the compressor.
+ // pStream: The stream object to use for writing compressed data.
+ // params - Compression parameters structure, defined above.
+ // width, height - Image dimensions.
+ // channels - May be 1, or 3. 1 indicates grayscale, 3 indicates RGB source data.
+ // Returns false on out of memory or if a stream write fails.
+ bool init(output_stream* pStream, int width, int height, int src_channels, const params& comp_params = params());
+
+ const params& get_params() const { return m_params; }
+
+ // Deinitializes the compressor, freeing any allocated memory. May be called at any time.
+ void deinit();
+
+ uint get_total_passes() const { return m_params.m_two_pass_flag ? 2 : 1; }
+ inline uint get_cur_pass() { return m_pass_num; }
+
+ // Call this method with each source scanline.
+ // width * src_channels bytes per scanline is expected (RGB or Y format).
+ // You must call with NULL after all scanlines are processed to finish compression.
+ // Returns false on out of memory or if a stream write fails.
+ bool process_scanline(const void* pScanline);
+
+ private:
+ jpeg_encoder(const jpeg_encoder&);
+ jpeg_encoder& operator =(const jpeg_encoder&);
+
+ typedef int32 sample_array_t;
+
+ output_stream* m_pStream;
+ params m_params;
+ uint8 m_num_components;
+ uint8 m_comp_h_samp[3], m_comp_v_samp[3];
+ int m_image_x, m_image_y, m_image_bpp, m_image_bpl;
+ int m_image_x_mcu, m_image_y_mcu;
+ int m_image_bpl_xlt, m_image_bpl_mcu;
+ int m_mcus_per_row;
+ int m_mcu_x, m_mcu_y;
+ uint8* m_mcu_lines[16];
+ uint8 m_mcu_y_ofs;
+ sample_array_t m_sample_array[64];
+ int16 m_coefficient_array[64];
+ int32 m_quantization_tables[2][64];
+ uint m_huff_codes[4][256];
+ uint8 m_huff_code_sizes[4][256];
+ uint8 m_huff_bits[4][17];
+ uint8 m_huff_val[4][256];
+ uint32 m_huff_count[4][256];
+ int m_last_dc_val[3];
+ enum { JPGE_OUT_BUF_SIZE = 2048 };
+ uint8 m_out_buf[JPGE_OUT_BUF_SIZE];
+ uint8* m_pOut_buf;
+ uint m_out_buf_left;
+ uint32 m_bit_buffer;
+ uint m_bits_in;
+ uint8 m_pass_num;
+ bool m_all_stream_writes_succeeded;
+
+ void optimize_huffman_table(int table_num, int table_len);
+ void emit_byte(uint8 i);
+ void emit_word(uint i);
+ void emit_marker(int marker);
+ void emit_jfif_app0();
+ void emit_dqt();
+ void emit_sof();
+ void emit_dht(uint8* bits, uint8* val, int index, bool ac_flag);
+ void emit_dhts();
+ void emit_sos();
+ void emit_markers();
+ void compute_huffman_table(uint* codes, uint8* code_sizes, uint8* bits, uint8* val);
+ void compute_quant_table(int32* dst, int16* src);
+ void adjust_quant_table(int32* dst, int32* src);
+ void first_pass_init();
+ bool second_pass_init();
+ bool jpg_open(int p_x_res, int p_y_res, int src_channels);
+ void load_block_8_8_grey(int x);
+ void load_block_8_8(int x, int y, int c);
+ void load_block_16_8(int x, int c);
+ void load_block_16_8_8(int x, int c);
+ void load_quantized_coefficients(int component_num);
+ void flush_output_buffer();
+ void put_bits(uint bits, uint len);
+ void code_coefficients_pass_one(int component_num);
+ void code_coefficients_pass_two(int component_num);
+ void code_block(int component_num);
+ void process_mcu_row();
+ bool terminate_pass_one();
+ bool terminate_pass_two();
+ bool process_end_of_image();
+ void load_mcu(const void* src);
+ void clear();
+ void init();
+ };
+
+} // namespace jpge
+
+#endif // JPEG_ENCODER
+
diff --git a/thirdparty/openxr/include/openxr/openxr.h b/thirdparty/openxr/include/openxr/openxr.h
index 8798e5a6e0..6c6a52d27e 100644
--- a/thirdparty/openxr/include/openxr/openxr.h
+++ b/thirdparty/openxr/include/openxr/openxr.h
@@ -25,12 +25,15 @@ extern "C" {
((((major) & 0xffffULL) << 48) | (((minor) & 0xffffULL) << 32) | ((patch) & 0xffffffffULL))
// OpenXR current version number.
-#define XR_CURRENT_API_VERSION XR_MAKE_VERSION(1, 0, 22)
+#define XR_CURRENT_API_VERSION XR_MAKE_VERSION(1, 0, 23)
#define XR_VERSION_MAJOR(version) (uint16_t)(((uint64_t)(version) >> 48)& 0xffffULL)
#define XR_VERSION_MINOR(version) (uint16_t)(((uint64_t)(version) >> 32) & 0xffffULL)
#define XR_VERSION_PATCH(version) (uint32_t)((uint64_t)(version) & 0xffffffffULL)
+#define XR_MIN_COMPOSITION_LAYERS_SUPPORTED 16
+
+
#if !defined(XR_NULL_HANDLE)
#if (XR_PTR_SIZE == 8) && XR_CPP_NULLPTR_SUPPORTED
#define XR_NULL_HANDLE nullptr
@@ -120,7 +123,6 @@ XR_DEFINE_HANDLE(XrActionSet)
#define XR_MAX_PATH_LENGTH 256
#define XR_MAX_STRUCTURE_NAME_SIZE 64
#define XR_MAX_RESULT_STRING_SIZE 64
-#define XR_MIN_COMPOSITION_LAYERS_SUPPORTED 16
#define XR_MAX_ACTION_SET_NAME_SIZE 64
#define XR_MAX_LOCALIZED_ACTION_SET_NAME_SIZE 128
#define XR_MAX_ACTION_NAME_SIZE 64
@@ -196,6 +198,10 @@ typedef enum XrResult {
XR_ERROR_SCENE_COMPUTE_CONSISTENCY_MISMATCH_MSFT = -1000097005,
XR_ERROR_DISPLAY_REFRESH_RATE_UNSUPPORTED_FB = -1000101000,
XR_ERROR_COLOR_SPACE_UNSUPPORTED_FB = -1000108000,
+ XR_ERROR_SPACE_COMPONENT_NOT_SUPPORTED_FB = -1000113000,
+ XR_ERROR_SPACE_COMPONENT_NOT_ENABLED_FB = -1000113001,
+ XR_ERROR_SPACE_COMPONENT_STATUS_PENDING_FB = -1000113002,
+ XR_ERROR_SPACE_COMPONENT_STATUS_ALREADY_SET_FB = -1000113003,
XR_ERROR_UNEXPECTED_STATE_PASSTHROUGH_FB = -1000118000,
XR_ERROR_FEATURE_ALREADY_CREATED_PASSTHROUGH_FB = -1000118001,
XR_ERROR_FEATURE_REQUIRED_PASSTHROUGH_FB = -1000118002,
@@ -305,6 +311,9 @@ typedef enum XrStructureType {
XR_TYPE_VIEW_CONFIGURATION_DEPTH_RANGE_EXT = 1000046000,
XR_TYPE_GRAPHICS_BINDING_EGL_MNDX = 1000048004,
XR_TYPE_SPATIAL_GRAPH_NODE_SPACE_CREATE_INFO_MSFT = 1000049000,
+ XR_TYPE_SPATIAL_GRAPH_STATIC_NODE_BINDING_CREATE_INFO_MSFT = 1000049001,
+ XR_TYPE_SPATIAL_GRAPH_NODE_BINDING_PROPERTIES_GET_INFO_MSFT = 1000049002,
+ XR_TYPE_SPATIAL_GRAPH_NODE_BINDING_PROPERTIES_MSFT = 1000049003,
XR_TYPE_SYSTEM_HAND_TRACKING_PROPERTIES_EXT = 1000051000,
XR_TYPE_HAND_TRACKER_CREATE_INFO_EXT = 1000051001,
XR_TYPE_HAND_JOINTS_LOCATE_INFO_EXT = 1000051002,
@@ -332,6 +341,7 @@ typedef enum XrStructureType {
XR_TYPE_COMPOSITION_LAYER_REPROJECTION_PLANE_OVERRIDE_MSFT = 1000066001,
XR_TYPE_ANDROID_SURFACE_SWAPCHAIN_CREATE_INFO_FB = 1000070000,
XR_TYPE_COMPOSITION_LAYER_SECURE_CONTENT_FB = 1000072000,
+ XR_TYPE_INTERACTION_PROFILE_DPAD_BINDING_EXT = 1000078000,
XR_TYPE_INTERACTION_PROFILE_ANALOG_THRESHOLD_VALVE = 1000079000,
XR_TYPE_HAND_JOINTS_MOTION_RANGE_INFO_EXT = 1000080000,
XR_TYPE_LOADER_INIT_INFO_ANDROID_KHR = 1000089000,
@@ -371,6 +381,12 @@ typedef enum XrStructureType {
XR_TYPE_HAND_TRACKING_SCALE_FB = 1000110003,
XR_TYPE_HAND_TRACKING_AIM_STATE_FB = 1000111001,
XR_TYPE_HAND_TRACKING_CAPSULES_STATE_FB = 1000112000,
+ XR_TYPE_SYSTEM_SPATIAL_ENTITY_PROPERTIES_FB = 1000113004,
+ XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_FB = 1000113003,
+ XR_TYPE_SPACE_COMPONENT_STATUS_SET_INFO_FB = 1000113007,
+ XR_TYPE_SPACE_COMPONENT_STATUS_FB = 1000113001,
+ XR_TYPE_EVENT_DATA_SPATIAL_ANCHOR_CREATE_COMPLETE_FB = 1000113005,
+ XR_TYPE_EVENT_DATA_SPACE_SET_STATUS_COMPLETE_FB = 1000113006,
XR_TYPE_FOVEATION_PROFILE_CREATE_INFO_FB = 1000114000,
XR_TYPE_SWAPCHAIN_CREATE_INFO_FOVEATION_FB = 1000114001,
XR_TYPE_SWAPCHAIN_STATE_FOVEATION_FB = 1000114002,
@@ -388,12 +404,14 @@ typedef enum XrStructureType {
XR_TYPE_PASSTHROUGH_STYLE_FB = 1000118020,
XR_TYPE_PASSTHROUGH_COLOR_MAP_MONO_TO_RGBA_FB = 1000118021,
XR_TYPE_PASSTHROUGH_COLOR_MAP_MONO_TO_MONO_FB = 1000118022,
+ XR_TYPE_PASSTHROUGH_BRIGHTNESS_CONTRAST_SATURATION_FB = 1000118023,
XR_TYPE_EVENT_DATA_PASSTHROUGH_STATE_CHANGED_FB = 1000118030,
XR_TYPE_RENDER_MODEL_PATH_INFO_FB = 1000119000,
XR_TYPE_RENDER_MODEL_PROPERTIES_FB = 1000119001,
XR_TYPE_RENDER_MODEL_BUFFER_FB = 1000119002,
XR_TYPE_RENDER_MODEL_LOAD_INFO_FB = 1000119003,
XR_TYPE_SYSTEM_RENDER_MODEL_PROPERTIES_FB = 1000119004,
+ XR_TYPE_RENDER_MODEL_CAPABILITIES_REQUEST_FB = 1000119005,
XR_TYPE_BINDING_MODIFICATIONS_KHR = 1000120000,
XR_TYPE_VIEW_LOCATE_FOVEATED_RENDERING_VARJO = 1000121000,
XR_TYPE_FOVEATED_VIEW_CONFIGURATION_VIEW_VARJO = 1000121001,
@@ -404,6 +422,17 @@ typedef enum XrStructureType {
XR_TYPE_MARKER_SPACE_CREATE_INFO_VARJO = 1000124002,
XR_TYPE_SPATIAL_ANCHOR_PERSISTENCE_INFO_MSFT = 1000142000,
XR_TYPE_SPATIAL_ANCHOR_FROM_PERSISTED_ANCHOR_CREATE_INFO_MSFT = 1000142001,
+ XR_TYPE_SPACE_QUERY_INFO_FB = 1000156001,
+ XR_TYPE_SPACE_QUERY_RESULTS_FB = 1000156002,
+ XR_TYPE_SPACE_STORAGE_LOCATION_FILTER_INFO_FB = 1000156003,
+ XR_TYPE_SPACE_UUID_FILTER_INFO_FB = 1000156054,
+ XR_TYPE_SPACE_COMPONENT_FILTER_INFO_FB = 1000156052,
+ XR_TYPE_EVENT_DATA_SPACE_QUERY_RESULTS_AVAILABLE_FB = 1000156103,
+ XR_TYPE_EVENT_DATA_SPACE_QUERY_COMPLETE_FB = 1000156104,
+ XR_TYPE_SPACE_SAVE_INFO_FB = 1000158000,
+ XR_TYPE_SPACE_ERASE_INFO_FB = 1000158001,
+ XR_TYPE_EVENT_DATA_SPACE_SAVE_COMPLETE_FB = 1000158106,
+ XR_TYPE_EVENT_DATA_SPACE_ERASE_COMPLETE_FB = 1000158107,
XR_TYPE_SWAPCHAIN_IMAGE_FOVEATION_VULKAN_FB = 1000160000,
XR_TYPE_SWAPCHAIN_STATE_ANDROID_SURFACE_DIMENSIONS_FB = 1000161000,
XR_TYPE_SWAPCHAIN_STATE_SAMPLER_OPENGL_ES_FB = 1000162000,
@@ -411,7 +440,12 @@ typedef enum XrStructureType {
XR_TYPE_COMPOSITION_LAYER_SPACE_WARP_INFO_FB = 1000171000,
XR_TYPE_SYSTEM_SPACE_WARP_PROPERTIES_FB = 1000171001,
XR_TYPE_DIGITAL_LENS_CONTROL_ALMALENCE = 1000196000,
+ XR_TYPE_SPACE_CONTAINER_FB = 1000199000,
XR_TYPE_PASSTHROUGH_KEYBOARD_HANDS_INTENSITY_FB = 1000203002,
+ XR_TYPE_COMPOSITION_LAYER_SETTINGS_FB = 1000204000,
+ XR_TYPE_VULKAN_SWAPCHAIN_CREATE_INFO_META = 1000227000,
+ XR_TYPE_PERFORMANCE_METRICS_STATE_META = 1000232001,
+ XR_TYPE_PERFORMANCE_METRICS_COUNTER_META = 1000232002,
XR_TYPE_GRAPHICS_BINDING_VULKAN2_KHR = XR_TYPE_GRAPHICS_BINDING_VULKAN_KHR,
XR_TYPE_SWAPCHAIN_IMAGE_VULKAN2_KHR = XR_TYPE_SWAPCHAIN_IMAGE_VULKAN_KHR,
XR_TYPE_GRAPHICS_REQUIREMENTS_VULKAN2_KHR = XR_TYPE_GRAPHICS_REQUIREMENTS_VULKAN_KHR,
@@ -487,6 +521,7 @@ typedef enum XrObjectType {
XR_OBJECT_TYPE_ACTION = 6,
XR_OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT = 1000019000,
XR_OBJECT_TYPE_SPATIAL_ANCHOR_MSFT = 1000039000,
+ XR_OBJECT_TYPE_SPATIAL_GRAPH_NODE_BINDING_MSFT = 1000049000,
XR_OBJECT_TYPE_HAND_TRACKER_EXT = 1000051000,
XR_OBJECT_TYPE_SCENE_OBSERVER_MSFT = 1000097000,
XR_OBJECT_TYPE_SCENE_MSFT = 1000097001,
@@ -1424,7 +1459,7 @@ typedef struct XrCompositionLayerCubeKHR {
#define XR_KHR_composition_layer_depth 1
-#define XR_KHR_composition_layer_depth_SPEC_VERSION 5
+#define XR_KHR_composition_layer_depth_SPEC_VERSION 6
#define XR_KHR_COMPOSITION_LAYER_DEPTH_EXTENSION_NAME "XR_KHR_composition_layer_depth"
// XrCompositionLayerDepthInfoKHR extends XrCompositionLayerProjectionView
typedef struct XrCompositionLayerDepthInfoKHR {
@@ -1766,7 +1801,7 @@ XRAPI_ATTR XrResult XRAPI_CALL xrSessionInsertDebugUtilsLabelEXT(
#define XR_EXT_eye_gaze_interaction 1
-#define XR_EXT_eye_gaze_interaction_SPEC_VERSION 1
+#define XR_EXT_eye_gaze_interaction_SPEC_VERSION 2
#define XR_EXT_EYE_GAZE_INTERACTION_EXTENSION_NAME "XR_EXT_eye_gaze_interaction"
// XrSystemEyeGazeInteractionPropertiesEXT extends XrSystemProperties
typedef struct XrSystemEyeGazeInteractionPropertiesEXT {
@@ -1977,8 +2012,10 @@ XRAPI_ATTR XrResult XRAPI_CALL xrSetInputDeviceLocationEXT(
#define XR_MSFT_spatial_graph_bridge 1
-#define XR_MSFT_spatial_graph_bridge_SPEC_VERSION 1
+XR_DEFINE_HANDLE(XrSpatialGraphNodeBindingMSFT)
+#define XR_MSFT_spatial_graph_bridge_SPEC_VERSION 2
#define XR_MSFT_SPATIAL_GRAPH_BRIDGE_EXTENSION_NAME "XR_MSFT_spatial_graph_bridge"
+#define XR_GUID_SIZE_MSFT 16
typedef enum XrSpatialGraphNodeTypeMSFT {
XR_SPATIAL_GRAPH_NODE_TYPE_STATIC_MSFT = 1,
@@ -1989,11 +2026,34 @@ typedef struct XrSpatialGraphNodeSpaceCreateInfoMSFT {
XrStructureType type;
const void* XR_MAY_ALIAS next;
XrSpatialGraphNodeTypeMSFT nodeType;
- uint8_t nodeId[16];
+ uint8_t nodeId[XR_GUID_SIZE_MSFT];
XrPosef pose;
} XrSpatialGraphNodeSpaceCreateInfoMSFT;
+typedef struct XrSpatialGraphStaticNodeBindingCreateInfoMSFT {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrSpace space;
+ XrPosef poseInSpace;
+ XrTime time;
+} XrSpatialGraphStaticNodeBindingCreateInfoMSFT;
+
+typedef struct XrSpatialGraphNodeBindingPropertiesGetInfoMSFT {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+} XrSpatialGraphNodeBindingPropertiesGetInfoMSFT;
+
+typedef struct XrSpatialGraphNodeBindingPropertiesMSFT {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ uint8_t nodeId[XR_GUID_SIZE_MSFT];
+ XrPosef poseInNodeSpace;
+} XrSpatialGraphNodeBindingPropertiesMSFT;
+
typedef XrResult (XRAPI_PTR *PFN_xrCreateSpatialGraphNodeSpaceMSFT)(XrSession session, const XrSpatialGraphNodeSpaceCreateInfoMSFT* createInfo, XrSpace* space);
+typedef XrResult (XRAPI_PTR *PFN_xrTryCreateSpatialGraphStaticNodeBindingMSFT)(XrSession session, const XrSpatialGraphStaticNodeBindingCreateInfoMSFT* createInfo, XrSpatialGraphNodeBindingMSFT* nodeBinding);
+typedef XrResult (XRAPI_PTR *PFN_xrDestroySpatialGraphNodeBindingMSFT)(XrSpatialGraphNodeBindingMSFT nodeBinding);
+typedef XrResult (XRAPI_PTR *PFN_xrGetSpatialGraphNodeBindingPropertiesMSFT)(XrSpatialGraphNodeBindingMSFT nodeBinding, const XrSpatialGraphNodeBindingPropertiesGetInfoMSFT* getInfo, XrSpatialGraphNodeBindingPropertiesMSFT* properties);
#ifndef XR_NO_PROTOTYPES
#ifdef XR_EXTENSION_PROTOTYPES
@@ -2001,6 +2061,19 @@ XRAPI_ATTR XrResult XRAPI_CALL xrCreateSpatialGraphNodeSpaceMSFT(
XrSession session,
const XrSpatialGraphNodeSpaceCreateInfoMSFT* createInfo,
XrSpace* space);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrTryCreateSpatialGraphStaticNodeBindingMSFT(
+ XrSession session,
+ const XrSpatialGraphStaticNodeBindingCreateInfoMSFT* createInfo,
+ XrSpatialGraphNodeBindingMSFT* nodeBinding);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrDestroySpatialGraphNodeBindingMSFT(
+ XrSpatialGraphNodeBindingMSFT nodeBinding);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrGetSpatialGraphNodeBindingPropertiesMSFT(
+ XrSpatialGraphNodeBindingMSFT nodeBinding,
+ const XrSpatialGraphNodeBindingPropertiesGetInfoMSFT* getInfo,
+ XrSpatialGraphNodeBindingPropertiesMSFT* properties);
#endif /* XR_EXTENSION_PROTOTYPES */
#endif /* !XR_NO_PROTOTYPES */
@@ -2056,6 +2129,7 @@ typedef enum XrHandJointEXT {
typedef enum XrHandJointSetEXT {
XR_HAND_JOINT_SET_DEFAULT_EXT = 0,
+ XR_HAND_JOINT_SET_HAND_WITH_FOREARM_ULTRALEAP = 1000149000,
XR_HAND_JOINT_SET_MAX_ENUM_EXT = 0x7FFFFFFF
} XrHandJointSetEXT;
// XrSystemHandTrackingPropertiesEXT extends XrSystemProperties
@@ -2454,6 +2528,25 @@ typedef struct XrCompositionLayerSecureContentFB {
+#define XR_EXT_dpad_binding 1
+#define XR_EXT_dpad_binding_SPEC_VERSION 1
+#define XR_EXT_DPAD_BINDING_EXTENSION_NAME "XR_EXT_dpad_binding"
+typedef struct XrInteractionProfileDpadBindingEXT {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrPath binding;
+ XrActionSet actionSet;
+ float forceThreshold;
+ float forceThresholdReleased;
+ float centerRegion;
+ float wedgeAngle;
+ XrBool32 isSticky;
+ const XrHapticBaseHeader* onHaptic;
+ const XrHapticBaseHeader* offHaptic;
+} XrInteractionProfileDpadBindingEXT;
+
+
+
#define XR_VALVE_analog_threshold 1
#define XR_VALVE_analog_threshold_SPEC_VERSION 2
#define XR_VALVE_ANALOG_THRESHOLD_EXTENSION_NAME "XR_VALVE_analog_threshold"
@@ -3058,10 +3151,20 @@ XRAPI_ATTR XrResult XRAPI_CALL xrGetFacialExpressionsHTC(
#define XR_HTC_vive_focus3_controller_interaction 1
-#define XR_HTC_vive_focus3_controller_interaction_SPEC_VERSION 1
+#define XR_HTC_vive_focus3_controller_interaction_SPEC_VERSION 2
#define XR_HTC_VIVE_FOCUS3_CONTROLLER_INTERACTION_EXTENSION_NAME "XR_HTC_vive_focus3_controller_interaction"
+#define XR_HTC_hand_interaction 1
+#define XR_HTC_hand_interaction_SPEC_VERSION 1
+#define XR_HTC_HAND_INTERACTION_EXTENSION_NAME "XR_HTC_hand_interaction"
+
+
+#define XR_HTC_vive_wrist_tracker_interaction 1
+#define XR_HTC_vive_wrist_tracker_interaction_SPEC_VERSION 1
+#define XR_HTC_VIVE_WRIST_TRACKER_INTERACTION_EXTENSION_NAME "XR_HTC_vive_wrist_tracker_interaction"
+
+
#define XR_FB_color_space 1
#define XR_FB_color_space_SPEC_VERSION 2
#define XR_FB_COLOR_SPACE_EXTENSION_NAME "XR_FB_color_space"
@@ -3103,7 +3206,7 @@ XRAPI_ATTR XrResult XRAPI_CALL xrSetColorSpaceFB(
#define XR_FB_hand_tracking_mesh 1
-#define XR_FB_hand_tracking_mesh_SPEC_VERSION 1
+#define XR_FB_hand_tracking_mesh_SPEC_VERSION 2
#define XR_FB_HAND_TRACKING_MESH_EXTENSION_NAME "XR_FB_hand_tracking_mesh"
typedef struct XrVector4sFB {
int16_t x;
@@ -3132,7 +3235,7 @@ typedef struct XrHandTrackingMeshFB {
int16_t* indices;
} XrHandTrackingMeshFB;
-// XrHandTrackingScaleFB extends XrHandJointsLocateInfoEXT
+// XrHandTrackingScaleFB extends XrHandJointLocationsEXT
typedef struct XrHandTrackingScaleFB {
XrStructureType type;
void* XR_MAY_ALIAS next;
@@ -3154,7 +3257,7 @@ XRAPI_ATTR XrResult XRAPI_CALL xrGetHandMeshFB(
#define XR_FB_hand_tracking_aim 1
-#define XR_FB_hand_tracking_aim_SPEC_VERSION 1
+#define XR_FB_hand_tracking_aim_SPEC_VERSION 2
#define XR_FB_HAND_TRACKING_AIM_EXTENSION_NAME "XR_FB_hand_tracking_aim"
typedef XrFlags64 XrHandTrackingAimFlagsFB;
@@ -3169,7 +3272,7 @@ static const XrHandTrackingAimFlagsFB XR_HAND_TRACKING_AIM_SYSTEM_GESTURE_BIT_FB
static const XrHandTrackingAimFlagsFB XR_HAND_TRACKING_AIM_DOMINANT_HAND_BIT_FB = 0x00000080;
static const XrHandTrackingAimFlagsFB XR_HAND_TRACKING_AIM_MENU_PRESSED_BIT_FB = 0x00000100;
-// XrHandTrackingAimStateFB extends XrHandJointsLocateInfoEXT
+// XrHandTrackingAimStateFB extends XrHandJointLocationsEXT
typedef struct XrHandTrackingAimStateFB {
XrStructureType type;
void* XR_MAY_ALIAS next;
@@ -3185,26 +3288,128 @@ typedef struct XrHandTrackingAimStateFB {
#define XR_FB_hand_tracking_capsules 1
#define XR_HAND_TRACKING_CAPSULE_POINT_COUNT_FB 2
-#define XR_FB_HAND_TRACKING_CAPSULE_POINT_COUNT XR_HAND_TRACKING_CAPSULE_POINT_COUNT_FB
#define XR_HAND_TRACKING_CAPSULE_COUNT_FB 19
-#define XR_FB_HAND_TRACKING_CAPSULE_COUNT XR_HAND_TRACKING_CAPSULE_COUNT_FB
-#define XR_FB_hand_tracking_capsules_SPEC_VERSION 2
+#define XR_FB_hand_tracking_capsules_SPEC_VERSION 3
#define XR_FB_HAND_TRACKING_CAPSULES_EXTENSION_NAME "XR_FB_hand_tracking_capsules"
+#define XR_FB_HAND_TRACKING_CAPSULE_POINT_COUNT XR_HAND_TRACKING_CAPSULE_POINT_COUNT_FB
+#define XR_FB_HAND_TRACKING_CAPSULE_COUNT XR_HAND_TRACKING_CAPSULE_COUNT_FB
typedef struct XrHandCapsuleFB {
- XrVector3f points[XR_FB_HAND_TRACKING_CAPSULE_POINT_COUNT];
+ XrVector3f points[XR_HAND_TRACKING_CAPSULE_POINT_COUNT_FB];
float radius;
XrHandJointEXT joint;
} XrHandCapsuleFB;
-// XrHandTrackingCapsulesStateFB extends XrHandJointsLocateInfoEXT
+// XrHandTrackingCapsulesStateFB extends XrHandJointLocationsEXT
typedef struct XrHandTrackingCapsulesStateFB {
XrStructureType type;
void* XR_MAY_ALIAS next;
- XrHandCapsuleFB capsules[XR_FB_HAND_TRACKING_CAPSULE_COUNT];
+ XrHandCapsuleFB capsules[XR_HAND_TRACKING_CAPSULE_COUNT_FB];
} XrHandTrackingCapsulesStateFB;
+#define XR_FB_spatial_entity 1
+XR_DEFINE_ATOM(XrAsyncRequestIdFB)
+#define XR_UUID_SIZE_EXT 16
+#define XR_FB_spatial_entity_SPEC_VERSION 1
+#define XR_FB_SPATIAL_ENTITY_EXTENSION_NAME "XR_FB_spatial_entity"
+
+typedef enum XrSpaceComponentTypeFB {
+ XR_SPACE_COMPONENT_TYPE_LOCATABLE_FB = 0,
+ XR_SPACE_COMPONENT_TYPE_STORABLE_FB = 1,
+ XR_SPACE_COMPONENT_TYPE_SPACE_CONTAINER_FB = 7,
+ XR_SPACE_COMPONENT_TYPE_MAX_ENUM_FB = 0x7FFFFFFF
+} XrSpaceComponentTypeFB;
+// XrSystemSpatialEntityPropertiesFB extends XrSystemProperties
+typedef struct XrSystemSpatialEntityPropertiesFB {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrBool32 supportsSpatialEntity;
+} XrSystemSpatialEntityPropertiesFB;
+
+typedef struct XrSpatialAnchorCreateInfoFB {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrSpace space;
+ XrPosef poseInSpace;
+ XrTime time;
+} XrSpatialAnchorCreateInfoFB;
+
+typedef struct XrSpaceComponentStatusSetInfoFB {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrSpaceComponentTypeFB componentType;
+ XrBool32 enabled;
+ XrDuration timeout;
+} XrSpaceComponentStatusSetInfoFB;
+
+typedef struct XrSpaceComponentStatusFB {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrBool32 enabled;
+ XrBool32 changePending;
+} XrSpaceComponentStatusFB;
+
+typedef struct XrUuidEXT {
+ uint8_t data[XR_UUID_SIZE_EXT];
+} XrUuidEXT;
+
+typedef struct XrEventDataSpatialAnchorCreateCompleteFB {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrAsyncRequestIdFB requestId;
+ XrResult result;
+ XrSpace space;
+ XrUuidEXT uuid;
+} XrEventDataSpatialAnchorCreateCompleteFB;
+
+typedef struct XrEventDataSpaceSetStatusCompleteFB {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrAsyncRequestIdFB requestId;
+ XrResult result;
+ XrSpace space;
+ XrUuidEXT uuid;
+ XrSpaceComponentTypeFB componentType;
+ XrBool32 enabled;
+} XrEventDataSpaceSetStatusCompleteFB;
+
+typedef XrResult (XRAPI_PTR *PFN_xrCreateSpatialAnchorFB)(XrSession session, const XrSpatialAnchorCreateInfoFB* info, XrAsyncRequestIdFB* requestId);
+typedef XrResult (XRAPI_PTR *PFN_xrGetSpaceUuidFB)(XrSpace space, XrUuidEXT* uuid);
+typedef XrResult (XRAPI_PTR *PFN_xrEnumerateSpaceSupportedComponentsFB)(XrSpace space, uint32_t componentTypeCapacityInput, uint32_t* componentTypeCountOutput, XrSpaceComponentTypeFB* componentTypes);
+typedef XrResult (XRAPI_PTR *PFN_xrSetSpaceComponentStatusFB)(XrSpace space, const XrSpaceComponentStatusSetInfoFB* info, XrAsyncRequestIdFB* requestId);
+typedef XrResult (XRAPI_PTR *PFN_xrGetSpaceComponentStatusFB)(XrSpace space, XrSpaceComponentTypeFB componentType, XrSpaceComponentStatusFB* status);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrCreateSpatialAnchorFB(
+ XrSession session,
+ const XrSpatialAnchorCreateInfoFB* info,
+ XrAsyncRequestIdFB* requestId);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrGetSpaceUuidFB(
+ XrSpace space,
+ XrUuidEXT* uuid);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateSpaceSupportedComponentsFB(
+ XrSpace space,
+ uint32_t componentTypeCapacityInput,
+ uint32_t* componentTypeCountOutput,
+ XrSpaceComponentTypeFB* componentTypes);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrSetSpaceComponentStatusFB(
+ XrSpace space,
+ const XrSpaceComponentStatusSetInfoFB* info,
+ XrAsyncRequestIdFB* requestId);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrGetSpaceComponentStatusFB(
+ XrSpace space,
+ XrSpaceComponentTypeFB componentType,
+ XrSpaceComponentStatusFB* status);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+
+
#define XR_FB_foveation 1
XR_DEFINE_HANDLE(XrFoveationProfileFB)
#define XR_FB_foveation_SPEC_VERSION 1
@@ -3346,7 +3551,7 @@ XRAPI_ATTR XrResult XRAPI_CALL xrCreateKeyboardSpaceFB(
#define XR_FB_triangle_mesh 1
XR_DEFINE_HANDLE(XrTriangleMeshFB)
-#define XR_FB_triangle_mesh_SPEC_VERSION 1
+#define XR_FB_triangle_mesh_SPEC_VERSION 2
#define XR_FB_TRIANGLE_MESH_EXTENSION_NAME "XR_FB_triangle_mesh"
typedef enum XrWindingOrderFB {
@@ -3420,7 +3625,7 @@ XRAPI_ATTR XrResult XRAPI_CALL xrTriangleMeshEndVertexBufferUpdateFB(
XR_DEFINE_HANDLE(XrPassthroughFB)
XR_DEFINE_HANDLE(XrPassthroughLayerFB)
XR_DEFINE_HANDLE(XrGeometryInstanceFB)
-#define XR_FB_passthrough_SPEC_VERSION 1
+#define XR_FB_passthrough_SPEC_VERSION 2
#define XR_FB_PASSTHROUGH_EXTENSION_NAME "XR_FB_passthrough"
#define XR_PASSTHROUGH_COLOR_MAP_MONO_SIZE_FB 256
@@ -3428,6 +3633,7 @@ typedef enum XrPassthroughLayerPurposeFB {
XR_PASSTHROUGH_LAYER_PURPOSE_RECONSTRUCTION_FB = 0,
XR_PASSTHROUGH_LAYER_PURPOSE_PROJECTED_FB = 1,
XR_PASSTHROUGH_LAYER_PURPOSE_TRACKED_KEYBOARD_HANDS_FB = 1000203001,
+ XR_PASSTHROUGH_LAYER_PURPOSE_TRACKED_KEYBOARD_MASKED_HANDS_FB = 1000203002,
XR_PASSTHROUGH_LAYER_PURPOSE_MAX_ENUM_FB = 0x7FFFFFFF
} XrPassthroughLayerPurposeFB;
typedef XrFlags64 XrPassthroughFlagsFB;
@@ -3499,18 +3705,29 @@ typedef struct XrPassthroughStyleFB {
XrColor4f edgeColor;
} XrPassthroughStyleFB;
+// XrPassthroughColorMapMonoToRgbaFB extends XrPassthroughStyleFB
typedef struct XrPassthroughColorMapMonoToRgbaFB {
XrStructureType type;
const void* XR_MAY_ALIAS next;
XrColor4f textureColorMap[XR_PASSTHROUGH_COLOR_MAP_MONO_SIZE_FB];
} XrPassthroughColorMapMonoToRgbaFB;
+// XrPassthroughColorMapMonoToMonoFB extends XrPassthroughStyleFB
typedef struct XrPassthroughColorMapMonoToMonoFB {
XrStructureType type;
const void* XR_MAY_ALIAS next;
uint8_t textureColorMap[XR_PASSTHROUGH_COLOR_MAP_MONO_SIZE_FB];
} XrPassthroughColorMapMonoToMonoFB;
+// XrPassthroughBrightnessContrastSaturationFB extends XrPassthroughStyleFB
+typedef struct XrPassthroughBrightnessContrastSaturationFB {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ float brightness;
+ float contrast;
+ float saturation;
+} XrPassthroughBrightnessContrastSaturationFB;
+
typedef struct XrEventDataPassthroughStateChangedFB {
XrStructureType type;
const void* XR_MAY_ALIAS next;
@@ -3584,12 +3801,14 @@ XRAPI_ATTR XrResult XRAPI_CALL xrGeometryInstanceSetTransformFB(
#define XR_NULL_RENDER_MODEL_KEY_FB 0
XR_DEFINE_ATOM(XrRenderModelKeyFB)
-#define XR_FB_render_model_SPEC_VERSION 1
+#define XR_FB_render_model_SPEC_VERSION 2
#define XR_FB_RENDER_MODEL_EXTENSION_NAME "XR_FB_render_model"
#define XR_MAX_RENDER_MODEL_NAME_SIZE_FB 64
typedef XrFlags64 XrRenderModelFlagsFB;
// Flag bits for XrRenderModelFlagsFB
+static const XrRenderModelFlagsFB XR_RENDER_MODEL_SUPPORTS_GLTF_2_0_SUBSET_1_BIT_FB = 0x00000001;
+static const XrRenderModelFlagsFB XR_RENDER_MODEL_SUPPORTS_GLTF_2_0_SUBSET_2_BIT_FB = 0x00000002;
typedef struct XrRenderModelPathInfoFB {
XrStructureType type;
@@ -3628,6 +3847,13 @@ typedef struct XrSystemRenderModelPropertiesFB {
XrBool32 supportsRenderModelLoading;
} XrSystemRenderModelPropertiesFB;
+// XrRenderModelCapabilitiesRequestFB extends XrSystemProperties
+typedef struct XrRenderModelCapabilitiesRequestFB {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrRenderModelFlagsFB flags;
+} XrRenderModelCapabilitiesRequestFB;
+
typedef XrResult (XRAPI_PTR *PFN_xrEnumerateRenderModelPathsFB)(XrSession session, uint32_t pathCapacityInput, uint32_t* pathCountOutput, XrRenderModelPathInfoFB* paths);
typedef XrResult (XRAPI_PTR *PFN_xrGetRenderModelPropertiesFB)(XrSession session, XrPath path, XrRenderModelPropertiesFB* properties);
typedef XrResult (XRAPI_PTR *PFN_xrLoadRenderModelFB)(XrSession session, const XrRenderModelLoadInfoFB* info, XrRenderModelBufferFB* buffer);
@@ -3767,6 +3993,20 @@ XRAPI_ATTR XrResult XRAPI_CALL xrCreateMarkerSpaceVARJO(
#endif /* !XR_NO_PROTOTYPES */
+#define XR_VARJO_view_offset 1
+#define XR_VARJO_view_offset_SPEC_VERSION 1
+#define XR_VARJO_VIEW_OFFSET_EXTENSION_NAME "XR_VARJO_view_offset"
+typedef XrResult (XRAPI_PTR *PFN_xrSetViewOffsetVARJO)(XrSession session, float offset);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrSetViewOffsetVARJO(
+ XrSession session,
+ float offset);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+
+
#define XR_MSFT_spatial_anchor_persistence 1
XR_DEFINE_HANDLE(XrSpatialAnchorStoreConnectionMSFT)
#define XR_MAX_SPATIAL_ANCHOR_NAME_SIZE_MSFT 256
@@ -3832,12 +4072,212 @@ XRAPI_ATTR XrResult XRAPI_CALL xrClearSpatialAnchorStoreMSFT(
#endif /* !XR_NO_PROTOTYPES */
+#define XR_ULTRALEAP_hand_tracking_forearm 1
+
+#define XR_HAND_FOREARM_JOINT_COUNT_ULTRALEAP 27
+
+#define XR_ULTRALEAP_hand_tracking_forearm_SPEC_VERSION 1
+#define XR_ULTRALEAP_HAND_TRACKING_FOREARM_EXTENSION_NAME "XR_ULTRALEAP_hand_tracking_forearm"
+
+typedef enum XrHandForearmJointULTRALEAP {
+ XR_HAND_FOREARM_JOINT_PALM_ULTRALEAP = 0,
+ XR_HAND_FOREARM_JOINT_WRIST_ULTRALEAP = 1,
+ XR_HAND_FOREARM_JOINT_THUMB_METACARPAL_ULTRALEAP = 2,
+ XR_HAND_FOREARM_JOINT_THUMB_PROXIMAL_ULTRALEAP = 3,
+ XR_HAND_FOREARM_JOINT_THUMB_DISTAL_ULTRALEAP = 4,
+ XR_HAND_FOREARM_JOINT_THUMB_TIP_ULTRALEAP = 5,
+ XR_HAND_FOREARM_JOINT_INDEX_METACARPAL_ULTRALEAP = 6,
+ XR_HAND_FOREARM_JOINT_INDEX_PROXIMAL_ULTRALEAP = 7,
+ XR_HAND_FOREARM_JOINT_INDEX_INTERMEDIATE_ULTRALEAP = 8,
+ XR_HAND_FOREARM_JOINT_INDEX_DISTAL_ULTRALEAP = 9,
+ XR_HAND_FOREARM_JOINT_INDEX_TIP_ULTRALEAP = 10,
+ XR_HAND_FOREARM_JOINT_MIDDLE_METACARPAL_ULTRALEAP = 11,
+ XR_HAND_FOREARM_JOINT_MIDDLE_PROXIMAL_ULTRALEAP = 12,
+ XR_HAND_FOREARM_JOINT_MIDDLE_INTERMEDIATE_ULTRALEAP = 13,
+ XR_HAND_FOREARM_JOINT_MIDDLE_DISTAL_ULTRALEAP = 14,
+ XR_HAND_FOREARM_JOINT_MIDDLE_TIP_ULTRALEAP = 15,
+ XR_HAND_FOREARM_JOINT_RING_METACARPAL_ULTRALEAP = 16,
+ XR_HAND_FOREARM_JOINT_RING_PROXIMAL_ULTRALEAP = 17,
+ XR_HAND_FOREARM_JOINT_RING_INTERMEDIATE_ULTRALEAP = 18,
+ XR_HAND_FOREARM_JOINT_RING_DISTAL_ULTRALEAP = 19,
+ XR_HAND_FOREARM_JOINT_RING_TIP_ULTRALEAP = 20,
+ XR_HAND_FOREARM_JOINT_LITTLE_METACARPAL_ULTRALEAP = 21,
+ XR_HAND_FOREARM_JOINT_LITTLE_PROXIMAL_ULTRALEAP = 22,
+ XR_HAND_FOREARM_JOINT_LITTLE_INTERMEDIATE_ULTRALEAP = 23,
+ XR_HAND_FOREARM_JOINT_LITTLE_DISTAL_ULTRALEAP = 24,
+ XR_HAND_FOREARM_JOINT_LITTLE_TIP_ULTRALEAP = 25,
+ XR_HAND_FOREARM_JOINT_ELBOW_ULTRALEAP = 26,
+ XR_HAND_FOREARM_JOINT_MAX_ENUM_ULTRALEAP = 0x7FFFFFFF
+} XrHandForearmJointULTRALEAP;
+
+
+#define XR_FB_spatial_entity_query 1
+#define XR_FB_spatial_entity_query_SPEC_VERSION 1
+#define XR_FB_SPATIAL_ENTITY_QUERY_EXTENSION_NAME "XR_FB_spatial_entity_query"
+
+typedef enum XrSpaceQueryActionFB {
+ XR_SPACE_QUERY_ACTION_LOAD_FB = 0,
+ XR_SPACE_QUERY_ACTION_MAX_ENUM_FB = 0x7FFFFFFF
+} XrSpaceQueryActionFB;
+
+typedef enum XrSpaceStorageLocationFB {
+ XR_SPACE_STORAGE_LOCATION_INVALID_FB = 0,
+ XR_SPACE_STORAGE_LOCATION_LOCAL_FB = 1,
+ XR_SPACE_STORAGE_LOCATION_MAX_ENUM_FB = 0x7FFFFFFF
+} XrSpaceStorageLocationFB;
+typedef struct XR_MAY_ALIAS XrSpaceQueryInfoBaseHeaderFB {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+} XrSpaceQueryInfoBaseHeaderFB;
+
+typedef struct XR_MAY_ALIAS XrSpaceFilterInfoBaseHeaderFB {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+} XrSpaceFilterInfoBaseHeaderFB;
+
+typedef struct XrSpaceQueryInfoFB {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrSpaceQueryActionFB queryAction;
+ uint32_t maxResultCount;
+ XrDuration timeout;
+ const XrSpaceFilterInfoBaseHeaderFB* filter;
+ const XrSpaceFilterInfoBaseHeaderFB* excludeFilter;
+} XrSpaceQueryInfoFB;
+
+// XrSpaceStorageLocationFilterInfoFB extends XrSpaceFilterInfoBaseHeaderFB
+typedef struct XrSpaceStorageLocationFilterInfoFB {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrSpaceStorageLocationFB location;
+} XrSpaceStorageLocationFilterInfoFB;
+
+typedef struct XrSpaceUuidFilterInfoFB {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ uint32_t uuidCount;
+ XrUuidEXT* uuids;
+} XrSpaceUuidFilterInfoFB;
+
+typedef struct XrSpaceComponentFilterInfoFB {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrSpaceComponentTypeFB componentType;
+} XrSpaceComponentFilterInfoFB;
+
+typedef struct XrSpaceQueryResultFB {
+ XrSpace space;
+ XrUuidEXT uuid;
+} XrSpaceQueryResultFB;
+
+typedef struct XrSpaceQueryResultsFB {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ uint32_t resultCapacityInput;
+ uint32_t resultCountOutput;
+ XrSpaceQueryResultFB* results;
+} XrSpaceQueryResultsFB;
+
+typedef struct XrEventDataSpaceQueryResultsAvailableFB {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrAsyncRequestIdFB requestId;
+} XrEventDataSpaceQueryResultsAvailableFB;
+
+typedef struct XrEventDataSpaceQueryCompleteFB {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrAsyncRequestIdFB requestId;
+ XrResult result;
+} XrEventDataSpaceQueryCompleteFB;
+
+typedef XrResult (XRAPI_PTR *PFN_xrQuerySpacesFB)(XrSession session, const XrSpaceQueryInfoBaseHeaderFB* info, XrAsyncRequestIdFB* requestId);
+typedef XrResult (XRAPI_PTR *PFN_xrRetrieveSpaceQueryResultsFB)(XrSession session, XrAsyncRequestIdFB requestId, XrSpaceQueryResultsFB* results);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrQuerySpacesFB(
+ XrSession session,
+ const XrSpaceQueryInfoBaseHeaderFB* info,
+ XrAsyncRequestIdFB* requestId);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrRetrieveSpaceQueryResultsFB(
+ XrSession session,
+ XrAsyncRequestIdFB requestId,
+ XrSpaceQueryResultsFB* results);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+
+
+#define XR_FB_spatial_entity_storage 1
+#define XR_FB_spatial_entity_storage_SPEC_VERSION 1
+#define XR_FB_SPATIAL_ENTITY_STORAGE_EXTENSION_NAME "XR_FB_spatial_entity_storage"
+
+typedef enum XrSpacePersistenceModeFB {
+ XR_SPACE_PERSISTENCE_MODE_INVALID_FB = 0,
+ XR_SPACE_PERSISTENCE_MODE_INDEFINITE_FB = 1,
+ XR_SPACE_PERSISTENCE_MODE_MAX_ENUM_FB = 0x7FFFFFFF
+} XrSpacePersistenceModeFB;
+typedef struct XrSpaceSaveInfoFB {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrSpace space;
+ XrSpaceStorageLocationFB location;
+ XrSpacePersistenceModeFB persistenceMode;
+} XrSpaceSaveInfoFB;
+
+typedef struct XrSpaceEraseInfoFB {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrSpace space;
+ XrSpaceStorageLocationFB location;
+} XrSpaceEraseInfoFB;
+
+typedef struct XrEventDataSpaceSaveCompleteFB {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrAsyncRequestIdFB requestId;
+ XrResult result;
+ XrSpace space;
+ XrUuidEXT uuid;
+ XrSpaceStorageLocationFB location;
+} XrEventDataSpaceSaveCompleteFB;
+
+typedef struct XrEventDataSpaceEraseCompleteFB {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrAsyncRequestIdFB requestId;
+ XrResult result;
+ XrSpace space;
+ XrUuidEXT uuid;
+ XrSpaceStorageLocationFB location;
+} XrEventDataSpaceEraseCompleteFB;
+
+typedef XrResult (XRAPI_PTR *PFN_xrSaveSpaceFB)(XrSession session, const XrSpaceSaveInfoFB* info, XrAsyncRequestIdFB* requestId);
+typedef XrResult (XRAPI_PTR *PFN_xrEraseSpaceFB)(XrSession session, const XrSpaceEraseInfoFB* info, XrAsyncRequestIdFB* requestId);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrSaveSpaceFB(
+ XrSession session,
+ const XrSpaceSaveInfoFB* info,
+ XrAsyncRequestIdFB* requestId);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrEraseSpaceFB(
+ XrSession session,
+ const XrSpaceEraseInfoFB* info,
+ XrAsyncRequestIdFB* requestId);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+
+
#define XR_FB_space_warp 1
-#define XR_FB_space_warp_SPEC_VERSION 1
+#define XR_FB_space_warp_SPEC_VERSION 2
#define XR_FB_SPACE_WARP_EXTENSION_NAME "XR_FB_space_warp"
typedef XrFlags64 XrCompositionLayerSpaceWarpInfoFlagsFB;
// Flag bits for XrCompositionLayerSpaceWarpInfoFlagsFB
+static const XrCompositionLayerSpaceWarpInfoFlagsFB XR_COMPOSITION_LAYER_SPACE_WARP_INFO_FRAME_SKIP_BIT_FB = 0x00000001;
// XrCompositionLayerSpaceWarpInfoFB extends XrCompositionLayerProjectionView
typedef struct XrCompositionLayerSpaceWarpInfoFB {
@@ -3888,8 +4328,31 @@ XRAPI_ATTR XrResult XRAPI_CALL xrSetDigitalLensControlALMALENCE(
#endif /* !XR_NO_PROTOTYPES */
+#define XR_FB_spatial_entity_container 1
+#define XR_FB_spatial_entity_container_SPEC_VERSION 1
+#define XR_FB_SPATIAL_ENTITY_CONTAINER_EXTENSION_NAME "XR_FB_spatial_entity_container"
+typedef struct XrSpaceContainerFB {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ uint32_t uuidCapacityInput;
+ uint32_t* uuidCountOutput;
+ XrUuidEXT* uuids;
+} XrSpaceContainerFB;
+
+typedef XrResult (XRAPI_PTR *PFN_xrGetSpaceContainerFB)(XrSession session, XrSpace space, XrSpaceContainerFB* spaceContainerOutput);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrGetSpaceContainerFB(
+ XrSession session,
+ XrSpace space,
+ XrSpaceContainerFB* spaceContainerOutput);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+
+
#define XR_FB_passthrough_keyboard_hands 1
-#define XR_FB_passthrough_keyboard_hands_SPEC_VERSION 1
+#define XR_FB_passthrough_keyboard_hands_SPEC_VERSION 2
#define XR_FB_PASSTHROUGH_KEYBOARD_HANDS_EXTENSION_NAME "XR_FB_passthrough_keyboard_hands"
typedef struct XrPassthroughKeyboardHandsIntensityFB {
XrStructureType type;
@@ -3909,14 +4372,92 @@ XRAPI_ATTR XrResult XRAPI_CALL xrPassthroughLayerSetKeyboardHandsIntensityFB(
#endif /* !XR_NO_PROTOTYPES */
+#define XR_FB_composition_layer_settings 1
+#define XR_FB_composition_layer_settings_SPEC_VERSION 1
+#define XR_FB_COMPOSITION_LAYER_SETTINGS_EXTENSION_NAME "XR_FB_composition_layer_settings"
+typedef XrFlags64 XrCompositionLayerSettingsFlagsFB;
+
+// Flag bits for XrCompositionLayerSettingsFlagsFB
+static const XrCompositionLayerSettingsFlagsFB XR_COMPOSITION_LAYER_SETTINGS_NORMAL_SUPER_SAMPLING_BIT_FB = 0x00000001;
+static const XrCompositionLayerSettingsFlagsFB XR_COMPOSITION_LAYER_SETTINGS_QUALITY_SUPER_SAMPLING_BIT_FB = 0x00000002;
+static const XrCompositionLayerSettingsFlagsFB XR_COMPOSITION_LAYER_SETTINGS_NORMAL_SHARPENING_BIT_FB = 0x00000004;
+static const XrCompositionLayerSettingsFlagsFB XR_COMPOSITION_LAYER_SETTINGS_QUALITY_SHARPENING_BIT_FB = 0x00000008;
+
+// XrCompositionLayerSettingsFB extends XrCompositionLayerBaseHeader
+typedef struct XrCompositionLayerSettingsFB {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrCompositionLayerSettingsFlagsFB layerFlags;
+} XrCompositionLayerSettingsFB;
+
+
+
+#define XR_META_performance_metrics 1
+#define XR_META_performance_metrics_SPEC_VERSION 1
+#define XR_META_PERFORMANCE_METRICS_EXTENSION_NAME "XR_META_performance_metrics"
+
+typedef enum XrPerformanceMetricsCounterUnitMETA {
+ XR_PERFORMANCE_METRICS_COUNTER_UNIT_GENERIC_META = 0,
+ XR_PERFORMANCE_METRICS_COUNTER_UNIT_PERCENTAGE_META = 1,
+ XR_PERFORMANCE_METRICS_COUNTER_UNIT_MILLISECONDS_META = 2,
+ XR_PERFORMANCE_METRICS_COUNTER_UNIT_BYTES_META = 3,
+ XR_PERFORMANCE_METRICS_COUNTER_UNIT_HERTZ_META = 4,
+ XR_PERFORMANCE_METRICS_COUNTER_UNIT_MAX_ENUM_META = 0x7FFFFFFF
+} XrPerformanceMetricsCounterUnitMETA;
+typedef XrFlags64 XrPerformanceMetricsCounterFlagsMETA;
+
+// Flag bits for XrPerformanceMetricsCounterFlagsMETA
+static const XrPerformanceMetricsCounterFlagsMETA XR_PERFORMANCE_METRICS_COUNTER_ANY_VALUE_VALID_BIT_META = 0x00000001;
+static const XrPerformanceMetricsCounterFlagsMETA XR_PERFORMANCE_METRICS_COUNTER_UINT_VALUE_VALID_BIT_META = 0x00000002;
+static const XrPerformanceMetricsCounterFlagsMETA XR_PERFORMANCE_METRICS_COUNTER_FLOAT_VALUE_VALID_BIT_META = 0x00000004;
+
+typedef struct XrPerformanceMetricsStateMETA {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrBool32 enabled;
+} XrPerformanceMetricsStateMETA;
+
+typedef struct XrPerformanceMetricsCounterMETA {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrPerformanceMetricsCounterFlagsMETA counterFlags;
+ XrPerformanceMetricsCounterUnitMETA counterUnit;
+ uint32_t uintValue;
+ float floatValue;
+} XrPerformanceMetricsCounterMETA;
+
+typedef XrResult (XRAPI_PTR *PFN_xrEnumeratePerformanceMetricsCounterPathsMETA)(XrInstance instance, uint32_t counterPathCapacityInput, uint32_t* counterPathCountOutput, XrPath* counterPaths);
+typedef XrResult (XRAPI_PTR *PFN_xrSetPerformanceMetricsStateMETA)(XrSession session, const XrPerformanceMetricsStateMETA* state);
+typedef XrResult (XRAPI_PTR *PFN_xrGetPerformanceMetricsStateMETA)(XrSession session, XrPerformanceMetricsStateMETA* state);
+typedef XrResult (XRAPI_PTR *PFN_xrQueryPerformanceMetricsCounterMETA)(XrSession session, XrPath counterPath, XrPerformanceMetricsCounterMETA* counter);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrEnumeratePerformanceMetricsCounterPathsMETA(
+ XrInstance instance,
+ uint32_t counterPathCapacityInput,
+ uint32_t* counterPathCountOutput,
+ XrPath* counterPaths);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrSetPerformanceMetricsStateMETA(
+ XrSession session,
+ const XrPerformanceMetricsStateMETA* state);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrGetPerformanceMetricsStateMETA(
+ XrSession session,
+ XrPerformanceMetricsStateMETA* state);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrQueryPerformanceMetricsCounterMETA(
+ XrSession session,
+ XrPath counterPath,
+ XrPerformanceMetricsCounterMETA* counter);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+
+
#define XR_EXT_uuid 1
#define XR_EXT_uuid_SPEC_VERSION 1
#define XR_EXT_UUID_EXTENSION_NAME "XR_EXT_uuid"
-#define XR_UUID_SIZE_EXT 16
-typedef struct XrUuidEXT {
- uint8_t data[XR_UUID_SIZE_EXT];
-} XrUuidEXT;
-
#ifdef __cplusplus
}
diff --git a/thirdparty/openxr/include/openxr/openxr_platform.h b/thirdparty/openxr/include/openxr/openxr_platform.h
index eb5e5f8c4b..f0fbf6955a 100644
--- a/thirdparty/openxr/include/openxr/openxr_platform.h
+++ b/thirdparty/openxr/include/openxr/openxr_platform.h
@@ -275,7 +275,7 @@ XRAPI_ATTR XrResult XRAPI_CALL xrGetVulkanGraphicsRequirementsKHR(
#ifdef XR_USE_GRAPHICS_API_D3D11
#define XR_KHR_D3D11_enable 1
-#define XR_KHR_D3D11_enable_SPEC_VERSION 8
+#define XR_KHR_D3D11_enable_SPEC_VERSION 9
#define XR_KHR_D3D11_ENABLE_EXTENSION_NAME "XR_KHR_D3D11_enable"
// XrGraphicsBindingD3D11KHR extends XrSessionCreateInfo
typedef struct XrGraphicsBindingD3D11KHR {
@@ -312,7 +312,7 @@ XRAPI_ATTR XrResult XRAPI_CALL xrGetD3D11GraphicsRequirementsKHR(
#ifdef XR_USE_GRAPHICS_API_D3D12
#define XR_KHR_D3D12_enable 1
-#define XR_KHR_D3D12_enable_SPEC_VERSION 8
+#define XR_KHR_D3D12_enable_SPEC_VERSION 9
#define XR_KHR_D3D12_ENABLE_EXTENSION_NAME "XR_KHR_D3D12_enable"
// XrGraphicsBindingD3D12KHR extends XrSessionCreateInfo
typedef struct XrGraphicsBindingD3D12KHR {
@@ -668,6 +668,21 @@ typedef struct XrSwapchainStateSamplerVulkanFB {
#endif /* XR_USE_GRAPHICS_API_VULKAN */
+#ifdef XR_USE_GRAPHICS_API_VULKAN
+
+#define XR_META_vulkan_swapchain_create_info 1
+#define XR_META_vulkan_swapchain_create_info_SPEC_VERSION 1
+#define XR_META_VULKAN_SWAPCHAIN_CREATE_INFO_EXTENSION_NAME "XR_META_vulkan_swapchain_create_info"
+// XrVulkanSwapchainCreateInfoMETA extends XrSwapchainCreateInfo
+typedef struct XrVulkanSwapchainCreateInfoMETA {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ VkImageCreateFlags additionalCreateFlags;
+ VkImageUsageFlags additionalUsageFlags;
+} XrVulkanSwapchainCreateInfoMETA;
+
+#endif /* XR_USE_GRAPHICS_API_VULKAN */
+
#ifdef __cplusplus
}
#endif
diff --git a/thirdparty/openxr/include/openxr/openxr_reflection.h b/thirdparty/openxr/include/openxr/openxr_reflection.h
index 2bc14be600..163b54e4e4 100644
--- a/thirdparty/openxr/include/openxr/openxr_reflection.h
+++ b/thirdparty/openxr/include/openxr/openxr_reflection.h
@@ -100,6 +100,10 @@ XR_ENUM_STR(XrResult);
_(XR_ERROR_SCENE_COMPUTE_CONSISTENCY_MISMATCH_MSFT, -1000097005) \
_(XR_ERROR_DISPLAY_REFRESH_RATE_UNSUPPORTED_FB, -1000101000) \
_(XR_ERROR_COLOR_SPACE_UNSUPPORTED_FB, -1000108000) \
+ _(XR_ERROR_SPACE_COMPONENT_NOT_SUPPORTED_FB, -1000113000) \
+ _(XR_ERROR_SPACE_COMPONENT_NOT_ENABLED_FB, -1000113001) \
+ _(XR_ERROR_SPACE_COMPONENT_STATUS_PENDING_FB, -1000113002) \
+ _(XR_ERROR_SPACE_COMPONENT_STATUS_ALREADY_SET_FB, -1000113003) \
_(XR_ERROR_UNEXPECTED_STATE_PASSTHROUGH_FB, -1000118000) \
_(XR_ERROR_FEATURE_ALREADY_CREATED_PASSTHROUGH_FB, -1000118001) \
_(XR_ERROR_FEATURE_REQUIRED_PASSTHROUGH_FB, -1000118002) \
@@ -208,6 +212,9 @@ XR_ENUM_STR(XrResult);
_(XR_TYPE_VIEW_CONFIGURATION_DEPTH_RANGE_EXT, 1000046000) \
_(XR_TYPE_GRAPHICS_BINDING_EGL_MNDX, 1000048004) \
_(XR_TYPE_SPATIAL_GRAPH_NODE_SPACE_CREATE_INFO_MSFT, 1000049000) \
+ _(XR_TYPE_SPATIAL_GRAPH_STATIC_NODE_BINDING_CREATE_INFO_MSFT, 1000049001) \
+ _(XR_TYPE_SPATIAL_GRAPH_NODE_BINDING_PROPERTIES_GET_INFO_MSFT, 1000049002) \
+ _(XR_TYPE_SPATIAL_GRAPH_NODE_BINDING_PROPERTIES_MSFT, 1000049003) \
_(XR_TYPE_SYSTEM_HAND_TRACKING_PROPERTIES_EXT, 1000051000) \
_(XR_TYPE_HAND_TRACKER_CREATE_INFO_EXT, 1000051001) \
_(XR_TYPE_HAND_JOINTS_LOCATE_INFO_EXT, 1000051002) \
@@ -235,6 +242,7 @@ XR_ENUM_STR(XrResult);
_(XR_TYPE_COMPOSITION_LAYER_REPROJECTION_PLANE_OVERRIDE_MSFT, 1000066001) \
_(XR_TYPE_ANDROID_SURFACE_SWAPCHAIN_CREATE_INFO_FB, 1000070000) \
_(XR_TYPE_COMPOSITION_LAYER_SECURE_CONTENT_FB, 1000072000) \
+ _(XR_TYPE_INTERACTION_PROFILE_DPAD_BINDING_EXT, 1000078000) \
_(XR_TYPE_INTERACTION_PROFILE_ANALOG_THRESHOLD_VALVE, 1000079000) \
_(XR_TYPE_HAND_JOINTS_MOTION_RANGE_INFO_EXT, 1000080000) \
_(XR_TYPE_LOADER_INIT_INFO_ANDROID_KHR, 1000089000) \
@@ -274,6 +282,12 @@ XR_ENUM_STR(XrResult);
_(XR_TYPE_HAND_TRACKING_SCALE_FB, 1000110003) \
_(XR_TYPE_HAND_TRACKING_AIM_STATE_FB, 1000111001) \
_(XR_TYPE_HAND_TRACKING_CAPSULES_STATE_FB, 1000112000) \
+ _(XR_TYPE_SYSTEM_SPATIAL_ENTITY_PROPERTIES_FB, 1000113004) \
+ _(XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_FB, 1000113003) \
+ _(XR_TYPE_SPACE_COMPONENT_STATUS_SET_INFO_FB, 1000113007) \
+ _(XR_TYPE_SPACE_COMPONENT_STATUS_FB, 1000113001) \
+ _(XR_TYPE_EVENT_DATA_SPATIAL_ANCHOR_CREATE_COMPLETE_FB, 1000113005) \
+ _(XR_TYPE_EVENT_DATA_SPACE_SET_STATUS_COMPLETE_FB, 1000113006) \
_(XR_TYPE_FOVEATION_PROFILE_CREATE_INFO_FB, 1000114000) \
_(XR_TYPE_SWAPCHAIN_CREATE_INFO_FOVEATION_FB, 1000114001) \
_(XR_TYPE_SWAPCHAIN_STATE_FOVEATION_FB, 1000114002) \
@@ -291,12 +305,14 @@ XR_ENUM_STR(XrResult);
_(XR_TYPE_PASSTHROUGH_STYLE_FB, 1000118020) \
_(XR_TYPE_PASSTHROUGH_COLOR_MAP_MONO_TO_RGBA_FB, 1000118021) \
_(XR_TYPE_PASSTHROUGH_COLOR_MAP_MONO_TO_MONO_FB, 1000118022) \
+ _(XR_TYPE_PASSTHROUGH_BRIGHTNESS_CONTRAST_SATURATION_FB, 1000118023) \
_(XR_TYPE_EVENT_DATA_PASSTHROUGH_STATE_CHANGED_FB, 1000118030) \
_(XR_TYPE_RENDER_MODEL_PATH_INFO_FB, 1000119000) \
_(XR_TYPE_RENDER_MODEL_PROPERTIES_FB, 1000119001) \
_(XR_TYPE_RENDER_MODEL_BUFFER_FB, 1000119002) \
_(XR_TYPE_RENDER_MODEL_LOAD_INFO_FB, 1000119003) \
_(XR_TYPE_SYSTEM_RENDER_MODEL_PROPERTIES_FB, 1000119004) \
+ _(XR_TYPE_RENDER_MODEL_CAPABILITIES_REQUEST_FB, 1000119005) \
_(XR_TYPE_BINDING_MODIFICATIONS_KHR, 1000120000) \
_(XR_TYPE_VIEW_LOCATE_FOVEATED_RENDERING_VARJO, 1000121000) \
_(XR_TYPE_FOVEATED_VIEW_CONFIGURATION_VIEW_VARJO, 1000121001) \
@@ -307,6 +323,17 @@ XR_ENUM_STR(XrResult);
_(XR_TYPE_MARKER_SPACE_CREATE_INFO_VARJO, 1000124002) \
_(XR_TYPE_SPATIAL_ANCHOR_PERSISTENCE_INFO_MSFT, 1000142000) \
_(XR_TYPE_SPATIAL_ANCHOR_FROM_PERSISTED_ANCHOR_CREATE_INFO_MSFT, 1000142001) \
+ _(XR_TYPE_SPACE_QUERY_INFO_FB, 1000156001) \
+ _(XR_TYPE_SPACE_QUERY_RESULTS_FB, 1000156002) \
+ _(XR_TYPE_SPACE_STORAGE_LOCATION_FILTER_INFO_FB, 1000156003) \
+ _(XR_TYPE_SPACE_UUID_FILTER_INFO_FB, 1000156054) \
+ _(XR_TYPE_SPACE_COMPONENT_FILTER_INFO_FB, 1000156052) \
+ _(XR_TYPE_EVENT_DATA_SPACE_QUERY_RESULTS_AVAILABLE_FB, 1000156103) \
+ _(XR_TYPE_EVENT_DATA_SPACE_QUERY_COMPLETE_FB, 1000156104) \
+ _(XR_TYPE_SPACE_SAVE_INFO_FB, 1000158000) \
+ _(XR_TYPE_SPACE_ERASE_INFO_FB, 1000158001) \
+ _(XR_TYPE_EVENT_DATA_SPACE_SAVE_COMPLETE_FB, 1000158106) \
+ _(XR_TYPE_EVENT_DATA_SPACE_ERASE_COMPLETE_FB, 1000158107) \
_(XR_TYPE_SWAPCHAIN_IMAGE_FOVEATION_VULKAN_FB, 1000160000) \
_(XR_TYPE_SWAPCHAIN_STATE_ANDROID_SURFACE_DIMENSIONS_FB, 1000161000) \
_(XR_TYPE_SWAPCHAIN_STATE_SAMPLER_OPENGL_ES_FB, 1000162000) \
@@ -314,7 +341,12 @@ XR_ENUM_STR(XrResult);
_(XR_TYPE_COMPOSITION_LAYER_SPACE_WARP_INFO_FB, 1000171000) \
_(XR_TYPE_SYSTEM_SPACE_WARP_PROPERTIES_FB, 1000171001) \
_(XR_TYPE_DIGITAL_LENS_CONTROL_ALMALENCE, 1000196000) \
+ _(XR_TYPE_SPACE_CONTAINER_FB, 1000199000) \
_(XR_TYPE_PASSTHROUGH_KEYBOARD_HANDS_INTENSITY_FB, 1000203002) \
+ _(XR_TYPE_COMPOSITION_LAYER_SETTINGS_FB, 1000204000) \
+ _(XR_TYPE_VULKAN_SWAPCHAIN_CREATE_INFO_META, 1000227000) \
+ _(XR_TYPE_PERFORMANCE_METRICS_STATE_META, 1000232001) \
+ _(XR_TYPE_PERFORMANCE_METRICS_COUNTER_META, 1000232002) \
_(XR_STRUCTURE_TYPE_MAX_ENUM, 0x7FFFFFFF)
#define XR_LIST_ENUM_XrFormFactor(_) \
@@ -379,6 +411,7 @@ XR_ENUM_STR(XrResult);
_(XR_OBJECT_TYPE_ACTION, 6) \
_(XR_OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT, 1000019000) \
_(XR_OBJECT_TYPE_SPATIAL_ANCHOR_MSFT, 1000039000) \
+ _(XR_OBJECT_TYPE_SPATIAL_GRAPH_NODE_BINDING_MSFT, 1000049000) \
_(XR_OBJECT_TYPE_HAND_TRACKER_EXT, 1000051000) \
_(XR_OBJECT_TYPE_SCENE_OBSERVER_MSFT, 1000097000) \
_(XR_OBJECT_TYPE_SCENE_MSFT, 1000097001) \
@@ -478,6 +511,7 @@ XR_ENUM_STR(XrResult);
#define XR_LIST_ENUM_XrHandJointSetEXT(_) \
_(XR_HAND_JOINT_SET_DEFAULT_EXT, 0) \
+ _(XR_HAND_JOINT_SET_HAND_WITH_FOREARM_ULTRALEAP, 1000149000) \
_(XR_HAND_JOINT_SET_MAX_ENUM_EXT, 0x7FFFFFFF)
#define XR_LIST_ENUM_XrHandPoseTypeMSFT(_) \
@@ -623,6 +657,12 @@ XR_ENUM_STR(XrResult);
_(XR_COLOR_SPACE_ADOBE_RGB_FB, 7) \
_(XR_COLOR_SPACE_MAX_ENUM_FB, 0x7FFFFFFF)
+#define XR_LIST_ENUM_XrSpaceComponentTypeFB(_) \
+ _(XR_SPACE_COMPONENT_TYPE_LOCATABLE_FB, 0) \
+ _(XR_SPACE_COMPONENT_TYPE_STORABLE_FB, 1) \
+ _(XR_SPACE_COMPONENT_TYPE_SPACE_CONTAINER_FB, 7) \
+ _(XR_SPACE_COMPONENT_TYPE_MAX_ENUM_FB, 0x7FFFFFFF)
+
#define XR_LIST_ENUM_XrFoveationLevelFB(_) \
_(XR_FOVEATION_LEVEL_NONE_FB, 0) \
_(XR_FOVEATION_LEVEL_LOW_FB, 1) \
@@ -645,8 +685,61 @@ XR_ENUM_STR(XrResult);
_(XR_PASSTHROUGH_LAYER_PURPOSE_RECONSTRUCTION_FB, 0) \
_(XR_PASSTHROUGH_LAYER_PURPOSE_PROJECTED_FB, 1) \
_(XR_PASSTHROUGH_LAYER_PURPOSE_TRACKED_KEYBOARD_HANDS_FB, 1000203001) \
+ _(XR_PASSTHROUGH_LAYER_PURPOSE_TRACKED_KEYBOARD_MASKED_HANDS_FB, 1000203002) \
_(XR_PASSTHROUGH_LAYER_PURPOSE_MAX_ENUM_FB, 0x7FFFFFFF)
+#define XR_LIST_ENUM_XrHandForearmJointULTRALEAP(_) \
+ _(XR_HAND_FOREARM_JOINT_PALM_ULTRALEAP, 0) \
+ _(XR_HAND_FOREARM_JOINT_WRIST_ULTRALEAP, 1) \
+ _(XR_HAND_FOREARM_JOINT_THUMB_METACARPAL_ULTRALEAP, 2) \
+ _(XR_HAND_FOREARM_JOINT_THUMB_PROXIMAL_ULTRALEAP, 3) \
+ _(XR_HAND_FOREARM_JOINT_THUMB_DISTAL_ULTRALEAP, 4) \
+ _(XR_HAND_FOREARM_JOINT_THUMB_TIP_ULTRALEAP, 5) \
+ _(XR_HAND_FOREARM_JOINT_INDEX_METACARPAL_ULTRALEAP, 6) \
+ _(XR_HAND_FOREARM_JOINT_INDEX_PROXIMAL_ULTRALEAP, 7) \
+ _(XR_HAND_FOREARM_JOINT_INDEX_INTERMEDIATE_ULTRALEAP, 8) \
+ _(XR_HAND_FOREARM_JOINT_INDEX_DISTAL_ULTRALEAP, 9) \
+ _(XR_HAND_FOREARM_JOINT_INDEX_TIP_ULTRALEAP, 10) \
+ _(XR_HAND_FOREARM_JOINT_MIDDLE_METACARPAL_ULTRALEAP, 11) \
+ _(XR_HAND_FOREARM_JOINT_MIDDLE_PROXIMAL_ULTRALEAP, 12) \
+ _(XR_HAND_FOREARM_JOINT_MIDDLE_INTERMEDIATE_ULTRALEAP, 13) \
+ _(XR_HAND_FOREARM_JOINT_MIDDLE_DISTAL_ULTRALEAP, 14) \
+ _(XR_HAND_FOREARM_JOINT_MIDDLE_TIP_ULTRALEAP, 15) \
+ _(XR_HAND_FOREARM_JOINT_RING_METACARPAL_ULTRALEAP, 16) \
+ _(XR_HAND_FOREARM_JOINT_RING_PROXIMAL_ULTRALEAP, 17) \
+ _(XR_HAND_FOREARM_JOINT_RING_INTERMEDIATE_ULTRALEAP, 18) \
+ _(XR_HAND_FOREARM_JOINT_RING_DISTAL_ULTRALEAP, 19) \
+ _(XR_HAND_FOREARM_JOINT_RING_TIP_ULTRALEAP, 20) \
+ _(XR_HAND_FOREARM_JOINT_LITTLE_METACARPAL_ULTRALEAP, 21) \
+ _(XR_HAND_FOREARM_JOINT_LITTLE_PROXIMAL_ULTRALEAP, 22) \
+ _(XR_HAND_FOREARM_JOINT_LITTLE_INTERMEDIATE_ULTRALEAP, 23) \
+ _(XR_HAND_FOREARM_JOINT_LITTLE_DISTAL_ULTRALEAP, 24) \
+ _(XR_HAND_FOREARM_JOINT_LITTLE_TIP_ULTRALEAP, 25) \
+ _(XR_HAND_FOREARM_JOINT_ELBOW_ULTRALEAP, 26) \
+ _(XR_HAND_FOREARM_JOINT_MAX_ENUM_ULTRALEAP, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrSpaceQueryActionFB(_) \
+ _(XR_SPACE_QUERY_ACTION_LOAD_FB, 0) \
+ _(XR_SPACE_QUERY_ACTION_MAX_ENUM_FB, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrSpaceStorageLocationFB(_) \
+ _(XR_SPACE_STORAGE_LOCATION_INVALID_FB, 0) \
+ _(XR_SPACE_STORAGE_LOCATION_LOCAL_FB, 1) \
+ _(XR_SPACE_STORAGE_LOCATION_MAX_ENUM_FB, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrSpacePersistenceModeFB(_) \
+ _(XR_SPACE_PERSISTENCE_MODE_INVALID_FB, 0) \
+ _(XR_SPACE_PERSISTENCE_MODE_INDEFINITE_FB, 1) \
+ _(XR_SPACE_PERSISTENCE_MODE_MAX_ENUM_FB, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrPerformanceMetricsCounterUnitMETA(_) \
+ _(XR_PERFORMANCE_METRICS_COUNTER_UNIT_GENERIC_META, 0) \
+ _(XR_PERFORMANCE_METRICS_COUNTER_UNIT_PERCENTAGE_META, 1) \
+ _(XR_PERFORMANCE_METRICS_COUNTER_UNIT_MILLISECONDS_META, 2) \
+ _(XR_PERFORMANCE_METRICS_COUNTER_UNIT_BYTES_META, 3) \
+ _(XR_PERFORMANCE_METRICS_COUNTER_UNIT_HERTZ_META, 4) \
+ _(XR_PERFORMANCE_METRICS_COUNTER_UNIT_MAX_ENUM_META, 0x7FFFFFFF)
+
#define XR_LIST_BITS_XrInstanceCreateFlags(_)
#define XR_LIST_BITS_XrSessionCreateFlags(_)
@@ -763,13 +856,27 @@ XR_ENUM_STR(XrResult);
_(XR_PASSTHROUGH_STATE_CHANGED_RECOVERABLE_ERROR_BIT_FB, 0x00000004) \
_(XR_PASSTHROUGH_STATE_CHANGED_RESTORED_ERROR_BIT_FB, 0x00000008) \
-#define XR_LIST_BITS_XrRenderModelFlagsFB(_)
+#define XR_LIST_BITS_XrRenderModelFlagsFB(_) \
+ _(XR_RENDER_MODEL_SUPPORTS_GLTF_2_0_SUBSET_1_BIT_FB, 0x00000001) \
+ _(XR_RENDER_MODEL_SUPPORTS_GLTF_2_0_SUBSET_2_BIT_FB, 0x00000002) \
-#define XR_LIST_BITS_XrCompositionLayerSpaceWarpInfoFlagsFB(_)
+#define XR_LIST_BITS_XrCompositionLayerSpaceWarpInfoFlagsFB(_) \
+ _(XR_COMPOSITION_LAYER_SPACE_WARP_INFO_FRAME_SKIP_BIT_FB, 0x00000001) \
#define XR_LIST_BITS_XrDigitalLensControlFlagsALMALENCE(_) \
_(XR_DIGITAL_LENS_CONTROL_PROCESSING_DISABLE_BIT_ALMALENCE, 0x00000001) \
+#define XR_LIST_BITS_XrCompositionLayerSettingsFlagsFB(_) \
+ _(XR_COMPOSITION_LAYER_SETTINGS_NORMAL_SUPER_SAMPLING_BIT_FB, 0x00000001) \
+ _(XR_COMPOSITION_LAYER_SETTINGS_QUALITY_SUPER_SAMPLING_BIT_FB, 0x00000002) \
+ _(XR_COMPOSITION_LAYER_SETTINGS_NORMAL_SHARPENING_BIT_FB, 0x00000004) \
+ _(XR_COMPOSITION_LAYER_SETTINGS_QUALITY_SHARPENING_BIT_FB, 0x00000008) \
+
+#define XR_LIST_BITS_XrPerformanceMetricsCounterFlagsMETA(_) \
+ _(XR_PERFORMANCE_METRICS_COUNTER_ANY_VALUE_VALID_BIT_META, 0x00000001) \
+ _(XR_PERFORMANCE_METRICS_COUNTER_UINT_VALUE_VALID_BIT_META, 0x00000002) \
+ _(XR_PERFORMANCE_METRICS_COUNTER_FLOAT_VALUE_VALID_BIT_META, 0x00000004) \
+
#define XR_LIST_STRUCT_XrApiLayerProperties(_) \
_(type) \
_(next) \
@@ -1568,6 +1675,23 @@ XR_ENUM_STR(XrResult);
_(nodeId) \
_(pose) \
+#define XR_LIST_STRUCT_XrSpatialGraphStaticNodeBindingCreateInfoMSFT(_) \
+ _(type) \
+ _(next) \
+ _(space) \
+ _(poseInSpace) \
+ _(time) \
+
+#define XR_LIST_STRUCT_XrSpatialGraphNodeBindingPropertiesGetInfoMSFT(_) \
+ _(type) \
+ _(next) \
+
+#define XR_LIST_STRUCT_XrSpatialGraphNodeBindingPropertiesMSFT(_) \
+ _(type) \
+ _(next) \
+ _(nodeId) \
+ _(poseInNodeSpace) \
+
#define XR_LIST_STRUCT_XrSystemHandTrackingPropertiesEXT(_) \
_(type) \
_(next) \
@@ -1762,6 +1886,19 @@ XR_ENUM_STR(XrResult);
_(next) \
_(flags) \
+#define XR_LIST_STRUCT_XrInteractionProfileDpadBindingEXT(_) \
+ _(type) \
+ _(next) \
+ _(binding) \
+ _(actionSet) \
+ _(forceThreshold) \
+ _(forceThresholdReleased) \
+ _(centerRegion) \
+ _(wedgeAngle) \
+ _(isSticky) \
+ _(onHaptic) \
+ _(offHaptic) \
+
#define XR_LIST_STRUCT_XrInteractionProfileAnalogThresholdVALVE(_) \
_(type) \
_(next) \
@@ -2047,6 +2184,52 @@ XR_ENUM_STR(XrResult);
_(next) \
_(capsules) \
+#define XR_LIST_STRUCT_XrSystemSpatialEntityPropertiesFB(_) \
+ _(type) \
+ _(next) \
+ _(supportsSpatialEntity) \
+
+#define XR_LIST_STRUCT_XrSpatialAnchorCreateInfoFB(_) \
+ _(type) \
+ _(next) \
+ _(space) \
+ _(poseInSpace) \
+ _(time) \
+
+#define XR_LIST_STRUCT_XrSpaceComponentStatusSetInfoFB(_) \
+ _(type) \
+ _(next) \
+ _(componentType) \
+ _(enabled) \
+ _(timeout) \
+
+#define XR_LIST_STRUCT_XrSpaceComponentStatusFB(_) \
+ _(type) \
+ _(next) \
+ _(enabled) \
+ _(changePending) \
+
+#define XR_LIST_STRUCT_XrUuidEXT(_) \
+ _(data) \
+
+#define XR_LIST_STRUCT_XrEventDataSpatialAnchorCreateCompleteFB(_) \
+ _(type) \
+ _(next) \
+ _(requestId) \
+ _(result) \
+ _(space) \
+ _(uuid) \
+
+#define XR_LIST_STRUCT_XrEventDataSpaceSetStatusCompleteFB(_) \
+ _(type) \
+ _(next) \
+ _(requestId) \
+ _(result) \
+ _(space) \
+ _(uuid) \
+ _(componentType) \
+ _(enabled) \
+
#define XR_LIST_STRUCT_XrFoveationProfileCreateInfoFB(_) \
_(type) \
_(next) \
@@ -2157,6 +2340,13 @@ XR_ENUM_STR(XrResult);
_(next) \
_(textureColorMap) \
+#define XR_LIST_STRUCT_XrPassthroughBrightnessContrastSaturationFB(_) \
+ _(type) \
+ _(next) \
+ _(brightness) \
+ _(contrast) \
+ _(saturation) \
+
#define XR_LIST_STRUCT_XrEventDataPassthroughStateChangedFB(_) \
_(type) \
_(next) \
@@ -2193,6 +2383,11 @@ XR_ENUM_STR(XrResult);
_(next) \
_(supportsRenderModelLoading) \
+#define XR_LIST_STRUCT_XrRenderModelCapabilitiesRequestFB(_) \
+ _(type) \
+ _(next) \
+ _(flags) \
+
#define XR_LIST_STRUCT_XrViewLocateFoveatedRenderingVARJO(_) \
_(type) \
_(next) \
@@ -2248,6 +2443,92 @@ XR_ENUM_STR(XrResult);
_(spatialAnchorStore) \
_(spatialAnchorPersistenceName) \
+#define XR_LIST_STRUCT_XrSpaceQueryInfoBaseHeaderFB(_) \
+ _(type) \
+ _(next) \
+
+#define XR_LIST_STRUCT_XrSpaceFilterInfoBaseHeaderFB(_) \
+ _(type) \
+ _(next) \
+
+#define XR_LIST_STRUCT_XrSpaceQueryInfoFB(_) \
+ _(type) \
+ _(next) \
+ _(queryAction) \
+ _(maxResultCount) \
+ _(timeout) \
+ _(filter) \
+ _(excludeFilter) \
+
+#define XR_LIST_STRUCT_XrSpaceStorageLocationFilterInfoFB(_) \
+ _(type) \
+ _(next) \
+ _(location) \
+
+#define XR_LIST_STRUCT_XrSpaceUuidFilterInfoFB(_) \
+ _(type) \
+ _(next) \
+ _(uuidCount) \
+ _(uuids) \
+
+#define XR_LIST_STRUCT_XrSpaceComponentFilterInfoFB(_) \
+ _(type) \
+ _(next) \
+ _(componentType) \
+
+#define XR_LIST_STRUCT_XrSpaceQueryResultFB(_) \
+ _(space) \
+ _(uuid) \
+
+#define XR_LIST_STRUCT_XrSpaceQueryResultsFB(_) \
+ _(type) \
+ _(next) \
+ _(resultCapacityInput) \
+ _(resultCountOutput) \
+ _(results) \
+
+#define XR_LIST_STRUCT_XrEventDataSpaceQueryResultsAvailableFB(_) \
+ _(type) \
+ _(next) \
+ _(requestId) \
+
+#define XR_LIST_STRUCT_XrEventDataSpaceQueryCompleteFB(_) \
+ _(type) \
+ _(next) \
+ _(requestId) \
+ _(result) \
+
+#define XR_LIST_STRUCT_XrSpaceSaveInfoFB(_) \
+ _(type) \
+ _(next) \
+ _(space) \
+ _(location) \
+ _(persistenceMode) \
+
+#define XR_LIST_STRUCT_XrSpaceEraseInfoFB(_) \
+ _(type) \
+ _(next) \
+ _(space) \
+ _(location) \
+
+#define XR_LIST_STRUCT_XrEventDataSpaceSaveCompleteFB(_) \
+ _(type) \
+ _(next) \
+ _(requestId) \
+ _(result) \
+ _(space) \
+ _(uuid) \
+ _(location) \
+
+#define XR_LIST_STRUCT_XrEventDataSpaceEraseCompleteFB(_) \
+ _(type) \
+ _(next) \
+ _(requestId) \
+ _(result) \
+ _(space) \
+ _(uuid) \
+ _(location) \
+
#define XR_LIST_STRUCT_XrSwapchainImageFoveationVulkanFB(_) \
_(type) \
_(next) \
@@ -2313,14 +2594,42 @@ XR_ENUM_STR(XrResult);
_(next) \
_(flags) \
+#define XR_LIST_STRUCT_XrSpaceContainerFB(_) \
+ _(type) \
+ _(next) \
+ _(uuidCapacityInput) \
+ _(uuidCountOutput) \
+ _(uuids) \
+
#define XR_LIST_STRUCT_XrPassthroughKeyboardHandsIntensityFB(_) \
_(type) \
_(next) \
_(leftHandIntensity) \
_(rightHandIntensity) \
-#define XR_LIST_STRUCT_XrUuidEXT(_) \
- _(data) \
+#define XR_LIST_STRUCT_XrCompositionLayerSettingsFB(_) \
+ _(type) \
+ _(next) \
+ _(layerFlags) \
+
+#define XR_LIST_STRUCT_XrVulkanSwapchainCreateInfoMETA(_) \
+ _(type) \
+ _(next) \
+ _(additionalCreateFlags) \
+ _(additionalUsageFlags) \
+
+#define XR_LIST_STRUCT_XrPerformanceMetricsStateMETA(_) \
+ _(type) \
+ _(next) \
+ _(enabled) \
+
+#define XR_LIST_STRUCT_XrPerformanceMetricsCounterMETA(_) \
+ _(type) \
+ _(next) \
+ _(counterFlags) \
+ _(counterUnit) \
+ _(uintValue) \
+ _(floatValue) \
@@ -2398,6 +2707,9 @@ XR_ENUM_STR(XrResult);
_(XrCompositionLayerAlphaBlendFB, XR_TYPE_COMPOSITION_LAYER_ALPHA_BLEND_FB) \
_(XrViewConfigurationDepthRangeEXT, XR_TYPE_VIEW_CONFIGURATION_DEPTH_RANGE_EXT) \
_(XrSpatialGraphNodeSpaceCreateInfoMSFT, XR_TYPE_SPATIAL_GRAPH_NODE_SPACE_CREATE_INFO_MSFT) \
+ _(XrSpatialGraphStaticNodeBindingCreateInfoMSFT, XR_TYPE_SPATIAL_GRAPH_STATIC_NODE_BINDING_CREATE_INFO_MSFT) \
+ _(XrSpatialGraphNodeBindingPropertiesGetInfoMSFT, XR_TYPE_SPATIAL_GRAPH_NODE_BINDING_PROPERTIES_GET_INFO_MSFT) \
+ _(XrSpatialGraphNodeBindingPropertiesMSFT, XR_TYPE_SPATIAL_GRAPH_NODE_BINDING_PROPERTIES_MSFT) \
_(XrSystemHandTrackingPropertiesEXT, XR_TYPE_SYSTEM_HAND_TRACKING_PROPERTIES_EXT) \
_(XrHandTrackerCreateInfoEXT, XR_TYPE_HAND_TRACKER_CREATE_INFO_EXT) \
_(XrHandJointsLocateInfoEXT, XR_TYPE_HAND_JOINTS_LOCATE_INFO_EXT) \
@@ -2423,6 +2735,7 @@ XR_ENUM_STR(XrResult);
_(XrCompositionLayerReprojectionInfoMSFT, XR_TYPE_COMPOSITION_LAYER_REPROJECTION_INFO_MSFT) \
_(XrCompositionLayerReprojectionPlaneOverrideMSFT, XR_TYPE_COMPOSITION_LAYER_REPROJECTION_PLANE_OVERRIDE_MSFT) \
_(XrCompositionLayerSecureContentFB, XR_TYPE_COMPOSITION_LAYER_SECURE_CONTENT_FB) \
+ _(XrInteractionProfileDpadBindingEXT, XR_TYPE_INTERACTION_PROFILE_DPAD_BINDING_EXT) \
_(XrInteractionProfileAnalogThresholdVALVE, XR_TYPE_INTERACTION_PROFILE_ANALOG_THRESHOLD_VALVE) \
_(XrHandJointsMotionRangeInfoEXT, XR_TYPE_HAND_JOINTS_MOTION_RANGE_INFO_EXT) \
_(XrSceneObserverCreateInfoMSFT, XR_TYPE_SCENE_OBSERVER_CREATE_INFO_MSFT) \
@@ -2457,6 +2770,12 @@ XR_ENUM_STR(XrResult);
_(XrHandTrackingScaleFB, XR_TYPE_HAND_TRACKING_SCALE_FB) \
_(XrHandTrackingAimStateFB, XR_TYPE_HAND_TRACKING_AIM_STATE_FB) \
_(XrHandTrackingCapsulesStateFB, XR_TYPE_HAND_TRACKING_CAPSULES_STATE_FB) \
+ _(XrSystemSpatialEntityPropertiesFB, XR_TYPE_SYSTEM_SPATIAL_ENTITY_PROPERTIES_FB) \
+ _(XrSpatialAnchorCreateInfoFB, XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_FB) \
+ _(XrSpaceComponentStatusSetInfoFB, XR_TYPE_SPACE_COMPONENT_STATUS_SET_INFO_FB) \
+ _(XrSpaceComponentStatusFB, XR_TYPE_SPACE_COMPONENT_STATUS_FB) \
+ _(XrEventDataSpatialAnchorCreateCompleteFB, XR_TYPE_EVENT_DATA_SPATIAL_ANCHOR_CREATE_COMPLETE_FB) \
+ _(XrEventDataSpaceSetStatusCompleteFB, XR_TYPE_EVENT_DATA_SPACE_SET_STATUS_COMPLETE_FB) \
_(XrFoveationProfileCreateInfoFB, XR_TYPE_FOVEATION_PROFILE_CREATE_INFO_FB) \
_(XrSwapchainCreateInfoFoveationFB, XR_TYPE_SWAPCHAIN_CREATE_INFO_FOVEATION_FB) \
_(XrSwapchainStateFoveationFB, XR_TYPE_SWAPCHAIN_STATE_FOVEATION_FB) \
@@ -2474,12 +2793,14 @@ XR_ENUM_STR(XrResult);
_(XrPassthroughStyleFB, XR_TYPE_PASSTHROUGH_STYLE_FB) \
_(XrPassthroughColorMapMonoToRgbaFB, XR_TYPE_PASSTHROUGH_COLOR_MAP_MONO_TO_RGBA_FB) \
_(XrPassthroughColorMapMonoToMonoFB, XR_TYPE_PASSTHROUGH_COLOR_MAP_MONO_TO_MONO_FB) \
+ _(XrPassthroughBrightnessContrastSaturationFB, XR_TYPE_PASSTHROUGH_BRIGHTNESS_CONTRAST_SATURATION_FB) \
_(XrEventDataPassthroughStateChangedFB, XR_TYPE_EVENT_DATA_PASSTHROUGH_STATE_CHANGED_FB) \
_(XrRenderModelPathInfoFB, XR_TYPE_RENDER_MODEL_PATH_INFO_FB) \
_(XrRenderModelPropertiesFB, XR_TYPE_RENDER_MODEL_PROPERTIES_FB) \
_(XrRenderModelBufferFB, XR_TYPE_RENDER_MODEL_BUFFER_FB) \
_(XrRenderModelLoadInfoFB, XR_TYPE_RENDER_MODEL_LOAD_INFO_FB) \
_(XrSystemRenderModelPropertiesFB, XR_TYPE_SYSTEM_RENDER_MODEL_PROPERTIES_FB) \
+ _(XrRenderModelCapabilitiesRequestFB, XR_TYPE_RENDER_MODEL_CAPABILITIES_REQUEST_FB) \
_(XrViewLocateFoveatedRenderingVARJO, XR_TYPE_VIEW_LOCATE_FOVEATED_RENDERING_VARJO) \
_(XrFoveatedViewConfigurationViewVARJO, XR_TYPE_FOVEATED_VIEW_CONFIGURATION_VIEW_VARJO) \
_(XrSystemFoveatedRenderingPropertiesVARJO, XR_TYPE_SYSTEM_FOVEATED_RENDERING_PROPERTIES_VARJO) \
@@ -2489,10 +2810,25 @@ XR_ENUM_STR(XrResult);
_(XrMarkerSpaceCreateInfoVARJO, XR_TYPE_MARKER_SPACE_CREATE_INFO_VARJO) \
_(XrSpatialAnchorPersistenceInfoMSFT, XR_TYPE_SPATIAL_ANCHOR_PERSISTENCE_INFO_MSFT) \
_(XrSpatialAnchorFromPersistedAnchorCreateInfoMSFT, XR_TYPE_SPATIAL_ANCHOR_FROM_PERSISTED_ANCHOR_CREATE_INFO_MSFT) \
+ _(XrSpaceQueryInfoFB, XR_TYPE_SPACE_QUERY_INFO_FB) \
+ _(XrSpaceStorageLocationFilterInfoFB, XR_TYPE_SPACE_STORAGE_LOCATION_FILTER_INFO_FB) \
+ _(XrSpaceUuidFilterInfoFB, XR_TYPE_SPACE_UUID_FILTER_INFO_FB) \
+ _(XrSpaceComponentFilterInfoFB, XR_TYPE_SPACE_COMPONENT_FILTER_INFO_FB) \
+ _(XrSpaceQueryResultsFB, XR_TYPE_SPACE_QUERY_RESULTS_FB) \
+ _(XrEventDataSpaceQueryResultsAvailableFB, XR_TYPE_EVENT_DATA_SPACE_QUERY_RESULTS_AVAILABLE_FB) \
+ _(XrEventDataSpaceQueryCompleteFB, XR_TYPE_EVENT_DATA_SPACE_QUERY_COMPLETE_FB) \
+ _(XrSpaceSaveInfoFB, XR_TYPE_SPACE_SAVE_INFO_FB) \
+ _(XrSpaceEraseInfoFB, XR_TYPE_SPACE_ERASE_INFO_FB) \
+ _(XrEventDataSpaceSaveCompleteFB, XR_TYPE_EVENT_DATA_SPACE_SAVE_COMPLETE_FB) \
+ _(XrEventDataSpaceEraseCompleteFB, XR_TYPE_EVENT_DATA_SPACE_ERASE_COMPLETE_FB) \
_(XrCompositionLayerSpaceWarpInfoFB, XR_TYPE_COMPOSITION_LAYER_SPACE_WARP_INFO_FB) \
_(XrSystemSpaceWarpPropertiesFB, XR_TYPE_SYSTEM_SPACE_WARP_PROPERTIES_FB) \
_(XrDigitalLensControlALMALENCE, XR_TYPE_DIGITAL_LENS_CONTROL_ALMALENCE) \
+ _(XrSpaceContainerFB, XR_TYPE_SPACE_CONTAINER_FB) \
_(XrPassthroughKeyboardHandsIntensityFB, XR_TYPE_PASSTHROUGH_KEYBOARD_HANDS_INTENSITY_FB) \
+ _(XrCompositionLayerSettingsFB, XR_TYPE_COMPOSITION_LAYER_SETTINGS_FB) \
+ _(XrPerformanceMetricsStateMETA, XR_TYPE_PERFORMANCE_METRICS_STATE_META) \
+ _(XrPerformanceMetricsCounterMETA, XR_TYPE_PERFORMANCE_METRICS_COUNTER_META) \
@@ -2596,6 +2932,7 @@ XR_ENUM_STR(XrResult);
_(XrVulkanGraphicsDeviceGetInfoKHR, XR_TYPE_VULKAN_GRAPHICS_DEVICE_GET_INFO_KHR) \
_(XrSwapchainImageFoveationVulkanFB, XR_TYPE_SWAPCHAIN_IMAGE_FOVEATION_VULKAN_FB) \
_(XrSwapchainStateSamplerVulkanFB, XR_TYPE_SWAPCHAIN_STATE_SAMPLER_VULKAN_FB) \
+ _(XrVulkanSwapchainCreateInfoMETA, XR_TYPE_VULKAN_SWAPCHAIN_CREATE_INFO_META) \
#else
@@ -2698,6 +3035,7 @@ XR_ENUM_STR(XrResult);
_(XR_FB_android_surface_swapchain_create, 71) \
_(XR_FB_swapchain_update_state, 72) \
_(XR_FB_composition_layer_secure_content, 73) \
+ _(XR_EXT_dpad_binding, 79) \
_(XR_VALVE_analog_threshold, 80) \
_(XR_EXT_hand_joints_motion_range, 81) \
_(XR_KHR_loader_init, 89) \
@@ -2714,10 +3052,13 @@ XR_ENUM_STR(XrResult);
_(XR_HTCX_vive_tracker_interaction, 104) \
_(XR_HTC_facial_tracking, 105) \
_(XR_HTC_vive_focus3_controller_interaction, 106) \
+ _(XR_HTC_hand_interaction, 107) \
+ _(XR_HTC_vive_wrist_tracker_interaction, 108) \
_(XR_FB_color_space, 109) \
_(XR_FB_hand_tracking_mesh, 111) \
_(XR_FB_hand_tracking_aim, 112) \
_(XR_FB_hand_tracking_capsules, 113) \
+ _(XR_FB_spatial_entity, 114) \
_(XR_FB_foveation, 115) \
_(XR_FB_foveation_configuration, 116) \
_(XR_FB_keyboard_tracking, 117) \
@@ -2729,7 +3070,11 @@ XR_ENUM_STR(XrResult);
_(XR_VARJO_composition_layer_depth_test, 123) \
_(XR_VARJO_environment_depth_estimation, 124) \
_(XR_VARJO_marker_tracking, 125) \
+ _(XR_VARJO_view_offset, 126) \
_(XR_MSFT_spatial_anchor_persistence, 143) \
+ _(XR_ULTRALEAP_hand_tracking_forearm, 150) \
+ _(XR_FB_spatial_entity_query, 157) \
+ _(XR_FB_spatial_entity_storage, 159) \
_(XR_OCULUS_audio_device_guid, 160) \
_(XR_FB_foveation_vulkan, 161) \
_(XR_FB_swapchain_update_state_android_surface, 162) \
@@ -2738,7 +3083,11 @@ XR_ENUM_STR(XrResult);
_(XR_KHR_swapchain_usage_input_attachment_bit, 166) \
_(XR_FB_space_warp, 172) \
_(XR_ALMALENCE_digital_lens_control, 197) \
+ _(XR_FB_spatial_entity_container, 200) \
_(XR_FB_passthrough_keyboard_hands, 204) \
+ _(XR_FB_composition_layer_settings, 205) \
+ _(XR_META_vulkan_swapchain_create_info, 228) \
+ _(XR_META_performance_metrics, 233) \
_(XR_EXT_uuid, 300) \
diff --git a/thirdparty/openxr/src/common/xr_linear.h b/thirdparty/openxr/src/common/xr_linear.h
index 9ffb49a4b6..1f0e803b7a 100644
--- a/thirdparty/openxr/src/common/xr_linear.h
+++ b/thirdparty/openxr/src/common/xr_linear.h
@@ -126,12 +126,12 @@ static const XrColor4f XrColorCyan = {0.0f, 1.0f, 1.0f, 1.0f};
static const XrColor4f XrColorLightGrey = {0.7f, 0.7f, 0.7f, 1.0f};
static const XrColor4f XrColorDarkGrey = {0.3f, 0.3f, 0.3f, 1.0f};
-enum GraphicsAPI { GRAPHICS_VULKAN, GRAPHICS_OPENGL, GRAPHICS_OPENGL_ES, GRAPHICS_D3D };
+typedef enum GraphicsAPI { GRAPHICS_VULKAN, GRAPHICS_OPENGL, GRAPHICS_OPENGL_ES, GRAPHICS_D3D } GraphicsAPI;
// Column-major, pre-multiplied. This type does not exist in the OpenXR API and is provided for convenience.
-struct XrMatrix4x4f {
+typedef struct XrMatrix4x4f {
float m[16];
-};
+} XrMatrix4x4f;
inline static float XrRcpSqrt(const float x) {
const float SMALLEST_NON_DENORMAL = 1.1754943508222875e-038f; // ( 1U << 23 )
diff --git a/thirdparty/openxr/src/xr_generated_dispatch_table.c b/thirdparty/openxr/src/xr_generated_dispatch_table.c
index 79fbefc52a..91fa0c3ca0 100644
--- a/thirdparty/openxr/src/xr_generated_dispatch_table.c
+++ b/thirdparty/openxr/src/xr_generated_dispatch_table.c
@@ -202,6 +202,9 @@ void GeneratedXrPopulateDispatchTable(struct XrGeneratedDispatchTable *table,
// ---- XR_MSFT_spatial_graph_bridge extension commands
(get_inst_proc_addr(instance, "xrCreateSpatialGraphNodeSpaceMSFT", (PFN_xrVoidFunction*)&table->CreateSpatialGraphNodeSpaceMSFT));
+ (get_inst_proc_addr(instance, "xrTryCreateSpatialGraphStaticNodeBindingMSFT", (PFN_xrVoidFunction*)&table->TryCreateSpatialGraphStaticNodeBindingMSFT));
+ (get_inst_proc_addr(instance, "xrDestroySpatialGraphNodeBindingMSFT", (PFN_xrVoidFunction*)&table->DestroySpatialGraphNodeBindingMSFT));
+ (get_inst_proc_addr(instance, "xrGetSpatialGraphNodeBindingPropertiesMSFT", (PFN_xrVoidFunction*)&table->GetSpatialGraphNodeBindingPropertiesMSFT));
// ---- XR_EXT_hand_tracking extension commands
(get_inst_proc_addr(instance, "xrCreateHandTrackerEXT", (PFN_xrVoidFunction*)&table->CreateHandTrackerEXT));
@@ -269,6 +272,13 @@ void GeneratedXrPopulateDispatchTable(struct XrGeneratedDispatchTable *table,
// ---- XR_FB_hand_tracking_mesh extension commands
(get_inst_proc_addr(instance, "xrGetHandMeshFB", (PFN_xrVoidFunction*)&table->GetHandMeshFB));
+ // ---- XR_FB_spatial_entity extension commands
+ (get_inst_proc_addr(instance, "xrCreateSpatialAnchorFB", (PFN_xrVoidFunction*)&table->CreateSpatialAnchorFB));
+ (get_inst_proc_addr(instance, "xrGetSpaceUuidFB", (PFN_xrVoidFunction*)&table->GetSpaceUuidFB));
+ (get_inst_proc_addr(instance, "xrEnumerateSpaceSupportedComponentsFB", (PFN_xrVoidFunction*)&table->EnumerateSpaceSupportedComponentsFB));
+ (get_inst_proc_addr(instance, "xrSetSpaceComponentStatusFB", (PFN_xrVoidFunction*)&table->SetSpaceComponentStatusFB));
+ (get_inst_proc_addr(instance, "xrGetSpaceComponentStatusFB", (PFN_xrVoidFunction*)&table->GetSpaceComponentStatusFB));
+
// ---- XR_FB_foveation extension commands
(get_inst_proc_addr(instance, "xrCreateFoveationProfileFB", (PFN_xrVoidFunction*)&table->CreateFoveationProfileFB));
(get_inst_proc_addr(instance, "xrDestroyFoveationProfileFB", (PFN_xrVoidFunction*)&table->DestroyFoveationProfileFB));
@@ -316,6 +326,9 @@ void GeneratedXrPopulateDispatchTable(struct XrGeneratedDispatchTable *table,
(get_inst_proc_addr(instance, "xrGetMarkerSizeVARJO", (PFN_xrVoidFunction*)&table->GetMarkerSizeVARJO));
(get_inst_proc_addr(instance, "xrCreateMarkerSpaceVARJO", (PFN_xrVoidFunction*)&table->CreateMarkerSpaceVARJO));
+ // ---- XR_VARJO_view_offset extension commands
+ (get_inst_proc_addr(instance, "xrSetViewOffsetVARJO", (PFN_xrVoidFunction*)&table->SetViewOffsetVARJO));
+
// ---- XR_MSFT_spatial_anchor_persistence extension commands
(get_inst_proc_addr(instance, "xrCreateSpatialAnchorStoreConnectionMSFT", (PFN_xrVoidFunction*)&table->CreateSpatialAnchorStoreConnectionMSFT));
(get_inst_proc_addr(instance, "xrDestroySpatialAnchorStoreConnectionMSFT", (PFN_xrVoidFunction*)&table->DestroySpatialAnchorStoreConnectionMSFT));
@@ -325,6 +338,14 @@ void GeneratedXrPopulateDispatchTable(struct XrGeneratedDispatchTable *table,
(get_inst_proc_addr(instance, "xrUnpersistSpatialAnchorMSFT", (PFN_xrVoidFunction*)&table->UnpersistSpatialAnchorMSFT));
(get_inst_proc_addr(instance, "xrClearSpatialAnchorStoreMSFT", (PFN_xrVoidFunction*)&table->ClearSpatialAnchorStoreMSFT));
+ // ---- XR_FB_spatial_entity_query extension commands
+ (get_inst_proc_addr(instance, "xrQuerySpacesFB", (PFN_xrVoidFunction*)&table->QuerySpacesFB));
+ (get_inst_proc_addr(instance, "xrRetrieveSpaceQueryResultsFB", (PFN_xrVoidFunction*)&table->RetrieveSpaceQueryResultsFB));
+
+ // ---- XR_FB_spatial_entity_storage extension commands
+ (get_inst_proc_addr(instance, "xrSaveSpaceFB", (PFN_xrVoidFunction*)&table->SaveSpaceFB));
+ (get_inst_proc_addr(instance, "xrEraseSpaceFB", (PFN_xrVoidFunction*)&table->EraseSpaceFB));
+
// ---- XR_OCULUS_audio_device_guid extension commands
#if defined(XR_USE_PLATFORM_WIN32)
(get_inst_proc_addr(instance, "xrGetAudioOutputDeviceGuidOculus", (PFN_xrVoidFunction*)&table->GetAudioOutputDeviceGuidOculus));
@@ -336,8 +357,17 @@ void GeneratedXrPopulateDispatchTable(struct XrGeneratedDispatchTable *table,
// ---- XR_ALMALENCE_digital_lens_control extension commands
(get_inst_proc_addr(instance, "xrSetDigitalLensControlALMALENCE", (PFN_xrVoidFunction*)&table->SetDigitalLensControlALMALENCE));
+ // ---- XR_FB_spatial_entity_container extension commands
+ (get_inst_proc_addr(instance, "xrGetSpaceContainerFB", (PFN_xrVoidFunction*)&table->GetSpaceContainerFB));
+
// ---- XR_FB_passthrough_keyboard_hands extension commands
(get_inst_proc_addr(instance, "xrPassthroughLayerSetKeyboardHandsIntensityFB", (PFN_xrVoidFunction*)&table->PassthroughLayerSetKeyboardHandsIntensityFB));
+
+ // ---- XR_META_performance_metrics extension commands
+ (get_inst_proc_addr(instance, "xrEnumeratePerformanceMetricsCounterPathsMETA", (PFN_xrVoidFunction*)&table->EnumeratePerformanceMetricsCounterPathsMETA));
+ (get_inst_proc_addr(instance, "xrSetPerformanceMetricsStateMETA", (PFN_xrVoidFunction*)&table->SetPerformanceMetricsStateMETA));
+ (get_inst_proc_addr(instance, "xrGetPerformanceMetricsStateMETA", (PFN_xrVoidFunction*)&table->GetPerformanceMetricsStateMETA));
+ (get_inst_proc_addr(instance, "xrQueryPerformanceMetricsCounterMETA", (PFN_xrVoidFunction*)&table->QueryPerformanceMetricsCounterMETA));
}
diff --git a/thirdparty/openxr/src/xr_generated_dispatch_table.h b/thirdparty/openxr/src/xr_generated_dispatch_table.h
index 34e0de93f5..51d48bef43 100644
--- a/thirdparty/openxr/src/xr_generated_dispatch_table.h
+++ b/thirdparty/openxr/src/xr_generated_dispatch_table.h
@@ -205,6 +205,9 @@ struct XrGeneratedDispatchTable {
// ---- XR_MSFT_spatial_graph_bridge extension commands
PFN_xrCreateSpatialGraphNodeSpaceMSFT CreateSpatialGraphNodeSpaceMSFT;
+ PFN_xrTryCreateSpatialGraphStaticNodeBindingMSFT TryCreateSpatialGraphStaticNodeBindingMSFT;
+ PFN_xrDestroySpatialGraphNodeBindingMSFT DestroySpatialGraphNodeBindingMSFT;
+ PFN_xrGetSpatialGraphNodeBindingPropertiesMSFT GetSpatialGraphNodeBindingPropertiesMSFT;
// ---- XR_EXT_hand_tracking extension commands
PFN_xrCreateHandTrackerEXT CreateHandTrackerEXT;
@@ -272,6 +275,13 @@ struct XrGeneratedDispatchTable {
// ---- XR_FB_hand_tracking_mesh extension commands
PFN_xrGetHandMeshFB GetHandMeshFB;
+ // ---- XR_FB_spatial_entity extension commands
+ PFN_xrCreateSpatialAnchorFB CreateSpatialAnchorFB;
+ PFN_xrGetSpaceUuidFB GetSpaceUuidFB;
+ PFN_xrEnumerateSpaceSupportedComponentsFB EnumerateSpaceSupportedComponentsFB;
+ PFN_xrSetSpaceComponentStatusFB SetSpaceComponentStatusFB;
+ PFN_xrGetSpaceComponentStatusFB GetSpaceComponentStatusFB;
+
// ---- XR_FB_foveation extension commands
PFN_xrCreateFoveationProfileFB CreateFoveationProfileFB;
PFN_xrDestroyFoveationProfileFB DestroyFoveationProfileFB;
@@ -319,6 +329,9 @@ struct XrGeneratedDispatchTable {
PFN_xrGetMarkerSizeVARJO GetMarkerSizeVARJO;
PFN_xrCreateMarkerSpaceVARJO CreateMarkerSpaceVARJO;
+ // ---- XR_VARJO_view_offset extension commands
+ PFN_xrSetViewOffsetVARJO SetViewOffsetVARJO;
+
// ---- XR_MSFT_spatial_anchor_persistence extension commands
PFN_xrCreateSpatialAnchorStoreConnectionMSFT CreateSpatialAnchorStoreConnectionMSFT;
PFN_xrDestroySpatialAnchorStoreConnectionMSFT DestroySpatialAnchorStoreConnectionMSFT;
@@ -328,6 +341,14 @@ struct XrGeneratedDispatchTable {
PFN_xrUnpersistSpatialAnchorMSFT UnpersistSpatialAnchorMSFT;
PFN_xrClearSpatialAnchorStoreMSFT ClearSpatialAnchorStoreMSFT;
+ // ---- XR_FB_spatial_entity_query extension commands
+ PFN_xrQuerySpacesFB QuerySpacesFB;
+ PFN_xrRetrieveSpaceQueryResultsFB RetrieveSpaceQueryResultsFB;
+
+ // ---- XR_FB_spatial_entity_storage extension commands
+ PFN_xrSaveSpaceFB SaveSpaceFB;
+ PFN_xrEraseSpaceFB EraseSpaceFB;
+
// ---- XR_OCULUS_audio_device_guid extension commands
#if defined(XR_USE_PLATFORM_WIN32)
PFN_xrGetAudioOutputDeviceGuidOculus GetAudioOutputDeviceGuidOculus;
@@ -339,8 +360,17 @@ struct XrGeneratedDispatchTable {
// ---- XR_ALMALENCE_digital_lens_control extension commands
PFN_xrSetDigitalLensControlALMALENCE SetDigitalLensControlALMALENCE;
+ // ---- XR_FB_spatial_entity_container extension commands
+ PFN_xrGetSpaceContainerFB GetSpaceContainerFB;
+
// ---- XR_FB_passthrough_keyboard_hands extension commands
PFN_xrPassthroughLayerSetKeyboardHandsIntensityFB PassthroughLayerSetKeyboardHandsIntensityFB;
+
+ // ---- XR_META_performance_metrics extension commands
+ PFN_xrEnumeratePerformanceMetricsCounterPathsMETA EnumeratePerformanceMetricsCounterPathsMETA;
+ PFN_xrSetPerformanceMetricsStateMETA SetPerformanceMetricsStateMETA;
+ PFN_xrGetPerformanceMetricsStateMETA GetPerformanceMetricsStateMETA;
+ PFN_xrQueryPerformanceMetricsCounterMETA QueryPerformanceMetricsCounterMETA;
};
diff --git a/thirdparty/zstd/common/bitstream.h b/thirdparty/zstd/common/bitstream.h
index 2e5a933ad3..84b6062ff3 100644
--- a/thirdparty/zstd/common/bitstream.h
+++ b/thirdparty/zstd/common/bitstream.h
@@ -143,10 +143,16 @@ MEM_STATIC unsigned BIT_highbit32 (U32 val)
{
# if defined(_MSC_VER) /* Visual */
# if STATIC_BMI2 == 1
- return _lzcnt_u32(val) ^ 31;
+ return _lzcnt_u32(val) ^ 31;
# else
- unsigned long r = 0;
- return _BitScanReverse(&r, val) ? (unsigned)r : 0;
+ if (val != 0) {
+ unsigned long r;
+ _BitScanReverse(&r, val);
+ return (unsigned)r;
+ } else {
+ /* Should not reach this code path */
+ __assume(0);
+ }
# endif
# elif defined(__GNUC__) && (__GNUC__ >= 3) /* Use GCC Intrinsic */
return __builtin_clz (val) ^ 31;
@@ -293,22 +299,22 @@ MEM_STATIC size_t BIT_initDStream(BIT_DStream_t* bitD, const void* srcBuffer, si
switch(srcSize)
{
case 7: bitD->bitContainer += (size_t)(((const BYTE*)(srcBuffer))[6]) << (sizeof(bitD->bitContainer)*8 - 16);
- /* fall-through */
+ ZSTD_FALLTHROUGH;
case 6: bitD->bitContainer += (size_t)(((const BYTE*)(srcBuffer))[5]) << (sizeof(bitD->bitContainer)*8 - 24);
- /* fall-through */
+ ZSTD_FALLTHROUGH;
case 5: bitD->bitContainer += (size_t)(((const BYTE*)(srcBuffer))[4]) << (sizeof(bitD->bitContainer)*8 - 32);
- /* fall-through */
+ ZSTD_FALLTHROUGH;
case 4: bitD->bitContainer += (size_t)(((const BYTE*)(srcBuffer))[3]) << 24;
- /* fall-through */
+ ZSTD_FALLTHROUGH;
case 3: bitD->bitContainer += (size_t)(((const BYTE*)(srcBuffer))[2]) << 16;
- /* fall-through */
+ ZSTD_FALLTHROUGH;
case 2: bitD->bitContainer += (size_t)(((const BYTE*)(srcBuffer))[1]) << 8;
- /* fall-through */
+ ZSTD_FALLTHROUGH;
default: break;
}
@@ -332,7 +338,16 @@ MEM_STATIC FORCE_INLINE_ATTR size_t BIT_getMiddleBits(size_t bitContainer, U32 c
U32 const regMask = sizeof(bitContainer)*8 - 1;
/* if start > regMask, bitstream is corrupted, and result is undefined */
assert(nbBits < BIT_MASK_SIZE);
+ /* x86 transform & ((1 << nbBits) - 1) to bzhi instruction, it is better
+ * than accessing memory. When bmi2 instruction is not present, we consider
+ * such cpus old (pre-Haswell, 2013) and their performance is not of that
+ * importance.
+ */
+#if defined(__x86_64__) || defined(_M_X86)
+ return (bitContainer >> (start & regMask)) & ((((U64)1) << nbBits) - 1);
+#else
return (bitContainer >> (start & regMask)) & BIT_mask[nbBits];
+#endif
}
MEM_STATIC FORCE_INLINE_ATTR size_t BIT_getLowerBits(size_t bitContainer, U32 const nbBits)
diff --git a/thirdparty/zstd/common/compiler.h b/thirdparty/zstd/common/compiler.h
index a951d0adea..516930c01e 100644
--- a/thirdparty/zstd/common/compiler.h
+++ b/thirdparty/zstd/common/compiler.h
@@ -11,6 +11,8 @@
#ifndef ZSTD_COMPILER_H
#define ZSTD_COMPILER_H
+#include "portability_macros.h"
+
/*-*******************************************************
* Compiler specifics
*********************************************************/
@@ -40,7 +42,7 @@
/**
On MSVC qsort requires that functions passed into it use the __cdecl calling conversion(CC).
- This explictly marks such functions as __cdecl so that the code will still compile
+ This explicitly marks such functions as __cdecl so that the code will still compile
if a CC other than __cdecl has been made the default.
*/
#if defined(_MSC_VER)
@@ -92,29 +94,17 @@
/* target attribute */
-#ifndef __has_attribute
- #define __has_attribute(x) 0 /* Compatibility with non-clang compilers. */
-#endif
#if defined(__GNUC__) || defined(__ICCARM__)
# define TARGET_ATTRIBUTE(target) __attribute__((__target__(target)))
#else
# define TARGET_ATTRIBUTE(target)
#endif
-/* Enable runtime BMI2 dispatch based on the CPU.
- * Enabled for clang & gcc >=4.8 on x86 when BMI2 isn't enabled by default.
+/* Target attribute for BMI2 dynamic dispatch.
+ * Enable lzcnt, bmi, and bmi2.
+ * We test for bmi1 & bmi2. lzcnt is included in bmi1.
*/
-#ifndef DYNAMIC_BMI2
- #if ((defined(__clang__) && __has_attribute(__target__)) \
- || (defined(__GNUC__) \
- && (__GNUC__ >= 5 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8)))) \
- && (defined(__x86_64__) || defined(_M_X86)) \
- && !defined(__BMI2__)
- # define DYNAMIC_BMI2 1
- #else
- # define DYNAMIC_BMI2 0
- #endif
-#endif
+#define BMI2_TARGET_ATTRIBUTE TARGET_ATTRIBUTE("lzcnt,bmi,bmi2")
/* prefetch
* can be disabled, by declaring NO_PREFETCH build macro */
@@ -150,8 +140,9 @@
}
/* vectorization
- * older GCC (pre gcc-4.3 picked as the cutoff) uses a different syntax */
-#if !defined(__INTEL_COMPILER) && !defined(__clang__) && defined(__GNUC__)
+ * older GCC (pre gcc-4.3 picked as the cutoff) uses a different syntax,
+ * and some compilers, like Intel ICC and MCST LCC, do not support it at all. */
+#if !defined(__INTEL_COMPILER) && !defined(__clang__) && defined(__GNUC__) && !defined(__LCC__)
# if (__GNUC__ == 4 && __GNUC_MINOR__ > 3) || (__GNUC__ >= 5)
# define DONT_VECTORIZE __attribute__((optimize("no-tree-vectorize")))
# else
@@ -197,25 +188,91 @@
#define STATIC_BMI2 0
#endif
-/* compat. with non-clang compilers */
-#ifndef __has_builtin
-# define __has_builtin(x) 0
+/* compile time determination of SIMD support */
+#if !defined(ZSTD_NO_INTRINSICS)
+# if defined(__SSE2__) || defined(_M_AMD64) || (defined (_M_IX86) && defined(_M_IX86_FP) && (_M_IX86_FP >= 2))
+# define ZSTD_ARCH_X86_SSE2
+# endif
+# if defined(__ARM_NEON) || defined(_M_ARM64)
+# define ZSTD_ARCH_ARM_NEON
+# endif
+#
+# if defined(ZSTD_ARCH_X86_SSE2)
+# include <emmintrin.h>
+# elif defined(ZSTD_ARCH_ARM_NEON)
+# include <arm_neon.h>
+# endif
#endif
-/* compat. with non-clang compilers */
-#ifndef __has_feature
-# define __has_feature(x) 0
+/* C-language Attributes are added in C23. */
+#if defined(__STDC_VERSION__) && (__STDC_VERSION__ > 201710L) && defined(__has_c_attribute)
+# define ZSTD_HAS_C_ATTRIBUTE(x) __has_c_attribute(x)
+#else
+# define ZSTD_HAS_C_ATTRIBUTE(x) 0
#endif
-/* detects whether we are being compiled under msan */
-#ifndef ZSTD_MEMORY_SANITIZER
-# if __has_feature(memory_sanitizer)
-# define ZSTD_MEMORY_SANITIZER 1
-# else
-# define ZSTD_MEMORY_SANITIZER 0
-# endif
+/* Only use C++ attributes in C++. Some compilers report support for C++
+ * attributes when compiling with C.
+ */
+#if defined(__cplusplus) && defined(__has_cpp_attribute)
+# define ZSTD_HAS_CPP_ATTRIBUTE(x) __has_cpp_attribute(x)
+#else
+# define ZSTD_HAS_CPP_ATTRIBUTE(x) 0
#endif
+/* Define ZSTD_FALLTHROUGH macro for annotating switch case with the 'fallthrough' attribute.
+ * - C23: https://en.cppreference.com/w/c/language/attributes/fallthrough
+ * - CPP17: https://en.cppreference.com/w/cpp/language/attributes/fallthrough
+ * - Else: __attribute__((__fallthrough__))
+ */
+#ifndef ZSTD_FALLTHROUGH
+# if ZSTD_HAS_C_ATTRIBUTE(fallthrough)
+# define ZSTD_FALLTHROUGH [[fallthrough]]
+# elif ZSTD_HAS_CPP_ATTRIBUTE(fallthrough)
+# define ZSTD_FALLTHROUGH [[fallthrough]]
+# elif __has_attribute(__fallthrough__)
+/* Leading semicolon is to satisfy gcc-11 with -pedantic. Without the semicolon
+ * gcc complains about: a label can only be part of a statement and a declaration is not a statement.
+ */
+# define ZSTD_FALLTHROUGH ; __attribute__((__fallthrough__))
+# else
+# define ZSTD_FALLTHROUGH
+# endif
+#endif
+
+/*-**************************************************************
+* Alignment check
+*****************************************************************/
+
+/* this test was initially positioned in mem.h,
+ * but this file is removed (or replaced) for linux kernel
+ * so it's now hosted in compiler.h,
+ * which remains valid for both user & kernel spaces.
+ */
+
+#ifndef ZSTD_ALIGNOF
+# if defined(__GNUC__) || defined(_MSC_VER)
+/* covers gcc, clang & MSVC */
+/* note : this section must come first, before C11,
+ * due to a limitation in the kernel source generator */
+# define ZSTD_ALIGNOF(T) __alignof(T)
+
+# elif defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L)
+/* C11 support */
+# include <stdalign.h>
+# define ZSTD_ALIGNOF(T) alignof(T)
+
+# else
+/* No known support for alignof() - imperfect backup */
+# define ZSTD_ALIGNOF(T) (sizeof(void*) < sizeof(T) ? sizeof(void*) : sizeof(T))
+
+# endif
+#endif /* ZSTD_ALIGNOF */
+
+/*-**************************************************************
+* Sanitizer
+*****************************************************************/
+
#if ZSTD_MEMORY_SANITIZER
/* Not all platforms that support msan provide sanitizers/msan_interface.h.
* We therefore declare the functions we need ourselves, rather than trying to
@@ -237,17 +294,6 @@ void __msan_poison(const volatile void *a, size_t size);
intptr_t __msan_test_shadow(const volatile void *x, size_t size);
#endif
-/* detects whether we are being compiled under asan */
-#ifndef ZSTD_ADDRESS_SANITIZER
-# if __has_feature(address_sanitizer)
-# define ZSTD_ADDRESS_SANITIZER 1
-# elif defined(__SANITIZE_ADDRESS__)
-# define ZSTD_ADDRESS_SANITIZER 1
-# else
-# define ZSTD_ADDRESS_SANITIZER 0
-# endif
-#endif
-
#if ZSTD_ADDRESS_SANITIZER
/* Not all platforms that support asan provide sanitizers/asan_interface.h.
* We therefore declare the functions we need ourselves, rather than trying to
diff --git a/thirdparty/zstd/common/entropy_common.c b/thirdparty/zstd/common/entropy_common.c
index 41cd69566b..4229b40c5e 100644
--- a/thirdparty/zstd/common/entropy_common.c
+++ b/thirdparty/zstd/common/entropy_common.c
@@ -43,8 +43,14 @@ static U32 FSE_ctz(U32 val)
assert(val != 0);
{
# if defined(_MSC_VER) /* Visual */
- unsigned long r=0;
- return _BitScanForward(&r, val) ? (unsigned)r : 0;
+ if (val != 0) {
+ unsigned long r;
+ _BitScanForward(&r, val);
+ return (unsigned)r;
+ } else {
+ /* Should not reach this code path */
+ __assume(0);
+ }
# elif defined(__GNUC__) && (__GNUC__ >= 3) /* GCC Intrinsic */
return __builtin_ctz(val);
# elif defined(__ICCARM__) /* IAR Intrinsic */
@@ -217,7 +223,7 @@ static size_t FSE_readNCount_body_default(
}
#if DYNAMIC_BMI2
-TARGET_ATTRIBUTE("bmi2") static size_t FSE_readNCount_body_bmi2(
+BMI2_TARGET_ATTRIBUTE static size_t FSE_readNCount_body_bmi2(
short* normalizedCounter, unsigned* maxSVPtr, unsigned* tableLogPtr,
const void* headerBuffer, size_t hbSize)
{
@@ -299,7 +305,7 @@ HUF_readStats_body(BYTE* huffWeight, size_t hwSize, U32* rankStats,
ZSTD_memset(rankStats, 0, (HUF_TABLELOG_MAX + 1) * sizeof(U32));
weightTotal = 0;
{ U32 n; for (n=0; n<oSize; n++) {
- if (huffWeight[n] >= HUF_TABLELOG_MAX) return ERROR(corruption_detected);
+ if (huffWeight[n] > HUF_TABLELOG_MAX) return ERROR(corruption_detected);
rankStats[huffWeight[n]]++;
weightTotal += (1 << huffWeight[n]) >> 1;
} }
@@ -337,7 +343,7 @@ static size_t HUF_readStats_body_default(BYTE* huffWeight, size_t hwSize, U32* r
}
#if DYNAMIC_BMI2
-static TARGET_ATTRIBUTE("bmi2") size_t HUF_readStats_body_bmi2(BYTE* huffWeight, size_t hwSize, U32* rankStats,
+static BMI2_TARGET_ATTRIBUTE size_t HUF_readStats_body_bmi2(BYTE* huffWeight, size_t hwSize, U32* rankStats,
U32* nbSymbolsPtr, U32* tableLogPtr,
const void* src, size_t srcSize,
void* workSpace, size_t wkspSize)
diff --git a/thirdparty/zstd/common/error_private.h b/thirdparty/zstd/common/error_private.h
index 6d8b9f7763..007d81066a 100644
--- a/thirdparty/zstd/common/error_private.h
+++ b/thirdparty/zstd/common/error_private.h
@@ -22,6 +22,8 @@ extern "C" {
* Dependencies
******************************************/
#include "../zstd_errors.h" /* enum list */
+#include "compiler.h"
+#include "debug.h"
#include "zstd_deps.h" /* size_t */
@@ -73,6 +75,83 @@ ERR_STATIC const char* ERR_getErrorName(size_t code)
return ERR_getErrorString(ERR_getErrorCode(code));
}
+/**
+ * Ignore: this is an internal helper.
+ *
+ * This is a helper function to help force C99-correctness during compilation.
+ * Under strict compilation modes, variadic macro arguments can't be empty.
+ * However, variadic function arguments can be. Using a function therefore lets
+ * us statically check that at least one (string) argument was passed,
+ * independent of the compilation flags.
+ */
+static INLINE_KEYWORD UNUSED_ATTR
+void _force_has_format_string(const char *format, ...) {
+ (void)format;
+}
+
+/**
+ * Ignore: this is an internal helper.
+ *
+ * We want to force this function invocation to be syntactically correct, but
+ * we don't want to force runtime evaluation of its arguments.
+ */
+#define _FORCE_HAS_FORMAT_STRING(...) \
+ if (0) { \
+ _force_has_format_string(__VA_ARGS__); \
+ }
+
+#define ERR_QUOTE(str) #str
+
+/**
+ * Return the specified error if the condition evaluates to true.
+ *
+ * In debug modes, prints additional information.
+ * In order to do that (particularly, printing the conditional that failed),
+ * this can't just wrap RETURN_ERROR().
+ */
+#define RETURN_ERROR_IF(cond, err, ...) \
+ if (cond) { \
+ RAWLOG(3, "%s:%d: ERROR!: check %s failed, returning %s", \
+ __FILE__, __LINE__, ERR_QUOTE(cond), ERR_QUOTE(ERROR(err))); \
+ _FORCE_HAS_FORMAT_STRING(__VA_ARGS__); \
+ RAWLOG(3, ": " __VA_ARGS__); \
+ RAWLOG(3, "\n"); \
+ return ERROR(err); \
+ }
+
+/**
+ * Unconditionally return the specified error.
+ *
+ * In debug modes, prints additional information.
+ */
+#define RETURN_ERROR(err, ...) \
+ do { \
+ RAWLOG(3, "%s:%d: ERROR!: unconditional check failed, returning %s", \
+ __FILE__, __LINE__, ERR_QUOTE(ERROR(err))); \
+ _FORCE_HAS_FORMAT_STRING(__VA_ARGS__); \
+ RAWLOG(3, ": " __VA_ARGS__); \
+ RAWLOG(3, "\n"); \
+ return ERROR(err); \
+ } while(0);
+
+/**
+ * If the provided expression evaluates to an error code, returns that error code.
+ *
+ * In debug modes, prints additional information.
+ */
+#define FORWARD_IF_ERROR(err, ...) \
+ do { \
+ size_t const err_code = (err); \
+ if (ERR_isError(err_code)) { \
+ RAWLOG(3, "%s:%d: ERROR!: forwarding error in %s: %s", \
+ __FILE__, __LINE__, ERR_QUOTE(err), ERR_getErrorName(err_code)); \
+ _FORCE_HAS_FORMAT_STRING(__VA_ARGS__); \
+ RAWLOG(3, ": " __VA_ARGS__); \
+ RAWLOG(3, "\n"); \
+ return err_code; \
+ } \
+ } while(0);
+
#if defined (__cplusplus)
}
#endif
diff --git a/thirdparty/zstd/common/fse.h b/thirdparty/zstd/common/fse.h
index 19dd4febcd..714bfd3e7f 100644
--- a/thirdparty/zstd/common/fse.h
+++ b/thirdparty/zstd/common/fse.h
@@ -336,8 +336,9 @@ size_t FSE_buildCTable_rle (FSE_CTable* ct, unsigned char symbolValue);
/* FSE_buildCTable_wksp() :
* Same as FSE_buildCTable(), but using an externally allocated scratch buffer (`workSpace`).
* `wkspSize` must be >= `FSE_BUILD_CTABLE_WORKSPACE_SIZE_U32(maxSymbolValue, tableLog)` of `unsigned`.
+ * See FSE_buildCTable_wksp() for breakdown of workspace usage.
*/
-#define FSE_BUILD_CTABLE_WORKSPACE_SIZE_U32(maxSymbolValue, tableLog) (maxSymbolValue + 2 + (1ull << (tableLog - 2)))
+#define FSE_BUILD_CTABLE_WORKSPACE_SIZE_U32(maxSymbolValue, tableLog) (((maxSymbolValue + 2) + (1ull << (tableLog)))/2 + sizeof(U64)/sizeof(U32) /* additional 8 bytes for potential table overwrite */)
#define FSE_BUILD_CTABLE_WORKSPACE_SIZE(maxSymbolValue, tableLog) (sizeof(unsigned) * FSE_BUILD_CTABLE_WORKSPACE_SIZE_U32(maxSymbolValue, tableLog))
size_t FSE_buildCTable_wksp(FSE_CTable* ct, const short* normalizedCounter, unsigned maxSymbolValue, unsigned tableLog, void* workSpace, size_t wkspSize);
diff --git a/thirdparty/zstd/common/fse_decompress.c b/thirdparty/zstd/common/fse_decompress.c
index f4ff58fa0a..a5a358015f 100644
--- a/thirdparty/zstd/common/fse_decompress.c
+++ b/thirdparty/zstd/common/fse_decompress.c
@@ -365,7 +365,7 @@ static size_t FSE_decompress_wksp_body_default(void* dst, size_t dstCapacity, co
}
#if DYNAMIC_BMI2
-TARGET_ATTRIBUTE("bmi2") static size_t FSE_decompress_wksp_body_bmi2(void* dst, size_t dstCapacity, const void* cSrc, size_t cSrcSize, unsigned maxLog, void* workSpace, size_t wkspSize)
+BMI2_TARGET_ATTRIBUTE static size_t FSE_decompress_wksp_body_bmi2(void* dst, size_t dstCapacity, const void* cSrc, size_t cSrcSize, unsigned maxLog, void* workSpace, size_t wkspSize)
{
return FSE_decompress_wksp_body(dst, dstCapacity, cSrc, cSrcSize, maxLog, workSpace, wkspSize, 1);
}
diff --git a/thirdparty/zstd/common/huf.h b/thirdparty/zstd/common/huf.h
index 3d47ced030..85518481ec 100644
--- a/thirdparty/zstd/common/huf.h
+++ b/thirdparty/zstd/common/huf.h
@@ -89,9 +89,9 @@ HUF_PUBLIC_API size_t HUF_compress2 (void* dst, size_t dstCapacity,
/** HUF_compress4X_wksp() :
* Same as HUF_compress2(), but uses externally allocated `workSpace`.
- * `workspace` must have minimum alignment of 4, and be at least as large as HUF_WORKSPACE_SIZE */
-#define HUF_WORKSPACE_SIZE ((6 << 10) + 256)
-#define HUF_WORKSPACE_SIZE_U32 (HUF_WORKSPACE_SIZE / sizeof(U32))
+ * `workspace` must be at least as large as HUF_WORKSPACE_SIZE */
+#define HUF_WORKSPACE_SIZE ((8 << 10) + 512 /* sorting scratch space */)
+#define HUF_WORKSPACE_SIZE_U64 (HUF_WORKSPACE_SIZE / sizeof(U64))
HUF_PUBLIC_API size_t HUF_compress4X_wksp (void* dst, size_t dstCapacity,
const void* src, size_t srcSize,
unsigned maxSymbolValue, unsigned tableLog,
@@ -116,11 +116,11 @@ HUF_PUBLIC_API size_t HUF_compress4X_wksp (void* dst, size_t dstCapacity,
/* *** Constants *** */
-#define HUF_TABLELOG_MAX 12 /* max runtime value of tableLog (due to static allocation); can be modified up to HUF_ABSOLUTEMAX_TABLELOG */
+#define HUF_TABLELOG_MAX 12 /* max runtime value of tableLog (due to static allocation); can be modified up to HUF_TABLELOG_ABSOLUTEMAX */
#define HUF_TABLELOG_DEFAULT 11 /* default tableLog value when none specified */
#define HUF_SYMBOLVALUE_MAX 255
-#define HUF_TABLELOG_ABSOLUTEMAX 15 /* absolute limit of HUF_MAX_TABLELOG. Beyond that value, code does not work */
+#define HUF_TABLELOG_ABSOLUTEMAX 12 /* absolute limit of HUF_MAX_TABLELOG. Beyond that value, code does not work */
#if (HUF_TABLELOG_MAX > HUF_TABLELOG_ABSOLUTEMAX)
# error "HUF_TABLELOG_MAX is too large !"
#endif
@@ -136,15 +136,11 @@ HUF_PUBLIC_API size_t HUF_compress4X_wksp (void* dst, size_t dstCapacity,
/* static allocation of HUF's Compression Table */
/* this is a private definition, just exposed for allocation and strict aliasing purpose. never EVER access its members directly */
-struct HUF_CElt_s {
- U16 val;
- BYTE nbBits;
-}; /* typedef'd to HUF_CElt */
-typedef struct HUF_CElt_s HUF_CElt; /* consider it an incomplete type */
-#define HUF_CTABLE_SIZE_U32(maxSymbolValue) ((maxSymbolValue)+1) /* Use tables of U32, for proper alignment */
-#define HUF_CTABLE_SIZE(maxSymbolValue) (HUF_CTABLE_SIZE_U32(maxSymbolValue) * sizeof(U32))
+typedef size_t HUF_CElt; /* consider it an incomplete type */
+#define HUF_CTABLE_SIZE_ST(maxSymbolValue) ((maxSymbolValue)+2) /* Use tables of size_t, for proper alignment */
+#define HUF_CTABLE_SIZE(maxSymbolValue) (HUF_CTABLE_SIZE_ST(maxSymbolValue) * sizeof(size_t))
#define HUF_CREATE_STATIC_CTABLE(name, maxSymbolValue) \
- HUF_CElt name[HUF_CTABLE_SIZE_U32(maxSymbolValue)] /* no final ; */
+ HUF_CElt name[HUF_CTABLE_SIZE_ST(maxSymbolValue)] /* no final ; */
/* static allocation of HUF's DTable */
typedef U32 HUF_DTable;
@@ -194,6 +190,7 @@ size_t HUF_buildCTable (HUF_CElt* CTable, const unsigned* count, unsigned maxSym
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_compress4X_usingCTable_bmi2(void* dst, size_t dstSize, const void* src, size_t srcSize, const HUF_CElt* CTable, int bmi2);
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);
@@ -206,12 +203,13 @@ typedef enum {
* Same as HUF_compress4X_wksp(), but considers using hufTable if *repeat != HUF_repeat_none.
* If it uses hufTable it does not modify hufTable or repeat.
* If it doesn't, it sets *repeat = HUF_repeat_none, and it sets hufTable to the table used.
- * If preferRepeat then the old table will always be used if valid. */
+ * If preferRepeat then the old table will always be used if valid.
+ * If suspectUncompressible then some sampling checks will be run to potentially skip huffman coding */
size_t HUF_compress4X_repeat(void* dst, size_t dstSize,
const void* src, size_t srcSize,
unsigned maxSymbolValue, unsigned tableLog,
void* workSpace, size_t wkspSize, /**< `workSpace` must be aligned on 4-bytes boundaries, `wkspSize` must be >= HUF_WORKSPACE_SIZE */
- HUF_CElt* hufTable, HUF_repeat* repeat, int preferRepeat, int bmi2);
+ HUF_CElt* hufTable, HUF_repeat* repeat, int preferRepeat, int bmi2, unsigned suspectUncompressible);
/** HUF_buildCTable_wksp() :
* Same as HUF_buildCTable(), but using externally allocated scratch buffer.
@@ -249,11 +247,10 @@ size_t HUF_readStats_wksp(BYTE* huffWeight, size_t hwSize,
* Loading a CTable saved with HUF_writeCTable() */
size_t HUF_readCTable (HUF_CElt* CTable, unsigned* maxSymbolValuePtr, const void* src, size_t srcSize, unsigned *hasZeroWeights);
-/** HUF_getNbBits() :
+/** HUF_getNbBitsFromCTable() :
* Read nbBits from CTable symbolTable, for symbol `symbolValue` presumed <= HUF_SYMBOLVALUE_MAX
- * Note 1 : is not inlined, as HUF_CElt definition is private
- * Note 2 : const void* used, so that it can provide a statically allocated table as argument (which uses type U32) */
-U32 HUF_getNbBits(const void* symbolTable, U32 symbolValue);
+ * Note 1 : is not inlined, as HUF_CElt definition is private */
+U32 HUF_getNbBitsFromCTable(const HUF_CElt* symbolTable, U32 symbolValue);
/*
* HUF_decompress() does the following:
@@ -305,18 +302,20 @@ size_t HUF_decompress4X2_usingDTable(void* dst, size_t maxDstSize, const void* c
/* ====================== */
size_t HUF_compress1X (void* dst, size_t dstSize, const void* src, size_t srcSize, unsigned maxSymbolValue, unsigned tableLog);
-size_t HUF_compress1X_wksp (void* dst, size_t dstSize, const void* src, size_t srcSize, unsigned maxSymbolValue, unsigned tableLog, void* workSpace, size_t wkspSize); /**< `workSpace` must be a table of at least HUF_WORKSPACE_SIZE_U32 unsigned */
+size_t HUF_compress1X_wksp (void* dst, size_t dstSize, const void* src, size_t srcSize, unsigned maxSymbolValue, unsigned tableLog, void* workSpace, size_t wkspSize); /**< `workSpace` must be a table of at least HUF_WORKSPACE_SIZE_U64 U64 */
size_t HUF_compress1X_usingCTable(void* dst, size_t dstSize, const void* src, size_t srcSize, const HUF_CElt* CTable);
+size_t HUF_compress1X_usingCTable_bmi2(void* dst, size_t dstSize, const void* src, size_t srcSize, const HUF_CElt* CTable, int bmi2);
/** HUF_compress1X_repeat() :
* Same as HUF_compress1X_wksp(), but considers using hufTable if *repeat != HUF_repeat_none.
* If it uses hufTable it does not modify hufTable or repeat.
* If it doesn't, it sets *repeat = HUF_repeat_none, and it sets hufTable to the table used.
- * If preferRepeat then the old table will always be used if valid. */
+ * If preferRepeat then the old table will always be used if valid.
+ * If suspectUncompressible then some sampling checks will be run to potentially skip huffman coding */
size_t HUF_compress1X_repeat(void* dst, size_t dstSize,
const void* src, size_t srcSize,
unsigned maxSymbolValue, unsigned tableLog,
void* workSpace, size_t wkspSize, /**< `workSpace` must be aligned on 4-bytes boundaries, `wkspSize` must be >= HUF_WORKSPACE_SIZE */
- HUF_CElt* hufTable, HUF_repeat* repeat, int preferRepeat, int bmi2);
+ HUF_CElt* hufTable, HUF_repeat* repeat, int preferRepeat, int bmi2, unsigned suspectUncompressible);
size_t HUF_decompress1X1 (void* dst, size_t dstSize, const void* cSrc, size_t cSrcSize); /* single-symbol decoder */
#ifndef HUF_FORCE_DECOMPRESS_X1
@@ -354,6 +353,9 @@ size_t HUF_decompress4X_hufOnly_wksp_bmi2(HUF_DTable* dctx, void* dst, size_t ds
#ifndef HUF_FORCE_DECOMPRESS_X2
size_t HUF_readDTableX1_wksp_bmi2(HUF_DTable* DTable, const void* src, size_t srcSize, void* workSpace, size_t wkspSize, int bmi2);
#endif
+#ifndef HUF_FORCE_DECOMPRESS_X1
+size_t HUF_readDTableX2_wksp_bmi2(HUF_DTable* DTable, const void* src, size_t srcSize, void* workSpace, size_t wkspSize, int bmi2);
+#endif
#endif /* HUF_STATIC_LINKING_ONLY */
diff --git a/thirdparty/zstd/common/mem.h b/thirdparty/zstd/common/mem.h
index 9f3b81ab9d..85581c3847 100644
--- a/thirdparty/zstd/common/mem.h
+++ b/thirdparty/zstd/common/mem.h
@@ -51,6 +51,8 @@ extern "C" {
# include <stdint.h> /* intptr_t */
# endif
typedef uint8_t BYTE;
+ typedef uint8_t U8;
+ typedef int8_t S8;
typedef uint16_t U16;
typedef int16_t S16;
typedef uint32_t U32;
@@ -63,6 +65,8 @@ extern "C" {
# error "this implementation requires char to be exactly 8-bit type"
#endif
typedef unsigned char BYTE;
+ typedef unsigned char U8;
+ typedef signed char S8;
#if USHRT_MAX != 65535
# error "this implementation requires short to be exactly 16-bit type"
#endif
@@ -153,8 +157,22 @@ MEM_STATIC unsigned MEM_64bits(void) { return sizeof(size_t)==8; }
MEM_STATIC unsigned MEM_isLittleEndian(void)
{
+#if defined(__BYTE_ORDER__) && defined(__ORDER_LITTLE_ENDIAN__) && (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)
+ return 1;
+#elif defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) && (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)
+ return 0;
+#elif defined(__clang__) && __LITTLE_ENDIAN__
+ return 1;
+#elif defined(__clang__) && __BIG_ENDIAN__
+ return 0;
+#elif defined(_MSC_VER) && (_M_AMD64 || _M_IX86)
+ return 1;
+#elif defined(__DMC__) && defined(_M_IX86)
+ return 1;
+#else
const union { U32 u; BYTE c[4]; } one = { 1 }; /* don't use static : performance detrimental */
return one.c[0];
+#endif
}
#if defined(MEM_FORCE_MEMORY_ACCESS) && (MEM_FORCE_MEMORY_ACCESS==2)
diff --git a/thirdparty/zstd/common/pool.c b/thirdparty/zstd/common/pool.c
index ea70b8b65a..2e37cdd73c 100644
--- a/thirdparty/zstd/common/pool.c
+++ b/thirdparty/zstd/common/pool.c
@@ -86,7 +86,7 @@ static void* POOL_thread(void* opaque) {
{ POOL_job const job = ctx->queue[ctx->queueHead];
ctx->queueHead = (ctx->queueHead + 1) % ctx->queueSize;
ctx->numThreadsBusy++;
- ctx->queueEmpty = ctx->queueHead == ctx->queueTail;
+ ctx->queueEmpty = (ctx->queueHead == ctx->queueTail);
/* Unlock the mutex, signal a pusher, and run the job */
ZSTD_pthread_cond_signal(&ctx->queuePushCond);
ZSTD_pthread_mutex_unlock(&ctx->queueMutex);
@@ -105,6 +105,7 @@ static void* POOL_thread(void* opaque) {
assert(0); /* Unreachable */
}
+/* ZSTD_createThreadPool() : public access point */
POOL_ctx* ZSTD_createThreadPool(size_t numThreads) {
return POOL_create (numThreads, 0);
}
@@ -114,7 +115,8 @@ POOL_ctx* POOL_create(size_t numThreads, size_t queueSize) {
}
POOL_ctx* POOL_create_advanced(size_t numThreads, size_t queueSize,
- ZSTD_customMem customMem) {
+ ZSTD_customMem customMem)
+{
POOL_ctx* ctx;
/* Check parameters */
if (!numThreads) { return NULL; }
@@ -192,7 +194,7 @@ void ZSTD_freeThreadPool (ZSTD_threadPool* pool) {
POOL_free (pool);
}
-size_t POOL_sizeof(POOL_ctx *ctx) {
+size_t POOL_sizeof(const POOL_ctx* ctx) {
if (ctx==NULL) return 0; /* supports sizeof NULL */
return sizeof(*ctx)
+ ctx->queueSize * sizeof(POOL_job)
@@ -257,7 +259,8 @@ static int isQueueFull(POOL_ctx const* ctx) {
}
-static void POOL_add_internal(POOL_ctx* ctx, POOL_function function, void *opaque)
+static void
+POOL_add_internal(POOL_ctx* ctx, POOL_function function, void *opaque)
{
POOL_job const job = {function, opaque};
assert(ctx != NULL);
@@ -313,7 +316,9 @@ POOL_ctx* POOL_create(size_t numThreads, size_t queueSize) {
return POOL_create_advanced(numThreads, queueSize, ZSTD_defaultCMem);
}
-POOL_ctx* POOL_create_advanced(size_t numThreads, size_t queueSize, ZSTD_customMem customMem) {
+POOL_ctx*
+POOL_create_advanced(size_t numThreads, size_t queueSize, ZSTD_customMem customMem)
+{
(void)numThreads;
(void)queueSize;
(void)customMem;
@@ -341,7 +346,7 @@ int POOL_tryAdd(POOL_ctx* ctx, POOL_function function, void* opaque) {
return 1;
}
-size_t POOL_sizeof(POOL_ctx* ctx) {
+size_t POOL_sizeof(const POOL_ctx* ctx) {
if (ctx==NULL) return 0; /* supports sizeof NULL */
assert(ctx == &g_poolCtx);
return sizeof(*ctx);
diff --git a/thirdparty/zstd/common/pool.h b/thirdparty/zstd/common/pool.h
index e18aa0708f..0ebde1805d 100644
--- a/thirdparty/zstd/common/pool.h
+++ b/thirdparty/zstd/common/pool.h
@@ -53,7 +53,7 @@ int POOL_resize(POOL_ctx* ctx, size_t numThreads);
* @return threadpool memory usage
* note : compatible with NULL (returns 0 in this case)
*/
-size_t POOL_sizeof(POOL_ctx* ctx);
+size_t POOL_sizeof(const POOL_ctx* ctx);
/*! POOL_function :
* The function type that can be added to a thread pool.
@@ -70,7 +70,7 @@ void POOL_add(POOL_ctx* ctx, POOL_function function, void* opaque);
/*! POOL_tryAdd() :
- * Add the job `function(opaque)` to thread pool _if_ a worker is available.
+ * Add the job `function(opaque)` to thread pool _if_ a queue slot is available.
* Returns immediately even if not (does not block).
* @return : 1 if successful, 0 if not.
*/
diff --git a/thirdparty/zstd/common/portability_macros.h b/thirdparty/zstd/common/portability_macros.h
new file mode 100644
index 0000000000..2143817f57
--- /dev/null
+++ b/thirdparty/zstd/common/portability_macros.h
@@ -0,0 +1,137 @@
+/*
+ * 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_PORTABILITY_MACROS_H
+#define ZSTD_PORTABILITY_MACROS_H
+
+/**
+ * This header file contains macro defintions to support portability.
+ * This header is shared between C and ASM code, so it MUST only
+ * contain macro definitions. It MUST not contain any C code.
+ *
+ * This header ONLY defines macros to detect platforms/feature support.
+ *
+ */
+
+
+/* compat. with non-clang compilers */
+#ifndef __has_attribute
+ #define __has_attribute(x) 0
+#endif
+
+/* compat. with non-clang compilers */
+#ifndef __has_builtin
+# define __has_builtin(x) 0
+#endif
+
+/* compat. with non-clang compilers */
+#ifndef __has_feature
+# define __has_feature(x) 0
+#endif
+
+/* detects whether we are being compiled under msan */
+#ifndef ZSTD_MEMORY_SANITIZER
+# if __has_feature(memory_sanitizer)
+# define ZSTD_MEMORY_SANITIZER 1
+# else
+# define ZSTD_MEMORY_SANITIZER 0
+# endif
+#endif
+
+/* detects whether we are being compiled under asan */
+#ifndef ZSTD_ADDRESS_SANITIZER
+# if __has_feature(address_sanitizer)
+# define ZSTD_ADDRESS_SANITIZER 1
+# elif defined(__SANITIZE_ADDRESS__)
+# define ZSTD_ADDRESS_SANITIZER 1
+# else
+# define ZSTD_ADDRESS_SANITIZER 0
+# endif
+#endif
+
+/* detects whether we are being compiled under dfsan */
+#ifndef ZSTD_DATAFLOW_SANITIZER
+# if __has_feature(dataflow_sanitizer)
+# define ZSTD_DATAFLOW_SANITIZER 1
+# else
+# define ZSTD_DATAFLOW_SANITIZER 0
+# endif
+#endif
+
+/* Mark the internal assembly functions as hidden */
+#ifdef __ELF__
+# define ZSTD_HIDE_ASM_FUNCTION(func) .hidden func
+#else
+# define ZSTD_HIDE_ASM_FUNCTION(func)
+#endif
+
+/* Enable runtime BMI2 dispatch based on the CPU.
+ * Enabled for clang & gcc >=4.8 on x86 when BMI2 isn't enabled by default.
+ */
+#ifndef DYNAMIC_BMI2
+ #if ((defined(__clang__) && __has_attribute(__target__)) \
+ || (defined(__GNUC__) \
+ && (__GNUC__ >= 5 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8)))) \
+ && (defined(__x86_64__) || defined(_M_X64)) \
+ && !defined(__BMI2__)
+ # define DYNAMIC_BMI2 1
+ #else
+ # define DYNAMIC_BMI2 0
+ #endif
+#endif
+
+/**
+ * Only enable assembly for GNUC comptabile compilers,
+ * because other platforms may not support GAS assembly syntax.
+ *
+ * Only enable assembly for Linux / MacOS, other platforms may
+ * work, but they haven't been tested. This could likely be
+ * extended to BSD systems.
+ *
+ * Disable assembly when MSAN is enabled, because MSAN requires
+ * 100% of code to be instrumented to work.
+ */
+#if defined(__GNUC__)
+# if defined(__linux__) || defined(__linux) || defined(__APPLE__)
+# if ZSTD_MEMORY_SANITIZER
+# define ZSTD_ASM_SUPPORTED 0
+# elif ZSTD_DATAFLOW_SANITIZER
+# define ZSTD_ASM_SUPPORTED 0
+# else
+# define ZSTD_ASM_SUPPORTED 1
+# endif
+# else
+# define ZSTD_ASM_SUPPORTED 0
+# endif
+#else
+# define ZSTD_ASM_SUPPORTED 0
+#endif
+
+/**
+ * Determines whether we should enable assembly for x86-64
+ * with BMI2.
+ *
+ * Enable if all of the following conditions hold:
+ * - ASM hasn't been explicitly disabled by defining ZSTD_DISABLE_ASM
+ * - Assembly is supported
+ * - We are compiling for x86-64 and either:
+ * - DYNAMIC_BMI2 is enabled
+ * - BMI2 is supported at compile time
+ */
+#if !defined(ZSTD_DISABLE_ASM) && \
+ ZSTD_ASM_SUPPORTED && \
+ defined(__x86_64__) && \
+ (DYNAMIC_BMI2 || defined(__BMI2__))
+# define ZSTD_ENABLE_ASM_X86_64_BMI2 1
+#else
+# define ZSTD_ENABLE_ASM_X86_64_BMI2 0
+#endif
+
+#endif /* ZSTD_PORTABILITY_MACROS_H */
diff --git a/thirdparty/zstd/common/xxhash.c b/thirdparty/zstd/common/xxhash.c
index 926b33604e..d49497cf1c 100644
--- a/thirdparty/zstd/common/xxhash.c
+++ b/thirdparty/zstd/common/xxhash.c
@@ -5,7 +5,7 @@
* You can contact the author at :
* - xxHash homepage: http://www.xxhash.com
* - xxHash source repository : https://github.com/Cyan4973/xxHash
- *
+ *
* 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).
@@ -13,812 +13,12 @@
*/
-/* *************************************
-* Tuning parameters
-***************************************/
-/*!XXH_FORCE_MEMORY_ACCESS :
- * By default, access to unaligned memory is controlled by `memcpy()`, which is safe and portable.
- * Unfortunately, on some target/compiler combinations, the generated assembly is sub-optimal.
- * The below switch allow to select different access method for improved performance.
- * Method 0 (default) : use `memcpy()`. Safe and portable.
- * Method 1 : `__packed` statement. It depends on compiler extension (ie, not portable).
- * This method is safe if your compiler supports it, and *generally* as fast or faster than `memcpy`.
- * Method 2 : direct access. This method doesn't depend on compiler but violate C standard.
- * It can generate buggy code on targets which do not support unaligned memory accesses.
- * But in some circumstances, it's the only known way to get the most performance (ie GCC + ARMv6)
- * See http://stackoverflow.com/a/32095106/646947 for details.
- * 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(__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
-# endif
-#endif
-
-/*!XXH_ACCEPT_NULL_INPUT_POINTER :
- * If the input pointer is a null pointer, xxHash default behavior is to trigger a memory access error, since it is a bad pointer.
- * When this option is enabled, xxHash output for null input pointers will be the same as a null-length input.
- * By default, this option is disabled. To enable it, uncomment below define :
- */
-/* #define XXH_ACCEPT_NULL_INPUT_POINTER 1 */
-
-/*!XXH_FORCE_NATIVE_FORMAT :
- * By default, xxHash library provides endian-independent Hash values, based on little-endian convention.
- * Results are therefore identical for little-endian and big-endian CPU.
- * This comes at a performance cost for big-endian CPU, since some swapping is required to emulate little-endian format.
- * Should endian-independence be of no importance for your application, you may set the #define below to 1,
- * to improve speed for Big-endian CPU.
- * This option has no impact on Little_Endian CPU.
- */
-#ifndef XXH_FORCE_NATIVE_FORMAT /* can be defined externally */
-# define XXH_FORCE_NATIVE_FORMAT 0
-#endif
-/*!XXH_FORCE_ALIGN_CHECK :
- * This is a minor performance trick, only useful with lots of very small keys.
- * It means : check for aligned/unaligned input.
- * The check costs one initial branch per hash; set to 0 when the input data
- * is guaranteed to be aligned.
+/*
+ * xxhash.c instantiates functions defined in xxhash.h
*/
-#ifndef XXH_FORCE_ALIGN_CHECK /* can be defined externally */
-# if defined(__i386) || defined(_M_IX86) || defined(__x86_64__) || defined(_M_X64)
-# define XXH_FORCE_ALIGN_CHECK 0
-# else
-# define XXH_FORCE_ALIGN_CHECK 1
-# endif
-#endif
-
-/* *************************************
-* Includes & Memory related functions
-***************************************/
-/* Modify the local functions below should you wish to use some other memory routines */
-/* for ZSTD_malloc(), ZSTD_free() */
-#define ZSTD_DEPS_NEED_MALLOC
-#include "zstd_deps.h" /* size_t, ZSTD_malloc, ZSTD_free, ZSTD_memcpy */
-static void* XXH_malloc(size_t s) { return ZSTD_malloc(s); }
-static void XXH_free (void* p) { ZSTD_free(p); }
-static void* XXH_memcpy(void* dest, const void* src, size_t size) { return ZSTD_memcpy(dest,src,size); }
+#define XXH_STATIC_LINKING_ONLY /* access advanced declarations */
+#define XXH_IMPLEMENTATION /* access definitions */
-#ifndef XXH_STATIC_LINKING_ONLY
-# define XXH_STATIC_LINKING_ONLY
-#endif
#include "xxhash.h"
-
-
-/* *************************************
-* Compiler Specific Options
-***************************************/
-#include "compiler.h"
-
-
-/* *************************************
-* Basic Types
-***************************************/
-#include "mem.h" /* BYTE, U32, U64, size_t */
-
-#if (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS==2))
-
-/* Force direct memory access. Only works on CPU which support unaligned memory access in hardware */
-static U32 XXH_read32(const void* memPtr) { return *(const U32*) memPtr; }
-static U64 XXH_read64(const void* memPtr) { return *(const U64*) memPtr; }
-
-#elif (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS==1))
-
-/* __pack instructions are safer, but compiler specific, hence potentially problematic for some compilers */
-/* currently only defined for gcc and icc */
-typedef union { U32 u32; U64 u64; } __attribute__((packed)) unalign;
-
-static U32 XXH_read32(const void* ptr) { return ((const unalign*)ptr)->u32; }
-static U64 XXH_read64(const void* ptr) { return ((const unalign*)ptr)->u64; }
-
-#else
-
-/* portable and safe solution. Generally efficient.
- * see : http://stackoverflow.com/a/32095106/646947
- */
-
-static U32 XXH_read32(const void* memPtr)
-{
- U32 val;
- ZSTD_memcpy(&val, memPtr, sizeof(val));
- return val;
-}
-
-static U64 XXH_read64(const void* memPtr)
-{
- U64 val;
- ZSTD_memcpy(&val, memPtr, sizeof(val));
- return val;
-}
-
-#endif /* XXH_FORCE_DIRECT_MEMORY_ACCESS */
-
-
-/* ****************************************
-* Compiler-specific Functions and Macros
-******************************************/
-#define GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__)
-
-/* Note : although _rotl exists for minGW (GCC under windows), performance seems poor */
-#if defined(_MSC_VER)
-# define XXH_rotl32(x,r) _rotl(x,r)
-# define XXH_rotl64(x,r) _rotl64(x,r)
-#else
-#if defined(__ICCARM__)
-# include <intrinsics.h>
-# define XXH_rotl32(x,r) __ROR(x,(32 - r))
-#else
-# define XXH_rotl32(x,r) ((x << r) | (x >> (32 - r)))
-#endif
-# define XXH_rotl64(x,r) ((x << r) | (x >> (64 - r)))
-#endif
-
-#if defined(_MSC_VER) /* Visual Studio */
-# define XXH_swap32 _byteswap_ulong
-# define XXH_swap64 _byteswap_uint64
-#elif GCC_VERSION >= 403
-# define XXH_swap32 __builtin_bswap32
-# define XXH_swap64 __builtin_bswap64
-#else
-static U32 XXH_swap32 (U32 x)
-{
- return ((x << 24) & 0xff000000 ) |
- ((x << 8) & 0x00ff0000 ) |
- ((x >> 8) & 0x0000ff00 ) |
- ((x >> 24) & 0x000000ff );
-}
-static U64 XXH_swap64 (U64 x)
-{
- return ((x << 56) & 0xff00000000000000ULL) |
- ((x << 40) & 0x00ff000000000000ULL) |
- ((x << 24) & 0x0000ff0000000000ULL) |
- ((x << 8) & 0x000000ff00000000ULL) |
- ((x >> 8) & 0x00000000ff000000ULL) |
- ((x >> 24) & 0x0000000000ff0000ULL) |
- ((x >> 40) & 0x000000000000ff00ULL) |
- ((x >> 56) & 0x00000000000000ffULL);
-}
-#endif
-
-
-/* *************************************
-* Architecture Macros
-***************************************/
-typedef enum { XXH_bigEndian=0, XXH_littleEndian=1 } XXH_endianess;
-
-/* XXH_CPU_LITTLE_ENDIAN can be defined externally, for example on the compiler command line */
-#ifndef XXH_CPU_LITTLE_ENDIAN
- static const int g_one = 1;
-# define XXH_CPU_LITTLE_ENDIAN (*(const char*)(&g_one))
-#endif
-
-
-/* ***************************
-* Memory reads
-*****************************/
-typedef enum { XXH_aligned, XXH_unaligned } XXH_alignment;
-
-FORCE_INLINE_TEMPLATE U32 XXH_readLE32_align(const void* ptr, XXH_endianess endian, XXH_alignment align)
-{
- if (align==XXH_unaligned)
- return endian==XXH_littleEndian ? XXH_read32(ptr) : XXH_swap32(XXH_read32(ptr));
- else
- return endian==XXH_littleEndian ? *(const U32*)ptr : XXH_swap32(*(const U32*)ptr);
-}
-
-FORCE_INLINE_TEMPLATE U32 XXH_readLE32(const void* ptr, XXH_endianess endian)
-{
- return XXH_readLE32_align(ptr, endian, XXH_unaligned);
-}
-
-static U32 XXH_readBE32(const void* ptr)
-{
- return XXH_CPU_LITTLE_ENDIAN ? XXH_swap32(XXH_read32(ptr)) : XXH_read32(ptr);
-}
-
-FORCE_INLINE_TEMPLATE U64 XXH_readLE64_align(const void* ptr, XXH_endianess endian, XXH_alignment align)
-{
- if (align==XXH_unaligned)
- return endian==XXH_littleEndian ? XXH_read64(ptr) : XXH_swap64(XXH_read64(ptr));
- else
- return endian==XXH_littleEndian ? *(const U64*)ptr : XXH_swap64(*(const U64*)ptr);
-}
-
-FORCE_INLINE_TEMPLATE U64 XXH_readLE64(const void* ptr, XXH_endianess endian)
-{
- return XXH_readLE64_align(ptr, endian, XXH_unaligned);
-}
-
-static U64 XXH_readBE64(const void* ptr)
-{
- return XXH_CPU_LITTLE_ENDIAN ? XXH_swap64(XXH_read64(ptr)) : XXH_read64(ptr);
-}
-
-
-/* *************************************
-* Macros
-***************************************/
-#define XXH_STATIC_ASSERT(c) { enum { XXH_static_assert = 1/(int)(!!(c)) }; } /* use only *after* variable declarations */
-
-
-/* *************************************
-* Constants
-***************************************/
-static const U32 PRIME32_1 = 2654435761U;
-static const U32 PRIME32_2 = 2246822519U;
-static const U32 PRIME32_3 = 3266489917U;
-static const U32 PRIME32_4 = 668265263U;
-static const U32 PRIME32_5 = 374761393U;
-
-static const U64 PRIME64_1 = 11400714785074694791ULL;
-static const U64 PRIME64_2 = 14029467366897019727ULL;
-static const U64 PRIME64_3 = 1609587929392839161ULL;
-static const U64 PRIME64_4 = 9650029242287828579ULL;
-static const U64 PRIME64_5 = 2870177450012600261ULL;
-
-XXH_PUBLIC_API unsigned XXH_versionNumber (void) { return XXH_VERSION_NUMBER; }
-
-
-/* **************************
-* Utils
-****************************/
-XXH_PUBLIC_API void XXH32_copyState(XXH32_state_t* restrict dstState, const XXH32_state_t* restrict srcState)
-{
- ZSTD_memcpy(dstState, srcState, sizeof(*dstState));
-}
-
-XXH_PUBLIC_API void XXH64_copyState(XXH64_state_t* restrict dstState, const XXH64_state_t* restrict srcState)
-{
- ZSTD_memcpy(dstState, srcState, sizeof(*dstState));
-}
-
-
-/* ***************************
-* Simple Hash Functions
-*****************************/
-
-static U32 XXH32_round(U32 seed, U32 input)
-{
- seed += input * PRIME32_2;
- seed = XXH_rotl32(seed, 13);
- seed *= PRIME32_1;
- return seed;
-}
-
-FORCE_INLINE_TEMPLATE U32 XXH32_endian_align(const void* input, size_t len, U32 seed, XXH_endianess endian, XXH_alignment align)
-{
- const BYTE* p = (const BYTE*)input;
- const BYTE* bEnd = p + len;
- U32 h32;
-#define XXH_get32bits(p) XXH_readLE32_align(p, endian, align)
-
-#ifdef XXH_ACCEPT_NULL_INPUT_POINTER
- if (p==NULL) {
- len=0;
- bEnd=p=(const BYTE*)(size_t)16;
- }
-#endif
-
- if (len>=16) {
- const BYTE* const limit = bEnd - 16;
- U32 v1 = seed + PRIME32_1 + PRIME32_2;
- U32 v2 = seed + PRIME32_2;
- U32 v3 = seed + 0;
- U32 v4 = seed - PRIME32_1;
-
- do {
- v1 = XXH32_round(v1, XXH_get32bits(p)); p+=4;
- v2 = XXH32_round(v2, XXH_get32bits(p)); p+=4;
- v3 = XXH32_round(v3, XXH_get32bits(p)); p+=4;
- v4 = XXH32_round(v4, XXH_get32bits(p)); p+=4;
- } while (p<=limit);
-
- h32 = XXH_rotl32(v1, 1) + XXH_rotl32(v2, 7) + XXH_rotl32(v3, 12) + XXH_rotl32(v4, 18);
- } else {
- h32 = seed + PRIME32_5;
- }
-
- h32 += (U32) len;
-
- while (p+4<=bEnd) {
- h32 += XXH_get32bits(p) * PRIME32_3;
- h32 = XXH_rotl32(h32, 17) * PRIME32_4 ;
- p+=4;
- }
-
- while (p<bEnd) {
- h32 += (*p) * PRIME32_5;
- h32 = XXH_rotl32(h32, 11) * PRIME32_1 ;
- p++;
- }
-
- h32 ^= h32 >> 15;
- h32 *= PRIME32_2;
- h32 ^= h32 >> 13;
- h32 *= PRIME32_3;
- h32 ^= h32 >> 16;
-
- return h32;
-}
-
-
-XXH_PUBLIC_API unsigned int XXH32 (const void* input, size_t len, unsigned int seed)
-{
-#if 0
- /* Simple version, good for code maintenance, but unfortunately slow for small inputs */
- XXH32_CREATESTATE_STATIC(state);
- XXH32_reset(state, seed);
- XXH32_update(state, input, len);
- return XXH32_digest(state);
-#else
- XXH_endianess endian_detected = (XXH_endianess)XXH_CPU_LITTLE_ENDIAN;
-
- if (XXH_FORCE_ALIGN_CHECK) {
- if ((((size_t)input) & 3) == 0) { /* Input is 4-bytes aligned, leverage the speed benefit */
- if ((endian_detected==XXH_littleEndian) || XXH_FORCE_NATIVE_FORMAT)
- return XXH32_endian_align(input, len, seed, XXH_littleEndian, XXH_aligned);
- else
- return XXH32_endian_align(input, len, seed, XXH_bigEndian, XXH_aligned);
- } }
-
- if ((endian_detected==XXH_littleEndian) || XXH_FORCE_NATIVE_FORMAT)
- return XXH32_endian_align(input, len, seed, XXH_littleEndian, XXH_unaligned);
- else
- return XXH32_endian_align(input, len, seed, XXH_bigEndian, XXH_unaligned);
-#endif
-}
-
-
-static U64 XXH64_round(U64 acc, U64 input)
-{
- acc += input * PRIME64_2;
- acc = XXH_rotl64(acc, 31);
- acc *= PRIME64_1;
- return acc;
-}
-
-static U64 XXH64_mergeRound(U64 acc, U64 val)
-{
- val = XXH64_round(0, val);
- acc ^= val;
- acc = acc * PRIME64_1 + PRIME64_4;
- return acc;
-}
-
-FORCE_INLINE_TEMPLATE U64 XXH64_endian_align(const void* input, size_t len, U64 seed, XXH_endianess endian, XXH_alignment align)
-{
- const BYTE* p = (const BYTE*)input;
- const BYTE* const bEnd = p + len;
- U64 h64;
-#define XXH_get64bits(p) XXH_readLE64_align(p, endian, align)
-
-#ifdef XXH_ACCEPT_NULL_INPUT_POINTER
- if (p==NULL) {
- len=0;
- bEnd=p=(const BYTE*)(size_t)32;
- }
-#endif
-
- if (len>=32) {
- const BYTE* const limit = bEnd - 32;
- U64 v1 = seed + PRIME64_1 + PRIME64_2;
- U64 v2 = seed + PRIME64_2;
- U64 v3 = seed + 0;
- U64 v4 = seed - PRIME64_1;
-
- do {
- v1 = XXH64_round(v1, XXH_get64bits(p)); p+=8;
- v2 = XXH64_round(v2, XXH_get64bits(p)); p+=8;
- v3 = XXH64_round(v3, XXH_get64bits(p)); p+=8;
- v4 = XXH64_round(v4, XXH_get64bits(p)); p+=8;
- } while (p<=limit);
-
- h64 = XXH_rotl64(v1, 1) + XXH_rotl64(v2, 7) + XXH_rotl64(v3, 12) + XXH_rotl64(v4, 18);
- h64 = XXH64_mergeRound(h64, v1);
- h64 = XXH64_mergeRound(h64, v2);
- h64 = XXH64_mergeRound(h64, v3);
- h64 = XXH64_mergeRound(h64, v4);
-
- } else {
- h64 = seed + PRIME64_5;
- }
-
- h64 += (U64) len;
-
- while (p+8<=bEnd) {
- U64 const k1 = XXH64_round(0, XXH_get64bits(p));
- h64 ^= k1;
- h64 = XXH_rotl64(h64,27) * PRIME64_1 + PRIME64_4;
- p+=8;
- }
-
- if (p+4<=bEnd) {
- h64 ^= (U64)(XXH_get32bits(p)) * PRIME64_1;
- h64 = XXH_rotl64(h64, 23) * PRIME64_2 + PRIME64_3;
- p+=4;
- }
-
- while (p<bEnd) {
- h64 ^= (*p) * PRIME64_5;
- h64 = XXH_rotl64(h64, 11) * PRIME64_1;
- p++;
- }
-
- h64 ^= h64 >> 33;
- h64 *= PRIME64_2;
- h64 ^= h64 >> 29;
- h64 *= PRIME64_3;
- h64 ^= h64 >> 32;
-
- return h64;
-}
-
-
-XXH_PUBLIC_API unsigned long long XXH64 (const void* input, size_t len, unsigned long long seed)
-{
-#if 0
- /* Simple version, good for code maintenance, but unfortunately slow for small inputs */
- XXH64_CREATESTATE_STATIC(state);
- XXH64_reset(state, seed);
- XXH64_update(state, input, len);
- return XXH64_digest(state);
-#else
- XXH_endianess endian_detected = (XXH_endianess)XXH_CPU_LITTLE_ENDIAN;
-
- if (XXH_FORCE_ALIGN_CHECK) {
- if ((((size_t)input) & 7)==0) { /* Input is aligned, let's leverage the speed advantage */
- if ((endian_detected==XXH_littleEndian) || XXH_FORCE_NATIVE_FORMAT)
- return XXH64_endian_align(input, len, seed, XXH_littleEndian, XXH_aligned);
- else
- return XXH64_endian_align(input, len, seed, XXH_bigEndian, XXH_aligned);
- } }
-
- if ((endian_detected==XXH_littleEndian) || XXH_FORCE_NATIVE_FORMAT)
- return XXH64_endian_align(input, len, seed, XXH_littleEndian, XXH_unaligned);
- else
- return XXH64_endian_align(input, len, seed, XXH_bigEndian, XXH_unaligned);
-#endif
-}
-
-
-/* **************************************************
-* Advanced Hash Functions
-****************************************************/
-
-XXH_PUBLIC_API XXH32_state_t* XXH32_createState(void)
-{
- return (XXH32_state_t*)XXH_malloc(sizeof(XXH32_state_t));
-}
-XXH_PUBLIC_API XXH_errorcode XXH32_freeState(XXH32_state_t* statePtr)
-{
- XXH_free(statePtr);
- return XXH_OK;
-}
-
-XXH_PUBLIC_API XXH64_state_t* XXH64_createState(void)
-{
- return (XXH64_state_t*)XXH_malloc(sizeof(XXH64_state_t));
-}
-XXH_PUBLIC_API XXH_errorcode XXH64_freeState(XXH64_state_t* statePtr)
-{
- XXH_free(statePtr);
- return XXH_OK;
-}
-
-
-/*** Hash feed ***/
-
-XXH_PUBLIC_API XXH_errorcode XXH32_reset(XXH32_state_t* statePtr, unsigned int seed)
-{
- XXH32_state_t state; /* using a local state to memcpy() in order to avoid strict-aliasing warnings */
- ZSTD_memset(&state, 0, sizeof(state)-4); /* do not write into reserved, for future removal */
- state.v1 = seed + PRIME32_1 + PRIME32_2;
- state.v2 = seed + PRIME32_2;
- state.v3 = seed + 0;
- state.v4 = seed - PRIME32_1;
- ZSTD_memcpy(statePtr, &state, sizeof(state));
- return XXH_OK;
-}
-
-
-XXH_PUBLIC_API XXH_errorcode XXH64_reset(XXH64_state_t* statePtr, unsigned long long seed)
-{
- XXH64_state_t state; /* using a local state to memcpy() in order to avoid strict-aliasing warnings */
- ZSTD_memset(&state, 0, sizeof(state)-8); /* do not write into reserved, for future removal */
- state.v1 = seed + PRIME64_1 + PRIME64_2;
- state.v2 = seed + PRIME64_2;
- state.v3 = seed + 0;
- state.v4 = seed - PRIME64_1;
- ZSTD_memcpy(statePtr, &state, sizeof(state));
- return XXH_OK;
-}
-
-
-FORCE_INLINE_TEMPLATE XXH_errorcode XXH32_update_endian (XXH32_state_t* state, const void* input, size_t len, XXH_endianess endian)
-{
- const BYTE* p = (const BYTE*)input;
- const BYTE* const bEnd = p + len;
-
-#ifdef XXH_ACCEPT_NULL_INPUT_POINTER
- if (input==NULL) return XXH_ERROR;
-#endif
-
- state->total_len_32 += (unsigned)len;
- state->large_len |= (len>=16) | (state->total_len_32>=16);
-
- if (state->memsize + len < 16) { /* fill in tmp buffer */
- XXH_memcpy((BYTE*)(state->mem32) + state->memsize, input, len);
- state->memsize += (unsigned)len;
- return XXH_OK;
- }
-
- if (state->memsize) { /* some data left from previous update */
- XXH_memcpy((BYTE*)(state->mem32) + state->memsize, input, 16-state->memsize);
- { const U32* p32 = state->mem32;
- state->v1 = XXH32_round(state->v1, XXH_readLE32(p32, endian)); p32++;
- state->v2 = XXH32_round(state->v2, XXH_readLE32(p32, endian)); p32++;
- state->v3 = XXH32_round(state->v3, XXH_readLE32(p32, endian)); p32++;
- state->v4 = XXH32_round(state->v4, XXH_readLE32(p32, endian)); p32++;
- }
- p += 16-state->memsize;
- state->memsize = 0;
- }
-
- if (p <= bEnd-16) {
- const BYTE* const limit = bEnd - 16;
- U32 v1 = state->v1;
- U32 v2 = state->v2;
- U32 v3 = state->v3;
- U32 v4 = state->v4;
-
- do {
- v1 = XXH32_round(v1, XXH_readLE32(p, endian)); p+=4;
- v2 = XXH32_round(v2, XXH_readLE32(p, endian)); p+=4;
- v3 = XXH32_round(v3, XXH_readLE32(p, endian)); p+=4;
- v4 = XXH32_round(v4, XXH_readLE32(p, endian)); p+=4;
- } while (p<=limit);
-
- state->v1 = v1;
- state->v2 = v2;
- state->v3 = v3;
- state->v4 = v4;
- }
-
- if (p < bEnd) {
- XXH_memcpy(state->mem32, p, (size_t)(bEnd-p));
- state->memsize = (unsigned)(bEnd-p);
- }
-
- return XXH_OK;
-}
-
-XXH_PUBLIC_API XXH_errorcode XXH32_update (XXH32_state_t* state_in, const void* input, size_t len)
-{
- XXH_endianess endian_detected = (XXH_endianess)XXH_CPU_LITTLE_ENDIAN;
-
- if ((endian_detected==XXH_littleEndian) || XXH_FORCE_NATIVE_FORMAT)
- return XXH32_update_endian(state_in, input, len, XXH_littleEndian);
- else
- return XXH32_update_endian(state_in, input, len, XXH_bigEndian);
-}
-
-
-
-FORCE_INLINE_TEMPLATE U32 XXH32_digest_endian (const XXH32_state_t* state, XXH_endianess endian)
-{
- const BYTE * p = (const BYTE*)state->mem32;
- const BYTE* const bEnd = (const BYTE*)(state->mem32) + state->memsize;
- U32 h32;
-
- if (state->large_len) {
- h32 = XXH_rotl32(state->v1, 1) + XXH_rotl32(state->v2, 7) + XXH_rotl32(state->v3, 12) + XXH_rotl32(state->v4, 18);
- } else {
- h32 = state->v3 /* == seed */ + PRIME32_5;
- }
-
- h32 += state->total_len_32;
-
- while (p+4<=bEnd) {
- h32 += XXH_readLE32(p, endian) * PRIME32_3;
- h32 = XXH_rotl32(h32, 17) * PRIME32_4;
- p+=4;
- }
-
- while (p<bEnd) {
- h32 += (*p) * PRIME32_5;
- h32 = XXH_rotl32(h32, 11) * PRIME32_1;
- p++;
- }
-
- h32 ^= h32 >> 15;
- h32 *= PRIME32_2;
- h32 ^= h32 >> 13;
- h32 *= PRIME32_3;
- h32 ^= h32 >> 16;
-
- return h32;
-}
-
-
-XXH_PUBLIC_API unsigned int XXH32_digest (const XXH32_state_t* state_in)
-{
- XXH_endianess endian_detected = (XXH_endianess)XXH_CPU_LITTLE_ENDIAN;
-
- if ((endian_detected==XXH_littleEndian) || XXH_FORCE_NATIVE_FORMAT)
- return XXH32_digest_endian(state_in, XXH_littleEndian);
- else
- return XXH32_digest_endian(state_in, XXH_bigEndian);
-}
-
-
-
-/* **** XXH64 **** */
-
-FORCE_INLINE_TEMPLATE XXH_errorcode XXH64_update_endian (XXH64_state_t* state, const void* input, size_t len, XXH_endianess endian)
-{
- const BYTE* p = (const BYTE*)input;
- const BYTE* const bEnd = p + len;
-
-#ifdef XXH_ACCEPT_NULL_INPUT_POINTER
- if (input==NULL) return XXH_ERROR;
-#endif
-
- state->total_len += len;
-
- if (state->memsize + len < 32) { /* fill in tmp buffer */
- if (input != NULL) {
- XXH_memcpy(((BYTE*)state->mem64) + state->memsize, input, len);
- }
- state->memsize += (U32)len;
- return XXH_OK;
- }
-
- if (state->memsize) { /* tmp buffer is full */
- XXH_memcpy(((BYTE*)state->mem64) + state->memsize, input, 32-state->memsize);
- state->v1 = XXH64_round(state->v1, XXH_readLE64(state->mem64+0, endian));
- state->v2 = XXH64_round(state->v2, XXH_readLE64(state->mem64+1, endian));
- state->v3 = XXH64_round(state->v3, XXH_readLE64(state->mem64+2, endian));
- state->v4 = XXH64_round(state->v4, XXH_readLE64(state->mem64+3, endian));
- p += 32-state->memsize;
- state->memsize = 0;
- }
-
- if (p+32 <= bEnd) {
- const BYTE* const limit = bEnd - 32;
- U64 v1 = state->v1;
- U64 v2 = state->v2;
- U64 v3 = state->v3;
- U64 v4 = state->v4;
-
- do {
- v1 = XXH64_round(v1, XXH_readLE64(p, endian)); p+=8;
- v2 = XXH64_round(v2, XXH_readLE64(p, endian)); p+=8;
- v3 = XXH64_round(v3, XXH_readLE64(p, endian)); p+=8;
- v4 = XXH64_round(v4, XXH_readLE64(p, endian)); p+=8;
- } while (p<=limit);
-
- state->v1 = v1;
- state->v2 = v2;
- state->v3 = v3;
- state->v4 = v4;
- }
-
- if (p < bEnd) {
- XXH_memcpy(state->mem64, p, (size_t)(bEnd-p));
- state->memsize = (unsigned)(bEnd-p);
- }
-
- return XXH_OK;
-}
-
-XXH_PUBLIC_API XXH_errorcode XXH64_update (XXH64_state_t* state_in, const void* input, size_t len)
-{
- XXH_endianess endian_detected = (XXH_endianess)XXH_CPU_LITTLE_ENDIAN;
-
- if ((endian_detected==XXH_littleEndian) || XXH_FORCE_NATIVE_FORMAT)
- return XXH64_update_endian(state_in, input, len, XXH_littleEndian);
- else
- return XXH64_update_endian(state_in, input, len, XXH_bigEndian);
-}
-
-
-
-FORCE_INLINE_TEMPLATE U64 XXH64_digest_endian (const XXH64_state_t* state, XXH_endianess endian)
-{
- const BYTE * p = (const BYTE*)state->mem64;
- const BYTE* const bEnd = (const BYTE*)state->mem64 + state->memsize;
- U64 h64;
-
- if (state->total_len >= 32) {
- U64 const v1 = state->v1;
- U64 const v2 = state->v2;
- U64 const v3 = state->v3;
- U64 const v4 = state->v4;
-
- h64 = XXH_rotl64(v1, 1) + XXH_rotl64(v2, 7) + XXH_rotl64(v3, 12) + XXH_rotl64(v4, 18);
- h64 = XXH64_mergeRound(h64, v1);
- h64 = XXH64_mergeRound(h64, v2);
- h64 = XXH64_mergeRound(h64, v3);
- h64 = XXH64_mergeRound(h64, v4);
- } else {
- h64 = state->v3 + PRIME64_5;
- }
-
- h64 += (U64) state->total_len;
-
- while (p+8<=bEnd) {
- U64 const k1 = XXH64_round(0, XXH_readLE64(p, endian));
- h64 ^= k1;
- h64 = XXH_rotl64(h64,27) * PRIME64_1 + PRIME64_4;
- p+=8;
- }
-
- if (p+4<=bEnd) {
- h64 ^= (U64)(XXH_readLE32(p, endian)) * PRIME64_1;
- h64 = XXH_rotl64(h64, 23) * PRIME64_2 + PRIME64_3;
- p+=4;
- }
-
- while (p<bEnd) {
- h64 ^= (*p) * PRIME64_5;
- h64 = XXH_rotl64(h64, 11) * PRIME64_1;
- p++;
- }
-
- h64 ^= h64 >> 33;
- h64 *= PRIME64_2;
- h64 ^= h64 >> 29;
- h64 *= PRIME64_3;
- h64 ^= h64 >> 32;
-
- return h64;
-}
-
-
-XXH_PUBLIC_API unsigned long long XXH64_digest (const XXH64_state_t* state_in)
-{
- XXH_endianess endian_detected = (XXH_endianess)XXH_CPU_LITTLE_ENDIAN;
-
- if ((endian_detected==XXH_littleEndian) || XXH_FORCE_NATIVE_FORMAT)
- return XXH64_digest_endian(state_in, XXH_littleEndian);
- else
- return XXH64_digest_endian(state_in, XXH_bigEndian);
-}
-
-
-/* **************************
-* Canonical representation
-****************************/
-
-/*! Default XXH result types are basic unsigned 32 and 64 bits.
-* The canonical representation follows human-readable write convention, aka big-endian (large digits first).
-* These functions allow transformation of hash result into and from its canonical format.
-* This way, hash values can be written into a file or buffer, and remain comparable across different systems and programs.
-*/
-
-XXH_PUBLIC_API void XXH32_canonicalFromHash(XXH32_canonical_t* dst, XXH32_hash_t hash)
-{
- XXH_STATIC_ASSERT(sizeof(XXH32_canonical_t) == sizeof(XXH32_hash_t));
- if (XXH_CPU_LITTLE_ENDIAN) hash = XXH_swap32(hash);
- ZSTD_memcpy(dst, &hash, sizeof(*dst));
-}
-
-XXH_PUBLIC_API void XXH64_canonicalFromHash(XXH64_canonical_t* dst, XXH64_hash_t hash)
-{
- XXH_STATIC_ASSERT(sizeof(XXH64_canonical_t) == sizeof(XXH64_hash_t));
- if (XXH_CPU_LITTLE_ENDIAN) hash = XXH_swap64(hash);
- ZSTD_memcpy(dst, &hash, sizeof(*dst));
-}
-
-XXH_PUBLIC_API XXH32_hash_t XXH32_hashFromCanonical(const XXH32_canonical_t* src)
-{
- return XXH_readBE32(src);
-}
-
-XXH_PUBLIC_API XXH64_hash_t XXH64_hashFromCanonical(const XXH64_canonical_t* src)
-{
- return XXH_readBE64(src);
-}
diff --git a/thirdparty/zstd/common/xxhash.h b/thirdparty/zstd/common/xxhash.h
index 16c1f1617b..8ebbfdd626 100644
--- a/thirdparty/zstd/common/xxhash.h
+++ b/thirdparty/zstd/common/xxhash.h
@@ -1,20 +1,36 @@
/*
- * xxHash - Extremely Fast Hash algorithm
- * Header File
- * Copyright (c) Yann Collet, Facebook, Inc.
+ * xxHash - Fast Hash algorithm
+ * Copyright (c) Yann Collet, Facebook, Inc.
+ *
+ * You can contact the author at :
+ * - xxHash homepage: http://www.xxhash.com
+ * - xxHash source repository : https://github.com/Cyan4973/xxHash
*
- * You can contact the author at :
- * - xxHash source repository : https://github.com/Cyan4973/xxHash
- *
* 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.
*/
-/* Notice extracted from xxHash homepage :
-xxHash is an extremely fast Hash algorithm, running at RAM speed limits.
+#ifndef XXH_NO_XXH3
+# define XXH_NO_XXH3
+#endif
+
+#ifndef XXH_NAMESPACE
+# define XXH_NAMESPACE ZSTD_
+#endif
+
+/*!
+ * @mainpage xxHash
+ *
+ * @file xxhash.h
+ * xxHash prototypes and implementation
+ */
+/* TODO: update */
+/* Notice extracted from xxHash homepage:
+
+xxHash is an extremely fast hash algorithm, running at RAM speed limits.
It also successfully passes all tests from the SMHasher suite.
Comparison (single thread, Windows Seven 32 bits, using SMHasher on a Core 2 Duo @3GHz)
@@ -22,7 +38,7 @@ Comparison (single thread, Windows Seven 32 bits, using SMHasher on a Core 2 Duo
Name Speed Q.Score Author
xxHash 5.4 GB/s 10
CrapWow 3.2 GB/s 2 Andrew
-MumurHash 3a 2.7 GB/s 10 Austin Appleby
+MurmurHash 3a 2.7 GB/s 10 Austin Appleby
SpookyHash 2.0 GB/s 10 Bob Jenkins
SBox 1.4 GB/s 9 Bret Mulvey
Lookup3 1.2 GB/s 9 Bob Jenkins
@@ -37,8 +53,13 @@ Q.Score is a measure of quality of the hash function.
It depends on successfully passing SMHasher test set.
10 is a perfect score.
-A 64-bits version, named XXH64, is available since r35.
-It offers much better speed, but for 64-bits applications only.
+Note: SMHasher's CRC32 implementation is not the fastest one.
+Other speed-oriented implementations can be faster,
+especially in combination with PCLMUL instruction:
+https://fastcompression.blogspot.com/2019/03/presenting-xxh3.html?showComment=1552696407071#c3490092340461170735
+
+A 64-bit version, named XXH64, is available since r35.
+It offers much better speed, but for 64-bit applications only.
Name Speed on 64 bits Speed on 32 bits
XXH64 13.8 GB/s 1.9 GB/s
XXH32 6.8 GB/s 6.0 GB/s
@@ -48,33 +69,34 @@ XXH32 6.8 GB/s 6.0 GB/s
extern "C" {
#endif
-#ifndef XXHASH_H_5627135585666179
-#define XXHASH_H_5627135585666179 1
-
-
-/* ****************************
-* Definitions
-******************************/
-#include "zstd_deps.h"
-typedef enum { XXH_OK=0, XXH_ERROR } XXH_errorcode;
-
-
/* ****************************
-* API modifier
-******************************/
-/** XXH_PRIVATE_API
-* This is useful if you want to include xxhash functions in `static` mode
-* in order to inline them, and remove their symbol from the public list.
-* Methodology :
-* #define XXH_PRIVATE_API
-* #include "xxhash.h"
-* `xxhash.c` is automatically included.
-* It's not useful to compile and link it as a separate module anymore.
-*/
-#ifdef XXH_PRIVATE_API
-# ifndef XXH_STATIC_LINKING_ONLY
-# define XXH_STATIC_LINKING_ONLY
-# endif
+ * INLINE mode
+ ******************************/
+/*!
+ * XXH_INLINE_ALL (and XXH_PRIVATE_API)
+ * Use these build macros to inline xxhash into the target unit.
+ * Inlining improves performance on small inputs, especially when the length is
+ * expressed as a compile-time constant:
+ *
+ * https://fastcompression.blogspot.com/2018/03/xxhash-for-small-keys-impressive-power.html
+ *
+ * It also keeps xxHash symbols private to the unit, so they are not exported.
+ *
+ * Usage:
+ * #define XXH_INLINE_ALL
+ * #include "xxhash.h"
+ *
+ * Do not compile and link xxhash.o as a separate object, as it is not useful.
+ */
+#if (defined(XXH_INLINE_ALL) || defined(XXH_PRIVATE_API)) \
+ && !defined(XXH_INLINE_ALL_31684351384)
+ /* this section should be traversed only once */
+# define XXH_INLINE_ALL_31684351384
+ /* give access to the advanced API, required to compile implementations */
+# undef XXH_STATIC_LINKING_ONLY /* avoid macro redef */
+# define XXH_STATIC_LINKING_ONLY
+ /* make all functions private */
+# undef XXH_PUBLIC_API
# if defined(__GNUC__)
# define XXH_PUBLIC_API static __inline __attribute__((unused))
# elif defined (__cplusplus) || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */)
@@ -82,45 +104,205 @@ typedef enum { XXH_OK=0, XXH_ERROR } XXH_errorcode;
# elif defined(_MSC_VER)
# define XXH_PUBLIC_API static __inline
# else
-# define XXH_PUBLIC_API static /* this version may generate warnings for unused static functions; disable the relevant warning */
+ /* note: this version may generate warnings for unused static functions */
+# define XXH_PUBLIC_API static
# endif
-#else
-# define XXH_PUBLIC_API /* do nothing */
-#endif /* XXH_PRIVATE_API */
-/*!XXH_NAMESPACE, aka Namespace Emulation :
+ /*
+ * This part deals with the special case where a unit wants to inline xxHash,
+ * but "xxhash.h" has previously been included without XXH_INLINE_ALL,
+ * such as part of some previously included *.h header file.
+ * Without further action, the new include would just be ignored,
+ * and functions would effectively _not_ be inlined (silent failure).
+ * The following macros solve this situation by prefixing all inlined names,
+ * avoiding naming collision with previous inclusions.
+ */
+ /* Before that, we unconditionally #undef all symbols,
+ * in case they were already defined with XXH_NAMESPACE.
+ * They will then be redefined for XXH_INLINE_ALL
+ */
+# undef XXH_versionNumber
+ /* XXH32 */
+# undef XXH32
+# undef XXH32_createState
+# undef XXH32_freeState
+# undef XXH32_reset
+# undef XXH32_update
+# undef XXH32_digest
+# undef XXH32_copyState
+# undef XXH32_canonicalFromHash
+# undef XXH32_hashFromCanonical
+ /* XXH64 */
+# undef XXH64
+# undef XXH64_createState
+# undef XXH64_freeState
+# undef XXH64_reset
+# undef XXH64_update
+# undef XXH64_digest
+# undef XXH64_copyState
+# undef XXH64_canonicalFromHash
+# undef XXH64_hashFromCanonical
+ /* XXH3_64bits */
+# undef XXH3_64bits
+# undef XXH3_64bits_withSecret
+# undef XXH3_64bits_withSeed
+# undef XXH3_64bits_withSecretandSeed
+# undef XXH3_createState
+# undef XXH3_freeState
+# undef XXH3_copyState
+# undef XXH3_64bits_reset
+# undef XXH3_64bits_reset_withSeed
+# undef XXH3_64bits_reset_withSecret
+# undef XXH3_64bits_update
+# undef XXH3_64bits_digest
+# undef XXH3_generateSecret
+ /* XXH3_128bits */
+# undef XXH128
+# undef XXH3_128bits
+# undef XXH3_128bits_withSeed
+# undef XXH3_128bits_withSecret
+# undef XXH3_128bits_reset
+# undef XXH3_128bits_reset_withSeed
+# undef XXH3_128bits_reset_withSecret
+# undef XXH3_128bits_reset_withSecretandSeed
+# undef XXH3_128bits_update
+# undef XXH3_128bits_digest
+# undef XXH128_isEqual
+# undef XXH128_cmp
+# undef XXH128_canonicalFromHash
+# undef XXH128_hashFromCanonical
+ /* Finally, free the namespace itself */
+# undef XXH_NAMESPACE
-If you want to include _and expose_ xxHash functions from within your own library,
-but also want to avoid symbol collisions with another library which also includes xxHash,
+ /* employ the namespace for XXH_INLINE_ALL */
+# define XXH_NAMESPACE XXH_INLINE_
+ /*
+ * Some identifiers (enums, type names) are not symbols,
+ * but they must nonetheless be renamed to avoid redeclaration.
+ * Alternative solution: do not redeclare them.
+ * However, this requires some #ifdefs, and has a more dispersed impact.
+ * Meanwhile, renaming can be achieved in a single place.
+ */
+# define XXH_IPREF(Id) XXH_NAMESPACE ## Id
+# define XXH_OK XXH_IPREF(XXH_OK)
+# define XXH_ERROR XXH_IPREF(XXH_ERROR)
+# define XXH_errorcode XXH_IPREF(XXH_errorcode)
+# define XXH32_canonical_t XXH_IPREF(XXH32_canonical_t)
+# define XXH64_canonical_t XXH_IPREF(XXH64_canonical_t)
+# define XXH128_canonical_t XXH_IPREF(XXH128_canonical_t)
+# define XXH32_state_s XXH_IPREF(XXH32_state_s)
+# define XXH32_state_t XXH_IPREF(XXH32_state_t)
+# define XXH64_state_s XXH_IPREF(XXH64_state_s)
+# define XXH64_state_t XXH_IPREF(XXH64_state_t)
+# define XXH3_state_s XXH_IPREF(XXH3_state_s)
+# define XXH3_state_t XXH_IPREF(XXH3_state_t)
+# define XXH128_hash_t XXH_IPREF(XXH128_hash_t)
+ /* Ensure the header is parsed again, even if it was previously included */
+# undef XXHASH_H_5627135585666179
+# undef XXHASH_H_STATIC_13879238742
+#endif /* XXH_INLINE_ALL || XXH_PRIVATE_API */
-you can use XXH_NAMESPACE, to automatically prefix any public symbol from xxhash library
-with the value of XXH_NAMESPACE (so avoid to keep it NULL and avoid numeric values).
-Note that no change is required within the calling program as long as it includes `xxhash.h` :
-regular symbol name will be automatically translated by this header.
-*/
+
+/* ****************************************************************
+ * Stable API
+ *****************************************************************/
+#ifndef XXHASH_H_5627135585666179
+#define XXHASH_H_5627135585666179 1
+
+
+/*!
+ * @defgroup public Public API
+ * Contains details on the public xxHash functions.
+ * @{
+ */
+/* specific declaration modes for Windows */
+#if !defined(XXH_INLINE_ALL) && !defined(XXH_PRIVATE_API)
+# if defined(WIN32) && defined(_MSC_VER) && (defined(XXH_IMPORT) || defined(XXH_EXPORT))
+# ifdef XXH_EXPORT
+# define XXH_PUBLIC_API __declspec(dllexport)
+# elif XXH_IMPORT
+# define XXH_PUBLIC_API __declspec(dllimport)
+# endif
+# else
+# define XXH_PUBLIC_API /* do nothing */
+# endif
+#endif
+
+#ifdef XXH_DOXYGEN
+/*!
+ * @brief Emulate a namespace by transparently prefixing all symbols.
+ *
+ * If you want to include _and expose_ xxHash functions from within your own
+ * library, but also want to avoid symbol collisions with other libraries which
+ * may also include xxHash, you can use XXH_NAMESPACE to automatically prefix
+ * any public symbol from xxhash library with the value of XXH_NAMESPACE
+ * (therefore, avoid empty or numeric values).
+ *
+ * Note that no change is required within the calling program as long as it
+ * includes `xxhash.h`: Regular symbol names will be automatically translated
+ * by this header.
+ */
+# define XXH_NAMESPACE /* YOUR NAME HERE */
+# undef XXH_NAMESPACE
+#endif
+
#ifdef XXH_NAMESPACE
# define XXH_CAT(A,B) A##B
# define XXH_NAME2(A,B) XXH_CAT(A,B)
-# define XXH32 XXH_NAME2(XXH_NAMESPACE, XXH32)
-# define XXH64 XXH_NAME2(XXH_NAMESPACE, XXH64)
# define XXH_versionNumber XXH_NAME2(XXH_NAMESPACE, XXH_versionNumber)
+/* XXH32 */
+# define XXH32 XXH_NAME2(XXH_NAMESPACE, XXH32)
# define XXH32_createState XXH_NAME2(XXH_NAMESPACE, XXH32_createState)
-# define XXH64_createState XXH_NAME2(XXH_NAMESPACE, XXH64_createState)
# define XXH32_freeState XXH_NAME2(XXH_NAMESPACE, XXH32_freeState)
-# define XXH64_freeState XXH_NAME2(XXH_NAMESPACE, XXH64_freeState)
# define XXH32_reset XXH_NAME2(XXH_NAMESPACE, XXH32_reset)
-# define XXH64_reset XXH_NAME2(XXH_NAMESPACE, XXH64_reset)
# define XXH32_update XXH_NAME2(XXH_NAMESPACE, XXH32_update)
-# define XXH64_update XXH_NAME2(XXH_NAMESPACE, XXH64_update)
# define XXH32_digest XXH_NAME2(XXH_NAMESPACE, XXH32_digest)
-# define XXH64_digest XXH_NAME2(XXH_NAMESPACE, XXH64_digest)
# define XXH32_copyState XXH_NAME2(XXH_NAMESPACE, XXH32_copyState)
-# define XXH64_copyState XXH_NAME2(XXH_NAMESPACE, XXH64_copyState)
# define XXH32_canonicalFromHash XXH_NAME2(XXH_NAMESPACE, XXH32_canonicalFromHash)
-# define XXH64_canonicalFromHash XXH_NAME2(XXH_NAMESPACE, XXH64_canonicalFromHash)
# define XXH32_hashFromCanonical XXH_NAME2(XXH_NAMESPACE, XXH32_hashFromCanonical)
+/* XXH64 */
+# define XXH64 XXH_NAME2(XXH_NAMESPACE, XXH64)
+# define XXH64_createState XXH_NAME2(XXH_NAMESPACE, XXH64_createState)
+# define XXH64_freeState XXH_NAME2(XXH_NAMESPACE, XXH64_freeState)
+# define XXH64_reset XXH_NAME2(XXH_NAMESPACE, XXH64_reset)
+# define XXH64_update XXH_NAME2(XXH_NAMESPACE, XXH64_update)
+# define XXH64_digest XXH_NAME2(XXH_NAMESPACE, XXH64_digest)
+# define XXH64_copyState XXH_NAME2(XXH_NAMESPACE, XXH64_copyState)
+# define XXH64_canonicalFromHash XXH_NAME2(XXH_NAMESPACE, XXH64_canonicalFromHash)
# define XXH64_hashFromCanonical XXH_NAME2(XXH_NAMESPACE, XXH64_hashFromCanonical)
+/* XXH3_64bits */
+# define XXH3_64bits XXH_NAME2(XXH_NAMESPACE, XXH3_64bits)
+# define XXH3_64bits_withSecret XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_withSecret)
+# define XXH3_64bits_withSeed XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_withSeed)
+# define XXH3_64bits_withSecretandSeed XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_withSecretandSeed)
+# define XXH3_createState XXH_NAME2(XXH_NAMESPACE, XXH3_createState)
+# define XXH3_freeState XXH_NAME2(XXH_NAMESPACE, XXH3_freeState)
+# define XXH3_copyState XXH_NAME2(XXH_NAMESPACE, XXH3_copyState)
+# define XXH3_64bits_reset XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_reset)
+# define XXH3_64bits_reset_withSeed XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_reset_withSeed)
+# define XXH3_64bits_reset_withSecret XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_reset_withSecret)
+# define XXH3_64bits_reset_withSecretandSeed XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_reset_withSecretandSeed)
+# define XXH3_64bits_update XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_update)
+# define XXH3_64bits_digest XXH_NAME2(XXH_NAMESPACE, XXH3_64bits_digest)
+# define XXH3_generateSecret XXH_NAME2(XXH_NAMESPACE, XXH3_generateSecret)
+# define XXH3_generateSecret_fromSeed XXH_NAME2(XXH_NAMESPACE, XXH3_generateSecret_fromSeed)
+/* XXH3_128bits */
+# define XXH128 XXH_NAME2(XXH_NAMESPACE, XXH128)
+# define XXH3_128bits XXH_NAME2(XXH_NAMESPACE, XXH3_128bits)
+# define XXH3_128bits_withSeed XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_withSeed)
+# define XXH3_128bits_withSecret XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_withSecret)
+# define XXH3_128bits_withSecretandSeed XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_withSecretandSeed)
+# define XXH3_128bits_reset XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_reset)
+# define XXH3_128bits_reset_withSeed XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_reset_withSeed)
+# define XXH3_128bits_reset_withSecret XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_reset_withSecret)
+# define XXH3_128bits_reset_withSecretandSeed XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_reset_withSecretandSeed)
+# define XXH3_128bits_update XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_update)
+# define XXH3_128bits_digest XXH_NAME2(XXH_NAMESPACE, XXH3_128bits_digest)
+# define XXH128_isEqual XXH_NAME2(XXH_NAMESPACE, XXH128_isEqual)
+# define XXH128_cmp XXH_NAME2(XXH_NAMESPACE, XXH128_cmp)
+# define XXH128_canonicalFromHash XXH_NAME2(XXH_NAMESPACE, XXH128_canonicalFromHash)
+# define XXH128_hashFromCanonical XXH_NAME2(XXH_NAMESPACE, XXH128_hashFromCanonical)
#endif
@@ -128,156 +310,5375 @@ regular symbol name will be automatically translated by this header.
* Version
***************************************/
#define XXH_VERSION_MAJOR 0
-#define XXH_VERSION_MINOR 6
-#define XXH_VERSION_RELEASE 2
+#define XXH_VERSION_MINOR 8
+#define XXH_VERSION_RELEASE 1
#define XXH_VERSION_NUMBER (XXH_VERSION_MAJOR *100*100 + XXH_VERSION_MINOR *100 + XXH_VERSION_RELEASE)
+
+/*!
+ * @brief Obtains the xxHash version.
+ *
+ * This is mostly useful when xxHash is compiled as a shared library,
+ * since the returned value comes from the library, as opposed to header file.
+ *
+ * @return `XXH_VERSION_NUMBER` of the invoked library.
+ */
XXH_PUBLIC_API unsigned XXH_versionNumber (void);
/* ****************************
-* Simple Hash Functions
+* Common basic types
******************************/
-typedef unsigned int XXH32_hash_t;
-typedef unsigned long long XXH64_hash_t;
-
-XXH_PUBLIC_API XXH32_hash_t XXH32 (const void* input, size_t length, unsigned int seed);
-XXH_PUBLIC_API XXH64_hash_t XXH64 (const void* input, size_t length, unsigned long long seed);
-
-/*!
-XXH32() :
- Calculate the 32-bits hash of sequence "length" bytes stored at memory address "input".
- The memory between input & input+length must be valid (allocated and read-accessible).
- "seed" can be used to alter the result predictably.
- Speed on Core 2 Duo @ 3 GHz (single thread, SMHasher benchmark) : 5.4 GB/s
-XXH64() :
- Calculate the 64-bits hash of sequence of length "len" stored at memory address "input".
- "seed" can be used to alter the result predictably.
- This function runs 2x faster on 64-bits systems, but slower on 32-bits systems (see benchmark).
-*/
+#include <stddef.h> /* size_t */
+typedef enum { XXH_OK=0, XXH_ERROR } XXH_errorcode;
-/* ****************************
-* Streaming Hash Functions
-******************************/
-typedef struct XXH32_state_s XXH32_state_t; /* incomplete type */
-typedef struct XXH64_state_s XXH64_state_t; /* incomplete type */
+/*-**********************************************************************
+* 32-bit hash
+************************************************************************/
+#if defined(XXH_DOXYGEN) /* Don't show <stdint.h> include */
+/*!
+ * @brief An unsigned 32-bit integer.
+ *
+ * Not necessarily defined to `uint32_t` but functionally equivalent.
+ */
+typedef uint32_t XXH32_hash_t;
-/*! State allocation, compatible with dynamic libraries */
+#elif !defined (__VMS) \
+ && (defined (__cplusplus) \
+ || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) )
+# include <stdint.h>
+ typedef uint32_t XXH32_hash_t;
-XXH_PUBLIC_API XXH32_state_t* XXH32_createState(void);
-XXH_PUBLIC_API XXH_errorcode XXH32_freeState(XXH32_state_t* statePtr);
+#else
+# include <limits.h>
+# if UINT_MAX == 0xFFFFFFFFUL
+ typedef unsigned int XXH32_hash_t;
+# else
+# if ULONG_MAX == 0xFFFFFFFFUL
+ typedef unsigned long XXH32_hash_t;
+# else
+# error "unsupported platform: need a 32-bit type"
+# endif
+# endif
+#endif
-XXH_PUBLIC_API XXH64_state_t* XXH64_createState(void);
-XXH_PUBLIC_API XXH_errorcode XXH64_freeState(XXH64_state_t* statePtr);
+/*!
+ * @}
+ *
+ * @defgroup xxh32_family XXH32 family
+ * @ingroup public
+ * Contains functions used in the classic 32-bit xxHash algorithm.
+ *
+ * @note
+ * XXH32 is useful for older platforms, with no or poor 64-bit performance.
+ * Note that @ref xxh3_family provides competitive speed
+ * for both 32-bit and 64-bit systems, and offers true 64/128 bit hash results.
+ *
+ * @see @ref xxh64_family, @ref xxh3_family : Other xxHash families
+ * @see @ref xxh32_impl for implementation details
+ * @{
+ */
+
+/*!
+ * @brief Calculates the 32-bit hash of @p input using xxHash32.
+ *
+ * Speed on Core 2 Duo @ 3 GHz (single thread, SMHasher benchmark): 5.4 GB/s
+ *
+ * @param input The block of data to be hashed, at least @p length bytes in size.
+ * @param length The length of @p input, in bytes.
+ * @param seed The 32-bit seed to alter the hash's output predictably.
+ *
+ * @pre
+ * The memory between @p input and @p input + @p length must be valid,
+ * readable, contiguous memory. However, if @p length is `0`, @p input may be
+ * `NULL`. In C++, this also must be *TriviallyCopyable*.
+ *
+ * @return The calculated 32-bit hash value.
+ *
+ * @see
+ * XXH64(), XXH3_64bits_withSeed(), XXH3_128bits_withSeed(), XXH128():
+ * Direct equivalents for the other variants of xxHash.
+ * @see
+ * XXH32_createState(), XXH32_update(), XXH32_digest(): Streaming version.
+ */
+XXH_PUBLIC_API XXH32_hash_t XXH32 (const void* input, size_t length, XXH32_hash_t seed);
+
+/*!
+ * Streaming functions generate the xxHash value from an incremental input.
+ * This method is slower than single-call functions, due to state management.
+ * For small inputs, prefer `XXH32()` and `XXH64()`, which are better optimized.
+ *
+ * An XXH state must first be allocated using `XXH*_createState()`.
+ *
+ * Start a new hash by initializing the state with a seed using `XXH*_reset()`.
+ *
+ * Then, feed the hash state by calling `XXH*_update()` as many times as necessary.
+ *
+ * The function returns an error code, with 0 meaning OK, and any other value
+ * meaning there is an error.
+ *
+ * Finally, a hash value can be produced anytime, by using `XXH*_digest()`.
+ * This function returns the nn-bits hash as an int or long long.
+ *
+ * It's still possible to continue inserting input into the hash state after a
+ * digest, and generate new hash values later on by invoking `XXH*_digest()`.
+ *
+ * When done, release the state using `XXH*_freeState()`.
+ *
+ * Example code for incrementally hashing a file:
+ * @code{.c}
+ * #include <stdio.h>
+ * #include <xxhash.h>
+ * #define BUFFER_SIZE 256
+ *
+ * // Note: XXH64 and XXH3 use the same interface.
+ * XXH32_hash_t
+ * hashFile(FILE* stream)
+ * {
+ * XXH32_state_t* state;
+ * unsigned char buf[BUFFER_SIZE];
+ * size_t amt;
+ * XXH32_hash_t hash;
+ *
+ * state = XXH32_createState(); // Create a state
+ * assert(state != NULL); // Error check here
+ * XXH32_reset(state, 0xbaad5eed); // Reset state with our seed
+ * while ((amt = fread(buf, 1, sizeof(buf), stream)) != 0) {
+ * XXH32_update(state, buf, amt); // Hash the file in chunks
+ * }
+ * hash = XXH32_digest(state); // Finalize the hash
+ * XXH32_freeState(state); // Clean up
+ * return hash;
+ * }
+ * @endcode
+ */
+/*!
+ * @typedef struct XXH32_state_s XXH32_state_t
+ * @brief The opaque state struct for the XXH32 streaming API.
+ *
+ * @see XXH32_state_s for details.
+ */
+typedef struct XXH32_state_s XXH32_state_t;
+
+/*!
+ * @brief Allocates an @ref XXH32_state_t.
+ *
+ * Must be freed with XXH32_freeState().
+ * @return An allocated XXH32_state_t on success, `NULL` on failure.
+ */
+XXH_PUBLIC_API XXH32_state_t* XXH32_createState(void);
+/*!
+ * @brief Frees an @ref XXH32_state_t.
+ *
+ * Must be allocated with XXH32_createState().
+ * @param statePtr A pointer to an @ref XXH32_state_t allocated with @ref XXH32_createState().
+ * @return XXH_OK.
+ */
+XXH_PUBLIC_API XXH_errorcode XXH32_freeState(XXH32_state_t* statePtr);
+/*!
+ * @brief Copies one @ref XXH32_state_t to another.
+ *
+ * @param dst_state The state to copy to.
+ * @param src_state The state to copy from.
+ * @pre
+ * @p dst_state and @p src_state must not be `NULL` and must not overlap.
+ */
+XXH_PUBLIC_API void XXH32_copyState(XXH32_state_t* dst_state, const XXH32_state_t* src_state);
-/* hash streaming */
+/*!
+ * @brief Resets an @ref XXH32_state_t to begin a new hash.
+ *
+ * This function resets and seeds a state. Call it before @ref XXH32_update().
+ *
+ * @param statePtr The state struct to reset.
+ * @param seed The 32-bit seed to alter the hash result predictably.
+ *
+ * @pre
+ * @p statePtr must not be `NULL`.
+ *
+ * @return @ref XXH_OK on success, @ref XXH_ERROR on failure.
+ */
+XXH_PUBLIC_API XXH_errorcode XXH32_reset (XXH32_state_t* statePtr, XXH32_hash_t seed);
-XXH_PUBLIC_API XXH_errorcode XXH32_reset (XXH32_state_t* statePtr, unsigned int seed);
+/*!
+ * @brief Consumes a block of @p input to an @ref XXH32_state_t.
+ *
+ * Call this to incrementally consume blocks of data.
+ *
+ * @param statePtr The state struct to update.
+ * @param input The block of data to be hashed, at least @p length bytes in size.
+ * @param length The length of @p input, in bytes.
+ *
+ * @pre
+ * @p statePtr must not be `NULL`.
+ * @pre
+ * The memory between @p input and @p input + @p length must be valid,
+ * readable, contiguous memory. However, if @p length is `0`, @p input may be
+ * `NULL`. In C++, this also must be *TriviallyCopyable*.
+ *
+ * @return @ref XXH_OK on success, @ref XXH_ERROR on failure.
+ */
XXH_PUBLIC_API XXH_errorcode XXH32_update (XXH32_state_t* statePtr, const void* input, size_t length);
+
+/*!
+ * @brief Returns the calculated hash value from an @ref XXH32_state_t.
+ *
+ * @note
+ * Calling XXH32_digest() will not affect @p statePtr, so you can update,
+ * digest, and update again.
+ *
+ * @param statePtr The state struct to calculate the hash from.
+ *
+ * @pre
+ * @p statePtr must not be `NULL`.
+ *
+ * @return The calculated xxHash32 value from that state.
+ */
XXH_PUBLIC_API XXH32_hash_t XXH32_digest (const XXH32_state_t* statePtr);
-XXH_PUBLIC_API XXH_errorcode XXH64_reset (XXH64_state_t* statePtr, unsigned long long seed);
-XXH_PUBLIC_API XXH_errorcode XXH64_update (XXH64_state_t* statePtr, const void* input, size_t length);
-XXH_PUBLIC_API XXH64_hash_t XXH64_digest (const XXH64_state_t* statePtr);
+/******* Canonical representation *******/
/*
-These functions generate the xxHash of an input provided in multiple segments.
-Note that, for small input, they are slower than single-call functions, due to state management.
-For small input, prefer `XXH32()` and `XXH64()` .
+ * The default return values from XXH functions are unsigned 32 and 64 bit
+ * integers.
+ * This the simplest and fastest format for further post-processing.
+ *
+ * However, this leaves open the question of what is the order on the byte level,
+ * since little and big endian conventions will store the same number differently.
+ *
+ * The canonical representation settles this issue by mandating big-endian
+ * convention, the same convention as human-readable numbers (large digits first).
+ *
+ * When writing hash values to storage, sending them over a network, or printing
+ * them, it's highly recommended to use the canonical representation to ensure
+ * portability across a wider range of systems, present and future.
+ *
+ * The following functions allow transformation of hash values to and from
+ * canonical format.
+ */
+
+/*!
+ * @brief Canonical (big endian) representation of @ref XXH32_hash_t.
+ */
+typedef struct {
+ unsigned char digest[4]; /*!< Hash bytes, big endian */
+} XXH32_canonical_t;
+
+/*!
+ * @brief Converts an @ref XXH32_hash_t to a big endian @ref XXH32_canonical_t.
+ *
+ * @param dst The @ref XXH32_canonical_t pointer to be stored to.
+ * @param hash The @ref XXH32_hash_t to be converted.
+ *
+ * @pre
+ * @p dst must not be `NULL`.
+ */
+XXH_PUBLIC_API void XXH32_canonicalFromHash(XXH32_canonical_t* dst, XXH32_hash_t hash);
-XXH state must first be allocated, using XXH*_createState() .
+/*!
+ * @brief Converts an @ref XXH32_canonical_t to a native @ref XXH32_hash_t.
+ *
+ * @param src The @ref XXH32_canonical_t to convert.
+ *
+ * @pre
+ * @p src must not be `NULL`.
+ *
+ * @return The converted hash.
+ */
+XXH_PUBLIC_API XXH32_hash_t XXH32_hashFromCanonical(const XXH32_canonical_t* src);
-Start a new hash by initializing state with a seed, using XXH*_reset().
-Then, feed the hash state by calling XXH*_update() as many times as necessary.
-Obviously, input must be allocated and read accessible.
-The function returns an error code, with 0 meaning OK, and any other value meaning there is an error.
+#ifdef __has_attribute
+# define XXH_HAS_ATTRIBUTE(x) __has_attribute(x)
+#else
+# define XXH_HAS_ATTRIBUTE(x) 0
+#endif
-Finally, a hash value can be produced anytime, by using XXH*_digest().
-This function returns the nn-bits hash as an int or long long.
+/* C-language Attributes are added in C23. */
+#if defined(__STDC_VERSION__) && (__STDC_VERSION__ > 201710L) && defined(__has_c_attribute)
+# define XXH_HAS_C_ATTRIBUTE(x) __has_c_attribute(x)
+#else
+# define XXH_HAS_C_ATTRIBUTE(x) 0
+#endif
-It's still possible to continue inserting input into the hash state after a digest,
-and generate some new hashes later on, by calling again XXH*_digest().
+#if defined(__cplusplus) && defined(__has_cpp_attribute)
+# define XXH_HAS_CPP_ATTRIBUTE(x) __has_cpp_attribute(x)
+#else
+# define XXH_HAS_CPP_ATTRIBUTE(x) 0
+#endif
-When done, free XXH state space if it was allocated dynamically.
+/*
+Define XXH_FALLTHROUGH macro for annotating switch case with the 'fallthrough' attribute
+introduced in CPP17 and C23.
+CPP17 : https://en.cppreference.com/w/cpp/language/attributes/fallthrough
+C23 : https://en.cppreference.com/w/c/language/attributes/fallthrough
*/
+#if XXH_HAS_C_ATTRIBUTE(x)
+# define XXH_FALLTHROUGH [[fallthrough]]
+#elif XXH_HAS_CPP_ATTRIBUTE(x)
+# define XXH_FALLTHROUGH [[fallthrough]]
+#elif XXH_HAS_ATTRIBUTE(__fallthrough__)
+# define XXH_FALLTHROUGH __attribute__ ((fallthrough))
+#else
+# define XXH_FALLTHROUGH
+#endif
+/*!
+ * @}
+ * @ingroup public
+ * @{
+ */
-/* **************************
-* Utils
-****************************/
-#if !(defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) /* ! C99 */
-# define restrict /* disable restrict */
+#ifndef XXH_NO_LONG_LONG
+/*-**********************************************************************
+* 64-bit hash
+************************************************************************/
+#if defined(XXH_DOXYGEN) /* don't include <stdint.h> */
+/*!
+ * @brief An unsigned 64-bit integer.
+ *
+ * Not necessarily defined to `uint64_t` but functionally equivalent.
+ */
+typedef uint64_t XXH64_hash_t;
+#elif !defined (__VMS) \
+ && (defined (__cplusplus) \
+ || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) )
+# include <stdint.h>
+ typedef uint64_t XXH64_hash_t;
+#else
+# include <limits.h>
+# if defined(__LP64__) && ULONG_MAX == 0xFFFFFFFFFFFFFFFFULL
+ /* LP64 ABI says uint64_t is unsigned long */
+ typedef unsigned long XXH64_hash_t;
+# else
+ /* the following type must have a width of 64-bit */
+ typedef unsigned long long XXH64_hash_t;
+# endif
#endif
-XXH_PUBLIC_API void XXH32_copyState(XXH32_state_t* restrict dst_state, const XXH32_state_t* restrict src_state);
-XXH_PUBLIC_API void XXH64_copyState(XXH64_state_t* restrict dst_state, const XXH64_state_t* restrict src_state);
+/*!
+ * @}
+ *
+ * @defgroup xxh64_family XXH64 family
+ * @ingroup public
+ * @{
+ * Contains functions used in the classic 64-bit xxHash algorithm.
+ *
+ * @note
+ * XXH3 provides competitive speed for both 32-bit and 64-bit systems,
+ * and offers true 64/128 bit hash results.
+ * It provides better speed for systems with vector processing capabilities.
+ */
-/* **************************
-* Canonical representation
-****************************/
-/* Default result type for XXH functions are primitive unsigned 32 and 64 bits.
-* The canonical representation uses human-readable write convention, aka big-endian (large digits first).
-* These functions allow transformation of hash result into and from its canonical format.
-* This way, hash values can be written into a file / memory, and remain comparable on different systems and programs.
-*/
-typedef struct { unsigned char digest[4]; } XXH32_canonical_t;
-typedef struct { unsigned char digest[8]; } XXH64_canonical_t;
+/*!
+ * @brief Calculates the 64-bit hash of @p input using xxHash64.
+ *
+ * This function usually runs faster on 64-bit systems, but slower on 32-bit
+ * systems (see benchmark).
+ *
+ * @param input The block of data to be hashed, at least @p length bytes in size.
+ * @param length The length of @p input, in bytes.
+ * @param seed The 64-bit seed to alter the hash's output predictably.
+ *
+ * @pre
+ * The memory between @p input and @p input + @p length must be valid,
+ * readable, contiguous memory. However, if @p length is `0`, @p input may be
+ * `NULL`. In C++, this also must be *TriviallyCopyable*.
+ *
+ * @return The calculated 64-bit hash.
+ *
+ * @see
+ * XXH32(), XXH3_64bits_withSeed(), XXH3_128bits_withSeed(), XXH128():
+ * Direct equivalents for the other variants of xxHash.
+ * @see
+ * XXH64_createState(), XXH64_update(), XXH64_digest(): Streaming version.
+ */
+XXH_PUBLIC_API XXH64_hash_t XXH64(const void* input, size_t length, XXH64_hash_t seed);
-XXH_PUBLIC_API void XXH32_canonicalFromHash(XXH32_canonical_t* dst, XXH32_hash_t hash);
-XXH_PUBLIC_API void XXH64_canonicalFromHash(XXH64_canonical_t* dst, XXH64_hash_t hash);
+/******* Streaming *******/
+/*!
+ * @brief The opaque state struct for the XXH64 streaming API.
+ *
+ * @see XXH64_state_s for details.
+ */
+typedef struct XXH64_state_s XXH64_state_t; /* incomplete type */
+XXH_PUBLIC_API XXH64_state_t* XXH64_createState(void);
+XXH_PUBLIC_API XXH_errorcode XXH64_freeState(XXH64_state_t* statePtr);
+XXH_PUBLIC_API void XXH64_copyState(XXH64_state_t* dst_state, const XXH64_state_t* src_state);
-XXH_PUBLIC_API XXH32_hash_t XXH32_hashFromCanonical(const XXH32_canonical_t* src);
+XXH_PUBLIC_API XXH_errorcode XXH64_reset (XXH64_state_t* statePtr, XXH64_hash_t seed);
+XXH_PUBLIC_API XXH_errorcode XXH64_update (XXH64_state_t* statePtr, const void* input, size_t length);
+XXH_PUBLIC_API XXH64_hash_t XXH64_digest (const XXH64_state_t* statePtr);
+
+/******* Canonical representation *******/
+typedef struct { unsigned char digest[sizeof(XXH64_hash_t)]; } XXH64_canonical_t;
+XXH_PUBLIC_API void XXH64_canonicalFromHash(XXH64_canonical_t* dst, XXH64_hash_t hash);
XXH_PUBLIC_API XXH64_hash_t XXH64_hashFromCanonical(const XXH64_canonical_t* src);
+#ifndef XXH_NO_XXH3
+/*!
+ * @}
+ * ************************************************************************
+ * @defgroup xxh3_family XXH3 family
+ * @ingroup public
+ * @{
+ *
+ * XXH3 is a more recent hash algorithm featuring:
+ * - Improved speed for both small and large inputs
+ * - True 64-bit and 128-bit outputs
+ * - SIMD acceleration
+ * - Improved 32-bit viability
+ *
+ * Speed analysis methodology is explained here:
+ *
+ * https://fastcompression.blogspot.com/2019/03/presenting-xxh3.html
+ *
+ * Compared to XXH64, expect XXH3 to run approximately
+ * ~2x faster on large inputs and >3x faster on small ones,
+ * exact differences vary depending on platform.
+ *
+ * XXH3's speed benefits greatly from SIMD and 64-bit arithmetic,
+ * but does not require it.
+ * Any 32-bit and 64-bit targets that can run XXH32 smoothly
+ * can run XXH3 at competitive speeds, even without vector support.
+ * Further details are explained in the implementation.
+ *
+ * Optimized implementations are provided for AVX512, AVX2, SSE2, NEON, POWER8,
+ * ZVector and scalar targets. This can be controlled via the XXH_VECTOR macro.
+ *
+ * XXH3 implementation is portable:
+ * it has a generic C90 formulation that can be compiled on any platform,
+ * all implementations generage exactly the same hash value on all platforms.
+ * Starting from v0.8.0, it's also labelled "stable", meaning that
+ * any future version will also generate the same hash value.
+ *
+ * XXH3 offers 2 variants, _64bits and _128bits.
+ *
+ * When only 64 bits are needed, prefer invoking the _64bits variant, as it
+ * reduces the amount of mixing, resulting in faster speed on small inputs.
+ * It's also generally simpler to manipulate a scalar return type than a struct.
+ *
+ * The API supports one-shot hashing, streaming mode, and custom secrets.
+ */
+
+/*-**********************************************************************
+* XXH3 64-bit variant
+************************************************************************/
+
+/* XXH3_64bits():
+ * default 64-bit variant, using default secret and default seed of 0.
+ * It's the fastest variant. */
+XXH_PUBLIC_API XXH64_hash_t XXH3_64bits(const void* data, size_t len);
+
+/*
+ * XXH3_64bits_withSeed():
+ * This variant generates a custom secret on the fly
+ * based on default secret altered using the `seed` value.
+ * While this operation is decently fast, note that it's not completely free.
+ * Note: seed==0 produces the same results as XXH3_64bits().
+ */
+XXH_PUBLIC_API XXH64_hash_t XXH3_64bits_withSeed(const void* data, size_t len, XXH64_hash_t seed);
+
+/*!
+ * The bare minimum size for a custom secret.
+ *
+ * @see
+ * XXH3_64bits_withSecret(), XXH3_64bits_reset_withSecret(),
+ * XXH3_128bits_withSecret(), XXH3_128bits_reset_withSecret().
+ */
+#define XXH3_SECRET_SIZE_MIN 136
+
+/*
+ * XXH3_64bits_withSecret():
+ * It's possible to provide any blob of bytes as a "secret" to generate the hash.
+ * This makes it more difficult for an external actor to prepare an intentional collision.
+ * The main condition is that secretSize *must* be large enough (>= XXH3_SECRET_SIZE_MIN).
+ * However, the quality of the secret impacts the dispersion of the hash algorithm.
+ * Therefore, the secret _must_ look like a bunch of random bytes.
+ * Avoid "trivial" or structured data such as repeated sequences or a text document.
+ * Whenever in doubt about the "randomness" of the blob of bytes,
+ * consider employing "XXH3_generateSecret()" instead (see below).
+ * It will generate a proper high entropy secret derived from the blob of bytes.
+ * Another advantage of using XXH3_generateSecret() is that
+ * it guarantees that all bits within the initial blob of bytes
+ * will impact every bit of the output.
+ * This is not necessarily the case when using the blob of bytes directly
+ * because, when hashing _small_ inputs, only a portion of the secret is employed.
+ */
+XXH_PUBLIC_API XXH64_hash_t XXH3_64bits_withSecret(const void* data, size_t len, const void* secret, size_t secretSize);
+
+
+/******* Streaming *******/
+/*
+ * Streaming requires state maintenance.
+ * This operation costs memory and CPU.
+ * As a consequence, streaming is slower than one-shot hashing.
+ * For better performance, prefer one-shot functions whenever applicable.
+ */
+
+/*!
+ * @brief The state struct for the XXH3 streaming API.
+ *
+ * @see XXH3_state_s for details.
+ */
+typedef struct XXH3_state_s XXH3_state_t;
+XXH_PUBLIC_API XXH3_state_t* XXH3_createState(void);
+XXH_PUBLIC_API XXH_errorcode XXH3_freeState(XXH3_state_t* statePtr);
+XXH_PUBLIC_API void XXH3_copyState(XXH3_state_t* dst_state, const XXH3_state_t* src_state);
+
+/*
+ * XXH3_64bits_reset():
+ * Initialize with default parameters.
+ * digest will be equivalent to `XXH3_64bits()`.
+ */
+XXH_PUBLIC_API XXH_errorcode XXH3_64bits_reset(XXH3_state_t* statePtr);
+/*
+ * XXH3_64bits_reset_withSeed():
+ * Generate a custom secret from `seed`, and store it into `statePtr`.
+ * digest will be equivalent to `XXH3_64bits_withSeed()`.
+ */
+XXH_PUBLIC_API XXH_errorcode XXH3_64bits_reset_withSeed(XXH3_state_t* statePtr, XXH64_hash_t seed);
+/*
+ * XXH3_64bits_reset_withSecret():
+ * `secret` is referenced, it _must outlive_ the hash streaming session.
+ * Similar to one-shot API, `secretSize` must be >= `XXH3_SECRET_SIZE_MIN`,
+ * and the quality of produced hash values depends on secret's entropy
+ * (secret's content should look like a bunch of random bytes).
+ * When in doubt about the randomness of a candidate `secret`,
+ * consider employing `XXH3_generateSecret()` instead (see below).
+ */
+XXH_PUBLIC_API XXH_errorcode XXH3_64bits_reset_withSecret(XXH3_state_t* statePtr, const void* secret, size_t secretSize);
+
+XXH_PUBLIC_API XXH_errorcode XXH3_64bits_update (XXH3_state_t* statePtr, const void* input, size_t length);
+XXH_PUBLIC_API XXH64_hash_t XXH3_64bits_digest (const XXH3_state_t* statePtr);
+
+/* note : canonical representation of XXH3 is the same as XXH64
+ * since they both produce XXH64_hash_t values */
+
+
+/*-**********************************************************************
+* XXH3 128-bit variant
+************************************************************************/
+
+/*!
+ * @brief The return value from 128-bit hashes.
+ *
+ * Stored in little endian order, although the fields themselves are in native
+ * endianness.
+ */
+typedef struct {
+ XXH64_hash_t low64; /*!< `value & 0xFFFFFFFFFFFFFFFF` */
+ XXH64_hash_t high64; /*!< `value >> 64` */
+} XXH128_hash_t;
+
+XXH_PUBLIC_API XXH128_hash_t XXH3_128bits(const void* data, size_t len);
+XXH_PUBLIC_API XXH128_hash_t XXH3_128bits_withSeed(const void* data, size_t len, XXH64_hash_t seed);
+XXH_PUBLIC_API XXH128_hash_t XXH3_128bits_withSecret(const void* data, size_t len, const void* secret, size_t secretSize);
+
+/******* Streaming *******/
+/*
+ * Streaming requires state maintenance.
+ * This operation costs memory and CPU.
+ * As a consequence, streaming is slower than one-shot hashing.
+ * For better performance, prefer one-shot functions whenever applicable.
+ *
+ * XXH3_128bits uses the same XXH3_state_t as XXH3_64bits().
+ * Use already declared XXH3_createState() and XXH3_freeState().
+ *
+ * All reset and streaming functions have same meaning as their 64-bit counterpart.
+ */
+
+XXH_PUBLIC_API XXH_errorcode XXH3_128bits_reset(XXH3_state_t* statePtr);
+XXH_PUBLIC_API XXH_errorcode XXH3_128bits_reset_withSeed(XXH3_state_t* statePtr, XXH64_hash_t seed);
+XXH_PUBLIC_API XXH_errorcode XXH3_128bits_reset_withSecret(XXH3_state_t* statePtr, const void* secret, size_t secretSize);
+
+XXH_PUBLIC_API XXH_errorcode XXH3_128bits_update (XXH3_state_t* statePtr, const void* input, size_t length);
+XXH_PUBLIC_API XXH128_hash_t XXH3_128bits_digest (const XXH3_state_t* statePtr);
+
+/* Following helper functions make it possible to compare XXH128_hast_t values.
+ * Since XXH128_hash_t is a structure, this capability is not offered by the language.
+ * Note: For better performance, these functions can be inlined using XXH_INLINE_ALL */
+
+/*!
+ * XXH128_isEqual():
+ * Return: 1 if `h1` and `h2` are equal, 0 if they are not.
+ */
+XXH_PUBLIC_API int XXH128_isEqual(XXH128_hash_t h1, XXH128_hash_t h2);
+
+/*!
+ * XXH128_cmp():
+ *
+ * This comparator is compatible with stdlib's `qsort()`/`bsearch()`.
+ *
+ * return: >0 if *h128_1 > *h128_2
+ * =0 if *h128_1 == *h128_2
+ * <0 if *h128_1 < *h128_2
+ */
+XXH_PUBLIC_API int XXH128_cmp(const void* h128_1, const void* h128_2);
+
+
+/******* Canonical representation *******/
+typedef struct { unsigned char digest[sizeof(XXH128_hash_t)]; } XXH128_canonical_t;
+XXH_PUBLIC_API void XXH128_canonicalFromHash(XXH128_canonical_t* dst, XXH128_hash_t hash);
+XXH_PUBLIC_API XXH128_hash_t XXH128_hashFromCanonical(const XXH128_canonical_t* src);
+
+
+#endif /* !XXH_NO_XXH3 */
+#endif /* XXH_NO_LONG_LONG */
+
+/*!
+ * @}
+ */
#endif /* XXHASH_H_5627135585666179 */
-/* ================================================================================================
- This section contains definitions which are not guaranteed to remain stable.
- They may change in future versions, becoming incompatible with a different version of the library.
- They shall only be used with static linking.
- Never use these definitions in association with dynamic linking !
-=================================================================================================== */
-#if defined(XXH_STATIC_LINKING_ONLY) && !defined(XXH_STATIC_H_3543687687345)
-#define XXH_STATIC_H_3543687687345
-
-/* These definitions are only meant to allow allocation of XXH state
- statically, on stack, or in a struct for example.
- Do not use members directly. */
-
- struct XXH32_state_s {
- unsigned total_len_32;
- unsigned large_len;
- unsigned v1;
- unsigned v2;
- unsigned v3;
- unsigned v4;
- unsigned mem32[4]; /* buffer defined as U32 for alignment */
- unsigned memsize;
- unsigned reserved; /* never read nor write, will be removed in a future version */
- }; /* typedef'd to XXH32_state_t */
-
- struct XXH64_state_s {
- unsigned long long total_len;
- unsigned long long v1;
- unsigned long long v2;
- unsigned long long v3;
- unsigned long long v4;
- unsigned long long mem64[4]; /* buffer defined as U64 for alignment */
- unsigned memsize;
- unsigned reserved[2]; /* never read nor write, will be removed in a future version */
- }; /* typedef'd to XXH64_state_t */
-
-
-# ifdef XXH_PRIVATE_API
-# include "xxhash.c" /* include xxhash functions as `static`, for inlining */
+#if defined(XXH_STATIC_LINKING_ONLY) && !defined(XXHASH_H_STATIC_13879238742)
+#define XXHASH_H_STATIC_13879238742
+/* ****************************************************************************
+ * This section contains declarations which are not guaranteed to remain stable.
+ * They may change in future versions, becoming incompatible with a different
+ * version of the library.
+ * These declarations should only be used with static linking.
+ * Never use them in association with dynamic linking!
+ ***************************************************************************** */
+
+/*
+ * These definitions are only present to allow static allocation
+ * of XXH states, on stack or in a struct, for example.
+ * Never **ever** access their members directly.
+ */
+
+/*!
+ * @internal
+ * @brief Structure for XXH32 streaming API.
+ *
+ * @note This is only defined when @ref XXH_STATIC_LINKING_ONLY,
+ * @ref XXH_INLINE_ALL, or @ref XXH_IMPLEMENTATION is defined. Otherwise it is
+ * an opaque type. This allows fields to safely be changed.
+ *
+ * Typedef'd to @ref XXH32_state_t.
+ * Do not access the members of this struct directly.
+ * @see XXH64_state_s, XXH3_state_s
+ */
+struct XXH32_state_s {
+ XXH32_hash_t total_len_32; /*!< Total length hashed, modulo 2^32 */
+ XXH32_hash_t large_len; /*!< Whether the hash is >= 16 (handles @ref total_len_32 overflow) */
+ XXH32_hash_t v[4]; /*!< Accumulator lanes */
+ XXH32_hash_t mem32[4]; /*!< Internal buffer for partial reads. Treated as unsigned char[16]. */
+ XXH32_hash_t memsize; /*!< Amount of data in @ref mem32 */
+ XXH32_hash_t reserved; /*!< Reserved field. Do not read nor write to it. */
+}; /* typedef'd to XXH32_state_t */
+
+
+#ifndef XXH_NO_LONG_LONG /* defined when there is no 64-bit support */
+
+/*!
+ * @internal
+ * @brief Structure for XXH64 streaming API.
+ *
+ * @note This is only defined when @ref XXH_STATIC_LINKING_ONLY,
+ * @ref XXH_INLINE_ALL, or @ref XXH_IMPLEMENTATION is defined. Otherwise it is
+ * an opaque type. This allows fields to safely be changed.
+ *
+ * Typedef'd to @ref XXH64_state_t.
+ * Do not access the members of this struct directly.
+ * @see XXH32_state_s, XXH3_state_s
+ */
+struct XXH64_state_s {
+ XXH64_hash_t total_len; /*!< Total length hashed. This is always 64-bit. */
+ XXH64_hash_t v[4]; /*!< Accumulator lanes */
+ XXH64_hash_t mem64[4]; /*!< Internal buffer for partial reads. Treated as unsigned char[32]. */
+ XXH32_hash_t memsize; /*!< Amount of data in @ref mem64 */
+ XXH32_hash_t reserved32; /*!< Reserved field, needed for padding anyways*/
+ XXH64_hash_t reserved64; /*!< Reserved field. Do not read or write to it. */
+}; /* typedef'd to XXH64_state_t */
+
+
+#ifndef XXH_NO_XXH3
+
+#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) /* >= C11 */
+# include <stdalign.h>
+# define XXH_ALIGN(n) alignas(n)
+#elif defined(__cplusplus) && (__cplusplus >= 201103L) /* >= C++11 */
+/* In C++ alignas() is a keyword */
+# define XXH_ALIGN(n) alignas(n)
+#elif defined(__GNUC__)
+# define XXH_ALIGN(n) __attribute__ ((aligned(n)))
+#elif defined(_MSC_VER)
+# define XXH_ALIGN(n) __declspec(align(n))
+#else
+# define XXH_ALIGN(n) /* disabled */
+#endif
+
+/* Old GCC versions only accept the attribute after the type in structures. */
+#if !(defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L)) /* C11+ */ \
+ && ! (defined(__cplusplus) && (__cplusplus >= 201103L)) /* >= C++11 */ \
+ && defined(__GNUC__)
+# define XXH_ALIGN_MEMBER(align, type) type XXH_ALIGN(align)
+#else
+# define XXH_ALIGN_MEMBER(align, type) XXH_ALIGN(align) type
+#endif
+
+/*!
+ * @brief The size of the internal XXH3 buffer.
+ *
+ * This is the optimal update size for incremental hashing.
+ *
+ * @see XXH3_64b_update(), XXH3_128b_update().
+ */
+#define XXH3_INTERNALBUFFER_SIZE 256
+
+/*!
+ * @brief Default size of the secret buffer (and @ref XXH3_kSecret).
+ *
+ * This is the size used in @ref XXH3_kSecret and the seeded functions.
+ *
+ * Not to be confused with @ref XXH3_SECRET_SIZE_MIN.
+ */
+#define XXH3_SECRET_DEFAULT_SIZE 192
+
+/*!
+ * @internal
+ * @brief Structure for XXH3 streaming API.
+ *
+ * @note This is only defined when @ref XXH_STATIC_LINKING_ONLY,
+ * @ref XXH_INLINE_ALL, or @ref XXH_IMPLEMENTATION is defined.
+ * Otherwise it is an opaque type.
+ * Never use this definition in combination with dynamic library.
+ * This allows fields to safely be changed in the future.
+ *
+ * @note ** This structure has a strict alignment requirement of 64 bytes!! **
+ * Do not allocate this with `malloc()` or `new`,
+ * it will not be sufficiently aligned.
+ * Use @ref XXH3_createState() and @ref XXH3_freeState(), or stack allocation.
+ *
+ * Typedef'd to @ref XXH3_state_t.
+ * Do never access the members of this struct directly.
+ *
+ * @see XXH3_INITSTATE() for stack initialization.
+ * @see XXH3_createState(), XXH3_freeState().
+ * @see XXH32_state_s, XXH64_state_s
+ */
+struct XXH3_state_s {
+ XXH_ALIGN_MEMBER(64, XXH64_hash_t acc[8]);
+ /*!< The 8 accumulators. Similar to `vN` in @ref XXH32_state_s::v1 and @ref XXH64_state_s */
+ XXH_ALIGN_MEMBER(64, unsigned char customSecret[XXH3_SECRET_DEFAULT_SIZE]);
+ /*!< Used to store a custom secret generated from a seed. */
+ XXH_ALIGN_MEMBER(64, unsigned char buffer[XXH3_INTERNALBUFFER_SIZE]);
+ /*!< The internal buffer. @see XXH32_state_s::mem32 */
+ XXH32_hash_t bufferedSize;
+ /*!< The amount of memory in @ref buffer, @see XXH32_state_s::memsize */
+ XXH32_hash_t useSeed;
+ /*!< Reserved field. Needed for padding on 64-bit. */
+ size_t nbStripesSoFar;
+ /*!< Number or stripes processed. */
+ XXH64_hash_t totalLen;
+ /*!< Total length hashed. 64-bit even on 32-bit targets. */
+ size_t nbStripesPerBlock;
+ /*!< Number of stripes per block. */
+ size_t secretLimit;
+ /*!< Size of @ref customSecret or @ref extSecret */
+ XXH64_hash_t seed;
+ /*!< Seed for _withSeed variants. Must be zero otherwise, @see XXH3_INITSTATE() */
+ XXH64_hash_t reserved64;
+ /*!< Reserved field. */
+ const unsigned char* extSecret;
+ /*!< Reference to an external secret for the _withSecret variants, NULL
+ * for other variants. */
+ /* note: there may be some padding at the end due to alignment on 64 bytes */
+}; /* typedef'd to XXH3_state_t */
+
+#undef XXH_ALIGN_MEMBER
+
+/*!
+ * @brief Initializes a stack-allocated `XXH3_state_s`.
+ *
+ * When the @ref XXH3_state_t structure is merely emplaced on stack,
+ * it should be initialized with XXH3_INITSTATE() or a memset()
+ * in case its first reset uses XXH3_NNbits_reset_withSeed().
+ * This init can be omitted if the first reset uses default or _withSecret mode.
+ * This operation isn't necessary when the state is created with XXH3_createState().
+ * Note that this doesn't prepare the state for a streaming operation,
+ * it's still necessary to use XXH3_NNbits_reset*() afterwards.
+ */
+#define XXH3_INITSTATE(XXH3_state_ptr) { (XXH3_state_ptr)->seed = 0; }
+
+
+/* XXH128() :
+ * simple alias to pre-selected XXH3_128bits variant
+ */
+XXH_PUBLIC_API XXH128_hash_t XXH128(const void* data, size_t len, XXH64_hash_t seed);
+
+
+/* === Experimental API === */
+/* Symbols defined below must be considered tied to a specific library version. */
+
+/*
+ * XXH3_generateSecret():
+ *
+ * Derive a high-entropy secret from any user-defined content, named customSeed.
+ * The generated secret can be used in combination with `*_withSecret()` functions.
+ * The `_withSecret()` variants are useful to provide a higher level of protection than 64-bit seed,
+ * as it becomes much more difficult for an external actor to guess how to impact the calculation logic.
+ *
+ * The function accepts as input a custom seed of any length and any content,
+ * and derives from it a high-entropy secret of length @secretSize
+ * into an already allocated buffer @secretBuffer.
+ * @secretSize must be >= XXH3_SECRET_SIZE_MIN
+ *
+ * The generated secret can then be used with any `*_withSecret()` variant.
+ * Functions `XXH3_128bits_withSecret()`, `XXH3_64bits_withSecret()`,
+ * `XXH3_128bits_reset_withSecret()` and `XXH3_64bits_reset_withSecret()`
+ * are part of this list. They all accept a `secret` parameter
+ * which must be large enough for implementation reasons (>= XXH3_SECRET_SIZE_MIN)
+ * _and_ feature very high entropy (consist of random-looking bytes).
+ * These conditions can be a high bar to meet, so
+ * XXH3_generateSecret() can be employed to ensure proper quality.
+ *
+ * customSeed can be anything. It can have any size, even small ones,
+ * and its content can be anything, even "poor entropy" sources such as a bunch of zeroes.
+ * The resulting `secret` will nonetheless provide all required qualities.
+ *
+ * When customSeedSize > 0, supplying NULL as customSeed is undefined behavior.
+ */
+XXH_PUBLIC_API XXH_errorcode XXH3_generateSecret(void* secretBuffer, size_t secretSize, const void* customSeed, size_t customSeedSize);
+
+
+/*
+ * XXH3_generateSecret_fromSeed():
+ *
+ * Generate the same secret as the _withSeed() variants.
+ *
+ * The resulting secret has a length of XXH3_SECRET_DEFAULT_SIZE (necessarily).
+ * @secretBuffer must be already allocated, of size at least XXH3_SECRET_DEFAULT_SIZE bytes.
+ *
+ * The generated secret can be used in combination with
+ *`*_withSecret()` and `_withSecretandSeed()` variants.
+ * This generator is notably useful in combination with `_withSecretandSeed()`,
+ * as a way to emulate a faster `_withSeed()` variant.
+ */
+XXH_PUBLIC_API void XXH3_generateSecret_fromSeed(void* secretBuffer, XXH64_hash_t seed);
+
+/*
+ * *_withSecretandSeed() :
+ * These variants generate hash values using either
+ * @seed for "short" keys (< XXH3_MIDSIZE_MAX = 240 bytes)
+ * or @secret for "large" keys (>= XXH3_MIDSIZE_MAX).
+ *
+ * This generally benefits speed, compared to `_withSeed()` or `_withSecret()`.
+ * `_withSeed()` has to generate the secret on the fly for "large" keys.
+ * It's fast, but can be perceptible for "not so large" keys (< 1 KB).
+ * `_withSecret()` has to generate the masks on the fly for "small" keys,
+ * which requires more instructions than _withSeed() variants.
+ * Therefore, _withSecretandSeed variant combines the best of both worlds.
+ *
+ * When @secret has been generated by XXH3_generateSecret_fromSeed(),
+ * this variant produces *exactly* the same results as `_withSeed()` variant,
+ * hence offering only a pure speed benefit on "large" input,
+ * by skipping the need to regenerate the secret for every large input.
+ *
+ * Another usage scenario is to hash the secret to a 64-bit hash value,
+ * for example with XXH3_64bits(), which then becomes the seed,
+ * and then employ both the seed and the secret in _withSecretandSeed().
+ * On top of speed, an added benefit is that each bit in the secret
+ * has a 50% chance to swap each bit in the output,
+ * via its impact to the seed.
+ * This is not guaranteed when using the secret directly in "small data" scenarios,
+ * because only portions of the secret are employed for small data.
+ */
+XXH_PUBLIC_API XXH64_hash_t
+XXH3_64bits_withSecretandSeed(const void* data, size_t len,
+ const void* secret, size_t secretSize,
+ XXH64_hash_t seed);
+
+XXH_PUBLIC_API XXH128_hash_t
+XXH3_128bits_withSecretandSeed(const void* data, size_t len,
+ const void* secret, size_t secretSize,
+ XXH64_hash_t seed64);
+
+XXH_PUBLIC_API XXH_errorcode
+XXH3_64bits_reset_withSecretandSeed(XXH3_state_t* statePtr,
+ const void* secret, size_t secretSize,
+ XXH64_hash_t seed64);
+
+XXH_PUBLIC_API XXH_errorcode
+XXH3_128bits_reset_withSecretandSeed(XXH3_state_t* statePtr,
+ const void* secret, size_t secretSize,
+ XXH64_hash_t seed64);
+
+
+#endif /* XXH_NO_XXH3 */
+#endif /* XXH_NO_LONG_LONG */
+#if defined(XXH_INLINE_ALL) || defined(XXH_PRIVATE_API)
+# define XXH_IMPLEMENTATION
+#endif
+
+#endif /* defined(XXH_STATIC_LINKING_ONLY) && !defined(XXHASH_H_STATIC_13879238742) */
+
+
+/* ======================================================================== */
+/* ======================================================================== */
+/* ======================================================================== */
+
+
+/*-**********************************************************************
+ * xxHash implementation
+ *-**********************************************************************
+ * xxHash's implementation used to be hosted inside xxhash.c.
+ *
+ * However, inlining requires implementation to be visible to the compiler,
+ * hence be included alongside the header.
+ * Previously, implementation was hosted inside xxhash.c,
+ * which was then #included when inlining was activated.
+ * This construction created issues with a few build and install systems,
+ * as it required xxhash.c to be stored in /include directory.
+ *
+ * xxHash implementation is now directly integrated within xxhash.h.
+ * As a consequence, xxhash.c is no longer needed in /include.
+ *
+ * xxhash.c is still available and is still useful.
+ * In a "normal" setup, when xxhash is not inlined,
+ * xxhash.h only exposes the prototypes and public symbols,
+ * while xxhash.c can be built into an object file xxhash.o
+ * which can then be linked into the final binary.
+ ************************************************************************/
+
+#if ( defined(XXH_INLINE_ALL) || defined(XXH_PRIVATE_API) \
+ || defined(XXH_IMPLEMENTATION) ) && !defined(XXH_IMPLEM_13a8737387)
+# define XXH_IMPLEM_13a8737387
+
+/* *************************************
+* Tuning parameters
+***************************************/
+
+/*!
+ * @defgroup tuning Tuning parameters
+ * @{
+ *
+ * Various macros to control xxHash's behavior.
+ */
+#ifdef XXH_DOXYGEN
+/*!
+ * @brief Define this to disable 64-bit code.
+ *
+ * Useful if only using the @ref xxh32_family and you have a strict C90 compiler.
+ */
+# define XXH_NO_LONG_LONG
+# undef XXH_NO_LONG_LONG /* don't actually */
+/*!
+ * @brief Controls how unaligned memory is accessed.
+ *
+ * By default, access to unaligned memory is controlled by `memcpy()`, which is
+ * safe and portable.
+ *
+ * Unfortunately, on some target/compiler combinations, the generated assembly
+ * is sub-optimal.
+ *
+ * The below switch allow selection of a different access method
+ * in the search for improved performance.
+ *
+ * @par Possible options:
+ *
+ * - `XXH_FORCE_MEMORY_ACCESS=0` (default): `memcpy`
+ * @par
+ * Use `memcpy()`. Safe and portable. Note that most modern compilers will
+ * eliminate the function call and treat it as an unaligned access.
+ *
+ * - `XXH_FORCE_MEMORY_ACCESS=1`: `__attribute__((packed))`
+ * @par
+ * Depends on compiler extensions and is therefore not portable.
+ * This method is safe _if_ your compiler supports it,
+ * and *generally* as fast or faster than `memcpy`.
+ *
+ * - `XXH_FORCE_MEMORY_ACCESS=2`: Direct cast
+ * @par
+ * Casts directly and dereferences. This method doesn't depend on the
+ * compiler, but it violates the C standard as it directly dereferences an
+ * unaligned pointer. It can generate buggy code on targets which do not
+ * support unaligned memory accesses, but in some circumstances, it's the
+ * only known way to get the most performance.
+ *
+ * - `XXH_FORCE_MEMORY_ACCESS=3`: Byteshift
+ * @par
+ * Also portable. This can generate the best code on old compilers which don't
+ * inline small `memcpy()` calls, and it might also be faster on big-endian
+ * systems which lack a native byteswap instruction. However, some compilers
+ * will emit literal byteshifts even if the target supports unaligned access.
+ * .
+ *
+ * @warning
+ * Methods 1 and 2 rely on implementation-defined behavior. Use these with
+ * care, as what works on one compiler/platform/optimization level may cause
+ * another to read garbage data or even crash.
+ *
+ * See http://fastcompression.blogspot.com/2015/08/accessing-unaligned-memory.html for details.
+ *
+ * Prefer these methods in priority order (0 > 3 > 1 > 2)
+ */
+# define XXH_FORCE_MEMORY_ACCESS 0
+
+/*!
+ * @def XXH_FORCE_ALIGN_CHECK
+ * @brief If defined to non-zero, adds a special path for aligned inputs (XXH32()
+ * and XXH64() only).
+ *
+ * This is an important performance trick for architectures without decent
+ * unaligned memory access performance.
+ *
+ * It checks for input alignment, and when conditions are met, uses a "fast
+ * path" employing direct 32-bit/64-bit reads, resulting in _dramatically
+ * faster_ read speed.
+ *
+ * The check costs one initial branch per hash, which is generally negligible,
+ * but not zero.
+ *
+ * Moreover, it's not useful to generate an additional code path if memory
+ * access uses the same instruction for both aligned and unaligned
+ * addresses (e.g. x86 and aarch64).
+ *
+ * In these cases, the alignment check can be removed by setting this macro to 0.
+ * Then the code will always use unaligned memory access.
+ * Align check is automatically disabled on x86, x64 & arm64,
+ * which are platforms known to offer good unaligned memory accesses performance.
+ *
+ * This option does not affect XXH3 (only XXH32 and XXH64).
+ */
+# define XXH_FORCE_ALIGN_CHECK 0
+
+/*!
+ * @def XXH_NO_INLINE_HINTS
+ * @brief When non-zero, sets all functions to `static`.
+ *
+ * By default, xxHash tries to force the compiler to inline almost all internal
+ * functions.
+ *
+ * This can usually improve performance due to reduced jumping and improved
+ * constant folding, but significantly increases the size of the binary which
+ * might not be favorable.
+ *
+ * Additionally, sometimes the forced inlining can be detrimental to performance,
+ * depending on the architecture.
+ *
+ * XXH_NO_INLINE_HINTS marks all internal functions as static, giving the
+ * compiler full control on whether to inline or not.
+ *
+ * When not optimizing (-O0), optimizing for size (-Os, -Oz), or using
+ * -fno-inline with GCC or Clang, this will automatically be defined.
+ */
+# define XXH_NO_INLINE_HINTS 0
+
+/*!
+ * @def XXH32_ENDJMP
+ * @brief Whether to use a jump for `XXH32_finalize`.
+ *
+ * For performance, `XXH32_finalize` uses multiple branches in the finalizer.
+ * This is generally preferable for performance,
+ * but depending on exact architecture, a jmp may be preferable.
+ *
+ * This setting is only possibly making a difference for very small inputs.
+ */
+# define XXH32_ENDJMP 0
+
+/*!
+ * @internal
+ * @brief Redefines old internal names.
+ *
+ * For compatibility with code that uses xxHash's internals before the names
+ * were changed to improve namespacing. There is no other reason to use this.
+ */
+# define XXH_OLD_NAMES
+# undef XXH_OLD_NAMES /* don't actually use, it is ugly. */
+#endif /* XXH_DOXYGEN */
+/*!
+ * @}
+ */
+
+#ifndef XXH_FORCE_MEMORY_ACCESS /* can be defined externally, on command line for example */
+ /* prefer __packed__ structures (method 1) for gcc on armv7+ and mips */
+# if !defined(__clang__) && \
+( \
+ (defined(__INTEL_COMPILER) && !defined(_WIN32)) || \
+ ( \
+ defined(__GNUC__) && ( \
+ (defined(__ARM_ARCH) && __ARM_ARCH >= 7) || \
+ ( \
+ defined(__mips__) && \
+ (__mips <= 5 || __mips_isa_rev < 6) && \
+ (!defined(__mips16) || defined(__mips_mips16e2)) \
+ ) \
+ ) \
+ ) \
+)
+# define XXH_FORCE_MEMORY_ACCESS 1
+# endif
+#endif
+
+#ifndef XXH_FORCE_ALIGN_CHECK /* can be defined externally */
+# if defined(__i386) || defined(__x86_64__) || defined(__aarch64__) \
+ || defined(_M_IX86) || defined(_M_X64) || defined(_M_ARM64) /* visual */
+# define XXH_FORCE_ALIGN_CHECK 0
+# else
+# define XXH_FORCE_ALIGN_CHECK 1
+# endif
+#endif
+
+#ifndef XXH_NO_INLINE_HINTS
+# if defined(__OPTIMIZE_SIZE__) /* -Os, -Oz */ \
+ || defined(__NO_INLINE__) /* -O0, -fno-inline */
+# define XXH_NO_INLINE_HINTS 1
+# else
+# define XXH_NO_INLINE_HINTS 0
+# endif
+#endif
+
+#ifndef XXH32_ENDJMP
+/* generally preferable for performance */
+# define XXH32_ENDJMP 0
+#endif
+
+/*!
+ * @defgroup impl Implementation
+ * @{
+ */
+
+
+/* *************************************
+* Includes & Memory related functions
+***************************************/
+/* Modify the local functions below should you wish to use some other memory routines */
+/* for ZSTD_malloc(), ZSTD_free() */
+#define ZSTD_DEPS_NEED_MALLOC
+#include "zstd_deps.h" /* size_t, ZSTD_malloc, ZSTD_free, ZSTD_memcpy */
+static void* XXH_malloc(size_t s) { return ZSTD_malloc(s); }
+static void XXH_free (void* p) { ZSTD_free(p); }
+static void* XXH_memcpy(void* dest, const void* src, size_t size) { return ZSTD_memcpy(dest,src,size); }
+
+
+/* *************************************
+* Compiler Specific Options
+***************************************/
+#ifdef _MSC_VER /* Visual Studio warning fix */
+# pragma warning(disable : 4127) /* disable: C4127: conditional expression is constant */
+#endif
+
+#if XXH_NO_INLINE_HINTS /* disable inlining hints */
+# if defined(__GNUC__) || defined(__clang__)
+# define XXH_FORCE_INLINE static __attribute__((unused))
+# else
+# define XXH_FORCE_INLINE static
+# endif
+# define XXH_NO_INLINE static
+/* enable inlining hints */
+#elif defined(__GNUC__) || defined(__clang__)
+# define XXH_FORCE_INLINE static __inline__ __attribute__((always_inline, unused))
+# define XXH_NO_INLINE static __attribute__((noinline))
+#elif defined(_MSC_VER) /* Visual Studio */
+# define XXH_FORCE_INLINE static __forceinline
+# define XXH_NO_INLINE static __declspec(noinline)
+#elif defined (__cplusplus) \
+ || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) /* C99 */
+# define XXH_FORCE_INLINE static inline
+# define XXH_NO_INLINE static
+#else
+# define XXH_FORCE_INLINE static
+# define XXH_NO_INLINE static
+#endif
+
+
+
+/* *************************************
+* Debug
+***************************************/
+/*!
+ * @ingroup tuning
+ * @def XXH_DEBUGLEVEL
+ * @brief Sets the debugging level.
+ *
+ * XXH_DEBUGLEVEL is expected to be defined externally, typically via the
+ * compiler's command line options. The value must be a number.
+ */
+#ifndef XXH_DEBUGLEVEL
+# ifdef DEBUGLEVEL /* backwards compat */
+# define XXH_DEBUGLEVEL DEBUGLEVEL
+# else
+# define XXH_DEBUGLEVEL 0
+# endif
+#endif
+
+#if (XXH_DEBUGLEVEL>=1)
+# include <assert.h> /* note: can still be disabled with NDEBUG */
+# define XXH_ASSERT(c) assert(c)
+#else
+# define XXH_ASSERT(c) ((void)0)
+#endif
+
+/* note: use after variable declarations */
+#ifndef XXH_STATIC_ASSERT
+# if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) /* C11 */
+# include <assert.h>
+# define XXH_STATIC_ASSERT_WITH_MESSAGE(c,m) do { static_assert((c),m); } while(0)
+# elif defined(__cplusplus) && (__cplusplus >= 201103L) /* C++11 */
+# define XXH_STATIC_ASSERT_WITH_MESSAGE(c,m) do { static_assert((c),m); } while(0)
+# else
+# define XXH_STATIC_ASSERT_WITH_MESSAGE(c,m) do { struct xxh_sa { char x[(c) ? 1 : -1]; }; } while(0)
+# endif
+# define XXH_STATIC_ASSERT(c) XXH_STATIC_ASSERT_WITH_MESSAGE((c),#c)
+#endif
+
+/*!
+ * @internal
+ * @def XXH_COMPILER_GUARD(var)
+ * @brief Used to prevent unwanted optimizations for @p var.
+ *
+ * It uses an empty GCC inline assembly statement with a register constraint
+ * which forces @p var into a general purpose register (eg eax, ebx, ecx
+ * on x86) and marks it as modified.
+ *
+ * This is used in a few places to avoid unwanted autovectorization (e.g.
+ * XXH32_round()). All vectorization we want is explicit via intrinsics,
+ * and _usually_ isn't wanted elsewhere.
+ *
+ * We also use it to prevent unwanted constant folding for AArch64 in
+ * XXH3_initCustomSecret_scalar().
+ */
+#if defined(__GNUC__) || defined(__clang__)
+# define XXH_COMPILER_GUARD(var) __asm__ __volatile__("" : "+r" (var))
+#else
+# define XXH_COMPILER_GUARD(var) ((void)0)
+#endif
+
+/* *************************************
+* Basic Types
+***************************************/
+#if !defined (__VMS) \
+ && (defined (__cplusplus) \
+ || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) )
+# include <stdint.h>
+ typedef uint8_t xxh_u8;
+#else
+ typedef unsigned char xxh_u8;
+#endif
+typedef XXH32_hash_t xxh_u32;
+
+#ifdef XXH_OLD_NAMES
+# define BYTE xxh_u8
+# define U8 xxh_u8
+# define U32 xxh_u32
+#endif
+
+/* *** Memory access *** */
+
+/*!
+ * @internal
+ * @fn xxh_u32 XXH_read32(const void* ptr)
+ * @brief Reads an unaligned 32-bit integer from @p ptr in native endianness.
+ *
+ * Affected by @ref XXH_FORCE_MEMORY_ACCESS.
+ *
+ * @param ptr The pointer to read from.
+ * @return The 32-bit native endian integer from the bytes at @p ptr.
+ */
+
+/*!
+ * @internal
+ * @fn xxh_u32 XXH_readLE32(const void* ptr)
+ * @brief Reads an unaligned 32-bit little endian integer from @p ptr.
+ *
+ * Affected by @ref XXH_FORCE_MEMORY_ACCESS.
+ *
+ * @param ptr The pointer to read from.
+ * @return The 32-bit little endian integer from the bytes at @p ptr.
+ */
+
+/*!
+ * @internal
+ * @fn xxh_u32 XXH_readBE32(const void* ptr)
+ * @brief Reads an unaligned 32-bit big endian integer from @p ptr.
+ *
+ * Affected by @ref XXH_FORCE_MEMORY_ACCESS.
+ *
+ * @param ptr The pointer to read from.
+ * @return The 32-bit big endian integer from the bytes at @p ptr.
+ */
+
+/*!
+ * @internal
+ * @fn xxh_u32 XXH_readLE32_align(const void* ptr, XXH_alignment align)
+ * @brief Like @ref XXH_readLE32(), but has an option for aligned reads.
+ *
+ * Affected by @ref XXH_FORCE_MEMORY_ACCESS.
+ * Note that when @ref XXH_FORCE_ALIGN_CHECK == 0, the @p align parameter is
+ * always @ref XXH_alignment::XXH_unaligned.
+ *
+ * @param ptr The pointer to read from.
+ * @param align Whether @p ptr is aligned.
+ * @pre
+ * If @p align == @ref XXH_alignment::XXH_aligned, @p ptr must be 4 byte
+ * aligned.
+ * @return The 32-bit little endian integer from the bytes at @p ptr.
+ */
+
+#if (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS==3))
+/*
+ * Manual byteshift. Best for old compilers which don't inline memcpy.
+ * We actually directly use XXH_readLE32 and XXH_readBE32.
+ */
+#elif (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS==2))
+
+/*
+ * Force direct memory access. Only works on CPU which support unaligned memory
+ * access in hardware.
+ */
+static xxh_u32 XXH_read32(const void* memPtr) { return *(const xxh_u32*) memPtr; }
+
+#elif (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS==1))
+
+/*
+ * __pack instructions are safer but compiler specific, hence potentially
+ * problematic for some compilers.
+ *
+ * Currently only defined for GCC and ICC.
+ */
+#ifdef XXH_OLD_NAMES
+typedef union { xxh_u32 u32; } __attribute__((packed)) unalign;
+#endif
+static xxh_u32 XXH_read32(const void* ptr)
+{
+ typedef union { xxh_u32 u32; } __attribute__((packed)) xxh_unalign;
+ return ((const xxh_unalign*)ptr)->u32;
+}
+
+#else
+
+/*
+ * Portable and safe solution. Generally efficient.
+ * see: http://fastcompression.blogspot.com/2015/08/accessing-unaligned-memory.html
+ */
+static xxh_u32 XXH_read32(const void* memPtr)
+{
+ xxh_u32 val;
+ XXH_memcpy(&val, memPtr, sizeof(val));
+ return val;
+}
+
+#endif /* XXH_FORCE_DIRECT_MEMORY_ACCESS */
+
+
+/* *** Endianness *** */
+
+/*!
+ * @ingroup tuning
+ * @def XXH_CPU_LITTLE_ENDIAN
+ * @brief Whether the target is little endian.
+ *
+ * Defined to 1 if the target is little endian, or 0 if it is big endian.
+ * It can be defined externally, for example on the compiler command line.
+ *
+ * If it is not defined,
+ * a runtime check (which is usually constant folded) is used instead.
+ *
+ * @note
+ * This is not necessarily defined to an integer constant.
+ *
+ * @see XXH_isLittleEndian() for the runtime check.
+ */
+#ifndef XXH_CPU_LITTLE_ENDIAN
+/*
+ * Try to detect endianness automatically, to avoid the nonstandard behavior
+ * in `XXH_isLittleEndian()`
+ */
+# if defined(_WIN32) /* Windows is always little endian */ \
+ || defined(__LITTLE_ENDIAN__) \
+ || (defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)
+# define XXH_CPU_LITTLE_ENDIAN 1
+# elif defined(__BIG_ENDIAN__) \
+ || (defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)
+# define XXH_CPU_LITTLE_ENDIAN 0
+# else
+/*!
+ * @internal
+ * @brief Runtime check for @ref XXH_CPU_LITTLE_ENDIAN.
+ *
+ * Most compilers will constant fold this.
+ */
+static int XXH_isLittleEndian(void)
+{
+ /*
+ * Portable and well-defined behavior.
+ * Don't use static: it is detrimental to performance.
+ */
+ const union { xxh_u32 u; xxh_u8 c[4]; } one = { 1 };
+ return one.c[0];
+}
+# define XXH_CPU_LITTLE_ENDIAN XXH_isLittleEndian()
+# endif
+#endif
+
+
+
+
+/* ****************************************
+* Compiler-specific Functions and Macros
+******************************************/
+#define XXH_GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__)
+
+#ifdef __has_builtin
+# define XXH_HAS_BUILTIN(x) __has_builtin(x)
+#else
+# define XXH_HAS_BUILTIN(x) 0
+#endif
+
+/*!
+ * @internal
+ * @def XXH_rotl32(x,r)
+ * @brief 32-bit rotate left.
+ *
+ * @param x The 32-bit integer to be rotated.
+ * @param r The number of bits to rotate.
+ * @pre
+ * @p r > 0 && @p r < 32
+ * @note
+ * @p x and @p r may be evaluated multiple times.
+ * @return The rotated result.
+ */
+#if !defined(NO_CLANG_BUILTIN) && XXH_HAS_BUILTIN(__builtin_rotateleft32) \
+ && XXH_HAS_BUILTIN(__builtin_rotateleft64)
+# define XXH_rotl32 __builtin_rotateleft32
+# define XXH_rotl64 __builtin_rotateleft64
+/* Note: although _rotl exists for minGW (GCC under windows), performance seems poor */
+#elif defined(_MSC_VER)
+# define XXH_rotl32(x,r) _rotl(x,r)
+# define XXH_rotl64(x,r) _rotl64(x,r)
+#else
+# define XXH_rotl32(x,r) (((x) << (r)) | ((x) >> (32 - (r))))
+# define XXH_rotl64(x,r) (((x) << (r)) | ((x) >> (64 - (r))))
+#endif
+
+/*!
+ * @internal
+ * @fn xxh_u32 XXH_swap32(xxh_u32 x)
+ * @brief A 32-bit byteswap.
+ *
+ * @param x The 32-bit integer to byteswap.
+ * @return @p x, byteswapped.
+ */
+#if defined(_MSC_VER) /* Visual Studio */
+# define XXH_swap32 _byteswap_ulong
+#elif XXH_GCC_VERSION >= 403
+# define XXH_swap32 __builtin_bswap32
+#else
+static xxh_u32 XXH_swap32 (xxh_u32 x)
+{
+ return ((x << 24) & 0xff000000 ) |
+ ((x << 8) & 0x00ff0000 ) |
+ ((x >> 8) & 0x0000ff00 ) |
+ ((x >> 24) & 0x000000ff );
+}
+#endif
+
+
+/* ***************************
+* Memory reads
+*****************************/
+
+/*!
+ * @internal
+ * @brief Enum to indicate whether a pointer is aligned.
+ */
+typedef enum {
+ XXH_aligned, /*!< Aligned */
+ XXH_unaligned /*!< Possibly unaligned */
+} XXH_alignment;
+
+/*
+ * XXH_FORCE_MEMORY_ACCESS==3 is an endian-independent byteshift load.
+ *
+ * This is ideal for older compilers which don't inline memcpy.
+ */
+#if (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS==3))
+
+XXH_FORCE_INLINE xxh_u32 XXH_readLE32(const void* memPtr)
+{
+ const xxh_u8* bytePtr = (const xxh_u8 *)memPtr;
+ return bytePtr[0]
+ | ((xxh_u32)bytePtr[1] << 8)
+ | ((xxh_u32)bytePtr[2] << 16)
+ | ((xxh_u32)bytePtr[3] << 24);
+}
+
+XXH_FORCE_INLINE xxh_u32 XXH_readBE32(const void* memPtr)
+{
+ const xxh_u8* bytePtr = (const xxh_u8 *)memPtr;
+ return bytePtr[3]
+ | ((xxh_u32)bytePtr[2] << 8)
+ | ((xxh_u32)bytePtr[1] << 16)
+ | ((xxh_u32)bytePtr[0] << 24);
+}
+
+#else
+XXH_FORCE_INLINE xxh_u32 XXH_readLE32(const void* ptr)
+{
+ return XXH_CPU_LITTLE_ENDIAN ? XXH_read32(ptr) : XXH_swap32(XXH_read32(ptr));
+}
+
+static xxh_u32 XXH_readBE32(const void* ptr)
+{
+ return XXH_CPU_LITTLE_ENDIAN ? XXH_swap32(XXH_read32(ptr)) : XXH_read32(ptr);
+}
+#endif
+
+XXH_FORCE_INLINE xxh_u32
+XXH_readLE32_align(const void* ptr, XXH_alignment align)
+{
+ if (align==XXH_unaligned) {
+ return XXH_readLE32(ptr);
+ } else {
+ return XXH_CPU_LITTLE_ENDIAN ? *(const xxh_u32*)ptr : XXH_swap32(*(const xxh_u32*)ptr);
+ }
+}
+
+
+/* *************************************
+* Misc
+***************************************/
+/*! @ingroup public */
+XXH_PUBLIC_API unsigned XXH_versionNumber (void) { return XXH_VERSION_NUMBER; }
+
+
+/* *******************************************************************
+* 32-bit hash functions
+*********************************************************************/
+/*!
+ * @}
+ * @defgroup xxh32_impl XXH32 implementation
+ * @ingroup impl
+ * @{
+ */
+ /* #define instead of static const, to be used as initializers */
+#define XXH_PRIME32_1 0x9E3779B1U /*!< 0b10011110001101110111100110110001 */
+#define XXH_PRIME32_2 0x85EBCA77U /*!< 0b10000101111010111100101001110111 */
+#define XXH_PRIME32_3 0xC2B2AE3DU /*!< 0b11000010101100101010111000111101 */
+#define XXH_PRIME32_4 0x27D4EB2FU /*!< 0b00100111110101001110101100101111 */
+#define XXH_PRIME32_5 0x165667B1U /*!< 0b00010110010101100110011110110001 */
+
+#ifdef XXH_OLD_NAMES
+# define PRIME32_1 XXH_PRIME32_1
+# define PRIME32_2 XXH_PRIME32_2
+# define PRIME32_3 XXH_PRIME32_3
+# define PRIME32_4 XXH_PRIME32_4
+# define PRIME32_5 XXH_PRIME32_5
+#endif
+
+/*!
+ * @internal
+ * @brief Normal stripe processing routine.
+ *
+ * This shuffles the bits so that any bit from @p input impacts several bits in
+ * @p acc.
+ *
+ * @param acc The accumulator lane.
+ * @param input The stripe of input to mix.
+ * @return The mixed accumulator lane.
+ */
+static xxh_u32 XXH32_round(xxh_u32 acc, xxh_u32 input)
+{
+ acc += input * XXH_PRIME32_2;
+ acc = XXH_rotl32(acc, 13);
+ acc *= XXH_PRIME32_1;
+#if (defined(__SSE4_1__) || defined(__aarch64__)) && !defined(XXH_ENABLE_AUTOVECTORIZE)
+ /*
+ * UGLY HACK:
+ * A compiler fence is the only thing that prevents GCC and Clang from
+ * autovectorizing the XXH32 loop (pragmas and attributes don't work for some
+ * reason) without globally disabling SSE4.1.
+ *
+ * The reason we want to avoid vectorization is because despite working on
+ * 4 integers at a time, there are multiple factors slowing XXH32 down on
+ * SSE4:
+ * - There's a ridiculous amount of lag from pmulld (10 cycles of latency on
+ * newer chips!) making it slightly slower to multiply four integers at
+ * once compared to four integers independently. Even when pmulld was
+ * fastest, Sandy/Ivy Bridge, it is still not worth it to go into SSE
+ * just to multiply unless doing a long operation.
+ *
+ * - Four instructions are required to rotate,
+ * movqda tmp, v // not required with VEX encoding
+ * pslld tmp, 13 // tmp <<= 13
+ * psrld v, 19 // x >>= 19
+ * por v, tmp // x |= tmp
+ * compared to one for scalar:
+ * roll v, 13 // reliably fast across the board
+ * shldl v, v, 13 // Sandy Bridge and later prefer this for some reason
+ *
+ * - Instruction level parallelism is actually more beneficial here because
+ * the SIMD actually serializes this operation: While v1 is rotating, v2
+ * can load data, while v3 can multiply. SSE forces them to operate
+ * together.
+ *
+ * This is also enabled on AArch64, as Clang autovectorizes it incorrectly
+ * and it is pointless writing a NEON implementation that is basically the
+ * same speed as scalar for XXH32.
+ */
+ XXH_COMPILER_GUARD(acc);
+#endif
+ return acc;
+}
+
+/*!
+ * @internal
+ * @brief Mixes all bits to finalize the hash.
+ *
+ * The final mix ensures that all input bits have a chance to impact any bit in
+ * the output digest, resulting in an unbiased distribution.
+ *
+ * @param h32 The hash to avalanche.
+ * @return The avalanched hash.
+ */
+static xxh_u32 XXH32_avalanche(xxh_u32 h32)
+{
+ h32 ^= h32 >> 15;
+ h32 *= XXH_PRIME32_2;
+ h32 ^= h32 >> 13;
+ h32 *= XXH_PRIME32_3;
+ h32 ^= h32 >> 16;
+ return(h32);
+}
+
+#define XXH_get32bits(p) XXH_readLE32_align(p, align)
+
+/*!
+ * @internal
+ * @brief Processes the last 0-15 bytes of @p ptr.
+ *
+ * There may be up to 15 bytes remaining to consume from the input.
+ * This final stage will digest them to ensure that all input bytes are present
+ * in the final mix.
+ *
+ * @param h32 The hash to finalize.
+ * @param ptr The pointer to the remaining input.
+ * @param len The remaining length, modulo 16.
+ * @param align Whether @p ptr is aligned.
+ * @return The finalized hash.
+ */
+static xxh_u32
+XXH32_finalize(xxh_u32 h32, const xxh_u8* ptr, size_t len, XXH_alignment align)
+{
+#define XXH_PROCESS1 do { \
+ h32 += (*ptr++) * XXH_PRIME32_5; \
+ h32 = XXH_rotl32(h32, 11) * XXH_PRIME32_1; \
+} while (0)
+
+#define XXH_PROCESS4 do { \
+ h32 += XXH_get32bits(ptr) * XXH_PRIME32_3; \
+ ptr += 4; \
+ h32 = XXH_rotl32(h32, 17) * XXH_PRIME32_4; \
+} while (0)
+
+ if (ptr==NULL) XXH_ASSERT(len == 0);
+
+ /* Compact rerolled version; generally faster */
+ if (!XXH32_ENDJMP) {
+ len &= 15;
+ while (len >= 4) {
+ XXH_PROCESS4;
+ len -= 4;
+ }
+ while (len > 0) {
+ XXH_PROCESS1;
+ --len;
+ }
+ return XXH32_avalanche(h32);
+ } else {
+ switch(len&15) /* or switch(bEnd - p) */ {
+ case 12: XXH_PROCESS4;
+ XXH_FALLTHROUGH;
+ case 8: XXH_PROCESS4;
+ XXH_FALLTHROUGH;
+ case 4: XXH_PROCESS4;
+ return XXH32_avalanche(h32);
+
+ case 13: XXH_PROCESS4;
+ XXH_FALLTHROUGH;
+ case 9: XXH_PROCESS4;
+ XXH_FALLTHROUGH;
+ case 5: XXH_PROCESS4;
+ XXH_PROCESS1;
+ return XXH32_avalanche(h32);
+
+ case 14: XXH_PROCESS4;
+ XXH_FALLTHROUGH;
+ case 10: XXH_PROCESS4;
+ XXH_FALLTHROUGH;
+ case 6: XXH_PROCESS4;
+ XXH_PROCESS1;
+ XXH_PROCESS1;
+ return XXH32_avalanche(h32);
+
+ case 15: XXH_PROCESS4;
+ XXH_FALLTHROUGH;
+ case 11: XXH_PROCESS4;
+ XXH_FALLTHROUGH;
+ case 7: XXH_PROCESS4;
+ XXH_FALLTHROUGH;
+ case 3: XXH_PROCESS1;
+ XXH_FALLTHROUGH;
+ case 2: XXH_PROCESS1;
+ XXH_FALLTHROUGH;
+ case 1: XXH_PROCESS1;
+ XXH_FALLTHROUGH;
+ case 0: return XXH32_avalanche(h32);
+ }
+ XXH_ASSERT(0);
+ return h32; /* reaching this point is deemed impossible */
+ }
+}
+
+#ifdef XXH_OLD_NAMES
+# define PROCESS1 XXH_PROCESS1
+# define PROCESS4 XXH_PROCESS4
+#else
+# undef XXH_PROCESS1
+# undef XXH_PROCESS4
+#endif
+
+/*!
+ * @internal
+ * @brief The implementation for @ref XXH32().
+ *
+ * @param input , len , seed Directly passed from @ref XXH32().
+ * @param align Whether @p input is aligned.
+ * @return The calculated hash.
+ */
+XXH_FORCE_INLINE xxh_u32
+XXH32_endian_align(const xxh_u8* input, size_t len, xxh_u32 seed, XXH_alignment align)
+{
+ xxh_u32 h32;
+
+ if (input==NULL) XXH_ASSERT(len == 0);
+
+ if (len>=16) {
+ const xxh_u8* const bEnd = input + len;
+ const xxh_u8* const limit = bEnd - 15;
+ xxh_u32 v1 = seed + XXH_PRIME32_1 + XXH_PRIME32_2;
+ xxh_u32 v2 = seed + XXH_PRIME32_2;
+ xxh_u32 v3 = seed + 0;
+ xxh_u32 v4 = seed - XXH_PRIME32_1;
+
+ do {
+ v1 = XXH32_round(v1, XXH_get32bits(input)); input += 4;
+ v2 = XXH32_round(v2, XXH_get32bits(input)); input += 4;
+ v3 = XXH32_round(v3, XXH_get32bits(input)); input += 4;
+ v4 = XXH32_round(v4, XXH_get32bits(input)); input += 4;
+ } while (input < limit);
+
+ h32 = XXH_rotl32(v1, 1) + XXH_rotl32(v2, 7)
+ + XXH_rotl32(v3, 12) + XXH_rotl32(v4, 18);
+ } else {
+ h32 = seed + XXH_PRIME32_5;
+ }
+
+ h32 += (xxh_u32)len;
+
+ return XXH32_finalize(h32, input, len&15, align);
+}
+
+/*! @ingroup xxh32_family */
+XXH_PUBLIC_API XXH32_hash_t XXH32 (const void* input, size_t len, XXH32_hash_t seed)
+{
+#if 0
+ /* Simple version, good for code maintenance, but unfortunately slow for small inputs */
+ XXH32_state_t state;
+ XXH32_reset(&state, seed);
+ XXH32_update(&state, (const xxh_u8*)input, len);
+ return XXH32_digest(&state);
+#else
+ if (XXH_FORCE_ALIGN_CHECK) {
+ if ((((size_t)input) & 3) == 0) { /* Input is 4-bytes aligned, leverage the speed benefit */
+ return XXH32_endian_align((const xxh_u8*)input, len, seed, XXH_aligned);
+ } }
+
+ return XXH32_endian_align((const xxh_u8*)input, len, seed, XXH_unaligned);
+#endif
+}
+
+
+
+/******* Hash streaming *******/
+/*!
+ * @ingroup xxh32_family
+ */
+XXH_PUBLIC_API XXH32_state_t* XXH32_createState(void)
+{
+ return (XXH32_state_t*)XXH_malloc(sizeof(XXH32_state_t));
+}
+/*! @ingroup xxh32_family */
+XXH_PUBLIC_API XXH_errorcode XXH32_freeState(XXH32_state_t* statePtr)
+{
+ XXH_free(statePtr);
+ return XXH_OK;
+}
+
+/*! @ingroup xxh32_family */
+XXH_PUBLIC_API void XXH32_copyState(XXH32_state_t* dstState, const XXH32_state_t* srcState)
+{
+ XXH_memcpy(dstState, srcState, sizeof(*dstState));
+}
+
+/*! @ingroup xxh32_family */
+XXH_PUBLIC_API XXH_errorcode XXH32_reset(XXH32_state_t* statePtr, XXH32_hash_t seed)
+{
+ XXH_ASSERT(statePtr != NULL);
+ memset(statePtr, 0, sizeof(*statePtr));
+ statePtr->v[0] = seed + XXH_PRIME32_1 + XXH_PRIME32_2;
+ statePtr->v[1] = seed + XXH_PRIME32_2;
+ statePtr->v[2] = seed + 0;
+ statePtr->v[3] = seed - XXH_PRIME32_1;
+ return XXH_OK;
+}
+
+
+/*! @ingroup xxh32_family */
+XXH_PUBLIC_API XXH_errorcode
+XXH32_update(XXH32_state_t* state, const void* input, size_t len)
+{
+ if (input==NULL) {
+ XXH_ASSERT(len == 0);
+ return XXH_OK;
+ }
+
+ { const xxh_u8* p = (const xxh_u8*)input;
+ const xxh_u8* const bEnd = p + len;
+
+ state->total_len_32 += (XXH32_hash_t)len;
+ state->large_len |= (XXH32_hash_t)((len>=16) | (state->total_len_32>=16));
+
+ if (state->memsize + len < 16) { /* fill in tmp buffer */
+ XXH_memcpy((xxh_u8*)(state->mem32) + state->memsize, input, len);
+ state->memsize += (XXH32_hash_t)len;
+ return XXH_OK;
+ }
+
+ if (state->memsize) { /* some data left from previous update */
+ XXH_memcpy((xxh_u8*)(state->mem32) + state->memsize, input, 16-state->memsize);
+ { const xxh_u32* p32 = state->mem32;
+ state->v[0] = XXH32_round(state->v[0], XXH_readLE32(p32)); p32++;
+ state->v[1] = XXH32_round(state->v[1], XXH_readLE32(p32)); p32++;
+ state->v[2] = XXH32_round(state->v[2], XXH_readLE32(p32)); p32++;
+ state->v[3] = XXH32_round(state->v[3], XXH_readLE32(p32));
+ }
+ p += 16-state->memsize;
+ state->memsize = 0;
+ }
+
+ if (p <= bEnd-16) {
+ const xxh_u8* const limit = bEnd - 16;
+
+ do {
+ state->v[0] = XXH32_round(state->v[0], XXH_readLE32(p)); p+=4;
+ state->v[1] = XXH32_round(state->v[1], XXH_readLE32(p)); p+=4;
+ state->v[2] = XXH32_round(state->v[2], XXH_readLE32(p)); p+=4;
+ state->v[3] = XXH32_round(state->v[3], XXH_readLE32(p)); p+=4;
+ } while (p<=limit);
+
+ }
+
+ if (p < bEnd) {
+ XXH_memcpy(state->mem32, p, (size_t)(bEnd-p));
+ state->memsize = (unsigned)(bEnd-p);
+ }
+ }
+
+ return XXH_OK;
+}
+
+
+/*! @ingroup xxh32_family */
+XXH_PUBLIC_API XXH32_hash_t XXH32_digest(const XXH32_state_t* state)
+{
+ xxh_u32 h32;
+
+ if (state->large_len) {
+ h32 = XXH_rotl32(state->v[0], 1)
+ + XXH_rotl32(state->v[1], 7)
+ + XXH_rotl32(state->v[2], 12)
+ + XXH_rotl32(state->v[3], 18);
+ } else {
+ h32 = state->v[2] /* == seed */ + XXH_PRIME32_5;
+ }
+
+ h32 += state->total_len_32;
+
+ return XXH32_finalize(h32, (const xxh_u8*)state->mem32, state->memsize, XXH_aligned);
+}
+
+
+/******* Canonical representation *******/
+
+/*!
+ * @ingroup xxh32_family
+ * The default return values from XXH functions are unsigned 32 and 64 bit
+ * integers.
+ *
+ * The canonical representation uses big endian convention, the same convention
+ * as human-readable numbers (large digits first).
+ *
+ * This way, hash values can be written into a file or buffer, remaining
+ * comparable across different systems.
+ *
+ * The following functions allow transformation of hash values to and from their
+ * canonical format.
+ */
+XXH_PUBLIC_API void XXH32_canonicalFromHash(XXH32_canonical_t* dst, XXH32_hash_t hash)
+{
+ /* XXH_STATIC_ASSERT(sizeof(XXH32_canonical_t) == sizeof(XXH32_hash_t)); */
+ if (XXH_CPU_LITTLE_ENDIAN) hash = XXH_swap32(hash);
+ XXH_memcpy(dst, &hash, sizeof(*dst));
+}
+/*! @ingroup xxh32_family */
+XXH_PUBLIC_API XXH32_hash_t XXH32_hashFromCanonical(const XXH32_canonical_t* src)
+{
+ return XXH_readBE32(src);
+}
+
+
+#ifndef XXH_NO_LONG_LONG
+
+/* *******************************************************************
+* 64-bit hash functions
+*********************************************************************/
+/*!
+ * @}
+ * @ingroup impl
+ * @{
+ */
+/******* Memory access *******/
+
+typedef XXH64_hash_t xxh_u64;
+
+#ifdef XXH_OLD_NAMES
+# define U64 xxh_u64
+#endif
+
+#if (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS==3))
+/*
+ * Manual byteshift. Best for old compilers which don't inline memcpy.
+ * We actually directly use XXH_readLE64 and XXH_readBE64.
+ */
+#elif (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS==2))
+
+/* Force direct memory access. Only works on CPU which support unaligned memory access in hardware */
+static xxh_u64 XXH_read64(const void* memPtr)
+{
+ return *(const xxh_u64*) memPtr;
+}
+
+#elif (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS==1))
+
+/*
+ * __pack instructions are safer, but compiler specific, hence potentially
+ * problematic for some compilers.
+ *
+ * Currently only defined for GCC and ICC.
+ */
+#ifdef XXH_OLD_NAMES
+typedef union { xxh_u32 u32; xxh_u64 u64; } __attribute__((packed)) unalign64;
+#endif
+static xxh_u64 XXH_read64(const void* ptr)
+{
+ typedef union { xxh_u32 u32; xxh_u64 u64; } __attribute__((packed)) xxh_unalign64;
+ return ((const xxh_unalign64*)ptr)->u64;
+}
+
+#else
+
+/*
+ * Portable and safe solution. Generally efficient.
+ * see: http://fastcompression.blogspot.com/2015/08/accessing-unaligned-memory.html
+ */
+static xxh_u64 XXH_read64(const void* memPtr)
+{
+ xxh_u64 val;
+ XXH_memcpy(&val, memPtr, sizeof(val));
+ return val;
+}
+
+#endif /* XXH_FORCE_DIRECT_MEMORY_ACCESS */
+
+#if defined(_MSC_VER) /* Visual Studio */
+# define XXH_swap64 _byteswap_uint64
+#elif XXH_GCC_VERSION >= 403
+# define XXH_swap64 __builtin_bswap64
+#else
+static xxh_u64 XXH_swap64(xxh_u64 x)
+{
+ return ((x << 56) & 0xff00000000000000ULL) |
+ ((x << 40) & 0x00ff000000000000ULL) |
+ ((x << 24) & 0x0000ff0000000000ULL) |
+ ((x << 8) & 0x000000ff00000000ULL) |
+ ((x >> 8) & 0x00000000ff000000ULL) |
+ ((x >> 24) & 0x0000000000ff0000ULL) |
+ ((x >> 40) & 0x000000000000ff00ULL) |
+ ((x >> 56) & 0x00000000000000ffULL);
+}
+#endif
+
+
+/* XXH_FORCE_MEMORY_ACCESS==3 is an endian-independent byteshift load. */
+#if (defined(XXH_FORCE_MEMORY_ACCESS) && (XXH_FORCE_MEMORY_ACCESS==3))
+
+XXH_FORCE_INLINE xxh_u64 XXH_readLE64(const void* memPtr)
+{
+ const xxh_u8* bytePtr = (const xxh_u8 *)memPtr;
+ return bytePtr[0]
+ | ((xxh_u64)bytePtr[1] << 8)
+ | ((xxh_u64)bytePtr[2] << 16)
+ | ((xxh_u64)bytePtr[3] << 24)
+ | ((xxh_u64)bytePtr[4] << 32)
+ | ((xxh_u64)bytePtr[5] << 40)
+ | ((xxh_u64)bytePtr[6] << 48)
+ | ((xxh_u64)bytePtr[7] << 56);
+}
+
+XXH_FORCE_INLINE xxh_u64 XXH_readBE64(const void* memPtr)
+{
+ const xxh_u8* bytePtr = (const xxh_u8 *)memPtr;
+ return bytePtr[7]
+ | ((xxh_u64)bytePtr[6] << 8)
+ | ((xxh_u64)bytePtr[5] << 16)
+ | ((xxh_u64)bytePtr[4] << 24)
+ | ((xxh_u64)bytePtr[3] << 32)
+ | ((xxh_u64)bytePtr[2] << 40)
+ | ((xxh_u64)bytePtr[1] << 48)
+ | ((xxh_u64)bytePtr[0] << 56);
+}
+
+#else
+XXH_FORCE_INLINE xxh_u64 XXH_readLE64(const void* ptr)
+{
+ return XXH_CPU_LITTLE_ENDIAN ? XXH_read64(ptr) : XXH_swap64(XXH_read64(ptr));
+}
+
+static xxh_u64 XXH_readBE64(const void* ptr)
+{
+ return XXH_CPU_LITTLE_ENDIAN ? XXH_swap64(XXH_read64(ptr)) : XXH_read64(ptr);
+}
+#endif
+
+XXH_FORCE_INLINE xxh_u64
+XXH_readLE64_align(const void* ptr, XXH_alignment align)
+{
+ if (align==XXH_unaligned)
+ return XXH_readLE64(ptr);
+ else
+ return XXH_CPU_LITTLE_ENDIAN ? *(const xxh_u64*)ptr : XXH_swap64(*(const xxh_u64*)ptr);
+}
+
+
+/******* xxh64 *******/
+/*!
+ * @}
+ * @defgroup xxh64_impl XXH64 implementation
+ * @ingroup impl
+ * @{
+ */
+/* #define rather that static const, to be used as initializers */
+#define XXH_PRIME64_1 0x9E3779B185EBCA87ULL /*!< 0b1001111000110111011110011011000110000101111010111100101010000111 */
+#define XXH_PRIME64_2 0xC2B2AE3D27D4EB4FULL /*!< 0b1100001010110010101011100011110100100111110101001110101101001111 */
+#define XXH_PRIME64_3 0x165667B19E3779F9ULL /*!< 0b0001011001010110011001111011000110011110001101110111100111111001 */
+#define XXH_PRIME64_4 0x85EBCA77C2B2AE63ULL /*!< 0b1000010111101011110010100111011111000010101100101010111001100011 */
+#define XXH_PRIME64_5 0x27D4EB2F165667C5ULL /*!< 0b0010011111010100111010110010111100010110010101100110011111000101 */
+
+#ifdef XXH_OLD_NAMES
+# define PRIME64_1 XXH_PRIME64_1
+# define PRIME64_2 XXH_PRIME64_2
+# define PRIME64_3 XXH_PRIME64_3
+# define PRIME64_4 XXH_PRIME64_4
+# define PRIME64_5 XXH_PRIME64_5
+#endif
+
+static xxh_u64 XXH64_round(xxh_u64 acc, xxh_u64 input)
+{
+ acc += input * XXH_PRIME64_2;
+ acc = XXH_rotl64(acc, 31);
+ acc *= XXH_PRIME64_1;
+ return acc;
+}
+
+static xxh_u64 XXH64_mergeRound(xxh_u64 acc, xxh_u64 val)
+{
+ val = XXH64_round(0, val);
+ acc ^= val;
+ acc = acc * XXH_PRIME64_1 + XXH_PRIME64_4;
+ return acc;
+}
+
+static xxh_u64 XXH64_avalanche(xxh_u64 h64)
+{
+ h64 ^= h64 >> 33;
+ h64 *= XXH_PRIME64_2;
+ h64 ^= h64 >> 29;
+ h64 *= XXH_PRIME64_3;
+ h64 ^= h64 >> 32;
+ return h64;
+}
+
+
+#define XXH_get64bits(p) XXH_readLE64_align(p, align)
+
+static xxh_u64
+XXH64_finalize(xxh_u64 h64, const xxh_u8* ptr, size_t len, XXH_alignment align)
+{
+ if (ptr==NULL) XXH_ASSERT(len == 0);
+ len &= 31;
+ while (len >= 8) {
+ xxh_u64 const k1 = XXH64_round(0, XXH_get64bits(ptr));
+ ptr += 8;
+ h64 ^= k1;
+ h64 = XXH_rotl64(h64,27) * XXH_PRIME64_1 + XXH_PRIME64_4;
+ len -= 8;
+ }
+ if (len >= 4) {
+ h64 ^= (xxh_u64)(XXH_get32bits(ptr)) * XXH_PRIME64_1;
+ ptr += 4;
+ h64 = XXH_rotl64(h64, 23) * XXH_PRIME64_2 + XXH_PRIME64_3;
+ len -= 4;
+ }
+ while (len > 0) {
+ h64 ^= (*ptr++) * XXH_PRIME64_5;
+ h64 = XXH_rotl64(h64, 11) * XXH_PRIME64_1;
+ --len;
+ }
+ return XXH64_avalanche(h64);
+}
+
+#ifdef XXH_OLD_NAMES
+# define PROCESS1_64 XXH_PROCESS1_64
+# define PROCESS4_64 XXH_PROCESS4_64
+# define PROCESS8_64 XXH_PROCESS8_64
+#else
+# undef XXH_PROCESS1_64
+# undef XXH_PROCESS4_64
+# undef XXH_PROCESS8_64
+#endif
+
+XXH_FORCE_INLINE xxh_u64
+XXH64_endian_align(const xxh_u8* input, size_t len, xxh_u64 seed, XXH_alignment align)
+{
+ xxh_u64 h64;
+ if (input==NULL) XXH_ASSERT(len == 0);
+
+ if (len>=32) {
+ const xxh_u8* const bEnd = input + len;
+ const xxh_u8* const limit = bEnd - 31;
+ xxh_u64 v1 = seed + XXH_PRIME64_1 + XXH_PRIME64_2;
+ xxh_u64 v2 = seed + XXH_PRIME64_2;
+ xxh_u64 v3 = seed + 0;
+ xxh_u64 v4 = seed - XXH_PRIME64_1;
+
+ do {
+ v1 = XXH64_round(v1, XXH_get64bits(input)); input+=8;
+ v2 = XXH64_round(v2, XXH_get64bits(input)); input+=8;
+ v3 = XXH64_round(v3, XXH_get64bits(input)); input+=8;
+ v4 = XXH64_round(v4, XXH_get64bits(input)); input+=8;
+ } while (input<limit);
+
+ h64 = XXH_rotl64(v1, 1) + XXH_rotl64(v2, 7) + XXH_rotl64(v3, 12) + XXH_rotl64(v4, 18);
+ h64 = XXH64_mergeRound(h64, v1);
+ h64 = XXH64_mergeRound(h64, v2);
+ h64 = XXH64_mergeRound(h64, v3);
+ h64 = XXH64_mergeRound(h64, v4);
+
+ } else {
+ h64 = seed + XXH_PRIME64_5;
+ }
+
+ h64 += (xxh_u64) len;
+
+ return XXH64_finalize(h64, input, len, align);
+}
+
+
+/*! @ingroup xxh64_family */
+XXH_PUBLIC_API XXH64_hash_t XXH64 (const void* input, size_t len, XXH64_hash_t seed)
+{
+#if 0
+ /* Simple version, good for code maintenance, but unfortunately slow for small inputs */
+ XXH64_state_t state;
+ XXH64_reset(&state, seed);
+ XXH64_update(&state, (const xxh_u8*)input, len);
+ return XXH64_digest(&state);
+#else
+ if (XXH_FORCE_ALIGN_CHECK) {
+ if ((((size_t)input) & 7)==0) { /* Input is aligned, let's leverage the speed advantage */
+ return XXH64_endian_align((const xxh_u8*)input, len, seed, XXH_aligned);
+ } }
+
+ return XXH64_endian_align((const xxh_u8*)input, len, seed, XXH_unaligned);
+
+#endif
+}
+
+/******* Hash Streaming *******/
+
+/*! @ingroup xxh64_family*/
+XXH_PUBLIC_API XXH64_state_t* XXH64_createState(void)
+{
+ return (XXH64_state_t*)XXH_malloc(sizeof(XXH64_state_t));
+}
+/*! @ingroup xxh64_family */
+XXH_PUBLIC_API XXH_errorcode XXH64_freeState(XXH64_state_t* statePtr)
+{
+ XXH_free(statePtr);
+ return XXH_OK;
+}
+
+/*! @ingroup xxh64_family */
+XXH_PUBLIC_API void XXH64_copyState(XXH64_state_t* dstState, const XXH64_state_t* srcState)
+{
+ XXH_memcpy(dstState, srcState, sizeof(*dstState));
+}
+
+/*! @ingroup xxh64_family */
+XXH_PUBLIC_API XXH_errorcode XXH64_reset(XXH64_state_t* statePtr, XXH64_hash_t seed)
+{
+ XXH_ASSERT(statePtr != NULL);
+ memset(statePtr, 0, sizeof(*statePtr));
+ statePtr->v[0] = seed + XXH_PRIME64_1 + XXH_PRIME64_2;
+ statePtr->v[1] = seed + XXH_PRIME64_2;
+ statePtr->v[2] = seed + 0;
+ statePtr->v[3] = seed - XXH_PRIME64_1;
+ return XXH_OK;
+}
+
+/*! @ingroup xxh64_family */
+XXH_PUBLIC_API XXH_errorcode
+XXH64_update (XXH64_state_t* state, const void* input, size_t len)
+{
+ if (input==NULL) {
+ XXH_ASSERT(len == 0);
+ return XXH_OK;
+ }
+
+ { const xxh_u8* p = (const xxh_u8*)input;
+ const xxh_u8* const bEnd = p + len;
+
+ state->total_len += len;
+
+ if (state->memsize + len < 32) { /* fill in tmp buffer */
+ XXH_memcpy(((xxh_u8*)state->mem64) + state->memsize, input, len);
+ state->memsize += (xxh_u32)len;
+ return XXH_OK;
+ }
+
+ if (state->memsize) { /* tmp buffer is full */
+ XXH_memcpy(((xxh_u8*)state->mem64) + state->memsize, input, 32-state->memsize);
+ state->v[0] = XXH64_round(state->v[0], XXH_readLE64(state->mem64+0));
+ state->v[1] = XXH64_round(state->v[1], XXH_readLE64(state->mem64+1));
+ state->v[2] = XXH64_round(state->v[2], XXH_readLE64(state->mem64+2));
+ state->v[3] = XXH64_round(state->v[3], XXH_readLE64(state->mem64+3));
+ p += 32 - state->memsize;
+ state->memsize = 0;
+ }
+
+ if (p+32 <= bEnd) {
+ const xxh_u8* const limit = bEnd - 32;
+
+ do {
+ state->v[0] = XXH64_round(state->v[0], XXH_readLE64(p)); p+=8;
+ state->v[1] = XXH64_round(state->v[1], XXH_readLE64(p)); p+=8;
+ state->v[2] = XXH64_round(state->v[2], XXH_readLE64(p)); p+=8;
+ state->v[3] = XXH64_round(state->v[3], XXH_readLE64(p)); p+=8;
+ } while (p<=limit);
+
+ }
+
+ if (p < bEnd) {
+ XXH_memcpy(state->mem64, p, (size_t)(bEnd-p));
+ state->memsize = (unsigned)(bEnd-p);
+ }
+ }
+
+ return XXH_OK;
+}
+
+
+/*! @ingroup xxh64_family */
+XXH_PUBLIC_API XXH64_hash_t XXH64_digest(const XXH64_state_t* state)
+{
+ xxh_u64 h64;
+
+ if (state->total_len >= 32) {
+ h64 = XXH_rotl64(state->v[0], 1) + XXH_rotl64(state->v[1], 7) + XXH_rotl64(state->v[2], 12) + XXH_rotl64(state->v[3], 18);
+ h64 = XXH64_mergeRound(h64, state->v[0]);
+ h64 = XXH64_mergeRound(h64, state->v[1]);
+ h64 = XXH64_mergeRound(h64, state->v[2]);
+ h64 = XXH64_mergeRound(h64, state->v[3]);
+ } else {
+ h64 = state->v[2] /*seed*/ + XXH_PRIME64_5;
+ }
+
+ h64 += (xxh_u64) state->total_len;
+
+ return XXH64_finalize(h64, (const xxh_u8*)state->mem64, (size_t)state->total_len, XXH_aligned);
+}
+
+
+/******* Canonical representation *******/
+
+/*! @ingroup xxh64_family */
+XXH_PUBLIC_API void XXH64_canonicalFromHash(XXH64_canonical_t* dst, XXH64_hash_t hash)
+{
+ /* XXH_STATIC_ASSERT(sizeof(XXH64_canonical_t) == sizeof(XXH64_hash_t)); */
+ if (XXH_CPU_LITTLE_ENDIAN) hash = XXH_swap64(hash);
+ XXH_memcpy(dst, &hash, sizeof(*dst));
+}
+
+/*! @ingroup xxh64_family */
+XXH_PUBLIC_API XXH64_hash_t XXH64_hashFromCanonical(const XXH64_canonical_t* src)
+{
+ return XXH_readBE64(src);
+}
+
+#ifndef XXH_NO_XXH3
+
+/* *********************************************************************
+* XXH3
+* New generation hash designed for speed on small keys and vectorization
+************************************************************************ */
+/*!
+ * @}
+ * @defgroup xxh3_impl XXH3 implementation
+ * @ingroup impl
+ * @{
+ */
+
+/* === Compiler specifics === */
+
+#if ((defined(sun) || defined(__sun)) && __cplusplus) /* Solaris includes __STDC_VERSION__ with C++. Tested with GCC 5.5 */
+# define XXH_RESTRICT /* disable */
+#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* >= C99 */
+# define XXH_RESTRICT restrict
+#else
+/* Note: it might be useful to define __restrict or __restrict__ for some C++ compilers */
+# define XXH_RESTRICT /* disable */
+#endif
+
+#if (defined(__GNUC__) && (__GNUC__ >= 3)) \
+ || (defined(__INTEL_COMPILER) && (__INTEL_COMPILER >= 800)) \
+ || defined(__clang__)
+# define XXH_likely(x) __builtin_expect(x, 1)
+# define XXH_unlikely(x) __builtin_expect(x, 0)
+#else
+# define XXH_likely(x) (x)
+# define XXH_unlikely(x) (x)
+#endif
+
+#if defined(__GNUC__) || defined(__clang__)
+# if defined(__ARM_NEON__) || defined(__ARM_NEON) \
+ || defined(__aarch64__) || defined(_M_ARM) \
+ || defined(_M_ARM64) || defined(_M_ARM64EC)
+# define inline __inline__ /* circumvent a clang bug */
+# include <arm_neon.h>
+# undef inline
+# elif defined(__AVX2__)
+# include <immintrin.h>
+# elif defined(__SSE2__)
+# include <emmintrin.h>
# endif
+#endif
+
+#if defined(_MSC_VER)
+# include <intrin.h>
+#endif
+
+/*
+ * One goal of XXH3 is to make it fast on both 32-bit and 64-bit, while
+ * remaining a true 64-bit/128-bit hash function.
+ *
+ * This is done by prioritizing a subset of 64-bit operations that can be
+ * emulated without too many steps on the average 32-bit machine.
+ *
+ * For example, these two lines seem similar, and run equally fast on 64-bit:
+ *
+ * xxh_u64 x;
+ * x ^= (x >> 47); // good
+ * x ^= (x >> 13); // bad
+ *
+ * However, to a 32-bit machine, there is a major difference.
+ *
+ * x ^= (x >> 47) looks like this:
+ *
+ * x.lo ^= (x.hi >> (47 - 32));
+ *
+ * while x ^= (x >> 13) looks like this:
+ *
+ * // note: funnel shifts are not usually cheap.
+ * x.lo ^= (x.lo >> 13) | (x.hi << (32 - 13));
+ * x.hi ^= (x.hi >> 13);
+ *
+ * The first one is significantly faster than the second, simply because the
+ * shift is larger than 32. This means:
+ * - All the bits we need are in the upper 32 bits, so we can ignore the lower
+ * 32 bits in the shift.
+ * - The shift result will always fit in the lower 32 bits, and therefore,
+ * we can ignore the upper 32 bits in the xor.
+ *
+ * Thanks to this optimization, XXH3 only requires these features to be efficient:
+ *
+ * - Usable unaligned access
+ * - A 32-bit or 64-bit ALU
+ * - If 32-bit, a decent ADC instruction
+ * - A 32 or 64-bit multiply with a 64-bit result
+ * - For the 128-bit variant, a decent byteswap helps short inputs.
+ *
+ * The first two are already required by XXH32, and almost all 32-bit and 64-bit
+ * platforms which can run XXH32 can run XXH3 efficiently.
+ *
+ * Thumb-1, the classic 16-bit only subset of ARM's instruction set, is one
+ * notable exception.
+ *
+ * First of all, Thumb-1 lacks support for the UMULL instruction which
+ * performs the important long multiply. This means numerous __aeabi_lmul
+ * calls.
+ *
+ * Second of all, the 8 functional registers are just not enough.
+ * Setup for __aeabi_lmul, byteshift loads, pointers, and all arithmetic need
+ * Lo registers, and this shuffling results in thousands more MOVs than A32.
+ *
+ * A32 and T32 don't have this limitation. They can access all 14 registers,
+ * do a 32->64 multiply with UMULL, and the flexible operand allowing free
+ * shifts is helpful, too.
+ *
+ * Therefore, we do a quick sanity check.
+ *
+ * If compiling Thumb-1 for a target which supports ARM instructions, we will
+ * emit a warning, as it is not a "sane" platform to compile for.
+ *
+ * Usually, if this happens, it is because of an accident and you probably need
+ * to specify -march, as you likely meant to compile for a newer architecture.
+ *
+ * Credit: large sections of the vectorial and asm source code paths
+ * have been contributed by @easyaspi314
+ */
+#if defined(__thumb__) && !defined(__thumb2__) && defined(__ARM_ARCH_ISA_ARM)
+# warning "XXH3 is highly inefficient without ARM or Thumb-2."
+#endif
+
+/* ==========================================
+ * Vectorization detection
+ * ========================================== */
+
+#ifdef XXH_DOXYGEN
+/*!
+ * @ingroup tuning
+ * @brief Overrides the vectorization implementation chosen for XXH3.
+ *
+ * Can be defined to 0 to disable SIMD or any of the values mentioned in
+ * @ref XXH_VECTOR_TYPE.
+ *
+ * If this is not defined, it uses predefined macros to determine the best
+ * implementation.
+ */
+# define XXH_VECTOR XXH_SCALAR
+/*!
+ * @ingroup tuning
+ * @brief Possible values for @ref XXH_VECTOR.
+ *
+ * Note that these are actually implemented as macros.
+ *
+ * If this is not defined, it is detected automatically.
+ * @ref XXH_X86DISPATCH overrides this.
+ */
+enum XXH_VECTOR_TYPE /* fake enum */ {
+ XXH_SCALAR = 0, /*!< Portable scalar version */
+ XXH_SSE2 = 1, /*!<
+ * SSE2 for Pentium 4, Opteron, all x86_64.
+ *
+ * @note SSE2 is also guaranteed on Windows 10, macOS, and
+ * Android x86.
+ */
+ XXH_AVX2 = 2, /*!< AVX2 for Haswell and Bulldozer */
+ XXH_AVX512 = 3, /*!< AVX512 for Skylake and Icelake */
+ XXH_NEON = 4, /*!< NEON for most ARMv7-A and all AArch64 */
+ XXH_VSX = 5, /*!< VSX and ZVector for POWER8/z13 (64-bit) */
+};
+/*!
+ * @ingroup tuning
+ * @brief Selects the minimum alignment for XXH3's accumulators.
+ *
+ * When using SIMD, this should match the alignment reqired for said vector
+ * type, so, for example, 32 for AVX2.
+ *
+ * Default: Auto detected.
+ */
+# define XXH_ACC_ALIGN 8
+#endif
+
+/* Actual definition */
+#ifndef XXH_DOXYGEN
+# define XXH_SCALAR 0
+# define XXH_SSE2 1
+# define XXH_AVX2 2
+# define XXH_AVX512 3
+# define XXH_NEON 4
+# define XXH_VSX 5
+#endif
+
+#ifndef XXH_VECTOR /* can be defined on command line */
+# if ( \
+ defined(__ARM_NEON__) || defined(__ARM_NEON) /* gcc */ \
+ || defined(_M_ARM) || defined(_M_ARM64) || defined(_M_ARM64EC) /* msvc */ \
+ ) && ( \
+ defined(_WIN32) || defined(__LITTLE_ENDIAN__) /* little endian only */ \
+ || (defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) \
+ )
+# define XXH_VECTOR XXH_NEON
+# elif defined(__AVX512F__)
+# define XXH_VECTOR XXH_AVX512
+# elif defined(__AVX2__)
+# define XXH_VECTOR XXH_AVX2
+# elif defined(__SSE2__) || defined(_M_AMD64) || defined(_M_X64) || (defined(_M_IX86_FP) && (_M_IX86_FP == 2))
+# define XXH_VECTOR XXH_SSE2
+# elif (defined(__PPC64__) && defined(__POWER8_VECTOR__)) \
+ || (defined(__s390x__) && defined(__VEC__)) \
+ && defined(__GNUC__) /* TODO: IBM XL */
+# define XXH_VECTOR XXH_VSX
+# else
+# define XXH_VECTOR XXH_SCALAR
+# endif
+#endif
+
+/*
+ * Controls the alignment of the accumulator,
+ * for compatibility with aligned vector loads, which are usually faster.
+ */
+#ifndef XXH_ACC_ALIGN
+# if defined(XXH_X86DISPATCH)
+# define XXH_ACC_ALIGN 64 /* for compatibility with avx512 */
+# elif XXH_VECTOR == XXH_SCALAR /* scalar */
+# define XXH_ACC_ALIGN 8
+# elif XXH_VECTOR == XXH_SSE2 /* sse2 */
+# define XXH_ACC_ALIGN 16
+# elif XXH_VECTOR == XXH_AVX2 /* avx2 */
+# define XXH_ACC_ALIGN 32
+# elif XXH_VECTOR == XXH_NEON /* neon */
+# define XXH_ACC_ALIGN 16
+# elif XXH_VECTOR == XXH_VSX /* vsx */
+# define XXH_ACC_ALIGN 16
+# elif XXH_VECTOR == XXH_AVX512 /* avx512 */
+# define XXH_ACC_ALIGN 64
+# endif
+#endif
+
+#if defined(XXH_X86DISPATCH) || XXH_VECTOR == XXH_SSE2 \
+ || XXH_VECTOR == XXH_AVX2 || XXH_VECTOR == XXH_AVX512
+# define XXH_SEC_ALIGN XXH_ACC_ALIGN
+#else
+# define XXH_SEC_ALIGN 8
+#endif
+
+/*
+ * UGLY HACK:
+ * GCC usually generates the best code with -O3 for xxHash.
+ *
+ * However, when targeting AVX2, it is overzealous in its unrolling resulting
+ * in code roughly 3/4 the speed of Clang.
+ *
+ * There are other issues, such as GCC splitting _mm256_loadu_si256 into
+ * _mm_loadu_si128 + _mm256_inserti128_si256. This is an optimization which
+ * only applies to Sandy and Ivy Bridge... which don't even support AVX2.
+ *
+ * That is why when compiling the AVX2 version, it is recommended to use either
+ * -O2 -mavx2 -march=haswell
+ * or
+ * -O2 -mavx2 -mno-avx256-split-unaligned-load
+ * for decent performance, or to use Clang instead.
+ *
+ * Fortunately, we can control the first one with a pragma that forces GCC into
+ * -O2, but the other one we can't control without "failed to inline always
+ * inline function due to target mismatch" warnings.
+ */
+#if XXH_VECTOR == XXH_AVX2 /* AVX2 */ \
+ && defined(__GNUC__) && !defined(__clang__) /* GCC, not Clang */ \
+ && defined(__OPTIMIZE__) && !defined(__OPTIMIZE_SIZE__) /* respect -O0 and -Os */
+# pragma GCC push_options
+# pragma GCC optimize("-O2")
+#endif
+
+
+#if XXH_VECTOR == XXH_NEON
+/*
+ * NEON's setup for vmlal_u32 is a little more complicated than it is on
+ * SSE2, AVX2, and VSX.
+ *
+ * While PMULUDQ and VMULEUW both perform a mask, VMLAL.U32 performs an upcast.
+ *
+ * To do the same operation, the 128-bit 'Q' register needs to be split into
+ * two 64-bit 'D' registers, performing this operation::
+ *
+ * [ a | b ]
+ * | '---------. .--------' |
+ * | x |
+ * | .---------' '--------. |
+ * [ a & 0xFFFFFFFF | b & 0xFFFFFFFF ],[ a >> 32 | b >> 32 ]
+ *
+ * Due to significant changes in aarch64, the fastest method for aarch64 is
+ * completely different than the fastest method for ARMv7-A.
+ *
+ * ARMv7-A treats D registers as unions overlaying Q registers, so modifying
+ * D11 will modify the high half of Q5. This is similar to how modifying AH
+ * will only affect bits 8-15 of AX on x86.
+ *
+ * VZIP takes two registers, and puts even lanes in one register and odd lanes
+ * in the other.
+ *
+ * On ARMv7-A, this strangely modifies both parameters in place instead of
+ * taking the usual 3-operand form.
+ *
+ * Therefore, if we want to do this, we can simply use a D-form VZIP.32 on the
+ * lower and upper halves of the Q register to end up with the high and low
+ * halves where we want - all in one instruction.
+ *
+ * vzip.32 d10, d11 @ d10 = { d10[0], d11[0] }; d11 = { d10[1], d11[1] }
+ *
+ * Unfortunately we need inline assembly for this: Instructions modifying two
+ * registers at once is not possible in GCC or Clang's IR, and they have to
+ * create a copy.
+ *
+ * aarch64 requires a different approach.
+ *
+ * In order to make it easier to write a decent compiler for aarch64, many
+ * quirks were removed, such as conditional execution.
+ *
+ * NEON was also affected by this.
+ *
+ * aarch64 cannot access the high bits of a Q-form register, and writes to a
+ * D-form register zero the high bits, similar to how writes to W-form scalar
+ * registers (or DWORD registers on x86_64) work.
+ *
+ * The formerly free vget_high intrinsics now require a vext (with a few
+ * exceptions)
+ *
+ * Additionally, VZIP was replaced by ZIP1 and ZIP2, which are the equivalent
+ * of PUNPCKL* and PUNPCKH* in SSE, respectively, in order to only modify one
+ * operand.
+ *
+ * The equivalent of the VZIP.32 on the lower and upper halves would be this
+ * mess:
+ *
+ * ext v2.4s, v0.4s, v0.4s, #2 // v2 = { v0[2], v0[3], v0[0], v0[1] }
+ * zip1 v1.2s, v0.2s, v2.2s // v1 = { v0[0], v2[0] }
+ * zip2 v0.2s, v0.2s, v1.2s // v0 = { v0[1], v2[1] }
+ *
+ * Instead, we use a literal downcast, vmovn_u64 (XTN), and vshrn_n_u64 (SHRN):
+ *
+ * shrn v1.2s, v0.2d, #32 // v1 = (uint32x2_t)(v0 >> 32);
+ * xtn v0.2s, v0.2d // v0 = (uint32x2_t)(v0 & 0xFFFFFFFF);
+ *
+ * This is available on ARMv7-A, but is less efficient than a single VZIP.32.
+ */
+
+/*!
+ * Function-like macro:
+ * void XXH_SPLIT_IN_PLACE(uint64x2_t &in, uint32x2_t &outLo, uint32x2_t &outHi)
+ * {
+ * outLo = (uint32x2_t)(in & 0xFFFFFFFF);
+ * outHi = (uint32x2_t)(in >> 32);
+ * in = UNDEFINED;
+ * }
+ */
+# if !defined(XXH_NO_VZIP_HACK) /* define to disable */ \
+ && (defined(__GNUC__) || defined(__clang__)) \
+ && (defined(__arm__) || defined(__thumb__) || defined(_M_ARM))
+# define XXH_SPLIT_IN_PLACE(in, outLo, outHi) \
+ do { \
+ /* Undocumented GCC/Clang operand modifier: %e0 = lower D half, %f0 = upper D half */ \
+ /* https://github.com/gcc-mirror/gcc/blob/38cf91e5/gcc/config/arm/arm.c#L22486 */ \
+ /* https://github.com/llvm-mirror/llvm/blob/2c4ca683/lib/Target/ARM/ARMAsmPrinter.cpp#L399 */ \
+ __asm__("vzip.32 %e0, %f0" : "+w" (in)); \
+ (outLo) = vget_low_u32 (vreinterpretq_u32_u64(in)); \
+ (outHi) = vget_high_u32(vreinterpretq_u32_u64(in)); \
+ } while (0)
+# else
+# define XXH_SPLIT_IN_PLACE(in, outLo, outHi) \
+ do { \
+ (outLo) = vmovn_u64 (in); \
+ (outHi) = vshrn_n_u64 ((in), 32); \
+ } while (0)
+# endif
+
+/*!
+ * @ingroup tuning
+ * @brief Controls the NEON to scalar ratio for XXH3
+ *
+ * On AArch64 when not optimizing for size, XXH3 will run 6 lanes using NEON and
+ * 2 lanes on scalar by default.
+ *
+ * This can be set to 2, 4, 6, or 8. ARMv7 will default to all 8 NEON lanes, as the
+ * emulated 64-bit arithmetic is too slow.
+ *
+ * Modern ARM CPUs are _very_ sensitive to how their pipelines are used.
+ *
+ * For example, the Cortex-A73 can dispatch 3 micro-ops per cycle, but it can't
+ * have more than 2 NEON (F0/F1) micro-ops. If you are only using NEON instructions,
+ * you are only using 2/3 of the CPU bandwidth.
+ *
+ * This is even more noticable on the more advanced cores like the A76 which
+ * can dispatch 8 micro-ops per cycle, but still only 2 NEON micro-ops at once.
+ *
+ * Therefore, @ref XXH3_NEON_LANES lanes will be processed using NEON, and the
+ * remaining lanes will use scalar instructions. This improves the bandwidth
+ * and also gives the integer pipelines something to do besides twiddling loop
+ * counters and pointers.
+ *
+ * This change benefits CPUs with large micro-op buffers without negatively affecting
+ * other CPUs:
+ *
+ * | Chipset | Dispatch type | NEON only | 6:2 hybrid | Diff. |
+ * |:----------------------|:--------------------|----------:|-----------:|------:|
+ * | Snapdragon 730 (A76) | 2 NEON/8 micro-ops | 8.8 GB/s | 10.1 GB/s | ~16% |
+ * | Snapdragon 835 (A73) | 2 NEON/3 micro-ops | 5.1 GB/s | 5.3 GB/s | ~5% |
+ * | Marvell PXA1928 (A53) | In-order dual-issue | 1.9 GB/s | 1.9 GB/s | 0% |
+ *
+ * It also seems to fix some bad codegen on GCC, making it almost as fast as clang.
+ *
+ * @see XXH3_accumulate_512_neon()
+ */
+# ifndef XXH3_NEON_LANES
+# if (defined(__aarch64__) || defined(__arm64__) || defined(_M_ARM64) || defined(_M_ARM64EC)) \
+ && !defined(__OPTIMIZE_SIZE__)
+# define XXH3_NEON_LANES 6
+# else
+# define XXH3_NEON_LANES XXH_ACC_NB
+# endif
+# endif
+#endif /* XXH_VECTOR == XXH_NEON */
+
+/*
+ * VSX and Z Vector helpers.
+ *
+ * This is very messy, and any pull requests to clean this up are welcome.
+ *
+ * There are a lot of problems with supporting VSX and s390x, due to
+ * inconsistent intrinsics, spotty coverage, and multiple endiannesses.
+ */
+#if XXH_VECTOR == XXH_VSX
+# if defined(__s390x__)
+# include <s390intrin.h>
+# else
+/* gcc's altivec.h can have the unwanted consequence to unconditionally
+ * #define bool, vector, and pixel keywords,
+ * with bad consequences for programs already using these keywords for other purposes.
+ * The paragraph defining these macros is skipped when __APPLE_ALTIVEC__ is defined.
+ * __APPLE_ALTIVEC__ is _generally_ defined automatically by the compiler,
+ * but it seems that, in some cases, it isn't.
+ * Force the build macro to be defined, so that keywords are not altered.
+ */
+# if defined(__GNUC__) && !defined(__APPLE_ALTIVEC__)
+# define __APPLE_ALTIVEC__
+# endif
+# include <altivec.h>
+# endif
+
+typedef __vector unsigned long long xxh_u64x2;
+typedef __vector unsigned char xxh_u8x16;
+typedef __vector unsigned xxh_u32x4;
+
+# ifndef XXH_VSX_BE
+# if defined(__BIG_ENDIAN__) \
+ || (defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)
+# define XXH_VSX_BE 1
+# elif defined(__VEC_ELEMENT_REG_ORDER__) && __VEC_ELEMENT_REG_ORDER__ == __ORDER_BIG_ENDIAN__
+# warning "-maltivec=be is not recommended. Please use native endianness."
+# define XXH_VSX_BE 1
+# else
+# define XXH_VSX_BE 0
+# endif
+# endif /* !defined(XXH_VSX_BE) */
+
+# if XXH_VSX_BE
+# if defined(__POWER9_VECTOR__) || (defined(__clang__) && defined(__s390x__))
+# define XXH_vec_revb vec_revb
+# else
+/*!
+ * A polyfill for POWER9's vec_revb().
+ */
+XXH_FORCE_INLINE xxh_u64x2 XXH_vec_revb(xxh_u64x2 val)
+{
+ xxh_u8x16 const vByteSwap = { 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00,
+ 0x0F, 0x0E, 0x0D, 0x0C, 0x0B, 0x0A, 0x09, 0x08 };
+ return vec_perm(val, val, vByteSwap);
+}
+# endif
+# endif /* XXH_VSX_BE */
+
+/*!
+ * Performs an unaligned vector load and byte swaps it on big endian.
+ */
+XXH_FORCE_INLINE xxh_u64x2 XXH_vec_loadu(const void *ptr)
+{
+ xxh_u64x2 ret;
+ XXH_memcpy(&ret, ptr, sizeof(xxh_u64x2));
+# if XXH_VSX_BE
+ ret = XXH_vec_revb(ret);
+# endif
+ return ret;
+}
+
+/*
+ * vec_mulo and vec_mule are very problematic intrinsics on PowerPC
+ *
+ * These intrinsics weren't added until GCC 8, despite existing for a while,
+ * and they are endian dependent. Also, their meaning swap depending on version.
+ * */
+# if defined(__s390x__)
+ /* s390x is always big endian, no issue on this platform */
+# define XXH_vec_mulo vec_mulo
+# define XXH_vec_mule vec_mule
+# elif defined(__clang__) && XXH_HAS_BUILTIN(__builtin_altivec_vmuleuw)
+/* Clang has a better way to control this, we can just use the builtin which doesn't swap. */
+# define XXH_vec_mulo __builtin_altivec_vmulouw
+# define XXH_vec_mule __builtin_altivec_vmuleuw
+# else
+/* gcc needs inline assembly */
+/* Adapted from https://github.com/google/highwayhash/blob/master/highwayhash/hh_vsx.h. */
+XXH_FORCE_INLINE xxh_u64x2 XXH_vec_mulo(xxh_u32x4 a, xxh_u32x4 b)
+{
+ xxh_u64x2 result;
+ __asm__("vmulouw %0, %1, %2" : "=v" (result) : "v" (a), "v" (b));
+ return result;
+}
+XXH_FORCE_INLINE xxh_u64x2 XXH_vec_mule(xxh_u32x4 a, xxh_u32x4 b)
+{
+ xxh_u64x2 result;
+ __asm__("vmuleuw %0, %1, %2" : "=v" (result) : "v" (a), "v" (b));
+ return result;
+}
+# endif /* XXH_vec_mulo, XXH_vec_mule */
+#endif /* XXH_VECTOR == XXH_VSX */
+
+
+/* prefetch
+ * can be disabled, by declaring XXH_NO_PREFETCH build macro */
+#if defined(XXH_NO_PREFETCH)
+# define XXH_PREFETCH(ptr) (void)(ptr) /* disabled */
+#else
+# if defined(_MSC_VER) && (defined(_M_X64) || defined(_M_IX86)) /* _mm_prefetch() not defined outside of x86/x64 */
+# include <mmintrin.h> /* https://msdn.microsoft.com/fr-fr/library/84szxsww(v=vs.90).aspx */
+# define XXH_PREFETCH(ptr) _mm_prefetch((const char*)(ptr), _MM_HINT_T0)
+# elif defined(__GNUC__) && ( (__GNUC__ >= 4) || ( (__GNUC__ == 3) && (__GNUC_MINOR__ >= 1) ) )
+# define XXH_PREFETCH(ptr) __builtin_prefetch((ptr), 0 /* rw==read */, 3 /* locality */)
+# else
+# define XXH_PREFETCH(ptr) (void)(ptr) /* disabled */
+# endif
+#endif /* XXH_NO_PREFETCH */
+
+
+/* ==========================================
+ * XXH3 default settings
+ * ========================================== */
+
+#define XXH_SECRET_DEFAULT_SIZE 192 /* minimum XXH3_SECRET_SIZE_MIN */
+
+#if (XXH_SECRET_DEFAULT_SIZE < XXH3_SECRET_SIZE_MIN)
+# error "default keyset is not large enough"
+#endif
+
+/*! Pseudorandom secret taken directly from FARSH. */
+XXH_ALIGN(64) static const xxh_u8 XXH3_kSecret[XXH_SECRET_DEFAULT_SIZE] = {
+ 0xb8, 0xfe, 0x6c, 0x39, 0x23, 0xa4, 0x4b, 0xbe, 0x7c, 0x01, 0x81, 0x2c, 0xf7, 0x21, 0xad, 0x1c,
+ 0xde, 0xd4, 0x6d, 0xe9, 0x83, 0x90, 0x97, 0xdb, 0x72, 0x40, 0xa4, 0xa4, 0xb7, 0xb3, 0x67, 0x1f,
+ 0xcb, 0x79, 0xe6, 0x4e, 0xcc, 0xc0, 0xe5, 0x78, 0x82, 0x5a, 0xd0, 0x7d, 0xcc, 0xff, 0x72, 0x21,
+ 0xb8, 0x08, 0x46, 0x74, 0xf7, 0x43, 0x24, 0x8e, 0xe0, 0x35, 0x90, 0xe6, 0x81, 0x3a, 0x26, 0x4c,
+ 0x3c, 0x28, 0x52, 0xbb, 0x91, 0xc3, 0x00, 0xcb, 0x88, 0xd0, 0x65, 0x8b, 0x1b, 0x53, 0x2e, 0xa3,
+ 0x71, 0x64, 0x48, 0x97, 0xa2, 0x0d, 0xf9, 0x4e, 0x38, 0x19, 0xef, 0x46, 0xa9, 0xde, 0xac, 0xd8,
+ 0xa8, 0xfa, 0x76, 0x3f, 0xe3, 0x9c, 0x34, 0x3f, 0xf9, 0xdc, 0xbb, 0xc7, 0xc7, 0x0b, 0x4f, 0x1d,
+ 0x8a, 0x51, 0xe0, 0x4b, 0xcd, 0xb4, 0x59, 0x31, 0xc8, 0x9f, 0x7e, 0xc9, 0xd9, 0x78, 0x73, 0x64,
+ 0xea, 0xc5, 0xac, 0x83, 0x34, 0xd3, 0xeb, 0xc3, 0xc5, 0x81, 0xa0, 0xff, 0xfa, 0x13, 0x63, 0xeb,
+ 0x17, 0x0d, 0xdd, 0x51, 0xb7, 0xf0, 0xda, 0x49, 0xd3, 0x16, 0x55, 0x26, 0x29, 0xd4, 0x68, 0x9e,
+ 0x2b, 0x16, 0xbe, 0x58, 0x7d, 0x47, 0xa1, 0xfc, 0x8f, 0xf8, 0xb8, 0xd1, 0x7a, 0xd0, 0x31, 0xce,
+ 0x45, 0xcb, 0x3a, 0x8f, 0x95, 0x16, 0x04, 0x28, 0xaf, 0xd7, 0xfb, 0xca, 0xbb, 0x4b, 0x40, 0x7e,
+};
+
+
+#ifdef XXH_OLD_NAMES
+# define kSecret XXH3_kSecret
+#endif
+
+#ifdef XXH_DOXYGEN
+/*!
+ * @brief Calculates a 32-bit to 64-bit long multiply.
+ *
+ * Implemented as a macro.
+ *
+ * Wraps `__emulu` on MSVC x86 because it tends to call `__allmul` when it doesn't
+ * need to (but it shouldn't need to anyways, it is about 7 instructions to do
+ * a 64x64 multiply...). Since we know that this will _always_ emit `MULL`, we
+ * use that instead of the normal method.
+ *
+ * If you are compiling for platforms like Thumb-1 and don't have a better option,
+ * you may also want to write your own long multiply routine here.
+ *
+ * @param x, y Numbers to be multiplied
+ * @return 64-bit product of the low 32 bits of @p x and @p y.
+ */
+XXH_FORCE_INLINE xxh_u64
+XXH_mult32to64(xxh_u64 x, xxh_u64 y)
+{
+ return (x & 0xFFFFFFFF) * (y & 0xFFFFFFFF);
+}
+#elif defined(_MSC_VER) && defined(_M_IX86)
+# define XXH_mult32to64(x, y) __emulu((unsigned)(x), (unsigned)(y))
+#else
+/*
+ * Downcast + upcast is usually better than masking on older compilers like
+ * GCC 4.2 (especially 32-bit ones), all without affecting newer compilers.
+ *
+ * The other method, (x & 0xFFFFFFFF) * (y & 0xFFFFFFFF), will AND both operands
+ * and perform a full 64x64 multiply -- entirely redundant on 32-bit.
+ */
+# define XXH_mult32to64(x, y) ((xxh_u64)(xxh_u32)(x) * (xxh_u64)(xxh_u32)(y))
+#endif
+
+/*!
+ * @brief Calculates a 64->128-bit long multiply.
+ *
+ * Uses `__uint128_t` and `_umul128` if available, otherwise uses a scalar
+ * version.
+ *
+ * @param lhs , rhs The 64-bit integers to be multiplied
+ * @return The 128-bit result represented in an @ref XXH128_hash_t.
+ */
+static XXH128_hash_t
+XXH_mult64to128(xxh_u64 lhs, xxh_u64 rhs)
+{
+ /*
+ * GCC/Clang __uint128_t method.
+ *
+ * On most 64-bit targets, GCC and Clang define a __uint128_t type.
+ * This is usually the best way as it usually uses a native long 64-bit
+ * multiply, such as MULQ on x86_64 or MUL + UMULH on aarch64.
+ *
+ * Usually.
+ *
+ * Despite being a 32-bit platform, Clang (and emscripten) define this type
+ * despite not having the arithmetic for it. This results in a laggy
+ * compiler builtin call which calculates a full 128-bit multiply.
+ * In that case it is best to use the portable one.
+ * https://github.com/Cyan4973/xxHash/issues/211#issuecomment-515575677
+ */
+#if (defined(__GNUC__) || defined(__clang__)) && !defined(__wasm__) \
+ && defined(__SIZEOF_INT128__) \
+ || (defined(_INTEGRAL_MAX_BITS) && _INTEGRAL_MAX_BITS >= 128)
+
+ __uint128_t const product = (__uint128_t)lhs * (__uint128_t)rhs;
+ XXH128_hash_t r128;
+ r128.low64 = (xxh_u64)(product);
+ r128.high64 = (xxh_u64)(product >> 64);
+ return r128;
+
+ /*
+ * MSVC for x64's _umul128 method.
+ *
+ * xxh_u64 _umul128(xxh_u64 Multiplier, xxh_u64 Multiplicand, xxh_u64 *HighProduct);
+ *
+ * This compiles to single operand MUL on x64.
+ */
+#elif (defined(_M_X64) || defined(_M_IA64)) && !defined(_M_ARM64EC)
+
+#ifndef _MSC_VER
+# pragma intrinsic(_umul128)
+#endif
+ xxh_u64 product_high;
+ xxh_u64 const product_low = _umul128(lhs, rhs, &product_high);
+ XXH128_hash_t r128;
+ r128.low64 = product_low;
+ r128.high64 = product_high;
+ return r128;
+
+ /*
+ * MSVC for ARM64's __umulh method.
+ *
+ * This compiles to the same MUL + UMULH as GCC/Clang's __uint128_t method.
+ */
+#elif defined(_M_ARM64) || defined(_M_ARM64EC)
+
+#ifndef _MSC_VER
+# pragma intrinsic(__umulh)
+#endif
+ XXH128_hash_t r128;
+ r128.low64 = lhs * rhs;
+ r128.high64 = __umulh(lhs, rhs);
+ return r128;
+
+#else
+ /*
+ * Portable scalar method. Optimized for 32-bit and 64-bit ALUs.
+ *
+ * This is a fast and simple grade school multiply, which is shown below
+ * with base 10 arithmetic instead of base 0x100000000.
+ *
+ * 9 3 // D2 lhs = 93
+ * x 7 5 // D2 rhs = 75
+ * ----------
+ * 1 5 // D2 lo_lo = (93 % 10) * (75 % 10) = 15
+ * 4 5 | // D2 hi_lo = (93 / 10) * (75 % 10) = 45
+ * 2 1 | // D2 lo_hi = (93 % 10) * (75 / 10) = 21
+ * + 6 3 | | // D2 hi_hi = (93 / 10) * (75 / 10) = 63
+ * ---------
+ * 2 7 | // D2 cross = (15 / 10) + (45 % 10) + 21 = 27
+ * + 6 7 | | // D2 upper = (27 / 10) + (45 / 10) + 63 = 67
+ * ---------
+ * 6 9 7 5 // D4 res = (27 * 10) + (15 % 10) + (67 * 100) = 6975
+ *
+ * The reasons for adding the products like this are:
+ * 1. It avoids manual carry tracking. Just like how
+ * (9 * 9) + 9 + 9 = 99, the same applies with this for UINT64_MAX.
+ * This avoids a lot of complexity.
+ *
+ * 2. It hints for, and on Clang, compiles to, the powerful UMAAL
+ * instruction available in ARM's Digital Signal Processing extension
+ * in 32-bit ARMv6 and later, which is shown below:
+ *
+ * void UMAAL(xxh_u32 *RdLo, xxh_u32 *RdHi, xxh_u32 Rn, xxh_u32 Rm)
+ * {
+ * xxh_u64 product = (xxh_u64)*RdLo * (xxh_u64)*RdHi + Rn + Rm;
+ * *RdLo = (xxh_u32)(product & 0xFFFFFFFF);
+ * *RdHi = (xxh_u32)(product >> 32);
+ * }
+ *
+ * This instruction was designed for efficient long multiplication, and
+ * allows this to be calculated in only 4 instructions at speeds
+ * comparable to some 64-bit ALUs.
+ *
+ * 3. It isn't terrible on other platforms. Usually this will be a couple
+ * of 32-bit ADD/ADCs.
+ */
+
+ /* First calculate all of the cross products. */
+ xxh_u64 const lo_lo = XXH_mult32to64(lhs & 0xFFFFFFFF, rhs & 0xFFFFFFFF);
+ xxh_u64 const hi_lo = XXH_mult32to64(lhs >> 32, rhs & 0xFFFFFFFF);
+ xxh_u64 const lo_hi = XXH_mult32to64(lhs & 0xFFFFFFFF, rhs >> 32);
+ xxh_u64 const hi_hi = XXH_mult32to64(lhs >> 32, rhs >> 32);
+
+ /* Now add the products together. These will never overflow. */
+ xxh_u64 const cross = (lo_lo >> 32) + (hi_lo & 0xFFFFFFFF) + lo_hi;
+ xxh_u64 const upper = (hi_lo >> 32) + (cross >> 32) + hi_hi;
+ xxh_u64 const lower = (cross << 32) | (lo_lo & 0xFFFFFFFF);
+
+ XXH128_hash_t r128;
+ r128.low64 = lower;
+ r128.high64 = upper;
+ return r128;
+#endif
+}
+
+/*!
+ * @brief Calculates a 64-bit to 128-bit multiply, then XOR folds it.
+ *
+ * The reason for the separate function is to prevent passing too many structs
+ * around by value. This will hopefully inline the multiply, but we don't force it.
+ *
+ * @param lhs , rhs The 64-bit integers to multiply
+ * @return The low 64 bits of the product XOR'd by the high 64 bits.
+ * @see XXH_mult64to128()
+ */
+static xxh_u64
+XXH3_mul128_fold64(xxh_u64 lhs, xxh_u64 rhs)
+{
+ XXH128_hash_t product = XXH_mult64to128(lhs, rhs);
+ return product.low64 ^ product.high64;
+}
+
+/*! Seems to produce slightly better code on GCC for some reason. */
+XXH_FORCE_INLINE xxh_u64 XXH_xorshift64(xxh_u64 v64, int shift)
+{
+ XXH_ASSERT(0 <= shift && shift < 64);
+ return v64 ^ (v64 >> shift);
+}
+
+/*
+ * This is a fast avalanche stage,
+ * suitable when input bits are already partially mixed
+ */
+static XXH64_hash_t XXH3_avalanche(xxh_u64 h64)
+{
+ h64 = XXH_xorshift64(h64, 37);
+ h64 *= 0x165667919E3779F9ULL;
+ h64 = XXH_xorshift64(h64, 32);
+ return h64;
+}
+
+/*
+ * This is a stronger avalanche,
+ * inspired by Pelle Evensen's rrmxmx
+ * preferable when input has not been previously mixed
+ */
+static XXH64_hash_t XXH3_rrmxmx(xxh_u64 h64, xxh_u64 len)
+{
+ /* this mix is inspired by Pelle Evensen's rrmxmx */
+ h64 ^= XXH_rotl64(h64, 49) ^ XXH_rotl64(h64, 24);
+ h64 *= 0x9FB21C651E98DF25ULL;
+ h64 ^= (h64 >> 35) + len ;
+ h64 *= 0x9FB21C651E98DF25ULL;
+ return XXH_xorshift64(h64, 28);
+}
+
+
+/* ==========================================
+ * Short keys
+ * ==========================================
+ * One of the shortcomings of XXH32 and XXH64 was that their performance was
+ * sub-optimal on short lengths. It used an iterative algorithm which strongly
+ * favored lengths that were a multiple of 4 or 8.
+ *
+ * Instead of iterating over individual inputs, we use a set of single shot
+ * functions which piece together a range of lengths and operate in constant time.
+ *
+ * Additionally, the number of multiplies has been significantly reduced. This
+ * reduces latency, especially when emulating 64-bit multiplies on 32-bit.
+ *
+ * Depending on the platform, this may or may not be faster than XXH32, but it
+ * is almost guaranteed to be faster than XXH64.
+ */
+
+/*
+ * At very short lengths, there isn't enough input to fully hide secrets, or use
+ * the entire secret.
+ *
+ * There is also only a limited amount of mixing we can do before significantly
+ * impacting performance.
+ *
+ * Therefore, we use different sections of the secret and always mix two secret
+ * samples with an XOR. This should have no effect on performance on the
+ * seedless or withSeed variants because everything _should_ be constant folded
+ * by modern compilers.
+ *
+ * The XOR mixing hides individual parts of the secret and increases entropy.
+ *
+ * This adds an extra layer of strength for custom secrets.
+ */
+XXH_FORCE_INLINE XXH64_hash_t
+XXH3_len_1to3_64b(const xxh_u8* input, size_t len, const xxh_u8* secret, XXH64_hash_t seed)
+{
+ XXH_ASSERT(input != NULL);
+ XXH_ASSERT(1 <= len && len <= 3);
+ XXH_ASSERT(secret != NULL);
+ /*
+ * len = 1: combined = { input[0], 0x01, input[0], input[0] }
+ * len = 2: combined = { input[1], 0x02, input[0], input[1] }
+ * len = 3: combined = { input[2], 0x03, input[0], input[1] }
+ */
+ { xxh_u8 const c1 = input[0];
+ xxh_u8 const c2 = input[len >> 1];
+ xxh_u8 const c3 = input[len - 1];
+ xxh_u32 const combined = ((xxh_u32)c1 << 16) | ((xxh_u32)c2 << 24)
+ | ((xxh_u32)c3 << 0) | ((xxh_u32)len << 8);
+ xxh_u64 const bitflip = (XXH_readLE32(secret) ^ XXH_readLE32(secret+4)) + seed;
+ xxh_u64 const keyed = (xxh_u64)combined ^ bitflip;
+ return XXH64_avalanche(keyed);
+ }
+}
+
+XXH_FORCE_INLINE XXH64_hash_t
+XXH3_len_4to8_64b(const xxh_u8* input, size_t len, const xxh_u8* secret, XXH64_hash_t seed)
+{
+ XXH_ASSERT(input != NULL);
+ XXH_ASSERT(secret != NULL);
+ XXH_ASSERT(4 <= len && len <= 8);
+ seed ^= (xxh_u64)XXH_swap32((xxh_u32)seed) << 32;
+ { xxh_u32 const input1 = XXH_readLE32(input);
+ xxh_u32 const input2 = XXH_readLE32(input + len - 4);
+ xxh_u64 const bitflip = (XXH_readLE64(secret+8) ^ XXH_readLE64(secret+16)) - seed;
+ xxh_u64 const input64 = input2 + (((xxh_u64)input1) << 32);
+ xxh_u64 const keyed = input64 ^ bitflip;
+ return XXH3_rrmxmx(keyed, len);
+ }
+}
+
+XXH_FORCE_INLINE XXH64_hash_t
+XXH3_len_9to16_64b(const xxh_u8* input, size_t len, const xxh_u8* secret, XXH64_hash_t seed)
+{
+ XXH_ASSERT(input != NULL);
+ XXH_ASSERT(secret != NULL);
+ XXH_ASSERT(9 <= len && len <= 16);
+ { xxh_u64 const bitflip1 = (XXH_readLE64(secret+24) ^ XXH_readLE64(secret+32)) + seed;
+ xxh_u64 const bitflip2 = (XXH_readLE64(secret+40) ^ XXH_readLE64(secret+48)) - seed;
+ xxh_u64 const input_lo = XXH_readLE64(input) ^ bitflip1;
+ xxh_u64 const input_hi = XXH_readLE64(input + len - 8) ^ bitflip2;
+ xxh_u64 const acc = len
+ + XXH_swap64(input_lo) + input_hi
+ + XXH3_mul128_fold64(input_lo, input_hi);
+ return XXH3_avalanche(acc);
+ }
+}
+
+XXH_FORCE_INLINE XXH64_hash_t
+XXH3_len_0to16_64b(const xxh_u8* input, size_t len, const xxh_u8* secret, XXH64_hash_t seed)
+{
+ XXH_ASSERT(len <= 16);
+ { if (XXH_likely(len > 8)) return XXH3_len_9to16_64b(input, len, secret, seed);
+ if (XXH_likely(len >= 4)) return XXH3_len_4to8_64b(input, len, secret, seed);
+ if (len) return XXH3_len_1to3_64b(input, len, secret, seed);
+ return XXH64_avalanche(seed ^ (XXH_readLE64(secret+56) ^ XXH_readLE64(secret+64)));
+ }
+}
+
+/*
+ * DISCLAIMER: There are known *seed-dependent* multicollisions here due to
+ * multiplication by zero, affecting hashes of lengths 17 to 240.
+ *
+ * However, they are very unlikely.
+ *
+ * Keep this in mind when using the unseeded XXH3_64bits() variant: As with all
+ * unseeded non-cryptographic hashes, it does not attempt to defend itself
+ * against specially crafted inputs, only random inputs.
+ *
+ * Compared to classic UMAC where a 1 in 2^31 chance of 4 consecutive bytes
+ * cancelling out the secret is taken an arbitrary number of times (addressed
+ * in XXH3_accumulate_512), this collision is very unlikely with random inputs
+ * and/or proper seeding:
+ *
+ * This only has a 1 in 2^63 chance of 8 consecutive bytes cancelling out, in a
+ * function that is only called up to 16 times per hash with up to 240 bytes of
+ * input.
+ *
+ * This is not too bad for a non-cryptographic hash function, especially with
+ * only 64 bit outputs.
+ *
+ * The 128-bit variant (which trades some speed for strength) is NOT affected
+ * by this, although it is always a good idea to use a proper seed if you care
+ * about strength.
+ */
+XXH_FORCE_INLINE xxh_u64 XXH3_mix16B(const xxh_u8* XXH_RESTRICT input,
+ const xxh_u8* XXH_RESTRICT secret, xxh_u64 seed64)
+{
+#if defined(__GNUC__) && !defined(__clang__) /* GCC, not Clang */ \
+ && defined(__i386__) && defined(__SSE2__) /* x86 + SSE2 */ \
+ && !defined(XXH_ENABLE_AUTOVECTORIZE) /* Define to disable like XXH32 hack */
+ /*
+ * UGLY HACK:
+ * GCC for x86 tends to autovectorize the 128-bit multiply, resulting in
+ * slower code.
+ *
+ * By forcing seed64 into a register, we disrupt the cost model and
+ * cause it to scalarize. See `XXH32_round()`
+ *
+ * FIXME: Clang's output is still _much_ faster -- On an AMD Ryzen 3600,
+ * XXH3_64bits @ len=240 runs at 4.6 GB/s with Clang 9, but 3.3 GB/s on
+ * GCC 9.2, despite both emitting scalar code.
+ *
+ * GCC generates much better scalar code than Clang for the rest of XXH3,
+ * which is why finding a more optimal codepath is an interest.
+ */
+ XXH_COMPILER_GUARD(seed64);
+#endif
+ { xxh_u64 const input_lo = XXH_readLE64(input);
+ xxh_u64 const input_hi = XXH_readLE64(input+8);
+ return XXH3_mul128_fold64(
+ input_lo ^ (XXH_readLE64(secret) + seed64),
+ input_hi ^ (XXH_readLE64(secret+8) - seed64)
+ );
+ }
+}
+
+/* For mid range keys, XXH3 uses a Mum-hash variant. */
+XXH_FORCE_INLINE XXH64_hash_t
+XXH3_len_17to128_64b(const xxh_u8* XXH_RESTRICT input, size_t len,
+ const xxh_u8* XXH_RESTRICT secret, size_t secretSize,
+ XXH64_hash_t seed)
+{
+ XXH_ASSERT(secretSize >= XXH3_SECRET_SIZE_MIN); (void)secretSize;
+ XXH_ASSERT(16 < len && len <= 128);
+
+ { xxh_u64 acc = len * XXH_PRIME64_1;
+ if (len > 32) {
+ if (len > 64) {
+ if (len > 96) {
+ acc += XXH3_mix16B(input+48, secret+96, seed);
+ acc += XXH3_mix16B(input+len-64, secret+112, seed);
+ }
+ acc += XXH3_mix16B(input+32, secret+64, seed);
+ acc += XXH3_mix16B(input+len-48, secret+80, seed);
+ }
+ acc += XXH3_mix16B(input+16, secret+32, seed);
+ acc += XXH3_mix16B(input+len-32, secret+48, seed);
+ }
+ acc += XXH3_mix16B(input+0, secret+0, seed);
+ acc += XXH3_mix16B(input+len-16, secret+16, seed);
+
+ return XXH3_avalanche(acc);
+ }
+}
+
+#define XXH3_MIDSIZE_MAX 240
+
+XXH_NO_INLINE XXH64_hash_t
+XXH3_len_129to240_64b(const xxh_u8* XXH_RESTRICT input, size_t len,
+ const xxh_u8* XXH_RESTRICT secret, size_t secretSize,
+ XXH64_hash_t seed)
+{
+ XXH_ASSERT(secretSize >= XXH3_SECRET_SIZE_MIN); (void)secretSize;
+ XXH_ASSERT(128 < len && len <= XXH3_MIDSIZE_MAX);
+
+ #define XXH3_MIDSIZE_STARTOFFSET 3
+ #define XXH3_MIDSIZE_LASTOFFSET 17
+
+ { xxh_u64 acc = len * XXH_PRIME64_1;
+ int const nbRounds = (int)len / 16;
+ int i;
+ for (i=0; i<8; i++) {
+ acc += XXH3_mix16B(input+(16*i), secret+(16*i), seed);
+ }
+ acc = XXH3_avalanche(acc);
+ XXH_ASSERT(nbRounds >= 8);
+#if defined(__clang__) /* Clang */ \
+ && (defined(__ARM_NEON) || defined(__ARM_NEON__)) /* NEON */ \
+ && !defined(XXH_ENABLE_AUTOVECTORIZE) /* Define to disable */
+ /*
+ * UGLY HACK:
+ * Clang for ARMv7-A tries to vectorize this loop, similar to GCC x86.
+ * In everywhere else, it uses scalar code.
+ *
+ * For 64->128-bit multiplies, even if the NEON was 100% optimal, it
+ * would still be slower than UMAAL (see XXH_mult64to128).
+ *
+ * Unfortunately, Clang doesn't handle the long multiplies properly and
+ * converts them to the nonexistent "vmulq_u64" intrinsic, which is then
+ * scalarized into an ugly mess of VMOV.32 instructions.
+ *
+ * This mess is difficult to avoid without turning autovectorization
+ * off completely, but they are usually relatively minor and/or not
+ * worth it to fix.
+ *
+ * This loop is the easiest to fix, as unlike XXH32, this pragma
+ * _actually works_ because it is a loop vectorization instead of an
+ * SLP vectorization.
+ */
+ #pragma clang loop vectorize(disable)
+#endif
+ for (i=8 ; i < nbRounds; i++) {
+ acc += XXH3_mix16B(input+(16*i), secret+(16*(i-8)) + XXH3_MIDSIZE_STARTOFFSET, seed);
+ }
+ /* last bytes */
+ acc += XXH3_mix16B(input + len - 16, secret + XXH3_SECRET_SIZE_MIN - XXH3_MIDSIZE_LASTOFFSET, seed);
+ return XXH3_avalanche(acc);
+ }
+}
+
+
+/* ======= Long Keys ======= */
+
+#define XXH_STRIPE_LEN 64
+#define XXH_SECRET_CONSUME_RATE 8 /* nb of secret bytes consumed at each accumulation */
+#define XXH_ACC_NB (XXH_STRIPE_LEN / sizeof(xxh_u64))
+
+#ifdef XXH_OLD_NAMES
+# define STRIPE_LEN XXH_STRIPE_LEN
+# define ACC_NB XXH_ACC_NB
+#endif
+
+XXH_FORCE_INLINE void XXH_writeLE64(void* dst, xxh_u64 v64)
+{
+ if (!XXH_CPU_LITTLE_ENDIAN) v64 = XXH_swap64(v64);
+ XXH_memcpy(dst, &v64, sizeof(v64));
+}
+
+/* Several intrinsic functions below are supposed to accept __int64 as argument,
+ * as documented in https://software.intel.com/sites/landingpage/IntrinsicsGuide/ .
+ * However, several environments do not define __int64 type,
+ * requiring a workaround.
+ */
+#if !defined (__VMS) \
+ && (defined (__cplusplus) \
+ || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) )
+ typedef int64_t xxh_i64;
+#else
+ /* the following type must have a width of 64-bit */
+ typedef long long xxh_i64;
+#endif
+
+
+/*
+ * XXH3_accumulate_512 is the tightest loop for long inputs, and it is the most optimized.
+ *
+ * It is a hardened version of UMAC, based off of FARSH's implementation.
+ *
+ * This was chosen because it adapts quite well to 32-bit, 64-bit, and SIMD
+ * implementations, and it is ridiculously fast.
+ *
+ * We harden it by mixing the original input to the accumulators as well as the product.
+ *
+ * This means that in the (relatively likely) case of a multiply by zero, the
+ * original input is preserved.
+ *
+ * On 128-bit inputs, we swap 64-bit pairs when we add the input to improve
+ * cross-pollination, as otherwise the upper and lower halves would be
+ * essentially independent.
+ *
+ * This doesn't matter on 64-bit hashes since they all get merged together in
+ * the end, so we skip the extra step.
+ *
+ * Both XXH3_64bits and XXH3_128bits use this subroutine.
+ */
+
+#if (XXH_VECTOR == XXH_AVX512) \
+ || (defined(XXH_DISPATCH_AVX512) && XXH_DISPATCH_AVX512 != 0)
+
+#ifndef XXH_TARGET_AVX512
+# define XXH_TARGET_AVX512 /* disable attribute target */
+#endif
+
+XXH_FORCE_INLINE XXH_TARGET_AVX512 void
+XXH3_accumulate_512_avx512(void* XXH_RESTRICT acc,
+ const void* XXH_RESTRICT input,
+ const void* XXH_RESTRICT secret)
+{
+ __m512i* const xacc = (__m512i *) acc;
+ XXH_ASSERT((((size_t)acc) & 63) == 0);
+ XXH_STATIC_ASSERT(XXH_STRIPE_LEN == sizeof(__m512i));
+
+ {
+ /* data_vec = input[0]; */
+ __m512i const data_vec = _mm512_loadu_si512 (input);
+ /* key_vec = secret[0]; */
+ __m512i const key_vec = _mm512_loadu_si512 (secret);
+ /* data_key = data_vec ^ key_vec; */
+ __m512i const data_key = _mm512_xor_si512 (data_vec, key_vec);
+ /* data_key_lo = data_key >> 32; */
+ __m512i const data_key_lo = _mm512_shuffle_epi32 (data_key, (_MM_PERM_ENUM)_MM_SHUFFLE(0, 3, 0, 1));
+ /* product = (data_key & 0xffffffff) * (data_key_lo & 0xffffffff); */
+ __m512i const product = _mm512_mul_epu32 (data_key, data_key_lo);
+ /* xacc[0] += swap(data_vec); */
+ __m512i const data_swap = _mm512_shuffle_epi32(data_vec, (_MM_PERM_ENUM)_MM_SHUFFLE(1, 0, 3, 2));
+ __m512i const sum = _mm512_add_epi64(*xacc, data_swap);
+ /* xacc[0] += product; */
+ *xacc = _mm512_add_epi64(product, sum);
+ }
+}
+
+/*
+ * XXH3_scrambleAcc: Scrambles the accumulators to improve mixing.
+ *
+ * Multiplication isn't perfect, as explained by Google in HighwayHash:
+ *
+ * // Multiplication mixes/scrambles bytes 0-7 of the 64-bit result to
+ * // varying degrees. In descending order of goodness, bytes
+ * // 3 4 2 5 1 6 0 7 have quality 228 224 164 160 100 96 36 32.
+ * // As expected, the upper and lower bytes are much worse.
+ *
+ * Source: https://github.com/google/highwayhash/blob/0aaf66b/highwayhash/hh_avx2.h#L291
+ *
+ * Since our algorithm uses a pseudorandom secret to add some variance into the
+ * mix, we don't need to (or want to) mix as often or as much as HighwayHash does.
+ *
+ * This isn't as tight as XXH3_accumulate, but still written in SIMD to avoid
+ * extraction.
+ *
+ * Both XXH3_64bits and XXH3_128bits use this subroutine.
+ */
+
+XXH_FORCE_INLINE XXH_TARGET_AVX512 void
+XXH3_scrambleAcc_avx512(void* XXH_RESTRICT acc, const void* XXH_RESTRICT secret)
+{
+ XXH_ASSERT((((size_t)acc) & 63) == 0);
+ XXH_STATIC_ASSERT(XXH_STRIPE_LEN == sizeof(__m512i));
+ { __m512i* const xacc = (__m512i*) acc;
+ const __m512i prime32 = _mm512_set1_epi32((int)XXH_PRIME32_1);
+
+ /* xacc[0] ^= (xacc[0] >> 47) */
+ __m512i const acc_vec = *xacc;
+ __m512i const shifted = _mm512_srli_epi64 (acc_vec, 47);
+ __m512i const data_vec = _mm512_xor_si512 (acc_vec, shifted);
+ /* xacc[0] ^= secret; */
+ __m512i const key_vec = _mm512_loadu_si512 (secret);
+ __m512i const data_key = _mm512_xor_si512 (data_vec, key_vec);
+
+ /* xacc[0] *= XXH_PRIME32_1; */
+ __m512i const data_key_hi = _mm512_shuffle_epi32 (data_key, (_MM_PERM_ENUM)_MM_SHUFFLE(0, 3, 0, 1));
+ __m512i const prod_lo = _mm512_mul_epu32 (data_key, prime32);
+ __m512i const prod_hi = _mm512_mul_epu32 (data_key_hi, prime32);
+ *xacc = _mm512_add_epi64(prod_lo, _mm512_slli_epi64(prod_hi, 32));
+ }
+}
+
+XXH_FORCE_INLINE XXH_TARGET_AVX512 void
+XXH3_initCustomSecret_avx512(void* XXH_RESTRICT customSecret, xxh_u64 seed64)
+{
+ XXH_STATIC_ASSERT((XXH_SECRET_DEFAULT_SIZE & 63) == 0);
+ XXH_STATIC_ASSERT(XXH_SEC_ALIGN == 64);
+ XXH_ASSERT(((size_t)customSecret & 63) == 0);
+ (void)(&XXH_writeLE64);
+ { int const nbRounds = XXH_SECRET_DEFAULT_SIZE / sizeof(__m512i);
+ __m512i const seed = _mm512_mask_set1_epi64(_mm512_set1_epi64((xxh_i64)seed64), 0xAA, (xxh_i64)(0U - seed64));
+
+ const __m512i* const src = (const __m512i*) ((const void*) XXH3_kSecret);
+ __m512i* const dest = ( __m512i*) customSecret;
+ int i;
+ XXH_ASSERT(((size_t)src & 63) == 0); /* control alignment */
+ XXH_ASSERT(((size_t)dest & 63) == 0);
+ for (i=0; i < nbRounds; ++i) {
+ /* GCC has a bug, _mm512_stream_load_si512 accepts 'void*', not 'void const*',
+ * this will warn "discards 'const' qualifier". */
+ union {
+ const __m512i* cp;
+ void* p;
+ } remote_const_void;
+ remote_const_void.cp = src + i;
+ dest[i] = _mm512_add_epi64(_mm512_stream_load_si512(remote_const_void.p), seed);
+ } }
+}
+
+#endif
+
+#if (XXH_VECTOR == XXH_AVX2) \
+ || (defined(XXH_DISPATCH_AVX2) && XXH_DISPATCH_AVX2 != 0)
+
+#ifndef XXH_TARGET_AVX2
+# define XXH_TARGET_AVX2 /* disable attribute target */
+#endif
+
+XXH_FORCE_INLINE XXH_TARGET_AVX2 void
+XXH3_accumulate_512_avx2( void* XXH_RESTRICT acc,
+ const void* XXH_RESTRICT input,
+ const void* XXH_RESTRICT secret)
+{
+ XXH_ASSERT((((size_t)acc) & 31) == 0);
+ { __m256i* const xacc = (__m256i *) acc;
+ /* Unaligned. This is mainly for pointer arithmetic, and because
+ * _mm256_loadu_si256 requires a const __m256i * pointer for some reason. */
+ const __m256i* const xinput = (const __m256i *) input;
+ /* Unaligned. This is mainly for pointer arithmetic, and because
+ * _mm256_loadu_si256 requires a const __m256i * pointer for some reason. */
+ const __m256i* const xsecret = (const __m256i *) secret;
+
+ size_t i;
+ for (i=0; i < XXH_STRIPE_LEN/sizeof(__m256i); i++) {
+ /* data_vec = xinput[i]; */
+ __m256i const data_vec = _mm256_loadu_si256 (xinput+i);
+ /* key_vec = xsecret[i]; */
+ __m256i const key_vec = _mm256_loadu_si256 (xsecret+i);
+ /* data_key = data_vec ^ key_vec; */
+ __m256i const data_key = _mm256_xor_si256 (data_vec, key_vec);
+ /* data_key_lo = data_key >> 32; */
+ __m256i const data_key_lo = _mm256_shuffle_epi32 (data_key, _MM_SHUFFLE(0, 3, 0, 1));
+ /* product = (data_key & 0xffffffff) * (data_key_lo & 0xffffffff); */
+ __m256i const product = _mm256_mul_epu32 (data_key, data_key_lo);
+ /* xacc[i] += swap(data_vec); */
+ __m256i const data_swap = _mm256_shuffle_epi32(data_vec, _MM_SHUFFLE(1, 0, 3, 2));
+ __m256i const sum = _mm256_add_epi64(xacc[i], data_swap);
+ /* xacc[i] += product; */
+ xacc[i] = _mm256_add_epi64(product, sum);
+ } }
+}
+
+XXH_FORCE_INLINE XXH_TARGET_AVX2 void
+XXH3_scrambleAcc_avx2(void* XXH_RESTRICT acc, const void* XXH_RESTRICT secret)
+{
+ XXH_ASSERT((((size_t)acc) & 31) == 0);
+ { __m256i* const xacc = (__m256i*) acc;
+ /* Unaligned. This is mainly for pointer arithmetic, and because
+ * _mm256_loadu_si256 requires a const __m256i * pointer for some reason. */
+ const __m256i* const xsecret = (const __m256i *) secret;
+ const __m256i prime32 = _mm256_set1_epi32((int)XXH_PRIME32_1);
+
+ size_t i;
+ for (i=0; i < XXH_STRIPE_LEN/sizeof(__m256i); i++) {
+ /* xacc[i] ^= (xacc[i] >> 47) */
+ __m256i const acc_vec = xacc[i];
+ __m256i const shifted = _mm256_srli_epi64 (acc_vec, 47);
+ __m256i const data_vec = _mm256_xor_si256 (acc_vec, shifted);
+ /* xacc[i] ^= xsecret; */
+ __m256i const key_vec = _mm256_loadu_si256 (xsecret+i);
+ __m256i const data_key = _mm256_xor_si256 (data_vec, key_vec);
+
+ /* xacc[i] *= XXH_PRIME32_1; */
+ __m256i const data_key_hi = _mm256_shuffle_epi32 (data_key, _MM_SHUFFLE(0, 3, 0, 1));
+ __m256i const prod_lo = _mm256_mul_epu32 (data_key, prime32);
+ __m256i const prod_hi = _mm256_mul_epu32 (data_key_hi, prime32);
+ xacc[i] = _mm256_add_epi64(prod_lo, _mm256_slli_epi64(prod_hi, 32));
+ }
+ }
+}
+
+XXH_FORCE_INLINE XXH_TARGET_AVX2 void XXH3_initCustomSecret_avx2(void* XXH_RESTRICT customSecret, xxh_u64 seed64)
+{
+ XXH_STATIC_ASSERT((XXH_SECRET_DEFAULT_SIZE & 31) == 0);
+ XXH_STATIC_ASSERT((XXH_SECRET_DEFAULT_SIZE / sizeof(__m256i)) == 6);
+ XXH_STATIC_ASSERT(XXH_SEC_ALIGN <= 64);
+ (void)(&XXH_writeLE64);
+ XXH_PREFETCH(customSecret);
+ { __m256i const seed = _mm256_set_epi64x((xxh_i64)(0U - seed64), (xxh_i64)seed64, (xxh_i64)(0U - seed64), (xxh_i64)seed64);
+
+ const __m256i* const src = (const __m256i*) ((const void*) XXH3_kSecret);
+ __m256i* dest = ( __m256i*) customSecret;
+
+# if defined(__GNUC__) || defined(__clang__)
+ /*
+ * On GCC & Clang, marking 'dest' as modified will cause the compiler:
+ * - do not extract the secret from sse registers in the internal loop
+ * - use less common registers, and avoid pushing these reg into stack
+ */
+ XXH_COMPILER_GUARD(dest);
+# endif
+ XXH_ASSERT(((size_t)src & 31) == 0); /* control alignment */
+ XXH_ASSERT(((size_t)dest & 31) == 0);
+
+ /* GCC -O2 need unroll loop manually */
+ dest[0] = _mm256_add_epi64(_mm256_stream_load_si256(src+0), seed);
+ dest[1] = _mm256_add_epi64(_mm256_stream_load_si256(src+1), seed);
+ dest[2] = _mm256_add_epi64(_mm256_stream_load_si256(src+2), seed);
+ dest[3] = _mm256_add_epi64(_mm256_stream_load_si256(src+3), seed);
+ dest[4] = _mm256_add_epi64(_mm256_stream_load_si256(src+4), seed);
+ dest[5] = _mm256_add_epi64(_mm256_stream_load_si256(src+5), seed);
+ }
+}
+
+#endif
+
+/* x86dispatch always generates SSE2 */
+#if (XXH_VECTOR == XXH_SSE2) || defined(XXH_X86DISPATCH)
+
+#ifndef XXH_TARGET_SSE2
+# define XXH_TARGET_SSE2 /* disable attribute target */
+#endif
+
+XXH_FORCE_INLINE XXH_TARGET_SSE2 void
+XXH3_accumulate_512_sse2( void* XXH_RESTRICT acc,
+ const void* XXH_RESTRICT input,
+ const void* XXH_RESTRICT secret)
+{
+ /* SSE2 is just a half-scale version of the AVX2 version. */
+ XXH_ASSERT((((size_t)acc) & 15) == 0);
+ { __m128i* const xacc = (__m128i *) acc;
+ /* Unaligned. This is mainly for pointer arithmetic, and because
+ * _mm_loadu_si128 requires a const __m128i * pointer for some reason. */
+ const __m128i* const xinput = (const __m128i *) input;
+ /* Unaligned. This is mainly for pointer arithmetic, and because
+ * _mm_loadu_si128 requires a const __m128i * pointer for some reason. */
+ const __m128i* const xsecret = (const __m128i *) secret;
+
+ size_t i;
+ for (i=0; i < XXH_STRIPE_LEN/sizeof(__m128i); i++) {
+ /* data_vec = xinput[i]; */
+ __m128i const data_vec = _mm_loadu_si128 (xinput+i);
+ /* key_vec = xsecret[i]; */
+ __m128i const key_vec = _mm_loadu_si128 (xsecret+i);
+ /* data_key = data_vec ^ key_vec; */
+ __m128i const data_key = _mm_xor_si128 (data_vec, key_vec);
+ /* data_key_lo = data_key >> 32; */
+ __m128i const data_key_lo = _mm_shuffle_epi32 (data_key, _MM_SHUFFLE(0, 3, 0, 1));
+ /* product = (data_key & 0xffffffff) * (data_key_lo & 0xffffffff); */
+ __m128i const product = _mm_mul_epu32 (data_key, data_key_lo);
+ /* xacc[i] += swap(data_vec); */
+ __m128i const data_swap = _mm_shuffle_epi32(data_vec, _MM_SHUFFLE(1,0,3,2));
+ __m128i const sum = _mm_add_epi64(xacc[i], data_swap);
+ /* xacc[i] += product; */
+ xacc[i] = _mm_add_epi64(product, sum);
+ } }
+}
+
+XXH_FORCE_INLINE XXH_TARGET_SSE2 void
+XXH3_scrambleAcc_sse2(void* XXH_RESTRICT acc, const void* XXH_RESTRICT secret)
+{
+ XXH_ASSERT((((size_t)acc) & 15) == 0);
+ { __m128i* const xacc = (__m128i*) acc;
+ /* Unaligned. This is mainly for pointer arithmetic, and because
+ * _mm_loadu_si128 requires a const __m128i * pointer for some reason. */
+ const __m128i* const xsecret = (const __m128i *) secret;
+ const __m128i prime32 = _mm_set1_epi32((int)XXH_PRIME32_1);
+
+ size_t i;
+ for (i=0; i < XXH_STRIPE_LEN/sizeof(__m128i); i++) {
+ /* xacc[i] ^= (xacc[i] >> 47) */
+ __m128i const acc_vec = xacc[i];
+ __m128i const shifted = _mm_srli_epi64 (acc_vec, 47);
+ __m128i const data_vec = _mm_xor_si128 (acc_vec, shifted);
+ /* xacc[i] ^= xsecret[i]; */
+ __m128i const key_vec = _mm_loadu_si128 (xsecret+i);
+ __m128i const data_key = _mm_xor_si128 (data_vec, key_vec);
+
+ /* xacc[i] *= XXH_PRIME32_1; */
+ __m128i const data_key_hi = _mm_shuffle_epi32 (data_key, _MM_SHUFFLE(0, 3, 0, 1));
+ __m128i const prod_lo = _mm_mul_epu32 (data_key, prime32);
+ __m128i const prod_hi = _mm_mul_epu32 (data_key_hi, prime32);
+ xacc[i] = _mm_add_epi64(prod_lo, _mm_slli_epi64(prod_hi, 32));
+ }
+ }
+}
+
+XXH_FORCE_INLINE XXH_TARGET_SSE2 void XXH3_initCustomSecret_sse2(void* XXH_RESTRICT customSecret, xxh_u64 seed64)
+{
+ XXH_STATIC_ASSERT((XXH_SECRET_DEFAULT_SIZE & 15) == 0);
+ (void)(&XXH_writeLE64);
+ { int const nbRounds = XXH_SECRET_DEFAULT_SIZE / sizeof(__m128i);
+
+# if defined(_MSC_VER) && defined(_M_IX86) && _MSC_VER < 1900
+ /* MSVC 32bit mode does not support _mm_set_epi64x before 2015 */
+ XXH_ALIGN(16) const xxh_i64 seed64x2[2] = { (xxh_i64)seed64, (xxh_i64)(0U - seed64) };
+ __m128i const seed = _mm_load_si128((__m128i const*)seed64x2);
+# else
+ __m128i const seed = _mm_set_epi64x((xxh_i64)(0U - seed64), (xxh_i64)seed64);
+# endif
+ int i;
+
+ const void* const src16 = XXH3_kSecret;
+ __m128i* dst16 = (__m128i*) customSecret;
+# if defined(__GNUC__) || defined(__clang__)
+ /*
+ * On GCC & Clang, marking 'dest' as modified will cause the compiler:
+ * - do not extract the secret from sse registers in the internal loop
+ * - use less common registers, and avoid pushing these reg into stack
+ */
+ XXH_COMPILER_GUARD(dst16);
+# endif
+ XXH_ASSERT(((size_t)src16 & 15) == 0); /* control alignment */
+ XXH_ASSERT(((size_t)dst16 & 15) == 0);
+
+ for (i=0; i < nbRounds; ++i) {
+ dst16[i] = _mm_add_epi64(_mm_load_si128((const __m128i *)src16+i), seed);
+ } }
+}
+
+#endif
+
+#if (XXH_VECTOR == XXH_NEON)
+
+/* forward declarations for the scalar routines */
+XXH_FORCE_INLINE void
+XXH3_scalarRound(void* XXH_RESTRICT acc, void const* XXH_RESTRICT input,
+ void const* XXH_RESTRICT secret, size_t lane);
+
+XXH_FORCE_INLINE void
+XXH3_scalarScrambleRound(void* XXH_RESTRICT acc,
+ void const* XXH_RESTRICT secret, size_t lane);
+
+/*!
+ * @internal
+ * @brief The bulk processing loop for NEON.
+ *
+ * The NEON code path is actually partially scalar when running on AArch64. This
+ * is to optimize the pipelining and can have up to 15% speedup depending on the
+ * CPU, and it also mitigates some GCC codegen issues.
+ *
+ * @see XXH3_NEON_LANES for configuring this and details about this optimization.
+ */
+XXH_FORCE_INLINE void
+XXH3_accumulate_512_neon( void* XXH_RESTRICT acc,
+ const void* XXH_RESTRICT input,
+ const void* XXH_RESTRICT secret)
+{
+ XXH_ASSERT((((size_t)acc) & 15) == 0);
+ XXH_STATIC_ASSERT(XXH3_NEON_LANES > 0 && XXH3_NEON_LANES <= XXH_ACC_NB && XXH3_NEON_LANES % 2 == 0);
+ {
+ uint64x2_t* const xacc = (uint64x2_t *) acc;
+ /* We don't use a uint32x4_t pointer because it causes bus errors on ARMv7. */
+ uint8_t const* const xinput = (const uint8_t *) input;
+ uint8_t const* const xsecret = (const uint8_t *) secret;
+
+ size_t i;
+ /* NEON for the first few lanes (these loops are normally interleaved) */
+ for (i=0; i < XXH3_NEON_LANES / 2; i++) {
+ /* data_vec = xinput[i]; */
+ uint8x16_t data_vec = vld1q_u8(xinput + (i * 16));
+ /* key_vec = xsecret[i]; */
+ uint8x16_t key_vec = vld1q_u8(xsecret + (i * 16));
+ uint64x2_t data_key;
+ uint32x2_t data_key_lo, data_key_hi;
+ /* xacc[i] += swap(data_vec); */
+ uint64x2_t const data64 = vreinterpretq_u64_u8(data_vec);
+ uint64x2_t const swapped = vextq_u64(data64, data64, 1);
+ xacc[i] = vaddq_u64 (xacc[i], swapped);
+ /* data_key = data_vec ^ key_vec; */
+ data_key = vreinterpretq_u64_u8(veorq_u8(data_vec, key_vec));
+ /* data_key_lo = (uint32x2_t) (data_key & 0xFFFFFFFF);
+ * data_key_hi = (uint32x2_t) (data_key >> 32);
+ * data_key = UNDEFINED; */
+ XXH_SPLIT_IN_PLACE(data_key, data_key_lo, data_key_hi);
+ /* xacc[i] += (uint64x2_t) data_key_lo * (uint64x2_t) data_key_hi; */
+ xacc[i] = vmlal_u32 (xacc[i], data_key_lo, data_key_hi);
+
+ }
+ /* Scalar for the remainder. This may be a zero iteration loop. */
+ for (i = XXH3_NEON_LANES; i < XXH_ACC_NB; i++) {
+ XXH3_scalarRound(acc, input, secret, i);
+ }
+ }
+}
+
+XXH_FORCE_INLINE void
+XXH3_scrambleAcc_neon(void* XXH_RESTRICT acc, const void* XXH_RESTRICT secret)
+{
+ XXH_ASSERT((((size_t)acc) & 15) == 0);
+
+ { uint64x2_t* xacc = (uint64x2_t*) acc;
+ uint8_t const* xsecret = (uint8_t const*) secret;
+ uint32x2_t prime = vdup_n_u32 (XXH_PRIME32_1);
+
+ size_t i;
+ /* NEON for the first few lanes (these loops are normally interleaved) */
+ for (i=0; i < XXH3_NEON_LANES / 2; i++) {
+ /* xacc[i] ^= (xacc[i] >> 47); */
+ uint64x2_t acc_vec = xacc[i];
+ uint64x2_t shifted = vshrq_n_u64 (acc_vec, 47);
+ uint64x2_t data_vec = veorq_u64 (acc_vec, shifted);
+
+ /* xacc[i] ^= xsecret[i]; */
+ uint8x16_t key_vec = vld1q_u8 (xsecret + (i * 16));
+ uint64x2_t data_key = veorq_u64 (data_vec, vreinterpretq_u64_u8(key_vec));
+
+ /* xacc[i] *= XXH_PRIME32_1 */
+ uint32x2_t data_key_lo, data_key_hi;
+ /* data_key_lo = (uint32x2_t) (xacc[i] & 0xFFFFFFFF);
+ * data_key_hi = (uint32x2_t) (xacc[i] >> 32);
+ * xacc[i] = UNDEFINED; */
+ XXH_SPLIT_IN_PLACE(data_key, data_key_lo, data_key_hi);
+ { /*
+ * prod_hi = (data_key >> 32) * XXH_PRIME32_1;
+ *
+ * Avoid vmul_u32 + vshll_n_u32 since Clang 6 and 7 will
+ * incorrectly "optimize" this:
+ * tmp = vmul_u32(vmovn_u64(a), vmovn_u64(b));
+ * shifted = vshll_n_u32(tmp, 32);
+ * to this:
+ * tmp = "vmulq_u64"(a, b); // no such thing!
+ * shifted = vshlq_n_u64(tmp, 32);
+ *
+ * However, unlike SSE, Clang lacks a 64-bit multiply routine
+ * for NEON, and it scalarizes two 64-bit multiplies instead.
+ *
+ * vmull_u32 has the same timing as vmul_u32, and it avoids
+ * this bug completely.
+ * See https://bugs.llvm.org/show_bug.cgi?id=39967
+ */
+ uint64x2_t prod_hi = vmull_u32 (data_key_hi, prime);
+ /* xacc[i] = prod_hi << 32; */
+ xacc[i] = vshlq_n_u64(prod_hi, 32);
+ /* xacc[i] += (prod_hi & 0xFFFFFFFF) * XXH_PRIME32_1; */
+ xacc[i] = vmlal_u32(xacc[i], data_key_lo, prime);
+ }
+ }
+ /* Scalar for the remainder. This may be a zero iteration loop. */
+ for (i = XXH3_NEON_LANES; i < XXH_ACC_NB; i++) {
+ XXH3_scalarScrambleRound(acc, secret, i);
+ }
+ }
+}
+
+#endif
+
+#if (XXH_VECTOR == XXH_VSX)
+
+XXH_FORCE_INLINE void
+XXH3_accumulate_512_vsx( void* XXH_RESTRICT acc,
+ const void* XXH_RESTRICT input,
+ const void* XXH_RESTRICT secret)
+{
+ /* presumed aligned */
+ unsigned int* const xacc = (unsigned int*) acc;
+ xxh_u64x2 const* const xinput = (xxh_u64x2 const*) input; /* no alignment restriction */
+ xxh_u64x2 const* const xsecret = (xxh_u64x2 const*) secret; /* no alignment restriction */
+ xxh_u64x2 const v32 = { 32, 32 };
+ size_t i;
+ for (i = 0; i < XXH_STRIPE_LEN / sizeof(xxh_u64x2); i++) {
+ /* data_vec = xinput[i]; */
+ xxh_u64x2 const data_vec = XXH_vec_loadu(xinput + i);
+ /* key_vec = xsecret[i]; */
+ xxh_u64x2 const key_vec = XXH_vec_loadu(xsecret + i);
+ xxh_u64x2 const data_key = data_vec ^ key_vec;
+ /* shuffled = (data_key << 32) | (data_key >> 32); */
+ xxh_u32x4 const shuffled = (xxh_u32x4)vec_rl(data_key, v32);
+ /* product = ((xxh_u64x2)data_key & 0xFFFFFFFF) * ((xxh_u64x2)shuffled & 0xFFFFFFFF); */
+ xxh_u64x2 const product = XXH_vec_mulo((xxh_u32x4)data_key, shuffled);
+ /* acc_vec = xacc[i]; */
+ xxh_u64x2 acc_vec = (xxh_u64x2)vec_xl(0, xacc + 4 * i);
+ acc_vec += product;
+
+ /* swap high and low halves */
+#ifdef __s390x__
+ acc_vec += vec_permi(data_vec, data_vec, 2);
+#else
+ acc_vec += vec_xxpermdi(data_vec, data_vec, 2);
+#endif
+ /* xacc[i] = acc_vec; */
+ vec_xst((xxh_u32x4)acc_vec, 0, xacc + 4 * i);
+ }
+}
+
+XXH_FORCE_INLINE void
+XXH3_scrambleAcc_vsx(void* XXH_RESTRICT acc, const void* XXH_RESTRICT secret)
+{
+ XXH_ASSERT((((size_t)acc) & 15) == 0);
+
+ { xxh_u64x2* const xacc = (xxh_u64x2*) acc;
+ const xxh_u64x2* const xsecret = (const xxh_u64x2*) secret;
+ /* constants */
+ xxh_u64x2 const v32 = { 32, 32 };
+ xxh_u64x2 const v47 = { 47, 47 };
+ xxh_u32x4 const prime = { XXH_PRIME32_1, XXH_PRIME32_1, XXH_PRIME32_1, XXH_PRIME32_1 };
+ size_t i;
+ for (i = 0; i < XXH_STRIPE_LEN / sizeof(xxh_u64x2); i++) {
+ /* xacc[i] ^= (xacc[i] >> 47); */
+ xxh_u64x2 const acc_vec = xacc[i];
+ xxh_u64x2 const data_vec = acc_vec ^ (acc_vec >> v47);
+
+ /* xacc[i] ^= xsecret[i]; */
+ xxh_u64x2 const key_vec = XXH_vec_loadu(xsecret + i);
+ xxh_u64x2 const data_key = data_vec ^ key_vec;
+
+ /* xacc[i] *= XXH_PRIME32_1 */
+ /* prod_lo = ((xxh_u64x2)data_key & 0xFFFFFFFF) * ((xxh_u64x2)prime & 0xFFFFFFFF); */
+ xxh_u64x2 const prod_even = XXH_vec_mule((xxh_u32x4)data_key, prime);
+ /* prod_hi = ((xxh_u64x2)data_key >> 32) * ((xxh_u64x2)prime >> 32); */
+ xxh_u64x2 const prod_odd = XXH_vec_mulo((xxh_u32x4)data_key, prime);
+ xacc[i] = prod_odd + (prod_even << v32);
+ } }
+}
+
+#endif
+
+/* scalar variants - universal */
+
+/*!
+ * @internal
+ * @brief Scalar round for @ref XXH3_accumulate_512_scalar().
+ *
+ * This is extracted to its own function because the NEON path uses a combination
+ * of NEON and scalar.
+ */
+XXH_FORCE_INLINE void
+XXH3_scalarRound(void* XXH_RESTRICT acc,
+ void const* XXH_RESTRICT input,
+ void const* XXH_RESTRICT secret,
+ size_t lane)
+{
+ xxh_u64* xacc = (xxh_u64*) acc;
+ xxh_u8 const* xinput = (xxh_u8 const*) input;
+ xxh_u8 const* xsecret = (xxh_u8 const*) secret;
+ XXH_ASSERT(lane < XXH_ACC_NB);
+ XXH_ASSERT(((size_t)acc & (XXH_ACC_ALIGN-1)) == 0);
+ {
+ xxh_u64 const data_val = XXH_readLE64(xinput + lane * 8);
+ xxh_u64 const data_key = data_val ^ XXH_readLE64(xsecret + lane * 8);
+ xacc[lane ^ 1] += data_val; /* swap adjacent lanes */
+ xacc[lane] += XXH_mult32to64(data_key & 0xFFFFFFFF, data_key >> 32);
+ }
+}
+
+/*!
+ * @internal
+ * @brief Processes a 64 byte block of data using the scalar path.
+ */
+XXH_FORCE_INLINE void
+XXH3_accumulate_512_scalar(void* XXH_RESTRICT acc,
+ const void* XXH_RESTRICT input,
+ const void* XXH_RESTRICT secret)
+{
+ size_t i;
+ for (i=0; i < XXH_ACC_NB; i++) {
+ XXH3_scalarRound(acc, input, secret, i);
+ }
+}
+
+/*!
+ * @internal
+ * @brief Scalar scramble step for @ref XXH3_scrambleAcc_scalar().
+ *
+ * This is extracted to its own function because the NEON path uses a combination
+ * of NEON and scalar.
+ */
+XXH_FORCE_INLINE void
+XXH3_scalarScrambleRound(void* XXH_RESTRICT acc,
+ void const* XXH_RESTRICT secret,
+ size_t lane)
+{
+ xxh_u64* const xacc = (xxh_u64*) acc; /* presumed aligned */
+ const xxh_u8* const xsecret = (const xxh_u8*) secret; /* no alignment restriction */
+ XXH_ASSERT((((size_t)acc) & (XXH_ACC_ALIGN-1)) == 0);
+ XXH_ASSERT(lane < XXH_ACC_NB);
+ {
+ xxh_u64 const key64 = XXH_readLE64(xsecret + lane * 8);
+ xxh_u64 acc64 = xacc[lane];
+ acc64 = XXH_xorshift64(acc64, 47);
+ acc64 ^= key64;
+ acc64 *= XXH_PRIME32_1;
+ xacc[lane] = acc64;
+ }
+}
+
+/*!
+ * @internal
+ * @brief Scrambles the accumulators after a large chunk has been read
+ */
+XXH_FORCE_INLINE void
+XXH3_scrambleAcc_scalar(void* XXH_RESTRICT acc, const void* XXH_RESTRICT secret)
+{
+ size_t i;
+ for (i=0; i < XXH_ACC_NB; i++) {
+ XXH3_scalarScrambleRound(acc, secret, i);
+ }
+}
-#endif /* XXH_STATIC_LINKING_ONLY && XXH_STATIC_H_3543687687345 */
+XXH_FORCE_INLINE void
+XXH3_initCustomSecret_scalar(void* XXH_RESTRICT customSecret, xxh_u64 seed64)
+{
+ /*
+ * We need a separate pointer for the hack below,
+ * which requires a non-const pointer.
+ * Any decent compiler will optimize this out otherwise.
+ */
+ const xxh_u8* kSecretPtr = XXH3_kSecret;
+ XXH_STATIC_ASSERT((XXH_SECRET_DEFAULT_SIZE & 15) == 0);
+
+#if defined(__clang__) && defined(__aarch64__)
+ /*
+ * UGLY HACK:
+ * Clang generates a bunch of MOV/MOVK pairs for aarch64, and they are
+ * placed sequentially, in order, at the top of the unrolled loop.
+ *
+ * While MOVK is great for generating constants (2 cycles for a 64-bit
+ * constant compared to 4 cycles for LDR), it fights for bandwidth with
+ * the arithmetic instructions.
+ *
+ * I L S
+ * MOVK
+ * MOVK
+ * MOVK
+ * MOVK
+ * ADD
+ * SUB STR
+ * STR
+ * By forcing loads from memory (as the asm line causes Clang to assume
+ * that XXH3_kSecretPtr has been changed), the pipelines are used more
+ * efficiently:
+ * I L S
+ * LDR
+ * ADD LDR
+ * SUB STR
+ * STR
+ *
+ * See XXH3_NEON_LANES for details on the pipsline.
+ *
+ * XXH3_64bits_withSeed, len == 256, Snapdragon 835
+ * without hack: 2654.4 MB/s
+ * with hack: 3202.9 MB/s
+ */
+ XXH_COMPILER_GUARD(kSecretPtr);
+#endif
+ /*
+ * Note: in debug mode, this overrides the asm optimization
+ * and Clang will emit MOVK chains again.
+ */
+ XXH_ASSERT(kSecretPtr == XXH3_kSecret);
+
+ { int const nbRounds = XXH_SECRET_DEFAULT_SIZE / 16;
+ int i;
+ for (i=0; i < nbRounds; i++) {
+ /*
+ * The asm hack causes Clang to assume that kSecretPtr aliases with
+ * customSecret, and on aarch64, this prevented LDP from merging two
+ * loads together for free. Putting the loads together before the stores
+ * properly generates LDP.
+ */
+ xxh_u64 lo = XXH_readLE64(kSecretPtr + 16*i) + seed64;
+ xxh_u64 hi = XXH_readLE64(kSecretPtr + 16*i + 8) - seed64;
+ XXH_writeLE64((xxh_u8*)customSecret + 16*i, lo);
+ XXH_writeLE64((xxh_u8*)customSecret + 16*i + 8, hi);
+ } }
+}
+
+
+typedef void (*XXH3_f_accumulate_512)(void* XXH_RESTRICT, const void*, const void*);
+typedef void (*XXH3_f_scrambleAcc)(void* XXH_RESTRICT, const void*);
+typedef void (*XXH3_f_initCustomSecret)(void* XXH_RESTRICT, xxh_u64);
+
+
+#if (XXH_VECTOR == XXH_AVX512)
+
+#define XXH3_accumulate_512 XXH3_accumulate_512_avx512
+#define XXH3_scrambleAcc XXH3_scrambleAcc_avx512
+#define XXH3_initCustomSecret XXH3_initCustomSecret_avx512
+
+#elif (XXH_VECTOR == XXH_AVX2)
+
+#define XXH3_accumulate_512 XXH3_accumulate_512_avx2
+#define XXH3_scrambleAcc XXH3_scrambleAcc_avx2
+#define XXH3_initCustomSecret XXH3_initCustomSecret_avx2
+
+#elif (XXH_VECTOR == XXH_SSE2)
+
+#define XXH3_accumulate_512 XXH3_accumulate_512_sse2
+#define XXH3_scrambleAcc XXH3_scrambleAcc_sse2
+#define XXH3_initCustomSecret XXH3_initCustomSecret_sse2
+
+#elif (XXH_VECTOR == XXH_NEON)
+
+#define XXH3_accumulate_512 XXH3_accumulate_512_neon
+#define XXH3_scrambleAcc XXH3_scrambleAcc_neon
+#define XXH3_initCustomSecret XXH3_initCustomSecret_scalar
+
+#elif (XXH_VECTOR == XXH_VSX)
+
+#define XXH3_accumulate_512 XXH3_accumulate_512_vsx
+#define XXH3_scrambleAcc XXH3_scrambleAcc_vsx
+#define XXH3_initCustomSecret XXH3_initCustomSecret_scalar
+
+#else /* scalar */
+
+#define XXH3_accumulate_512 XXH3_accumulate_512_scalar
+#define XXH3_scrambleAcc XXH3_scrambleAcc_scalar
+#define XXH3_initCustomSecret XXH3_initCustomSecret_scalar
+
+#endif
+
+
+
+#ifndef XXH_PREFETCH_DIST
+# ifdef __clang__
+# define XXH_PREFETCH_DIST 320
+# else
+# if (XXH_VECTOR == XXH_AVX512)
+# define XXH_PREFETCH_DIST 512
+# else
+# define XXH_PREFETCH_DIST 384
+# endif
+# endif /* __clang__ */
+#endif /* XXH_PREFETCH_DIST */
+
+/*
+ * XXH3_accumulate()
+ * Loops over XXH3_accumulate_512().
+ * Assumption: nbStripes will not overflow the secret size
+ */
+XXH_FORCE_INLINE void
+XXH3_accumulate( xxh_u64* XXH_RESTRICT acc,
+ const xxh_u8* XXH_RESTRICT input,
+ const xxh_u8* XXH_RESTRICT secret,
+ size_t nbStripes,
+ XXH3_f_accumulate_512 f_acc512)
+{
+ size_t n;
+ for (n = 0; n < nbStripes; n++ ) {
+ const xxh_u8* const in = input + n*XXH_STRIPE_LEN;
+ XXH_PREFETCH(in + XXH_PREFETCH_DIST);
+ f_acc512(acc,
+ in,
+ secret + n*XXH_SECRET_CONSUME_RATE);
+ }
+}
+
+XXH_FORCE_INLINE void
+XXH3_hashLong_internal_loop(xxh_u64* XXH_RESTRICT acc,
+ const xxh_u8* XXH_RESTRICT input, size_t len,
+ const xxh_u8* XXH_RESTRICT secret, size_t secretSize,
+ XXH3_f_accumulate_512 f_acc512,
+ XXH3_f_scrambleAcc f_scramble)
+{
+ size_t const nbStripesPerBlock = (secretSize - XXH_STRIPE_LEN) / XXH_SECRET_CONSUME_RATE;
+ size_t const block_len = XXH_STRIPE_LEN * nbStripesPerBlock;
+ size_t const nb_blocks = (len - 1) / block_len;
+
+ size_t n;
+
+ XXH_ASSERT(secretSize >= XXH3_SECRET_SIZE_MIN);
+
+ for (n = 0; n < nb_blocks; n++) {
+ XXH3_accumulate(acc, input + n*block_len, secret, nbStripesPerBlock, f_acc512);
+ f_scramble(acc, secret + secretSize - XXH_STRIPE_LEN);
+ }
+
+ /* last partial block */
+ XXH_ASSERT(len > XXH_STRIPE_LEN);
+ { size_t const nbStripes = ((len - 1) - (block_len * nb_blocks)) / XXH_STRIPE_LEN;
+ XXH_ASSERT(nbStripes <= (secretSize / XXH_SECRET_CONSUME_RATE));
+ XXH3_accumulate(acc, input + nb_blocks*block_len, secret, nbStripes, f_acc512);
+
+ /* last stripe */
+ { const xxh_u8* const p = input + len - XXH_STRIPE_LEN;
+#define XXH_SECRET_LASTACC_START 7 /* not aligned on 8, last secret is different from acc & scrambler */
+ f_acc512(acc, p, secret + secretSize - XXH_STRIPE_LEN - XXH_SECRET_LASTACC_START);
+ } }
+}
+
+XXH_FORCE_INLINE xxh_u64
+XXH3_mix2Accs(const xxh_u64* XXH_RESTRICT acc, const xxh_u8* XXH_RESTRICT secret)
+{
+ return XXH3_mul128_fold64(
+ acc[0] ^ XXH_readLE64(secret),
+ acc[1] ^ XXH_readLE64(secret+8) );
+}
+
+static XXH64_hash_t
+XXH3_mergeAccs(const xxh_u64* XXH_RESTRICT acc, const xxh_u8* XXH_RESTRICT secret, xxh_u64 start)
+{
+ xxh_u64 result64 = start;
+ size_t i = 0;
+
+ for (i = 0; i < 4; i++) {
+ result64 += XXH3_mix2Accs(acc+2*i, secret + 16*i);
+#if defined(__clang__) /* Clang */ \
+ && (defined(__arm__) || defined(__thumb__)) /* ARMv7 */ \
+ && (defined(__ARM_NEON) || defined(__ARM_NEON__)) /* NEON */ \
+ && !defined(XXH_ENABLE_AUTOVECTORIZE) /* Define to disable */
+ /*
+ * UGLY HACK:
+ * Prevent autovectorization on Clang ARMv7-a. Exact same problem as
+ * the one in XXH3_len_129to240_64b. Speeds up shorter keys > 240b.
+ * XXH3_64bits, len == 256, Snapdragon 835:
+ * without hack: 2063.7 MB/s
+ * with hack: 2560.7 MB/s
+ */
+ XXH_COMPILER_GUARD(result64);
+#endif
+ }
+
+ return XXH3_avalanche(result64);
+}
+
+#define XXH3_INIT_ACC { XXH_PRIME32_3, XXH_PRIME64_1, XXH_PRIME64_2, XXH_PRIME64_3, \
+ XXH_PRIME64_4, XXH_PRIME32_2, XXH_PRIME64_5, XXH_PRIME32_1 }
+
+XXH_FORCE_INLINE XXH64_hash_t
+XXH3_hashLong_64b_internal(const void* XXH_RESTRICT input, size_t len,
+ const void* XXH_RESTRICT secret, size_t secretSize,
+ XXH3_f_accumulate_512 f_acc512,
+ XXH3_f_scrambleAcc f_scramble)
+{
+ XXH_ALIGN(XXH_ACC_ALIGN) xxh_u64 acc[XXH_ACC_NB] = XXH3_INIT_ACC;
+
+ XXH3_hashLong_internal_loop(acc, (const xxh_u8*)input, len, (const xxh_u8*)secret, secretSize, f_acc512, f_scramble);
+
+ /* converge into final hash */
+ XXH_STATIC_ASSERT(sizeof(acc) == 64);
+ /* do not align on 8, so that the secret is different from the accumulator */
+#define XXH_SECRET_MERGEACCS_START 11
+ XXH_ASSERT(secretSize >= sizeof(acc) + XXH_SECRET_MERGEACCS_START);
+ return XXH3_mergeAccs(acc, (const xxh_u8*)secret + XXH_SECRET_MERGEACCS_START, (xxh_u64)len * XXH_PRIME64_1);
+}
+
+/*
+ * It's important for performance to transmit secret's size (when it's static)
+ * so that the compiler can properly optimize the vectorized loop.
+ * This makes a big performance difference for "medium" keys (<1 KB) when using AVX instruction set.
+ */
+XXH_FORCE_INLINE XXH64_hash_t
+XXH3_hashLong_64b_withSecret(const void* XXH_RESTRICT input, size_t len,
+ XXH64_hash_t seed64, const xxh_u8* XXH_RESTRICT secret, size_t secretLen)
+{
+ (void)seed64;
+ return XXH3_hashLong_64b_internal(input, len, secret, secretLen, XXH3_accumulate_512, XXH3_scrambleAcc);
+}
+
+/*
+ * It's preferable for performance that XXH3_hashLong is not inlined,
+ * as it results in a smaller function for small data, easier to the instruction cache.
+ * Note that inside this no_inline function, we do inline the internal loop,
+ * and provide a statically defined secret size to allow optimization of vector loop.
+ */
+XXH_NO_INLINE XXH64_hash_t
+XXH3_hashLong_64b_default(const void* XXH_RESTRICT input, size_t len,
+ XXH64_hash_t seed64, const xxh_u8* XXH_RESTRICT secret, size_t secretLen)
+{
+ (void)seed64; (void)secret; (void)secretLen;
+ return XXH3_hashLong_64b_internal(input, len, XXH3_kSecret, sizeof(XXH3_kSecret), XXH3_accumulate_512, XXH3_scrambleAcc);
+}
+
+/*
+ * XXH3_hashLong_64b_withSeed():
+ * Generate a custom key based on alteration of default XXH3_kSecret with the seed,
+ * and then use this key for long mode hashing.
+ *
+ * This operation is decently fast but nonetheless costs a little bit of time.
+ * Try to avoid it whenever possible (typically when seed==0).
+ *
+ * It's important for performance that XXH3_hashLong is not inlined. Not sure
+ * why (uop cache maybe?), but the difference is large and easily measurable.
+ */
+XXH_FORCE_INLINE XXH64_hash_t
+XXH3_hashLong_64b_withSeed_internal(const void* input, size_t len,
+ XXH64_hash_t seed,
+ XXH3_f_accumulate_512 f_acc512,
+ XXH3_f_scrambleAcc f_scramble,
+ XXH3_f_initCustomSecret f_initSec)
+{
+ if (seed == 0)
+ return XXH3_hashLong_64b_internal(input, len,
+ XXH3_kSecret, sizeof(XXH3_kSecret),
+ f_acc512, f_scramble);
+ { XXH_ALIGN(XXH_SEC_ALIGN) xxh_u8 secret[XXH_SECRET_DEFAULT_SIZE];
+ f_initSec(secret, seed);
+ return XXH3_hashLong_64b_internal(input, len, secret, sizeof(secret),
+ f_acc512, f_scramble);
+ }
+}
+
+/*
+ * It's important for performance that XXH3_hashLong is not inlined.
+ */
+XXH_NO_INLINE XXH64_hash_t
+XXH3_hashLong_64b_withSeed(const void* input, size_t len,
+ XXH64_hash_t seed, const xxh_u8* secret, size_t secretLen)
+{
+ (void)secret; (void)secretLen;
+ return XXH3_hashLong_64b_withSeed_internal(input, len, seed,
+ XXH3_accumulate_512, XXH3_scrambleAcc, XXH3_initCustomSecret);
+}
+
+
+typedef XXH64_hash_t (*XXH3_hashLong64_f)(const void* XXH_RESTRICT, size_t,
+ XXH64_hash_t, const xxh_u8* XXH_RESTRICT, size_t);
+
+XXH_FORCE_INLINE XXH64_hash_t
+XXH3_64bits_internal(const void* XXH_RESTRICT input, size_t len,
+ XXH64_hash_t seed64, const void* XXH_RESTRICT secret, size_t secretLen,
+ XXH3_hashLong64_f f_hashLong)
+{
+ XXH_ASSERT(secretLen >= XXH3_SECRET_SIZE_MIN);
+ /*
+ * If an action is to be taken if `secretLen` condition is not respected,
+ * it should be done here.
+ * For now, it's a contract pre-condition.
+ * Adding a check and a branch here would cost performance at every hash.
+ * Also, note that function signature doesn't offer room to return an error.
+ */
+ if (len <= 16)
+ return XXH3_len_0to16_64b((const xxh_u8*)input, len, (const xxh_u8*)secret, seed64);
+ if (len <= 128)
+ return XXH3_len_17to128_64b((const xxh_u8*)input, len, (const xxh_u8*)secret, secretLen, seed64);
+ if (len <= XXH3_MIDSIZE_MAX)
+ return XXH3_len_129to240_64b((const xxh_u8*)input, len, (const xxh_u8*)secret, secretLen, seed64);
+ return f_hashLong(input, len, seed64, (const xxh_u8*)secret, secretLen);
+}
+
+
+/* === Public entry point === */
+
+/*! @ingroup xxh3_family */
+XXH_PUBLIC_API XXH64_hash_t XXH3_64bits(const void* input, size_t len)
+{
+ return XXH3_64bits_internal(input, len, 0, XXH3_kSecret, sizeof(XXH3_kSecret), XXH3_hashLong_64b_default);
+}
+
+/*! @ingroup xxh3_family */
+XXH_PUBLIC_API XXH64_hash_t
+XXH3_64bits_withSecret(const void* input, size_t len, const void* secret, size_t secretSize)
+{
+ return XXH3_64bits_internal(input, len, 0, secret, secretSize, XXH3_hashLong_64b_withSecret);
+}
+
+/*! @ingroup xxh3_family */
+XXH_PUBLIC_API XXH64_hash_t
+XXH3_64bits_withSeed(const void* input, size_t len, XXH64_hash_t seed)
+{
+ return XXH3_64bits_internal(input, len, seed, XXH3_kSecret, sizeof(XXH3_kSecret), XXH3_hashLong_64b_withSeed);
+}
+
+XXH_PUBLIC_API XXH64_hash_t
+XXH3_64bits_withSecretandSeed(const void* input, size_t len, const void* secret, size_t secretSize, XXH64_hash_t seed)
+{
+ if (len <= XXH3_MIDSIZE_MAX)
+ return XXH3_64bits_internal(input, len, seed, XXH3_kSecret, sizeof(XXH3_kSecret), NULL);
+ return XXH3_hashLong_64b_withSecret(input, len, seed, (const xxh_u8*)secret, secretSize);
+}
+
+
+/* === XXH3 streaming === */
+
+/*
+ * Malloc's a pointer that is always aligned to align.
+ *
+ * This must be freed with `XXH_alignedFree()`.
+ *
+ * malloc typically guarantees 16 byte alignment on 64-bit systems and 8 byte
+ * alignment on 32-bit. This isn't enough for the 32 byte aligned loads in AVX2
+ * or on 32-bit, the 16 byte aligned loads in SSE2 and NEON.
+ *
+ * This underalignment previously caused a rather obvious crash which went
+ * completely unnoticed due to XXH3_createState() not actually being tested.
+ * Credit to RedSpah for noticing this bug.
+ *
+ * The alignment is done manually: Functions like posix_memalign or _mm_malloc
+ * are avoided: To maintain portability, we would have to write a fallback
+ * like this anyways, and besides, testing for the existence of library
+ * functions without relying on external build tools is impossible.
+ *
+ * The method is simple: Overallocate, manually align, and store the offset
+ * to the original behind the returned pointer.
+ *
+ * Align must be a power of 2 and 8 <= align <= 128.
+ */
+static void* XXH_alignedMalloc(size_t s, size_t align)
+{
+ XXH_ASSERT(align <= 128 && align >= 8); /* range check */
+ XXH_ASSERT((align & (align-1)) == 0); /* power of 2 */
+ XXH_ASSERT(s != 0 && s < (s + align)); /* empty/overflow */
+ { /* Overallocate to make room for manual realignment and an offset byte */
+ xxh_u8* base = (xxh_u8*)XXH_malloc(s + align);
+ if (base != NULL) {
+ /*
+ * Get the offset needed to align this pointer.
+ *
+ * Even if the returned pointer is aligned, there will always be
+ * at least one byte to store the offset to the original pointer.
+ */
+ size_t offset = align - ((size_t)base & (align - 1)); /* base % align */
+ /* Add the offset for the now-aligned pointer */
+ xxh_u8* ptr = base + offset;
+
+ XXH_ASSERT((size_t)ptr % align == 0);
+
+ /* Store the offset immediately before the returned pointer. */
+ ptr[-1] = (xxh_u8)offset;
+ return ptr;
+ }
+ return NULL;
+ }
+}
+/*
+ * Frees an aligned pointer allocated by XXH_alignedMalloc(). Don't pass
+ * normal malloc'd pointers, XXH_alignedMalloc has a specific data layout.
+ */
+static void XXH_alignedFree(void* p)
+{
+ if (p != NULL) {
+ xxh_u8* ptr = (xxh_u8*)p;
+ /* Get the offset byte we added in XXH_malloc. */
+ xxh_u8 offset = ptr[-1];
+ /* Free the original malloc'd pointer */
+ xxh_u8* base = ptr - offset;
+ XXH_free(base);
+ }
+}
+/*! @ingroup xxh3_family */
+XXH_PUBLIC_API XXH3_state_t* XXH3_createState(void)
+{
+ XXH3_state_t* const state = (XXH3_state_t*)XXH_alignedMalloc(sizeof(XXH3_state_t), 64);
+ if (state==NULL) return NULL;
+ XXH3_INITSTATE(state);
+ return state;
+}
+
+/*! @ingroup xxh3_family */
+XXH_PUBLIC_API XXH_errorcode XXH3_freeState(XXH3_state_t* statePtr)
+{
+ XXH_alignedFree(statePtr);
+ return XXH_OK;
+}
+
+/*! @ingroup xxh3_family */
+XXH_PUBLIC_API void
+XXH3_copyState(XXH3_state_t* dst_state, const XXH3_state_t* src_state)
+{
+ XXH_memcpy(dst_state, src_state, sizeof(*dst_state));
+}
+
+static void
+XXH3_reset_internal(XXH3_state_t* statePtr,
+ XXH64_hash_t seed,
+ const void* secret, size_t secretSize)
+{
+ size_t const initStart = offsetof(XXH3_state_t, bufferedSize);
+ size_t const initLength = offsetof(XXH3_state_t, nbStripesPerBlock) - initStart;
+ XXH_ASSERT(offsetof(XXH3_state_t, nbStripesPerBlock) > initStart);
+ XXH_ASSERT(statePtr != NULL);
+ /* set members from bufferedSize to nbStripesPerBlock (excluded) to 0 */
+ memset((char*)statePtr + initStart, 0, initLength);
+ statePtr->acc[0] = XXH_PRIME32_3;
+ statePtr->acc[1] = XXH_PRIME64_1;
+ statePtr->acc[2] = XXH_PRIME64_2;
+ statePtr->acc[3] = XXH_PRIME64_3;
+ statePtr->acc[4] = XXH_PRIME64_4;
+ statePtr->acc[5] = XXH_PRIME32_2;
+ statePtr->acc[6] = XXH_PRIME64_5;
+ statePtr->acc[7] = XXH_PRIME32_1;
+ statePtr->seed = seed;
+ statePtr->useSeed = (seed != 0);
+ statePtr->extSecret = (const unsigned char*)secret;
+ XXH_ASSERT(secretSize >= XXH3_SECRET_SIZE_MIN);
+ statePtr->secretLimit = secretSize - XXH_STRIPE_LEN;
+ statePtr->nbStripesPerBlock = statePtr->secretLimit / XXH_SECRET_CONSUME_RATE;
+}
+
+/*! @ingroup xxh3_family */
+XXH_PUBLIC_API XXH_errorcode
+XXH3_64bits_reset(XXH3_state_t* statePtr)
+{
+ if (statePtr == NULL) return XXH_ERROR;
+ XXH3_reset_internal(statePtr, 0, XXH3_kSecret, XXH_SECRET_DEFAULT_SIZE);
+ return XXH_OK;
+}
+
+/*! @ingroup xxh3_family */
+XXH_PUBLIC_API XXH_errorcode
+XXH3_64bits_reset_withSecret(XXH3_state_t* statePtr, const void* secret, size_t secretSize)
+{
+ if (statePtr == NULL) return XXH_ERROR;
+ XXH3_reset_internal(statePtr, 0, secret, secretSize);
+ if (secret == NULL) return XXH_ERROR;
+ if (secretSize < XXH3_SECRET_SIZE_MIN) return XXH_ERROR;
+ return XXH_OK;
+}
+
+/*! @ingroup xxh3_family */
+XXH_PUBLIC_API XXH_errorcode
+XXH3_64bits_reset_withSeed(XXH3_state_t* statePtr, XXH64_hash_t seed)
+{
+ if (statePtr == NULL) return XXH_ERROR;
+ if (seed==0) return XXH3_64bits_reset(statePtr);
+ if ((seed != statePtr->seed) || (statePtr->extSecret != NULL))
+ XXH3_initCustomSecret(statePtr->customSecret, seed);
+ XXH3_reset_internal(statePtr, seed, NULL, XXH_SECRET_DEFAULT_SIZE);
+ return XXH_OK;
+}
+
+/*! @ingroup xxh3_family */
+XXH_PUBLIC_API XXH_errorcode
+XXH3_64bits_reset_withSecretandSeed(XXH3_state_t* statePtr, const void* secret, size_t secretSize, XXH64_hash_t seed64)
+{
+ if (statePtr == NULL) return XXH_ERROR;
+ if (secret == NULL) return XXH_ERROR;
+ if (secretSize < XXH3_SECRET_SIZE_MIN) return XXH_ERROR;
+ XXH3_reset_internal(statePtr, seed64, secret, secretSize);
+ statePtr->useSeed = 1; /* always, even if seed64==0 */
+ return XXH_OK;
+}
+
+/* Note : when XXH3_consumeStripes() is invoked,
+ * there must be a guarantee that at least one more byte must be consumed from input
+ * so that the function can blindly consume all stripes using the "normal" secret segment */
+XXH_FORCE_INLINE void
+XXH3_consumeStripes(xxh_u64* XXH_RESTRICT acc,
+ size_t* XXH_RESTRICT nbStripesSoFarPtr, size_t nbStripesPerBlock,
+ const xxh_u8* XXH_RESTRICT input, size_t nbStripes,
+ const xxh_u8* XXH_RESTRICT secret, size_t secretLimit,
+ XXH3_f_accumulate_512 f_acc512,
+ XXH3_f_scrambleAcc f_scramble)
+{
+ XXH_ASSERT(nbStripes <= nbStripesPerBlock); /* can handle max 1 scramble per invocation */
+ XXH_ASSERT(*nbStripesSoFarPtr < nbStripesPerBlock);
+ if (nbStripesPerBlock - *nbStripesSoFarPtr <= nbStripes) {
+ /* need a scrambling operation */
+ size_t const nbStripesToEndofBlock = nbStripesPerBlock - *nbStripesSoFarPtr;
+ size_t const nbStripesAfterBlock = nbStripes - nbStripesToEndofBlock;
+ XXH3_accumulate(acc, input, secret + nbStripesSoFarPtr[0] * XXH_SECRET_CONSUME_RATE, nbStripesToEndofBlock, f_acc512);
+ f_scramble(acc, secret + secretLimit);
+ XXH3_accumulate(acc, input + nbStripesToEndofBlock * XXH_STRIPE_LEN, secret, nbStripesAfterBlock, f_acc512);
+ *nbStripesSoFarPtr = nbStripesAfterBlock;
+ } else {
+ XXH3_accumulate(acc, input, secret + nbStripesSoFarPtr[0] * XXH_SECRET_CONSUME_RATE, nbStripes, f_acc512);
+ *nbStripesSoFarPtr += nbStripes;
+ }
+}
+
+#ifndef XXH3_STREAM_USE_STACK
+# ifndef __clang__ /* clang doesn't need additional stack space */
+# define XXH3_STREAM_USE_STACK 1
+# endif
+#endif
+/*
+ * Both XXH3_64bits_update and XXH3_128bits_update use this routine.
+ */
+XXH_FORCE_INLINE XXH_errorcode
+XXH3_update(XXH3_state_t* XXH_RESTRICT const state,
+ const xxh_u8* XXH_RESTRICT input, size_t len,
+ XXH3_f_accumulate_512 f_acc512,
+ XXH3_f_scrambleAcc f_scramble)
+{
+ if (input==NULL) {
+ XXH_ASSERT(len == 0);
+ return XXH_OK;
+ }
+
+ XXH_ASSERT(state != NULL);
+ { const xxh_u8* const bEnd = input + len;
+ const unsigned char* const secret = (state->extSecret == NULL) ? state->customSecret : state->extSecret;
+#if defined(XXH3_STREAM_USE_STACK) && XXH3_STREAM_USE_STACK >= 1
+ /* For some reason, gcc and MSVC seem to suffer greatly
+ * when operating accumulators directly into state.
+ * Operating into stack space seems to enable proper optimization.
+ * clang, on the other hand, doesn't seem to need this trick */
+ XXH_ALIGN(XXH_ACC_ALIGN) xxh_u64 acc[8]; memcpy(acc, state->acc, sizeof(acc));
+#else
+ xxh_u64* XXH_RESTRICT const acc = state->acc;
+#endif
+ state->totalLen += len;
+ XXH_ASSERT(state->bufferedSize <= XXH3_INTERNALBUFFER_SIZE);
+
+ /* small input : just fill in tmp buffer */
+ if (state->bufferedSize + len <= XXH3_INTERNALBUFFER_SIZE) {
+ XXH_memcpy(state->buffer + state->bufferedSize, input, len);
+ state->bufferedSize += (XXH32_hash_t)len;
+ return XXH_OK;
+ }
+
+ /* total input is now > XXH3_INTERNALBUFFER_SIZE */
+ #define XXH3_INTERNALBUFFER_STRIPES (XXH3_INTERNALBUFFER_SIZE / XXH_STRIPE_LEN)
+ XXH_STATIC_ASSERT(XXH3_INTERNALBUFFER_SIZE % XXH_STRIPE_LEN == 0); /* clean multiple */
+
+ /*
+ * Internal buffer is partially filled (always, except at beginning)
+ * Complete it, then consume it.
+ */
+ if (state->bufferedSize) {
+ size_t const loadSize = XXH3_INTERNALBUFFER_SIZE - state->bufferedSize;
+ XXH_memcpy(state->buffer + state->bufferedSize, input, loadSize);
+ input += loadSize;
+ XXH3_consumeStripes(acc,
+ &state->nbStripesSoFar, state->nbStripesPerBlock,
+ state->buffer, XXH3_INTERNALBUFFER_STRIPES,
+ secret, state->secretLimit,
+ f_acc512, f_scramble);
+ state->bufferedSize = 0;
+ }
+ XXH_ASSERT(input < bEnd);
+
+ /* large input to consume : ingest per full block */
+ if ((size_t)(bEnd - input) > state->nbStripesPerBlock * XXH_STRIPE_LEN) {
+ size_t nbStripes = (size_t)(bEnd - 1 - input) / XXH_STRIPE_LEN;
+ XXH_ASSERT(state->nbStripesPerBlock >= state->nbStripesSoFar);
+ /* join to current block's end */
+ { size_t const nbStripesToEnd = state->nbStripesPerBlock - state->nbStripesSoFar;
+ XXH_ASSERT(nbStripesToEnd <= nbStripes);
+ XXH3_accumulate(acc, input, secret + state->nbStripesSoFar * XXH_SECRET_CONSUME_RATE, nbStripesToEnd, f_acc512);
+ f_scramble(acc, secret + state->secretLimit);
+ state->nbStripesSoFar = 0;
+ input += nbStripesToEnd * XXH_STRIPE_LEN;
+ nbStripes -= nbStripesToEnd;
+ }
+ /* consume per entire blocks */
+ while(nbStripes >= state->nbStripesPerBlock) {
+ XXH3_accumulate(acc, input, secret, state->nbStripesPerBlock, f_acc512);
+ f_scramble(acc, secret + state->secretLimit);
+ input += state->nbStripesPerBlock * XXH_STRIPE_LEN;
+ nbStripes -= state->nbStripesPerBlock;
+ }
+ /* consume last partial block */
+ XXH3_accumulate(acc, input, secret, nbStripes, f_acc512);
+ input += nbStripes * XXH_STRIPE_LEN;
+ XXH_ASSERT(input < bEnd); /* at least some bytes left */
+ state->nbStripesSoFar = nbStripes;
+ /* buffer predecessor of last partial stripe */
+ XXH_memcpy(state->buffer + sizeof(state->buffer) - XXH_STRIPE_LEN, input - XXH_STRIPE_LEN, XXH_STRIPE_LEN);
+ XXH_ASSERT(bEnd - input <= XXH_STRIPE_LEN);
+ } else {
+ /* content to consume <= block size */
+ /* Consume input by a multiple of internal buffer size */
+ if (bEnd - input > XXH3_INTERNALBUFFER_SIZE) {
+ const xxh_u8* const limit = bEnd - XXH3_INTERNALBUFFER_SIZE;
+ do {
+ XXH3_consumeStripes(acc,
+ &state->nbStripesSoFar, state->nbStripesPerBlock,
+ input, XXH3_INTERNALBUFFER_STRIPES,
+ secret, state->secretLimit,
+ f_acc512, f_scramble);
+ input += XXH3_INTERNALBUFFER_SIZE;
+ } while (input<limit);
+ /* buffer predecessor of last partial stripe */
+ XXH_memcpy(state->buffer + sizeof(state->buffer) - XXH_STRIPE_LEN, input - XXH_STRIPE_LEN, XXH_STRIPE_LEN);
+ }
+ }
+
+ /* Some remaining input (always) : buffer it */
+ XXH_ASSERT(input < bEnd);
+ XXH_ASSERT(bEnd - input <= XXH3_INTERNALBUFFER_SIZE);
+ XXH_ASSERT(state->bufferedSize == 0);
+ XXH_memcpy(state->buffer, input, (size_t)(bEnd-input));
+ state->bufferedSize = (XXH32_hash_t)(bEnd-input);
+#if defined(XXH3_STREAM_USE_STACK) && XXH3_STREAM_USE_STACK >= 1
+ /* save stack accumulators into state */
+ memcpy(state->acc, acc, sizeof(acc));
+#endif
+ }
+
+ return XXH_OK;
+}
+
+/*! @ingroup xxh3_family */
+XXH_PUBLIC_API XXH_errorcode
+XXH3_64bits_update(XXH3_state_t* state, const void* input, size_t len)
+{
+ return XXH3_update(state, (const xxh_u8*)input, len,
+ XXH3_accumulate_512, XXH3_scrambleAcc);
+}
+
+
+XXH_FORCE_INLINE void
+XXH3_digest_long (XXH64_hash_t* acc,
+ const XXH3_state_t* state,
+ const unsigned char* secret)
+{
+ /*
+ * Digest on a local copy. This way, the state remains unaltered, and it can
+ * continue ingesting more input afterwards.
+ */
+ XXH_memcpy(acc, state->acc, sizeof(state->acc));
+ if (state->bufferedSize >= XXH_STRIPE_LEN) {
+ size_t const nbStripes = (state->bufferedSize - 1) / XXH_STRIPE_LEN;
+ size_t nbStripesSoFar = state->nbStripesSoFar;
+ XXH3_consumeStripes(acc,
+ &nbStripesSoFar, state->nbStripesPerBlock,
+ state->buffer, nbStripes,
+ secret, state->secretLimit,
+ XXH3_accumulate_512, XXH3_scrambleAcc);
+ /* last stripe */
+ XXH3_accumulate_512(acc,
+ state->buffer + state->bufferedSize - XXH_STRIPE_LEN,
+ secret + state->secretLimit - XXH_SECRET_LASTACC_START);
+ } else { /* bufferedSize < XXH_STRIPE_LEN */
+ xxh_u8 lastStripe[XXH_STRIPE_LEN];
+ size_t const catchupSize = XXH_STRIPE_LEN - state->bufferedSize;
+ XXH_ASSERT(state->bufferedSize > 0); /* there is always some input buffered */
+ XXH_memcpy(lastStripe, state->buffer + sizeof(state->buffer) - catchupSize, catchupSize);
+ XXH_memcpy(lastStripe + catchupSize, state->buffer, state->bufferedSize);
+ XXH3_accumulate_512(acc,
+ lastStripe,
+ secret + state->secretLimit - XXH_SECRET_LASTACC_START);
+ }
+}
+
+/*! @ingroup xxh3_family */
+XXH_PUBLIC_API XXH64_hash_t XXH3_64bits_digest (const XXH3_state_t* state)
+{
+ const unsigned char* const secret = (state->extSecret == NULL) ? state->customSecret : state->extSecret;
+ if (state->totalLen > XXH3_MIDSIZE_MAX) {
+ XXH_ALIGN(XXH_ACC_ALIGN) XXH64_hash_t acc[XXH_ACC_NB];
+ XXH3_digest_long(acc, state, secret);
+ return XXH3_mergeAccs(acc,
+ secret + XXH_SECRET_MERGEACCS_START,
+ (xxh_u64)state->totalLen * XXH_PRIME64_1);
+ }
+ /* totalLen <= XXH3_MIDSIZE_MAX: digesting a short input */
+ if (state->useSeed)
+ return XXH3_64bits_withSeed(state->buffer, (size_t)state->totalLen, state->seed);
+ return XXH3_64bits_withSecret(state->buffer, (size_t)(state->totalLen),
+ secret, state->secretLimit + XXH_STRIPE_LEN);
+}
+
+
+
+/* ==========================================
+ * XXH3 128 bits (a.k.a XXH128)
+ * ==========================================
+ * XXH3's 128-bit variant has better mixing and strength than the 64-bit variant,
+ * even without counting the significantly larger output size.
+ *
+ * For example, extra steps are taken to avoid the seed-dependent collisions
+ * in 17-240 byte inputs (See XXH3_mix16B and XXH128_mix32B).
+ *
+ * This strength naturally comes at the cost of some speed, especially on short
+ * lengths. Note that longer hashes are about as fast as the 64-bit version
+ * due to it using only a slight modification of the 64-bit loop.
+ *
+ * XXH128 is also more oriented towards 64-bit machines. It is still extremely
+ * fast for a _128-bit_ hash on 32-bit (it usually clears XXH64).
+ */
+
+XXH_FORCE_INLINE XXH128_hash_t
+XXH3_len_1to3_128b(const xxh_u8* input, size_t len, const xxh_u8* secret, XXH64_hash_t seed)
+{
+ /* A doubled version of 1to3_64b with different constants. */
+ XXH_ASSERT(input != NULL);
+ XXH_ASSERT(1 <= len && len <= 3);
+ XXH_ASSERT(secret != NULL);
+ /*
+ * len = 1: combinedl = { input[0], 0x01, input[0], input[0] }
+ * len = 2: combinedl = { input[1], 0x02, input[0], input[1] }
+ * len = 3: combinedl = { input[2], 0x03, input[0], input[1] }
+ */
+ { xxh_u8 const c1 = input[0];
+ xxh_u8 const c2 = input[len >> 1];
+ xxh_u8 const c3 = input[len - 1];
+ xxh_u32 const combinedl = ((xxh_u32)c1 <<16) | ((xxh_u32)c2 << 24)
+ | ((xxh_u32)c3 << 0) | ((xxh_u32)len << 8);
+ xxh_u32 const combinedh = XXH_rotl32(XXH_swap32(combinedl), 13);
+ xxh_u64 const bitflipl = (XXH_readLE32(secret) ^ XXH_readLE32(secret+4)) + seed;
+ xxh_u64 const bitfliph = (XXH_readLE32(secret+8) ^ XXH_readLE32(secret+12)) - seed;
+ xxh_u64 const keyed_lo = (xxh_u64)combinedl ^ bitflipl;
+ xxh_u64 const keyed_hi = (xxh_u64)combinedh ^ bitfliph;
+ XXH128_hash_t h128;
+ h128.low64 = XXH64_avalanche(keyed_lo);
+ h128.high64 = XXH64_avalanche(keyed_hi);
+ return h128;
+ }
+}
+
+XXH_FORCE_INLINE XXH128_hash_t
+XXH3_len_4to8_128b(const xxh_u8* input, size_t len, const xxh_u8* secret, XXH64_hash_t seed)
+{
+ XXH_ASSERT(input != NULL);
+ XXH_ASSERT(secret != NULL);
+ XXH_ASSERT(4 <= len && len <= 8);
+ seed ^= (xxh_u64)XXH_swap32((xxh_u32)seed) << 32;
+ { xxh_u32 const input_lo = XXH_readLE32(input);
+ xxh_u32 const input_hi = XXH_readLE32(input + len - 4);
+ xxh_u64 const input_64 = input_lo + ((xxh_u64)input_hi << 32);
+ xxh_u64 const bitflip = (XXH_readLE64(secret+16) ^ XXH_readLE64(secret+24)) + seed;
+ xxh_u64 const keyed = input_64 ^ bitflip;
+
+ /* Shift len to the left to ensure it is even, this avoids even multiplies. */
+ XXH128_hash_t m128 = XXH_mult64to128(keyed, XXH_PRIME64_1 + (len << 2));
+
+ m128.high64 += (m128.low64 << 1);
+ m128.low64 ^= (m128.high64 >> 3);
+
+ m128.low64 = XXH_xorshift64(m128.low64, 35);
+ m128.low64 *= 0x9FB21C651E98DF25ULL;
+ m128.low64 = XXH_xorshift64(m128.low64, 28);
+ m128.high64 = XXH3_avalanche(m128.high64);
+ return m128;
+ }
+}
+
+XXH_FORCE_INLINE XXH128_hash_t
+XXH3_len_9to16_128b(const xxh_u8* input, size_t len, const xxh_u8* secret, XXH64_hash_t seed)
+{
+ XXH_ASSERT(input != NULL);
+ XXH_ASSERT(secret != NULL);
+ XXH_ASSERT(9 <= len && len <= 16);
+ { xxh_u64 const bitflipl = (XXH_readLE64(secret+32) ^ XXH_readLE64(secret+40)) - seed;
+ xxh_u64 const bitfliph = (XXH_readLE64(secret+48) ^ XXH_readLE64(secret+56)) + seed;
+ xxh_u64 const input_lo = XXH_readLE64(input);
+ xxh_u64 input_hi = XXH_readLE64(input + len - 8);
+ XXH128_hash_t m128 = XXH_mult64to128(input_lo ^ input_hi ^ bitflipl, XXH_PRIME64_1);
+ /*
+ * Put len in the middle of m128 to ensure that the length gets mixed to
+ * both the low and high bits in the 128x64 multiply below.
+ */
+ m128.low64 += (xxh_u64)(len - 1) << 54;
+ input_hi ^= bitfliph;
+ /*
+ * Add the high 32 bits of input_hi to the high 32 bits of m128, then
+ * add the long product of the low 32 bits of input_hi and XXH_PRIME32_2 to
+ * the high 64 bits of m128.
+ *
+ * The best approach to this operation is different on 32-bit and 64-bit.
+ */
+ if (sizeof(void *) < sizeof(xxh_u64)) { /* 32-bit */
+ /*
+ * 32-bit optimized version, which is more readable.
+ *
+ * On 32-bit, it removes an ADC and delays a dependency between the two
+ * halves of m128.high64, but it generates an extra mask on 64-bit.
+ */
+ m128.high64 += (input_hi & 0xFFFFFFFF00000000ULL) + XXH_mult32to64((xxh_u32)input_hi, XXH_PRIME32_2);
+ } else {
+ /*
+ * 64-bit optimized (albeit more confusing) version.
+ *
+ * Uses some properties of addition and multiplication to remove the mask:
+ *
+ * Let:
+ * a = input_hi.lo = (input_hi & 0x00000000FFFFFFFF)
+ * b = input_hi.hi = (input_hi & 0xFFFFFFFF00000000)
+ * c = XXH_PRIME32_2
+ *
+ * a + (b * c)
+ * Inverse Property: x + y - x == y
+ * a + (b * (1 + c - 1))
+ * Distributive Property: x * (y + z) == (x * y) + (x * z)
+ * a + (b * 1) + (b * (c - 1))
+ * Identity Property: x * 1 == x
+ * a + b + (b * (c - 1))
+ *
+ * Substitute a, b, and c:
+ * input_hi.hi + input_hi.lo + ((xxh_u64)input_hi.lo * (XXH_PRIME32_2 - 1))
+ *
+ * Since input_hi.hi + input_hi.lo == input_hi, we get this:
+ * input_hi + ((xxh_u64)input_hi.lo * (XXH_PRIME32_2 - 1))
+ */
+ m128.high64 += input_hi + XXH_mult32to64((xxh_u32)input_hi, XXH_PRIME32_2 - 1);
+ }
+ /* m128 ^= XXH_swap64(m128 >> 64); */
+ m128.low64 ^= XXH_swap64(m128.high64);
+
+ { /* 128x64 multiply: h128 = m128 * XXH_PRIME64_2; */
+ XXH128_hash_t h128 = XXH_mult64to128(m128.low64, XXH_PRIME64_2);
+ h128.high64 += m128.high64 * XXH_PRIME64_2;
+
+ h128.low64 = XXH3_avalanche(h128.low64);
+ h128.high64 = XXH3_avalanche(h128.high64);
+ return h128;
+ } }
+}
+
+/*
+ * Assumption: `secret` size is >= XXH3_SECRET_SIZE_MIN
+ */
+XXH_FORCE_INLINE XXH128_hash_t
+XXH3_len_0to16_128b(const xxh_u8* input, size_t len, const xxh_u8* secret, XXH64_hash_t seed)
+{
+ XXH_ASSERT(len <= 16);
+ { if (len > 8) return XXH3_len_9to16_128b(input, len, secret, seed);
+ if (len >= 4) return XXH3_len_4to8_128b(input, len, secret, seed);
+ if (len) return XXH3_len_1to3_128b(input, len, secret, seed);
+ { XXH128_hash_t h128;
+ xxh_u64 const bitflipl = XXH_readLE64(secret+64) ^ XXH_readLE64(secret+72);
+ xxh_u64 const bitfliph = XXH_readLE64(secret+80) ^ XXH_readLE64(secret+88);
+ h128.low64 = XXH64_avalanche(seed ^ bitflipl);
+ h128.high64 = XXH64_avalanche( seed ^ bitfliph);
+ return h128;
+ } }
+}
+
+/*
+ * A bit slower than XXH3_mix16B, but handles multiply by zero better.
+ */
+XXH_FORCE_INLINE XXH128_hash_t
+XXH128_mix32B(XXH128_hash_t acc, const xxh_u8* input_1, const xxh_u8* input_2,
+ const xxh_u8* secret, XXH64_hash_t seed)
+{
+ acc.low64 += XXH3_mix16B (input_1, secret+0, seed);
+ acc.low64 ^= XXH_readLE64(input_2) + XXH_readLE64(input_2 + 8);
+ acc.high64 += XXH3_mix16B (input_2, secret+16, seed);
+ acc.high64 ^= XXH_readLE64(input_1) + XXH_readLE64(input_1 + 8);
+ return acc;
+}
+
+
+XXH_FORCE_INLINE XXH128_hash_t
+XXH3_len_17to128_128b(const xxh_u8* XXH_RESTRICT input, size_t len,
+ const xxh_u8* XXH_RESTRICT secret, size_t secretSize,
+ XXH64_hash_t seed)
+{
+ XXH_ASSERT(secretSize >= XXH3_SECRET_SIZE_MIN); (void)secretSize;
+ XXH_ASSERT(16 < len && len <= 128);
+
+ { XXH128_hash_t acc;
+ acc.low64 = len * XXH_PRIME64_1;
+ acc.high64 = 0;
+ if (len > 32) {
+ if (len > 64) {
+ if (len > 96) {
+ acc = XXH128_mix32B(acc, input+48, input+len-64, secret+96, seed);
+ }
+ acc = XXH128_mix32B(acc, input+32, input+len-48, secret+64, seed);
+ }
+ acc = XXH128_mix32B(acc, input+16, input+len-32, secret+32, seed);
+ }
+ acc = XXH128_mix32B(acc, input, input+len-16, secret, seed);
+ { XXH128_hash_t h128;
+ h128.low64 = acc.low64 + acc.high64;
+ h128.high64 = (acc.low64 * XXH_PRIME64_1)
+ + (acc.high64 * XXH_PRIME64_4)
+ + ((len - seed) * XXH_PRIME64_2);
+ h128.low64 = XXH3_avalanche(h128.low64);
+ h128.high64 = (XXH64_hash_t)0 - XXH3_avalanche(h128.high64);
+ return h128;
+ }
+ }
+}
+
+XXH_NO_INLINE XXH128_hash_t
+XXH3_len_129to240_128b(const xxh_u8* XXH_RESTRICT input, size_t len,
+ const xxh_u8* XXH_RESTRICT secret, size_t secretSize,
+ XXH64_hash_t seed)
+{
+ XXH_ASSERT(secretSize >= XXH3_SECRET_SIZE_MIN); (void)secretSize;
+ XXH_ASSERT(128 < len && len <= XXH3_MIDSIZE_MAX);
+
+ { XXH128_hash_t acc;
+ int const nbRounds = (int)len / 32;
+ int i;
+ acc.low64 = len * XXH_PRIME64_1;
+ acc.high64 = 0;
+ for (i=0; i<4; i++) {
+ acc = XXH128_mix32B(acc,
+ input + (32 * i),
+ input + (32 * i) + 16,
+ secret + (32 * i),
+ seed);
+ }
+ acc.low64 = XXH3_avalanche(acc.low64);
+ acc.high64 = XXH3_avalanche(acc.high64);
+ XXH_ASSERT(nbRounds >= 4);
+ for (i=4 ; i < nbRounds; i++) {
+ acc = XXH128_mix32B(acc,
+ input + (32 * i),
+ input + (32 * i) + 16,
+ secret + XXH3_MIDSIZE_STARTOFFSET + (32 * (i - 4)),
+ seed);
+ }
+ /* last bytes */
+ acc = XXH128_mix32B(acc,
+ input + len - 16,
+ input + len - 32,
+ secret + XXH3_SECRET_SIZE_MIN - XXH3_MIDSIZE_LASTOFFSET - 16,
+ 0ULL - seed);
+
+ { XXH128_hash_t h128;
+ h128.low64 = acc.low64 + acc.high64;
+ h128.high64 = (acc.low64 * XXH_PRIME64_1)
+ + (acc.high64 * XXH_PRIME64_4)
+ + ((len - seed) * XXH_PRIME64_2);
+ h128.low64 = XXH3_avalanche(h128.low64);
+ h128.high64 = (XXH64_hash_t)0 - XXH3_avalanche(h128.high64);
+ return h128;
+ }
+ }
+}
+
+XXH_FORCE_INLINE XXH128_hash_t
+XXH3_hashLong_128b_internal(const void* XXH_RESTRICT input, size_t len,
+ const xxh_u8* XXH_RESTRICT secret, size_t secretSize,
+ XXH3_f_accumulate_512 f_acc512,
+ XXH3_f_scrambleAcc f_scramble)
+{
+ XXH_ALIGN(XXH_ACC_ALIGN) xxh_u64 acc[XXH_ACC_NB] = XXH3_INIT_ACC;
+
+ XXH3_hashLong_internal_loop(acc, (const xxh_u8*)input, len, secret, secretSize, f_acc512, f_scramble);
+
+ /* converge into final hash */
+ XXH_STATIC_ASSERT(sizeof(acc) == 64);
+ XXH_ASSERT(secretSize >= sizeof(acc) + XXH_SECRET_MERGEACCS_START);
+ { XXH128_hash_t h128;
+ h128.low64 = XXH3_mergeAccs(acc,
+ secret + XXH_SECRET_MERGEACCS_START,
+ (xxh_u64)len * XXH_PRIME64_1);
+ h128.high64 = XXH3_mergeAccs(acc,
+ secret + secretSize
+ - sizeof(acc) - XXH_SECRET_MERGEACCS_START,
+ ~((xxh_u64)len * XXH_PRIME64_2));
+ return h128;
+ }
+}
+
+/*
+ * It's important for performance that XXH3_hashLong is not inlined.
+ */
+XXH_NO_INLINE XXH128_hash_t
+XXH3_hashLong_128b_default(const void* XXH_RESTRICT input, size_t len,
+ XXH64_hash_t seed64,
+ const void* XXH_RESTRICT secret, size_t secretLen)
+{
+ (void)seed64; (void)secret; (void)secretLen;
+ return XXH3_hashLong_128b_internal(input, len, XXH3_kSecret, sizeof(XXH3_kSecret),
+ XXH3_accumulate_512, XXH3_scrambleAcc);
+}
+
+/*
+ * It's important for performance to pass @secretLen (when it's static)
+ * to the compiler, so that it can properly optimize the vectorized loop.
+ */
+XXH_FORCE_INLINE XXH128_hash_t
+XXH3_hashLong_128b_withSecret(const void* XXH_RESTRICT input, size_t len,
+ XXH64_hash_t seed64,
+ const void* XXH_RESTRICT secret, size_t secretLen)
+{
+ (void)seed64;
+ return XXH3_hashLong_128b_internal(input, len, (const xxh_u8*)secret, secretLen,
+ XXH3_accumulate_512, XXH3_scrambleAcc);
+}
+
+XXH_FORCE_INLINE XXH128_hash_t
+XXH3_hashLong_128b_withSeed_internal(const void* XXH_RESTRICT input, size_t len,
+ XXH64_hash_t seed64,
+ XXH3_f_accumulate_512 f_acc512,
+ XXH3_f_scrambleAcc f_scramble,
+ XXH3_f_initCustomSecret f_initSec)
+{
+ if (seed64 == 0)
+ return XXH3_hashLong_128b_internal(input, len,
+ XXH3_kSecret, sizeof(XXH3_kSecret),
+ f_acc512, f_scramble);
+ { XXH_ALIGN(XXH_SEC_ALIGN) xxh_u8 secret[XXH_SECRET_DEFAULT_SIZE];
+ f_initSec(secret, seed64);
+ return XXH3_hashLong_128b_internal(input, len, (const xxh_u8*)secret, sizeof(secret),
+ f_acc512, f_scramble);
+ }
+}
+
+/*
+ * It's important for performance that XXH3_hashLong is not inlined.
+ */
+XXH_NO_INLINE XXH128_hash_t
+XXH3_hashLong_128b_withSeed(const void* input, size_t len,
+ XXH64_hash_t seed64, const void* XXH_RESTRICT secret, size_t secretLen)
+{
+ (void)secret; (void)secretLen;
+ return XXH3_hashLong_128b_withSeed_internal(input, len, seed64,
+ XXH3_accumulate_512, XXH3_scrambleAcc, XXH3_initCustomSecret);
+}
+
+typedef XXH128_hash_t (*XXH3_hashLong128_f)(const void* XXH_RESTRICT, size_t,
+ XXH64_hash_t, const void* XXH_RESTRICT, size_t);
+
+XXH_FORCE_INLINE XXH128_hash_t
+XXH3_128bits_internal(const void* input, size_t len,
+ XXH64_hash_t seed64, const void* XXH_RESTRICT secret, size_t secretLen,
+ XXH3_hashLong128_f f_hl128)
+{
+ XXH_ASSERT(secretLen >= XXH3_SECRET_SIZE_MIN);
+ /*
+ * If an action is to be taken if `secret` conditions are not respected,
+ * it should be done here.
+ * For now, it's a contract pre-condition.
+ * Adding a check and a branch here would cost performance at every hash.
+ */
+ if (len <= 16)
+ return XXH3_len_0to16_128b((const xxh_u8*)input, len, (const xxh_u8*)secret, seed64);
+ if (len <= 128)
+ return XXH3_len_17to128_128b((const xxh_u8*)input, len, (const xxh_u8*)secret, secretLen, seed64);
+ if (len <= XXH3_MIDSIZE_MAX)
+ return XXH3_len_129to240_128b((const xxh_u8*)input, len, (const xxh_u8*)secret, secretLen, seed64);
+ return f_hl128(input, len, seed64, secret, secretLen);
+}
+
+
+/* === Public XXH128 API === */
+
+/*! @ingroup xxh3_family */
+XXH_PUBLIC_API XXH128_hash_t XXH3_128bits(const void* input, size_t len)
+{
+ return XXH3_128bits_internal(input, len, 0,
+ XXH3_kSecret, sizeof(XXH3_kSecret),
+ XXH3_hashLong_128b_default);
+}
+
+/*! @ingroup xxh3_family */
+XXH_PUBLIC_API XXH128_hash_t
+XXH3_128bits_withSecret(const void* input, size_t len, const void* secret, size_t secretSize)
+{
+ return XXH3_128bits_internal(input, len, 0,
+ (const xxh_u8*)secret, secretSize,
+ XXH3_hashLong_128b_withSecret);
+}
+
+/*! @ingroup xxh3_family */
+XXH_PUBLIC_API XXH128_hash_t
+XXH3_128bits_withSeed(const void* input, size_t len, XXH64_hash_t seed)
+{
+ return XXH3_128bits_internal(input, len, seed,
+ XXH3_kSecret, sizeof(XXH3_kSecret),
+ XXH3_hashLong_128b_withSeed);
+}
+
+/*! @ingroup xxh3_family */
+XXH_PUBLIC_API XXH128_hash_t
+XXH3_128bits_withSecretandSeed(const void* input, size_t len, const void* secret, size_t secretSize, XXH64_hash_t seed)
+{
+ if (len <= XXH3_MIDSIZE_MAX)
+ return XXH3_128bits_internal(input, len, seed, XXH3_kSecret, sizeof(XXH3_kSecret), NULL);
+ return XXH3_hashLong_128b_withSecret(input, len, seed, secret, secretSize);
+}
+
+/*! @ingroup xxh3_family */
+XXH_PUBLIC_API XXH128_hash_t
+XXH128(const void* input, size_t len, XXH64_hash_t seed)
+{
+ return XXH3_128bits_withSeed(input, len, seed);
+}
+
+
+/* === XXH3 128-bit streaming === */
+
+/*
+ * All initialization and update functions are identical to 64-bit streaming variant.
+ * The only difference is the finalization routine.
+ */
+
+/*! @ingroup xxh3_family */
+XXH_PUBLIC_API XXH_errorcode
+XXH3_128bits_reset(XXH3_state_t* statePtr)
+{
+ return XXH3_64bits_reset(statePtr);
+}
+
+/*! @ingroup xxh3_family */
+XXH_PUBLIC_API XXH_errorcode
+XXH3_128bits_reset_withSecret(XXH3_state_t* statePtr, const void* secret, size_t secretSize)
+{
+ return XXH3_64bits_reset_withSecret(statePtr, secret, secretSize);
+}
+
+/*! @ingroup xxh3_family */
+XXH_PUBLIC_API XXH_errorcode
+XXH3_128bits_reset_withSeed(XXH3_state_t* statePtr, XXH64_hash_t seed)
+{
+ return XXH3_64bits_reset_withSeed(statePtr, seed);
+}
+
+/*! @ingroup xxh3_family */
+XXH_PUBLIC_API XXH_errorcode
+XXH3_128bits_reset_withSecretandSeed(XXH3_state_t* statePtr, const void* secret, size_t secretSize, XXH64_hash_t seed)
+{
+ return XXH3_64bits_reset_withSecretandSeed(statePtr, secret, secretSize, seed);
+}
+
+/*! @ingroup xxh3_family */
+XXH_PUBLIC_API XXH_errorcode
+XXH3_128bits_update(XXH3_state_t* state, const void* input, size_t len)
+{
+ return XXH3_update(state, (const xxh_u8*)input, len,
+ XXH3_accumulate_512, XXH3_scrambleAcc);
+}
+
+/*! @ingroup xxh3_family */
+XXH_PUBLIC_API XXH128_hash_t XXH3_128bits_digest (const XXH3_state_t* state)
+{
+ const unsigned char* const secret = (state->extSecret == NULL) ? state->customSecret : state->extSecret;
+ if (state->totalLen > XXH3_MIDSIZE_MAX) {
+ XXH_ALIGN(XXH_ACC_ALIGN) XXH64_hash_t acc[XXH_ACC_NB];
+ XXH3_digest_long(acc, state, secret);
+ XXH_ASSERT(state->secretLimit + XXH_STRIPE_LEN >= sizeof(acc) + XXH_SECRET_MERGEACCS_START);
+ { XXH128_hash_t h128;
+ h128.low64 = XXH3_mergeAccs(acc,
+ secret + XXH_SECRET_MERGEACCS_START,
+ (xxh_u64)state->totalLen * XXH_PRIME64_1);
+ h128.high64 = XXH3_mergeAccs(acc,
+ secret + state->secretLimit + XXH_STRIPE_LEN
+ - sizeof(acc) - XXH_SECRET_MERGEACCS_START,
+ ~((xxh_u64)state->totalLen * XXH_PRIME64_2));
+ return h128;
+ }
+ }
+ /* len <= XXH3_MIDSIZE_MAX : short code */
+ if (state->seed)
+ return XXH3_128bits_withSeed(state->buffer, (size_t)state->totalLen, state->seed);
+ return XXH3_128bits_withSecret(state->buffer, (size_t)(state->totalLen),
+ secret, state->secretLimit + XXH_STRIPE_LEN);
+}
+
+/* 128-bit utility functions */
+
+#include <string.h> /* memcmp, memcpy */
+
+/* return : 1 is equal, 0 if different */
+/*! @ingroup xxh3_family */
+XXH_PUBLIC_API int XXH128_isEqual(XXH128_hash_t h1, XXH128_hash_t h2)
+{
+ /* note : XXH128_hash_t is compact, it has no padding byte */
+ return !(memcmp(&h1, &h2, sizeof(h1)));
+}
+
+/* This prototype is compatible with stdlib's qsort().
+ * return : >0 if *h128_1 > *h128_2
+ * <0 if *h128_1 < *h128_2
+ * =0 if *h128_1 == *h128_2 */
+/*! @ingroup xxh3_family */
+XXH_PUBLIC_API int XXH128_cmp(const void* h128_1, const void* h128_2)
+{
+ XXH128_hash_t const h1 = *(const XXH128_hash_t*)h128_1;
+ XXH128_hash_t const h2 = *(const XXH128_hash_t*)h128_2;
+ int const hcmp = (h1.high64 > h2.high64) - (h2.high64 > h1.high64);
+ /* note : bets that, in most cases, hash values are different */
+ if (hcmp) return hcmp;
+ return (h1.low64 > h2.low64) - (h2.low64 > h1.low64);
+}
+
+
+/*====== Canonical representation ======*/
+/*! @ingroup xxh3_family */
+XXH_PUBLIC_API void
+XXH128_canonicalFromHash(XXH128_canonical_t* dst, XXH128_hash_t hash)
+{
+ XXH_STATIC_ASSERT(sizeof(XXH128_canonical_t) == sizeof(XXH128_hash_t));
+ if (XXH_CPU_LITTLE_ENDIAN) {
+ hash.high64 = XXH_swap64(hash.high64);
+ hash.low64 = XXH_swap64(hash.low64);
+ }
+ XXH_memcpy(dst, &hash.high64, sizeof(hash.high64));
+ XXH_memcpy((char*)dst + sizeof(hash.high64), &hash.low64, sizeof(hash.low64));
+}
+
+/*! @ingroup xxh3_family */
+XXH_PUBLIC_API XXH128_hash_t
+XXH128_hashFromCanonical(const XXH128_canonical_t* src)
+{
+ XXH128_hash_t h;
+ h.high64 = XXH_readBE64(src);
+ h.low64 = XXH_readBE64(src->digest + 8);
+ return h;
+}
+
+
+
+/* ==========================================
+ * Secret generators
+ * ==========================================
+ */
+#define XXH_MIN(x, y) (((x) > (y)) ? (y) : (x))
+
+XXH_FORCE_INLINE void XXH3_combine16(void* dst, XXH128_hash_t h128)
+{
+ XXH_writeLE64( dst, XXH_readLE64(dst) ^ h128.low64 );
+ XXH_writeLE64( (char*)dst+8, XXH_readLE64((char*)dst+8) ^ h128.high64 );
+}
+
+/*! @ingroup xxh3_family */
+XXH_PUBLIC_API XXH_errorcode
+XXH3_generateSecret(void* secretBuffer, size_t secretSize, const void* customSeed, size_t customSeedSize)
+{
+#if (XXH_DEBUGLEVEL >= 1)
+ XXH_ASSERT(secretBuffer != NULL);
+ XXH_ASSERT(secretSize >= XXH3_SECRET_SIZE_MIN);
+#else
+ /* production mode, assert() are disabled */
+ if (secretBuffer == NULL) return XXH_ERROR;
+ if (secretSize < XXH3_SECRET_SIZE_MIN) return XXH_ERROR;
+#endif
+
+ if (customSeedSize == 0) {
+ customSeed = XXH3_kSecret;
+ customSeedSize = XXH_SECRET_DEFAULT_SIZE;
+ }
+#if (XXH_DEBUGLEVEL >= 1)
+ XXH_ASSERT(customSeed != NULL);
+#else
+ if (customSeed == NULL) return XXH_ERROR;
+#endif
+
+ /* Fill secretBuffer with a copy of customSeed - repeat as needed */
+ { size_t pos = 0;
+ while (pos < secretSize) {
+ size_t const toCopy = XXH_MIN((secretSize - pos), customSeedSize);
+ memcpy((char*)secretBuffer + pos, customSeed, toCopy);
+ pos += toCopy;
+ } }
+
+ { size_t const nbSeg16 = secretSize / 16;
+ size_t n;
+ XXH128_canonical_t scrambler;
+ XXH128_canonicalFromHash(&scrambler, XXH128(customSeed, customSeedSize, 0));
+ for (n=0; n<nbSeg16; n++) {
+ XXH128_hash_t const h128 = XXH128(&scrambler, sizeof(scrambler), n);
+ XXH3_combine16((char*)secretBuffer + n*16, h128);
+ }
+ /* last segment */
+ XXH3_combine16((char*)secretBuffer + secretSize - 16, XXH128_hashFromCanonical(&scrambler));
+ }
+ return XXH_OK;
+}
+
+/*! @ingroup xxh3_family */
+XXH_PUBLIC_API void
+XXH3_generateSecret_fromSeed(void* secretBuffer, XXH64_hash_t seed)
+{
+ XXH_ALIGN(XXH_SEC_ALIGN) xxh_u8 secret[XXH_SECRET_DEFAULT_SIZE];
+ XXH3_initCustomSecret(secret, seed);
+ XXH_ASSERT(secretBuffer != NULL);
+ memcpy(secretBuffer, secret, XXH_SECRET_DEFAULT_SIZE);
+}
+
+
+
+/* Pop our optimization override from above */
+#if XXH_VECTOR == XXH_AVX2 /* AVX2 */ \
+ && defined(__GNUC__) && !defined(__clang__) /* GCC, not Clang */ \
+ && defined(__OPTIMIZE__) && !defined(__OPTIMIZE_SIZE__) /* respect -O0 and -Os */
+# pragma GCC pop_options
+#endif
+
+#endif /* XXH_NO_LONG_LONG */
+
+#endif /* XXH_NO_XXH3 */
+
+/*!
+ * @}
+ */
+#endif /* XXH_IMPLEMENTATION */
#if defined (__cplusplus)
diff --git a/thirdparty/zstd/common/zstd_internal.h b/thirdparty/zstd/common/zstd_internal.h
index 68252e987e..e4d36ce090 100644
--- a/thirdparty/zstd/common/zstd_internal.h
+++ b/thirdparty/zstd/common/zstd_internal.h
@@ -19,10 +19,8 @@
/*-*************************************
* Dependencies
***************************************/
-#if !defined(ZSTD_NO_INTRINSICS) && defined(__ARM_NEON)
-#include <arm_neon.h>
-#endif
#include "compiler.h"
+#include "cpu.h"
#include "mem.h"
#include "debug.h" /* assert, DEBUGLOG, RAWLOG, g_debuglevel */
#include "error_private.h"
@@ -60,81 +58,7 @@ extern "C" {
#undef MAX
#define MIN(a,b) ((a)<(b) ? (a) : (b))
#define MAX(a,b) ((a)>(b) ? (a) : (b))
-
-/**
- * Ignore: this is an internal helper.
- *
- * This is a helper function to help force C99-correctness during compilation.
- * Under strict compilation modes, variadic macro arguments can't be empty.
- * However, variadic function arguments can be. Using a function therefore lets
- * us statically check that at least one (string) argument was passed,
- * independent of the compilation flags.
- */
-static INLINE_KEYWORD UNUSED_ATTR
-void _force_has_format_string(const char *format, ...) {
- (void)format;
-}
-
-/**
- * Ignore: this is an internal helper.
- *
- * We want to force this function invocation to be syntactically correct, but
- * we don't want to force runtime evaluation of its arguments.
- */
-#define _FORCE_HAS_FORMAT_STRING(...) \
- if (0) { \
- _force_has_format_string(__VA_ARGS__); \
- }
-
-/**
- * Return the specified error if the condition evaluates to true.
- *
- * In debug modes, prints additional information.
- * In order to do that (particularly, printing the conditional that failed),
- * this can't just wrap RETURN_ERROR().
- */
-#define RETURN_ERROR_IF(cond, err, ...) \
- if (cond) { \
- RAWLOG(3, "%s:%d: ERROR!: check %s failed, returning %s", \
- __FILE__, __LINE__, ZSTD_QUOTE(cond), ZSTD_QUOTE(ERROR(err))); \
- _FORCE_HAS_FORMAT_STRING(__VA_ARGS__); \
- RAWLOG(3, ": " __VA_ARGS__); \
- RAWLOG(3, "\n"); \
- return ERROR(err); \
- }
-
-/**
- * Unconditionally return the specified error.
- *
- * In debug modes, prints additional information.
- */
-#define RETURN_ERROR(err, ...) \
- do { \
- RAWLOG(3, "%s:%d: ERROR!: unconditional check failed, returning %s", \
- __FILE__, __LINE__, ZSTD_QUOTE(ERROR(err))); \
- _FORCE_HAS_FORMAT_STRING(__VA_ARGS__); \
- RAWLOG(3, ": " __VA_ARGS__); \
- RAWLOG(3, "\n"); \
- return ERROR(err); \
- } while(0);
-
-/**
- * If the provided expression evaluates to an error code, returns that error code.
- *
- * In debug modes, prints additional information.
- */
-#define FORWARD_IF_ERROR(err, ...) \
- do { \
- size_t const err_code = (err); \
- if (ERR_isError(err_code)) { \
- RAWLOG(3, "%s:%d: ERROR!: forwarding error in %s: %s", \
- __FILE__, __LINE__, ZSTD_QUOTE(err), ERR_getErrorName(err_code)); \
- _FORCE_HAS_FORMAT_STRING(__VA_ARGS__); \
- RAWLOG(3, ": " __VA_ARGS__); \
- RAWLOG(3, "\n"); \
- return err_code; \
- } \
- } while(0);
+#define BOUNDED(min,val,max) (MAX(min,MIN(val,max)))
/*-*************************************
@@ -143,7 +67,6 @@ void _force_has_format_string(const char *format, ...) {
#define ZSTD_OPT_NUM (1<<12)
#define ZSTD_REP_NUM 3 /* number of repcodes */
-#define ZSTD_REP_MOVE (ZSTD_REP_NUM-1)
static UNUSED_ATTR const U32 repStartValue[ZSTD_REP_NUM] = { 1, 4, 8 };
#define KB *(1 <<10)
@@ -195,7 +118,7 @@ typedef enum { set_basic, set_rle, set_compressed, set_repeat } symbolEncodingTy
/* Each table cannot take more than #symbols * FSELog bits */
#define ZSTD_MAX_FSE_HEADERS_SIZE (((MaxML + 1) * MLFSELog + (MaxLL + 1) * LLFSELog + (MaxOff + 1) * OffFSELog + 7) / 8)
-static UNUSED_ATTR const U32 LL_bits[MaxLL+1] = {
+static UNUSED_ATTR const U8 LL_bits[MaxLL+1] = {
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
1, 1, 1, 1, 2, 2, 3, 3,
@@ -212,7 +135,7 @@ static UNUSED_ATTR const S16 LL_defaultNorm[MaxLL+1] = {
#define LL_DEFAULTNORMLOG 6 /* for static allocation */
static UNUSED_ATTR const U32 LL_defaultNormLog = LL_DEFAULTNORMLOG;
-static UNUSED_ATTR const U32 ML_bits[MaxML+1] = {
+static UNUSED_ATTR const U8 ML_bits[MaxML+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,
@@ -247,19 +170,30 @@ static UNUSED_ATTR const U32 OF_defaultNormLog = OF_DEFAULTNORMLOG;
* Shared functions to include for inlining
*********************************************/
static void ZSTD_copy8(void* dst, const void* src) {
-#if !defined(ZSTD_NO_INTRINSICS) && defined(__ARM_NEON)
+#if defined(ZSTD_ARCH_ARM_NEON)
vst1_u8((uint8_t*)dst, vld1_u8((const uint8_t*)src));
#else
ZSTD_memcpy(dst, src, 8);
#endif
}
-
#define COPY8(d,s) { ZSTD_copy8(d,s); d+=8; s+=8; }
+
+/* Need to use memmove here since the literal buffer can now be located within
+ the dst buffer. In circumstances where the op "catches up" to where the
+ literal buffer is, there can be partial overlaps in this call on the final
+ copy if the literal is being shifted by less than 16 bytes. */
static void ZSTD_copy16(void* dst, const void* src) {
-#if !defined(ZSTD_NO_INTRINSICS) && defined(__ARM_NEON)
+#if defined(ZSTD_ARCH_ARM_NEON)
vst1q_u8((uint8_t*)dst, vld1q_u8((const uint8_t*)src));
+#elif defined(ZSTD_ARCH_X86_SSE2)
+ _mm_storeu_si128((__m128i*)dst, _mm_loadu_si128((const __m128i*)src));
+#elif defined(__clang__)
+ ZSTD_memmove(dst, src, 16);
#else
- ZSTD_memcpy(dst, src, 16);
+ /* ZSTD_memmove is not inlined properly by gcc */
+ BYTE copy16_buf[16];
+ ZSTD_memcpy(copy16_buf, src, 16);
+ ZSTD_memcpy(dst, copy16_buf, 16);
#endif
}
#define COPY16(d,s) { ZSTD_copy16(d,s); d+=16; s+=16; }
@@ -288,8 +222,6 @@ void ZSTD_wildcopy(void* dst, const void* src, ptrdiff_t length, ZSTD_overlap_e
BYTE* op = (BYTE*)dst;
BYTE* const oend = op + length;
- assert(diff >= 8 || (ovtype == ZSTD_no_overlap && diff <= -WILDCOPY_VECLEN));
-
if (ovtype == ZSTD_overlap_src_before_dst && diff < WILDCOPY_VECLEN) {
/* Handle short offset copies. */
do {
@@ -352,9 +284,9 @@ typedef enum {
* Private declarations
*********************************************/
typedef struct seqDef_s {
- U32 offset; /* offset == rawOffset + ZSTD_REP_NUM, or equivalently, offCode + 1 */
+ U32 offBase; /* offBase == Offset + ZSTD_REP_NUM, or repcode 1,2,3 */
U16 litLength;
- U16 matchLength;
+ U16 mlBase; /* mlBase == matchLength - MINMATCH */
} seqDef;
/* Controls whether seqStore has a single "long" litLength or matchLength. See seqStore_t. */
@@ -396,7 +328,7 @@ MEM_STATIC ZSTD_sequenceLength ZSTD_getSequenceLength(seqStore_t const* seqStore
{
ZSTD_sequenceLength seqLen;
seqLen.litLength = seq->litLength;
- seqLen.matchLength = seq->matchLength + MINMATCH;
+ seqLen.matchLength = seq->mlBase + MINMATCH;
if (seqStore->longLengthPos == (U32)(seq - seqStore->sequencesStart)) {
if (seqStore->longLengthType == ZSTD_llt_literalLength) {
seqLen.litLength += 0xFFFF;
@@ -436,8 +368,14 @@ MEM_STATIC U32 ZSTD_highbit32(U32 val) /* compress, dictBuilder, decodeCorpus
# if STATIC_BMI2 == 1
return _lzcnt_u32(val)^31;
# else
- unsigned long r=0;
- return _BitScanReverse(&r, val) ? (unsigned)r : 0;
+ if (val != 0) {
+ unsigned long r;
+ _BitScanReverse(&r, val);
+ return (unsigned)r;
+ } else {
+ /* Should not reach this code path */
+ __assume(0);
+ }
# endif
# elif defined(__GNUC__) && (__GNUC__ >= 3) /* GCC Intrinsic */
return __builtin_clz (val) ^ 31;
@@ -456,6 +394,63 @@ MEM_STATIC U32 ZSTD_highbit32(U32 val) /* compress, dictBuilder, decodeCorpus
}
}
+/**
+ * Counts the number of trailing zeros of a `size_t`.
+ * Most compilers should support CTZ as a builtin. A backup
+ * implementation is provided if the builtin isn't supported, but
+ * it may not be terribly efficient.
+ */
+MEM_STATIC unsigned ZSTD_countTrailingZeros(size_t val)
+{
+ if (MEM_64bits()) {
+# if defined(_MSC_VER) && defined(_WIN64)
+# if STATIC_BMI2
+ return _tzcnt_u64(val);
+# else
+ if (val != 0) {
+ unsigned long r;
+ _BitScanForward64(&r, (U64)val);
+ return (unsigned)r;
+ } else {
+ /* Should not reach this code path */
+ __assume(0);
+ }
+# endif
+# elif defined(__GNUC__) && (__GNUC__ >= 4)
+ return __builtin_ctzll((U64)val);
+# else
+ static const int DeBruijnBytePos[64] = { 0, 1, 2, 7, 3, 13, 8, 19,
+ 4, 25, 14, 28, 9, 34, 20, 56,
+ 5, 17, 26, 54, 15, 41, 29, 43,
+ 10, 31, 38, 35, 21, 45, 49, 57,
+ 63, 6, 12, 18, 24, 27, 33, 55,
+ 16, 53, 40, 42, 30, 37, 44, 48,
+ 62, 11, 23, 32, 52, 39, 36, 47,
+ 61, 22, 51, 46, 60, 50, 59, 58 };
+ return DeBruijnBytePos[((U64)((val & -(long long)val) * 0x0218A392CDABBD3FULL)) >> 58];
+# endif
+ } else { /* 32 bits */
+# if defined(_MSC_VER)
+ if (val != 0) {
+ unsigned long r;
+ _BitScanForward(&r, (U32)val);
+ return (unsigned)r;
+ } else {
+ /* Should not reach this code path */
+ __assume(0);
+ }
+# elif defined(__GNUC__) && (__GNUC__ >= 3)
+ return __builtin_ctz((U32)val);
+# else
+ static const int DeBruijnBytePos[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 DeBruijnBytePos[((U32)((val & -(S32)val) * 0x077CB531U)) >> 27];
+# endif
+ }
+}
+
/* ZSTD_invalidateRepCodes() :
* ensures next compression will not use repcodes from previous block.
@@ -482,6 +477,14 @@ size_t ZSTD_getcBlockSize(const void* src, size_t srcSize,
size_t ZSTD_decodeSeqHeaders(ZSTD_DCtx* dctx, int* nbSeqPtr,
const void* src, size_t srcSize);
+/**
+ * @returns true iff the CPU supports dynamic BMI2 dispatch.
+ */
+MEM_STATIC int ZSTD_cpuSupportsBmi2(void)
+{
+ ZSTD_cpuid_t cpuid = ZSTD_cpuid();
+ return ZSTD_cpuid_bmi1(cpuid) && ZSTD_cpuid_bmi2(cpuid);
+}
#if defined (__cplusplus)
}
diff --git a/thirdparty/zstd/common/zstd_trace.h b/thirdparty/zstd/common/zstd_trace.h
index 2da5640771..f9121f7d8e 100644
--- a/thirdparty/zstd/common/zstd_trace.h
+++ b/thirdparty/zstd/common/zstd_trace.h
@@ -17,10 +17,19 @@ extern "C" {
#include <stddef.h>
-/* weak symbol support */
-#if !defined(ZSTD_HAVE_WEAK_SYMBOLS) && defined(__GNUC__) && \
+/* weak symbol support
+ * For now, enable conservatively:
+ * - Only GNUC
+ * - Only ELF
+ * - Only x86-64 and i386
+ * Also, explicitly disable on platforms known not to work so they aren't
+ * forgotten in the future.
+ */
+#if !defined(ZSTD_HAVE_WEAK_SYMBOLS) && \
+ defined(__GNUC__) && defined(__ELF__) && \
+ (defined(__x86_64__) || defined(_M_X64) || defined(__i386__) || defined(_M_IX86)) && \
!defined(__APPLE__) && !defined(_WIN32) && !defined(__MINGW32__) && \
- !defined(__CYGWIN__)
+ !defined(__CYGWIN__) && !defined(_AIX)
# define ZSTD_HAVE_WEAK_SYMBOLS 1
#else
# define ZSTD_HAVE_WEAK_SYMBOLS 0
diff --git a/thirdparty/zstd/compress/clevels.h b/thirdparty/zstd/compress/clevels.h
new file mode 100644
index 0000000000..7ed2e00490
--- /dev/null
+++ b/thirdparty/zstd/compress/clevels.h
@@ -0,0 +1,134 @@
+/*
+ * 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_CLEVELS_H
+#define ZSTD_CLEVELS_H
+
+#define ZSTD_STATIC_LINKING_ONLY /* ZSTD_compressionParameters */
+#include "../zstd.h"
+
+/*-===== Pre-defined compression levels =====-*/
+
+#define ZSTD_MAX_CLEVEL 22
+
+#ifdef __GNUC__
+__attribute__((__unused__))
+#endif
+
+static const ZSTD_compressionParameters ZSTD_defaultCParameters[4][ZSTD_MAX_CLEVEL+1] = {
+{ /* "default" - for any srcSize > 256 KB */
+ /* W, C, H, S, L, TL, strat */
+ { 19, 12, 13, 1, 6, 1, ZSTD_fast }, /* base for negative levels */
+ { 19, 13, 14, 1, 7, 0, ZSTD_fast }, /* level 1 */
+ { 20, 15, 16, 1, 6, 0, ZSTD_fast }, /* level 2 */
+ { 21, 16, 17, 1, 5, 0, ZSTD_dfast }, /* level 3 */
+ { 21, 18, 18, 1, 5, 0, ZSTD_dfast }, /* level 4 */
+ { 21, 18, 19, 3, 5, 2, ZSTD_greedy }, /* level 5 */
+ { 21, 18, 19, 3, 5, 4, ZSTD_lazy }, /* level 6 */
+ { 21, 19, 20, 4, 5, 8, ZSTD_lazy }, /* level 7 */
+ { 21, 19, 20, 4, 5, 16, ZSTD_lazy2 }, /* level 8 */
+ { 22, 20, 21, 4, 5, 16, ZSTD_lazy2 }, /* level 9 */
+ { 22, 21, 22, 5, 5, 16, ZSTD_lazy2 }, /* level 10 */
+ { 22, 21, 22, 6, 5, 16, ZSTD_lazy2 }, /* level 11 */
+ { 22, 22, 23, 6, 5, 32, ZSTD_lazy2 }, /* level 12 */
+ { 22, 22, 22, 4, 5, 32, ZSTD_btlazy2 }, /* level 13 */
+ { 22, 22, 23, 5, 5, 32, ZSTD_btlazy2 }, /* level 14 */
+ { 22, 23, 23, 6, 5, 32, ZSTD_btlazy2 }, /* level 15 */
+ { 22, 22, 22, 5, 5, 48, ZSTD_btopt }, /* level 16 */
+ { 23, 23, 22, 5, 4, 64, ZSTD_btopt }, /* level 17 */
+ { 23, 23, 22, 6, 3, 64, ZSTD_btultra }, /* level 18 */
+ { 23, 24, 22, 7, 3,256, ZSTD_btultra2}, /* level 19 */
+ { 25, 25, 23, 7, 3,256, ZSTD_btultra2}, /* level 20 */
+ { 26, 26, 24, 7, 3,512, ZSTD_btultra2}, /* level 21 */
+ { 27, 27, 25, 9, 3,999, ZSTD_btultra2}, /* level 22 */
+},
+{ /* for srcSize <= 256 KB */
+ /* W, C, H, S, L, T, strat */
+ { 18, 12, 13, 1, 5, 1, ZSTD_fast }, /* base for negative levels */
+ { 18, 13, 14, 1, 6, 0, ZSTD_fast }, /* level 1 */
+ { 18, 14, 14, 1, 5, 0, ZSTD_dfast }, /* level 2 */
+ { 18, 16, 16, 1, 4, 0, ZSTD_dfast }, /* level 3 */
+ { 18, 16, 17, 3, 5, 2, ZSTD_greedy }, /* level 4.*/
+ { 18, 17, 18, 5, 5, 2, ZSTD_greedy }, /* level 5.*/
+ { 18, 18, 19, 3, 5, 4, ZSTD_lazy }, /* level 6.*/
+ { 18, 18, 19, 4, 4, 4, ZSTD_lazy }, /* level 7 */
+ { 18, 18, 19, 4, 4, 8, ZSTD_lazy2 }, /* level 8 */
+ { 18, 18, 19, 5, 4, 8, ZSTD_lazy2 }, /* level 9 */
+ { 18, 18, 19, 6, 4, 8, ZSTD_lazy2 }, /* level 10 */
+ { 18, 18, 19, 5, 4, 12, ZSTD_btlazy2 }, /* level 11.*/
+ { 18, 19, 19, 7, 4, 12, ZSTD_btlazy2 }, /* level 12.*/
+ { 18, 18, 19, 4, 4, 16, ZSTD_btopt }, /* level 13 */
+ { 18, 18, 19, 4, 3, 32, ZSTD_btopt }, /* level 14.*/
+ { 18, 18, 19, 6, 3,128, ZSTD_btopt }, /* level 15.*/
+ { 18, 19, 19, 6, 3,128, ZSTD_btultra }, /* level 16.*/
+ { 18, 19, 19, 8, 3,256, ZSTD_btultra }, /* level 17.*/
+ { 18, 19, 19, 6, 3,128, ZSTD_btultra2}, /* level 18.*/
+ { 18, 19, 19, 8, 3,256, ZSTD_btultra2}, /* level 19.*/
+ { 18, 19, 19, 10, 3,512, ZSTD_btultra2}, /* level 20.*/
+ { 18, 19, 19, 12, 3,512, ZSTD_btultra2}, /* level 21.*/
+ { 18, 19, 19, 13, 3,999, ZSTD_btultra2}, /* level 22.*/
+},
+{ /* for srcSize <= 128 KB */
+ /* W, C, H, S, L, T, strat */
+ { 17, 12, 12, 1, 5, 1, ZSTD_fast }, /* base for negative levels */
+ { 17, 12, 13, 1, 6, 0, ZSTD_fast }, /* level 1 */
+ { 17, 13, 15, 1, 5, 0, ZSTD_fast }, /* level 2 */
+ { 17, 15, 16, 2, 5, 0, ZSTD_dfast }, /* level 3 */
+ { 17, 17, 17, 2, 4, 0, ZSTD_dfast }, /* level 4 */
+ { 17, 16, 17, 3, 4, 2, ZSTD_greedy }, /* level 5 */
+ { 17, 16, 17, 3, 4, 4, ZSTD_lazy }, /* level 6 */
+ { 17, 16, 17, 3, 4, 8, ZSTD_lazy2 }, /* level 7 */
+ { 17, 16, 17, 4, 4, 8, ZSTD_lazy2 }, /* level 8 */
+ { 17, 16, 17, 5, 4, 8, ZSTD_lazy2 }, /* level 9 */
+ { 17, 16, 17, 6, 4, 8, ZSTD_lazy2 }, /* level 10 */
+ { 17, 17, 17, 5, 4, 8, ZSTD_btlazy2 }, /* level 11 */
+ { 17, 18, 17, 7, 4, 12, ZSTD_btlazy2 }, /* level 12 */
+ { 17, 18, 17, 3, 4, 12, ZSTD_btopt }, /* level 13.*/
+ { 17, 18, 17, 4, 3, 32, ZSTD_btopt }, /* level 14.*/
+ { 17, 18, 17, 6, 3,256, ZSTD_btopt }, /* level 15.*/
+ { 17, 18, 17, 6, 3,128, ZSTD_btultra }, /* level 16.*/
+ { 17, 18, 17, 8, 3,256, ZSTD_btultra }, /* level 17.*/
+ { 17, 18, 17, 10, 3,512, ZSTD_btultra }, /* level 18.*/
+ { 17, 18, 17, 5, 3,256, ZSTD_btultra2}, /* level 19.*/
+ { 17, 18, 17, 7, 3,512, ZSTD_btultra2}, /* level 20.*/
+ { 17, 18, 17, 9, 3,512, ZSTD_btultra2}, /* level 21.*/
+ { 17, 18, 17, 11, 3,999, ZSTD_btultra2}, /* level 22.*/
+},
+{ /* for srcSize <= 16 KB */
+ /* W, C, H, S, L, T, strat */
+ { 14, 12, 13, 1, 5, 1, ZSTD_fast }, /* base for negative levels */
+ { 14, 14, 15, 1, 5, 0, ZSTD_fast }, /* level 1 */
+ { 14, 14, 15, 1, 4, 0, ZSTD_fast }, /* level 2 */
+ { 14, 14, 15, 2, 4, 0, ZSTD_dfast }, /* level 3 */
+ { 14, 14, 14, 4, 4, 2, ZSTD_greedy }, /* level 4 */
+ { 14, 14, 14, 3, 4, 4, ZSTD_lazy }, /* level 5.*/
+ { 14, 14, 14, 4, 4, 8, ZSTD_lazy2 }, /* level 6 */
+ { 14, 14, 14, 6, 4, 8, ZSTD_lazy2 }, /* level 7 */
+ { 14, 14, 14, 8, 4, 8, ZSTD_lazy2 }, /* level 8.*/
+ { 14, 15, 14, 5, 4, 8, ZSTD_btlazy2 }, /* level 9.*/
+ { 14, 15, 14, 9, 4, 8, ZSTD_btlazy2 }, /* level 10.*/
+ { 14, 15, 14, 3, 4, 12, ZSTD_btopt }, /* level 11.*/
+ { 14, 15, 14, 4, 3, 24, ZSTD_btopt }, /* level 12.*/
+ { 14, 15, 14, 5, 3, 32, ZSTD_btultra }, /* level 13.*/
+ { 14, 15, 15, 6, 3, 64, ZSTD_btultra }, /* level 14.*/
+ { 14, 15, 15, 7, 3,256, ZSTD_btultra }, /* level 15.*/
+ { 14, 15, 15, 5, 3, 48, ZSTD_btultra2}, /* level 16.*/
+ { 14, 15, 15, 6, 3,128, ZSTD_btultra2}, /* level 17.*/
+ { 14, 15, 15, 7, 3,256, ZSTD_btultra2}, /* level 18.*/
+ { 14, 15, 15, 8, 3,256, ZSTD_btultra2}, /* level 19.*/
+ { 14, 15, 15, 8, 3,512, ZSTD_btultra2}, /* level 20.*/
+ { 14, 15, 15, 9, 3,512, ZSTD_btultra2}, /* level 21.*/
+ { 14, 15, 15, 10, 3,999, ZSTD_btultra2}, /* level 22.*/
+},
+};
+
+
+
+#endif /* ZSTD_CLEVELS_H */
diff --git a/thirdparty/zstd/compress/fse_compress.c b/thirdparty/zstd/compress/fse_compress.c
index b4297ec88a..5547b4ac09 100644
--- a/thirdparty/zstd/compress/fse_compress.c
+++ b/thirdparty/zstd/compress/fse_compress.c
@@ -75,13 +75,14 @@ size_t FSE_buildCTable_wksp(FSE_CTable* ct,
void* const FSCT = ((U32*)ptr) + 1 /* header */ + (tableLog ? tableSize>>1 : 1) ;
FSE_symbolCompressionTransform* const symbolTT = (FSE_symbolCompressionTransform*) (FSCT);
U32 const step = FSE_TABLESTEP(tableSize);
+ U32 const maxSV1 = maxSymbolValue+1;
- U32* cumul = (U32*)workSpace;
- FSE_FUNCTION_TYPE* tableSymbol = (FSE_FUNCTION_TYPE*)(cumul + (maxSymbolValue + 2));
+ U16* cumul = (U16*)workSpace; /* size = maxSV1 */
+ FSE_FUNCTION_TYPE* const tableSymbol = (FSE_FUNCTION_TYPE*)(cumul + (maxSV1+1)); /* size = tableSize */
U32 highThreshold = tableSize-1;
- if ((size_t)workSpace & 3) return ERROR(GENERIC); /* Must be 4 byte aligned */
+ assert(((size_t)workSpace & 1) == 0); /* Must be 2 bytes-aligned */
if (FSE_BUILD_CTABLE_WORKSPACE_SIZE(maxSymbolValue, tableLog) > wkspSize) return ERROR(tableLog_tooLarge);
/* CTable header */
tableU16[-2] = (U16) tableLog;
@@ -98,20 +99,61 @@ size_t FSE_buildCTable_wksp(FSE_CTable* ct,
/* symbol start positions */
{ U32 u;
cumul[0] = 0;
- for (u=1; u <= maxSymbolValue+1; u++) {
+ for (u=1; u <= maxSV1; u++) {
if (normalizedCounter[u-1]==-1) { /* Low proba symbol */
cumul[u] = cumul[u-1] + 1;
tableSymbol[highThreshold--] = (FSE_FUNCTION_TYPE)(u-1);
} else {
- cumul[u] = cumul[u-1] + normalizedCounter[u-1];
+ assert(normalizedCounter[u-1] >= 0);
+ cumul[u] = cumul[u-1] + (U16)normalizedCounter[u-1];
+ assert(cumul[u] >= cumul[u-1]); /* no overflow */
} }
- cumul[maxSymbolValue+1] = tableSize+1;
+ cumul[maxSV1] = (U16)(tableSize+1);
}
/* Spread symbols */
- { U32 position = 0;
+ if (highThreshold == tableSize - 1) {
+ /* Case for no low prob count symbols. Lay down 8 bytes at a time
+ * to reduce branch misses since we are operating on a small block
+ */
+ BYTE* const spread = tableSymbol + tableSize; /* size = tableSize + 8 (may write beyond tableSize) */
+ { U64 const add = 0x0101010101010101ull;
+ size_t pos = 0;
+ U64 sv = 0;
+ U32 s;
+ for (s=0; s<maxSV1; ++s, sv += add) {
+ int i;
+ int const n = normalizedCounter[s];
+ MEM_write64(spread + pos, sv);
+ for (i = 8; i < n; i += 8) {
+ MEM_write64(spread + pos + i, sv);
+ }
+ assert(n>=0);
+ pos += (size_t)n;
+ }
+ }
+ /* Spread symbols across the table. Lack of lowprob symbols means that
+ * we don't need variable sized inner loop, so we can unroll the loop and
+ * reduce branch misses.
+ */
+ { size_t position = 0;
+ size_t s;
+ size_t const unroll = 2; /* Experimentally determined optimal unroll */
+ assert(tableSize % unroll == 0); /* FSE_MIN_TABLELOG is 5 */
+ for (s = 0; s < (size_t)tableSize; s += unroll) {
+ size_t u;
+ for (u = 0; u < unroll; ++u) {
+ size_t const uPosition = (position + (u * step)) & tableMask;
+ tableSymbol[uPosition] = spread[s + u];
+ }
+ position = (position + (unroll * step)) & tableMask;
+ }
+ assert(position == 0); /* Must have initialized all positions */
+ }
+ } else {
+ U32 position = 0;
U32 symbol;
- for (symbol=0; symbol<=maxSymbolValue; symbol++) {
+ for (symbol=0; symbol<maxSV1; symbol++) {
int nbOccurrences;
int const freq = normalizedCounter[symbol];
for (nbOccurrences=0; nbOccurrences<freq; nbOccurrences++) {
@@ -120,7 +162,6 @@ size_t FSE_buildCTable_wksp(FSE_CTable* ct,
while (position > highThreshold)
position = (position + step) & tableMask; /* Low proba area */
} }
-
assert(position==0); /* Must have initialized all positions */
}
@@ -144,16 +185,17 @@ size_t FSE_buildCTable_wksp(FSE_CTable* ct,
case -1:
case 1:
symbolTT[s].deltaNbBits = (tableLog << 16) - (1<<tableLog);
- symbolTT[s].deltaFindState = total - 1;
+ assert(total <= INT_MAX);
+ symbolTT[s].deltaFindState = (int)(total - 1);
total ++;
break;
default :
- {
- U32 const maxBitsOut = tableLog - BIT_highbit32 (normalizedCounter[s]-1);
- U32 const minStatePlus = normalizedCounter[s] << maxBitsOut;
+ assert(normalizedCounter[s] > 1);
+ { U32 const maxBitsOut = tableLog - BIT_highbit32 ((U32)normalizedCounter[s]-1);
+ U32 const minStatePlus = (U32)normalizedCounter[s] << maxBitsOut;
symbolTT[s].deltaNbBits = (maxBitsOut << 16) - minStatePlus;
- symbolTT[s].deltaFindState = total - normalizedCounter[s];
- total += normalizedCounter[s];
+ symbolTT[s].deltaFindState = (int)(total - (unsigned)normalizedCounter[s]);
+ total += (unsigned)normalizedCounter[s];
} } } }
#if 0 /* debug : symbol costs */
@@ -164,32 +206,26 @@ size_t FSE_buildCTable_wksp(FSE_CTable* ct,
symbol, normalizedCounter[symbol],
FSE_getMaxNbBits(symbolTT, symbol),
(double)FSE_bitCost(symbolTT, tableLog, symbol, 8) / 256);
- }
- }
+ } }
#endif
return 0;
}
-#ifndef ZSTD_NO_UNUSED_FUNCTIONS
-size_t FSE_buildCTable(FSE_CTable* ct, const short* normalizedCounter, unsigned maxSymbolValue, unsigned tableLog)
-{
- FSE_FUNCTION_TYPE tableSymbol[FSE_MAX_TABLESIZE]; /* memset() is not necessary, even if static analyzer complain about it */
- return FSE_buildCTable_wksp(ct, normalizedCounter, maxSymbolValue, tableLog, tableSymbol, sizeof(tableSymbol));
-}
-#endif
-
#ifndef FSE_COMMONDEFS_ONLY
-
/*-**************************************************************
* FSE NCount encoding
****************************************************************/
size_t FSE_NCountWriteBound(unsigned maxSymbolValue, unsigned tableLog)
{
- size_t const maxHeaderSize = (((maxSymbolValue+1) * tableLog) >> 3) + 3;
+ size_t const maxHeaderSize = (((maxSymbolValue+1) * tableLog
+ + 4 /* bitCount initialized at 4 */
+ + 2 /* first two symbols may use one additional bit each */) / 8)
+ + 1 /* round up to whole nb bytes */
+ + 2 /* additional two bytes for bitstream flush */;
return maxSymbolValue ? maxHeaderSize : FSE_NCOUNTBOUND; /* maxSymbolValue==0 ? use default */
}
diff --git a/thirdparty/zstd/compress/huf_compress.c b/thirdparty/zstd/compress/huf_compress.c
index 485906e678..2b3d6adc2a 100644
--- a/thirdparty/zstd/compress/huf_compress.c
+++ b/thirdparty/zstd/compress/huf_compress.c
@@ -53,6 +53,28 @@ unsigned HUF_optimalTableLog(unsigned maxTableLog, size_t srcSize, unsigned maxS
/* *******************************************************
* HUF : Huffman block compression
*********************************************************/
+#define HUF_WORKSPACE_MAX_ALIGNMENT 8
+
+static void* HUF_alignUpWorkspace(void* workspace, size_t* workspaceSizePtr, size_t align)
+{
+ size_t const mask = align - 1;
+ size_t const rem = (size_t)workspace & mask;
+ size_t const add = (align - rem) & mask;
+ BYTE* const aligned = (BYTE*)workspace + add;
+ assert((align & (align - 1)) == 0); /* pow 2 */
+ assert(align <= HUF_WORKSPACE_MAX_ALIGNMENT);
+ if (*workspaceSizePtr >= add) {
+ assert(add < align);
+ assert(((size_t)aligned & mask) == 0);
+ *workspaceSizePtr -= add;
+ return aligned;
+ } else {
+ *workspaceSizePtr = 0;
+ return NULL;
+ }
+}
+
+
/* HUF_compressWeights() :
* Same as FSE_compress(), but dedicated to huff0's weights compression.
* The use case needs much less stack memory.
@@ -75,7 +97,7 @@ static size_t HUF_compressWeights(void* dst, size_t dstSize, const void* weightT
unsigned maxSymbolValue = HUF_TABLELOG_MAX;
U32 tableLog = MAX_FSE_TABLELOG_FOR_HUFF_HEADER;
- HUF_CompressWeightsWksp* wksp = (HUF_CompressWeightsWksp*)workspace;
+ HUF_CompressWeightsWksp* wksp = (HUF_CompressWeightsWksp*)HUF_alignUpWorkspace(workspace, &workspaceSize, ZSTD_ALIGNOF(U32));
if (workspaceSize < sizeof(HUF_CompressWeightsWksp)) return ERROR(GENERIC);
@@ -106,6 +128,40 @@ static size_t HUF_compressWeights(void* dst, size_t dstSize, const void* weightT
return (size_t)(op-ostart);
}
+static size_t HUF_getNbBits(HUF_CElt elt)
+{
+ return elt & 0xFF;
+}
+
+static size_t HUF_getNbBitsFast(HUF_CElt elt)
+{
+ return elt;
+}
+
+static size_t HUF_getValue(HUF_CElt elt)
+{
+ return elt & ~0xFF;
+}
+
+static size_t HUF_getValueFast(HUF_CElt elt)
+{
+ return elt;
+}
+
+static void HUF_setNbBits(HUF_CElt* elt, size_t nbBits)
+{
+ assert(nbBits <= HUF_TABLELOG_ABSOLUTEMAX);
+ *elt = nbBits;
+}
+
+static void HUF_setValue(HUF_CElt* elt, size_t value)
+{
+ size_t const nbBits = HUF_getNbBits(*elt);
+ if (nbBits > 0) {
+ assert((value >> nbBits) == 0);
+ *elt |= value << (sizeof(HUF_CElt) * 8 - nbBits);
+ }
+}
typedef struct {
HUF_CompressWeightsWksp wksp;
@@ -117,9 +173,10 @@ size_t HUF_writeCTable_wksp(void* dst, size_t maxDstSize,
const HUF_CElt* CTable, unsigned maxSymbolValue, unsigned huffLog,
void* workspace, size_t workspaceSize)
{
+ HUF_CElt const* const ct = CTable + 1;
BYTE* op = (BYTE*)dst;
U32 n;
- HUF_WriteCTableWksp* wksp = (HUF_WriteCTableWksp*)workspace;
+ HUF_WriteCTableWksp* wksp = (HUF_WriteCTableWksp*)HUF_alignUpWorkspace(workspace, &workspaceSize, ZSTD_ALIGNOF(U32));
/* check conditions */
if (workspaceSize < sizeof(HUF_WriteCTableWksp)) return ERROR(GENERIC);
@@ -130,9 +187,10 @@ size_t HUF_writeCTable_wksp(void* dst, size_t maxDstSize,
for (n=1; n<huffLog+1; n++)
wksp->bitsToWeight[n] = (BYTE)(huffLog + 1 - n);
for (n=0; n<maxSymbolValue; n++)
- wksp->huffWeight[n] = wksp->bitsToWeight[CTable[n].nbBits];
+ wksp->huffWeight[n] = wksp->bitsToWeight[HUF_getNbBits(ct[n])];
/* attempt weights compression by FSE */
+ if (maxDstSize < 1) return ERROR(dstSize_tooSmall);
{ 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;
@@ -166,6 +224,7 @@ size_t HUF_readCTable (HUF_CElt* CTable, unsigned* maxSymbolValuePtr, const void
U32 rankVal[HUF_TABLELOG_ABSOLUTEMAX + 1]; /* large enough for values from 0 to 16 */
U32 tableLog = 0;
U32 nbSymbols = 0;
+ HUF_CElt* const ct = CTable + 1;
/* get symbol weights */
CHECK_V_F(readSize, HUF_readStats(huffWeight, HUF_SYMBOLVALUE_MAX+1, rankVal, &nbSymbols, &tableLog, src, srcSize));
@@ -175,6 +234,8 @@ size_t HUF_readCTable (HUF_CElt* CTable, unsigned* maxSymbolValuePtr, const void
if (tableLog > HUF_TABLELOG_MAX) return ERROR(tableLog_tooLarge);
if (nbSymbols > *maxSymbolValuePtr+1) return ERROR(maxSymbolValue_tooSmall);
+ CTable[0] = tableLog;
+
/* Prepare base value per rank */
{ U32 n, nextRankStart = 0;
for (n=1; n<=tableLog; n++) {
@@ -186,13 +247,13 @@ size_t HUF_readCTable (HUF_CElt* CTable, unsigned* maxSymbolValuePtr, const void
/* fill nbBits */
{ U32 n; for (n=0; n<nbSymbols; n++) {
const U32 w = huffWeight[n];
- CTable[n].nbBits = (BYTE)(tableLog + 1 - w) & -(w != 0);
+ HUF_setNbBits(ct + n, (BYTE)(tableLog + 1 - w) & -(w != 0));
} }
/* fill val */
{ U16 nbPerRank[HUF_TABLELOG_MAX+2] = {0}; /* support w=0=>n=tableLog+1 */
U16 valPerRank[HUF_TABLELOG_MAX+2] = {0};
- { U32 n; for (n=0; n<nbSymbols; n++) nbPerRank[CTable[n].nbBits]++; }
+ { U32 n; for (n=0; n<nbSymbols; n++) nbPerRank[HUF_getNbBits(ct[n])]++; }
/* determine stating value per rank */
valPerRank[tableLog+1] = 0; /* for w==0 */
{ U16 min = 0;
@@ -202,18 +263,18 @@ size_t HUF_readCTable (HUF_CElt* CTable, unsigned* maxSymbolValuePtr, const void
min >>= 1;
} }
/* assign value within rank, symbol order */
- { U32 n; for (n=0; n<nbSymbols; n++) CTable[n].val = valPerRank[CTable[n].nbBits]++; }
+ { U32 n; for (n=0; n<nbSymbols; n++) HUF_setValue(ct + n, valPerRank[HUF_getNbBits(ct[n])]++); }
}
*maxSymbolValuePtr = nbSymbols - 1;
return readSize;
}
-U32 HUF_getNbBits(const void* symbolTable, U32 symbolValue)
+U32 HUF_getNbBitsFromCTable(HUF_CElt const* CTable, U32 symbolValue)
{
- const HUF_CElt* table = (const HUF_CElt*)symbolTable;
+ const HUF_CElt* ct = CTable + 1;
assert(symbolValue <= HUF_SYMBOLVALUE_MAX);
- return table[symbolValue].nbBits;
+ return (U32)HUF_getNbBits(ct[symbolValue]);
}
@@ -367,22 +428,118 @@ static U32 HUF_setMaxHeight(nodeElt* huffNode, U32 lastNonNull, U32 maxNbBits)
}
typedef struct {
- U32 base;
- U32 curr;
+ U16 base;
+ U16 curr;
} rankPos;
typedef nodeElt huffNodeTable[HUF_CTABLE_WORKSPACE_SIZE_U32];
-#define RANK_POSITION_TABLE_SIZE 32
+/* Number of buckets available for HUF_sort() */
+#define RANK_POSITION_TABLE_SIZE 192
typedef struct {
huffNodeTable huffNodeTbl;
rankPos rankPosition[RANK_POSITION_TABLE_SIZE];
} HUF_buildCTable_wksp_tables;
+/* RANK_POSITION_DISTINCT_COUNT_CUTOFF == Cutoff point in HUF_sort() buckets for which we use log2 bucketing.
+ * Strategy is to use as many buckets as possible for representing distinct
+ * counts while using the remainder to represent all "large" counts.
+ *
+ * To satisfy this requirement for 192 buckets, we can do the following:
+ * Let buckets 0-166 represent distinct counts of [0, 166]
+ * Let buckets 166 to 192 represent all remaining counts up to RANK_POSITION_MAX_COUNT_LOG using log2 bucketing.
+ */
+#define RANK_POSITION_MAX_COUNT_LOG 32
+#define RANK_POSITION_LOG_BUCKETS_BEGIN (RANK_POSITION_TABLE_SIZE - 1) - RANK_POSITION_MAX_COUNT_LOG - 1 /* == 158 */
+#define RANK_POSITION_DISTINCT_COUNT_CUTOFF RANK_POSITION_LOG_BUCKETS_BEGIN + BIT_highbit32(RANK_POSITION_LOG_BUCKETS_BEGIN) /* == 166 */
+
+/* Return the appropriate bucket index for a given count. See definition of
+ * RANK_POSITION_DISTINCT_COUNT_CUTOFF for explanation of bucketing strategy.
+ */
+static U32 HUF_getIndex(U32 const count) {
+ return (count < RANK_POSITION_DISTINCT_COUNT_CUTOFF)
+ ? count
+ : BIT_highbit32(count) + RANK_POSITION_LOG_BUCKETS_BEGIN;
+}
+
+/* Helper swap function for HUF_quickSortPartition() */
+static void HUF_swapNodes(nodeElt* a, nodeElt* b) {
+ nodeElt tmp = *a;
+ *a = *b;
+ *b = tmp;
+}
+
+/* Returns 0 if the huffNode array is not sorted by descending count */
+MEM_STATIC int HUF_isSorted(nodeElt huffNode[], U32 const maxSymbolValue1) {
+ U32 i;
+ for (i = 1; i < maxSymbolValue1; ++i) {
+ if (huffNode[i].count > huffNode[i-1].count) {
+ return 0;
+ }
+ }
+ return 1;
+}
+
+/* Insertion sort by descending order */
+HINT_INLINE void HUF_insertionSort(nodeElt huffNode[], int const low, int const high) {
+ int i;
+ int const size = high-low+1;
+ huffNode += low;
+ for (i = 1; i < size; ++i) {
+ nodeElt const key = huffNode[i];
+ int j = i - 1;
+ while (j >= 0 && huffNode[j].count < key.count) {
+ huffNode[j + 1] = huffNode[j];
+ j--;
+ }
+ huffNode[j + 1] = key;
+ }
+}
+
+/* Pivot helper function for quicksort. */
+static int HUF_quickSortPartition(nodeElt arr[], int const low, int const high) {
+ /* Simply select rightmost element as pivot. "Better" selectors like
+ * median-of-three don't experimentally appear to have any benefit.
+ */
+ U32 const pivot = arr[high].count;
+ int i = low - 1;
+ int j = low;
+ for ( ; j < high; j++) {
+ if (arr[j].count > pivot) {
+ i++;
+ HUF_swapNodes(&arr[i], &arr[j]);
+ }
+ }
+ HUF_swapNodes(&arr[i + 1], &arr[high]);
+ return i + 1;
+}
+
+/* Classic quicksort by descending with partially iterative calls
+ * to reduce worst case callstack size.
+ */
+static void HUF_simpleQuickSort(nodeElt arr[], int low, int high) {
+ int const kInsertionSortThreshold = 8;
+ if (high - low < kInsertionSortThreshold) {
+ HUF_insertionSort(arr, low, high);
+ return;
+ }
+ while (low < high) {
+ int const idx = HUF_quickSortPartition(arr, low, high);
+ if (idx - low < high - idx) {
+ HUF_simpleQuickSort(arr, low, idx - 1);
+ low = idx + 1;
+ } else {
+ HUF_simpleQuickSort(arr, idx + 1, high);
+ high = idx - 1;
+ }
+ }
+}
+
/**
* HUF_sort():
* Sorts the symbols [0, maxSymbolValue] by count[symbol] in decreasing order.
+ * This is a typical bucket sorting strategy that uses either quicksort or insertion sort to sort each bucket.
*
* @param[out] huffNode Sorted symbols by decreasing count. Only members `.count` and `.byte` are filled.
* Must have (maxSymbolValue + 1) entries.
@@ -390,44 +547,52 @@ typedef struct {
* @param[in] maxSymbolValue Maximum symbol value.
* @param rankPosition This is a scratch workspace. Must have RANK_POSITION_TABLE_SIZE entries.
*/
-static void HUF_sort(nodeElt* huffNode, const unsigned* count, U32 maxSymbolValue, rankPos* rankPosition)
-{
- int n;
- int const maxSymbolValue1 = (int)maxSymbolValue + 1;
+static void HUF_sort(nodeElt huffNode[], const unsigned count[], U32 const maxSymbolValue, rankPos rankPosition[]) {
+ U32 n;
+ U32 const maxSymbolValue1 = maxSymbolValue+1;
/* Compute base and set curr to base.
- * For symbol s let lowerRank = BIT_highbit32(count[n]+1) and rank = lowerRank + 1.
- * Then 2^lowerRank <= count[n]+1 <= 2^rank.
+ * For symbol s let lowerRank = HUF_getIndex(count[n]) and rank = lowerRank + 1.
+ * See HUF_getIndex to see bucketing strategy.
* We attribute each symbol to lowerRank's base value, because we want to know where
* each rank begins in the output, so for rank R we want to count ranks R+1 and above.
*/
ZSTD_memset(rankPosition, 0, sizeof(*rankPosition) * RANK_POSITION_TABLE_SIZE);
for (n = 0; n < maxSymbolValue1; ++n) {
- U32 lowerRank = BIT_highbit32(count[n] + 1);
+ U32 lowerRank = HUF_getIndex(count[n]);
+ assert(lowerRank < RANK_POSITION_TABLE_SIZE - 1);
rankPosition[lowerRank].base++;
}
+
assert(rankPosition[RANK_POSITION_TABLE_SIZE - 1].base == 0);
+ /* Set up the rankPosition table */
for (n = RANK_POSITION_TABLE_SIZE - 1; n > 0; --n) {
rankPosition[n-1].base += rankPosition[n].base;
rankPosition[n-1].curr = rankPosition[n-1].base;
}
- /* Sort */
+
+ /* Insert each symbol into their appropriate bucket, setting up rankPosition table. */
for (n = 0; n < maxSymbolValue1; ++n) {
U32 const c = count[n];
- U32 const r = BIT_highbit32(c+1) + 1;
- U32 pos = rankPosition[r].curr++;
- /* Insert into the correct position in the rank.
- * We have at most 256 symbols, so this insertion should be fine.
- */
- while ((pos > rankPosition[r].base) && (c > huffNode[pos-1].count)) {
- huffNode[pos] = huffNode[pos-1];
- pos--;
- }
+ U32 const r = HUF_getIndex(c) + 1;
+ U32 const pos = rankPosition[r].curr++;
+ assert(pos < maxSymbolValue1);
huffNode[pos].count = c;
huffNode[pos].byte = (BYTE)n;
}
-}
+ /* Sort each bucket. */
+ for (n = RANK_POSITION_DISTINCT_COUNT_CUTOFF; n < RANK_POSITION_TABLE_SIZE - 1; ++n) {
+ U32 const bucketSize = rankPosition[n].curr-rankPosition[n].base;
+ U32 const bucketStartIdx = rankPosition[n].base;
+ if (bucketSize > 1) {
+ assert(bucketStartIdx < maxSymbolValue1);
+ HUF_simpleQuickSort(huffNode + bucketStartIdx, 0, bucketSize-1);
+ }
+ }
+
+ assert(HUF_isSorted(huffNode, maxSymbolValue1));
+}
/** HUF_buildCTable_wksp() :
* Same as HUF_buildCTable(), but using externally allocated scratch buffer.
@@ -490,6 +655,7 @@ static int HUF_buildTree(nodeElt* huffNode, U32 maxSymbolValue)
*/
static void HUF_buildCTableFromTree(HUF_CElt* CTable, nodeElt const* huffNode, int nonNullRank, U32 maxSymbolValue, U32 maxNbBits)
{
+ HUF_CElt* const ct = CTable + 1;
/* fill result into ctable (val, nbBits) */
int n;
U16 nbPerRank[HUF_TABLELOG_MAX+1] = {0};
@@ -505,20 +671,20 @@ static void HUF_buildCTableFromTree(HUF_CElt* CTable, nodeElt const* huffNode, i
min >>= 1;
} }
for (n=0; n<alphabetSize; n++)
- CTable[huffNode[n].byte].nbBits = huffNode[n].nbBits; /* push nbBits per symbol, symbol order */
+ HUF_setNbBits(ct + huffNode[n].byte, huffNode[n].nbBits); /* push nbBits per symbol, symbol order */
for (n=0; n<alphabetSize; n++)
- CTable[n].val = valPerRank[CTable[n].nbBits]++; /* assign value within rank, symbol order */
+ HUF_setValue(ct + n, valPerRank[HUF_getNbBits(ct[n])]++); /* assign value within rank, symbol order */
+ CTable[0] = maxNbBits;
}
-size_t HUF_buildCTable_wksp (HUF_CElt* tree, const unsigned* count, U32 maxSymbolValue, U32 maxNbBits, void* workSpace, size_t wkspSize)
+size_t HUF_buildCTable_wksp (HUF_CElt* CTable, const unsigned* count, U32 maxSymbolValue, U32 maxNbBits, void* workSpace, size_t wkspSize)
{
- HUF_buildCTable_wksp_tables* const wksp_tables = (HUF_buildCTable_wksp_tables*)workSpace;
+ HUF_buildCTable_wksp_tables* const wksp_tables = (HUF_buildCTable_wksp_tables*)HUF_alignUpWorkspace(workSpace, &wkspSize, ZSTD_ALIGNOF(U32));
nodeElt* const huffNode0 = wksp_tables->huffNodeTbl;
nodeElt* const huffNode = huffNode0+1;
int nonNullRank;
/* safety checks */
- if (((size_t)workSpace & 3) != 0) return ERROR(GENERIC); /* must be aligned on 4-bytes boundaries */
if (wkspSize < sizeof(HUF_buildCTable_wksp_tables))
return ERROR(workSpace_tooSmall);
if (maxNbBits == 0) maxNbBits = HUF_TABLELOG_DEFAULT;
@@ -536,96 +702,334 @@ size_t HUF_buildCTable_wksp (HUF_CElt* tree, const unsigned* count, U32 maxSymbo
maxNbBits = HUF_setMaxHeight(huffNode, (U32)nonNullRank, maxNbBits);
if (maxNbBits > HUF_TABLELOG_MAX) return ERROR(GENERIC); /* check fit into table */
- HUF_buildCTableFromTree(tree, huffNode, nonNullRank, maxSymbolValue, maxNbBits);
+ HUF_buildCTableFromTree(CTable, huffNode, nonNullRank, maxSymbolValue, maxNbBits);
return maxNbBits;
}
size_t HUF_estimateCompressedSize(const HUF_CElt* CTable, const unsigned* count, unsigned maxSymbolValue)
{
+ HUF_CElt const* ct = CTable + 1;
size_t nbBits = 0;
int s;
for (s = 0; s <= (int)maxSymbolValue; ++s) {
- nbBits += CTable[s].nbBits * count[s];
+ nbBits += HUF_getNbBits(ct[s]) * count[s];
}
return nbBits >> 3;
}
int HUF_validateCTable(const HUF_CElt* CTable, const unsigned* count, unsigned maxSymbolValue) {
+ HUF_CElt const* ct = CTable + 1;
int bad = 0;
int s;
for (s = 0; s <= (int)maxSymbolValue; ++s) {
- bad |= (count[s] != 0) & (CTable[s].nbBits == 0);
+ bad |= (count[s] != 0) & (HUF_getNbBits(ct[s]) == 0);
}
return !bad;
}
size_t HUF_compressBound(size_t size) { return HUF_COMPRESSBOUND(size); }
+/** HUF_CStream_t:
+ * Huffman uses its own BIT_CStream_t implementation.
+ * There are three major differences from BIT_CStream_t:
+ * 1. HUF_addBits() takes a HUF_CElt (size_t) which is
+ * the pair (nbBits, value) in the format:
+ * format:
+ * - Bits [0, 4) = nbBits
+ * - Bits [4, 64 - nbBits) = 0
+ * - Bits [64 - nbBits, 64) = value
+ * 2. The bitContainer is built from the upper bits and
+ * right shifted. E.g. to add a new value of N bits
+ * you right shift the bitContainer by N, then or in
+ * the new value into the N upper bits.
+ * 3. The bitstream has two bit containers. You can add
+ * bits to the second container and merge them into
+ * the first container.
+ */
+
+#define HUF_BITS_IN_CONTAINER (sizeof(size_t) * 8)
+
+typedef struct {
+ size_t bitContainer[2];
+ size_t bitPos[2];
+
+ BYTE* startPtr;
+ BYTE* ptr;
+ BYTE* endPtr;
+} HUF_CStream_t;
+
+/**! HUF_initCStream():
+ * Initializes the bitstream.
+ * @returns 0 or an error code.
+ */
+static size_t HUF_initCStream(HUF_CStream_t* bitC,
+ void* startPtr, size_t dstCapacity)
+{
+ ZSTD_memset(bitC, 0, sizeof(*bitC));
+ bitC->startPtr = (BYTE*)startPtr;
+ bitC->ptr = bitC->startPtr;
+ bitC->endPtr = bitC->startPtr + dstCapacity - sizeof(bitC->bitContainer[0]);
+ if (dstCapacity <= sizeof(bitC->bitContainer[0])) return ERROR(dstSize_tooSmall);
+ return 0;
+}
+
+/*! HUF_addBits():
+ * Adds the symbol stored in HUF_CElt elt to the bitstream.
+ *
+ * @param elt The element we're adding. This is a (nbBits, value) pair.
+ * See the HUF_CStream_t docs for the format.
+ * @param idx Insert into the bitstream at this idx.
+ * @param kFast This is a template parameter. If the bitstream is guaranteed
+ * to have at least 4 unused bits after this call it may be 1,
+ * otherwise it must be 0. HUF_addBits() is faster when fast is set.
+ */
+FORCE_INLINE_TEMPLATE void HUF_addBits(HUF_CStream_t* bitC, HUF_CElt elt, int idx, int kFast)
+{
+ assert(idx <= 1);
+ assert(HUF_getNbBits(elt) <= HUF_TABLELOG_ABSOLUTEMAX);
+ /* This is efficient on x86-64 with BMI2 because shrx
+ * only reads the low 6 bits of the register. The compiler
+ * knows this and elides the mask. When fast is set,
+ * every operation can use the same value loaded from elt.
+ */
+ bitC->bitContainer[idx] >>= HUF_getNbBits(elt);
+ bitC->bitContainer[idx] |= kFast ? HUF_getValueFast(elt) : HUF_getValue(elt);
+ /* We only read the low 8 bits of bitC->bitPos[idx] so it
+ * doesn't matter that the high bits have noise from the value.
+ */
+ bitC->bitPos[idx] += HUF_getNbBitsFast(elt);
+ assert((bitC->bitPos[idx] & 0xFF) <= HUF_BITS_IN_CONTAINER);
+ /* The last 4-bits of elt are dirty if fast is set,
+ * so we must not be overwriting bits that have already been
+ * inserted into the bit container.
+ */
+#if DEBUGLEVEL >= 1
+ {
+ size_t const nbBits = HUF_getNbBits(elt);
+ size_t const dirtyBits = nbBits == 0 ? 0 : BIT_highbit32((U32)nbBits) + 1;
+ (void)dirtyBits;
+ /* Middle bits are 0. */
+ assert(((elt >> dirtyBits) << (dirtyBits + nbBits)) == 0);
+ /* We didn't overwrite any bits in the bit container. */
+ assert(!kFast || (bitC->bitPos[idx] & 0xFF) <= HUF_BITS_IN_CONTAINER);
+ (void)dirtyBits;
+ }
+#endif
+}
+
+FORCE_INLINE_TEMPLATE void HUF_zeroIndex1(HUF_CStream_t* bitC)
+{
+ bitC->bitContainer[1] = 0;
+ bitC->bitPos[1] = 0;
+}
+
+/*! HUF_mergeIndex1() :
+ * Merges the bit container @ index 1 into the bit container @ index 0
+ * and zeros the bit container @ index 1.
+ */
+FORCE_INLINE_TEMPLATE void HUF_mergeIndex1(HUF_CStream_t* bitC)
+{
+ assert((bitC->bitPos[1] & 0xFF) < HUF_BITS_IN_CONTAINER);
+ bitC->bitContainer[0] >>= (bitC->bitPos[1] & 0xFF);
+ bitC->bitContainer[0] |= bitC->bitContainer[1];
+ bitC->bitPos[0] += bitC->bitPos[1];
+ assert((bitC->bitPos[0] & 0xFF) <= HUF_BITS_IN_CONTAINER);
+}
+
+/*! HUF_flushBits() :
+* Flushes the bits in the bit container @ index 0.
+*
+* @post bitPos will be < 8.
+* @param kFast If kFast is set then we must know a-priori that
+* the bit container will not overflow.
+*/
+FORCE_INLINE_TEMPLATE void HUF_flushBits(HUF_CStream_t* bitC, int kFast)
+{
+ /* The upper bits of bitPos are noisy, so we must mask by 0xFF. */
+ size_t const nbBits = bitC->bitPos[0] & 0xFF;
+ size_t const nbBytes = nbBits >> 3;
+ /* The top nbBits bits of bitContainer are the ones we need. */
+ size_t const bitContainer = bitC->bitContainer[0] >> (HUF_BITS_IN_CONTAINER - nbBits);
+ /* Mask bitPos to account for the bytes we consumed. */
+ bitC->bitPos[0] &= 7;
+ assert(nbBits > 0);
+ assert(nbBits <= sizeof(bitC->bitContainer[0]) * 8);
+ assert(bitC->ptr <= bitC->endPtr);
+ MEM_writeLEST(bitC->ptr, bitContainer);
+ bitC->ptr += nbBytes;
+ assert(!kFast || bitC->ptr <= bitC->endPtr);
+ if (!kFast && bitC->ptr > bitC->endPtr) bitC->ptr = bitC->endPtr;
+ /* bitContainer doesn't need to be modified because the leftover
+ * bits are already the top bitPos bits. And we don't care about
+ * noise in the lower values.
+ */
+}
+
+/*! HUF_endMark()
+ * @returns The Huffman stream end mark: A 1-bit value = 1.
+ */
+static HUF_CElt HUF_endMark(void)
+{
+ HUF_CElt endMark;
+ HUF_setNbBits(&endMark, 1);
+ HUF_setValue(&endMark, 1);
+ return endMark;
+}
+
+/*! HUF_closeCStream() :
+ * @return Size of CStream, in bytes,
+ * or 0 if it could not fit into dstBuffer */
+static size_t HUF_closeCStream(HUF_CStream_t* bitC)
+{
+ HUF_addBits(bitC, HUF_endMark(), /* idx */ 0, /* kFast */ 0);
+ HUF_flushBits(bitC, /* kFast */ 0);
+ {
+ size_t const nbBits = bitC->bitPos[0] & 0xFF;
+ if (bitC->ptr >= bitC->endPtr) return 0; /* overflow detected */
+ return (bitC->ptr - bitC->startPtr) + (nbBits > 0);
+ }
+}
+
FORCE_INLINE_TEMPLATE void
-HUF_encodeSymbol(BIT_CStream_t* bitCPtr, U32 symbol, const HUF_CElt* CTable)
+HUF_encodeSymbol(HUF_CStream_t* bitCPtr, U32 symbol, const HUF_CElt* CTable, int idx, int fast)
{
- BIT_addBitsFast(bitCPtr, CTable[symbol].val, CTable[symbol].nbBits);
+ HUF_addBits(bitCPtr, CTable[symbol], idx, fast);
}
-#define HUF_FLUSHBITS(s) BIT_flushBits(s)
+FORCE_INLINE_TEMPLATE void
+HUF_compress1X_usingCTable_internal_body_loop(HUF_CStream_t* bitC,
+ const BYTE* ip, size_t srcSize,
+ const HUF_CElt* ct,
+ int kUnroll, int kFastFlush, int kLastFast)
+{
+ /* Join to kUnroll */
+ int n = (int)srcSize;
+ int rem = n % kUnroll;
+ if (rem > 0) {
+ for (; rem > 0; --rem) {
+ HUF_encodeSymbol(bitC, ip[--n], ct, 0, /* fast */ 0);
+ }
+ HUF_flushBits(bitC, kFastFlush);
+ }
+ assert(n % kUnroll == 0);
+
+ /* Join to 2 * kUnroll */
+ if (n % (2 * kUnroll)) {
+ int u;
+ for (u = 1; u < kUnroll; ++u) {
+ HUF_encodeSymbol(bitC, ip[n - u], ct, 0, 1);
+ }
+ HUF_encodeSymbol(bitC, ip[n - kUnroll], ct, 0, kLastFast);
+ HUF_flushBits(bitC, kFastFlush);
+ n -= kUnroll;
+ }
+ assert(n % (2 * kUnroll) == 0);
+
+ for (; n>0; n-= 2 * kUnroll) {
+ /* Encode kUnroll symbols into the bitstream @ index 0. */
+ int u;
+ for (u = 1; u < kUnroll; ++u) {
+ HUF_encodeSymbol(bitC, ip[n - u], ct, /* idx */ 0, /* fast */ 1);
+ }
+ HUF_encodeSymbol(bitC, ip[n - kUnroll], ct, /* idx */ 0, /* fast */ kLastFast);
+ HUF_flushBits(bitC, kFastFlush);
+ /* Encode kUnroll symbols into the bitstream @ index 1.
+ * This allows us to start filling the bit container
+ * without any data dependencies.
+ */
+ HUF_zeroIndex1(bitC);
+ for (u = 1; u < kUnroll; ++u) {
+ HUF_encodeSymbol(bitC, ip[n - kUnroll - u], ct, /* idx */ 1, /* fast */ 1);
+ }
+ HUF_encodeSymbol(bitC, ip[n - kUnroll - kUnroll], ct, /* idx */ 1, /* fast */ kLastFast);
+ /* Merge bitstream @ index 1 into the bitstream @ index 0 */
+ HUF_mergeIndex1(bitC);
+ HUF_flushBits(bitC, kFastFlush);
+ }
+ assert(n == 0);
+
+}
-#define HUF_FLUSHBITS_1(stream) \
- if (sizeof((stream)->bitContainer)*8 < HUF_TABLELOG_MAX*2+7) HUF_FLUSHBITS(stream)
+/**
+ * Returns a tight upper bound on the output space needed by Huffman
+ * with 8 bytes buffer to handle over-writes. If the output is at least
+ * this large we don't need to do bounds checks during Huffman encoding.
+ */
+static size_t HUF_tightCompressBound(size_t srcSize, size_t tableLog)
+{
+ return ((srcSize * tableLog) >> 3) + 8;
+}
-#define HUF_FLUSHBITS_2(stream) \
- if (sizeof((stream)->bitContainer)*8 < HUF_TABLELOG_MAX*4+7) HUF_FLUSHBITS(stream)
FORCE_INLINE_TEMPLATE size_t
HUF_compress1X_usingCTable_internal_body(void* dst, size_t dstSize,
const void* src, size_t srcSize,
const HUF_CElt* CTable)
{
+ U32 const tableLog = (U32)CTable[0];
+ HUF_CElt const* ct = CTable + 1;
const BYTE* ip = (const BYTE*) src;
BYTE* const ostart = (BYTE*)dst;
BYTE* const oend = ostart + dstSize;
BYTE* op = ostart;
- size_t n;
- BIT_CStream_t bitC;
+ HUF_CStream_t bitC;
/* init */
if (dstSize < 8) return 0; /* not enough space to compress */
- { size_t const initErr = BIT_initCStream(&bitC, op, (size_t)(oend-op));
+ { size_t const initErr = HUF_initCStream(&bitC, op, (size_t)(oend-op));
if (HUF_isError(initErr)) return 0; }
- n = srcSize & ~3; /* join to mod 4 */
- switch (srcSize & 3)
- {
- case 3 : HUF_encodeSymbol(&bitC, ip[n+ 2], CTable);
- HUF_FLUSHBITS_2(&bitC);
- /* fall-through */
- case 2 : HUF_encodeSymbol(&bitC, ip[n+ 1], CTable);
- HUF_FLUSHBITS_1(&bitC);
- /* fall-through */
- case 1 : HUF_encodeSymbol(&bitC, ip[n+ 0], CTable);
- HUF_FLUSHBITS(&bitC);
- /* fall-through */
- case 0 : /* fall-through */
- default: break;
- }
-
- for (; n>0; n-=4) { /* note : n&3==0 at this stage */
- HUF_encodeSymbol(&bitC, ip[n- 1], CTable);
- HUF_FLUSHBITS_1(&bitC);
- HUF_encodeSymbol(&bitC, ip[n- 2], CTable);
- HUF_FLUSHBITS_2(&bitC);
- HUF_encodeSymbol(&bitC, ip[n- 3], CTable);
- HUF_FLUSHBITS_1(&bitC);
- HUF_encodeSymbol(&bitC, ip[n- 4], CTable);
- HUF_FLUSHBITS(&bitC);
+ if (dstSize < HUF_tightCompressBound(srcSize, (size_t)tableLog) || tableLog > 11)
+ HUF_compress1X_usingCTable_internal_body_loop(&bitC, ip, srcSize, ct, /* kUnroll */ MEM_32bits() ? 2 : 4, /* kFast */ 0, /* kLastFast */ 0);
+ else {
+ if (MEM_32bits()) {
+ switch (tableLog) {
+ case 11:
+ HUF_compress1X_usingCTable_internal_body_loop(&bitC, ip, srcSize, ct, /* kUnroll */ 2, /* kFastFlush */ 1, /* kLastFast */ 0);
+ break;
+ case 10: ZSTD_FALLTHROUGH;
+ case 9: ZSTD_FALLTHROUGH;
+ case 8:
+ HUF_compress1X_usingCTable_internal_body_loop(&bitC, ip, srcSize, ct, /* kUnroll */ 2, /* kFastFlush */ 1, /* kLastFast */ 1);
+ break;
+ case 7: ZSTD_FALLTHROUGH;
+ default:
+ HUF_compress1X_usingCTable_internal_body_loop(&bitC, ip, srcSize, ct, /* kUnroll */ 3, /* kFastFlush */ 1, /* kLastFast */ 1);
+ break;
+ }
+ } else {
+ switch (tableLog) {
+ case 11:
+ HUF_compress1X_usingCTable_internal_body_loop(&bitC, ip, srcSize, ct, /* kUnroll */ 5, /* kFastFlush */ 1, /* kLastFast */ 0);
+ break;
+ case 10:
+ HUF_compress1X_usingCTable_internal_body_loop(&bitC, ip, srcSize, ct, /* kUnroll */ 5, /* kFastFlush */ 1, /* kLastFast */ 1);
+ break;
+ case 9:
+ HUF_compress1X_usingCTable_internal_body_loop(&bitC, ip, srcSize, ct, /* kUnroll */ 6, /* kFastFlush */ 1, /* kLastFast */ 0);
+ break;
+ case 8:
+ HUF_compress1X_usingCTable_internal_body_loop(&bitC, ip, srcSize, ct, /* kUnroll */ 7, /* kFastFlush */ 1, /* kLastFast */ 0);
+ break;
+ case 7:
+ HUF_compress1X_usingCTable_internal_body_loop(&bitC, ip, srcSize, ct, /* kUnroll */ 8, /* kFastFlush */ 1, /* kLastFast */ 0);
+ break;
+ case 6: ZSTD_FALLTHROUGH;
+ default:
+ HUF_compress1X_usingCTable_internal_body_loop(&bitC, ip, srcSize, ct, /* kUnroll */ 9, /* kFastFlush */ 1, /* kLastFast */ 1);
+ break;
+ }
+ }
}
+ assert(bitC.ptr <= bitC.endPtr);
- return BIT_closeCStream(&bitC);
+ return HUF_closeCStream(&bitC);
}
#if DYNAMIC_BMI2
-static TARGET_ATTRIBUTE("bmi2") size_t
+static BMI2_TARGET_ATTRIBUTE size_t
HUF_compress1X_usingCTable_internal_bmi2(void* dst, size_t dstSize,
const void* src, size_t srcSize,
const HUF_CElt* CTable)
@@ -667,9 +1071,13 @@ HUF_compress1X_usingCTable_internal(void* dst, size_t dstSize,
size_t HUF_compress1X_usingCTable(void* dst, size_t dstSize, const void* src, size_t srcSize, const HUF_CElt* CTable)
{
- return HUF_compress1X_usingCTable_internal(dst, dstSize, src, srcSize, CTable, /* bmi2 */ 0);
+ return HUF_compress1X_usingCTable_bmi2(dst, dstSize, src, srcSize, CTable, /* bmi2 */ 0);
}
+size_t HUF_compress1X_usingCTable_bmi2(void* dst, size_t dstSize, const void* src, size_t srcSize, const HUF_CElt* CTable, int bmi2)
+{
+ return HUF_compress1X_usingCTable_internal(dst, dstSize, src, srcSize, CTable, bmi2);
+}
static size_t
HUF_compress4X_usingCTable_internal(void* dst, size_t dstSize,
@@ -689,8 +1097,7 @@ HUF_compress4X_usingCTable_internal(void* dst, size_t dstSize,
assert(op <= oend);
{ CHECK_V_F(cSize, HUF_compress1X_usingCTable_internal(op, (size_t)(oend-op), ip, segmentSize, CTable, bmi2) );
- if (cSize==0) return 0;
- assert(cSize <= 65535);
+ if (cSize == 0 || cSize > 65535) return 0;
MEM_writeLE16(ostart, (U16)cSize);
op += cSize;
}
@@ -698,8 +1105,7 @@ HUF_compress4X_usingCTable_internal(void* dst, size_t dstSize,
ip += segmentSize;
assert(op <= oend);
{ CHECK_V_F(cSize, HUF_compress1X_usingCTable_internal(op, (size_t)(oend-op), ip, segmentSize, CTable, bmi2) );
- if (cSize==0) return 0;
- assert(cSize <= 65535);
+ if (cSize == 0 || cSize > 65535) return 0;
MEM_writeLE16(ostart+2, (U16)cSize);
op += cSize;
}
@@ -707,8 +1113,7 @@ HUF_compress4X_usingCTable_internal(void* dst, size_t dstSize,
ip += segmentSize;
assert(op <= oend);
{ CHECK_V_F(cSize, HUF_compress1X_usingCTable_internal(op, (size_t)(oend-op), ip, segmentSize, CTable, bmi2) );
- if (cSize==0) return 0;
- assert(cSize <= 65535);
+ if (cSize == 0 || cSize > 65535) return 0;
MEM_writeLE16(ostart+4, (U16)cSize);
op += cSize;
}
@@ -717,7 +1122,7 @@ HUF_compress4X_usingCTable_internal(void* dst, size_t dstSize,
assert(op <= oend);
assert(ip <= iend);
{ CHECK_V_F(cSize, HUF_compress1X_usingCTable_internal(op, (size_t)(oend-op), ip, (size_t)(iend-ip), CTable, bmi2) );
- if (cSize==0) return 0;
+ if (cSize == 0 || cSize > 65535) return 0;
op += cSize;
}
@@ -726,7 +1131,12 @@ HUF_compress4X_usingCTable_internal(void* dst, size_t dstSize,
size_t HUF_compress4X_usingCTable(void* dst, size_t dstSize, const void* src, size_t srcSize, const HUF_CElt* CTable)
{
- return HUF_compress4X_usingCTable_internal(dst, dstSize, src, srcSize, CTable, /* bmi2 */ 0);
+ return HUF_compress4X_usingCTable_bmi2(dst, dstSize, src, srcSize, CTable, /* bmi2 */ 0);
+}
+
+size_t HUF_compress4X_usingCTable_bmi2(void* dst, size_t dstSize, const void* src, size_t srcSize, const HUF_CElt* CTable, int bmi2)
+{
+ return HUF_compress4X_usingCTable_internal(dst, dstSize, src, srcSize, CTable, bmi2);
}
typedef enum { HUF_singleStream, HUF_fourStreams } HUF_nbStreams_e;
@@ -750,35 +1160,38 @@ static size_t HUF_compressCTable_internal(
typedef struct {
unsigned count[HUF_SYMBOLVALUE_MAX + 1];
- HUF_CElt CTable[HUF_SYMBOLVALUE_MAX + 1];
+ HUF_CElt CTable[HUF_CTABLE_SIZE_ST(HUF_SYMBOLVALUE_MAX)];
union {
HUF_buildCTable_wksp_tables buildCTable_wksp;
HUF_WriteCTableWksp writeCTable_wksp;
+ U32 hist_wksp[HIST_WKSP_SIZE_U32];
} wksps;
} HUF_compress_tables_t;
+#define SUSPECT_INCOMPRESSIBLE_SAMPLE_SIZE 4096
+#define SUSPECT_INCOMPRESSIBLE_SAMPLE_RATIO 10 /* Must be >= 2 */
+
/* HUF_compress_internal() :
* `workSpace_align4` must be aligned on 4-bytes boundaries,
- * and occupies the same space as a table of HUF_WORKSPACE_SIZE_U32 unsigned */
+ * and occupies the same space as a table of HUF_WORKSPACE_SIZE_U64 unsigned */
static size_t
HUF_compress_internal (void* dst, size_t dstSize,
const void* src, size_t srcSize,
unsigned maxSymbolValue, unsigned huffLog,
HUF_nbStreams_e nbStreams,
- void* workSpace_align4, size_t wkspSize,
+ void* workSpace, size_t wkspSize,
HUF_CElt* oldHufTable, HUF_repeat* repeat, int preferRepeat,
- const int bmi2)
+ const int bmi2, unsigned suspectUncompressible)
{
- HUF_compress_tables_t* const table = (HUF_compress_tables_t*)workSpace_align4;
+ HUF_compress_tables_t* const table = (HUF_compress_tables_t*)HUF_alignUpWorkspace(workSpace, &wkspSize, ZSTD_ALIGNOF(size_t));
BYTE* const ostart = (BYTE*)dst;
BYTE* const oend = ostart + dstSize;
BYTE* op = ostart;
- HUF_STATIC_ASSERT(sizeof(*table) <= HUF_WORKSPACE_SIZE);
- assert(((size_t)workSpace_align4 & 3) == 0); /* must be aligned on 4-bytes boundaries */
+ HUF_STATIC_ASSERT(sizeof(*table) + HUF_WORKSPACE_MAX_ALIGNMENT <= HUF_WORKSPACE_SIZE);
/* checks & inits */
- if (wkspSize < HUF_WORKSPACE_SIZE) return ERROR(workSpace_tooSmall);
+ if (wkspSize < sizeof(*table)) return ERROR(workSpace_tooSmall);
if (!srcSize) return 0; /* Uncompressed */
if (!dstSize) return 0; /* cannot fit anything within dst budget */
if (srcSize > HUF_BLOCKSIZE_MAX) return ERROR(srcSize_wrong); /* current block size limit */
@@ -794,8 +1207,23 @@ HUF_compress_internal (void* dst, size_t dstSize,
nbStreams, oldHufTable, bmi2);
}
+ /* If uncompressible data is suspected, do a smaller sampling first */
+ DEBUG_STATIC_ASSERT(SUSPECT_INCOMPRESSIBLE_SAMPLE_RATIO >= 2);
+ if (suspectUncompressible && srcSize >= (SUSPECT_INCOMPRESSIBLE_SAMPLE_SIZE * SUSPECT_INCOMPRESSIBLE_SAMPLE_RATIO)) {
+ size_t largestTotal = 0;
+ { unsigned maxSymbolValueBegin = maxSymbolValue;
+ CHECK_V_F(largestBegin, HIST_count_simple (table->count, &maxSymbolValueBegin, (const BYTE*)src, SUSPECT_INCOMPRESSIBLE_SAMPLE_SIZE) );
+ largestTotal += largestBegin;
+ }
+ { unsigned maxSymbolValueEnd = maxSymbolValue;
+ CHECK_V_F(largestEnd, HIST_count_simple (table->count, &maxSymbolValueEnd, (const BYTE*)src + srcSize - SUSPECT_INCOMPRESSIBLE_SAMPLE_SIZE, SUSPECT_INCOMPRESSIBLE_SAMPLE_SIZE) );
+ largestTotal += largestEnd;
+ }
+ if (largestTotal <= ((2 * SUSPECT_INCOMPRESSIBLE_SAMPLE_SIZE) >> 7)+4) return 0; /* heuristic : probably not compressible enough */
+ }
+
/* Scan input and build symbol stats */
- { CHECK_V_F(largest, HIST_count_wksp (table->count, &maxSymbolValue, (const BYTE*)src, srcSize, workSpace_align4, wkspSize) );
+ { CHECK_V_F(largest, HIST_count_wksp (table->count, &maxSymbolValue, (const BYTE*)src, srcSize, table->wksps.hist_wksp, sizeof(table->wksps.hist_wksp)) );
if (largest == srcSize) { *ostart = ((const BYTE*)src)[0]; return 1; } /* single symbol, rle */
if (largest <= (srcSize >> 7)+4) return 0; /* heuristic : probably not compressible enough */
}
@@ -820,9 +1248,12 @@ HUF_compress_internal (void* dst, size_t dstSize,
&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 */
- ZSTD_memset(table->CTable + (maxSymbolValue + 1), 0,
- sizeof(table->CTable) - ((maxSymbolValue + 1) * sizeof(HUF_CElt)));
+ }
+ /* Zero unused symbols in CTable, so we can check it for validity */
+ {
+ size_t const ctableSize = HUF_CTABLE_SIZE_ST(maxSymbolValue);
+ size_t const unusedSize = sizeof(table->CTable) - ctableSize * sizeof(HUF_CElt);
+ ZSTD_memset(table->CTable + ctableSize, 0, unusedSize);
}
/* Write table description header */
@@ -859,19 +1290,20 @@ size_t HUF_compress1X_wksp (void* dst, size_t dstSize,
return HUF_compress_internal(dst, dstSize, src, srcSize,
maxSymbolValue, huffLog, HUF_singleStream,
workSpace, wkspSize,
- NULL, NULL, 0, 0 /*bmi2*/);
+ NULL, NULL, 0, 0 /*bmi2*/, 0);
}
size_t HUF_compress1X_repeat (void* dst, size_t dstSize,
const void* src, size_t srcSize,
unsigned maxSymbolValue, unsigned huffLog,
void* workSpace, size_t wkspSize,
- HUF_CElt* hufTable, HUF_repeat* repeat, int preferRepeat, int bmi2)
+ HUF_CElt* hufTable, HUF_repeat* repeat, int preferRepeat,
+ int bmi2, unsigned suspectUncompressible)
{
return HUF_compress_internal(dst, dstSize, src, srcSize,
maxSymbolValue, huffLog, HUF_singleStream,
workSpace, wkspSize, hufTable,
- repeat, preferRepeat, bmi2);
+ repeat, preferRepeat, bmi2, suspectUncompressible);
}
/* HUF_compress4X_repeat():
@@ -885,22 +1317,23 @@ size_t HUF_compress4X_wksp (void* dst, size_t dstSize,
return HUF_compress_internal(dst, dstSize, src, srcSize,
maxSymbolValue, huffLog, HUF_fourStreams,
workSpace, wkspSize,
- NULL, NULL, 0, 0 /*bmi2*/);
+ NULL, NULL, 0, 0 /*bmi2*/, 0);
}
/* HUF_compress4X_repeat():
* compress input using 4 streams.
+ * consider skipping quickly
* re-use an existing huffman compression table */
size_t HUF_compress4X_repeat (void* dst, size_t dstSize,
const void* src, size_t srcSize,
unsigned maxSymbolValue, unsigned huffLog,
void* workSpace, size_t wkspSize,
- HUF_CElt* hufTable, HUF_repeat* repeat, int preferRepeat, int bmi2)
+ HUF_CElt* hufTable, HUF_repeat* repeat, int preferRepeat, int bmi2, unsigned suspectUncompressible)
{
return HUF_compress_internal(dst, dstSize, src, srcSize,
maxSymbolValue, huffLog, HUF_fourStreams,
workSpace, wkspSize,
- hufTable, repeat, preferRepeat, bmi2);
+ hufTable, repeat, preferRepeat, bmi2, suspectUncompressible);
}
#ifndef ZSTD_NO_UNUSED_FUNCTIONS
@@ -918,7 +1351,7 @@ size_t HUF_compress1X (void* dst, size_t dstSize,
const void* src, size_t srcSize,
unsigned maxSymbolValue, unsigned huffLog)
{
- unsigned workSpace[HUF_WORKSPACE_SIZE_U32];
+ U64 workSpace[HUF_WORKSPACE_SIZE_U64];
return HUF_compress1X_wksp(dst, dstSize, src, srcSize, maxSymbolValue, huffLog, workSpace, sizeof(workSpace));
}
@@ -926,7 +1359,7 @@ size_t HUF_compress2 (void* dst, size_t dstSize,
const void* src, size_t srcSize,
unsigned maxSymbolValue, unsigned huffLog)
{
- unsigned workSpace[HUF_WORKSPACE_SIZE_U32];
+ U64 workSpace[HUF_WORKSPACE_SIZE_U64];
return HUF_compress4X_wksp(dst, dstSize, src, srcSize, maxSymbolValue, huffLog, workSpace, sizeof(workSpace));
}
diff --git a/thirdparty/zstd/compress/zstd_compress.c b/thirdparty/zstd/compress/zstd_compress.c
index b7ee2980a7..f06456af92 100644
--- a/thirdparty/zstd/compress/zstd_compress.c
+++ b/thirdparty/zstd/compress/zstd_compress.c
@@ -12,7 +12,6 @@
* Dependencies
***************************************/
#include "../common/zstd_deps.h" /* INT_MAX, ZSTD_memset, ZSTD_memcpy */
-#include "../common/cpu.h"
#include "../common/mem.h"
#include "hist.h" /* HIST_countFast_wksp */
#define FSE_STATIC_LINKING_ONLY /* FSE_encodeSymbol */
@@ -42,6 +41,18 @@
# define ZSTD_COMPRESS_HEAPMODE 0
#endif
+/*!
+ * ZSTD_HASHLOG3_MAX :
+ * Maximum size of the hash table dedicated to find 3-bytes matches,
+ * in log format, aka 17 => 1 << 17 == 128Ki positions.
+ * This structure is only used in zstd_opt.
+ * Since allocation is centralized for all strategies, it has to be known here.
+ * The actual (selected) size of the hash table is then stored in ZSTD_matchState_t.hashLog3,
+ * so that zstd_opt.c doesn't need to know about this constant.
+ */
+#ifndef ZSTD_HASHLOG3_MAX
+# define ZSTD_HASHLOG3_MAX 17
+#endif
/*-*************************************
* Helper functions
@@ -72,10 +83,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.
- */
+ ZSTD_paramSwitch_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)
@@ -88,7 +99,7 @@ static void ZSTD_initCCtx(ZSTD_CCtx* cctx, ZSTD_customMem memManager)
assert(cctx != NULL);
ZSTD_memset(cctx, 0, sizeof(*cctx));
cctx->customMem = memManager;
- cctx->bmi2 = ZSTD_cpuid_bmi2(ZSTD_cpuid());
+ cctx->bmi2 = ZSTD_cpuSupportsBmi2();
{ size_t const err = ZSTD_CCtx_reset(cctx, ZSTD_reset_parameters);
assert(!ZSTD_isError(err));
(void)err;
@@ -214,35 +225,42 @@ static int ZSTD_rowMatchFinderSupported(const ZSTD_strategy strategy) {
/* 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);
+static int ZSTD_rowMatchFinderUsed(const ZSTD_strategy strategy, const ZSTD_paramSwitch_e mode) {
+ assert(mode != ZSTD_ps_auto);
+ return ZSTD_rowMatchFinderSupported(strategy) && (mode == ZSTD_ps_enable);
}
-/* 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))
+/* Returns row matchfinder usage given an initial mode and cParams */
+static ZSTD_paramSwitch_e ZSTD_resolveRowMatchFinderMode(ZSTD_paramSwitch_e mode,
+ const ZSTD_compressionParameters* const cParams) {
+#if defined(ZSTD_ARCH_X86_SSE2) || defined(ZSTD_ARCH_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 (mode != ZSTD_ps_auto) return mode; /* if requested enabled, but no SIMD, we still will use row matchfinder */
+ mode = ZSTD_ps_disable;
if (!ZSTD_rowMatchFinderSupported(cParams->strategy)) return mode;
if (kHasSIMD128) {
- if (cParams->windowLog > 14) mode = ZSTD_urm_enableRowMatchFinder;
+ if (cParams->windowLog > 14) mode = ZSTD_ps_enable;
} else {
- if (cParams->windowLog > 17) mode = ZSTD_urm_enableRowMatchFinder;
+ if (cParams->windowLog > 17) mode = ZSTD_ps_enable;
}
return mode;
}
+/* Returns block splitter usage (generally speaking, when using slower/stronger compression modes) */
+static ZSTD_paramSwitch_e ZSTD_resolveBlockSplitterMode(ZSTD_paramSwitch_e mode,
+ const ZSTD_compressionParameters* const cParams) {
+ if (mode != ZSTD_ps_auto) return mode;
+ return (cParams->strategy >= ZSTD_btopt && cParams->windowLog >= 17) ? ZSTD_ps_enable : ZSTD_ps_disable;
+}
+
/* 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 ZSTD_paramSwitch_e useRowMatchFinder,
const U32 forDDSDict) {
- assert(useRowMatchFinder != ZSTD_urm_auto);
+ assert(useRowMatchFinder != ZSTD_ps_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.
*/
@@ -253,16 +271,10 @@ static int ZSTD_allocateChainTable(const ZSTD_strategy strategy,
* enable long distance matching (wlog >= 27, strategy >= btopt).
* Returns 0 otherwise.
*/
-static U32 ZSTD_CParams_shouldEnableLdm(const ZSTD_compressionParameters* const cParams) {
- 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_paramSwitch_e ZSTD_resolveEnableLdm(ZSTD_paramSwitch_e mode,
+ const ZSTD_compressionParameters* const cParams) {
+ if (mode != ZSTD_ps_auto) return mode;
+ return (cParams->strategy >= ZSTD_btopt && cParams->windowLog >= 27) ? ZSTD_ps_enable : ZSTD_ps_disable;
}
static ZSTD_CCtx_params ZSTD_makeCCtxParamsFromCParams(
@@ -274,20 +286,13 @@ static ZSTD_CCtx_params ZSTD_makeCCtxParamsFromCParams(
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;
- /* LDM is enabled by default for optimal parser and window size >= 128MB */
+ cctxParams.ldmParams.enableLdm = ZSTD_resolveEnableLdm(cctxParams.ldmParams.enableLdm, &cParams);
+ if (cctxParams.ldmParams.enableLdm == ZSTD_ps_enable) {
ZSTD_ldm_adjustParameters(&cctxParams.ldmParams, &cParams);
assert(cctxParams.ldmParams.hashLog >= cctxParams.ldmParams.bucketSizeLog);
assert(cctxParams.ldmParams.hashRateLog < 32);
}
-
- if (ZSTD_CParams_useBlockSplitter(&cParams)) {
- DEBUGLOG(4, "ZSTD_makeCCtxParamsFromCParams(): Including block splitting into cctx params");
- cctxParams.splitBlocks = 1;
- }
-
+ cctxParams.useBlockSplitter = ZSTD_resolveBlockSplitterMode(cctxParams.useBlockSplitter, &cParams);
cctxParams.useRowMatchFinder = ZSTD_resolveRowMatchFinderMode(cctxParams.useRowMatchFinder, &cParams);
assert(!ZSTD_checkCParams(cParams));
return cctxParams;
@@ -348,7 +353,10 @@ static void ZSTD_CCtxParams_init_internal(ZSTD_CCtx_params* cctxParams, ZSTD_par
*/
cctxParams->compressionLevel = compressionLevel;
cctxParams->useRowMatchFinder = ZSTD_resolveRowMatchFinderMode(cctxParams->useRowMatchFinder, &params->cParams);
- DEBUGLOG(4, "ZSTD_CCtxParams_init_internal: useRowMatchFinder=%d", cctxParams->useRowMatchFinder);
+ cctxParams->useBlockSplitter = ZSTD_resolveBlockSplitterMode(cctxParams->useBlockSplitter, &params->cParams);
+ cctxParams->ldmParams.enableLdm = ZSTD_resolveEnableLdm(cctxParams->ldmParams.enableLdm, &params->cParams);
+ DEBUGLOG(4, "ZSTD_CCtxParams_init_internal: useRowMatchFinder=%d, useBlockSplitter=%d ldm=%d",
+ cctxParams->useRowMatchFinder, cctxParams->useBlockSplitter, cctxParams->ldmParams.enableLdm);
}
size_t ZSTD_CCtxParams_init_advanced(ZSTD_CCtx_params* cctxParams, ZSTD_parameters params)
@@ -518,9 +526,9 @@ ZSTD_bounds ZSTD_cParam_getBounds(ZSTD_cParameter param)
return bounds;
case ZSTD_c_literalCompressionMode:
- ZSTD_STATIC_ASSERT(ZSTD_lcm_auto < ZSTD_lcm_huffman && ZSTD_lcm_huffman < ZSTD_lcm_uncompressed);
- bounds.lowerBound = ZSTD_lcm_auto;
- bounds.upperBound = ZSTD_lcm_uncompressed;
+ ZSTD_STATIC_ASSERT(ZSTD_ps_auto < ZSTD_ps_enable && ZSTD_ps_enable < ZSTD_ps_disable);
+ bounds.lowerBound = (int)ZSTD_ps_auto;
+ bounds.upperBound = (int)ZSTD_ps_disable;
return bounds;
case ZSTD_c_targetCBlockSize:
@@ -549,14 +557,14 @@ ZSTD_bounds ZSTD_cParam_getBounds(ZSTD_cParameter param)
bounds.upperBound = 1;
return bounds;
- case ZSTD_c_splitBlocks:
- bounds.lowerBound = 0;
- bounds.upperBound = 1;
+ case ZSTD_c_useBlockSplitter:
+ bounds.lowerBound = (int)ZSTD_ps_auto;
+ bounds.upperBound = (int)ZSTD_ps_disable;
return bounds;
case ZSTD_c_useRowMatchFinder:
- bounds.lowerBound = (int)ZSTD_urm_auto;
- bounds.upperBound = (int)ZSTD_urm_enableRowMatchFinder;
+ bounds.lowerBound = (int)ZSTD_ps_auto;
+ bounds.upperBound = (int)ZSTD_ps_disable;
return bounds;
case ZSTD_c_deterministicRefPrefix:
@@ -625,7 +633,7 @@ 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_useBlockSplitter:
case ZSTD_c_useRowMatchFinder:
case ZSTD_c_deterministicRefPrefix:
default:
@@ -680,7 +688,7 @@ 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_useBlockSplitter:
case ZSTD_c_useRowMatchFinder:
case ZSTD_c_deterministicRefPrefix:
break;
@@ -780,7 +788,7 @@ size_t ZSTD_CCtxParams_setParameter(ZSTD_CCtx_params* CCtxParams,
}
case ZSTD_c_literalCompressionMode : {
- const ZSTD_literalCompressionMode_e lcm = (ZSTD_literalCompressionMode_e)value;
+ const ZSTD_paramSwitch_e lcm = (ZSTD_paramSwitch_e)value;
BOUNDCHECK(ZSTD_c_literalCompressionMode, lcm);
CCtxParams->literalCompressionMode = lcm;
return CCtxParams->literalCompressionMode;
@@ -835,7 +843,7 @@ size_t ZSTD_CCtxParams_setParameter(ZSTD_CCtx_params* CCtxParams,
return CCtxParams->enableDedicatedDictSearch;
case ZSTD_c_enableLongDistanceMatching :
- CCtxParams->ldmParams.enableLdm = (value!=0);
+ CCtxParams->ldmParams.enableLdm = (ZSTD_paramSwitch_e)value;
return CCtxParams->ldmParams.enableLdm;
case ZSTD_c_ldmHashLog :
@@ -857,8 +865,8 @@ size_t ZSTD_CCtxParams_setParameter(ZSTD_CCtx_params* CCtxParams,
return CCtxParams->ldmParams.bucketSizeLog;
case ZSTD_c_ldmHashRateLog :
- RETURN_ERROR_IF(value > ZSTD_WINDOWLOG_MAX - ZSTD_HASHLOG_MIN,
- parameter_outOfBound, "Param out of bounds!");
+ if (value!=0) /* 0 ==> default */
+ BOUNDCHECK(ZSTD_c_ldmHashRateLog, value);
CCtxParams->ldmParams.hashRateLog = value;
return CCtxParams->ldmParams.hashRateLog;
@@ -894,14 +902,14 @@ 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_useBlockSplitter:
+ BOUNDCHECK(ZSTD_c_useBlockSplitter, value);
+ CCtxParams->useBlockSplitter = (ZSTD_paramSwitch_e)value;
+ return CCtxParams->useBlockSplitter;
case ZSTD_c_useRowMatchFinder:
BOUNDCHECK(ZSTD_c_useRowMatchFinder, value);
- CCtxParams->useRowMatchFinder = (ZSTD_useRowMatchFinderMode_e)value;
+ CCtxParams->useRowMatchFinder = (ZSTD_paramSwitch_e)value;
return CCtxParams->useRowMatchFinder;
case ZSTD_c_deterministicRefPrefix:
@@ -1032,8 +1040,8 @@ size_t ZSTD_CCtxParams_getParameter(
case ZSTD_c_validateSequences :
*value = (int)CCtxParams->validateSequences;
break;
- case ZSTD_c_splitBlocks :
- *value = (int)CCtxParams->splitBlocks;
+ case ZSTD_c_useBlockSplitter :
+ *value = (int)CCtxParams->useBlockSplitter;
break;
case ZSTD_c_useRowMatchFinder :
*value = (int)CCtxParams->useRowMatchFinder;
@@ -1067,7 +1075,7 @@ size_t ZSTD_CCtx_setParametersUsingCCtxParams(
return 0;
}
-ZSTDLIB_API size_t ZSTD_CCtx_setPledgedSrcSize(ZSTD_CCtx* cctx, unsigned long long pledgedSrcSize)
+size_t ZSTD_CCtx_setPledgedSrcSize(ZSTD_CCtx* cctx, unsigned long long pledgedSrcSize)
{
DEBUGLOG(4, "ZSTD_CCtx_setPledgedSrcSize to %u bytes", (U32)pledgedSrcSize);
RETURN_ERROR_IF(cctx->streamStage != zcss_init, stage_wrong,
@@ -1147,14 +1155,14 @@ size_t ZSTD_CCtx_loadDictionary_advanced(
return 0;
}
-ZSTDLIB_API size_t ZSTD_CCtx_loadDictionary_byReference(
+size_t ZSTD_CCtx_loadDictionary_byReference(
ZSTD_CCtx* cctx, const void* dict, size_t dictSize)
{
return ZSTD_CCtx_loadDictionary_advanced(
cctx, dict, dictSize, ZSTD_dlm_byRef, ZSTD_dct_auto);
}
-ZSTDLIB_API size_t ZSTD_CCtx_loadDictionary(ZSTD_CCtx* cctx, const void* dict, size_t dictSize)
+size_t ZSTD_CCtx_loadDictionary(ZSTD_CCtx* cctx, const void* dict, size_t dictSize)
{
return ZSTD_CCtx_loadDictionary_advanced(
cctx, dict, dictSize, ZSTD_dlm_byCopy, ZSTD_dct_auto);
@@ -1324,7 +1332,7 @@ ZSTD_adjustCParams_internal(ZSTD_compressionParameters cPar,
break;
case ZSTD_cpm_createCDict:
/* Assume a small source size when creating a dictionary
- * with an unkown source size.
+ * with an unknown source size.
*/
if (dictSize && srcSize == ZSTD_CONTENTSIZE_UNKNOWN)
srcSize = minSrcSize;
@@ -1398,7 +1406,7 @@ ZSTD_compressionParameters ZSTD_getCParamsFromCCtxParams(
srcSizeHint = CCtxParams->srcSizeHint;
}
cParams = ZSTD_getCParams_internal(CCtxParams->compressionLevel, srcSizeHint, dictSize, mode);
- if (CCtxParams->ldmParams.enableLdm) cParams.windowLog = ZSTD_LDM_DEFAULT_WINDOW_LOG;
+ if (CCtxParams->ldmParams.enableLdm == ZSTD_ps_enable) cParams.windowLog = ZSTD_LDM_DEFAULT_WINDOW_LOG;
ZSTD_overrideCParams(&cParams, &CCtxParams->cParams);
assert(!ZSTD_checkCParams(cParams));
/* srcSizeHint == 0 means 0 */
@@ -1407,7 +1415,7 @@ ZSTD_compressionParameters ZSTD_getCParamsFromCCtxParams(
static size_t
ZSTD_sizeof_matchState(const ZSTD_compressionParameters* const cParams,
- const ZSTD_useRowMatchFinderMode_e useRowMatchFinder,
+ const ZSTD_paramSwitch_e useRowMatchFinder,
const U32 enableDedicatedDictSearch,
const U32 forCCtx)
{
@@ -1440,7 +1448,7 @@ ZSTD_sizeof_matchState(const ZSTD_compressionParameters* const cParams,
/* 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);
+ assert(useRowMatchFinder != ZSTD_ps_auto);
DEBUGLOG(4, "chainSize: %u - hSize: %u - h3Size: %u",
(U32)chainSize, (U32)hSize, (U32)h3Size);
@@ -1451,12 +1459,12 @@ static size_t ZSTD_estimateCCtxSize_usingCCtxParams_internal(
const ZSTD_compressionParameters* cParams,
const ldmParams_t* ldmParams,
const int isStatic,
- const ZSTD_useRowMatchFinderMode_e useRowMatchFinder,
+ const ZSTD_paramSwitch_e useRowMatchFinder,
const size_t buffInSize,
const size_t buffOutSize,
const U64 pledgedSrcSize)
{
- size_t const windowSize = MAX(1, (size_t)MIN(((U64)1 << cParams->windowLog), pledgedSrcSize));
+ size_t const windowSize = (size_t) BOUNDED(1ULL, 1ULL << cParams->windowLog, pledgedSrcSize);
size_t const blockSize = MIN(ZSTD_BLOCKSIZE_MAX, windowSize);
U32 const divider = (cParams->minMatch==3) ? 3 : 4;
size_t const maxNbSeq = blockSize / divider;
@@ -1469,7 +1477,7 @@ static size_t ZSTD_estimateCCtxSize_usingCCtxParams_internal(
size_t const ldmSpace = ZSTD_ldm_getTableSize(*ldmParams);
size_t const maxNbLdmSeq = ZSTD_ldm_getMaxNbSeq(*ldmParams, blockSize);
- size_t const ldmSeqSpace = ldmParams->enableLdm ?
+ size_t const ldmSeqSpace = ldmParams->enableLdm == ZSTD_ps_enable ?
ZSTD_cwksp_aligned_alloc_size(maxNbLdmSeq * sizeof(rawSeq)) : 0;
@@ -1496,8 +1504,8 @@ 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);
+ ZSTD_paramSwitch_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
@@ -1514,9 +1522,9 @@ size_t ZSTD_estimateCCtxSize_usingCParams(ZSTD_compressionParameters cParams)
/* 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;
+ initialParams.useRowMatchFinder = ZSTD_ps_disable;
noRowCCtxSize = ZSTD_estimateCCtxSize_usingCCtxParams(&initialParams);
- initialParams.useRowMatchFinder = ZSTD_urm_enableRowMatchFinder;
+ initialParams.useRowMatchFinder = ZSTD_ps_enable;
rowCCtxSize = ZSTD_estimateCCtxSize_usingCCtxParams(&initialParams);
return MAX(noRowCCtxSize, rowCCtxSize);
} else {
@@ -1561,7 +1569,7 @@ 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);
+ ZSTD_paramSwitch_e const useRowMatchFinder = ZSTD_resolveRowMatchFinderMode(params->useRowMatchFinder, &params->cParams);
return ZSTD_estimateCCtxSize_usingCCtxParams_internal(
&cParams, &params->ldmParams, 1, useRowMatchFinder, inBuffSize, outBuffSize,
@@ -1576,9 +1584,9 @@ size_t ZSTD_estimateCStreamSize_usingCParams(ZSTD_compressionParameters cParams)
/* 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;
+ initialParams.useRowMatchFinder = ZSTD_ps_disable;
noRowCCtxSize = ZSTD_estimateCStreamSize_usingCCtxParams(&initialParams);
- initialParams.useRowMatchFinder = ZSTD_urm_enableRowMatchFinder;
+ initialParams.useRowMatchFinder = ZSTD_ps_enable;
rowCCtxSize = ZSTD_estimateCStreamSize_usingCCtxParams(&initialParams);
return MAX(noRowCCtxSize, rowCCtxSize);
} else {
@@ -1713,7 +1721,7 @@ static size_t
ZSTD_reset_matchState(ZSTD_matchState_t* ms,
ZSTD_cwksp* ws,
const ZSTD_compressionParameters* cParams,
- const ZSTD_useRowMatchFinderMode_e useRowMatchFinder,
+ const ZSTD_paramSwitch_e useRowMatchFinder,
const ZSTD_compResetPolicy_e crp,
const ZSTD_indexResetPolicy_e forceResetIndex,
const ZSTD_resetTarget_e forWho)
@@ -1728,7 +1736,7 @@ ZSTD_reset_matchState(ZSTD_matchState_t* ms,
size_t const h3Size = hashLog3 ? ((size_t)1) << hashLog3 : 0;
DEBUGLOG(4, "reset indices : %u", forceResetIndex == ZSTDirp_reset);
- assert(useRowMatchFinder != ZSTD_urm_auto);
+ assert(useRowMatchFinder != ZSTD_ps_auto);
if (forceResetIndex == ZSTDirp_reset) {
ZSTD_window_init(&ms->window);
ZSTD_cwksp_mark_tables_dirty(ws);
@@ -1774,8 +1782,8 @@ ZSTD_reset_matchState(ZSTD_matchState_t* ms,
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);
+ U32 const rowLog = BOUNDED(4, cParams->searchLog, 6);
+ assert(cParams->hashLog >= rowLog);
ms->rowHashLog = cParams->hashLog - rowLog;
}
}
@@ -1824,8 +1832,8 @@ static size_t ZSTD_resetCCtx_internal(ZSTD_CCtx* zc,
ZSTD_buffered_policy_e const zbuff)
{
ZSTD_cwksp* const ws = &zc->workspace;
- DEBUGLOG(4, "ZSTD_resetCCtx_internal: pledgedSrcSize=%u, wlog=%u, useRowMatchFinder=%d",
- (U32)pledgedSrcSize, params->cParams.windowLog, (int)params->useRowMatchFinder);
+ DEBUGLOG(4, "ZSTD_resetCCtx_internal: pledgedSrcSize=%u, wlog=%u, useRowMatchFinder=%d useBlockSplitter=%d",
+ (U32)pledgedSrcSize, params->cParams.windowLog, (int)params->useRowMatchFinder, (int)params->useBlockSplitter);
assert(!ZSTD_isError(ZSTD_checkCParams(params->cParams)));
zc->isFirstBlock = 1;
@@ -1836,8 +1844,10 @@ static size_t ZSTD_resetCCtx_internal(ZSTD_CCtx* zc,
zc->appliedParams = *params;
params = &zc->appliedParams;
- assert(params->useRowMatchFinder != ZSTD_urm_auto);
- if (params->ldmParams.enableLdm) {
+ assert(params->useRowMatchFinder != ZSTD_ps_auto);
+ assert(params->useBlockSplitter != ZSTD_ps_auto);
+ assert(params->ldmParams.enableLdm != ZSTD_ps_auto);
+ if (params->ldmParams.enableLdm == ZSTD_ps_enable) {
/* Adjust long distance matching parameters */
ZSTD_ldm_adjustParameters(&zc->appliedParams.ldmParams, &params->cParams);
assert(params->ldmParams.hashLog >= params->ldmParams.bucketSizeLog);
@@ -1900,7 +1910,7 @@ static size_t ZSTD_resetCCtx_internal(ZSTD_CCtx* zc,
zc->blockState.nextCBlock = (ZSTD_compressedBlockState_t*) ZSTD_cwksp_reserve_object(ws, sizeof(ZSTD_compressedBlockState_t));
RETURN_ERROR_IF(zc->blockState.nextCBlock == NULL, memory_allocation, "couldn't allocate nextCBlock");
zc->entropyWorkspace = (U32*) ZSTD_cwksp_reserve_object(ws, ENTROPY_WORKSPACE_SIZE);
- RETURN_ERROR_IF(zc->blockState.nextCBlock == NULL, memory_allocation, "couldn't allocate entropyWorkspace");
+ RETURN_ERROR_IF(zc->entropyWorkspace == NULL, memory_allocation, "couldn't allocate entropyWorkspace");
} }
ZSTD_cwksp_clear(ws);
@@ -1937,7 +1947,7 @@ 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 == ZSTD_ps_enable) {
/* TODO: avoid memset? */
size_t const numBuckets =
((size_t)1) << (params->ldmParams.hashLog -
@@ -1964,7 +1974,7 @@ static size_t ZSTD_resetCCtx_internal(ZSTD_CCtx* zc,
ZSTD_resetTarget_CCtx), "");
/* ldm hash table */
- if (params->ldmParams.enableLdm) {
+ if (params->ldmParams.enableLdm == ZSTD_ps_enable) {
/* TODO: avoid memset? */
size_t const ldmHSize = ((size_t)1) << params->ldmParams.hashLog;
zc->ldmState.hashTable = (ldmEntry_t*)ZSTD_cwksp_reserve_aligned(ws, ldmHSize * sizeof(ldmEntry_t));
@@ -1976,8 +1986,8 @@ static size_t ZSTD_resetCCtx_internal(ZSTD_CCtx* zc,
zc->ldmState.loadedDictEnd = 0;
}
- assert(ZSTD_cwksp_estimated_space_within_bounds(ws, neededSpace, resizeWorkspace));
DEBUGLOG(3, "wksp: finished allocating, %zd bytes remain available", ZSTD_cwksp_available_space(ws));
+ assert(ZSTD_cwksp_estimated_space_within_bounds(ws, neededSpace, resizeWorkspace));
zc->initialized = 1;
@@ -2115,7 +2125,7 @@ static size_t ZSTD_resetCCtx_byCopyingCDict(ZSTD_CCtx* cctx,
}
ZSTD_cwksp_mark_tables_dirty(&cctx->workspace);
- assert(params.useRowMatchFinder != ZSTD_urm_auto);
+ assert(params.useRowMatchFinder != ZSTD_ps_auto);
/* copy tables */
{ size_t const chainSize = ZSTD_allocateChainTable(cdict_cParams->strategy, cdict->useRowMatchFinder, 0 /* DDS guaranteed disabled */)
@@ -2209,8 +2219,12 @@ static size_t ZSTD_copyCCtx_internal(ZSTD_CCtx* dstCCtx,
{ 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);
+ assert(srcCCtx->appliedParams.useRowMatchFinder != ZSTD_ps_auto);
+ assert(srcCCtx->appliedParams.useBlockSplitter != ZSTD_ps_auto);
+ assert(srcCCtx->appliedParams.ldmParams.enableLdm != ZSTD_ps_auto);
params.useRowMatchFinder = srcCCtx->appliedParams.useRowMatchFinder;
+ params.useBlockSplitter = srcCCtx->appliedParams.useBlockSplitter;
+ params.ldmParams = srcCCtx->appliedParams.ldmParams;
params.fParams = fParams;
ZSTD_resetCCtx_internal(dstCCtx, &params, pledgedSrcSize,
/* loadedDictSize */ 0,
@@ -2296,6 +2310,8 @@ ZSTD_reduceTable_internal (U32* const table, U32 const size, U32 const reducerVa
int const nbRows = (int)size / ZSTD_ROWSIZE;
int cellNb = 0;
int rowNb;
+ /* Protect special index values < ZSTD_WINDOW_START_INDEX. */
+ U32 const reducerThreshold = reducerValue + ZSTD_WINDOW_START_INDEX;
assert((size & (ZSTD_ROWSIZE-1)) == 0); /* multiple of ZSTD_ROWSIZE */
assert(size < (1U<<31)); /* can be casted to int */
@@ -2315,12 +2331,17 @@ ZSTD_reduceTable_internal (U32* const table, U32 const size, U32 const reducerVa
for (rowNb=0 ; rowNb < nbRows ; rowNb++) {
int column;
for (column=0; column<ZSTD_ROWSIZE; column++) {
- if (preserveMark) {
- U32 const adder = (table[cellNb] == ZSTD_DUBT_UNSORTED_MARK) ? reducerValue : 0;
- table[cellNb] += adder;
+ U32 newVal;
+ if (preserveMark && table[cellNb] == ZSTD_DUBT_UNSORTED_MARK) {
+ /* This write is pointless, but is required(?) for the compiler
+ * to auto-vectorize the loop. */
+ newVal = ZSTD_DUBT_UNSORTED_MARK;
+ } else if (table[cellNb] < reducerThreshold) {
+ newVal = 0;
+ } else {
+ newVal = table[cellNb] - reducerValue;
}
- if (table[cellNb] < reducerValue) table[cellNb] = 0;
- else table[cellNb] -= reducerValue;
+ table[cellNb] = newVal;
cellNb++;
} }
}
@@ -2375,9 +2396,9 @@ void ZSTD_seqToCodes(const seqStore_t* seqStorePtr)
assert(nbSeq <= seqStorePtr->maxNbSeq);
for (u=0; u<nbSeq; u++) {
U32 const llv = sequences[u].litLength;
- U32 const mlv = sequences[u].matchLength;
+ U32 const mlv = sequences[u].mlBase;
llCodeTable[u] = (BYTE)ZSTD_LLcode(llv);
- ofCodeTable[u] = (BYTE)ZSTD_highbit32(sequences[u].offset);
+ ofCodeTable[u] = (BYTE)ZSTD_highbit32(sequences[u].offBase);
mlCodeTable[u] = (BYTE)ZSTD_MLcode(mlv);
}
if (seqStorePtr->longLengthType==ZSTD_llt_literalLength)
@@ -2399,11 +2420,13 @@ static int ZSTD_useTargetCBlockSize(const ZSTD_CCtx_params* cctxParams)
/* 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.
+ * At the time this function is called, the parameter must be finalized.
* 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);
+ DEBUGLOG(5, "ZSTD_blockSplitterEnabled (useBlockSplitter=%d)", cctxParams->useBlockSplitter);
+ assert(cctxParams->useBlockSplitter != ZSTD_ps_auto);
+ return (cctxParams->useBlockSplitter == ZSTD_ps_enable);
}
/* Type returned by ZSTD_buildSequencesStatistics containing finalized symbol encoding types
@@ -2546,6 +2569,7 @@ ZSTD_buildSequencesStatistics(seqStore_t* seqStorePtr, size_t nbSeq,
* compresses both literals and sequences
* Returns compressed size of block, or a zstd error.
*/
+#define SUSPECT_UNCOMPRESSIBLE_LITERAL_RATIO 20
MEM_STATIC size_t
ZSTD_entropyCompressSeqStore_internal(seqStore_t* seqStorePtr,
const ZSTD_entropyCTables_t* prevEntropy,
@@ -2580,15 +2604,19 @@ ZSTD_entropyCompressSeqStore_internal(seqStore_t* seqStorePtr,
/* Compress literals */
{ const BYTE* const literals = seqStorePtr->litStart;
+ size_t const numSequences = seqStorePtr->sequences - seqStorePtr->sequencesStart;
+ size_t const numLiterals = seqStorePtr->lit - seqStorePtr->litStart;
+ /* Base suspicion of uncompressibility on ratio of literals to sequences */
+ unsigned const suspectUncompressible = (numSequences == 0) || (numLiterals / numSequences >= SUSPECT_UNCOMPRESSIBLE_LITERAL_RATIO);
size_t const litSize = (size_t)(seqStorePtr->lit - literals);
size_t const cSize = ZSTD_compressLiterals(
&prevEntropy->huf, &nextEntropy->huf,
cctxParams->cParams.strategy,
- ZSTD_disableLiteralsCompression(cctxParams),
+ ZSTD_literalsCompressionIsDisabled(cctxParams),
op, dstCapacity,
literals, litSize,
entropyWorkspace, entropyWkspSize,
- bmi2);
+ bmi2, suspectUncompressible);
FORWARD_IF_ERROR(cSize, "ZSTD_compressLiterals failed");
assert(cSize <= dstCapacity);
op += cSize;
@@ -2693,7 +2721,7 @@ ZSTD_entropyCompressSeqStore(seqStore_t* seqStorePtr,
/* 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_useRowMatchFinderMode_e useRowMatchFinder, ZSTD_dictMode_e dictMode)
+ZSTD_blockCompressor ZSTD_selectBlockCompressor(ZSTD_strategy strat, ZSTD_paramSwitch_e useRowMatchFinder, ZSTD_dictMode_e dictMode)
{
static const ZSTD_blockCompressor blockCompressor[4][ZSTD_STRATEGY_MAX+1] = {
{ ZSTD_compressBlock_fast /* default for 0 */,
@@ -2758,7 +2786,7 @@ ZSTD_blockCompressor ZSTD_selectBlockCompressor(ZSTD_strategy strat, ZSTD_useRow
ZSTD_compressBlock_lazy2_dedicatedDictSearch_row }
};
DEBUGLOG(4, "Selecting a row-based matchfinder");
- assert(useRowMatchFinder != ZSTD_urm_auto);
+ assert(useRowMatchFinder != ZSTD_ps_auto);
selectedCompressor = rowBasedBlockCompressors[(int)dictMode][(int)strat - (int)ZSTD_greedy];
} else {
selectedCompressor = blockCompressor[(int)dictMode][(int)strat];
@@ -2825,7 +2853,7 @@ static size_t ZSTD_buildSeqStore(ZSTD_CCtx* zc, const void* src, size_t srcSize)
zc->blockState.nextCBlock->rep[i] = zc->blockState.prevCBlock->rep[i];
}
if (zc->externSeqStore.pos < zc->externSeqStore.size) {
- assert(!zc->appliedParams.ldmParams.enableLdm);
+ assert(zc->appliedParams.ldmParams.enableLdm == ZSTD_ps_disable);
/* Updates ldmSeqStore.pos */
lastLLSize =
ZSTD_ldm_blockCompress(&zc->externSeqStore,
@@ -2834,7 +2862,7 @@ static size_t ZSTD_buildSeqStore(ZSTD_CCtx* zc, const void* src, size_t srcSize)
zc->appliedParams.useRowMatchFinder,
src, srcSize);
assert(zc->externSeqStore.pos <= zc->externSeqStore.size);
- } else if (zc->appliedParams.ldmParams.enableLdm) {
+ } else if (zc->appliedParams.ldmParams.enableLdm == ZSTD_ps_enable) {
rawSeqStore_t ldmSeqStore = kNullRawSeqStore;
ldmSeqStore.seq = zc->ldmSequences;
@@ -2882,9 +2910,9 @@ static void ZSTD_copyBlockSequences(ZSTD_CCtx* zc)
assert(zc->seqCollector.maxSequences >= seqStoreSeqSize + 1);
ZSTD_memcpy(updatedRepcodes.rep, zc->blockState.prevCBlock->rep, sizeof(repcodes_t));
for (i = 0; i < seqStoreSeqSize; ++i) {
- U32 rawOffset = seqStoreSeqs[i].offset - ZSTD_REP_NUM;
+ U32 rawOffset = seqStoreSeqs[i].offBase - ZSTD_REP_NUM;
outSeqs[i].litLength = seqStoreSeqs[i].litLength;
- outSeqs[i].matchLength = seqStoreSeqs[i].matchLength + MINMATCH;
+ outSeqs[i].matchLength = seqStoreSeqs[i].mlBase + MINMATCH;
outSeqs[i].rep = 0;
if (i == seqStore->longLengthPos) {
@@ -2895,9 +2923,9 @@ static void ZSTD_copyBlockSequences(ZSTD_CCtx* zc)
}
}
- if (seqStoreSeqs[i].offset <= ZSTD_REP_NUM) {
+ if (seqStoreSeqs[i].offBase <= ZSTD_REP_NUM) {
/* Derive the correct offset corresponding to a repcode */
- outSeqs[i].rep = seqStoreSeqs[i].offset;
+ outSeqs[i].rep = seqStoreSeqs[i].offBase;
if (outSeqs[i].litLength != 0) {
rawOffset = updatedRepcodes.rep[outSeqs[i].rep - 1];
} else {
@@ -2911,9 +2939,9 @@ static void ZSTD_copyBlockSequences(ZSTD_CCtx* zc)
outSeqs[i].offset = rawOffset;
/* seqStoreSeqs[i].offset == offCode+1, and ZSTD_updateRep() expects offCode
so we provide seqStoreSeqs[i].offset - 1 */
- updatedRepcodes = ZSTD_updateRep(updatedRepcodes.rep,
- seqStoreSeqs[i].offset - 1,
- seqStoreSeqs[i].litLength == 0);
+ ZSTD_updateRep(updatedRepcodes.rep,
+ seqStoreSeqs[i].offBase - 1,
+ seqStoreSeqs[i].litLength == 0);
literalsRead += outSeqs[i].litLength;
}
/* Insert last literals (if any exist) in the block as a sequence with ml == off == 0.
@@ -3027,7 +3055,7 @@ static size_t ZSTD_buildBlockEntropyStats_literals(void* const src, size_t srcSi
const ZSTD_hufCTables_t* prevHuf,
ZSTD_hufCTables_t* nextHuf,
ZSTD_hufCTablesMetadata_t* hufMetadata,
- const int disableLiteralsCompression,
+ const int literalsCompressionIsDisabled,
void* workspace, size_t wkspSize)
{
BYTE* const wkspStart = (BYTE*)workspace;
@@ -3045,7 +3073,7 @@ static size_t ZSTD_buildBlockEntropyStats_literals(void* const src, size_t srcSi
/* Prepare nextEntropy assuming reusing the existing table */
ZSTD_memcpy(nextHuf, prevHuf, sizeof(*prevHuf));
- if (disableLiteralsCompression) {
+ if (literalsCompressionIsDisabled) {
DEBUGLOG(5, "set_basic - disabled");
hufMetadata->hType = set_basic;
return 0;
@@ -3192,7 +3220,7 @@ size_t ZSTD_buildBlockEntropyStats(seqStore_t* seqStorePtr,
ZSTD_buildBlockEntropyStats_literals(seqStorePtr->litStart, litSize,
&prevEntropy->huf, &nextEntropy->huf,
&entropyMetadata->hufMetadata,
- ZSTD_disableLiteralsCompression(cctxParams),
+ ZSTD_literalsCompressionIsDisabled(cctxParams),
workspace, wkspSize);
FORWARD_IF_ERROR(entropyMetadata->hufMetadata.hufDesSize, "ZSTD_buildBlockEntropyStats_literals failed");
entropyMetadata->fseMetadata.fseTablesSize =
@@ -3235,7 +3263,7 @@ static size_t ZSTD_estimateBlockSize_literal(const BYTE* literals, size_t litSiz
static size_t ZSTD_estimateBlockSize_symbolType(symbolEncodingType_e type,
const BYTE* codeTable, size_t nbSeq, unsigned maxCode,
const FSE_CTable* fseCTable,
- const U32* additionalBits,
+ const U8* additionalBits,
short const* defaultNorm, U32 defaultNormLog, U32 defaultMax,
void* workspace, size_t wkspSize)
{
@@ -3319,19 +3347,20 @@ static size_t ZSTD_estimateBlockSize(const BYTE* literals, size_t litSize,
*
* 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;
+static size_t ZSTD_buildEntropyStatisticsAndEstimateSubBlockSize(seqStore_t* seqStore, ZSTD_CCtx* zc) {
+ ZSTD_entropyCTablesMetadata_t* entropyMetadata = &zc->blockSplitCtx.entropyMetadata;
+ DEBUGLOG(6, "ZSTD_buildEntropyStatisticsAndEstimateSubBlockSize()");
FORWARD_IF_ERROR(ZSTD_buildBlockEntropyStats(seqStore,
&zc->blockState.prevCBlock->entropy,
&zc->blockState.nextCBlock->entropy,
&zc->appliedParams,
- &entropyMetadata,
+ 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);
+ &zc->blockState.nextCBlock->entropy, entropyMetadata, zc->entropyWorkspace, ENTROPY_WORKSPACE_SIZE,
+ (int)(entropyMetadata->hufMetadata.hType == set_compressed), 1);
}
/* Returns literals bytes represented in a seqStore */
@@ -3356,7 +3385,7 @@ static size_t ZSTD_countSeqStoreMatchBytes(const seqStore_t* const seqStore) {
size_t i;
for (i = 0; i < nbSeqs; ++i) {
seqDef seq = seqStore->sequencesStart[i];
- matchBytes += seq.matchLength + MINMATCH;
+ matchBytes += seq.mlBase + MINMATCH;
if (i == seqStore->longLengthPos && seqStore->longLengthType == ZSTD_llt_matchLength) {
matchBytes += 0x10000;
}
@@ -3405,11 +3434,13 @@ static void ZSTD_deriveSeqStoreChunk(seqStore_t* resultSeqStore,
/**
* 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].
+ * offCode must represent a repcode in the numeric representation of ZSTD_storeSeq().
*/
-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);
+static U32
+ZSTD_resolveRepcodeToRawOffset(const U32 rep[ZSTD_REP_NUM], const U32 offCode, const U32 ll0)
+{
+ U32 const adjustedOffCode = STORED_REPCODE(offCode) - 1 + ll0; /* [ 0 - 3 ] */
+ assert(STORED_IS_REPCODE(offCode));
if (adjustedOffCode == ZSTD_REP_NUM) {
/* litlength == 0 and offCode == 2 implies selection of first repcode - 1 */
assert(rep[0] > 0);
@@ -3420,11 +3451,16 @@ static U32 ZSTD_resolveRepcodeToRawOffset(const U32 rep[ZSTD_REP_NUM], const U32
/**
* 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.
+ * 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.
*
- * dRepcodes are updated as would be on the decompression side. cRepcodes are updated exactly in
- * accordance with the seqStore.
+ * Note : this function assumes seq->offBase respects the following numbering scheme :
+ * 0 : invalid
+ * 1-3 : repcode 1-3
+ * 4+ : real_offset+3
*/
static void ZSTD_seqStore_resolveOffCodes(repcodes_t* const dRepcodes, repcodes_t* const cRepcodes,
seqStore_t* const seqStore, U32 const nbSeq) {
@@ -3432,9 +3468,9 @@ static void ZSTD_seqStore_resolveOffCodes(repcodes_t* const dRepcodes, repcodes_
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 offCode = OFFBASE_TO_STORED(seq->offBase);
+ assert(seq->offBase > 0);
+ if (STORED_IS_REPCODE(offCode)) {
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
@@ -3442,14 +3478,14 @@ static void ZSTD_seqStore_resolveOffCodes(repcodes_t* const dRepcodes, repcodes_
* repcode history.
*/
if (dRawOffset != cRawOffset) {
- seq->offset = cRawOffset + ZSTD_REP_NUM;
+ seq->offBase = 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_updateRep(dRepcodes->rep, OFFBASE_TO_STORED(seq->offBase), ll0);
+ ZSTD_updateRep(cRepcodes->rep, offCode, ll0);
}
}
@@ -3458,11 +3494,13 @@ static void ZSTD_seqStore_resolveOffCodes(repcodes_t* const dRepcodes, repcodes_
*
* 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) {
+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;
@@ -3471,9 +3509,11 @@ static size_t ZSTD_compressSeqStore_singleBlock(ZSTD_CCtx* zc, seqStore_t* const
/* In case of an RLE or raw block, the simulated decompression repcode history must be reset */
repcodes_t const dRepOriginal = *dRep;
+ DEBUGLOG(5, "ZSTD_compressSeqStore_singleBlock");
if (isPartition)
ZSTD_seqStore_resolveOffCodes(dRep, cRep, seqStore, (U32)(seqStore->sequences - seqStore->sequencesStart));
+ RETURN_ERROR_IF(dstCapacity < ZSTD_blockHeaderSize, dstSize_tooSmall, "Block header doesn't fit");
cSeqsSize = ZSTD_entropyCompressSeqStore(seqStore,
&zc->blockState.prevCBlock->entropy, &zc->blockState.nextCBlock->entropy,
&zc->appliedParams,
@@ -3499,9 +3539,6 @@ static size_t ZSTD_compressSeqStore_singleBlock(ZSTD_CCtx* zc, seqStore_t* const
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");
@@ -3518,6 +3555,10 @@ static size_t ZSTD_compressSeqStore_singleBlock(ZSTD_CCtx* zc, seqStore_t* const
cSize = ZSTD_blockHeaderSize + cSeqsSize;
DEBUGLOG(4, "Writing out compressed block, size: %zu", cSize);
}
+
+ if (zc->blockState.prevCBlock->entropy.fse.offcode_repeatMode == FSE_repeat_valid)
+ zc->blockState.prevCBlock->entropy.fse.offcode_repeatMode = FSE_repeat_check;
+
return cSize;
}
@@ -3528,7 +3569,6 @@ typedef struct {
} 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.
@@ -3539,29 +3579,33 @@ typedef struct {
* 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
+ * Furthermore, the number of splits is capped by ZSTD_MAX_NB_BLOCK_SPLITS. At ZSTD_MAX_NB_BLOCK_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;
+static void
+ZSTD_deriveBlockSplitsHelper(seqStoreSplits* splits, size_t startIdx, size_t endIdx,
+ ZSTD_CCtx* zc, const seqStore_t* origSeqStore)
+{
+ seqStore_t* fullSeqStoreChunk = &zc->blockSplitCtx.fullSeqStoreChunk;
+ seqStore_t* firstHalfSeqStore = &zc->blockSplitCtx.firstHalfSeqStore;
+ seqStore_t* secondHalfSeqStore = &zc->blockSplitCtx.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) {
+ if (endIdx - startIdx < MIN_SEQUENCES_BLOCK_SPLITTING || splits->idx >= ZSTD_MAX_NB_BLOCK_SPLITS) {
+ DEBUGLOG(6, "ZSTD_deriveBlockSplitsHelper: Too few sequences");
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",
+ DEBUGLOG(4, "ZSTD_deriveBlockSplitsHelper: startIdx=%zu endIdx=%zu", startIdx, endIdx);
+ 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(4, "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;
@@ -3596,17 +3640,19 @@ static size_t ZSTD_deriveBlockSplits(ZSTD_CCtx* zc, U32 partitions[], U32 nbSeq)
*
* 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) {
+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;
+ U32* partitions = zc->blockSplitCtx.partitions; /* size == ZSTD_MAX_NB_BLOCK_SPLITS */
+ seqStore_t* nextSeqStore = &zc->blockSplitCtx.nextSeqStore;
+ seqStore_t* currSeqStore = &zc->blockSplitCtx.currSeqStore;
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
@@ -3626,6 +3672,7 @@ static size_t ZSTD_compressBlock_splitBlock_internal(ZSTD_CCtx* zc, void* dst, s
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));
+ ZSTD_memset(nextSeqStore, 0, sizeof(seqStore_t));
DEBUGLOG(4, "ZSTD_compressBlock_splitBlock_internal (dstCapacity=%u, dictLimit=%u, nextToUpdate=%u)",
(unsigned)dstCapacity, (unsigned)zc->blockState.matchState.window.dictLimit,
@@ -3643,36 +3690,36 @@ static size_t ZSTD_compressBlock_splitBlock_internal(ZSTD_CCtx* zc, void* dst, s
return cSizeSingleBlock;
}
- ZSTD_deriveSeqStoreChunk(&currSeqStore, &zc->seqStore, 0, partitions[0]);
+ 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);
+ 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]);
+ ZSTD_deriveSeqStoreChunk(nextSeqStore, &zc->seqStore, partitions[i], partitions[i+1]);
}
- cSizeChunk = ZSTD_compressSeqStore_singleBlock(zc, &currSeqStore,
+ 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);
+ 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;
+ *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
@@ -3682,14 +3729,17 @@ static size_t ZSTD_compressBlock_splitBlock_internal(ZSTD_CCtx* zc, void* dst, s
return cSize;
}
-static size_t ZSTD_compressBlock_splitBlock(ZSTD_CCtx* zc,
- void* dst, size_t dstCapacity,
- const void* src, size_t srcSize, U32 lastBlock) {
+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");
+ assert(zc->appliedParams.useBlockSplitter == ZSTD_ps_enable);
{ const size_t bss = ZSTD_buildSeqStore(zc, src, srcSize);
FORWARD_IF_ERROR(bss, "ZSTD_buildSeqStore failed");
@@ -3704,15 +3754,15 @@ static size_t ZSTD_compressBlock_splitBlock(ZSTD_CCtx* zc,
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,
- void* dst, size_t dstCapacity,
- const void* src, size_t srcSize, U32 frame)
+static size_t
+ZSTD_compressBlock_internal(ZSTD_CCtx* zc,
+ void* dst, size_t dstCapacity,
+ const void* src, size_t srcSize, U32 frame)
{
/* This the upper bound for the length of an rle block.
* This isn't the actual upper bound. Finding the real threshold
@@ -3746,12 +3796,6 @@ static size_t ZSTD_compressBlock_internal(ZSTD_CCtx* zc,
zc->entropyWorkspace, ENTROPY_WORKSPACE_SIZE /* statically allocated in resetCCtx */,
zc->bmi2);
- if (zc->seqCollector.collectSequences) {
- ZSTD_copyBlockSequences(zc);
- return 0;
- }
-
-
if (frame &&
/* 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."
@@ -3915,6 +3959,7 @@ static size_t ZSTD_compress_frameChunk(ZSTD_CCtx* cctx,
ZSTD_overflowCorrectIfNeeded(
ms, &cctx->workspace, &cctx->appliedParams, ip, ip + blockSize);
ZSTD_checkDictValidity(&ms->window, ip + blockSize, maxDist, &ms->loadedDictEnd, &ms->dictMatchState);
+ ZSTD_window_enforceMaxDist(&ms->window, ip, maxDist, &ms->loadedDictEnd, &ms->dictMatchState);
/* Ensure hash/chain table insertion resumes no sooner than lowlimit */
if (ms->nextToUpdate < ms->window.lowLimit) ms->nextToUpdate = ms->window.lowLimit;
@@ -3991,7 +4036,9 @@ static size_t ZSTD_writeFrameHeader(void* dst, size_t dstCapacity,
if (!singleSegment) op[pos++] = windowLogByte;
switch(dictIDSizeCode)
{
- default: assert(0); /* impossible */
+ default:
+ assert(0); /* impossible */
+ ZSTD_FALLTHROUGH;
case 0 : break;
case 1 : op[pos] = (BYTE)(dictID); pos++; break;
case 2 : MEM_writeLE16(op+pos, (U16)dictID); pos+=2; break;
@@ -3999,7 +4046,9 @@ static size_t ZSTD_writeFrameHeader(void* dst, size_t dstCapacity,
}
switch(fcsCode)
{
- default: assert(0); /* impossible */
+ default:
+ assert(0); /* impossible */
+ ZSTD_FALLTHROUGH;
case 0 : if (singleSegment) op[pos++] = (BYTE)(pledgedSrcSize); break;
case 1 : MEM_writeLE16(op+pos, (U16)(pledgedSrcSize-256)); pos+=2; break;
case 2 : MEM_writeLE32(op+pos, (U32)(pledgedSrcSize)); pos+=4; break;
@@ -4047,7 +4096,7 @@ size_t ZSTD_referenceExternalSequences(ZSTD_CCtx* cctx, rawSeq* seq, size_t nbSe
{
RETURN_ERROR_IF(cctx->stage != ZSTDcs_init, stage_wrong,
"wrong cctx stage");
- RETURN_ERROR_IF(cctx->appliedParams.ldmParams.enableLdm,
+ RETURN_ERROR_IF(cctx->appliedParams.ldmParams.enableLdm == ZSTD_ps_enable,
parameter_unsupported,
"incompatible with ldm");
cctx->externSeqStore.seq = seq;
@@ -4088,7 +4137,7 @@ static size_t ZSTD_compressContinue_internal (ZSTD_CCtx* cctx,
ms->forceNonContiguous = 0;
ms->nextToUpdate = ms->window.dictLimit;
}
- if (cctx->appliedParams.ldmParams.enableLdm) {
+ if (cctx->appliedParams.ldmParams.enableLdm == ZSTD_ps_enable) {
ZSTD_window_update(&cctx->ldmState.window, src, srcSize, /* forceNonContiguous */ 0);
}
@@ -4157,7 +4206,7 @@ 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;
+ int const loadLdmDict = params->ldmParams.enableLdm == ZSTD_ps_enable && ls != NULL;
/* Assert that we the ms params match the params we're being given */
ZSTD_assertEqualCParams(params->cParams, ms->cParams);
@@ -4214,8 +4263,8 @@ static size_t ZSTD_loadDictionaryContent(ZSTD_matchState_t* ms,
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) {
+ assert(params->useRowMatchFinder != ZSTD_ps_auto);
+ if (params->useRowMatchFinder == ZSTD_ps_enable) {
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);
@@ -4715,7 +4764,7 @@ size_t ZSTD_estimateCDictSize_advanced(
+ ZSTD_cwksp_alloc_size(HUF_WORKSPACE_SIZE)
/* 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),
+ + ZSTD_sizeof_matchState(&cParams, ZSTD_resolveRowMatchFinderMode(ZSTD_ps_auto, &cParams),
/* enableDedicatedDictSearch */ 1, /* forCCtx */ 0)
+ (dictLoadMethod == ZSTD_dlm_byRef ? 0
: ZSTD_cwksp_alloc_size(ZSTD_cwksp_align(dictSize, sizeof(void *))));
@@ -4792,7 +4841,7 @@ static size_t ZSTD_initCDict_internal(
static ZSTD_CDict* ZSTD_createCDict_advanced_internal(size_t dictSize,
ZSTD_dictLoadMethod_e dictLoadMethod,
ZSTD_compressionParameters cParams,
- ZSTD_useRowMatchFinderMode_e useRowMatchFinder,
+ ZSTD_paramSwitch_e useRowMatchFinder,
U32 enableDedicatedDictSearch,
ZSTD_customMem customMem)
{
@@ -4842,7 +4891,7 @@ ZSTD_CDict* ZSTD_createCDict_advanced(const void* dictBuffer, size_t dictSize,
&cctxParams, customMem);
}
-ZSTDLIB_API ZSTD_CDict* ZSTD_createCDict_advanced2(
+ZSTD_CDict* ZSTD_createCDict_advanced2(
const void* dict, size_t dictSize,
ZSTD_dictLoadMethod_e dictLoadMethod,
ZSTD_dictContentType_e dictContentType,
@@ -4947,7 +4996,7 @@ const ZSTD_CDict* ZSTD_initStaticCDict(
ZSTD_dictContentType_e dictContentType,
ZSTD_compressionParameters cParams)
{
- ZSTD_useRowMatchFinderMode_e const useRowMatchFinder = ZSTD_resolveRowMatchFinderMode(ZSTD_urm_auto, &cParams);
+ ZSTD_paramSwitch_e const useRowMatchFinder = ZSTD_resolveRowMatchFinderMode(ZSTD_ps_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))
@@ -5403,7 +5452,7 @@ static size_t ZSTD_compressStream_generic(ZSTD_CStream* zcs,
zcs->outBuffFlushedSize = 0;
zcs->streamStage = zcss_flush; /* pass-through to flush stage */
}
- /* fall-through */
+ ZSTD_FALLTHROUGH;
case zcss_flush:
DEBUGLOG(5, "flush stage");
assert(zcs->appliedParams.outBufferMode == ZSTD_bm_buffered);
@@ -5524,17 +5573,8 @@ static size_t ZSTD_CCtx_init_compressStream2(ZSTD_CCtx* cctx,
dictSize, mode);
}
- if (ZSTD_CParams_shouldEnableLdm(&params.cParams)) {
- /* Enable LDM by default for optimal parser and window size >= 128MB */
- DEBUGLOG(4, "LDM enabled by default (window size >= 128MB, strategy >= btopt)");
- 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.useBlockSplitter = ZSTD_resolveBlockSplitterMode(params.useBlockSplitter, &params.cParams);
+ params.ldmParams.enableLdm = ZSTD_resolveEnableLdm(params.ldmParams.enableLdm, &params.cParams);
params.useRowMatchFinder = ZSTD_resolveRowMatchFinderMode(params.useRowMatchFinder, &params.cParams);
#ifdef ZSTD_MULTITHREAD
@@ -5715,39 +5755,39 @@ typedef struct {
size_t posInSrc; /* Number of bytes given by sequences provided so far */
} ZSTD_sequencePosition;
-/* Returns a ZSTD error code if sequence is not valid */
-static size_t ZSTD_validateSequence(U32 offCode, U32 matchLength,
- size_t posInSrc, U32 windowLog, size_t dictSize, U32 minMatch) {
- size_t offsetBound;
- U32 windowSize = 1 << windowLog;
+/* ZSTD_validateSequence() :
+ * @offCode : is presumed to follow format required by ZSTD_storeSeq()
+ * @returns a ZSTD error code if sequence is not valid
+ */
+static size_t
+ZSTD_validateSequence(U32 offCode, U32 matchLength,
+ size_t posInSrc, U32 windowLog, size_t dictSize)
+{
+ U32 const windowSize = 1 << windowLog;
/* posInSrc represents the amount of data the the decoder would decode up to this point.
* As long as the amount of data decoded is less than or equal to window size, offsets may be
* larger than the total length of output decoded in order to reference the dict, even larger than
* window size. After output surpasses windowSize, we're limited to windowSize offsets again.
*/
- offsetBound = posInSrc > windowSize ? (size_t)windowSize : posInSrc + (size_t)dictSize;
- RETURN_ERROR_IF(offCode > offsetBound + ZSTD_REP_MOVE, corruption_detected, "Offset too large!");
- RETURN_ERROR_IF(matchLength < minMatch, corruption_detected, "Matchlength too small");
+ size_t const offsetBound = posInSrc > windowSize ? (size_t)windowSize : posInSrc + (size_t)dictSize;
+ RETURN_ERROR_IF(offCode > STORE_OFFSET(offsetBound), corruption_detected, "Offset too large!");
+ RETURN_ERROR_IF(matchLength < MINMATCH, corruption_detected, "Matchlength too small");
return 0;
}
/* Returns an offset code, given a sequence's raw offset, the ongoing repcode array, and whether litLength == 0 */
-static U32 ZSTD_finalizeOffCode(U32 rawOffset, const U32 rep[ZSTD_REP_NUM], U32 ll0) {
- U32 offCode = rawOffset + ZSTD_REP_MOVE;
- U32 repCode = 0;
+static U32 ZSTD_finalizeOffCode(U32 rawOffset, const U32 rep[ZSTD_REP_NUM], U32 ll0)
+{
+ U32 offCode = STORE_OFFSET(rawOffset);
if (!ll0 && rawOffset == rep[0]) {
- repCode = 1;
+ offCode = STORE_REPCODE_1;
} else if (rawOffset == rep[1]) {
- repCode = 2 - ll0;
+ offCode = STORE_REPCODE(2 - ll0);
} else if (rawOffset == rep[2]) {
- repCode = 3 - ll0;
+ offCode = STORE_REPCODE(3 - ll0);
} else if (ll0 && rawOffset == rep[0] - 1) {
- repCode = 3;
- }
- if (repCode) {
- /* ZSTD_storeSeq expects a number in the range [0, 2] to represent a repcode */
- offCode = repCode - 1;
+ offCode = STORE_REPCODE_3;
}
return offCode;
}
@@ -5755,18 +5795,17 @@ static U32 ZSTD_finalizeOffCode(U32 rawOffset, const U32 rep[ZSTD_REP_NUM], U32
/* Returns 0 on success, and a ZSTD_error otherwise. This function scans through an array of
* ZSTD_Sequence, storing the sequences it finds, until it reaches a block delimiter.
*/
-static size_t ZSTD_copySequencesToSeqStoreExplicitBlockDelim(ZSTD_CCtx* cctx, ZSTD_sequencePosition* seqPos,
- const ZSTD_Sequence* const inSeqs, size_t inSeqsSize,
- const void* src, size_t blockSize) {
+static size_t
+ZSTD_copySequencesToSeqStoreExplicitBlockDelim(ZSTD_CCtx* cctx,
+ ZSTD_sequencePosition* seqPos,
+ const ZSTD_Sequence* const inSeqs, size_t inSeqsSize,
+ const void* src, size_t blockSize)
+{
U32 idx = seqPos->idx;
BYTE const* ip = (BYTE const*)(src);
const BYTE* const iend = ip + blockSize;
repcodes_t updatedRepcodes;
U32 dictSize;
- U32 litLength;
- U32 matchLength;
- U32 ll0;
- U32 offCode;
if (cctx->cdict) {
dictSize = (U32)cctx->cdict->dictContentSize;
@@ -5777,23 +5816,22 @@ static size_t ZSTD_copySequencesToSeqStoreExplicitBlockDelim(ZSTD_CCtx* cctx, ZS
}
ZSTD_memcpy(updatedRepcodes.rep, cctx->blockState.prevCBlock->rep, sizeof(repcodes_t));
for (; (inSeqs[idx].matchLength != 0 || inSeqs[idx].offset != 0) && idx < inSeqsSize; ++idx) {
- litLength = inSeqs[idx].litLength;
- matchLength = inSeqs[idx].matchLength;
- ll0 = litLength == 0;
- offCode = ZSTD_finalizeOffCode(inSeqs[idx].offset, updatedRepcodes.rep, ll0);
- updatedRepcodes = ZSTD_updateRep(updatedRepcodes.rep, offCode, ll0);
+ U32 const litLength = inSeqs[idx].litLength;
+ U32 const ll0 = (litLength == 0);
+ U32 const matchLength = inSeqs[idx].matchLength;
+ U32 const offCode = ZSTD_finalizeOffCode(inSeqs[idx].offset, updatedRepcodes.rep, ll0);
+ ZSTD_updateRep(updatedRepcodes.rep, offCode, ll0);
DEBUGLOG(6, "Storing sequence: (of: %u, ml: %u, ll: %u)", offCode, matchLength, litLength);
if (cctx->appliedParams.validateSequences) {
seqPos->posInSrc += litLength + matchLength;
FORWARD_IF_ERROR(ZSTD_validateSequence(offCode, matchLength, seqPos->posInSrc,
- cctx->appliedParams.cParams.windowLog, dictSize,
- cctx->appliedParams.cParams.minMatch),
+ cctx->appliedParams.cParams.windowLog, dictSize),
"Sequence validation failed");
}
RETURN_ERROR_IF(idx - seqPos->idx > cctx->seqStore.maxNbSeq, memory_allocation,
"Not enough memory allocated. Try adjusting ZSTD_c_minMatch.");
- ZSTD_storeSeq(&cctx->seqStore, litLength, ip, iend, offCode, matchLength - MINMATCH);
+ ZSTD_storeSeq(&cctx->seqStore, litLength, ip, iend, offCode, matchLength);
ip += matchLength + litLength;
}
ZSTD_memcpy(cctx->blockState.nextCBlock->rep, updatedRepcodes.rep, sizeof(repcodes_t));
@@ -5820,9 +5858,11 @@ static size_t ZSTD_copySequencesToSeqStoreExplicitBlockDelim(ZSTD_CCtx* cctx, ZS
* avoid splitting a match, or to avoid splitting a match such that it would produce a match
* smaller than MINMATCH. In this case, we return the number of bytes that we didn't read from this block.
*/
-static size_t ZSTD_copySequencesToSeqStoreNoBlockDelim(ZSTD_CCtx* cctx, ZSTD_sequencePosition* seqPos,
- const ZSTD_Sequence* const inSeqs, size_t inSeqsSize,
- const void* src, size_t blockSize) {
+static size_t
+ZSTD_copySequencesToSeqStoreNoBlockDelim(ZSTD_CCtx* cctx, ZSTD_sequencePosition* seqPos,
+ const ZSTD_Sequence* const inSeqs, size_t inSeqsSize,
+ const void* src, size_t blockSize)
+{
U32 idx = seqPos->idx;
U32 startPosInSequence = seqPos->posInSequence;
U32 endPosInSequence = seqPos->posInSequence + (U32)blockSize;
@@ -5832,10 +5872,6 @@ static size_t ZSTD_copySequencesToSeqStoreNoBlockDelim(ZSTD_CCtx* cctx, ZSTD_seq
repcodes_t updatedRepcodes;
U32 bytesAdjustment = 0;
U32 finalMatchSplit = 0;
- U32 litLength;
- U32 matchLength;
- U32 rawOffset;
- U32 offCode;
if (cctx->cdict) {
dictSize = cctx->cdict->dictContentSize;
@@ -5849,9 +5885,10 @@ static size_t ZSTD_copySequencesToSeqStoreNoBlockDelim(ZSTD_CCtx* cctx, ZSTD_seq
ZSTD_memcpy(updatedRepcodes.rep, cctx->blockState.prevCBlock->rep, sizeof(repcodes_t));
while (endPosInSequence && idx < inSeqsSize && !finalMatchSplit) {
const ZSTD_Sequence currSeq = inSeqs[idx];
- litLength = currSeq.litLength;
- matchLength = currSeq.matchLength;
- rawOffset = currSeq.offset;
+ U32 litLength = currSeq.litLength;
+ U32 matchLength = currSeq.matchLength;
+ U32 const rawOffset = currSeq.offset;
+ U32 offCode;
/* Modify the sequence depending on where endPosInSequence lies */
if (endPosInSequence >= currSeq.litLength + currSeq.matchLength) {
@@ -5904,22 +5941,21 @@ static size_t ZSTD_copySequencesToSeqStoreNoBlockDelim(ZSTD_CCtx* cctx, ZSTD_seq
}
}
/* Check if this offset can be represented with a repcode */
- { U32 ll0 = (litLength == 0);
+ { U32 const ll0 = (litLength == 0);
offCode = ZSTD_finalizeOffCode(rawOffset, updatedRepcodes.rep, ll0);
- updatedRepcodes = ZSTD_updateRep(updatedRepcodes.rep, offCode, ll0);
+ ZSTD_updateRep(updatedRepcodes.rep, offCode, ll0);
}
if (cctx->appliedParams.validateSequences) {
seqPos->posInSrc += litLength + matchLength;
FORWARD_IF_ERROR(ZSTD_validateSequence(offCode, matchLength, seqPos->posInSrc,
- cctx->appliedParams.cParams.windowLog, dictSize,
- cctx->appliedParams.cParams.minMatch),
+ cctx->appliedParams.cParams.windowLog, dictSize),
"Sequence validation failed");
}
DEBUGLOG(6, "Storing sequence: (of: %u, ml: %u, ll: %u)", offCode, matchLength, litLength);
RETURN_ERROR_IF(idx - seqPos->idx > cctx->seqStore.maxNbSeq, memory_allocation,
"Not enough memory allocated. Try adjusting ZSTD_c_minMatch.");
- ZSTD_storeSeq(&cctx->seqStore, litLength, ip, iend, offCode, matchLength - MINMATCH);
+ ZSTD_storeSeq(&cctx->seqStore, litLength, ip, iend, offCode, matchLength);
ip += matchLength + litLength;
}
DEBUGLOG(5, "Ending seq: idx: %u (of: %u ml: %u ll: %u)", idx, inSeqs[idx].offset, inSeqs[idx].matchLength, inSeqs[idx].litLength);
@@ -5944,7 +5980,8 @@ static size_t ZSTD_copySequencesToSeqStoreNoBlockDelim(ZSTD_CCtx* cctx, ZSTD_seq
typedef size_t (*ZSTD_sequenceCopier) (ZSTD_CCtx* cctx, ZSTD_sequencePosition* seqPos,
const ZSTD_Sequence* const inSeqs, size_t inSeqsSize,
const void* src, size_t blockSize);
-static ZSTD_sequenceCopier ZSTD_selectSequenceCopier(ZSTD_sequenceFormat_e mode) {
+static ZSTD_sequenceCopier ZSTD_selectSequenceCopier(ZSTD_sequenceFormat_e mode)
+{
ZSTD_sequenceCopier sequenceCopier = NULL;
assert(ZSTD_cParam_withinBounds(ZSTD_c_blockDelimiters, mode));
if (mode == ZSTD_sf_explicitBlockDelimiters) {
@@ -5958,12 +5995,15 @@ static ZSTD_sequenceCopier ZSTD_selectSequenceCopier(ZSTD_sequenceFormat_e mode)
/* Compress, block-by-block, all of the sequences given.
*
- * Returns the cumulative size of all compressed blocks (including their headers), otherwise a ZSTD error.
+ * Returns the cumulative size of all compressed blocks (including their headers),
+ * otherwise a ZSTD error.
*/
-static size_t ZSTD_compressSequences_internal(ZSTD_CCtx* cctx,
- void* dst, size_t dstCapacity,
- const ZSTD_Sequence* inSeqs, size_t inSeqsSize,
- const void* src, size_t srcSize) {
+static size_t
+ZSTD_compressSequences_internal(ZSTD_CCtx* cctx,
+ void* dst, size_t dstCapacity,
+ const ZSTD_Sequence* inSeqs, size_t inSeqsSize,
+ const void* src, size_t srcSize)
+{
size_t cSize = 0;
U32 lastBlock;
size_t blockSize;
@@ -5973,7 +6013,7 @@ static size_t ZSTD_compressSequences_internal(ZSTD_CCtx* cctx,
BYTE const* ip = (BYTE const*)src;
BYTE* op = (BYTE*)dst;
- ZSTD_sequenceCopier sequenceCopier = ZSTD_selectSequenceCopier(cctx->appliedParams.blockDelimiters);
+ ZSTD_sequenceCopier const sequenceCopier = ZSTD_selectSequenceCopier(cctx->appliedParams.blockDelimiters);
DEBUGLOG(4, "ZSTD_compressSequences_internal srcSize: %zu, inSeqsSize: %zu", srcSize, inSeqsSize);
/* Special case: empty frame */
@@ -6073,7 +6113,8 @@ static size_t ZSTD_compressSequences_internal(ZSTD_CCtx* cctx,
size_t ZSTD_compressSequences(ZSTD_CCtx* const cctx, void* dst, size_t dstCapacity,
const ZSTD_Sequence* inSeqs, size_t inSeqsSize,
- const void* src, size_t srcSize) {
+ const void* src, size_t srcSize)
+{
BYTE* op = (BYTE*)dst;
size_t cSize = 0;
size_t compressedBlocksSize = 0;
@@ -6140,119 +6181,12 @@ size_t ZSTD_endStream(ZSTD_CStream* zcs, ZSTD_outBuffer* output)
/*-===== Pre-defined compression levels =====-*/
+#include "clevels.h"
-#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 */
- /* W, C, H, S, L, TL, strat */
- { 19, 12, 13, 1, 6, 1, ZSTD_fast }, /* base for negative levels */
- { 19, 13, 14, 1, 7, 0, ZSTD_fast }, /* level 1 */
- { 20, 15, 16, 1, 6, 0, ZSTD_fast }, /* level 2 */
- { 21, 16, 17, 1, 5, 0, ZSTD_dfast }, /* level 3 */
- { 21, 18, 18, 1, 5, 0, ZSTD_dfast }, /* level 4 */
- { 21, 18, 19, 2, 5, 2, ZSTD_greedy }, /* level 5 */
- { 21, 19, 19, 3, 5, 4, ZSTD_greedy }, /* level 6 */
- { 21, 19, 19, 3, 5, 8, ZSTD_lazy }, /* level 7 */
- { 21, 19, 19, 3, 5, 16, ZSTD_lazy2 }, /* level 8 */
- { 21, 19, 20, 4, 5, 16, ZSTD_lazy2 }, /* level 9 */
- { 22, 20, 21, 4, 5, 16, ZSTD_lazy2 }, /* level 10 */
- { 22, 21, 22, 4, 5, 16, ZSTD_lazy2 }, /* level 11 */
- { 22, 21, 22, 5, 5, 16, ZSTD_lazy2 }, /* level 12 */
- { 22, 21, 22, 5, 5, 32, ZSTD_btlazy2 }, /* level 13 */
- { 22, 22, 23, 5, 5, 32, ZSTD_btlazy2 }, /* level 14 */
- { 22, 23, 23, 6, 5, 32, ZSTD_btlazy2 }, /* level 15 */
- { 22, 22, 22, 5, 5, 48, ZSTD_btopt }, /* level 16 */
- { 23, 23, 22, 5, 4, 64, ZSTD_btopt }, /* level 17 */
- { 23, 23, 22, 6, 3, 64, ZSTD_btultra }, /* level 18 */
- { 23, 24, 22, 7, 3,256, ZSTD_btultra2}, /* level 19 */
- { 25, 25, 23, 7, 3,256, ZSTD_btultra2}, /* level 20 */
- { 26, 26, 24, 7, 3,512, ZSTD_btultra2}, /* level 21 */
- { 27, 27, 25, 9, 3,999, ZSTD_btultra2}, /* level 22 */
-},
-{ /* for srcSize <= 256 KB */
- /* W, C, H, S, L, T, strat */
- { 18, 12, 13, 1, 5, 1, ZSTD_fast }, /* base for negative levels */
- { 18, 13, 14, 1, 6, 0, ZSTD_fast }, /* level 1 */
- { 18, 14, 14, 1, 5, 0, ZSTD_dfast }, /* level 2 */
- { 18, 16, 16, 1, 4, 0, ZSTD_dfast }, /* level 3 */
- { 18, 16, 17, 2, 5, 2, ZSTD_greedy }, /* level 4.*/
- { 18, 18, 18, 3, 5, 2, ZSTD_greedy }, /* level 5.*/
- { 18, 18, 19, 3, 5, 4, ZSTD_lazy }, /* level 6.*/
- { 18, 18, 19, 4, 4, 4, ZSTD_lazy }, /* level 7 */
- { 18, 18, 19, 4, 4, 8, ZSTD_lazy2 }, /* level 8 */
- { 18, 18, 19, 5, 4, 8, ZSTD_lazy2 }, /* level 9 */
- { 18, 18, 19, 6, 4, 8, ZSTD_lazy2 }, /* level 10 */
- { 18, 18, 19, 5, 4, 12, ZSTD_btlazy2 }, /* level 11.*/
- { 18, 19, 19, 7, 4, 12, ZSTD_btlazy2 }, /* level 12.*/
- { 18, 18, 19, 4, 4, 16, ZSTD_btopt }, /* level 13 */
- { 18, 18, 19, 4, 3, 32, ZSTD_btopt }, /* level 14.*/
- { 18, 18, 19, 6, 3,128, ZSTD_btopt }, /* level 15.*/
- { 18, 19, 19, 6, 3,128, ZSTD_btultra }, /* level 16.*/
- { 18, 19, 19, 8, 3,256, ZSTD_btultra }, /* level 17.*/
- { 18, 19, 19, 6, 3,128, ZSTD_btultra2}, /* level 18.*/
- { 18, 19, 19, 8, 3,256, ZSTD_btultra2}, /* level 19.*/
- { 18, 19, 19, 10, 3,512, ZSTD_btultra2}, /* level 20.*/
- { 18, 19, 19, 12, 3,512, ZSTD_btultra2}, /* level 21.*/
- { 18, 19, 19, 13, 3,999, ZSTD_btultra2}, /* level 22.*/
-},
-{ /* for srcSize <= 128 KB */
- /* W, C, H, S, L, T, strat */
- { 17, 12, 12, 1, 5, 1, ZSTD_fast }, /* base for negative levels */
- { 17, 12, 13, 1, 6, 0, ZSTD_fast }, /* level 1 */
- { 17, 13, 15, 1, 5, 0, ZSTD_fast }, /* level 2 */
- { 17, 15, 16, 2, 5, 0, ZSTD_dfast }, /* level 3 */
- { 17, 17, 17, 2, 4, 0, ZSTD_dfast }, /* level 4 */
- { 17, 16, 17, 3, 4, 2, ZSTD_greedy }, /* level 5 */
- { 17, 17, 17, 3, 4, 4, ZSTD_lazy }, /* level 6 */
- { 17, 17, 17, 3, 4, 8, ZSTD_lazy2 }, /* level 7 */
- { 17, 17, 17, 4, 4, 8, ZSTD_lazy2 }, /* level 8 */
- { 17, 17, 17, 5, 4, 8, ZSTD_lazy2 }, /* level 9 */
- { 17, 17, 17, 6, 4, 8, ZSTD_lazy2 }, /* level 10 */
- { 17, 17, 17, 5, 4, 8, ZSTD_btlazy2 }, /* level 11 */
- { 17, 18, 17, 7, 4, 12, ZSTD_btlazy2 }, /* level 12 */
- { 17, 18, 17, 3, 4, 12, ZSTD_btopt }, /* level 13.*/
- { 17, 18, 17, 4, 3, 32, ZSTD_btopt }, /* level 14.*/
- { 17, 18, 17, 6, 3,256, ZSTD_btopt }, /* level 15.*/
- { 17, 18, 17, 6, 3,128, ZSTD_btultra }, /* level 16.*/
- { 17, 18, 17, 8, 3,256, ZSTD_btultra }, /* level 17.*/
- { 17, 18, 17, 10, 3,512, ZSTD_btultra }, /* level 18.*/
- { 17, 18, 17, 5, 3,256, ZSTD_btultra2}, /* level 19.*/
- { 17, 18, 17, 7, 3,512, ZSTD_btultra2}, /* level 20.*/
- { 17, 18, 17, 9, 3,512, ZSTD_btultra2}, /* level 21.*/
- { 17, 18, 17, 11, 3,999, ZSTD_btultra2}, /* level 22.*/
-},
-{ /* for srcSize <= 16 KB */
- /* W, C, H, S, L, T, strat */
- { 14, 12, 13, 1, 5, 1, ZSTD_fast }, /* base for negative levels */
- { 14, 14, 15, 1, 5, 0, ZSTD_fast }, /* level 1 */
- { 14, 14, 15, 1, 4, 0, ZSTD_fast }, /* level 2 */
- { 14, 14, 15, 2, 4, 0, ZSTD_dfast }, /* level 3 */
- { 14, 14, 14, 4, 4, 2, ZSTD_greedy }, /* level 4 */
- { 14, 14, 14, 3, 4, 4, ZSTD_lazy }, /* level 5.*/
- { 14, 14, 14, 4, 4, 8, ZSTD_lazy2 }, /* level 6 */
- { 14, 14, 14, 6, 4, 8, ZSTD_lazy2 }, /* level 7 */
- { 14, 14, 14, 8, 4, 8, ZSTD_lazy2 }, /* level 8.*/
- { 14, 15, 14, 5, 4, 8, ZSTD_btlazy2 }, /* level 9.*/
- { 14, 15, 14, 9, 4, 8, ZSTD_btlazy2 }, /* level 10.*/
- { 14, 15, 14, 3, 4, 12, ZSTD_btopt }, /* level 11.*/
- { 14, 15, 14, 4, 3, 24, ZSTD_btopt }, /* level 12.*/
- { 14, 15, 14, 5, 3, 32, ZSTD_btultra }, /* level 13.*/
- { 14, 15, 15, 6, 3, 64, ZSTD_btultra }, /* level 14.*/
- { 14, 15, 15, 7, 3,256, ZSTD_btultra }, /* level 15.*/
- { 14, 15, 15, 5, 3, 48, ZSTD_btultra2}, /* level 16.*/
- { 14, 15, 15, 6, 3,128, ZSTD_btultra2}, /* level 17.*/
- { 14, 15, 15, 7, 3,256, ZSTD_btultra2}, /* level 18.*/
- { 14, 15, 15, 8, 3,256, ZSTD_btultra2}, /* level 19.*/
- { 14, 15, 15, 8, 3,512, ZSTD_btultra2}, /* level 20.*/
- { 14, 15, 15, 9, 3,512, ZSTD_btultra2}, /* level 21.*/
- { 14, 15, 15, 10, 3,999, ZSTD_btultra2}, /* level 22.*/
-},
-};
-
static ZSTD_compressionParameters ZSTD_dedicatedDictSearch_getCParams(int const compressionLevel, size_t const dictSize)
{
ZSTD_compressionParameters cParams = ZSTD_getCParams_internal(compressionLevel, 0, dictSize, ZSTD_cpm_createCDict);
diff --git a/thirdparty/zstd/compress/zstd_compress_internal.h b/thirdparty/zstd/compress/zstd_compress_internal.h
index 3b04fd09f6..c406e794bd 100644
--- a/thirdparty/zstd/compress/zstd_compress_internal.h
+++ b/thirdparty/zstd/compress/zstd_compress_internal.h
@@ -63,7 +63,7 @@ typedef struct {
} ZSTD_localDict;
typedef struct {
- HUF_CElt CTable[HUF_CTABLE_SIZE_U32(255)];
+ HUF_CElt CTable[HUF_CTABLE_SIZE_ST(255)];
HUF_repeat repeatMode;
} ZSTD_hufCTables_t;
@@ -129,7 +129,7 @@ size_t ZSTD_buildBlockEntropyStats(seqStore_t* seqStorePtr,
*********************************/
typedef struct {
- U32 off; /* Offset code (offset + ZSTD_REP_MOVE) for the match */
+ U32 off; /* Offset sumtype code for the match, using ZSTD_storeSeq() format */
U32 len; /* Raw length of match */
} ZSTD_match_t;
@@ -179,7 +179,7 @@ typedef struct {
U32 offCodeSumBasePrice; /* to compare to log2(offreq) */
ZSTD_OptPrice_e priceType; /* prices can be determined dynamically, or follow a pre-defined cost structure */
const ZSTD_entropyCTables_t* symbolCosts; /* pre-calculated dictionary statistics */
- ZSTD_literalCompressionMode_e literalCompressionMode;
+ ZSTD_paramSwitch_e literalCompressionMode;
} optState_t;
typedef struct {
@@ -199,6 +199,8 @@ typedef struct {
*/
} ZSTD_window_t;
+#define ZSTD_WINDOW_START_INDEX 2
+
typedef struct ZSTD_matchState_t ZSTD_matchState_t;
#define ZSTD_ROW_HASH_CACHE_SIZE 8 /* Size of prefetching hash cache for row-based matchfinder */
@@ -264,7 +266,7 @@ typedef struct {
} ldmState_t;
typedef struct {
- U32 enableLdm; /* 1 if enable long distance matching */
+ ZSTD_paramSwitch_e enableLdm; /* ZSTD_ps_enable to enable LDM. ZSTD_ps_auto by default */
U32 hashLog; /* Log size of hashTable */
U32 bucketSizeLog; /* Log bucket size for collision resolution, at most 8 */
U32 minMatchLength; /* Minimum match length */
@@ -295,7 +297,7 @@ struct ZSTD_CCtx_params_s {
* There is no guarantee that hint is close to actual source size */
ZSTD_dictAttachPref_e attachDictPref;
- ZSTD_literalCompressionMode_e literalCompressionMode;
+ ZSTD_paramSwitch_e literalCompressionMode;
/* Multithreading: used to pass parameters to mtctx */
int nbWorkers;
@@ -318,10 +320,10 @@ struct ZSTD_CCtx_params_s {
int validateSequences;
/* Block splitting */
- int splitBlocks;
+ ZSTD_paramSwitch_e useBlockSplitter;
/* Param for deciding whether to use row-based matchfinder */
- ZSTD_useRowMatchFinderMode_e useRowMatchFinder;
+ ZSTD_paramSwitch_e useRowMatchFinder;
/* Always load a dictionary in ext-dict mode (not prefix mode)? */
int deterministicRefPrefix;
@@ -343,6 +345,22 @@ typedef enum {
ZSTDb_buffered
} ZSTD_buffered_policy_e;
+/**
+ * Struct that contains all elements of block splitter that should be allocated
+ * in a wksp.
+ */
+#define ZSTD_MAX_NB_BLOCK_SPLITS 196
+typedef struct {
+ seqStore_t fullSeqStoreChunk;
+ seqStore_t firstHalfSeqStore;
+ seqStore_t secondHalfSeqStore;
+ seqStore_t currSeqStore;
+ seqStore_t nextSeqStore;
+
+ U32 partitions[ZSTD_MAX_NB_BLOCK_SPLITS];
+ ZSTD_entropyCTablesMetadata_t entropyMetadata;
+} ZSTD_blockSplitCtx;
+
struct ZSTD_CCtx_s {
ZSTD_compressionStage_e stage;
int cParamsChanged; /* == 1 if cParams(except wlog) or compression level are changed in requestedParams. Triggers transmission of new params to ZSTDMT (if available) then reset to 0. */
@@ -374,7 +392,7 @@ struct ZSTD_CCtx_s {
ZSTD_blockState_t blockState;
U32* entropyWorkspace; /* entropy workspace of ENTROPY_WORKSPACE_SIZE bytes */
- /* Wether we are streaming or not */
+ /* Whether we are streaming or not */
ZSTD_buffered_policy_e bufferedPolicy;
/* streaming */
@@ -408,6 +426,9 @@ struct ZSTD_CCtx_s {
#if ZSTD_TRACE
ZSTD_TraceCtx traceCtx;
#endif
+
+ /* Workspace for block splitter */
+ ZSTD_blockSplitCtx blockSplitCtx;
};
typedef enum { ZSTD_dtlm_fast, ZSTD_dtlm_full } ZSTD_dictTableLoadMethod_e;
@@ -442,7 +463,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_useRowMatchFinderMode_e rowMatchfinderMode, ZSTD_dictMode_e dictMode);
+ZSTD_blockCompressor ZSTD_selectBlockCompressor(ZSTD_strategy strat, ZSTD_paramSwitch_e rowMatchfinderMode, ZSTD_dictMode_e dictMode);
MEM_STATIC U32 ZSTD_LLcode(U32 litLength)
@@ -476,31 +497,6 @@ MEM_STATIC U32 ZSTD_MLcode(U32 mlBase)
return (mlBase > 127) ? ZSTD_highbit32(mlBase) + ML_deltaCode : ML_Code[mlBase];
}
-typedef struct repcodes_s {
- U32 rep[3];
-} repcodes_t;
-
-MEM_STATIC repcodes_t ZSTD_updateRep(U32 const rep[3], U32 const offset, U32 const ll0)
-{
- repcodes_t newReps;
- if (offset >= ZSTD_REP_NUM) { /* full offset */
- newReps.rep[2] = rep[1];
- newReps.rep[1] = rep[0];
- newReps.rep[0] = offset - ZSTD_REP_MOVE;
- } else { /* repcode */
- U32 const repCode = offset + ll0;
- if (repCode > 0) { /* note : if repCode==0, no change */
- U32 const currentOffset = (repCode==ZSTD_REP_NUM) ? (rep[0] - 1) : rep[repCode];
- newReps.rep[2] = (repCode >= 2) ? rep[1] : rep[2];
- newReps.rep[1] = rep[0];
- newReps.rep[0] = currentOffset;
- } else { /* repCode == 0 */
- ZSTD_memcpy(&newReps, rep, sizeof(newReps));
- }
- }
- return newReps;
-}
-
/* ZSTD_cParam_withinBounds:
* @return 1 if value is within cParam bounds,
* 0 otherwise */
@@ -549,17 +545,17 @@ MEM_STATIC size_t ZSTD_minGain(size_t srcSize, ZSTD_strategy strat)
return (srcSize >> minlog) + 2;
}
-MEM_STATIC int ZSTD_disableLiteralsCompression(const ZSTD_CCtx_params* cctxParams)
+MEM_STATIC int ZSTD_literalsCompressionIsDisabled(const ZSTD_CCtx_params* cctxParams)
{
switch (cctxParams->literalCompressionMode) {
- case ZSTD_lcm_huffman:
+ case ZSTD_ps_enable:
return 0;
- case ZSTD_lcm_uncompressed:
+ case ZSTD_ps_disable:
return 1;
default:
assert(0 /* impossible: pre-validated */);
- /* fall-through */
- case ZSTD_lcm_auto:
+ ZSTD_FALLTHROUGH;
+ case ZSTD_ps_auto:
return (cctxParams->cParams.strategy == ZSTD_fast) && (cctxParams->cParams.targetLength > 0);
}
}
@@ -569,7 +565,9 @@ MEM_STATIC int ZSTD_disableLiteralsCompression(const ZSTD_CCtx_params* cctxParam
* Only called when the sequence ends past ilimit_w, so it only needs to be optimized for single
* large copies.
*/
-static void ZSTD_safecopyLiterals(BYTE* op, BYTE const* ip, BYTE const* const iend, BYTE const* ilimit_w) {
+static void
+ZSTD_safecopyLiterals(BYTE* op, BYTE const* ip, BYTE const* const iend, BYTE const* ilimit_w)
+{
assert(iend > ilimit_w);
if (ip <= ilimit_w) {
ZSTD_wildcopy(op, ip, ilimit_w - ip, ZSTD_no_overlap);
@@ -579,14 +577,30 @@ static void ZSTD_safecopyLiterals(BYTE* op, BYTE const* ip, BYTE const* const ie
while (ip < iend) *op++ = *ip++;
}
+#define ZSTD_REP_MOVE (ZSTD_REP_NUM-1)
+#define STORE_REPCODE_1 STORE_REPCODE(1)
+#define STORE_REPCODE_2 STORE_REPCODE(2)
+#define STORE_REPCODE_3 STORE_REPCODE(3)
+#define STORE_REPCODE(r) (assert((r)>=1), assert((r)<=3), (r)-1)
+#define STORE_OFFSET(o) (assert((o)>0), o + ZSTD_REP_MOVE)
+#define STORED_IS_OFFSET(o) ((o) > ZSTD_REP_MOVE)
+#define STORED_IS_REPCODE(o) ((o) <= ZSTD_REP_MOVE)
+#define STORED_OFFSET(o) (assert(STORED_IS_OFFSET(o)), (o)-ZSTD_REP_MOVE)
+#define STORED_REPCODE(o) (assert(STORED_IS_REPCODE(o)), (o)+1) /* returns ID 1,2,3 */
+#define STORED_TO_OFFBASE(o) ((o)+1)
+#define OFFBASE_TO_STORED(o) ((o)-1)
+
/*! ZSTD_storeSeq() :
- * Store a sequence (litlen, litPtr, offCode and mlBase) into seqStore_t.
- * `offCode` : distance to match + ZSTD_REP_MOVE (values <= ZSTD_REP_MOVE are repCodes).
- * `mlBase` : matchLength - MINMATCH
+ * Store a sequence (litlen, litPtr, offCode and matchLength) into seqStore_t.
+ * @offBase_minus1 : Users should use employ macros STORE_REPCODE_X and STORE_OFFSET().
+ * @matchLength : must be >= MINMATCH
* Allowed to overread literals up to litLimit.
*/
-HINT_INLINE UNUSED_ATTR
-void ZSTD_storeSeq(seqStore_t* seqStorePtr, size_t litLength, const BYTE* literals, const BYTE* litLimit, U32 offCode, size_t mlBase)
+HINT_INLINE UNUSED_ATTR void
+ZSTD_storeSeq(seqStore_t* seqStorePtr,
+ size_t litLength, const BYTE* literals, const BYTE* litLimit,
+ U32 offBase_minus1,
+ size_t matchLength)
{
BYTE const* const litLimit_w = litLimit - WILDCOPY_OVERLENGTH;
BYTE const* const litEnd = literals + litLength;
@@ -595,7 +609,7 @@ void ZSTD_storeSeq(seqStore_t* seqStorePtr, size_t litLength, const BYTE* litera
if (g_start==NULL) g_start = (const BYTE*)literals; /* note : index only works for compression within a single segment */
{ U32 const pos = (U32)((const BYTE*)literals - g_start);
DEBUGLOG(6, "Cpos%7u :%3u literals, match%4u bytes at offCode%7u",
- pos, (U32)litLength, (U32)mlBase+MINMATCH, (U32)offCode);
+ pos, (U32)litLength, (U32)matchLength, (U32)offBase_minus1);
}
#endif
assert((size_t)(seqStorePtr->sequences - seqStorePtr->sequencesStart) < seqStorePtr->maxNbSeq);
@@ -626,19 +640,59 @@ void ZSTD_storeSeq(seqStore_t* seqStorePtr, size_t litLength, const BYTE* litera
seqStorePtr->sequences[0].litLength = (U16)litLength;
/* match offset */
- seqStorePtr->sequences[0].offset = offCode + 1;
+ seqStorePtr->sequences[0].offBase = STORED_TO_OFFBASE(offBase_minus1);
/* match Length */
- if (mlBase>0xFFFF) {
- 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);
+ assert(matchLength >= MINMATCH);
+ { size_t const mlBase = matchLength - MINMATCH;
+ if (mlBase>0xFFFF) {
+ 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].mlBase = (U16)mlBase;
}
- seqStorePtr->sequences[0].matchLength = (U16)mlBase;
seqStorePtr->sequences++;
}
+/* ZSTD_updateRep() :
+ * updates in-place @rep (array of repeat offsets)
+ * @offBase_minus1 : sum-type, with same numeric representation as ZSTD_storeSeq()
+ */
+MEM_STATIC void
+ZSTD_updateRep(U32 rep[ZSTD_REP_NUM], U32 const offBase_minus1, U32 const ll0)
+{
+ if (STORED_IS_OFFSET(offBase_minus1)) { /* full offset */
+ rep[2] = rep[1];
+ rep[1] = rep[0];
+ rep[0] = STORED_OFFSET(offBase_minus1);
+ } else { /* repcode */
+ U32 const repCode = STORED_REPCODE(offBase_minus1) - 1 + ll0;
+ if (repCode > 0) { /* note : if repCode==0, no change */
+ U32 const currentOffset = (repCode==ZSTD_REP_NUM) ? (rep[0] - 1) : rep[repCode];
+ rep[2] = (repCode >= 2) ? rep[1] : rep[2];
+ rep[1] = rep[0];
+ rep[0] = currentOffset;
+ } else { /* repCode == 0 */
+ /* nothing to do */
+ }
+ }
+}
+
+typedef struct repcodes_s {
+ U32 rep[3];
+} repcodes_t;
+
+MEM_STATIC repcodes_t
+ZSTD_newRep(U32 const rep[ZSTD_REP_NUM], U32 const offBase_minus1, U32 const ll0)
+{
+ repcodes_t newReps;
+ ZSTD_memcpy(&newReps, rep, sizeof(newReps));
+ ZSTD_updateRep(newReps.rep, offBase_minus1, ll0);
+ return newReps;
+}
+
/*-*************************************
* Match length counter
@@ -651,8 +705,14 @@ static unsigned ZSTD_NbCommonBytes (size_t val)
# if STATIC_BMI2
return _tzcnt_u64(val) >> 3;
# else
- unsigned long r = 0;
- return _BitScanForward64( &r, (U64)val ) ? (unsigned)(r >> 3) : 0;
+ if (val != 0) {
+ unsigned long r;
+ _BitScanForward64(&r, (U64)val);
+ return (unsigned)(r >> 3);
+ } else {
+ /* Should not reach this code path */
+ __assume(0);
+ }
# endif
# elif defined(__GNUC__) && (__GNUC__ >= 4)
return (__builtin_ctzll((U64)val) >> 3);
@@ -669,8 +729,14 @@ static unsigned ZSTD_NbCommonBytes (size_t val)
# endif
} else { /* 32 bits */
# if defined(_MSC_VER)
- unsigned long r=0;
- return _BitScanForward( &r, (U32)val ) ? (unsigned)(r >> 3) : 0;
+ if (val != 0) {
+ unsigned long r;
+ _BitScanForward(&r, (U32)val);
+ return (unsigned)(r >> 3);
+ } else {
+ /* Should not reach this code path */
+ __assume(0);
+ }
# elif defined(__GNUC__) && (__GNUC__ >= 3)
return (__builtin_ctz((U32)val) >> 3);
# else
@@ -687,8 +753,14 @@ static unsigned ZSTD_NbCommonBytes (size_t val)
# if STATIC_BMI2
return _lzcnt_u64(val) >> 3;
# else
- unsigned long r = 0;
- return _BitScanReverse64(&r, (U64)val) ? (unsigned)(r >> 3) : 0;
+ if (val != 0) {
+ unsigned long r;
+ _BitScanReverse64(&r, (U64)val);
+ return (unsigned)(r >> 3);
+ } else {
+ /* Should not reach this code path */
+ __assume(0);
+ }
# endif
# elif defined(__GNUC__) && (__GNUC__ >= 4)
return (__builtin_clzll(val) >> 3);
@@ -702,8 +774,14 @@ static unsigned ZSTD_NbCommonBytes (size_t val)
# endif
} else { /* 32 bits */
# if defined(_MSC_VER)
- unsigned long r = 0;
- return _BitScanReverse( &r, (unsigned long)val ) ? (unsigned)(r >> 3) : 0;
+ if (val != 0) {
+ unsigned long r;
+ _BitScanReverse(&r, (unsigned long)val);
+ return (unsigned)(r >> 3);
+ } else {
+ /* Should not reach this code path */
+ __assume(0);
+ }
# elif defined(__GNUC__) && (__GNUC__ >= 3)
return (__builtin_clz((U32)val) >> 3);
# else
@@ -884,9 +962,9 @@ MEM_STATIC void ZSTD_window_clear(ZSTD_window_t* window)
MEM_STATIC U32 ZSTD_window_isEmpty(ZSTD_window_t const window)
{
- return window.dictLimit == 1 &&
- window.lowLimit == 1 &&
- (window.nextSrc - window.base) == 1;
+ return window.dictLimit == ZSTD_WINDOW_START_INDEX &&
+ window.lowLimit == ZSTD_WINDOW_START_INDEX &&
+ (window.nextSrc - window.base) == ZSTD_WINDOW_START_INDEX;
}
/**
@@ -937,7 +1015,9 @@ MEM_STATIC U32 ZSTD_window_canOverflowCorrect(ZSTD_window_t const window,
{
U32 const cycleSize = 1u << cycleLog;
U32 const curr = (U32)((BYTE const*)src - window.base);
- U32 const minIndexToOverflowCorrect = cycleSize + MAX(maxDist, cycleSize);
+ U32 const minIndexToOverflowCorrect = cycleSize
+ + MAX(maxDist, cycleSize)
+ + ZSTD_WINDOW_START_INDEX;
/* Adjust the min index to backoff the overflow correction frequency,
* so we don't waste too much CPU in overflow correction. If this
@@ -1012,10 +1092,14 @@ MEM_STATIC U32 ZSTD_window_correctOverflow(ZSTD_window_t* window, U32 cycleLog,
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 ? cycleSize : currentCycle0;
- U32 const newCurrent = currentCycle1 + MAX(maxDist, cycleSize);
+ U32 const currentCycle = curr & cycleMask;
+ /* Ensure newCurrent - maxDist >= ZSTD_WINDOW_START_INDEX. */
+ U32 const currentCycleCorrection = currentCycle < ZSTD_WINDOW_START_INDEX
+ ? MAX(cycleSize, ZSTD_WINDOW_START_INDEX)
+ : 0;
+ U32 const newCurrent = currentCycle
+ + currentCycleCorrection
+ + MAX(maxDist, cycleSize);
U32 const correction = curr - newCurrent;
/* maxDist must be a power of two so that:
* (newCurrent & cycleMask) == (curr & cycleMask)
@@ -1031,14 +1115,20 @@ MEM_STATIC U32 ZSTD_window_correctOverflow(ZSTD_window_t* window, U32 cycleLog,
window->base += correction;
window->dictBase += correction;
- if (window->lowLimit <= correction) window->lowLimit = 1;
- else window->lowLimit -= correction;
- if (window->dictLimit <= correction) window->dictLimit = 1;
- else window->dictLimit -= correction;
+ if (window->lowLimit < correction + ZSTD_WINDOW_START_INDEX) {
+ window->lowLimit = ZSTD_WINDOW_START_INDEX;
+ } else {
+ window->lowLimit -= correction;
+ }
+ if (window->dictLimit < correction + ZSTD_WINDOW_START_INDEX) {
+ window->dictLimit = ZSTD_WINDOW_START_INDEX;
+ } else {
+ window->dictLimit -= correction;
+ }
/* Ensure we can still reference the full window. */
assert(newCurrent >= maxDist);
- assert(newCurrent - maxDist >= 1);
+ assert(newCurrent - maxDist >= ZSTD_WINDOW_START_INDEX);
/* Ensure that lowLimit and dictLimit didn't underflow. */
assert(window->lowLimit <= newCurrent);
assert(window->dictLimit <= newCurrent);
@@ -1149,11 +1239,12 @@ ZSTD_checkDictValidity(const ZSTD_window_t* window,
MEM_STATIC void ZSTD_window_init(ZSTD_window_t* window) {
ZSTD_memset(window, 0, sizeof(*window));
- window->base = (BYTE const*)"";
- window->dictBase = (BYTE const*)"";
- 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->base = (BYTE const*)" ";
+ window->dictBase = (BYTE const*)" ";
+ ZSTD_STATIC_ASSERT(ZSTD_DUBT_UNSORTED_MARK < ZSTD_WINDOW_START_INDEX); /* Start above ZSTD_DUBT_UNSORTED_MARK */
+ window->dictLimit = ZSTD_WINDOW_START_INDEX; /* start from >0, so that 1st position is valid */
+ window->lowLimit = ZSTD_WINDOW_START_INDEX; /* it ensures first and later CCtx usages compress the same */
+ window->nextSrc = window->base + ZSTD_WINDOW_START_INDEX; /* see issue #1241 */
window->nbOverflowCorrections = 0;
}
@@ -1206,15 +1297,15 @@ MEM_STATIC U32 ZSTD_window_update(ZSTD_window_t* window,
*/
MEM_STATIC U32 ZSTD_getLowestMatchIndex(const ZSTD_matchState_t* ms, U32 curr, unsigned windowLog)
{
- U32 const maxDistance = 1U << windowLog;
- U32 const lowestValid = ms->window.lowLimit;
- U32 const withinWindow = (curr - lowestValid > maxDistance) ? curr - maxDistance : lowestValid;
- U32 const isDictionary = (ms->loadedDictEnd != 0);
+ U32 const maxDistance = 1U << windowLog;
+ U32 const lowestValid = ms->window.lowLimit;
+ U32 const withinWindow = (curr - lowestValid > maxDistance) ? curr - maxDistance : lowestValid;
+ U32 const isDictionary = (ms->loadedDictEnd != 0);
/* When using a dictionary the entire dictionary is valid if a single byte of the dictionary
* is within the window. We invalidate the dictionary (and set loadedDictEnd to 0) when it isn't
* valid for the entire block. So this check is sufficient to find the lowest valid match index.
*/
- U32 const matchLowest = isDictionary ? lowestValid : withinWindow;
+ U32 const matchLowest = isDictionary ? lowestValid : withinWindow;
return matchLowest;
}
diff --git a/thirdparty/zstd/compress/zstd_compress_literals.c b/thirdparty/zstd/compress/zstd_compress_literals.c
index 008337bb1b..52b0a8059a 100644
--- a/thirdparty/zstd/compress/zstd_compress_literals.c
+++ b/thirdparty/zstd/compress/zstd_compress_literals.c
@@ -73,7 +73,8 @@ size_t ZSTD_compressLiterals (ZSTD_hufCTables_t const* prevHuf,
void* dst, size_t dstCapacity,
const void* src, size_t srcSize,
void* entropyWorkspace, size_t entropyWorkspaceSize,
- const int bmi2)
+ const int bmi2,
+ unsigned suspectUncompressible)
{
size_t const minGain = ZSTD_minGain(srcSize, strategy);
size_t const lhSize = 3 + (srcSize >= 1 KB) + (srcSize >= 16 KB);
@@ -105,11 +106,11 @@ size_t ZSTD_compressLiterals (ZSTD_hufCTables_t const* prevHuf,
HUF_compress1X_repeat(
ostart+lhSize, dstCapacity-lhSize, src, srcSize,
HUF_SYMBOLVALUE_MAX, HUF_TABLELOG_DEFAULT, entropyWorkspace, entropyWorkspaceSize,
- (HUF_CElt*)nextHuf->CTable, &repeat, preferRepeat, bmi2) :
+ (HUF_CElt*)nextHuf->CTable, &repeat, preferRepeat, bmi2, suspectUncompressible) :
HUF_compress4X_repeat(
ostart+lhSize, dstCapacity-lhSize, src, srcSize,
HUF_SYMBOLVALUE_MAX, HUF_TABLELOG_DEFAULT, entropyWorkspace, entropyWorkspaceSize,
- (HUF_CElt*)nextHuf->CTable, &repeat, preferRepeat, bmi2);
+ (HUF_CElt*)nextHuf->CTable, &repeat, preferRepeat, bmi2, suspectUncompressible);
if (repeat != HUF_repeat_none) {
/* reused the existing table */
DEBUGLOG(5, "Reusing previous huffman table");
diff --git a/thirdparty/zstd/compress/zstd_compress_literals.h b/thirdparty/zstd/compress/zstd_compress_literals.h
index 9904c0cd30..9775fb97cb 100644
--- a/thirdparty/zstd/compress/zstd_compress_literals.h
+++ b/thirdparty/zstd/compress/zstd_compress_literals.h
@@ -18,12 +18,14 @@ 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);
+/* If suspectUncompressible then some sampling checks will be run to potentially skip huffman coding */
size_t ZSTD_compressLiterals (ZSTD_hufCTables_t const* prevHuf,
ZSTD_hufCTables_t* nextHuf,
ZSTD_strategy strategy, int disableLiteralCompression,
void* dst, size_t dstCapacity,
const void* src, size_t srcSize,
void* entropyWorkspace, size_t entropyWorkspaceSize,
- const int bmi2);
+ const int bmi2,
+ unsigned suspectUncompressible);
#endif /* ZSTD_COMPRESS_LITERALS_H */
diff --git a/thirdparty/zstd/compress/zstd_compress_sequences.c b/thirdparty/zstd/compress/zstd_compress_sequences.c
index 611eabdcbb..f1e40af2ea 100644
--- a/thirdparty/zstd/compress/zstd_compress_sequences.c
+++ b/thirdparty/zstd/compress/zstd_compress_sequences.c
@@ -275,10 +275,11 @@ ZSTD_buildCTable(void* dst, size_t dstCapacity,
assert(nbSeq_1 > 1);
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(FSE_normalizeCount(wksp->norm, tableLog, count, nbSeq_1, max, ZSTD_useLowProbCount(nbSeq_1)), "FSE_normalizeCount failed");
+ assert(oend >= op);
+ { size_t const NCountSize = FSE_writeNCount(op, (size_t)(oend - op), wksp->norm, max, tableLog); /* overflow protected */
FORWARD_IF_ERROR(NCountSize, "FSE_writeNCount failed");
- FORWARD_IF_ERROR(FSE_buildCTable_wksp(nextCTable, wksp->norm, max, tableLog, wksp->wksp, sizeof(wksp->wksp)), "");
+ FORWARD_IF_ERROR(FSE_buildCTable_wksp(nextCTable, wksp->norm, max, tableLog, wksp->wksp, sizeof(wksp->wksp)), "FSE_buildCTable_wksp failed");
return NCountSize;
}
}
@@ -312,19 +313,19 @@ ZSTD_encodeSequences_body(
FSE_initCState2(&stateLitLength, CTable_LitLength, llCodeTable[nbSeq-1]);
BIT_addBits(&blockStream, sequences[nbSeq-1].litLength, LL_bits[llCodeTable[nbSeq-1]]);
if (MEM_32bits()) BIT_flushBits(&blockStream);
- BIT_addBits(&blockStream, sequences[nbSeq-1].matchLength, ML_bits[mlCodeTable[nbSeq-1]]);
+ BIT_addBits(&blockStream, sequences[nbSeq-1].mlBase, ML_bits[mlCodeTable[nbSeq-1]]);
if (MEM_32bits()) BIT_flushBits(&blockStream);
if (longOffsets) {
U32 const ofBits = ofCodeTable[nbSeq-1];
unsigned const extraBits = ofBits - MIN(ofBits, STREAM_ACCUMULATOR_MIN-1);
if (extraBits) {
- BIT_addBits(&blockStream, sequences[nbSeq-1].offset, extraBits);
+ BIT_addBits(&blockStream, sequences[nbSeq-1].offBase, extraBits);
BIT_flushBits(&blockStream);
}
- BIT_addBits(&blockStream, sequences[nbSeq-1].offset >> extraBits,
+ BIT_addBits(&blockStream, sequences[nbSeq-1].offBase >> extraBits,
ofBits - extraBits);
} else {
- BIT_addBits(&blockStream, sequences[nbSeq-1].offset, ofCodeTable[nbSeq-1]);
+ BIT_addBits(&blockStream, sequences[nbSeq-1].offBase, ofCodeTable[nbSeq-1]);
}
BIT_flushBits(&blockStream);
@@ -338,8 +339,8 @@ ZSTD_encodeSequences_body(
U32 const mlBits = ML_bits[mlCode];
DEBUGLOG(6, "encoding: litlen:%2u - matchlen:%2u - offCode:%7u",
(unsigned)sequences[n].litLength,
- (unsigned)sequences[n].matchLength + MINMATCH,
- (unsigned)sequences[n].offset);
+ (unsigned)sequences[n].mlBase + MINMATCH,
+ (unsigned)sequences[n].offBase);
/* 32b*/ /* 64b*/
/* (7)*/ /* (7)*/
FSE_encodeSymbol(&blockStream, &stateOffsetBits, ofCode); /* 15 */ /* 15 */
@@ -350,18 +351,18 @@ ZSTD_encodeSequences_body(
BIT_flushBits(&blockStream); /* (7)*/
BIT_addBits(&blockStream, sequences[n].litLength, llBits);
if (MEM_32bits() && ((llBits+mlBits)>24)) BIT_flushBits(&blockStream);
- BIT_addBits(&blockStream, sequences[n].matchLength, mlBits);
+ BIT_addBits(&blockStream, sequences[n].mlBase, mlBits);
if (MEM_32bits() || (ofBits+mlBits+llBits > 56)) BIT_flushBits(&blockStream);
if (longOffsets) {
unsigned const extraBits = ofBits - MIN(ofBits, STREAM_ACCUMULATOR_MIN-1);
if (extraBits) {
- BIT_addBits(&blockStream, sequences[n].offset, extraBits);
+ BIT_addBits(&blockStream, sequences[n].offBase, extraBits);
BIT_flushBits(&blockStream); /* (7)*/
}
- BIT_addBits(&blockStream, sequences[n].offset >> extraBits,
+ BIT_addBits(&blockStream, sequences[n].offBase >> extraBits,
ofBits - extraBits); /* 31 */
} else {
- BIT_addBits(&blockStream, sequences[n].offset, ofBits); /* 31 */
+ BIT_addBits(&blockStream, sequences[n].offBase, ofBits); /* 31 */
}
BIT_flushBits(&blockStream); /* (7)*/
DEBUGLOG(7, "remaining space : %i", (int)(blockStream.endPtr - blockStream.ptr));
@@ -398,7 +399,7 @@ ZSTD_encodeSequences_default(
#if DYNAMIC_BMI2
-static TARGET_ATTRIBUTE("bmi2") size_t
+static BMI2_TARGET_ATTRIBUTE size_t
ZSTD_encodeSequences_bmi2(
void* dst, size_t dstCapacity,
FSE_CTable const* CTable_MatchLength, BYTE const* mlCodeTable,
diff --git a/thirdparty/zstd/compress/zstd_compress_superblock.c b/thirdparty/zstd/compress/zstd_compress_superblock.c
index e4e45069bc..10e3378577 100644
--- a/thirdparty/zstd/compress/zstd_compress_superblock.c
+++ b/thirdparty/zstd/compress/zstd_compress_superblock.c
@@ -132,6 +132,7 @@ static size_t ZSTD_seqDecompressedSize(seqStore_t const* seqStore, const seqDef*
const seqDef* sp = sstart;
size_t matchLengthSum = 0;
size_t litLengthSum = 0;
+ (void)(litLengthSum); /* suppress unused variable warning on some environments */
while (send-sp > 0) {
ZSTD_sequenceLength const seqLen = ZSTD_getSequenceLength(seqStore, sp);
litLengthSum += seqLen.litLength;
@@ -324,7 +325,7 @@ static size_t ZSTD_estimateSubBlockSize_literal(const BYTE* literals, size_t lit
static size_t ZSTD_estimateSubBlockSize_symbolType(symbolEncodingType_e type,
const BYTE* codeTable, unsigned maxCode,
size_t nbSeq, const FSE_CTable* fseCTable,
- const U32* additionalBits,
+ const U8* additionalBits,
short const* defaultNorm, U32 defaultNormLog, U32 defaultMax,
void* workspace, size_t wkspSize)
{
@@ -474,7 +475,7 @@ static size_t ZSTD_compressSubBlock_multi(const seqStore_t* seqStorePtr,
/* I think there is an optimization opportunity here.
* Calling ZSTD_estimateSubBlockSize for every sequence can be wasteful
* since it recalculates estimate from scratch.
- * For example, it would recount literal distribution and symbol codes everytime.
+ * For example, it would recount literal distribution and symbol codes every time.
*/
cBlockSizeEstimate = ZSTD_estimateSubBlockSize(lp, litSize, ofCodePtr, llCodePtr, mlCodePtr, seqCount,
&nextCBlock->entropy, entropyMetadata,
@@ -538,7 +539,7 @@ static size_t ZSTD_compressSubBlock_multi(const seqStore_t* seqStorePtr,
repcodes_t rep;
ZSTD_memcpy(&rep, prevCBlock->rep, sizeof(rep));
for (seq = sstart; seq < sp; ++seq) {
- rep = ZSTD_updateRep(rep.rep, seq->offset - 1, ZSTD_getSequenceLength(seqStorePtr, seq).litLength == 0);
+ ZSTD_updateRep(rep.rep, seq->offBase - 1, ZSTD_getSequenceLength(seqStorePtr, seq).litLength == 0);
}
ZSTD_memcpy(nextCBlock->rep, &rep, sizeof(rep));
}
diff --git a/thirdparty/zstd/compress/zstd_cwksp.h b/thirdparty/zstd/compress/zstd_cwksp.h
index 2656d26ca2..dc3f40c80c 100644
--- a/thirdparty/zstd/compress/zstd_cwksp.h
+++ b/thirdparty/zstd/compress/zstd_cwksp.h
@@ -219,7 +219,7 @@ MEM_STATIC size_t ZSTD_cwksp_aligned_alloc_size(size_t size) {
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.
+ * to align the beginning of the aligned section.
*
* n_1 + n_2 == 64 bytes if the cwksp is freshly allocated, due to tables and
* aligneds being sized in multiples of 64 bytes.
@@ -243,12 +243,14 @@ MEM_STATIC size_t ZSTD_cwksp_bytes_to_align_ptr(void* ptr, const size_t alignByt
/**
* 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)
+ * 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) {
+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",
@@ -260,6 +262,8 @@ MEM_STATIC void* ZSTD_cwksp_reserve_internal_buffer_space(ZSTD_cwksp* ws, size_t
ws->allocFailed = 1;
return NULL;
}
+ /* the area is reserved from the end of wksp.
+ * If it overlaps with tableValidEnd, it voids guarantees on values' range */
if (alloc < ws->tableValidEnd) {
ws->tableValidEnd = alloc;
}
@@ -269,10 +273,12 @@ MEM_STATIC void* ZSTD_cwksp_reserve_internal_buffer_space(ZSTD_cwksp* ws, size_t
/**
* Moves the cwksp to the next phase, and does any necessary allocations.
+ * cwksp initialization must necessarily go through each phase in order.
* 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) {
+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 */
@@ -295,15 +301,15 @@ MEM_STATIC size_t ZSTD_cwksp_internal_advance_phase(
{ /* 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;
+ void* const objectEnd = (BYTE*)alloc + bytesToAlign;
DEBUGLOG(5, "reserving table alignment addtl space: %zu", bytesToAlign);
- RETURN_ERROR_IF(end > ws->workspaceEnd, memory_allocation,
+ RETURN_ERROR_IF(objectEnd > ws->workspaceEnd, memory_allocation,
"table phase - alignment initial allocation failed!");
- ws->objectEnd = end;
- ws->tableEnd = end;
- ws->tableValidEnd = end;
- }
- }
+ ws->objectEnd = objectEnd;
+ ws->tableEnd = objectEnd; /* table area starts being empty */
+ if (ws->tableValidEnd < ws->tableEnd) {
+ ws->tableValidEnd = ws->tableEnd;
+ } } }
ws->phase = phase;
ZSTD_cwksp_assert_internal_consistency(ws);
}
@@ -313,15 +319,17 @@ MEM_STATIC size_t ZSTD_cwksp_internal_advance_phase(
/**
* Returns whether this object/buffer/etc was allocated in this workspace.
*/
-MEM_STATIC int ZSTD_cwksp_owns_buffer(const ZSTD_cwksp* ws, const void* ptr) {
+MEM_STATIC int ZSTD_cwksp_owns_buffer(const ZSTD_cwksp* ws, const void* ptr)
+{
return (ptr != NULL) && (ws->workspace <= ptr) && (ptr <= ws->workspaceEnd);
}
/**
* Internal function. Do not use directly.
*/
-MEM_STATIC void* ZSTD_cwksp_reserve_internal(
- ZSTD_cwksp* ws, size_t bytes, ZSTD_cwksp_alloc_phase_e phase) {
+MEM_STATIC void*
+ZSTD_cwksp_reserve_internal(ZSTD_cwksp* ws, size_t bytes, ZSTD_cwksp_alloc_phase_e phase)
+{
void* alloc;
if (ZSTD_isError(ZSTD_cwksp_internal_advance_phase(ws, phase)) || bytes == 0) {
return NULL;
@@ -351,14 +359,16 @@ MEM_STATIC void* ZSTD_cwksp_reserve_internal(
/**
* Reserves and returns unaligned memory.
*/
-MEM_STATIC BYTE* ZSTD_cwksp_reserve_buffer(ZSTD_cwksp* ws, size_t bytes) {
+MEM_STATIC BYTE* ZSTD_cwksp_reserve_buffer(ZSTD_cwksp* ws, size_t bytes)
+{
return (BYTE*)ZSTD_cwksp_reserve_internal(ws, bytes, ZSTD_cwksp_alloc_buffers);
}
/**
* 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) {
+MEM_STATIC void* ZSTD_cwksp_reserve_aligned(ZSTD_cwksp* ws, size_t bytes)
+{
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);
@@ -370,7 +380,8 @@ MEM_STATIC void* ZSTD_cwksp_reserve_aligned(ZSTD_cwksp* ws, size_t bytes) {
* 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) {
+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;
void* end;
@@ -408,9 +419,11 @@ MEM_STATIC void* ZSTD_cwksp_reserve_table(ZSTD_cwksp* ws, size_t bytes) {
/**
* Aligned on sizeof(void*).
+ * Note : should happen only once, at workspace first initialization
*/
-MEM_STATIC void* ZSTD_cwksp_reserve_object(ZSTD_cwksp* ws, size_t bytes) {
- size_t roundedBytes = ZSTD_cwksp_align(bytes, sizeof(void*));
+MEM_STATIC void* ZSTD_cwksp_reserve_object(ZSTD_cwksp* ws, size_t bytes)
+{
+ size_t const roundedBytes = ZSTD_cwksp_align(bytes, sizeof(void*));
void* alloc = ws->objectEnd;
void* end = (BYTE*)alloc + roundedBytes;
@@ -419,15 +432,15 @@ MEM_STATIC void* ZSTD_cwksp_reserve_object(ZSTD_cwksp* ws, size_t bytes) {
end = (BYTE *)end + 2 * ZSTD_CWKSP_ASAN_REDZONE_SIZE;
#endif
- DEBUGLOG(5,
+ DEBUGLOG(4,
"cwksp: reserving %p object %zd bytes (rounded to %zd), %zd bytes remaining",
alloc, bytes, roundedBytes, ZSTD_cwksp_available_space(ws) - roundedBytes);
- assert(((size_t)alloc & (sizeof(void*)-1)) == 0);
- assert((bytes & (sizeof(void*)-1)) == 0);
+ assert((size_t)alloc % ZSTD_ALIGNOF(void*) == 0);
+ assert(bytes % ZSTD_ALIGNOF(void*) == 0);
ZSTD_cwksp_assert_internal_consistency(ws);
/* we must be in the first phase, no advance is possible */
if (ws->phase != ZSTD_cwksp_alloc_objects || end > ws->workspaceEnd) {
- DEBUGLOG(4, "cwksp: object alloc failed!");
+ DEBUGLOG(3, "cwksp: object alloc failed!");
ws->allocFailed = 1;
return NULL;
}
@@ -438,7 +451,7 @@ MEM_STATIC void* ZSTD_cwksp_reserve_object(ZSTD_cwksp* ws, size_t 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;
+ alloc = (BYTE*)alloc + ZSTD_CWKSP_ASAN_REDZONE_SIZE;
if (ws->isStatic == ZSTD_cwksp_dynamic_alloc) {
__asan_unpoison_memory_region(alloc, bytes);
}
@@ -447,7 +460,8 @@ MEM_STATIC void* ZSTD_cwksp_reserve_object(ZSTD_cwksp* ws, size_t bytes) {
return alloc;
}
-MEM_STATIC void ZSTD_cwksp_mark_tables_dirty(ZSTD_cwksp* ws) {
+MEM_STATIC void ZSTD_cwksp_mark_tables_dirty(ZSTD_cwksp* ws)
+{
DEBUGLOG(4, "cwksp: ZSTD_cwksp_mark_tables_dirty");
#if ZSTD_MEMORY_SANITIZER && !defined (ZSTD_MSAN_DONT_POISON_WORKSPACE)
diff --git a/thirdparty/zstd/compress/zstd_double_fast.c b/thirdparty/zstd/compress/zstd_double_fast.c
index d0d3a784dd..76933dea26 100644
--- a/thirdparty/zstd/compress/zstd_double_fast.c
+++ b/thirdparty/zstd/compress/zstd_double_fast.c
@@ -48,10 +48,216 @@ void ZSTD_fillDoubleHashTable(ZSTD_matchState_t* ms,
FORCE_INLINE_TEMPLATE
-size_t ZSTD_compressBlock_doubleFast_generic(
+size_t ZSTD_compressBlock_doubleFast_noDict_generic(
+ ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
+ void const* src, size_t srcSize, U32 const mls /* template */)
+{
+ ZSTD_compressionParameters const* cParams = &ms->cParams;
+ U32* const hashLong = ms->hashTable;
+ const U32 hBitsL = cParams->hashLog;
+ U32* const hashSmall = ms->chainTable;
+ const U32 hBitsS = cParams->chainLog;
+ const BYTE* const base = ms->window.base;
+ const BYTE* const istart = (const BYTE*)src;
+ const BYTE* anchor = istart;
+ const U32 endIndex = (U32)((size_t)(istart - base) + srcSize);
+ /* presumes that, if there is a dictionary, it must be using Attach mode */
+ const U32 prefixLowestIndex = ZSTD_getLowestPrefixIndex(ms, endIndex, cParams->windowLog);
+ const BYTE* const prefixLowest = base + prefixLowestIndex;
+ const BYTE* const iend = istart + srcSize;
+ const BYTE* const ilimit = iend - HASH_READ_SIZE;
+ U32 offset_1=rep[0], offset_2=rep[1];
+ U32 offsetSaved = 0;
+
+ size_t mLength;
+ U32 offset;
+ U32 curr;
+
+ /* how many positions to search before increasing step size */
+ const size_t kStepIncr = 1 << kSearchStrength;
+ /* the position at which to increment the step size if no match is found */
+ const BYTE* nextStep;
+ size_t step; /* the current step size */
+
+ size_t hl0; /* the long hash at ip */
+ size_t hl1; /* the long hash at ip1 */
+
+ U32 idxl0; /* the long match index for ip */
+ U32 idxl1; /* the long match index for ip1 */
+
+ const BYTE* matchl0; /* the long match for ip */
+ const BYTE* matchs0; /* the short match for ip */
+ const BYTE* matchl1; /* the long match for ip1 */
+
+ const BYTE* ip = istart; /* the current position */
+ const BYTE* ip1; /* the next position */
+
+ DEBUGLOG(5, "ZSTD_compressBlock_doubleFast_noDict_generic");
+
+ /* init */
+ ip += ((ip - prefixLowest) == 0);
+ {
+ U32 const current = (U32)(ip - base);
+ U32 const windowLow = ZSTD_getLowestPrefixIndex(ms, current, cParams->windowLog);
+ U32 const maxRep = current - windowLow;
+ if (offset_2 > maxRep) offsetSaved = offset_2, offset_2 = 0;
+ if (offset_1 > maxRep) offsetSaved = offset_1, offset_1 = 0;
+ }
+
+ /* Outer Loop: one iteration per match found and stored */
+ while (1) {
+ step = 1;
+ nextStep = ip + kStepIncr;
+ ip1 = ip + step;
+
+ if (ip1 > ilimit) {
+ goto _cleanup;
+ }
+
+ hl0 = ZSTD_hashPtr(ip, hBitsL, 8);
+ idxl0 = hashLong[hl0];
+ matchl0 = base + idxl0;
+
+ /* Inner Loop: one iteration per search / position */
+ do {
+ const size_t hs0 = ZSTD_hashPtr(ip, hBitsS, mls);
+ const U32 idxs0 = hashSmall[hs0];
+ curr = (U32)(ip-base);
+ matchs0 = base + idxs0;
+
+ hashLong[hl0] = hashSmall[hs0] = curr; /* update hash tables */
+
+ /* check noDict repcode */
+ if ((offset_1 > 0) & (MEM_read32(ip+1-offset_1) == MEM_read32(ip+1))) {
+ mLength = ZSTD_count(ip+1+4, ip+1+4-offset_1, iend) + 4;
+ ip++;
+ ZSTD_storeSeq(seqStore, (size_t)(ip-anchor), anchor, iend, STORE_REPCODE_1, mLength);
+ goto _match_stored;
+ }
+
+ hl1 = ZSTD_hashPtr(ip1, hBitsL, 8);
+
+ if (idxl0 > prefixLowestIndex) {
+ /* check prefix long match */
+ if (MEM_read64(matchl0) == MEM_read64(ip)) {
+ mLength = ZSTD_count(ip+8, matchl0+8, iend) + 8;
+ offset = (U32)(ip-matchl0);
+ while (((ip>anchor) & (matchl0>prefixLowest)) && (ip[-1] == matchl0[-1])) { ip--; matchl0--; mLength++; } /* catch up */
+ goto _match_found;
+ }
+ }
+
+ idxl1 = hashLong[hl1];
+ matchl1 = base + idxl1;
+
+ if (idxs0 > prefixLowestIndex) {
+ /* check prefix short match */
+ if (MEM_read32(matchs0) == MEM_read32(ip)) {
+ goto _search_next_long;
+ }
+ }
+
+ if (ip1 >= nextStep) {
+ PREFETCH_L1(ip1 + 64);
+ PREFETCH_L1(ip1 + 128);
+ step++;
+ nextStep += kStepIncr;
+ }
+ ip = ip1;
+ ip1 += step;
+
+ hl0 = hl1;
+ idxl0 = idxl1;
+ matchl0 = matchl1;
+ #if defined(__aarch64__)
+ PREFETCH_L1(ip+256);
+ #endif
+ } while (ip1 <= ilimit);
+
+_cleanup:
+ /* save reps for next block */
+ rep[0] = offset_1 ? offset_1 : offsetSaved;
+ rep[1] = offset_2 ? offset_2 : offsetSaved;
+
+ /* Return the last literals size */
+ return (size_t)(iend - anchor);
+
+_search_next_long:
+
+ /* check prefix long +1 match */
+ if (idxl1 > prefixLowestIndex) {
+ if (MEM_read64(matchl1) == MEM_read64(ip1)) {
+ ip = ip1;
+ mLength = ZSTD_count(ip+8, matchl1+8, iend) + 8;
+ offset = (U32)(ip-matchl1);
+ while (((ip>anchor) & (matchl1>prefixLowest)) && (ip[-1] == matchl1[-1])) { ip--; matchl1--; mLength++; } /* catch up */
+ goto _match_found;
+ }
+ }
+
+ /* if no long +1 match, explore the short match we found */
+ mLength = ZSTD_count(ip+4, matchs0+4, iend) + 4;
+ offset = (U32)(ip - matchs0);
+ while (((ip>anchor) & (matchs0>prefixLowest)) && (ip[-1] == matchs0[-1])) { ip--; matchs0--; mLength++; } /* catch up */
+
+ /* fall-through */
+
+_match_found: /* requires ip, offset, mLength */
+ offset_2 = offset_1;
+ offset_1 = offset;
+
+ if (step < 4) {
+ /* It is unsafe to write this value back to the hashtable when ip1 is
+ * greater than or equal to the new ip we will have after we're done
+ * processing this match. Rather than perform that test directly
+ * (ip1 >= ip + mLength), which costs speed in practice, we do a simpler
+ * more predictable test. The minmatch even if we take a short match is
+ * 4 bytes, so as long as step, the distance between ip and ip1
+ * (initially) is less than 4, we know ip1 < new ip. */
+ hashLong[hl1] = (U32)(ip1 - base);
+ }
+
+ ZSTD_storeSeq(seqStore, (size_t)(ip-anchor), anchor, iend, STORE_OFFSET(offset), mLength);
+
+_match_stored:
+ /* match found */
+ ip += mLength;
+ anchor = ip;
+
+ if (ip <= ilimit) {
+ /* Complementary insertion */
+ /* done after iLimit test, as candidates could be > iend-8 */
+ { U32 const indexToInsert = curr+2;
+ hashLong[ZSTD_hashPtr(base+indexToInsert, hBitsL, 8)] = indexToInsert;
+ hashLong[ZSTD_hashPtr(ip-2, hBitsL, 8)] = (U32)(ip-2-base);
+ hashSmall[ZSTD_hashPtr(base+indexToInsert, hBitsS, mls)] = indexToInsert;
+ hashSmall[ZSTD_hashPtr(ip-1, hBitsS, mls)] = (U32)(ip-1-base);
+ }
+
+ /* check immediate repcode */
+ while ( (ip <= ilimit)
+ && ( (offset_2>0)
+ & (MEM_read32(ip) == MEM_read32(ip - offset_2)) )) {
+ /* store sequence */
+ size_t const rLength = ZSTD_count(ip+4, ip+4-offset_2, iend) + 4;
+ U32 const tmpOff = offset_2; offset_2 = offset_1; offset_1 = tmpOff; /* swap offset_2 <=> offset_1 */
+ hashSmall[ZSTD_hashPtr(ip, hBitsS, mls)] = (U32)(ip-base);
+ hashLong[ZSTD_hashPtr(ip, hBitsL, 8)] = (U32)(ip-base);
+ ZSTD_storeSeq(seqStore, 0, anchor, iend, STORE_REPCODE_1, rLength);
+ ip += rLength;
+ anchor = ip;
+ continue; /* faster when present ... (?) */
+ }
+ }
+ }
+}
+
+
+FORCE_INLINE_TEMPLATE
+size_t ZSTD_compressBlock_doubleFast_dictMatchState_generic(
ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
void const* src, size_t srcSize,
- U32 const mls /* template */, ZSTD_dictMode_e const dictMode)
+ U32 const mls /* template */)
{
ZSTD_compressionParameters const* cParams = &ms->cParams;
U32* const hashLong = ms->hashTable;
@@ -72,54 +278,30 @@ size_t ZSTD_compressBlock_doubleFast_generic(
U32 offsetSaved = 0;
const ZSTD_matchState_t* const dms = ms->dictMatchState;
- const ZSTD_compressionParameters* const dictCParams =
- dictMode == ZSTD_dictMatchState ?
- &dms->cParams : NULL;
- const U32* const dictHashLong = dictMode == ZSTD_dictMatchState ?
- dms->hashTable : NULL;
- const U32* const dictHashSmall = dictMode == ZSTD_dictMatchState ?
- dms->chainTable : NULL;
- const U32 dictStartIndex = dictMode == ZSTD_dictMatchState ?
- dms->window.dictLimit : 0;
- const BYTE* const dictBase = dictMode == ZSTD_dictMatchState ?
- dms->window.base : NULL;
- const BYTE* const dictStart = dictMode == ZSTD_dictMatchState ?
- dictBase + dictStartIndex : NULL;
- const BYTE* const dictEnd = dictMode == ZSTD_dictMatchState ?
- dms->window.nextSrc : NULL;
- const U32 dictIndexDelta = dictMode == ZSTD_dictMatchState ?
- prefixLowestIndex - (U32)(dictEnd - dictBase) :
- 0;
- const U32 dictHBitsL = dictMode == ZSTD_dictMatchState ?
- dictCParams->hashLog : hBitsL;
- const U32 dictHBitsS = dictMode == ZSTD_dictMatchState ?
- dictCParams->chainLog : hBitsS;
+ const ZSTD_compressionParameters* const dictCParams = &dms->cParams;
+ const U32* const dictHashLong = dms->hashTable;
+ const U32* const dictHashSmall = dms->chainTable;
+ const U32 dictStartIndex = dms->window.dictLimit;
+ const BYTE* const dictBase = dms->window.base;
+ const BYTE* const dictStart = dictBase + dictStartIndex;
+ const BYTE* const dictEnd = dms->window.nextSrc;
+ const U32 dictIndexDelta = prefixLowestIndex - (U32)(dictEnd - dictBase);
+ const U32 dictHBitsL = dictCParams->hashLog;
+ const U32 dictHBitsS = dictCParams->chainLog;
const U32 dictAndPrefixLength = (U32)((ip - prefixLowest) + (dictEnd - dictStart));
- DEBUGLOG(5, "ZSTD_compressBlock_doubleFast_generic");
-
- assert(dictMode == ZSTD_noDict || dictMode == ZSTD_dictMatchState);
+ DEBUGLOG(5, "ZSTD_compressBlock_doubleFast_dictMatchState_generic");
/* if a dictionary is attached, it must be within window range */
- if (dictMode == ZSTD_dictMatchState) {
- assert(ms->window.dictLimit + (1U << cParams->windowLog) >= endIndex);
- }
+ assert(ms->window.dictLimit + (1U << cParams->windowLog) >= endIndex);
/* init */
ip += (dictAndPrefixLength == 0);
- if (dictMode == ZSTD_noDict) {
- U32 const curr = (U32)(ip - base);
- U32 const windowLow = ZSTD_getLowestPrefixIndex(ms, curr, cParams->windowLog);
- U32 const maxRep = curr - windowLow;
- if (offset_2 > maxRep) offsetSaved = offset_2, offset_2 = 0;
- if (offset_1 > maxRep) offsetSaved = offset_1, offset_1 = 0;
- }
- if (dictMode == ZSTD_dictMatchState) {
- /* dictMatchState repCode checks don't currently handle repCode == 0
- * disabling. */
- assert(offset_1 <= dictAndPrefixLength);
- assert(offset_2 <= dictAndPrefixLength);
- }
+
+ /* dictMatchState repCode checks don't currently handle repCode == 0
+ * disabling. */
+ assert(offset_1 <= dictAndPrefixLength);
+ assert(offset_2 <= dictAndPrefixLength);
/* Main Search Loop */
while (ip < ilimit) { /* < instead of <=, because repcode check at (ip+1) */
@@ -135,29 +317,18 @@ size_t ZSTD_compressBlock_doubleFast_generic(
const BYTE* matchLong = base + matchIndexL;
const BYTE* match = base + matchIndexS;
const U32 repIndex = curr + 1 - offset_1;
- const BYTE* repMatch = (dictMode == ZSTD_dictMatchState
- && repIndex < prefixLowestIndex) ?
+ const BYTE* repMatch = (repIndex < prefixLowestIndex) ?
dictBase + (repIndex - dictIndexDelta) :
base + repIndex;
hashLong[h2] = hashSmall[h] = curr; /* update hash tables */
- /* check dictMatchState repcode */
- if (dictMode == ZSTD_dictMatchState
- && ((U32)((prefixLowestIndex-1) - repIndex) >= 3 /* intentional underflow */)
+ /* check repcode */
+ if (((U32)((prefixLowestIndex-1) - repIndex) >= 3 /* intentional underflow */)
&& (MEM_read32(repMatch) == MEM_read32(ip+1)) ) {
const BYTE* repMatchEnd = repIndex < prefixLowestIndex ? dictEnd : iend;
mLength = ZSTD_count_2segments(ip+1+4, repMatch+4, iend, repMatchEnd, prefixLowest) + 4;
ip++;
- ZSTD_storeSeq(seqStore, (size_t)(ip-anchor), anchor, iend, 0, mLength-MINMATCH);
- goto _match_stored;
- }
-
- /* check noDict repcode */
- if ( dictMode == ZSTD_noDict
- && ((offset_1 > 0) & (MEM_read32(ip+1-offset_1) == MEM_read32(ip+1)))) {
- mLength = ZSTD_count(ip+1+4, ip+1+4-offset_1, iend) + 4;
- ip++;
- ZSTD_storeSeq(seqStore, (size_t)(ip-anchor), anchor, iend, 0, mLength-MINMATCH);
+ ZSTD_storeSeq(seqStore, (size_t)(ip-anchor), anchor, iend, STORE_REPCODE_1, mLength);
goto _match_stored;
}
@@ -169,7 +340,7 @@ size_t ZSTD_compressBlock_doubleFast_generic(
while (((ip>anchor) & (matchLong>prefixLowest)) && (ip[-1] == matchLong[-1])) { ip--; matchLong--; mLength++; } /* catch up */
goto _match_found;
}
- } else if (dictMode == ZSTD_dictMatchState) {
+ } else {
/* check dictMatchState long match */
U32 const dictMatchIndexL = dictHashLong[dictHL];
const BYTE* dictMatchL = dictBase + dictMatchIndexL;
@@ -187,7 +358,7 @@ size_t ZSTD_compressBlock_doubleFast_generic(
if (MEM_read32(match) == MEM_read32(ip)) {
goto _search_next_long;
}
- } else if (dictMode == ZSTD_dictMatchState) {
+ } else {
/* check dictMatchState short match */
U32 const dictMatchIndexS = dictHashSmall[dictHS];
match = dictBase + dictMatchIndexS;
@@ -220,7 +391,7 @@ _search_next_long:
while (((ip>anchor) & (matchL3>prefixLowest)) && (ip[-1] == matchL3[-1])) { ip--; matchL3--; mLength++; } /* catch up */
goto _match_found;
}
- } else if (dictMode == ZSTD_dictMatchState) {
+ } else {
/* check dict long +1 match */
U32 const dictMatchIndexL3 = dictHashLong[dictHLNext];
const BYTE* dictMatchL3 = dictBase + dictMatchIndexL3;
@@ -234,7 +405,7 @@ _search_next_long:
} } }
/* if no long +1 match, explore the short match we found */
- if (dictMode == ZSTD_dictMatchState && matchIndexS < prefixLowestIndex) {
+ if (matchIndexS < prefixLowestIndex) {
mLength = ZSTD_count_2segments(ip+4, match+4, iend, dictEnd, prefixLowest) + 4;
offset = (U32)(curr - matchIndexS);
while (((ip>anchor) & (match>dictStart)) && (ip[-1] == match[-1])) { ip--; match--; mLength++; } /* catch up */
@@ -244,13 +415,11 @@ _search_next_long:
while (((ip>anchor) & (match>prefixLowest)) && (ip[-1] == match[-1])) { ip--; match--; mLength++; } /* catch up */
}
- /* fall-through */
-
_match_found:
offset_2 = offset_1;
offset_1 = offset;
- ZSTD_storeSeq(seqStore, (size_t)(ip-anchor), anchor, iend, offset + ZSTD_REP_MOVE, mLength-MINMATCH);
+ ZSTD_storeSeq(seqStore, (size_t)(ip-anchor), anchor, iend, STORE_OFFSET(offset), mLength);
_match_stored:
/* match found */
@@ -268,43 +437,27 @@ _match_stored:
}
/* check immediate repcode */
- if (dictMode == ZSTD_dictMatchState) {
- while (ip <= ilimit) {
- U32 const current2 = (U32)(ip-base);
- U32 const repIndex2 = current2 - offset_2;
- const BYTE* repMatch2 = dictMode == ZSTD_dictMatchState
- && repIndex2 < prefixLowestIndex ?
- dictBase + repIndex2 - dictIndexDelta :
- base + repIndex2;
- if ( ((U32)((prefixLowestIndex-1) - (U32)repIndex2) >= 3 /* intentional overflow */)
- && (MEM_read32(repMatch2) == MEM_read32(ip)) ) {
- const BYTE* const repEnd2 = repIndex2 < prefixLowestIndex ? dictEnd : iend;
- size_t const repLength2 = ZSTD_count_2segments(ip+4, repMatch2+4, iend, repEnd2, prefixLowest) + 4;
- U32 tmpOffset = offset_2; offset_2 = offset_1; offset_1 = tmpOffset; /* swap offset_2 <=> offset_1 */
- ZSTD_storeSeq(seqStore, 0, anchor, iend, 0, repLength2-MINMATCH);
- hashSmall[ZSTD_hashPtr(ip, hBitsS, mls)] = current2;
- hashLong[ZSTD_hashPtr(ip, hBitsL, 8)] = current2;
- ip += repLength2;
- anchor = ip;
- continue;
- }
- break;
- } }
-
- if (dictMode == ZSTD_noDict) {
- while ( (ip <= ilimit)
- && ( (offset_2>0)
- & (MEM_read32(ip) == MEM_read32(ip - offset_2)) )) {
- /* store sequence */
- size_t const rLength = ZSTD_count(ip+4, ip+4-offset_2, iend) + 4;
- U32 const tmpOff = offset_2; offset_2 = offset_1; offset_1 = tmpOff; /* swap offset_2 <=> offset_1 */
- hashSmall[ZSTD_hashPtr(ip, hBitsS, mls)] = (U32)(ip-base);
- hashLong[ZSTD_hashPtr(ip, hBitsL, 8)] = (U32)(ip-base);
- ZSTD_storeSeq(seqStore, 0, anchor, iend, 0, rLength-MINMATCH);
- ip += rLength;
+ while (ip <= ilimit) {
+ U32 const current2 = (U32)(ip-base);
+ U32 const repIndex2 = current2 - offset_2;
+ const BYTE* repMatch2 = repIndex2 < prefixLowestIndex ?
+ dictBase + repIndex2 - dictIndexDelta :
+ base + repIndex2;
+ if ( ((U32)((prefixLowestIndex-1) - (U32)repIndex2) >= 3 /* intentional overflow */)
+ && (MEM_read32(repMatch2) == MEM_read32(ip)) ) {
+ const BYTE* const repEnd2 = repIndex2 < prefixLowestIndex ? dictEnd : iend;
+ size_t const repLength2 = ZSTD_count_2segments(ip+4, repMatch2+4, iend, repEnd2, prefixLowest) + 4;
+ U32 tmpOffset = offset_2; offset_2 = offset_1; offset_1 = tmpOffset; /* swap offset_2 <=> offset_1 */
+ ZSTD_storeSeq(seqStore, 0, anchor, iend, STORE_REPCODE_1, repLength2);
+ hashSmall[ZSTD_hashPtr(ip, hBitsS, mls)] = current2;
+ hashLong[ZSTD_hashPtr(ip, hBitsL, 8)] = current2;
+ ip += repLength2;
anchor = ip;
- continue; /* faster when present ... (?) */
- } } }
+ continue;
+ }
+ break;
+ }
+ }
} /* while (ip < ilimit) */
/* save reps for next block */
@@ -315,6 +468,24 @@ _match_stored:
return (size_t)(iend - anchor);
}
+#define ZSTD_GEN_DFAST_FN(dictMode, mls) \
+ static size_t ZSTD_compressBlock_doubleFast_##dictMode##_##mls( \
+ ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM], \
+ void const* src, size_t srcSize) \
+ { \
+ return ZSTD_compressBlock_doubleFast_##dictMode##_generic(ms, seqStore, rep, src, srcSize, mls); \
+ }
+
+ZSTD_GEN_DFAST_FN(noDict, 4)
+ZSTD_GEN_DFAST_FN(noDict, 5)
+ZSTD_GEN_DFAST_FN(noDict, 6)
+ZSTD_GEN_DFAST_FN(noDict, 7)
+
+ZSTD_GEN_DFAST_FN(dictMatchState, 4)
+ZSTD_GEN_DFAST_FN(dictMatchState, 5)
+ZSTD_GEN_DFAST_FN(dictMatchState, 6)
+ZSTD_GEN_DFAST_FN(dictMatchState, 7)
+
size_t ZSTD_compressBlock_doubleFast(
ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
@@ -325,13 +496,13 @@ size_t ZSTD_compressBlock_doubleFast(
{
default: /* includes case 3 */
case 4 :
- return ZSTD_compressBlock_doubleFast_generic(ms, seqStore, rep, src, srcSize, 4, ZSTD_noDict);
+ return ZSTD_compressBlock_doubleFast_noDict_4(ms, seqStore, rep, src, srcSize);
case 5 :
- return ZSTD_compressBlock_doubleFast_generic(ms, seqStore, rep, src, srcSize, 5, ZSTD_noDict);
+ return ZSTD_compressBlock_doubleFast_noDict_5(ms, seqStore, rep, src, srcSize);
case 6 :
- return ZSTD_compressBlock_doubleFast_generic(ms, seqStore, rep, src, srcSize, 6, ZSTD_noDict);
+ return ZSTD_compressBlock_doubleFast_noDict_6(ms, seqStore, rep, src, srcSize);
case 7 :
- return ZSTD_compressBlock_doubleFast_generic(ms, seqStore, rep, src, srcSize, 7, ZSTD_noDict);
+ return ZSTD_compressBlock_doubleFast_noDict_7(ms, seqStore, rep, src, srcSize);
}
}
@@ -345,13 +516,13 @@ size_t ZSTD_compressBlock_doubleFast_dictMatchState(
{
default: /* includes case 3 */
case 4 :
- return ZSTD_compressBlock_doubleFast_generic(ms, seqStore, rep, src, srcSize, 4, ZSTD_dictMatchState);
+ return ZSTD_compressBlock_doubleFast_dictMatchState_4(ms, seqStore, rep, src, srcSize);
case 5 :
- return ZSTD_compressBlock_doubleFast_generic(ms, seqStore, rep, src, srcSize, 5, ZSTD_dictMatchState);
+ return ZSTD_compressBlock_doubleFast_dictMatchState_5(ms, seqStore, rep, src, srcSize);
case 6 :
- return ZSTD_compressBlock_doubleFast_generic(ms, seqStore, rep, src, srcSize, 6, ZSTD_dictMatchState);
+ return ZSTD_compressBlock_doubleFast_dictMatchState_6(ms, seqStore, rep, src, srcSize);
case 7 :
- return ZSTD_compressBlock_doubleFast_generic(ms, seqStore, rep, src, srcSize, 7, ZSTD_dictMatchState);
+ return ZSTD_compressBlock_doubleFast_dictMatchState_7(ms, seqStore, rep, src, srcSize);
}
}
@@ -387,7 +558,7 @@ static size_t ZSTD_compressBlock_doubleFast_extDict_generic(
/* if extDict is invalidated due to maxDistance, switch to "regular" variant */
if (prefixStartIndex == dictStartIndex)
- return ZSTD_compressBlock_doubleFast_generic(ms, seqStore, rep, src, srcSize, mls, ZSTD_noDict);
+ return ZSTD_compressBlock_doubleFast(ms, seqStore, rep, src, srcSize);
/* Search Loop */
while (ip < ilimit) { /* < instead of <=, because (ip+1) */
@@ -409,12 +580,12 @@ 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 */
- & (offset_1 < curr+1 - dictStartIndex)) /* note: we are searching at curr+1 */
+ & (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;
ip++;
- ZSTD_storeSeq(seqStore, (size_t)(ip-anchor), anchor, iend, 0, mLength-MINMATCH);
+ ZSTD_storeSeq(seqStore, (size_t)(ip-anchor), anchor, iend, STORE_REPCODE_1, mLength);
} else {
if ((matchLongIndex > dictStartIndex) && (MEM_read64(matchLong) == MEM_read64(ip))) {
const BYTE* const matchEnd = matchLongIndex < prefixStartIndex ? dictEnd : iend;
@@ -425,7 +596,7 @@ static size_t ZSTD_compressBlock_doubleFast_extDict_generic(
while (((ip>anchor) & (matchLong>lowMatchPtr)) && (ip[-1] == matchLong[-1])) { ip--; matchLong--; mLength++; } /* catch up */
offset_2 = offset_1;
offset_1 = offset;
- ZSTD_storeSeq(seqStore, (size_t)(ip-anchor), anchor, iend, offset + ZSTD_REP_MOVE, mLength-MINMATCH);
+ ZSTD_storeSeq(seqStore, (size_t)(ip-anchor), anchor, iend, STORE_OFFSET(offset), mLength);
} else if ((matchIndex > dictStartIndex) && (MEM_read32(match) == MEM_read32(ip))) {
size_t const h3 = ZSTD_hashPtr(ip+1, hBitsL, 8);
@@ -450,7 +621,7 @@ static size_t ZSTD_compressBlock_doubleFast_extDict_generic(
}
offset_2 = offset_1;
offset_1 = offset;
- ZSTD_storeSeq(seqStore, (size_t)(ip-anchor), anchor, iend, offset + ZSTD_REP_MOVE, mLength-MINMATCH);
+ ZSTD_storeSeq(seqStore, (size_t)(ip-anchor), anchor, iend, STORE_OFFSET(offset), mLength);
} else {
ip += ((ip-anchor) >> kSearchStrength) + 1;
@@ -477,12 +648,12 @@ 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 */
- & (offset_2 < current2 - 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;
U32 const tmpOffset = offset_2; offset_2 = offset_1; offset_1 = tmpOffset; /* swap offset_2 <=> offset_1 */
- ZSTD_storeSeq(seqStore, 0, anchor, iend, 0, repLength2-MINMATCH);
+ ZSTD_storeSeq(seqStore, 0, anchor, iend, STORE_REPCODE_1, repLength2);
hashSmall[ZSTD_hashPtr(ip, hBitsS, mls)] = current2;
hashLong[ZSTD_hashPtr(ip, hBitsL, 8)] = current2;
ip += repLength2;
@@ -500,6 +671,10 @@ static size_t ZSTD_compressBlock_doubleFast_extDict_generic(
return (size_t)(iend - anchor);
}
+ZSTD_GEN_DFAST_FN(extDict, 4)
+ZSTD_GEN_DFAST_FN(extDict, 5)
+ZSTD_GEN_DFAST_FN(extDict, 6)
+ZSTD_GEN_DFAST_FN(extDict, 7)
size_t ZSTD_compressBlock_doubleFast_extDict(
ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
@@ -510,12 +685,12 @@ size_t ZSTD_compressBlock_doubleFast_extDict(
{
default: /* includes case 3 */
case 4 :
- return ZSTD_compressBlock_doubleFast_extDict_generic(ms, seqStore, rep, src, srcSize, 4);
+ return ZSTD_compressBlock_doubleFast_extDict_4(ms, seqStore, rep, src, srcSize);
case 5 :
- return ZSTD_compressBlock_doubleFast_extDict_generic(ms, seqStore, rep, src, srcSize, 5);
+ return ZSTD_compressBlock_doubleFast_extDict_5(ms, seqStore, rep, src, srcSize);
case 6 :
- return ZSTD_compressBlock_doubleFast_extDict_generic(ms, seqStore, rep, src, srcSize, 6);
+ return ZSTD_compressBlock_doubleFast_extDict_6(ms, seqStore, rep, src, srcSize);
case 7 :
- return ZSTD_compressBlock_doubleFast_extDict_generic(ms, seqStore, rep, src, srcSize, 7);
+ return ZSTD_compressBlock_doubleFast_extDict_7(ms, seqStore, rep, src, srcSize);
}
}
diff --git a/thirdparty/zstd/compress/zstd_fast.c b/thirdparty/zstd/compress/zstd_fast.c
index 4edc04dccd..802fc31579 100644
--- a/thirdparty/zstd/compress/zstd_fast.c
+++ b/thirdparty/zstd/compress/zstd_fast.c
@@ -43,145 +43,294 @@ void ZSTD_fillHashTable(ZSTD_matchState_t* ms,
}
+/**
+ * If you squint hard enough (and ignore repcodes), the search operation at any
+ * given position is broken into 4 stages:
+ *
+ * 1. Hash (map position to hash value via input read)
+ * 2. Lookup (map hash val to index via hashtable read)
+ * 3. Load (map index to value at that position via input read)
+ * 4. Compare
+ *
+ * Each of these steps involves a memory read at an address which is computed
+ * from the previous step. This means these steps must be sequenced and their
+ * latencies are cumulative.
+ *
+ * Rather than do 1->2->3->4 sequentially for a single position before moving
+ * onto the next, this implementation interleaves these operations across the
+ * next few positions:
+ *
+ * R = Repcode Read & Compare
+ * H = Hash
+ * T = Table Lookup
+ * M = Match Read & Compare
+ *
+ * Pos | Time -->
+ * ----+-------------------
+ * N | ... M
+ * N+1 | ... TM
+ * N+2 | R H T M
+ * N+3 | H TM
+ * N+4 | R H T M
+ * N+5 | H ...
+ * N+6 | R ...
+ *
+ * This is very much analogous to the pipelining of execution in a CPU. And just
+ * like a CPU, we have to dump the pipeline when we find a match (i.e., take a
+ * branch).
+ *
+ * When this happens, we throw away our current state, and do the following prep
+ * to re-enter the loop:
+ *
+ * Pos | Time -->
+ * ----+-------------------
+ * N | H T
+ * N+1 | H
+ *
+ * This is also the work we do at the beginning to enter the loop initially.
+ */
FORCE_INLINE_TEMPLATE size_t
-ZSTD_compressBlock_fast_generic(
+ZSTD_compressBlock_fast_noDict_generic(
ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
void const* src, size_t srcSize,
- U32 const mls)
+ U32 const mls, U32 const hasStep)
{
const ZSTD_compressionParameters* const cParams = &ms->cParams;
U32* const hashTable = ms->hashTable;
U32 const hlog = cParams->hashLog;
/* support stepSize of 0 */
- size_t const stepSize = cParams->targetLength + !(cParams->targetLength) + 1;
+ size_t const stepSize = hasStep ? (cParams->targetLength + !(cParams->targetLength) + 1) : 2;
const BYTE* const base = ms->window.base;
const BYTE* const istart = (const BYTE*)src;
- /* We check ip0 (ip + 0) and ip1 (ip + 1) each loop */
- const BYTE* ip0 = istart;
- const BYTE* ip1;
- const BYTE* anchor = istart;
const U32 endIndex = (U32)((size_t)(istart - base) + srcSize);
const U32 prefixStartIndex = ZSTD_getLowestPrefixIndex(ms, endIndex, cParams->windowLog);
const BYTE* const prefixStart = base + prefixStartIndex;
const BYTE* const iend = istart + srcSize;
const BYTE* const ilimit = iend - HASH_READ_SIZE;
- U32 offset_1=rep[0], offset_2=rep[1];
+
+ const BYTE* anchor = istart;
+ const BYTE* ip0 = istart;
+ const BYTE* ip1;
+ const BYTE* ip2;
+ const BYTE* ip3;
+ U32 current0;
+
+ U32 rep_offset1 = rep[0];
+ U32 rep_offset2 = rep[1];
U32 offsetSaved = 0;
- /* init */
+ size_t hash0; /* hash for ip0 */
+ size_t hash1; /* hash for ip1 */
+ U32 idx; /* match idx for ip0 */
+ U32 mval; /* src value at match idx */
+
+ U32 offcode;
+ const BYTE* match0;
+ size_t mLength;
+
+ /* ip0 and ip1 are always adjacent. The targetLength skipping and
+ * uncompressibility acceleration is applied to every other position,
+ * matching the behavior of #1562. step therefore represents the gap
+ * between pairs of positions, from ip0 to ip2 or ip1 to ip3. */
+ size_t step;
+ const BYTE* nextStep;
+ const size_t kStepIncr = (1 << (kSearchStrength - 1));
+
DEBUGLOG(5, "ZSTD_compressBlock_fast_generic");
ip0 += (ip0 == prefixStart);
- ip1 = ip0 + 1;
{ U32 const curr = (U32)(ip0 - base);
U32 const windowLow = ZSTD_getLowestPrefixIndex(ms, curr, cParams->windowLog);
U32 const maxRep = curr - windowLow;
- if (offset_2 > maxRep) offsetSaved = offset_2, offset_2 = 0;
- if (offset_1 > maxRep) offsetSaved = offset_1, offset_1 = 0;
+ if (rep_offset2 > maxRep) offsetSaved = rep_offset2, rep_offset2 = 0;
+ if (rep_offset1 > maxRep) offsetSaved = rep_offset1, rep_offset1 = 0;
}
- /* Main Search Loop */
-#ifdef __INTEL_COMPILER
- /* From intel 'The vector pragma indicates that the loop should be
- * vectorized if it is legal to do so'. Can be used together with
- * #pragma ivdep (but have opted to exclude that because intel
- * warns against using it).*/
- #pragma vector always
-#endif
- while (ip1 < ilimit) { /* < instead of <=, because check at ip0+2 */
- size_t mLength;
- BYTE const* ip2 = ip0 + 2;
- size_t const h0 = ZSTD_hashPtr(ip0, hlog, mls);
- U32 const val0 = MEM_read32(ip0);
- size_t const h1 = ZSTD_hashPtr(ip1, hlog, mls);
- U32 const val1 = MEM_read32(ip1);
- U32 const current0 = (U32)(ip0-base);
- U32 const current1 = (U32)(ip1-base);
- U32 const matchIndex0 = hashTable[h0];
- U32 const matchIndex1 = hashTable[h1];
- BYTE const* repMatch = ip2 - offset_1;
- const BYTE* match0 = base + matchIndex0;
- const BYTE* match1 = base + matchIndex1;
- U32 offcode;
-
-#if defined(__aarch64__)
- PREFETCH_L1(ip0+256);
-#endif
-
- hashTable[h0] = current0; /* update hash table */
- hashTable[h1] = current1; /* update hash table */
-
- assert(ip0 + 1 == ip1);
-
- if ((offset_1 > 0) & (MEM_read32(repMatch) == MEM_read32(ip2))) {
- mLength = (ip2[-1] == repMatch[-1]) ? 1 : 0;
- ip0 = ip2 - mLength;
- match0 = repMatch - mLength;
+ /* start each op */
+_start: /* Requires: ip0 */
+
+ step = stepSize;
+ nextStep = ip0 + kStepIncr;
+
+ /* calculate positions, ip0 - anchor == 0, so we skip step calc */
+ ip1 = ip0 + 1;
+ ip2 = ip0 + step;
+ ip3 = ip2 + 1;
+
+ if (ip3 >= ilimit) {
+ goto _cleanup;
+ }
+
+ hash0 = ZSTD_hashPtr(ip0, hlog, mls);
+ hash1 = ZSTD_hashPtr(ip1, hlog, mls);
+
+ idx = hashTable[hash0];
+
+ do {
+ /* load repcode match for ip[2]*/
+ const U32 rval = MEM_read32(ip2 - rep_offset1);
+
+ /* write back hash table entry */
+ current0 = (U32)(ip0 - base);
+ hashTable[hash0] = current0;
+
+ /* check repcode at ip[2] */
+ if ((MEM_read32(ip2) == rval) & (rep_offset1 > 0)) {
+ ip0 = ip2;
+ match0 = ip0 - rep_offset1;
+ mLength = ip0[-1] == match0[-1];
+ ip0 -= mLength;
+ match0 -= mLength;
+ offcode = STORE_REPCODE_1;
mLength += 4;
- offcode = 0;
goto _match;
}
- if ((matchIndex0 > prefixStartIndex) && MEM_read32(match0) == val0) {
- /* found a regular match */
- goto _offset;
+
+ /* load match for ip[0] */
+ if (idx >= prefixStartIndex) {
+ mval = MEM_read32(base + idx);
+ } else {
+ mval = MEM_read32(ip0) ^ 1; /* guaranteed to not match. */
}
- if ((matchIndex1 > prefixStartIndex) && MEM_read32(match1) == val1) {
- /* found a regular match after one literal */
- ip0 = ip1;
- match0 = match1;
+
+ /* check match at ip[0] */
+ if (MEM_read32(ip0) == mval) {
+ /* found a match! */
goto _offset;
}
- { size_t const step = ((size_t)(ip0-anchor) >> (kSearchStrength - 1)) + stepSize;
- assert(step >= 2);
- ip0 += step;
- ip1 += step;
- continue;
+
+ /* lookup ip[1] */
+ idx = hashTable[hash1];
+
+ /* hash ip[2] */
+ hash0 = hash1;
+ hash1 = ZSTD_hashPtr(ip2, hlog, mls);
+
+ /* advance to next positions */
+ ip0 = ip1;
+ ip1 = ip2;
+ ip2 = ip3;
+
+ /* write back hash table entry */
+ current0 = (U32)(ip0 - base);
+ hashTable[hash0] = current0;
+
+ /* load match for ip[0] */
+ if (idx >= prefixStartIndex) {
+ mval = MEM_read32(base + idx);
+ } else {
+ mval = MEM_read32(ip0) ^ 1; /* guaranteed to not match. */
}
-_offset: /* Requires: ip0, match0 */
- /* Compute the offset code */
- offset_2 = offset_1;
- offset_1 = (U32)(ip0-match0);
- offcode = offset_1 + ZSTD_REP_MOVE;
- mLength = 4;
- /* Count the backwards match length */
- while (((ip0>anchor) & (match0>prefixStart))
- && (ip0[-1] == match0[-1])) { ip0--; match0--; mLength++; } /* catch up */
-_match: /* Requires: ip0, match0, offcode */
- /* Count the forward length */
- mLength += ZSTD_count(ip0+mLength, match0+mLength, iend);
- ZSTD_storeSeq(seqStore, (size_t)(ip0-anchor), anchor, iend, offcode, mLength-MINMATCH);
- /* match found */
- ip0 += mLength;
- anchor = ip0;
+ /* check match at ip[0] */
+ if (MEM_read32(ip0) == mval) {
+ /* found a match! */
+ goto _offset;
+ }
- if (ip0 <= ilimit) {
- /* Fill Table */
- assert(base+current0+2 > istart); /* check base overflow */
- hashTable[ZSTD_hashPtr(base+current0+2, hlog, mls)] = current0+2; /* here because current+2 could be > iend-8 */
- hashTable[ZSTD_hashPtr(ip0-2, hlog, mls)] = (U32)(ip0-2-base);
-
- if (offset_2 > 0) { /* offset_2==0 means offset_2 is invalidated */
- while ( (ip0 <= ilimit) && (MEM_read32(ip0) == MEM_read32(ip0 - offset_2)) ) {
- /* store sequence */
- size_t const rLength = ZSTD_count(ip0+4, ip0+4-offset_2, iend) + 4;
- { U32 const tmpOff = offset_2; offset_2 = offset_1; offset_1 = tmpOff; } /* swap offset_2 <=> offset_1 */
- hashTable[ZSTD_hashPtr(ip0, hlog, mls)] = (U32)(ip0-base);
- ip0 += rLength;
- ZSTD_storeSeq(seqStore, 0 /*litLen*/, anchor, iend, 0 /*offCode*/, rLength-MINMATCH);
- anchor = ip0;
- continue; /* faster when present (confirmed on gcc-8) ... (?) */
- } } }
- ip1 = ip0 + 1;
- }
+ /* lookup ip[1] */
+ idx = hashTable[hash1];
+
+ /* hash ip[2] */
+ hash0 = hash1;
+ hash1 = ZSTD_hashPtr(ip2, hlog, mls);
+
+ /* advance to next positions */
+ ip0 = ip1;
+ ip1 = ip2;
+ ip2 = ip0 + step;
+ ip3 = ip1 + step;
+
+ /* calculate step */
+ if (ip2 >= nextStep) {
+ step++;
+ PREFETCH_L1(ip1 + 64);
+ PREFETCH_L1(ip1 + 128);
+ nextStep += kStepIncr;
+ }
+ } while (ip3 < ilimit);
+
+_cleanup:
+ /* Note that there are probably still a couple positions we could search.
+ * However, it seems to be a meaningful performance hit to try to search
+ * them. So let's not. */
/* save reps for next block */
- rep[0] = offset_1 ? offset_1 : offsetSaved;
- rep[1] = offset_2 ? offset_2 : offsetSaved;
+ rep[0] = rep_offset1 ? rep_offset1 : offsetSaved;
+ rep[1] = rep_offset2 ? rep_offset2 : offsetSaved;
/* Return the last literals size */
return (size_t)(iend - anchor);
+
+_offset: /* Requires: ip0, idx */
+
+ /* Compute the offset code. */
+ match0 = base + idx;
+ rep_offset2 = rep_offset1;
+ rep_offset1 = (U32)(ip0-match0);
+ offcode = STORE_OFFSET(rep_offset1);
+ mLength = 4;
+
+ /* Count the backwards match length. */
+ while (((ip0>anchor) & (match0>prefixStart)) && (ip0[-1] == match0[-1])) {
+ ip0--;
+ match0--;
+ mLength++;
+ }
+
+_match: /* Requires: ip0, match0, offcode */
+
+ /* Count the forward length. */
+ mLength += ZSTD_count(ip0 + mLength, match0 + mLength, iend);
+
+ ZSTD_storeSeq(seqStore, (size_t)(ip0 - anchor), anchor, iend, offcode, mLength);
+
+ ip0 += mLength;
+ anchor = ip0;
+
+ /* write next hash table entry */
+ if (ip1 < ip0) {
+ hashTable[hash1] = (U32)(ip1 - base);
+ }
+
+ /* Fill table and check for immediate repcode. */
+ if (ip0 <= ilimit) {
+ /* Fill Table */
+ assert(base+current0+2 > istart); /* check base overflow */
+ hashTable[ZSTD_hashPtr(base+current0+2, hlog, mls)] = current0+2; /* here because current+2 could be > iend-8 */
+ hashTable[ZSTD_hashPtr(ip0-2, hlog, mls)] = (U32)(ip0-2-base);
+
+ if (rep_offset2 > 0) { /* rep_offset2==0 means rep_offset2 is invalidated */
+ while ( (ip0 <= ilimit) && (MEM_read32(ip0) == MEM_read32(ip0 - rep_offset2)) ) {
+ /* store sequence */
+ size_t const rLength = ZSTD_count(ip0+4, ip0+4-rep_offset2, iend) + 4;
+ { U32 const tmpOff = rep_offset2; rep_offset2 = rep_offset1; rep_offset1 = tmpOff; } /* swap rep_offset2 <=> rep_offset1 */
+ hashTable[ZSTD_hashPtr(ip0, hlog, mls)] = (U32)(ip0-base);
+ ip0 += rLength;
+ ZSTD_storeSeq(seqStore, 0 /*litLen*/, anchor, iend, STORE_REPCODE_1, rLength);
+ anchor = ip0;
+ continue; /* faster when present (confirmed on gcc-8) ... (?) */
+ } } }
+
+ goto _start;
}
+#define ZSTD_GEN_FAST_FN(dictMode, mls, step) \
+ static size_t ZSTD_compressBlock_fast_##dictMode##_##mls##_##step( \
+ ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM], \
+ void const* src, size_t srcSize) \
+ { \
+ return ZSTD_compressBlock_fast_##dictMode##_generic(ms, seqStore, rep, src, srcSize, mls, step); \
+ }
+
+ZSTD_GEN_FAST_FN(noDict, 4, 1)
+ZSTD_GEN_FAST_FN(noDict, 5, 1)
+ZSTD_GEN_FAST_FN(noDict, 6, 1)
+ZSTD_GEN_FAST_FN(noDict, 7, 1)
+
+ZSTD_GEN_FAST_FN(noDict, 4, 0)
+ZSTD_GEN_FAST_FN(noDict, 5, 0)
+ZSTD_GEN_FAST_FN(noDict, 6, 0)
+ZSTD_GEN_FAST_FN(noDict, 7, 0)
size_t ZSTD_compressBlock_fast(
ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
@@ -189,24 +338,40 @@ size_t ZSTD_compressBlock_fast(
{
U32 const mls = ms->cParams.minMatch;
assert(ms->dictMatchState == NULL);
- switch(mls)
- {
- default: /* includes case 3 */
- case 4 :
- return ZSTD_compressBlock_fast_generic(ms, seqStore, rep, src, srcSize, 4);
- case 5 :
- return ZSTD_compressBlock_fast_generic(ms, seqStore, rep, src, srcSize, 5);
- case 6 :
- return ZSTD_compressBlock_fast_generic(ms, seqStore, rep, src, srcSize, 6);
- case 7 :
- return ZSTD_compressBlock_fast_generic(ms, seqStore, rep, src, srcSize, 7);
+ if (ms->cParams.targetLength > 1) {
+ switch(mls)
+ {
+ default: /* includes case 3 */
+ case 4 :
+ return ZSTD_compressBlock_fast_noDict_4_1(ms, seqStore, rep, src, srcSize);
+ case 5 :
+ return ZSTD_compressBlock_fast_noDict_5_1(ms, seqStore, rep, src, srcSize);
+ case 6 :
+ return ZSTD_compressBlock_fast_noDict_6_1(ms, seqStore, rep, src, srcSize);
+ case 7 :
+ return ZSTD_compressBlock_fast_noDict_7_1(ms, seqStore, rep, src, srcSize);
+ }
+ } else {
+ switch(mls)
+ {
+ default: /* includes case 3 */
+ case 4 :
+ return ZSTD_compressBlock_fast_noDict_4_0(ms, seqStore, rep, src, srcSize);
+ case 5 :
+ return ZSTD_compressBlock_fast_noDict_5_0(ms, seqStore, rep, src, srcSize);
+ case 6 :
+ return ZSTD_compressBlock_fast_noDict_6_0(ms, seqStore, rep, src, srcSize);
+ case 7 :
+ return ZSTD_compressBlock_fast_noDict_7_0(ms, seqStore, rep, src, srcSize);
+ }
+
}
}
FORCE_INLINE_TEMPLATE
size_t ZSTD_compressBlock_fast_dictMatchState_generic(
ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
- void const* src, size_t srcSize, U32 const mls)
+ void const* src, size_t srcSize, U32 const mls, U32 const hasStep)
{
const ZSTD_compressionParameters* const cParams = &ms->cParams;
U32* const hashTable = ms->hashTable;
@@ -242,6 +407,8 @@ size_t ZSTD_compressBlock_fast_dictMatchState_generic(
assert(endIndex - prefixStartIndex <= maxDistance);
(void)maxDistance; (void)endIndex; /* these variables are not used when assert() is disabled */
+ (void)hasStep; /* not currently specialized on whether it's accelerated */
+
/* ensure there will be no underflow
* when translating a dict index into a local index */
assert(prefixStartIndex >= (U32)(dictEnd - dictBase));
@@ -272,7 +439,7 @@ size_t ZSTD_compressBlock_fast_dictMatchState_generic(
const BYTE* const repMatchEnd = repIndex < prefixStartIndex ? dictEnd : iend;
mLength = ZSTD_count_2segments(ip+1+4, repMatch+4, iend, repMatchEnd, prefixStart) + 4;
ip++;
- ZSTD_storeSeq(seqStore, (size_t)(ip-anchor), anchor, iend, 0, mLength-MINMATCH);
+ ZSTD_storeSeq(seqStore, (size_t)(ip-anchor), anchor, iend, STORE_REPCODE_1, mLength);
} else if ( (matchIndex <= prefixStartIndex) ) {
size_t const dictHash = ZSTD_hashPtr(ip, dictHLog, mls);
U32 const dictMatchIndex = dictHashTable[dictHash];
@@ -292,7 +459,7 @@ size_t ZSTD_compressBlock_fast_dictMatchState_generic(
} /* catch up */
offset_2 = offset_1;
offset_1 = offset;
- ZSTD_storeSeq(seqStore, (size_t)(ip-anchor), anchor, iend, offset + ZSTD_REP_MOVE, mLength-MINMATCH);
+ ZSTD_storeSeq(seqStore, (size_t)(ip-anchor), anchor, iend, STORE_OFFSET(offset), mLength);
}
} else if (MEM_read32(match) != MEM_read32(ip)) {
/* it's not a match, and we're not going to check the dictionary */
@@ -307,7 +474,7 @@ size_t ZSTD_compressBlock_fast_dictMatchState_generic(
&& (ip[-1] == match[-1])) { ip--; match--; mLength++; } /* catch up */
offset_2 = offset_1;
offset_1 = offset;
- ZSTD_storeSeq(seqStore, (size_t)(ip-anchor), anchor, iend, offset + ZSTD_REP_MOVE, mLength-MINMATCH);
+ ZSTD_storeSeq(seqStore, (size_t)(ip-anchor), anchor, iend, STORE_OFFSET(offset), mLength);
}
/* match found */
@@ -332,7 +499,7 @@ size_t ZSTD_compressBlock_fast_dictMatchState_generic(
const BYTE* const repEnd2 = repIndex2 < prefixStartIndex ? dictEnd : iend;
size_t const repLength2 = ZSTD_count_2segments(ip+4, repMatch2+4, iend, repEnd2, prefixStart) + 4;
U32 tmpOffset = offset_2; offset_2 = offset_1; offset_1 = tmpOffset; /* swap offset_2 <=> offset_1 */
- ZSTD_storeSeq(seqStore, 0, anchor, iend, 0, repLength2-MINMATCH);
+ ZSTD_storeSeq(seqStore, 0, anchor, iend, STORE_REPCODE_1, repLength2);
hashTable[ZSTD_hashPtr(ip, hlog, mls)] = current2;
ip += repLength2;
anchor = ip;
@@ -351,6 +518,12 @@ size_t ZSTD_compressBlock_fast_dictMatchState_generic(
return (size_t)(iend - anchor);
}
+
+ZSTD_GEN_FAST_FN(dictMatchState, 4, 0)
+ZSTD_GEN_FAST_FN(dictMatchState, 5, 0)
+ZSTD_GEN_FAST_FN(dictMatchState, 6, 0)
+ZSTD_GEN_FAST_FN(dictMatchState, 7, 0)
+
size_t ZSTD_compressBlock_fast_dictMatchState(
ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
void const* src, size_t srcSize)
@@ -361,20 +534,20 @@ size_t ZSTD_compressBlock_fast_dictMatchState(
{
default: /* includes case 3 */
case 4 :
- return ZSTD_compressBlock_fast_dictMatchState_generic(ms, seqStore, rep, src, srcSize, 4);
+ return ZSTD_compressBlock_fast_dictMatchState_4_0(ms, seqStore, rep, src, srcSize);
case 5 :
- return ZSTD_compressBlock_fast_dictMatchState_generic(ms, seqStore, rep, src, srcSize, 5);
+ return ZSTD_compressBlock_fast_dictMatchState_5_0(ms, seqStore, rep, src, srcSize);
case 6 :
- return ZSTD_compressBlock_fast_dictMatchState_generic(ms, seqStore, rep, src, srcSize, 6);
+ return ZSTD_compressBlock_fast_dictMatchState_6_0(ms, seqStore, rep, src, srcSize);
case 7 :
- return ZSTD_compressBlock_fast_dictMatchState_generic(ms, seqStore, rep, src, srcSize, 7);
+ return ZSTD_compressBlock_fast_dictMatchState_7_0(ms, seqStore, rep, src, srcSize);
}
}
static size_t ZSTD_compressBlock_fast_extDict_generic(
ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
- void const* src, size_t srcSize, U32 const mls)
+ void const* src, size_t srcSize, U32 const mls, U32 const hasStep)
{
const ZSTD_compressionParameters* const cParams = &ms->cParams;
U32* const hashTable = ms->hashTable;
@@ -398,11 +571,13 @@ static size_t ZSTD_compressBlock_fast_extDict_generic(
const BYTE* const ilimit = iend - 8;
U32 offset_1=rep[0], offset_2=rep[1];
+ (void)hasStep; /* not currently specialized on whether it's accelerated */
+
DEBUGLOG(5, "ZSTD_compressBlock_fast_extDict_generic (offset_1=%u)", offset_1);
/* switch to "regular" variant if extDict is invalidated due to maxDistance */
if (prefixStartIndex == dictStartIndex)
- return ZSTD_compressBlock_fast_generic(ms, seqStore, rep, src, srcSize, mls);
+ return ZSTD_compressBlock_fast(ms, seqStore, rep, src, srcSize);
/* Search Loop */
while (ip < ilimit) { /* < instead of <=, because (ip+1) */
@@ -418,12 +593,12 @@ static size_t ZSTD_compressBlock_fast_extDict_generic(
DEBUGLOG(7, "offset_1 = %u , curr = %u", offset_1, curr);
if ( ( ((U32)((prefixStartIndex-1) - repIndex) >= 3) /* intentional underflow */
- & (offset_1 < curr+1 - dictStartIndex) ) /* note: we are searching at curr+1 */
+ & (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;
ip++;
- ZSTD_storeSeq(seqStore, (size_t)(ip-anchor), anchor, iend, 0, rLength-MINMATCH);
+ ZSTD_storeSeq(seqStore, (size_t)(ip-anchor), anchor, iend, STORE_REPCODE_1, rLength);
ip += rLength;
anchor = ip;
} else {
@@ -439,7 +614,7 @@ static size_t ZSTD_compressBlock_fast_extDict_generic(
size_t mLength = ZSTD_count_2segments(ip+4, match+4, iend, matchEnd, prefixStart) + 4;
while (((ip>anchor) & (match>lowMatchPtr)) && (ip[-1] == match[-1])) { ip--; match--; mLength++; } /* catch up */
offset_2 = offset_1; offset_1 = offset; /* update offset history */
- ZSTD_storeSeq(seqStore, (size_t)(ip-anchor), anchor, iend, offset + ZSTD_REP_MOVE, mLength-MINMATCH);
+ ZSTD_storeSeq(seqStore, (size_t)(ip-anchor), anchor, iend, STORE_OFFSET(offset), mLength);
ip += mLength;
anchor = ip;
} }
@@ -453,12 +628,12 @@ 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) & (offset_2 < curr - 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;
{ U32 const tmpOffset = offset_2; offset_2 = offset_1; offset_1 = tmpOffset; } /* swap offset_2 <=> offset_1 */
- ZSTD_storeSeq(seqStore, 0 /*litlen*/, anchor, iend, 0 /*offcode*/, repLength2-MINMATCH);
+ ZSTD_storeSeq(seqStore, 0 /*litlen*/, anchor, iend, STORE_REPCODE_1, repLength2);
hashTable[ZSTD_hashPtr(ip, hlog, mls)] = current2;
ip += repLength2;
anchor = ip;
@@ -475,6 +650,10 @@ static size_t ZSTD_compressBlock_fast_extDict_generic(
return (size_t)(iend - anchor);
}
+ZSTD_GEN_FAST_FN(extDict, 4, 0)
+ZSTD_GEN_FAST_FN(extDict, 5, 0)
+ZSTD_GEN_FAST_FN(extDict, 6, 0)
+ZSTD_GEN_FAST_FN(extDict, 7, 0)
size_t ZSTD_compressBlock_fast_extDict(
ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
@@ -485,12 +664,12 @@ size_t ZSTD_compressBlock_fast_extDict(
{
default: /* includes case 3 */
case 4 :
- return ZSTD_compressBlock_fast_extDict_generic(ms, seqStore, rep, src, srcSize, 4);
+ return ZSTD_compressBlock_fast_extDict_4_0(ms, seqStore, rep, src, srcSize);
case 5 :
- return ZSTD_compressBlock_fast_extDict_generic(ms, seqStore, rep, src, srcSize, 5);
+ return ZSTD_compressBlock_fast_extDict_5_0(ms, seqStore, rep, src, srcSize);
case 6 :
- return ZSTD_compressBlock_fast_extDict_generic(ms, seqStore, rep, src, srcSize, 6);
+ return ZSTD_compressBlock_fast_extDict_6_0(ms, seqStore, rep, src, srcSize);
case 7 :
- return ZSTD_compressBlock_fast_extDict_generic(ms, seqStore, rep, src, srcSize, 7);
+ return ZSTD_compressBlock_fast_extDict_7_0(ms, seqStore, rep, src, srcSize);
}
}
diff --git a/thirdparty/zstd/compress/zstd_lazy.c b/thirdparty/zstd/compress/zstd_lazy.c
index 3d523e8472..2e38dcb46d 100644
--- a/thirdparty/zstd/compress/zstd_lazy.c
+++ b/thirdparty/zstd/compress/zstd_lazy.c
@@ -61,7 +61,7 @@ ZSTD_updateDUBT(ZSTD_matchState_t* ms,
* assumption : curr >= btlow == (curr - btmask)
* doesn't fail */
static void
-ZSTD_insertDUBT1(ZSTD_matchState_t* ms,
+ZSTD_insertDUBT1(const ZSTD_matchState_t* ms,
U32 curr, const BYTE* inputEnd,
U32 nbCompares, U32 btLow,
const ZSTD_dictMode_e dictMode)
@@ -93,7 +93,7 @@ ZSTD_insertDUBT1(ZSTD_matchState_t* ms,
assert(curr >= btLow);
assert(ip < iend); /* condition for ZSTD_count */
- while (nbCompares-- && (matchIndex > windowLow)) {
+ for (; nbCompares && (matchIndex > windowLow); --nbCompares) {
U32* const nextPtr = bt + 2*(matchIndex & btMask);
size_t matchLength = MIN(commonLengthSmaller, commonLengthLarger); /* guaranteed minimum nb of common bytes */
assert(matchIndex < curr);
@@ -151,7 +151,7 @@ ZSTD_insertDUBT1(ZSTD_matchState_t* ms,
static size_t
ZSTD_DUBT_findBetterDictMatch (
- ZSTD_matchState_t* ms,
+ const ZSTD_matchState_t* ms,
const BYTE* const ip, const BYTE* const iend,
size_t* offsetPtr,
size_t bestLength,
@@ -185,7 +185,7 @@ ZSTD_DUBT_findBetterDictMatch (
(void)dictMode;
assert(dictMode == ZSTD_dictMatchState);
- while (nbCompares-- && (dictMatchIndex > dictLowLimit)) {
+ for (; nbCompares && (dictMatchIndex > dictLowLimit); --nbCompares) {
U32* const nextPtr = dictBt + 2*(dictMatchIndex & btMask);
size_t matchLength = MIN(commonLengthSmaller, commonLengthLarger); /* guaranteed minimum nb of common bytes */
const BYTE* match = dictBase + dictMatchIndex;
@@ -197,8 +197,8 @@ ZSTD_DUBT_findBetterDictMatch (
U32 matchIndex = dictMatchIndex + dictIndexDelta;
if ( (4*(int)(matchLength-bestLength)) > (int)(ZSTD_highbit32(curr-matchIndex+1) - ZSTD_highbit32((U32)offsetPtr[0]+1)) ) {
DEBUGLOG(9, "ZSTD_DUBT_findBetterDictMatch(%u) : found better match length %u -> %u and offsetCode %u -> %u (dictMatchIndex %u, matchIndex %u)",
- curr, (U32)bestLength, (U32)matchLength, (U32)*offsetPtr, ZSTD_REP_MOVE + curr - matchIndex, dictMatchIndex, matchIndex);
- bestLength = matchLength, *offsetPtr = ZSTD_REP_MOVE + curr - matchIndex;
+ curr, (U32)bestLength, (U32)matchLength, (U32)*offsetPtr, STORE_OFFSET(curr - matchIndex), dictMatchIndex, matchIndex);
+ bestLength = matchLength, *offsetPtr = STORE_OFFSET(curr - matchIndex);
}
if (ip+matchLength == iend) { /* reached end of input : ip[matchLength] is not valid, no way to know if it's larger or smaller than match */
break; /* drop, to guarantee consistency (miss a little bit of compression) */
@@ -218,7 +218,7 @@ ZSTD_DUBT_findBetterDictMatch (
}
if (bestLength >= MINMATCH) {
- U32 const mIndex = curr - ((U32)*offsetPtr - ZSTD_REP_MOVE); (void)mIndex;
+ U32 const mIndex = curr - (U32)STORED_OFFSET(*offsetPtr); (void)mIndex;
DEBUGLOG(8, "ZSTD_DUBT_findBetterDictMatch(%u) : found match of length %u and offsetCode %u (pos %u)",
curr, (U32)bestLength, (U32)*offsetPtr, mIndex);
}
@@ -309,7 +309,7 @@ ZSTD_DUBT_findBestMatch(ZSTD_matchState_t* ms,
matchIndex = hashTable[h];
hashTable[h] = curr; /* Update Hash Table */
- while (nbCompares-- && (matchIndex > windowLow)) {
+ for (; nbCompares && (matchIndex > windowLow); --nbCompares) {
U32* const nextPtr = bt + 2*(matchIndex & btMask);
size_t matchLength = MIN(commonLengthSmaller, commonLengthLarger); /* guaranteed minimum nb of common bytes */
const BYTE* match;
@@ -328,7 +328,7 @@ ZSTD_DUBT_findBestMatch(ZSTD_matchState_t* ms,
if (matchLength > matchEndIdx - matchIndex)
matchEndIdx = matchIndex + (U32)matchLength;
if ( (4*(int)(matchLength-bestLength)) > (int)(ZSTD_highbit32(curr-matchIndex+1) - ZSTD_highbit32((U32)offsetPtr[0]+1)) )
- bestLength = matchLength, *offsetPtr = ZSTD_REP_MOVE + curr - matchIndex;
+ bestLength = matchLength, *offsetPtr = STORE_OFFSET(curr - matchIndex);
if (ip+matchLength == iend) { /* equal : no way to know if inf or sup */
if (dictMode == ZSTD_dictMatchState) {
nbCompares = 0; /* in addition to avoiding checking any
@@ -357,6 +357,7 @@ ZSTD_DUBT_findBestMatch(ZSTD_matchState_t* ms,
*smallerPtr = *largerPtr = 0;
+ assert(nbCompares <= (1U << ZSTD_SEARCHLOG_MAX)); /* Check we haven't underflowed. */
if (dictMode == ZSTD_dictMatchState && nbCompares) {
bestLength = ZSTD_DUBT_findBetterDictMatch(
ms, ip, iend,
@@ -367,7 +368,7 @@ ZSTD_DUBT_findBestMatch(ZSTD_matchState_t* ms,
assert(matchEndIdx > curr+8); /* ensure nextToUpdate is increased */
ms->nextToUpdate = matchEndIdx - 8; /* skip repetitive patterns */
if (bestLength >= MINMATCH) {
- U32 const mIndex = curr - ((U32)*offsetPtr - ZSTD_REP_MOVE); (void)mIndex;
+ U32 const mIndex = curr - (U32)STORED_OFFSET(*offsetPtr); (void)mIndex;
DEBUGLOG(8, "ZSTD_DUBT_findBestMatch(%u) : found match of length %u and offsetCode %u (pos %u)",
curr, (U32)bestLength, (U32)*offsetPtr, mIndex);
}
@@ -390,54 +391,6 @@ ZSTD_BtFindBestMatch( ZSTD_matchState_t* ms,
return ZSTD_DUBT_findBestMatch(ms, ip, iLimit, offsetPtr, mls, dictMode);
}
-
-static size_t
-ZSTD_BtFindBestMatch_selectMLS ( ZSTD_matchState_t* ms,
- const BYTE* ip, const BYTE* const iLimit,
- size_t* offsetPtr)
-{
- switch(ms->cParams.minMatch)
- {
- default : /* includes case 3 */
- case 4 : return ZSTD_BtFindBestMatch(ms, ip, iLimit, offsetPtr, 4, ZSTD_noDict);
- case 5 : return ZSTD_BtFindBestMatch(ms, ip, iLimit, offsetPtr, 5, ZSTD_noDict);
- case 7 :
- case 6 : return ZSTD_BtFindBestMatch(ms, ip, iLimit, offsetPtr, 6, ZSTD_noDict);
- }
-}
-
-
-static size_t ZSTD_BtFindBestMatch_dictMatchState_selectMLS (
- ZSTD_matchState_t* ms,
- const BYTE* ip, const BYTE* const iLimit,
- size_t* offsetPtr)
-{
- switch(ms->cParams.minMatch)
- {
- default : /* includes case 3 */
- case 4 : return ZSTD_BtFindBestMatch(ms, ip, iLimit, offsetPtr, 4, ZSTD_dictMatchState);
- case 5 : return ZSTD_BtFindBestMatch(ms, ip, iLimit, offsetPtr, 5, ZSTD_dictMatchState);
- case 7 :
- case 6 : return ZSTD_BtFindBestMatch(ms, ip, iLimit, offsetPtr, 6, ZSTD_dictMatchState);
- }
-}
-
-
-static size_t ZSTD_BtFindBestMatch_extDict_selectMLS (
- ZSTD_matchState_t* ms,
- const BYTE* ip, const BYTE* const iLimit,
- size_t* offsetPtr)
-{
- switch(ms->cParams.minMatch)
- {
- default : /* includes case 3 */
- case 4 : return ZSTD_BtFindBestMatch(ms, ip, iLimit, offsetPtr, 4, ZSTD_extDict);
- case 5 : return ZSTD_BtFindBestMatch(ms, ip, iLimit, offsetPtr, 5, ZSTD_extDict);
- case 7 :
- case 6 : return ZSTD_BtFindBestMatch(ms, ip, iLimit, offsetPtr, 6, ZSTD_extDict);
- }
-}
-
/***********************************
* Dedicated dict search
***********************************/
@@ -450,7 +403,7 @@ void ZSTD_dedicatedDictSearch_lazy_loadDictionary(ZSTD_matchState_t* ms, const B
U32* const chainTable = ms->chainTable;
U32 const chainSize = 1 << ms->cParams.chainLog;
U32 idx = ms->nextToUpdate;
- U32 const minChain = chainSize < target ? target - chainSize : idx;
+ U32 const minChain = chainSize < target - idx ? target - chainSize : idx;
U32 const bucketSize = 1 << ZSTD_LAZY_DDSS_BUCKET_LOG;
U32 const cacheSize = bucketSize - 1;
U32 const chainAttempts = (1 << ms->cParams.searchLog) - cacheSize;
@@ -464,7 +417,7 @@ void ZSTD_dedicatedDictSearch_lazy_loadDictionary(ZSTD_matchState_t* ms, const B
U32 const hashLog = ms->cParams.hashLog - ZSTD_LAZY_DDSS_BUCKET_LOG;
U32* const tmpHashTable = hashTable;
U32* const tmpChainTable = hashTable + ((size_t)1 << hashLog);
- U32 const tmpChainSize = ((1 << ZSTD_LAZY_DDSS_BUCKET_LOG) - 1) << hashLog;
+ U32 const tmpChainSize = (U32)((1 << ZSTD_LAZY_DDSS_BUCKET_LOG) - 1) << hashLog;
U32 const tmpMinChain = tmpChainSize < target ? target - tmpChainSize : idx;
U32 hashIdx;
@@ -608,7 +561,7 @@ size_t ZSTD_dedicatedDictSearch_lazy_search(size_t* offsetPtr, size_t ml, U32 nb
/* save best solution */
if (currentMl > ml) {
ml = currentMl;
- *offsetPtr = curr - (matchIndex + ddsIndexDelta) + ZSTD_REP_MOVE;
+ *offsetPtr = STORE_OFFSET(curr - (matchIndex + ddsIndexDelta));
if (ip+currentMl == iLimit) {
/* best possible, avoids read overflow on next attempt */
return ml;
@@ -645,7 +598,7 @@ size_t ZSTD_dedicatedDictSearch_lazy_search(size_t* offsetPtr, size_t ml, U32 nb
/* save best solution */
if (currentMl > ml) {
ml = currentMl;
- *offsetPtr = curr - (matchIndex + ddsIndexDelta) + ZSTD_REP_MOVE;
+ *offsetPtr = STORE_OFFSET(curr - (matchIndex + ddsIndexDelta));
if (ip+currentMl == iLimit) break; /* best possible, avoids read overflow on next attempt */
}
}
@@ -692,7 +645,7 @@ U32 ZSTD_insertAndFindFirstIndex(ZSTD_matchState_t* ms, const BYTE* ip) {
/* inlining is important to hardwire a hot branch (template emulation) */
FORCE_INLINE_TEMPLATE
-size_t ZSTD_HcFindBestMatch_generic (
+size_t ZSTD_HcFindBestMatch(
ZSTD_matchState_t* ms,
const BYTE* const ip, const BYTE* const iLimit,
size_t* offsetPtr,
@@ -750,7 +703,7 @@ size_t ZSTD_HcFindBestMatch_generic (
/* save best solution */
if (currentMl > ml) {
ml = currentMl;
- *offsetPtr = curr - matchIndex + ZSTD_REP_MOVE;
+ *offsetPtr = STORE_OFFSET(curr - matchIndex);
if (ip+currentMl == iLimit) break; /* best possible, avoids read overflow on next attempt */
}
@@ -758,6 +711,7 @@ size_t ZSTD_HcFindBestMatch_generic (
matchIndex = NEXT_IN_CHAIN(matchIndex, chainMask);
}
+ assert(nbAttempts <= (1U << ZSTD_SEARCHLOG_MAX)); /* Check we haven't underflowed. */
if (dictMode == ZSTD_dedicatedDictSearch) {
ml = ZSTD_dedicatedDictSearch_lazy_search(offsetPtr, ml, nbAttempts, dms,
ip, iLimit, prefixStart, curr, dictLimit, ddsIdx);
@@ -784,7 +738,8 @@ size_t ZSTD_HcFindBestMatch_generic (
/* save best solution */
if (currentMl > ml) {
ml = currentMl;
- *offsetPtr = curr - (matchIndex + dmsIndexDelta) + ZSTD_REP_MOVE;
+ assert(curr > matchIndex + dmsIndexDelta);
+ *offsetPtr = STORE_OFFSET(curr - (matchIndex + dmsIndexDelta));
if (ip+currentMl == iLimit) break; /* best possible, avoids read overflow on next attempt */
}
@@ -797,310 +752,80 @@ size_t ZSTD_HcFindBestMatch_generic (
return ml;
}
-
-FORCE_INLINE_TEMPLATE size_t ZSTD_HcFindBestMatch_selectMLS (
- ZSTD_matchState_t* ms,
- const BYTE* ip, const BYTE* const iLimit,
- size_t* offsetPtr)
-{
- switch(ms->cParams.minMatch)
- {
- default : /* includes case 3 */
- case 4 : return ZSTD_HcFindBestMatch_generic(ms, ip, iLimit, offsetPtr, 4, ZSTD_noDict);
- case 5 : return ZSTD_HcFindBestMatch_generic(ms, ip, iLimit, offsetPtr, 5, ZSTD_noDict);
- case 7 :
- case 6 : return ZSTD_HcFindBestMatch_generic(ms, ip, iLimit, offsetPtr, 6, ZSTD_noDict);
- }
-}
-
-
-static size_t ZSTD_HcFindBestMatch_dictMatchState_selectMLS (
- ZSTD_matchState_t* ms,
- const BYTE* ip, const BYTE* const iLimit,
- size_t* offsetPtr)
-{
- switch(ms->cParams.minMatch)
- {
- default : /* includes case 3 */
- case 4 : return ZSTD_HcFindBestMatch_generic(ms, ip, iLimit, offsetPtr, 4, ZSTD_dictMatchState);
- case 5 : return ZSTD_HcFindBestMatch_generic(ms, ip, iLimit, offsetPtr, 5, ZSTD_dictMatchState);
- case 7 :
- case 6 : return ZSTD_HcFindBestMatch_generic(ms, ip, iLimit, offsetPtr, 6, ZSTD_dictMatchState);
- }
-}
-
-
-static size_t ZSTD_HcFindBestMatch_dedicatedDictSearch_selectMLS (
- ZSTD_matchState_t* ms,
- const BYTE* ip, const BYTE* const iLimit,
- size_t* offsetPtr)
-{
- switch(ms->cParams.minMatch)
- {
- default : /* includes case 3 */
- case 4 : return ZSTD_HcFindBestMatch_generic(ms, ip, iLimit, offsetPtr, 4, ZSTD_dedicatedDictSearch);
- case 5 : return ZSTD_HcFindBestMatch_generic(ms, ip, iLimit, offsetPtr, 5, ZSTD_dedicatedDictSearch);
- case 7 :
- case 6 : return ZSTD_HcFindBestMatch_generic(ms, ip, iLimit, offsetPtr, 6, ZSTD_dedicatedDictSearch);
- }
-}
-
-
-FORCE_INLINE_TEMPLATE size_t ZSTD_HcFindBestMatch_extDict_selectMLS (
- ZSTD_matchState_t* ms,
- const BYTE* ip, const BYTE* const iLimit,
- size_t* offsetPtr)
-{
- switch(ms->cParams.minMatch)
- {
- default : /* includes case 3 */
- case 4 : return ZSTD_HcFindBestMatch_generic(ms, ip, iLimit, offsetPtr, 4, ZSTD_extDict);
- case 5 : return ZSTD_HcFindBestMatch_generic(ms, ip, iLimit, offsetPtr, 5, ZSTD_extDict);
- case 7 :
- case 6 : return ZSTD_HcFindBestMatch_generic(ms, ip, iLimit, offsetPtr, 6, ZSTD_extDict);
- }
-}
-
/* *********************************
* (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_OFFSET 16 /* 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_MAX_ENTRIES 64 /* absolute maximum number of entries per row, for all configurations */
#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__) */
+typedef U64 ZSTD_VecMask; /* Clarifies when we are interacting with a U64 representing a mask of matches */
/* 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);
+ assert(val != 0);
+# if defined(_MSC_VER) && defined(_WIN64)
+ if (val != 0) {
+ unsigned long r;
+ _BitScanForward64(&r, val);
+ return (U32)(r);
+ } else {
+ /* Should not reach this code path */
+ __assume(0);
+ }
+# elif (defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 4))))
+ if (sizeof(size_t) == 4) {
+ U32 mostSignificantWord = (U32)(val >> 32);
+ U32 leastSignificantWord = (U32)val;
+ if (leastSignificantWord == 0) {
+ return 32 + (U32)__builtin_ctz(mostSignificantWord);
+ } else {
+ return (U32)__builtin_ctz(leastSignificantWord);
+ }
+ } else {
+ return (U32)__builtin_ctzll(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];
+ /* Software ctz version: http://aggregate.org/MAGIC/#Trailing%20Zero%20Count
+ * and: https://stackoverflow.com/questions/2709430/count-number-of-bits-in-a-64-bit-long-big-integer
+ */
+ val = ~val & (val - 1ULL); /* Lowest set bit mask */
+ val = val - ((val >> 1) & 0x5555555555555555);
+ val = (val & 0x3333333333333333ULL) + ((val >> 2) & 0x3333333333333333ULL);
+ return (U32)((((val + (val >> 4)) & 0xF0F0F0F0F0F0F0FULL) * 0x101010101010101ULL) >> 56);
# 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.
+/* ZSTD_rotateRight_*():
+ * Rotates a bitfield to the right by "count" bits.
+ * https://en.wikipedia.org/w/index.php?title=Circular_shift&oldid=991635599#Implementing_circular_shifts
*/
-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));
- }
+FORCE_INLINE_TEMPLATE
+U64 ZSTD_rotateRight_U64(U64 const value, U32 count) {
+ assert(count < 64);
+ count &= 0x3F; /* for fickle pattern recognition */
+ return (value >> count) | (U64)(value << ((0U - count) & 0x3F));
+}
+
+FORCE_INLINE_TEMPLATE
+U32 ZSTD_rotateRight_U32(U32 const value, U32 count) {
+ assert(count < 32);
+ count &= 0x1F; /* for fickle pattern recognition */
+ return (value >> count) | (U32)(value << ((0U - count) & 0x1F));
+}
+
+FORCE_INLINE_TEMPLATE
+U16 ZSTD_rotateRight_U16(U16 const value, U32 count) {
+ assert(count < 16);
+ count &= 0x0F; /* for fickle pattern recognition */
+ return (value >> count) | (U16)(value << ((0U - count) & 0x0F));
}
/* ZSTD_row_nextIndex():
@@ -1126,20 +851,24 @@ MEM_STATIC int ZSTD_isAligned(void const* ptr, size_t align) {
*/
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) {
+ if (rowLog >= 5) {
PREFETCH_L1(hashTable + relRow + 16);
+ /* Note: prefetching more of the hash table does not appear to be beneficial for 128-entry rows */
}
PREFETCH_L1(tagTable + relRow);
- assert(rowLog == 4 || rowLog == 5);
+ if (rowLog == 6) {
+ PREFETCH_L1(tagTable + relRow + 32);
+ }
+ assert(rowLog == 4 || rowLog == 5 || rowLog == 6);
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 */
+ assert(ZSTD_isAligned(tagTable + relRow, (size_t)1 << rowLog)); /* prefetched tagRow sits on correct multiple of bytes (32,64,128) */
}
/* 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,
+FORCE_INLINE_TEMPLATE void ZSTD_row_fillHashCache(ZSTD_matchState_t* ms, const BYTE* base,
U32 const rowLog, U32 const mls,
U32 idx, const BYTE* const iLimit)
{
@@ -1179,35 +908,65 @@ FORCE_INLINE_TEMPLATE U32 ZSTD_row_nextCachedHash(U32* cache, U32 const* hashTab
}
}
-/* 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.
+/* ZSTD_row_update_internalImpl():
+ * Updates the hash table with positions starting from updateStartIdx until updateEndIdx.
*/
-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)
+FORCE_INLINE_TEMPLATE void ZSTD_row_update_internalImpl(ZSTD_matchState_t* ms,
+ U32 updateStartIdx, U32 const updateEndIdx,
+ 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);
+ DEBUGLOG(6, "ZSTD_row_update_internalImpl(): updateStartIdx=%u, updateEndIdx=%u", updateStartIdx, updateEndIdx);
+ for (; updateStartIdx < updateEndIdx; ++updateStartIdx) {
+ U32 const hash = useCache ? ZSTD_row_nextCachedHash(ms->hashCache, hashTable, tagTable, base, updateStartIdx, hashLog, rowLog, mls)
+ : (U32)ZSTD_hashPtr(base + updateStartIdx, 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));
+ assert(hash == ZSTD_hashPtr(base + updateStartIdx, hashLog + ZSTD_ROW_HASH_TAG_BITS, mls));
((BYTE*)tagRow)[pos + ZSTD_ROW_HASH_TAG_OFFSET] = hash & ZSTD_ROW_HASH_TAG_MASK;
- row[pos] = idx;
+ row[pos] = updateStartIdx;
}
+}
+
+/* ZSTD_row_update_internal():
+ * Inserts the byte at ip into the appropriate position in the hash table, and updates ms->nextToUpdate.
+ * Skips sections of long matches as is necessary.
+ */
+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 idx = ms->nextToUpdate;
+ const BYTE* const base = ms->window.base;
+ const U32 target = (U32)(ip - base);
+ const U32 kSkipThreshold = 384;
+ const U32 kMaxMatchStartPositionsToUpdate = 96;
+ const U32 kMaxMatchEndPositionsToUpdate = 32;
+
+ if (useCache) {
+ /* Only skip positions when using hash cache, i.e.
+ * if we are loading a dict, don't skip anything.
+ * If we decide to skip, then we only update a set number
+ * of positions at the beginning and end of the match.
+ */
+ if (UNLIKELY(target - idx > kSkipThreshold)) {
+ U32 const bound = idx + kMaxMatchStartPositionsToUpdate;
+ ZSTD_row_update_internalImpl(ms, idx, bound, mls, rowLog, rowMask, useCache);
+ idx = target - kMaxMatchEndPositionsToUpdate;
+ ZSTD_row_fillHashCache(ms, base, rowLog, mls, idx, ip+1);
+ }
+ }
+ assert(target >= idx);
+ ZSTD_row_update_internalImpl(ms, idx, target, mls, rowLog, rowMask, useCache);
ms->nextToUpdate = target;
}
@@ -1216,7 +975,7 @@ FORCE_INLINE_TEMPLATE void ZSTD_row_update_internal(ZSTD_matchState_t* ms, const
* processing.
*/
void ZSTD_row_update(ZSTD_matchState_t* const ms, const BYTE* ip) {
- const U32 rowLog = ms->cParams.searchLog < 5 ? 4 : 5;
+ const U32 rowLog = BOUNDED(4, ms->cParams.searchLog, 6);
const U32 rowMask = (1u << rowLog) - 1;
const U32 mls = MIN(ms->cParams.minMatch, 6 /* mls caps out at 6 */);
@@ -1224,26 +983,131 @@ void ZSTD_row_update(ZSTD_matchState_t* const ms, const BYTE* ip) {
ZSTD_row_update_internal(ms, ip, mls, rowLog, rowMask, 0 /* dont use cache */);
}
+#if defined(ZSTD_ARCH_X86_SSE2)
+FORCE_INLINE_TEMPLATE ZSTD_VecMask
+ZSTD_row_getSSEMask(int nbChunks, const BYTE* const src, const BYTE tag, const U32 head)
+{
+ const __m128i comparisonMask = _mm_set1_epi8((char)tag);
+ int matches[4] = {0};
+ int i;
+ assert(nbChunks == 1 || nbChunks == 2 || nbChunks == 4);
+ for (i=0; i<nbChunks; i++) {
+ const __m128i chunk = _mm_loadu_si128((const __m128i*)(const void*)(src + 16*i));
+ const __m128i equalMask = _mm_cmpeq_epi8(chunk, comparisonMask);
+ matches[i] = _mm_movemask_epi8(equalMask);
+ }
+ if (nbChunks == 1) return ZSTD_rotateRight_U16((U16)matches[0], head);
+ if (nbChunks == 2) return ZSTD_rotateRight_U32((U32)matches[1] << 16 | (U32)matches[0], head);
+ assert(nbChunks == 4);
+ return ZSTD_rotateRight_U64((U64)matches[3] << 48 | (U64)matches[2] << 32 | (U64)matches[1] << 16 | (U64)matches[0], head);
+}
+#endif
+
/* 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 */
+FORCE_INLINE_TEMPLATE ZSTD_VecMask
+ZSTD_row_getMatchMask(const BYTE* const tagRow, const BYTE tag, const U32 head, const U32 rowEntries)
+{
+ const BYTE* const src = tagRow + ZSTD_ROW_HASH_TAG_OFFSET;
+ assert((rowEntries == 16) || (rowEntries == 32) || rowEntries == 64);
+ assert(rowEntries <= ZSTD_ROW_HASH_MAX_ENTRIES);
+
+#if defined(ZSTD_ARCH_X86_SSE2)
+
+ return ZSTD_row_getSSEMask(rowEntries / 16, src, tag, head);
+
+#else /* SW or NEON-LE */
+
+# if defined(ZSTD_ARCH_ARM_NEON)
+ /* This NEON path only works for little endian - otherwise use SWAR below */
+ if (MEM_isLittleEndian()) {
+ if (rowEntries == 16) {
+ const uint8x16_t chunk = vld1q_u8(src);
+ const uint16x8_t equalMask = vreinterpretq_u16_u8(vceqq_u8(chunk, vdupq_n_u8(tag)));
+ const uint16x8_t t0 = vshlq_n_u16(equalMask, 7);
+ const uint32x4_t t1 = vreinterpretq_u32_u16(vsriq_n_u16(t0, t0, 14));
+ const uint64x2_t t2 = vreinterpretq_u64_u32(vshrq_n_u32(t1, 14));
+ const uint8x16_t t3 = vreinterpretq_u8_u64(vsraq_n_u64(t2, t2, 28));
+ const U16 hi = (U16)vgetq_lane_u8(t3, 8);
+ const U16 lo = (U16)vgetq_lane_u8(t3, 0);
+ return ZSTD_rotateRight_U16((hi << 8) | lo, head);
+ } else if (rowEntries == 32) {
+ const uint16x8x2_t chunk = vld2q_u16((const U16*)(const void*)src);
+ const uint8x16_t chunk0 = vreinterpretq_u8_u16(chunk.val[0]);
+ const uint8x16_t chunk1 = vreinterpretq_u8_u16(chunk.val[1]);
+ const uint8x16_t equalMask0 = vceqq_u8(chunk0, vdupq_n_u8(tag));
+ const uint8x16_t equalMask1 = vceqq_u8(chunk1, vdupq_n_u8(tag));
+ const int8x8_t pack0 = vqmovn_s16(vreinterpretq_s16_u8(equalMask0));
+ const int8x8_t pack1 = vqmovn_s16(vreinterpretq_s16_u8(equalMask1));
+ const uint8x8_t t0 = vreinterpret_u8_s8(pack0);
+ const uint8x8_t t1 = vreinterpret_u8_s8(pack1);
+ const uint8x8_t t2 = vsri_n_u8(t1, t0, 2);
+ const uint8x8x2_t t3 = vuzp_u8(t2, t0);
+ const uint8x8_t t4 = vsri_n_u8(t3.val[1], t3.val[0], 4);
+ const U32 matches = vget_lane_u32(vreinterpret_u32_u8(t4), 0);
+ return ZSTD_rotateRight_U32(matches, head);
+ } else { /* rowEntries == 64 */
+ const uint8x16x4_t chunk = vld4q_u8(src);
+ const uint8x16_t dup = vdupq_n_u8(tag);
+ const uint8x16_t cmp0 = vceqq_u8(chunk.val[0], dup);
+ const uint8x16_t cmp1 = vceqq_u8(chunk.val[1], dup);
+ const uint8x16_t cmp2 = vceqq_u8(chunk.val[2], dup);
+ const uint8x16_t cmp3 = vceqq_u8(chunk.val[3], dup);
+
+ const uint8x16_t t0 = vsriq_n_u8(cmp1, cmp0, 1);
+ const uint8x16_t t1 = vsriq_n_u8(cmp3, cmp2, 1);
+ const uint8x16_t t2 = vsriq_n_u8(t1, t0, 2);
+ const uint8x16_t t3 = vsriq_n_u8(t2, t2, 4);
+ const uint8x8_t t4 = vshrn_n_u16(vreinterpretq_u16_u8(t3), 4);
+ const U64 matches = vget_lane_u64(vreinterpret_u64_u8(t4), 0);
+ return ZSTD_rotateRight_U64(matches, head);
+ }
}
- /* 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);
+# endif /* ZSTD_ARCH_ARM_NEON */
+ /* SWAR */
+ { const size_t chunkSize = sizeof(size_t);
+ const size_t shiftAmount = ((chunkSize * 8) - chunkSize);
+ const size_t xFF = ~((size_t)0);
+ const size_t x01 = xFF / 0xFF;
+ const size_t x80 = x01 << 7;
+ const size_t splatChar = tag * x01;
+ ZSTD_VecMask matches = 0;
+ int i = rowEntries - chunkSize;
+ assert((sizeof(size_t) == 4) || (sizeof(size_t) == 8));
+ if (MEM_isLittleEndian()) { /* runtime check so have two loops */
+ const size_t extractMagic = (xFF / 0x7F) >> chunkSize;
+ do {
+ size_t chunk = MEM_readST(&src[i]);
+ chunk ^= splatChar;
+ chunk = (((chunk | x80) - x01) | chunk) & x80;
+ matches <<= chunkSize;
+ matches |= (chunk * extractMagic) >> shiftAmount;
+ i -= chunkSize;
+ } while (i >= 0);
+ } else { /* big endian: reverse bits during extraction */
+ const size_t msb = xFF ^ (xFF >> 1);
+ const size_t extractMagic = (msb / 0x1FF) | msb;
+ do {
+ size_t chunk = MEM_readST(&src[i]);
+ chunk ^= splatChar;
+ chunk = (((chunk | x80) - x01) | chunk) & x80;
+ matches <<= chunkSize;
+ matches |= ((chunk >> 7) * extractMagic) >> shiftAmount;
+ i -= chunkSize;
+ } while (i >= 0);
+ }
+ matches = ~matches;
+ if (rowEntries == 16) {
+ return ZSTD_rotateRight_U16((U16)matches, head);
+ } else if (rowEntries == 32) {
+ return ZSTD_rotateRight_U32((U32)matches, head);
+ } else {
+ return ZSTD_rotateRight_U64((U64)matches, head);
+ }
+ }
+#endif
}
/* The high-level approach of the SIMD row based match finder is as follows:
@@ -1262,7 +1126,7 @@ ZSTD_VecMask ZSTD_row_getMatchMask(const BYTE* const tagRow, const BYTE tag, con
* - Pick the longest match.
*/
FORCE_INLINE_TEMPLATE
-size_t ZSTD_RowFindBestMatch_generic (
+size_t ZSTD_RowFindBestMatch(
ZSTD_matchState_t* ms,
const BYTE* const ip, const BYTE* const iLimit,
size_t* offsetPtr,
@@ -1293,11 +1157,13 @@ size_t ZSTD_RowFindBestMatch_generic (
/* 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;
+
+ /* Initialize the following variables to satisfy static analyzer */
+ size_t ddsIdx = 0;
+ U32 ddsExtraAttempts = 0; /* cctx hash tables are limited in searches, but allow extra searches into DDS */
+ U32 dmsTag = 0;
+ U32* dmsRow = NULL;
+ BYTE* dmsTagRow = NULL;
if (dictMode == ZSTD_dedicatedDictSearch) {
const U32 ddsHashLog = dms->cParams.hashLog - ZSTD_LAZY_DDSS_BUCKET_LOG;
@@ -1329,7 +1195,7 @@ size_t ZSTD_RowFindBestMatch_generic (
U32* const row = hashTable + relRow;
BYTE* tagRow = (BYTE*)(tagTable + relRow);
U32 const head = *tagRow & rowMask;
- U32 matchBuffer[32 /* maximum nb entries per row */];
+ U32 matchBuffer[ZSTD_ROW_HASH_MAX_ENTRIES];
size_t numMatches = 0;
size_t currMatch = 0;
ZSTD_VecMask matches = ZSTD_row_getMatchMask(tagRow, (BYTE)tag, head, rowEntries);
@@ -1379,12 +1245,13 @@ size_t ZSTD_RowFindBestMatch_generic (
/* Save best solution */
if (currentMl > ml) {
ml = currentMl;
- *offsetPtr = curr - matchIndex + ZSTD_REP_MOVE;
+ *offsetPtr = STORE_OFFSET(curr - matchIndex);
if (ip+currentMl == iLimit) break; /* best possible, avoids read overflow on next attempt */
}
}
}
+ assert(nbAttempts <= (1U << ZSTD_SEARCHLOG_MAX)); /* Check we haven't underflowed. */
if (dictMode == ZSTD_dedicatedDictSearch) {
ml = ZSTD_dedicatedDictSearch_lazy_search(offsetPtr, ml, nbAttempts + ddsExtraAttempts, dms,
ip, iLimit, prefixStart, curr, dictLimit, ddsIdx);
@@ -1397,7 +1264,7 @@ size_t ZSTD_RowFindBestMatch_generic (
const U32 dmsIndexDelta = dictLimit - dmsSize;
{ U32 const head = *dmsTagRow & rowMask;
- U32 matchBuffer[32 /* maximum nb row entries */];
+ U32 matchBuffer[ZSTD_ROW_HASH_MAX_ENTRIES];
size_t numMatches = 0;
size_t currMatch = 0;
ZSTD_VecMask matches = ZSTD_row_getMatchMask(dmsTagRow, (BYTE)dmsTag, head, rowEntries);
@@ -1426,7 +1293,8 @@ size_t ZSTD_RowFindBestMatch_generic (
if (currentMl > ml) {
ml = currentMl;
- *offsetPtr = curr - (matchIndex + dmsIndexDelta) + ZSTD_REP_MOVE;
+ assert(curr > matchIndex + dmsIndexDelta);
+ *offsetPtr = STORE_OFFSET(curr - (matchIndex + dmsIndexDelta));
if (ip+currentMl == iLimit) break;
}
}
@@ -1435,84 +1303,175 @@ size_t ZSTD_RowFindBestMatch_generic (
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);
+typedef size_t (*searchMax_f)(
+ ZSTD_matchState_t* ms,
+ const BYTE* ip, const BYTE* iLimit, size_t* offsetPtr);
+
+/**
+ * This struct contains the functions necessary for lazy to search.
+ * Currently, that is only searchMax. However, it is still valuable to have the
+ * VTable because this makes it easier to add more functions to the VTable later.
+ *
+ * TODO: The start of the search function involves loading and calculating a
+ * bunch of constants from the ZSTD_matchState_t. These computations could be
+ * done in an initialization function, and saved somewhere in the match state.
+ * Then we could pass a pointer to the saved state instead of the match state,
+ * and avoid duplicate computations.
+ *
+ * TODO: Move the match re-winding into searchMax. This improves compression
+ * ratio, and unlocks further simplifications with the next TODO.
+ *
+ * TODO: Try moving the repcode search into searchMax. After the re-winding
+ * and repcode search are in searchMax, there is no more logic in the match
+ * finder loop that requires knowledge about the dictMode. So we should be
+ * able to avoid force inlining it, and we can join the extDict loop with
+ * the single segment loop. It should go in searchMax instead of its own
+ * function to avoid having multiple virtual function calls per search.
+ */
+typedef struct {
+ searchMax_f searchMax;
+} ZSTD_LazyVTable;
+
+#define GEN_ZSTD_BT_VTABLE(dictMode, mls) \
+ static size_t ZSTD_BtFindBestMatch_##dictMode##_##mls( \
+ ZSTD_matchState_t* ms, \
+ const BYTE* ip, const BYTE* const iLimit, \
+ size_t* offsetPtr) \
+ { \
+ assert(MAX(4, MIN(6, ms->cParams.minMatch)) == mls); \
+ return ZSTD_BtFindBestMatch(ms, ip, iLimit, offsetPtr, mls, ZSTD_##dictMode); \
+ } \
+ static const ZSTD_LazyVTable ZSTD_BtVTable_##dictMode##_##mls = { \
+ ZSTD_BtFindBestMatch_##dictMode##_##mls \
+ };
+
+#define GEN_ZSTD_HC_VTABLE(dictMode, mls) \
+ static size_t ZSTD_HcFindBestMatch_##dictMode##_##mls( \
+ ZSTD_matchState_t* ms, \
+ const BYTE* ip, const BYTE* const iLimit, \
+ size_t* offsetPtr) \
+ { \
+ assert(MAX(4, MIN(6, ms->cParams.minMatch)) == mls); \
+ return ZSTD_HcFindBestMatch(ms, ip, iLimit, offsetPtr, mls, ZSTD_##dictMode); \
+ } \
+ static const ZSTD_LazyVTable ZSTD_HcVTable_##dictMode##_##mls = { \
+ ZSTD_HcFindBestMatch_##dictMode##_##mls \
+ };
+
+#define GEN_ZSTD_ROW_VTABLE(dictMode, mls, rowLog) \
+ static size_t ZSTD_RowFindBestMatch_##dictMode##_##mls##_##rowLog( \
+ ZSTD_matchState_t* ms, \
+ const BYTE* ip, const BYTE* const iLimit, \
+ size_t* offsetPtr) \
+ { \
+ assert(MAX(4, MIN(6, ms->cParams.minMatch)) == mls); \
+ assert(MAX(4, MIN(6, ms->cParams.searchLog)) == rowLog); \
+ return ZSTD_RowFindBestMatch(ms, ip, iLimit, offsetPtr, mls, ZSTD_##dictMode, rowLog); \
+ } \
+ static const ZSTD_LazyVTable ZSTD_RowVTable_##dictMode##_##mls##_##rowLog = { \
+ ZSTD_RowFindBestMatch_##dictMode##_##mls##_##rowLog \
+ };
+
+#define ZSTD_FOR_EACH_ROWLOG(X, dictMode, mls) \
+ X(dictMode, mls, 4) \
+ X(dictMode, mls, 5) \
+ X(dictMode, mls, 6)
+
+#define ZSTD_FOR_EACH_MLS_ROWLOG(X, dictMode) \
+ ZSTD_FOR_EACH_ROWLOG(X, dictMode, 4) \
+ ZSTD_FOR_EACH_ROWLOG(X, dictMode, 5) \
+ ZSTD_FOR_EACH_ROWLOG(X, dictMode, 6)
+
+#define ZSTD_FOR_EACH_MLS(X, dictMode) \
+ X(dictMode, 4) \
+ X(dictMode, 5) \
+ X(dictMode, 6)
+
+#define ZSTD_FOR_EACH_DICT_MODE(X, ...) \
+ X(__VA_ARGS__, noDict) \
+ X(__VA_ARGS__, extDict) \
+ X(__VA_ARGS__, dictMatchState) \
+ X(__VA_ARGS__, dedicatedDictSearch)
+
+/* Generate Row VTables for each combination of (dictMode, mls, rowLog) */
+ZSTD_FOR_EACH_DICT_MODE(ZSTD_FOR_EACH_MLS_ROWLOG, GEN_ZSTD_ROW_VTABLE)
+/* Generate Binary Tree VTables for each combination of (dictMode, mls) */
+ZSTD_FOR_EACH_DICT_MODE(ZSTD_FOR_EACH_MLS, GEN_ZSTD_BT_VTABLE)
+/* Generate Hash Chain VTables for each combination of (dictMode, mls) */
+ZSTD_FOR_EACH_DICT_MODE(ZSTD_FOR_EACH_MLS, GEN_ZSTD_HC_VTABLE)
+
+#define GEN_ZSTD_BT_VTABLE_ARRAY(dictMode) \
+ { \
+ &ZSTD_BtVTable_##dictMode##_4, \
+ &ZSTD_BtVTable_##dictMode##_5, \
+ &ZSTD_BtVTable_##dictMode##_6 \
}
-}
-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);
+#define GEN_ZSTD_HC_VTABLE_ARRAY(dictMode) \
+ { \
+ &ZSTD_HcVTable_##dictMode##_4, \
+ &ZSTD_HcVTable_##dictMode##_5, \
+ &ZSTD_HcVTable_##dictMode##_6 \
}
-}
-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);
+#define GEN_ZSTD_ROW_VTABLE_ARRAY_(dictMode, mls) \
+ { \
+ &ZSTD_RowVTable_##dictMode##_##mls##_4, \
+ &ZSTD_RowVTable_##dictMode##_##mls##_5, \
+ &ZSTD_RowVTable_##dictMode##_##mls##_6 \
}
-}
-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);
+#define GEN_ZSTD_ROW_VTABLE_ARRAY(dictMode) \
+ { \
+ GEN_ZSTD_ROW_VTABLE_ARRAY_(dictMode, 4), \
+ GEN_ZSTD_ROW_VTABLE_ARRAY_(dictMode, 5), \
+ GEN_ZSTD_ROW_VTABLE_ARRAY_(dictMode, 6) \
}
-}
+#define GEN_ZSTD_VTABLE_ARRAY(X) \
+ { \
+ X(noDict), \
+ X(extDict), \
+ X(dictMatchState), \
+ X(dedicatedDictSearch) \
+ }
/* *******************************
* Common parser - lazy strategy
*********************************/
typedef enum { search_hashChain=0, search_binaryTree=1, search_rowHash=2 } searchMethod_e;
+/**
+ * This table is indexed first by the four ZSTD_dictMode_e values, and then
+ * by the two searchMethod_e values. NULLs are placed for configurations
+ * that should never occur (extDict modes go to the other implementation
+ * below and there is no DDSS for binary tree search yet).
+ */
+
+static ZSTD_LazyVTable const*
+ZSTD_selectLazyVTable(ZSTD_matchState_t const* ms, searchMethod_e searchMethod, ZSTD_dictMode_e dictMode)
+{
+ /* Fill the Hc/Bt VTable arrays with the right functions for the (dictMode, mls) combination. */
+ ZSTD_LazyVTable const* const hcVTables[4][3] = GEN_ZSTD_VTABLE_ARRAY(GEN_ZSTD_HC_VTABLE_ARRAY);
+ ZSTD_LazyVTable const* const btVTables[4][3] = GEN_ZSTD_VTABLE_ARRAY(GEN_ZSTD_BT_VTABLE_ARRAY);
+ /* Fill the Row VTable array with the right functions for the (dictMode, mls, rowLog) combination. */
+ ZSTD_LazyVTable const* const rowVTables[4][3][3] = GEN_ZSTD_VTABLE_ARRAY(GEN_ZSTD_ROW_VTABLE_ARRAY);
+
+ U32 const mls = MAX(4, MIN(6, ms->cParams.minMatch));
+ U32 const rowLog = MAX(4, MIN(6, ms->cParams.searchLog));
+ switch (searchMethod) {
+ case search_hashChain:
+ return hcVTables[dictMode][mls - 4];
+ case search_binaryTree:
+ return btVTables[dictMode][mls - 4];
+ case search_rowHash:
+ return rowVTables[dictMode][mls - 4][rowLog - 4];
+ default:
+ return NULL;
+ }
+}
+
FORCE_INLINE_TEMPLATE size_t
ZSTD_compressBlock_lazy_generic(
ZSTD_matchState_t* ms, seqStore_t* seqStore,
@@ -1525,46 +1484,12 @@ ZSTD_compressBlock_lazy_generic(
const BYTE* ip = istart;
const BYTE* anchor = istart;
const BYTE* const iend = istart + srcSize;
- const BYTE* const ilimit = searchMethod == search_rowHash ? iend - 8 - ZSTD_ROW_HASH_CACHE_SIZE : 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,
- const BYTE* ip, const BYTE* iLimit, size_t* offsetPtr);
-
- /**
- * This table is indexed first by the four ZSTD_dictMode_e values, and then
- * by the two searchMethod_e values. NULLs are placed for configurations
- * 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][3] = {
- {
- ZSTD_HcFindBestMatch_selectMLS,
- ZSTD_BtFindBestMatch_selectMLS,
- ZSTD_RowFindBestMatch_selectRowLog
- },
- {
- NULL,
- NULL,
- NULL
- },
- {
- ZSTD_HcFindBestMatch_dictMatchState_selectMLS,
- ZSTD_BtFindBestMatch_dictMatchState_selectMLS,
- ZSTD_RowFindBestMatch_dictMatchState_selectRowLog
- },
- {
- ZSTD_HcFindBestMatch_dedicatedDictSearch_selectMLS,
- NULL,
- ZSTD_RowFindBestMatch_dedicatedDictSearch_selectRowLog
- }
- };
-
- searchMax_f const searchMax = searchFuncs[dictMode][(int)searchMethod];
+ searchMax_f const searchMax = ZSTD_selectLazyVTable(ms, searchMethod, dictMode)->searchMax;
U32 offset_1 = rep[0], offset_2 = rep[1], savedOffset=0;
const int isDMS = dictMode == ZSTD_dictMatchState;
@@ -1599,6 +1524,7 @@ ZSTD_compressBlock_lazy_generic(
}
if (searchMethod == search_rowHash) {
+ const U32 rowLog = MAX(4, MIN(6, ms->cParams.searchLog));
ZSTD_row_fillHashCache(ms, base, rowLog,
MIN(ms->cParams.minMatch, 6 /* mls caps out at 6 */),
ms->nextToUpdate, ilimit);
@@ -1613,8 +1539,9 @@ ZSTD_compressBlock_lazy_generic(
#endif
while (ip < ilimit) {
size_t matchLength=0;
- size_t offset=0;
+ size_t offcode=STORE_REPCODE_1;
const BYTE* start=ip+1;
+ DEBUGLOG(7, "search baseline (depth 0)");
/* check repCode */
if (isDxS) {
@@ -1640,7 +1567,7 @@ ZSTD_compressBlock_lazy_generic(
{ size_t offsetFound = 999999999;
size_t const ml2 = searchMax(ms, ip, iend, &offsetFound);
if (ml2 > matchLength)
- matchLength = ml2, start = ip, offset=offsetFound;
+ matchLength = ml2, start = ip, offcode=offsetFound;
}
if (matchLength < 4) {
@@ -1651,14 +1578,15 @@ ZSTD_compressBlock_lazy_generic(
/* let's try to find a better solution */
if (depth>=1)
while (ip<ilimit) {
+ DEBUGLOG(7, "search depth 1");
ip ++;
if ( (dictMode == ZSTD_noDict)
- && (offset) && ((offset_1>0) & (MEM_read32(ip) == MEM_read32(ip - offset_1)))) {
+ && (offcode) && ((offset_1>0) & (MEM_read32(ip) == MEM_read32(ip - offset_1)))) {
size_t const mlRep = ZSTD_count(ip+4, ip+4-offset_1, iend) + 4;
int const gain2 = (int)(mlRep * 3);
- int const gain1 = (int)(matchLength*3 - ZSTD_highbit32((U32)offset+1) + 1);
+ int const gain1 = (int)(matchLength*3 - ZSTD_highbit32((U32)STORED_TO_OFFBASE(offcode)) + 1);
if ((mlRep >= 4) && (gain2 > gain1))
- matchLength = mlRep, offset = 0, start = ip;
+ matchLength = mlRep, offcode = STORE_REPCODE_1, start = ip;
}
if (isDxS) {
const U32 repIndex = (U32)(ip - base) - offset_1;
@@ -1670,30 +1598,31 @@ ZSTD_compressBlock_lazy_generic(
const BYTE* repMatchEnd = repIndex < prefixLowestIndex ? dictEnd : iend;
size_t const mlRep = ZSTD_count_2segments(ip+4, repMatch+4, iend, repMatchEnd, prefixLowest) + 4;
int const gain2 = (int)(mlRep * 3);
- int const gain1 = (int)(matchLength*3 - ZSTD_highbit32((U32)offset+1) + 1);
+ int const gain1 = (int)(matchLength*3 - ZSTD_highbit32((U32)STORED_TO_OFFBASE(offcode)) + 1);
if ((mlRep >= 4) && (gain2 > gain1))
- matchLength = mlRep, offset = 0, start = ip;
+ matchLength = mlRep, offcode = STORE_REPCODE_1, start = ip;
}
}
{ size_t offset2=999999999;
size_t const ml2 = searchMax(ms, ip, iend, &offset2);
- int const gain2 = (int)(ml2*4 - ZSTD_highbit32((U32)offset2+1)); /* raw approx */
- int const gain1 = (int)(matchLength*4 - ZSTD_highbit32((U32)offset+1) + 4);
+ int const gain2 = (int)(ml2*4 - ZSTD_highbit32((U32)STORED_TO_OFFBASE(offset2))); /* raw approx */
+ int const gain1 = (int)(matchLength*4 - ZSTD_highbit32((U32)STORED_TO_OFFBASE(offcode)) + 4);
if ((ml2 >= 4) && (gain2 > gain1)) {
- matchLength = ml2, offset = offset2, start = ip;
+ matchLength = ml2, offcode = offset2, start = ip;
continue; /* search a better one */
} }
/* let's find an even better one */
if ((depth==2) && (ip<ilimit)) {
+ DEBUGLOG(7, "search depth 2");
ip ++;
if ( (dictMode == ZSTD_noDict)
- && (offset) && ((offset_1>0) & (MEM_read32(ip) == MEM_read32(ip - offset_1)))) {
+ && (offcode) && ((offset_1>0) & (MEM_read32(ip) == MEM_read32(ip - offset_1)))) {
size_t const mlRep = ZSTD_count(ip+4, ip+4-offset_1, iend) + 4;
int const gain2 = (int)(mlRep * 4);
- int const gain1 = (int)(matchLength*4 - ZSTD_highbit32((U32)offset+1) + 1);
+ int const gain1 = (int)(matchLength*4 - ZSTD_highbit32((U32)STORED_TO_OFFBASE(offcode)) + 1);
if ((mlRep >= 4) && (gain2 > gain1))
- matchLength = mlRep, offset = 0, start = ip;
+ matchLength = mlRep, offcode = STORE_REPCODE_1, start = ip;
}
if (isDxS) {
const U32 repIndex = (U32)(ip - base) - offset_1;
@@ -1705,46 +1634,45 @@ ZSTD_compressBlock_lazy_generic(
const BYTE* repMatchEnd = repIndex < prefixLowestIndex ? dictEnd : iend;
size_t const mlRep = ZSTD_count_2segments(ip+4, repMatch+4, iend, repMatchEnd, prefixLowest) + 4;
int const gain2 = (int)(mlRep * 4);
- int const gain1 = (int)(matchLength*4 - ZSTD_highbit32((U32)offset+1) + 1);
+ int const gain1 = (int)(matchLength*4 - ZSTD_highbit32((U32)STORED_TO_OFFBASE(offcode)) + 1);
if ((mlRep >= 4) && (gain2 > gain1))
- matchLength = mlRep, offset = 0, start = ip;
+ matchLength = mlRep, offcode = STORE_REPCODE_1, start = ip;
}
}
{ size_t offset2=999999999;
size_t const ml2 = searchMax(ms, ip, iend, &offset2);
- int const gain2 = (int)(ml2*4 - ZSTD_highbit32((U32)offset2+1)); /* raw approx */
- int const gain1 = (int)(matchLength*4 - ZSTD_highbit32((U32)offset+1) + 7);
+ int const gain2 = (int)(ml2*4 - ZSTD_highbit32((U32)STORED_TO_OFFBASE(offset2))); /* raw approx */
+ int const gain1 = (int)(matchLength*4 - ZSTD_highbit32((U32)STORED_TO_OFFBASE(offcode)) + 7);
if ((ml2 >= 4) && (gain2 > gain1)) {
- matchLength = ml2, offset = offset2, start = ip;
+ matchLength = ml2, offcode = offset2, start = ip;
continue;
} } }
break; /* nothing found : store previous solution */
}
/* NOTE:
- * start[-offset+ZSTD_REP_MOVE-1] is undefined behavior.
- * (-offset+ZSTD_REP_MOVE-1) is unsigned, and is added to start, which
- * overflows the pointer, which is undefined behavior.
+ * Pay attention that `start[-value]` can lead to strange undefined behavior
+ * notably if `value` is unsigned, resulting in a large positive `-value`.
*/
/* catch up */
- if (offset) {
+ if (STORED_IS_OFFSET(offcode)) {
if (dictMode == ZSTD_noDict) {
- while ( ((start > anchor) & (start - (offset-ZSTD_REP_MOVE) > prefixLowest))
- && (start[-1] == (start-(offset-ZSTD_REP_MOVE))[-1]) ) /* only search for offset within prefix */
+ while ( ((start > anchor) & (start - STORED_OFFSET(offcode) > prefixLowest))
+ && (start[-1] == (start-STORED_OFFSET(offcode))[-1]) ) /* only search for offset within prefix */
{ start--; matchLength++; }
}
if (isDxS) {
- U32 const matchIndex = (U32)((start-base) - (offset - ZSTD_REP_MOVE));
+ U32 const matchIndex = (U32)((size_t)(start-base) - STORED_OFFSET(offcode));
const BYTE* match = (matchIndex < prefixLowestIndex) ? dictBase + matchIndex - dictIndexDelta : base + matchIndex;
const BYTE* const mStart = (matchIndex < prefixLowestIndex) ? dictLowest : prefixLowest;
while ((start>anchor) && (match>mStart) && (start[-1] == match[-1])) { start--; match--; matchLength++; } /* catch up */
}
- offset_2 = offset_1; offset_1 = (U32)(offset - ZSTD_REP_MOVE);
+ offset_2 = offset_1; offset_1 = (U32)STORED_OFFSET(offcode);
}
/* store sequence */
_storeSequence:
- { size_t const litLength = start - anchor;
- ZSTD_storeSeq(seqStore, litLength, anchor, iend, (U32)offset, matchLength-MINMATCH);
+ { size_t const litLength = (size_t)(start - anchor);
+ ZSTD_storeSeq(seqStore, litLength, anchor, iend, (U32)offcode, matchLength);
anchor = ip = start + matchLength;
}
@@ -1760,8 +1688,8 @@ _storeSequence:
&& (MEM_read32(repMatch) == MEM_read32(ip)) ) {
const BYTE* const repEnd2 = repIndex < prefixLowestIndex ? dictEnd : iend;
matchLength = ZSTD_count_2segments(ip+4, repMatch+4, iend, repEnd2, prefixLowest) + 4;
- offset = offset_2; offset_2 = offset_1; offset_1 = (U32)offset; /* swap offset_2 <=> offset_1 */
- ZSTD_storeSeq(seqStore, 0, anchor, iend, 0, matchLength-MINMATCH);
+ offcode = offset_2; offset_2 = offset_1; offset_1 = (U32)offcode; /* swap offset_2 <=> offset_1 */
+ ZSTD_storeSeq(seqStore, 0, anchor, iend, STORE_REPCODE_1, matchLength);
ip += matchLength;
anchor = ip;
continue;
@@ -1775,8 +1703,8 @@ _storeSequence:
&& (MEM_read32(ip) == MEM_read32(ip - offset_2)) ) {
/* store sequence */
matchLength = ZSTD_count(ip+4, ip+4-offset_2, iend) + 4;
- offset = offset_2; offset_2 = offset_1; offset_1 = (U32)offset; /* swap repcodes */
- ZSTD_storeSeq(seqStore, 0, anchor, iend, 0, matchLength-MINMATCH);
+ offcode = offset_2; offset_2 = offset_1; offset_1 = (U32)offcode; /* swap repcodes */
+ ZSTD_storeSeq(seqStore, 0, anchor, iend, STORE_REPCODE_1, matchLength);
ip += matchLength;
anchor = ip;
continue; /* faster when present ... (?) */
@@ -1955,15 +1883,7 @@ size_t ZSTD_compressBlock_lazy_extDict_generic(
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);
- const searchMax_f searchFuncs[3] = {
- ZSTD_HcFindBestMatch_extDict_selectMLS,
- ZSTD_BtFindBestMatch_extDict_selectMLS,
- ZSTD_RowFindBestMatch_extDict_selectRowLog
- };
- searchMax_f searchMax = searchFuncs[(int)searchMethod];
+ searchMax_f const searchMax = ZSTD_selectLazyVTable(ms, searchMethod, ZSTD_extDict)->searchMax;
U32 offset_1 = rep[0], offset_2 = rep[1];
DEBUGLOG(5, "ZSTD_compressBlock_lazy_extDict_generic (searchFunc=%u)", (U32)searchMethod);
@@ -1985,7 +1905,7 @@ size_t ZSTD_compressBlock_lazy_extDict_generic(
#endif
while (ip < ilimit) {
size_t matchLength=0;
- size_t offset=0;
+ size_t offcode=STORE_REPCODE_1;
const BYTE* start=ip+1;
U32 curr = (U32)(ip-base);
@@ -1995,7 +1915,7 @@ size_t ZSTD_compressBlock_lazy_extDict_generic(
const BYTE* const repBase = repIndex < dictLimit ? dictBase : base;
const BYTE* const repMatch = repBase + repIndex;
if ( ((U32)((dictLimit-1) - repIndex) >= 3) /* intentional overflow */
- & (offset_1 < curr+1 - windowLow) ) /* note: we are searching at curr+1 */
+ & (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;
@@ -2007,10 +1927,10 @@ size_t ZSTD_compressBlock_lazy_extDict_generic(
{ size_t offsetFound = 999999999;
size_t const ml2 = searchMax(ms, ip, iend, &offsetFound);
if (ml2 > matchLength)
- matchLength = ml2, start = ip, offset=offsetFound;
+ matchLength = ml2, start = ip, offcode=offsetFound;
}
- if (matchLength < 4) {
+ if (matchLength < 4) {
ip += ((ip-anchor) >> kSearchStrength) + 1; /* jump faster over incompressible sections */
continue;
}
@@ -2021,30 +1941,30 @@ size_t ZSTD_compressBlock_lazy_extDict_generic(
ip ++;
curr++;
/* check repCode */
- if (offset) {
+ if (offcode) {
const U32 windowLow = ZSTD_getLowestMatchIndex(ms, curr, windowLog);
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) /* intentional overflow : do not test positions overlapping 2 memory segments */
- & (offset_1 < curr - windowLow) ) /* equivalent to `curr > repIndex >= windowLow` */
+ & (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;
size_t const repLength = ZSTD_count_2segments(ip+4, repMatch+4, iend, repEnd, prefixStart) + 4;
int const gain2 = (int)(repLength * 3);
- int const gain1 = (int)(matchLength*3 - ZSTD_highbit32((U32)offset+1) + 1);
+ int const gain1 = (int)(matchLength*3 - ZSTD_highbit32((U32)STORED_TO_OFFBASE(offcode)) + 1);
if ((repLength >= 4) && (gain2 > gain1))
- matchLength = repLength, offset = 0, start = ip;
+ matchLength = repLength, offcode = STORE_REPCODE_1, start = ip;
} }
/* search match, depth 1 */
{ size_t offset2=999999999;
size_t const ml2 = searchMax(ms, ip, iend, &offset2);
- int const gain2 = (int)(ml2*4 - ZSTD_highbit32((U32)offset2+1)); /* raw approx */
- int const gain1 = (int)(matchLength*4 - ZSTD_highbit32((U32)offset+1) + 4);
+ int const gain2 = (int)(ml2*4 - ZSTD_highbit32((U32)STORED_TO_OFFBASE(offset2))); /* raw approx */
+ int const gain1 = (int)(matchLength*4 - ZSTD_highbit32((U32)STORED_TO_OFFBASE(offcode)) + 4);
if ((ml2 >= 4) && (gain2 > gain1)) {
- matchLength = ml2, offset = offset2, start = ip;
+ matchLength = ml2, offcode = offset2, start = ip;
continue; /* search a better one */
} }
@@ -2053,48 +1973,48 @@ size_t ZSTD_compressBlock_lazy_extDict_generic(
ip ++;
curr++;
/* check repCode */
- if (offset) {
+ if (offcode) {
const U32 windowLow = ZSTD_getLowestMatchIndex(ms, curr, windowLog);
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) /* intentional overflow : do not test positions overlapping 2 memory segments */
- & (offset_1 < curr - windowLow) ) /* equivalent to `curr > repIndex >= windowLow` */
+ & (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;
size_t const repLength = ZSTD_count_2segments(ip+4, repMatch+4, iend, repEnd, prefixStart) + 4;
int const gain2 = (int)(repLength * 4);
- int const gain1 = (int)(matchLength*4 - ZSTD_highbit32((U32)offset+1) + 1);
+ int const gain1 = (int)(matchLength*4 - ZSTD_highbit32((U32)STORED_TO_OFFBASE(offcode)) + 1);
if ((repLength >= 4) && (gain2 > gain1))
- matchLength = repLength, offset = 0, start = ip;
+ matchLength = repLength, offcode = STORE_REPCODE_1, start = ip;
} }
/* search match, depth 2 */
{ size_t offset2=999999999;
size_t const ml2 = searchMax(ms, ip, iend, &offset2);
- int const gain2 = (int)(ml2*4 - ZSTD_highbit32((U32)offset2+1)); /* raw approx */
- int const gain1 = (int)(matchLength*4 - ZSTD_highbit32((U32)offset+1) + 7);
+ int const gain2 = (int)(ml2*4 - ZSTD_highbit32((U32)STORED_TO_OFFBASE(offset2))); /* raw approx */
+ int const gain1 = (int)(matchLength*4 - ZSTD_highbit32((U32)STORED_TO_OFFBASE(offcode)) + 7);
if ((ml2 >= 4) && (gain2 > gain1)) {
- matchLength = ml2, offset = offset2, start = ip;
+ matchLength = ml2, offcode = offset2, start = ip;
continue;
} } }
break; /* nothing found : store previous solution */
}
/* catch up */
- if (offset) {
- U32 const matchIndex = (U32)((start-base) - (offset - ZSTD_REP_MOVE));
+ if (STORED_IS_OFFSET(offcode)) {
+ U32 const matchIndex = (U32)((size_t)(start-base) - STORED_OFFSET(offcode));
const BYTE* match = (matchIndex < dictLimit) ? dictBase + matchIndex : base + matchIndex;
const BYTE* const mStart = (matchIndex < dictLimit) ? dictStart : prefixStart;
while ((start>anchor) && (match>mStart) && (start[-1] == match[-1])) { start--; match--; matchLength++; } /* catch up */
- offset_2 = offset_1; offset_1 = (U32)(offset - ZSTD_REP_MOVE);
+ offset_2 = offset_1; offset_1 = (U32)STORED_OFFSET(offcode);
}
/* store sequence */
_storeSequence:
- { size_t const litLength = start - anchor;
- ZSTD_storeSeq(seqStore, litLength, anchor, iend, (U32)offset, matchLength-MINMATCH);
+ { size_t const litLength = (size_t)(start - anchor);
+ ZSTD_storeSeq(seqStore, litLength, anchor, iend, (U32)offcode, matchLength);
anchor = ip = start + matchLength;
}
@@ -2106,13 +2026,13 @@ _storeSequence:
const BYTE* const repBase = repIndex < dictLimit ? dictBase : base;
const BYTE* const repMatch = repBase + repIndex;
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` */
+ & (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;
matchLength = ZSTD_count_2segments(ip+4, repMatch+4, iend, repEnd, prefixStart) + 4;
- offset = offset_2; offset_2 = offset_1; offset_1 = (U32)offset; /* swap offset history */
- ZSTD_storeSeq(seqStore, 0, anchor, iend, 0, matchLength-MINMATCH);
+ offcode = offset_2; offset_2 = offset_1; offset_1 = (U32)offcode; /* swap offset history */
+ ZSTD_storeSeq(seqStore, 0, anchor, iend, STORE_REPCODE_1, matchLength);
ip += matchLength;
anchor = ip;
continue; /* faster when present ... (?) */
diff --git a/thirdparty/zstd/compress/zstd_ldm.c b/thirdparty/zstd/compress/zstd_ldm.c
index fa4ebeabd7..f662b2546e 100644
--- a/thirdparty/zstd/compress/zstd_ldm.c
+++ b/thirdparty/zstd/compress/zstd_ldm.c
@@ -159,12 +159,12 @@ size_t ZSTD_ldm_getTableSize(ldmParams_t params)
size_t const ldmBucketSize = ((size_t)1) << (params.hashLog - ldmBucketSizeLog);
size_t const totalSize = ZSTD_cwksp_alloc_size(ldmBucketSize)
+ ZSTD_cwksp_alloc_size(ldmHSize * sizeof(ldmEntry_t));
- return params.enableLdm ? totalSize : 0;
+ return params.enableLdm == ZSTD_ps_enable ? totalSize : 0;
}
size_t ZSTD_ldm_getMaxNbSeq(ldmParams_t params, size_t maxChunkSize)
{
- return params.enableLdm ? (maxChunkSize / params.minMatchLength) : 0;
+ return params.enableLdm == ZSTD_ps_enable ? (maxChunkSize / params.minMatchLength) : 0;
}
/** ZSTD_ldm_getBucket() :
@@ -478,7 +478,7 @@ static size_t ZSTD_ldm_generateSequences_internal(
*/
if (anchor > ip + hashed) {
ZSTD_ldm_gear_reset(&hashState, anchor - minMatchLength, minMatchLength);
- /* Continue the outter loop at anchor (ip + hashed == anchor). */
+ /* Continue the outer loop at anchor (ip + hashed == anchor). */
ip = anchor - hashed;
break;
}
@@ -579,7 +579,9 @@ size_t ZSTD_ldm_generateSequences(
return 0;
}
-void ZSTD_ldm_skipSequences(rawSeqStore_t* rawSeqStore, size_t srcSize, U32 const minMatch) {
+void
+ZSTD_ldm_skipSequences(rawSeqStore_t* rawSeqStore, size_t srcSize, U32 const minMatch)
+{
while (srcSize > 0 && rawSeqStore->pos < rawSeqStore->size) {
rawSeq* seq = rawSeqStore->seq + rawSeqStore->pos;
if (srcSize <= seq->litLength) {
@@ -657,7 +659,7 @@ 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,
+ ZSTD_paramSwitch_e useRowMatchFinder,
void const* src, size_t srcSize)
{
const ZSTD_compressionParameters* const cParams = &ms->cParams;
@@ -709,8 +711,8 @@ size_t ZSTD_ldm_blockCompress(rawSeqStore_t* rawSeqStore,
rep[0] = sequence.offset;
/* Store the sequence */
ZSTD_storeSeq(seqStore, newLitLength, ip - newLitLength, iend,
- sequence.offset + ZSTD_REP_MOVE,
- sequence.matchLength - MINMATCH);
+ STORE_OFFSET(sequence.offset),
+ sequence.matchLength);
ip += sequence.matchLength;
}
}
diff --git a/thirdparty/zstd/compress/zstd_ldm.h b/thirdparty/zstd/compress/zstd_ldm.h
index 393466fa9f..4e68dbf52e 100644
--- a/thirdparty/zstd/compress/zstd_ldm.h
+++ b/thirdparty/zstd/compress/zstd_ldm.h
@@ -66,7 +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,
+ ZSTD_paramSwitch_e useRowMatchFinder,
void const* src, size_t srcSize);
/**
diff --git a/thirdparty/zstd/compress/zstd_ldm_geartab.h b/thirdparty/zstd/compress/zstd_ldm_geartab.h
index e5c24d856b..647f865be2 100644
--- a/thirdparty/zstd/compress/zstd_ldm_geartab.h
+++ b/thirdparty/zstd/compress/zstd_ldm_geartab.h
@@ -11,7 +11,10 @@
#ifndef ZSTD_LDM_GEARTAB_H
#define ZSTD_LDM_GEARTAB_H
-static U64 ZSTD_ldm_gearTab[256] = {
+#include "../common/compiler.h" /* UNUSED_ATTR */
+#include "../common/mem.h" /* U64 */
+
+static UNUSED_ATTR const U64 ZSTD_ldm_gearTab[256] = {
0xf5b8f72c5f77775c, 0x84935f266b7ac412, 0xb647ada9ca730ccc,
0xb065bb4b114fb1de, 0x34584e7e8c3a9fd0, 0x4e97e17c6ae26b05,
0x3a03d743bc99a604, 0xcecd042422c4044f, 0x76de76c58524259e,
diff --git a/thirdparty/zstd/compress/zstd_opt.c b/thirdparty/zstd/compress/zstd_opt.c
index 402a7e5c76..1b1ddad428 100644
--- a/thirdparty/zstd/compress/zstd_opt.c
+++ b/thirdparty/zstd/compress/zstd_opt.c
@@ -14,7 +14,6 @@
#define ZSTD_LITFREQ_ADD 2 /* scaling factor for litFreq, so that frequencies adapt faster to new stats */
-#define ZSTD_FREQ_DIV 4 /* log factor when using previous stats to init next stats */
#define ZSTD_MAX_PRICE (1<<30)
#define ZSTD_PREDEF_THRESHOLD 1024 /* if srcSize < ZSTD_PREDEF_THRESHOLD, symbols' cost is assumed static, directly determined by pre-defined distributions */
@@ -24,11 +23,11 @@
* Price functions for optimal parser
***************************************/
-#if 0 /* approximation at bit level */
+#if 0 /* approximation at bit level (for tests) */
# define BITCOST_ACCURACY 0
# define BITCOST_MULTIPLIER (1 << BITCOST_ACCURACY)
-# define WEIGHT(stat) ((void)opt, ZSTD_bitWeight(stat))
-#elif 0 /* fractional bit accuracy */
+# define WEIGHT(stat, opt) ((void)opt, ZSTD_bitWeight(stat))
+#elif 0 /* fractional bit accuracy (for tests) */
# define BITCOST_ACCURACY 8
# define BITCOST_MULTIPLIER (1 << BITCOST_ACCURACY)
# define WEIGHT(stat,opt) ((void)opt, ZSTD_fracWeight(stat))
@@ -66,7 +65,7 @@ MEM_STATIC double ZSTD_fCost(U32 price)
static int ZSTD_compressedLiterals(optState_t const* const optPtr)
{
- return optPtr->literalCompressionMode != ZSTD_lcm_uncompressed;
+ return optPtr->literalCompressionMode != ZSTD_ps_disable;
}
static void ZSTD_setBasePrices(optState_t* optPtr, int optLevel)
@@ -79,25 +78,46 @@ static void ZSTD_setBasePrices(optState_t* optPtr, int optLevel)
}
-/* ZSTD_downscaleStat() :
- * reduce all elements in table by a factor 2^(ZSTD_FREQ_DIV+malus)
- * return the resulting sum of elements */
-static U32 ZSTD_downscaleStat(unsigned* table, U32 lastEltIndex, int malus)
+static U32 sum_u32(const unsigned table[], size_t nbElts)
+{
+ size_t n;
+ U32 total = 0;
+ for (n=0; n<nbElts; n++) {
+ total += table[n];
+ }
+ return total;
+}
+
+static U32 ZSTD_downscaleStats(unsigned* table, U32 lastEltIndex, U32 shift)
{
U32 s, sum=0;
- DEBUGLOG(5, "ZSTD_downscaleStat (nbElts=%u)", (unsigned)lastEltIndex+1);
- assert(ZSTD_FREQ_DIV+malus > 0 && ZSTD_FREQ_DIV+malus < 31);
+ DEBUGLOG(5, "ZSTD_downscaleStats (nbElts=%u, shift=%u)", (unsigned)lastEltIndex+1, (unsigned)shift);
+ assert(shift < 30);
for (s=0; s<lastEltIndex+1; s++) {
- table[s] = 1 + (table[s] >> (ZSTD_FREQ_DIV+malus));
+ table[s] = 1 + (table[s] >> shift);
sum += table[s];
}
return sum;
}
+/* ZSTD_scaleStats() :
+ * reduce all elements in table is sum too large
+ * return the resulting sum of elements */
+static U32 ZSTD_scaleStats(unsigned* table, U32 lastEltIndex, U32 logTarget)
+{
+ U32 const prevsum = sum_u32(table, lastEltIndex+1);
+ U32 const factor = prevsum >> logTarget;
+ DEBUGLOG(5, "ZSTD_scaleStats (nbElts=%u, target=%u)", (unsigned)lastEltIndex+1, (unsigned)logTarget);
+ assert(logTarget < 30);
+ if (factor <= 1) return prevsum;
+ return ZSTD_downscaleStats(table, lastEltIndex, ZSTD_highbit32(factor));
+}
+
/* ZSTD_rescaleFreqs() :
* if first block (detected by optPtr->litLengthSum == 0) : init statistics
* take hints from dictionary if there is one
- * or init from zero, using src for literals stats, or flat 1 for match symbols
+ * and init from zero if there is none,
+ * using src for literals stats, and baseline stats for sequence symbols
* otherwise downscale existing stats, to be used as seed for next block.
*/
static void
@@ -126,7 +146,7 @@ ZSTD_rescaleFreqs(optState_t* const optPtr,
optPtr->litSum = 0;
for (lit=0; lit<=MaxLit; lit++) {
U32 const scaleLog = 11; /* scale to 2K */
- U32 const bitCost = HUF_getNbBits(optPtr->symbolCosts->huf.CTable, lit);
+ U32 const bitCost = HUF_getNbBitsFromCTable(optPtr->symbolCosts->huf.CTable, lit);
assert(bitCost <= scaleLog);
optPtr->litFreq[lit] = bitCost ? 1 << (scaleLog-bitCost) : 1 /*minimum to calculate cost*/;
optPtr->litSum += optPtr->litFreq[lit];
@@ -174,14 +194,19 @@ ZSTD_rescaleFreqs(optState_t* const optPtr,
if (compressedLiterals) {
unsigned lit = MaxLit;
HIST_count_simple(optPtr->litFreq, &lit, src, srcSize); /* use raw first block to init statistics */
- optPtr->litSum = ZSTD_downscaleStat(optPtr->litFreq, MaxLit, 1);
+ optPtr->litSum = ZSTD_downscaleStats(optPtr->litFreq, MaxLit, 8);
}
- { unsigned ll;
- for (ll=0; ll<=MaxLL; ll++)
- optPtr->litLengthFreq[ll] = 1;
+ { unsigned const baseLLfreqs[MaxLL+1] = {
+ 4, 2, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1
+ };
+ ZSTD_memcpy(optPtr->litLengthFreq, baseLLfreqs, sizeof(baseLLfreqs));
+ optPtr->litLengthSum = sum_u32(baseLLfreqs, MaxLL+1);
}
- optPtr->litLengthSum = MaxLL+1;
{ unsigned ml;
for (ml=0; ml<=MaxML; ml++)
@@ -189,21 +214,26 @@ ZSTD_rescaleFreqs(optState_t* const optPtr,
}
optPtr->matchLengthSum = MaxML+1;
- { unsigned of;
- for (of=0; of<=MaxOff; of++)
- optPtr->offCodeFreq[of] = 1;
+ { unsigned const baseOFCfreqs[MaxOff+1] = {
+ 6, 2, 1, 1, 2, 3, 4, 4,
+ 4, 3, 2, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1
+ };
+ ZSTD_memcpy(optPtr->offCodeFreq, baseOFCfreqs, sizeof(baseOFCfreqs));
+ optPtr->offCodeSum = sum_u32(baseOFCfreqs, MaxOff+1);
}
- optPtr->offCodeSum = MaxOff+1;
+
}
} else { /* new block : re-use previous statistics, scaled down */
if (compressedLiterals)
- optPtr->litSum = ZSTD_downscaleStat(optPtr->litFreq, MaxLit, 1);
- optPtr->litLengthSum = ZSTD_downscaleStat(optPtr->litLengthFreq, MaxLL, 0);
- optPtr->matchLengthSum = ZSTD_downscaleStat(optPtr->matchLengthFreq, MaxML, 0);
- optPtr->offCodeSum = ZSTD_downscaleStat(optPtr->offCodeFreq, MaxOff, 0);
+ optPtr->litSum = ZSTD_scaleStats(optPtr->litFreq, MaxLit, 12);
+ optPtr->litLengthSum = ZSTD_scaleStats(optPtr->litLengthFreq, MaxLL, 11);
+ optPtr->matchLengthSum = ZSTD_scaleStats(optPtr->matchLengthFreq, MaxML, 11);
+ optPtr->offCodeSum = ZSTD_scaleStats(optPtr->offCodeFreq, MaxOff, 11);
}
ZSTD_setBasePrices(optPtr, optLevel);
@@ -239,7 +269,16 @@ static U32 ZSTD_rawLiteralsCost(const BYTE* const literals, U32 const litLength,
* cost of literalLength symbol */
static U32 ZSTD_litLengthPrice(U32 const litLength, const optState_t* const optPtr, int optLevel)
{
- if (optPtr->priceType == zop_predef) return WEIGHT(litLength, optLevel);
+ assert(litLength <= ZSTD_BLOCKSIZE_MAX);
+ if (optPtr->priceType == zop_predef)
+ return WEIGHT(litLength, optLevel);
+ /* We can't compute the litLength price for sizes >= ZSTD_BLOCKSIZE_MAX
+ * because it isn't representable in the zstd format. So instead just
+ * call it 1 bit more than ZSTD_BLOCKSIZE_MAX - 1. In this case the block
+ * would be all literals.
+ */
+ if (litLength == ZSTD_BLOCKSIZE_MAX)
+ return BITCOST_MULTIPLIER + ZSTD_litLengthPrice(ZSTD_BLOCKSIZE_MAX - 1, optPtr, optLevel);
/* dynamic statistics */
{ U32 const llCode = ZSTD_LLcode(litLength);
@@ -252,15 +291,17 @@ static U32 ZSTD_litLengthPrice(U32 const litLength, const optState_t* const optP
/* ZSTD_getMatchPrice() :
* Provides the cost of the match part (offset + matchLength) of a sequence
* Must be combined with ZSTD_fullLiteralsCost() to get the full cost of a sequence.
- * optLevel: when <2, favors small offset for decompression speed (improved cache efficiency) */
+ * @offcode : expects a scale where 0,1,2 are repcodes 1-3, and 3+ are real_offsets+2
+ * @optLevel: when <2, favors small offset for decompression speed (improved cache efficiency)
+ */
FORCE_INLINE_TEMPLATE U32
-ZSTD_getMatchPrice(U32 const offset,
+ZSTD_getMatchPrice(U32 const offcode,
U32 const matchLength,
const optState_t* const optPtr,
int const optLevel)
{
U32 price;
- U32 const offCode = ZSTD_highbit32(offset+1);
+ U32 const offCode = ZSTD_highbit32(STORED_TO_OFFBASE(offcode));
U32 const mlBase = matchLength - MINMATCH;
assert(matchLength >= MINMATCH);
@@ -303,8 +344,8 @@ static void ZSTD_updateStats(optState_t* const optPtr,
optPtr->litLengthSum++;
}
- /* match offset code (0-2=>repCode; 3+=>offset+2) */
- { U32 const offCode = ZSTD_highbit32(offsetCode+1);
+ /* offset code : expected to follow storeSeq() numeric representation */
+ { U32 const offCode = ZSTD_highbit32(STORED_TO_OFFBASE(offsetCode));
assert(offCode <= MaxOff);
optPtr->offCodeFreq[offCode]++;
optPtr->offCodeSum++;
@@ -338,7 +379,7 @@ MEM_STATIC U32 ZSTD_readMINMATCH(const void* memPtr, U32 length)
/* Update hashTable3 up to ip (excluded)
Assumption : always within prefix (i.e. not within extDict) */
-static U32 ZSTD_insertAndFindFirstIndexHash3 (ZSTD_matchState_t* ms,
+static U32 ZSTD_insertAndFindFirstIndexHash3 (const ZSTD_matchState_t* ms,
U32* nextToUpdate3,
const BYTE* const ip)
{
@@ -364,11 +405,13 @@ static U32 ZSTD_insertAndFindFirstIndexHash3 (ZSTD_matchState_t* ms,
* Binary Tree search
***************************************/
/** ZSTD_insertBt1() : add one or multiple positions to tree.
- * ip : assumed <= iend-8 .
+ * @param ip assumed <= iend-8 .
+ * @param target The target of ZSTD_updateTree_internal() - we are filling to this position
* @return : nb of positions added */
static U32 ZSTD_insertBt1(
- ZSTD_matchState_t* ms,
+ const ZSTD_matchState_t* ms,
const BYTE* const ip, const BYTE* const iend,
+ U32 const target,
U32 const mls, const int extDict)
{
const ZSTD_compressionParameters* const cParams = &ms->cParams;
@@ -391,7 +434,10 @@ static U32 ZSTD_insertBt1(
U32* smallerPtr = bt + 2*(curr&btMask);
U32* largerPtr = smallerPtr + 1;
U32 dummy32; /* to be nullified at the end */
- U32 const windowLow = ms->window.lowLimit;
+ /* windowLow is based on target because
+ * we only need positions that will be in the window at the end of the tree update.
+ */
+ U32 const windowLow = ZSTD_getLowestMatchIndex(ms, target, cParams->windowLog);
U32 matchEndIdx = curr+8+1;
size_t bestLength = 8;
U32 nbCompares = 1U << cParams->searchLog;
@@ -404,11 +450,12 @@ static U32 ZSTD_insertBt1(
DEBUGLOG(8, "ZSTD_insertBt1 (%u)", curr);
+ assert(curr <= target);
assert(ip <= iend-8); /* required for h calculation */
hashTable[h] = curr; /* Update Hash Table */
assert(windowLow > 0);
- while (nbCompares-- && (matchIndex >= windowLow)) {
+ for (; nbCompares && (matchIndex >= windowLow); --nbCompares) {
U32* const nextPtr = bt + 2*(matchIndex & btMask);
size_t matchLength = MIN(commonLengthSmaller, commonLengthLarger); /* guaranteed minimum nb of common bytes */
assert(matchIndex < curr);
@@ -492,7 +539,7 @@ void ZSTD_updateTree_internal(
idx, target, dictMode);
while(idx < target) {
- U32 const forward = ZSTD_insertBt1(ms, base+idx, iend, mls, dictMode == ZSTD_extDict);
+ U32 const forward = ZSTD_insertBt1(ms, base+idx, iend, target, mls, dictMode == ZSTD_extDict);
assert(idx < (U32)(idx + forward));
idx += forward;
}
@@ -597,7 +644,7 @@ U32 ZSTD_insertBtAndGetAllMatches (
DEBUGLOG(8, "found repCode %u (ll0:%u, offset:%u) of length %u",
repCode, ll0, repOffset, repLen);
bestLength = repLen;
- matches[mnum].off = repCode - ll0;
+ matches[mnum].off = STORE_REPCODE(repCode - ll0 + 1); /* expect value between 1 and 3 */
matches[mnum].len = (U32)repLen;
mnum++;
if ( (repLen > sufficient_len)
@@ -626,7 +673,7 @@ U32 ZSTD_insertBtAndGetAllMatches (
bestLength = mlen;
assert(curr > matchIndex3);
assert(mnum==0); /* no prior solution */
- matches[0].off = (curr - matchIndex3) + ZSTD_REP_MOVE;
+ matches[0].off = STORE_OFFSET(curr - matchIndex3);
matches[0].len = (U32)mlen;
mnum = 1;
if ( (mlen > sufficient_len) |
@@ -635,11 +682,11 @@ U32 ZSTD_insertBtAndGetAllMatches (
return 1;
} } }
/* no dictMatchState lookup: dicts don't have a populated HC3 table */
- }
+ } /* if (mls == 3) */
hashTable[h] = curr; /* Update Hash Table */
- while (nbCompares-- && (matchIndex >= matchLow)) {
+ for (; nbCompares && (matchIndex >= matchLow); --nbCompares) {
U32* const nextPtr = bt + 2*(matchIndex & btMask);
const BYTE* match;
size_t matchLength = MIN(commonLengthSmaller, commonLengthLarger); /* guaranteed minimum nb of common bytes */
@@ -660,20 +707,19 @@ U32 ZSTD_insertBtAndGetAllMatches (
if (matchLength > bestLength) {
DEBUGLOG(8, "found match of length %u at distance %u (offCode=%u)",
- (U32)matchLength, curr - matchIndex, curr - matchIndex + ZSTD_REP_MOVE);
+ (U32)matchLength, curr - matchIndex, STORE_OFFSET(curr - matchIndex));
assert(matchEndIdx > matchIndex);
if (matchLength > matchEndIdx - matchIndex)
matchEndIdx = matchIndex + (U32)matchLength;
bestLength = matchLength;
- matches[mnum].off = (curr - matchIndex) + ZSTD_REP_MOVE;
+ matches[mnum].off = STORE_OFFSET(curr - matchIndex);
matches[mnum].len = (U32)matchLength;
mnum++;
if ( (matchLength > ZSTD_OPT_NUM)
| (ip+matchLength == iLimit) /* equal : no way to know if inf or sup */) {
if (dictMode == ZSTD_dictMatchState) nbCompares = 0; /* break should also skip searching dms */
break; /* drop, to preserve bt consistency (miss a little bit of compression) */
- }
- }
+ } }
if (match[matchLength] < ip[matchLength]) {
/* match smaller than current */
@@ -692,12 +738,13 @@ U32 ZSTD_insertBtAndGetAllMatches (
*smallerPtr = *largerPtr = 0;
+ assert(nbCompares <= (1U << ZSTD_SEARCHLOG_MAX)); /* Check we haven't underflowed. */
if (dictMode == ZSTD_dictMatchState && nbCompares) {
size_t const dmsH = ZSTD_hashPtr(ip, dmsHashLog, mls);
U32 dictMatchIndex = dms->hashTable[dmsH];
const U32* const dmsBt = dms->chainTable;
commonLengthSmaller = commonLengthLarger = 0;
- while (nbCompares-- && (dictMatchIndex > dmsLowLimit)) {
+ for (; nbCompares && (dictMatchIndex > dmsLowLimit); --nbCompares) {
const U32* const nextPtr = dmsBt + 2*(dictMatchIndex & dmsBtMask);
size_t matchLength = MIN(commonLengthSmaller, commonLengthLarger); /* guaranteed minimum nb of common bytes */
const BYTE* match = dmsBase + dictMatchIndex;
@@ -708,18 +755,17 @@ U32 ZSTD_insertBtAndGetAllMatches (
if (matchLength > bestLength) {
matchIndex = dictMatchIndex + dmsIndexDelta;
DEBUGLOG(8, "found dms match of length %u at distance %u (offCode=%u)",
- (U32)matchLength, curr - matchIndex, curr - matchIndex + ZSTD_REP_MOVE);
+ (U32)matchLength, curr - matchIndex, STORE_OFFSET(curr - matchIndex));
if (matchLength > matchEndIdx - matchIndex)
matchEndIdx = matchIndex + (U32)matchLength;
bestLength = matchLength;
- matches[mnum].off = (curr - matchIndex) + ZSTD_REP_MOVE;
+ matches[mnum].off = STORE_OFFSET(curr - matchIndex);
matches[mnum].len = (U32)matchLength;
mnum++;
if ( (matchLength > ZSTD_OPT_NUM)
| (ip+matchLength == iLimit) /* equal : no way to know if inf or sup */) {
break; /* drop, to guarantee consistency (miss a little bit of compression) */
- }
- }
+ } }
if (dictMatchIndex <= dmsBtLow) { break; } /* beyond tree size, stop the search */
if (match[matchLength] < ip[matchLength]) {
@@ -729,39 +775,91 @@ U32 ZSTD_insertBtAndGetAllMatches (
/* match is larger than current */
commonLengthLarger = matchLength;
dictMatchIndex = nextPtr[0];
- }
- }
- }
+ } } } /* if (dictMode == ZSTD_dictMatchState) */
assert(matchEndIdx > curr+8);
ms->nextToUpdate = matchEndIdx - 8; /* skip repetitive patterns */
return mnum;
}
-
-FORCE_INLINE_TEMPLATE U32 ZSTD_BtGetAllMatches (
- ZSTD_match_t* matches, /* store result (match found, increasing size) in this table */
- ZSTD_matchState_t* ms,
- U32* nextToUpdate3,
- const BYTE* ip, const BYTE* const iHighLimit, const ZSTD_dictMode_e dictMode,
- const U32 rep[ZSTD_REP_NUM],
- U32 const ll0,
- U32 const lengthToBeat)
+typedef U32 (*ZSTD_getAllMatchesFn)(
+ ZSTD_match_t*,
+ ZSTD_matchState_t*,
+ U32*,
+ const BYTE*,
+ const BYTE*,
+ const U32 rep[ZSTD_REP_NUM],
+ U32 const ll0,
+ U32 const lengthToBeat);
+
+FORCE_INLINE_TEMPLATE U32 ZSTD_btGetAllMatches_internal(
+ ZSTD_match_t* matches,
+ ZSTD_matchState_t* ms,
+ U32* nextToUpdate3,
+ const BYTE* ip,
+ const BYTE* const iHighLimit,
+ const U32 rep[ZSTD_REP_NUM],
+ U32 const ll0,
+ U32 const lengthToBeat,
+ const ZSTD_dictMode_e dictMode,
+ const U32 mls)
{
- const ZSTD_compressionParameters* const cParams = &ms->cParams;
- U32 const matchLengthSearch = cParams->minMatch;
- DEBUGLOG(8, "ZSTD_BtGetAllMatches");
- if (ip < ms->window.base + ms->nextToUpdate) return 0; /* skipped area */
- ZSTD_updateTree_internal(ms, ip, iHighLimit, matchLengthSearch, dictMode);
- switch(matchLengthSearch)
- {
- case 3 : return ZSTD_insertBtAndGetAllMatches(matches, ms, nextToUpdate3, ip, iHighLimit, dictMode, rep, ll0, lengthToBeat, 3);
- default :
- case 4 : return ZSTD_insertBtAndGetAllMatches(matches, ms, nextToUpdate3, ip, iHighLimit, dictMode, rep, ll0, lengthToBeat, 4);
- case 5 : return ZSTD_insertBtAndGetAllMatches(matches, ms, nextToUpdate3, ip, iHighLimit, dictMode, rep, ll0, lengthToBeat, 5);
- case 7 :
- case 6 : return ZSTD_insertBtAndGetAllMatches(matches, ms, nextToUpdate3, ip, iHighLimit, dictMode, rep, ll0, lengthToBeat, 6);
+ assert(BOUNDED(3, ms->cParams.minMatch, 6) == mls);
+ DEBUGLOG(8, "ZSTD_BtGetAllMatches(dictMode=%d, mls=%u)", (int)dictMode, mls);
+ if (ip < ms->window.base + ms->nextToUpdate)
+ return 0; /* skipped area */
+ ZSTD_updateTree_internal(ms, ip, iHighLimit, mls, dictMode);
+ return ZSTD_insertBtAndGetAllMatches(matches, ms, nextToUpdate3, ip, iHighLimit, dictMode, rep, ll0, lengthToBeat, mls);
+}
+
+#define ZSTD_BT_GET_ALL_MATCHES_FN(dictMode, mls) ZSTD_btGetAllMatches_##dictMode##_##mls
+
+#define GEN_ZSTD_BT_GET_ALL_MATCHES_(dictMode, mls) \
+ static U32 ZSTD_BT_GET_ALL_MATCHES_FN(dictMode, mls)( \
+ ZSTD_match_t* matches, \
+ ZSTD_matchState_t* ms, \
+ U32* nextToUpdate3, \
+ const BYTE* ip, \
+ const BYTE* const iHighLimit, \
+ const U32 rep[ZSTD_REP_NUM], \
+ U32 const ll0, \
+ U32 const lengthToBeat) \
+ { \
+ return ZSTD_btGetAllMatches_internal( \
+ matches, ms, nextToUpdate3, ip, iHighLimit, \
+ rep, ll0, lengthToBeat, ZSTD_##dictMode, mls); \
+ }
+
+#define GEN_ZSTD_BT_GET_ALL_MATCHES(dictMode) \
+ GEN_ZSTD_BT_GET_ALL_MATCHES_(dictMode, 3) \
+ GEN_ZSTD_BT_GET_ALL_MATCHES_(dictMode, 4) \
+ GEN_ZSTD_BT_GET_ALL_MATCHES_(dictMode, 5) \
+ GEN_ZSTD_BT_GET_ALL_MATCHES_(dictMode, 6)
+
+GEN_ZSTD_BT_GET_ALL_MATCHES(noDict)
+GEN_ZSTD_BT_GET_ALL_MATCHES(extDict)
+GEN_ZSTD_BT_GET_ALL_MATCHES(dictMatchState)
+
+#define ZSTD_BT_GET_ALL_MATCHES_ARRAY(dictMode) \
+ { \
+ ZSTD_BT_GET_ALL_MATCHES_FN(dictMode, 3), \
+ ZSTD_BT_GET_ALL_MATCHES_FN(dictMode, 4), \
+ ZSTD_BT_GET_ALL_MATCHES_FN(dictMode, 5), \
+ ZSTD_BT_GET_ALL_MATCHES_FN(dictMode, 6) \
}
+
+static ZSTD_getAllMatchesFn
+ZSTD_selectBtGetAllMatches(ZSTD_matchState_t const* ms, ZSTD_dictMode_e const dictMode)
+{
+ ZSTD_getAllMatchesFn const getAllMatchesFns[3][4] = {
+ ZSTD_BT_GET_ALL_MATCHES_ARRAY(noDict),
+ ZSTD_BT_GET_ALL_MATCHES_ARRAY(extDict),
+ ZSTD_BT_GET_ALL_MATCHES_ARRAY(dictMatchState)
+ };
+ U32 const mls = BOUNDED(3, ms->cParams.minMatch, 6);
+ assert((U32)dictMode < 3);
+ assert(mls - 3 < 4);
+ return getAllMatchesFns[(int)dictMode][mls - 3];
}
/*************************
@@ -770,16 +868,18 @@ FORCE_INLINE_TEMPLATE U32 ZSTD_BtGetAllMatches (
/* Struct containing info needed to make decision about ldm inclusion */
typedef struct {
- rawSeqStore_t seqStore; /* External match candidates store for this block */
- U32 startPosInBlock; /* Start position of the current match candidate */
- U32 endPosInBlock; /* End position of the current match candidate */
- U32 offset; /* Offset of the match candidate */
+ rawSeqStore_t seqStore; /* External match candidates store for this block */
+ U32 startPosInBlock; /* Start position of the current match candidate */
+ U32 endPosInBlock; /* End position of the current match candidate */
+ U32 offset; /* Offset of the match candidate */
} ZSTD_optLdm_t;
/* ZSTD_optLdm_skipRawSeqStoreBytes():
- * Moves forward in rawSeqStore by nbBytes, which will update the fields 'pos' and 'posInSequence'.
+ * Moves forward in @rawSeqStore by @nbBytes,
+ * which will update the fields 'pos' and 'posInSequence'.
*/
-static void ZSTD_optLdm_skipRawSeqStoreBytes(rawSeqStore_t* rawSeqStore, size_t nbBytes) {
+static void ZSTD_optLdm_skipRawSeqStoreBytes(rawSeqStore_t* rawSeqStore, size_t nbBytes)
+{
U32 currPos = (U32)(rawSeqStore->posInSequence + nbBytes);
while (currPos && rawSeqStore->pos < rawSeqStore->size) {
rawSeq currSeq = rawSeqStore->seq[rawSeqStore->pos];
@@ -800,8 +900,10 @@ static void ZSTD_optLdm_skipRawSeqStoreBytes(rawSeqStore_t* rawSeqStore, size_t
* Calculates the beginning and end of the next match in the current block.
* Updates 'pos' and 'posInSequence' of the ldmSeqStore.
*/
-static void ZSTD_opt_getNextMatchAndUpdateSeqStore(ZSTD_optLdm_t* optLdm, U32 currPosInBlock,
- U32 blockBytesRemaining) {
+static void
+ZSTD_opt_getNextMatchAndUpdateSeqStore(ZSTD_optLdm_t* optLdm, U32 currPosInBlock,
+ U32 blockBytesRemaining)
+{
rawSeq currSeq;
U32 currBlockEndPos;
U32 literalsBytesRemaining;
@@ -813,8 +915,8 @@ static void ZSTD_opt_getNextMatchAndUpdateSeqStore(ZSTD_optLdm_t* optLdm, U32 cu
optLdm->endPosInBlock = UINT_MAX;
return;
}
- /* Calculate appropriate bytes left in matchLength and litLength after adjusting
- based on ldmSeqStore->posInSequence */
+ /* Calculate appropriate bytes left in matchLength and litLength
+ * after adjusting based on ldmSeqStore->posInSequence */
currSeq = optLdm->seqStore.seq[optLdm->seqStore.pos];
assert(optLdm->seqStore.posInSequence <= currSeq.litLength + currSeq.matchLength);
currBlockEndPos = currPosInBlock + blockBytesRemaining;
@@ -850,15 +952,16 @@ static void ZSTD_opt_getNextMatchAndUpdateSeqStore(ZSTD_optLdm_t* optLdm, U32 cu
}
/* ZSTD_optLdm_maybeAddMatch():
- * Adds a match if it's long enough, based on it's 'matchStartPosInBlock'
- * and 'matchEndPosInBlock', into 'matches'. Maintains the correct ordering of 'matches'
+ * Adds a match if it's long enough,
+ * based on it's 'matchStartPosInBlock' and 'matchEndPosInBlock',
+ * into 'matches'. Maintains the correct ordering of 'matches'.
*/
static void ZSTD_optLdm_maybeAddMatch(ZSTD_match_t* matches, U32* nbMatches,
- ZSTD_optLdm_t* optLdm, U32 currPosInBlock) {
- U32 posDiff = currPosInBlock - optLdm->startPosInBlock;
+ const ZSTD_optLdm_t* optLdm, U32 currPosInBlock)
+{
+ U32 const posDiff = currPosInBlock - optLdm->startPosInBlock;
/* Note: ZSTD_match_t actually contains offCode and matchLength (before subtracting MINMATCH) */
- U32 candidateMatchLength = optLdm->endPosInBlock - optLdm->startPosInBlock - posDiff;
- U32 candidateOffCode = optLdm->offset + ZSTD_REP_MOVE;
+ U32 const candidateMatchLength = optLdm->endPosInBlock - optLdm->startPosInBlock - posDiff;
/* Ensure that current block position is not outside of the match */
if (currPosInBlock < optLdm->startPosInBlock
@@ -868,6 +971,7 @@ static void ZSTD_optLdm_maybeAddMatch(ZSTD_match_t* matches, U32* nbMatches,
}
if (*nbMatches == 0 || ((candidateMatchLength > matches[*nbMatches-1].len) && *nbMatches < ZSTD_OPT_NUM)) {
+ U32 const candidateOffCode = STORE_OFFSET(optLdm->offset);
DEBUGLOG(6, "ZSTD_optLdm_maybeAddMatch(): Adding ldm candidate match (offCode: %u matchLength %u) at block position=%u",
candidateOffCode, candidateMatchLength, currPosInBlock);
matches[*nbMatches].len = candidateMatchLength;
@@ -879,8 +983,11 @@ static void ZSTD_optLdm_maybeAddMatch(ZSTD_match_t* matches, U32* nbMatches,
/* ZSTD_optLdm_processMatchCandidate():
* Wrapper function to update ldm seq store and call ldm functions as necessary.
*/
-static void ZSTD_optLdm_processMatchCandidate(ZSTD_optLdm_t* optLdm, ZSTD_match_t* matches, U32* nbMatches,
- U32 currPosInBlock, U32 remainingBytes) {
+static void
+ZSTD_optLdm_processMatchCandidate(ZSTD_optLdm_t* optLdm,
+ ZSTD_match_t* matches, U32* nbMatches,
+ U32 currPosInBlock, U32 remainingBytes)
+{
if (optLdm->seqStore.size == 0 || optLdm->seqStore.pos >= optLdm->seqStore.size) {
return;
}
@@ -891,19 +998,19 @@ static void ZSTD_optLdm_processMatchCandidate(ZSTD_optLdm_t* optLdm, ZSTD_match_
* at the end of a match from the ldm seq store, and will often be some bytes
* over beyond matchEndPosInBlock. As such, we need to correct for these "overshoots"
*/
- U32 posOvershoot = currPosInBlock - optLdm->endPosInBlock;
+ U32 const posOvershoot = currPosInBlock - optLdm->endPosInBlock;
ZSTD_optLdm_skipRawSeqStoreBytes(&optLdm->seqStore, posOvershoot);
- }
+ }
ZSTD_opt_getNextMatchAndUpdateSeqStore(optLdm, currPosInBlock, remainingBytes);
}
ZSTD_optLdm_maybeAddMatch(matches, nbMatches, optLdm, currPosInBlock);
}
+
/*-*******************************
* Optimal parser
*********************************/
-
static U32 ZSTD_totalLen(ZSTD_optimal_t sol)
{
return sol.litlen + sol.mlen;
@@ -944,6 +1051,8 @@ ZSTD_compressBlock_opt_generic(ZSTD_matchState_t* ms,
const BYTE* const prefixStart = base + ms->window.dictLimit;
const ZSTD_compressionParameters* const cParams = &ms->cParams;
+ ZSTD_getAllMatchesFn getAllMatches = ZSTD_selectBtGetAllMatches(ms, dictMode);
+
U32 const sufficient_len = MIN(cParams->targetLength, ZSTD_OPT_NUM -1);
U32 const minMatch = (cParams->minMatch == 3) ? 3 : 4;
U32 nextToUpdate3 = ms->nextToUpdate;
@@ -971,7 +1080,7 @@ ZSTD_compressBlock_opt_generic(ZSTD_matchState_t* ms,
/* find first match */
{ U32 const litlen = (U32)(ip - anchor);
U32 const ll0 = !litlen;
- U32 nbMatches = ZSTD_BtGetAllMatches(matches, ms, &nextToUpdate3, ip, iend, dictMode, rep, ll0, minMatch);
+ U32 nbMatches = getAllMatches(matches, ms, &nextToUpdate3, ip, iend, rep, ll0, minMatch);
ZSTD_optLdm_processMatchCandidate(&optLdm, matches, &nbMatches,
(U32)(ip-istart), (U32)(iend - ip));
if (!nbMatches) { ip++; continue; }
@@ -985,18 +1094,18 @@ ZSTD_compressBlock_opt_generic(ZSTD_matchState_t* ms,
* in every price. We include the literal length to avoid negative
* prices when we subtract the previous literal length.
*/
- opt[0].price = ZSTD_litLengthPrice(litlen, optStatePtr, optLevel);
+ opt[0].price = (int)ZSTD_litLengthPrice(litlen, optStatePtr, optLevel);
/* large match -> immediate encoding */
{ U32 const maxML = matches[nbMatches-1].len;
- U32 const maxOffset = matches[nbMatches-1].off;
+ U32 const maxOffcode = matches[nbMatches-1].off;
DEBUGLOG(6, "found %u matches of maxLength=%u and maxOffCode=%u at cPos=%u => start new series",
- nbMatches, maxML, maxOffset, (U32)(ip-prefixStart));
+ nbMatches, maxML, maxOffcode, (U32)(ip-prefixStart));
if (maxML > sufficient_len) {
lastSequence.litlen = litlen;
lastSequence.mlen = maxML;
- lastSequence.off = maxOffset;
+ lastSequence.off = maxOffcode;
DEBUGLOG(6, "large match (%u>%u), immediate encoding",
maxML, sufficient_len);
cur = 0;
@@ -1005,24 +1114,25 @@ ZSTD_compressBlock_opt_generic(ZSTD_matchState_t* ms,
} }
/* set prices for first matches starting position == 0 */
- { U32 const literalsPrice = opt[0].price + ZSTD_litLengthPrice(0, optStatePtr, optLevel);
+ assert(opt[0].price >= 0);
+ { U32 const literalsPrice = (U32)opt[0].price + ZSTD_litLengthPrice(0, optStatePtr, optLevel);
U32 pos;
U32 matchNb;
for (pos = 1; pos < minMatch; pos++) {
opt[pos].price = ZSTD_MAX_PRICE; /* mlen, litlen and price will be fixed during forward scanning */
}
for (matchNb = 0; matchNb < nbMatches; matchNb++) {
- U32 const offset = matches[matchNb].off;
+ U32 const offcode = matches[matchNb].off;
U32 const end = matches[matchNb].len;
for ( ; pos <= end ; pos++ ) {
- U32 const matchPrice = ZSTD_getMatchPrice(offset, pos, optStatePtr, optLevel);
+ U32 const matchPrice = ZSTD_getMatchPrice(offcode, pos, optStatePtr, optLevel);
U32 const sequencePrice = literalsPrice + matchPrice;
DEBUGLOG(7, "rPos:%u => set initial price : %.2f",
pos, ZSTD_fCost(sequencePrice));
opt[pos].mlen = pos;
- opt[pos].off = offset;
+ opt[pos].off = offcode;
opt[pos].litlen = litlen;
- opt[pos].price = sequencePrice;
+ opt[pos].price = (int)sequencePrice;
} }
last_pos = pos-1;
}
@@ -1037,9 +1147,9 @@ ZSTD_compressBlock_opt_generic(ZSTD_matchState_t* ms,
/* Fix current position with one literal if cheaper */
{ U32 const litlen = (opt[cur-1].mlen == 0) ? opt[cur-1].litlen + 1 : 1;
int const price = opt[cur-1].price
- + ZSTD_rawLiteralsCost(ip+cur-1, 1, optStatePtr, optLevel)
- + ZSTD_litLengthPrice(litlen, optStatePtr, optLevel)
- - ZSTD_litLengthPrice(litlen-1, optStatePtr, optLevel);
+ + (int)ZSTD_rawLiteralsCost(ip+cur-1, 1, optStatePtr, optLevel)
+ + (int)ZSTD_litLengthPrice(litlen, optStatePtr, optLevel)
+ - (int)ZSTD_litLengthPrice(litlen-1, optStatePtr, optLevel);
assert(price < 1000000000); /* overflow check */
if (price <= opt[cur].price) {
DEBUGLOG(7, "cPos:%zi==rPos:%u : better price (%.2f<=%.2f) using literal (ll==%u) (hist:%u,%u,%u)",
@@ -1065,7 +1175,7 @@ ZSTD_compressBlock_opt_generic(ZSTD_matchState_t* ms,
assert(cur >= opt[cur].mlen);
if (opt[cur].mlen != 0) {
U32 const prev = cur - opt[cur].mlen;
- repcodes_t newReps = ZSTD_updateRep(opt[prev].rep, opt[cur].off, opt[cur].litlen==0);
+ repcodes_t const newReps = ZSTD_newRep(opt[prev].rep, opt[cur].off, opt[cur].litlen==0);
ZSTD_memcpy(opt[cur].rep, &newReps, sizeof(repcodes_t));
} else {
ZSTD_memcpy(opt[cur].rep, opt[cur - 1].rep, sizeof(repcodes_t));
@@ -1082,11 +1192,12 @@ ZSTD_compressBlock_opt_generic(ZSTD_matchState_t* ms,
continue; /* skip unpromising positions; about ~+6% speed, -0.01 ratio */
}
+ assert(opt[cur].price >= 0);
{ U32 const ll0 = (opt[cur].mlen != 0);
U32 const litlen = (opt[cur].mlen == 0) ? opt[cur].litlen : 0;
- U32 const previousPrice = opt[cur].price;
+ U32 const previousPrice = (U32)opt[cur].price;
U32 const basePrice = previousPrice + ZSTD_litLengthPrice(0, optStatePtr, optLevel);
- U32 nbMatches = ZSTD_BtGetAllMatches(matches, ms, &nextToUpdate3, inr, iend, dictMode, opt[cur].rep, ll0, minMatch);
+ U32 nbMatches = getAllMatches(matches, ms, &nextToUpdate3, inr, iend, opt[cur].rep, ll0, minMatch);
U32 matchNb;
ZSTD_optLdm_processMatchCandidate(&optLdm, matches, &nbMatches,
@@ -1124,7 +1235,7 @@ ZSTD_compressBlock_opt_generic(ZSTD_matchState_t* ms,
for (mlen = lastML; mlen >= startML; mlen--) { /* scan downward */
U32 const pos = cur + mlen;
- int const price = basePrice + ZSTD_getMatchPrice(offset, mlen, optStatePtr, optLevel);
+ int const price = (int)basePrice + (int)ZSTD_getMatchPrice(offset, mlen, optStatePtr, optLevel);
if ((pos > last_pos) || (price < opt[pos].price)) {
DEBUGLOG(7, "rPos:%u (ml=%2u) => new better price (%.2f<%.2f)",
@@ -1154,7 +1265,7 @@ _shortestPath: /* cur, last_pos, best_mlen, best_off have to be set */
* update them while traversing the sequences.
*/
if (lastSequence.mlen != 0) {
- repcodes_t reps = ZSTD_updateRep(opt[cur].rep, lastSequence.off, lastSequence.litlen==0);
+ repcodes_t const reps = ZSTD_newRep(opt[cur].rep, lastSequence.off, lastSequence.litlen==0);
ZSTD_memcpy(rep, &reps, sizeof(reps));
} else {
ZSTD_memcpy(rep, opt[cur].rep, sizeof(repcodes_t));
@@ -1198,7 +1309,7 @@ _shortestPath: /* cur, last_pos, best_mlen, best_off have to be set */
assert(anchor + llen <= iend);
ZSTD_updateStats(optStatePtr, llen, anchor, offCode, mlen);
- ZSTD_storeSeq(seqStore, llen, anchor, iend, offCode, mlen-MINMATCH);
+ ZSTD_storeSeq(seqStore, llen, anchor, iend, offCode, mlen);
anchor += advance;
ip = anchor;
} }
@@ -1210,38 +1321,30 @@ _shortestPath: /* cur, last_pos, best_mlen, best_off have to be set */
return (size_t)(iend - anchor);
}
+static size_t ZSTD_compressBlock_opt0(
+ ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
+ const void* src, size_t srcSize, const ZSTD_dictMode_e dictMode)
+{
+ return ZSTD_compressBlock_opt_generic(ms, seqStore, rep, src, srcSize, 0 /* optLevel */, dictMode);
+}
+
+static size_t ZSTD_compressBlock_opt2(
+ ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
+ const void* src, size_t srcSize, const ZSTD_dictMode_e dictMode)
+{
+ return ZSTD_compressBlock_opt_generic(ms, seqStore, rep, src, srcSize, 2 /* optLevel */, dictMode);
+}
size_t ZSTD_compressBlock_btopt(
ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
const void* src, size_t srcSize)
{
DEBUGLOG(5, "ZSTD_compressBlock_btopt");
- return ZSTD_compressBlock_opt_generic(ms, seqStore, rep, src, srcSize, 0 /*optLevel*/, ZSTD_noDict);
+ return ZSTD_compressBlock_opt0(ms, seqStore, rep, src, srcSize, ZSTD_noDict);
}
-/* used in 2-pass strategy */
-static U32 ZSTD_upscaleStat(unsigned* table, U32 lastEltIndex, int bonus)
-{
- U32 s, sum=0;
- assert(ZSTD_FREQ_DIV+bonus >= 0);
- for (s=0; s<lastEltIndex+1; s++) {
- table[s] <<= ZSTD_FREQ_DIV+bonus;
- table[s]--;
- sum += table[s];
- }
- return sum;
-}
-/* used in 2-pass strategy */
-MEM_STATIC void ZSTD_upscaleStats(optState_t* optPtr)
-{
- if (ZSTD_compressedLiterals(optPtr))
- optPtr->litSum = ZSTD_upscaleStat(optPtr->litFreq, MaxLit, 0);
- optPtr->litLengthSum = ZSTD_upscaleStat(optPtr->litLengthFreq, MaxLL, 0);
- optPtr->matchLengthSum = ZSTD_upscaleStat(optPtr->matchLengthFreq, MaxML, 0);
- optPtr->offCodeSum = ZSTD_upscaleStat(optPtr->offCodeFreq, MaxOff, 0);
-}
/* ZSTD_initStats_ultra():
* make a first compression pass, just to seed stats with more accurate starting values.
@@ -1263,7 +1366,7 @@ ZSTD_initStats_ultra(ZSTD_matchState_t* ms,
assert(ms->window.dictLimit == ms->window.lowLimit); /* no dictionary */
assert(ms->window.dictLimit - ms->nextToUpdate <= 1); /* no prefix (note: intentional overflow, defined as 2-complement) */
- ZSTD_compressBlock_opt_generic(ms, seqStore, tmpRep, src, srcSize, 2 /*optLevel*/, ZSTD_noDict); /* generate stats into ms->opt*/
+ ZSTD_compressBlock_opt2(ms, seqStore, tmpRep, src, srcSize, ZSTD_noDict); /* generate stats into ms->opt*/
/* invalidate first scan from history */
ZSTD_resetSeqStore(seqStore);
@@ -1272,8 +1375,6 @@ ZSTD_initStats_ultra(ZSTD_matchState_t* ms,
ms->window.lowLimit = ms->window.dictLimit;
ms->nextToUpdate = ms->window.dictLimit;
- /* re-inforce weight of collected statistics */
- ZSTD_upscaleStats(&ms->opt);
}
size_t ZSTD_compressBlock_btultra(
@@ -1281,7 +1382,7 @@ size_t ZSTD_compressBlock_btultra(
const void* src, size_t srcSize)
{
DEBUGLOG(5, "ZSTD_compressBlock_btultra (srcSize=%zu)", srcSize);
- return ZSTD_compressBlock_opt_generic(ms, seqStore, rep, src, srcSize, 2 /*optLevel*/, ZSTD_noDict);
+ return ZSTD_compressBlock_opt2(ms, seqStore, rep, src, srcSize, ZSTD_noDict);
}
size_t ZSTD_compressBlock_btultra2(
@@ -1309,35 +1410,35 @@ size_t ZSTD_compressBlock_btultra2(
ZSTD_initStats_ultra(ms, seqStore, rep, src, srcSize);
}
- return ZSTD_compressBlock_opt_generic(ms, seqStore, rep, src, srcSize, 2 /*optLevel*/, ZSTD_noDict);
+ return ZSTD_compressBlock_opt2(ms, seqStore, rep, src, srcSize, ZSTD_noDict);
}
size_t ZSTD_compressBlock_btopt_dictMatchState(
ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
const void* src, size_t srcSize)
{
- return ZSTD_compressBlock_opt_generic(ms, seqStore, rep, src, srcSize, 0 /*optLevel*/, ZSTD_dictMatchState);
+ return ZSTD_compressBlock_opt0(ms, seqStore, rep, src, srcSize, ZSTD_dictMatchState);
}
size_t ZSTD_compressBlock_btultra_dictMatchState(
ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
const void* src, size_t srcSize)
{
- return ZSTD_compressBlock_opt_generic(ms, seqStore, rep, src, srcSize, 2 /*optLevel*/, ZSTD_dictMatchState);
+ return ZSTD_compressBlock_opt2(ms, seqStore, rep, src, srcSize, ZSTD_dictMatchState);
}
size_t ZSTD_compressBlock_btopt_extDict(
ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
const void* src, size_t srcSize)
{
- return ZSTD_compressBlock_opt_generic(ms, seqStore, rep, src, srcSize, 0 /*optLevel*/, ZSTD_extDict);
+ return ZSTD_compressBlock_opt0(ms, seqStore, rep, src, srcSize, ZSTD_extDict);
}
size_t ZSTD_compressBlock_btultra_extDict(
ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
const void* src, size_t srcSize)
{
- return ZSTD_compressBlock_opt_generic(ms, seqStore, rep, src, srcSize, 2 /*optLevel*/, ZSTD_extDict);
+ return ZSTD_compressBlock_opt2(ms, seqStore, rep, src, srcSize, ZSTD_extDict);
}
/* note : no btultra2 variant for extDict nor dictMatchState,
diff --git a/thirdparty/zstd/compress/zstdmt_compress.c b/thirdparty/zstd/compress/zstdmt_compress.c
index 22aa3e1245..6bc14b035e 100644
--- a/thirdparty/zstd/compress/zstdmt_compress.c
+++ b/thirdparty/zstd/compress/zstdmt_compress.c
@@ -102,9 +102,8 @@ typedef struct ZSTDMT_bufferPool_s {
buffer_t bTable[1]; /* variable size */
} ZSTDMT_bufferPool;
-static ZSTDMT_bufferPool* ZSTDMT_createBufferPool(unsigned nbWorkers, ZSTD_customMem cMem)
+static ZSTDMT_bufferPool* ZSTDMT_createBufferPool(unsigned maxNbBuffers, ZSTD_customMem cMem)
{
- unsigned const maxNbBuffers = 2*nbWorkers + 3;
ZSTDMT_bufferPool* const bufPool = (ZSTDMT_bufferPool*)ZSTD_customCalloc(
sizeof(ZSTDMT_bufferPool) + (maxNbBuffers-1) * sizeof(buffer_t), cMem);
if (bufPool==NULL) return NULL;
@@ -160,9 +159,8 @@ static void ZSTDMT_setBufferSize(ZSTDMT_bufferPool* const bufPool, size_t const
}
-static ZSTDMT_bufferPool* ZSTDMT_expandBufferPool(ZSTDMT_bufferPool* srcBufPool, U32 nbWorkers)
+static ZSTDMT_bufferPool* ZSTDMT_expandBufferPool(ZSTDMT_bufferPool* srcBufPool, unsigned maxNbBuffers)
{
- unsigned const maxNbBuffers = 2*nbWorkers + 3;
if (srcBufPool==NULL) return NULL;
if (srcBufPool->totalBuffers >= maxNbBuffers) /* good enough */
return srcBufPool;
@@ -171,7 +169,7 @@ static ZSTDMT_bufferPool* ZSTDMT_expandBufferPool(ZSTDMT_bufferPool* srcBufPool,
size_t const bSize = srcBufPool->bufferSize; /* forward parameters */
ZSTDMT_bufferPool* newBufPool;
ZSTDMT_freeBufferPool(srcBufPool);
- newBufPool = ZSTDMT_createBufferPool(nbWorkers, cMem);
+ newBufPool = ZSTDMT_createBufferPool(maxNbBuffers, cMem);
if (newBufPool==NULL) return newBufPool;
ZSTDMT_setBufferSize(newBufPool, bSize);
return newBufPool;
@@ -263,6 +261,16 @@ static void ZSTDMT_releaseBuffer(ZSTDMT_bufferPool* bufPool, buffer_t buf)
ZSTD_customFree(buf.start, bufPool->cMem);
}
+/* We need 2 output buffers per worker since each dstBuff must be flushed after it is released.
+ * The 3 additional buffers are as follows:
+ * 1 buffer for input loading
+ * 1 buffer for "next input" when submitting current one
+ * 1 buffer stuck in queue */
+#define BUF_POOL_MAX_NB_BUFFERS(nbWorkers) 2*nbWorkers + 3
+
+/* After a worker releases its rawSeqStore, it is immediately ready for reuse.
+ * So we only need one seq buffer per worker. */
+#define SEQ_POOL_MAX_NB_BUFFERS(nbWorkers) nbWorkers
/* ===== Seq Pool Wrapper ====== */
@@ -316,7 +324,7 @@ static void ZSTDMT_setNbSeq(ZSTDMT_seqPool* const seqPool, size_t const nbSeq)
static ZSTDMT_seqPool* ZSTDMT_createSeqPool(unsigned nbWorkers, ZSTD_customMem cMem)
{
- ZSTDMT_seqPool* const seqPool = ZSTDMT_createBufferPool(nbWorkers, cMem);
+ ZSTDMT_seqPool* const seqPool = ZSTDMT_createBufferPool(SEQ_POOL_MAX_NB_BUFFERS(nbWorkers), cMem);
if (seqPool == NULL) return NULL;
ZSTDMT_setNbSeq(seqPool, 0);
return seqPool;
@@ -329,7 +337,7 @@ static void ZSTDMT_freeSeqPool(ZSTDMT_seqPool* seqPool)
static ZSTDMT_seqPool* ZSTDMT_expandSeqPool(ZSTDMT_seqPool* pool, U32 nbWorkers)
{
- return ZSTDMT_expandBufferPool(pool, nbWorkers);
+ return ZSTDMT_expandBufferPool(pool, SEQ_POOL_MAX_NB_BUFFERS(nbWorkers));
}
@@ -467,7 +475,7 @@ ZSTDMT_serialState_reset(serialState_t* serialState,
ZSTD_dictContentType_e dictContentType)
{
/* Adjust parameters */
- if (params.ldmParams.enableLdm) {
+ if (params.ldmParams.enableLdm == ZSTD_ps_enable) {
DEBUGLOG(4, "LDM window size = %u KB", (1U << params.cParams.windowLog) >> 10);
ZSTD_ldm_adjustParameters(&params.ldmParams, &params.cParams);
assert(params.ldmParams.hashLog >= params.ldmParams.bucketSizeLog);
@@ -478,7 +486,7 @@ ZSTDMT_serialState_reset(serialState_t* serialState,
serialState->nextJobID = 0;
if (params.fParams.checksumFlag)
XXH64_reset(&serialState->xxhState, 0);
- if (params.ldmParams.enableLdm) {
+ if (params.ldmParams.enableLdm == ZSTD_ps_enable) {
ZSTD_customMem cMem = params.customMem;
unsigned const hashLog = params.ldmParams.hashLog;
size_t const hashSize = ((size_t)1 << hashLog) * sizeof(ldmEntry_t);
@@ -564,7 +572,7 @@ static void ZSTDMT_serialState_update(serialState_t* serialState,
/* A future job may error and skip our job */
if (serialState->nextJobID == jobID) {
/* It is now our turn, do any processing necessary */
- if (serialState->params.ldmParams.enableLdm) {
+ if (serialState->params.ldmParams.enableLdm == ZSTD_ps_enable) {
size_t error;
assert(seqStore.seq != NULL && seqStore.pos == 0 &&
seqStore.size == 0 && seqStore.capacity > 0);
@@ -594,7 +602,7 @@ static void ZSTDMT_serialState_update(serialState_t* serialState,
if (seqStore.size > 0) {
size_t const err = ZSTD_referenceExternalSequences(
jobCCtx, seqStore.seq, seqStore.size);
- assert(serialState->params.ldmParams.enableLdm);
+ assert(serialState->params.ldmParams.enableLdm == ZSTD_ps_enable);
assert(!ZSTD_isError(err));
(void)err;
}
@@ -672,7 +680,7 @@ static void ZSTDMT_compressionJob(void* jobDescription)
if (dstBuff.start==NULL) JOB_ERROR(ERROR(memory_allocation));
job->dstBuff = dstBuff; /* this value can be read in ZSTDMT_flush, when it copies the whole job */
}
- if (jobParams.ldmParams.enableLdm && rawSeqStore.seq == NULL)
+ if (jobParams.ldmParams.enableLdm == ZSTD_ps_enable && rawSeqStore.seq == NULL)
JOB_ERROR(ERROR(memory_allocation));
/* Don't compute the checksum for chunks, since we compute it externally,
@@ -680,7 +688,7 @@ 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;
+ jobParams.ldmParams.enableLdm = ZSTD_ps_disable;
/* Correct nbWorkers to 0. */
jobParams.nbWorkers = 0;
@@ -807,6 +815,15 @@ typedef struct {
static const roundBuff_t kNullRoundBuff = {NULL, 0, 0};
#define RSYNC_LENGTH 32
+/* Don't create chunks smaller than the zstd block size.
+ * This stops us from regressing compression ratio too much,
+ * and ensures our output fits in ZSTD_compressBound().
+ *
+ * If this is shrunk < ZSTD_BLOCKSIZELOG_MIN then
+ * ZSTD_COMPRESSBOUND() will need to be updated.
+ */
+#define RSYNC_MIN_BLOCK_LOG ZSTD_BLOCKSIZELOG_MAX
+#define RSYNC_MIN_BLOCK_SIZE (1<<RSYNC_MIN_BLOCK_LOG)
typedef struct {
U64 hash;
@@ -927,7 +944,7 @@ MEM_STATIC ZSTDMT_CCtx* ZSTDMT_createCCtx_advanced_internal(unsigned nbWorkers,
mtctx->jobs = ZSTDMT_createJobsTable(&nbJobs, cMem);
assert(nbJobs > 0); assert((nbJobs & (nbJobs - 1)) == 0); /* ensure nbJobs is a power of 2 */
mtctx->jobIDMask = nbJobs - 1;
- mtctx->bufPool = ZSTDMT_createBufferPool(nbWorkers, cMem);
+ mtctx->bufPool = ZSTDMT_createBufferPool(BUF_POOL_MAX_NB_BUFFERS(nbWorkers), cMem);
mtctx->cctxPool = ZSTDMT_createCCtxPool(nbWorkers, cMem);
mtctx->seqPool = ZSTDMT_createSeqPool(nbWorkers, cMem);
initError = ZSTDMT_serialState_init(&mtctx->serial);
@@ -1030,7 +1047,7 @@ static size_t ZSTDMT_resize(ZSTDMT_CCtx* mtctx, unsigned nbWorkers)
{
if (POOL_resize(mtctx->factory, nbWorkers)) return ERROR(memory_allocation);
FORWARD_IF_ERROR( ZSTDMT_expandJobsTable(mtctx, nbWorkers) , "");
- mtctx->bufPool = ZSTDMT_expandBufferPool(mtctx->bufPool, nbWorkers);
+ mtctx->bufPool = ZSTDMT_expandBufferPool(mtctx->bufPool, BUF_POOL_MAX_NB_BUFFERS(nbWorkers));
if (mtctx->bufPool == NULL) return ERROR(memory_allocation);
mtctx->cctxPool = ZSTDMT_expandCCtxPool(mtctx->cctxPool, nbWorkers);
if (mtctx->cctxPool == NULL) return ERROR(memory_allocation);
@@ -1135,7 +1152,7 @@ size_t ZSTDMT_toFlushNow(ZSTDMT_CCtx* mtctx)
static unsigned ZSTDMT_computeTargetJobLog(const ZSTD_CCtx_params* params)
{
unsigned jobLog;
- if (params->ldmParams.enableLdm) {
+ if (params->ldmParams.enableLdm == ZSTD_ps_enable) {
/* In Long Range Mode, the windowLog is typically oversized.
* In which case, it's preferable to determine the jobSize
* based on cycleLog instead. */
@@ -1179,7 +1196,7 @@ static size_t ZSTDMT_computeOverlapSize(const ZSTD_CCtx_params* params)
int const overlapRLog = 9 - ZSTDMT_overlapLog(params->overlapLog, params->cParams.strategy);
int ovLog = (overlapRLog >= 8) ? 0 : (params->cParams.windowLog - overlapRLog);
assert(0 <= overlapRLog && overlapRLog <= 8);
- if (params->ldmParams.enableLdm) {
+ if (params->ldmParams.enableLdm == ZSTD_ps_enable) {
/* In Long Range Mode, the windowLog is typically oversized.
* In which case, it's preferable to determine the jobSize
* based on chainLog instead.
@@ -1252,6 +1269,9 @@ size_t ZSTDMT_initCStream_internal(
/* Aim for the targetsectionSize as the average job size. */
U32 const jobSizeKB = (U32)(mtctx->targetSectionSize >> 10);
U32 const rsyncBits = (assert(jobSizeKB >= 1), ZSTD_highbit32(jobSizeKB) + 10);
+ /* We refuse to create jobs < RSYNC_MIN_BLOCK_SIZE bytes, so make sure our
+ * expected job size is at least 4x larger. */
+ assert(rsyncBits >= RSYNC_MIN_BLOCK_LOG + 2);
DEBUGLOG(4, "rsyncLog = %u", rsyncBits);
mtctx->rsync.hash = 0;
mtctx->rsync.hitMask = (1ULL << rsyncBits) - 1;
@@ -1263,7 +1283,7 @@ size_t ZSTDMT_initCStream_internal(
ZSTDMT_setBufferSize(mtctx->bufPool, ZSTD_compressBound(mtctx->targetSectionSize));
{
/* If ldm is enabled we need windowSize space. */
- size_t const windowSize = mtctx->params.ldmParams.enableLdm ? (1U << mtctx->params.cParams.windowLog) : 0;
+ size_t const windowSize = mtctx->params.ldmParams.enableLdm == ZSTD_ps_enable ? (1U << mtctx->params.cParams.windowLog) : 0;
/* Two buffers of slack, plus extra space for the overlap
* This is the minimum slack that LDM works with. One extra because
* flush might waste up to targetSectionSize-1 bytes. Another extra
@@ -1538,17 +1558,21 @@ static range_t ZSTDMT_getInputDataInUse(ZSTDMT_CCtx* mtctx)
static int ZSTDMT_isOverlapped(buffer_t buffer, range_t range)
{
BYTE const* const bufferStart = (BYTE const*)buffer.start;
- BYTE const* const bufferEnd = bufferStart + buffer.capacity;
BYTE const* const rangeStart = (BYTE const*)range.start;
- BYTE const* const rangeEnd = range.size != 0 ? rangeStart + range.size : rangeStart;
if (rangeStart == NULL || bufferStart == NULL)
return 0;
- /* Empty ranges cannot overlap */
- if (bufferStart == bufferEnd || rangeStart == rangeEnd)
- return 0;
- return bufferStart < rangeEnd && rangeStart < bufferEnd;
+ {
+ BYTE const* const bufferEnd = bufferStart + buffer.capacity;
+ BYTE const* const rangeEnd = rangeStart + range.size;
+
+ /* Empty ranges cannot overlap */
+ if (bufferStart == bufferEnd || rangeStart == rangeEnd)
+ return 0;
+
+ return bufferStart < rangeEnd && rangeStart < bufferEnd;
+ }
}
static int ZSTDMT_doesOverlapWindow(buffer_t buffer, ZSTD_window_t window)
@@ -1575,7 +1599,7 @@ static int ZSTDMT_doesOverlapWindow(buffer_t buffer, ZSTD_window_t window)
static void ZSTDMT_waitForLdmComplete(ZSTDMT_CCtx* mtctx, buffer_t buffer)
{
- if (mtctx->params.ldmParams.enableLdm) {
+ if (mtctx->params.ldmParams.enableLdm == ZSTD_ps_enable) {
ZSTD_pthread_mutex_t* mutex = &mtctx->serial.ldmWindowMutex;
DEBUGLOG(5, "ZSTDMT_waitForLdmComplete");
DEBUGLOG(5, "source [0x%zx, 0x%zx)",
@@ -1678,6 +1702,11 @@ findSynchronizationPoint(ZSTDMT_CCtx const* mtctx, ZSTD_inBuffer const input)
if (!mtctx->params.rsyncable)
/* Rsync is disabled. */
return syncPoint;
+ if (mtctx->inBuff.filled + input.size - input.pos < RSYNC_MIN_BLOCK_SIZE)
+ /* We don't emit synchronization points if it would produce too small blocks.
+ * We don't have enough input to find a synchronization point, so don't look.
+ */
+ return syncPoint;
if (mtctx->inBuff.filled + syncPoint.toLoad < RSYNC_LENGTH)
/* Not enough to compute the hash.
* We will miss any synchronization points in this RSYNC_LENGTH byte
@@ -1688,10 +1717,28 @@ findSynchronizationPoint(ZSTDMT_CCtx const* mtctx, ZSTD_inBuffer const input)
*/
return syncPoint;
/* Initialize the loop variables. */
- if (mtctx->inBuff.filled >= RSYNC_LENGTH) {
- /* We have enough bytes buffered to initialize the hash.
+ if (mtctx->inBuff.filled < RSYNC_MIN_BLOCK_SIZE) {
+ /* We don't need to scan the first RSYNC_MIN_BLOCK_SIZE positions
+ * because they can't possibly be a sync point. So we can start
+ * part way through the input buffer.
+ */
+ pos = RSYNC_MIN_BLOCK_SIZE - mtctx->inBuff.filled;
+ if (pos >= RSYNC_LENGTH) {
+ prev = istart + pos - RSYNC_LENGTH;
+ hash = ZSTD_rollingHash_compute(prev, RSYNC_LENGTH);
+ } else {
+ assert(mtctx->inBuff.filled >= RSYNC_LENGTH);
+ prev = (BYTE const*)mtctx->inBuff.buffer.start + mtctx->inBuff.filled - RSYNC_LENGTH;
+ hash = ZSTD_rollingHash_compute(prev + pos, (RSYNC_LENGTH - pos));
+ hash = ZSTD_rollingHash_append(hash, istart, pos);
+ }
+ } else {
+ /* We have enough bytes buffered to initialize the hash,
+ * and are have processed enough bytes to find a sync point.
* Start scanning at the beginning of the input.
*/
+ assert(mtctx->inBuff.filled >= RSYNC_MIN_BLOCK_SIZE);
+ assert(RSYNC_MIN_BLOCK_SIZE >= RSYNC_LENGTH);
pos = 0;
prev = (BYTE const*)mtctx->inBuff.buffer.start + mtctx->inBuff.filled - RSYNC_LENGTH;
hash = ZSTD_rollingHash_compute(prev, RSYNC_LENGTH);
@@ -1705,16 +1752,6 @@ findSynchronizationPoint(ZSTDMT_CCtx const* mtctx, ZSTD_inBuffer const input)
syncPoint.flush = 1;
return syncPoint;
}
- } else {
- /* We don't have enough bytes buffered to initialize the hash, but
- * we know we have at least RSYNC_LENGTH bytes total.
- * Start scanning after the first RSYNC_LENGTH bytes less the bytes
- * already buffered.
- */
- pos = RSYNC_LENGTH - mtctx->inBuff.filled;
- prev = (BYTE const*)mtctx->inBuff.buffer.start - pos;
- hash = ZSTD_rollingHash_compute(mtctx->inBuff.buffer.start, mtctx->inBuff.filled);
- hash = ZSTD_rollingHash_append(hash, istart, pos);
}
/* Starting with the hash of the previous RSYNC_LENGTH bytes, roll
* through the input. If we hit a synchronization point, then cut the
@@ -1726,8 +1763,9 @@ findSynchronizationPoint(ZSTDMT_CCtx const* mtctx, ZSTD_inBuffer const input)
*/
for (; pos < syncPoint.toLoad; ++pos) {
BYTE const toRemove = pos < RSYNC_LENGTH ? prev[pos] : istart[pos - RSYNC_LENGTH];
- /* if (pos >= RSYNC_LENGTH) assert(ZSTD_rollingHash_compute(istart + pos - RSYNC_LENGTH, RSYNC_LENGTH) == hash); */
+ assert(pos < RSYNC_LENGTH || ZSTD_rollingHash_compute(istart + pos - RSYNC_LENGTH, RSYNC_LENGTH) == hash);
hash = ZSTD_rollingHash_rotate(hash, toRemove, istart[pos], primePower);
+ assert(mtctx->inBuff.filled + pos >= RSYNC_MIN_BLOCK_SIZE);
if ((hash & hitMask) == hitMask) {
syncPoint.toLoad = pos + 1;
syncPoint.flush = 1;
diff --git a/thirdparty/zstd/compress/zstdmt_compress.h b/thirdparty/zstd/compress/zstdmt_compress.h
index 2fee2ec745..271eb1ac71 100644
--- a/thirdparty/zstd/compress/zstdmt_compress.h
+++ b/thirdparty/zstd/compress/zstdmt_compress.h
@@ -65,8 +65,11 @@ size_t ZSTDMT_nextInputSizeHint(const ZSTDMT_CCtx* mtctx);
* Private use only. Init streaming operation.
* expects params to be valid.
* must receive dict, or cdict, or none, but not both.
+ * mtctx can be freshly constructed or reused from a prior compression.
+ * If mtctx is reused, memory allocations from the prior compression may not be freed,
+ * even if they are not needed for the current compression.
* @return : 0, or an error code */
-size_t ZSTDMT_initCStream_internal(ZSTDMT_CCtx* zcs,
+size_t ZSTDMT_initCStream_internal(ZSTDMT_CCtx* mtctx,
const void* dict, size_t dictSize, ZSTD_dictContentType_e dictContentType,
const ZSTD_CDict* cdict,
ZSTD_CCtx_params params, unsigned long long pledgedSrcSize);
diff --git a/thirdparty/zstd/decompress/huf_decompress.c b/thirdparty/zstd/decompress/huf_decompress.c
index b93c9a003b..2027188255 100644
--- a/thirdparty/zstd/decompress/huf_decompress.c
+++ b/thirdparty/zstd/decompress/huf_decompress.c
@@ -22,6 +22,13 @@
#define HUF_STATIC_LINKING_ONLY
#include "../common/huf.h"
#include "../common/error_private.h"
+#include "../common/zstd_internal.h"
+
+/* **************************************************************
+* Constants
+****************************************************************/
+
+#define HUF_DECODER_FAST_TABLELOG 11
/* **************************************************************
* Macros
@@ -36,6 +43,30 @@
#error "Cannot force the use of the X1 and X2 decoders at the same time!"
#endif
+#if ZSTD_ENABLE_ASM_X86_64_BMI2 && DYNAMIC_BMI2
+# define HUF_ASM_X86_64_BMI2_ATTRS BMI2_TARGET_ATTRIBUTE
+#else
+# define HUF_ASM_X86_64_BMI2_ATTRS
+#endif
+
+#ifdef __cplusplus
+# define HUF_EXTERN_C extern "C"
+#else
+# define HUF_EXTERN_C
+#endif
+#define HUF_ASM_DECL HUF_EXTERN_C
+
+#if DYNAMIC_BMI2 || (ZSTD_ENABLE_ASM_X86_64_BMI2 && defined(__BMI2__))
+# define HUF_NEED_BMI2_FUNCTION 1
+#else
+# define HUF_NEED_BMI2_FUNCTION 0
+#endif
+
+#if !(ZSTD_ENABLE_ASM_X86_64_BMI2 && defined(__BMI2__))
+# define HUF_NEED_DEFAULT_FUNCTION 1
+#else
+# define HUF_NEED_DEFAULT_FUNCTION 0
+#endif
/* **************************************************************
* Error Management
@@ -65,7 +96,7 @@
return fn##_body(dst, dstSize, cSrc, cSrcSize, DTable); \
} \
\
- static TARGET_ATTRIBUTE("bmi2") size_t fn##_bmi2( \
+ static BMI2_TARGET_ATTRIBUTE size_t fn##_bmi2( \
void* dst, size_t dstSize, \
const void* cSrc, size_t cSrcSize, \
const HUF_DTable* DTable) \
@@ -107,13 +138,147 @@ static DTableDesc HUF_getDTableDesc(const HUF_DTable* table)
return dtd;
}
+#if ZSTD_ENABLE_ASM_X86_64_BMI2
+
+static size_t HUF_initDStream(BYTE const* ip) {
+ BYTE const lastByte = ip[7];
+ size_t const bitsConsumed = lastByte ? 8 - BIT_highbit32(lastByte) : 0;
+ size_t const value = MEM_readLEST(ip) | 1;
+ assert(bitsConsumed <= 8);
+ return value << bitsConsumed;
+}
+typedef struct {
+ BYTE const* ip[4];
+ BYTE* op[4];
+ U64 bits[4];
+ void const* dt;
+ BYTE const* ilimit;
+ BYTE* oend;
+ BYTE const* iend[4];
+} HUF_DecompressAsmArgs;
+
+/**
+ * Initializes args for the asm decoding loop.
+ * @returns 0 on success
+ * 1 if the fallback implementation should be used.
+ * Or an error code on failure.
+ */
+static size_t HUF_DecompressAsmArgs_init(HUF_DecompressAsmArgs* args, void* dst, size_t dstSize, void const* src, size_t srcSize, const HUF_DTable* DTable)
+{
+ void const* dt = DTable + 1;
+ U32 const dtLog = HUF_getDTableDesc(DTable).tableLog;
+
+ const BYTE* const ilimit = (const BYTE*)src + 6 + 8;
+
+ BYTE* const oend = (BYTE*)dst + dstSize;
+
+ /* The following condition is false on x32 platform,
+ * but HUF_asm is not compatible with this ABI */
+ if (!(MEM_isLittleEndian() && !MEM_32bits())) return 1;
+
+ /* strict minimum : jump table + 1 byte per stream */
+ if (srcSize < 10)
+ return ERROR(corruption_detected);
+
+ /* Must have at least 8 bytes per stream because we don't handle initializing smaller bit containers.
+ * If table log is not correct at this point, fallback to the old decoder.
+ * On small inputs we don't have enough data to trigger the fast loop, so use the old decoder.
+ */
+ if (dtLog != HUF_DECODER_FAST_TABLELOG)
+ return 1;
+
+ /* Read the jump table. */
+ {
+ const BYTE* const istart = (const BYTE*)src;
+ size_t const length1 = MEM_readLE16(istart);
+ size_t const length2 = MEM_readLE16(istart+2);
+ size_t const length3 = MEM_readLE16(istart+4);
+ size_t const length4 = srcSize - (length1 + length2 + length3 + 6);
+ args->iend[0] = istart + 6; /* jumpTable */
+ args->iend[1] = args->iend[0] + length1;
+ args->iend[2] = args->iend[1] + length2;
+ args->iend[3] = args->iend[2] + length3;
+
+ /* HUF_initDStream() requires this, and this small of an input
+ * won't benefit from the ASM loop anyways.
+ * length1 must be >= 16 so that ip[0] >= ilimit before the loop
+ * starts.
+ */
+ if (length1 < 16 || length2 < 8 || length3 < 8 || length4 < 8)
+ return 1;
+ if (length4 > srcSize) return ERROR(corruption_detected); /* overflow */
+ }
+ /* ip[] contains the position that is currently loaded into bits[]. */
+ args->ip[0] = args->iend[1] - sizeof(U64);
+ args->ip[1] = args->iend[2] - sizeof(U64);
+ args->ip[2] = args->iend[3] - sizeof(U64);
+ args->ip[3] = (BYTE const*)src + srcSize - sizeof(U64);
+
+ /* op[] contains the output pointers. */
+ args->op[0] = (BYTE*)dst;
+ args->op[1] = args->op[0] + (dstSize+3)/4;
+ args->op[2] = args->op[1] + (dstSize+3)/4;
+ args->op[3] = args->op[2] + (dstSize+3)/4;
+
+ /* No point to call the ASM loop for tiny outputs. */
+ if (args->op[3] >= oend)
+ return 1;
+
+ /* bits[] is the bit container.
+ * It is read from the MSB down to the LSB.
+ * It is shifted left as it is read, and zeros are
+ * shifted in. After the lowest valid bit a 1 is
+ * set, so that CountTrailingZeros(bits[]) can be used
+ * to count how many bits we've consumed.
+ */
+ args->bits[0] = HUF_initDStream(args->ip[0]);
+ args->bits[1] = HUF_initDStream(args->ip[1]);
+ args->bits[2] = HUF_initDStream(args->ip[2]);
+ args->bits[3] = HUF_initDStream(args->ip[3]);
+
+ /* If ip[] >= ilimit, it is guaranteed to be safe to
+ * reload bits[]. It may be beyond its section, but is
+ * guaranteed to be valid (>= istart).
+ */
+ args->ilimit = ilimit;
+
+ args->oend = oend;
+ args->dt = dt;
+
+ return 0;
+}
+
+static size_t HUF_initRemainingDStream(BIT_DStream_t* bit, HUF_DecompressAsmArgs const* args, int stream, BYTE* segmentEnd)
+{
+ /* Validate that we haven't overwritten. */
+ if (args->op[stream] > segmentEnd)
+ return ERROR(corruption_detected);
+ /* Validate that we haven't read beyond iend[].
+ * Note that ip[] may be < iend[] because the MSB is
+ * the next bit to read, and we may have consumed 100%
+ * of the stream, so down to iend[i] - 8 is valid.
+ */
+ if (args->ip[stream] < args->iend[stream] - 8)
+ return ERROR(corruption_detected);
+
+ /* Construct the BIT_DStream_t. */
+ bit->bitContainer = MEM_readLE64(args->ip[stream]);
+ bit->bitsConsumed = ZSTD_countTrailingZeros((size_t)args->bits[stream]);
+ bit->start = (const char*)args->iend[0];
+ bit->limitPtr = bit->start + sizeof(size_t);
+ bit->ptr = (const char*)args->ip[stream];
+
+ return 0;
+}
+#endif
+
#ifndef HUF_FORCE_DECOMPRESS_X2
/*-***************************/
/* single-symbol decoding */
/*-***************************/
-typedef struct { BYTE byte; BYTE nbBits; } HUF_DEltX1; /* single-symbol decoding */
+typedef struct { BYTE nbBits; BYTE byte; } HUF_DEltX1; /* single-symbol decoding */
/**
* Packs 4 HUF_DEltX1 structs into a U64. This is used to lay down 4 entries at
@@ -122,14 +287,44 @@ typedef struct { BYTE byte; BYTE nbBits; } HUF_DEltX1; /* single-symbol decodi
static U64 HUF_DEltX1_set4(BYTE symbol, BYTE nbBits) {
U64 D4;
if (MEM_isLittleEndian()) {
- D4 = symbol + (nbBits << 8);
- } else {
D4 = (symbol << 8) + nbBits;
+ } else {
+ D4 = symbol + (nbBits << 8);
}
D4 *= 0x0001000100010001ULL;
return D4;
}
+/**
+ * Increase the tableLog to targetTableLog and rescales the stats.
+ * If tableLog > targetTableLog this is a no-op.
+ * @returns New tableLog
+ */
+static U32 HUF_rescaleStats(BYTE* huffWeight, U32* rankVal, U32 nbSymbols, U32 tableLog, U32 targetTableLog)
+{
+ if (tableLog > targetTableLog)
+ return tableLog;
+ if (tableLog < targetTableLog) {
+ U32 const scale = targetTableLog - tableLog;
+ U32 s;
+ /* Increase the weight for all non-zero probability symbols by scale. */
+ for (s = 0; s < nbSymbols; ++s) {
+ huffWeight[s] += (BYTE)((huffWeight[s] == 0) ? 0 : scale);
+ }
+ /* Update rankVal to reflect the new weights.
+ * All weights except 0 get moved to weight + scale.
+ * Weights [1, scale] are empty.
+ */
+ for (s = targetTableLog; s > scale; --s) {
+ rankVal[s] = rankVal[s - scale];
+ }
+ for (s = scale; s > 0; --s) {
+ rankVal[s] = 0;
+ }
+ }
+ return targetTableLog;
+}
+
typedef struct {
U32 rankVal[HUF_TABLELOG_ABSOLUTEMAX + 1];
U32 rankStart[HUF_TABLELOG_ABSOLUTEMAX + 1];
@@ -162,8 +357,12 @@ size_t HUF_readDTableX1_wksp_bmi2(HUF_DTable* DTable, const void* src, size_t sr
iSize = HUF_readStats_wksp(wksp->huffWeight, HUF_SYMBOLVALUE_MAX + 1, wksp->rankVal, &nbSymbols, &tableLog, src, srcSize, wksp->statsWksp, sizeof(wksp->statsWksp), bmi2);
if (HUF_isError(iSize)) return iSize;
+
/* Table header */
{ DTableDesc dtd = HUF_getDTableDesc(DTable);
+ U32 const maxTableLog = dtd.maxTableLog + 1;
+ U32 const targetTableLog = MIN(maxTableLog, HUF_DECODER_FAST_TABLELOG);
+ tableLog = HUF_rescaleStats(wksp->huffWeight, wksp->rankVal, nbSymbols, tableLog, targetTableLog);
if (tableLog > (U32)(dtd.maxTableLog+1)) return ERROR(tableLog_tooLarge); /* DTable too small, Huffman tree cannot fit in */
dtd.tableType = 0;
dtd.tableLog = (BYTE)tableLog;
@@ -207,7 +406,7 @@ size_t HUF_readDTableX1_wksp_bmi2(HUF_DTable* DTable, const void* src, size_t sr
/* fill DTable
* We fill all entries of each weight in order.
- * That way length is a constant for each iteration of the outter loop.
+ * That way length is a constant for each iteration of the outer loop.
* We can switch based on the length to a different inner loop which is
* optimized for that particular case.
*/
@@ -304,11 +503,15 @@ HUF_decodeStreamX1(BYTE* p, BIT_DStream_t* const bitDPtr, BYTE* const pEnd, cons
BYTE* const pStart = p;
/* up to 4 symbols at a time */
- while ((BIT_reloadDStream(bitDPtr) == BIT_DStream_unfinished) & (p < pEnd-3)) {
- HUF_DECODE_SYMBOLX1_2(p, bitDPtr);
- HUF_DECODE_SYMBOLX1_1(p, bitDPtr);
- HUF_DECODE_SYMBOLX1_2(p, bitDPtr);
- HUF_DECODE_SYMBOLX1_0(p, bitDPtr);
+ if ((pEnd - p) > 3) {
+ while ((BIT_reloadDStream(bitDPtr) == BIT_DStream_unfinished) & (p < pEnd-3)) {
+ HUF_DECODE_SYMBOLX1_2(p, bitDPtr);
+ HUF_DECODE_SYMBOLX1_1(p, bitDPtr);
+ HUF_DECODE_SYMBOLX1_2(p, bitDPtr);
+ HUF_DECODE_SYMBOLX1_0(p, bitDPtr);
+ }
+ } else {
+ BIT_reloadDStream(bitDPtr);
}
/* [0-3] symbols remaining */
@@ -388,33 +591,36 @@ HUF_decompress4X1_usingDTable_internal_body(
U32 endSignal = 1;
if (length4 > cSrcSize) return ERROR(corruption_detected); /* overflow */
+ if (opStart4 > oend) return ERROR(corruption_detected); /* overflow */
CHECK_F( BIT_initDStream(&bitD1, istart1, length1) );
CHECK_F( BIT_initDStream(&bitD2, istart2, length2) );
CHECK_F( BIT_initDStream(&bitD3, istart3, length3) );
CHECK_F( BIT_initDStream(&bitD4, istart4, length4) );
/* up to 16 symbols per loop (4 symbols per stream) in 64-bit mode */
- for ( ; (endSignal) & (op4 < olimit) ; ) {
- HUF_DECODE_SYMBOLX1_2(op1, &bitD1);
- HUF_DECODE_SYMBOLX1_2(op2, &bitD2);
- HUF_DECODE_SYMBOLX1_2(op3, &bitD3);
- HUF_DECODE_SYMBOLX1_2(op4, &bitD4);
- HUF_DECODE_SYMBOLX1_1(op1, &bitD1);
- HUF_DECODE_SYMBOLX1_1(op2, &bitD2);
- HUF_DECODE_SYMBOLX1_1(op3, &bitD3);
- HUF_DECODE_SYMBOLX1_1(op4, &bitD4);
- HUF_DECODE_SYMBOLX1_2(op1, &bitD1);
- HUF_DECODE_SYMBOLX1_2(op2, &bitD2);
- HUF_DECODE_SYMBOLX1_2(op3, &bitD3);
- HUF_DECODE_SYMBOLX1_2(op4, &bitD4);
- HUF_DECODE_SYMBOLX1_0(op1, &bitD1);
- HUF_DECODE_SYMBOLX1_0(op2, &bitD2);
- HUF_DECODE_SYMBOLX1_0(op3, &bitD3);
- HUF_DECODE_SYMBOLX1_0(op4, &bitD4);
- endSignal &= BIT_reloadDStreamFast(&bitD1) == BIT_DStream_unfinished;
- endSignal &= BIT_reloadDStreamFast(&bitD2) == BIT_DStream_unfinished;
- endSignal &= BIT_reloadDStreamFast(&bitD3) == BIT_DStream_unfinished;
- endSignal &= BIT_reloadDStreamFast(&bitD4) == BIT_DStream_unfinished;
+ if ((size_t)(oend - op4) >= sizeof(size_t)) {
+ for ( ; (endSignal) & (op4 < olimit) ; ) {
+ HUF_DECODE_SYMBOLX1_2(op1, &bitD1);
+ HUF_DECODE_SYMBOLX1_2(op2, &bitD2);
+ HUF_DECODE_SYMBOLX1_2(op3, &bitD3);
+ HUF_DECODE_SYMBOLX1_2(op4, &bitD4);
+ HUF_DECODE_SYMBOLX1_1(op1, &bitD1);
+ HUF_DECODE_SYMBOLX1_1(op2, &bitD2);
+ HUF_DECODE_SYMBOLX1_1(op3, &bitD3);
+ HUF_DECODE_SYMBOLX1_1(op4, &bitD4);
+ HUF_DECODE_SYMBOLX1_2(op1, &bitD1);
+ HUF_DECODE_SYMBOLX1_2(op2, &bitD2);
+ HUF_DECODE_SYMBOLX1_2(op3, &bitD3);
+ HUF_DECODE_SYMBOLX1_2(op4, &bitD4);
+ HUF_DECODE_SYMBOLX1_0(op1, &bitD1);
+ HUF_DECODE_SYMBOLX1_0(op2, &bitD2);
+ HUF_DECODE_SYMBOLX1_0(op3, &bitD3);
+ HUF_DECODE_SYMBOLX1_0(op4, &bitD4);
+ endSignal &= BIT_reloadDStreamFast(&bitD1) == BIT_DStream_unfinished;
+ endSignal &= BIT_reloadDStreamFast(&bitD2) == BIT_DStream_unfinished;
+ endSignal &= BIT_reloadDStreamFast(&bitD3) == BIT_DStream_unfinished;
+ endSignal &= BIT_reloadDStreamFast(&bitD4) == BIT_DStream_unfinished;
+ }
}
/* check corruption */
@@ -440,6 +646,79 @@ HUF_decompress4X1_usingDTable_internal_body(
}
}
+#if HUF_NEED_BMI2_FUNCTION
+static BMI2_TARGET_ATTRIBUTE
+size_t HUF_decompress4X1_usingDTable_internal_bmi2(void* dst, size_t dstSize, void const* cSrc,
+ size_t cSrcSize, HUF_DTable const* DTable) {
+ return HUF_decompress4X1_usingDTable_internal_body(dst, dstSize, cSrc, cSrcSize, DTable);
+}
+#endif
+
+#if HUF_NEED_DEFAULT_FUNCTION
+static
+size_t HUF_decompress4X1_usingDTable_internal_default(void* dst, size_t dstSize, void const* cSrc,
+ size_t cSrcSize, HUF_DTable const* DTable) {
+ return HUF_decompress4X1_usingDTable_internal_body(dst, dstSize, cSrc, cSrcSize, DTable);
+}
+#endif
+
+#if ZSTD_ENABLE_ASM_X86_64_BMI2
+
+HUF_ASM_DECL void HUF_decompress4X1_usingDTable_internal_bmi2_asm_loop(HUF_DecompressAsmArgs* args) ZSTDLIB_HIDDEN;
+
+static HUF_ASM_X86_64_BMI2_ATTRS
+size_t
+HUF_decompress4X1_usingDTable_internal_bmi2_asm(
+ void* dst, size_t dstSize,
+ const void* cSrc, size_t cSrcSize,
+ const HUF_DTable* DTable)
+{
+ void const* dt = DTable + 1;
+ const BYTE* const iend = (const BYTE*)cSrc + 6;
+ BYTE* const oend = (BYTE*)dst + dstSize;
+ HUF_DecompressAsmArgs args;
+ {
+ size_t const ret = HUF_DecompressAsmArgs_init(&args, dst, dstSize, cSrc, cSrcSize, DTable);
+ FORWARD_IF_ERROR(ret, "Failed to init asm args");
+ if (ret != 0)
+ return HUF_decompress4X1_usingDTable_internal_bmi2(dst, dstSize, cSrc, cSrcSize, DTable);
+ }
+
+ assert(args.ip[0] >= args.ilimit);
+ HUF_decompress4X1_usingDTable_internal_bmi2_asm_loop(&args);
+
+ /* Our loop guarantees that ip[] >= ilimit and that we haven't
+ * overwritten any op[].
+ */
+ assert(args.ip[0] >= iend);
+ assert(args.ip[1] >= iend);
+ assert(args.ip[2] >= iend);
+ assert(args.ip[3] >= iend);
+ assert(args.op[3] <= oend);
+ (void)iend;
+
+ /* finish bit streams one by one. */
+ {
+ size_t const segmentSize = (dstSize+3) / 4;
+ BYTE* segmentEnd = (BYTE*)dst;
+ int i;
+ for (i = 0; i < 4; ++i) {
+ BIT_DStream_t bit;
+ if (segmentSize <= (size_t)(oend - segmentEnd))
+ segmentEnd += segmentSize;
+ else
+ segmentEnd = oend;
+ FORWARD_IF_ERROR(HUF_initRemainingDStream(&bit, &args, i, segmentEnd), "corruption");
+ /* Decompress and validate that we've produced exactly the expected length. */
+ args.op[i] += HUF_decodeStreamX1(args.op[i], &bit, segmentEnd, (HUF_DEltX1 const*)dt, HUF_DECODER_FAST_TABLELOG);
+ if (args.op[i] != segmentEnd) return ERROR(corruption_detected);
+ }
+ }
+
+ /* decoded size */
+ return dstSize;
+}
+#endif /* ZSTD_ENABLE_ASM_X86_64_BMI2 */
typedef size_t (*HUF_decompress_usingDTable_t)(void *dst, size_t dstSize,
const void *cSrc,
@@ -447,8 +726,28 @@ typedef size_t (*HUF_decompress_usingDTable_t)(void *dst, size_t dstSize,
const HUF_DTable *DTable);
HUF_DGEN(HUF_decompress1X1_usingDTable_internal)
-HUF_DGEN(HUF_decompress4X1_usingDTable_internal)
+static size_t HUF_decompress4X1_usingDTable_internal(void* dst, size_t dstSize, void const* cSrc,
+ size_t cSrcSize, HUF_DTable const* DTable, int bmi2)
+{
+#if DYNAMIC_BMI2
+ if (bmi2) {
+# if ZSTD_ENABLE_ASM_X86_64_BMI2
+ return HUF_decompress4X1_usingDTable_internal_bmi2_asm(dst, dstSize, cSrc, cSrcSize, DTable);
+# else
+ return HUF_decompress4X1_usingDTable_internal_bmi2(dst, dstSize, cSrc, cSrcSize, DTable);
+# endif
+ }
+#else
+ (void)bmi2;
+#endif
+
+#if ZSTD_ENABLE_ASM_X86_64_BMI2 && defined(__BMI2__)
+ return HUF_decompress4X1_usingDTable_internal_bmi2_asm(dst, dstSize, cSrc, cSrcSize, DTable);
+#else
+ return HUF_decompress4X1_usingDTable_internal_default(dst, dstSize, cSrc, cSrcSize, DTable);
+#endif
+}
size_t HUF_decompress1X1_usingDTable(
@@ -518,106 +817,226 @@ size_t HUF_decompress4X1_DCtx_wksp(HUF_DTable* dctx, void* dst, size_t dstSize,
/* *************************/
typedef struct { U16 sequence; BYTE nbBits; BYTE length; } HUF_DEltX2; /* double-symbols decoding */
-typedef struct { BYTE symbol; BYTE weight; } sortedSymbol_t;
+typedef struct { BYTE symbol; } sortedSymbol_t;
typedef U32 rankValCol_t[HUF_TABLELOG_MAX + 1];
typedef rankValCol_t rankVal_t[HUF_TABLELOG_MAX];
+/**
+ * Constructs a HUF_DEltX2 in a U32.
+ */
+static U32 HUF_buildDEltX2U32(U32 symbol, U32 nbBits, U32 baseSeq, int level)
+{
+ U32 seq;
+ DEBUG_STATIC_ASSERT(offsetof(HUF_DEltX2, sequence) == 0);
+ DEBUG_STATIC_ASSERT(offsetof(HUF_DEltX2, nbBits) == 2);
+ DEBUG_STATIC_ASSERT(offsetof(HUF_DEltX2, length) == 3);
+ DEBUG_STATIC_ASSERT(sizeof(HUF_DEltX2) == sizeof(U32));
+ if (MEM_isLittleEndian()) {
+ seq = level == 1 ? symbol : (baseSeq + (symbol << 8));
+ return seq + (nbBits << 16) + ((U32)level << 24);
+ } else {
+ seq = level == 1 ? (symbol << 8) : ((baseSeq << 8) + symbol);
+ return (seq << 16) + (nbBits << 8) + (U32)level;
+ }
+}
-/* HUF_fillDTableX2Level2() :
- * `rankValOrigin` must be a table of at least (HUF_TABLELOG_MAX + 1) U32 */
-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* wksp, size_t wkspSize)
+/**
+ * Constructs a HUF_DEltX2.
+ */
+static HUF_DEltX2 HUF_buildDEltX2(U32 symbol, U32 nbBits, U32 baseSeq, int level)
{
HUF_DEltX2 DElt;
- U32* rankVal = wksp;
+ U32 const val = HUF_buildDEltX2U32(symbol, nbBits, baseSeq, level);
+ DEBUG_STATIC_ASSERT(sizeof(DElt) == sizeof(val));
+ ZSTD_memcpy(&DElt, &val, sizeof(val));
+ return DElt;
+}
- assert(wkspSize >= HUF_TABLELOG_MAX + 1);
- (void)wkspSize;
- /* get pre-calculated rankVal */
- ZSTD_memcpy(rankVal, rankValOrigin, sizeof(U32) * (HUF_TABLELOG_MAX + 1));
+/**
+ * Constructs 2 HUF_DEltX2s and packs them into a U64.
+ */
+static U64 HUF_buildDEltX2U64(U32 symbol, U32 nbBits, U16 baseSeq, int level)
+{
+ U32 DElt = HUF_buildDEltX2U32(symbol, nbBits, baseSeq, level);
+ return (U64)DElt + ((U64)DElt << 32);
+}
- /* fill skipped values */
- if (minWeight>1) {
- U32 i, skipSize = rankVal[minWeight];
- MEM_writeLE16(&(DElt.sequence), baseSeq);
- DElt.nbBits = (BYTE)(consumed);
- DElt.length = 1;
- for (i = 0; i < skipSize; i++)
- DTable[i] = DElt;
+/**
+ * Fills the DTable rank with all the symbols from [begin, end) that are each
+ * nbBits long.
+ *
+ * @param DTableRank The start of the rank in the DTable.
+ * @param begin The first symbol to fill (inclusive).
+ * @param end The last symbol to fill (exclusive).
+ * @param nbBits Each symbol is nbBits long.
+ * @param tableLog The table log.
+ * @param baseSeq If level == 1 { 0 } else { the first level symbol }
+ * @param level The level in the table. Must be 1 or 2.
+ */
+static void HUF_fillDTableX2ForWeight(
+ HUF_DEltX2* DTableRank,
+ sortedSymbol_t const* begin, sortedSymbol_t const* end,
+ U32 nbBits, U32 tableLog,
+ U16 baseSeq, int const level)
+{
+ U32 const length = 1U << ((tableLog - nbBits) & 0x1F /* quiet static-analyzer */);
+ const sortedSymbol_t* ptr;
+ assert(level >= 1 && level <= 2);
+ switch (length) {
+ case 1:
+ for (ptr = begin; ptr != end; ++ptr) {
+ HUF_DEltX2 const DElt = HUF_buildDEltX2(ptr->symbol, nbBits, baseSeq, level);
+ *DTableRank++ = DElt;
+ }
+ break;
+ case 2:
+ for (ptr = begin; ptr != end; ++ptr) {
+ HUF_DEltX2 const DElt = HUF_buildDEltX2(ptr->symbol, nbBits, baseSeq, level);
+ DTableRank[0] = DElt;
+ DTableRank[1] = DElt;
+ DTableRank += 2;
+ }
+ break;
+ case 4:
+ for (ptr = begin; ptr != end; ++ptr) {
+ U64 const DEltX2 = HUF_buildDEltX2U64(ptr->symbol, nbBits, baseSeq, level);
+ ZSTD_memcpy(DTableRank + 0, &DEltX2, sizeof(DEltX2));
+ ZSTD_memcpy(DTableRank + 2, &DEltX2, sizeof(DEltX2));
+ DTableRank += 4;
+ }
+ break;
+ case 8:
+ for (ptr = begin; ptr != end; ++ptr) {
+ U64 const DEltX2 = HUF_buildDEltX2U64(ptr->symbol, nbBits, baseSeq, level);
+ ZSTD_memcpy(DTableRank + 0, &DEltX2, sizeof(DEltX2));
+ ZSTD_memcpy(DTableRank + 2, &DEltX2, sizeof(DEltX2));
+ ZSTD_memcpy(DTableRank + 4, &DEltX2, sizeof(DEltX2));
+ ZSTD_memcpy(DTableRank + 6, &DEltX2, sizeof(DEltX2));
+ DTableRank += 8;
+ }
+ break;
+ default:
+ for (ptr = begin; ptr != end; ++ptr) {
+ U64 const DEltX2 = HUF_buildDEltX2U64(ptr->symbol, nbBits, baseSeq, level);
+ HUF_DEltX2* const DTableRankEnd = DTableRank + length;
+ for (; DTableRank != DTableRankEnd; DTableRank += 8) {
+ ZSTD_memcpy(DTableRank + 0, &DEltX2, sizeof(DEltX2));
+ ZSTD_memcpy(DTableRank + 2, &DEltX2, sizeof(DEltX2));
+ ZSTD_memcpy(DTableRank + 4, &DEltX2, sizeof(DEltX2));
+ ZSTD_memcpy(DTableRank + 6, &DEltX2, sizeof(DEltX2));
+ }
+ }
+ break;
}
+}
- /* fill DTable */
- { U32 s; for (s=0; s<sortedListSize; s++) { /* note : sortedSymbols already skipped */
- const U32 symbol = sortedSymbols[s].symbol;
- const U32 weight = sortedSymbols[s].weight;
- const U32 nbBits = nbBitsBaseline - weight;
- const U32 length = 1 << (sizeLog-nbBits);
- const U32 start = rankVal[weight];
- U32 i = start;
- const U32 end = start + length;
-
- MEM_writeLE16(&(DElt.sequence), (U16)(baseSeq + (symbol << 8)));
- DElt.nbBits = (BYTE)(nbBits + consumed);
- DElt.length = 2;
- do { DTable[i++] = DElt; } while (i<end); /* since length >= 1 */
+/* HUF_fillDTableX2Level2() :
+ * `rankValOrigin` must be a table of at least (HUF_TABLELOG_MAX + 1) U32 */
+static void HUF_fillDTableX2Level2(HUF_DEltX2* DTable, U32 targetLog, const U32 consumedBits,
+ const U32* rankVal, const int minWeight, const int maxWeight1,
+ const sortedSymbol_t* sortedSymbols, U32 const* rankStart,
+ U32 nbBitsBaseline, U16 baseSeq)
+{
+ /* Fill skipped values (all positions up to rankVal[minWeight]).
+ * These are positions only get a single symbol because the combined weight
+ * is too large.
+ */
+ if (minWeight>1) {
+ U32 const length = 1U << ((targetLog - consumedBits) & 0x1F /* quiet static-analyzer */);
+ U64 const DEltX2 = HUF_buildDEltX2U64(baseSeq, consumedBits, /* baseSeq */ 0, /* level */ 1);
+ int const skipSize = rankVal[minWeight];
+ assert(length > 1);
+ assert((U32)skipSize < length);
+ switch (length) {
+ case 2:
+ assert(skipSize == 1);
+ ZSTD_memcpy(DTable, &DEltX2, sizeof(DEltX2));
+ break;
+ case 4:
+ assert(skipSize <= 4);
+ ZSTD_memcpy(DTable + 0, &DEltX2, sizeof(DEltX2));
+ ZSTD_memcpy(DTable + 2, &DEltX2, sizeof(DEltX2));
+ break;
+ default:
+ {
+ int i;
+ for (i = 0; i < skipSize; i += 8) {
+ ZSTD_memcpy(DTable + i + 0, &DEltX2, sizeof(DEltX2));
+ ZSTD_memcpy(DTable + i + 2, &DEltX2, sizeof(DEltX2));
+ ZSTD_memcpy(DTable + i + 4, &DEltX2, sizeof(DEltX2));
+ ZSTD_memcpy(DTable + i + 6, &DEltX2, sizeof(DEltX2));
+ }
+ }
+ }
+ }
- rankVal[weight] += length;
- } }
+ /* Fill each of the second level symbols by weight. */
+ {
+ int w;
+ for (w = minWeight; w < maxWeight1; ++w) {
+ int const begin = rankStart[w];
+ int const end = rankStart[w+1];
+ U32 const nbBits = nbBitsBaseline - w;
+ U32 const totalBits = nbBits + consumedBits;
+ HUF_fillDTableX2ForWeight(
+ DTable + rankVal[w],
+ sortedSymbols + begin, sortedSymbols + end,
+ totalBits, targetLog,
+ baseSeq, /* level */ 2);
+ }
+ }
}
-
static void HUF_fillDTableX2(HUF_DEltX2* DTable, const U32 targetLog,
- const sortedSymbol_t* sortedList, const U32 sortedListSize,
+ const sortedSymbol_t* sortedList,
const U32* rankStart, rankVal_t rankValOrigin, const U32 maxWeight,
- const U32 nbBitsBaseline, U32* wksp, size_t wkspSize)
+ const U32 nbBitsBaseline)
{
- U32* rankVal = wksp;
+ U32* const rankVal = rankValOrigin[0];
const int scaleLog = nbBitsBaseline - targetLog; /* note : targetLog >= srcLog, hence scaleLog <= 1 */
const U32 minBits = nbBitsBaseline - maxWeight;
- U32 s;
-
- 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++) {
- const U16 symbol = sortedList[s].symbol;
- const U32 weight = sortedList[s].weight;
- const U32 nbBits = nbBitsBaseline - weight;
- const U32 start = rankVal[weight];
- const U32 length = 1 << (targetLog-nbBits);
-
- if (targetLog-nbBits >= minBits) { /* enough room for a second symbol */
- U32 sortedRank;
+ int w;
+ int const wEnd = (int)maxWeight + 1;
+
+ /* Fill DTable in order of weight. */
+ for (w = 1; w < wEnd; ++w) {
+ int const begin = (int)rankStart[w];
+ int const end = (int)rankStart[w+1];
+ U32 const nbBits = nbBitsBaseline - w;
+
+ if (targetLog-nbBits >= minBits) {
+ /* Enough room for a second symbol. */
+ int start = rankVal[w];
+ U32 const length = 1U << ((targetLog - nbBits) & 0x1F /* quiet static-analyzer */);
int minWeight = nbBits + scaleLog;
+ int s;
if (minWeight < 1) minWeight = 1;
- sortedRank = rankStart[minWeight];
- HUF_fillDTableX2Level2(DTable+start, targetLog-nbBits, nbBits,
- rankValOrigin[nbBits], minWeight,
- sortedList+sortedRank, sortedListSize-sortedRank,
- nbBitsBaseline, symbol, wksp, wkspSize);
+ /* Fill the DTable for every symbol of weight w.
+ * These symbols get at least 1 second symbol.
+ */
+ for (s = begin; s != end; ++s) {
+ HUF_fillDTableX2Level2(
+ DTable + start, targetLog, nbBits,
+ rankValOrigin[nbBits], minWeight, wEnd,
+ sortedList, rankStart,
+ nbBitsBaseline, sortedList[s].symbol);
+ start += length;
+ }
} else {
- HUF_DEltX2 DElt;
- MEM_writeLE16(&(DElt.sequence), symbol);
- DElt.nbBits = (BYTE)(nbBits);
- DElt.length = 1;
- { U32 const end = start + length;
- U32 u;
- for (u = start; u < end; u++) DTable[u] = DElt;
- } }
- rankVal[weight] += length;
+ /* Only a single symbol. */
+ HUF_fillDTableX2ForWeight(
+ DTable + rankVal[w],
+ sortedList + begin, sortedList + end,
+ nbBits, targetLog,
+ /* baseSeq */ 0, /* level */ 1);
+ }
}
}
typedef struct {
rankValCol_t rankVal[HUF_TABLELOG_MAX];
U32 rankStats[HUF_TABLELOG_MAX + 1];
- U32 rankStart0[HUF_TABLELOG_MAX + 2];
+ U32 rankStart0[HUF_TABLELOG_MAX + 3];
sortedSymbol_t sortedSymbol[HUF_SYMBOLVALUE_MAX + 1];
BYTE weightList[HUF_SYMBOLVALUE_MAX + 1];
U32 calleeWksp[HUF_READ_STATS_WORKSPACE_SIZE_U32];
@@ -627,9 +1046,16 @@ size_t HUF_readDTableX2_wksp(HUF_DTable* DTable,
const void* src, size_t srcSize,
void* workSpace, size_t wkspSize)
{
- U32 tableLog, maxW, sizeOfSort, nbSymbols;
+ return HUF_readDTableX2_wksp_bmi2(DTable, src, srcSize, workSpace, wkspSize, /* bmi2 */ 0);
+}
+
+size_t HUF_readDTableX2_wksp_bmi2(HUF_DTable* DTable,
+ const void* src, size_t srcSize,
+ void* workSpace, size_t wkspSize, int bmi2)
+{
+ U32 tableLog, maxW, nbSymbols;
DTableDesc dtd = HUF_getDTableDesc(DTable);
- U32 const maxTableLog = dtd.maxTableLog;
+ U32 maxTableLog = dtd.maxTableLog;
size_t iSize;
void* dtPtr = DTable+1; /* force compiler to avoid strict-aliasing */
HUF_DEltX2* const dt = (HUF_DEltX2*)dtPtr;
@@ -647,11 +1073,12 @@ size_t HUF_readDTableX2_wksp(HUF_DTable* DTable,
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_wksp(wksp->weightList, HUF_SYMBOLVALUE_MAX + 1, wksp->rankStats, &nbSymbols, &tableLog, src, srcSize, wksp->calleeWksp, sizeof(wksp->calleeWksp), /* bmi2 */ 0);
+ iSize = HUF_readStats_wksp(wksp->weightList, HUF_SYMBOLVALUE_MAX + 1, wksp->rankStats, &nbSymbols, &tableLog, src, srcSize, wksp->calleeWksp, sizeof(wksp->calleeWksp), bmi2);
if (HUF_isError(iSize)) return iSize;
/* check result */
if (tableLog > maxTableLog) return ERROR(tableLog_tooLarge); /* DTable can't fit code depth */
+ if (tableLog <= HUF_DECODER_FAST_TABLELOG && maxTableLog > HUF_DECODER_FAST_TABLELOG) maxTableLog = HUF_DECODER_FAST_TABLELOG;
/* find maxWeight */
for (maxW = tableLog; wksp->rankStats[maxW]==0; maxW--) {} /* necessarily finds a solution before 0 */
@@ -664,7 +1091,7 @@ size_t HUF_readDTableX2_wksp(HUF_DTable* DTable,
rankStart[w] = curr;
}
rankStart[0] = nextRankStart; /* put all 0w symbols at the end of sorted list*/
- sizeOfSort = nextRankStart;
+ rankStart[maxW+1] = nextRankStart;
}
/* sort symbols by weight */
@@ -673,7 +1100,6 @@ size_t HUF_readDTableX2_wksp(HUF_DTable* DTable,
U32 const w = wksp->weightList[s];
U32 const r = rankStart[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) */
}
@@ -698,10 +1124,9 @@ size_t HUF_readDTableX2_wksp(HUF_DTable* DTable,
} } } }
HUF_fillDTableX2(dt, maxTableLog,
- wksp->sortedSymbol, sizeOfSort,
+ wksp->sortedSymbol,
wksp->rankStart0, wksp->rankVal, maxW,
- tableLog+1,
- wksp->calleeWksp, sizeof(wksp->calleeWksp) / sizeof(U32));
+ tableLog+1);
dtd.tableLog = (BYTE)maxTableLog;
dtd.tableType = 1;
@@ -714,7 +1139,7 @@ FORCE_INLINE_TEMPLATE U32
HUF_decodeSymbolX2(void* op, BIT_DStream_t* DStream, const HUF_DEltX2* dt, const U32 dtLog)
{
size_t const val = BIT_lookBitsFast(DStream, dtLog); /* note : dtLog >= 1 */
- ZSTD_memcpy(op, dt+val, 2);
+ ZSTD_memcpy(op, &dt[val].sequence, 2);
BIT_skipBits(DStream, dt[val].nbBits);
return dt[val].length;
}
@@ -723,15 +1148,17 @@ FORCE_INLINE_TEMPLATE U32
HUF_decodeLastSymbolX2(void* op, BIT_DStream_t* DStream, const HUF_DEltX2* dt, const U32 dtLog)
{
size_t const val = BIT_lookBitsFast(DStream, dtLog); /* note : dtLog >= 1 */
- ZSTD_memcpy(op, dt+val, 1);
- if (dt[val].length==1) BIT_skipBits(DStream, dt[val].nbBits);
- else {
+ ZSTD_memcpy(op, &dt[val].sequence, 1);
+ if (dt[val].length==1) {
+ BIT_skipBits(DStream, dt[val].nbBits);
+ } else {
if (DStream->bitsConsumed < (sizeof(DStream->bitContainer)*8)) {
BIT_skipBits(DStream, dt[val].nbBits);
if (DStream->bitsConsumed > (sizeof(DStream->bitContainer)*8))
/* ugly hack; works only because it's the last symbol. Note : can't easily extract nbBits from just this symbol */
DStream->bitsConsumed = (sizeof(DStream->bitContainer)*8);
- } }
+ }
+ }
return 1;
}
@@ -753,19 +1180,37 @@ HUF_decodeStreamX2(BYTE* p, BIT_DStream_t* bitDPtr, BYTE* const pEnd,
BYTE* const pStart = p;
/* up to 8 symbols at a time */
- while ((BIT_reloadDStream(bitDPtr) == BIT_DStream_unfinished) & (p < pEnd-(sizeof(bitDPtr->bitContainer)-1))) {
- HUF_DECODE_SYMBOLX2_2(p, bitDPtr);
- HUF_DECODE_SYMBOLX2_1(p, bitDPtr);
- HUF_DECODE_SYMBOLX2_2(p, bitDPtr);
- HUF_DECODE_SYMBOLX2_0(p, bitDPtr);
+ if ((size_t)(pEnd - p) >= sizeof(bitDPtr->bitContainer)) {
+ if (dtLog <= 11 && MEM_64bits()) {
+ /* up to 10 symbols at a time */
+ while ((BIT_reloadDStream(bitDPtr) == BIT_DStream_unfinished) & (p < pEnd-9)) {
+ HUF_DECODE_SYMBOLX2_0(p, bitDPtr);
+ HUF_DECODE_SYMBOLX2_0(p, bitDPtr);
+ HUF_DECODE_SYMBOLX2_0(p, bitDPtr);
+ HUF_DECODE_SYMBOLX2_0(p, bitDPtr);
+ HUF_DECODE_SYMBOLX2_0(p, bitDPtr);
+ }
+ } else {
+ /* up to 8 symbols at a time */
+ while ((BIT_reloadDStream(bitDPtr) == BIT_DStream_unfinished) & (p < pEnd-(sizeof(bitDPtr->bitContainer)-1))) {
+ HUF_DECODE_SYMBOLX2_2(p, bitDPtr);
+ HUF_DECODE_SYMBOLX2_1(p, bitDPtr);
+ HUF_DECODE_SYMBOLX2_2(p, bitDPtr);
+ HUF_DECODE_SYMBOLX2_0(p, bitDPtr);
+ }
+ }
+ } else {
+ BIT_reloadDStream(bitDPtr);
}
/* closer to end : up to 2 symbols at a time */
- while ((BIT_reloadDStream(bitDPtr) == BIT_DStream_unfinished) & (p <= pEnd-2))
- HUF_DECODE_SYMBOLX2_0(p, bitDPtr);
+ if ((size_t)(pEnd - p) >= 2) {
+ while ((BIT_reloadDStream(bitDPtr) == BIT_DStream_unfinished) & (p <= pEnd-2))
+ HUF_DECODE_SYMBOLX2_0(p, bitDPtr);
- while (p <= pEnd-2)
- HUF_DECODE_SYMBOLX2_0(p, bitDPtr); /* no need to reload : reached the end of DStream */
+ while (p <= pEnd-2)
+ HUF_DECODE_SYMBOLX2_0(p, bitDPtr); /* no need to reload : reached the end of DStream */
+ }
if (p < pEnd)
p += HUF_decodeLastSymbolX2(p, bitDPtr, dt, dtLog);
@@ -799,7 +1244,6 @@ HUF_decompress1X2_usingDTable_internal_body(
/* decoded size */
return dstSize;
}
-
FORCE_INLINE_TEMPLATE size_t
HUF_decompress4X2_usingDTable_internal_body(
void* dst, size_t dstSize,
@@ -841,57 +1285,60 @@ HUF_decompress4X2_usingDTable_internal_body(
U32 const dtLog = dtd.tableLog;
if (length4 > cSrcSize) return ERROR(corruption_detected); /* overflow */
+ if (opStart4 > oend) return ERROR(corruption_detected); /* overflow */
CHECK_F( BIT_initDStream(&bitD1, istart1, length1) );
CHECK_F( BIT_initDStream(&bitD2, istart2, length2) );
CHECK_F( BIT_initDStream(&bitD3, istart3, length3) );
CHECK_F( BIT_initDStream(&bitD4, istart4, length4) );
/* 16-32 symbols per loop (4-8 symbols per stream) */
- for ( ; (endSignal) & (op4 < olimit); ) {
+ if ((size_t)(oend - op4) >= sizeof(size_t)) {
+ for ( ; (endSignal) & (op4 < olimit); ) {
#if defined(__clang__) && (defined(__x86_64__) || defined(__i386__))
- HUF_DECODE_SYMBOLX2_2(op1, &bitD1);
- HUF_DECODE_SYMBOLX2_1(op1, &bitD1);
- HUF_DECODE_SYMBOLX2_2(op1, &bitD1);
- HUF_DECODE_SYMBOLX2_0(op1, &bitD1);
- HUF_DECODE_SYMBOLX2_2(op2, &bitD2);
- HUF_DECODE_SYMBOLX2_1(op2, &bitD2);
- HUF_DECODE_SYMBOLX2_2(op2, &bitD2);
- HUF_DECODE_SYMBOLX2_0(op2, &bitD2);
- endSignal &= BIT_reloadDStreamFast(&bitD1) == BIT_DStream_unfinished;
- endSignal &= BIT_reloadDStreamFast(&bitD2) == BIT_DStream_unfinished;
- HUF_DECODE_SYMBOLX2_2(op3, &bitD3);
- HUF_DECODE_SYMBOLX2_1(op3, &bitD3);
- HUF_DECODE_SYMBOLX2_2(op3, &bitD3);
- HUF_DECODE_SYMBOLX2_0(op3, &bitD3);
- HUF_DECODE_SYMBOLX2_2(op4, &bitD4);
- HUF_DECODE_SYMBOLX2_1(op4, &bitD4);
- HUF_DECODE_SYMBOLX2_2(op4, &bitD4);
- HUF_DECODE_SYMBOLX2_0(op4, &bitD4);
- endSignal &= BIT_reloadDStreamFast(&bitD3) == BIT_DStream_unfinished;
- endSignal &= BIT_reloadDStreamFast(&bitD4) == BIT_DStream_unfinished;
+ HUF_DECODE_SYMBOLX2_2(op1, &bitD1);
+ HUF_DECODE_SYMBOLX2_1(op1, &bitD1);
+ HUF_DECODE_SYMBOLX2_2(op1, &bitD1);
+ HUF_DECODE_SYMBOLX2_0(op1, &bitD1);
+ HUF_DECODE_SYMBOLX2_2(op2, &bitD2);
+ HUF_DECODE_SYMBOLX2_1(op2, &bitD2);
+ HUF_DECODE_SYMBOLX2_2(op2, &bitD2);
+ HUF_DECODE_SYMBOLX2_0(op2, &bitD2);
+ endSignal &= BIT_reloadDStreamFast(&bitD1) == BIT_DStream_unfinished;
+ endSignal &= BIT_reloadDStreamFast(&bitD2) == BIT_DStream_unfinished;
+ HUF_DECODE_SYMBOLX2_2(op3, &bitD3);
+ HUF_DECODE_SYMBOLX2_1(op3, &bitD3);
+ HUF_DECODE_SYMBOLX2_2(op3, &bitD3);
+ HUF_DECODE_SYMBOLX2_0(op3, &bitD3);
+ HUF_DECODE_SYMBOLX2_2(op4, &bitD4);
+ HUF_DECODE_SYMBOLX2_1(op4, &bitD4);
+ HUF_DECODE_SYMBOLX2_2(op4, &bitD4);
+ HUF_DECODE_SYMBOLX2_0(op4, &bitD4);
+ endSignal &= BIT_reloadDStreamFast(&bitD3) == BIT_DStream_unfinished;
+ endSignal &= BIT_reloadDStreamFast(&bitD4) == BIT_DStream_unfinished;
#else
- HUF_DECODE_SYMBOLX2_2(op1, &bitD1);
- HUF_DECODE_SYMBOLX2_2(op2, &bitD2);
- HUF_DECODE_SYMBOLX2_2(op3, &bitD3);
- HUF_DECODE_SYMBOLX2_2(op4, &bitD4);
- HUF_DECODE_SYMBOLX2_1(op1, &bitD1);
- HUF_DECODE_SYMBOLX2_1(op2, &bitD2);
- HUF_DECODE_SYMBOLX2_1(op3, &bitD3);
- HUF_DECODE_SYMBOLX2_1(op4, &bitD4);
- HUF_DECODE_SYMBOLX2_2(op1, &bitD1);
- HUF_DECODE_SYMBOLX2_2(op2, &bitD2);
- HUF_DECODE_SYMBOLX2_2(op3, &bitD3);
- HUF_DECODE_SYMBOLX2_2(op4, &bitD4);
- HUF_DECODE_SYMBOLX2_0(op1, &bitD1);
- HUF_DECODE_SYMBOLX2_0(op2, &bitD2);
- HUF_DECODE_SYMBOLX2_0(op3, &bitD3);
- HUF_DECODE_SYMBOLX2_0(op4, &bitD4);
- endSignal = (U32)LIKELY(
- (BIT_reloadDStreamFast(&bitD1) == BIT_DStream_unfinished)
- & (BIT_reloadDStreamFast(&bitD2) == BIT_DStream_unfinished)
- & (BIT_reloadDStreamFast(&bitD3) == BIT_DStream_unfinished)
- & (BIT_reloadDStreamFast(&bitD4) == BIT_DStream_unfinished));
+ HUF_DECODE_SYMBOLX2_2(op1, &bitD1);
+ HUF_DECODE_SYMBOLX2_2(op2, &bitD2);
+ HUF_DECODE_SYMBOLX2_2(op3, &bitD3);
+ HUF_DECODE_SYMBOLX2_2(op4, &bitD4);
+ HUF_DECODE_SYMBOLX2_1(op1, &bitD1);
+ HUF_DECODE_SYMBOLX2_1(op2, &bitD2);
+ HUF_DECODE_SYMBOLX2_1(op3, &bitD3);
+ HUF_DECODE_SYMBOLX2_1(op4, &bitD4);
+ HUF_DECODE_SYMBOLX2_2(op1, &bitD1);
+ HUF_DECODE_SYMBOLX2_2(op2, &bitD2);
+ HUF_DECODE_SYMBOLX2_2(op3, &bitD3);
+ HUF_DECODE_SYMBOLX2_2(op4, &bitD4);
+ HUF_DECODE_SYMBOLX2_0(op1, &bitD1);
+ HUF_DECODE_SYMBOLX2_0(op2, &bitD2);
+ HUF_DECODE_SYMBOLX2_0(op3, &bitD3);
+ HUF_DECODE_SYMBOLX2_0(op4, &bitD4);
+ endSignal = (U32)LIKELY((U32)
+ (BIT_reloadDStreamFast(&bitD1) == BIT_DStream_unfinished)
+ & (BIT_reloadDStreamFast(&bitD2) == BIT_DStream_unfinished)
+ & (BIT_reloadDStreamFast(&bitD3) == BIT_DStream_unfinished)
+ & (BIT_reloadDStreamFast(&bitD4) == BIT_DStream_unfinished));
#endif
+ }
}
/* check corruption */
@@ -915,8 +1362,99 @@ HUF_decompress4X2_usingDTable_internal_body(
}
}
+#if HUF_NEED_BMI2_FUNCTION
+static BMI2_TARGET_ATTRIBUTE
+size_t HUF_decompress4X2_usingDTable_internal_bmi2(void* dst, size_t dstSize, void const* cSrc,
+ size_t cSrcSize, HUF_DTable const* DTable) {
+ return HUF_decompress4X2_usingDTable_internal_body(dst, dstSize, cSrc, cSrcSize, DTable);
+}
+#endif
+
+#if HUF_NEED_DEFAULT_FUNCTION
+static
+size_t HUF_decompress4X2_usingDTable_internal_default(void* dst, size_t dstSize, void const* cSrc,
+ size_t cSrcSize, HUF_DTable const* DTable) {
+ return HUF_decompress4X2_usingDTable_internal_body(dst, dstSize, cSrc, cSrcSize, DTable);
+}
+#endif
+
+#if ZSTD_ENABLE_ASM_X86_64_BMI2
+
+HUF_ASM_DECL void HUF_decompress4X2_usingDTable_internal_bmi2_asm_loop(HUF_DecompressAsmArgs* args) ZSTDLIB_HIDDEN;
+
+static HUF_ASM_X86_64_BMI2_ATTRS size_t
+HUF_decompress4X2_usingDTable_internal_bmi2_asm(
+ void* dst, size_t dstSize,
+ const void* cSrc, size_t cSrcSize,
+ const HUF_DTable* DTable) {
+ void const* dt = DTable + 1;
+ const BYTE* const iend = (const BYTE*)cSrc + 6;
+ BYTE* const oend = (BYTE*)dst + dstSize;
+ HUF_DecompressAsmArgs args;
+ {
+ size_t const ret = HUF_DecompressAsmArgs_init(&args, dst, dstSize, cSrc, cSrcSize, DTable);
+ FORWARD_IF_ERROR(ret, "Failed to init asm args");
+ if (ret != 0)
+ return HUF_decompress4X2_usingDTable_internal_bmi2(dst, dstSize, cSrc, cSrcSize, DTable);
+ }
+
+ assert(args.ip[0] >= args.ilimit);
+ HUF_decompress4X2_usingDTable_internal_bmi2_asm_loop(&args);
+
+ /* note : op4 already verified within main loop */
+ assert(args.ip[0] >= iend);
+ assert(args.ip[1] >= iend);
+ assert(args.ip[2] >= iend);
+ assert(args.ip[3] >= iend);
+ assert(args.op[3] <= oend);
+ (void)iend;
+
+ /* finish bitStreams one by one */
+ {
+ size_t const segmentSize = (dstSize+3) / 4;
+ BYTE* segmentEnd = (BYTE*)dst;
+ int i;
+ for (i = 0; i < 4; ++i) {
+ BIT_DStream_t bit;
+ if (segmentSize <= (size_t)(oend - segmentEnd))
+ segmentEnd += segmentSize;
+ else
+ segmentEnd = oend;
+ FORWARD_IF_ERROR(HUF_initRemainingDStream(&bit, &args, i, segmentEnd), "corruption");
+ args.op[i] += HUF_decodeStreamX2(args.op[i], &bit, segmentEnd, (HUF_DEltX2 const*)dt, HUF_DECODER_FAST_TABLELOG);
+ if (args.op[i] != segmentEnd)
+ return ERROR(corruption_detected);
+ }
+ }
+
+ /* decoded size */
+ return dstSize;
+}
+#endif /* ZSTD_ENABLE_ASM_X86_64_BMI2 */
+
+static size_t HUF_decompress4X2_usingDTable_internal(void* dst, size_t dstSize, void const* cSrc,
+ size_t cSrcSize, HUF_DTable const* DTable, int bmi2)
+{
+#if DYNAMIC_BMI2
+ if (bmi2) {
+# if ZSTD_ENABLE_ASM_X86_64_BMI2
+ return HUF_decompress4X2_usingDTable_internal_bmi2_asm(dst, dstSize, cSrc, cSrcSize, DTable);
+# else
+ return HUF_decompress4X2_usingDTable_internal_bmi2(dst, dstSize, cSrc, cSrcSize, DTable);
+# endif
+ }
+#else
+ (void)bmi2;
+#endif
+
+#if ZSTD_ENABLE_ASM_X86_64_BMI2 && defined(__BMI2__)
+ return HUF_decompress4X2_usingDTable_internal_bmi2_asm(dst, dstSize, cSrc, cSrcSize, DTable);
+#else
+ return HUF_decompress4X2_usingDTable_internal_default(dst, dstSize, cSrc, cSrcSize, DTable);
+#endif
+}
+
HUF_DGEN(HUF_decompress1X2_usingDTable_internal)
-HUF_DGEN(HUF_decompress4X2_usingDTable_internal)
size_t HUF_decompress1X2_usingDTable(
void* dst, size_t dstSize,
@@ -1025,25 +1563,25 @@ size_t HUF_decompress4X_usingDTable(void* dst, size_t maxDstSize,
#if !defined(HUF_FORCE_DECOMPRESS_X1) && !defined(HUF_FORCE_DECOMPRESS_X2)
typedef struct { U32 tableTime; U32 decode256Time; } algo_time_t;
-static const algo_time_t algoTime[16 /* Quantization */][3 /* single, double, quad */] =
+static const algo_time_t algoTime[16 /* Quantization */][2 /* single, double */] =
{
/* single, double, quad */
- {{0,0}, {1,1}, {2,2}}, /* Q==0 : impossible */
- {{0,0}, {1,1}, {2,2}}, /* Q==1 : impossible */
- {{ 38,130}, {1313, 74}, {2151, 38}}, /* Q == 2 : 12-18% */
- {{ 448,128}, {1353, 74}, {2238, 41}}, /* Q == 3 : 18-25% */
- {{ 556,128}, {1353, 74}, {2238, 47}}, /* Q == 4 : 25-32% */
- {{ 714,128}, {1418, 74}, {2436, 53}}, /* Q == 5 : 32-38% */
- {{ 883,128}, {1437, 74}, {2464, 61}}, /* Q == 6 : 38-44% */
- {{ 897,128}, {1515, 75}, {2622, 68}}, /* Q == 7 : 44-50% */
- {{ 926,128}, {1613, 75}, {2730, 75}}, /* Q == 8 : 50-56% */
- {{ 947,128}, {1729, 77}, {3359, 77}}, /* Q == 9 : 56-62% */
- {{1107,128}, {2083, 81}, {4006, 84}}, /* Q ==10 : 62-69% */
- {{1177,128}, {2379, 87}, {4785, 88}}, /* Q ==11 : 69-75% */
- {{1242,128}, {2415, 93}, {5155, 84}}, /* Q ==12 : 75-81% */
- {{1349,128}, {2644,106}, {5260,106}}, /* Q ==13 : 81-87% */
- {{1455,128}, {2422,124}, {4174,124}}, /* Q ==14 : 87-93% */
- {{ 722,128}, {1891,145}, {1936,146}}, /* Q ==15 : 93-99% */
+ {{0,0}, {1,1}}, /* Q==0 : impossible */
+ {{0,0}, {1,1}}, /* Q==1 : impossible */
+ {{ 150,216}, { 381,119}}, /* Q == 2 : 12-18% */
+ {{ 170,205}, { 514,112}}, /* Q == 3 : 18-25% */
+ {{ 177,199}, { 539,110}}, /* Q == 4 : 25-32% */
+ {{ 197,194}, { 644,107}}, /* Q == 5 : 32-38% */
+ {{ 221,192}, { 735,107}}, /* Q == 6 : 38-44% */
+ {{ 256,189}, { 881,106}}, /* Q == 7 : 44-50% */
+ {{ 359,188}, {1167,109}}, /* Q == 8 : 50-56% */
+ {{ 582,187}, {1570,114}}, /* Q == 9 : 56-62% */
+ {{ 688,187}, {1712,122}}, /* Q ==10 : 62-69% */
+ {{ 825,186}, {1965,136}}, /* Q ==11 : 69-75% */
+ {{ 976,185}, {2131,150}}, /* Q ==12 : 75-81% */
+ {{1180,186}, {2070,175}}, /* Q ==13 : 81-87% */
+ {{1377,185}, {1731,202}}, /* Q ==14 : 87-93% */
+ {{1412,185}, {1695,202}}, /* Q ==15 : 93-99% */
};
#endif
@@ -1070,7 +1608,7 @@ U32 HUF_selectDecoder (size_t dstSize, size_t cSrcSize)
U32 const D256 = (U32)(dstSize >> 8);
U32 const DTime0 = algoTime[Q][0].tableTime + (algoTime[Q][0].decode256Time * D256);
U32 DTime1 = algoTime[Q][1].tableTime + (algoTime[Q][1].decode256Time * D256);
- DTime1 += DTime1 >> 3; /* advantage to algorithm using less memory, to reduce cache eviction */
+ DTime1 += DTime1 >> 5; /* small advantage to algorithm using less memory, to reduce cache eviction */
return DTime1 < DTime0;
}
#endif
diff --git a/thirdparty/zstd/decompress/huf_decompress_amd64.S b/thirdparty/zstd/decompress/huf_decompress_amd64.S
new file mode 100644
index 0000000000..49589cb611
--- /dev/null
+++ b/thirdparty/zstd/decompress/huf_decompress_amd64.S
@@ -0,0 +1,585 @@
+/*
+ * 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.
+ */
+
+#include "../common/portability_macros.h"
+
+/* Stack marking
+ * ref: https://wiki.gentoo.org/wiki/Hardened/GNU_stack_quickstart
+ */
+#if defined(__ELF__) && defined(__GNUC__)
+.section .note.GNU-stack,"",%progbits
+#endif
+
+#if ZSTD_ENABLE_ASM_X86_64_BMI2
+
+/* Calling convention:
+ *
+ * %rdi contains the first argument: HUF_DecompressAsmArgs*.
+ * %rbp isn't maintained (no frame pointer).
+ * %rsp contains the stack pointer that grows down.
+ * No red-zone is assumed, only addresses >= %rsp are used.
+ * All register contents are preserved.
+ *
+ * TODO: Support Windows calling convention.
+ */
+
+ZSTD_HIDE_ASM_FUNCTION(HUF_decompress4X1_usingDTable_internal_bmi2_asm_loop)
+ZSTD_HIDE_ASM_FUNCTION(HUF_decompress4X2_usingDTable_internal_bmi2_asm_loop)
+ZSTD_HIDE_ASM_FUNCTION(_HUF_decompress4X2_usingDTable_internal_bmi2_asm_loop)
+ZSTD_HIDE_ASM_FUNCTION(_HUF_decompress4X1_usingDTable_internal_bmi2_asm_loop)
+.global HUF_decompress4X1_usingDTable_internal_bmi2_asm_loop
+.global HUF_decompress4X2_usingDTable_internal_bmi2_asm_loop
+.global _HUF_decompress4X1_usingDTable_internal_bmi2_asm_loop
+.global _HUF_decompress4X2_usingDTable_internal_bmi2_asm_loop
+.text
+
+/* Sets up register mappings for clarity.
+ * op[], bits[], dtable & ip[0] each get their own register.
+ * ip[1,2,3] & olimit alias var[].
+ * %rax is a scratch register.
+ */
+
+#define op0 rsi
+#define op1 rbx
+#define op2 rcx
+#define op3 rdi
+
+#define ip0 r8
+#define ip1 r9
+#define ip2 r10
+#define ip3 r11
+
+#define bits0 rbp
+#define bits1 rdx
+#define bits2 r12
+#define bits3 r13
+#define dtable r14
+#define olimit r15
+
+/* var[] aliases ip[1,2,3] & olimit
+ * ip[1,2,3] are saved every iteration.
+ * olimit is only used in compute_olimit.
+ */
+#define var0 r15
+#define var1 r9
+#define var2 r10
+#define var3 r11
+
+/* 32-bit var registers */
+#define vard0 r15d
+#define vard1 r9d
+#define vard2 r10d
+#define vard3 r11d
+
+/* Calls X(N) for each stream 0, 1, 2, 3. */
+#define FOR_EACH_STREAM(X) \
+ X(0); \
+ X(1); \
+ X(2); \
+ X(3)
+
+/* Calls X(N, idx) for each stream 0, 1, 2, 3. */
+#define FOR_EACH_STREAM_WITH_INDEX(X, idx) \
+ X(0, idx); \
+ X(1, idx); \
+ X(2, idx); \
+ X(3, idx)
+
+/* Define both _HUF_* & HUF_* symbols because MacOS
+ * C symbols are prefixed with '_' & Linux symbols aren't.
+ */
+_HUF_decompress4X1_usingDTable_internal_bmi2_asm_loop:
+HUF_decompress4X1_usingDTable_internal_bmi2_asm_loop:
+ /* Save all registers - even if they are callee saved for simplicity. */
+ push %rax
+ push %rbx
+ push %rcx
+ push %rdx
+ push %rbp
+ push %rsi
+ push %rdi
+ push %r8
+ push %r9
+ push %r10
+ push %r11
+ push %r12
+ push %r13
+ push %r14
+ push %r15
+
+ /* Read HUF_DecompressAsmArgs* args from %rax */
+ movq %rdi, %rax
+ movq 0(%rax), %ip0
+ movq 8(%rax), %ip1
+ movq 16(%rax), %ip2
+ movq 24(%rax), %ip3
+ movq 32(%rax), %op0
+ movq 40(%rax), %op1
+ movq 48(%rax), %op2
+ movq 56(%rax), %op3
+ movq 64(%rax), %bits0
+ movq 72(%rax), %bits1
+ movq 80(%rax), %bits2
+ movq 88(%rax), %bits3
+ movq 96(%rax), %dtable
+ push %rax /* argument */
+ push 104(%rax) /* ilimit */
+ push 112(%rax) /* oend */
+ push %olimit /* olimit space */
+
+ subq $24, %rsp
+
+.L_4X1_compute_olimit:
+ /* Computes how many iterations we can do safely
+ * %r15, %rax may be clobbered
+ * rbx, rdx must be saved
+ * op3 & ip0 mustn't be clobbered
+ */
+ movq %rbx, 0(%rsp)
+ movq %rdx, 8(%rsp)
+
+ movq 32(%rsp), %rax /* rax = oend */
+ subq %op3, %rax /* rax = oend - op3 */
+
+ /* r15 = (oend - op3) / 5 */
+ movabsq $-3689348814741910323, %rdx
+ mulq %rdx
+ movq %rdx, %r15
+ shrq $2, %r15
+
+ movq %ip0, %rax /* rax = ip0 */
+ movq 40(%rsp), %rdx /* rdx = ilimit */
+ subq %rdx, %rax /* rax = ip0 - ilimit */
+ movq %rax, %rbx /* rbx = ip0 - ilimit */
+
+ /* rdx = (ip0 - ilimit) / 7 */
+ movabsq $2635249153387078803, %rdx
+ mulq %rdx
+ subq %rdx, %rbx
+ shrq %rbx
+ addq %rbx, %rdx
+ shrq $2, %rdx
+
+ /* r15 = min(%rdx, %r15) */
+ cmpq %rdx, %r15
+ cmova %rdx, %r15
+
+ /* r15 = r15 * 5 */
+ leaq (%r15, %r15, 4), %r15
+
+ /* olimit = op3 + r15 */
+ addq %op3, %olimit
+
+ movq 8(%rsp), %rdx
+ movq 0(%rsp), %rbx
+
+ /* If (op3 + 20 > olimit) */
+ movq %op3, %rax /* rax = op3 */
+ addq $20, %rax /* rax = op3 + 20 */
+ cmpq %rax, %olimit /* op3 + 20 > olimit */
+ jb .L_4X1_exit
+
+ /* If (ip1 < ip0) go to exit */
+ cmpq %ip0, %ip1
+ jb .L_4X1_exit
+
+ /* If (ip2 < ip1) go to exit */
+ cmpq %ip1, %ip2
+ jb .L_4X1_exit
+
+ /* If (ip3 < ip2) go to exit */
+ cmpq %ip2, %ip3
+ jb .L_4X1_exit
+
+/* Reads top 11 bits from bits[n]
+ * Loads dt[bits[n]] into var[n]
+ */
+#define GET_NEXT_DELT(n) \
+ movq $53, %var##n; \
+ shrxq %var##n, %bits##n, %var##n; \
+ movzwl (%dtable,%var##n,2),%vard##n
+
+/* var[n] must contain the DTable entry computed with GET_NEXT_DELT
+ * Moves var[n] to %rax
+ * bits[n] <<= var[n] & 63
+ * op[n][idx] = %rax >> 8
+ * %ah is a way to access bits [8, 16) of %rax
+ */
+#define DECODE_FROM_DELT(n, idx) \
+ movq %var##n, %rax; \
+ shlxq %var##n, %bits##n, %bits##n; \
+ movb %ah, idx(%op##n)
+
+/* Assumes GET_NEXT_DELT has been called.
+ * Calls DECODE_FROM_DELT then GET_NEXT_DELT
+ */
+#define DECODE_AND_GET_NEXT(n, idx) \
+ DECODE_FROM_DELT(n, idx); \
+ GET_NEXT_DELT(n) \
+
+/* // ctz & nbBytes is stored in bits[n]
+ * // nbBits is stored in %rax
+ * ctz = CTZ[bits[n]]
+ * nbBits = ctz & 7
+ * nbBytes = ctz >> 3
+ * op[n] += 5
+ * ip[n] -= nbBytes
+ * // Note: x86-64 is little-endian ==> no bswap
+ * bits[n] = MEM_readST(ip[n]) | 1
+ * bits[n] <<= nbBits
+ */
+#define RELOAD_BITS(n) \
+ bsfq %bits##n, %bits##n; \
+ movq %bits##n, %rax; \
+ andq $7, %rax; \
+ shrq $3, %bits##n; \
+ leaq 5(%op##n), %op##n; \
+ subq %bits##n, %ip##n; \
+ movq (%ip##n), %bits##n; \
+ orq $1, %bits##n; \
+ shlx %rax, %bits##n, %bits##n
+
+ /* Store clobbered variables on the stack */
+ movq %olimit, 24(%rsp)
+ movq %ip1, 0(%rsp)
+ movq %ip2, 8(%rsp)
+ movq %ip3, 16(%rsp)
+
+ /* Call GET_NEXT_DELT for each stream */
+ FOR_EACH_STREAM(GET_NEXT_DELT)
+
+ .p2align 6
+
+.L_4X1_loop_body:
+ /* Decode 5 symbols in each of the 4 streams (20 total)
+ * Must have called GET_NEXT_DELT for each stream
+ */
+ FOR_EACH_STREAM_WITH_INDEX(DECODE_AND_GET_NEXT, 0)
+ FOR_EACH_STREAM_WITH_INDEX(DECODE_AND_GET_NEXT, 1)
+ FOR_EACH_STREAM_WITH_INDEX(DECODE_AND_GET_NEXT, 2)
+ FOR_EACH_STREAM_WITH_INDEX(DECODE_AND_GET_NEXT, 3)
+ FOR_EACH_STREAM_WITH_INDEX(DECODE_FROM_DELT, 4)
+
+ /* Load ip[1,2,3] from stack (var[] aliases them)
+ * ip[] is needed for RELOAD_BITS
+ * Each will be stored back to the stack after RELOAD
+ */
+ movq 0(%rsp), %ip1
+ movq 8(%rsp), %ip2
+ movq 16(%rsp), %ip3
+
+ /* Reload each stream & fetch the next table entry
+ * to prepare for the next iteration
+ */
+ RELOAD_BITS(0)
+ GET_NEXT_DELT(0)
+
+ RELOAD_BITS(1)
+ movq %ip1, 0(%rsp)
+ GET_NEXT_DELT(1)
+
+ RELOAD_BITS(2)
+ movq %ip2, 8(%rsp)
+ GET_NEXT_DELT(2)
+
+ RELOAD_BITS(3)
+ movq %ip3, 16(%rsp)
+ GET_NEXT_DELT(3)
+
+ /* If op3 < olimit: continue the loop */
+ cmp %op3, 24(%rsp)
+ ja .L_4X1_loop_body
+
+ /* Reload ip[1,2,3] from stack */
+ movq 0(%rsp), %ip1
+ movq 8(%rsp), %ip2
+ movq 16(%rsp), %ip3
+
+ /* Re-compute olimit */
+ jmp .L_4X1_compute_olimit
+
+#undef GET_NEXT_DELT
+#undef DECODE_FROM_DELT
+#undef DECODE
+#undef RELOAD_BITS
+.L_4X1_exit:
+ addq $24, %rsp
+
+ /* Restore stack (oend & olimit) */
+ pop %rax /* olimit */
+ pop %rax /* oend */
+ pop %rax /* ilimit */
+ pop %rax /* arg */
+
+ /* Save ip / op / bits */
+ movq %ip0, 0(%rax)
+ movq %ip1, 8(%rax)
+ movq %ip2, 16(%rax)
+ movq %ip3, 24(%rax)
+ movq %op0, 32(%rax)
+ movq %op1, 40(%rax)
+ movq %op2, 48(%rax)
+ movq %op3, 56(%rax)
+ movq %bits0, 64(%rax)
+ movq %bits1, 72(%rax)
+ movq %bits2, 80(%rax)
+ movq %bits3, 88(%rax)
+
+ /* Restore registers */
+ pop %r15
+ pop %r14
+ pop %r13
+ pop %r12
+ pop %r11
+ pop %r10
+ pop %r9
+ pop %r8
+ pop %rdi
+ pop %rsi
+ pop %rbp
+ pop %rdx
+ pop %rcx
+ pop %rbx
+ pop %rax
+ ret
+
+_HUF_decompress4X2_usingDTable_internal_bmi2_asm_loop:
+HUF_decompress4X2_usingDTable_internal_bmi2_asm_loop:
+ /* Save all registers - even if they are callee saved for simplicity. */
+ push %rax
+ push %rbx
+ push %rcx
+ push %rdx
+ push %rbp
+ push %rsi
+ push %rdi
+ push %r8
+ push %r9
+ push %r10
+ push %r11
+ push %r12
+ push %r13
+ push %r14
+ push %r15
+
+ movq %rdi, %rax
+ movq 0(%rax), %ip0
+ movq 8(%rax), %ip1
+ movq 16(%rax), %ip2
+ movq 24(%rax), %ip3
+ movq 32(%rax), %op0
+ movq 40(%rax), %op1
+ movq 48(%rax), %op2
+ movq 56(%rax), %op3
+ movq 64(%rax), %bits0
+ movq 72(%rax), %bits1
+ movq 80(%rax), %bits2
+ movq 88(%rax), %bits3
+ movq 96(%rax), %dtable
+ push %rax /* argument */
+ push %rax /* olimit */
+ push 104(%rax) /* ilimit */
+
+ movq 112(%rax), %rax
+ push %rax /* oend3 */
+
+ movq %op3, %rax
+ push %rax /* oend2 */
+
+ movq %op2, %rax
+ push %rax /* oend1 */
+
+ movq %op1, %rax
+ push %rax /* oend0 */
+
+ /* Scratch space */
+ subq $8, %rsp
+
+.L_4X2_compute_olimit:
+ /* Computes how many iterations we can do safely
+ * %r15, %rax may be clobbered
+ * rdx must be saved
+ * op[1,2,3,4] & ip0 mustn't be clobbered
+ */
+ movq %rdx, 0(%rsp)
+
+ /* We can consume up to 7 input bytes each iteration. */
+ movq %ip0, %rax /* rax = ip0 */
+ movq 40(%rsp), %rdx /* rdx = ilimit */
+ subq %rdx, %rax /* rax = ip0 - ilimit */
+ movq %rax, %r15 /* r15 = ip0 - ilimit */
+
+ /* rdx = rax / 7 */
+ movabsq $2635249153387078803, %rdx
+ mulq %rdx
+ subq %rdx, %r15
+ shrq %r15
+ addq %r15, %rdx
+ shrq $2, %rdx
+
+ /* r15 = (ip0 - ilimit) / 7 */
+ movq %rdx, %r15
+
+ movabsq $-3689348814741910323, %rdx
+ movq 8(%rsp), %rax /* rax = oend0 */
+ subq %op0, %rax /* rax = oend0 - op0 */
+ mulq %rdx
+ shrq $3, %rdx /* rdx = rax / 10 */
+
+ /* r15 = min(%rdx, %r15) */
+ cmpq %rdx, %r15
+ cmova %rdx, %r15
+
+ movabsq $-3689348814741910323, %rdx
+ movq 16(%rsp), %rax /* rax = oend1 */
+ subq %op1, %rax /* rax = oend1 - op1 */
+ mulq %rdx
+ shrq $3, %rdx /* rdx = rax / 10 */
+
+ /* r15 = min(%rdx, %r15) */
+ cmpq %rdx, %r15
+ cmova %rdx, %r15
+
+ movabsq $-3689348814741910323, %rdx
+ movq 24(%rsp), %rax /* rax = oend2 */
+ subq %op2, %rax /* rax = oend2 - op2 */
+ mulq %rdx
+ shrq $3, %rdx /* rdx = rax / 10 */
+
+ /* r15 = min(%rdx, %r15) */
+ cmpq %rdx, %r15
+ cmova %rdx, %r15
+
+ movabsq $-3689348814741910323, %rdx
+ movq 32(%rsp), %rax /* rax = oend3 */
+ subq %op3, %rax /* rax = oend3 - op3 */
+ mulq %rdx
+ shrq $3, %rdx /* rdx = rax / 10 */
+
+ /* r15 = min(%rdx, %r15) */
+ cmpq %rdx, %r15
+ cmova %rdx, %r15
+
+ /* olimit = op3 + 5 * r15 */
+ movq %r15, %rax
+ leaq (%op3, %rax, 4), %olimit
+ addq %rax, %olimit
+
+ movq 0(%rsp), %rdx
+
+ /* If (op3 + 10 > olimit) */
+ movq %op3, %rax /* rax = op3 */
+ addq $10, %rax /* rax = op3 + 10 */
+ cmpq %rax, %olimit /* op3 + 10 > olimit */
+ jb .L_4X2_exit
+
+ /* If (ip1 < ip0) go to exit */
+ cmpq %ip0, %ip1
+ jb .L_4X2_exit
+
+ /* If (ip2 < ip1) go to exit */
+ cmpq %ip1, %ip2
+ jb .L_4X2_exit
+
+ /* If (ip3 < ip2) go to exit */
+ cmpq %ip2, %ip3
+ jb .L_4X2_exit
+
+#define DECODE(n, idx) \
+ movq %bits##n, %rax; \
+ shrq $53, %rax; \
+ movzwl 0(%dtable,%rax,4),%r8d; \
+ movzbl 2(%dtable,%rax,4),%r15d; \
+ movzbl 3(%dtable,%rax,4),%eax; \
+ movw %r8w, (%op##n); \
+ shlxq %r15, %bits##n, %bits##n; \
+ addq %rax, %op##n
+
+#define RELOAD_BITS(n) \
+ bsfq %bits##n, %bits##n; \
+ movq %bits##n, %rax; \
+ shrq $3, %bits##n; \
+ andq $7, %rax; \
+ subq %bits##n, %ip##n; \
+ movq (%ip##n), %bits##n; \
+ orq $1, %bits##n; \
+ shlxq %rax, %bits##n, %bits##n
+
+
+ movq %olimit, 48(%rsp)
+
+ .p2align 6
+
+.L_4X2_loop_body:
+ /* We clobber r8, so store it on the stack */
+ movq %r8, 0(%rsp)
+
+ /* Decode 5 symbols from each of the 4 streams (20 symbols total). */
+ FOR_EACH_STREAM_WITH_INDEX(DECODE, 0)
+ FOR_EACH_STREAM_WITH_INDEX(DECODE, 1)
+ FOR_EACH_STREAM_WITH_INDEX(DECODE, 2)
+ FOR_EACH_STREAM_WITH_INDEX(DECODE, 3)
+ FOR_EACH_STREAM_WITH_INDEX(DECODE, 4)
+
+ /* Reload r8 */
+ movq 0(%rsp), %r8
+
+ FOR_EACH_STREAM(RELOAD_BITS)
+
+ cmp %op3, 48(%rsp)
+ ja .L_4X2_loop_body
+ jmp .L_4X2_compute_olimit
+
+#undef DECODE
+#undef RELOAD_BITS
+.L_4X2_exit:
+ addq $8, %rsp
+ /* Restore stack (oend & olimit) */
+ pop %rax /* oend0 */
+ pop %rax /* oend1 */
+ pop %rax /* oend2 */
+ pop %rax /* oend3 */
+ pop %rax /* ilimit */
+ pop %rax /* olimit */
+ pop %rax /* arg */
+
+ /* Save ip / op / bits */
+ movq %ip0, 0(%rax)
+ movq %ip1, 8(%rax)
+ movq %ip2, 16(%rax)
+ movq %ip3, 24(%rax)
+ movq %op0, 32(%rax)
+ movq %op1, 40(%rax)
+ movq %op2, 48(%rax)
+ movq %op3, 56(%rax)
+ movq %bits0, 64(%rax)
+ movq %bits1, 72(%rax)
+ movq %bits2, 80(%rax)
+ movq %bits3, 88(%rax)
+
+ /* Restore registers */
+ pop %r15
+ pop %r14
+ pop %r13
+ pop %r12
+ pop %r11
+ pop %r10
+ pop %r9
+ pop %r8
+ pop %rdi
+ pop %rsi
+ pop %rbp
+ pop %rdx
+ pop %rcx
+ pop %rbx
+ pop %rax
+ ret
+
+#endif
diff --git a/thirdparty/zstd/decompress/zstd_decompress.c b/thirdparty/zstd/decompress/zstd_decompress.c
index 910bc034c0..0031e98cfb 100644
--- a/thirdparty/zstd/decompress/zstd_decompress.c
+++ b/thirdparty/zstd/decompress/zstd_decompress.c
@@ -56,7 +56,6 @@
* Dependencies
*********************************************************/
#include "../common/zstd_deps.h" /* ZSTD_memcpy, ZSTD_memmove, ZSTD_memset */
-#include "../common/cpu.h" /* bmi2 */
#include "../common/mem.h" /* low level memory routines */
#define FSE_STATIC_LINKING_ONLY
#include "../common/fse.h"
@@ -177,12 +176,15 @@ static const ZSTD_DDict* ZSTD_DDictHashSet_getDDict(ZSTD_DDictHashSet* hashSet,
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");
+ if (!ret)
+ return NULL;
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) {
+ if (!ret->ddictPtrTable) {
+ ZSTD_customFree(ret, customMem);
return NULL;
}
+ ret->ddictPtrTableSize = DDICT_HASHSET_TABLE_BASE_SIZE;
+ ret->ddictPtrCount = 0;
return ret;
}
@@ -255,11 +257,15 @@ static void ZSTD_initDCtx_internal(ZSTD_DCtx* dctx)
dctx->inBuffSize = 0;
dctx->outBuffSize = 0;
dctx->streamStage = zdss_init;
+#if defined(ZSTD_LEGACY_SUPPORT) && (ZSTD_LEGACY_SUPPORT>=1)
dctx->legacyContext = NULL;
dctx->previousLegacyVersion = 0;
+#endif
dctx->noForwardProgress = 0;
dctx->oversizedDuration = 0;
- dctx->bmi2 = ZSTD_cpuid_bmi2(ZSTD_cpuid());
+#if DYNAMIC_BMI2
+ dctx->bmi2 = ZSTD_cpuSupportsBmi2();
+#endif
dctx->ddictSet = NULL;
ZSTD_DCtx_resetParameters(dctx);
#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
@@ -280,8 +286,7 @@ ZSTD_DCtx* ZSTD_initStaticDCtx(void *workspace, size_t workspaceSize)
return dctx;
}
-ZSTD_DCtx* ZSTD_createDCtx_advanced(ZSTD_customMem customMem)
-{
+static ZSTD_DCtx* ZSTD_createDCtx_internal(ZSTD_customMem customMem) {
if ((!customMem.customAlloc) ^ (!customMem.customFree)) return NULL;
{ ZSTD_DCtx* const dctx = (ZSTD_DCtx*)ZSTD_customMalloc(sizeof(*dctx), customMem);
@@ -292,10 +297,15 @@ ZSTD_DCtx* ZSTD_createDCtx_advanced(ZSTD_customMem customMem)
}
}
+ZSTD_DCtx* ZSTD_createDCtx_advanced(ZSTD_customMem customMem)
+{
+ return ZSTD_createDCtx_internal(customMem);
+}
+
ZSTD_DCtx* ZSTD_createDCtx(void)
{
DEBUGLOG(3, "ZSTD_createDCtx");
- return ZSTD_createDCtx_advanced(ZSTD_defaultCMem);
+ return ZSTD_createDCtx_internal(ZSTD_defaultCMem);
}
static void ZSTD_clearDict(ZSTD_DCtx* dctx)
@@ -380,6 +390,19 @@ unsigned ZSTD_isFrame(const void* buffer, size_t size)
return 0;
}
+/*! ZSTD_isSkippableFrame() :
+ * Tells if the content of `buffer` starts with a valid Frame Identifier for a skippable frame.
+ * Note : Frame Identifier is 4 bytes. If `size < 4`, @return will always be 0.
+ */
+unsigned ZSTD_isSkippableFrame(const void* buffer, size_t size)
+{
+ if (size < ZSTD_FRAMEIDSIZE) return 0;
+ { U32 const magic = MEM_readLE32(buffer);
+ if ((magic & ZSTD_MAGIC_SKIPPABLE_MASK) == ZSTD_MAGIC_SKIPPABLE_START) return 1;
+ }
+ return 0;
+}
+
/** ZSTD_frameHeaderSize_internal() :
* srcSize must be large enough to reach header size fields.
* note : only works for formats ZSTD_f_zstd1 and ZSTD_f_zstd1_magicless.
@@ -466,7 +489,9 @@ size_t ZSTD_getFrameHeader_advanced(ZSTD_frameHeader* zfhPtr, const void* src, s
}
switch(dictIDSizeCode)
{
- default: assert(0); /* impossible */
+ default:
+ assert(0); /* impossible */
+ ZSTD_FALLTHROUGH;
case 0 : break;
case 1 : dictID = ip[pos]; pos++; break;
case 2 : dictID = MEM_readLE16(ip+pos); pos+=2; break;
@@ -474,7 +499,9 @@ size_t ZSTD_getFrameHeader_advanced(ZSTD_frameHeader* zfhPtr, const void* src, s
}
switch(fcsID)
{
- default: assert(0); /* impossible */
+ default:
+ assert(0); /* impossible */
+ ZSTD_FALLTHROUGH;
case 0 : if (singleSegment) frameContentSize = ip[pos]; break;
case 1 : frameContentSize = MEM_readLE16(ip+pos)+256; break;
case 2 : frameContentSize = MEM_readLE32(ip+pos); break;
@@ -503,7 +530,6 @@ size_t ZSTD_getFrameHeader(ZSTD_frameHeader* zfhPtr, const void* src, size_t src
return ZSTD_getFrameHeader_advanced(zfhPtr, src, srcSize, ZSTD_f_zstd1);
}
-
/** ZSTD_getFrameContentSize() :
* compatible with legacy mode
* @return : decompressed size of the single frame pointed to be `src` if known, otherwise
@@ -544,6 +570,37 @@ static size_t readSkippableFrameSize(void const* src, size_t srcSize)
}
}
+/*! ZSTD_readSkippableFrame() :
+ * Retrieves a zstd skippable frame containing data given by src, and writes it to dst buffer.
+ *
+ * The parameter magicVariant will receive the magicVariant that was supplied when the frame was written,
+ * i.e. magicNumber - ZSTD_MAGIC_SKIPPABLE_START. This can be NULL if the caller is not interested
+ * in the magicVariant.
+ *
+ * Returns an error if destination buffer is not large enough, or if the frame is not skippable.
+ *
+ * @return : number of bytes written or a ZSTD error.
+ */
+ZSTDLIB_API size_t ZSTD_readSkippableFrame(void* dst, size_t dstCapacity, unsigned* magicVariant,
+ const void* src, size_t srcSize)
+{
+ U32 const magicNumber = MEM_readLE32(src);
+ size_t skippableFrameSize = readSkippableFrameSize(src, srcSize);
+ size_t skippableContentSize = skippableFrameSize - ZSTD_SKIPPABLEHEADERSIZE;
+
+ /* check input validity */
+ RETURN_ERROR_IF(!ZSTD_isSkippableFrame(src, srcSize), frameParameter_unsupported, "");
+ RETURN_ERROR_IF(skippableFrameSize < ZSTD_SKIPPABLEHEADERSIZE || skippableFrameSize > srcSize, srcSize_wrong, "");
+ RETURN_ERROR_IF(skippableContentSize > dstCapacity, dstSize_tooSmall, "");
+
+ /* deliver payload */
+ if (skippableContentSize > 0 && dst != NULL)
+ ZSTD_memcpy(dst, (const BYTE *)src + ZSTD_SKIPPABLEHEADERSIZE, skippableContentSize);
+ if (magicVariant != NULL)
+ *magicVariant = magicNumber - ZSTD_MAGIC_SKIPPABLE_START;
+ return skippableContentSize;
+}
+
/** ZSTD_findDecompressedSize() :
* compatible with legacy mode
* `srcSize` must be the exact length of some number of ZSTD compressed and/or
@@ -858,7 +915,7 @@ static size_t ZSTD_decompressFrame(ZSTD_DCtx* dctx,
switch(blockProperties.blockType)
{
case bt_compressed:
- decodedSize = ZSTD_decompressBlock_internal(dctx, op, (size_t)(oend-op), ip, cBlockSize, /* frame */ 1);
+ decodedSize = ZSTD_decompressBlock_internal(dctx, op, (size_t)(oend-op), ip, cBlockSize, /* frame */ 1, not_streaming);
break;
case bt_raw :
decodedSize = ZSTD_copyRawBlock(op, (size_t)(oend-op), ip, cBlockSize);
@@ -1009,7 +1066,7 @@ static ZSTD_DDict const* ZSTD_getDDict(ZSTD_DCtx* dctx)
switch (dctx->dictUses) {
default:
assert(0 /* Impossible */);
- /* fall-through */
+ ZSTD_FALLTHROUGH;
case ZSTD_dont_use:
ZSTD_clearDict(dctx);
return NULL;
@@ -1031,7 +1088,7 @@ size_t ZSTD_decompress(void* dst, size_t dstCapacity, const void* src, size_t sr
{
#if defined(ZSTD_HEAPMODE) && (ZSTD_HEAPMODE>=1)
size_t regenSize;
- ZSTD_DCtx* const dctx = ZSTD_createDCtx();
+ ZSTD_DCtx* const dctx = ZSTD_createDCtx_internal(ZSTD_defaultCMem);
RETURN_ERROR_IF(dctx==NULL, memory_allocation, "NULL pointer!");
regenSize = ZSTD_decompressDCtx(dctx, dst, dstCapacity, src, srcSize);
ZSTD_freeDCtx(dctx);
@@ -1065,7 +1122,7 @@ static size_t ZSTD_nextSrcSizeToDecompressWithInputSize(ZSTD_DCtx* dctx, size_t
return dctx->expected;
if (dctx->bType != bt_raw)
return dctx->expected;
- return MIN(MAX(inputSize, 1), dctx->expected);
+ return BOUNDED(1, inputSize, dctx->expected);
}
ZSTD_nextInputType_e ZSTD_nextInputType(ZSTD_DCtx* dctx) {
@@ -1073,7 +1130,9 @@ ZSTD_nextInputType_e ZSTD_nextInputType(ZSTD_DCtx* dctx) {
{
default: /* should not happen */
assert(0);
+ ZSTD_FALLTHROUGH;
case ZSTDds_getFrameHeaderSize:
+ ZSTD_FALLTHROUGH;
case ZSTDds_decodeFrameHeader:
return ZSTDnit_frameHeader;
case ZSTDds_decodeBlockHeader:
@@ -1085,6 +1144,7 @@ ZSTD_nextInputType_e ZSTD_nextInputType(ZSTD_DCtx* dctx) {
case ZSTDds_checkChecksum:
return ZSTDnit_checksum;
case ZSTDds_decodeSkippableHeader:
+ ZSTD_FALLTHROUGH;
case ZSTDds_skipFrame:
return ZSTDnit_skippableFrame;
}
@@ -1168,7 +1228,7 @@ size_t ZSTD_decompressContinue(ZSTD_DCtx* dctx, void* dst, size_t dstCapacity, c
{
case bt_compressed:
DEBUGLOG(5, "ZSTD_decompressContinue: case bt_compressed");
- rSize = ZSTD_decompressBlock_internal(dctx, dst, dstCapacity, src, srcSize, /* frame */ 1);
+ rSize = ZSTD_decompressBlock_internal(dctx, dst, dstCapacity, src, srcSize, /* frame */ 1, is_streaming);
dctx->expected = 0; /* Streaming not supported */
break;
case bt_raw :
@@ -1493,7 +1553,7 @@ size_t ZSTD_decompress_usingDDict(ZSTD_DCtx* dctx,
ZSTD_DStream* ZSTD_createDStream(void)
{
DEBUGLOG(3, "ZSTD_createDStream");
- return ZSTD_createDStream_advanced(ZSTD_defaultCMem);
+ return ZSTD_createDCtx_internal(ZSTD_defaultCMem);
}
ZSTD_DStream* ZSTD_initStaticDStream(void *workspace, size_t workspaceSize)
@@ -1503,7 +1563,7 @@ ZSTD_DStream* ZSTD_initStaticDStream(void *workspace, size_t workspaceSize)
ZSTD_DStream* ZSTD_createDStream_advanced(ZSTD_customMem customMem)
{
- return ZSTD_createDCtx_advanced(customMem);
+ return ZSTD_createDCtx_internal(customMem);
}
size_t ZSTD_freeDStream(ZSTD_DStream* zds)
@@ -1763,7 +1823,8 @@ size_t ZSTD_sizeof_DStream(const ZSTD_DStream* dctx)
size_t ZSTD_decodingBufferSize_min(unsigned long long windowSize, unsigned long long frameContentSize)
{
size_t const blockSize = (size_t) MIN(windowSize, ZSTD_BLOCKSIZE_MAX);
- unsigned long long const neededRBSize = windowSize + blockSize + (WILDCOPY_OVERLENGTH * 2);
+ /* space is needed to store the litbuffer after the output of a given block without stomping the extDict of a previous run, as well as to cover both windows against wildcopy*/
+ unsigned long long const neededRBSize = windowSize + blockSize + ZSTD_BLOCKSIZE_MAX + (WILDCOPY_OVERLENGTH * 2);
unsigned long long const neededSize = MIN(frameContentSize, neededRBSize);
size_t const minRBSize = (size_t) neededSize;
RETURN_ERROR_IF((unsigned long long)minRBSize != neededSize,
@@ -1897,10 +1958,12 @@ size_t ZSTD_decompressStream(ZSTD_DStream* zds, ZSTD_outBuffer* output, ZSTD_inB
DEBUGLOG(5, "stage zdss_init => transparent reset ");
zds->streamStage = zdss_loadHeader;
zds->lhSize = zds->inPos = zds->outStart = zds->outEnd = 0;
+#if defined(ZSTD_LEGACY_SUPPORT) && (ZSTD_LEGACY_SUPPORT>=1)
zds->legacyVersion = 0;
+#endif
zds->hostageByte = 0;
zds->expectedOutBuffer = *output;
- /* fall-through */
+ ZSTD_FALLTHROUGH;
case zdss_loadHeader :
DEBUGLOG(5, "stage zdss_loadHeader (srcSize : %u)", (U32)(iend - ip));
@@ -2038,7 +2101,7 @@ size_t ZSTD_decompressStream(ZSTD_DStream* zds, ZSTD_outBuffer* output, ZSTD_inB
zds->outBuffSize = neededOutBuffSize;
} } }
zds->streamStage = zdss_read;
- /* fall-through */
+ ZSTD_FALLTHROUGH;
case zdss_read:
DEBUGLOG(5, "stage zdss_read");
@@ -2057,7 +2120,7 @@ size_t ZSTD_decompressStream(ZSTD_DStream* zds, ZSTD_outBuffer* output, ZSTD_inB
} }
if (ip==iend) { someMoreWork = 0; break; } /* no more input */
zds->streamStage = zdss_load;
- /* fall-through */
+ ZSTD_FALLTHROUGH;
case zdss_load:
{ size_t const neededInSize = ZSTD_nextSrcSizeToDecompress(zds);
diff --git a/thirdparty/zstd/decompress/zstd_decompress_block.c b/thirdparty/zstd/decompress/zstd_decompress_block.c
index 349dcdc333..2e44d30d2f 100644
--- a/thirdparty/zstd/decompress/zstd_decompress_block.c
+++ b/thirdparty/zstd/decompress/zstd_decompress_block.c
@@ -69,15 +69,56 @@ size_t ZSTD_getcBlockSize(const void* src, size_t srcSize,
}
}
+/* Allocate buffer for literals, either overlapping current dst, or split between dst and litExtraBuffer, or stored entirely within litExtraBuffer */
+static void ZSTD_allocateLiteralsBuffer(ZSTD_DCtx* dctx, void* const dst, const size_t dstCapacity, const size_t litSize,
+ const streaming_operation streaming, const size_t expectedWriteSize, const unsigned splitImmediately)
+{
+ if (streaming == not_streaming && dstCapacity > ZSTD_BLOCKSIZE_MAX + WILDCOPY_OVERLENGTH + litSize + WILDCOPY_OVERLENGTH)
+ {
+ /* room for litbuffer to fit without read faulting */
+ dctx->litBuffer = (BYTE*)dst + ZSTD_BLOCKSIZE_MAX + WILDCOPY_OVERLENGTH;
+ dctx->litBufferEnd = dctx->litBuffer + litSize;
+ dctx->litBufferLocation = ZSTD_in_dst;
+ }
+ else if (litSize > ZSTD_LITBUFFEREXTRASIZE)
+ {
+ /* won't fit in litExtraBuffer, so it will be split between end of dst and extra buffer */
+ if (splitImmediately) {
+ /* won't fit in litExtraBuffer, so it will be split between end of dst and extra buffer */
+ dctx->litBuffer = (BYTE*)dst + expectedWriteSize - litSize + ZSTD_LITBUFFEREXTRASIZE - WILDCOPY_OVERLENGTH;
+ dctx->litBufferEnd = dctx->litBuffer + litSize - ZSTD_LITBUFFEREXTRASIZE;
+ }
+ else {
+ /* initially this will be stored entirely in dst during huffman decoding, it will partially shifted to litExtraBuffer after */
+ dctx->litBuffer = (BYTE*)dst + expectedWriteSize - litSize;
+ dctx->litBufferEnd = (BYTE*)dst + expectedWriteSize;
+ }
+ dctx->litBufferLocation = ZSTD_split;
+ }
+ else
+ {
+ /* fits entirely within litExtraBuffer, so no split is necessary */
+ dctx->litBuffer = dctx->litExtraBuffer;
+ dctx->litBufferEnd = dctx->litBuffer + litSize;
+ dctx->litBufferLocation = ZSTD_not_in_dst;
+ }
+}
/* Hidden declaration for fullbench */
size_t ZSTD_decodeLiteralsBlock(ZSTD_DCtx* dctx,
- const void* src, size_t srcSize);
+ const void* src, size_t srcSize,
+ void* dst, size_t dstCapacity, const streaming_operation streaming);
/*! ZSTD_decodeLiteralsBlock() :
+ * Where it is possible to do so without being stomped by the output during decompression, the literals block will be stored
+ * in the dstBuffer. If there is room to do so, it will be stored in full in the excess dst space after where the current
+ * block will be output. Otherwise it will be stored at the end of the current dst blockspace, with a small portion being
+ * stored in dctx->litExtraBuffer to help keep it "ahead" of the current output write.
+ *
* @return : nb of bytes read from src (< srcSize )
* note : symbol not declared but exposed for fullbench */
size_t ZSTD_decodeLiteralsBlock(ZSTD_DCtx* dctx,
- const void* src, size_t srcSize) /* note : srcSize < BLOCKSIZE */
+ const void* src, size_t srcSize, /* note : srcSize < BLOCKSIZE */
+ void* dst, size_t dstCapacity, const streaming_operation streaming)
{
DEBUGLOG(5, "ZSTD_decodeLiteralsBlock");
RETURN_ERROR_IF(srcSize < MIN_CBLOCK_SIZE, corruption_detected, "");
@@ -90,7 +131,7 @@ size_t ZSTD_decodeLiteralsBlock(ZSTD_DCtx* dctx,
case set_repeat:
DEBUGLOG(5, "set_repeat flag : re-using stats from previous compressed literals block");
RETURN_ERROR_IF(dctx->litEntropy==0, dictionary_corrupted, "");
- /* fall-through */
+ ZSTD_FALLTHROUGH;
case set_compressed:
RETURN_ERROR_IF(srcSize < 5, corruption_detected, "srcSize >= MIN_CBLOCK_SIZE == 3; here we need up to 5 for case 3");
@@ -99,6 +140,7 @@ size_t ZSTD_decodeLiteralsBlock(ZSTD_DCtx* dctx,
U32 const lhlCode = (istart[0] >> 2) & 3;
U32 const lhc = MEM_readLE32(istart);
size_t hufSuccess;
+ size_t expectedWriteSize = MIN(ZSTD_BLOCKSIZE_MAX, dstCapacity);
switch(lhlCode)
{
case 0: case 1: default: /* note : default is impossible, since lhlCode into [0..3] */
@@ -121,8 +163,11 @@ size_t ZSTD_decodeLiteralsBlock(ZSTD_DCtx* dctx,
litCSize = (lhc >> 22) + ((size_t)istart[4] << 10);
break;
}
+ RETURN_ERROR_IF(litSize > 0 && dst == NULL, dstSize_tooSmall, "NULL not handled");
RETURN_ERROR_IF(litSize > ZSTD_BLOCKSIZE_MAX, corruption_detected, "");
RETURN_ERROR_IF(litCSize + lhSize > srcSize, corruption_detected, "");
+ RETURN_ERROR_IF(expectedWriteSize < litSize , dstSize_tooSmall, "");
+ ZSTD_allocateLiteralsBuffer(dctx, dst, dstCapacity, litSize, streaming, expectedWriteSize, 0);
/* prefetch huffman table if cold */
if (dctx->ddictIsCold && (litSize > 768 /* heuristic */)) {
@@ -133,11 +178,11 @@ size_t ZSTD_decodeLiteralsBlock(ZSTD_DCtx* dctx,
if (singleStream) {
hufSuccess = HUF_decompress1X_usingDTable_bmi2(
dctx->litBuffer, litSize, istart+lhSize, litCSize,
- dctx->HUFptr, dctx->bmi2);
+ dctx->HUFptr, ZSTD_DCtx_get_bmi2(dctx));
} else {
hufSuccess = HUF_decompress4X_usingDTable_bmi2(
dctx->litBuffer, litSize, istart+lhSize, litCSize,
- dctx->HUFptr, dctx->bmi2);
+ dctx->HUFptr, ZSTD_DCtx_get_bmi2(dctx));
}
} else {
if (singleStream) {
@@ -150,15 +195,22 @@ size_t ZSTD_decodeLiteralsBlock(ZSTD_DCtx* dctx,
hufSuccess = HUF_decompress1X1_DCtx_wksp_bmi2(
dctx->entropy.hufTable, dctx->litBuffer, litSize,
istart+lhSize, litCSize, dctx->workspace,
- sizeof(dctx->workspace), dctx->bmi2);
+ sizeof(dctx->workspace), ZSTD_DCtx_get_bmi2(dctx));
#endif
} else {
hufSuccess = HUF_decompress4X_hufOnly_wksp_bmi2(
dctx->entropy.hufTable, dctx->litBuffer, litSize,
istart+lhSize, litCSize, dctx->workspace,
- sizeof(dctx->workspace), dctx->bmi2);
+ sizeof(dctx->workspace), ZSTD_DCtx_get_bmi2(dctx));
}
}
+ if (dctx->litBufferLocation == ZSTD_split)
+ {
+ ZSTD_memcpy(dctx->litExtraBuffer, dctx->litBufferEnd - ZSTD_LITBUFFEREXTRASIZE, ZSTD_LITBUFFEREXTRASIZE);
+ ZSTD_memmove(dctx->litBuffer + ZSTD_LITBUFFEREXTRASIZE - WILDCOPY_OVERLENGTH, dctx->litBuffer, litSize - ZSTD_LITBUFFEREXTRASIZE);
+ dctx->litBuffer += ZSTD_LITBUFFEREXTRASIZE - WILDCOPY_OVERLENGTH;
+ dctx->litBufferEnd -= WILDCOPY_OVERLENGTH;
+ }
RETURN_ERROR_IF(HUF_isError(hufSuccess), corruption_detected, "");
@@ -166,13 +218,13 @@ size_t ZSTD_decodeLiteralsBlock(ZSTD_DCtx* dctx,
dctx->litSize = litSize;
dctx->litEntropy = 1;
if (litEncType==set_compressed) dctx->HUFptr = dctx->entropy.hufTable;
- ZSTD_memset(dctx->litBuffer + dctx->litSize, 0, WILDCOPY_OVERLENGTH);
return litCSize + lhSize;
}
case set_basic:
{ size_t litSize, lhSize;
U32 const lhlCode = ((istart[0]) >> 2) & 3;
+ size_t expectedWriteSize = MIN(ZSTD_BLOCKSIZE_MAX, dstCapacity);
switch(lhlCode)
{
case 0: case 2: default: /* note : default is impossible, since lhlCode into [0..3] */
@@ -189,23 +241,36 @@ size_t ZSTD_decodeLiteralsBlock(ZSTD_DCtx* dctx,
break;
}
+ RETURN_ERROR_IF(litSize > 0 && dst == NULL, dstSize_tooSmall, "NULL not handled");
+ RETURN_ERROR_IF(expectedWriteSize < litSize, dstSize_tooSmall, "");
+ ZSTD_allocateLiteralsBuffer(dctx, dst, dstCapacity, litSize, streaming, expectedWriteSize, 1);
if (lhSize+litSize+WILDCOPY_OVERLENGTH > srcSize) { /* risk reading beyond src buffer with wildcopy */
RETURN_ERROR_IF(litSize+lhSize > srcSize, corruption_detected, "");
- ZSTD_memcpy(dctx->litBuffer, istart+lhSize, litSize);
+ if (dctx->litBufferLocation == ZSTD_split)
+ {
+ ZSTD_memcpy(dctx->litBuffer, istart + lhSize, litSize - ZSTD_LITBUFFEREXTRASIZE);
+ ZSTD_memcpy(dctx->litExtraBuffer, istart + lhSize + litSize - ZSTD_LITBUFFEREXTRASIZE, ZSTD_LITBUFFEREXTRASIZE);
+ }
+ else
+ {
+ ZSTD_memcpy(dctx->litBuffer, istart + lhSize, litSize);
+ }
dctx->litPtr = dctx->litBuffer;
dctx->litSize = litSize;
- ZSTD_memset(dctx->litBuffer + dctx->litSize, 0, WILDCOPY_OVERLENGTH);
return lhSize+litSize;
}
/* direct reference into compressed stream */
dctx->litPtr = istart+lhSize;
dctx->litSize = litSize;
+ dctx->litBufferEnd = dctx->litPtr + litSize;
+ dctx->litBufferLocation = ZSTD_not_in_dst;
return lhSize+litSize;
}
case set_rle:
{ U32 const lhlCode = ((istart[0]) >> 2) & 3;
size_t litSize, lhSize;
+ size_t expectedWriteSize = MIN(ZSTD_BLOCKSIZE_MAX, dstCapacity);
switch(lhlCode)
{
case 0: case 2: default: /* note : default is impossible, since lhlCode into [0..3] */
@@ -222,8 +287,19 @@ size_t ZSTD_decodeLiteralsBlock(ZSTD_DCtx* dctx,
RETURN_ERROR_IF(srcSize<4, corruption_detected, "srcSize >= MIN_CBLOCK_SIZE == 3; here we need lhSize+1 = 4");
break;
}
+ RETURN_ERROR_IF(litSize > 0 && dst == NULL, dstSize_tooSmall, "NULL not handled");
RETURN_ERROR_IF(litSize > ZSTD_BLOCKSIZE_MAX, corruption_detected, "");
- ZSTD_memset(dctx->litBuffer, istart[lhSize], litSize + WILDCOPY_OVERLENGTH);
+ RETURN_ERROR_IF(expectedWriteSize < litSize, dstSize_tooSmall, "");
+ ZSTD_allocateLiteralsBuffer(dctx, dst, dstCapacity, litSize, streaming, expectedWriteSize, 1);
+ if (dctx->litBufferLocation == ZSTD_split)
+ {
+ ZSTD_memset(dctx->litBuffer, istart[lhSize], litSize - ZSTD_LITBUFFEREXTRASIZE);
+ ZSTD_memset(dctx->litExtraBuffer, istart[lhSize], ZSTD_LITBUFFEREXTRASIZE);
+ }
+ else
+ {
+ ZSTD_memset(dctx->litBuffer, istart[lhSize], litSize);
+ }
dctx->litPtr = dctx->litBuffer;
dctx->litSize = litSize;
return lhSize+1;
@@ -343,7 +419,7 @@ static const ZSTD_seqSymbol ML_defaultDTable[(1<<ML_DEFAULTNORMLOG)+1] = {
}; /* ML_defaultDTable */
-static void ZSTD_buildSeqTable_rle(ZSTD_seqSymbol* dt, U32 baseValue, U32 nbAddBits)
+static void ZSTD_buildSeqTable_rle(ZSTD_seqSymbol* dt, U32 baseValue, U8 nbAddBits)
{
void* ptr = dt;
ZSTD_seqSymbol_header* const DTableH = (ZSTD_seqSymbol_header*)ptr;
@@ -355,7 +431,7 @@ static void ZSTD_buildSeqTable_rle(ZSTD_seqSymbol* dt, U32 baseValue, U32 nbAddB
cell->nbBits = 0;
cell->nextState = 0;
assert(nbAddBits < 255);
- cell->nbAdditionalBits = (BYTE)nbAddBits;
+ cell->nbAdditionalBits = nbAddBits;
cell->baseValue = baseValue;
}
@@ -367,7 +443,7 @@ static void ZSTD_buildSeqTable_rle(ZSTD_seqSymbol* dt, U32 baseValue, U32 nbAddB
FORCE_INLINE_TEMPLATE
void ZSTD_buildFSETable_body(ZSTD_seqSymbol* dt,
const short* normalizedCounter, unsigned maxSymbolValue,
- const U32* baseValue, const U32* nbAdditionalBits,
+ const U32* baseValue, const U8* nbAdditionalBits,
unsigned tableLog, void* wksp, size_t wkspSize)
{
ZSTD_seqSymbol* const tableDecode = dt+1;
@@ -478,7 +554,7 @@ void ZSTD_buildFSETable_body(ZSTD_seqSymbol* dt,
tableDecode[u].nbBits = (BYTE) (tableLog - BIT_highbit32(nextState) );
tableDecode[u].nextState = (U16) ( (nextState << tableDecode[u].nbBits) - tableSize);
assert(nbAdditionalBits[symbol] < 255);
- tableDecode[u].nbAdditionalBits = (BYTE)nbAdditionalBits[symbol];
+ tableDecode[u].nbAdditionalBits = nbAdditionalBits[symbol];
tableDecode[u].baseValue = baseValue[symbol];
}
}
@@ -487,7 +563,7 @@ void ZSTD_buildFSETable_body(ZSTD_seqSymbol* dt,
/* Avoids the FORCE_INLINE of the _body() function. */
static void ZSTD_buildFSETable_body_default(ZSTD_seqSymbol* dt,
const short* normalizedCounter, unsigned maxSymbolValue,
- const U32* baseValue, const U32* nbAdditionalBits,
+ const U32* baseValue, const U8* nbAdditionalBits,
unsigned tableLog, void* wksp, size_t wkspSize)
{
ZSTD_buildFSETable_body(dt, normalizedCounter, maxSymbolValue,
@@ -495,9 +571,9 @@ static void ZSTD_buildFSETable_body_default(ZSTD_seqSymbol* dt,
}
#if DYNAMIC_BMI2
-TARGET_ATTRIBUTE("bmi2") static void ZSTD_buildFSETable_body_bmi2(ZSTD_seqSymbol* dt,
+BMI2_TARGET_ATTRIBUTE static void ZSTD_buildFSETable_body_bmi2(ZSTD_seqSymbol* dt,
const short* normalizedCounter, unsigned maxSymbolValue,
- const U32* baseValue, const U32* nbAdditionalBits,
+ const U32* baseValue, const U8* nbAdditionalBits,
unsigned tableLog, void* wksp, size_t wkspSize)
{
ZSTD_buildFSETable_body(dt, normalizedCounter, maxSymbolValue,
@@ -507,7 +583,7 @@ TARGET_ATTRIBUTE("bmi2") static void ZSTD_buildFSETable_body_bmi2(ZSTD_seqSymbol
void ZSTD_buildFSETable(ZSTD_seqSymbol* dt,
const short* normalizedCounter, unsigned maxSymbolValue,
- const U32* baseValue, const U32* nbAdditionalBits,
+ const U32* baseValue, const U8* nbAdditionalBits,
unsigned tableLog, void* wksp, size_t wkspSize, int bmi2)
{
#if DYNAMIC_BMI2
@@ -529,7 +605,7 @@ void ZSTD_buildFSETable(ZSTD_seqSymbol* dt,
static size_t ZSTD_buildSeqTable(ZSTD_seqSymbol* DTableSpace, const ZSTD_seqSymbol** DTablePtr,
symbolEncodingType_e type, unsigned max, U32 maxLog,
const void* src, size_t srcSize,
- const U32* baseValue, const U32* nbAdditionalBits,
+ const U32* baseValue, const U8* nbAdditionalBits,
const ZSTD_seqSymbol* defaultTable, U32 flagRepeatTable,
int ddictIsCold, int nbSeq, U32* wksp, size_t wkspSize,
int bmi2)
@@ -541,7 +617,7 @@ static size_t ZSTD_buildSeqTable(ZSTD_seqSymbol* DTableSpace, const ZSTD_seqSymb
RETURN_ERROR_IF((*(const BYTE*)src) > max, corruption_detected, "");
{ U32 const symbol = *(const BYTE*)src;
U32 const baseline = baseValue[symbol];
- U32 const nbBits = nbAdditionalBits[symbol];
+ U8 const nbBits = nbAdditionalBits[symbol];
ZSTD_buildSeqTable_rle(DTableSpace, baseline, nbBits);
}
*DTablePtr = DTableSpace;
@@ -620,7 +696,7 @@ size_t ZSTD_decodeSeqHeaders(ZSTD_DCtx* dctx, int* nbSeqPtr,
LL_defaultDTable, dctx->fseEntropy,
dctx->ddictIsCold, nbSeq,
dctx->workspace, sizeof(dctx->workspace),
- dctx->bmi2);
+ ZSTD_DCtx_get_bmi2(dctx));
RETURN_ERROR_IF(ZSTD_isError(llhSize), corruption_detected, "ZSTD_buildSeqTable failed");
ip += llhSize;
}
@@ -632,7 +708,7 @@ size_t ZSTD_decodeSeqHeaders(ZSTD_DCtx* dctx, int* nbSeqPtr,
OF_defaultDTable, dctx->fseEntropy,
dctx->ddictIsCold, nbSeq,
dctx->workspace, sizeof(dctx->workspace),
- dctx->bmi2);
+ ZSTD_DCtx_get_bmi2(dctx));
RETURN_ERROR_IF(ZSTD_isError(ofhSize), corruption_detected, "ZSTD_buildSeqTable failed");
ip += ofhSize;
}
@@ -644,7 +720,7 @@ size_t ZSTD_decodeSeqHeaders(ZSTD_DCtx* dctx, int* nbSeqPtr,
ML_defaultDTable, dctx->fseEntropy,
dctx->ddictIsCold, nbSeq,
dctx->workspace, sizeof(dctx->workspace),
- dctx->bmi2);
+ ZSTD_DCtx_get_bmi2(dctx));
RETURN_ERROR_IF(ZSTD_isError(mlhSize), corruption_detected, "ZSTD_buildSeqTable failed");
ip += mlhSize;
}
@@ -713,7 +789,7 @@ HINT_INLINE void ZSTD_overlapCopy8(BYTE** op, BYTE const** ip, size_t offset) {
* - ZSTD_overlap_src_before_dst: The src and dst may overlap and may be any distance apart.
* The src buffer must be before the dst buffer.
*/
-static void ZSTD_safecopy(BYTE* op, BYTE* const oend_w, BYTE const* ip, ptrdiff_t length, ZSTD_overlap_e ovtype) {
+static void ZSTD_safecopy(BYTE* op, const BYTE* const oend_w, BYTE const* ip, ptrdiff_t length, ZSTD_overlap_e ovtype) {
ptrdiff_t const diff = op - ip;
BYTE* const oend = op + length;
@@ -729,6 +805,7 @@ static void ZSTD_safecopy(BYTE* op, BYTE* const oend_w, BYTE const* ip, ptrdiff_
/* Copy 8 bytes and ensure the offset >= 8 when there can be overlap. */
assert(length >= 8);
ZSTD_overlapCopy8(&op, &ip, diff);
+ length -= 8;
assert(op - ip >= 8);
assert(op <= oend);
}
@@ -743,12 +820,35 @@ static void ZSTD_safecopy(BYTE* op, BYTE* const oend_w, BYTE const* ip, ptrdiff_
assert(oend > oend_w);
ZSTD_wildcopy(op, ip, oend_w - op, ovtype);
ip += oend_w - op;
- op = oend_w;
+ op += oend_w - op;
}
/* Handle the leftovers. */
while (op < oend) *op++ = *ip++;
}
+/* ZSTD_safecopyDstBeforeSrc():
+ * This version allows overlap with dst before src, or handles the non-overlap case with dst after src
+ * Kept separate from more common ZSTD_safecopy case to avoid performance impact to the safecopy common case */
+static void ZSTD_safecopyDstBeforeSrc(BYTE* op, BYTE const* ip, ptrdiff_t length) {
+ ptrdiff_t const diff = op - ip;
+ BYTE* const oend = op + length;
+
+ if (length < 8 || diff > -8) {
+ /* Handle short lengths, close overlaps, and dst not before src. */
+ while (op < oend) *op++ = *ip++;
+ return;
+ }
+
+ if (op <= oend - WILDCOPY_OVERLENGTH && diff < -WILDCOPY_VECLEN) {
+ ZSTD_wildcopy(op, ip, oend - WILDCOPY_OVERLENGTH - op, ZSTD_no_overlap);
+ ip += oend - WILDCOPY_OVERLENGTH - op;
+ op += oend - WILDCOPY_OVERLENGTH - op;
+ }
+
+ /* Handle the leftovers. */
+ while (op < oend) *op++ = *ip++;
+}
+
/* ZSTD_execSequenceEnd():
* This version handles cases that are near the end of the output buffer. It requires
* more careful checks to make sure there is no overflow. By separating out these hard
@@ -759,9 +859,9 @@ static void ZSTD_safecopy(BYTE* op, BYTE* const oend_w, BYTE const* ip, ptrdiff_
*/
FORCE_NOINLINE
size_t ZSTD_execSequenceEnd(BYTE* op,
- BYTE* const oend, seq_t sequence,
- const BYTE** litPtr, const BYTE* const litLimit,
- const BYTE* const prefixStart, const BYTE* const virtualStart, const BYTE* const dictEnd)
+ BYTE* const oend, seq_t sequence,
+ const BYTE** litPtr, const BYTE* const litLimit,
+ const BYTE* const prefixStart, const BYTE* const virtualStart, const BYTE* const dictEnd)
{
BYTE* const oLitEnd = op + sequence.litLength;
size_t const sequenceLength = sequence.litLength + sequence.matchLength;
@@ -784,27 +884,76 @@ size_t ZSTD_execSequenceEnd(BYTE* op,
if (sequence.offset > (size_t)(oLitEnd - prefixStart)) {
/* offset beyond prefix */
RETURN_ERROR_IF(sequence.offset > (size_t)(oLitEnd - virtualStart), corruption_detected, "");
- match = dictEnd - (prefixStart-match);
+ match = dictEnd - (prefixStart - match);
if (match + sequence.matchLength <= dictEnd) {
ZSTD_memmove(oLitEnd, match, sequence.matchLength);
return sequenceLength;
}
/* span extDict & currentPrefixSegment */
{ size_t const length1 = dictEnd - match;
- ZSTD_memmove(oLitEnd, match, length1);
- op = oLitEnd + length1;
- sequence.matchLength -= length1;
- match = prefixStart;
- } }
+ ZSTD_memmove(oLitEnd, match, length1);
+ op = oLitEnd + length1;
+ sequence.matchLength -= length1;
+ match = prefixStart;
+ }
+ }
+ ZSTD_safecopy(op, oend_w, match, sequence.matchLength, ZSTD_overlap_src_before_dst);
+ return sequenceLength;
+}
+
+/* ZSTD_execSequenceEndSplitLitBuffer():
+ * This version is intended to be used during instances where the litBuffer is still split. It is kept separate to avoid performance impact for the good case.
+ */
+FORCE_NOINLINE
+size_t ZSTD_execSequenceEndSplitLitBuffer(BYTE* op,
+ BYTE* const oend, const BYTE* const oend_w, seq_t sequence,
+ const BYTE** litPtr, const BYTE* const litLimit,
+ const BYTE* const prefixStart, const BYTE* const virtualStart, const BYTE* const dictEnd)
+{
+ BYTE* const oLitEnd = op + sequence.litLength;
+ size_t const sequenceLength = sequence.litLength + sequence.matchLength;
+ const BYTE* const iLitEnd = *litPtr + sequence.litLength;
+ const BYTE* match = oLitEnd - sequence.offset;
+
+
+ /* bounds checks : careful of address space overflow in 32-bit mode */
+ RETURN_ERROR_IF(sequenceLength > (size_t)(oend - op), dstSize_tooSmall, "last match must fit within dstBuffer");
+ RETURN_ERROR_IF(sequence.litLength > (size_t)(litLimit - *litPtr), corruption_detected, "try to read beyond literal buffer");
+ assert(op < op + sequenceLength);
+ assert(oLitEnd < op + sequenceLength);
+
+ /* copy literals */
+ RETURN_ERROR_IF(op > *litPtr && op < *litPtr + sequence.litLength, dstSize_tooSmall, "output should not catch up to and overwrite literal buffer");
+ ZSTD_safecopyDstBeforeSrc(op, *litPtr, sequence.litLength);
+ op = oLitEnd;
+ *litPtr = iLitEnd;
+
+ /* copy Match */
+ if (sequence.offset > (size_t)(oLitEnd - prefixStart)) {
+ /* offset beyond prefix */
+ RETURN_ERROR_IF(sequence.offset > (size_t)(oLitEnd - virtualStart), corruption_detected, "");
+ match = dictEnd - (prefixStart - match);
+ if (match + sequence.matchLength <= dictEnd) {
+ ZSTD_memmove(oLitEnd, match, sequence.matchLength);
+ return sequenceLength;
+ }
+ /* span extDict & currentPrefixSegment */
+ { size_t const length1 = dictEnd - match;
+ ZSTD_memmove(oLitEnd, match, length1);
+ op = oLitEnd + length1;
+ sequence.matchLength -= length1;
+ match = prefixStart;
+ }
+ }
ZSTD_safecopy(op, oend_w, match, sequence.matchLength, ZSTD_overlap_src_before_dst);
return sequenceLength;
}
HINT_INLINE
size_t ZSTD_execSequence(BYTE* op,
- BYTE* const oend, seq_t sequence,
- const BYTE** litPtr, const BYTE* const litLimit,
- const BYTE* const prefixStart, const BYTE* const virtualStart, const BYTE* const dictEnd)
+ BYTE* const oend, seq_t sequence,
+ const BYTE** litPtr, const BYTE* const litLimit,
+ const BYTE* const prefixStart, const BYTE* const virtualStart, const BYTE* const dictEnd)
{
BYTE* const oLitEnd = op + sequence.litLength;
size_t const sequenceLength = sequence.litLength + sequence.matchLength;
@@ -821,10 +970,102 @@ size_t ZSTD_execSequence(BYTE* op,
* - 32-bit mode and the match length overflows
*/
if (UNLIKELY(
+ iLitEnd > litLimit ||
+ oMatchEnd > oend_w ||
+ (MEM_32bits() && (size_t)(oend - op) < sequenceLength + WILDCOPY_OVERLENGTH)))
+ return ZSTD_execSequenceEnd(op, oend, sequence, litPtr, litLimit, prefixStart, virtualStart, dictEnd);
+
+ /* Assumptions (everything else goes into ZSTD_execSequenceEnd()) */
+ assert(op <= oLitEnd /* No overflow */);
+ assert(oLitEnd < oMatchEnd /* Non-zero match & no overflow */);
+ assert(oMatchEnd <= oend /* No underflow */);
+ assert(iLitEnd <= litLimit /* Literal length is in bounds */);
+ assert(oLitEnd <= oend_w /* Can wildcopy literals */);
+ assert(oMatchEnd <= oend_w /* Can wildcopy matches */);
+
+ /* Copy Literals:
+ * Split out litLength <= 16 since it is nearly always true. +1.6% on gcc-9.
+ * We likely don't need the full 32-byte wildcopy.
+ */
+ assert(WILDCOPY_OVERLENGTH >= 16);
+ ZSTD_copy16(op, (*litPtr));
+ if (UNLIKELY(sequence.litLength > 16)) {
+ ZSTD_wildcopy(op + 16, (*litPtr) + 16, sequence.litLength - 16, ZSTD_no_overlap);
+ }
+ op = oLitEnd;
+ *litPtr = iLitEnd; /* update for next sequence */
+
+ /* Copy Match */
+ if (sequence.offset > (size_t)(oLitEnd - prefixStart)) {
+ /* offset beyond prefix -> go into extDict */
+ RETURN_ERROR_IF(UNLIKELY(sequence.offset > (size_t)(oLitEnd - virtualStart)), corruption_detected, "");
+ match = dictEnd + (match - prefixStart);
+ if (match + sequence.matchLength <= dictEnd) {
+ ZSTD_memmove(oLitEnd, match, sequence.matchLength);
+ return sequenceLength;
+ }
+ /* span extDict & currentPrefixSegment */
+ { size_t const length1 = dictEnd - match;
+ ZSTD_memmove(oLitEnd, match, length1);
+ op = oLitEnd + length1;
+ sequence.matchLength -= length1;
+ match = prefixStart;
+ }
+ }
+ /* Match within prefix of 1 or more bytes */
+ assert(op <= oMatchEnd);
+ assert(oMatchEnd <= oend_w);
+ assert(match >= prefixStart);
+ assert(sequence.matchLength >= 1);
+
+ /* Nearly all offsets are >= WILDCOPY_VECLEN bytes, which means we can use wildcopy
+ * without overlap checking.
+ */
+ if (LIKELY(sequence.offset >= WILDCOPY_VECLEN)) {
+ /* We bet on a full wildcopy for matches, since we expect matches to be
+ * longer than literals (in general). In silesia, ~10% of matches are longer
+ * than 16 bytes.
+ */
+ ZSTD_wildcopy(op, match, (ptrdiff_t)sequence.matchLength, ZSTD_no_overlap);
+ return sequenceLength;
+ }
+ assert(sequence.offset < WILDCOPY_VECLEN);
+
+ /* Copy 8 bytes and spread the offset to be >= 8. */
+ ZSTD_overlapCopy8(&op, &match, sequence.offset);
+
+ /* If the match length is > 8 bytes, then continue with the wildcopy. */
+ if (sequence.matchLength > 8) {
+ assert(op < oMatchEnd);
+ ZSTD_wildcopy(op, match, (ptrdiff_t)sequence.matchLength - 8, ZSTD_overlap_src_before_dst);
+ }
+ return sequenceLength;
+}
+
+HINT_INLINE
+size_t ZSTD_execSequenceSplitLitBuffer(BYTE* op,
+ BYTE* const oend, const BYTE* const oend_w, seq_t sequence,
+ const BYTE** litPtr, const BYTE* const litLimit,
+ const BYTE* const prefixStart, const BYTE* const virtualStart, const BYTE* const dictEnd)
+{
+ BYTE* const oLitEnd = op + sequence.litLength;
+ size_t const sequenceLength = sequence.litLength + sequence.matchLength;
+ BYTE* const oMatchEnd = op + sequenceLength; /* risk : address space overflow (32-bits) */
+ const BYTE* const iLitEnd = *litPtr + sequence.litLength;
+ const BYTE* match = oLitEnd - sequence.offset;
+
+ assert(op != NULL /* Precondition */);
+ assert(oend_w < oend /* No underflow */);
+ /* Handle edge cases in a slow path:
+ * - Read beyond end of literals
+ * - Match end is within WILDCOPY_OVERLIMIT of oend
+ * - 32-bit mode and the match length overflows
+ */
+ if (UNLIKELY(
iLitEnd > litLimit ||
oMatchEnd > oend_w ||
(MEM_32bits() && (size_t)(oend - op) < sequenceLength + WILDCOPY_OVERLENGTH)))
- return ZSTD_execSequenceEnd(op, oend, sequence, litPtr, litLimit, prefixStart, virtualStart, dictEnd);
+ return ZSTD_execSequenceEndSplitLitBuffer(op, oend, oend_w, sequence, litPtr, litLimit, prefixStart, virtualStart, dictEnd);
/* Assumptions (everything else goes into ZSTD_execSequenceEnd()) */
assert(op <= oLitEnd /* No overflow */);
@@ -892,6 +1133,7 @@ size_t ZSTD_execSequence(BYTE* op,
return sequenceLength;
}
+
static void
ZSTD_initFseState(ZSTD_fseState* DStatePtr, BIT_DStream_t* bitD, const ZSTD_seqSymbol* dt)
{
@@ -905,20 +1147,10 @@ ZSTD_initFseState(ZSTD_fseState* DStatePtr, BIT_DStream_t* bitD, const ZSTD_seqS
}
FORCE_INLINE_TEMPLATE void
-ZSTD_updateFseState(ZSTD_fseState* DStatePtr, BIT_DStream_t* bitD)
-{
- ZSTD_seqSymbol const DInfo = DStatePtr->table[DStatePtr->state];
- U32 const nbBits = DInfo.nbBits;
- size_t const lowBits = BIT_readBits(bitD, nbBits);
- DStatePtr->state = DInfo.nextState + lowBits;
-}
-
-FORCE_INLINE_TEMPLATE void
-ZSTD_updateFseStateWithDInfo(ZSTD_fseState* DStatePtr, BIT_DStream_t* bitD, ZSTD_seqSymbol const DInfo)
+ZSTD_updateFseStateWithDInfo(ZSTD_fseState* DStatePtr, BIT_DStream_t* bitD, U16 nextState, U32 nbBits)
{
- U32 const nbBits = DInfo.nbBits;
size_t const lowBits = BIT_readBits(bitD, nbBits);
- DStatePtr->state = DInfo.nextState + lowBits;
+ DStatePtr->state = nextState + lowBits;
}
/* We need to add at most (ZSTD_WINDOWLOG_MAX_32 - 1) bits to read the maximum
@@ -937,102 +1169,100 @@ FORCE_INLINE_TEMPLATE seq_t
ZSTD_decodeSequence(seqState_t* seqState, const ZSTD_longOffset_e longOffsets)
{
seq_t seq;
- ZSTD_seqSymbol const llDInfo = seqState->stateLL.table[seqState->stateLL.state];
- ZSTD_seqSymbol const mlDInfo = seqState->stateML.table[seqState->stateML.state];
- ZSTD_seqSymbol const ofDInfo = seqState->stateOffb.table[seqState->stateOffb.state];
- U32 const llBase = llDInfo.baseValue;
- U32 const mlBase = mlDInfo.baseValue;
- U32 const ofBase = ofDInfo.baseValue;
- BYTE const llBits = llDInfo.nbAdditionalBits;
- BYTE const mlBits = mlDInfo.nbAdditionalBits;
- BYTE const ofBits = ofDInfo.nbAdditionalBits;
- BYTE const totalBits = llBits+mlBits+ofBits;
-
- /* sequence */
- { size_t offset;
- if (ofBits > 1) {
- ZSTD_STATIC_ASSERT(ZSTD_lo_isLongOffset == 1);
- ZSTD_STATIC_ASSERT(LONG_OFFSETS_MAX_EXTRA_BITS_32 == 5);
- assert(ofBits <= MaxOff);
- if (MEM_32bits() && longOffsets && (ofBits >= STREAM_ACCUMULATOR_MIN_32)) {
- U32 const extraBits = ofBits - MIN(ofBits, 32 - seqState->DStream.bitsConsumed);
- offset = ofBase + (BIT_readBitsFast(&seqState->DStream, ofBits - extraBits) << extraBits);
- BIT_reloadDStream(&seqState->DStream);
- if (extraBits) offset += BIT_readBitsFast(&seqState->DStream, extraBits);
- assert(extraBits <= LONG_OFFSETS_MAX_EXTRA_BITS_32); /* to avoid another reload */
- } else {
- offset = ofBase + BIT_readBitsFast(&seqState->DStream, ofBits/*>0*/); /* <= (ZSTD_WINDOWLOG_MAX-1) bits */
- if (MEM_32bits()) BIT_reloadDStream(&seqState->DStream);
- }
- seqState->prevOffset[2] = seqState->prevOffset[1];
- seqState->prevOffset[1] = seqState->prevOffset[0];
- seqState->prevOffset[0] = offset;
- } else {
- U32 const ll0 = (llBase == 0);
- if (LIKELY((ofBits == 0))) {
- if (LIKELY(!ll0))
- offset = seqState->prevOffset[0];
- else {
- offset = seqState->prevOffset[1];
- seqState->prevOffset[1] = seqState->prevOffset[0];
- seqState->prevOffset[0] = offset;
+ const ZSTD_seqSymbol* const llDInfo = seqState->stateLL.table + seqState->stateLL.state;
+ const ZSTD_seqSymbol* const mlDInfo = seqState->stateML.table + seqState->stateML.state;
+ const ZSTD_seqSymbol* const ofDInfo = seqState->stateOffb.table + seqState->stateOffb.state;
+ seq.matchLength = mlDInfo->baseValue;
+ seq.litLength = llDInfo->baseValue;
+ { U32 const ofBase = ofDInfo->baseValue;
+ BYTE const llBits = llDInfo->nbAdditionalBits;
+ BYTE const mlBits = mlDInfo->nbAdditionalBits;
+ BYTE const ofBits = ofDInfo->nbAdditionalBits;
+ BYTE const totalBits = llBits+mlBits+ofBits;
+
+ U16 const llNext = llDInfo->nextState;
+ U16 const mlNext = mlDInfo->nextState;
+ U16 const ofNext = ofDInfo->nextState;
+ U32 const llnbBits = llDInfo->nbBits;
+ U32 const mlnbBits = mlDInfo->nbBits;
+ U32 const ofnbBits = ofDInfo->nbBits;
+ /*
+ * As gcc has better branch and block analyzers, sometimes it is only
+ * valuable to mark likelyness for clang, it gives around 3-4% of
+ * performance.
+ */
+
+ /* sequence */
+ { size_t offset;
+ #if defined(__clang__)
+ if (LIKELY(ofBits > 1)) {
+ #else
+ if (ofBits > 1) {
+ #endif
+ ZSTD_STATIC_ASSERT(ZSTD_lo_isLongOffset == 1);
+ ZSTD_STATIC_ASSERT(LONG_OFFSETS_MAX_EXTRA_BITS_32 == 5);
+ assert(ofBits <= MaxOff);
+ if (MEM_32bits() && longOffsets && (ofBits >= STREAM_ACCUMULATOR_MIN_32)) {
+ U32 const extraBits = ofBits - MIN(ofBits, 32 - seqState->DStream.bitsConsumed);
+ offset = ofBase + (BIT_readBitsFast(&seqState->DStream, ofBits - extraBits) << extraBits);
+ BIT_reloadDStream(&seqState->DStream);
+ if (extraBits) offset += BIT_readBitsFast(&seqState->DStream, extraBits);
+ assert(extraBits <= LONG_OFFSETS_MAX_EXTRA_BITS_32); /* to avoid another reload */
+ } else {
+ offset = ofBase + BIT_readBitsFast(&seqState->DStream, ofBits/*>0*/); /* <= (ZSTD_WINDOWLOG_MAX-1) bits */
+ if (MEM_32bits()) BIT_reloadDStream(&seqState->DStream);
}
+ seqState->prevOffset[2] = seqState->prevOffset[1];
+ seqState->prevOffset[1] = seqState->prevOffset[0];
+ seqState->prevOffset[0] = offset;
} else {
- offset = ofBase + ll0 + BIT_readBitsFast(&seqState->DStream, 1);
- { size_t temp = (offset==3) ? seqState->prevOffset[0] - 1 : seqState->prevOffset[offset];
- temp += !temp; /* 0 is not valid; input is corrupted; force offset to 1 */
- if (offset != 1) seqState->prevOffset[2] = seqState->prevOffset[1];
- seqState->prevOffset[1] = seqState->prevOffset[0];
- seqState->prevOffset[0] = offset = temp;
- } } }
- seq.offset = offset;
- }
-
- seq.matchLength = mlBase;
- if (mlBits > 0)
- seq.matchLength += BIT_readBitsFast(&seqState->DStream, mlBits/*>0*/);
-
- if (MEM_32bits() && (mlBits+llBits >= STREAM_ACCUMULATOR_MIN_32-LONG_OFFSETS_MAX_EXTRA_BITS_32))
- BIT_reloadDStream(&seqState->DStream);
- if (MEM_64bits() && UNLIKELY(totalBits >= STREAM_ACCUMULATOR_MIN_64-(LLFSELog+MLFSELog+OffFSELog)))
- BIT_reloadDStream(&seqState->DStream);
- /* Ensure there are enough bits to read the rest of data in 64-bit mode. */
- ZSTD_STATIC_ASSERT(16+LLFSELog+MLFSELog+OffFSELog < STREAM_ACCUMULATOR_MIN_64);
-
- seq.litLength = llBase;
- if (llBits > 0)
- seq.litLength += BIT_readBitsFast(&seqState->DStream, llBits/*>0*/);
-
- if (MEM_32bits())
- BIT_reloadDStream(&seqState->DStream);
-
- DEBUGLOG(6, "seq: litL=%u, matchL=%u, offset=%u",
- (U32)seq.litLength, (U32)seq.matchLength, (U32)seq.offset);
-
- /* ANS state update
- * gcc-9.0.0 does 2.5% worse with ZSTD_updateFseStateWithDInfo().
- * clang-9.2.0 does 7% worse with ZSTD_updateFseState().
- * Naturally it seems like ZSTD_updateFseStateWithDInfo() should be the
- * better option, so it is the default for other compilers. But, if you
- * measure that it is worse, please put up a pull request.
- */
- {
-#if defined(__GNUC__) && !defined(__clang__)
- const int kUseUpdateFseState = 1;
-#else
- const int kUseUpdateFseState = 0;
-#endif
- if (kUseUpdateFseState) {
- ZSTD_updateFseState(&seqState->stateLL, &seqState->DStream); /* <= 9 bits */
- ZSTD_updateFseState(&seqState->stateML, &seqState->DStream); /* <= 9 bits */
- if (MEM_32bits()) BIT_reloadDStream(&seqState->DStream); /* <= 18 bits */
- ZSTD_updateFseState(&seqState->stateOffb, &seqState->DStream); /* <= 8 bits */
- } else {
- ZSTD_updateFseStateWithDInfo(&seqState->stateLL, &seqState->DStream, llDInfo); /* <= 9 bits */
- ZSTD_updateFseStateWithDInfo(&seqState->stateML, &seqState->DStream, mlDInfo); /* <= 9 bits */
- if (MEM_32bits()) BIT_reloadDStream(&seqState->DStream); /* <= 18 bits */
- ZSTD_updateFseStateWithDInfo(&seqState->stateOffb, &seqState->DStream, ofDInfo); /* <= 8 bits */
+ U32 const ll0 = (llDInfo->baseValue == 0);
+ if (LIKELY((ofBits == 0))) {
+ offset = seqState->prevOffset[ll0];
+ seqState->prevOffset[1] = seqState->prevOffset[!ll0];
+ seqState->prevOffset[0] = offset;
+ } else {
+ offset = ofBase + ll0 + BIT_readBitsFast(&seqState->DStream, 1);
+ { size_t temp = (offset==3) ? seqState->prevOffset[0] - 1 : seqState->prevOffset[offset];
+ temp += !temp; /* 0 is not valid; input is corrupted; force offset to 1 */
+ if (offset != 1) seqState->prevOffset[2] = seqState->prevOffset[1];
+ seqState->prevOffset[1] = seqState->prevOffset[0];
+ seqState->prevOffset[0] = offset = temp;
+ } } }
+ seq.offset = offset;
}
+
+ #if defined(__clang__)
+ if (UNLIKELY(mlBits > 0))
+ #else
+ if (mlBits > 0)
+ #endif
+ seq.matchLength += BIT_readBitsFast(&seqState->DStream, mlBits/*>0*/);
+
+ if (MEM_32bits() && (mlBits+llBits >= STREAM_ACCUMULATOR_MIN_32-LONG_OFFSETS_MAX_EXTRA_BITS_32))
+ BIT_reloadDStream(&seqState->DStream);
+ if (MEM_64bits() && UNLIKELY(totalBits >= STREAM_ACCUMULATOR_MIN_64-(LLFSELog+MLFSELog+OffFSELog)))
+ BIT_reloadDStream(&seqState->DStream);
+ /* Ensure there are enough bits to read the rest of data in 64-bit mode. */
+ ZSTD_STATIC_ASSERT(16+LLFSELog+MLFSELog+OffFSELog < STREAM_ACCUMULATOR_MIN_64);
+
+ #if defined(__clang__)
+ if (UNLIKELY(llBits > 0))
+ #else
+ if (llBits > 0)
+ #endif
+ seq.litLength += BIT_readBitsFast(&seqState->DStream, llBits/*>0*/);
+
+ if (MEM_32bits())
+ BIT_reloadDStream(&seqState->DStream);
+
+ DEBUGLOG(6, "seq: litL=%u, matchL=%u, offset=%u",
+ (U32)seq.litLength, (U32)seq.matchLength, (U32)seq.offset);
+
+ ZSTD_updateFseStateWithDInfo(&seqState->stateLL, &seqState->DStream, llNext, llnbBits); /* <= 9 bits */
+ ZSTD_updateFseStateWithDInfo(&seqState->stateML, &seqState->DStream, mlNext, mlnbBits); /* <= 9 bits */
+ if (MEM_32bits()) BIT_reloadDStream(&seqState->DStream); /* <= 18 bits */
+ ZSTD_updateFseStateWithDInfo(&seqState->stateOffb, &seqState->DStream, ofNext, ofnbBits); /* <= 8 bits */
}
return seq;
@@ -1085,9 +1315,11 @@ MEM_STATIC void ZSTD_assertValidSequence(
#endif
#ifndef ZSTD_FORCE_DECOMPRESS_SEQUENCES_LONG
+
+
FORCE_INLINE_TEMPLATE size_t
DONT_VECTORIZE
-ZSTD_decompressSequences_body( ZSTD_DCtx* dctx,
+ZSTD_decompressSequences_bodySplitLitBuffer( ZSTD_DCtx* dctx,
void* dst, size_t maxDstSize,
const void* seqStart, size_t seqSize, int nbSeq,
const ZSTD_longOffset_e isLongOffset,
@@ -1099,11 +1331,11 @@ ZSTD_decompressSequences_body( ZSTD_DCtx* dctx,
BYTE* const oend = ostart + maxDstSize;
BYTE* op = ostart;
const BYTE* litPtr = dctx->litPtr;
- const BYTE* const litEnd = litPtr + dctx->litSize;
+ const BYTE* litBufferEnd = dctx->litBufferEnd;
const BYTE* const prefixStart = (const BYTE*) (dctx->prefixStart);
const BYTE* const vBase = (const BYTE*) (dctx->virtualStart);
const BYTE* const dictEnd = (const BYTE*) (dctx->dictEnd);
- DEBUGLOG(5, "ZSTD_decompressSequences_body");
+ DEBUGLOG(5, "ZSTD_decompressSequences_bodySplitLitBuffer");
(void)frame;
/* Regen sequences */
@@ -1124,55 +1356,237 @@ ZSTD_decompressSequences_body( ZSTD_DCtx* dctx,
BIT_DStream_endOfBuffer < BIT_DStream_completed &&
BIT_DStream_completed < BIT_DStream_overflow);
+ /* decompress without overrunning litPtr begins */
+ {
+ seq_t sequence = ZSTD_decodeSequence(&seqState, isLongOffset);
+ /* Align the decompression loop to 32 + 16 bytes.
+ *
+ * zstd compiled with gcc-9 on an Intel i9-9900k shows 10% decompression
+ * speed swings based on the alignment of the decompression loop. This
+ * performance swing is caused by parts of the decompression loop falling
+ * out of the DSB. The entire decompression loop should fit in the DSB,
+ * when it can't we get much worse performance. You can measure if you've
+ * hit the good case or the bad case with this perf command for some
+ * compressed file test.zst:
+ *
+ * perf stat -e cycles -e instructions -e idq.all_dsb_cycles_any_uops \
+ * -e idq.all_mite_cycles_any_uops -- ./zstd -tq test.zst
+ *
+ * If you see most cycles served out of the MITE you've hit the bad case.
+ * 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.
+ *
+ * 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:
+ * - Haswell
+ * - Broadwell: Intel(R) Xeon(R) CPU E5-2680 v4 @ 2.40GH
+ * - Skylake
+ *
+ * Alignment is done for each of the three major decompression loops:
+ * - ZSTD_decompressSequences_bodySplitLitBuffer - presplit section of the literal buffer
+ * - ZSTD_decompressSequences_bodySplitLitBuffer - postsplit section of the literal buffer
+ * - ZSTD_decompressSequences_body
+ * Alignment choices are made to minimize large swings on bad cases and influence on performance
+ * from changes external to this code, rather than to overoptimize on the current commit.
+ *
+ * If you are seeing performance stability this script can help test.
+ * It tests on 4 commits in zstd where I saw performance change.
+ *
+ * https://gist.github.com/terrelln/9889fc06a423fd5ca6e99351564473f4
+ */
#if defined(__GNUC__) && defined(__x86_64__)
- /* Align the decompression loop to 32 + 16 bytes.
- *
- * zstd compiled with gcc-9 on an Intel i9-9900k shows 10% decompression
- * speed swings based on the alignment of the decompression loop. This
- * performance swing is caused by parts of the decompression loop falling
- * out of the DSB. The entire decompression loop should fit in the DSB,
- * when it can't we get much worse performance. You can measure if you've
- * hit the good case or the bad case with this perf command for some
- * compressed file test.zst:
- *
- * perf stat -e cycles -e instructions -e idq.all_dsb_cycles_any_uops \
- * -e idq.all_mite_cycles_any_uops -- ./zstd -tq test.zst
- *
- * If you see most cycles served out of the MITE you've hit the bad case.
- * 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.
- *
- * 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:
- * - Haswell
- * - Broadwell: Intel(R) Xeon(R) CPU E5-2680 v4 @ 2.40GH
- * - Skylake
- *
- * If you are seeing performance stability this script can help test.
- * It tests on 4 commits in zstd where I saw performance change.
- *
- * 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");
+ __asm__(".p2align 6");
+# if __GNUC__ >= 7
+ /* good for gcc-7, gcc-9, and gcc-11 */
+ __asm__("nop");
+ __asm__(".p2align 5");
+ __asm__("nop");
+ __asm__(".p2align 4");
+# if __GNUC__ == 8 || __GNUC__ == 10
+ /* good for gcc-8 and gcc-10 */
+ __asm__("nop");
+ __asm__(".p2align 3");
+# endif
+# endif
+#endif
+
+ /* Handle the initial state where litBuffer is currently split between dst and litExtraBuffer */
+ for (; litPtr + sequence.litLength <= dctx->litBufferEnd; ) {
+ size_t const oneSeqSize = ZSTD_execSequenceSplitLitBuffer(op, oend, litPtr + sequence.litLength - WILDCOPY_OVERLENGTH, sequence, &litPtr, litBufferEnd, 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);
+ op += oneSeqSize;
+ if (UNLIKELY(!--nbSeq))
+ break;
+ BIT_reloadDStream(&(seqState.DStream));
+ sequence = ZSTD_decodeSequence(&seqState, isLongOffset);
+ }
+
+ /* If there are more sequences, they will need to read literals from litExtraBuffer; copy over the remainder from dst and update litPtr and litEnd */
+ if (nbSeq > 0) {
+ const size_t leftoverLit = dctx->litBufferEnd - litPtr;
+ if (leftoverLit)
+ {
+ RETURN_ERROR_IF(leftoverLit > (size_t)(oend - op), dstSize_tooSmall, "remaining lit must fit within dstBuffer");
+ ZSTD_safecopyDstBeforeSrc(op, litPtr, leftoverLit);
+ sequence.litLength -= leftoverLit;
+ op += leftoverLit;
+ }
+ litPtr = dctx->litExtraBuffer;
+ litBufferEnd = dctx->litExtraBuffer + ZSTD_LITBUFFEREXTRASIZE;
+ dctx->litBufferLocation = ZSTD_not_in_dst;
+ {
+ size_t const oneSeqSize = ZSTD_execSequence(op, oend, sequence, &litPtr, litBufferEnd, 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);
+ op += oneSeqSize;
+ if (--nbSeq)
+ BIT_reloadDStream(&(seqState.DStream));
+ }
+ }
+ }
+
+ if (nbSeq > 0) /* there is remaining lit from extra buffer */
+ {
+
+#if defined(__GNUC__) && defined(__x86_64__)
+ __asm__(".p2align 6");
+ __asm__("nop");
+# if __GNUC__ != 7
+ /* worse for gcc-7 better for gcc-8, gcc-9, and gcc-10 and clang */
+ __asm__(".p2align 4");
+ __asm__("nop");
+ __asm__(".p2align 3");
+# elif __GNUC__ >= 11
+ __asm__(".p2align 3");
+# else
+ __asm__(".p2align 5");
+ __asm__("nop");
+ __asm__(".p2align 3");
+# endif
+#endif
+
+ for (; ; ) {
+ seq_t const sequence = ZSTD_decodeSequence(&seqState, isLongOffset);
+ size_t const oneSeqSize = ZSTD_execSequence(op, oend, sequence, &litPtr, litBufferEnd, 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);
+ op += oneSeqSize;
+ if (UNLIKELY(!--nbSeq))
+ break;
+ BIT_reloadDStream(&(seqState.DStream));
+ }
+ }
+
+ /* check if reached exact end */
+ DEBUGLOG(5, "ZSTD_decompressSequences_bodySplitLitBuffer: after decode loop, remaining nbSeq : %i", nbSeq);
+ RETURN_ERROR_IF(nbSeq, corruption_detected, "");
+ RETURN_ERROR_IF(BIT_reloadDStream(&seqState.DStream) < BIT_DStream_completed, corruption_detected, "");
+ /* save reps for next block */
+ { U32 i; for (i=0; i<ZSTD_REP_NUM; i++) dctx->entropy.rep[i] = (U32)(seqState.prevOffset[i]); }
+ }
+
+ /* last literal segment */
+ if (dctx->litBufferLocation == ZSTD_split) /* split hasn't been reached yet, first get dst then copy litExtraBuffer */
+ {
+ size_t const lastLLSize = litBufferEnd - litPtr;
+ RETURN_ERROR_IF(lastLLSize > (size_t)(oend - op), dstSize_tooSmall, "");
+ if (op != NULL) {
+ ZSTD_memmove(op, litPtr, lastLLSize);
+ op += lastLLSize;
+ }
+ litPtr = dctx->litExtraBuffer;
+ litBufferEnd = dctx->litExtraBuffer + ZSTD_LITBUFFEREXTRASIZE;
+ dctx->litBufferLocation = ZSTD_not_in_dst;
+ }
+ { size_t const lastLLSize = litBufferEnd - litPtr;
+ RETURN_ERROR_IF(lastLLSize > (size_t)(oend-op), dstSize_tooSmall, "");
+ if (op != NULL) {
+ ZSTD_memcpy(op, litPtr, lastLLSize);
+ op += lastLLSize;
+ }
+ }
+
+ return op-ostart;
+}
+
+FORCE_INLINE_TEMPLATE size_t
+DONT_VECTORIZE
+ZSTD_decompressSequences_body(ZSTD_DCtx* dctx,
+ void* dst, size_t maxDstSize,
+ const void* seqStart, size_t seqSize, int nbSeq,
+ const ZSTD_longOffset_e isLongOffset,
+ const int frame)
+{
+ const BYTE* ip = (const BYTE*)seqStart;
+ const BYTE* const iend = ip + seqSize;
+ BYTE* const ostart = (BYTE*)dst;
+ BYTE* const oend = dctx->litBufferLocation == ZSTD_not_in_dst ? ostart + maxDstSize : dctx->litBuffer;
+ BYTE* op = ostart;
+ const BYTE* litPtr = dctx->litPtr;
+ const BYTE* const litEnd = litPtr + dctx->litSize;
+ const BYTE* const prefixStart = (const BYTE*)(dctx->prefixStart);
+ const BYTE* const vBase = (const BYTE*)(dctx->virtualStart);
+ const BYTE* const dictEnd = (const BYTE*)(dctx->dictEnd);
+ DEBUGLOG(5, "ZSTD_decompressSequences_body");
+ (void)frame;
+
+ /* Regen sequences */
+ if (nbSeq) {
+ seqState_t seqState;
+ dctx->fseEntropy = 1;
+ { U32 i; for (i = 0; i < ZSTD_REP_NUM; i++) seqState.prevOffset[i] = dctx->entropy.rep[i]; }
+ RETURN_ERROR_IF(
+ ERR_isError(BIT_initDStream(&seqState.DStream, ip, iend - ip)),
+ corruption_detected, "");
+ ZSTD_initFseState(&seqState.stateLL, &seqState.DStream, dctx->LLTptr);
+ ZSTD_initFseState(&seqState.stateOffb, &seqState.DStream, dctx->OFTptr);
+ ZSTD_initFseState(&seqState.stateML, &seqState.DStream, dctx->MLTptr);
+ assert(dst != NULL);
+
+ ZSTD_STATIC_ASSERT(
+ BIT_DStream_unfinished < BIT_DStream_completed &&
+ BIT_DStream_endOfBuffer < BIT_DStream_completed &&
+ BIT_DStream_completed < BIT_DStream_overflow);
+
+#if defined(__GNUC__) && defined(__x86_64__)
+ __asm__(".p2align 6");
+ __asm__("nop");
+# if __GNUC__ >= 7
+ __asm__(".p2align 5");
+ __asm__("nop");
+ __asm__(".p2align 3");
# else
- __asm__(".p2align 4");
+ __asm__(".p2align 4");
+ __asm__("nop");
+ __asm__(".p2align 3");
# endif
#endif
+
for ( ; ; ) {
seq_t const sequence = ZSTD_decodeSequence(&seqState, isLongOffset);
size_t const oneSeqSize = ZSTD_execSequence(op, oend, sequence, &litPtr, litEnd, prefixStart, vBase, dictEnd);
@@ -1218,6 +1632,16 @@ ZSTD_decompressSequences_default(ZSTD_DCtx* dctx,
{
return ZSTD_decompressSequences_body(dctx, dst, maxDstSize, seqStart, seqSize, nbSeq, isLongOffset, frame);
}
+
+static size_t
+ZSTD_decompressSequencesSplitLitBuffer_default(ZSTD_DCtx* dctx,
+ void* dst, size_t maxDstSize,
+ const void* seqStart, size_t seqSize, int nbSeq,
+ const ZSTD_longOffset_e isLongOffset,
+ const int frame)
+{
+ return ZSTD_decompressSequences_bodySplitLitBuffer(dctx, dst, maxDstSize, seqStart, seqSize, nbSeq, isLongOffset, frame);
+}
#endif /* ZSTD_FORCE_DECOMPRESS_SEQUENCES_LONG */
#ifndef ZSTD_FORCE_DECOMPRESS_SEQUENCES_SHORT
@@ -1250,10 +1674,10 @@ ZSTD_decompressSequencesLong_body(
const BYTE* ip = (const BYTE*)seqStart;
const BYTE* const iend = ip + seqSize;
BYTE* const ostart = (BYTE*)dst;
- BYTE* const oend = ostart + maxDstSize;
+ BYTE* const oend = dctx->litBufferLocation == ZSTD_in_dst ? dctx->litBuffer : ostart + maxDstSize;
BYTE* op = ostart;
const BYTE* litPtr = dctx->litPtr;
- const BYTE* const litEnd = litPtr + dctx->litSize;
+ const BYTE* litBufferEnd = dctx->litBufferEnd;
const BYTE* const prefixStart = (const BYTE*) (dctx->prefixStart);
const BYTE* const dictStart = (const BYTE*) (dctx->virtualStart);
const BYTE* const dictEnd = (const BYTE*) (dctx->dictEnd);
@@ -1289,32 +1713,94 @@ ZSTD_decompressSequencesLong_body(
}
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);
- size_t const oneSeqSize = ZSTD_execSequence(op, oend, sequences[(seqNb-ADVANCED_SEQS) & STORED_SEQS_MASK], &litPtr, litEnd, prefixStart, dictStart, dictEnd);
+ /* decompress without stomping litBuffer */
+ for (; (BIT_reloadDStream(&(seqState.DStream)) <= BIT_DStream_completed) && (seqNb < nbSeq); seqNb++) {
+ seq_t sequence = ZSTD_decodeSequence(&seqState, isLongOffset);
+ size_t oneSeqSize;
+
+ if (dctx->litBufferLocation == ZSTD_split && litPtr + sequences[(seqNb - ADVANCED_SEQS) & STORED_SEQS_MASK].litLength > dctx->litBufferEnd)
+ {
+ /* lit buffer is reaching split point, empty out the first buffer and transition to litExtraBuffer */
+ const size_t leftoverLit = dctx->litBufferEnd - litPtr;
+ if (leftoverLit)
+ {
+ RETURN_ERROR_IF(leftoverLit > (size_t)(oend - op), dstSize_tooSmall, "remaining lit must fit within dstBuffer");
+ ZSTD_safecopyDstBeforeSrc(op, litPtr, leftoverLit);
+ sequences[(seqNb - ADVANCED_SEQS) & STORED_SEQS_MASK].litLength -= leftoverLit;
+ op += leftoverLit;
+ }
+ litPtr = dctx->litExtraBuffer;
+ litBufferEnd = dctx->litExtraBuffer + ZSTD_LITBUFFEREXTRASIZE;
+ dctx->litBufferLocation = ZSTD_not_in_dst;
+ oneSeqSize = ZSTD_execSequence(op, oend, sequences[(seqNb - ADVANCED_SEQS) & STORED_SEQS_MASK], &litPtr, litBufferEnd, 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);
+ 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;
+ if (ZSTD_isError(oneSeqSize)) return oneSeqSize;
- prefetchPos = ZSTD_prefetchMatch(prefetchPos, sequence, prefixStart, dictEnd);
- sequences[seqNb & STORED_SEQS_MASK] = sequence;
- op += oneSeqSize;
+ prefetchPos = ZSTD_prefetchMatch(prefetchPos, sequence, prefixStart, dictEnd);
+ sequences[seqNb & STORED_SEQS_MASK] = sequence;
+ op += oneSeqSize;
+ }
+ else
+ {
+ /* lit buffer is either wholly contained in first or second split, or not split at all*/
+ oneSeqSize = dctx->litBufferLocation == ZSTD_split ?
+ ZSTD_execSequenceSplitLitBuffer(op, oend, litPtr + sequences[(seqNb - ADVANCED_SEQS) & STORED_SEQS_MASK].litLength - WILDCOPY_OVERLENGTH, sequences[(seqNb - ADVANCED_SEQS) & STORED_SEQS_MASK], &litPtr, litBufferEnd, prefixStart, dictStart, dictEnd) :
+ ZSTD_execSequence(op, oend, sequences[(seqNb - ADVANCED_SEQS) & STORED_SEQS_MASK], &litPtr, litBufferEnd, 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;
+
+ prefetchPos = ZSTD_prefetchMatch(prefetchPos, sequence, prefixStart, dictEnd);
+ sequences[seqNb & STORED_SEQS_MASK] = sequence;
+ op += oneSeqSize;
+ }
}
RETURN_ERROR_IF(seqNb<nbSeq, corruption_detected, "");
/* finish queue */
seqNb -= seqAdvance;
for ( ; seqNb<nbSeq ; seqNb++) {
- size_t const oneSeqSize = ZSTD_execSequence(op, oend, sequences[seqNb&STORED_SEQS_MASK], &litPtr, litEnd, prefixStart, dictStart, dictEnd);
+ seq_t *sequence = &(sequences[seqNb&STORED_SEQS_MASK]);
+ if (dctx->litBufferLocation == ZSTD_split && litPtr + sequence->litLength > dctx->litBufferEnd)
+ {
+ const size_t leftoverLit = dctx->litBufferEnd - litPtr;
+ if (leftoverLit)
+ {
+ RETURN_ERROR_IF(leftoverLit > (size_t)(oend - op), dstSize_tooSmall, "remaining lit must fit within dstBuffer");
+ ZSTD_safecopyDstBeforeSrc(op, litPtr, leftoverLit);
+ sequence->litLength -= leftoverLit;
+ op += leftoverLit;
+ }
+ litPtr = dctx->litExtraBuffer;
+ litBufferEnd = dctx->litExtraBuffer + ZSTD_LITBUFFEREXTRASIZE;
+ dctx->litBufferLocation = ZSTD_not_in_dst;
+ {
+ size_t const oneSeqSize = ZSTD_execSequence(op, oend, *sequence, &litPtr, litBufferEnd, 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&STORED_SEQS_MASK], prefixStart, dictStart);
+ assert(!ZSTD_isError(oneSeqSize));
+ if (frame) ZSTD_assertValidSequence(dctx, op, oend, sequences[seqNb&STORED_SEQS_MASK], prefixStart, dictStart);
#endif
- if (ZSTD_isError(oneSeqSize)) return oneSeqSize;
- op += oneSeqSize;
+ if (ZSTD_isError(oneSeqSize)) return oneSeqSize;
+ op += oneSeqSize;
+ }
+ }
+ else
+ {
+ size_t const oneSeqSize = dctx->litBufferLocation == ZSTD_split ?
+ ZSTD_execSequenceSplitLitBuffer(op, oend, litPtr + sequence->litLength - WILDCOPY_OVERLENGTH, *sequence, &litPtr, litBufferEnd, prefixStart, dictStart, dictEnd) :
+ ZSTD_execSequence(op, oend, *sequence, &litPtr, litBufferEnd, 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&STORED_SEQS_MASK], prefixStart, dictStart);
+#endif
+ if (ZSTD_isError(oneSeqSize)) return oneSeqSize;
+ op += oneSeqSize;
+ }
}
/* save reps for next block */
@@ -1322,10 +1808,21 @@ ZSTD_decompressSequencesLong_body(
}
/* last literal segment */
- { size_t const lastLLSize = litEnd - litPtr;
+ if (dctx->litBufferLocation == ZSTD_split) /* first deplete literal buffer in dst, then copy litExtraBuffer */
+ {
+ size_t const lastLLSize = litBufferEnd - litPtr;
+ RETURN_ERROR_IF(lastLLSize > (size_t)(oend - op), dstSize_tooSmall, "");
+ if (op != NULL) {
+ ZSTD_memmove(op, litPtr, lastLLSize);
+ op += lastLLSize;
+ }
+ litPtr = dctx->litExtraBuffer;
+ litBufferEnd = dctx->litExtraBuffer + ZSTD_LITBUFFEREXTRASIZE;
+ }
+ { size_t const lastLLSize = litBufferEnd - litPtr;
RETURN_ERROR_IF(lastLLSize > (size_t)(oend-op), dstSize_tooSmall, "");
if (op != NULL) {
- ZSTD_memcpy(op, litPtr, lastLLSize);
+ ZSTD_memmove(op, litPtr, lastLLSize);
op += lastLLSize;
}
}
@@ -1349,7 +1846,7 @@ ZSTD_decompressSequencesLong_default(ZSTD_DCtx* dctx,
#if DYNAMIC_BMI2
#ifndef ZSTD_FORCE_DECOMPRESS_SEQUENCES_LONG
-static TARGET_ATTRIBUTE("bmi2") size_t
+static BMI2_TARGET_ATTRIBUTE size_t
DONT_VECTORIZE
ZSTD_decompressSequences_bmi2(ZSTD_DCtx* dctx,
void* dst, size_t maxDstSize,
@@ -1359,10 +1856,20 @@ ZSTD_decompressSequences_bmi2(ZSTD_DCtx* dctx,
{
return ZSTD_decompressSequences_body(dctx, dst, maxDstSize, seqStart, seqSize, nbSeq, isLongOffset, frame);
}
+static BMI2_TARGET_ATTRIBUTE size_t
+DONT_VECTORIZE
+ZSTD_decompressSequencesSplitLitBuffer_bmi2(ZSTD_DCtx* dctx,
+ void* dst, size_t maxDstSize,
+ const void* seqStart, size_t seqSize, int nbSeq,
+ const ZSTD_longOffset_e isLongOffset,
+ const int frame)
+{
+ return ZSTD_decompressSequences_bodySplitLitBuffer(dctx, dst, maxDstSize, seqStart, seqSize, nbSeq, isLongOffset, frame);
+}
#endif /* ZSTD_FORCE_DECOMPRESS_SEQUENCES_LONG */
#ifndef ZSTD_FORCE_DECOMPRESS_SEQUENCES_SHORT
-static TARGET_ATTRIBUTE("bmi2") size_t
+static BMI2_TARGET_ATTRIBUTE size_t
ZSTD_decompressSequencesLong_bmi2(ZSTD_DCtx* dctx,
void* dst, size_t maxDstSize,
const void* seqStart, size_t seqSize, int nbSeq,
@@ -1391,11 +1898,25 @@ ZSTD_decompressSequences(ZSTD_DCtx* dctx, void* dst, size_t maxDstSize,
{
DEBUGLOG(5, "ZSTD_decompressSequences");
#if DYNAMIC_BMI2
- if (dctx->bmi2) {
+ if (ZSTD_DCtx_get_bmi2(dctx)) {
return ZSTD_decompressSequences_bmi2(dctx, dst, maxDstSize, seqStart, seqSize, nbSeq, isLongOffset, frame);
}
#endif
- return ZSTD_decompressSequences_default(dctx, dst, maxDstSize, seqStart, seqSize, nbSeq, isLongOffset, frame);
+ return ZSTD_decompressSequences_default(dctx, dst, maxDstSize, seqStart, seqSize, nbSeq, isLongOffset, frame);
+}
+static size_t
+ZSTD_decompressSequencesSplitLitBuffer(ZSTD_DCtx* dctx, void* dst, size_t maxDstSize,
+ const void* seqStart, size_t seqSize, int nbSeq,
+ const ZSTD_longOffset_e isLongOffset,
+ const int frame)
+{
+ DEBUGLOG(5, "ZSTD_decompressSequencesSplitLitBuffer");
+#if DYNAMIC_BMI2
+ if (ZSTD_DCtx_get_bmi2(dctx)) {
+ return ZSTD_decompressSequencesSplitLitBuffer_bmi2(dctx, dst, maxDstSize, seqStart, seqSize, nbSeq, isLongOffset, frame);
+ }
+#endif
+ return ZSTD_decompressSequencesSplitLitBuffer_default(dctx, dst, maxDstSize, seqStart, seqSize, nbSeq, isLongOffset, frame);
}
#endif /* ZSTD_FORCE_DECOMPRESS_SEQUENCES_LONG */
@@ -1415,7 +1936,7 @@ ZSTD_decompressSequencesLong(ZSTD_DCtx* dctx,
{
DEBUGLOG(5, "ZSTD_decompressSequencesLong");
#if DYNAMIC_BMI2
- if (dctx->bmi2) {
+ if (ZSTD_DCtx_get_bmi2(dctx)) {
return ZSTD_decompressSequencesLong_bmi2(dctx, dst, maxDstSize, seqStart, seqSize, nbSeq, isLongOffset, frame);
}
#endif
@@ -1456,7 +1977,7 @@ ZSTD_getLongOffsetsShare(const ZSTD_seqSymbol* offTable)
size_t
ZSTD_decompressBlock_internal(ZSTD_DCtx* dctx,
void* dst, size_t dstCapacity,
- const void* src, size_t srcSize, const int frame)
+ const void* src, size_t srcSize, const int frame, const streaming_operation streaming)
{ /* blockType == blockCompressed */
const BYTE* ip = (const BYTE*)src;
/* isLongOffset must be true if there are long offsets.
@@ -1471,7 +1992,7 @@ ZSTD_decompressBlock_internal(ZSTD_DCtx* dctx,
RETURN_ERROR_IF(srcSize >= ZSTD_BLOCKSIZE_MAX, srcSize_wrong, "");
/* Decode literals section */
- { size_t const litCSize = ZSTD_decodeLiteralsBlock(dctx, src, srcSize);
+ { size_t const litCSize = ZSTD_decodeLiteralsBlock(dctx, src, srcSize, dst, dstCapacity, streaming);
DEBUGLOG(5, "ZSTD_decodeLiteralsBlock : %u", (U32)litCSize);
if (ZSTD_isError(litCSize)) return litCSize;
ip += litCSize;
@@ -1519,7 +2040,10 @@ ZSTD_decompressBlock_internal(ZSTD_DCtx* dctx,
#ifndef ZSTD_FORCE_DECOMPRESS_SEQUENCES_LONG
/* else */
- return ZSTD_decompressSequences(dctx, dst, dstCapacity, ip, srcSize, nbSeq, isLongOffset, frame);
+ if (dctx->litBufferLocation == ZSTD_split)
+ return ZSTD_decompressSequencesSplitLitBuffer(dctx, dst, dstCapacity, ip, srcSize, nbSeq, isLongOffset, frame);
+ else
+ return ZSTD_decompressSequences(dctx, dst, dstCapacity, ip, srcSize, nbSeq, isLongOffset, frame);
#endif
}
}
@@ -1542,7 +2066,7 @@ size_t ZSTD_decompressBlock(ZSTD_DCtx* dctx,
{
size_t dSize;
ZSTD_checkContinuity(dctx, dst, dstCapacity);
- dSize = ZSTD_decompressBlock_internal(dctx, dst, dstCapacity, src, srcSize, /* frame */ 0);
+ dSize = ZSTD_decompressBlock_internal(dctx, dst, dstCapacity, src, srcSize, /* frame */ 0, not_streaming);
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 049a0cd84c..c61a9d0c4b 100644
--- a/thirdparty/zstd/decompress/zstd_decompress_block.h
+++ b/thirdparty/zstd/decompress/zstd_decompress_block.h
@@ -33,6 +33,12 @@
*/
+ /* Streaming state is used to inform allocation of the literal buffer */
+typedef enum {
+ not_streaming = 0,
+ is_streaming = 1
+} streaming_operation;
+
/* ZSTD_decompressBlock_internal() :
* decompress block, starting at `src`,
* into destination buffer `dst`.
@@ -41,7 +47,7 @@
*/
size_t ZSTD_decompressBlock_internal(ZSTD_DCtx* dctx,
void* dst, size_t dstCapacity,
- const void* src, size_t srcSize, const int frame);
+ const void* src, size_t srcSize, const int frame, const streaming_operation streaming);
/* ZSTD_buildFSETable() :
* generate FSE decoding table for one symbol (ll, ml or off)
@@ -54,7 +60,7 @@ size_t ZSTD_decompressBlock_internal(ZSTD_DCtx* dctx,
*/
void ZSTD_buildFSETable(ZSTD_seqSymbol* dt,
const short* normalizedCounter, unsigned maxSymbolValue,
- const U32* baseValue, const U32* nbAdditionalBits,
+ const U32* baseValue, const U8* nbAdditionalBits,
unsigned tableLog, void* wksp, size_t wkspSize,
int bmi2);
diff --git a/thirdparty/zstd/decompress/zstd_decompress_internal.h b/thirdparty/zstd/decompress/zstd_decompress_internal.h
index ebda0c9031..2b5a53850a 100644
--- a/thirdparty/zstd/decompress/zstd_decompress_internal.h
+++ b/thirdparty/zstd/decompress/zstd_decompress_internal.h
@@ -20,7 +20,7 @@
* Dependencies
*********************************************************/
#include "../common/mem.h" /* BYTE, U16, U32 */
-#include "../common/zstd_internal.h" /* ZSTD_seqSymbol */
+#include "../common/zstd_internal.h" /* constants : MaxLL, MaxML, MaxOff, LLFSELog, etc. */
@@ -40,7 +40,7 @@ static UNUSED_ATTR const U32 OF_base[MaxOff+1] = {
0xFFFD, 0x1FFFD, 0x3FFFD, 0x7FFFD, 0xFFFFD, 0x1FFFFD, 0x3FFFFD, 0x7FFFFD,
0xFFFFFD, 0x1FFFFFD, 0x3FFFFFD, 0x7FFFFFD, 0xFFFFFFD, 0x1FFFFFFD, 0x3FFFFFFD, 0x7FFFFFFD };
-static UNUSED_ATTR const U32 OF_bits[MaxOff+1] = {
+static UNUSED_ATTR const U8 OF_bits[MaxOff+1] = {
0, 1, 2, 3, 4, 5, 6, 7,
8, 9, 10, 11, 12, 13, 14, 15,
16, 17, 18, 19, 20, 21, 22, 23,
@@ -106,6 +106,22 @@ typedef struct {
size_t ddictPtrCount;
} ZSTD_DDictHashSet;
+#ifndef ZSTD_DECODER_INTERNAL_BUFFER
+# define ZSTD_DECODER_INTERNAL_BUFFER (1 << 16)
+#endif
+
+#define ZSTD_LBMIN 64
+#define ZSTD_LBMAX (128 << 10)
+
+/* extra buffer, compensates when dst is not large enough to store litBuffer */
+#define ZSTD_LITBUFFEREXTRASIZE BOUNDED(ZSTD_LBMIN, ZSTD_DECODER_INTERNAL_BUFFER, ZSTD_LBMAX)
+
+typedef enum {
+ ZSTD_not_in_dst = 0, /* Stored entirely within litExtraBuffer */
+ ZSTD_in_dst = 1, /* Stored entirely within dst (in memory after current output write) */
+ ZSTD_split = 2 /* Split between litExtraBuffer and dst */
+} ZSTD_litLocation_e;
+
struct ZSTD_DCtx_s
{
const ZSTD_seqSymbol* LLTptr;
@@ -136,7 +152,9 @@ struct ZSTD_DCtx_s
size_t litSize;
size_t rleSize;
size_t staticSize;
+#if DYNAMIC_BMI2 != 0
int bmi2; /* == 1 if the CPU supports BMI2 and 0 otherwise. CPU support is determined dynamically once per context lifetime. */
+#endif
/* dictionary */
ZSTD_DDict* ddictLocal;
@@ -158,16 +176,21 @@ struct ZSTD_DCtx_s
size_t outStart;
size_t outEnd;
size_t lhSize;
+#if defined(ZSTD_LEGACY_SUPPORT) && (ZSTD_LEGACY_SUPPORT>=1)
void* legacyContext;
U32 previousLegacyVersion;
U32 legacyVersion;
+#endif
U32 hostageByte;
int noForwardProgress;
ZSTD_bufferMode_e outBufferMode;
ZSTD_outBuffer expectedOutBuffer;
/* workspace */
- BYTE litBuffer[ZSTD_BLOCKSIZE_MAX + WILDCOPY_OVERLENGTH];
+ BYTE* litBuffer;
+ const BYTE* litBufferEnd;
+ ZSTD_litLocation_e litBufferLocation;
+ BYTE litExtraBuffer[ZSTD_LITBUFFEREXTRASIZE + WILDCOPY_OVERLENGTH]; /* literal buffer can be split between storage within dst and within this scratch buffer */
BYTE headerBuffer[ZSTD_FRAMEHEADERSIZE_MAX];
size_t oversizedDuration;
@@ -183,6 +206,14 @@ struct ZSTD_DCtx_s
#endif
}; /* typedef'd to ZSTD_DCtx within "zstd.h" */
+MEM_STATIC int ZSTD_DCtx_get_bmi2(const struct ZSTD_DCtx_s *dctx) {
+#if DYNAMIC_BMI2 != 0
+ return dctx->bmi2;
+#else
+ (void)dctx;
+ return 0;
+#endif
+}
/*-*******************************************************
* Shared internal functions
diff --git a/thirdparty/zstd/zstd.h b/thirdparty/zstd/zstd.h
index 4651e6c4dc..a88ae7bf8e 100644
--- a/thirdparty/zstd/zstd.h
+++ b/thirdparty/zstd/zstd.h
@@ -20,19 +20,21 @@ extern "C" {
/* ===== ZSTDLIB_API : control library symbols visibility ===== */
-#ifndef ZSTDLIB_VISIBILITY
-# if defined(__GNUC__) && (__GNUC__ >= 4)
-# define ZSTDLIB_VISIBILITY __attribute__ ((visibility ("default")))
+#ifndef ZSTDLIB_VISIBLE
+# if defined(__GNUC__) && (__GNUC__ >= 4) && !defined(__MINGW32__)
+# define ZSTDLIB_VISIBLE __attribute__ ((visibility ("default")))
+# define ZSTDLIB_HIDDEN __attribute__ ((visibility ("hidden")))
# else
-# define ZSTDLIB_VISIBILITY
+# define ZSTDLIB_VISIBLE
+# define ZSTDLIB_HIDDEN
# endif
#endif
#if defined(ZSTD_DLL_EXPORT) && (ZSTD_DLL_EXPORT==1)
-# define ZSTDLIB_API __declspec(dllexport) ZSTDLIB_VISIBILITY
+# define ZSTDLIB_API __declspec(dllexport) ZSTDLIB_VISIBLE
#elif defined(ZSTD_DLL_IMPORT) && (ZSTD_DLL_IMPORT==1)
-# define ZSTDLIB_API __declspec(dllimport) ZSTDLIB_VISIBILITY /* It isn't required but allows to generate better code, saving a function pointer load from the IAT and an indirect jump.*/
+# define ZSTDLIB_API __declspec(dllimport) ZSTDLIB_VISIBLE /* It isn't required but allows to generate better code, saving a function pointer load from the IAT and an indirect jump.*/
#else
-# define ZSTDLIB_API ZSTDLIB_VISIBILITY
+# define ZSTDLIB_API ZSTDLIB_VISIBLE
#endif
@@ -72,7 +74,7 @@ extern "C" {
/*------ Version ------*/
#define ZSTD_VERSION_MAJOR 1
#define ZSTD_VERSION_MINOR 5
-#define ZSTD_VERSION_RELEASE 0
+#define ZSTD_VERSION_RELEASE 2
#define ZSTD_VERSION_NUMBER (ZSTD_VERSION_MAJOR *100*100 + ZSTD_VERSION_MINOR *100 + ZSTD_VERSION_RELEASE)
/*! ZSTD_versionNumber() :
@@ -247,7 +249,7 @@ ZSTDLIB_API size_t ZSTD_decompressDCtx(ZSTD_DCtx* dctx,
*
* It's possible to reset all parameters to "default" using ZSTD_CCtx_reset().
*
- * This API supercedes all other "advanced" API entry points in the experimental section.
+ * This API supersedes all other "advanced" API entry points in the experimental section.
* In the future, we expect to remove from experimental API entry points which are redundant with this API.
*/
@@ -417,7 +419,7 @@ typedef enum {
* ZSTD_c_stableOutBuffer
* ZSTD_c_blockDelimiters
* ZSTD_c_validateSequences
- * ZSTD_c_splitBlocks
+ * ZSTD_c_useBlockSplitter
* 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;
@@ -932,7 +934,7 @@ ZSTDLIB_API unsigned ZSTD_getDictID_fromFrame(const void* src, size_t srcSize);
* 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
+ * ZSTD_compressStream2(), and ZSTD_decompressDCtx(). Dictionaries are sticky, and
* only reset with the context is reset with ZSTD_reset_parameters or
* ZSTD_reset_session_and_parameters. Prefixes are single-use.
******************************************************************************/
@@ -1073,25 +1075,36 @@ 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
+/* This can be overridden externally to hide static symbols. */
+#ifndef ZSTDLIB_STATIC_API
+# if defined(ZSTD_DLL_EXPORT) && (ZSTD_DLL_EXPORT==1)
+# define ZSTDLIB_STATIC_API __declspec(dllexport) ZSTDLIB_VISIBLE
+# elif defined(ZSTD_DLL_IMPORT) && (ZSTD_DLL_IMPORT==1)
+# define ZSTDLIB_STATIC_API __declspec(dllimport) ZSTDLIB_VISIBLE
+# else
+# define ZSTDLIB_STATIC_API ZSTDLIB_VISIBLE
+# endif
+#endif
+
/* 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 */
+# define ZSTD_DEPRECATED(message) ZSTDLIB_STATIC_API /* disable deprecation warnings */
#else
# if defined (__cplusplus) && (__cplusplus >= 201402) /* C++14 or greater */
-# define ZSTD_DEPRECATED(message) [[deprecated(message)]] ZSTDLIB_API
+# define ZSTD_DEPRECATED(message) [[deprecated(message)]] ZSTDLIB_STATIC_API
# elif (defined(GNUC) && (GNUC > 4 || (GNUC == 4 && GNUC_MINOR >= 5))) || defined(__clang__)
-# define ZSTD_DEPRECATED(message) ZSTDLIB_API __attribute__((deprecated(message)))
+# define ZSTD_DEPRECATED(message) ZSTDLIB_STATIC_API __attribute__((deprecated(message)))
# elif defined(__GNUC__) && (__GNUC__ >= 3)
-# define ZSTD_DEPRECATED(message) ZSTDLIB_API __attribute__((deprecated))
+# define ZSTD_DEPRECATED(message) ZSTDLIB_STATIC_API __attribute__((deprecated))
# elif defined(_MSC_VER)
-# define ZSTD_DEPRECATED(message) ZSTDLIB_API __declspec(deprecated(message))
+# define ZSTD_DEPRECATED(message) ZSTDLIB_STATIC_API __declspec(deprecated(message))
# else
# pragma message("WARNING: You need to implement ZSTD_DEPRECATED for this compiler")
-# define ZSTD_DEPRECATED(message) ZSTDLIB_API
+# define ZSTD_DEPRECATED(message) ZSTDLIB_STATIC_API
# endif
#endif /* ZSTD_DISABLE_DEPRECATE_WARNINGS */
@@ -1157,9 +1170,6 @@ ZSTDLIB_API size_t ZSTD_sizeof_DDict(const ZSTD_DDict* ddict);
#define ZSTD_SRCSIZEHINT_MIN 0
#define ZSTD_SRCSIZEHINT_MAX INT_MAX
-/* internal */
-#define ZSTD_HASHLOG3_MAX 17
-
/* --- Advanced types --- */
@@ -1302,10 +1312,14 @@ typedef enum {
} 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;
+ /* Note: This enum controls features which are conditionally beneficial. Zstd typically will make a final
+ * decision on whether or not to enable the feature (ZSTD_ps_auto), but setting the switch to ZSTD_ps_enable
+ * or ZSTD_ps_disable allow for a force enable/disable the feature.
+ */
+ ZSTD_ps_auto = 0, /* Let the library automatically determine whether the feature shall be enabled */
+ ZSTD_ps_enable = 1, /* Force-enable the feature */
+ ZSTD_ps_disable = 2 /* Do not use the feature */
+} ZSTD_paramSwitch_e;
/***************************************
* Frame size functions
@@ -1332,7 +1346,7 @@ typedef enum {
* note 5 : ZSTD_findDecompressedSize handles multiple frames, and so it must traverse the input to
* read each contained frame header. This is fast as most of the data is skipped,
* however it does mean that all frame data must be present and valid. */
-ZSTDLIB_API unsigned long long ZSTD_findDecompressedSize(const void* src, size_t srcSize);
+ZSTDLIB_STATIC_API unsigned long long ZSTD_findDecompressedSize(const void* src, size_t srcSize);
/*! ZSTD_decompressBound() :
* `src` should point to the start of a series of ZSTD encoded and/or skippable frames
@@ -1347,13 +1361,13 @@ ZSTDLIB_API unsigned long long ZSTD_findDecompressedSize(const void* src, size_t
* note 3 : when the decompressed size field isn't available, the upper-bound for that frame is calculated by:
* upper-bound = # blocks * min(128 KB, Window_Size)
*/
-ZSTDLIB_API unsigned long long ZSTD_decompressBound(const void* src, size_t srcSize);
+ZSTDLIB_STATIC_API unsigned long long ZSTD_decompressBound(const void* src, size_t srcSize);
/*! ZSTD_frameHeaderSize() :
* srcSize must be >= ZSTD_FRAMEHEADERSIZE_PREFIX.
* @return : size of the Frame Header,
* or an error code (if srcSize is too small) */
-ZSTDLIB_API size_t ZSTD_frameHeaderSize(const void* src, size_t srcSize);
+ZSTDLIB_STATIC_API size_t ZSTD_frameHeaderSize(const void* src, size_t srcSize);
typedef enum {
ZSTD_sf_noBlockDelimiters = 0, /* Representation of ZSTD_Sequence has no block delimiters, sequences only */
@@ -1376,7 +1390,7 @@ typedef enum {
* @return : number of sequences generated
*/
-ZSTDLIB_API size_t ZSTD_generateSequences(ZSTD_CCtx* zc, ZSTD_Sequence* outSeqs,
+ZSTDLIB_STATIC_API size_t ZSTD_generateSequences(ZSTD_CCtx* zc, ZSTD_Sequence* outSeqs,
size_t outSeqsSize, const void* src, size_t srcSize);
/*! ZSTD_mergeBlockDelimiters() :
@@ -1390,7 +1404,7 @@ ZSTDLIB_API size_t ZSTD_generateSequences(ZSTD_CCtx* zc, ZSTD_Sequence* outSeqs,
* setting of ZSTD_c_blockDelimiters as ZSTD_sf_noBlockDelimiters
* @return : number of sequences left after merging
*/
-ZSTDLIB_API size_t ZSTD_mergeBlockDelimiters(ZSTD_Sequence* sequences, size_t seqsSize);
+ZSTDLIB_STATIC_API size_t ZSTD_mergeBlockDelimiters(ZSTD_Sequence* sequences, size_t seqsSize);
/*! ZSTD_compressSequences() :
* Compress an array of ZSTD_Sequence, generated from the original source buffer, into dst.
@@ -1420,7 +1434,7 @@ ZSTDLIB_API size_t ZSTD_mergeBlockDelimiters(ZSTD_Sequence* sequences, size_t se
* and cannot emit an RLE block that disagrees with the repcode history
* @return : final compressed size or a ZSTD error.
*/
-ZSTDLIB_API size_t ZSTD_compressSequences(ZSTD_CCtx* const cctx, void* dst, size_t dstSize,
+ZSTDLIB_STATIC_API size_t ZSTD_compressSequences(ZSTD_CCtx* const cctx, void* dst, size_t dstSize,
const ZSTD_Sequence* inSeqs, size_t inSeqsSize,
const void* src, size_t srcSize);
@@ -1438,9 +1452,29 @@ ZSTDLIB_API size_t ZSTD_compressSequences(ZSTD_CCtx* const cctx, void* dst, size
*
* @return : number of bytes written or a ZSTD error.
*/
-ZSTDLIB_API size_t ZSTD_writeSkippableFrame(void* dst, size_t dstCapacity,
+ZSTDLIB_STATIC_API size_t ZSTD_writeSkippableFrame(void* dst, size_t dstCapacity,
const void* src, size_t srcSize, unsigned magicVariant);
+/*! ZSTD_readSkippableFrame() :
+ * Retrieves a zstd skippable frame containing data given by src, and writes it to dst buffer.
+ *
+ * The parameter magicVariant will receive the magicVariant that was supplied when the frame was written,
+ * i.e. magicNumber - ZSTD_MAGIC_SKIPPABLE_START. This can be NULL if the caller is not interested
+ * in the magicVariant.
+ *
+ * Returns an error if destination buffer is not large enough, or if the frame is not skippable.
+ *
+ * @return : number of bytes written or a ZSTD error.
+ */
+ZSTDLIB_API size_t ZSTD_readSkippableFrame(void* dst, size_t dstCapacity, unsigned* magicVariant,
+ const void* src, size_t srcSize);
+
+/*! ZSTD_isSkippableFrame() :
+ * Tells if the content of `buffer` starts with a valid Frame Identifier for a skippable frame.
+ */
+ZSTDLIB_API unsigned ZSTD_isSkippableFrame(const void* buffer, size_t size);
+
+
/***************************************
* Memory management
@@ -1469,10 +1503,10 @@ ZSTDLIB_API size_t ZSTD_writeSkippableFrame(void* dst, size_t dstCapacity,
* Note 2 : only single-threaded compression is supported.
* ZSTD_estimateCCtxSize_usingCCtxParams() will return an error code if ZSTD_c_nbWorkers is >= 1.
*/
-ZSTDLIB_API size_t ZSTD_estimateCCtxSize(int compressionLevel);
-ZSTDLIB_API size_t ZSTD_estimateCCtxSize_usingCParams(ZSTD_compressionParameters cParams);
-ZSTDLIB_API size_t ZSTD_estimateCCtxSize_usingCCtxParams(const ZSTD_CCtx_params* params);
-ZSTDLIB_API size_t ZSTD_estimateDCtxSize(void);
+ZSTDLIB_STATIC_API size_t ZSTD_estimateCCtxSize(int compressionLevel);
+ZSTDLIB_STATIC_API size_t ZSTD_estimateCCtxSize_usingCParams(ZSTD_compressionParameters cParams);
+ZSTDLIB_STATIC_API size_t ZSTD_estimateCCtxSize_usingCCtxParams(const ZSTD_CCtx_params* params);
+ZSTDLIB_STATIC_API size_t ZSTD_estimateDCtxSize(void);
/*! ZSTD_estimateCStreamSize() :
* ZSTD_estimateCStreamSize() will provide a budget large enough for any compression level up to selected one.
@@ -1487,20 +1521,20 @@ ZSTDLIB_API size_t ZSTD_estimateDCtxSize(void);
* Note : if streaming is init with function ZSTD_init?Stream_usingDict(),
* an internal ?Dict will be created, which additional size is not estimated here.
* In this case, get total size by adding ZSTD_estimate?DictSize */
-ZSTDLIB_API size_t ZSTD_estimateCStreamSize(int compressionLevel);
-ZSTDLIB_API size_t ZSTD_estimateCStreamSize_usingCParams(ZSTD_compressionParameters cParams);
-ZSTDLIB_API size_t ZSTD_estimateCStreamSize_usingCCtxParams(const ZSTD_CCtx_params* params);
-ZSTDLIB_API size_t ZSTD_estimateDStreamSize(size_t windowSize);
-ZSTDLIB_API size_t ZSTD_estimateDStreamSize_fromFrame(const void* src, size_t srcSize);
+ZSTDLIB_STATIC_API size_t ZSTD_estimateCStreamSize(int compressionLevel);
+ZSTDLIB_STATIC_API size_t ZSTD_estimateCStreamSize_usingCParams(ZSTD_compressionParameters cParams);
+ZSTDLIB_STATIC_API size_t ZSTD_estimateCStreamSize_usingCCtxParams(const ZSTD_CCtx_params* params);
+ZSTDLIB_STATIC_API size_t ZSTD_estimateDStreamSize(size_t windowSize);
+ZSTDLIB_STATIC_API size_t ZSTD_estimateDStreamSize_fromFrame(const void* src, size_t srcSize);
/*! ZSTD_estimate?DictSize() :
* ZSTD_estimateCDictSize() will bet that src size is relatively "small", and content is copied, like ZSTD_createCDict().
* ZSTD_estimateCDictSize_advanced() makes it possible to control compression parameters precisely, like ZSTD_createCDict_advanced().
* Note : dictionaries created by reference (`ZSTD_dlm_byRef`) are logically smaller.
*/
-ZSTDLIB_API size_t ZSTD_estimateCDictSize(size_t dictSize, int compressionLevel);
-ZSTDLIB_API size_t ZSTD_estimateCDictSize_advanced(size_t dictSize, ZSTD_compressionParameters cParams, ZSTD_dictLoadMethod_e dictLoadMethod);
-ZSTDLIB_API size_t ZSTD_estimateDDictSize(size_t dictSize, ZSTD_dictLoadMethod_e dictLoadMethod);
+ZSTDLIB_STATIC_API size_t ZSTD_estimateCDictSize(size_t dictSize, int compressionLevel);
+ZSTDLIB_STATIC_API size_t ZSTD_estimateCDictSize_advanced(size_t dictSize, ZSTD_compressionParameters cParams, ZSTD_dictLoadMethod_e dictLoadMethod);
+ZSTDLIB_STATIC_API size_t ZSTD_estimateDDictSize(size_t dictSize, ZSTD_dictLoadMethod_e dictLoadMethod);
/*! ZSTD_initStatic*() :
* Initialize an object using a pre-allocated fixed-size buffer.
@@ -1523,20 +1557,20 @@ ZSTDLIB_API size_t ZSTD_estimateDDictSize(size_t dictSize, ZSTD_dictLoadMethod_e
* Limitation 2 : static cctx currently not compatible with multi-threading.
* Limitation 3 : static dctx is incompatible with legacy support.
*/
-ZSTDLIB_API ZSTD_CCtx* ZSTD_initStaticCCtx(void* workspace, size_t workspaceSize);
-ZSTDLIB_API ZSTD_CStream* ZSTD_initStaticCStream(void* workspace, size_t workspaceSize); /**< same as ZSTD_initStaticCCtx() */
+ZSTDLIB_STATIC_API ZSTD_CCtx* ZSTD_initStaticCCtx(void* workspace, size_t workspaceSize);
+ZSTDLIB_STATIC_API ZSTD_CStream* ZSTD_initStaticCStream(void* workspace, size_t workspaceSize); /**< same as ZSTD_initStaticCCtx() */
-ZSTDLIB_API ZSTD_DCtx* ZSTD_initStaticDCtx(void* workspace, size_t workspaceSize);
-ZSTDLIB_API ZSTD_DStream* ZSTD_initStaticDStream(void* workspace, size_t workspaceSize); /**< same as ZSTD_initStaticDCtx() */
+ZSTDLIB_STATIC_API ZSTD_DCtx* ZSTD_initStaticDCtx(void* workspace, size_t workspaceSize);
+ZSTDLIB_STATIC_API ZSTD_DStream* ZSTD_initStaticDStream(void* workspace, size_t workspaceSize); /**< same as ZSTD_initStaticDCtx() */
-ZSTDLIB_API const ZSTD_CDict* ZSTD_initStaticCDict(
+ZSTDLIB_STATIC_API const ZSTD_CDict* ZSTD_initStaticCDict(
void* workspace, size_t workspaceSize,
const void* dict, size_t dictSize,
ZSTD_dictLoadMethod_e dictLoadMethod,
ZSTD_dictContentType_e dictContentType,
ZSTD_compressionParameters cParams);
-ZSTDLIB_API const ZSTD_DDict* ZSTD_initStaticDDict(
+ZSTDLIB_STATIC_API const ZSTD_DDict* ZSTD_initStaticDDict(
void* workspace, size_t workspaceSize,
const void* dict, size_t dictSize,
ZSTD_dictLoadMethod_e dictLoadMethod,
@@ -1557,44 +1591,44 @@ __attribute__((__unused__))
#endif
ZSTD_customMem const ZSTD_defaultCMem = { NULL, NULL, NULL }; /**< this constant defers to stdlib's functions */
-ZSTDLIB_API ZSTD_CCtx* ZSTD_createCCtx_advanced(ZSTD_customMem customMem);
-ZSTDLIB_API ZSTD_CStream* ZSTD_createCStream_advanced(ZSTD_customMem customMem);
-ZSTDLIB_API ZSTD_DCtx* ZSTD_createDCtx_advanced(ZSTD_customMem customMem);
-ZSTDLIB_API ZSTD_DStream* ZSTD_createDStream_advanced(ZSTD_customMem customMem);
+ZSTDLIB_STATIC_API ZSTD_CCtx* ZSTD_createCCtx_advanced(ZSTD_customMem customMem);
+ZSTDLIB_STATIC_API ZSTD_CStream* ZSTD_createCStream_advanced(ZSTD_customMem customMem);
+ZSTDLIB_STATIC_API ZSTD_DCtx* ZSTD_createDCtx_advanced(ZSTD_customMem customMem);
+ZSTDLIB_STATIC_API ZSTD_DStream* ZSTD_createDStream_advanced(ZSTD_customMem customMem);
-ZSTDLIB_API ZSTD_CDict* ZSTD_createCDict_advanced(const void* dict, size_t dictSize,
+ZSTDLIB_STATIC_API ZSTD_CDict* ZSTD_createCDict_advanced(const void* dict, size_t dictSize,
ZSTD_dictLoadMethod_e dictLoadMethod,
ZSTD_dictContentType_e dictContentType,
ZSTD_compressionParameters cParams,
ZSTD_customMem customMem);
-/* ! Thread pool :
- * These prototypes make it possible to share a thread pool among multiple compression contexts.
- * This can limit resources for applications with multiple threads where each one uses
- * a threaded compression mode (via ZSTD_c_nbWorkers parameter).
- * ZSTD_createThreadPool creates a new thread pool with a given number of threads.
- * 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, accepts NULL pointer.
+/*! Thread pool :
+ * These prototypes make it possible to share a thread pool among multiple compression contexts.
+ * This can limit resources for applications with multiple threads where each one uses
+ * a threaded compression mode (via ZSTD_c_nbWorkers parameter).
+ * ZSTD_createThreadPool creates a new thread pool with a given number of threads.
+ * 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, 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); /* accept NULL pointer */
-ZSTDLIB_API size_t ZSTD_CCtx_refThreadPool(ZSTD_CCtx* cctx, ZSTD_threadPool* pool);
+ZSTDLIB_STATIC_API ZSTD_threadPool* ZSTD_createThreadPool(size_t numThreads);
+ZSTDLIB_STATIC_API void ZSTD_freeThreadPool (ZSTD_threadPool* pool); /* accept NULL pointer */
+ZSTDLIB_STATIC_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!
*/
-ZSTDLIB_API ZSTD_CDict* ZSTD_createCDict_advanced2(
+ZSTDLIB_STATIC_API ZSTD_CDict* ZSTD_createCDict_advanced2(
const void* dict, size_t dictSize,
ZSTD_dictLoadMethod_e dictLoadMethod,
ZSTD_dictContentType_e dictContentType,
const ZSTD_CCtx_params* cctxParams,
ZSTD_customMem customMem);
-ZSTDLIB_API ZSTD_DDict* ZSTD_createDDict_advanced(
+ZSTDLIB_STATIC_API ZSTD_DDict* ZSTD_createDDict_advanced(
const void* dict, size_t dictSize,
ZSTD_dictLoadMethod_e dictLoadMethod,
ZSTD_dictContentType_e dictContentType,
@@ -1611,22 +1645,22 @@ ZSTDLIB_API ZSTD_DDict* ZSTD_createDDict_advanced(
* As a consequence, `dictBuffer` **must** outlive CDict,
* and its content must remain unmodified throughout the lifetime of CDict.
* 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);
+ZSTDLIB_STATIC_API ZSTD_CDict* ZSTD_createCDict_byReference(const void* dictBuffer, size_t dictSize, int compressionLevel);
/*! ZSTD_getCParams() :
* @return ZSTD_compressionParameters structure for a selected compression level and estimated srcSize.
* `estimatedSrcSize` value is optional, select 0 if not known */
-ZSTDLIB_API ZSTD_compressionParameters ZSTD_getCParams(int compressionLevel, unsigned long long estimatedSrcSize, size_t dictSize);
+ZSTDLIB_STATIC_API ZSTD_compressionParameters ZSTD_getCParams(int compressionLevel, unsigned long long estimatedSrcSize, size_t dictSize);
/*! ZSTD_getParams() :
* same as ZSTD_getCParams(), but @return a full `ZSTD_parameters` object instead of sub-component `ZSTD_compressionParameters`.
* All fields of `ZSTD_frameParameters` are set to default : contentSize=1, checksum=0, noDictID=0 */
-ZSTDLIB_API ZSTD_parameters ZSTD_getParams(int compressionLevel, unsigned long long estimatedSrcSize, size_t dictSize);
+ZSTDLIB_STATIC_API ZSTD_parameters ZSTD_getParams(int compressionLevel, unsigned long long estimatedSrcSize, size_t dictSize);
/*! ZSTD_checkCParams() :
* Ensure param values remain within authorized range.
* @return 0 on success, or an error code (can be checked with ZSTD_isError()) */
-ZSTDLIB_API size_t ZSTD_checkCParams(ZSTD_compressionParameters params);
+ZSTDLIB_STATIC_API size_t ZSTD_checkCParams(ZSTD_compressionParameters params);
/*! ZSTD_adjustCParams() :
* optimize params for a given `srcSize` and `dictSize`.
@@ -1634,7 +1668,7 @@ ZSTDLIB_API size_t ZSTD_checkCParams(ZSTD_compressionParameters params);
* `dictSize` must be `0` when there is no dictionary.
* cPar can be invalid : all parameters will be clamped within valid range in the @return struct.
* This function never fails (wide contract) */
-ZSTDLIB_API ZSTD_compressionParameters ZSTD_adjustCParams(ZSTD_compressionParameters cPar, unsigned long long srcSize, size_t dictSize);
+ZSTDLIB_STATIC_API ZSTD_compressionParameters ZSTD_adjustCParams(ZSTD_compressionParameters cPar, unsigned long long srcSize, size_t dictSize);
/*! ZSTD_compress_advanced() :
* Note : this function is now DEPRECATED.
@@ -1662,18 +1696,18 @@ size_t ZSTD_compress_usingCDict_advanced(ZSTD_CCtx* cctx,
/*! ZSTD_CCtx_loadDictionary_byReference() :
* Same as ZSTD_CCtx_loadDictionary(), but dictionary content is referenced, instead of being copied into CCtx.
* It saves some memory, but also requires that `dict` outlives its usage within `cctx` */
-ZSTDLIB_API size_t ZSTD_CCtx_loadDictionary_byReference(ZSTD_CCtx* cctx, const void* dict, size_t dictSize);
+ZSTDLIB_STATIC_API size_t ZSTD_CCtx_loadDictionary_byReference(ZSTD_CCtx* cctx, const void* dict, size_t dictSize);
/*! ZSTD_CCtx_loadDictionary_advanced() :
* Same as ZSTD_CCtx_loadDictionary(), but gives finer control over
* how to load the dictionary (by copy ? by reference ?)
* and how to interpret it (automatic ? force raw mode ? full mode only ?) */
-ZSTDLIB_API size_t ZSTD_CCtx_loadDictionary_advanced(ZSTD_CCtx* cctx, const void* dict, size_t dictSize, ZSTD_dictLoadMethod_e dictLoadMethod, ZSTD_dictContentType_e dictContentType);
+ZSTDLIB_STATIC_API size_t ZSTD_CCtx_loadDictionary_advanced(ZSTD_CCtx* cctx, const void* dict, size_t dictSize, ZSTD_dictLoadMethod_e dictLoadMethod, ZSTD_dictContentType_e dictContentType);
/*! ZSTD_CCtx_refPrefix_advanced() :
* Same as ZSTD_CCtx_refPrefix(), but gives finer control over
* how to interpret prefix content (automatic ? force raw mode (default) ? full mode only ?) */
-ZSTDLIB_API size_t ZSTD_CCtx_refPrefix_advanced(ZSTD_CCtx* cctx, const void* prefix, size_t prefixSize, ZSTD_dictContentType_e dictContentType);
+ZSTDLIB_STATIC_API size_t ZSTD_CCtx_refPrefix_advanced(ZSTD_CCtx* cctx, const void* prefix, size_t prefixSize, ZSTD_dictContentType_e dictContentType);
/* === experimental parameters === */
/* these parameters can be used with ZSTD_setParameter()
@@ -1712,9 +1746,15 @@ ZSTDLIB_API size_t ZSTD_CCtx_refPrefix_advanced(ZSTD_CCtx* cctx, const void* pre
* See the comments on that enum for an explanation of the feature. */
#define ZSTD_c_forceAttachDict ZSTD_c_experimentalParam4
-/* Controls how the literals are compressed (default is auto).
- * The value must be of type ZSTD_literalCompressionMode_e.
- * See ZSTD_literalCompressionMode_e enum definition for details.
+/* Controlled with ZSTD_paramSwitch_e enum.
+ * Default is ZSTD_ps_auto.
+ * Set to ZSTD_ps_disable to never compress literals.
+ * Set to ZSTD_ps_enable to always compress literals. (Note: uncompressed literals
+ * may still be emitted if huffman is not beneficial to use.)
+ *
+ * By default, in ZSTD_ps_auto, the library will decide at runtime whether to use
+ * literals compression based on the compression parameters - specifically,
+ * negative compression levels do not use literal compression.
*/
#define ZSTD_c_literalCompressionMode ZSTD_c_experimentalParam5
@@ -1777,7 +1817,7 @@ ZSTDLIB_API size_t ZSTD_CCtx_refPrefix_advanced(ZSTD_CCtx* cctx, const void* pre
*
* Note that this means that the CDict tables can no longer be copied into the
* CCtx, so the dict attachment mode ZSTD_dictForceCopy will no longer be
- * useable. The dictionary can only be attached or reloaded.
+ * usable. The dictionary can only be attached or reloaded.
*
* In general, you should expect compression to be faster--sometimes very much
* so--and CDict creation to be slightly slower. Eventually, we will probably
@@ -1866,23 +1906,26 @@ 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.
+/* ZSTD_c_useBlockSplitter
+ * Controlled with ZSTD_paramSwitch_e enum.
+ * Default is ZSTD_ps_auto.
+ * Set to ZSTD_ps_disable to never use block splitter.
+ * Set to ZSTD_ps_enable to always use block splitter.
*
- * Will attempt to split blocks in order to improve compression ratio at the cost of speed.
+ * By default, in ZSTD_ps_auto, the library will decide at runtime whether to use
+ * block splitting based on the compression parameters.
*/
-#define ZSTD_c_splitBlocks ZSTD_c_experimentalParam13
+#define ZSTD_c_useBlockSplitter ZSTD_c_experimentalParam13
/* ZSTD_c_useRowMatchFinder
- * Default is ZSTD_urm_auto.
- * Controlled with ZSTD_useRowMatchFinderMode_e enum.
+ * Controlled with ZSTD_paramSwitch_e enum.
+ * Default is ZSTD_ps_auto.
+ * Set to ZSTD_ps_disable to never use row-based matchfinder.
+ * Set to ZSTD_ps_enable to force usage of row-based matchfinder.
*
- * 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.
+ * By default, in ZSTD_ps_auto, the library will decide at runtime whether to use
+ * the row-based matchfinder based on support for SIMD instructions and the window log.
+ * Note that this only pertains to compression strategies: greedy, lazy, and lazy2
*/
#define ZSTD_c_useRowMatchFinder ZSTD_c_experimentalParam14
@@ -1911,7 +1954,7 @@ ZSTDLIB_API size_t ZSTD_CCtx_refPrefix_advanced(ZSTD_CCtx* cctx, const void* pre
* 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(const ZSTD_CCtx* cctx, ZSTD_cParameter param, int* value);
+ZSTDLIB_STATIC_API size_t ZSTD_CCtx_getParameter(const ZSTD_CCtx* cctx, ZSTD_cParameter param, int* value);
/*! ZSTD_CCtx_params :
@@ -1931,25 +1974,25 @@ ZSTDLIB_API size_t ZSTD_CCtx_getParameter(const ZSTD_CCtx* cctx, ZSTD_cParameter
* 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); /* accept NULL pointer */
+ZSTDLIB_STATIC_API ZSTD_CCtx_params* ZSTD_createCCtxParams(void);
+ZSTDLIB_STATIC_API size_t ZSTD_freeCCtxParams(ZSTD_CCtx_params* params); /* accept NULL pointer */
/*! ZSTD_CCtxParams_reset() :
* Reset params to default values.
*/
-ZSTDLIB_API size_t ZSTD_CCtxParams_reset(ZSTD_CCtx_params* params);
+ZSTDLIB_STATIC_API size_t ZSTD_CCtxParams_reset(ZSTD_CCtx_params* params);
/*! ZSTD_CCtxParams_init() :
* Initializes the compression parameters of cctxParams according to
* compression level. All other parameters are reset to their default values.
*/
-ZSTDLIB_API size_t ZSTD_CCtxParams_init(ZSTD_CCtx_params* cctxParams, int compressionLevel);
+ZSTDLIB_STATIC_API size_t ZSTD_CCtxParams_init(ZSTD_CCtx_params* cctxParams, int compressionLevel);
/*! ZSTD_CCtxParams_init_advanced() :
* Initializes the compression and frame parameters of cctxParams according to
* params. All other parameters are reset to their default values.
*/
-ZSTDLIB_API size_t ZSTD_CCtxParams_init_advanced(ZSTD_CCtx_params* cctxParams, ZSTD_parameters params);
+ZSTDLIB_STATIC_API size_t ZSTD_CCtxParams_init_advanced(ZSTD_CCtx_params* cctxParams, ZSTD_parameters params);
/*! ZSTD_CCtxParams_setParameter() : Requires v1.4.0+
* Similar to ZSTD_CCtx_setParameter.
@@ -1959,14 +2002,14 @@ ZSTDLIB_API size_t ZSTD_CCtxParams_init_advanced(ZSTD_CCtx_params* cctxParams, Z
* @result : a code representing success or failure (which can be tested with
* ZSTD_isError()).
*/
-ZSTDLIB_API size_t ZSTD_CCtxParams_setParameter(ZSTD_CCtx_params* params, ZSTD_cParameter param, int value);
+ZSTDLIB_STATIC_API size_t ZSTD_CCtxParams_setParameter(ZSTD_CCtx_params* params, ZSTD_cParameter param, int value);
/*! ZSTD_CCtxParams_getParameter() :
* Similar to ZSTD_CCtx_getParameter.
* 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(const ZSTD_CCtx_params* params, ZSTD_cParameter param, int* value);
+ZSTDLIB_STATIC_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.
@@ -1975,7 +2018,7 @@ ZSTDLIB_API size_t ZSTD_CCtxParams_getParameter(const ZSTD_CCtx_params* params,
* if nbWorkers>=1, new parameters will be picked up at next job,
* with a few restrictions (windowLog, pledgedSrcSize, nbWorkers, jobSize, and overlapLog are not updated).
*/
-ZSTDLIB_API size_t ZSTD_CCtx_setParametersUsingCCtxParams(
+ZSTDLIB_STATIC_API size_t ZSTD_CCtx_setParametersUsingCCtxParams(
ZSTD_CCtx* cctx, const ZSTD_CCtx_params* params);
/*! ZSTD_compressStream2_simpleArgs() :
@@ -1984,7 +2027,7 @@ ZSTDLIB_API size_t ZSTD_CCtx_setParametersUsingCCtxParams(
* This variant might be helpful for binders from dynamic languages
* which have troubles handling structures containing memory pointers.
*/
-ZSTDLIB_API size_t ZSTD_compressStream2_simpleArgs (
+ZSTDLIB_STATIC_API size_t ZSTD_compressStream2_simpleArgs (
ZSTD_CCtx* cctx,
void* dst, size_t dstCapacity, size_t* dstPos,
const void* src, size_t srcSize, size_t* srcPos,
@@ -2000,33 +2043,33 @@ ZSTDLIB_API size_t ZSTD_compressStream2_simpleArgs (
* Note : Frame Identifier is 4 bytes. If `size < 4`, @return will always be 0.
* Note 2 : Legacy Frame Identifiers are considered valid only if Legacy Support is enabled.
* Note 3 : Skippable Frame Identifiers are considered valid. */
-ZSTDLIB_API unsigned ZSTD_isFrame(const void* buffer, size_t size);
+ZSTDLIB_STATIC_API unsigned ZSTD_isFrame(const void* buffer, size_t size);
/*! ZSTD_createDDict_byReference() :
* Create a digested dictionary, ready to start decompression operation without startup delay.
* Dictionary content is referenced, and therefore stays in dictBuffer.
* It is important that dictBuffer outlives DDict,
* it must remain read accessible throughout the lifetime of DDict */
-ZSTDLIB_API ZSTD_DDict* ZSTD_createDDict_byReference(const void* dictBuffer, size_t dictSize);
+ZSTDLIB_STATIC_API ZSTD_DDict* ZSTD_createDDict_byReference(const void* dictBuffer, size_t dictSize);
/*! ZSTD_DCtx_loadDictionary_byReference() :
* Same as ZSTD_DCtx_loadDictionary(),
* but references `dict` content instead of copying it into `dctx`.
* This saves memory if `dict` remains around.,
* However, it's imperative that `dict` remains accessible (and unmodified) while being used, so it must outlive decompression. */
-ZSTDLIB_API size_t ZSTD_DCtx_loadDictionary_byReference(ZSTD_DCtx* dctx, const void* dict, size_t dictSize);
+ZSTDLIB_STATIC_API size_t ZSTD_DCtx_loadDictionary_byReference(ZSTD_DCtx* dctx, const void* dict, size_t dictSize);
/*! ZSTD_DCtx_loadDictionary_advanced() :
* Same as ZSTD_DCtx_loadDictionary(),
* but gives direct control over
* how to load the dictionary (by copy ? by reference ?)
* and how to interpret it (automatic ? force raw mode ? full mode only ?). */
-ZSTDLIB_API size_t ZSTD_DCtx_loadDictionary_advanced(ZSTD_DCtx* dctx, const void* dict, size_t dictSize, ZSTD_dictLoadMethod_e dictLoadMethod, ZSTD_dictContentType_e dictContentType);
+ZSTDLIB_STATIC_API size_t ZSTD_DCtx_loadDictionary_advanced(ZSTD_DCtx* dctx, const void* dict, size_t dictSize, ZSTD_dictLoadMethod_e dictLoadMethod, ZSTD_dictContentType_e dictContentType);
/*! ZSTD_DCtx_refPrefix_advanced() :
* Same as ZSTD_DCtx_refPrefix(), but gives finer control over
* how to interpret prefix content (automatic ? force raw mode (default) ? full mode only ?) */
-ZSTDLIB_API size_t ZSTD_DCtx_refPrefix_advanced(ZSTD_DCtx* dctx, const void* prefix, size_t prefixSize, ZSTD_dictContentType_e dictContentType);
+ZSTDLIB_STATIC_API size_t ZSTD_DCtx_refPrefix_advanced(ZSTD_DCtx* dctx, const void* prefix, size_t prefixSize, ZSTD_dictContentType_e dictContentType);
/*! ZSTD_DCtx_setMaxWindowSize() :
* Refuses allocating internal buffers for frames requiring a window size larger than provided limit.
@@ -2035,14 +2078,14 @@ ZSTDLIB_API size_t ZSTD_DCtx_refPrefix_advanced(ZSTD_DCtx* dctx, const void* pre
* By default, a decompression context accepts all window sizes <= (1 << ZSTD_WINDOWLOG_LIMIT_DEFAULT)
* @return : 0, or an error code (which can be tested using ZSTD_isError()).
*/
-ZSTDLIB_API size_t ZSTD_DCtx_setMaxWindowSize(ZSTD_DCtx* dctx, size_t maxWindowSize);
+ZSTDLIB_STATIC_API size_t ZSTD_DCtx_setMaxWindowSize(ZSTD_DCtx* dctx, size_t maxWindowSize);
/*! ZSTD_DCtx_getParameter() :
* Get the requested decompression parameter value, selected by enum ZSTD_dParameter,
* and store it into int* value.
* @return : 0, or an error code (which can be tested with ZSTD_isError()).
*/
-ZSTDLIB_API size_t ZSTD_DCtx_getParameter(ZSTD_DCtx* dctx, ZSTD_dParameter param, int* value);
+ZSTDLIB_STATIC_API size_t ZSTD_DCtx_getParameter(ZSTD_DCtx* dctx, ZSTD_dParameter param, int* value);
/* ZSTD_d_format
* experimental parameter,
@@ -2131,7 +2174,7 @@ size_t ZSTD_DCtx_setFormat(ZSTD_DCtx* dctx, ZSTD_format_e format);
* This can be helpful for binders from dynamic languages
* which have troubles handling structures containing memory pointers.
*/
-ZSTDLIB_API size_t ZSTD_decompressStream_simpleArgs (
+ZSTDLIB_STATIC_API size_t ZSTD_decompressStream_simpleArgs (
ZSTD_DCtx* dctx,
void* dst, size_t dstCapacity, size_t* dstPos,
const void* src, size_t srcSize, size_t* srcPos);
@@ -2205,7 +2248,7 @@ size_t ZSTD_initCStream_advanced(ZSTD_CStream* zcs,
* 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
* This prototype will generate compilation warnings.
*/
@@ -2270,7 +2313,7 @@ typedef struct {
* Note : (ingested - consumed) is amount of input data buffered internally, not yet compressed.
* Aggregates progression inside active worker threads.
*/
-ZSTDLIB_API ZSTD_frameProgression ZSTD_getFrameProgression(const ZSTD_CCtx* cctx);
+ZSTDLIB_STATIC_API ZSTD_frameProgression ZSTD_getFrameProgression(const ZSTD_CCtx* cctx);
/*! ZSTD_toFlushNow() :
* Tell how many bytes are ready to be flushed immediately.
@@ -2285,7 +2328,7 @@ ZSTDLIB_API ZSTD_frameProgression ZSTD_getFrameProgression(const ZSTD_CCtx* cctx
* therefore flush speed is limited by production speed of oldest job
* irrespective of the speed of concurrent (and newer) jobs.
*/
-ZSTDLIB_API size_t ZSTD_toFlushNow(ZSTD_CCtx* cctx);
+ZSTDLIB_STATIC_API size_t ZSTD_toFlushNow(ZSTD_CCtx* cctx);
/*===== Advanced Streaming decompression functions =====*/
@@ -2299,7 +2342,7 @@ ZSTDLIB_API size_t ZSTD_toFlushNow(ZSTD_CCtx* cctx);
* note: no dictionary will be used if dict == NULL or dictSize < 8
* Note : this prototype will be marked as deprecated and generate compilation warnings on reaching v1.5.x
*/
-ZSTDLIB_API size_t ZSTD_initDStream_usingDict(ZSTD_DStream* zds, const void* dict, size_t dictSize);
+ZSTDLIB_STATIC_API size_t ZSTD_initDStream_usingDict(ZSTD_DStream* zds, const void* dict, size_t dictSize);
/*!
* This function is deprecated, and is equivalent to:
@@ -2310,7 +2353,7 @@ ZSTDLIB_API size_t ZSTD_initDStream_usingDict(ZSTD_DStream* zds, const void* dic
* note : ddict is referenced, it must outlive decompression session
* Note : this prototype will be marked as deprecated and generate compilation warnings on reaching v1.5.x
*/
-ZSTDLIB_API size_t ZSTD_initDStream_usingDDict(ZSTD_DStream* zds, const ZSTD_DDict* ddict);
+ZSTDLIB_STATIC_API size_t ZSTD_initDStream_usingDDict(ZSTD_DStream* zds, const ZSTD_DDict* ddict);
/*!
* This function is deprecated, and is equivalent to:
@@ -2320,7 +2363,7 @@ ZSTDLIB_API size_t ZSTD_initDStream_usingDDict(ZSTD_DStream* zds, const ZSTD_DDi
* re-use decompression parameters from previous init; saves dictionary loading
* Note : this prototype will be marked as deprecated and generate compilation warnings on reaching v1.5.x
*/
-ZSTDLIB_API size_t ZSTD_resetDStream(ZSTD_DStream* zds);
+ZSTDLIB_STATIC_API size_t ZSTD_resetDStream(ZSTD_DStream* zds);
/*********************************************************************
@@ -2362,13 +2405,13 @@ 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_usingCDict(ZSTD_CCtx* cctx, const ZSTD_CDict* cdict); /**< note: fails if cdict==NULL */
-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_STATIC_API size_t ZSTD_compressBegin(ZSTD_CCtx* cctx, int compressionLevel);
+ZSTDLIB_STATIC_API size_t ZSTD_compressBegin_usingDict(ZSTD_CCtx* cctx, const void* dict, size_t dictSize, int compressionLevel);
+ZSTDLIB_STATIC_API size_t ZSTD_compressBegin_usingCDict(ZSTD_CCtx* cctx, const ZSTD_CDict* cdict); /**< note: fails if cdict==NULL */
+ZSTDLIB_STATIC_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);
+ZSTDLIB_STATIC_API size_t ZSTD_compressContinue(ZSTD_CCtx* cctx, void* dst, size_t dstCapacity, const void* src, size_t srcSize);
+ZSTDLIB_STATIC_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")
@@ -2465,24 +2508,24 @@ typedef struct {
* @return : 0, `zfhPtr` is correctly filled,
* >0, `srcSize` is too small, value is wanted `srcSize` amount,
* or an error code, which can be tested using ZSTD_isError() */
-ZSTDLIB_API size_t ZSTD_getFrameHeader(ZSTD_frameHeader* zfhPtr, const void* src, size_t srcSize); /**< doesn't consume input */
+ZSTDLIB_STATIC_API size_t ZSTD_getFrameHeader(ZSTD_frameHeader* zfhPtr, const void* src, size_t srcSize); /**< doesn't consume input */
/*! ZSTD_getFrameHeader_advanced() :
* same as ZSTD_getFrameHeader(),
* with added capability to select a format (like ZSTD_f_zstd1_magicless) */
-ZSTDLIB_API size_t ZSTD_getFrameHeader_advanced(ZSTD_frameHeader* zfhPtr, const void* src, size_t srcSize, ZSTD_format_e format);
-ZSTDLIB_API size_t ZSTD_decodingBufferSize_min(unsigned long long windowSize, unsigned long long frameContentSize); /**< when frame content size is not known, pass in frameContentSize == ZSTD_CONTENTSIZE_UNKNOWN */
+ZSTDLIB_STATIC_API size_t ZSTD_getFrameHeader_advanced(ZSTD_frameHeader* zfhPtr, const void* src, size_t srcSize, ZSTD_format_e format);
+ZSTDLIB_STATIC_API size_t ZSTD_decodingBufferSize_min(unsigned long long windowSize, unsigned long long frameContentSize); /**< when frame content size is not known, pass in frameContentSize == ZSTD_CONTENTSIZE_UNKNOWN */
-ZSTDLIB_API size_t ZSTD_decompressBegin(ZSTD_DCtx* dctx);
-ZSTDLIB_API size_t ZSTD_decompressBegin_usingDict(ZSTD_DCtx* dctx, const void* dict, size_t dictSize);
-ZSTDLIB_API size_t ZSTD_decompressBegin_usingDDict(ZSTD_DCtx* dctx, const ZSTD_DDict* ddict);
+ZSTDLIB_STATIC_API size_t ZSTD_decompressBegin(ZSTD_DCtx* dctx);
+ZSTDLIB_STATIC_API size_t ZSTD_decompressBegin_usingDict(ZSTD_DCtx* dctx, const void* dict, size_t dictSize);
+ZSTDLIB_STATIC_API size_t ZSTD_decompressBegin_usingDDict(ZSTD_DCtx* dctx, const ZSTD_DDict* ddict);
-ZSTDLIB_API size_t ZSTD_nextSrcSizeToDecompress(ZSTD_DCtx* dctx);
-ZSTDLIB_API size_t ZSTD_decompressContinue(ZSTD_DCtx* dctx, void* dst, size_t dstCapacity, const void* src, size_t srcSize);
+ZSTDLIB_STATIC_API size_t ZSTD_nextSrcSizeToDecompress(ZSTD_DCtx* dctx);
+ZSTDLIB_STATIC_API size_t ZSTD_decompressContinue(ZSTD_DCtx* dctx, void* dst, size_t dstCapacity, const void* src, size_t srcSize);
/* misc */
-ZSTDLIB_API void ZSTD_copyDCtx(ZSTD_DCtx* dctx, const ZSTD_DCtx* preparedDCtx);
+ZSTDLIB_STATIC_API void ZSTD_copyDCtx(ZSTD_DCtx* dctx, const ZSTD_DCtx* preparedDCtx);
typedef enum { ZSTDnit_frameHeader, ZSTDnit_blockHeader, ZSTDnit_block, ZSTDnit_lastBlock, ZSTDnit_checksum, ZSTDnit_skippableFrame } ZSTD_nextInputType_e;
-ZSTDLIB_API ZSTD_nextInputType_e ZSTD_nextInputType(ZSTD_DCtx* dctx);
+ZSTDLIB_STATIC_API ZSTD_nextInputType_e ZSTD_nextInputType(ZSTD_DCtx* dctx);
@@ -2519,10 +2562,10 @@ ZSTDLIB_API ZSTD_nextInputType_e ZSTD_nextInputType(ZSTD_DCtx* dctx);
*/
/*===== Raw zstd block functions =====*/
-ZSTDLIB_API size_t ZSTD_getBlockSize (const ZSTD_CCtx* cctx);
-ZSTDLIB_API size_t ZSTD_compressBlock (ZSTD_CCtx* cctx, void* dst, size_t dstCapacity, const void* src, size_t srcSize);
-ZSTDLIB_API size_t ZSTD_decompressBlock(ZSTD_DCtx* dctx, void* dst, size_t dstCapacity, const void* src, size_t srcSize);
-ZSTDLIB_API size_t ZSTD_insertBlock (ZSTD_DCtx* dctx, const void* blockStart, size_t blockSize); /**< insert uncompressed block into `dctx` history. Useful for multi-blocks decompression. */
+ZSTDLIB_STATIC_API size_t ZSTD_getBlockSize (const ZSTD_CCtx* cctx);
+ZSTDLIB_STATIC_API size_t ZSTD_compressBlock (ZSTD_CCtx* cctx, void* dst, size_t dstCapacity, const void* src, size_t srcSize);
+ZSTDLIB_STATIC_API size_t ZSTD_decompressBlock(ZSTD_DCtx* dctx, void* dst, size_t dstCapacity, const void* src, size_t srcSize);
+ZSTDLIB_STATIC_API size_t ZSTD_insertBlock (ZSTD_DCtx* dctx, const void* blockStart, size_t blockSize); /**< insert uncompressed block into `dctx` history. Useful for multi-blocks decompression. */
#endif /* ZSTD_H_ZSTD_STATIC_LINKING_ONLY */